Name: series-workflowtxg4h Phase: Succeeded StartedAt: 2026-08-22 08:30:57 +0000 UTC FinishedAt: 2026-08-22 12:44:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[0] Phase: Succeeded StartedAt: 2026-08-22 08:30:57 +0000 UTC FinishedAt: 2026-08-22 09:03:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 08:30:57 +0000 UTC FinishedAt: 2026-08-22 09:03:44 +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": "4e15e89faac9f308baeb01f46c13a051814d2449", "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": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LLC2" ], "series_id": "6af1f24c-1614-4d0c-8beb-0334e6ec7ed4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "llc_conn_handler", "llc_release_incoming_sock", "llc_accept_incoming_sock", "llc_release_incoming_children", "llc_sk_free", "llc_conn_state_process" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMTEMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGxjX2Nvbm5faGFuZGxlciYjMzQ7LAogICAgJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrJiMzNDssCiAgICAmIzM0O2xsY19hY2NlcHRfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbiYjMzQ7LAogICAgJiMzNDtsbGNfc2tfZnJlZSYjMzQ7LAogICAgJiMzNDtsbGNfY29ubl9zdGF0ZV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgTExDIHByb3RvY29sIHJlbGF0ZWQgdG8gaW5jb21pbmcgY29ubmVjdGlvbiBoYW5kbGluZy4gSXQgaW50cm9kdWNlcyBuZXcgc3RhdGUgdHJhY2tpbmcgKGBpbmNvbWluZ19zdGF0ZWApIGFuZCBhIHdvcmtxdWV1ZSAoYGluY29taW5nX3dvcmtgKSB0byBzYWZlbHkgbWFuYWdlIGFuZCBkZWZlciB0aGUgZnJlZWluZyBvZiBpbmNvbWluZyBzb2NrZXRzLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gYSBsaXN0ZW5pbmcgc29ja2V0IGlzIGNsb3NlZCB3aGlsZSBjaGlsZCBzb2NrZXRzIGFyZSBzdGlsbCBwZW5kaW5nIG9yIHF1ZXVlZC5cblxuVGhlc2UgdHlwZXMgb2YgYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbGwgbmV3bHkgaW50cm9kdWNlZCBmaWVsZHMgaW4gYHN0cnVjdCBsbGNfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdW5jdGlvbiBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHNrYiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB3b3JrcXVldWUgYW5kIHN0YXRlIG1hY2hpbmUgZm9yIGhhbmRsaW5nIGluY29taW5nIExMQyBjb25uZWN0aW9ucyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5IGxlYWtzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBjb25uZWN0aW9uIGhhbmRsaW5nIGxvZ2ljIG9mIHRoZSBMTEMgcHJvdG9jb2wsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgUEZfTExDIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ODg2NzkyZjNiMmNhMDQzNjA5ODRmZTcxNDBjYWVkZDU3MDdiMWY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDg6NDc6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaCBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcbmluZGV4IGUxYTMwMjY5NjcyMzQuLjlhY2RhMGE2ZjA2OWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG5AQCAtNiw2ICYjNDM7Niw3IEBAXG4gICogXHRcdCAyMDAxLCAyMDAyIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyBcdTAwM2NhY21lQGNvbmVjdGl2YS5jb20uYnJcdTAwM2VcbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2xsY19pZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsYy5oXHUwMDNlXG5AQCAtMTMsNiAmIzQzOzE0LDEwIEBAXG4gI2RlZmluZSBMTENfRVZFTlQgICAgICAgICAgICAgICAgMVxuICNkZWZpbmUgTExDX1BBQ0tFVCAgICAgICAgICAgICAgIDJcbiBcbiYjNDM7I2RlZmluZSBMTENfSU5DT01JTkdfTk9ORSAgICAgICAgMFxuJiM0MzsjZGVmaW5lIExMQ19JTkNPTUlOR19QRU5ESU5HICAgICAxXG4mIzQzOyNkZWZpbmUgTExDX0lOQ09NSU5HX1FVRVVFRCAgICAgIDJcbiYjNDM7XG4gI2RlZmluZSBMTEMyX1BfVElNRSAgICAgICAgICAgICAgIDJcbiAjZGVmaW5lIExMQzJfQUNLX1RJTUUgICAgICAgICAgICAgMVxuICNkZWZpbmUgTExDMl9SRUpfVElNRSAgICAgICAgICAgICAzXG5AQCAtNzIsNiAmIzQzOzc3LDkgQEAgc3RydWN0IGxsY19zb2NrIHtcbiBcdFx0XHRcdFx0ICAgICAgcmVjZWl2ZWQgYW5kIGNhdXNlZCBzZW5kaW5nIEZSTVIuXG4gXHRcdFx0XHRcdCAgICAgIFVzZWQgZm9yIHJlc2VuZGluZyBGUk1SICovXG4gXHR1MzJcdFx0ICAgIGNtc2dfZmxhZ3M7XG4mIzQzO1x0YXRvbWljX3RcdCAgICBpbmNvbWluZ19zdGF0ZTtcbiYjNDM7XHRzdHJ1Y3Qgc29ja1x0ICAgICppbmNvbWluZ19saXN0ZW5lcjtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW5jb21pbmdfd29yaztcbiBcdHN0cnVjdCBobGlzdF9ub2RlICAgZGV2X2hhc2hfbm9kZTtcbiB9O1xuIFxuQEAgLTkzLDcgJiM0MzsxMDEsMTAgQEAgc3RhdGljIF9faW5saW5lX18gY2hhciBsbGNfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IpXG4gc3RydWN0IHNvY2sgKmxsY19za19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5LFxuIFx0XHRcdCAgc3RydWN0IHByb3RvICpwcm90LCBpbnQga2Vybik7XG4gdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTtcbi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzayk7XG4mIzQzO3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpO1xuJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbiYjNDM7dm9pZCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbiYjNDM7dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spO1xuIFxuIHZvaWQgbGxjX3NrX3Jlc2V0KHN0cnVjdCBzb2NrICpzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmNcbmluZGV4IGIwNDQ3YzMzZGJmMDkuLjdkMjQ2ZDRkMjgxYmIgMTAwNjQ0XG4tLS0gYS9uZXQvbGxjL2FmX2xsYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbGxjL2FmX2xsYy5jXG5AQCAtMTk2LDYgJiM0MzsxOTYsNyBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4ge1xuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjO1xuJiM0MztcdGJvb2wgbGlzdGVuZXI7XG4gXG4gXHRpZiAodW5saWtlbHkoc2sgPT0gTlVMTCkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTIwNiw2ICYjNDM7MjA3LDkgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0XHRsbGMtXHUwMDNlbGFkZHIubHNhcCwgbGxjLVx1MDAzZWRhZGRyLmxzYXApO1xuIFx0aWYgKCFsbGNfc2VuZF9kaXNjKHNrKSlcbiBcdFx0bGxjX3VpX3dhaXRfZm9yX2Rpc2Moc2ssIFJFQURfT05DRShzay1cdTAwM2Vza19yY3Z0aW1lbykpO1xuJiM0MztcdGxpc3RlbmVyID0gc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTjtcbiYjNDM7XHRpZiAobGlzdGVuZXIpXG4mIzQzO1x0XHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xuIFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkge1xuIFx0XHRzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLVx1MDAzZXNhcDtcbiBcbkBAIC0yMTQsMTYgJiM0MzsyMTgsMTggQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0XHQgKi9cbiBcdFx0bGxjX3NhcF9ob2xkKHNhcCk7XG4gXHRcdGxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtXHUwMDNlc2FwLCBzayk7XG4mIzQzO1x0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzayk7XG4gXHRcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRcdGxsY19zYXBfcHV0KHNhcCk7XG4gXHR9IGVsc2Uge1xuJiM0MztcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0fVxuIFx0bmV0ZGV2X3B1dChsbGMtXHUwMDNlZGV2LCBcdTAwMjZsbGMtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIFx0c29ja19wdXQoc2spO1xuIFx0c29ja19vcnBoYW4oc2spO1xuIFx0c29jay1cdTAwM2VzayA9IE5VTEw7XG4tXHRsbGNfc2tfZnJlZShzayk7XG4mIzQzO1x0bGxjX3NrX2ZyZWUoc2ssIHRydWUpO1xuIG91dDpcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03MjIsNiAmIzQzOzcyOCw3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFx0XHRnb3RvIGZyZWVzO1xuIFx0cmMgPSAwO1xuIFx0bmV3c2sgPSBza2ItXHUwMDNlc2s7XG4mIzQzO1x0bGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbiBcdC8qIGF0dGFjaCBjb25uZWN0aW9uIHRvIGEgbmV3IHNvY2tldC4gKi9cbiBcdGxsY191aV9za19pbml0KG5ld3NvY2ssIG5ld3NrKTtcbiBcdHNvY2tfcmVzZXRfZmxhZyhuZXdzaywgU09DS19aQVBQRUQpO1xuZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2Nvbm4uYyBiL25ldC9sbGMvbGxjX2Nvbm4uY1xuaW5kZXggMjYwNDYwZDUwZjU0Yy4uNDI3MmNlNGQ0YTFjYSAxMDA2NDRcbi0tLSBhL25ldC9sbGMvbGxjX2Nvbm4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2xsYy9sbGNfY29ubi5jXG5AQCAtMzIsNiAmIzQzOzMyLDcgQEAgc3RhdGljIGludCBsbGNfZXhlY19jb25uX3RyYW5zX2FjdGlvbnMoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpldik7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyAqbGxjX3F1YWxpZnlfY29ubl9ldihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjNDM7c3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIFxuIC8qIE9mZnNldCB0YWJsZSBvbiBjb25uZWN0aW9uIHN0YXRlcyB0cmFuc2l0aW9uIGRpYWdyYW0gKi9cbiBzdGF0aWMgaW50IGxsY19vZmZzZXRfdGFibGVbTkJSX0NPTk5fU1RBVEVTXVtOQlJfQ09OTl9FVl07XG5AQCAtODgsNiAmIzQzOzg5LDExIEBAIGludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0ICogc2tiLVx1MDAzZXNrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluXG4gXHRcdCAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lXG4gXHRcdCAqL1xuJiM0MztcdFx0aWYgKHNrICE9IHNrYi1cdTAwM2VzayBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbiYjNDM7XHRcdFx0YXRvbWljX3NldChcdTAwMjZsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSxcbiYjNDM7XHRcdFx0XHQgICBMTENfSU5DT01JTkdfUVVFVUVEKTtcbiBcdFx0c2tiX2dldChza2IpO1xuIFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLCBza2IpO1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuQEAgLTM1NCw3ICYjNDM7MzYwLDggQEAgc3RhdGljIGludCBsbGNfY29ubl9zZXJ2aWNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiBcdGludCByYyA9IDE7XG4gXG4tXHRpZiAobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSBOQlJfQ09OTl9TVEFURVMpXG4mIzQzO1x0aWYgKGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNIHx8XG4mIzQzO1x0ICAgIGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgTkJSX0NPTk5fU1RBVEVTKVxuIFx0XHRnb3RvIG91dDtcbiBcdHJjID0gMDtcbiBcdHRyYW5zID0gbGxjX3F1YWxpZnlfY29ubl9ldihzaywgc2tiKTtcbkBAIC03NjUsMjcgJiM0Mzs3NzIsMTUzIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayxcbiBcdG1lbWNweShcdTAwMjZuZXdsbGMtXHUwMDNlbGFkZHIsIGRhZGRyLCBzaXplb2YobmV3bGxjLVx1MDAzZWxhZGRyKSk7XG4gXHRtZW1jcHkoXHUwMDI2bmV3bGxjLVx1MDAzZWRhZGRyLCBzYWRkciwgc2l6ZW9mKG5ld2xsYy1cdTAwM2VkYWRkcikpO1xuIFx0bmV3bGxjLVx1MDAzZWRldiA9IGRldjtcbiYjNDM7XHRuZXdsbGMtXHUwMDNlaW5jb21pbmdfbGlzdGVuZXIgPSBzaztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNm5ld2xsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1BFTkRJTkcpO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZuZXdsbGMtXHUwMDNlaW5jb21pbmdfd29yaywgbGxjX2luY29taW5nX3NvY2tfd29yayk7XG4mIzQzO1x0c29ja19ob2xkKHNrKTtcbiBcdGRldl9ob2xkKGRldik7XG4gXHRsbGNfc2FwX2FkZF9zb2NrZXQobGxjLVx1MDAzZXNhcCwgbmV3c2spO1xuIG91dDpcbiBcdHJldHVybiBuZXdzaztcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxsY19zb2NrICpsbGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxsY19zb2NrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgaW5jb21pbmdfd29yayk7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2bGxjLVx1MDAzZXNrO1xuJiM0MztcdHN0cnVjdCBzb2NrICpsaXN0ZW5lciA9IGxsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcjtcbiYjNDM7XG4mIzQzO1x0bG9ja19zb2NrKGxpc3RlbmVyKTtcbiYjNDM7XHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4mIzQzO1x0bGxjX3NrX2ZyZWUoc2ssIGZhbHNlKTtcbiYjNDM7XHRzb2NrX29ycGhhbihzayk7XG4mIzQzO1x0cmVsZWFzZV9zb2NrKHNrKTtcbiYjNDM7XHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTtcbiYjNDM7XHRyZWxlYXNlX3NvY2sobGlzdGVuZXIpO1xuJiM0MztcdGRldl9wdXQobGxjLVx1MDAzZWRldik7XG4mIzQzO1x0bGxjLVx1MDAzZWRldiA9IE5VTEw7XG4mIzQzO1x0c29ja19wdXQoc2spO1xuJiM0MztcdHNvY2tfcHV0KGxpc3RlbmVyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGF0b21pY194Y2hnKFx1MDAyNmxsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX05PTkUpID09XG4mIzQzO1x0ICAgIExMQ19JTkNPTUlOR19OT05FKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKGxsYy1cdTAwM2VzdGF0ZSwgTExDX0NPTk5fT1VUX09GX1NWQyk7XG4mIzQzO1x0c29ja19ob2xkKHNrKTtcbiYjNDM7XHRsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLVx1MDAzZXNhcCwgc2spO1xuJiM0MztcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bGxjLVx1MDAzZWluY29taW5nX3dvcmspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGxsY19hY2NlcHRfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4mIzQzO1xuJiM0MztcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZsbGMtXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19OT05FKSAhPVxuJiM0MztcdCAgICBMTENfSU5DT01JTkdfTk9ORSlcbiYjNDM7XHRcdHNvY2tfcHV0KGxsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza2ItXHUwMDNlc2s7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5ld3NrIFx1MDAyNlx1MDAyNiBuZXdzayAhPSBzaykge1xuJiM0MztcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbiYjNDM7XHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4mIzQzO1x0XHRcdCAgICBMTENfSU5DT01JTkdfTk9ORSlcbiYjNDM7XHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0fVxuJiM0MztcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGlzIG1pcnJvcnMgdGhlIEFETS1zdGF0ZSBETSBhY3Rpb25zLCBidXQgYSBsaXN0ZW5lciBoYXMgbm8gcGVlclxuJiM0MzsgKiBhZGRyZXNzIGluIGxsYy1cdTAwM2VkYWRkciB5ZXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpuc2tiO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG4mIzQzO1x0aWYgKCFuc2tiKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbiYjNDM7XHRcdFx0ICAgIHNhZGRyLVx1MDAzZWxzYXAsIExMQ19QRFVfUlNQKTtcbiYjNDM7XHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcbiYjNDM7XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgc2FkZHItXHUwMDNlbWFjKTtcbiYjNDM7XHRpZiAodW5saWtlbHkocmMpKVxuJiM0MztcdFx0a2ZyZWVfc2tiKG5za2IpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGRldl9xdWV1ZV94bWl0KG5za2IpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBsbGNfYWRkciBzYWRkciwgZGFkZHI7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrLCAqbmV3c2sgPSBOVUxMO1xuJiM0MztcdGJvb2wgbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuJiM0MztcdGJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7XG4gXG4gXHRsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgXHUwMDI2c2FkZHIubHNhcCk7XG4gXHRsbGNfcGR1X2RlY29kZV9kYShza2IsIGRhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgXHUwMDI2ZGFkZHIubHNhcCk7XG4gXG4mIzQzO2xvb2t1cDpcbiBcdHNrID0gX19sbGNfbG9va3VwKHNhcCwgXHUwMDI2c2FkZHIsIFx1MDAyNmRhZGRyLCBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpKTtcbiBcdGlmICghc2spXG4gXHRcdGdvdG8gZHJvcDtcbiBcbiYjNDM7XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKHNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbiYjNDM7XHRcdG5ld3NrID0gc2s7XG4mIzQzO1x0XHRiaF9sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4mIzQzO1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbiYjNDM7XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRzb2NrX3B1dChuZXdzayk7XG4mIzQzO1x0XHRcdG5ld3NrID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBsb29rdXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzayA9IGxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfbGlzdGVuZXI7XG4mIzQzO1x0XHRzb2NrX2hvbGQoc2spO1xuJiM0MztcdFx0bmV3c2tfbG9va3VwX3JlZiA9IHRydWU7XG4mIzQzO1x0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGJoX2xvY2tfc29jayhzayk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpXG4mIzQzO1x0XHRnb3RvIGRyb3BfdW5sb2NrO1xuJiM0MztcdGlmIChuZXdza19sb29rdXBfcmVmKSB7XG4mIzQzO1x0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbiYjNDM7XHRcdG5ld3NrX2xvY2tlZCA9IHRydWU7XG4mIzQzO1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbiYjNDM7XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbiYjNDM7XHRcdFx0Z290byByZXRyeV91bmxvY2s7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuJiM0MztcdFx0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpIHtcbiYjNDM7XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFx0LypcbiBcdCAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGF0IHRoZSB1cHBlciBsYXllciAtXHUwMDNlYWNjZXB0XG4gXHQgKiBtZXRob2QgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBQUk9DT00gc3RhdGUgbWFjaGluZSB3b3JrczpcbkBAIC03OTUsMTAgJiM0Mzs5MjgsMjUgQEAgdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHQgKiBpbiB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBwcml2YXRlIGFyZWEuIC1hY21lXG4gXHQgKi9cbiBcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSkge1xuLVx0XHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi1cdTAwM2VkZXYsXG4tXHRcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZzYWRkciwgXHUwMDI2ZGFkZHIpO1xuLVx0XHRpZiAoIW5ld3NrKVxuLVx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0XHRpZiAoIW5ld3NrKSB7XG4mIzQzO1x0XHRcdGlmIChsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xuJiM0MztcdFx0XHRcdGlmICghbGxjX2Nvbm5fZXZfcnhfZGlzY19jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xuJiM0MztcdFx0XHRcdFx0dTggZl9iaXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRcdFx0bGxjX3BkdV9kZWNvZGVfcGZfYml0KHNrYiwgXHUwMDI2Zl9iaXQpO1xuJiM0MztcdFx0XHRcdFx0bGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsIFx1MDAyNnNhZGRyLCBmX2JpdCk7XG4mIzQzO1x0XHRcdFx0fSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7XG4mIzQzO1x0XHRcdFx0XHRsbGNfY29ubl9zZW5kX2RtX3JzcChzYXAsIHNrYiwgXHUwMDI2c2FkZHIsIDEpO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdG5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItXHUwMDNlZGV2LCBcdTAwMjZzYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgXHUwMDI2ZGFkZHIpO1xuJiM0MztcdFx0XHRpZiAoIW5ld3NrKVxuJiM0MztcdFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuJiM0MztcdFx0XHRuZXdza19sb2NrZWQgPSB0cnVlO1xuJiM0MztcdFx0fVxuIFx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuQEAgLTgxMywxOCAmIzQzOzk2MSw0NiBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZXNrID0gc2s7XG4gXHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0gc29ja19lZnJlZTtcbiBcdH1cbi1cdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSlcbiYjNDM7XHRpZiAodW5saWtlbHkobGxjX3NrKHNrYi1cdTAwM2VzayktXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkpIHtcbiYjNDM7XHRcdGlmIChuZXdzaylcbiYjNDM7XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRlbHNlIGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2soc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxuJiM0MztcdFx0XHQgTExDX0lOQ09NSU5HX05PTkUpXG4mIzQzO1x0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spO1xuJiM0MztcdFx0Z290byBkcm9wX3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7XG4gXHRcdGxsY19jb25uX3Jjdihzaywgc2tiKTtcbi1cdGVsc2Uge1xuJiM0MztcdFx0aWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4mIzQzO1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4mIzQzO1x0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdGRwcmludGsoXCYjMzQ7JXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGxsY19zZXRfYmFja2xvZ190eXBlKHNrYiwgTExDX1BBQ0tFVCk7XG4tXHRcdGlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKSkpXG4mIzQzO1x0XHRpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpKSB7XG4mIzQzO1x0XHRcdGlmIChuZXdzaylcbiYjNDM7XHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbiBcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuJiM0MztcdFx0fVxuIFx0fVxuIG91dDpcbiYjNDM7XHRpZiAobmV3c2tfbG9ja2VkKVxuJiM0MztcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuIFx0YmhfdW5sb2NrX3NvY2soc2spO1xuIFx0c29ja19wdXQoc2spO1xuJiM0MztcdGlmIChuZXdza19sb29rdXBfcmVmKVxuJiM0MztcdFx0c29ja19wdXQobmV3c2spO1xuIFx0cmV0dXJuO1xuJiM0MztyZXRyeV91bmxvY2s6XG4mIzQzO1x0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdG5ld3NrX2xvY2tlZCA9IGZhbHNlO1xuJiM0MztcdGJoX3VubG9ja19zb2NrKHNrKTtcbiYjNDM7XHRzb2NrX3B1dChzayk7XG4mIzQzO1x0c29ja19wdXQobmV3c2spO1xuJiM0MztcdG5ld3NrID0gTlVMTDtcbiYjNDM7XHRuZXdza19sb29rdXBfcmVmID0gZmFsc2U7XG4mIzQzO1x0Z290byBsb29rdXA7XG4gZHJvcDpcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuO1xuQEAgLTg1MiwxMiAmIzQzOzEwMjgsNTMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdGludCByYyA9IDA7XG4gXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4mIzQzO1x0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVx1MDAzZXNrO1xuIFxuIFx0aWYgKGxpa2VseShsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX1BBQ0tFVCkpIHtcbi1cdFx0aWYgKGxpa2VseShsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIDEpKSAvKiBub3QgY2xvc2VkICovXG4mIzQzO1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuJiM0MztcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4mIzQzO1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuJiM0MztcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbiYjNDM7XHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4mIzQzO1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fFxuJiM0MztcdFx0XHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuJiM0MztcdFx0XHQgICAgbGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XG4mIzQzO1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpO1xuLVx0XHRlbHNlXG4mIzQzO1x0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuJiM0MztcdFx0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4mIzQzO1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuJiM0MztcdFx0XHQgICBMTENfSU5DT01JTkdfUVVFVUVEKSB7XG4mIzQzO1x0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4mIzQzO1x0XHRcdGlmIChsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzYz0gTExDX0NPTk5fU1RBVEVfQURNKSB7XG4mIzQzO1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTtcbiYjNDM7XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpIHtcbiYjNDM7XHRcdFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdH1cbiBcdH0gZWxzZSBpZiAobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19FVkVOVCkge1xuIFx0XHQvKiB0aW1lciBleHBpcmF0aW9uIGV2ZW50ICovXG4gXHRcdGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkgIC8qIG5vdCBjbG9zZWQgKi9cbkBAIC04NzAsNiAmIzQzOzEwODcsMjQgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIG91dDpcbiBcdHJldHVybiByYztcbiYjNDM7cmV0cnk6XG4mIzQzO1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4mIzQzO1x0ICAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcbiYjNDM7XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuJiM0MztcdFx0aWYgKGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNlIExMQ19DT05OX1NUQVRFX0FETSlcbiYjNDM7XHRcdFx0cmMgPSBsbGNfY29ubl9yY3YobmV3c2ssIHNrYik7XG4mIzQzO1x0XHRlbHNlIHtcbiYjNDM7XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiBvdXRfa2ZyZWVfc2tiOlxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRnb3RvIG91dDtcbkBAIC05NTksMTcgJiM0MzsxMTk0LDE4IEBAIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYylcbiBcbiAvKipcbiAgKlx0bGxjX3NrX2ZyZWUgLSBGcmVlcyBhIExMQyBzb2NrZXRcbi0gKlx0QHNrOiAtIHNvY2tldCB0byBmcmVlXG4mIzQzOyAqXHRAc2s6IHNvY2tldCB0byBmcmVlXG4mIzQzOyAqXHRAc3luYzogd2hldGhlciB0byBzeW5jaHJvbm91c2x5IHN0b3AgdGltZXJzXG4gICpcbi0gKlx0RnJlZXMgYSBMTEMgc29ja2V0XG4mIzQzOyAqXHRGcmVlcyBhIExMQyBzb2NrZXQuXG4gICovXG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXG4ge1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuIFxuIFx0bGxjLVx1MDAzZXN0YXRlID0gTExDX0NPTk5fT1VUX09GX1NWQztcbiBcdC8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi9cbi1cdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpO1xuJiM0MztcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHN5bmMpO1xuICNpZmRlZiBERUJVR19MTENfQ09OTl9BTExPQ1xuIFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDslczogdW5hY2txPSVkLCB0eHE9JWRcXG5cJiMzNDssIF9fZnVuY19fLFxuIFx0XHRza2JfcXVldWVfbGVuKFx1MDAyNmxsYy1cdTAwM2VwZHVfdW5hY2tfcSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMTEMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGxjX2Nvbm5faGFuZGxlciYjMzQ7LAogICAgJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrJiMzNDssCiAgICAmIzM0O2xsY19hY2NlcHRfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbiYjMzQ7LAogICAgJiMzNDtsbGNfc2tfZnJlZSYjMzQ7LAogICAgJiMzNDtsbGNfY29ubl9zdGF0ZV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYyBvZiB0aGUgTExDIHByb3RvY29sLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTg4Njc5MmYzYjJjYTA0MzYwOTg0ZmU3MTQwY2FlZGQ1NzA3YjFmOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDA4OjQ3OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaCBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmgKaW5kZXggZTFhMzAyNjk2NzIzNC4uOWFjZGEwYTZmMDY5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oCkBAIC02LDYgJiM0Mzs2LDcgQEAKICAqIAkJIDIwMDEsIDIwMDIgYnkgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvICZsdDthY21lQGNvbmVjdGl2YS5jb20uYnImZ3Q7CiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC90aW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbGxjX2lmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sbGMuaCZndDsKQEAgLTEzLDYgJiM0MzsxNCwxMCBAQAogI2RlZmluZSBMTENfRVZFTlQgICAgICAgICAgICAgICAgMQogI2RlZmluZSBMTENfUEFDS0VUICAgICAgICAgICAgICAgMgogCiYjNDM7I2RlZmluZSBMTENfSU5DT01JTkdfTk9ORSAgICAgICAgMAomIzQzOyNkZWZpbmUgTExDX0lOQ09NSU5HX1BFTkRJTkcgICAgIDEKJiM0MzsjZGVmaW5lIExMQ19JTkNPTUlOR19RVUVVRUQgICAgICAyCiYjNDM7CiAjZGVmaW5lIExMQzJfUF9USU1FICAgICAgICAgICAgICAgMgogI2RlZmluZSBMTEMyX0FDS19USU1FICAgICAgICAgICAgIDEKICNkZWZpbmUgTExDMl9SRUpfVElNRSAgICAgICAgICAgICAzCkBAIC03Miw2ICYjNDM7NzcsOSBAQCBzdHJ1Y3QgbGxjX3NvY2sgewogCQkJCQkgICAgICByZWNlaXZlZCBhbmQgY2F1c2VkIHNlbmRpbmcgRlJNUi4KIAkJCQkJICAgICAgVXNlZCBmb3IgcmVzZW5kaW5nIEZSTVIgKi8KIAl1MzIJCSAgICBjbXNnX2ZsYWdzOwomIzQzOwlhdG9taWNfdAkgICAgaW5jb21pbmdfc3RhdGU7CiYjNDM7CXN0cnVjdCBzb2NrCSAgICAqaW5jb21pbmdfbGlzdGVuZXI7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCBpbmNvbWluZ193b3JrOwogCXN0cnVjdCBobGlzdF9ub2RlICAgZGV2X2hhc2hfbm9kZTsKIH07CiAKQEAgLTkzLDcgJiM0MzsxMDEsMTAgQEAgc3RhdGljIF9faW5saW5lX18gY2hhciBsbGNfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IpCiBzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksCiAJCQkgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pOwogdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTsKLXZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKTsKJiM0Mzt2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTsKJiM0Mzt2b2lkIGxsY19hY2NlcHRfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spOwomIzQzO3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKTsKIAogdm9pZCBsbGNfc2tfcmVzZXQoc3RydWN0IHNvY2sgKnNrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmMKaW5kZXggYjA0NDdjMzNkYmYwOS4uN2QyNDZkNGQyODFiYiAxMDA2NDQKLS0tIGEvbmV0L2xsYy9hZl9sbGMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbGxjL2FmX2xsYy5jCkBAIC0xOTYsNiAmIzQzOzE5Niw3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLSZndDtzazsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYzsKJiM0MzsJYm9vbCBsaXN0ZW5lcjsKIAogCWlmICh1bmxpa2VseShzayA9PSBOVUxMKSkKIAkJZ290byBvdXQ7CkBAIC0yMDYsNiAmIzQzOzIwNyw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIAkJbGxjLSZndDtsYWRkci5sc2FwLCBsbGMtJmd0O2RhZGRyLmxzYXApOwogCWlmICghbGxjX3NlbmRfZGlzYyhzaykpCiAJCWxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdnRpbWVvKSk7CiYjNDM7CWxpc3RlbmVyID0gc2stJmd0O3NrX3N0YXRlID09IFRDUF9MSVNURU47CiYjNDM7CWlmIChsaXN0ZW5lcikKJiM0MzsJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7CiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkgewogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLSZndDtzYXA7CiAKQEAgLTIxNCwxNiAmIzQzOzIxOCwxOCBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAJCSAqLwogCQlsbGNfc2FwX2hvbGQoc2FwKTsKIAkJbGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy0mZ3Q7c2FwLCBzayk7CiYjNDM7CQlsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzayk7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCWxsY19zYXBfcHV0KHNhcCk7CiAJfSBlbHNlIHsKJiM0MzsJCWxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAl9CiAJbmV0ZGV2X3B1dChsbGMtJmd0O2RldiwgJmFtcDtsbGMtJmd0O2Rldl90cmFja2VyKTsKIAlzb2NrX3B1dChzayk7CiAJc29ja19vcnBoYW4oc2spOwogCXNvY2stJmd0O3NrID0gTlVMTDsKLQlsbGNfc2tfZnJlZShzayk7CiYjNDM7CWxsY19za19mcmVlKHNrLCB0cnVlKTsKIG91dDoKIAlyZXR1cm4gMDsKIH0KQEAgLTcyMiw2ICYjNDM7NzI4LDcgQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAJCWdvdG8gZnJlZXM7CiAJcmMgPSAwOwogCW5ld3NrID0gc2tiLSZndDtzazsKJiM0MzsJbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKTsKIAkvKiBhdHRhY2ggY29ubmVjdGlvbiB0byBhIG5ldyBzb2NrZXQuICovCiAJbGxjX3VpX3NrX2luaXQobmV3c29jaywgbmV3c2spOwogCXNvY2tfcmVzZXRfZmxhZyhuZXdzaywgU09DS19aQVBQRUQpOwpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jCmluZGV4IDI2MDQ2MGQ1MGY1NGMuLjQyNzJjZTRkNGExY2EgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2Nvbm4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbGxjL2xsY19jb25uLmMKQEAgLTMyLDYgJiM0MzszMiw3IEBAIHN0YXRpYyBpbnQgbGxjX2V4ZWNfY29ubl90cmFuc19hY3Rpb25zKHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKmV2KTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgKmxsY19xdWFsaWZ5X2Nvbm5fZXYoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogLyogT2Zmc2V0IHRhYmxlIG9uIGNvbm5lY3Rpb24gc3RhdGVzIHRyYW5zaXRpb24gZGlhZ3JhbSAqLwogc3RhdGljIGludCBsbGNfb2Zmc2V0X3RhYmxlW05CUl9DT05OX1NUQVRFU11bTkJSX0NPTk5fRVZdOwpAQCAtODgsNiAmIzQzOzg5LDExIEBAIGludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJICogc2tiLSZndDtzayBwb2ludGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBpbgogCQkgKiBsbGNfY29ubl9oYW5kbGVyLiAtYWNtZQogCQkgKi8KJiM0MzsJCWlmIChzayAhPSBza2ItJmd0O3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhza2ItJmd0O3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpCiYjNDM7CQkJYXRvbWljX3NldCgmYW1wO2xsY19zayhza2ItJmd0O3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUsCiYjNDM7CQkJCSAgIExMQ19JTkNPTUlOR19RVUVVRUQpOwogCQlza2JfZ2V0KHNrYik7CiAJCXNrYl9xdWV1ZV90YWlsKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUsIHNrYik7CiAJCXNrLSZndDtza19zdGF0ZV9jaGFuZ2Uoc2spOwpAQCAtMzU0LDcgJiM0MzszNjAsOCBAQCBzdGF0aWMgaW50IGxsY19jb25uX3NlcnZpY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAlpbnQgcmMgPSAxOwogCi0JaWYgKGxsYy0mZ3Q7c3RhdGUgJmd0OyBOQlJfQ09OTl9TVEFURVMpCiYjNDM7CWlmIChsbGMtJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNIHx8CiYjNDM7CSAgICBsbGMtJmd0O3N0YXRlICZndDsgTkJSX0NPTk5fU1RBVEVTKQogCQlnb3RvIG91dDsKIAlyYyA9IDA7CiAJdHJhbnMgPSBsbGNfcXVhbGlmeV9jb25uX2V2KHNrLCBza2IpOwpAQCAtNzY1LDI3ICYjNDM7NzcyLDE1MyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKmxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2ssCiAJbWVtY3B5KCZhbXA7bmV3bGxjLSZndDtsYWRkciwgZGFkZHIsIHNpemVvZihuZXdsbGMtJmd0O2xhZGRyKSk7CiAJbWVtY3B5KCZhbXA7bmV3bGxjLSZndDtkYWRkciwgc2FkZHIsIHNpemVvZihuZXdsbGMtJmd0O2RhZGRyKSk7CiAJbmV3bGxjLSZndDtkZXYgPSBkZXY7CiYjNDM7CW5ld2xsYy0mZ3Q7aW5jb21pbmdfbGlzdGVuZXIgPSBzazsKJiM0MzsJYXRvbWljX3NldCgmYW1wO25ld2xsYy0mZ3Q7aW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19QRU5ESU5HKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bmV3bGxjLSZndDtpbmNvbWluZ193b3JrLCBsbGNfaW5jb21pbmdfc29ja193b3JrKTsKJiM0MzsJc29ja19ob2xkKHNrKTsKIAlkZXZfaG9sZChkZXYpOwogCWxsY19zYXBfYWRkX3NvY2tldChsbGMtJmd0O3NhcCwgbmV3c2spOwogb3V0OgogCXJldHVybiBuZXdzazsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxsY19zb2NrLAomIzQzOwkJCQkJCSAgICBpbmNvbWluZ193b3JrKTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtsbGMtJmd0O3NrOwomIzQzOwlzdHJ1Y3Qgc29jayAqbGlzdGVuZXIgPSBsbGMtJmd0O2luY29taW5nX2xpc3RlbmVyOwomIzQzOwomIzQzOwlsb2NrX3NvY2sobGlzdGVuZXIpOwomIzQzOwlsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiYjNDM7CWxsY19za19mcmVlKHNrLCBmYWxzZSk7CiYjNDM7CXNvY2tfb3JwaGFuKHNrKTsKJiM0MzsJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7CiYjNDM7CXJlbGVhc2Vfc29jayhsaXN0ZW5lcik7CiYjNDM7CWRldl9wdXQobGxjLSZndDtkZXYpOwomIzQzOwlsbGMtJmd0O2RldiA9IE5VTEw7CiYjNDM7CXNvY2tfcHV0KHNrKTsKJiM0MzsJc29ja19wdXQobGlzdGVuZXIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwomIzQzOwomIzQzOwlpZiAoYXRvbWljX3hjaGcoJmFtcDtsbGMtJmd0O2luY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgPT0KJiM0MzsJICAgIExMQ19JTkNPTUlOR19OT05FKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGxsYy0mZ3Q7c3RhdGUsIExMQ19DT05OX09VVF9PRl9TVkMpOwomIzQzOwlzb2NrX2hvbGQoc2spOwomIzQzOwlsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLSZndDtzYXAsIHNrKTsKJiM0MzsJc2NoZWR1bGVfd29yaygmYW1wO2xsYy0mZ3Q7aW5jb21pbmdfd29yayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKJiM0MzsKJiM0MzsJaWYgKGF0b21pY194Y2hnKCZhbXA7bGxjLSZndDtpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX05PTkUpICE9CiYjNDM7CSAgICBMTENfSU5DT01JTkdfTk9ORSkKJiM0MzsJCXNvY2tfcHV0KGxsYy0mZ3Q7aW5jb21pbmdfbGlzdGVuZXIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSkpIHsKJiM0MzsJCXN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi0mZ3Q7c2s7CiYjNDM7CiYjNDM7CQlpZiAobmV3c2sgJmFtcDsmYW1wOyBuZXdzayAhPSBzaykgewomIzQzOwkJCWJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spOwomIzQzOwkJCWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJCSAgICBMTENfSU5DT01JTkdfTk9ORSkKJiM0MzsJCQkJbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7CiYjNDM7CQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJfQomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CX0KJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhpcyBtaXJyb3JzIHRoZSBBRE0tc3RhdGUgRE0gYWN0aW9ucywgYnV0IGEgbGlzdGVuZXIgaGFzIG5vIHBlZXIKJiM0MzsgKiBhZGRyZXNzIGluIGxsYy0mZ3Q7ZGFkZHIgeWV0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGxsY19jb25uX3NlbmRfZG1fcnNwKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpuc2tiOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CW5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLSZndDtkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTsKJiM0MzsJaWYgKCFuc2tiKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtJmd0O2xhZGRyLmxzYXAsCiYjNDM7CQkJICAgIHNhZGRyLSZndDtsc2FwLCBMTENfUERVX1JTUCk7CiYjNDM7CWxsY19wZHVfaW5pdF9hc19kbV9yc3AobnNrYiwgZl9iaXQpOwomIzQzOwlyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLSZndDtkZXYtJmd0O2Rldl9hZGRyLCBzYWRkci0mZ3Q7bWFjKTsKJiM0MzsJaWYgKHVubGlrZWx5KHJjKSkKJiM0MzsJCWtmcmVlX3NrYihuc2tiKTsKJiM0MzsJZWxzZQomIzQzOwkJZGV2X3F1ZXVlX3htaXQobnNrYik7CiYjNDM7fQomIzQzOwogdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGxsY19hZGRyIHNhZGRyLCBkYWRkcjsKLQlzdHJ1Y3Qgc29jayAqc2s7CiYjNDM7CXN0cnVjdCBzb2NrICpzaywgKm5ld3NrID0gTlVMTDsKJiM0MzsJYm9vbCBuZXdza19sb29rdXBfcmVmID0gZmFsc2U7CiYjNDM7CWJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7CiAKIAlsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7CiAJbGxjX3BkdV9kZWNvZGVfc3NhcChza2IsICZhbXA7c2FkZHIubHNhcCk7CiAJbGxjX3BkdV9kZWNvZGVfZGEoc2tiLCBkYWRkci5tYWMpOwogCWxsY19wZHVfZGVjb2RlX2RzYXAoc2tiLCAmYW1wO2RhZGRyLmxzYXApOwogCiYjNDM7bG9va3VwOgogCXNrID0gX19sbGNfbG9va3VwKHNhcCwgJmFtcDtzYWRkciwgJmFtcDtkYWRkciwgZGV2X25ldChza2ItJmd0O2RldikpOwogCWlmICghc2spCiAJCWdvdG8gZHJvcDsKIAomIzQzOwlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2soc2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7CiYjNDM7CQluZXdzayA9IHNrOwomIzQzOwkJYmhfbG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7CiYjNDM7CQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCXNvY2tfcHV0KG5ld3NrKTsKJiM0MzsJCQluZXdzayA9IE5VTEw7CiYjNDM7CQkJZ290byBsb29rdXA7CiYjNDM7CQl9CiYjNDM7CQlzayA9IGxsY19zayhuZXdzayktJmd0O2luY29taW5nX2xpc3RlbmVyOwomIzQzOwkJc29ja19ob2xkKHNrKTsKJiM0MzsJCW5ld3NrX2xvb2t1cF9yZWYgPSB0cnVlOwomIzQzOwkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwl9CiYjNDM7CiAJYmhfbG9ja19zb2NrKHNrKTsKJiM0MzsJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfTElTVEVOICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSkKJiM0MzsJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CWlmIChuZXdza19sb29rdXBfcmVmKSB7CiYjNDM7CQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCW5ld3NrX2xvY2tlZCA9IHRydWU7CiYjNDM7CQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgIT0KJiM0MzsJCSAgICBMTENfSU5DT01JTkdfUEVORElORykKJiM0MzsJCQlnb3RvIHJldHJ5X3VubG9jazsKJiM0MzsJCWlmICh1bmxpa2VseShzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fAomIzQzOwkJCSAgICAgc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSkgewomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CX0KIAkvKgogCSAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGF0IHRoZSB1cHBlciBsYXllciAtJmd0O2FjY2VwdAogCSAqIG1ldGhvZCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIFBST0NPTSBzdGF0ZSBtYWNoaW5lIHdvcmtzOgpAQCAtNzk1LDEwICYjNDM7OTI4LDI1IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCSAqIGluIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIHByaXZhdGUgYXJlYS4gLWFjbWUKIAkgKi8KIAlpZiAodW5saWtlbHkoc2stJmd0O3NrX3N0YXRlID09IFRDUF9MSVNURU4pKSB7Ci0JCXN0cnVjdCBzb2NrICpuZXdzayA9IGxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzaywgc2tiLSZndDtkZXYsCi0JCQkJCQkJICAgICAgJmFtcDtzYWRkciwgJmFtcDtkYWRkcik7Ci0JCWlmICghbmV3c2spCi0JCQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwkJaWYgKCFuZXdzaykgewomIzQzOwkJCWlmIChsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkgewomIzQzOwkJCQlpZiAoIWxsY19jb25uX2V2X3J4X2Rpc2NfY21kX3BiaXRfc2V0X3goc2ssIHNrYikpIHsKJiM0MzsJCQkJCXU4IGZfYml0OwomIzQzOwomIzQzOwkJCQkJbGxjX3BkdV9kZWNvZGVfcGZfYml0KHNrYiwgJmFtcDtmX2JpdCk7CiYjNDM7CQkJCQlsbGNfY29ubl9zZW5kX2RtX3JzcChzYXAsIHNrYiwgJmFtcDtzYWRkciwgZl9iaXQpOwomIzQzOwkJCQl9IGVsc2UgaWYgKCFsbGNfY29ubl9ldl9yeF94eHhfY21kX3BiaXRfc2V0XzEoc2ssIHNrYikpIHsKJiM0MzsJCQkJCWxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCAmYW1wO3NhZGRyLCAxKTsKJiM0MzsJCQkJfQomIzQzOwkJCQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwkJCX0KJiM0MzsJCQluZXdzayA9IGxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzaywgc2tiLSZndDtkZXYsICZhbXA7c2FkZHIsCiYjNDM7CQkJCQkJCSAmYW1wO2RhZGRyKTsKJiM0MzsJCQlpZiAoIW5ld3NrKQomIzQzOwkJCQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwkJCWJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spOwomIzQzOwkJCW5ld3NrX2xvY2tlZCA9IHRydWU7CiYjNDM7CQl9CiAJCXNrYl9zZXRfb3duZXJfcihza2IsIG5ld3NrKTsKIAl9IGVsc2UgewogCQkvKgpAQCAtODEzLDE4ICYjNDM7OTYxLDQ2IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlza2ItJmd0O3NrID0gc2s7CiAJCXNrYi0mZ3Q7ZGVzdHJ1Y3RvciA9IHNvY2tfZWZyZWU7CiAJfQotCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkKJiM0MzsJaWYgKHVubGlrZWx5KGxsY19zayhza2ItJmd0O3NrKS0mZ3Q7c3RhdGUgJmx0OyBMTENfQ09OTl9TVEFURV9BRE0pKSB7CiYjNDM7CQlpZiAobmV3c2spCiYjNDM7CQkJbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7CiYjNDM7CQllbHNlIGlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJCSBMTENfSU5DT01JTkdfTk9ORSkKJiM0MzsJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHNrKTsKJiM0MzsJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CX0KJiM0MzsJaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7CiAJCWxsY19jb25uX3Jjdihzaywgc2tiKTsKLQllbHNlIHsKJiM0MzsJCWlmIChuZXdzayAmYW1wOyZhbXA7CiYjNDM7CQkgICAgYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCSAgICBMTENfSU5DT01JTkdfUEVORElORykKJiM0MzsJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJfSBlbHNlIHsKIAkJZHByaW50aygmIzM0OyVzOiBhZGRpbmcgdG8gYmFja2xvZy4uLlxuJiMzNDssIF9fZnVuY19fKTsKIAkJbGxjX3NldF9iYWNrbG9nX3R5cGUoc2tiLCBMTENfUEFDS0VUKTsKLQkJaWYgKHNrX2FkZF9iYWNrbG9nKHNrLCBza2IsIFJFQURfT05DRShzay0mZ3Q7c2tfcmN2YnVmKSkpCiYjNDM7CQlpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpKSkgewomIzQzOwkJCWlmIChuZXdzaykKJiM0MzsJCQkJbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7CiAJCQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwkJfQogCX0KIG91dDoKJiM0MzsJaWYgKG5ld3NrX2xvY2tlZCkKJiM0MzsJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKIAliaF91bmxvY2tfc29jayhzayk7CiAJc29ja19wdXQoc2spOwomIzQzOwlpZiAobmV3c2tfbG9va3VwX3JlZikKJiM0MzsJCXNvY2tfcHV0KG5ld3NrKTsKIAlyZXR1cm47CiYjNDM7cmV0cnlfdW5sb2NrOgomIzQzOwliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CW5ld3NrX2xvY2tlZCA9IGZhbHNlOwomIzQzOwliaF91bmxvY2tfc29jayhzayk7CiYjNDM7CXNvY2tfcHV0KHNrKTsKJiM0MzsJc29ja19wdXQobmV3c2spOwomIzQzOwluZXdzayA9IE5VTEw7CiYjNDM7CW5ld3NrX2xvb2t1cF9yZWYgPSBmYWxzZTsKJiM0MzsJZ290byBsb29rdXA7CiBkcm9wOgogCWtmcmVlX3NrYihza2IpOwogCXJldHVybjsKQEAgLTg1MiwxMiAmIzQzOzEwMjgsNTMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByYyA9IDA7CiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwomIzQzOwlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza2ItJmd0O3NrOwogCiAJaWYgKGxpa2VseShsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX1BBQ0tFVCkpIHsKLQkJaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpIC8qIG5vdCBjbG9zZWQgKi8KJiM0MzsJCWlmIChuZXdzayAmYW1wOyZhbXA7CiYjNDM7CQkgICAgYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgIT0KJiM0MzsJCQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHsKJiM0MzsJCQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCQkJZ290byByZXRyeTsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fAomIzQzOwkJCSAgICBzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fAomIzQzOwkJCSAgICBsbGNfc2sobmV3c2spLSZndDtzdGF0ZSAmbHQ7IExMQ19DT05OX1NUQVRFX0FETSkgewomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCQkJZ290byBvdXRfa2ZyZWVfc2tiOwomIzQzOwkJCX0KIAkJCXJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpOwotCQllbHNlCiYjNDM7CQkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQl9IGVsc2UgaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCQkgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJCSAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHsKJiM0MzsJCQlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CQkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQkJaWYgKGxsY19zayhuZXdzayktJmd0O3N0YXRlICZsdDs9IExMQ19DT05OX1NUQVRFX0FETSkgewomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCQkJZ290byBvdXRfa2ZyZWVfc2tiOwomIzQzOwkJCX0KJiM0MzsJCQlyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQl9IGVsc2UgaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpIHsKJiM0MzsJCQlyYyA9IGxsY19jb25uX3Jjdihzaywgc2tiKTsKJiM0MzsJCX0gZWxzZSB7CiAJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQl9CiAJfSBlbHNlIGlmIChsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX0VWRU5UKSB7CiAJCS8qIHRpbWVyIGV4cGlyYXRpb24gZXZlbnQgKi8KIAkJaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpICAvKiBub3QgY2xvc2VkICovCkBAIC04NzAsNiAmIzQzOzEwODcsMjQgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KIG91dDoKIAlyZXR1cm4gcmM7CiYjNDM7cmV0cnk6CiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkgICAgTExDX0lOQ09NSU5HX1FVRVVFRCkgewomIzQzOwkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQlpZiAobGxjX3NrKG5ld3NrKS0mZ3Q7c3RhdGUgJmd0OyBMTENfQ09OTl9TVEFURV9BRE0pCiYjNDM7CQkJcmMgPSBsbGNfY29ubl9yY3YobmV3c2ssIHNrYik7CiYjNDM7CQllbHNlIHsKJiM0MzsJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQkJZ290byBvdXRfa2ZyZWVfc2tiOwomIzQzOwkJfQomIzQzOwkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlnb3RvIG91dF9rZnJlZV9za2I7CiBvdXRfa2ZyZWVfc2tiOgogCWtmcmVlX3NrYihza2IpOwogCWdvdG8gb3V0OwpAQCAtOTU5LDE3ICYjNDM7MTE5NCwxOCBAQCB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpCiAKIC8qKgogICoJbGxjX3NrX2ZyZWUgLSBGcmVlcyBhIExMQyBzb2NrZXQKLSAqCUBzazogLSBzb2NrZXQgdG8gZnJlZQomIzQzOyAqCUBzazogc29ja2V0IHRvIGZyZWUKJiM0MzsgKglAc3luYzogd2hldGhlciB0byBzeW5jaHJvbm91c2x5IHN0b3AgdGltZXJzCiAgKgotICoJRnJlZXMgYSBMTEMgc29ja2V0CiYjNDM7ICoJRnJlZXMgYSBMTEMgc29ja2V0LgogICovCi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKQogewogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAogCWxsYy0mZ3Q7c3RhdGUgPSBMTENfQ09OTl9PVVRfT0ZfU1ZDOwogCS8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi8KLQlsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTsKJiM0MzsJbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgc3luYyk7CiAjaWZkZWYgREVCVUdfTExDX0NPTk5fQUxMT0MKIAlwcmludGsoS0VSTl9JTkZPICYjMzQ7JXM6IHVuYWNrcT0lZCwgdHhxPSVkXG4mIzM0OywgX19mdW5jX18sCiAJCXNrYl9xdWV1ZV9sZW4oJmFtcDtsbGMtJmd0O3BkdV91bmFja19xKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipMTEMgU3Vic3lzdGVtIFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGRpZ2dpbmcgaW50byB0aGUgYG5ldC9sbGMvYCBzdWJzeXN0ZW0gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIFJpZ2h0IGF3YXksIHRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBhbnkgY2hhbmdlIHRvIHRoZSBjb3JlIG5ldHdvcmsgbG9naWMgaXMgc29tZXRoaW5nIHdlIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0bywgZXNwZWNpYWxseSBnaXZlbiBMTEMmIzM5O3MgcmVhY2ggaW50byB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMsIHRyYWNraW5nIHN0YXRlcyBsaWtlIGBMTENfSU5DT01JTkdfTk9ORWAsIGBMTENfSU5DT01JTkdfUEVORElOR2AsIGFuZCBgTExDX0lOQ09NSU5HX1FVRVVFRGAsIHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJlaGF2aW9yJiMzNDsgYW5kIG1ha2VzIHRoaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nPXRydWVgLgoKTGV0JiMzOTtzIGhvbmUgaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZC4gSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSBsaXN0OiBgbGxjX3VpX3JlbGVhc2VgLCBgbGxjX3VpX2FjY2VwdGAsIGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYCwgYGxsY19jb25uX3NlcnZpY2VgLCBgbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrYCwgYGxsY19pbmNvbWluZ19zb2NrX3dvcmtgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfYmFja2xvZ19yY3ZgLCBhbmQgYGxsY19za19mcmVlYC4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBlbnRyeXBvaW50cyDigJMgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBmdW5jdGlvbnMgd2UgY2FuIHJlYWxpc3RpY2FsbHkgdGFyZ2V0IGZvciBmdXp6aW5nLiBBZnRlciBhIHF1aWNrIHNjYW4sIEkmIzM5O20gZm9jdXNpbmcgb246IGBsbGNfdWlfcmVsZWFzZWAgKHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGBwcm90b19vcHNgKSwgYGxsY191aV9hY2NlcHRgIChhbHNvIHN0YXRpYywgcGFydCBvZiBgcHJvdG9fb3BzYCksIGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYCwgYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLCBgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCwgYGxsY19jb25uX2hhbmRsZXJgLCBhbmQgYGxsY19za19mcmVlYC4gVGhlc2UgYXJlIG15IGxpa2VseSBzdGFydGluZyBwb2ludHMuCgpJIHNob3VsZCBhbHNvIGdsYW5jZSBhdCB0aGUgYEtjb25maWdgIGZvciB0aGUgTExDIHN1YnN5c3RlbSwgd2hpY2ggaXMgYG5ldC9sbGMvS2NvbmZpZ2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGVpdGhlciBgQ09ORklHX0xMQ2Agb3IgYENPTkZJR19MTEMyYCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgaG93IExMQyBpcyBlbmFibGVkIG9yIGRpc2FibGVkIHdpbGwgYmUga2V5IGluIHNldHRpbmcgdXAgdGhlIGFwcHJvcHJpYXRlIGZ1enppbmcgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExMQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2xsYy9LY29uZmlnOjI6Y29uZmlnIExMQ1xubmV0L2xsYy9LY29uZmlnLTMtXHR0cmlzdGF0ZVxubmV0L2xsYy9LY29uZmlnLTQtXG5uZXQvbGxjL0tjb25maWc6NTpjb25maWcgTExDMlxubmV0L2xsYy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIExMQyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX0xMQzJgIGlzIHRoZSBvbmUgdGhlIHVzZXIgKmV4cGxpY2l0bHkqIGhhcyBhIHNheSBpbiwgdGhlIG9uZSB0aGV5JiMzOTtyZSBnb2luZyB0byB0b2dnbGUuIFRoYXQgc3VnZ2VzdHMgYENPTkZJR19MTENgIGlzIGxpa2VseSBhbiB1bmRlcmx5aW5nIGRlcGVuZGVuY3ksIHBlcmhhcHMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBvciBlbmFibGVkICpieSogYENPTkZJR19MTEMyYC4gSXQmIzM5O3MgYSBjb21tb24gcGF0dGVybiBpbiBLY29uZmlnLiBUbyBiZSBjZXJ0YWluLCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBhcmUgcmVsYXRlZCBhbmQgc2VlIHRoZSBsb2dpYyBiZWhpbmQgdGhlaXIgaW50ZXJhY3Rpb25zLiBUaGUgcGxhY2UgdG8gZ28gZm9yIHRoYXQgaXMgYWxtb3N0IGNlcnRhaW5seSBgbmV0L2xsYy9LY29uZmlnYC4gVGltZSB0byBkaXZlIGluIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb24gYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBMTENgIGFuZCBgTExDMmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbGxjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTExDXG4gICAzOlx0XHR0cmlzdGF0ZVxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBMTEMyXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRzZWxlY3QgTExDXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgaXMgYSBMb2dpY2FsIExpbmsgTGF5ZXIgdHlwZSAyLCBjb25uZWN0aW9uIG9yaWVudGVkIHN1cHBvcnQuXG4gIDEwOlx0XHQgIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydCBmb3IgUEZfTExDIHNvY2tldHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMzOQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMTEMgS2VybmVsIE1vZHVsZSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfTExDMmAgaXMgZGVmaW5pdGVseSBzZWxlY3RpbmcgYENPTkZJR19MTENgIGFuZCB0aGF0IGVuYWJsZXMgYFBGX0xMQ2Agc29ja2V0cy4gR3JlYXQsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIC0gc28gYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0xMQzImIzM0O11gIGlzIGNvcnJlY3QuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIExMQyBtb2R1bGUgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSYjMzk7dmUgZ290IGEgcHJlbGltaW5hcnkgbGlzdDogYGxsY19jb25uX2hhbmRsZXJgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBgbGxjX3NrX2ZyZWVgLCBgbGxjX3VpX2FjY2VwdGAsIGFuZCBgbGxjX3VpX3JlbGVhc2VgLgoKSG9sZCBvbi4uLiBJIGp1c3QgcmVhbGl6ZWQgYGxsY191aV9hY2NlcHRgIGFuZCBgbGxjX3VpX3JlbGVhc2VgIGFyZSBsaXN0ZWQgYXMgKnN0YXRpYyogaW4gYG5ldC9sbGMvYWZfbGxjLmNgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbWl0ZWQgc2NvcGUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgd2l0aGluIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYgdG8gbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgcmlnaHQuIExldCYjMzk7cyBwdWxsIHVwIGBuZXQvbGxjL2FmX2xsYy5jYCBhbmQgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX3VpX2FjY2VwdHxsbGNfdWlfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvYWZfbGxjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2xsYy9hZl9sbGMuYz0xNjY9c3RhdGljIGludCBsbGNfdWlfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuLS1cbm5ldC9sbGMvYWZfbGxjLmMtMTg5LS8qKlxubmV0L2xsYy9hZl9sbGMuYzoxOTA6ICpcdGxsY191aV9yZWxlYXNlIC0gc2h1dGRvd24gc29ja2V0XG5uZXQvbGxjL2FmX2xsYy5jLTE5MS0gKlx0QHNvY2s6IFNvY2tldCB0byByZWxlYXNlLlxuLS1cbm5ldC9sbGMvYWZfbGxjLmMtMTk0LSAqL1xubmV0L2xsYy9hZl9sbGMuYzoxOTU6c3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L2xsYy9hZl9sbGMuYy0xOTYte1xuLS1cbm5ldC9sbGMvYWZfbGxjLmM9Njc2PXN0YXRpYyB2b2lkIGxsY19jbXNnX3JjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9hZl9sbGMuYy02OTEtLyoqXG5uZXQvbGxjL2FmX2xsYy5jOjY5MjogKlx0bGxjX3VpX2FjY2VwdCAtIGFjY2VwdCBhIG5ldyBpbmNvbWluZyBjb25uZWN0aW9uLlxubmV0L2xsYy9hZl9sbGMuYy02OTMtICpcdEBzb2NrOiBTb2NrZXQgd2hpY2ggY29ubmVjdGlvbnMgYXJyaXZlIG9uLlxuLS1cbm5ldC9sbGMvYWZfbGxjLmMtNjk5LSAqL1xubmV0L2xsYy9hZl9sbGMuYzo3MDA6c3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG5uZXQvbGxjL2FmX2xsYy5jLTcwMS1cdFx0XHQgc3RydWN0IHByb3RvX2FjY2VwdF9hcmcgKmFyZylcbi0tXG5uZXQvbGxjL2FmX2xsYy5jPTEyMjg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjX3VpX29wcyA9IHtcbi0tXG5uZXQvbGxjL2FmX2xsYy5jLTEyMzAtXHQub3duZXIgICAgICAgPSBUSElTX01PRFVMRSxcbm5ldC9sbGMvYWZfbGxjLmM6MTIzMTpcdC5yZWxlYXNlICAgICA9IGxsY191aV9yZWxlYXNlLFxubmV0L2xsYy9hZl9sbGMuYy0xMjMyLVx0LmJpbmRcdCAgICAgPSBsbGNfdWlfYmluZCxcbi0tXG5uZXQvbGxjL2FmX2xsYy5jLTEyMzQtXHQuc29ja2V0cGFpciAgPSBzb2NrX25vX3NvY2tldHBhaXIsXG5uZXQvbGxjL2FmX2xsYy5jOjEyMzU6XHQuYWNjZXB0ICAgICAgPSBsbGNfdWlfYWNjZXB0LFxubmV0L2xsYy9hZl9sbGMuYy0xMjM2LVx0LmdldG5hbWUgICAgID0gbGxjX3VpX2dldG5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MjMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTExDIFNvY2tldCBTeXNjYWxsIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZW50cnkgcG9pbnRzIGZvciB0aGUgYFBGX0xMQ2Agc29ja2V0cyBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhleSBhcmUgc3RhdGljLiBUaGlzIHByZXNlbnRzIGEgY2hhbGxlbmdlLiBXaGlsZSB0aGV5IGFyZSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGByZWxlYXNlYCBhbmQgYGFjY2VwdGAgc3lzY2FsbHMsIGJlaW5nIHN0YXRpYyBjb3VsZCBtYWtlIHRoZW0gbGVzcyB2aXNpYmxlIHRvIGZ1enplcnMgdGhhdCBkZXBlbmQgb24gYGthbGxzeW1zYCwgZXNwZWNpYWxseSBpZiB0aGV5IGFyZSByZWx5aW5nIG9uIG5hbWUtYmFzZWQgdGFyZ2V0aW5nLiBGb3J0dW5hdGVseSwgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIGNhbiBkaXJlY3RseSB0YXJnZXQgc3lzY2FsbHMgd2l0aGluIHNwZWNpZmljIHNvY2tldCBmYW1pbGllcywgd2hpY2ggaXMgYSBnb29kIHdvcmthcm91bmQuCgpJZGVhbGx5LCB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIHRoZSBiZXN0IGZ1enppbmcgc3RyYXRlZ3kuIFNvLCBsZXQmIzM5O3Mgc2VlIHdoaWNoIGdsb2JhbCBmdW5jdGlvbnMgd2VyZSBhZGRlZCBvciBtb2RpZmllZDogYGxsY19jb25uX2hhbmRsZXJgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBgbGxjX3NrX2ZyZWVgLCBhbmQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHNldCB0byBwcmlvcml0aXplLgoKSG1tLCB3YWl0IGEgc2Vjb25kLi4uIEkgc2VlIGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYCBpbiBoZXJlLCBhbmQgdGhleSYjMzk7cmUgc3RhdGljLCBidXQgY2xlYXJseSBpbXBvcnRhbnQuIFRoZXkgcmVwcmVzZW50IHNpbWlsYXIgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBtYWluIHN5c2NhbGxzIGFuZCBjb3VsZCBiZSBlbnRyeSBwb2ludHMgdG8gdGhlIGNvZGUuIEkgdGhpbmsgSSYjMzk7bGwgbWFrZSB0aGUgY2FsbCB0byBleGNsdWRlIHRob3NlIHRvIHN0cmljdGx5IGFkaGVyZSB0byB0aGUgJiMzNDtwcmVmZXIgbm9uLXN0YXRpYyYjMzQ7IHJ1bGUsIGJ1dCB0aGUgZ2xvYmFscyBzZWVtIHNhZmUgdG8gaW5jbHVkZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGFtIGJlaW5nIGNsZWFyIGhlcmUgYW5kIG1ha2luZyB0aGUgYmVzdCBkZWNpc2lvbiBmb3IgZnV6emluZy4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBsbGNfY29ubl9oYW5kbGVyYCBpcyBpbmRlZWQgZ2xvYmFsLiBJdCYjMzk7cyBiZXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsbGNfY29ubl9oYW5kbGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2xsYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2xsYy9hZl9sbGMuYz0xMjU1PXN0YXRpYyBpbnQgX19pbml0IGxsYzJfaW5pdCh2b2lkKVxuLS1cbm5ldC9sbGMvYWZfbGxjLmMtMTI4MC1cdGxsY19hZGRfcGFjayhMTENfREVTVF9TQVAsIGxsY19zYXBfaGFuZGxlcik7XG5uZXQvbGxjL2FmX2xsYy5jOjEyODE6XHRsbGNfYWRkX3BhY2soTExDX0RFU1RfQ09OTiwgbGxjX2Nvbm5faGFuZGxlcik7XG5uZXQvbGxjL2FmX2xsYy5jLTEyODItb3V0OlxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYz01Nz1pbnQgbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTg5LVx0XHQgKiBza2ItXHUwMDNlc2sgcG9pbnRpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgaW5cbm5ldC9sbGMvbGxjX2Nvbm4uYzo5MDpcdFx0ICogbGxjX2Nvbm5faGFuZGxlci4gLWFjbWVcbm5ldC9sbGMvbGxjX2Nvbm4uYy05MS1cdFx0ICovXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTg1Mj1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzEtXG5uZXQvbGxjL2xsY19jb25uLmM6ODcyOnZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2xsYy9sbGNfY29ubi5jLTg3My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipHbG9iYWwgU2NvcGUgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBvYnNlcnZpbmcgdGhhdCBgbGxjX2Nvbm5faGFuZGxlcmAgaGFzIGJlZW4gZGVmaW5lZCBhdCBhIGdsb2JhbCBzY29wZS4gQW5kLCBpZiBJIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSBjb3JyZWN0bHksIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGFuZCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gIGFyZSBhbHNvIGdsb2JhbGx5IGFjY2Vzc2libGUsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGhvdyB0aGV5IGludGVyb3BlcmF0ZS4gSXQmIzM5O3MgYWxzbyBhcHBhcmVudCB0aGF0IGBsbGNfc2tfZnJlZWAgaXMgYW5vdGhlciBnbG9iYWxseSBkZWZpbmVkIGZ1bmN0aW9uIHdoaWNoIG1heSBhbHNvIGNyZWF0ZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgb3RoZXIgZ2xvYmFsIHZhcmlhYmxlcy4KCk5vdywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGhvdyBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2Agb3BlcmF0ZXMuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGNvbm5lY3Rpb24gc3RhdGUgbWFuYWdlbWVudCByZXNpZGVzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZXNlIGdsb2JhbCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyB0byBhc3Nlc3MgaXRzIG92ZXJhbGwgZGVzaWduIGFuZCBwb3RlbnRpYWwgZm9yIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX2NfYWMuYz0xNDM0PXN0YXRpYyB2b2lkIGxsY19wcm9jZXNzX3Rtcl9ldihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTE0NDEtXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSlcbm5ldC9sbGMvbGxjX2NfYWMuYzoxNDQyOlx0XHRcdGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG5uZXQvbGxjL2xsY19jX2FjLmMtMTQ0My1cdFx0ZWxzZSB7XG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTQzPWludCBzeXNjdGxfbGxjMl9idXN5X3RpbWVvdXQgPSBMTEMyX0JVU1lfVElNRSAqIEhaO1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy00NS0vKipcbm5ldC9sbGMvbGxjX2Nvbm4uYzo0NjogKlx0bGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyAtIHNlbmRzIGV2ZW50IHRvIGNvbm5lY3Rpb24gc3RhdGUgbWFjaGluZVxubmV0L2xsYy9sbGNfY29ubi5jLTQ3LSAqXHRAc2s6IGNvbm5lY3Rpb25cbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtNTYtICovXG5uZXQvbGxjL2xsY19jb25uLmM6NTc6aW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2xsYy9sbGNfY29ubi5jLTU4LXtcbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9MTc4PXZvaWQgbGxjX2Nvbm5fc2VuZF9wZHUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xOTEtICpcdFByZXBhcmVzIHNlcnZpY2UgcGFyYW1ldGVycyAocHJpbSBhbmQgcHJpbV9kYXRhKS4gY2FsbGluZyBpbmRpY2F0aW9uXG5uZXQvbGxjL2xsY19jb25uLmM6MTkyOiAqXHRmdW5jdGlvbiB3aWxsIGJlIGRvbmUgaW4gbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzcy5cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xOTMtICovXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTc1MT1zdGF0aWMgaW50IGxsY19jb25uX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTc1Ni1cdGV2LVx1MDAzZXJlYXNvbiA9IDA7XG5uZXQvbGxjL2xsY19jb25uLmM6NzU3Olx0cmV0dXJuIGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG5uZXQvbGxjL2xsY19jb25uLmMtNzU4LX1cbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9ODcyPXZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy05NTMtXHRcdCAqIENhbiYjMzk7dCBiZSBza2Jfc2V0X293bmVyX3IsIHRoaXMgd2lsbCBiZSBkb25lIGF0IHRoZVxubmV0L2xsYy9sbGNfY29ubi5jOjk1NDpcdFx0ICogbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyBmdW5jdGlvbiwgbGF0ZXIgb24sIHdoZW4gd2Ugd2lsbCB1c2Vcbm5ldC9sbGMvbGxjX2Nvbm4uYy05NTUtXHRcdCAqIHNrYl9xdWV1ZV9yY3Zfc2tiIHRvIHNlbmQgaXQgdG8gdXBwZXIgbGF5ZXJzLCB0aGlzIGlzXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTEwMjc9c3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDgwLVx0XHRpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpICAvKiBub3QgY2xvc2VkICovXG5uZXQvbGxjL2xsY19jb25uLmM6MTA4MTpcdFx0XHRyYyA9IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG5uZXQvbGxjL2xsY19jb25uLmMtMTA4Mi1cdFx0ZWxzZVxuLS1cbm5ldC9sbGMvbGxjX2lmLmM9Mzg9aW50IGxsY19idWlsZF9hbmRfc2VuZF9wa3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2lmLmMtNTYtXHRza2ItXHUwMDNlZGV2ICAgICAgPSBsbGMtXHUwMDNlZGV2O1xubmV0L2xsYy9sbGNfaWYuYzo1NzpcdHJldHVybiBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xubmV0L2xsYy9sbGNfaWYuYy01OC1cbi0tXG5uZXQvbGxjL2xsY19pZi5jPTc3PWludCBsbGNfZXN0YWJsaXNoX2Nvbm5lY3Rpb24oc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1OCAqbG1hYywgdTggKmRtYWMsIHU4IGRzYXApXG4tLVxubmV0L2xsYy9sbGNfaWYuYy0xMDYtXHRcdHNrYl9zZXRfb3duZXJfdyhza2IsIHNrKTtcbm5ldC9sbGMvbGxjX2lmLmM6MTA3Olx0XHRyYyA9IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG5uZXQvbGxjL2xsY19pZi5jLTEwOC1cdH1cbi0tXG5uZXQvbGxjL2xsY19pZi5jPTEyMz1pbnQgbGxjX3NlbmRfZGlzYyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2xsYy9sbGNfaWYuYy0xNDYtXHRldi1cdTAwM2VwcmltX3R5cGUgPSBMTENfUFJJTV9UWVBFX1JFUTtcbm5ldC9sbGMvbGxjX2lmLmM6MTQ3Olx0cmMgPSBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xubmV0L2xsYy9sbGNfaWYuYy0xNDgtb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3MgoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAxNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBMTEMgQ29ubmVjdGlvbiBIYW5kbGluZyBDaGFuZ2VzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtYWtpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSB3YXkgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIGFyZSBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgYWltaW5nIHRvIGFkZHJlc3MgcmFjZSBjb25kaXRpb25zIGFuZCBtZW1vcnkgbGVha3MuIFRoZSBmYWN0IHRoYXQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgIGlzIGdsb2JhbCBhbmQgaGVhdmlseSB1c2VkIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgY3JpdGljYWwgYXJlYSBmb3Igc2NydXRpbnkuIEdpdmVuIHRoZSBjb250ZXh0LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBsbGNfY29ubl9oYW5kbGVyYCwgYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLCBgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCwgYGxsY19za19mcmVlYCwgYW5kIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AuCgpUaGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IHdvcmtxdWV1ZSBhbmQgc3RhdGUgbWFjaGluZSBzdHJvbmdseSBzdWdnZXN0cyBhIHNoaWZ0IHRvd2FyZHMgbW9yZSBhc3luY2hyb25vdXMgYW5kIGNvbnRyb2xsZWQgY29ubmVjdGlvbiBoYW5kbGluZy4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiBzb2NrZXRzIGFuZCBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBtb3JlIGNhcmVmdWxseS4gU2luY2UgdGhlIExMQyBwcm90b2NvbCBpcyB1c2VyLXNwYWNlIGFjY2Vzc2libGUgdmlhIFBGX0xMQyBzb2NrZXRzLCBhbnkgZmxhd3MgaGVyZSBjb3VsZCBiZSBleHBsb2l0ZWQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV3IHN0YXRlIG1hY2hpbmUgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBjb25uZWN0aW9uIGhhbmRsaW5nIGxvZ2ljLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGVhY2ggb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBob3cgdGhlIG5ldyBzdGF0ZSBtYWNoaW5lIGFuZCB3b3JrcXVldWUgaW50ZXJhY3Qgd2l0aCB0aGVtIHRvIGVuc3VyZSB0aGUgY2hhbmdlcyBhcmUgY29ycmVjdCBhbmQgZG9uJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgbmV3IHN5c3RlbSBpcyBhY3R1YWxseSBzb2x2aW5nIHRoZSB1bmRlcmx5aW5nIHByb2JsZW1zIG9mIHRoZSBvbGQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TExDMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xsY19jb25uX2hhbmRsZXImIzM0OywKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfYWNjZXB0X2luY29taW5nX3NvY2smIzM0OywKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4mIzM0OywKICAgICYjMzQ7bGxjX3NrX2ZyZWUmIzM0OywKICAgICYjMzQ7bGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmtxdWV1ZSBhbmQgc3RhdGUgbWFjaGluZSBmb3IgaGFuZGxpbmcgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBtZW1vcnkgbGVha3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMgb2YgdGhlIExMQyBwcm90b2NvbCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQRl9MTEMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TExDMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xsY19jb25uX2hhbmRsZXImIzM0OywKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfYWNjZXB0X2luY29taW5nX3NvY2smIzM0OywKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4mIzM0OywKICAgICYjMzQ7bGxjX3NrX2ZyZWUmIzM0OywKICAgICYjMzQ7bGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmtxdWV1ZSBhbmQgc3RhdGUgbWFjaGluZSBmb3IgaGFuZGxpbmcgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBtZW1vcnkgbGVha3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMgb2YgdGhlIExMQyBwcm90b2NvbCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQRl9MTEMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGlzc3VlIGluIHRoZSBMTEMgcHJvdG9jb2wgcmVsYXRlZCB0byBpbmNvbWluZyBjb25uZWN0aW9uIGhhbmRsaW5nLiBJdCBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSB0cmFja2luZyAoYGluY29taW5nX3N0YXRlYCkgYW5kIGEgd29ya3F1ZXVlIChgaW5jb21pbmdfd29ya2ApIHRvIHNhZmVseSBtYW5hZ2UgYW5kIGRlZmVyIHRoZSBmcmVlaW5nIG9mIGluY29taW5nIHNvY2tldHMsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiBhIGxpc3RlbmluZyBzb2NrZXQgaXMgY2xvc2VkIHdoaWxlIGNoaWxkIHNvY2tldHMgYXJlIHN0aWxsIHBlbmRpbmcgb3IgcXVldWVkLlxuXG5UaGVzZSB0eXBlcyBvZiBidWdzICh1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSkgYXJlIGFscmVhZHkgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGZpZWxkcyBpbiBgc3RydWN0IGxsY19zb2NrYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoZSBuZXdseSBhZGRlZCBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgIGZ1bmN0aW9uIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBhbGxvY2F0ZWQgc2tiIGhlYWRlcnMgYmVmb3JlIHRyYW5zbWlzc2lvbi5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ODg2NzkyZjNiMmNhMDQzNjA5ODRmZTcxNDBjYWVkZDU3MDdiMWY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMDg6NDc6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9sbGNfY29ubi5oIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaAppbmRleCBlMWEzMDI2OTY3MjM0Li45YWNkYTBhNmYwNjlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9sbGNfY29ubi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmgKQEAgLTYsNiAmIzQzOzYsNyBAQAogICogCQkgMjAwMSwgMjAwMiBieSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gJmx0O2FjbWVAY29uZWN0aXZhLmNvbS5iciZndDsKICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9sbGNfaWYuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xsYy5oJmd0OwpAQCAtMTMsNiAmIzQzOzE0LDEwIEBACiAjZGVmaW5lIExMQ19FVkVOVCAgICAgICAgICAgICAgICAxCiAjZGVmaW5lIExMQ19QQUNLRVQgICAgICAgICAgICAgICAyCiAKJiM0MzsjZGVmaW5lIExMQ19JTkNPTUlOR19OT05FICAgICAgICAwCiYjNDM7I2RlZmluZSBMTENfSU5DT01JTkdfUEVORElORyAgICAgMQomIzQzOyNkZWZpbmUgTExDX0lOQ09NSU5HX1FVRVVFRCAgICAgIDIKJiM0MzsKICNkZWZpbmUgTExDMl9QX1RJTUUgICAgICAgICAgICAgICAyCiAjZGVmaW5lIExMQzJfQUNLX1RJTUUgICAgICAgICAgICAgMQogI2RlZmluZSBMTEMyX1JFSl9USU1FICAgICAgICAgICAgIDMKQEAgLTcyLDYgJiM0Mzs3Nyw5IEBAIHN0cnVjdCBsbGNfc29jayB7CiAJCQkJCSAgICAgIHJlY2VpdmVkIGFuZCBjYXVzZWQgc2VuZGluZyBGUk1SLgogCQkJCQkgICAgICBVc2VkIGZvciByZXNlbmRpbmcgRlJNUiAqLwogCXUzMgkJICAgIGNtc2dfZmxhZ3M7CiYjNDM7CWF0b21pY190CSAgICBpbmNvbWluZ19zdGF0ZTsKJiM0MzsJc3RydWN0IHNvY2sJICAgICppbmNvbWluZ19saXN0ZW5lcjsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0IGluY29taW5nX3dvcms7CiAJc3RydWN0IGhsaXN0X25vZGUgICBkZXZfaGFzaF9ub2RlOwogfTsKIApAQCAtOTMsNyAmIzQzOzEwMSwxMCBAQCBzdGF0aWMgX19pbmxpbmVfXyBjaGFyIGxsY19iYWNrbG9nX3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHN0cnVjdCBzb2NrICpsbGNfc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSwKIAkJCSAgc3RydWN0IHByb3RvICpwcm90LCBpbnQga2Vybik7CiB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpOwotdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spOwomIzQzO3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpOwomIzQzO3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spOwomIzQzO3ZvaWQgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7CiYjNDM7dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spOwogCiB2b2lkIGxsY19za19yZXNldChzdHJ1Y3Qgc29jayAqc2spOwogCmRpZmYgLS1naXQgYS9uZXQvbGxjL2FmX2xsYy5jIGIvbmV0L2xsYy9hZl9sbGMuYwppbmRleCBiMDQ0N2MzM2RiZjA5Li43ZDI0NmQ0ZDI4MWJiIDEwMDY0NAotLS0gYS9uZXQvbGxjL2FmX2xsYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sbGMvYWZfbGxjLmMKQEAgLTE5Niw2ICYjNDM7MTk2LDcgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stJmd0O3NrOwogCXN0cnVjdCBsbGNfc29jayAqbGxjOwomIzQzOwlib29sIGxpc3RlbmVyOwogCiAJaWYgKHVubGlrZWx5KHNrID09IE5VTEwpKQogCQlnb3RvIG91dDsKQEAgLTIwNiw2ICYjNDM7MjA3LDkgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogCQlsbGMtJmd0O2xhZGRyLmxzYXAsIGxsYy0mZ3Q7ZGFkZHIubHNhcCk7CiAJaWYgKCFsbGNfc2VuZF9kaXNjKHNrKSkKIAkJbGxjX3VpX3dhaXRfZm9yX2Rpc2Moc2ssIFJFQURfT05DRShzay0mZ3Q7c2tfcmN2dGltZW8pKTsKJiM0MzsJbGlzdGVuZXIgPSBzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0xJU1RFTjsKJiM0MzsJaWYgKGxpc3RlbmVyKQomIzQzOwkJc29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTsKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19aQVBQRUQpKSB7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtJmd0O3NhcDsKIApAQCAtMjE0LDE2ICYjNDM7MjE4LDE4IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIAkJICovCiAJCWxsY19zYXBfaG9sZChzYXApOwogCQlsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLSZndDtzYXAsIHNrKTsKJiM0MzsJCWxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJbGxjX3NhcF9wdXQoc2FwKTsKIAl9IGVsc2UgewomIzQzOwkJbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spOwogCQlyZWxlYXNlX3NvY2soc2spOwogCX0KIAluZXRkZXZfcHV0KGxsYy0mZ3Q7ZGV2LCAmYW1wO2xsYy0mZ3Q7ZGV2X3RyYWNrZXIpOwogCXNvY2tfcHV0KHNrKTsKIAlzb2NrX29ycGhhbihzayk7CiAJc29jay0mZ3Q7c2sgPSBOVUxMOwotCWxsY19za19mcmVlKHNrKTsKJiM0MzsJbGxjX3NrX2ZyZWUoc2ssIHRydWUpOwogb3V0OgogCXJldHVybiAwOwogfQpAQCAtNzIyLDYgJiM0Mzs3MjgsNyBAQCBzdGF0aWMgaW50IGxsY191aV9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKIAkJZ290byBmcmVlczsKIAlyYyA9IDA7CiAJbmV3c2sgPSBza2ItJmd0O3NrOwomIzQzOwlsbGNfYWNjZXB0X2luY29taW5nX3NvY2sobmV3c2spOwogCS8qIGF0dGFjaCBjb25uZWN0aW9uIHRvIGEgbmV3IHNvY2tldC4gKi8KIAlsbGNfdWlfc2tfaW5pdChuZXdzb2NrLCBuZXdzayk7CiAJc29ja19yZXNldF9mbGFnKG5ld3NrLCBTT0NLX1pBUFBFRCk7CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb25uLmMgYi9uZXQvbGxjL2xsY19jb25uLmMKaW5kZXggMjYwNDYwZDUwZjU0Yy4uNDI3MmNlNGQ0YTFjYSAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sbGMvbGxjX2Nvbm4uYwpAQCAtMzIsNiAmIzQzOzMyLDcgQEAgc3RhdGljIGludCBsbGNfZXhlY19jb25uX3RyYW5zX2FjdGlvbnMoc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqZXYpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyAqbGxjX3F1YWxpZnlfY29ubl9ldihzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7c3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiAvKiBPZmZzZXQgdGFibGUgb24gY29ubmVjdGlvbiBzdGF0ZXMgdHJhbnNpdGlvbiBkaWFncmFtICovCiBzdGF0aWMgaW50IGxsY19vZmZzZXRfdGFibGVbTkJSX0NPTk5fU1RBVEVTXVtOQlJfQ09OTl9FVl07CkBAIC04OCw2ICYjNDM7ODksMTEgQEAgaW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkgKiBza2ItJmd0O3NrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluCiAJCSAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lCiAJCSAqLwomIzQzOwkJaWYgKHNrICE9IHNrYi0mZ3Q7c2sgJmFtcDsmYW1wOwomIzQzOwkJICAgIGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKHNrYi0mZ3Q7c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCSAgICBMTENfSU5DT01JTkdfUEVORElORykKJiM0MzsJCQlhdG9taWNfc2V0KCZhbXA7bGxjX3NrKHNrYi0mZ3Q7c2spLSZndDtpbmNvbWluZ19zdGF0ZSwKJiM0MzsJCQkJICAgTExDX0lOQ09NSU5HX1FVRVVFRCk7CiAJCXNrYl9nZXQoc2tiKTsKIAkJc2tiX3F1ZXVlX3RhaWwoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKIAkJc2stJmd0O3NrX3N0YXRlX2NoYW5nZShzayk7CkBAIC0zNTQsNyAmIzQzOzM2MCw4IEBAIHN0YXRpYyBpbnQgbGxjX2Nvbm5fc2VydmljZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCWludCByYyA9IDE7CiAKLQlpZiAobGxjLSZndDtzdGF0ZSAmZ3Q7IE5CUl9DT05OX1NUQVRFUykKJiM0MzsJaWYgKGxsYy0mZ3Q7c3RhdGUgJmx0OyBMTENfQ09OTl9TVEFURV9BRE0gfHwKJiM0MzsJICAgIGxsYy0mZ3Q7c3RhdGUgJmd0OyBOQlJfQ09OTl9TVEFURVMpCiAJCWdvdG8gb3V0OwogCXJjID0gMDsKIAl0cmFucyA9IGxsY19xdWFsaWZ5X2Nvbm5fZXYoc2ssIHNrYik7CkBAIC03NjUsMjcgJiM0Mzs3NzIsMTUzIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaywKIAltZW1jcHkoJmFtcDtuZXdsbGMtJmd0O2xhZGRyLCBkYWRkciwgc2l6ZW9mKG5ld2xsYy0mZ3Q7bGFkZHIpKTsKIAltZW1jcHkoJmFtcDtuZXdsbGMtJmd0O2RhZGRyLCBzYWRkciwgc2l6ZW9mKG5ld2xsYy0mZ3Q7ZGFkZHIpKTsKIAluZXdsbGMtJmd0O2RldiA9IGRldjsKJiM0MzsJbmV3bGxjLSZndDtpbmNvbWluZ19saXN0ZW5lciA9IHNrOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7bmV3bGxjLSZndDtpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1BFTkRJTkcpOwomIzQzOwlJTklUX1dPUksoJmFtcDtuZXdsbGMtJmd0O2luY29taW5nX3dvcmssIGxsY19pbmNvbWluZ19zb2NrX3dvcmspOwomIzQzOwlzb2NrX2hvbGQoc2spOwogCWRldl9ob2xkKGRldik7CiAJbGxjX3NhcF9hZGRfc29ja2V0KGxsYy0mZ3Q7c2FwLCBuZXdzayk7CiBvdXQ6CiAJcmV0dXJuIG5ld3NrOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGxjX3NvY2ssCiYjNDM7CQkJCQkJICAgIGluY29taW5nX3dvcmspOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO2xsYy0mZ3Q7c2s7CiYjNDM7CXN0cnVjdCBzb2NrICpsaXN0ZW5lciA9IGxsYy0mZ3Q7aW5jb21pbmdfbGlzdGVuZXI7CiYjNDM7CiYjNDM7CWxvY2tfc29jayhsaXN0ZW5lcik7CiYjNDM7CWxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsJbGxjX3NrX2ZyZWUoc2ssIGZhbHNlKTsKJiM0MzsJc29ja19vcnBoYW4oc2spOwomIzQzOwlyZWxlYXNlX3NvY2soc2spOwomIzQzOwlsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTsKJiM0MzsJcmVsZWFzZV9zb2NrKGxpc3RlbmVyKTsKJiM0MzsJZGV2X3B1dChsbGMtJmd0O2Rldik7CiYjNDM7CWxsYy0mZ3Q7ZGV2ID0gTlVMTDsKJiM0MzsJc29ja19wdXQoc2spOwomIzQzOwlzb2NrX3B1dChsaXN0ZW5lcik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiYjNDM7CiYjNDM7CWlmIChhdG9taWNfeGNoZygmYW1wO2xsYy0mZ3Q7aW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19OT05FKSA9PQomIzQzOwkgICAgTExDX0lOQ09NSU5HX05PTkUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UobGxjLSZndDtzdGF0ZSwgTExDX0NPTk5fT1VUX09GX1NWQyk7CiYjNDM7CXNvY2tfaG9sZChzayk7CiYjNDM7CWxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtJmd0O3NhcCwgc2spOwomIzQzOwlzY2hlZHVsZV93b3JrKCZhbXA7bGxjLSZndDtpbmNvbWluZ193b3JrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwomIzQzOwomIzQzOwlpZiAoYXRvbWljX3hjaGcoJmFtcDtsbGMtJmd0O2luY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgIT0KJiM0MzsJICAgIExMQ19JTkNPTUlOR19OT05FKQomIzQzOwkJc29ja19wdXQobGxjLSZndDtpbmNvbWluZ19saXN0ZW5lcik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUpKSkgewomIzQzOwkJc3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLSZndDtzazsKJiM0MzsKJiM0MzsJCWlmIChuZXdzayAmYW1wOyZhbXA7IG5ld3NrICE9IHNrKSB7CiYjNDM7CQkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkJICAgIExMQ19JTkNPTUlOR19OT05FKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQl9CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJfQomIzQzOwlsb2NhbF9iaF9lbmFibGUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGlzIG1pcnJvcnMgdGhlIEFETS1zdGF0ZSBETSBhY3Rpb25zLCBidXQgYSBsaXN0ZW5lciBoYXMgbm8gcGVlcgomIzQzOyAqIGFkZHJlc3MgaW4gbGxjLSZndDtkYWRkciB5ZXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJIHN0cnVjdCBsbGNfYWRkciAqc2FkZHIsIHU4IGZfYml0KQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJbnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItJmd0O2RldiwgTExDX1BEVV9UWVBFX1UsIDApOwomIzQzOwlpZiAoIW5za2IpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC0mZ3Q7bGFkZHIubHNhcCwKJiM0MzsJCQkgICAgc2FkZHItJmd0O2xzYXAsIExMQ19QRFVfUlNQKTsKJiM0MzsJbGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7CiYjNDM7CXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBza2ItJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsIHNhZGRyLSZndDttYWMpOwomIzQzOwlpZiAodW5saWtlbHkocmMpKQomIzQzOwkJa2ZyZWVfc2tiKG5za2IpOwomIzQzOwllbHNlCiYjNDM7CQlkZXZfcXVldWVfeG1pdChuc2tiKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbGxjX2FkZHIgc2FkZHIsIGRhZGRyOwotCXN0cnVjdCBzb2NrICpzazsKJiM0MzsJc3RydWN0IHNvY2sgKnNrLCAqbmV3c2sgPSBOVUxMOwomIzQzOwlib29sIG5ld3NrX2xvb2t1cF9yZWYgPSBmYWxzZTsKJiM0MzsJYm9vbCBuZXdza19sb2NrZWQgPSBmYWxzZTsKIAogCWxsY19wZHVfZGVjb2RlX3NhKHNrYiwgc2FkZHIubWFjKTsKIAlsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgJmFtcDtzYWRkci5sc2FwKTsKIAlsbGNfcGR1X2RlY29kZV9kYShza2IsIGRhZGRyLm1hYyk7CiAJbGxjX3BkdV9kZWNvZGVfZHNhcChza2IsICZhbXA7ZGFkZHIubHNhcCk7CiAKJiM0Mztsb29rdXA6CiAJc2sgPSBfX2xsY19sb29rdXAoc2FwLCAmYW1wO3NhZGRyLCAmYW1wO2RhZGRyLCBkZXZfbmV0KHNrYi0mZ3Q7ZGV2KSk7CiAJaWYgKCFzaykKIAkJZ290byBkcm9wOwogCiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHsKJiM0MzsJCW5ld3NrID0gc2s7CiYjNDM7CQliaF9sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJc29ja19wdXQobmV3c2spOwomIzQzOwkJCW5ld3NrID0gTlVMTDsKJiM0MzsJCQlnb3RvIGxvb2t1cDsKJiM0MzsJCX0KJiM0MzsJCXNrID0gbGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfbGlzdGVuZXI7CiYjNDM7CQlzb2NrX2hvbGQoc2spOwomIzQzOwkJbmV3c2tfbG9va3VwX3JlZiA9IHRydWU7CiYjNDM7CQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CX0KJiM0MzsKIAliaF9sb2NrX3NvY2soc2spOwomIzQzOwlpZiAodW5saWtlbHkoc2stJmd0O3NrX3N0YXRlID09IFRDUF9MSVNURU4gJmFtcDsmYW1wOwomIzQzOwkJICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKQomIzQzOwkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJaWYgKG5ld3NrX2xvb2t1cF9yZWYpIHsKJiM0MzsJCWJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spOwomIzQzOwkJbmV3c2tfbG9ja2VkID0gdHJ1ZTsKJiM0MzsJCWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCWdvdG8gcmV0cnlfdW5sb2NrOwomIzQzOwkJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8CiYjNDM7CQkJICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKSB7CiYjNDM7CQkJbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7CiYjNDM7CQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCX0KJiM0MzsJfQogCS8qCiAJICogVGhpcyBoYXMgdG8gYmUgZG9uZSBoZXJlIGFuZCBub3QgYXQgdGhlIHVwcGVyIGxheWVyIC0mZ3Q7YWNjZXB0CiAJICogbWV0aG9kIGJlY2F1c2Ugb2YgdGhlIHdheSB0aGUgUFJPQ09NIHN0YXRlIG1hY2hpbmUgd29ya3M6CkBAIC03OTUsMTAgJiM0Mzs5MjgsMjUgQEAgdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpCiAJICogaW4gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgcHJpdmF0ZSBhcmVhLiAtYWNtZQogCSAqLwogCWlmICh1bmxpa2VseShzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0xJU1RFTikpIHsKLQkJc3RydWN0IHNvY2sgKm5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItJmd0O2RldiwKLQkJCQkJCQkgICAgICAmYW1wO3NhZGRyLCAmYW1wO2RhZGRyKTsKLQkJaWYgKCFuZXdzaykKLQkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQlpZiAoIW5ld3NrKSB7CiYjNDM7CQkJaWYgKGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7CiYjNDM7CQkJCWlmICghbGxjX2Nvbm5fZXZfcnhfZGlzY19jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkgewomIzQzOwkJCQkJdTggZl9iaXQ7CiYjNDM7CiYjNDM7CQkJCQlsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCAmYW1wO2ZfYml0KTsKJiM0MzsJCQkJCWxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCAmYW1wO3NhZGRyLCBmX2JpdCk7CiYjNDM7CQkJCX0gZWxzZSBpZiAoIWxsY19jb25uX2V2X3J4X3h4eF9jbWRfcGJpdF9zZXRfMShzaywgc2tiKSkgewomIzQzOwkJCQkJbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsICZhbXA7c2FkZHIsIDEpOwomIzQzOwkJCQl9CiYjNDM7CQkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQkJfQomIzQzOwkJCW5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItJmd0O2RldiwgJmFtcDtzYWRkciwKJiM0MzsJCQkJCQkJICZhbXA7ZGFkZHIpOwomIzQzOwkJCWlmICghbmV3c2spCiYjNDM7CQkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQkJbmV3c2tfbG9ja2VkID0gdHJ1ZTsKJiM0MzsJCX0KIAkJc2tiX3NldF9vd25lcl9yKHNrYiwgbmV3c2spOwogCX0gZWxzZSB7CiAJCS8qCkBAIC04MTMsMTggJiM0Mzs5NjEsNDYgQEAgdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCXNrYi0mZ3Q7c2sgPSBzazsKIAkJc2tiLSZndDtkZXN0cnVjdG9yID0gc29ja19lZnJlZTsKIAl9Ci0JaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKQomIzQzOwlpZiAodW5saWtlbHkobGxjX3NrKHNrYi0mZ3Q7c2spLSZndDtzdGF0ZSAmbHQ7IExMQ19DT05OX1NUQVRFX0FETSkpIHsKJiM0MzsJCWlmIChuZXdzaykKJiM0MzsJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCWVsc2UgaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKHNrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkJIExMQ19JTkNPTUlOR19OT05FKQomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spOwomIzQzOwkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJfQomIzQzOwlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKIAkJbGxjX2Nvbm5fcmN2KHNrLCBza2IpOwotCWVsc2UgewomIzQzOwkJaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwl9IGVsc2UgewogCQlkcHJpbnRrKCYjMzQ7JXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXG4mIzM0OywgX19mdW5jX18pOwogCQlsbGNfc2V0X2JhY2tsb2dfdHlwZShza2IsIExMQ19QQUNLRVQpOwotCQlpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpKSkKJiM0MzsJCWlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpKSB7CiYjNDM7CQkJaWYgKG5ld3NrKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQl9CiAJfQogb3V0OgomIzQzOwlpZiAobmV3c2tfbG9ja2VkKQomIzQzOwkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwogCWJoX3VubG9ja19zb2NrKHNrKTsKIAlzb2NrX3B1dChzayk7CiYjNDM7CWlmIChuZXdza19sb29rdXBfcmVmKQomIzQzOwkJc29ja19wdXQobmV3c2spOwogCXJldHVybjsKJiM0MztyZXRyeV91bmxvY2s6CiYjNDM7CWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJbmV3c2tfbG9ja2VkID0gZmFsc2U7CiYjNDM7CWJoX3VubG9ja19zb2NrKHNrKTsKJiM0MzsJc29ja19wdXQoc2spOwomIzQzOwlzb2NrX3B1dChuZXdzayk7CiYjNDM7CW5ld3NrID0gTlVMTDsKJiM0MzsJbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlOwomIzQzOwlnb3RvIGxvb2t1cDsKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuOwpAQCAtODUyLDEyICYjNDM7MTAyOCw1MyBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiYjNDM7CXN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi0mZ3Q7c2s7CiAKIAlpZiAobGlrZWx5KGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfUEFDS0VUKSkgewotCQlpZiAobGlrZWx5KGxsYy0mZ3Q7c3RhdGUgJmd0OyAxKSkgLyogbm90IGNsb3NlZCAqLwomIzQzOwkJaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7CiYjNDM7CQkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJCWJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spOwomIzQzOwkJCWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJCSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIHJldHJ5OwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8CiYjNDM7CQkJICAgIHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8CiYjNDM7CQkJICAgIGxsY19zayhuZXdzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNKSB7CiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQkJfQogCQkJcmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7Ci0JCWVsc2UKJiM0MzsJCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpCiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCX0gZWxzZSBpZiAobmV3c2sgJmFtcDsmYW1wOwomIzQzOwkJCSAgIGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkJICAgTExDX0lOQ09NSU5HX1FVRVVFRCkgewomIzQzOwkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQlpZiAobGxjX3NrKG5ld3NrKS0mZ3Q7c3RhdGUgJmx0Oz0gTExDX0NPTk5fU1RBVEVfQURNKSB7CiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQkJfQomIzQzOwkJCXJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpOwomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCX0gZWxzZSBpZiAobGlrZWx5KGxsYy0mZ3Q7c3RhdGUgJmd0OyAxKSkgewomIzQzOwkJCXJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpOwomIzQzOwkJfSBlbHNlIHsKIAkJCWdvdG8gb3V0X2tmcmVlX3NrYjsKJiM0MzsJCX0KIAl9IGVsc2UgaWYgKGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfRVZFTlQpIHsKIAkJLyogdGltZXIgZXhwaXJhdGlvbiBldmVudCAqLwogCQlpZiAobGlrZWx5KGxsYy0mZ3Q7c3RhdGUgJmd0OyAxKSkgIC8qIG5vdCBjbG9zZWQgKi8KQEAgLTg3MCw2ICYjNDM7MTA4NywyNCBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJfQogb3V0OgogCXJldHVybiByYzsKJiM0MztyZXRyeToKJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CSAgICBMTENfSU5DT01JTkdfUVVFVUVEKSB7CiYjNDM7CQlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCWlmIChsbGNfc2sobmV3c2spLSZndDtzdGF0ZSAmZ3Q7IExMQ19DT05OX1NUQVRFX0FETSkKJiM0MzsJCQlyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTsKJiM0MzsJCWVsc2UgewomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQl9CiYjNDM7CQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWdvdG8gb3V0X2tmcmVlX3NrYjsKIG91dF9rZnJlZV9za2I6CiAJa2ZyZWVfc2tiKHNrYik7CiAJZ290byBvdXQ7CkBAIC05NTksMTcgJiM0MzsxMTk0LDE4IEBAIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYykKIAogLyoqCiAgKglsbGNfc2tfZnJlZSAtIEZyZWVzIGEgTExDIHNvY2tldAotICoJQHNrOiAtIHNvY2tldCB0byBmcmVlCiYjNDM7ICoJQHNrOiBzb2NrZXQgdG8gZnJlZQomIzQzOyAqCUBzeW5jOiB3aGV0aGVyIHRvIHN5bmNocm9ub3VzbHkgc3RvcCB0aW1lcnMKICAqCi0gKglGcmVlcyBhIExMQyBzb2NrZXQKJiM0MzsgKglGcmVlcyBhIExMQyBzb2NrZXQuCiAgKi8KLXZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKQomIzQzO3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpCiB7CiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCiAJbGxjLSZndDtzdGF0ZSA9IExMQ19DT05OX09VVF9PRl9TVkM7CiAJLyogU3RvcCBhbGwgKHBvc3NpYmx5KSBydW5uaW5nIHRpbWVycyAqLwotCWxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpOwomIzQzOwlsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCBzeW5jKTsKICNpZmRlZiBERUJVR19MTENfQ09OTl9BTExPQwogCXByaW50ayhLRVJOX0lORk8gJiMzNDslczogdW5hY2txPSVkLCB0eHE9JWRcbiYjMzQ7LCBfX2Z1bmNfXywKIAkJc2tiX3F1ZXVlX2xlbigmYW1wO2xsYy0mZ3Q7cGR1X3VuYWNrX3EpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDExODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQgZm9yIExMQyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBwYXRjaCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIExMQyBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbCAoYG5ldC9sbGMvYCksIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHNvY2tldCBoYW5kbGluZyBkdXJpbmcgaW5jb21pbmcgY29ubmVjdGlvbnMsIGxpa2VseSBhaW1pbmcgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHRpZWQgdG8gc29ja2V0IGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggdGVuZCB0byBiZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpGaXJzdCwgbGV0JiMzOTtzIGlzb2xhdGUgdGhlIGNoYW5nZXMuIFdlJiMzOTt2ZSBnb3QgYWRkaXRpb25zIHRvIGBzdHJ1Y3QgbGxjX3NvY2tgIChuZXcgZmllbGRzIGBpbmNvbWluZ19zdGF0ZWAsIGBpbmNvbWluZ19saXN0ZW5lcmAsIGBpbmNvbWluZ193b3JrYCksIG1vZGlmaWNhdGlvbnMgaW4gYGFmX2xsYy5jYCBpbnZvbHZpbmcgc29ja2V0IHJlbGVhc2UgKGBsbGNfdWlfcmVsZWFzZWApLCBhbmQgbW9kaWZpY2F0aW9ucyBpbiBgbGxjX2Nvbm4uY2AgdG8gaGFuZGxlIHRoZSBsaWZlY3ljbGUgd2l0aCB0aGUgbmV3IGZpZWxkcywgd29ya3F1ZXVlIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnRyb2R1Y2Ugc3RhdGUgdHJhY2tpbmcgYW5kIGEgd29ya3F1ZXVlIHRvIG1hbmFnZSB0aGUgZnJlZWluZyBvZiBpbmNvbWluZyBzb2NrZXRzLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IERvZXMgdGhpcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBBcmUgdGhlcmUgbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlPyBOby4gQXJlIHRoZSBuZXcgYHN0cnVjdCBsbGNfc29ja2AgZmllbGRzIGluaXRpYWxpemVkIGJlZm9yZSB1c2U/IFllcywgdGhleSYjMzk7cmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrYC4gRG9lcyB0aGlzIHRvdWNoIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnM/IE5vLiBEb2VzIHRoaXMgY29weSBkYXRhIHRvIHVzZXIgc3BhY2U/IE5vLCBub3RoaW5nIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4KCkJhc2VkIG9uIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlc+KAlHNvY2tldCBsaWZlY3ljbGUsIGxvY2tpbmcsIGFuZCBzdGF0ZSBtYWNoaW5lIHRyYW5zaXRpb25z4oCUaXQgYXBwZWFycyB0byBiZSBhIGZpeCBmb3IgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIHRoZSBicmVhZCBhbmQgYnV0dGVyIG9mIEtBU0FOIGFuZCBMT0NLREVQLiBObyByZWQgZmxhZ3MgcG9pbnRpbmcgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSBhcmUgcHJlc2VudCBhdCB0aGlzIHBvaW50LgoKTGV0JiMzOTtzIGRvIGEgZmluYWwgY2hlY2suIFRoZSBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgIGZ1bmN0aW9uIGlzIGFkZGVkLCB3aGljaCBpbnZvbHZlcyBgbGxjX2FsbG9jX2ZyYW1lYCwgYGxsY19wZHVfaGVhZGVyX2luaXRgLCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAsIGFuZCBgbGxjX21hY19oZHJfaW5pdGAuIFdlJiMzOTtyZSBjcmVhdGluZyBhbmQgc2VuZGluZyBTS0JzLCBidXQgdHlwaWNhbGx5IGZ1bmN0aW9ucyBsaWtlIGBhbGxvY19za2JgIGFuZCBoZWFkZXIgaW5pdGlhbGl6YXRpb24gd3JpdGUgdGhlIGJ5dGVzIGV4YWN0bHkgYXMgbmVlZGVkLiBMZXQgbWUgcXVlcnkgZm9yIGBsbGNfYWxsb2NfZnJhbWVgIHRvIGJlIGNlcnRhaW4uCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBwYXRjaCwgYW5kIG5vIGluZGljYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsbGNfYWxsb2NfZnJhbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbGxjX3NhcC5oPTE3PXZvaWQgbGxjX3NhdmVfcHJpbWl0aXZlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L2xsY19zYXAuaC0xOC1cdFx0XHR1bnNpZ25lZCBjaGFyIHByaW0pO1xuaW5jbHVkZS9uZXQvbGxjX3NhcC5oOjE5OnN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9uZXQvbGxjX3NhcC5oLTIwLVx0XHRcdFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTE5Mj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kaXNjX2NtZF9wX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMTk1LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjE5NjpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtMTk3LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0yMTc9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0yMjAtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjIxOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMjItXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTI0Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kbV9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTI0Ni1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzoyNDc6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTI0OC1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MjY3PWludCBsbGNfY29ubl9hY19zZW5kX2ZybXJfcnNwX2Zfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0yNzktXHRcdGZfYml0ID0gMDtcbm5ldC9sbGMvbGxjX2NfYWMuYzoyODA6XHRuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yODEtXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0zMDE9aW50IGxsY19jb25uX2FjX3Jlc2VuZF9mcm1yX3JzcF9mX3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMzA0LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjMwNTpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMDYtXHRcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY19mcm1yX2luZm8pKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MzI4PWludCBsbGNfY29ubl9hY19yZXNlbmRfZnJtcl9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTMzNS1cdGxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsIFx1MDAyNmZfYml0KTtcbm5ldC9sbGMvbGxjX2NfYWMuYzozMzY6XHRuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMzctXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz00MjE9aW50IGxsY19jb25uX2FjX3Jlc2VuZF9pX3h4eF94X3NldF8wX29yX3NlbmRfcnIoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy00MjctXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NDI4Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy00MjktXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTQ1OT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy00NjItXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NDYzOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy00NjQtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTQ4Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy00ODYtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NDg3Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy00ODgtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTUwNz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01MTAtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NTExOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy01MTItXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTUzMT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01MzQtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NTM1Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy01MzYtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTU1NT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01NTgtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NTU5Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy01NjAtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTU3OT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01ODItXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NTgzOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy01ODQtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTYxNT1pbnQgbGxjX2Nvbm5fYWNfb3B0X3NlbmRfcm5yX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNjE4LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjYxOTpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNjIwLVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz02Mzk9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy02NDItXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NjQzOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy02NDQtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTY2Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTY2Ni1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo2Njc6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTY2OC1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9Njg4PWludCBsbGNfY29ubl9hY19zZW5kX2Fja19yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTY5MS1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo2OTI6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTY5My1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NzEyPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzE1LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjcxNjpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNzE3LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz03MzY9aW50IGxsY19jb25uX2FjX3NlbmRfYWNrX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzM5LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjc0MDpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNzQxLVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz03NzA9aW50IGxsY19jb25uX2FjX3NlbmRfc2FibWVfY21kX3Bfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy03NzMtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6Nzc0Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy03NzUtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTc5OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF91YV9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTgwMi1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo4MDM6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTgwNC1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9OTU5PXN0YXRpYyBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9yc3BfZl9zZXRfYWNrcGYoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy05NjMtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6OTY0Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy05NjUtXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTg1Mj1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy04NTctXG5uZXQvbGxjL2xsY19jb25uLmM6ODU4Olx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG5uZXQvbGxjL2xsY19jb25uLmMtODU5LVx0aWYgKCFuc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0xMDU9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfeGlkX3Ioc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19zX2FjLmMtMTEzLVx0bGxjX3BkdV9kZWNvZGVfc3NhcChza2IsIFx1MDAyNmRzYXApO1xubmV0L2xsYy9sbGNfc19hYy5jOjExNDpcdG5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXG5uZXQvbGxjL2xsY19zX2FjLmMtMTE1LVx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY194aWRfaW5mbykpO1xuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0xNDg9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfdGVzdF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTE2My1cdGRhdGFfc2l6ZSA9IG50b2hzKGV0aF9oZHIoc2tiKS1cdTAwM2VoX3Byb3RvKSAtIDM7XG5uZXQvbGxjL2xsY19zX2FjLmM6MTY0Olx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgZGF0YV9zaXplKTtcbm5ldC9sbGMvbGxjX3NfYWMuYy0xNjUtXHRpZiAoIW5za2IpXG4tLVxubmV0L2xsYy9sbGNfc2FwLmM9MjI9c3RhdGljIGludCBsbGNfbWFjX2hlYWRlcl9sZW4odW5zaWduZWQgc2hvcnQgZGV2dHlwZSlcbi0tXG5uZXQvbGxjL2xsY19zYXAuYy0zMi0vKipcbm5ldC9sbGMvbGxjX3NhcC5jOjMzOiAqXHRsbGNfYWxsb2NfZnJhbWUgLSBhbGxvY2F0ZXMgc2tfYnVmZiBmb3IgZnJhbWVcbm5ldC9sbGMvbGxjX3NhcC5jLTM0LSAqXHRAc2s6ICBzb2NrZXQgdG8gYWxsb2NhdGUgZnJhbWUgdG9cbi0tXG5uZXQvbGxjL2xsY19zYXAuYy00MS0gKi9cbm5ldC9sbGMvbGxjX3NhcC5jOjQyOnN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2xsYy9sbGNfc2FwLmMtNDMtXHRcdFx0XHR1OCB0eXBlLCB1MzIgZGF0YV9zaXplKVxuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYz00Mj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfeGlkX3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtNDUtXHRpbnQgcmMgPSAxO1xubmV0L2xsYy9sbGNfc3RhdGlvbi5jOjQ2Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtNDctXHRcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY194aWRfaW5mbykpO1xuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYz02Nj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfdGVzdF9yKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTc3LVx0ZGF0YV9zaXplID0gbnRvaHMoZXRoX2hkcihza2IpLVx1MDAzZWhfcHJvdG8pIC0gMztcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo3ODpcdG5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIGRhdGFfc2l6ZSk7XG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtNzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTY0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgbGxjX2FsbG9jX2ZyYW1lYCBGdW5jdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgbGxjX2FsbG9jX2ZyYW1lYCwgYW5kIGl0cyByb2xlIGluIGFsbG9jYXRpbmcgYW4gYHNrYmAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgbmV0d29yayBidWZmZXIgc3RydWN0dXJlLCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGNsZWFybHkgY3JpdGljYWwuIExldCYjMzk7cyBkaWcgaW4gYW5kIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBsbGNfYWxsb2NfZnJhbWVgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGludGVyZmFjaW5nIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2tiIGFsbG9jYXRpb24gbWVjaGFuaXNtcy4gV2hhdCYjMzk7cyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgaXQgdXNpbmcgYSBzdGFuZGFyZCBga21hbGxvY2AgYXBwcm9hY2gsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIGZvciBza2JzPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGZsYWdzIG9yIHBhcmFtZXRlcnMgcGFzc2VkIHRoYXQgaGludCBhdCBMTEMtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGZvciB0aGUgbmV0d29yayBmcmFtZT8gS25vd2luZyBob3cgaXQmIzM5O3MgYWxsb2NhdGluZywgaW5pdGlhbGl6aW5nLCBhbmQgcG90ZW50aWFsbHkgbGlua2luZyB0aGlzIGBza2JgIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBwcm90b2NvbCBzdGFjay4gSSBuZWVkIHRvIHNlZSBpZiBpdCB1dGlsaXplcyBhbnkgY3VzdG9tIGFsbG9jYXRvcnMsIG9yIGlmIGl0IG1pZ2h0IGJlIHN1YmplY3QgdG8gZnJhZ21lbnRhdGlvbiBpc3N1ZXMgaWYgaGFuZGxpbmcgbGFyZ2VyIGZyYW1lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNrX2J1ZmYgXFwqbGxjX2FsbG9jX2ZyYW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xsY19zYXAuaD0xNz12b2lkIGxsY19zYXZlX3ByaW1pdGl2ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL25ldC9sbGNfc2FwLmgtMTgtXHRcdFx0dW5zaWduZWQgY2hhciBwcmltKTtcbmluY2x1ZGUvbmV0L2xsY19zYXAuaDoxOTpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L2xsY19zYXAuaC0yMC1cdFx0XHRcdHU4IHR5cGUsIHUzMiBkYXRhX3NpemUpO1xuLS1cbm5ldC9sbGMvbGxjX3NhcC5jPTIyPXN0YXRpYyBpbnQgbGxjX21hY19oZWFkZXJfbGVuKHVuc2lnbmVkIHNob3J0IGRldnR5cGUpXG4tLVxubmV0L2xsYy9sbGNfc2FwLmMtNDEtICovXG5uZXQvbGxjL2xsY19zYXAuYzo0MjpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9sbGMvbGxjX3NhcC5jLTQzLVx0XHRcdFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBsbGNfc2FwLmNgIC0gTGluZSA0MioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGluIHRoZSBMTEMgKExvZ2ljYWwgTGluayBDb250cm9sKSBzdWJsYXllciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFNlcnZpY2UgQWNjZXNzIFBvaW50IChTQVApIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBuZXQvbGxjL2xsY19zYXAuY2AgYmVjYXVzZSBpdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIFNBUC1yZWxhdGVkIGNvZGUuIE15IGh1bmNoIGlzIHRoYXQgdGhpcyBmaWxlIHdpbGwgY29udGFpbiB0aGUgcmVnaXN0cmF0aW9uLCBsb29rdXAsIGFuZCBwb3RlbnRpYWwgaGFuZGxpbmcgb2YgU0FQcy4gTm93LCBzaW5jZSBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjayBhcmNoaXRlY3R1cmUsIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIGxpbmUgNDIuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdldCBtZSBpbnRvIHRoZSBoZWFydCBvZiBhIHJlbGV2YW50IGZ1bmN0aW9uIG9yIGRhdGEgc3RydWN0dXJlIGRlZmluaXRpb24uIERlcGVuZGluZyBvbiB0aGUgY29kZSBzdHlsZSwgbGluZSA0MiBjb3VsZCBiZSB0aGUgc3RhcnQgb2YgYSBmdW5jdGlvbiBvciBhIGdsb2JhbCB2YXJpYWJsZS4gS25vd2luZyB0aGUgc3RydWN0dXJlIG9mIHRoZSBmaWxlIGlzIGtleSwgc28gbGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQgdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2xsYy9sbGNfc2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0fVxuICAzMTpcdFxuICAzMjpcdC8qKlxuICAzMzpcdCAqXHRsbGNfYWxsb2NfZnJhbWUgLSBhbGxvY2F0ZXMgc2tfYnVmZiBmb3IgZnJhbWVcbiAgMzQ6XHQgKlx0QHNrOiAgc29ja2V0IHRvIGFsbG9jYXRlIGZyYW1lIHRvXG4gIDM1Olx0ICpcdEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRoaXMgc2tiIHdpbGwgYmUgc2VudCBvdmVyXG4gIDM2Olx0ICpcdEB0eXBlOiBwZHUgdHlwZSB0byBhbGxvY2F0ZVxuICAzNzpcdCAqXHRAZGF0YV9zaXplOiBkYXRhIHNpemUgdG8gYWxsb2NhdGVcbiAgMzg6XHQgKlxuICAzOTpcdCAqXHRBbGxvY2F0ZXMgYW4gc2tfYnVmZiBmb3IgZnJhbWUgYW5kIGluaXRpYWxpemVzIHNrX2J1ZmYgZmllbGRzLlxuICA0MDpcdCAqXHRSZXR1cm5zIGFsbG9jYXRlZCBza2Igb3IgJU5VTEwgd2hlbiBvdXQgb2YgbWVtb3J5LlxuICA0MTpcdCAqL1xuICA0MjpcdHN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICA0MzpcdFx0XHRcdFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcbiAgNDQ6XHR7XG4gIDQ1Olx0XHRpbnQgaGxlbiA9IHR5cGUgPT0gTExDX1BEVV9UWVBFX1UgPyAzIDogNDtcbiAgNDY6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gIDQ3Olx0XG4gIDQ4Olx0XHRobGVuICYjNDM7PSBsbGNfbWFjX2hlYWRlcl9sZW4oZGV2LVx1MDAzZXR5cGUpO1xuICA0OTpcdFx0c2tiID0gYWxsb2Nfc2tiKGhsZW4gJiM0MzsgZGF0YV9zaXplLCBHRlBfQVRPTUlDKTtcbiAgNTA6XHRcbiAgNTE6XHRcdGlmIChza2IpIHtcbiAgNTI6XHRcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiAgNTM6XHRcdFx0c2tiX3Jlc2VydmUoc2tiLCBobGVuKTtcbiAgNTQ6XHRcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gIDU1Olx0XHRcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gIDU2Olx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTtcbiAgNTc6XHRcdFx0c2tiLVx1MDAzZWRldiAgICAgID0gZGV2O1xuICA1ODpcdFx0XHRpZiAoc2sgIT0gTlVMTClcbiAgNTk6XHRcdFx0XHRza2Jfc2V0X293bmVyX3coc2tiLCBzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDU3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMTEMgRnJhbWUgQWxsb2NhdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgbGxjX2FsbG9jX2ZyYW1lYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSB1c2Ugb2YgYGFsbG9jX3NrYmAg4oCTIHRoYXQmIzM5O3Mgc3RhbmRhcmQgZm9yIGFsbG9jYXRpbmcgdGhlIHNvY2tldCBidWZmZXIsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIG5ldHdvcmsgY29tbXVuaWNhdGlvbi4gTm93LCBpdCBsb29rcyBsaWtlIGFmdGVyIHRoZSBTS0IgaXMgYWxsb2NhdGVkLCB0aGVyZSBhcmUgc2V2ZXJhbCBpbml0aWFsaXphdGlvbiBzdGVwcy4gU3BlY2lmaWNhbGx5LCBgbGxjX3BkdV9oZWFkZXJfaW5pdGAsIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCwgYW5kIGBsbGNfbWFjX2hkcl9pbml0YCBhcmUgY2FsbGVkLCBhbmQgSSBzdXNwZWN0IHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgcGllY2VzIHRoYXQgcG9wdWxhdGUgdGhlIGhlYWRlcnMgd2l0aGluIHRoZSBTS0IuIE15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGJvdGggYGxsY19wZHVfaGVhZGVyX2luaXRgIGFuZCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBQcm90b2NvbCBEYXRhIFVuaXQgKFBEVSkgaGVhZGVycyBhbmQgdGhlIERhdGEgTWFuYWdlbWVudCByZXNwb25zZSBhcmUgYmVpbmcgY29uc3RydWN0ZWQuIFRoYXQmIzM5O2xsIGJlIGtleSB0byBmaWd1cmluZyBvdXQgaG93IHRoZSBmcmFtZSBpcyBwdXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgbGxjX3BkdV9oZWFkZXJfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sbGNfcGR1Lmg9MjEyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19wZHVfdW4gKmxsY19wZHVfdW5faGRyKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTIyNi0gKi9cbmluY2x1ZGUvbmV0L2xsY19wZHUuaDoyMjc6c3RhdGljIGlubGluZSB2b2lkIGxsY19wZHVfaGVhZGVyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHlwZSxcbmluY2x1ZGUvbmV0L2xsY19wZHUuaC0yMjgtXHRcdFx0XHQgICAgICAgdTggc3NhcCwgdTggZHNhcCwgdTggY3IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTUwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBMTEMgUERVIFN0cnVjdHVyZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBMTEMgUERVIHN0cnVjdHVyZSwgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGluY2x1ZGUvbmV0L2xsY19wZHUuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMjcuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4gdG8gZ2V0IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFueSBkZWZpbmVkIGNvbnN0YW50cyByZWxhdGVkIHRvIHRoZSBwcm90b2NvbCBkYXRhIHVuaXQuIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIGZpZWxkcy4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCBob3cgdGhlIHZhcmlvdXMgY29tcG9uZW50cyBhcmUgYXJyYW5nZWQgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBlYWNoIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xsY19wZHUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0ICpcdEB0eXBlOiB0eXBlIG9mIFBEVSAoVSwgSSBvciBTKS5cbiAyMjE6XHQgKlx0QHNzYXA6IHNvdXJjZSBzYXAuXG4gMjIyOlx0ICpcdEBkc2FwOiBkZXN0aW5hdGlvbiBzYXAuXG4gMjIzOlx0ICpcdEBjcjogY29tbWFuZC9yZXNwb25zZSBiaXQgKDAgb3IgMSkuXG4gMjI0Olx0ICpcbiAyMjU6XHQgKlx0VGhpcyBmdW5jdGlvbiBzZXRzIERTQVAsIFNTQVAgYW5kIGNvbW1hbmQvUmVzcG9uc2UgYml0IGluIExMQyBoZWFkZXIuXG4gMjI2Olx0ICovXG4gMjI3Olx0c3RhdGljIGlubGluZSB2b2lkIGxsY19wZHVfaGVhZGVyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHlwZSxcbiAyMjg6XHRcdFx0XHRcdCAgICAgICB1OCBzc2FwLCB1OCBkc2FwLCB1OCBjcilcbiAyMjk6XHR7XG4gMjMwOlx0XHRpbnQgaGxlbiA9IDQ7IC8qIGRlZmF1bHQgdmFsdWUgZm9yIEkgYW5kIFMgdHlwZXMgKi9cbiAyMzE6XHRcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHU7XG4gMjMyOlx0XG4gMjMzOlx0XHRzd2l0Y2ggKHR5cGUpIHtcbiAyMzQ6XHRcdGNhc2UgTExDX1BEVV9UWVBFX1U6XG4gMjM1Olx0XHRcdGhsZW4gPSAzO1xuIDIzNjpcdFx0XHRicmVhaztcbiAyMzc6XHRcdGNhc2UgTExDX1BEVV9UWVBFX1VfWElEOlxuIDIzODpcdFx0XHRobGVuID0gNjtcbiAyMzk6XHRcdFx0YnJlYWs7XG4gMjQwOlx0XHR9XG4gMjQxOlx0XG4gMjQyOlx0XHRza2JfcHVzaChza2IsIGhsZW4pO1xuIDI0MzpcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gMjQ0Olx0XHRwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpO1xuIDI0NTpcdFx0cGR1LVx1MDAzZWRzYXAgPSBkc2FwO1xuIDI0NjpcdFx0cGR1LVx1MDAzZXNzYXAgPSBzc2FwO1xuIDI0NzpcdFx0cGR1LVx1MDAzZXNzYXAgfD0gY3I7XG4gMjQ4Olx0fVxuIDI0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYyOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYC4gSSBuZWVkIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoaXMgZnVuY3Rpb24gYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgb3ZlcmFsbCBwcm90b2NvbCBzdGFjay4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSBpdHMgcm9sZTsgaXQgc2VlbXMgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIERhdGEgTW9kZSAoRE0pIHJlc3BvbnNlLCBwcm9iYWJseSByZWxhdGVkIHRvIExMQyAoTG9naWNhbCBMaW5rIENvbnRyb2wpIGluaXRpYWxpemF0aW9uLiBJJiMzOTtsbCBtZW50YWxseSBtYXAgb3V0IHRoZSB0eXBpY2FsIGNhbGwgZmxvdyBhcm91bmQgdGhpcyBwb2ludCDigJMgd2hlcmUgZG9lcyB0aGlzIGZpdCB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBzZXF1ZW5jZT8gSXMgdGhpcyB0cmlnZ2VyZWQgYnkgYW4gaW5jb21pbmcgRE0gZnJhbWU/IElzIGl0IGEgcmVzcG9uc2UgdG8gYSBzcGVjaWZpYyByZXF1ZXN0IGZyb20gdGhlIHBlZXI/IEtub3dpbmcgdGhlIGNvbnRleHQsIEkgY2FuIHF1aWNrbHkgaG9uZSBpbiBvbiB0aGUgY29yZSBsb2dpYyBhbmQgY3JpdGljYWwgcGFyYW1ldGVycy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmdW5jdGlvbi4gV2hhdCBmYWlsdXJlIGNhc2VzIGFyZSBjb3ZlcmVkPyBBcmUgdGhleSBoYW5kbGVkIGdyYWNlZnVsbHksIG9yIGRvIHRoZXkgcG90ZW50aWFsbHkgbGVhdmUgdGhlIHN5c3RlbSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGU/IEZpbmFsbHksIEkgbmVlZCB0byBjb25zaWRlciBpdHMgaW50ZXJhY3Rpb25zIHdpdGggbG93ZXIgbGF5ZXJzLiBEb2VzIGl0IGNhbGwgYW55IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGxlYWQgdG8gcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3Igc3RhdGUgY2hhbmdlcyBpbiB0aGUgbGluayBsYXllcj8gQXJlIHRoZXNlIHByb3Blcmx5IHN5bmNocm9uaXplZCBhbmQgbWFuYWdlZD8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjb2RlIGFuZCBjb25maXJtIHRoaXMgbWVudGFsIG1vZGVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGxsY19wZHVfaW5pdF9hc19kbV9yc3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbGxjX3BkdS5oPTQzMD12b2lkIGxsY19wZHVfaW5pdF9hc19zYWJtZV9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcF9iaXQpO1xuaW5jbHVkZS9uZXQvbGxjX3BkdS5oOjQzMTp2b2lkIGxsY19wZHVfaW5pdF9hc19kbV9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZl9iaXQpO1xuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTQzMi12b2lkIGxsY19wZHVfaW5pdF9hc19mcm1yX3JzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGxjX3BkdV9zbiAqcHJldl9wZHUsXG4tLVxubmV0L2xsYy9sbGNfcGR1LmM9MTc4PXZvaWQgbGxjX3BkdV9pbml0X2FzX3NhYm1lX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwX2JpdClcbi0tXG5uZXQvbGxjL2xsY19wZHUuYy0xOTMtICovXG5uZXQvbGxjL2xsY19wZHUuYzoxOTQ6dm9pZCBsbGNfcGR1X2luaXRfYXNfZG1fcnNwKHN0cnVjdCBza19idWZmICpza2IsIHU4IGZfYml0KVxubmV0L2xsYy9sbGNfcGR1LmMtMTk1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMjkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbmV0L2xsYy9sbGNfcGR1LmNgIGFyb3VuZCBMaW5lIDE5NCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgbmV0L2xsYy9sbGNfcGR1LmNgLiBCYXNlZCBvbiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgMTk0LiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHBhcnQgb2YgdGhlIExMQyAoTG9naWNhbCBMaW5rIENvbnRyb2wpIFBEVSAoUHJvdG9jb2wgRGF0YSBVbml0KSBoYW5kbGluZywgcHJvYmFibHkgZWl0aGVyIGNvbnN0cnVjdGluZywgcGFyc2luZyBvciBwcm9jZXNzaW5nIHRoZSBkYXRhIHdpdGhpbiB0aGUgTExDIGhlYWRlciBvciBwYXlsb2FkLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiB3aWxsIHRlbGwgbWUgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxvdyBhbmQgd2hldGhlciBpdOKAmXMgcmVsYXRlZCB0byBpbmNvbWluZyBmcmFtZXMsIG91dGdvaW5nIGZyYW1lcywgY29ubmVjdGlvbiBzZXR1cCBvciBkYXRhIHRyYW5zZmVyLiBHaXZlbiB0aGF0IHRoaXMgaXMgTExDLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgRFNBUCAoRGVzdGluYXRpb24gU2VydmljZSBBY2Nlc3MgUG9pbnQpLCBTU0FQIChTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQpLCBDb250cm9sIGZpZWxkcywgcG90ZW50aWFsbHkgYW4gSW5mb3JtYXRpb24gZmllbGQsIGFuZCBtYXliZSBldmVuIHNvbWUgc3VibmV0d29yayBhY2Nlc3MgcHJvdG9jb2wgZGV0YWlscy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGVycm9ycywgc3RhdGUgdHJhbnNpdGlvbnMsIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIE1BQyBsYXllci4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgbGluZSAxOTQgbWlnaHQgaG9sZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbGxjL2xsY19wZHUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0ICpcdEBmX2JpdDogVGhlIEYgYml0IHRvIHNldCBpbiB0aGUgUERVXG4gMTkxOlx0ICpcbiAxOTI6XHQgKlx0QnVpbGRzIGEgcGR1IGZyYW1lIGFzIGEgRE0gcmVzcG9uc2UuXG4gMTkzOlx0ICovXG4gMTk0Olx0dm9pZCBsbGNfcGR1X2luaXRfYXNfZG1fcnNwKHN0cnVjdCBza19idWZmICpza2IsIHU4IGZfYml0KVxuIDE5NTpcdHtcbiAxOTY6XHRcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpO1xuIDE5NzpcdFxuIDE5ODpcdFx0cGR1LVx1MDAzZWN0cmxfMSAgPSBMTENfUERVX1RZUEVfVTtcbiAxOTk6XHRcdHBkdS1cdTAwM2VjdHJsXzEgfD0gTExDXzJfUERVX1JTUF9ETTtcbiAyMDA6XHRcdHBkdS1cdTAwM2VjdHJsXzEgfD0gKChmX2JpdCBcdTAwMjYgMSkgXHUwMDNjXHUwMDNjIDQpIFx1MDAyNiBMTENfVV9QRl9CSVRfTUFTSztcbiAyMDE6XHR9XG4gMjAyOlx0XG4gMjAzOlx0LyoqXG4gMjA0Olx0ICpcdGxsY19wZHVfaW5pdF9hc19mcm1yX3JzcCAtIGJ1aWxkcyBGUk1SIHJlc3BvbnNlIFBEVVxuIDIwNTpcdCAqXHRAc2tiOiBBZGRyZXNzIG9mIHRoZSBmcmFtZSB0byBidWlsZFxuIDIwNjpcdCAqXHRAcHJldl9wZHU6IFRoZSByZWplY3RlZCBQRFUgZnJhbWVcbiAyMDc6XHQgKlx0QGZfYml0OiBUaGUgRiBiaXQgdG8gc2V0IGluIHRoZSBQRFVcbiAyMDg6XHQgKlx0QHZzOiB0eCBzdGF0ZSB2YXJpIHZhbHVlIGZvciB0aGUgZGF0YSBsaW5rIGNvbm4gYXQgdGhlIHJlamVjdGluZyBMTENcbiAyMDk6XHQgKlx0QHZyOiByeCBzdGF0ZSB2YXIgdmFsdWUgZm9yIHRoZSBkYXRhIGxpbmsgY29ubiBhdCB0aGUgcmVqZWN0aW5nIExMQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk0MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExMQyBQRFUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgTExDIFBEVSBpcyBpbml0aWFsaXplZC4gYGxsY19wZHVfaGVhZGVyX2luaXRgIGlzIHRha2luZyBjYXJlIG9mIHNldHRpbmcgdGhlIGBkc2FwYCBhbmQgYHNzYXBgIGZpZWxkcy4gVGhlbiwgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBgY3RybF8xYCBmaWVsZC4gUmlnaHQsIHNvIGZhciwgc28gZ29vZC4KCkZvciB0aGUgYExMQ19QRFVfVFlQRV9VYCBQRFUgdHlwZSwgdGhlIGhlYWRlciBsZW5ndGgsIGBobGVuYCwgaXMgc2V0IHRvIDMgYnl0ZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZSBMTEMgc3VibGF5ZXIuIE5vdywgbGV0JiMzOTtzIGNvbm5lY3QgdGhlIGRvdHMuIFRoZSBgc3RydWN0IGxsY19wZHVfdW5gIHN0cnVjdHVyZSBpcyBkZWZpbmVkIHRvIGhvbGQgdGhlIGBkc2FwYCwgYHNzYXBgLCBhbmQgYGN0cmxfMWAgZmllbGRzLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgaXMgY29ycmVjdC4gSeKAmW0gZ29pbmcgdG8gZ28gYWhlYWQgYW5kIGNoZWNrIHRoYXQgYHN0cnVjdCBsbGNfcGR1X3VuYCBkZWZpbml0aW9uIGFnYWluLiBKdXN0IHRvIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGxsY19wZHVfdW4gXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xsY19wZHUuaD0yMDA9c3RhdGljIGlubGluZSBzdHJ1Y3QgbGxjX3BkdV9zbiAqbGxjX3BkdV9zbl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjA1LS8qIFVuLW51bWJlcmVkIFBEVSBmb3JtYXQgKDMgYnl0ZXMgaW4gbGVuZ3RoKSAqL1xuaW5jbHVkZS9uZXQvbGxjX3BkdS5oOjIwNjpzdHJ1Y3QgbGxjX3BkdV91biB7XG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjA3LVx0dTggZHNhcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIExMQyBQRFUgU3RydWN0dXJlKioKCk9rYXksIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBMb2dpY2FsIExpbmsgQ29udHJvbCAoTExDKSBQcm90b2NvbCBEYXRhIFVuaXQgKFBEVSkgZm9ybWF0LCBwYXJ0aWN1bGFybHkgaG93IGl0JiMzOTtzIGRlZmluZWQgaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGluY2x1ZGUvbmV0L2xsY19wZHUuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMDYuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uIHJlc2lkZXMsIG9yIGF0IGxlYXN0IGEgZ29vZCBjaHVuayBvZiByZWxhdGVkIGVudW1zIGFuZCBzdHJ1Y3R1cmVzLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBsYXlvdXQgYW5kIGFueSBjcnVjaWFsIGZpZWxkcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJiMzOTttIGRlYnVnZ2luZyBvciB0aGUgb3B0aW1pemF0aW9uIEkmIzM5O20gY29uc2lkZXJpbmcuIFRoaW5raW5nIHRoaXMgd291bGQgYmUgdGhlIGJlc3QgbG9jYXRpb24gdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbGxjX3BkdS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGNfcGR1X3NuICpsbGNfcGR1X3NuX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDIwMTpcdHtcbiAyMDI6XHRcdHJldHVybiAoc3RydWN0IGxsY19wZHVfc24gKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiAyMDM6XHR9XG4gMjA0Olx0XG4gMjA1Olx0LyogVW4tbnVtYmVyZWQgUERVIGZvcm1hdCAoMyBieXRlcyBpbiBsZW5ndGgpICovXG4gMjA2Olx0c3RydWN0IGxsY19wZHVfdW4ge1xuIDIwNzpcdFx0dTggZHNhcDtcbiAyMDg6XHRcdHU4IHNzYXA7XG4gMjA5Olx0XHR1OCBjdHJsXzE7XG4gMjEwOlx0fSBfX3BhY2tlZDtcbiAyMTE6XHRcbiAyMTI6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGNfcGR1X3VuICpsbGNfcGR1X3VuX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDIxMzpcdHtcbiAyMTQ6XHRcdHJldHVybiAoc3RydWN0IGxsY19wZHVfdW4gKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiAyMTU6XHR9XG4gMjE2Olx0XG4gMjE3Olx0LyoqXG4gMjE4Olx0ICpcdGxsY19wZHVfaGVhZGVyX2luaXQgLSBpbml0aWFsaXplcyBwZHUgaGVhZGVyXG4gMjE5Olx0ICpcdEBza2I6IGlucHV0IHNrYiB0aGF0IGhlYWRlciBtdXN0IGJlIHNldCBpbnRvIGl0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk3NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkxMQyBQRFUgSW5pdGlhbGl6YXRpb246IEEgUXVpY2sgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20ganVzdCBxdWlja2x5IGdvaW5nIG92ZXIgdGhlIExMQyBQRFUgaW5pdGlhbGl6YXRpb24gdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkgc2VlIHRoYXQgdGhlIGBzdHJ1Y3QgbGxjX3BkdV91bmAgaXMsIGFzIGV4cGVjdGVkLCBhIGNvbXBhY3QgMyBieXRlcy4gTm93LCBJIHJlbWVtYmVyIHRoYXQgYGxsY19wZHVfaGVhZGVyX2luaXRgIGNsZWFubHkgc2V0cyB0aGUgYGRzYXBgIGFuZCBgc3NhcGAgZmllbGRzLiBFeGNlbGxlbnQuIFRoZW4sIHRvIHJvdW5kIHRoaW5ncyBvdXQsIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCB0YWtlcyBjYXJlIG9mIHRoZSBgY3RybF8xYCBieXRlLgoKU28sIGZyb20gd2hhdCBJIGNhbiBzZWUgaGVyZSwgYWxsIDMgYnl0ZXMgd2l0aGluIHRoYXQgc3RydWN0dXJlIGFyZSBkZWZpbml0ZWx5IGluaXRpYWxpemVkLiBJJiMzOTttIGp1c3Qgd29uZGVyaW5nIGlmIHRoZXJlIGlzIGFueXRoaW5nIEkgc2hvdWxkIGJlIGF3YXJlIG9mIHJlZ2FyZGluZyBgbGxjX21hY19oZHJfaW5pdGAgdGhhdCBJIGFtIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBsbGNfbWFjX2hkcl9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xsYy5oPTk0PWludCBsbGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsXG4tLVxuaW5jbHVkZS9uZXQvbGxjLmgtOTYtXG5pbmNsdWRlL25ldC9sbGMuaDo5NzppbnQgbGxjX21hY19oZHJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSxcbmluY2x1ZGUvbmV0L2xsYy5oLTk4LVx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhKTtcbi0tXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0yNC0gKi9cbm5ldC9sbGMvbGxjX291dHB1dC5jOjI1OmludCBsbGNfbWFjX2hkcl9pbml0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0yNi1cdFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDY2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlIGZvciBgbmV0L2xsYy9sbGNfb3V0cHV0LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgb3V0cHV0IHByb2Nlc3MgaXMgaGFuZGxlZCB0aGVyZS4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZWN0aW9uIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgaW4gdGhlIExMQyBsYXllciwgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgbG9naWMgYXQgdGhpcyBwb2ludCBpbiB0aGUgY29kZS4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyBzZWN0aW9uIHByb2JhYmx5IHRvdWNoZXMgb24gZnJhbWUgZm9ybWF0dGluZywgcXVldWluZywgYW5kIHBvc3NpYmx5IGludGVyYWN0aW9uIHdpdGggbG93ZXItbGV2ZWwgZHJpdmVycy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gYW55IHN1YnRsZSBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgYm90dGxlbmVja3MuIEdldHRpbmcgdGhlIGRldGFpbHMgcmlnaHQgaGVyZSBjYW4gbWFrZSBhIGJpZyBkaWZmZXJlbmNlLCBlc3BlY2lhbGx5IGluIGhpZ2gtdGhyb3VnaHB1dCBlbnZpcm9ubWVudHMuIFRoaXMgd2lsbCBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbGxjL2xsY19vdXRwdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQgKlx0QGRhOiBUaGUgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3NcbiAgMjE6XHQgKlxuICAyMjpcdCAqXHRGaWxscyBNQUMgaGVhZGVyIGZpZWxkcywgZGVwZW5kaW5nIG9uIE1BQyB0eXBlLiBSZXR1cm5zIDAsIElmIE1BQyB0eXBlXG4gIDIzOlx0ICpcdGlzIGEgdmFsaWQgdHlwZSBhbmQgaW5pdGlhbGl6YXRpb24gY29tcGxldGVzIGNvcnJlY3RseSAxLCBvdGhlcndpc2UuXG4gIDI0Olx0ICovXG4gIDI1Olx0aW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgMjY6XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGEpXG4gIDI3Olx0e1xuICAyODpcdFx0aW50IHJjID0gLUVJTlZBTDtcbiAgMjk6XHRcbiAgMzA6XHRcdHN3aXRjaCAoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlKSB7XG4gIDMxOlx0XHRjYXNlIEFSUEhSRF9FVEhFUjpcbiAgMzI6XHRcdGNhc2UgQVJQSFJEX0xPT1BCQUNLOlxuICAzMzpcdFx0XHRyYyA9IGRldl9oYXJkX2hlYWRlcihza2IsIHNrYi1cdTAwM2VkZXYsIEVUSF9QXzgwMl8yLCBkYSwgc2EsXG4gIDM0Olx0XHRcdFx0XHQgICAgIHNrYi1cdTAwM2VsZW4pO1xuICAzNTpcdFx0XHRpZiAocmMgXHUwMDNlIDApXG4gIDM2Olx0XHRcdFx0cmMgPSAwO1xuICAzNzpcdFx0XHRicmVhaztcbiAgMzg6XHRcdGRlZmF1bHQ6XG4gIDM5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk2OAoJCQkJCQkJb3V0cHV0OiAyMzcKCQkJCQkJCXRob3VnaHRzOiAzNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FmZXR5KioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUg4oCTIGEgcmFjZSBjb25kaXRpb24sIHNwZWNpZmljYWxseSBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBpbiB0aGUgTExDIHByb3RvY29sJiMzOTtzIGluY29taW5nIGNvbm5lY3Rpb24gaGFuZGxpbmcuIFRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCBhIGxpc3RlbmluZyBzb2NrZXQgY2FuIGJlIGRlc3Ryb3llZCB3aGlsZSBjaGlsZCBzb2NrZXRzIChpbmNvbWluZyBjb25uZWN0aW9ucykgYXJlIHN0aWxsIGluIGEgcGVuZGluZyBvciBxdWV1ZWQgc3RhdGUuIFRoaXMgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgZWxlZ2FudDogaXQgaW50cm9kdWNlcyBhIHN0YXRlIG1hY2hpbmUgKGBpbmNvbWluZ19zdGF0ZWApIHRvIHRyYWNrIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgaW5jb21pbmcgc29ja2V0cyBhbmQgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCkgdG8gZGVmZXIgdGhlaXIgZnJlZWluZy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGNsZWFudXAgaGFwcGVucyBzYWZlbHksIHJlc29sdmluZyB0aGUgcmFjZSBjb25kaXRpb24uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGtpbmQgb2YgYnVnLCB0aGlzICpzcGVjaWZpYyogdHlwZSBvZiB1c2UtYWZ0ZXItZnJlZSwgaXMgZXhhY3RseSB3aGF0IEtBU0FOLCBhbmQgZXZlbiBMT0NLREVQIGZvciB0aGF0IG1hdHRlciwgaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IHRoZXNlIHRvb2xzIGV4Y2VsIGF0IGNhdGNoaW5nIGR1cmluZyBkZXZlbG9wbWVudC4KCkxvb2tpbmcgY2xvc2VyLCB0aGVyZSYjMzk7cyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzICpuZXcqIHdheXMgdG8gbGVhayBpbmZvcm1hdGlvbiBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIGBkZXZfaGFyZF9oZWFkZXJgIGluaXRpYWxpemVzIHRoZSBNQUMgaGVhZGVyLCBzbyB0aGUgU0tCIGRvZXNuJiMzOTt0IGhhdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEV2ZXJ5dGhpbmcgYWRkZWQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgdGhlIG5ld2x5IGFkZGVkIGZ1bmN0aW9uIGBsbGNfY29ubl9zZW5kX2RtX3JzcGAgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGFsbG9jYXRlZCBTS0IgaGVhZGVycyBiZWZvcmUgdHJhbnNtaXNzaW9uLiBUaGUgcGF0Y2ggaXMgY2FyZWZ1bGx5IGFkZHJlc3NpbmcgYSBjb25jdXJyZW5jeSBwcm9ibGVtIHdpdGgga25vd24sIHdlbGwtdW5kZXJzdG9vZCB0ZWNobmlxdWVzIChzdGF0ZSBtYW5hZ2VtZW50LCB3b3JrcXVldWUpLiBUaGUgcGF0Y2ggaXMgY2FyZWZ1bGx5IGFkZHJlc3NpbmcgYSBjb25jdXJyZW5jeSBwcm9ibGVtIHdpdGgga25vd24sIHdlbGwtdW5kZXJzdG9vZCB0ZWNobmlxdWVzIChzdGF0ZSBtYW5hZ2VtZW50LCB3b3JrcXVldWUpLiBOb3RoaW5nJiMzOTtzIGJlaW5nIHNoaXBwZWQgdG8gdXNlcnNwYWNlIHRoYXTigJlzIG5ldywgdW50ZXN0ZWQsIG9yIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLgoKU28sIGdpdmVuIGFsbCBvZiB0aGlzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IHdhcnJhbnRlZCBoZXJlLiBLQVNBTiBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBkb2luZyBpdHMgam9iIGFuZCBjYXRjaGluZyBhbnkgaW50cm9kdWNlZCBtZW1vcnkgZXJyb3JzLCBhbmQgdGhlcmUgYXJlIG5vIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgcGF0Y2ggaXRzZWxmLiBXZSBzaG91bGQgYmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgTExDIHByb3RvY29sIHJlbGF0ZWQgdG8gaW5jb21pbmcgY29ubmVjdGlvbiBoYW5kbGluZy4gSXQgaW50cm9kdWNlcyBuZXcgc3RhdGUgdHJhY2tpbmcgKGBpbmNvbWluZ19zdGF0ZWApIGFuZCBhIHdvcmtxdWV1ZSAoYGluY29taW5nX3dvcmtgKSB0byBzYWZlbHkgbWFuYWdlIGFuZCBkZWZlciB0aGUgZnJlZWluZyBvZiBpbmNvbWluZyBzb2NrZXRzLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gYSBsaXN0ZW5pbmcgc29ja2V0IGlzIGNsb3NlZCB3aGlsZSBjaGlsZCBzb2NrZXRzIGFyZSBzdGlsbCBwZW5kaW5nIG9yIHF1ZXVlZC5cblxuVGhlc2UgdHlwZXMgb2YgYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbGwgbmV3bHkgaW50cm9kdWNlZCBmaWVsZHMgaW4gYHN0cnVjdCBsbGNfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdW5jdGlvbiBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHNrYiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIExMQyBwcm90b2NvbCByZWxhdGVkIHRvIGluY29taW5nIGNvbm5lY3Rpb24gaGFuZGxpbmcuIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgKSBhbmQgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCkgdG8gc2FmZWx5IG1hbmFnZSBhbmQgZGVmZXIgdGhlIGZyZWVpbmcgb2YgaW5jb21pbmcgc29ja2V0cywgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGEgbGlzdGVuaW5nIHNvY2tldCBpcyBjbG9zZWQgd2hpbGUgY2hpbGQgc29ja2V0cyBhcmUgc3RpbGwgcGVuZGluZyBvciBxdWV1ZWQuXG5cblRoZXNlIHR5cGVzIG9mIGJ1Z3MgKHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSBhcmUgYWxyZWFkeSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gQWxsIG5ld2x5IGludHJvZHVjZWQgZmllbGRzIGluIGBzdHJ1Y3QgbGxjX3NvY2tgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIG5ld2x5IGFkZGVkIGBsbGNfY29ubl9zZW5kX2RtX3JzcGAgZnVuY3Rpb24gZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGFsbG9jYXRlZCBza2IgaGVhZGVycyBiZWZvcmUgdHJhbnNtaXNzaW9uLlxuXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhlc2UgY2hhbmdlcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjQ3OjQ5LjgyMTUxNTgzMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MzIyMjA1NjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMTEMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGxjX2Nvbm5faGFuZGxlclwiLFxuICAgIFwibGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja1wiLFxuICAgIFwibGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlblwiLFxuICAgIFwibGxjX3NrX2ZyZWVcIixcbiAgICBcImxsY19jb25uX3N0YXRlX3Byb2Nlc3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIExMQyBwcm90b2NvbCByZWxhdGVkIHRvIGluY29taW5nIGNvbm5lY3Rpb24gaGFuZGxpbmcuIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgKSBhbmQgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCkgdG8gc2FmZWx5IG1hbmFnZSBhbmQgZGVmZXIgdGhlIGZyZWVpbmcgb2YgaW5jb21pbmcgc29ja2V0cywgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGEgbGlzdGVuaW5nIHNvY2tldCBpcyBjbG9zZWQgd2hpbGUgY2hpbGQgc29ja2V0cyBhcmUgc3RpbGwgcGVuZGluZyBvciBxdWV1ZWQuXFxuXFxuVGhlc2UgdHlwZXMgb2YgYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbGwgbmV3bHkgaW50cm9kdWNlZCBmaWVsZHMgaW4gYHN0cnVjdCBsbGNfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdW5jdGlvbiBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHNrYiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYyBvZiB0aGUgTExDIHByb3RvY29sLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo0Nzo0OS44MjE1MjE4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NTY2OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTg4Njc5MmYzYjJjYTA0MzYwOTg0ZmU3MTQwY2FlZGQ1NzA3YjFmOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwODo0Nzo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9sbGNfY29ubi5oIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxcbmluZGV4IGUxYTMwMjY5NjcyMzQuLjlhY2RhMGE2ZjA2OWYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxcbisrKyBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcXG5AQCAtNiw2ICs2LDcgQEBcXG4gICogXFx0XFx0IDIwMDEsIDIwMDIgYnkgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIFxcdTAwM2NhY21lQGNvbmVjdGl2YS5jb20uYnJcXHUwMDNlXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2xsY19pZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xsYy5oXFx1MDAzZVxcbkBAIC0xMyw2ICsxNCwxMCBAQFxcbiAjZGVmaW5lIExMQ19FVkVOVCAgICAgICAgICAgICAgICAxXFxuICNkZWZpbmUgTExDX1BBQ0tFVCAgICAgICAgICAgICAgIDJcXG4gXFxuKyNkZWZpbmUgTExDX0lOQ09NSU5HX05PTkUgICAgICAgIDBcXG4rI2RlZmluZSBMTENfSU5DT01JTkdfUEVORElORyAgICAgMVxcbisjZGVmaW5lIExMQ19JTkNPTUlOR19RVUVVRUQgICAgICAyXFxuK1xcbiAjZGVmaW5lIExMQzJfUF9USU1FICAgICAgICAgICAgICAgMlxcbiAjZGVmaW5lIExMQzJfQUNLX1RJTUUgICAgICAgICAgICAgMVxcbiAjZGVmaW5lIExMQzJfUkVKX1RJTUUgICAgICAgICAgICAgM1xcbkBAIC03Miw2ICs3Nyw5IEBAIHN0cnVjdCBsbGNfc29jayB7XFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHJlY2VpdmVkIGFuZCBjYXVzZWQgc2VuZGluZyBGUk1SLlxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBVc2VkIGZvciByZXNlbmRpbmcgRlJNUiAqL1xcbiBcXHR1MzJcXHRcXHQgICAgY21zZ19mbGFncztcXG4rXFx0YXRvbWljX3RcXHQgICAgaW5jb21pbmdfc3RhdGU7XFxuK1xcdHN0cnVjdCBzb2NrXFx0ICAgICppbmNvbWluZ19saXN0ZW5lcjtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0IGluY29taW5nX3dvcms7XFxuIFxcdHN0cnVjdCBobGlzdF9ub2RlICAgZGV2X2hhc2hfbm9kZTtcXG4gfTtcXG4gXFxuQEAgLTkzLDcgKzEwMSwxMCBAQCBzdGF0aWMgX19pbmxpbmVfXyBjaGFyIGxsY19iYWNrbG9nX3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gc3RydWN0IHNvY2sgKmxsY19za19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5LFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pO1xcbiB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpO1xcbi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzayk7XFxuK3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpO1xcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcXG4rdm9pZCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcXG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spO1xcbiBcXG4gdm9pZCBsbGNfc2tfcmVzZXQoc3RydWN0IHNvY2sgKnNrKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jXFxuaW5kZXggYjA0NDdjMzNkYmYwOS4uN2QyNDZkNGQyODFiYiAxMDA2NDRcXG4tLS0gYS9uZXQvbGxjL2FmX2xsYy5jXFxuKysrIGIvbmV0L2xsYy9hZl9sbGMuY1xcbkBAIC0xOTYsNiArMTk2LDcgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbiB7XFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiBcXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYztcXG4rXFx0Ym9vbCBsaXN0ZW5lcjtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShzayA9PSBOVUxMKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuQEAgLTIwNiw2ICsyMDcsOSBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuIFxcdFxcdGxsYy1cXHUwMDNlbGFkZHIubHNhcCwgbGxjLVxcdTAwM2VkYWRkci5sc2FwKTtcXG4gXFx0aWYgKCFsbGNfc2VuZF9kaXNjKHNrKSlcXG4gXFx0XFx0bGxjX3VpX3dhaXRfZm9yX2Rpc2Moc2ssIFJFQURfT05DRShzay1cXHUwMDNlc2tfcmN2dGltZW8pKTtcXG4rXFx0bGlzdGVuZXIgPSBzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTjtcXG4rXFx0aWYgKGxpc3RlbmVyKVxcbitcXHRcXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xcbiBcXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19aQVBQRUQpKSB7XFxuIFxcdFxcdHN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtXFx1MDAzZXNhcDtcXG4gXFxuQEAgLTIxNCwxNiArMjE4LDE4IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGxsY19zYXBfaG9sZChzYXApO1xcbiBcXHRcXHRsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLVxcdTAwM2VzYXAsIHNrKTtcXG4rXFx0XFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xcbiBcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiBcXHRcXHRsbGNfc2FwX3B1dChzYXApO1xcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzayk7XFxuIFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIFxcdH1cXG4gXFx0bmV0ZGV2X3B1dChsbGMtXFx1MDAzZWRldiwgXFx1MDAyNmxsYy1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbiBcXHRzb2NrX3B1dChzayk7XFxuIFxcdHNvY2tfb3JwaGFuKHNrKTtcXG4gXFx0c29jay1cXHUwMDNlc2sgPSBOVUxMO1xcbi1cXHRsbGNfc2tfZnJlZShzayk7XFxuK1xcdGxsY19za19mcmVlKHNrLCB0cnVlKTtcXG4gb3V0OlxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC03MjIsNiArNzI4LDcgQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuIFxcdFxcdGdvdG8gZnJlZXM7XFxuIFxcdHJjID0gMDtcXG4gXFx0bmV3c2sgPSBza2ItXFx1MDAzZXNrO1xcbitcXHRsbGNfYWNjZXB0X2luY29taW5nX3NvY2sobmV3c2spO1xcbiBcXHQvKiBhdHRhY2ggY29ubmVjdGlvbiB0byBhIG5ldyBzb2NrZXQuICovXFxuIFxcdGxsY191aV9za19pbml0KG5ld3NvY2ssIG5ld3NrKTtcXG4gXFx0c29ja19yZXNldF9mbGFnKG5ld3NrLCBTT0NLX1pBUFBFRCk7XFxuZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2Nvbm4uYyBiL25ldC9sbGMvbGxjX2Nvbm4uY1xcbmluZGV4IDI2MDQ2MGQ1MGY1NGMuLjQyNzJjZTRkNGExY2EgMTAwNjQ0XFxuLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jXFxuKysrIGIvbmV0L2xsYy9sbGNfY29ubi5jXFxuQEAgLTMyLDYgKzMyLDcgQEAgc3RhdGljIGludCBsbGNfZXhlY19jb25uX3RyYW5zX2FjdGlvbnMoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKmV2KTtcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyAqbGxjX3F1YWxpZnlfY29ubl9ldihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbitzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuIFxcbiAvKiBPZmZzZXQgdGFibGUgb24gY29ubmVjdGlvbiBzdGF0ZXMgdHJhbnNpdGlvbiBkaWFncmFtICovXFxuIHN0YXRpYyBpbnQgbGxjX29mZnNldF90YWJsZVtOQlJfQ09OTl9TVEFURVNdW05CUl9DT05OX0VWXTtcXG5AQCAtODgsNiArODksMTEgQEAgaW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHQgKiBza2ItXFx1MDAzZXNrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluXFxuIFxcdFxcdCAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lXFxuIFxcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2sgIT0gc2tiLVxcdTAwM2VzayBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhza2ItXFx1MDAzZXNrKS1cXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XFxuK1xcdFxcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcXG4rXFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2bGxjX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSxcXG4rXFx0XFx0XFx0XFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCk7XFxuIFxcdFxcdHNrYl9nZXQoc2tiKTtcXG4gXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLCBza2IpO1xcbiBcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcXG5AQCAtMzU0LDcgKzM2MCw4IEBAIHN0YXRpYyBpbnQgbGxjX2Nvbm5fc2VydmljZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG4gXFx0aW50IHJjID0gMTtcXG4gXFxuLVxcdGlmIChsbGMtXFx1MDAzZXN0YXRlIFxcdTAwM2UgTkJSX0NPTk5fU1RBVEVTKVxcbitcXHRpZiAobGxjLVxcdTAwM2VzdGF0ZSBcXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSB8fFxcbitcXHQgICAgbGxjLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIE5CUl9DT05OX1NUQVRFUylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdHJjID0gMDtcXG4gXFx0dHJhbnMgPSBsbGNfcXVhbGlmeV9jb25uX2V2KHNrLCBza2IpO1xcbkBAIC03NjUsMjcgKzc3MiwxNTMgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRtZW1jcHkoXFx1MDAyNm5ld2xsYy1cXHUwMDNlbGFkZHIsIGRhZGRyLCBzaXplb2YobmV3bGxjLVxcdTAwM2VsYWRkcikpO1xcbiBcXHRtZW1jcHkoXFx1MDAyNm5ld2xsYy1cXHUwMDNlZGFkZHIsIHNhZGRyLCBzaXplb2YobmV3bGxjLVxcdTAwM2VkYWRkcikpO1xcbiBcXHRuZXdsbGMtXFx1MDAzZWRldiA9IGRldjtcXG4rXFx0bmV3bGxjLVxcdTAwM2VpbmNvbWluZ19saXN0ZW5lciA9IHNrO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZuZXdsbGMtXFx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfUEVORElORyk7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2bmV3bGxjLVxcdTAwM2VpbmNvbWluZ193b3JrLCBsbGNfaW5jb21pbmdfc29ja193b3JrKTtcXG4rXFx0c29ja19ob2xkKHNrKTtcXG4gXFx0ZGV2X2hvbGQoZGV2KTtcXG4gXFx0bGxjX3NhcF9hZGRfc29ja2V0KGxsYy1cXHUwMDNlc2FwLCBuZXdzayk7XFxuIG91dDpcXG4gXFx0cmV0dXJuIG5ld3NrO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGxjX3NvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBpbmNvbWluZ193b3JrKTtcXG4rXFx0c3RydWN0IHNvY2sgKnNrID0gXFx1MDAyNmxsYy1cXHUwMDNlc2s7XFxuK1xcdHN0cnVjdCBzb2NrICpsaXN0ZW5lciA9IGxsYy1cXHUwMDNlaW5jb21pbmdfbGlzdGVuZXI7XFxuK1xcbitcXHRsb2NrX3NvY2sobGlzdGVuZXIpO1xcbitcXHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcdGxsY19za19mcmVlKHNrLCBmYWxzZSk7XFxuK1xcdHNvY2tfb3JwaGFuKHNrKTtcXG4rXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4rXFx0bGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7XFxuK1xcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XFxuK1xcdGRldl9wdXQobGxjLVxcdTAwM2VkZXYpO1xcbitcXHRsbGMtXFx1MDAzZWRldiA9IE5VTEw7XFxuK1xcdHNvY2tfcHV0KHNrKTtcXG4rXFx0c29ja19wdXQobGlzdGVuZXIpO1xcbit9XFxuK1xcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG4rXFxuK1xcdGlmIChhdG9taWNfeGNoZyhcXHUwMDI2bGxjLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX05PTkUpID09XFxuK1xcdCAgICBMTENfSU5DT01JTkdfTk9ORSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0V1JJVEVfT05DRShsbGMtXFx1MDAzZXN0YXRlLCBMTENfQ09OTl9PVVRfT0ZfU1ZDKTtcXG4rXFx0c29ja19ob2xkKHNrKTtcXG4rXFx0bGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy1cXHUwMDNlc2FwLCBzayk7XFxuK1xcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmxsYy1cXHUwMDNlaW5jb21pbmdfd29yayk7XFxuK31cXG4rXFxuK3ZvaWQgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxuK1xcbitcXHRpZiAoYXRvbWljX3hjaGcoXFx1MDAyNmxsYy1cXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19OT05FKSAhPVxcbitcXHQgICAgTExDX0lOQ09NSU5HX05PTkUpXFxuK1xcdFxcdHNvY2tfcHV0KGxsYy1cXHUwMDNlaW5jb21pbmdfbGlzdGVuZXIpO1xcbit9XFxuK1xcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpKSB7XFxuK1xcdFxcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi1cXHUwMDNlc2s7XFxuK1xcbitcXHRcXHRpZiAobmV3c2sgXFx1MDAyNlxcdTAwMjYgbmV3c2sgIT0gc2spIHtcXG4rXFx0XFx0XFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XFxuK1xcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XFxuK1xcdFxcdFxcdCAgICBMTENfSU5DT01JTkdfTk9ORSlcXG4rXFx0XFx0XFx0XFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XFxuK1xcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0fVxcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhpcyBtaXJyb3JzIHRoZSBBRE0tc3RhdGUgRE0gYWN0aW9ucywgYnV0IGEgbGlzdGVuZXIgaGFzIG5vIHBlZXJcXG4rICogYWRkcmVzcyBpbiBsbGMtXFx1MDAzZWRhZGRyIHlldC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGxsY19jb25uX3NlbmRfZG1fcnNwKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdClcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbitcXHRpZiAoIW5za2IpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG4rXFx0XFx0XFx0ICAgIHNhZGRyLVxcdTAwM2Vsc2FwLCBMTENfUERVX1JTUCk7XFxuK1xcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AobnNrYiwgZl9iaXQpO1xcbitcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBzYWRkci1cXHUwMDNlbWFjKTtcXG4rXFx0aWYgKHVubGlrZWx5KHJjKSlcXG4rXFx0XFx0a2ZyZWVfc2tiKG5za2IpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGRldl9xdWV1ZV94bWl0KG5za2IpO1xcbit9XFxuK1xcbiB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRzdHJ1Y3QgbGxjX2FkZHIgc2FkZHIsIGRhZGRyO1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2s7XFxuK1xcdHN0cnVjdCBzb2NrICpzaywgKm5ld3NrID0gTlVMTDtcXG4rXFx0Ym9vbCBuZXdza19sb29rdXBfcmVmID0gZmFsc2U7XFxuK1xcdGJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7XFxuIFxcbiBcXHRsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7XFxuIFxcdGxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCBcXHUwMDI2c2FkZHIubHNhcCk7XFxuIFxcdGxsY19wZHVfZGVjb2RlX2RhKHNrYiwgZGFkZHIubWFjKTtcXG4gXFx0bGxjX3BkdV9kZWNvZGVfZHNhcChza2IsIFxcdTAwMjZkYWRkci5sc2FwKTtcXG4gXFxuK2xvb2t1cDpcXG4gXFx0c2sgPSBfX2xsY19sb29rdXAoc2FwLCBcXHUwMDI2c2FkZHIsIFxcdTAwMjZkYWRkciwgZGV2X25ldChza2ItXFx1MDAzZWRldikpO1xcbiBcXHRpZiAoIXNrKVxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcbitcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxcbitcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcXG4rXFx0XFx0bmV3c2sgPSBzaztcXG4rXFx0XFx0YmhfbG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cXG4rXFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XFxuK1xcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0c29ja19wdXQobmV3c2spO1xcbitcXHRcXHRcXHRuZXdzayA9IE5VTEw7XFxuK1xcdFxcdFxcdGdvdG8gbG9va3VwO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNrID0gbGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfbGlzdGVuZXI7XFxuK1xcdFxcdHNvY2tfaG9sZChzayk7XFxuK1xcdFxcdG5ld3NrX2xvb2t1cF9yZWYgPSB0cnVlO1xcbitcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuK1xcdH1cXG4rXFxuIFxcdGJoX2xvY2tfc29jayhzayk7XFxuK1xcdGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpXFxuK1xcdFxcdGdvdG8gZHJvcF91bmxvY2s7XFxuK1xcdGlmIChuZXdza19sb29rdXBfcmVmKSB7XFxuK1xcdFxcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xcbitcXHRcXHRuZXdza19sb2NrZWQgPSB0cnVlO1xcbitcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhuZXdzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxcbitcXHRcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnlfdW5sb2NrO1xcbitcXHRcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcXG4rXFx0XFx0XFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKSB7XFxuK1xcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0LypcXG4gXFx0ICogVGhpcyBoYXMgdG8gYmUgZG9uZSBoZXJlIGFuZCBub3QgYXQgdGhlIHVwcGVyIGxheWVyIC1cXHUwMDNlYWNjZXB0XFxuIFxcdCAqIG1ldGhvZCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIFBST0NPTSBzdGF0ZSBtYWNoaW5lIHdvcmtzOlxcbkBAIC03OTUsMTAgKzkyOCwyNSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0ICogaW4gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgcHJpdmF0ZSBhcmVhLiAtYWNtZVxcbiBcXHQgKi9cXG4gXFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSkge1xcbi1cXHRcXHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2FkZHIsIFxcdTAwMjZkYWRkcik7XFxuLVxcdFxcdGlmICghbmV3c2spXFxuLVxcdFxcdFxcdGdvdG8gZHJvcF91bmxvY2s7XFxuK1xcdFxcdGlmICghbmV3c2spIHtcXG4rXFx0XFx0XFx0aWYgKGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XFxuK1xcdFxcdFxcdFxcdGlmICghbGxjX2Nvbm5fZXZfcnhfZGlzY19jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xcbitcXHRcXHRcXHRcXHRcXHR1OCBmX2JpdDtcXG4rXFxuK1xcdFxcdFxcdFxcdFxcdGxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsIFxcdTAwMjZmX2JpdCk7XFxuK1xcdFxcdFxcdFxcdFxcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcXHUwMDI2c2FkZHIsIGZfYml0KTtcXG4rXFx0XFx0XFx0XFx0fSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcXHUwMDI2c2FkZHIsIDEpO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGdvdG8gZHJvcF91bmxvY2s7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi1cXHUwMDNlZGV2LCBcXHUwMDI2c2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZGFkZHIpO1xcbitcXHRcXHRcXHRpZiAoIW5ld3NrKVxcbitcXHRcXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHRcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0XFx0bmV3c2tfbG9ja2VkID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qXFxuQEAgLTgxMywxOCArOTYxLDQ2IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRza2ItXFx1MDAzZXNrID0gc2s7XFxuIFxcdFxcdHNrYi1cXHUwMDNlZGVzdHJ1Y3RvciA9IHNvY2tfZWZyZWU7XFxuIFxcdH1cXG4tXFx0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKVxcbitcXHRpZiAodW5saWtlbHkobGxjX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2VzdGF0ZSBcXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkpIHtcXG4rXFx0XFx0aWYgKG5ld3NrKVxcbitcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0ZWxzZSBpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxcbitcXHRcXHRcXHQgTExDX0lOQ09NSU5HX05PTkUpXFxuK1xcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spO1xcbitcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHR9XFxuK1xcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xcbiBcXHRcXHRsbGNfY29ubl9yY3Yoc2ssIHNrYik7XFxuLVxcdGVsc2Uge1xcbitcXHRcXHRpZiAobmV3c2sgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cXG4rXFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxcbitcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZHByaW50ayhcXFwiJXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdGxsY19zZXRfYmFja2xvZ190eXBlKHNrYiwgTExDX1BBQ0tFVCk7XFxuLVxcdFxcdGlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3JjdmJ1ZikpKVxcbitcXHRcXHRpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpKSkge1xcbitcXHRcXHRcXHRpZiAobmV3c2spXFxuK1xcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbiBcXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gb3V0OlxcbitcXHRpZiAobmV3c2tfbG9ja2VkKVxcbitcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuIFxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG4gXFx0c29ja19wdXQoc2spO1xcbitcXHRpZiAobmV3c2tfbG9va3VwX3JlZilcXG4rXFx0XFx0c29ja19wdXQobmV3c2spO1xcbiBcXHRyZXR1cm47XFxuK3JldHJ5X3VubG9jazpcXG4rXFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRuZXdza19sb2NrZWQgPSBmYWxzZTtcXG4rXFx0YmhfdW5sb2NrX3NvY2soc2spO1xcbitcXHRzb2NrX3B1dChzayk7XFxuK1xcdHNvY2tfcHV0KG5ld3NrKTtcXG4rXFx0bmV3c2sgPSBOVUxMO1xcbitcXHRuZXdza19sb29rdXBfcmVmID0gZmFsc2U7XFxuK1xcdGdvdG8gbG9va3VwO1xcbiBkcm9wOlxcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0cmV0dXJuO1xcbkBAIC04NTIsMTIgKzEwMjgsNTMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdGludCByYyA9IDA7XFxuIFxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG4rXFx0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVxcdTAwM2VzaztcXG4gXFxuIFxcdGlmIChsaWtlbHkobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19QQUNLRVQpKSB7XFxuLVxcdFxcdGlmIChsaWtlbHkobGxjLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIDEpKSAvKiBub3QgY2xvc2VkICovXFxuK1xcdFxcdGlmIChuZXdzayBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhuZXdzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxcbitcXHRcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcXG4rXFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cXG4rXFx0XFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XFxuK1xcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuK1xcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fFxcbitcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcXG4rXFx0XFx0XFx0ICAgIGxsY19zayhuZXdzayktXFx1MDAzZXN0YXRlIFxcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XFxuK1xcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuK1xcdFxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9rZnJlZV9za2I7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XFxuLVxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cXG4rXFx0XFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxcbitcXHRcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChuZXdzayBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICBhdG9taWNfcmVhZChcXHUwMDI2bGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XFxuK1xcdFxcdFxcdCAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcXG4rXFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0XFx0aWYgKGxsY19zayhuZXdzayktXFx1MDAzZXN0YXRlIFxcdTAwM2M9IExMQ19DT05OX1NUQVRFX0FETSkge1xcbitcXHRcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfa2ZyZWVfc2tiO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpO1xcbitcXHRcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuK1xcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXHRcXHR9IGVsc2UgaWYgKGxpa2VseShsbGMtXFx1MDAzZXN0YXRlIFxcdTAwM2UgMSkpIHtcXG4rXFx0XFx0XFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X2tmcmVlX3NrYjtcXG4rXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfRVZFTlQpIHtcXG4gXFx0XFx0LyogdGltZXIgZXhwaXJhdGlvbiBldmVudCAqL1xcbiBcXHRcXHRpZiAobGlrZWx5KGxsYy1cXHUwMDNlc3RhdGUgXFx1MDAzZSAxKSkgIC8qIG5vdCBjbG9zZWQgKi9cXG5AQCAtODcwLDYgKzEwODcsMjQgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHR9XFxuIG91dDpcXG4gXFx0cmV0dXJuIHJjO1xcbityZXRyeTpcXG4rXFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cXG4rXFx0ICAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcXG4rXFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0aWYgKGxsY19zayhuZXdzayktXFx1MDAzZXN0YXRlIFxcdTAwM2UgTExDX0NPTk5fU1RBVEVfQURNKVxcbitcXHRcXHRcXHRyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTtcXG4rXFx0XFx0ZWxzZSB7XFxuK1xcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuK1xcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXHRcXHRcXHRnb3RvIG91dF9rZnJlZV9za2I7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0Z290byBvdXRfa2ZyZWVfc2tiO1xcbiBvdXRfa2ZyZWVfc2tiOlxcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0Z290byBvdXQ7XFxuQEAgLTk1OSwxNyArMTE5NCwxOCBAQCB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXFxuIFxcbiAvKipcXG4gICpcXHRsbGNfc2tfZnJlZSAtIEZyZWVzIGEgTExDIHNvY2tldFxcbi0gKlxcdEBzazogLSBzb2NrZXQgdG8gZnJlZVxcbisgKlxcdEBzazogc29ja2V0IHRvIGZyZWVcXG4rICpcXHRAc3luYzogd2hldGhlciB0byBzeW5jaHJvbm91c2x5IHN0b3AgdGltZXJzXFxuICAqXFxuLSAqXFx0RnJlZXMgYSBMTEMgc29ja2V0XFxuKyAqXFx0RnJlZXMgYSBMTEMgc29ja2V0LlxcbiAgKi9cXG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spXFxuK3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXFxuIHtcXG4gXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbiBcXG4gXFx0bGxjLVxcdTAwM2VzdGF0ZSA9IExMQ19DT05OX09VVF9PRl9TVkM7XFxuIFxcdC8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi9cXG4tXFx0bGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7XFxuK1xcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHN5bmMpO1xcbiAjaWZkZWYgREVCVUdfTExDX0NPTk5fQUxMT0NcXG4gXFx0cHJpbnRrKEtFUk5fSU5GTyBcXFwiJXM6IHVuYWNrcT0lZCwgdHhxPSVkXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4gXFx0XFx0c2tiX3F1ZXVlX2xlbihcXHUwMDI2bGxjLVxcdTAwM2VwZHVfdW5hY2tfcSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjQ3OjUwLjI4ODMxNzE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjE5NDc2NzE4MjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxMQzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsbGNfY29ubl9oYW5kbGVyXCIsXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfYWNjZXB0X2luY29taW5nX3NvY2tcIixcbiAgICBcImxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuXCIsXG4gICAgXCJsbGNfc2tfZnJlZVwiLFxuICAgIFwibGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYyBvZiB0aGUgTExDIHByb3RvY29sLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ODg2NzkyZjNiMmNhMDQzNjA5ODRmZTcxNDBjYWVkZDU3MDdiMWY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDg6NDc6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9sbGNfY29ubi5oIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuaW5kZXggZTFhMzAyNjk2NzIzNC4uOWFjZGEwYTZmMDY5ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcbisrKyBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcbkBAIC02LDYgKzYsNyBAQFxuICAqIFx0XHQgMjAwMSwgMjAwMiBieSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gXHUwMDNjYWNtZUBjb25lY3RpdmEuY29tLmJyXHUwMDNlXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2xsY19pZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsYy5oXHUwMDNlXG5AQCAtMTMsNiArMTQsMTAgQEBcbiAjZGVmaW5lIExMQ19FVkVOVCAgICAgICAgICAgICAgICAxXG4gI2RlZmluZSBMTENfUEFDS0VUICAgICAgICAgICAgICAgMlxuIFxuKyNkZWZpbmUgTExDX0lOQ09NSU5HX05PTkUgICAgICAgIDBcbisjZGVmaW5lIExMQ19JTkNPTUlOR19QRU5ESU5HICAgICAxXG4rI2RlZmluZSBMTENfSU5DT01JTkdfUVVFVUVEICAgICAgMlxuK1xuICNkZWZpbmUgTExDMl9QX1RJTUUgICAgICAgICAgICAgICAyXG4gI2RlZmluZSBMTEMyX0FDS19USU1FICAgICAgICAgICAgIDFcbiAjZGVmaW5lIExMQzJfUkVKX1RJTUUgICAgICAgICAgICAgM1xuQEAgLTcyLDYgKzc3LDkgQEAgc3RydWN0IGxsY19zb2NrIHtcbiBcdFx0XHRcdFx0ICAgICAgcmVjZWl2ZWQgYW5kIGNhdXNlZCBzZW5kaW5nIEZSTVIuXG4gXHRcdFx0XHRcdCAgICAgIFVzZWQgZm9yIHJlc2VuZGluZyBGUk1SICovXG4gXHR1MzJcdFx0ICAgIGNtc2dfZmxhZ3M7XG4rXHRhdG9taWNfdFx0ICAgIGluY29taW5nX3N0YXRlO1xuK1x0c3RydWN0IHNvY2tcdCAgICAqaW5jb21pbmdfbGlzdGVuZXI7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW5jb21pbmdfd29yaztcbiBcdHN0cnVjdCBobGlzdF9ub2RlICAgZGV2X2hhc2hfbm9kZTtcbiB9O1xuIFxuQEAgLTkzLDcgKzEwMSwxMCBAQCBzdGF0aWMgX19pbmxpbmVfXyBjaGFyIGxsY19iYWNrbG9nX3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksXG4gXHRcdFx0ICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKTtcbiB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpO1xuLXZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKTtcbit2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTtcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbit2b2lkIGxsY19hY2NlcHRfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKTtcbiBcbiB2b2lkIGxsY19za19yZXNldChzdHJ1Y3Qgc29jayAqc2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jXG5pbmRleCBiMDQ0N2MzM2RiZjA5Li43ZDI0NmQ0ZDI4MWJiIDEwMDY0NFxuLS0tIGEvbmV0L2xsYy9hZl9sbGMuY1xuKysrIGIvbmV0L2xsYy9hZl9sbGMuY1xuQEAgLTE5Niw2ICsxOTYsNyBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4ge1xuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjO1xuK1x0Ym9vbCBsaXN0ZW5lcjtcbiBcbiBcdGlmICh1bmxpa2VseShzayA9PSBOVUxMKSlcbiBcdFx0Z290byBvdXQ7XG5AQCAtMjA2LDYgKzIwNyw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcdFx0bGxjLVx1MDAzZWxhZGRyLmxzYXAsIGxsYy1cdTAwM2VkYWRkci5sc2FwKTtcbiBcdGlmICghbGxjX3NlbmRfZGlzYyhzaykpXG4gXHRcdGxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2dGltZW8pKTtcbitcdGxpc3RlbmVyID0gc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTjtcbitcdGlmIChsaXN0ZW5lcilcbitcdFx0c29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcbiBcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpIHtcbiBcdFx0c3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy1cdTAwM2VzYXA7XG4gXG5AQCAtMjE0LDE2ICsyMTgsMTggQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0XHQgKi9cbiBcdFx0bGxjX3NhcF9ob2xkKHNhcCk7XG4gXHRcdGxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtXHUwMDNlc2FwLCBzayk7XG4rXHRcdGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTtcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdFx0bGxjX3NhcF9wdXQoc2FwKTtcbiBcdH0gZWxzZSB7XG4rXHRcdGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTtcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdH1cbiBcdG5ldGRldl9wdXQobGxjLVx1MDAzZWRldiwgXHUwMDI2bGxjLVx1MDAzZWRldl90cmFja2VyKTtcbiBcdHNvY2tfcHV0KHNrKTtcbiBcdHNvY2tfb3JwaGFuKHNrKTtcbiBcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuLVx0bGxjX3NrX2ZyZWUoc2spO1xuK1x0bGxjX3NrX2ZyZWUoc2ssIHRydWUpO1xuIG91dDpcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03MjIsNiArNzI4LDcgQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRcdGdvdG8gZnJlZXM7XG4gXHRyYyA9IDA7XG4gXHRuZXdzayA9IHNrYi1cdTAwM2VzaztcbitcdGxsY19hY2NlcHRfaW5jb21pbmdfc29jayhuZXdzayk7XG4gXHQvKiBhdHRhY2ggY29ubmVjdGlvbiB0byBhIG5ldyBzb2NrZXQuICovXG4gXHRsbGNfdWlfc2tfaW5pdChuZXdzb2NrLCBuZXdzayk7XG4gXHRzb2NrX3Jlc2V0X2ZsYWcobmV3c2ssIFNPQ0tfWkFQUEVEKTtcbmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb25uLmMgYi9uZXQvbGxjL2xsY19jb25uLmNcbmluZGV4IDI2MDQ2MGQ1MGY1NGMuLjQyNzJjZTRkNGExY2EgMTAwNjQ0XG4tLS0gYS9uZXQvbGxjL2xsY19jb25uLmNcbisrKyBiL25ldC9sbGMvbGxjX2Nvbm4uY1xuQEAgLTMyLDYgKzMyLDcgQEAgc3RhdGljIGludCBsbGNfZXhlY19jb25uX3RyYW5zX2FjdGlvbnMoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpldik7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyAqbGxjX3F1YWxpZnlfY29ubl9ldihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gXG4gLyogT2Zmc2V0IHRhYmxlIG9uIGNvbm5lY3Rpb24gc3RhdGVzIHRyYW5zaXRpb24gZGlhZ3JhbSAqL1xuIHN0YXRpYyBpbnQgbGxjX29mZnNldF90YWJsZVtOQlJfQ09OTl9TVEFURVNdW05CUl9DT05OX0VWXTtcbkBAIC04OCw2ICs4OSwxMSBAQCBpbnQgbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCAqIHNrYi1cdTAwM2VzayBwb2ludGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBpblxuIFx0XHQgKiBsbGNfY29ubl9oYW5kbGVyLiAtYWNtZVxuIFx0XHQgKi9cbitcdFx0aWYgKHNrICE9IHNrYi1cdTAwM2VzayBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSxcbitcdFx0XHRcdCAgIExMQ19JTkNPTUlOR19RVUVVRUQpO1xuIFx0XHRza2JfZ2V0KHNrYik7XG4gXHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYik7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG5AQCAtMzU0LDcgKzM2MCw4IEBAIHN0YXRpYyBpbnQgbGxjX2Nvbm5fc2VydmljZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4gXHRpbnQgcmMgPSAxO1xuIFxuLVx0aWYgKGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgTkJSX0NPTk5fU1RBVEVTKVxuK1x0aWYgKGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNIHx8XG4rXHQgICAgbGxjLVx1MDAzZXN0YXRlIFx1MDAzZSBOQlJfQ09OTl9TVEFURVMpXG4gXHRcdGdvdG8gb3V0O1xuIFx0cmMgPSAwO1xuIFx0dHJhbnMgPSBsbGNfcXVhbGlmeV9jb25uX2V2KHNrLCBza2IpO1xuQEAgLTc2NSwyNyArNzcyLDE1MyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKmxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRtZW1jcHkoXHUwMDI2bmV3bGxjLVx1MDAzZWxhZGRyLCBkYWRkciwgc2l6ZW9mKG5ld2xsYy1cdTAwM2VsYWRkcikpO1xuIFx0bWVtY3B5KFx1MDAyNm5ld2xsYy1cdTAwM2VkYWRkciwgc2FkZHIsIHNpemVvZihuZXdsbGMtXHUwMDNlZGFkZHIpKTtcbiBcdG5ld2xsYy1cdTAwM2VkZXYgPSBkZXY7XG4rXHRuZXdsbGMtXHUwMDNlaW5jb21pbmdfbGlzdGVuZXIgPSBzaztcbitcdGF0b21pY19zZXQoXHUwMDI2bmV3bGxjLVx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfUEVORElORyk7XG4rXHRJTklUX1dPUksoXHUwMDI2bmV3bGxjLVx1MDAzZWluY29taW5nX3dvcmssIGxsY19pbmNvbWluZ19zb2NrX3dvcmspO1xuK1x0c29ja19ob2xkKHNrKTtcbiBcdGRldl9ob2xkKGRldik7XG4gXHRsbGNfc2FwX2FkZF9zb2NrZXQobGxjLVx1MDAzZXNhcCwgbmV3c2spO1xuIG91dDpcbiBcdHJldHVybiBuZXdzaztcbiB9XG4gXG4rc3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGxsY19zb2NrICpsbGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxsY19zb2NrLFxuK1x0XHRcdFx0XHRcdCAgICBpbmNvbWluZ193b3JrKTtcbitcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNmxsYy1cdTAwM2VzaztcbitcdHN0cnVjdCBzb2NrICpsaXN0ZW5lciA9IGxsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcjtcbitcbitcdGxvY2tfc29jayhsaXN0ZW5lcik7XG4rXHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4rXHRsbGNfc2tfZnJlZShzaywgZmFsc2UpO1xuK1x0c29ja19vcnBoYW4oc2spO1xuK1x0cmVsZWFzZV9zb2NrKHNrKTtcbitcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpO1xuK1x0cmVsZWFzZV9zb2NrKGxpc3RlbmVyKTtcbitcdGRldl9wdXQobGxjLVx1MDAzZWRldik7XG4rXHRsbGMtXHUwMDNlZGV2ID0gTlVMTDtcbitcdHNvY2tfcHV0KHNrKTtcbitcdHNvY2tfcHV0KGxpc3RlbmVyKTtcbit9XG4rXG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4rXG4rXHRpZiAoYXRvbWljX3hjaGcoXHUwMDI2bGxjLVx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgPT1cbitcdCAgICBMTENfSU5DT01JTkdfTk9ORSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0V1JJVEVfT05DRShsbGMtXHUwMDNlc3RhdGUsIExMQ19DT05OX09VVF9PRl9TVkMpO1xuK1x0c29ja19ob2xkKHNrKTtcbitcdGxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtXHUwMDNlc2FwLCBzayk7XG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNmxsYy1cdTAwM2VpbmNvbWluZ193b3JrKTtcbit9XG4rXG4rdm9pZCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbitcbitcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZsbGMtXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19OT05FKSAhPVxuK1x0ICAgIExMQ19JTkNPTUlOR19OT05FKVxuK1x0XHRzb2NrX3B1dChsbGMtXHUwMDNlaW5jb21pbmdfbGlzdGVuZXIpO1xuK31cbitcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSkpIHtcbitcdFx0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVx1MDAzZXNrO1xuK1xuK1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2IG5ld3NrICE9IHNrKSB7XG4rXHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdFx0ICAgIExMQ19JTkNPTUlOR19OT05FKVxuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHR9XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0fVxuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4rfVxuK1xuKy8qXG4rICogVGhpcyBtaXJyb3JzIHRoZSBBRE0tc3RhdGUgRE0gYWN0aW9ucywgYnV0IGEgbGlzdGVuZXIgaGFzIG5vIHBlZXJcbisgKiBhZGRyZXNzIGluIGxsYy1cdTAwM2VkYWRkciB5ZXQuXG4rICovXG4rc3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdClcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbitcdGludCByYztcbitcbitcdG5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xuK1x0aWYgKCFuc2tiKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbitcdFx0XHQgICAgc2FkZHItXHUwMDNlbHNhcCwgTExDX1BEVV9SU1ApO1xuK1x0bGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7XG4rXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgc2FkZHItXHUwMDNlbWFjKTtcbitcdGlmICh1bmxpa2VseShyYykpXG4rXHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdGVsc2VcbitcdFx0ZGV2X3F1ZXVlX3htaXQobnNrYik7XG4rfVxuK1xuIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBsbGNfYWRkciBzYWRkciwgZGFkZHI7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4rXHRzdHJ1Y3Qgc29jayAqc2ssICpuZXdzayA9IE5VTEw7XG4rXHRib29sIG5ld3NrX2xvb2t1cF9yZWYgPSBmYWxzZTtcbitcdGJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7XG4gXG4gXHRsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgXHUwMDI2c2FkZHIubHNhcCk7XG4gXHRsbGNfcGR1X2RlY29kZV9kYShza2IsIGRhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgXHUwMDI2ZGFkZHIubHNhcCk7XG4gXG4rbG9va3VwOlxuIFx0c2sgPSBfX2xsY19sb29rdXAoc2FwLCBcdTAwMjZzYWRkciwgXHUwMDI2ZGFkZHIsIGRldl9uZXQoc2tiLVx1MDAzZWRldikpO1xuIFx0aWYgKCFzaylcbiBcdFx0Z290byBkcm9wO1xuIFxuK1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0bmV3c2sgPSBzaztcbitcdFx0YmhfbG9ja19zb2NrKG5ld3NrKTtcbitcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuK1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRzb2NrX3B1dChuZXdzayk7XG4rXHRcdFx0bmV3c2sgPSBOVUxMO1xuK1x0XHRcdGdvdG8gbG9va3VwO1xuK1x0XHR9XG4rXHRcdHNrID0gbGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcjtcbitcdFx0c29ja19ob2xkKHNrKTtcbitcdFx0bmV3c2tfbG9va3VwX3JlZiA9IHRydWU7XG4rXHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdH1cbitcbiBcdGJoX2xvY2tfc29jayhzayk7XG4rXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKVxuK1x0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0aWYgKG5ld3NrX2xvb2t1cF9yZWYpIHtcbitcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdG5ld3NrX2xvY2tlZCA9IHRydWU7XG4rXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0Z290byByZXRyeV91bmxvY2s7XG4rXHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8XG4rXHRcdFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKSB7XG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0Z290byBkcm9wX3VubG9jaztcbitcdFx0fVxuK1x0fVxuIFx0LypcbiBcdCAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGF0IHRoZSB1cHBlciBsYXllciAtXHUwMDNlYWNjZXB0XG4gXHQgKiBtZXRob2QgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBQUk9DT00gc3RhdGUgbWFjaGluZSB3b3JrczpcbkBAIC03OTUsMTAgKzkyOCwyNSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdCAqIGluIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIHByaXZhdGUgYXJlYS4gLWFjbWVcbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpuZXdzayA9IGxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzaywgc2tiLVx1MDAzZWRldixcbi1cdFx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNnNhZGRyLCBcdTAwMjZkYWRkcik7XG4tXHRcdGlmICghbmV3c2spXG4tXHRcdFx0Z290byBkcm9wX3VubG9jaztcbitcdFx0aWYgKCFuZXdzaykge1xuK1x0XHRcdGlmIChsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xuK1x0XHRcdFx0aWYgKCFsbGNfY29ubl9ldl9yeF9kaXNjX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XG4rXHRcdFx0XHRcdHU4IGZfYml0O1xuK1xuK1x0XHRcdFx0XHRsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCBcdTAwMjZmX2JpdCk7XG4rXHRcdFx0XHRcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcdTAwMjZzYWRkciwgZl9iaXQpO1xuK1x0XHRcdFx0fSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7XG4rXHRcdFx0XHRcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcdTAwMjZzYWRkciwgMSk7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHRcdH1cbitcdFx0XHRuZXdzayA9IGxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzaywgc2tiLVx1MDAzZWRldiwgXHUwMDI2c2FkZHIsXG4rXHRcdFx0XHRcdFx0XHQgXHUwMDI2ZGFkZHIpO1xuK1x0XHRcdGlmICghbmV3c2spXG4rXHRcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuK1x0XHRcdG5ld3NrX2xvY2tlZCA9IHRydWU7XG4rXHRcdH1cbiBcdFx0c2tiX3NldF9vd25lcl9yKHNrYiwgbmV3c2spO1xuIFx0fSBlbHNlIHtcbiBcdFx0LypcbkBAIC04MTMsMTggKzk2MSw0NiBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZXNrID0gc2s7XG4gXHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0gc29ja19lZnJlZTtcbiBcdH1cbi1cdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSlcbitcdGlmICh1bmxpa2VseShsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSkge1xuK1x0XHRpZiAobmV3c2spXG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdGVsc2UgaWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdFx0IExMQ19JTkNPTUlOR19OT05FKVxuK1x0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spO1xuK1x0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0fVxuK1x0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7XG4gXHRcdGxsY19jb25uX3Jjdihzaywgc2tiKTtcbi1cdGVsc2Uge1xuK1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHR9IGVsc2Uge1xuIFx0XHRkcHJpbnRrKFwiJXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0bGxjX3NldF9iYWNrbG9nX3R5cGUoc2tiLCBMTENfUEFDS0VUKTtcbi1cdFx0aWYgKHNrX2FkZF9iYWNrbG9nKHNrLCBza2IsIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSlcbitcdFx0aWYgKHNrX2FkZF9iYWNrbG9nKHNrLCBza2IsIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSkge1xuK1x0XHRcdGlmIChuZXdzaylcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuIFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRcdH1cbiBcdH1cbiBvdXQ6XG4rXHRpZiAobmV3c2tfbG9ja2VkKVxuK1x0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4gXHRiaF91bmxvY2tfc29jayhzayk7XG4gXHRzb2NrX3B1dChzayk7XG4rXHRpZiAobmV3c2tfbG9va3VwX3JlZilcbitcdFx0c29ja19wdXQobmV3c2spO1xuIFx0cmV0dXJuO1xuK3JldHJ5X3VubG9jazpcbitcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdG5ld3NrX2xvY2tlZCA9IGZhbHNlO1xuK1x0YmhfdW5sb2NrX3NvY2soc2spO1xuK1x0c29ja19wdXQoc2spO1xuK1x0c29ja19wdXQobmV3c2spO1xuK1x0bmV3c2sgPSBOVUxMO1xuK1x0bmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuK1x0Z290byBsb29rdXA7XG4gZHJvcDpcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuO1xuQEAgLTg1MiwxMiArMTAyOCw1MyBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0aW50IHJjID0gMDtcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbitcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi1cdTAwM2VzaztcbiBcbiBcdGlmIChsaWtlbHkobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19QQUNLRVQpKSB7XG4tXHRcdGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkgLyogbm90IGNsb3NlZCAqL1xuK1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHxcbitcdFx0XHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuK1x0XHRcdCAgICBsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0pIHtcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdFx0XHRnb3RvIG91dF9rZnJlZV9za2I7XG4rXHRcdFx0fVxuIFx0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpO1xuLVx0XHRlbHNlXG4rXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHR9IGVsc2UgaWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCkge1xuK1x0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0XHRpZiAobGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2M9IExMQ19DT05OX1NUQVRFX0FETSkge1xuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbitcdFx0XHR9XG4rXHRcdFx0cmMgPSBsbGNfY29ubl9yY3YobmV3c2ssIHNrYik7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHR9IGVsc2UgaWYgKGxpa2VseShsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIDEpKSB7XG4rXHRcdFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0Z290byBvdXRfa2ZyZWVfc2tiO1xuK1x0XHR9XG4gXHR9IGVsc2UgaWYgKGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfRVZFTlQpIHtcbiBcdFx0LyogdGltZXIgZXhwaXJhdGlvbiBldmVudCAqL1xuIFx0XHRpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpICAvKiBub3QgY2xvc2VkICovXG5AQCAtODcwLDYgKzEwODcsMjQgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIG91dDpcbiBcdHJldHVybiByYztcbityZXRyeTpcbitcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0ICAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcbitcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0aWYgKGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNlIExMQ19DT05OX1NUQVRFX0FETSlcbitcdFx0XHRyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTtcbitcdFx0ZWxzZSB7XG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbitcdFx0fVxuK1x0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiBvdXRfa2ZyZWVfc2tiOlxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRnb3RvIG91dDtcbkBAIC05NTksMTcgKzExOTQsMTggQEAgdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKVxuIFxuIC8qKlxuICAqXHRsbGNfc2tfZnJlZSAtIEZyZWVzIGEgTExDIHNvY2tldFxuLSAqXHRAc2s6IC0gc29ja2V0IHRvIGZyZWVcbisgKlx0QHNrOiBzb2NrZXQgdG8gZnJlZVxuKyAqXHRAc3luYzogd2hldGhlciB0byBzeW5jaHJvbm91c2x5IHN0b3AgdGltZXJzXG4gICpcbi0gKlx0RnJlZXMgYSBMTEMgc29ja2V0XG4rICpcdEZyZWVzIGEgTExDIHNvY2tldC5cbiAgKi9cbi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaylcbit2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKVxuIHtcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiBcbiBcdGxsYy1cdTAwM2VzdGF0ZSA9IExMQ19DT05OX09VVF9PRl9TVkM7XG4gXHQvKiBTdG9wIGFsbCAocG9zc2libHkpIHJ1bm5pbmcgdGltZXJzICovXG4tXHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTtcbitcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHN5bmMpO1xuICNpZmRlZiBERUJVR19MTENfQ09OTl9BTExPQ1xuIFx0cHJpbnRrKEtFUk5fSU5GTyBcIiVzOiB1bmFja3E9JWQsIHR4cT0lZFxcblwiLCBfX2Z1bmNfXyxcbiBcdFx0c2tiX3F1ZXVlX2xlbihcdTAwMjZsbGMtXHUwMDNlcGR1X3VuYWNrX3EpLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NDc6NTAuMjg4MzE5N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MTc2ODA2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTExDIFN1YnN5c3RlbSBQYXRjaCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBkaWdnaW5nIGludG8gdGhlIGBuZXQvbGxjL2Agc3Vic3lzdGVtIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBSaWdodCBhd2F5LCB0aGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgYW55IGNoYW5nZSB0byB0aGUgY29yZSBuZXR3b3JrIGxvZ2ljIGlzIHNvbWV0aGluZyB3ZSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8sIGVzcGVjaWFsbHkgZ2l2ZW4gTExDJ3MgcmVhY2ggaW50byB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMsIHRyYWNraW5nIHN0YXRlcyBsaWtlIGBMTENfSU5DT01JTkdfTk9ORWAsIGBMTENfSU5DT01JTkdfUEVORElOR2AsIGFuZCBgTExDX0lOQ09NSU5HX1FVRVVFRGAsIHNjcmVhbXMgXCJwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJlaGF2aW9yXCIgYW5kIG1ha2VzIHRoaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5MZXQncyBob25lIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZmZWN0ZWQuIEkndmUgZ290IGEgY29tcHJlaGVuc2l2ZSBsaXN0OiBgbGxjX3VpX3JlbGVhc2VgLCBgbGxjX3VpX2FjY2VwdGAsIGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYCwgYGxsY19jb25uX3NlcnZpY2VgLCBgbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrYCwgYGxsY19pbmNvbWluZ19zb2NrX3dvcmtgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfYmFja2xvZ19yY3ZgLCBhbmQgYGxsY19za19mcmVlYC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVudHJ5cG9pbnRzIOKAkyB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9ucyB3ZSBjYW4gcmVhbGlzdGljYWxseSB0YXJnZXQgZm9yIGZ1enppbmcuIEFmdGVyIGEgcXVpY2sgc2NhbiwgSSdtIGZvY3VzaW5nIG9uOiBgbGxjX3VpX3JlbGVhc2VgICh0aG91Z2ggaXQncyBzdGF0aWMsIGl0J3MgcGFydCBvZiB0aGUgYHByb3RvX29wc2ApLCBgbGxjX3VpX2FjY2VwdGAgKGFsc28gc3RhdGljLCBwYXJ0IG9mIGBwcm90b19vcHNgKSwgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGFuZCBgbGxjX3NrX2ZyZWVgLiBUaGVzZSBhcmUgbXkgbGlrZWx5IHN0YXJ0aW5nIHBvaW50cy5cblxuSSBzaG91bGQgYWxzbyBnbGFuY2UgYXQgdGhlIGBLY29uZmlnYCBmb3IgdGhlIExMQyBzdWJzeXN0ZW0sIHdoaWNoIGlzIGBuZXQvbGxjL0tjb25maWdgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGVpdGhlciBgQ09ORklHX0xMQ2Agb3IgYENPTkZJR19MTEMyYCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgaG93IExMQyBpcyBlbmFibGVkIG9yIGRpc2FibGVkIHdpbGwgYmUga2V5IGluIHNldHRpbmcgdXAgdGhlIGFwcHJvcHJpYXRlIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo0Nzo1OC45MDYwMDcwMTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxODU5OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMTENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2xsYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2xsYy9LY29uZmlnOjI6Y29uZmlnIExMQ1xcbm5ldC9sbGMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxubmV0L2xsYy9LY29uZmlnLTQtXFxubmV0L2xsYy9LY29uZmlnOjU6Y29uZmlnIExMQzJcXG5uZXQvbGxjL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiQU5TSS9JRUVFIDgwMi4yIExMQyB0eXBlIDIgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NDc6NTkuMjA3ODcwOTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI0ODcxMTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgTExDIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gYENPTkZJR19MTEMyYCBpcyB0aGUgb25lIHRoZSB1c2VyICpleHBsaWNpdGx5KiBoYXMgYSBzYXkgaW4sIHRoZSBvbmUgdGhleSdyZSBnb2luZyB0byB0b2dnbGUuIFRoYXQgc3VnZ2VzdHMgYENPTkZJR19MTENgIGlzIGxpa2VseSBhbiB1bmRlcmx5aW5nIGRlcGVuZGVuY3ksIHBlcmhhcHMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBvciBlbmFibGVkICpieSogYENPTkZJR19MTEMyYC4gSXQncyBhIGNvbW1vbiBwYXR0ZXJuIGluIEtjb25maWcuIFRvIGJlIGNlcnRhaW4sIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIGFyZSByZWxhdGVkIGFuZCBzZWUgdGhlIGxvZ2ljIGJlaGluZCB0aGVpciBpbnRlcmFjdGlvbnMuIFRoZSBwbGFjZSB0byBnbyBmb3IgdGhhdCBpcyBhbG1vc3QgY2VydGFpbmx5IGBuZXQvbGxjL0tjb25maWdgLiBUaW1lIHRvIGRpdmUgaW4gYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbiBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYExMQ2AgYW5kIGBMTEMyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjQ4OjA5LjQ1NjU4NTkxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9sbGMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIExMQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGVcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIExMQzJcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0c2VsZWN0IExMQ1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGlzIGEgTG9naWNhbCBMaW5rIExheWVyIHR5cGUgMiwgY29ubmVjdGlvbiBvcmllbnRlZCBzdXBwb3J0LlxcbiAgMTA6XFx0XFx0ICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnQgZm9yIFBGX0xMQyBzb2NrZXRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo0ODowOS40NTY2NTIzMDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODI5OTQ2OTI0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTExDIEtlcm5lbCBNb2R1bGUgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIGBDT05GSUdfTExDMmAgaXMgZGVmaW5pdGVseSBzZWxlY3RpbmcgYENPTkZJR19MTENgIGFuZCB0aGF0IGVuYWJsZXMgYFBGX0xMQ2Agc29ja2V0cy4gR3JlYXQsIHRoYXQncyBzdHJhaWdodGZvcndhcmQgLSBzbyBgRW5hYmxlQ29uZmlnczogW1wiTExDMlwiXWAgaXMgY29ycmVjdC5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIExMQyBtb2R1bGUgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSd2ZSBnb3QgYSBwcmVsaW1pbmFyeSBsaXN0OiBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbmAsIGBsbGNfc2tfZnJlZWAsIGBsbGNfdWlfYWNjZXB0YCwgYW5kIGBsbGNfdWlfcmVsZWFzZWAuXG5cbkhvbGQgb24uLi4gSSBqdXN0IHJlYWxpemVkIGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYCBhcmUgbGlzdGVkIGFzICpzdGF0aWMqIGluIGBuZXQvbGxjL2FmX2xsYy5jYC4gVGhhdCdzIGltcG9ydGFudDsgc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbWl0ZWQgc2NvcGUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgd2l0aGluIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYgdG8gbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgcmlnaHQuIExldCdzIHB1bGwgdXAgYG5ldC9sbGMvYWZfbGxjLmNgIGFuZCB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMzOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU3OjUyLjQ1MTM0OTA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjI1NDI5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNfdWlfYWNjZXB0fGxsY191aV9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sbGMvYWZfbGxjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2xsYy9hZl9sbGMuYz0xNjY9c3RhdGljIGludCBsbGNfdWlfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy0xODktLyoqXFxubmV0L2xsYy9hZl9sbGMuYzoxOTA6ICpcXHRsbGNfdWlfcmVsZWFzZSAtIHNodXRkb3duIHNvY2tldFxcbm5ldC9sbGMvYWZfbGxjLmMtMTkxLSAqXFx0QHNvY2s6IFNvY2tldCB0byByZWxlYXNlLlxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy0xOTQtICovXFxubmV0L2xsYy9hZl9sbGMuYzoxOTU6c3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC9sbGMvYWZfbGxjLmMtMTk2LXtcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmM9Njc2PXN0YXRpYyB2b2lkIGxsY19jbXNnX3JjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2FmX2xsYy5jLTY5MS0vKipcXG5uZXQvbGxjL2FmX2xsYy5jOjY5MjogKlxcdGxsY191aV9hY2NlcHQgLSBhY2NlcHQgYSBuZXcgaW5jb21pbmcgY29ubmVjdGlvbi5cXG5uZXQvbGxjL2FmX2xsYy5jLTY5My0gKlxcdEBzb2NrOiBTb2NrZXQgd2hpY2ggY29ubmVjdGlvbnMgYXJyaXZlIG9uLlxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy02OTktICovXFxubmV0L2xsYy9hZl9sbGMuYzo3MDA6c3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxubmV0L2xsYy9hZl9sbGMuYy03MDEtXFx0XFx0XFx0IHN0cnVjdCBwcm90b19hY2NlcHRfYXJnICphcmcpXFxuLS1cXG5uZXQvbGxjL2FmX2xsYy5jPTEyMjg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjX3VpX29wcyA9IHtcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmMtMTIzMC1cXHQub3duZXIgICAgICAgPSBUSElTX01PRFVMRSxcXG5uZXQvbGxjL2FmX2xsYy5jOjEyMzE6XFx0LnJlbGVhc2UgICAgID0gbGxjX3VpX3JlbGVhc2UsXFxubmV0L2xsYy9hZl9sbGMuYy0xMjMyLVxcdC5iaW5kXFx0ICAgICA9IGxsY191aV9iaW5kLFxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy0xMjM0LVxcdC5zb2NrZXRwYWlyICA9IHNvY2tfbm9fc29ja2V0cGFpcixcXG5uZXQvbGxjL2FmX2xsYy5jOjEyMzU6XFx0LmFjY2VwdCAgICAgID0gbGxjX3VpX2FjY2VwdCxcXG5uZXQvbGxjL2FmX2xsYy5jLTEyMzYtXFx0LmdldG5hbWUgICAgID0gbGxjX3VpX2dldG5hbWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU3OjUyLjg4NzYxMjA2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MTc3OTQ2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTExDIFNvY2tldCBTeXNjYWxsIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGBQRl9MTENgIHNvY2tldHMgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXkgYXJlIHN0YXRpYy4gVGhpcyBwcmVzZW50cyBhIGNoYWxsZW5nZS4gV2hpbGUgdGhleSBhcmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBgcmVsZWFzZWAgYW5kIGBhY2NlcHRgIHN5c2NhbGxzLCBiZWluZyBzdGF0aWMgY291bGQgbWFrZSB0aGVtIGxlc3MgdmlzaWJsZSB0byBmdXp6ZXJzIHRoYXQgZGVwZW5kIG9uIGBrYWxsc3ltc2AsIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgcmVseWluZyBvbiBuYW1lLWJhc2VkIHRhcmdldGluZy4gRm9ydHVuYXRlbHksIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciBjYW4gZGlyZWN0bHkgdGFyZ2V0IHN5c2NhbGxzIHdpdGhpbiBzcGVjaWZpYyBzb2NrZXQgZmFtaWxpZXMsIHdoaWNoIGlzIGEgZ29vZCB3b3JrYXJvdW5kLlxuXG5JZGVhbGx5LCB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIHRoZSBiZXN0IGZ1enppbmcgc3RyYXRlZ3kuIFNvLCBsZXQncyBzZWUgd2hpY2ggZ2xvYmFsIGZ1bmN0aW9ucyB3ZXJlIGFkZGVkIG9yIG1vZGlmaWVkOiBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbmAsIGBsbGNfc2tfZnJlZWAsIGFuZCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AuIFRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc2V0IHRvIHByaW9yaXRpemUuXG5cbkhtbSwgd2FpdCBhIHNlY29uZC4uLiBJIHNlZSBgbGxjX3VpX2FjY2VwdGAgYW5kIGBsbGNfdWlfcmVsZWFzZWAgaW4gaGVyZSwgYW5kIHRoZXkncmUgc3RhdGljLCBidXQgY2xlYXJseSBpbXBvcnRhbnQuIFRoZXkgcmVwcmVzZW50IHNpbWlsYXIgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBtYWluIHN5c2NhbGxzIGFuZCBjb3VsZCBiZSBlbnRyeSBwb2ludHMgdG8gdGhlIGNvZGUuIEkgdGhpbmsgSSdsbCBtYWtlIHRoZSBjYWxsIHRvIGV4Y2x1ZGUgdGhvc2UgdG8gc3RyaWN0bHkgYWRoZXJlIHRvIHRoZSBcInByZWZlciBub24tc3RhdGljXCIgcnVsZSwgYnV0IHRoZSBnbG9iYWxzIHNlZW0gc2FmZSB0byBpbmNsdWRlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgYW0gYmVpbmcgY2xlYXIgaGVyZSBhbmQgbWFraW5nIHRoZSBiZXN0IGRlY2lzaW9uIGZvciBmdXp6aW5nLlxuXG5Ob3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbGxjX2Nvbm5faGFuZGxlcmAgaXMgaW5kZWVkIGdsb2JhbC4gSXQncyBiZXN0IHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQyMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1Nzo1OS44MDU0MTAyODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Nzc4MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY19jb25uX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2xsYy9hZl9sbGMuYz0xMjU1PXN0YXRpYyBpbnQgX19pbml0IGxsYzJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy0xMjgwLVxcdGxsY19hZGRfcGFjayhMTENfREVTVF9TQVAsIGxsY19zYXBfaGFuZGxlcik7XFxubmV0L2xsYy9hZl9sbGMuYzoxMjgxOlxcdGxsY19hZGRfcGFjayhMTENfREVTVF9DT05OLCBsbGNfY29ubl9oYW5kbGVyKTtcXG5uZXQvbGxjL2FmX2xsYy5jLTEyODItb3V0Olxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTU3PWludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy04OS1cXHRcXHQgKiBza2ItXFx1MDAzZXNrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluXFxubmV0L2xsYy9sbGNfY29ubi5jOjkwOlxcdFxcdCAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lXFxubmV0L2xsYy9sbGNfY29ubi5jLTkxLVxcdFxcdCAqL1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTg1Mj1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTg3MS1cXG5uZXQvbGxjL2xsY19jb25uLmM6ODcyOnZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1Nzo1OS44NTUyMDk1OTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxOTY5NTgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipHbG9iYWwgU2NvcGUgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gb2JzZXJ2aW5nIHRoYXQgYGxsY19jb25uX2hhbmRsZXJgIGhhcyBiZWVuIGRlZmluZWQgYXQgYSBnbG9iYWwgc2NvcGUuIEFuZCwgaWYgSSB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgY29ycmVjdGx5LCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBhbmQgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCBhcmUgYWxzbyBnbG9iYWxseSBhY2Nlc3NpYmxlLCB3aGljaCBpcyBjcnVjaWFsIGZvciBob3cgdGhleSBpbnRlcm9wZXJhdGUuIEl0J3MgYWxzbyBhcHBhcmVudCB0aGF0IGBsbGNfc2tfZnJlZWAgaXMgYW5vdGhlciBnbG9iYWxseSBkZWZpbmVkIGZ1bmN0aW9uIHdoaWNoIG1heSBhbHNvIGNyZWF0ZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgb3RoZXIgZ2xvYmFsIHZhcmlhYmxlcy5cblxuTm93LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gaG93IGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYCBvcGVyYXRlcy4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgY29ubmVjdGlvbiBzdGF0ZSBtYW5hZ2VtZW50IHJlc2lkZXMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlc2UgZ2xvYmFsIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIHRvIGFzc2VzcyBpdHMgb3ZlcmFsbCBkZXNpZ24gYW5kIHBvdGVudGlhbCBmb3IgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjA0LjM3NDkwODAxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyODQzMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbGxjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbGxjL2xsY19jX2FjLmM9MTQzND1zdGF0aWMgdm9pZCBsbGNfcHJvY2Vzc190bXJfZXYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTE0NDEtXFx0XFx0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKVxcbm5ldC9sbGMvbGxjX2NfYWMuYzoxNDQyOlxcdFxcdFxcdGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XFxubmV0L2xsYy9sbGNfY19hYy5jLTE0NDMtXFx0XFx0ZWxzZSB7XFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9NDM9aW50IHN5c2N0bF9sbGMyX2J1c3lfdGltZW91dCA9IExMQzJfQlVTWV9USU1FICogSFo7XFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtNDUtLyoqXFxubmV0L2xsYy9sbGNfY29ubi5jOjQ2OiAqXFx0bGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyAtIHNlbmRzIGV2ZW50IHRvIGNvbm5lY3Rpb24gc3RhdGUgbWFjaGluZVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy00Ny0gKlxcdEBzazogY29ubmVjdGlvblxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTU2LSAqL1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzo1NzppbnQgbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2xsYy9sbGNfY29ubi5jLTU4LXtcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz0xNzg9dm9pZCBsbGNfY29ubl9zZW5kX3BkdShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtMTkxLSAqXFx0UHJlcGFyZXMgc2VydmljZSBwYXJhbWV0ZXJzIChwcmltIGFuZCBwcmltX2RhdGEpLiBjYWxsaW5nIGluZGljYXRpb25cXG5uZXQvbGxjL2xsY19jb25uLmM6MTkyOiAqXFx0ZnVuY3Rpb24gd2lsbCBiZSBkb25lIGluIGxsY19jb25uX3N0YXRlX3Byb2Nlc3MuXFxubmV0L2xsYy9sbGNfY29ubi5jLTE5My0gKi9cXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz03NTE9c3RhdGljIGludCBsbGNfY29ubl9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTc1Ni1cXHRldi1cXHUwMDNlcmVhc29uID0gMDtcXG5uZXQvbGxjL2xsY19jb25uLmM6NzU3OlxcdHJldHVybiBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy03NTgtfVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTg3Mj12b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy05NTMtXFx0XFx0ICogQ2FuJ3QgYmUgc2tiX3NldF9vd25lcl9yLCB0aGlzIHdpbGwgYmUgZG9uZSBhdCB0aGVcXG5uZXQvbGxjL2xsY19jb25uLmM6OTU0OlxcdFxcdCAqIGxsY19jb25uX3N0YXRlX3Byb2Nlc3MgZnVuY3Rpb24sIGxhdGVyIG9uLCB3aGVuIHdlIHdpbGwgdXNlXFxubmV0L2xsYy9sbGNfY29ubi5jLTk1NS1cXHRcXHQgKiBza2JfcXVldWVfcmN2X3NrYiB0byBzZW5kIGl0IHRvIHVwcGVyIGxheWVycywgdGhpcyBpc1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTEwMjc9c3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTEwODAtXFx0XFx0aWYgKGxpa2VseShsbGMtXFx1MDAzZXN0YXRlIFxcdTAwM2UgMSkpICAvKiBub3QgY2xvc2VkICovXFxubmV0L2xsYy9sbGNfY29ubi5jOjEwODE6XFx0XFx0XFx0cmMgPSBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDgyLVxcdFxcdGVsc2VcXG4tLVxcbm5ldC9sbGMvbGxjX2lmLmM9Mzg9aW50IGxsY19idWlsZF9hbmRfc2VuZF9wa3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfaWYuYy01Ni1cXHRza2ItXFx1MDAzZWRldiAgICAgID0gbGxjLVxcdTAwM2VkZXY7XFxubmV0L2xsYy9sbGNfaWYuYzo1NzpcXHRyZXR1cm4gbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTtcXG5uZXQvbGxjL2xsY19pZi5jLTU4LVxcbi0tXFxubmV0L2xsYy9sbGNfaWYuYz03Nz1pbnQgbGxjX2VzdGFibGlzaF9jb25uZWN0aW9uKHN0cnVjdCBzb2NrICpzaywgY29uc3QgdTggKmxtYWMsIHU4ICpkbWFjLCB1OCBkc2FwKVxcbi0tXFxubmV0L2xsYy9sbGNfaWYuYy0xMDYtXFx0XFx0c2tiX3NldF9vd25lcl93KHNrYiwgc2spO1xcbm5ldC9sbGMvbGxjX2lmLmM6MTA3OlxcdFxcdHJjID0gbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTtcXG5uZXQvbGxjL2xsY19pZi5jLTEwOC1cXHR9XFxuLS1cXG5uZXQvbGxjL2xsY19pZi5jPTEyMz1pbnQgbGxjX3NlbmRfZGlzYyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbGxjL2xsY19pZi5jLTE0Ni1cXHRldi1cXHUwMDNlcHJpbV90eXBlID0gTExDX1BSSU1fVFlQRV9SRVE7XFxubmV0L2xsYy9sbGNfaWYuYzoxNDc6XFx0cmMgPSBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xcbm5ldC9sbGMvbGxjX2lmLmMtMTQ4LW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTg6MDQuNDIxMjAwMDA4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTYwMDUwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBMTEMgQ29ubmVjdGlvbiBIYW5kbGluZyBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIHdheSBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQsIHNwZWNpZmljYWxseSBhaW1pbmcgdG8gYWRkcmVzcyByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlIGZhY3QgdGhhdCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AgaXMgZ2xvYmFsIGFuZCBoZWF2aWx5IHVzZWQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBjcml0aWNhbCBhcmVhIGZvciBzY3J1dGlueS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2Uga2V5IGZ1bmN0aW9uczogYGxsY19jb25uX2hhbmRsZXJgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBgbGxjX3NrX2ZyZWVgLCBhbmQgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYC5cblxuVGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyB3b3JrcXVldWUgYW5kIHN0YXRlIG1hY2hpbmUgc3Ryb25nbHkgc3VnZ2VzdHMgYSBzaGlmdCB0b3dhcmRzIG1vcmUgYXN5bmNocm9ub3VzIGFuZCBjb250cm9sbGVkIGNvbm5lY3Rpb24gaGFuZGxpbmcuIFRoaXMgbGlrZWx5IGludm9sdmVzIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2Ygc29ja2V0cyBhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgbW9yZSBjYXJlZnVsbHkuIFNpbmNlIHRoZSBMTEMgcHJvdG9jb2wgaXMgdXNlci1zcGFjZSBhY2Nlc3NpYmxlIHZpYSBQRl9MTEMgc29ja2V0cywgYW55IGZsYXdzIGhlcmUgY291bGQgYmUgZXhwbG9pdGVkLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBzdGF0ZSBtYWNoaW5lIGludGVncmF0ZXMgd2l0aCB0aGUgZXhpc3RpbmcgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYy4gSSBuZWVkIHRvIGRpdmUgaW50byBlYWNoIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgaG93IHRoZSBuZXcgc3RhdGUgbWFjaGluZSBhbmQgd29ya3F1ZXVlIGludGVyYWN0IHdpdGggdGhlbSB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3QgYW5kIGRvbid0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgbmV3IHN5c3RlbSBpcyBhY3R1YWxseSBzb2x2aW5nIHRoZSB1bmRlcmx5aW5nIHByb2JsZW1zIG9mIHRoZSBvbGQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk3MiwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTg6MDkuNjc3MjA3ODQxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4MjQxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxMQzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsbGNfY29ubl9oYW5kbGVyXCIsXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfYWNjZXB0X2luY29taW5nX3NvY2tcIixcbiAgICBcImxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuXCIsXG4gICAgXCJsbGNfc2tfZnJlZVwiLFxuICAgIFwibGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYyBvZiB0aGUgTExDIHByb3RvY29sLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxMQzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsbGNfY29ubl9oYW5kbGVyXCIsXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfYWNjZXB0X2luY29taW5nX3NvY2tcIixcbiAgICBcImxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuXCIsXG4gICAgXCJsbGNfc2tfZnJlZVwiLFxuICAgIFwibGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYyBvZiB0aGUgTExDIHByb3RvY29sLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1ODowOS43NjUwNDAwOTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzI3ODUyMjE2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjA5Ljc2NTcwMzY2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMjMyNzc4NTQ2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIExMQyBwcm90b2NvbCByZWxhdGVkIHRvIGluY29taW5nIGNvbm5lY3Rpb24gaGFuZGxpbmcuIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgKSBhbmQgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCkgdG8gc2FmZWx5IG1hbmFnZSBhbmQgZGVmZXIgdGhlIGZyZWVpbmcgb2YgaW5jb21pbmcgc29ja2V0cywgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGEgbGlzdGVuaW5nIHNvY2tldCBpcyBjbG9zZWQgd2hpbGUgY2hpbGQgc29ja2V0cyBhcmUgc3RpbGwgcGVuZGluZyBvciBxdWV1ZWQuXFxuXFxuVGhlc2UgdHlwZXMgb2YgYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbGwgbmV3bHkgaW50cm9kdWNlZCBmaWVsZHMgaW4gYHN0cnVjdCBsbGNfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdW5jdGlvbiBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHNrYiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4ODY3OTJmM2IyY2EwNDM2MDk4NGZlNzE0MGNhZWRkNTcwN2IxZjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwODo0Nzo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmggYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG5pbmRleCBlMWEzMDI2OTY3MjM0Li45YWNkYTBhNmYwNjlmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuKysrIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuQEAgLTYsNiArNiw3IEBAXG4gICogXHRcdCAyMDAxLCAyMDAyIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyBcdTAwM2NhY21lQGNvbmVjdGl2YS5jb20uYnJcdTAwM2VcbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX2lmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGxjLmhcdTAwM2VcbkBAIC0xMyw2ICsxNCwxMCBAQFxuICNkZWZpbmUgTExDX0VWRU5UICAgICAgICAgICAgICAgIDFcbiAjZGVmaW5lIExMQ19QQUNLRVQgICAgICAgICAgICAgICAyXG4gXG4rI2RlZmluZSBMTENfSU5DT01JTkdfTk9ORSAgICAgICAgMFxuKyNkZWZpbmUgTExDX0lOQ09NSU5HX1BFTkRJTkcgICAgIDFcbisjZGVmaW5lIExMQ19JTkNPTUlOR19RVUVVRUQgICAgICAyXG4rXG4gI2RlZmluZSBMTEMyX1BfVElNRSAgICAgICAgICAgICAgIDJcbiAjZGVmaW5lIExMQzJfQUNLX1RJTUUgICAgICAgICAgICAgMVxuICNkZWZpbmUgTExDMl9SRUpfVElNRSAgICAgICAgICAgICAzXG5AQCAtNzIsNiArNzcsOSBAQCBzdHJ1Y3QgbGxjX3NvY2sge1xuIFx0XHRcdFx0XHQgICAgICByZWNlaXZlZCBhbmQgY2F1c2VkIHNlbmRpbmcgRlJNUi5cbiBcdFx0XHRcdFx0ICAgICAgVXNlZCBmb3IgcmVzZW5kaW5nIEZSTVIgKi9cbiBcdHUzMlx0XHQgICAgY21zZ19mbGFncztcbitcdGF0b21pY190XHQgICAgaW5jb21pbmdfc3RhdGU7XG4rXHRzdHJ1Y3Qgc29ja1x0ICAgICppbmNvbWluZ19saXN0ZW5lcjtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCBpbmNvbWluZ193b3JrO1xuIFx0c3RydWN0IGhsaXN0X25vZGUgICBkZXZfaGFzaF9ub2RlO1xuIH07XG4gXG5AQCAtOTMsNyArMTAxLDEwIEBAIHN0YXRpYyBfX2lubGluZV9fIGNoYXIgbGxjX2JhY2tsb2dfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0cnVjdCBzb2NrICpsbGNfc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcbiBcdFx0XHQgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pO1xuIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7XG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xuK3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpO1xuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xuK3ZvaWQgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spO1xuIFxuIHZvaWQgbGxjX3NrX3Jlc2V0KHN0cnVjdCBzb2NrICpzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmNcbmluZGV4IGIwNDQ3YzMzZGJmMDkuLjdkMjQ2ZDRkMjgxYmIgMTAwNjQ0XG4tLS0gYS9uZXQvbGxjL2FmX2xsYy5jXG4rKysgYi9uZXQvbGxjL2FmX2xsYy5jXG5AQCAtMTk2LDYgKzE5Niw3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGM7XG4rXHRib29sIGxpc3RlbmVyO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrID09IE5VTEwpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0yMDYsNiArMjA3LDkgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0XHRsbGMtXHUwMDNlbGFkZHIubHNhcCwgbGxjLVx1MDAzZWRhZGRyLmxzYXApO1xuIFx0aWYgKCFsbGNfc2VuZF9kaXNjKHNrKSlcbiBcdFx0bGxjX3VpX3dhaXRfZm9yX2Rpc2Moc2ssIFJFQURfT05DRShzay1cdTAwM2Vza19yY3Z0aW1lbykpO1xuK1x0bGlzdGVuZXIgPSBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOO1xuK1x0aWYgKGxpc3RlbmVyKVxuK1x0XHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xuIFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkge1xuIFx0XHRzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLVx1MDAzZXNhcDtcbiBcbkBAIC0yMTQsMTYgKzIxOCwxOCBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4gXHRcdCAqL1xuIFx0XHRsbGNfc2FwX2hvbGQoc2FwKTtcbiBcdFx0bGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy1cdTAwM2VzYXAsIHNrKTtcbitcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRsbGNfc2FwX3B1dChzYXApO1xuIFx0fSBlbHNlIHtcbitcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0fVxuIFx0bmV0ZGV2X3B1dChsbGMtXHUwMDNlZGV2LCBcdTAwMjZsbGMtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIFx0c29ja19wdXQoc2spO1xuIFx0c29ja19vcnBoYW4oc2spO1xuIFx0c29jay1cdTAwM2VzayA9IE5VTEw7XG4tXHRsbGNfc2tfZnJlZShzayk7XG4rXHRsbGNfc2tfZnJlZShzaywgdHJ1ZSk7XG4gb3V0OlxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTcyMiw2ICs3MjgsNyBAQCBzdGF0aWMgaW50IGxsY191aV9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdFx0Z290byBmcmVlcztcbiBcdHJjID0gMDtcbiBcdG5ld3NrID0gc2tiLVx1MDAzZXNrO1xuK1x0bGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbiBcdC8qIGF0dGFjaCBjb25uZWN0aW9uIHRvIGEgbmV3IHNvY2tldC4gKi9cbiBcdGxsY191aV9za19pbml0KG5ld3NvY2ssIG5ld3NrKTtcbiBcdHNvY2tfcmVzZXRfZmxhZyhuZXdzaywgU09DS19aQVBQRUQpO1xuZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2Nvbm4uYyBiL25ldC9sbGMvbGxjX2Nvbm4uY1xuaW5kZXggMjYwNDYwZDUwZjU0Yy4uNDI3MmNlNGQ0YTFjYSAxMDA2NDRcbi0tLSBhL25ldC9sbGMvbGxjX2Nvbm4uY1xuKysrIGIvbmV0L2xsYy9sbGNfY29ubi5jXG5AQCAtMzIsNiArMzIsNyBAQCBzdGF0aWMgaW50IGxsY19leGVjX2Nvbm5fdHJhbnNfYWN0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKmV2KTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zICpsbGNfcXVhbGlmeV9jb25uX2V2KHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xuK3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbiAvKiBPZmZzZXQgdGFibGUgb24gY29ubmVjdGlvbiBzdGF0ZXMgdHJhbnNpdGlvbiBkaWFncmFtICovXG4gc3RhdGljIGludCBsbGNfb2Zmc2V0X3RhYmxlW05CUl9DT05OX1NUQVRFU11bTkJSX0NPTk5fRVZdO1xuQEAgLTg4LDYgKzg5LDExIEBAIGludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0ICogc2tiLVx1MDAzZXNrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluXG4gXHRcdCAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lXG4gXHRcdCAqL1xuK1x0XHRpZiAoc2sgIT0gc2tiLVx1MDAzZXNrIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKHNrYi1cdTAwM2VzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbitcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZWluY29taW5nX3N0YXRlLFxuK1x0XHRcdFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCk7XG4gXHRcdHNrYl9nZXQoc2tiKTtcbiBcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTtcbiBcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbkBAIC0zNTQsNyArMzYwLDggQEAgc3RhdGljIGludCBsbGNfY29ubl9zZXJ2aWNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiBcdGludCByYyA9IDE7XG4gXG4tXHRpZiAobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSBOQlJfQ09OTl9TVEFURVMpXG4rXHRpZiAobGxjLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0gfHxcbitcdCAgICBsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIE5CUl9DT05OX1NUQVRFUylcbiBcdFx0Z290byBvdXQ7XG4gXHRyYyA9IDA7XG4gXHR0cmFucyA9IGxsY19xdWFsaWZ5X2Nvbm5fZXYoc2ssIHNrYik7XG5AQCAtNzY1LDI3ICs3NzIsMTUzIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayxcbiBcdG1lbWNweShcdTAwMjZuZXdsbGMtXHUwMDNlbGFkZHIsIGRhZGRyLCBzaXplb2YobmV3bGxjLVx1MDAzZWxhZGRyKSk7XG4gXHRtZW1jcHkoXHUwMDI2bmV3bGxjLVx1MDAzZWRhZGRyLCBzYWRkciwgc2l6ZW9mKG5ld2xsYy1cdTAwM2VkYWRkcikpO1xuIFx0bmV3bGxjLVx1MDAzZWRldiA9IGRldjtcbitcdG5ld2xsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lciA9IHNrO1xuK1x0YXRvbWljX3NldChcdTAwMjZuZXdsbGMtXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19QRU5ESU5HKTtcbitcdElOSVRfV09SSyhcdTAwMjZuZXdsbGMtXHUwMDNlaW5jb21pbmdfd29yaywgbGxjX2luY29taW5nX3NvY2tfd29yayk7XG4rXHRzb2NrX2hvbGQoc2spO1xuIFx0ZGV2X2hvbGQoZGV2KTtcbiBcdGxsY19zYXBfYWRkX3NvY2tldChsbGMtXHUwMDNlc2FwLCBuZXdzayk7XG4gb3V0OlxuIFx0cmV0dXJuIG5ld3NrO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGxjX3NvY2ssXG4rXHRcdFx0XHRcdFx0ICAgIGluY29taW5nX3dvcmspO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2bGxjLVx1MDAzZXNrO1xuK1x0c3RydWN0IHNvY2sgKmxpc3RlbmVyID0gbGxjLVx1MDAzZWluY29taW5nX2xpc3RlbmVyO1xuK1xuK1x0bG9ja19zb2NrKGxpc3RlbmVyKTtcbitcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcdGxsY19za19mcmVlKHNrLCBmYWxzZSk7XG4rXHRzb2NrX29ycGhhbihzayk7XG4rXHRyZWxlYXNlX3NvY2soc2spO1xuK1x0bGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7XG4rXHRyZWxlYXNlX3NvY2sobGlzdGVuZXIpO1xuK1x0ZGV2X3B1dChsbGMtXHUwMDNlZGV2KTtcbitcdGxsYy1cdTAwM2VkZXYgPSBOVUxMO1xuK1x0c29ja19wdXQoc2spO1xuK1x0c29ja19wdXQobGlzdGVuZXIpO1xuK31cbitcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbitcbitcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZsbGMtXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19OT05FKSA9PVxuK1x0ICAgIExMQ19JTkNPTUlOR19OT05FKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRXUklURV9PTkNFKGxsYy1cdTAwM2VzdGF0ZSwgTExDX0NPTk5fT1VUX09GX1NWQyk7XG4rXHRzb2NrX2hvbGQoc2spO1xuK1x0bGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy1cdTAwM2VzYXAsIHNrKTtcbitcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bGxjLVx1MDAzZWluY29taW5nX3dvcmspO1xuK31cbitcbit2b2lkIGxsY19hY2NlcHRfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuK1xuK1x0aWYgKGF0b21pY194Y2hnKFx1MDAyNmxsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX05PTkUpICE9XG4rXHQgICAgTExDX0lOQ09NSU5HX05PTkUpXG4rXHRcdHNvY2tfcHV0KGxsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcik7XG4rfVxuK1xuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXG4rXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSkge1xuK1x0XHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza2ItXHUwMDNlc2s7XG4rXG4rXHRcdGlmIChuZXdzayBcdTAwMjZcdTAwMjYgbmV3c2sgIT0gc2spIHtcbitcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbitcdFx0XHQgICAgTExDX0lOQ09NSU5HX05PTkUpXG4rXHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdH1cbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHR9XG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbit9XG4rXG4rLypcbisgKiBUaGlzIG1pcnJvcnMgdGhlIEFETS1zdGF0ZSBETSBhY3Rpb25zLCBidXQgYSBsaXN0ZW5lciBoYXMgbm8gcGVlclxuKyAqIGFkZHJlc3MgaW4gbGxjLVx1MDAzZWRhZGRyIHlldC5cbisgKi9cbitzdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0IHN0cnVjdCBsbGNfYWRkciAqc2FkZHIsIHU4IGZfYml0KVxuK3tcbitcdHN0cnVjdCBza19idWZmICpuc2tiO1xuK1x0aW50IHJjO1xuK1xuK1x0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG4rXHRpZiAoIW5za2IpXG4rXHRcdHJldHVybjtcbitcbitcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxuK1x0XHRcdCAgICBzYWRkci1cdTAwM2Vsc2FwLCBMTENfUERVX1JTUCk7XG4rXHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcbitcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBzYWRkci1cdTAwM2VtYWMpO1xuK1x0aWYgKHVubGlrZWx5KHJjKSlcbitcdFx0a2ZyZWVfc2tiKG5za2IpO1xuK1x0ZWxzZVxuK1x0XHRkZXZfcXVldWVfeG1pdChuc2tiKTtcbit9XG4rXG4gdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGxsY19hZGRyIHNhZGRyLCBkYWRkcjtcbi1cdHN0cnVjdCBzb2NrICpzaztcbitcdHN0cnVjdCBzb2NrICpzaywgKm5ld3NrID0gTlVMTDtcbitcdGJvb2wgbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuK1x0Ym9vbCBuZXdza19sb2NrZWQgPSBmYWxzZTtcbiBcbiBcdGxsY19wZHVfZGVjb2RlX3NhKHNrYiwgc2FkZHIubWFjKTtcbiBcdGxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCBcdTAwMjZzYWRkci5sc2FwKTtcbiBcdGxsY19wZHVfZGVjb2RlX2RhKHNrYiwgZGFkZHIubWFjKTtcbiBcdGxsY19wZHVfZGVjb2RlX2RzYXAoc2tiLCBcdTAwMjZkYWRkci5sc2FwKTtcbiBcbitsb29rdXA6XG4gXHRzayA9IF9fbGxjX2xvb2t1cChzYXAsIFx1MDAyNnNhZGRyLCBcdTAwMjZkYWRkciwgZGV2X25ldChza2ItXHUwMDNlZGV2KSk7XG4gXHRpZiAoIXNrKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKHNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuK1x0XHRuZXdzayA9IHNrO1xuK1x0XHRiaF9sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbitcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdHNvY2tfcHV0KG5ld3NrKTtcbitcdFx0XHRuZXdzayA9IE5VTEw7XG4rXHRcdFx0Z290byBsb29rdXA7XG4rXHRcdH1cbitcdFx0c2sgPSBsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX2xpc3RlbmVyO1xuK1x0XHRzb2NrX2hvbGQoc2spO1xuK1x0XHRuZXdza19sb29rdXBfcmVmID0gdHJ1ZTtcbitcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0fVxuK1xuIFx0YmhfbG9ja19zb2NrKHNrKTtcbitcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpXG4rXHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRpZiAobmV3c2tfbG9va3VwX3JlZikge1xuK1x0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0bmV3c2tfbG9ja2VkID0gdHJ1ZTtcbitcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbitcdFx0XHRnb3RvIHJldHJ5X3VubG9jaztcbitcdFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcbitcdFx0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpIHtcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHR9XG4rXHR9XG4gXHQvKlxuIFx0ICogVGhpcyBoYXMgdG8gYmUgZG9uZSBoZXJlIGFuZCBub3QgYXQgdGhlIHVwcGVyIGxheWVyIC1cdTAwM2VhY2NlcHRcbiBcdCAqIG1ldGhvZCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIFBST0NPTSBzdGF0ZSBtYWNoaW5lIHdvcmtzOlxuQEAgLTc5NSwxMCArOTI4LDI1IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0ICogaW4gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgcHJpdmF0ZSBhcmVhLiAtYWNtZVxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikpIHtcbi1cdFx0c3RydWN0IHNvY2sgKm5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2c2FkZHIsIFx1MDAyNmRhZGRyKTtcbi1cdFx0aWYgKCFuZXdzaylcbi1cdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHRpZiAoIW5ld3NrKSB7XG4rXHRcdFx0aWYgKGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XG4rXHRcdFx0XHRpZiAoIWxsY19jb25uX2V2X3J4X2Rpc2NfY21kX3BiaXRfc2V0X3goc2ssIHNrYikpIHtcbitcdFx0XHRcdFx0dTggZl9iaXQ7XG4rXG4rXHRcdFx0XHRcdGxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsIFx1MDAyNmZfYml0KTtcbitcdFx0XHRcdFx0bGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsIFx1MDAyNnNhZGRyLCBmX2JpdCk7XG4rXHRcdFx0XHR9IGVsc2UgaWYgKCFsbGNfY29ubl9ldl9yeF94eHhfY21kX3BiaXRfc2V0XzEoc2ssIHNrYikpIHtcbitcdFx0XHRcdFx0bGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsIFx1MDAyNnNhZGRyLCAxKTtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRcdFx0fVxuK1x0XHRcdG5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItXHUwMDNlZGV2LCBcdTAwMjZzYWRkcixcbitcdFx0XHRcdFx0XHRcdCBcdTAwMjZkYWRkcik7XG4rXHRcdFx0aWYgKCFuZXdzaylcbitcdFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdFx0bmV3c2tfbG9ja2VkID0gdHJ1ZTtcbitcdFx0fVxuIFx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuQEAgLTgxMywxOCArOTYxLDQ2IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRza2ItXHUwMDNlc2sgPSBzaztcbiBcdFx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX2VmcmVlO1xuIFx0fVxuLVx0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKVxuK1x0aWYgKHVubGlrZWx5KGxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0pKSB7XG4rXHRcdGlmIChuZXdzaylcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0ZWxzZSBpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKHNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbitcdFx0XHQgTExDX0lOQ09NSU5HX05PTkUpXG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzayk7XG4rXHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHR9XG4rXHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHtcbiBcdFx0bGxjX2Nvbm5fcmN2KHNrLCBza2IpO1xuLVx0ZWxzZSB7XG4rXHRcdGlmIChuZXdzayBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdH0gZWxzZSB7XG4gXHRcdGRwcmludGsoXCIlczogYWRkaW5nIHRvIGJhY2tsb2cuLi5cXG5cIiwgX19mdW5jX18pO1xuIFx0XHRsbGNfc2V0X2JhY2tsb2dfdHlwZShza2IsIExMQ19QQUNLRVQpO1xuLVx0XHRpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpKVxuK1x0XHRpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpKSB7XG4rXHRcdFx0aWYgKG5ld3NrKVxuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4gXHRcdFx0Z290byBkcm9wX3VubG9jaztcbitcdFx0fVxuIFx0fVxuIG91dDpcbitcdGlmIChuZXdza19sb2NrZWQpXG4rXHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiBcdGJoX3VubG9ja19zb2NrKHNrKTtcbiBcdHNvY2tfcHV0KHNrKTtcbitcdGlmIChuZXdza19sb29rdXBfcmVmKVxuK1x0XHRzb2NrX3B1dChuZXdzayk7XG4gXHRyZXR1cm47XG4rcmV0cnlfdW5sb2NrOlxuK1x0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0bmV3c2tfbG9ja2VkID0gZmFsc2U7XG4rXHRiaF91bmxvY2tfc29jayhzayk7XG4rXHRzb2NrX3B1dChzayk7XG4rXHRzb2NrX3B1dChuZXdzayk7XG4rXHRuZXdzayA9IE5VTEw7XG4rXHRuZXdza19sb29rdXBfcmVmID0gZmFsc2U7XG4rXHRnb3RvIGxvb2t1cDtcbiBkcm9wOlxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRyZXR1cm47XG5AQCAtODUyLDEyICsxMDI4LDUzIEBAIHN0YXRpYyBpbnQgbGxjX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRpbnQgcmMgPSAwO1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuK1x0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVx1MDAzZXNrO1xuIFxuIFx0aWYgKGxpa2VseShsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX1BBQ0tFVCkpIHtcbi1cdFx0aWYgKGxpa2VseShsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIDEpKSAvKiBub3QgY2xvc2VkICovXG4rXHRcdGlmIChuZXdzayBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuK1x0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbitcdFx0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRcdFx0Z290byByZXRyeTtcbitcdFx0XHR9XG4rXHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fFxuK1x0XHRcdCAgICBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8XG4rXHRcdFx0ICAgIGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkge1xuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbitcdFx0XHR9XG4gXHRcdFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4tXHRcdGVsc2VcbitcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdFx0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdH0gZWxzZSBpZiAobmV3c2sgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdFx0XHQgICBMTENfSU5DT01JTkdfUVVFVUVEKSB7XG4rXHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuK1x0XHRcdGlmIChsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzYz0gTExDX0NPTk5fU1RBVEVfQURNKSB7XG4rXHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRcdFx0Z290byBvdXRfa2ZyZWVfc2tiO1xuK1x0XHRcdH1cbitcdFx0XHRyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTtcbitcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdH0gZWxzZSBpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpIHtcbitcdFx0XHRyYyA9IGxsY19jb25uX3Jjdihzaywgc2tiKTtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRnb3RvIG91dF9rZnJlZV9za2I7XG4rXHRcdH1cbiBcdH0gZWxzZSBpZiAobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19FVkVOVCkge1xuIFx0XHQvKiB0aW1lciBleHBpcmF0aW9uIGV2ZW50ICovXG4gXHRcdGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkgIC8qIG5vdCBjbG9zZWQgKi9cbkBAIC04NzAsNiArMTA4NywyNCBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gb3V0OlxuIFx0cmV0dXJuIHJjO1xuK3JldHJ5OlxuK1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHQgICAgTExDX0lOQ09NSU5HX1FVRVVFRCkge1xuK1x0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuK1x0XHRpZiAobGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2UgTExDX0NPTk5fU1RBVEVfQURNKVxuK1x0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpO1xuK1x0XHRlbHNlIHtcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdFx0Z290byBvdXRfa2ZyZWVfc2tiO1xuK1x0XHR9XG4rXHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0Z290byBvdXRfa2ZyZWVfc2tiO1xuIG91dF9rZnJlZV9za2I6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdGdvdG8gb3V0O1xuQEAgLTk1OSwxNyArMTE5NCwxOCBAQCB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXG4gXG4gLyoqXG4gICpcdGxsY19za19mcmVlIC0gRnJlZXMgYSBMTEMgc29ja2V0XG4tICpcdEBzazogLSBzb2NrZXQgdG8gZnJlZVxuKyAqXHRAc2s6IHNvY2tldCB0byBmcmVlXG4rICpcdEBzeW5jOiB3aGV0aGVyIHRvIHN5bmNocm9ub3VzbHkgc3RvcCB0aW1lcnNcbiAgKlxuLSAqXHRGcmVlcyBhIExMQyBzb2NrZXRcbisgKlx0RnJlZXMgYSBMTEMgc29ja2V0LlxuICAqL1xuLXZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxuK3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXG4ge1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuIFxuIFx0bGxjLVx1MDAzZXN0YXRlID0gTExDX0NPTk5fT1VUX09GX1NWQztcbiBcdC8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi9cbi1cdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpO1xuK1x0bGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgc3luYyk7XG4gI2lmZGVmIERFQlVHX0xMQ19DT05OX0FMTE9DXG4gXHRwcmludGsoS0VSTl9JTkZPIFwiJXM6IHVuYWNrcT0lZCwgdHhxPSVkXFxuXCIsIF9fZnVuY19fLFxuIFx0XHRza2JfcXVldWVfbGVuKFx1MDAyNmxsYy1cdTAwM2VwZHVfdW5hY2tfcSksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1ODowOS43NjU3MDQ4NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0MTg4MDU0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQgZm9yIExMQyBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgcGF0Y2ggd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IEl0J3MgdG91Y2hpbmcgdGhlIExMQyBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbCAoYG5ldC9sbGMvYCksIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHNvY2tldCBoYW5kbGluZyBkdXJpbmcgaW5jb21pbmcgY29ubmVjdGlvbnMsIGxpa2VseSBhaW1pbmcgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHRpZWQgdG8gc29ja2V0IGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgaXNzdWVzLCB3aGljaCB0ZW5kIHRvIGJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gSG93ZXZlciwgd2UgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuRmlyc3QsIGxldCdzIGlzb2xhdGUgdGhlIGNoYW5nZXMuIFdlJ3ZlIGdvdCBhZGRpdGlvbnMgdG8gYHN0cnVjdCBsbGNfc29ja2AgKG5ldyBmaWVsZHMgYGluY29taW5nX3N0YXRlYCwgYGluY29taW5nX2xpc3RlbmVyYCwgYGluY29taW5nX3dvcmtgKSwgbW9kaWZpY2F0aW9ucyBpbiBgYWZfbGxjLmNgIGludm9sdmluZyBzb2NrZXQgcmVsZWFzZSAoYGxsY191aV9yZWxlYXNlYCksIGFuZCBtb2RpZmljYXRpb25zIGluIGBsbGNfY29ubi5jYCB0byBoYW5kbGUgdGhlIGxpZmVjeWNsZSB3aXRoIHRoZSBuZXcgZmllbGRzLCB3b3JrcXVldWUgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludHJvZHVjZSBzdGF0ZSB0cmFja2luZyBhbmQgYSB3b3JrcXVldWUgdG8gbWFuYWdlIHRoZSBmcmVlaW5nIG9mIGluY29taW5nIHNvY2tldHMuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gQXJlIHRoZXJlIG5ldyBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZT8gTm8uIEFyZSB0aGUgbmV3IGBzdHJ1Y3QgbGxjX3NvY2tgIGZpZWxkcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlPyBZZXMsIHRoZXkncmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrYC4gRG9lcyB0aGlzIHRvdWNoIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnM/IE5vLiBEb2VzIHRoaXMgY29weSBkYXRhIHRvIHVzZXIgc3BhY2U/IE5vLCBub3RoaW5nIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cblxuQmFzZWQgb24gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2Vz4oCUc29ja2V0IGxpZmVjeWNsZSwgbG9ja2luZywgYW5kIHN0YXRlIG1hY2hpbmUgdHJhbnNpdGlvbnPigJRpdCBhcHBlYXJzIHRvIGJlIGEgZml4IGZvciB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YgS0FTQU4gYW5kIExPQ0tERVAuIE5vIHJlZCBmbGFncyBwb2ludGluZyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlIGFyZSBwcmVzZW50IGF0IHRoaXMgcG9pbnQuXG5cbkxldCdzIGRvIGEgZmluYWwgY2hlY2suIFRoZSBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgIGZ1bmN0aW9uIGlzIGFkZGVkLCB3aGljaCBpbnZvbHZlcyBgbGxjX2FsbG9jX2ZyYW1lYCwgYGxsY19wZHVfaGVhZGVyX2luaXRgLCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAsIGFuZCBgbGxjX21hY19oZHJfaW5pdGAuIFdlJ3JlIGNyZWF0aW5nIGFuZCBzZW5kaW5nIFNLQnMsIGJ1dCB0eXBpY2FsbHkgZnVuY3Rpb25zIGxpa2UgYGFsbG9jX3NrYmAgYW5kIGhlYWRlciBpbml0aWFsaXphdGlvbiB3cml0ZSB0aGUgYnl0ZXMgZXhhY3RseSBhcyBuZWVkZWQuIExldCBtZSBxdWVyeSBmb3IgYGxsY19hbGxvY19mcmFtZWAgdG8gYmUgY2VydGFpbi5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgcGF0Y2gsIGFuZCBubyBpbmRpY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc5MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1OTowNC4xODQ1MTM5MzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODAxNDQzNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX2FsbG9jX2ZyYW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2xsY19zYXAuaD0xNz12b2lkIGxsY19zYXZlX3ByaW1pdGl2ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQvbGxjX3NhcC5oLTE4LVxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgcHJpbSk7XFxuaW5jbHVkZS9uZXQvbGxjX3NhcC5oOjE5OnN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L2xsY19zYXAuaC0yMC1cXHRcXHRcXHRcXHR1OCB0eXBlLCB1MzIgZGF0YV9zaXplKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0xOTI9aW50IGxsY19jb25uX2FjX3NlbmRfZGlzY19jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMTk1LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6MTk2OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy0xOTctXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MjE3PWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMjAtXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzoyMjE6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTIyMi1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0yNDM9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTI0Ni1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjI0NzpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtMjQ4LVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTI2Nz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9mcm1yX3JzcF9mX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yNzktXFx0XFx0Zl9iaXQgPSAwO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzoyODA6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yODEtXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTMwMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTMwNC1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjMwNTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMDYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTMyOD1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTMzNS1cXHRsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCBcXHUwMDI2Zl9iaXQpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzozMzY6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMzctXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTQyMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2lfeHh4X3hfc2V0XzBfb3Jfc2VuZF9ycihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDI3LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDI4OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00MjktXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NDU5PWludCBsbGNfY29ubl9hY19zZW5kX3Jlal9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDYyLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDYzOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00NjQtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NDgzPWludCBsbGNfY29ubl9hY19zZW5kX3Jlal9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDg2LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDg3OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00ODgtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTA3PWludCBsbGNfY29ubl9hY19zZW5kX3Jlal94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTEwLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTExOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01MTItXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTMxPWludCBsbGNfY29ubl9hY19zZW5kX3Jucl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTM0LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTM1OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01MzYtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTU1PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTU4LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTU5OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01NjAtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTc5PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTgyLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTgzOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01ODQtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NjE1PWludCBsbGNfY29ubl9hY19vcHRfc2VuZF9ybnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTYxOC1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjYxOTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNjIwLVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTYzOT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjQyLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NjQzOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy02NDQtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NjYzPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy02NjYtXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo2Njc6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTY2OC1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz02ODg9aW50IGxsY19jb25uX2FjX3NlbmRfYWNrX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy02OTEtXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo2OTI6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTY5My1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz03MTI9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTcxNS1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjcxNjpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNzE3LVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTczNj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTczOS1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjc0MDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNzQxLVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTc3MD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9zYWJtZV9jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNzczLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6Nzc0OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy03NzUtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9Nzk4PWludCBsbGNfY29ubl9hY19zZW5kX3VhX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy04MDItXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo4MDM6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTgwNC1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz05NTk9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF9hY2twZihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtOTYzLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6OTY0OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy05NjUtXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9ODUyPXN0YXRpYyB2b2lkIGxsY19jb25uX3NlbmRfZG1fcnNwKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtODU3LVxcbm5ldC9sbGMvbGxjX2Nvbm4uYzo4NTg6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NTktXFx0aWYgKCFuc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTEwNT1pbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF94aWRfcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jLTExMy1cXHRsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgXFx1MDAyNmRzYXApO1xcbm5ldC9sbGMvbGxjX3NfYWMuYzoxMTQ6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXFxubmV0L2xsYy9sbGNfc19hYy5jLTExNS1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfeGlkX2luZm8pKTtcXG4tLVxcbm5ldC9sbGMvbGxjX3NfYWMuYz0xNDg9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfdGVzdF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zX2FjLmMtMTYzLVxcdGRhdGFfc2l6ZSA9IG50b2hzKGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9wcm90bykgLSAzO1xcbm5ldC9sbGMvbGxjX3NfYWMuYzoxNjQ6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIGRhdGFfc2l6ZSk7XFxubmV0L2xsYy9sbGNfc19hYy5jLTE2NS1cXHRpZiAoIW5za2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zYXAuYz0yMj1zdGF0aWMgaW50IGxsY19tYWNfaGVhZGVyX2xlbih1bnNpZ25lZCBzaG9ydCBkZXZ0eXBlKVxcbi0tXFxubmV0L2xsYy9sbGNfc2FwLmMtMzItLyoqXFxubmV0L2xsYy9sbGNfc2FwLmM6MzM6ICpcXHRsbGNfYWxsb2NfZnJhbWUgLSBhbGxvY2F0ZXMgc2tfYnVmZiBmb3IgZnJhbWVcXG5uZXQvbGxjL2xsY19zYXAuYy0zNC0gKlxcdEBzazogIHNvY2tldCB0byBhbGxvY2F0ZSBmcmFtZSB0b1xcbi0tXFxubmV0L2xsYy9sbGNfc2FwLmMtNDEtICovXFxubmV0L2xsYy9sbGNfc2FwLmM6NDI6c3RydWN0IHNrX2J1ZmYgKmxsY19hbGxvY19mcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2xsYy9sbGNfc2FwLmMtNDMtXFx0XFx0XFx0XFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYz00Mj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfeGlkX3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy00NS1cXHRpbnQgcmMgPSAxO1xcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo0NjpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTQ3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY194aWRfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jPTY2PXN0YXRpYyBpbnQgbGxjX3N0YXRpb25fYWNfc2VuZF90ZXN0X3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy03Ny1cXHRkYXRhX3NpemUgPSBudG9ocyhldGhfaGRyKHNrYiktXFx1MDAzZWhfcHJvdG8pIC0gMztcXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM6Nzg6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIGRhdGFfc2l6ZSk7XFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTc5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1OTowNi40NjQ2NjM4NDVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUxMjkwOTg1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYGxsY19hbGxvY19mcmFtZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBsbGNfYWxsb2NfZnJhbWVgLCBhbmQgaXRzIHJvbGUgaW4gYWxsb2NhdGluZyBhbiBgc2tiYC4gVGhhdCdzIHRoZSBjb3JlIG5ldHdvcmsgYnVmZmVyIHN0cnVjdHVyZSwgc28gdGhpcyBmdW5jdGlvbiBpcyBjbGVhcmx5IGNyaXRpY2FsLiBMZXQncyBkaWcgaW4gYW5kIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBsbGNfYWxsb2NfZnJhbWVgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJmYWNpbmcgd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNrYiBhbGxvY2F0aW9uIG1lY2hhbmlzbXMuIFdoYXQncyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgaXQgdXNpbmcgYSBzdGFuZGFyZCBga21hbGxvY2AgYXBwcm9hY2gsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIGZvciBza2JzPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGZsYWdzIG9yIHBhcmFtZXRlcnMgcGFzc2VkIHRoYXQgaGludCBhdCBMTEMtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGZvciB0aGUgbmV0d29yayBmcmFtZT8gS25vd2luZyBob3cgaXQncyBhbGxvY2F0aW5nLCBpbml0aWFsaXppbmcsIGFuZCBwb3RlbnRpYWxseSBsaW5raW5nIHRoaXMgYHNrYmAgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIHByb3RvY29sIHN0YWNrLiBJIG5lZWQgdG8gc2VlIGlmIGl0IHV0aWxpemVzIGFueSBjdXN0b20gYWxsb2NhdG9ycywgb3IgaWYgaXQgbWlnaHQgYmUgc3ViamVjdCB0byBmcmFnbWVudGF0aW9uIGlzc3VlcyBpZiBoYW5kbGluZyBsYXJnZXIgZnJhbWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE2NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU5OjIxLjU5Mzc2Njk2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwNTg1OTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc2tfYnVmZiBcXFxcKmxsY19hbGxvY19mcmFtZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9sbGNfc2FwLmg9MTc9dm9pZCBsbGNfc2F2ZV9wcmltaXRpdmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L2xsY19zYXAuaC0xOC1cXHRcXHRcXHR1bnNpZ25lZCBjaGFyIHByaW0pO1xcbmluY2x1ZGUvbmV0L2xsY19zYXAuaDoxOTpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5pbmNsdWRlL25ldC9sbGNfc2FwLmgtMjAtXFx0XFx0XFx0XFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSk7XFxuLS1cXG5uZXQvbGxjL2xsY19zYXAuYz0yMj1zdGF0aWMgaW50IGxsY19tYWNfaGVhZGVyX2xlbih1bnNpZ25lZCBzaG9ydCBkZXZ0eXBlKVxcbi0tXFxubmV0L2xsYy9sbGNfc2FwLmMtNDEtICovXFxubmV0L2xsYy9sbGNfc2FwLmM6NDI6c3RydWN0IHNrX2J1ZmYgKmxsY19hbGxvY19mcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2xsYy9sbGNfc2FwLmMtNDMtXFx0XFx0XFx0XFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTk6MjQuMjk5NjM2OTI1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMzIyNzk5NzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbGxjX3NhcC5jYCAtIExpbmUgNDIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGluIHRoZSBMTEMgKExvZ2ljYWwgTGluayBDb250cm9sKSBzdWJsYXllciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFNlcnZpY2UgQWNjZXNzIFBvaW50IChTQVApIGZ1bmN0aW9uYWxpdHkuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG5ldC9sbGMvbGxjX3NhcC5jYCBiZWNhdXNlIGl0J3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIGZvciBTQVAtcmVsYXRlZCBjb2RlLiBNeSBodW5jaCBpcyB0aGF0IHRoaXMgZmlsZSB3aWxsIGNvbnRhaW4gdGhlIHJlZ2lzdHJhdGlvbiwgbG9va3VwLCBhbmQgcG90ZW50aWFsIGhhbmRsaW5nIG9mIFNBUHMuIE5vdywgc2luY2UgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjayBhcmNoaXRlY3R1cmUsIEknbGwgZ28gZGlyZWN0bHkgdG8gbGluZSA0Mi4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2V0IG1lIGludG8gdGhlIGhlYXJ0IG9mIGEgcmVsZXZhbnQgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4gRGVwZW5kaW5nIG9uIHRoZSBjb2RlIHN0eWxlLCBsaW5lIDQyIGNvdWxkIGJlIHRoZSBzdGFydCBvZiBhIGZ1bmN0aW9uIG9yIGEgZ2xvYmFsIHZhcmlhYmxlLiBLbm93aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGZpbGUgaXMga2V5LCBzbyBsZXQncyBzZWUgd2hhdCB3ZSBmaW5kIHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY5NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAyOjQ3LjUyNzYzODU0NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbGxjL2xsY19zYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHR9XFxuICAzMTpcXHRcXG4gIDMyOlxcdC8qKlxcbiAgMzM6XFx0ICpcXHRsbGNfYWxsb2NfZnJhbWUgLSBhbGxvY2F0ZXMgc2tfYnVmZiBmb3IgZnJhbWVcXG4gIDM0OlxcdCAqXFx0QHNrOiAgc29ja2V0IHRvIGFsbG9jYXRlIGZyYW1lIHRvXFxuICAzNTpcXHQgKlxcdEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRoaXMgc2tiIHdpbGwgYmUgc2VudCBvdmVyXFxuICAzNjpcXHQgKlxcdEB0eXBlOiBwZHUgdHlwZSB0byBhbGxvY2F0ZVxcbiAgMzc6XFx0ICpcXHRAZGF0YV9zaXplOiBkYXRhIHNpemUgdG8gYWxsb2NhdGVcXG4gIDM4OlxcdCAqXFxuICAzOTpcXHQgKlxcdEFsbG9jYXRlcyBhbiBza19idWZmIGZvciBmcmFtZSBhbmQgaW5pdGlhbGl6ZXMgc2tfYnVmZiBmaWVsZHMuXFxuICA0MDpcXHQgKlxcdFJldHVybnMgYWxsb2NhdGVkIHNrYiBvciAlTlVMTCB3aGVuIG91dCBvZiBtZW1vcnkuXFxuICA0MTpcXHQgKi9cXG4gIDQyOlxcdHN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiAgNDM6XFx0XFx0XFx0XFx0XFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcXG4gIDQ0OlxcdHtcXG4gIDQ1OlxcdFxcdGludCBobGVuID0gdHlwZSA9PSBMTENfUERVX1RZUEVfVSA/IDMgOiA0O1xcbiAgNDY6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0aGxlbiArPSBsbGNfbWFjX2hlYWRlcl9sZW4oZGV2LVxcdTAwM2V0eXBlKTtcXG4gIDQ5OlxcdFxcdHNrYiA9IGFsbG9jX3NrYihobGVuICsgZGF0YV9zaXplLCBHRlBfQVRPTUlDKTtcXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0aWYgKHNrYikge1xcbiAgNTI6XFx0XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gIDUzOlxcdFxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgaGxlbik7XFxuICA1NDpcXHRcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gIDU1OlxcdFxcdFxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuICA1NjpcXHRcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpO1xcbiAgNTc6XFx0XFx0XFx0c2tiLVxcdTAwM2VkZXYgICAgICA9IGRldjtcXG4gIDU4OlxcdFxcdFxcdGlmIChzayAhPSBOVUxMKVxcbiAgNTk6XFx0XFx0XFx0XFx0c2tiX3NldF9vd25lcl93KHNrYiwgc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMjo0Ny41Mjc3MTE4MTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3ODEyNTQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExMQyBGcmFtZSBBbGxvY2F0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgbGxjX2FsbG9jX2ZyYW1lYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSB1c2Ugb2YgYGFsbG9jX3NrYmAg4oCTIHRoYXQncyBzdGFuZGFyZCBmb3IgYWxsb2NhdGluZyB0aGUgc29ja2V0IGJ1ZmZlciwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBmb3IgbmV0d29yayBjb21tdW5pY2F0aW9uLiBOb3csIGl0IGxvb2tzIGxpa2UgYWZ0ZXIgdGhlIFNLQiBpcyBhbGxvY2F0ZWQsIHRoZXJlIGFyZSBzZXZlcmFsIGluaXRpYWxpemF0aW9uIHN0ZXBzLiBTcGVjaWZpY2FsbHksIGBsbGNfcGR1X2hlYWRlcl9pbml0YCwgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgLCBhbmQgYGxsY19tYWNfaGRyX2luaXRgIGFyZSBjYWxsZWQsIGFuZCBJIHN1c3BlY3QgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwaWVjZXMgdGhhdCBwb3B1bGF0ZSB0aGUgaGVhZGVycyB3aXRoaW4gdGhlIFNLQi4gTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgb2YgYm90aCBgbGxjX3BkdV9oZWFkZXJfaW5pdGAgYW5kIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCDigJMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFByb3RvY29sIERhdGEgVW5pdCAoUERVKSBoZWFkZXJzIGFuZCB0aGUgRGF0YSBNYW5hZ2VtZW50IHJlc3BvbnNlIGFyZSBiZWluZyBjb25zdHJ1Y3RlZC4gVGhhdCdsbCBiZSBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyB0aGUgZnJhbWUgaXMgcHV0IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ1NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDI6NTEuMzA1ODQxMzk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA4MzI5NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbGxjX3BkdV9oZWFkZXJfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9sbGNfcGR1Lmg9MjEyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19wZHVfdW4gKmxsY19wZHVfdW5faGRyKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjI2LSAqL1xcbmluY2x1ZGUvbmV0L2xsY19wZHUuaDoyMjc6c3RhdGljIGlubGluZSB2b2lkIGxsY19wZHVfaGVhZGVyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHlwZSxcXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjI4LVxcdFxcdFxcdFxcdCAgICAgICB1OCBzc2FwLCB1OCBkc2FwLCB1OCBjcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDI6NTMuMzE0MTgwOTc5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDc1ODUwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gTExDIFBEVSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBMTEMgUERVIHN0cnVjdHVyZSwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCB3aXRoIGBpbmNsdWRlL25ldC9sbGNfcGR1LmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjI3LiBUaGF0J3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4gdG8gZ2V0IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFueSBkZWZpbmVkIGNvbnN0YW50cyByZWxhdGVkIHRvIHRoZSBwcm90b2NvbCBkYXRhIHVuaXQuIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIGZpZWxkcy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIGhvdyB0aGUgdmFyaW91cyBjb21wb25lbnRzIGFyZSBhcnJhbmdlZCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTUwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDI6NTYuMzYxNzY4NTk5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2xsY19wZHUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0ICpcXHRAdHlwZTogdHlwZSBvZiBQRFUgKFUsIEkgb3IgUykuXFxuIDIyMTpcXHQgKlxcdEBzc2FwOiBzb3VyY2Ugc2FwLlxcbiAyMjI6XFx0ICpcXHRAZHNhcDogZGVzdGluYXRpb24gc2FwLlxcbiAyMjM6XFx0ICpcXHRAY3I6IGNvbW1hbmQvcmVzcG9uc2UgYml0ICgwIG9yIDEpLlxcbiAyMjQ6XFx0ICpcXG4gMjI1OlxcdCAqXFx0VGhpcyBmdW5jdGlvbiBzZXRzIERTQVAsIFNTQVAgYW5kIGNvbW1hbmQvUmVzcG9uc2UgYml0IGluIExMQyBoZWFkZXIuXFxuIDIyNjpcXHQgKi9cXG4gMjI3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2hlYWRlcl9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsXFxuIDIyODpcXHRcXHRcXHRcXHRcXHQgICAgICAgdTggc3NhcCwgdTggZHNhcCwgdTggY3IpXFxuIDIyOTpcXHR7XFxuIDIzMDpcXHRcXHRpbnQgaGxlbiA9IDQ7IC8qIGRlZmF1bHQgdmFsdWUgZm9yIEkgYW5kIFMgdHlwZXMgKi9cXG4gMjMxOlxcdFxcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHU7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdHN3aXRjaCAodHlwZSkge1xcbiAyMzQ6XFx0XFx0Y2FzZSBMTENfUERVX1RZUEVfVTpcXG4gMjM1OlxcdFxcdFxcdGhsZW4gPSAzO1xcbiAyMzY6XFx0XFx0XFx0YnJlYWs7XFxuIDIzNzpcXHRcXHRjYXNlIExMQ19QRFVfVFlQRV9VX1hJRDpcXG4gMjM4OlxcdFxcdFxcdGhsZW4gPSA2O1xcbiAyMzk6XFx0XFx0XFx0YnJlYWs7XFxuIDI0MDpcXHRcXHR9XFxuIDI0MTpcXHRcXG4gMjQyOlxcdFxcdHNrYl9wdXNoKHNrYiwgaGxlbik7XFxuIDI0MzpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gMjQ0OlxcdFxcdHBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7XFxuIDI0NTpcXHRcXHRwZHUtXFx1MDAzZWRzYXAgPSBkc2FwO1xcbiAyNDY6XFx0XFx0cGR1LVxcdTAwM2Vzc2FwID0gc3NhcDtcXG4gMjQ3OlxcdFxcdHBkdS1cXHUwMDNlc3NhcCB8PSBjcjtcXG4gMjQ4OlxcdH1cXG4gMjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMjo1Ni4zNjE4NDQyNzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3Mjc4OTIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYC4gSSBuZWVkIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoaXMgZnVuY3Rpb24gYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgb3ZlcmFsbCBwcm90b2NvbCBzdGFjay4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSBpdHMgcm9sZTsgaXQgc2VlbXMgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIERhdGEgTW9kZSAoRE0pIHJlc3BvbnNlLCBwcm9iYWJseSByZWxhdGVkIHRvIExMQyAoTG9naWNhbCBMaW5rIENvbnRyb2wpIGluaXRpYWxpemF0aW9uLiBJJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHR5cGljYWwgY2FsbCBmbG93IGFyb3VuZCB0aGlzIHBvaW50IOKAkyB3aGVyZSBkb2VzIHRoaXMgZml0IHdpdGhpbiB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHNlcXVlbmNlPyBJcyB0aGlzIHRyaWdnZXJlZCBieSBhbiBpbmNvbWluZyBETSBmcmFtZT8gSXMgaXQgYSByZXNwb25zZSB0byBhIHNwZWNpZmljIHJlcXVlc3QgZnJvbSB0aGUgcGVlcj8gS25vd2luZyB0aGUgY29udGV4dCwgSSBjYW4gcXVpY2tseSBob25lIGluIG9uIHRoZSBjb3JlIGxvZ2ljIGFuZCBjcml0aWNhbCBwYXJhbWV0ZXJzLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFdoYXQgZmFpbHVyZSBjYXNlcyBhcmUgY292ZXJlZD8gQXJlIHRoZXkgaGFuZGxlZCBncmFjZWZ1bGx5LCBvciBkbyB0aGV5IHBvdGVudGlhbGx5IGxlYXZlIHRoZSBzeXN0ZW0gaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlPyBGaW5hbGx5LCBJIG5lZWQgdG8gY29uc2lkZXIgaXRzIGludGVyYWN0aW9ucyB3aXRoIGxvd2VyIGxheWVycy4gRG9lcyBpdCBjYWxsIGFueSBmdW5jdGlvbnMgdGhhdCBtaWdodCBsZWFkIHRvIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIHN0YXRlIGNoYW5nZXMgaW4gdGhlIGxpbmsgbGF5ZXI/IEFyZSB0aGVzZSBwcm9wZXJseSBzeW5jaHJvbml6ZWQgYW5kIG1hbmFnZWQ/IExldCdzIGNoZWNrIHRoZSBjb2RlIGFuZCBjb25maXJtIHRoaXMgbWVudGFsIG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYyOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDI6NTkuOTM0NjM3MDMzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI5MDkxODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbGxjX3BkdV9pbml0X2FzX2RtX3JzcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9sbGNfcGR1Lmg9NDMwPXZvaWQgbGxjX3BkdV9pbml0X2FzX3NhYm1lX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwX2JpdCk7XFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oOjQzMTp2b2lkIGxsY19wZHVfaW5pdF9hc19kbV9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZl9iaXQpO1xcbmluY2x1ZGUvbmV0L2xsY19wZHUuaC00MzItdm9pZCBsbGNfcGR1X2luaXRfYXNfZnJtcl9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxsY19wZHVfc24gKnByZXZfcGR1LFxcbi0tXFxubmV0L2xsYy9sbGNfcGR1LmM9MTc4PXZvaWQgbGxjX3BkdV9pbml0X2FzX3NhYm1lX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwX2JpdClcXG4tLVxcbm5ldC9sbGMvbGxjX3BkdS5jLTE5My0gKi9cXG5uZXQvbGxjL2xsY19wZHUuYzoxOTQ6dm9pZCBsbGNfcGR1X2luaXRfYXNfZG1fcnNwKHN0cnVjdCBza19idWZmICpza2IsIHU4IGZfYml0KVxcbm5ldC9sbGMvbGxjX3BkdS5jLTE5NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjAxLjU2MzczNTAyMloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzcyODYzMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbmV0L2xsYy9sbGNfcGR1LmNgIGFyb3VuZCBMaW5lIDE5NCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvbGxjL2xsY19wZHUuY2AuIEJhc2VkIG9uIHdoYXQgSSdtIGxvb2tpbmcgYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgMTk0LiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIHRoZSBMTEMgKExvZ2ljYWwgTGluayBDb250cm9sKSBQRFUgKFByb3RvY29sIERhdGEgVW5pdCkgaGFuZGxpbmcsIHByb2JhYmx5IGVpdGhlciBjb25zdHJ1Y3RpbmcsIHBhcnNpbmcgb3IgcHJvY2Vzc2luZyB0aGUgZGF0YSB3aXRoaW4gdGhlIExMQyBoZWFkZXIgb3IgcGF5bG9hZC4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIHNwZWNpZmljIHNlY3Rpb24gd2lsbCB0ZWxsIG1lIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZsb3cgYW5kIHdoZXRoZXIgaXTigJlzIHJlbGF0ZWQgdG8gaW5jb21pbmcgZnJhbWVzLCBvdXRnb2luZyBmcmFtZXMsIGNvbm5lY3Rpb24gc2V0dXAgb3IgZGF0YSB0cmFuc2Zlci4gR2l2ZW4gdGhhdCB0aGlzIGlzIExMQywgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgRFNBUCAoRGVzdGluYXRpb24gU2VydmljZSBBY2Nlc3MgUG9pbnQpLCBTU0FQIChTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQpLCBDb250cm9sIGZpZWxkcywgcG90ZW50aWFsbHkgYW4gSW5mb3JtYXRpb24gZmllbGQsIGFuZCBtYXliZSBldmVuIHNvbWUgc3VibmV0d29yayBhY2Nlc3MgcHJvdG9jb2wgZGV0YWlscy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgZXJyb3JzLCBzdGF0ZSB0cmFuc2l0aW9ucywgb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgTUFDIGxheWVyLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGxpbmUgMTk0IG1pZ2h0IGhvbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjI5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDM6MDUuMzM2NjAxNzM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbGxjL2xsY19wZHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTA6XFx0ICpcXHRAZl9iaXQ6IFRoZSBGIGJpdCB0byBzZXQgaW4gdGhlIFBEVVxcbiAxOTE6XFx0ICpcXG4gMTkyOlxcdCAqXFx0QnVpbGRzIGEgcGR1IGZyYW1lIGFzIGEgRE0gcmVzcG9uc2UuXFxuIDE5MzpcXHQgKi9cXG4gMTk0OlxcdHZvaWQgbGxjX3BkdV9pbml0X2FzX2RtX3JzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmX2JpdClcXG4gMTk1OlxcdHtcXG4gMTk2OlxcdFxcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpO1xcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHRwZHUtXFx1MDAzZWN0cmxfMSAgPSBMTENfUERVX1RZUEVfVTtcXG4gMTk5OlxcdFxcdHBkdS1cXHUwMDNlY3RybF8xIHw9IExMQ18yX1BEVV9SU1BfRE07XFxuIDIwMDpcXHRcXHRwZHUtXFx1MDAzZWN0cmxfMSB8PSAoKGZfYml0IFxcdTAwMjYgMSkgXFx1MDAzY1xcdTAwM2MgNCkgXFx1MDAyNiBMTENfVV9QRl9CSVRfTUFTSztcXG4gMjAxOlxcdH1cXG4gMjAyOlxcdFxcbiAyMDM6XFx0LyoqXFxuIDIwNDpcXHQgKlxcdGxsY19wZHVfaW5pdF9hc19mcm1yX3JzcCAtIGJ1aWxkcyBGUk1SIHJlc3BvbnNlIFBEVVxcbiAyMDU6XFx0ICpcXHRAc2tiOiBBZGRyZXNzIG9mIHRoZSBmcmFtZSB0byBidWlsZFxcbiAyMDY6XFx0ICpcXHRAcHJldl9wZHU6IFRoZSByZWplY3RlZCBQRFUgZnJhbWVcXG4gMjA3OlxcdCAqXFx0QGZfYml0OiBUaGUgRiBiaXQgdG8gc2V0IGluIHRoZSBQRFVcXG4gMjA4OlxcdCAqXFx0QHZzOiB0eCBzdGF0ZSB2YXJpIHZhbHVlIGZvciB0aGUgZGF0YSBsaW5rIGNvbm4gYXQgdGhlIHJlamVjdGluZyBMTENcXG4gMjA5OlxcdCAqXFx0QHZyOiByeCBzdGF0ZSB2YXIgdmFsdWUgZm9yIHRoZSBkYXRhIGxpbmsgY29ubiBhdCB0aGUgcmVqZWN0aW5nIExMQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzowNS4zMzY3MDQzNDhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNTY2MDA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExMQyBQRFUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIExMQyBQRFUgaXMgaW5pdGlhbGl6ZWQuIGBsbGNfcGR1X2hlYWRlcl9pbml0YCBpcyB0YWtpbmcgY2FyZSBvZiBzZXR0aW5nIHRoZSBgZHNhcGAgYW5kIGBzc2FwYCBmaWVsZHMuIFRoZW4sIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUgYGN0cmxfMWAgZmllbGQuIFJpZ2h0LCBzbyBmYXIsIHNvIGdvb2QuXG5cbkZvciB0aGUgYExMQ19QRFVfVFlQRV9VYCBQRFUgdHlwZSwgdGhlIGhlYWRlciBsZW5ndGgsIGBobGVuYCwgaXMgc2V0IHRvIDMgYnl0ZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZSBMTEMgc3VibGF5ZXIuIE5vdywgbGV0J3MgY29ubmVjdCB0aGUgZG90cy4gVGhlIGBzdHJ1Y3QgbGxjX3BkdV91bmAgc3RydWN0dXJlIGlzIGRlZmluZWQgdG8gaG9sZCB0aGUgYGRzYXBgLCBgc3NhcGAsIGFuZCBgY3RybF8xYCBmaWVsZHMuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBpcyBjb3JyZWN0LiBJ4oCZbSBnb2luZyB0byBnbyBhaGVhZCBhbmQgY2hlY2sgdGhhdCBgc3RydWN0IGxsY19wZHVfdW5gIGRlZmluaXRpb24gYWdhaW4uIEp1c3QgdG8gdmVyaWZ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk0MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjA5LjM3MjM2ODE0NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMzkzNDQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbGxjX3BkdV91biBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9sbGNfcGR1Lmg9MjAwPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19wZHVfc24gKmxsY19wZHVfc25faGRyKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjA1LS8qIFVuLW51bWJlcmVkIFBEVSBmb3JtYXQgKDMgYnl0ZXMgaW4gbGVuZ3RoKSAqL1xcbmluY2x1ZGUvbmV0L2xsY19wZHUuaDoyMDY6c3RydWN0IGxsY19wZHVfdW4ge1xcbmluY2x1ZGUvbmV0L2xsY19wZHUuaC0yMDctXFx0dTggZHNhcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDM6MTEuODg2MzEwMzQzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjI5NDQ3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gTExDIFBEVSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgTG9naWNhbCBMaW5rIENvbnRyb2wgKExMQykgUHJvdG9jb2wgRGF0YSBVbml0IChQRFUpIGZvcm1hdCwgcGFydGljdWxhcmx5IGhvdyBpdCdzIGRlZmluZWQgaW4gdGhlIGtlcm5lbC4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaW5jbHVkZS9uZXQvbGxjX3BkdS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIwNi4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiByZXNpZGVzLCBvciBhdCBsZWFzdCBhIGdvb2QgY2h1bmsgb2YgcmVsYXRlZCBlbnVtcyBhbmQgc3RydWN0dXJlcy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBsYXlvdXQgYW5kIGFueSBjcnVjaWFsIGZpZWxkcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJ20gZGVidWdnaW5nIG9yIHRoZSBvcHRpbWl6YXRpb24gSSdtIGNvbnNpZGVyaW5nLiBUaGlua2luZyB0aGlzIHdvdWxkIGJlIHRoZSBiZXN0IGxvY2F0aW9uIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQyMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjE1LjI0OTI1ODQ4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2xsY19wZHUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbGxjX3BkdV9zbiAqbGxjX3BkdV9zbl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMjAxOlxcdHtcXG4gMjAyOlxcdFxcdHJldHVybiAoc3RydWN0IGxsY19wZHVfc24gKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gMjAzOlxcdH1cXG4gMjA0OlxcdFxcbiAyMDU6XFx0LyogVW4tbnVtYmVyZWQgUERVIGZvcm1hdCAoMyBieXRlcyBpbiBsZW5ndGgpICovXFxuIDIwNjpcXHRzdHJ1Y3QgbGxjX3BkdV91biB7XFxuIDIwNzpcXHRcXHR1OCBkc2FwO1xcbiAyMDg6XFx0XFx0dTggc3NhcDtcXG4gMjA5OlxcdFxcdHU4IGN0cmxfMTtcXG4gMjEwOlxcdH0gX19wYWNrZWQ7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19wZHVfdW4gKmxsY19wZHVfdW5faGRyKHN0cnVjdCBza19idWZmICpza2IpXFxuIDIxMzpcXHR7XFxuIDIxNDpcXHRcXHRyZXR1cm4gKHN0cnVjdCBsbGNfcGR1X3VuICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDIxNTpcXHR9XFxuIDIxNjpcXHRcXG4gMjE3OlxcdC8qKlxcbiAyMTg6XFx0ICpcXHRsbGNfcGR1X2hlYWRlcl9pbml0IC0gaW5pdGlhbGl6ZXMgcGR1IGhlYWRlclxcbiAyMTk6XFx0ICpcXHRAc2tiOiBpbnB1dCBza2IgdGhhdCBoZWFkZXIgbXVzdCBiZSBzZXQgaW50byBpdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDM6MTUuMjQ5MzQ0MjVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3Nzk1NTU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipMTEMgUERVIEluaXRpYWxpemF0aW9uOiBBIFF1aWNrIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBqdXN0IHF1aWNrbHkgZ29pbmcgb3ZlciB0aGUgTExDIFBEVSBpbml0aWFsaXphdGlvbiB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJIHNlZSB0aGF0IHRoZSBgc3RydWN0IGxsY19wZHVfdW5gIGlzLCBhcyBleHBlY3RlZCwgYSBjb21wYWN0IDMgYnl0ZXMuIE5vdywgSSByZW1lbWJlciB0aGF0IGBsbGNfcGR1X2hlYWRlcl9pbml0YCBjbGVhbmx5IHNldHMgdGhlIGBkc2FwYCBhbmQgYHNzYXBgIGZpZWxkcy4gRXhjZWxsZW50LiBUaGVuLCB0byByb3VuZCB0aGluZ3Mgb3V0LCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAgdGFrZXMgY2FyZSBvZiB0aGUgYGN0cmxfMWAgYnl0ZS5cblxuU28sIGZyb20gd2hhdCBJIGNhbiBzZWUgaGVyZSwgYWxsIDMgYnl0ZXMgd2l0aGluIHRoYXQgc3RydWN0dXJlIGFyZSBkZWZpbml0ZWx5IGluaXRpYWxpemVkLiBJJ20ganVzdCB3b25kZXJpbmcgaWYgdGhlcmUgaXMgYW55dGhpbmcgSSBzaG91bGQgYmUgYXdhcmUgb2YgcmVnYXJkaW5nIGBsbGNfbWFjX2hkcl9pbml0YCB0aGF0IEkgYW0gbWlzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NzYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjE5LjMyNzMwMjE3NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNDUwODcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgbGxjX21hY19oZHJfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9sbGMuaD05ND1pbnQgbGxjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LFxcbi0tXFxuaW5jbHVkZS9uZXQvbGxjLmgtOTYtXFxuaW5jbHVkZS9uZXQvbGxjLmg6OTc6aW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2EsXFxuaW5jbHVkZS9uZXQvbGxjLmgtOTgtXFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYSk7XFxuLS1cXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0yNC0gKi9cXG5uZXQvbGxjL2xsY19vdXRwdXQuYzoyNTppbnQgbGxjX21hY19oZHJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9sbGMvbGxjX291dHB1dC5jLTI2LVxcdFxcdCAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzoyMS4wNjE4MTY2NjNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5OTI3MzgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlIGZvciBgbmV0L2xsYy9sbGNfb3V0cHV0LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgb3V0cHV0IHByb2Nlc3MgaXMgaGFuZGxlZCB0aGVyZS4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZWN0aW9uIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgaW4gdGhlIExMQyBsYXllciwgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgbG9naWMgYXQgdGhpcyBwb2ludCBpbiB0aGUgY29kZS4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyBzZWN0aW9uIHByb2JhYmx5IHRvdWNoZXMgb24gZnJhbWUgZm9ybWF0dGluZywgcXVldWluZywgYW5kIHBvc3NpYmx5IGludGVyYWN0aW9uIHdpdGggbG93ZXItbGV2ZWwgZHJpdmVycy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gYW55IHN1YnRsZSBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgYm90dGxlbmVja3MuIEdldHRpbmcgdGhlIGRldGFpbHMgcmlnaHQgaGVyZSBjYW4gbWFrZSBhIGJpZyBkaWZmZXJlbmNlLCBlc3BlY2lhbGx5IGluIGhpZ2gtdGhyb3VnaHB1dCBlbnZpcm9ubWVudHMuIFRoaXMgd2lsbCBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzoyNC41NjEwOTM2MTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2xsYy9sbGNfb3V0cHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0ICpcXHRAZGE6IFRoZSBNQUMgZGVzdGluYXRpb24gYWRkcmVzc1xcbiAgMjE6XFx0ICpcXG4gIDIyOlxcdCAqXFx0RmlsbHMgTUFDIGhlYWRlciBmaWVsZHMsIGRlcGVuZGluZyBvbiBNQUMgdHlwZS4gUmV0dXJucyAwLCBJZiBNQUMgdHlwZVxcbiAgMjM6XFx0ICpcXHRpcyBhIHZhbGlkIHR5cGUgYW5kIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlcyBjb3JyZWN0bHkgMSwgb3RoZXJ3aXNlLlxcbiAgMjQ6XFx0ICovXFxuICAyNTpcXHRpbnQgbGxjX21hY19oZHJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgMjY6XFx0XFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGEpXFxuICAyNzpcXHR7XFxuICAyODpcXHRcXHRpbnQgcmMgPSAtRUlOVkFMO1xcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlKSB7XFxuICAzMTpcXHRcXHRjYXNlIEFSUEhSRF9FVEhFUjpcXG4gIDMyOlxcdFxcdGNhc2UgQVJQSFJEX0xPT1BCQUNLOlxcbiAgMzM6XFx0XFx0XFx0cmMgPSBkZXZfaGFyZF9oZWFkZXIoc2tiLCBza2ItXFx1MDAzZWRldiwgRVRIX1BfODAyXzIsIGRhLCBzYSxcXG4gIDM0OlxcdFxcdFxcdFxcdFxcdCAgICAgc2tiLVxcdTAwM2VsZW4pO1xcbiAgMzU6XFx0XFx0XFx0aWYgKHJjIFxcdTAwM2UgMClcXG4gIDM2OlxcdFxcdFxcdFxcdHJjID0gMDtcXG4gIDM3OlxcdFxcdFxcdGJyZWFrO1xcbiAgMzg6XFx0XFx0ZGVmYXVsdDpcXG4gIDM5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzoyNC41NjExNjQxNDZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ4MjM3MDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNhZmV0eSoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUg4oCTIGEgcmFjZSBjb25kaXRpb24sIHNwZWNpZmljYWxseSBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBpbiB0aGUgTExDIHByb3RvY29sJ3MgaW5jb21pbmcgY29ubmVjdGlvbiBoYW5kbGluZy4gVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0IGEgbGlzdGVuaW5nIHNvY2tldCBjYW4gYmUgZGVzdHJveWVkIHdoaWxlIGNoaWxkIHNvY2tldHMgKGluY29taW5nIGNvbm5lY3Rpb25zKSBhcmUgc3RpbGwgaW4gYSBwZW5kaW5nIG9yIHF1ZXVlZCBzdGF0ZS4gVGhpcyBwYXRjaCdzIHNvbHV0aW9uIGlzIGVsZWdhbnQ6IGl0IGludHJvZHVjZXMgYSBzdGF0ZSBtYWNoaW5lIChgaW5jb21pbmdfc3RhdGVgKSB0byB0cmFjayB0aGUgbGlmZWN5Y2xlIG9mIHRoZXNlIGluY29taW5nIHNvY2tldHMgYW5kIGEgd29ya3F1ZXVlIChgaW5jb21pbmdfd29ya2ApIHRvIGRlZmVyIHRoZWlyIGZyZWVpbmcuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjbGVhbnVwIGhhcHBlbnMgc2FmZWx5LCByZXNvbHZpbmcgdGhlIHJhY2UgY29uZGl0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGtpbmQgb2YgYnVnLCB0aGlzICpzcGVjaWZpYyogdHlwZSBvZiB1c2UtYWZ0ZXItZnJlZSwgaXMgZXhhY3RseSB3aGF0IEtBU0FOLCBhbmQgZXZlbiBMT0NLREVQIGZvciB0aGF0IG1hdHRlciwgaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBXZSdyZSB0YWxraW5nIGFib3V0IHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgdGhlc2UgdG9vbHMgZXhjZWwgYXQgY2F0Y2hpbmcgZHVyaW5nIGRldmVsb3BtZW50LlxuXG5Mb29raW5nIGNsb3NlciwgdGhlcmUncyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzICpuZXcqIHdheXMgdG8gbGVhayBpbmZvcm1hdGlvbiBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIGBkZXZfaGFyZF9oZWFkZXJgIGluaXRpYWxpemVzIHRoZSBNQUMgaGVhZGVyLCBzbyB0aGUgU0tCIGRvZXNuJ3QgaGF2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gRXZlcnl0aGluZyBhZGRlZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFuZCB0aGUgbmV3bHkgYWRkZWQgZnVuY3Rpb24gYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIFNLQiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uIFRoZSBwYXRjaCBpcyBjYXJlZnVsbHkgYWRkcmVzc2luZyBhIGNvbmN1cnJlbmN5IHByb2JsZW0gd2l0aCBrbm93biwgd2VsbC11bmRlcnN0b29kIHRlY2huaXF1ZXMgKHN0YXRlIG1hbmFnZW1lbnQsIHdvcmtxdWV1ZSkuIFRoZSBwYXRjaCBpcyBjYXJlZnVsbHkgYWRkcmVzc2luZyBhIGNvbmN1cnJlbmN5IHByb2JsZW0gd2l0aCBrbm93biwgd2VsbC11bmRlcnN0b29kIHRlY2huaXF1ZXMgKHN0YXRlIG1hbmFnZW1lbnQsIHdvcmtxdWV1ZSkuIE5vdGhpbmcncyBiZWluZyBzaGlwcGVkIHRvIHVzZXJzcGFjZSB0aGF04oCZcyBuZXcsIHVudGVzdGVkLCBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYy5cblxuU28sIGdpdmVuIGFsbCBvZiB0aGlzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJ3Qgd2FycmFudGVkIGhlcmUuIEtBU0FOIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRvaW5nIGl0cyBqb2IgYW5kIGNhdGNoaW5nIGFueSBpbnRyb2R1Y2VkIG1lbW9yeSBlcnJvcnMsIGFuZCB0aGVyZSBhcmUgbm8gaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBwYXRjaCBpdHNlbGYuIFdlIHNob3VsZCBiZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk2OCwiT3V0cHV0VG9rZW5zIjoyMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzozMy4wNDM1Mzg1MTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIExMQyBwcm90b2NvbCByZWxhdGVkIHRvIGluY29taW5nIGNvbm5lY3Rpb24gaGFuZGxpbmcuIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgKSBhbmQgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCkgdG8gc2FmZWx5IG1hbmFnZSBhbmQgZGVmZXIgdGhlIGZyZWVpbmcgb2YgaW5jb21pbmcgc29ja2V0cywgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGEgbGlzdGVuaW5nIHNvY2tldCBpcyBjbG9zZWQgd2hpbGUgY2hpbGQgc29ja2V0cyBhcmUgc3RpbGwgcGVuZGluZyBvciBxdWV1ZWQuXFxuXFxuVGhlc2UgdHlwZXMgb2YgYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbGwgbmV3bHkgaW50cm9kdWNlZCBmaWVsZHMgaW4gYHN0cnVjdCBsbGNfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdW5jdGlvbiBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHNrYiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIExMQyBwcm90b2NvbCByZWxhdGVkIHRvIGluY29taW5nIGNvbm5lY3Rpb24gaGFuZGxpbmcuIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgKSBhbmQgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCkgdG8gc2FmZWx5IG1hbmFnZSBhbmQgZGVmZXIgdGhlIGZyZWVpbmcgb2YgaW5jb21pbmcgc29ja2V0cywgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGEgbGlzdGVuaW5nIHNvY2tldCBpcyBjbG9zZWQgd2hpbGUgY2hpbGQgc29ja2V0cyBhcmUgc3RpbGwgcGVuZGluZyBvciBxdWV1ZWQuXFxuXFxuVGhlc2UgdHlwZXMgb2YgYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbGwgbmV3bHkgaW50cm9kdWNlZCBmaWVsZHMgaW4gYHN0cnVjdCBsbGNfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdW5jdGlvbiBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHNrYiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowtxg4h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 08:30:57 +0000 UTC FinishedAt: 2026-08-22 09:03:34 +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": "4e15e89faac9f308baeb01f46c13a051814d2449", "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": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LLC2" ], "series_id": "6af1f24c-1614-4d0c-8beb-0334e6ec7ed4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "llc_conn_handler", "llc_release_incoming_sock", "llc_accept_incoming_sock", "llc_release_incoming_children", "llc_sk_free", "llc_conn_state_process" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMTEMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGxjX2Nvbm5faGFuZGxlciYjMzQ7LAogICAgJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrJiMzNDssCiAgICAmIzM0O2xsY19hY2NlcHRfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbiYjMzQ7LAogICAgJiMzNDtsbGNfc2tfZnJlZSYjMzQ7LAogICAgJiMzNDtsbGNfY29ubl9zdGF0ZV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgTExDIHByb3RvY29sIHJlbGF0ZWQgdG8gaW5jb21pbmcgY29ubmVjdGlvbiBoYW5kbGluZy4gSXQgaW50cm9kdWNlcyBuZXcgc3RhdGUgdHJhY2tpbmcgKGBpbmNvbWluZ19zdGF0ZWApIGFuZCBhIHdvcmtxdWV1ZSAoYGluY29taW5nX3dvcmtgKSB0byBzYWZlbHkgbWFuYWdlIGFuZCBkZWZlciB0aGUgZnJlZWluZyBvZiBpbmNvbWluZyBzb2NrZXRzLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gYSBsaXN0ZW5pbmcgc29ja2V0IGlzIGNsb3NlZCB3aGlsZSBjaGlsZCBzb2NrZXRzIGFyZSBzdGlsbCBwZW5kaW5nIG9yIHF1ZXVlZC5cblxuVGhlc2UgdHlwZXMgb2YgYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbGwgbmV3bHkgaW50cm9kdWNlZCBmaWVsZHMgaW4gYHN0cnVjdCBsbGNfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdW5jdGlvbiBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHNrYiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB3b3JrcXVldWUgYW5kIHN0YXRlIG1hY2hpbmUgZm9yIGhhbmRsaW5nIGluY29taW5nIExMQyBjb25uZWN0aW9ucyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5IGxlYWtzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBjb25uZWN0aW9uIGhhbmRsaW5nIGxvZ2ljIG9mIHRoZSBMTEMgcHJvdG9jb2wsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgUEZfTExDIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ODg2NzkyZjNiMmNhMDQzNjA5ODRmZTcxNDBjYWVkZDU3MDdiMWY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDg6NDc6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaCBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcbmluZGV4IGUxYTMwMjY5NjcyMzQuLjlhY2RhMGE2ZjA2OWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG5AQCAtNiw2ICYjNDM7Niw3IEBAXG4gICogXHRcdCAyMDAxLCAyMDAyIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyBcdTAwM2NhY21lQGNvbmVjdGl2YS5jb20uYnJcdTAwM2VcbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2xsY19pZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsYy5oXHUwMDNlXG5AQCAtMTMsNiAmIzQzOzE0LDEwIEBAXG4gI2RlZmluZSBMTENfRVZFTlQgICAgICAgICAgICAgICAgMVxuICNkZWZpbmUgTExDX1BBQ0tFVCAgICAgICAgICAgICAgIDJcbiBcbiYjNDM7I2RlZmluZSBMTENfSU5DT01JTkdfTk9ORSAgICAgICAgMFxuJiM0MzsjZGVmaW5lIExMQ19JTkNPTUlOR19QRU5ESU5HICAgICAxXG4mIzQzOyNkZWZpbmUgTExDX0lOQ09NSU5HX1FVRVVFRCAgICAgIDJcbiYjNDM7XG4gI2RlZmluZSBMTEMyX1BfVElNRSAgICAgICAgICAgICAgIDJcbiAjZGVmaW5lIExMQzJfQUNLX1RJTUUgICAgICAgICAgICAgMVxuICNkZWZpbmUgTExDMl9SRUpfVElNRSAgICAgICAgICAgICAzXG5AQCAtNzIsNiAmIzQzOzc3LDkgQEAgc3RydWN0IGxsY19zb2NrIHtcbiBcdFx0XHRcdFx0ICAgICAgcmVjZWl2ZWQgYW5kIGNhdXNlZCBzZW5kaW5nIEZSTVIuXG4gXHRcdFx0XHRcdCAgICAgIFVzZWQgZm9yIHJlc2VuZGluZyBGUk1SICovXG4gXHR1MzJcdFx0ICAgIGNtc2dfZmxhZ3M7XG4mIzQzO1x0YXRvbWljX3RcdCAgICBpbmNvbWluZ19zdGF0ZTtcbiYjNDM7XHRzdHJ1Y3Qgc29ja1x0ICAgICppbmNvbWluZ19saXN0ZW5lcjtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW5jb21pbmdfd29yaztcbiBcdHN0cnVjdCBobGlzdF9ub2RlICAgZGV2X2hhc2hfbm9kZTtcbiB9O1xuIFxuQEAgLTkzLDcgJiM0MzsxMDEsMTAgQEAgc3RhdGljIF9faW5saW5lX18gY2hhciBsbGNfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IpXG4gc3RydWN0IHNvY2sgKmxsY19za19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5LFxuIFx0XHRcdCAgc3RydWN0IHByb3RvICpwcm90LCBpbnQga2Vybik7XG4gdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTtcbi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzayk7XG4mIzQzO3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpO1xuJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbiYjNDM7dm9pZCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbiYjNDM7dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spO1xuIFxuIHZvaWQgbGxjX3NrX3Jlc2V0KHN0cnVjdCBzb2NrICpzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmNcbmluZGV4IGIwNDQ3YzMzZGJmMDkuLjdkMjQ2ZDRkMjgxYmIgMTAwNjQ0XG4tLS0gYS9uZXQvbGxjL2FmX2xsYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbGxjL2FmX2xsYy5jXG5AQCAtMTk2LDYgJiM0MzsxOTYsNyBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4ge1xuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjO1xuJiM0MztcdGJvb2wgbGlzdGVuZXI7XG4gXG4gXHRpZiAodW5saWtlbHkoc2sgPT0gTlVMTCkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTIwNiw2ICYjNDM7MjA3LDkgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0XHRsbGMtXHUwMDNlbGFkZHIubHNhcCwgbGxjLVx1MDAzZWRhZGRyLmxzYXApO1xuIFx0aWYgKCFsbGNfc2VuZF9kaXNjKHNrKSlcbiBcdFx0bGxjX3VpX3dhaXRfZm9yX2Rpc2Moc2ssIFJFQURfT05DRShzay1cdTAwM2Vza19yY3Z0aW1lbykpO1xuJiM0MztcdGxpc3RlbmVyID0gc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTjtcbiYjNDM7XHRpZiAobGlzdGVuZXIpXG4mIzQzO1x0XHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xuIFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkge1xuIFx0XHRzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLVx1MDAzZXNhcDtcbiBcbkBAIC0yMTQsMTYgJiM0MzsyMTgsMTggQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0XHQgKi9cbiBcdFx0bGxjX3NhcF9ob2xkKHNhcCk7XG4gXHRcdGxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtXHUwMDNlc2FwLCBzayk7XG4mIzQzO1x0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzayk7XG4gXHRcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRcdGxsY19zYXBfcHV0KHNhcCk7XG4gXHR9IGVsc2Uge1xuJiM0MztcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0fVxuIFx0bmV0ZGV2X3B1dChsbGMtXHUwMDNlZGV2LCBcdTAwMjZsbGMtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIFx0c29ja19wdXQoc2spO1xuIFx0c29ja19vcnBoYW4oc2spO1xuIFx0c29jay1cdTAwM2VzayA9IE5VTEw7XG4tXHRsbGNfc2tfZnJlZShzayk7XG4mIzQzO1x0bGxjX3NrX2ZyZWUoc2ssIHRydWUpO1xuIG91dDpcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03MjIsNiAmIzQzOzcyOCw3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFx0XHRnb3RvIGZyZWVzO1xuIFx0cmMgPSAwO1xuIFx0bmV3c2sgPSBza2ItXHUwMDNlc2s7XG4mIzQzO1x0bGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbiBcdC8qIGF0dGFjaCBjb25uZWN0aW9uIHRvIGEgbmV3IHNvY2tldC4gKi9cbiBcdGxsY191aV9za19pbml0KG5ld3NvY2ssIG5ld3NrKTtcbiBcdHNvY2tfcmVzZXRfZmxhZyhuZXdzaywgU09DS19aQVBQRUQpO1xuZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2Nvbm4uYyBiL25ldC9sbGMvbGxjX2Nvbm4uY1xuaW5kZXggMjYwNDYwZDUwZjU0Yy4uNDI3MmNlNGQ0YTFjYSAxMDA2NDRcbi0tLSBhL25ldC9sbGMvbGxjX2Nvbm4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2xsYy9sbGNfY29ubi5jXG5AQCAtMzIsNiAmIzQzOzMyLDcgQEAgc3RhdGljIGludCBsbGNfZXhlY19jb25uX3RyYW5zX2FjdGlvbnMoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpldik7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyAqbGxjX3F1YWxpZnlfY29ubl9ldihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjNDM7c3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIFxuIC8qIE9mZnNldCB0YWJsZSBvbiBjb25uZWN0aW9uIHN0YXRlcyB0cmFuc2l0aW9uIGRpYWdyYW0gKi9cbiBzdGF0aWMgaW50IGxsY19vZmZzZXRfdGFibGVbTkJSX0NPTk5fU1RBVEVTXVtOQlJfQ09OTl9FVl07XG5AQCAtODgsNiAmIzQzOzg5LDExIEBAIGludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0ICogc2tiLVx1MDAzZXNrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluXG4gXHRcdCAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lXG4gXHRcdCAqL1xuJiM0MztcdFx0aWYgKHNrICE9IHNrYi1cdTAwM2VzayBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbiYjNDM7XHRcdFx0YXRvbWljX3NldChcdTAwMjZsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSxcbiYjNDM7XHRcdFx0XHQgICBMTENfSU5DT01JTkdfUVVFVUVEKTtcbiBcdFx0c2tiX2dldChza2IpO1xuIFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLCBza2IpO1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuQEAgLTM1NCw3ICYjNDM7MzYwLDggQEAgc3RhdGljIGludCBsbGNfY29ubl9zZXJ2aWNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiBcdGludCByYyA9IDE7XG4gXG4tXHRpZiAobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSBOQlJfQ09OTl9TVEFURVMpXG4mIzQzO1x0aWYgKGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNIHx8XG4mIzQzO1x0ICAgIGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgTkJSX0NPTk5fU1RBVEVTKVxuIFx0XHRnb3RvIG91dDtcbiBcdHJjID0gMDtcbiBcdHRyYW5zID0gbGxjX3F1YWxpZnlfY29ubl9ldihzaywgc2tiKTtcbkBAIC03NjUsMjcgJiM0Mzs3NzIsMTUzIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayxcbiBcdG1lbWNweShcdTAwMjZuZXdsbGMtXHUwMDNlbGFkZHIsIGRhZGRyLCBzaXplb2YobmV3bGxjLVx1MDAzZWxhZGRyKSk7XG4gXHRtZW1jcHkoXHUwMDI2bmV3bGxjLVx1MDAzZWRhZGRyLCBzYWRkciwgc2l6ZW9mKG5ld2xsYy1cdTAwM2VkYWRkcikpO1xuIFx0bmV3bGxjLVx1MDAzZWRldiA9IGRldjtcbiYjNDM7XHRuZXdsbGMtXHUwMDNlaW5jb21pbmdfbGlzdGVuZXIgPSBzaztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNm5ld2xsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1BFTkRJTkcpO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZuZXdsbGMtXHUwMDNlaW5jb21pbmdfd29yaywgbGxjX2luY29taW5nX3NvY2tfd29yayk7XG4mIzQzO1x0c29ja19ob2xkKHNrKTtcbiBcdGRldl9ob2xkKGRldik7XG4gXHRsbGNfc2FwX2FkZF9zb2NrZXQobGxjLVx1MDAzZXNhcCwgbmV3c2spO1xuIG91dDpcbiBcdHJldHVybiBuZXdzaztcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxsY19zb2NrICpsbGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxsY19zb2NrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgaW5jb21pbmdfd29yayk7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2bGxjLVx1MDAzZXNrO1xuJiM0MztcdHN0cnVjdCBzb2NrICpsaXN0ZW5lciA9IGxsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcjtcbiYjNDM7XG4mIzQzO1x0bG9ja19zb2NrKGxpc3RlbmVyKTtcbiYjNDM7XHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4mIzQzO1x0bGxjX3NrX2ZyZWUoc2ssIGZhbHNlKTtcbiYjNDM7XHRzb2NrX29ycGhhbihzayk7XG4mIzQzO1x0cmVsZWFzZV9zb2NrKHNrKTtcbiYjNDM7XHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTtcbiYjNDM7XHRyZWxlYXNlX3NvY2sobGlzdGVuZXIpO1xuJiM0MztcdGRldl9wdXQobGxjLVx1MDAzZWRldik7XG4mIzQzO1x0bGxjLVx1MDAzZWRldiA9IE5VTEw7XG4mIzQzO1x0c29ja19wdXQoc2spO1xuJiM0MztcdHNvY2tfcHV0KGxpc3RlbmVyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGF0b21pY194Y2hnKFx1MDAyNmxsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX05PTkUpID09XG4mIzQzO1x0ICAgIExMQ19JTkNPTUlOR19OT05FKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKGxsYy1cdTAwM2VzdGF0ZSwgTExDX0NPTk5fT1VUX09GX1NWQyk7XG4mIzQzO1x0c29ja19ob2xkKHNrKTtcbiYjNDM7XHRsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLVx1MDAzZXNhcCwgc2spO1xuJiM0MztcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bGxjLVx1MDAzZWluY29taW5nX3dvcmspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGxsY19hY2NlcHRfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4mIzQzO1xuJiM0MztcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZsbGMtXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19OT05FKSAhPVxuJiM0MztcdCAgICBMTENfSU5DT01JTkdfTk9ORSlcbiYjNDM7XHRcdHNvY2tfcHV0KGxsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza2ItXHUwMDNlc2s7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5ld3NrIFx1MDAyNlx1MDAyNiBuZXdzayAhPSBzaykge1xuJiM0MztcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbiYjNDM7XHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4mIzQzO1x0XHRcdCAgICBMTENfSU5DT01JTkdfTk9ORSlcbiYjNDM7XHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0fVxuJiM0MztcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGlzIG1pcnJvcnMgdGhlIEFETS1zdGF0ZSBETSBhY3Rpb25zLCBidXQgYSBsaXN0ZW5lciBoYXMgbm8gcGVlclxuJiM0MzsgKiBhZGRyZXNzIGluIGxsYy1cdTAwM2VkYWRkciB5ZXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpuc2tiO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG4mIzQzO1x0aWYgKCFuc2tiKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbiYjNDM7XHRcdFx0ICAgIHNhZGRyLVx1MDAzZWxzYXAsIExMQ19QRFVfUlNQKTtcbiYjNDM7XHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcbiYjNDM7XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgc2FkZHItXHUwMDNlbWFjKTtcbiYjNDM7XHRpZiAodW5saWtlbHkocmMpKVxuJiM0MztcdFx0a2ZyZWVfc2tiKG5za2IpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGRldl9xdWV1ZV94bWl0KG5za2IpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBsbGNfYWRkciBzYWRkciwgZGFkZHI7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrLCAqbmV3c2sgPSBOVUxMO1xuJiM0MztcdGJvb2wgbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuJiM0MztcdGJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7XG4gXG4gXHRsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgXHUwMDI2c2FkZHIubHNhcCk7XG4gXHRsbGNfcGR1X2RlY29kZV9kYShza2IsIGRhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgXHUwMDI2ZGFkZHIubHNhcCk7XG4gXG4mIzQzO2xvb2t1cDpcbiBcdHNrID0gX19sbGNfbG9va3VwKHNhcCwgXHUwMDI2c2FkZHIsIFx1MDAyNmRhZGRyLCBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpKTtcbiBcdGlmICghc2spXG4gXHRcdGdvdG8gZHJvcDtcbiBcbiYjNDM7XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKHNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbiYjNDM7XHRcdG5ld3NrID0gc2s7XG4mIzQzO1x0XHRiaF9sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4mIzQzO1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbiYjNDM7XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRzb2NrX3B1dChuZXdzayk7XG4mIzQzO1x0XHRcdG5ld3NrID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBsb29rdXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzayA9IGxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfbGlzdGVuZXI7XG4mIzQzO1x0XHRzb2NrX2hvbGQoc2spO1xuJiM0MztcdFx0bmV3c2tfbG9va3VwX3JlZiA9IHRydWU7XG4mIzQzO1x0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGJoX2xvY2tfc29jayhzayk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpXG4mIzQzO1x0XHRnb3RvIGRyb3BfdW5sb2NrO1xuJiM0MztcdGlmIChuZXdza19sb29rdXBfcmVmKSB7XG4mIzQzO1x0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbiYjNDM7XHRcdG5ld3NrX2xvY2tlZCA9IHRydWU7XG4mIzQzO1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbiYjNDM7XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbiYjNDM7XHRcdFx0Z290byByZXRyeV91bmxvY2s7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuJiM0MztcdFx0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpIHtcbiYjNDM7XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFx0LypcbiBcdCAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGF0IHRoZSB1cHBlciBsYXllciAtXHUwMDNlYWNjZXB0XG4gXHQgKiBtZXRob2QgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBQUk9DT00gc3RhdGUgbWFjaGluZSB3b3JrczpcbkBAIC03OTUsMTAgJiM0Mzs5MjgsMjUgQEAgdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHQgKiBpbiB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBwcml2YXRlIGFyZWEuIC1hY21lXG4gXHQgKi9cbiBcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSkge1xuLVx0XHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi1cdTAwM2VkZXYsXG4tXHRcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZzYWRkciwgXHUwMDI2ZGFkZHIpO1xuLVx0XHRpZiAoIW5ld3NrKVxuLVx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0XHRpZiAoIW5ld3NrKSB7XG4mIzQzO1x0XHRcdGlmIChsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xuJiM0MztcdFx0XHRcdGlmICghbGxjX2Nvbm5fZXZfcnhfZGlzY19jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xuJiM0MztcdFx0XHRcdFx0dTggZl9iaXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRcdFx0bGxjX3BkdV9kZWNvZGVfcGZfYml0KHNrYiwgXHUwMDI2Zl9iaXQpO1xuJiM0MztcdFx0XHRcdFx0bGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsIFx1MDAyNnNhZGRyLCBmX2JpdCk7XG4mIzQzO1x0XHRcdFx0fSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7XG4mIzQzO1x0XHRcdFx0XHRsbGNfY29ubl9zZW5kX2RtX3JzcChzYXAsIHNrYiwgXHUwMDI2c2FkZHIsIDEpO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdG5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItXHUwMDNlZGV2LCBcdTAwMjZzYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgXHUwMDI2ZGFkZHIpO1xuJiM0MztcdFx0XHRpZiAoIW5ld3NrKVxuJiM0MztcdFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuJiM0MztcdFx0XHRuZXdza19sb2NrZWQgPSB0cnVlO1xuJiM0MztcdFx0fVxuIFx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuQEAgLTgxMywxOCAmIzQzOzk2MSw0NiBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZXNrID0gc2s7XG4gXHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0gc29ja19lZnJlZTtcbiBcdH1cbi1cdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSlcbiYjNDM7XHRpZiAodW5saWtlbHkobGxjX3NrKHNrYi1cdTAwM2VzayktXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkpIHtcbiYjNDM7XHRcdGlmIChuZXdzaylcbiYjNDM7XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRlbHNlIGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2soc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxuJiM0MztcdFx0XHQgTExDX0lOQ09NSU5HX05PTkUpXG4mIzQzO1x0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spO1xuJiM0MztcdFx0Z290byBkcm9wX3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7XG4gXHRcdGxsY19jb25uX3Jjdihzaywgc2tiKTtcbi1cdGVsc2Uge1xuJiM0MztcdFx0aWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4mIzQzO1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4mIzQzO1x0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdGRwcmludGsoXCYjMzQ7JXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGxsY19zZXRfYmFja2xvZ190eXBlKHNrYiwgTExDX1BBQ0tFVCk7XG4tXHRcdGlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKSkpXG4mIzQzO1x0XHRpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpKSB7XG4mIzQzO1x0XHRcdGlmIChuZXdzaylcbiYjNDM7XHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbiBcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuJiM0MztcdFx0fVxuIFx0fVxuIG91dDpcbiYjNDM7XHRpZiAobmV3c2tfbG9ja2VkKVxuJiM0MztcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuIFx0YmhfdW5sb2NrX3NvY2soc2spO1xuIFx0c29ja19wdXQoc2spO1xuJiM0MztcdGlmIChuZXdza19sb29rdXBfcmVmKVxuJiM0MztcdFx0c29ja19wdXQobmV3c2spO1xuIFx0cmV0dXJuO1xuJiM0MztyZXRyeV91bmxvY2s6XG4mIzQzO1x0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdG5ld3NrX2xvY2tlZCA9IGZhbHNlO1xuJiM0MztcdGJoX3VubG9ja19zb2NrKHNrKTtcbiYjNDM7XHRzb2NrX3B1dChzayk7XG4mIzQzO1x0c29ja19wdXQobmV3c2spO1xuJiM0MztcdG5ld3NrID0gTlVMTDtcbiYjNDM7XHRuZXdza19sb29rdXBfcmVmID0gZmFsc2U7XG4mIzQzO1x0Z290byBsb29rdXA7XG4gZHJvcDpcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuO1xuQEAgLTg1MiwxMiAmIzQzOzEwMjgsNTMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdGludCByYyA9IDA7XG4gXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4mIzQzO1x0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVx1MDAzZXNrO1xuIFxuIFx0aWYgKGxpa2VseShsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX1BBQ0tFVCkpIHtcbi1cdFx0aWYgKGxpa2VseShsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIDEpKSAvKiBub3QgY2xvc2VkICovXG4mIzQzO1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuJiM0MztcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4mIzQzO1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuJiM0MztcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbiYjNDM7XHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4mIzQzO1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fFxuJiM0MztcdFx0XHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuJiM0MztcdFx0XHQgICAgbGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XG4mIzQzO1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpO1xuLVx0XHRlbHNlXG4mIzQzO1x0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuJiM0MztcdFx0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4mIzQzO1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuJiM0MztcdFx0XHQgICBMTENfSU5DT01JTkdfUVVFVUVEKSB7XG4mIzQzO1x0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4mIzQzO1x0XHRcdGlmIChsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzYz0gTExDX0NPTk5fU1RBVEVfQURNKSB7XG4mIzQzO1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTtcbiYjNDM7XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpIHtcbiYjNDM7XHRcdFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdH1cbiBcdH0gZWxzZSBpZiAobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19FVkVOVCkge1xuIFx0XHQvKiB0aW1lciBleHBpcmF0aW9uIGV2ZW50ICovXG4gXHRcdGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkgIC8qIG5vdCBjbG9zZWQgKi9cbkBAIC04NzAsNiAmIzQzOzEwODcsMjQgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIG91dDpcbiBcdHJldHVybiByYztcbiYjNDM7cmV0cnk6XG4mIzQzO1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4mIzQzO1x0ICAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcbiYjNDM7XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuJiM0MztcdFx0aWYgKGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNlIExMQ19DT05OX1NUQVRFX0FETSlcbiYjNDM7XHRcdFx0cmMgPSBsbGNfY29ubl9yY3YobmV3c2ssIHNrYik7XG4mIzQzO1x0XHRlbHNlIHtcbiYjNDM7XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiBvdXRfa2ZyZWVfc2tiOlxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRnb3RvIG91dDtcbkBAIC05NTksMTcgJiM0MzsxMTk0LDE4IEBAIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYylcbiBcbiAvKipcbiAgKlx0bGxjX3NrX2ZyZWUgLSBGcmVlcyBhIExMQyBzb2NrZXRcbi0gKlx0QHNrOiAtIHNvY2tldCB0byBmcmVlXG4mIzQzOyAqXHRAc2s6IHNvY2tldCB0byBmcmVlXG4mIzQzOyAqXHRAc3luYzogd2hldGhlciB0byBzeW5jaHJvbm91c2x5IHN0b3AgdGltZXJzXG4gICpcbi0gKlx0RnJlZXMgYSBMTEMgc29ja2V0XG4mIzQzOyAqXHRGcmVlcyBhIExMQyBzb2NrZXQuXG4gICovXG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXG4ge1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuIFxuIFx0bGxjLVx1MDAzZXN0YXRlID0gTExDX0NPTk5fT1VUX09GX1NWQztcbiBcdC8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi9cbi1cdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpO1xuJiM0MztcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHN5bmMpO1xuICNpZmRlZiBERUJVR19MTENfQ09OTl9BTExPQ1xuIFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDslczogdW5hY2txPSVkLCB0eHE9JWRcXG5cJiMzNDssIF9fZnVuY19fLFxuIFx0XHRza2JfcXVldWVfbGVuKFx1MDAyNmxsYy1cdTAwM2VwZHVfdW5hY2tfcSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMTEMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGxjX2Nvbm5faGFuZGxlciYjMzQ7LAogICAgJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrJiMzNDssCiAgICAmIzM0O2xsY19hY2NlcHRfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbiYjMzQ7LAogICAgJiMzNDtsbGNfc2tfZnJlZSYjMzQ7LAogICAgJiMzNDtsbGNfY29ubl9zdGF0ZV9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYyBvZiB0aGUgTExDIHByb3RvY29sLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTg4Njc5MmYzYjJjYTA0MzYwOTg0ZmU3MTQwY2FlZGQ1NzA3YjFmOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDA4OjQ3OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaCBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmgKaW5kZXggZTFhMzAyNjk2NzIzNC4uOWFjZGEwYTZmMDY5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oCkBAIC02LDYgJiM0Mzs2LDcgQEAKICAqIAkJIDIwMDEsIDIwMDIgYnkgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvICZsdDthY21lQGNvbmVjdGl2YS5jb20uYnImZ3Q7CiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC90aW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbGxjX2lmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sbGMuaCZndDsKQEAgLTEzLDYgJiM0MzsxNCwxMCBAQAogI2RlZmluZSBMTENfRVZFTlQgICAgICAgICAgICAgICAgMQogI2RlZmluZSBMTENfUEFDS0VUICAgICAgICAgICAgICAgMgogCiYjNDM7I2RlZmluZSBMTENfSU5DT01JTkdfTk9ORSAgICAgICAgMAomIzQzOyNkZWZpbmUgTExDX0lOQ09NSU5HX1BFTkRJTkcgICAgIDEKJiM0MzsjZGVmaW5lIExMQ19JTkNPTUlOR19RVUVVRUQgICAgICAyCiYjNDM7CiAjZGVmaW5lIExMQzJfUF9USU1FICAgICAgICAgICAgICAgMgogI2RlZmluZSBMTEMyX0FDS19USU1FICAgICAgICAgICAgIDEKICNkZWZpbmUgTExDMl9SRUpfVElNRSAgICAgICAgICAgICAzCkBAIC03Miw2ICYjNDM7NzcsOSBAQCBzdHJ1Y3QgbGxjX3NvY2sgewogCQkJCQkgICAgICByZWNlaXZlZCBhbmQgY2F1c2VkIHNlbmRpbmcgRlJNUi4KIAkJCQkJICAgICAgVXNlZCBmb3IgcmVzZW5kaW5nIEZSTVIgKi8KIAl1MzIJCSAgICBjbXNnX2ZsYWdzOwomIzQzOwlhdG9taWNfdAkgICAgaW5jb21pbmdfc3RhdGU7CiYjNDM7CXN0cnVjdCBzb2NrCSAgICAqaW5jb21pbmdfbGlzdGVuZXI7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCBpbmNvbWluZ193b3JrOwogCXN0cnVjdCBobGlzdF9ub2RlICAgZGV2X2hhc2hfbm9kZTsKIH07CiAKQEAgLTkzLDcgJiM0MzsxMDEsMTAgQEAgc3RhdGljIF9faW5saW5lX18gY2hhciBsbGNfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IpCiBzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksCiAJCQkgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pOwogdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTsKLXZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKTsKJiM0Mzt2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTsKJiM0Mzt2b2lkIGxsY19hY2NlcHRfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spOwomIzQzO3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKTsKIAogdm9pZCBsbGNfc2tfcmVzZXQoc3RydWN0IHNvY2sgKnNrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmMKaW5kZXggYjA0NDdjMzNkYmYwOS4uN2QyNDZkNGQyODFiYiAxMDA2NDQKLS0tIGEvbmV0L2xsYy9hZl9sbGMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbGxjL2FmX2xsYy5jCkBAIC0xOTYsNiAmIzQzOzE5Niw3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLSZndDtzazsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYzsKJiM0MzsJYm9vbCBsaXN0ZW5lcjsKIAogCWlmICh1bmxpa2VseShzayA9PSBOVUxMKSkKIAkJZ290byBvdXQ7CkBAIC0yMDYsNiAmIzQzOzIwNyw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIAkJbGxjLSZndDtsYWRkci5sc2FwLCBsbGMtJmd0O2RhZGRyLmxzYXApOwogCWlmICghbGxjX3NlbmRfZGlzYyhzaykpCiAJCWxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdnRpbWVvKSk7CiYjNDM7CWxpc3RlbmVyID0gc2stJmd0O3NrX3N0YXRlID09IFRDUF9MSVNURU47CiYjNDM7CWlmIChsaXN0ZW5lcikKJiM0MzsJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7CiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkgewogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLSZndDtzYXA7CiAKQEAgLTIxNCwxNiAmIzQzOzIxOCwxOCBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAJCSAqLwogCQlsbGNfc2FwX2hvbGQoc2FwKTsKIAkJbGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy0mZ3Q7c2FwLCBzayk7CiYjNDM7CQlsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzayk7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCWxsY19zYXBfcHV0KHNhcCk7CiAJfSBlbHNlIHsKJiM0MzsJCWxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAl9CiAJbmV0ZGV2X3B1dChsbGMtJmd0O2RldiwgJmFtcDtsbGMtJmd0O2Rldl90cmFja2VyKTsKIAlzb2NrX3B1dChzayk7CiAJc29ja19vcnBoYW4oc2spOwogCXNvY2stJmd0O3NrID0gTlVMTDsKLQlsbGNfc2tfZnJlZShzayk7CiYjNDM7CWxsY19za19mcmVlKHNrLCB0cnVlKTsKIG91dDoKIAlyZXR1cm4gMDsKIH0KQEAgLTcyMiw2ICYjNDM7NzI4LDcgQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAJCWdvdG8gZnJlZXM7CiAJcmMgPSAwOwogCW5ld3NrID0gc2tiLSZndDtzazsKJiM0MzsJbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKTsKIAkvKiBhdHRhY2ggY29ubmVjdGlvbiB0byBhIG5ldyBzb2NrZXQuICovCiAJbGxjX3VpX3NrX2luaXQobmV3c29jaywgbmV3c2spOwogCXNvY2tfcmVzZXRfZmxhZyhuZXdzaywgU09DS19aQVBQRUQpOwpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jCmluZGV4IDI2MDQ2MGQ1MGY1NGMuLjQyNzJjZTRkNGExY2EgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2Nvbm4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbGxjL2xsY19jb25uLmMKQEAgLTMyLDYgJiM0MzszMiw3IEBAIHN0YXRpYyBpbnQgbGxjX2V4ZWNfY29ubl90cmFuc19hY3Rpb25zKHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKmV2KTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgKmxsY19xdWFsaWZ5X2Nvbm5fZXYoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogLyogT2Zmc2V0IHRhYmxlIG9uIGNvbm5lY3Rpb24gc3RhdGVzIHRyYW5zaXRpb24gZGlhZ3JhbSAqLwogc3RhdGljIGludCBsbGNfb2Zmc2V0X3RhYmxlW05CUl9DT05OX1NUQVRFU11bTkJSX0NPTk5fRVZdOwpAQCAtODgsNiAmIzQzOzg5LDExIEBAIGludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJICogc2tiLSZndDtzayBwb2ludGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBpbgogCQkgKiBsbGNfY29ubl9oYW5kbGVyLiAtYWNtZQogCQkgKi8KJiM0MzsJCWlmIChzayAhPSBza2ItJmd0O3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhza2ItJmd0O3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpCiYjNDM7CQkJYXRvbWljX3NldCgmYW1wO2xsY19zayhza2ItJmd0O3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUsCiYjNDM7CQkJCSAgIExMQ19JTkNPTUlOR19RVUVVRUQpOwogCQlza2JfZ2V0KHNrYik7CiAJCXNrYl9xdWV1ZV90YWlsKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUsIHNrYik7CiAJCXNrLSZndDtza19zdGF0ZV9jaGFuZ2Uoc2spOwpAQCAtMzU0LDcgJiM0MzszNjAsOCBAQCBzdGF0aWMgaW50IGxsY19jb25uX3NlcnZpY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAlpbnQgcmMgPSAxOwogCi0JaWYgKGxsYy0mZ3Q7c3RhdGUgJmd0OyBOQlJfQ09OTl9TVEFURVMpCiYjNDM7CWlmIChsbGMtJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNIHx8CiYjNDM7CSAgICBsbGMtJmd0O3N0YXRlICZndDsgTkJSX0NPTk5fU1RBVEVTKQogCQlnb3RvIG91dDsKIAlyYyA9IDA7CiAJdHJhbnMgPSBsbGNfcXVhbGlmeV9jb25uX2V2KHNrLCBza2IpOwpAQCAtNzY1LDI3ICYjNDM7NzcyLDE1MyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKmxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2ssCiAJbWVtY3B5KCZhbXA7bmV3bGxjLSZndDtsYWRkciwgZGFkZHIsIHNpemVvZihuZXdsbGMtJmd0O2xhZGRyKSk7CiAJbWVtY3B5KCZhbXA7bmV3bGxjLSZndDtkYWRkciwgc2FkZHIsIHNpemVvZihuZXdsbGMtJmd0O2RhZGRyKSk7CiAJbmV3bGxjLSZndDtkZXYgPSBkZXY7CiYjNDM7CW5ld2xsYy0mZ3Q7aW5jb21pbmdfbGlzdGVuZXIgPSBzazsKJiM0MzsJYXRvbWljX3NldCgmYW1wO25ld2xsYy0mZ3Q7aW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19QRU5ESU5HKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bmV3bGxjLSZndDtpbmNvbWluZ193b3JrLCBsbGNfaW5jb21pbmdfc29ja193b3JrKTsKJiM0MzsJc29ja19ob2xkKHNrKTsKIAlkZXZfaG9sZChkZXYpOwogCWxsY19zYXBfYWRkX3NvY2tldChsbGMtJmd0O3NhcCwgbmV3c2spOwogb3V0OgogCXJldHVybiBuZXdzazsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxsY19zb2NrLAomIzQzOwkJCQkJCSAgICBpbmNvbWluZ193b3JrKTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtsbGMtJmd0O3NrOwomIzQzOwlzdHJ1Y3Qgc29jayAqbGlzdGVuZXIgPSBsbGMtJmd0O2luY29taW5nX2xpc3RlbmVyOwomIzQzOwomIzQzOwlsb2NrX3NvY2sobGlzdGVuZXIpOwomIzQzOwlsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiYjNDM7CWxsY19za19mcmVlKHNrLCBmYWxzZSk7CiYjNDM7CXNvY2tfb3JwaGFuKHNrKTsKJiM0MzsJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7CiYjNDM7CXJlbGVhc2Vfc29jayhsaXN0ZW5lcik7CiYjNDM7CWRldl9wdXQobGxjLSZndDtkZXYpOwomIzQzOwlsbGMtJmd0O2RldiA9IE5VTEw7CiYjNDM7CXNvY2tfcHV0KHNrKTsKJiM0MzsJc29ja19wdXQobGlzdGVuZXIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwomIzQzOwomIzQzOwlpZiAoYXRvbWljX3hjaGcoJmFtcDtsbGMtJmd0O2luY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgPT0KJiM0MzsJICAgIExMQ19JTkNPTUlOR19OT05FKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGxsYy0mZ3Q7c3RhdGUsIExMQ19DT05OX09VVF9PRl9TVkMpOwomIzQzOwlzb2NrX2hvbGQoc2spOwomIzQzOwlsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLSZndDtzYXAsIHNrKTsKJiM0MzsJc2NoZWR1bGVfd29yaygmYW1wO2xsYy0mZ3Q7aW5jb21pbmdfd29yayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKJiM0MzsKJiM0MzsJaWYgKGF0b21pY194Y2hnKCZhbXA7bGxjLSZndDtpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX05PTkUpICE9CiYjNDM7CSAgICBMTENfSU5DT01JTkdfTk9ORSkKJiM0MzsJCXNvY2tfcHV0KGxsYy0mZ3Q7aW5jb21pbmdfbGlzdGVuZXIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSkpIHsKJiM0MzsJCXN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi0mZ3Q7c2s7CiYjNDM7CiYjNDM7CQlpZiAobmV3c2sgJmFtcDsmYW1wOyBuZXdzayAhPSBzaykgewomIzQzOwkJCWJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spOwomIzQzOwkJCWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJCSAgICBMTENfSU5DT01JTkdfTk9ORSkKJiM0MzsJCQkJbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7CiYjNDM7CQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJfQomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CX0KJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhpcyBtaXJyb3JzIHRoZSBBRE0tc3RhdGUgRE0gYWN0aW9ucywgYnV0IGEgbGlzdGVuZXIgaGFzIG5vIHBlZXIKJiM0MzsgKiBhZGRyZXNzIGluIGxsYy0mZ3Q7ZGFkZHIgeWV0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGxsY19jb25uX3NlbmRfZG1fcnNwKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpuc2tiOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CW5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLSZndDtkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTsKJiM0MzsJaWYgKCFuc2tiKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtJmd0O2xhZGRyLmxzYXAsCiYjNDM7CQkJICAgIHNhZGRyLSZndDtsc2FwLCBMTENfUERVX1JTUCk7CiYjNDM7CWxsY19wZHVfaW5pdF9hc19kbV9yc3AobnNrYiwgZl9iaXQpOwomIzQzOwlyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLSZndDtkZXYtJmd0O2Rldl9hZGRyLCBzYWRkci0mZ3Q7bWFjKTsKJiM0MzsJaWYgKHVubGlrZWx5KHJjKSkKJiM0MzsJCWtmcmVlX3NrYihuc2tiKTsKJiM0MzsJZWxzZQomIzQzOwkJZGV2X3F1ZXVlX3htaXQobnNrYik7CiYjNDM7fQomIzQzOwogdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGxsY19hZGRyIHNhZGRyLCBkYWRkcjsKLQlzdHJ1Y3Qgc29jayAqc2s7CiYjNDM7CXN0cnVjdCBzb2NrICpzaywgKm5ld3NrID0gTlVMTDsKJiM0MzsJYm9vbCBuZXdza19sb29rdXBfcmVmID0gZmFsc2U7CiYjNDM7CWJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7CiAKIAlsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7CiAJbGxjX3BkdV9kZWNvZGVfc3NhcChza2IsICZhbXA7c2FkZHIubHNhcCk7CiAJbGxjX3BkdV9kZWNvZGVfZGEoc2tiLCBkYWRkci5tYWMpOwogCWxsY19wZHVfZGVjb2RlX2RzYXAoc2tiLCAmYW1wO2RhZGRyLmxzYXApOwogCiYjNDM7bG9va3VwOgogCXNrID0gX19sbGNfbG9va3VwKHNhcCwgJmFtcDtzYWRkciwgJmFtcDtkYWRkciwgZGV2X25ldChza2ItJmd0O2RldikpOwogCWlmICghc2spCiAJCWdvdG8gZHJvcDsKIAomIzQzOwlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2soc2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7CiYjNDM7CQluZXdzayA9IHNrOwomIzQzOwkJYmhfbG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7CiYjNDM7CQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCXNvY2tfcHV0KG5ld3NrKTsKJiM0MzsJCQluZXdzayA9IE5VTEw7CiYjNDM7CQkJZ290byBsb29rdXA7CiYjNDM7CQl9CiYjNDM7CQlzayA9IGxsY19zayhuZXdzayktJmd0O2luY29taW5nX2xpc3RlbmVyOwomIzQzOwkJc29ja19ob2xkKHNrKTsKJiM0MzsJCW5ld3NrX2xvb2t1cF9yZWYgPSB0cnVlOwomIzQzOwkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwl9CiYjNDM7CiAJYmhfbG9ja19zb2NrKHNrKTsKJiM0MzsJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfTElTVEVOICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSkKJiM0MzsJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CWlmIChuZXdza19sb29rdXBfcmVmKSB7CiYjNDM7CQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCW5ld3NrX2xvY2tlZCA9IHRydWU7CiYjNDM7CQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgIT0KJiM0MzsJCSAgICBMTENfSU5DT01JTkdfUEVORElORykKJiM0MzsJCQlnb3RvIHJldHJ5X3VubG9jazsKJiM0MzsJCWlmICh1bmxpa2VseShzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fAomIzQzOwkJCSAgICAgc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSkgewomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CX0KIAkvKgogCSAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGF0IHRoZSB1cHBlciBsYXllciAtJmd0O2FjY2VwdAogCSAqIG1ldGhvZCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIFBST0NPTSBzdGF0ZSBtYWNoaW5lIHdvcmtzOgpAQCAtNzk1LDEwICYjNDM7OTI4LDI1IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCSAqIGluIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIHByaXZhdGUgYXJlYS4gLWFjbWUKIAkgKi8KIAlpZiAodW5saWtlbHkoc2stJmd0O3NrX3N0YXRlID09IFRDUF9MSVNURU4pKSB7Ci0JCXN0cnVjdCBzb2NrICpuZXdzayA9IGxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzaywgc2tiLSZndDtkZXYsCi0JCQkJCQkJICAgICAgJmFtcDtzYWRkciwgJmFtcDtkYWRkcik7Ci0JCWlmICghbmV3c2spCi0JCQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwkJaWYgKCFuZXdzaykgewomIzQzOwkJCWlmIChsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkgewomIzQzOwkJCQlpZiAoIWxsY19jb25uX2V2X3J4X2Rpc2NfY21kX3BiaXRfc2V0X3goc2ssIHNrYikpIHsKJiM0MzsJCQkJCXU4IGZfYml0OwomIzQzOwomIzQzOwkJCQkJbGxjX3BkdV9kZWNvZGVfcGZfYml0KHNrYiwgJmFtcDtmX2JpdCk7CiYjNDM7CQkJCQlsbGNfY29ubl9zZW5kX2RtX3JzcChzYXAsIHNrYiwgJmFtcDtzYWRkciwgZl9iaXQpOwomIzQzOwkJCQl9IGVsc2UgaWYgKCFsbGNfY29ubl9ldl9yeF94eHhfY21kX3BiaXRfc2V0XzEoc2ssIHNrYikpIHsKJiM0MzsJCQkJCWxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCAmYW1wO3NhZGRyLCAxKTsKJiM0MzsJCQkJfQomIzQzOwkJCQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwkJCX0KJiM0MzsJCQluZXdzayA9IGxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzaywgc2tiLSZndDtkZXYsICZhbXA7c2FkZHIsCiYjNDM7CQkJCQkJCSAmYW1wO2RhZGRyKTsKJiM0MzsJCQlpZiAoIW5ld3NrKQomIzQzOwkJCQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwkJCWJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spOwomIzQzOwkJCW5ld3NrX2xvY2tlZCA9IHRydWU7CiYjNDM7CQl9CiAJCXNrYl9zZXRfb3duZXJfcihza2IsIG5ld3NrKTsKIAl9IGVsc2UgewogCQkvKgpAQCAtODEzLDE4ICYjNDM7OTYxLDQ2IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlza2ItJmd0O3NrID0gc2s7CiAJCXNrYi0mZ3Q7ZGVzdHJ1Y3RvciA9IHNvY2tfZWZyZWU7CiAJfQotCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkKJiM0MzsJaWYgKHVubGlrZWx5KGxsY19zayhza2ItJmd0O3NrKS0mZ3Q7c3RhdGUgJmx0OyBMTENfQ09OTl9TVEFURV9BRE0pKSB7CiYjNDM7CQlpZiAobmV3c2spCiYjNDM7CQkJbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7CiYjNDM7CQllbHNlIGlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJCSBMTENfSU5DT01JTkdfTk9ORSkKJiM0MzsJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHNrKTsKJiM0MzsJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CX0KJiM0MzsJaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7CiAJCWxsY19jb25uX3Jjdihzaywgc2tiKTsKLQllbHNlIHsKJiM0MzsJCWlmIChuZXdzayAmYW1wOyZhbXA7CiYjNDM7CQkgICAgYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCSAgICBMTENfSU5DT01JTkdfUEVORElORykKJiM0MzsJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJfSBlbHNlIHsKIAkJZHByaW50aygmIzM0OyVzOiBhZGRpbmcgdG8gYmFja2xvZy4uLlxuJiMzNDssIF9fZnVuY19fKTsKIAkJbGxjX3NldF9iYWNrbG9nX3R5cGUoc2tiLCBMTENfUEFDS0VUKTsKLQkJaWYgKHNrX2FkZF9iYWNrbG9nKHNrLCBza2IsIFJFQURfT05DRShzay0mZ3Q7c2tfcmN2YnVmKSkpCiYjNDM7CQlpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpKSkgewomIzQzOwkJCWlmIChuZXdzaykKJiM0MzsJCQkJbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7CiAJCQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwkJfQogCX0KIG91dDoKJiM0MzsJaWYgKG5ld3NrX2xvY2tlZCkKJiM0MzsJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKIAliaF91bmxvY2tfc29jayhzayk7CiAJc29ja19wdXQoc2spOwomIzQzOwlpZiAobmV3c2tfbG9va3VwX3JlZikKJiM0MzsJCXNvY2tfcHV0KG5ld3NrKTsKIAlyZXR1cm47CiYjNDM7cmV0cnlfdW5sb2NrOgomIzQzOwliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CW5ld3NrX2xvY2tlZCA9IGZhbHNlOwomIzQzOwliaF91bmxvY2tfc29jayhzayk7CiYjNDM7CXNvY2tfcHV0KHNrKTsKJiM0MzsJc29ja19wdXQobmV3c2spOwomIzQzOwluZXdzayA9IE5VTEw7CiYjNDM7CW5ld3NrX2xvb2t1cF9yZWYgPSBmYWxzZTsKJiM0MzsJZ290byBsb29rdXA7CiBkcm9wOgogCWtmcmVlX3NrYihza2IpOwogCXJldHVybjsKQEAgLTg1MiwxMiAmIzQzOzEwMjgsNTMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByYyA9IDA7CiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwomIzQzOwlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza2ItJmd0O3NrOwogCiAJaWYgKGxpa2VseShsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX1BBQ0tFVCkpIHsKLQkJaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpIC8qIG5vdCBjbG9zZWQgKi8KJiM0MzsJCWlmIChuZXdzayAmYW1wOyZhbXA7CiYjNDM7CQkgICAgYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgIT0KJiM0MzsJCQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHsKJiM0MzsJCQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCQkJZ290byByZXRyeTsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fAomIzQzOwkJCSAgICBzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fAomIzQzOwkJCSAgICBsbGNfc2sobmV3c2spLSZndDtzdGF0ZSAmbHQ7IExMQ19DT05OX1NUQVRFX0FETSkgewomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCQkJZ290byBvdXRfa2ZyZWVfc2tiOwomIzQzOwkJCX0KIAkJCXJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpOwotCQllbHNlCiYjNDM7CQkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQl9IGVsc2UgaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCQkgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJCSAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHsKJiM0MzsJCQlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CQkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQkJaWYgKGxsY19zayhuZXdzayktJmd0O3N0YXRlICZsdDs9IExMQ19DT05OX1NUQVRFX0FETSkgewomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCQkJZ290byBvdXRfa2ZyZWVfc2tiOwomIzQzOwkJCX0KJiM0MzsJCQlyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQl9IGVsc2UgaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpIHsKJiM0MzsJCQlyYyA9IGxsY19jb25uX3Jjdihzaywgc2tiKTsKJiM0MzsJCX0gZWxzZSB7CiAJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQl9CiAJfSBlbHNlIGlmIChsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX0VWRU5UKSB7CiAJCS8qIHRpbWVyIGV4cGlyYXRpb24gZXZlbnQgKi8KIAkJaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpICAvKiBub3QgY2xvc2VkICovCkBAIC04NzAsNiAmIzQzOzEwODcsMjQgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KIG91dDoKIAlyZXR1cm4gcmM7CiYjNDM7cmV0cnk6CiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkgICAgTExDX0lOQ09NSU5HX1FVRVVFRCkgewomIzQzOwkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQlpZiAobGxjX3NrKG5ld3NrKS0mZ3Q7c3RhdGUgJmd0OyBMTENfQ09OTl9TVEFURV9BRE0pCiYjNDM7CQkJcmMgPSBsbGNfY29ubl9yY3YobmV3c2ssIHNrYik7CiYjNDM7CQllbHNlIHsKJiM0MzsJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQkJZ290byBvdXRfa2ZyZWVfc2tiOwomIzQzOwkJfQomIzQzOwkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlnb3RvIG91dF9rZnJlZV9za2I7CiBvdXRfa2ZyZWVfc2tiOgogCWtmcmVlX3NrYihza2IpOwogCWdvdG8gb3V0OwpAQCAtOTU5LDE3ICYjNDM7MTE5NCwxOCBAQCB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpCiAKIC8qKgogICoJbGxjX3NrX2ZyZWUgLSBGcmVlcyBhIExMQyBzb2NrZXQKLSAqCUBzazogLSBzb2NrZXQgdG8gZnJlZQomIzQzOyAqCUBzazogc29ja2V0IHRvIGZyZWUKJiM0MzsgKglAc3luYzogd2hldGhlciB0byBzeW5jaHJvbm91c2x5IHN0b3AgdGltZXJzCiAgKgotICoJRnJlZXMgYSBMTEMgc29ja2V0CiYjNDM7ICoJRnJlZXMgYSBMTEMgc29ja2V0LgogICovCi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKQogewogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAogCWxsYy0mZ3Q7c3RhdGUgPSBMTENfQ09OTl9PVVRfT0ZfU1ZDOwogCS8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi8KLQlsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTsKJiM0MzsJbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgc3luYyk7CiAjaWZkZWYgREVCVUdfTExDX0NPTk5fQUxMT0MKIAlwcmludGsoS0VSTl9JTkZPICYjMzQ7JXM6IHVuYWNrcT0lZCwgdHhxPSVkXG4mIzM0OywgX19mdW5jX18sCiAJCXNrYl9xdWV1ZV9sZW4oJmFtcDtsbGMtJmd0O3BkdV91bmFja19xKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipMTEMgU3Vic3lzdGVtIFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGRpZ2dpbmcgaW50byB0aGUgYG5ldC9sbGMvYCBzdWJzeXN0ZW0gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIFJpZ2h0IGF3YXksIHRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBhbnkgY2hhbmdlIHRvIHRoZSBjb3JlIG5ldHdvcmsgbG9naWMgaXMgc29tZXRoaW5nIHdlIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0bywgZXNwZWNpYWxseSBnaXZlbiBMTEMmIzM5O3MgcmVhY2ggaW50byB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMsIHRyYWNraW5nIHN0YXRlcyBsaWtlIGBMTENfSU5DT01JTkdfTk9ORWAsIGBMTENfSU5DT01JTkdfUEVORElOR2AsIGFuZCBgTExDX0lOQ09NSU5HX1FVRVVFRGAsIHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJlaGF2aW9yJiMzNDsgYW5kIG1ha2VzIHRoaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nPXRydWVgLgoKTGV0JiMzOTtzIGhvbmUgaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZC4gSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSBsaXN0OiBgbGxjX3VpX3JlbGVhc2VgLCBgbGxjX3VpX2FjY2VwdGAsIGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYCwgYGxsY19jb25uX3NlcnZpY2VgLCBgbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrYCwgYGxsY19pbmNvbWluZ19zb2NrX3dvcmtgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfYmFja2xvZ19yY3ZgLCBhbmQgYGxsY19za19mcmVlYC4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBlbnRyeXBvaW50cyDigJMgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBmdW5jdGlvbnMgd2UgY2FuIHJlYWxpc3RpY2FsbHkgdGFyZ2V0IGZvciBmdXp6aW5nLiBBZnRlciBhIHF1aWNrIHNjYW4sIEkmIzM5O20gZm9jdXNpbmcgb246IGBsbGNfdWlfcmVsZWFzZWAgKHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGBwcm90b19vcHNgKSwgYGxsY191aV9hY2NlcHRgIChhbHNvIHN0YXRpYywgcGFydCBvZiBgcHJvdG9fb3BzYCksIGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYCwgYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLCBgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCwgYGxsY19jb25uX2hhbmRsZXJgLCBhbmQgYGxsY19za19mcmVlYC4gVGhlc2UgYXJlIG15IGxpa2VseSBzdGFydGluZyBwb2ludHMuCgpJIHNob3VsZCBhbHNvIGdsYW5jZSBhdCB0aGUgYEtjb25maWdgIGZvciB0aGUgTExDIHN1YnN5c3RlbSwgd2hpY2ggaXMgYG5ldC9sbGMvS2NvbmZpZ2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGVpdGhlciBgQ09ORklHX0xMQ2Agb3IgYENPTkZJR19MTEMyYCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgaG93IExMQyBpcyBlbmFibGVkIG9yIGRpc2FibGVkIHdpbGwgYmUga2V5IGluIHNldHRpbmcgdXAgdGhlIGFwcHJvcHJpYXRlIGZ1enppbmcgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExMQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2xsYy9LY29uZmlnOjI6Y29uZmlnIExMQ1xubmV0L2xsYy9LY29uZmlnLTMtXHR0cmlzdGF0ZVxubmV0L2xsYy9LY29uZmlnLTQtXG5uZXQvbGxjL0tjb25maWc6NTpjb25maWcgTExDMlxubmV0L2xsYy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIExMQyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX0xMQzJgIGlzIHRoZSBvbmUgdGhlIHVzZXIgKmV4cGxpY2l0bHkqIGhhcyBhIHNheSBpbiwgdGhlIG9uZSB0aGV5JiMzOTtyZSBnb2luZyB0byB0b2dnbGUuIFRoYXQgc3VnZ2VzdHMgYENPTkZJR19MTENgIGlzIGxpa2VseSBhbiB1bmRlcmx5aW5nIGRlcGVuZGVuY3ksIHBlcmhhcHMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBvciBlbmFibGVkICpieSogYENPTkZJR19MTEMyYC4gSXQmIzM5O3MgYSBjb21tb24gcGF0dGVybiBpbiBLY29uZmlnLiBUbyBiZSBjZXJ0YWluLCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBhcmUgcmVsYXRlZCBhbmQgc2VlIHRoZSBsb2dpYyBiZWhpbmQgdGhlaXIgaW50ZXJhY3Rpb25zLiBUaGUgcGxhY2UgdG8gZ28gZm9yIHRoYXQgaXMgYWxtb3N0IGNlcnRhaW5seSBgbmV0L2xsYy9LY29uZmlnYC4gVGltZSB0byBkaXZlIGluIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb24gYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBMTENgIGFuZCBgTExDMmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbGxjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTExDXG4gICAzOlx0XHR0cmlzdGF0ZVxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBMTEMyXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRzZWxlY3QgTExDXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgaXMgYSBMb2dpY2FsIExpbmsgTGF5ZXIgdHlwZSAyLCBjb25uZWN0aW9uIG9yaWVudGVkIHN1cHBvcnQuXG4gIDEwOlx0XHQgIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHRvIGhhdmUgc3VwcG9ydCBmb3IgUEZfTExDIHNvY2tldHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMzOQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMTEMgS2VybmVsIE1vZHVsZSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfTExDMmAgaXMgZGVmaW5pdGVseSBzZWxlY3RpbmcgYENPTkZJR19MTENgIGFuZCB0aGF0IGVuYWJsZXMgYFBGX0xMQ2Agc29ja2V0cy4gR3JlYXQsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIC0gc28gYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0xMQzImIzM0O11gIGlzIGNvcnJlY3QuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIExMQyBtb2R1bGUgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSYjMzk7dmUgZ290IGEgcHJlbGltaW5hcnkgbGlzdDogYGxsY19jb25uX2hhbmRsZXJgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBgbGxjX3NrX2ZyZWVgLCBgbGxjX3VpX2FjY2VwdGAsIGFuZCBgbGxjX3VpX3JlbGVhc2VgLgoKSG9sZCBvbi4uLiBJIGp1c3QgcmVhbGl6ZWQgYGxsY191aV9hY2NlcHRgIGFuZCBgbGxjX3VpX3JlbGVhc2VgIGFyZSBsaXN0ZWQgYXMgKnN0YXRpYyogaW4gYG5ldC9sbGMvYWZfbGxjLmNgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbWl0ZWQgc2NvcGUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgd2l0aGluIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYgdG8gbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgcmlnaHQuIExldCYjMzk7cyBwdWxsIHVwIGBuZXQvbGxjL2FmX2xsYy5jYCBhbmQgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX3VpX2FjY2VwdHxsbGNfdWlfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvYWZfbGxjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2xsYy9hZl9sbGMuYz0xNjY9c3RhdGljIGludCBsbGNfdWlfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuLS1cbm5ldC9sbGMvYWZfbGxjLmMtMTg5LS8qKlxubmV0L2xsYy9hZl9sbGMuYzoxOTA6ICpcdGxsY191aV9yZWxlYXNlIC0gc2h1dGRvd24gc29ja2V0XG5uZXQvbGxjL2FmX2xsYy5jLTE5MS0gKlx0QHNvY2s6IFNvY2tldCB0byByZWxlYXNlLlxuLS1cbm5ldC9sbGMvYWZfbGxjLmMtMTk0LSAqL1xubmV0L2xsYy9hZl9sbGMuYzoxOTU6c3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L2xsYy9hZl9sbGMuYy0xOTYte1xuLS1cbm5ldC9sbGMvYWZfbGxjLmM9Njc2PXN0YXRpYyB2b2lkIGxsY19jbXNnX3JjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9hZl9sbGMuYy02OTEtLyoqXG5uZXQvbGxjL2FmX2xsYy5jOjY5MjogKlx0bGxjX3VpX2FjY2VwdCAtIGFjY2VwdCBhIG5ldyBpbmNvbWluZyBjb25uZWN0aW9uLlxubmV0L2xsYy9hZl9sbGMuYy02OTMtICpcdEBzb2NrOiBTb2NrZXQgd2hpY2ggY29ubmVjdGlvbnMgYXJyaXZlIG9uLlxuLS1cbm5ldC9sbGMvYWZfbGxjLmMtNjk5LSAqL1xubmV0L2xsYy9hZl9sbGMuYzo3MDA6c3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG5uZXQvbGxjL2FmX2xsYy5jLTcwMS1cdFx0XHQgc3RydWN0IHByb3RvX2FjY2VwdF9hcmcgKmFyZylcbi0tXG5uZXQvbGxjL2FmX2xsYy5jPTEyMjg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjX3VpX29wcyA9IHtcbi0tXG5uZXQvbGxjL2FmX2xsYy5jLTEyMzAtXHQub3duZXIgICAgICAgPSBUSElTX01PRFVMRSxcbm5ldC9sbGMvYWZfbGxjLmM6MTIzMTpcdC5yZWxlYXNlICAgICA9IGxsY191aV9yZWxlYXNlLFxubmV0L2xsYy9hZl9sbGMuYy0xMjMyLVx0LmJpbmRcdCAgICAgPSBsbGNfdWlfYmluZCxcbi0tXG5uZXQvbGxjL2FmX2xsYy5jLTEyMzQtXHQuc29ja2V0cGFpciAgPSBzb2NrX25vX3NvY2tldHBhaXIsXG5uZXQvbGxjL2FmX2xsYy5jOjEyMzU6XHQuYWNjZXB0ICAgICAgPSBsbGNfdWlfYWNjZXB0LFxubmV0L2xsYy9hZl9sbGMuYy0xMjM2LVx0LmdldG5hbWUgICAgID0gbGxjX3VpX2dldG5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MjMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTExDIFNvY2tldCBTeXNjYWxsIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZW50cnkgcG9pbnRzIGZvciB0aGUgYFBGX0xMQ2Agc29ja2V0cyBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhleSBhcmUgc3RhdGljLiBUaGlzIHByZXNlbnRzIGEgY2hhbGxlbmdlLiBXaGlsZSB0aGV5IGFyZSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGByZWxlYXNlYCBhbmQgYGFjY2VwdGAgc3lzY2FsbHMsIGJlaW5nIHN0YXRpYyBjb3VsZCBtYWtlIHRoZW0gbGVzcyB2aXNpYmxlIHRvIGZ1enplcnMgdGhhdCBkZXBlbmQgb24gYGthbGxzeW1zYCwgZXNwZWNpYWxseSBpZiB0aGV5IGFyZSByZWx5aW5nIG9uIG5hbWUtYmFzZWQgdGFyZ2V0aW5nLiBGb3J0dW5hdGVseSwgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIGNhbiBkaXJlY3RseSB0YXJnZXQgc3lzY2FsbHMgd2l0aGluIHNwZWNpZmljIHNvY2tldCBmYW1pbGllcywgd2hpY2ggaXMgYSBnb29kIHdvcmthcm91bmQuCgpJZGVhbGx5LCB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIHRoZSBiZXN0IGZ1enppbmcgc3RyYXRlZ3kuIFNvLCBsZXQmIzM5O3Mgc2VlIHdoaWNoIGdsb2JhbCBmdW5jdGlvbnMgd2VyZSBhZGRlZCBvciBtb2RpZmllZDogYGxsY19jb25uX2hhbmRsZXJgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBgbGxjX3NrX2ZyZWVgLCBhbmQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHNldCB0byBwcmlvcml0aXplLgoKSG1tLCB3YWl0IGEgc2Vjb25kLi4uIEkgc2VlIGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYCBpbiBoZXJlLCBhbmQgdGhleSYjMzk7cmUgc3RhdGljLCBidXQgY2xlYXJseSBpbXBvcnRhbnQuIFRoZXkgcmVwcmVzZW50IHNpbWlsYXIgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBtYWluIHN5c2NhbGxzIGFuZCBjb3VsZCBiZSBlbnRyeSBwb2ludHMgdG8gdGhlIGNvZGUuIEkgdGhpbmsgSSYjMzk7bGwgbWFrZSB0aGUgY2FsbCB0byBleGNsdWRlIHRob3NlIHRvIHN0cmljdGx5IGFkaGVyZSB0byB0aGUgJiMzNDtwcmVmZXIgbm9uLXN0YXRpYyYjMzQ7IHJ1bGUsIGJ1dCB0aGUgZ2xvYmFscyBzZWVtIHNhZmUgdG8gaW5jbHVkZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGFtIGJlaW5nIGNsZWFyIGhlcmUgYW5kIG1ha2luZyB0aGUgYmVzdCBkZWNpc2lvbiBmb3IgZnV6emluZy4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBsbGNfY29ubl9oYW5kbGVyYCBpcyBpbmRlZWQgZ2xvYmFsLiBJdCYjMzk7cyBiZXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsbGNfY29ubl9oYW5kbGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2xsYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2xsYy9hZl9sbGMuYz0xMjU1PXN0YXRpYyBpbnQgX19pbml0IGxsYzJfaW5pdCh2b2lkKVxuLS1cbm5ldC9sbGMvYWZfbGxjLmMtMTI4MC1cdGxsY19hZGRfcGFjayhMTENfREVTVF9TQVAsIGxsY19zYXBfaGFuZGxlcik7XG5uZXQvbGxjL2FmX2xsYy5jOjEyODE6XHRsbGNfYWRkX3BhY2soTExDX0RFU1RfQ09OTiwgbGxjX2Nvbm5faGFuZGxlcik7XG5uZXQvbGxjL2FmX2xsYy5jLTEyODItb3V0OlxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYz01Nz1pbnQgbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTg5LVx0XHQgKiBza2ItXHUwMDNlc2sgcG9pbnRpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgaW5cbm5ldC9sbGMvbGxjX2Nvbm4uYzo5MDpcdFx0ICogbGxjX2Nvbm5faGFuZGxlci4gLWFjbWVcbm5ldC9sbGMvbGxjX2Nvbm4uYy05MS1cdFx0ICovXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTg1Mj1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzEtXG5uZXQvbGxjL2xsY19jb25uLmM6ODcyOnZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2xsYy9sbGNfY29ubi5jLTg3My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipHbG9iYWwgU2NvcGUgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBvYnNlcnZpbmcgdGhhdCBgbGxjX2Nvbm5faGFuZGxlcmAgaGFzIGJlZW4gZGVmaW5lZCBhdCBhIGdsb2JhbCBzY29wZS4gQW5kLCBpZiBJIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSBjb3JyZWN0bHksIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGFuZCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gIGFyZSBhbHNvIGdsb2JhbGx5IGFjY2Vzc2libGUsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGhvdyB0aGV5IGludGVyb3BlcmF0ZS4gSXQmIzM5O3MgYWxzbyBhcHBhcmVudCB0aGF0IGBsbGNfc2tfZnJlZWAgaXMgYW5vdGhlciBnbG9iYWxseSBkZWZpbmVkIGZ1bmN0aW9uIHdoaWNoIG1heSBhbHNvIGNyZWF0ZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgb3RoZXIgZ2xvYmFsIHZhcmlhYmxlcy4KCk5vdywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGhvdyBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2Agb3BlcmF0ZXMuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGNvbm5lY3Rpb24gc3RhdGUgbWFuYWdlbWVudCByZXNpZGVzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZXNlIGdsb2JhbCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyB0byBhc3Nlc3MgaXRzIG92ZXJhbGwgZGVzaWduIGFuZCBwb3RlbnRpYWwgZm9yIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX2NfYWMuYz0xNDM0PXN0YXRpYyB2b2lkIGxsY19wcm9jZXNzX3Rtcl9ldihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTE0NDEtXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSlcbm5ldC9sbGMvbGxjX2NfYWMuYzoxNDQyOlx0XHRcdGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG5uZXQvbGxjL2xsY19jX2FjLmMtMTQ0My1cdFx0ZWxzZSB7XG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTQzPWludCBzeXNjdGxfbGxjMl9idXN5X3RpbWVvdXQgPSBMTEMyX0JVU1lfVElNRSAqIEhaO1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy00NS0vKipcbm5ldC9sbGMvbGxjX2Nvbm4uYzo0NjogKlx0bGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyAtIHNlbmRzIGV2ZW50IHRvIGNvbm5lY3Rpb24gc3RhdGUgbWFjaGluZVxubmV0L2xsYy9sbGNfY29ubi5jLTQ3LSAqXHRAc2s6IGNvbm5lY3Rpb25cbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtNTYtICovXG5uZXQvbGxjL2xsY19jb25uLmM6NTc6aW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2xsYy9sbGNfY29ubi5jLTU4LXtcbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9MTc4PXZvaWQgbGxjX2Nvbm5fc2VuZF9wZHUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xOTEtICpcdFByZXBhcmVzIHNlcnZpY2UgcGFyYW1ldGVycyAocHJpbSBhbmQgcHJpbV9kYXRhKS4gY2FsbGluZyBpbmRpY2F0aW9uXG5uZXQvbGxjL2xsY19jb25uLmM6MTkyOiAqXHRmdW5jdGlvbiB3aWxsIGJlIGRvbmUgaW4gbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzcy5cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xOTMtICovXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTc1MT1zdGF0aWMgaW50IGxsY19jb25uX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTc1Ni1cdGV2LVx1MDAzZXJlYXNvbiA9IDA7XG5uZXQvbGxjL2xsY19jb25uLmM6NzU3Olx0cmV0dXJuIGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG5uZXQvbGxjL2xsY19jb25uLmMtNzU4LX1cbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9ODcyPXZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy05NTMtXHRcdCAqIENhbiYjMzk7dCBiZSBza2Jfc2V0X293bmVyX3IsIHRoaXMgd2lsbCBiZSBkb25lIGF0IHRoZVxubmV0L2xsYy9sbGNfY29ubi5jOjk1NDpcdFx0ICogbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyBmdW5jdGlvbiwgbGF0ZXIgb24sIHdoZW4gd2Ugd2lsbCB1c2Vcbm5ldC9sbGMvbGxjX2Nvbm4uYy05NTUtXHRcdCAqIHNrYl9xdWV1ZV9yY3Zfc2tiIHRvIHNlbmQgaXQgdG8gdXBwZXIgbGF5ZXJzLCB0aGlzIGlzXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTEwMjc9c3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDgwLVx0XHRpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpICAvKiBub3QgY2xvc2VkICovXG5uZXQvbGxjL2xsY19jb25uLmM6MTA4MTpcdFx0XHRyYyA9IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG5uZXQvbGxjL2xsY19jb25uLmMtMTA4Mi1cdFx0ZWxzZVxuLS1cbm5ldC9sbGMvbGxjX2lmLmM9Mzg9aW50IGxsY19idWlsZF9hbmRfc2VuZF9wa3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2lmLmMtNTYtXHRza2ItXHUwMDNlZGV2ICAgICAgPSBsbGMtXHUwMDNlZGV2O1xubmV0L2xsYy9sbGNfaWYuYzo1NzpcdHJldHVybiBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xubmV0L2xsYy9sbGNfaWYuYy01OC1cbi0tXG5uZXQvbGxjL2xsY19pZi5jPTc3PWludCBsbGNfZXN0YWJsaXNoX2Nvbm5lY3Rpb24oc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1OCAqbG1hYywgdTggKmRtYWMsIHU4IGRzYXApXG4tLVxubmV0L2xsYy9sbGNfaWYuYy0xMDYtXHRcdHNrYl9zZXRfb3duZXJfdyhza2IsIHNrKTtcbm5ldC9sbGMvbGxjX2lmLmM6MTA3Olx0XHRyYyA9IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG5uZXQvbGxjL2xsY19pZi5jLTEwOC1cdH1cbi0tXG5uZXQvbGxjL2xsY19pZi5jPTEyMz1pbnQgbGxjX3NlbmRfZGlzYyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2xsYy9sbGNfaWYuYy0xNDYtXHRldi1cdTAwM2VwcmltX3R5cGUgPSBMTENfUFJJTV9UWVBFX1JFUTtcbm5ldC9sbGMvbGxjX2lmLmM6MTQ3Olx0cmMgPSBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xubmV0L2xsYy9sbGNfaWYuYy0xNDgtb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3MgoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAxNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBMTEMgQ29ubmVjdGlvbiBIYW5kbGluZyBDaGFuZ2VzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtYWtpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSB3YXkgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIGFyZSBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgYWltaW5nIHRvIGFkZHJlc3MgcmFjZSBjb25kaXRpb25zIGFuZCBtZW1vcnkgbGVha3MuIFRoZSBmYWN0IHRoYXQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgIGlzIGdsb2JhbCBhbmQgaGVhdmlseSB1c2VkIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgY3JpdGljYWwgYXJlYSBmb3Igc2NydXRpbnkuIEdpdmVuIHRoZSBjb250ZXh0LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBsbGNfY29ubl9oYW5kbGVyYCwgYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLCBgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCwgYGxsY19za19mcmVlYCwgYW5kIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AuCgpUaGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IHdvcmtxdWV1ZSBhbmQgc3RhdGUgbWFjaGluZSBzdHJvbmdseSBzdWdnZXN0cyBhIHNoaWZ0IHRvd2FyZHMgbW9yZSBhc3luY2hyb25vdXMgYW5kIGNvbnRyb2xsZWQgY29ubmVjdGlvbiBoYW5kbGluZy4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiBzb2NrZXRzIGFuZCBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBtb3JlIGNhcmVmdWxseS4gU2luY2UgdGhlIExMQyBwcm90b2NvbCBpcyB1c2VyLXNwYWNlIGFjY2Vzc2libGUgdmlhIFBGX0xMQyBzb2NrZXRzLCBhbnkgZmxhd3MgaGVyZSBjb3VsZCBiZSBleHBsb2l0ZWQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV3IHN0YXRlIG1hY2hpbmUgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBjb25uZWN0aW9uIGhhbmRsaW5nIGxvZ2ljLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGVhY2ggb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBob3cgdGhlIG5ldyBzdGF0ZSBtYWNoaW5lIGFuZCB3b3JrcXVldWUgaW50ZXJhY3Qgd2l0aCB0aGVtIHRvIGVuc3VyZSB0aGUgY2hhbmdlcyBhcmUgY29ycmVjdCBhbmQgZG9uJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgbmV3IHN5c3RlbSBpcyBhY3R1YWxseSBzb2x2aW5nIHRoZSB1bmRlcmx5aW5nIHByb2JsZW1zIG9mIHRoZSBvbGQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TExDMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xsY19jb25uX2hhbmRsZXImIzM0OywKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfYWNjZXB0X2luY29taW5nX3NvY2smIzM0OywKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4mIzM0OywKICAgICYjMzQ7bGxjX3NrX2ZyZWUmIzM0OywKICAgICYjMzQ7bGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmtxdWV1ZSBhbmQgc3RhdGUgbWFjaGluZSBmb3IgaGFuZGxpbmcgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBtZW1vcnkgbGVha3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMgb2YgdGhlIExMQyBwcm90b2NvbCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQRl9MTEMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TExDMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xsY19jb25uX2hhbmRsZXImIzM0OywKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfYWNjZXB0X2luY29taW5nX3NvY2smIzM0OywKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4mIzM0OywKICAgICYjMzQ7bGxjX3NrX2ZyZWUmIzM0OywKICAgICYjMzQ7bGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHdvcmtxdWV1ZSBhbmQgc3RhdGUgbWFjaGluZSBmb3IgaGFuZGxpbmcgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBtZW1vcnkgbGVha3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGNvbm5lY3Rpb24gaGFuZGxpbmcgbG9naWMgb2YgdGhlIExMQyBwcm90b2NvbCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQRl9MTEMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGlzc3VlIGluIHRoZSBMTEMgcHJvdG9jb2wgcmVsYXRlZCB0byBpbmNvbWluZyBjb25uZWN0aW9uIGhhbmRsaW5nLiBJdCBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSB0cmFja2luZyAoYGluY29taW5nX3N0YXRlYCkgYW5kIGEgd29ya3F1ZXVlIChgaW5jb21pbmdfd29ya2ApIHRvIHNhZmVseSBtYW5hZ2UgYW5kIGRlZmVyIHRoZSBmcmVlaW5nIG9mIGluY29taW5nIHNvY2tldHMsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiBhIGxpc3RlbmluZyBzb2NrZXQgaXMgY2xvc2VkIHdoaWxlIGNoaWxkIHNvY2tldHMgYXJlIHN0aWxsIHBlbmRpbmcgb3IgcXVldWVkLlxuXG5UaGVzZSB0eXBlcyBvZiBidWdzICh1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSkgYXJlIGFscmVhZHkgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGZpZWxkcyBpbiBgc3RydWN0IGxsY19zb2NrYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoZSBuZXdseSBhZGRlZCBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgIGZ1bmN0aW9uIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBhbGxvY2F0ZWQgc2tiIGhlYWRlcnMgYmVmb3JlIHRyYW5zbWlzc2lvbi5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ODg2NzkyZjNiMmNhMDQzNjA5ODRmZTcxNDBjYWVkZDU3MDdiMWY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMDg6NDc6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9sbGNfY29ubi5oIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaAppbmRleCBlMWEzMDI2OTY3MjM0Li45YWNkYTBhNmYwNjlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9sbGNfY29ubi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmgKQEAgLTYsNiAmIzQzOzYsNyBAQAogICogCQkgMjAwMSwgMjAwMiBieSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gJmx0O2FjbWVAY29uZWN0aXZhLmNvbS5iciZndDsKICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9sbGNfaWYuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xsYy5oJmd0OwpAQCAtMTMsNiAmIzQzOzE0LDEwIEBACiAjZGVmaW5lIExMQ19FVkVOVCAgICAgICAgICAgICAgICAxCiAjZGVmaW5lIExMQ19QQUNLRVQgICAgICAgICAgICAgICAyCiAKJiM0MzsjZGVmaW5lIExMQ19JTkNPTUlOR19OT05FICAgICAgICAwCiYjNDM7I2RlZmluZSBMTENfSU5DT01JTkdfUEVORElORyAgICAgMQomIzQzOyNkZWZpbmUgTExDX0lOQ09NSU5HX1FVRVVFRCAgICAgIDIKJiM0MzsKICNkZWZpbmUgTExDMl9QX1RJTUUgICAgICAgICAgICAgICAyCiAjZGVmaW5lIExMQzJfQUNLX1RJTUUgICAgICAgICAgICAgMQogI2RlZmluZSBMTEMyX1JFSl9USU1FICAgICAgICAgICAgIDMKQEAgLTcyLDYgJiM0Mzs3Nyw5IEBAIHN0cnVjdCBsbGNfc29jayB7CiAJCQkJCSAgICAgIHJlY2VpdmVkIGFuZCBjYXVzZWQgc2VuZGluZyBGUk1SLgogCQkJCQkgICAgICBVc2VkIGZvciByZXNlbmRpbmcgRlJNUiAqLwogCXUzMgkJICAgIGNtc2dfZmxhZ3M7CiYjNDM7CWF0b21pY190CSAgICBpbmNvbWluZ19zdGF0ZTsKJiM0MzsJc3RydWN0IHNvY2sJICAgICppbmNvbWluZ19saXN0ZW5lcjsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0IGluY29taW5nX3dvcms7CiAJc3RydWN0IGhsaXN0X25vZGUgICBkZXZfaGFzaF9ub2RlOwogfTsKIApAQCAtOTMsNyAmIzQzOzEwMSwxMCBAQCBzdGF0aWMgX19pbmxpbmVfXyBjaGFyIGxsY19iYWNrbG9nX3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHN0cnVjdCBzb2NrICpsbGNfc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSwKIAkJCSAgc3RydWN0IHByb3RvICpwcm90LCBpbnQga2Vybik7CiB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpOwotdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spOwomIzQzO3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpOwomIzQzO3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spOwomIzQzO3ZvaWQgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7CiYjNDM7dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spOwogCiB2b2lkIGxsY19za19yZXNldChzdHJ1Y3Qgc29jayAqc2spOwogCmRpZmYgLS1naXQgYS9uZXQvbGxjL2FmX2xsYy5jIGIvbmV0L2xsYy9hZl9sbGMuYwppbmRleCBiMDQ0N2MzM2RiZjA5Li43ZDI0NmQ0ZDI4MWJiIDEwMDY0NAotLS0gYS9uZXQvbGxjL2FmX2xsYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sbGMvYWZfbGxjLmMKQEAgLTE5Niw2ICYjNDM7MTk2LDcgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stJmd0O3NrOwogCXN0cnVjdCBsbGNfc29jayAqbGxjOwomIzQzOwlib29sIGxpc3RlbmVyOwogCiAJaWYgKHVubGlrZWx5KHNrID09IE5VTEwpKQogCQlnb3RvIG91dDsKQEAgLTIwNiw2ICYjNDM7MjA3LDkgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogCQlsbGMtJmd0O2xhZGRyLmxzYXAsIGxsYy0mZ3Q7ZGFkZHIubHNhcCk7CiAJaWYgKCFsbGNfc2VuZF9kaXNjKHNrKSkKIAkJbGxjX3VpX3dhaXRfZm9yX2Rpc2Moc2ssIFJFQURfT05DRShzay0mZ3Q7c2tfcmN2dGltZW8pKTsKJiM0MzsJbGlzdGVuZXIgPSBzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0xJU1RFTjsKJiM0MzsJaWYgKGxpc3RlbmVyKQomIzQzOwkJc29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTsKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19aQVBQRUQpKSB7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtJmd0O3NhcDsKIApAQCAtMjE0LDE2ICYjNDM7MjE4LDE4IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIAkJICovCiAJCWxsY19zYXBfaG9sZChzYXApOwogCQlsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLSZndDtzYXAsIHNrKTsKJiM0MzsJCWxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJbGxjX3NhcF9wdXQoc2FwKTsKIAl9IGVsc2UgewomIzQzOwkJbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spOwogCQlyZWxlYXNlX3NvY2soc2spOwogCX0KIAluZXRkZXZfcHV0KGxsYy0mZ3Q7ZGV2LCAmYW1wO2xsYy0mZ3Q7ZGV2X3RyYWNrZXIpOwogCXNvY2tfcHV0KHNrKTsKIAlzb2NrX29ycGhhbihzayk7CiAJc29jay0mZ3Q7c2sgPSBOVUxMOwotCWxsY19za19mcmVlKHNrKTsKJiM0MzsJbGxjX3NrX2ZyZWUoc2ssIHRydWUpOwogb3V0OgogCXJldHVybiAwOwogfQpAQCAtNzIyLDYgJiM0Mzs3MjgsNyBAQCBzdGF0aWMgaW50IGxsY191aV9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKIAkJZ290byBmcmVlczsKIAlyYyA9IDA7CiAJbmV3c2sgPSBza2ItJmd0O3NrOwomIzQzOwlsbGNfYWNjZXB0X2luY29taW5nX3NvY2sobmV3c2spOwogCS8qIGF0dGFjaCBjb25uZWN0aW9uIHRvIGEgbmV3IHNvY2tldC4gKi8KIAlsbGNfdWlfc2tfaW5pdChuZXdzb2NrLCBuZXdzayk7CiAJc29ja19yZXNldF9mbGFnKG5ld3NrLCBTT0NLX1pBUFBFRCk7CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb25uLmMgYi9uZXQvbGxjL2xsY19jb25uLmMKaW5kZXggMjYwNDYwZDUwZjU0Yy4uNDI3MmNlNGQ0YTFjYSAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sbGMvbGxjX2Nvbm4uYwpAQCAtMzIsNiAmIzQzOzMyLDcgQEAgc3RhdGljIGludCBsbGNfZXhlY19jb25uX3RyYW5zX2FjdGlvbnMoc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqZXYpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyAqbGxjX3F1YWxpZnlfY29ubl9ldihzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7c3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiAvKiBPZmZzZXQgdGFibGUgb24gY29ubmVjdGlvbiBzdGF0ZXMgdHJhbnNpdGlvbiBkaWFncmFtICovCiBzdGF0aWMgaW50IGxsY19vZmZzZXRfdGFibGVbTkJSX0NPTk5fU1RBVEVTXVtOQlJfQ09OTl9FVl07CkBAIC04OCw2ICYjNDM7ODksMTEgQEAgaW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkgKiBza2ItJmd0O3NrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluCiAJCSAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lCiAJCSAqLwomIzQzOwkJaWYgKHNrICE9IHNrYi0mZ3Q7c2sgJmFtcDsmYW1wOwomIzQzOwkJICAgIGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKHNrYi0mZ3Q7c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCSAgICBMTENfSU5DT01JTkdfUEVORElORykKJiM0MzsJCQlhdG9taWNfc2V0KCZhbXA7bGxjX3NrKHNrYi0mZ3Q7c2spLSZndDtpbmNvbWluZ19zdGF0ZSwKJiM0MzsJCQkJICAgTExDX0lOQ09NSU5HX1FVRVVFRCk7CiAJCXNrYl9nZXQoc2tiKTsKIAkJc2tiX3F1ZXVlX3RhaWwoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKIAkJc2stJmd0O3NrX3N0YXRlX2NoYW5nZShzayk7CkBAIC0zNTQsNyAmIzQzOzM2MCw4IEBAIHN0YXRpYyBpbnQgbGxjX2Nvbm5fc2VydmljZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCWludCByYyA9IDE7CiAKLQlpZiAobGxjLSZndDtzdGF0ZSAmZ3Q7IE5CUl9DT05OX1NUQVRFUykKJiM0MzsJaWYgKGxsYy0mZ3Q7c3RhdGUgJmx0OyBMTENfQ09OTl9TVEFURV9BRE0gfHwKJiM0MzsJICAgIGxsYy0mZ3Q7c3RhdGUgJmd0OyBOQlJfQ09OTl9TVEFURVMpCiAJCWdvdG8gb3V0OwogCXJjID0gMDsKIAl0cmFucyA9IGxsY19xdWFsaWZ5X2Nvbm5fZXYoc2ssIHNrYik7CkBAIC03NjUsMjcgJiM0Mzs3NzIsMTUzIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaywKIAltZW1jcHkoJmFtcDtuZXdsbGMtJmd0O2xhZGRyLCBkYWRkciwgc2l6ZW9mKG5ld2xsYy0mZ3Q7bGFkZHIpKTsKIAltZW1jcHkoJmFtcDtuZXdsbGMtJmd0O2RhZGRyLCBzYWRkciwgc2l6ZW9mKG5ld2xsYy0mZ3Q7ZGFkZHIpKTsKIAluZXdsbGMtJmd0O2RldiA9IGRldjsKJiM0MzsJbmV3bGxjLSZndDtpbmNvbWluZ19saXN0ZW5lciA9IHNrOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7bmV3bGxjLSZndDtpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1BFTkRJTkcpOwomIzQzOwlJTklUX1dPUksoJmFtcDtuZXdsbGMtJmd0O2luY29taW5nX3dvcmssIGxsY19pbmNvbWluZ19zb2NrX3dvcmspOwomIzQzOwlzb2NrX2hvbGQoc2spOwogCWRldl9ob2xkKGRldik7CiAJbGxjX3NhcF9hZGRfc29ja2V0KGxsYy0mZ3Q7c2FwLCBuZXdzayk7CiBvdXQ6CiAJcmV0dXJuIG5ld3NrOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGxjX3NvY2ssCiYjNDM7CQkJCQkJICAgIGluY29taW5nX3dvcmspOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO2xsYy0mZ3Q7c2s7CiYjNDM7CXN0cnVjdCBzb2NrICpsaXN0ZW5lciA9IGxsYy0mZ3Q7aW5jb21pbmdfbGlzdGVuZXI7CiYjNDM7CiYjNDM7CWxvY2tfc29jayhsaXN0ZW5lcik7CiYjNDM7CWxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsJbGxjX3NrX2ZyZWUoc2ssIGZhbHNlKTsKJiM0MzsJc29ja19vcnBoYW4oc2spOwomIzQzOwlyZWxlYXNlX3NvY2soc2spOwomIzQzOwlsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTsKJiM0MzsJcmVsZWFzZV9zb2NrKGxpc3RlbmVyKTsKJiM0MzsJZGV2X3B1dChsbGMtJmd0O2Rldik7CiYjNDM7CWxsYy0mZ3Q7ZGV2ID0gTlVMTDsKJiM0MzsJc29ja19wdXQoc2spOwomIzQzOwlzb2NrX3B1dChsaXN0ZW5lcik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiYjNDM7CiYjNDM7CWlmIChhdG9taWNfeGNoZygmYW1wO2xsYy0mZ3Q7aW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19OT05FKSA9PQomIzQzOwkgICAgTExDX0lOQ09NSU5HX05PTkUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UobGxjLSZndDtzdGF0ZSwgTExDX0NPTk5fT1VUX09GX1NWQyk7CiYjNDM7CXNvY2tfaG9sZChzayk7CiYjNDM7CWxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtJmd0O3NhcCwgc2spOwomIzQzOwlzY2hlZHVsZV93b3JrKCZhbXA7bGxjLSZndDtpbmNvbWluZ193b3JrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwomIzQzOwomIzQzOwlpZiAoYXRvbWljX3hjaGcoJmFtcDtsbGMtJmd0O2luY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgIT0KJiM0MzsJICAgIExMQ19JTkNPTUlOR19OT05FKQomIzQzOwkJc29ja19wdXQobGxjLSZndDtpbmNvbWluZ19saXN0ZW5lcik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsKJiM0MzsJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUpKSkgewomIzQzOwkJc3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLSZndDtzazsKJiM0MzsKJiM0MzsJCWlmIChuZXdzayAmYW1wOyZhbXA7IG5ld3NrICE9IHNrKSB7CiYjNDM7CQkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkJICAgIExMQ19JTkNPTUlOR19OT05FKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQl9CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJfQomIzQzOwlsb2NhbF9iaF9lbmFibGUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGlzIG1pcnJvcnMgdGhlIEFETS1zdGF0ZSBETSBhY3Rpb25zLCBidXQgYSBsaXN0ZW5lciBoYXMgbm8gcGVlcgomIzQzOyAqIGFkZHJlc3MgaW4gbGxjLSZndDtkYWRkciB5ZXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJIHN0cnVjdCBsbGNfYWRkciAqc2FkZHIsIHU4IGZfYml0KQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJbnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItJmd0O2RldiwgTExDX1BEVV9UWVBFX1UsIDApOwomIzQzOwlpZiAoIW5za2IpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC0mZ3Q7bGFkZHIubHNhcCwKJiM0MzsJCQkgICAgc2FkZHItJmd0O2xzYXAsIExMQ19QRFVfUlNQKTsKJiM0MzsJbGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7CiYjNDM7CXJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBza2ItJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsIHNhZGRyLSZndDttYWMpOwomIzQzOwlpZiAodW5saWtlbHkocmMpKQomIzQzOwkJa2ZyZWVfc2tiKG5za2IpOwomIzQzOwllbHNlCiYjNDM7CQlkZXZfcXVldWVfeG1pdChuc2tiKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbGxjX2FkZHIgc2FkZHIsIGRhZGRyOwotCXN0cnVjdCBzb2NrICpzazsKJiM0MzsJc3RydWN0IHNvY2sgKnNrLCAqbmV3c2sgPSBOVUxMOwomIzQzOwlib29sIG5ld3NrX2xvb2t1cF9yZWYgPSBmYWxzZTsKJiM0MzsJYm9vbCBuZXdza19sb2NrZWQgPSBmYWxzZTsKIAogCWxsY19wZHVfZGVjb2RlX3NhKHNrYiwgc2FkZHIubWFjKTsKIAlsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgJmFtcDtzYWRkci5sc2FwKTsKIAlsbGNfcGR1X2RlY29kZV9kYShza2IsIGRhZGRyLm1hYyk7CiAJbGxjX3BkdV9kZWNvZGVfZHNhcChza2IsICZhbXA7ZGFkZHIubHNhcCk7CiAKJiM0Mztsb29rdXA6CiAJc2sgPSBfX2xsY19sb29rdXAoc2FwLCAmYW1wO3NhZGRyLCAmYW1wO2RhZGRyLCBkZXZfbmV0KHNrYi0mZ3Q7ZGV2KSk7CiAJaWYgKCFzaykKIAkJZ290byBkcm9wOwogCiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHsKJiM0MzsJCW5ld3NrID0gc2s7CiYjNDM7CQliaF9sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJc29ja19wdXQobmV3c2spOwomIzQzOwkJCW5ld3NrID0gTlVMTDsKJiM0MzsJCQlnb3RvIGxvb2t1cDsKJiM0MzsJCX0KJiM0MzsJCXNrID0gbGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfbGlzdGVuZXI7CiYjNDM7CQlzb2NrX2hvbGQoc2spOwomIzQzOwkJbmV3c2tfbG9va3VwX3JlZiA9IHRydWU7CiYjNDM7CQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CX0KJiM0MzsKIAliaF9sb2NrX3NvY2soc2spOwomIzQzOwlpZiAodW5saWtlbHkoc2stJmd0O3NrX3N0YXRlID09IFRDUF9MSVNURU4gJmFtcDsmYW1wOwomIzQzOwkJICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKQomIzQzOwkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJaWYgKG5ld3NrX2xvb2t1cF9yZWYpIHsKJiM0MzsJCWJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spOwomIzQzOwkJbmV3c2tfbG9ja2VkID0gdHJ1ZTsKJiM0MzsJCWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCWdvdG8gcmV0cnlfdW5sb2NrOwomIzQzOwkJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8CiYjNDM7CQkJICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKSB7CiYjNDM7CQkJbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7CiYjNDM7CQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCX0KJiM0MzsJfQogCS8qCiAJICogVGhpcyBoYXMgdG8gYmUgZG9uZSBoZXJlIGFuZCBub3QgYXQgdGhlIHVwcGVyIGxheWVyIC0mZ3Q7YWNjZXB0CiAJICogbWV0aG9kIGJlY2F1c2Ugb2YgdGhlIHdheSB0aGUgUFJPQ09NIHN0YXRlIG1hY2hpbmUgd29ya3M6CkBAIC03OTUsMTAgJiM0Mzs5MjgsMjUgQEAgdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpCiAJICogaW4gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgcHJpdmF0ZSBhcmVhLiAtYWNtZQogCSAqLwogCWlmICh1bmxpa2VseShzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0xJU1RFTikpIHsKLQkJc3RydWN0IHNvY2sgKm5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItJmd0O2RldiwKLQkJCQkJCQkgICAgICAmYW1wO3NhZGRyLCAmYW1wO2RhZGRyKTsKLQkJaWYgKCFuZXdzaykKLQkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQlpZiAoIW5ld3NrKSB7CiYjNDM7CQkJaWYgKGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7CiYjNDM7CQkJCWlmICghbGxjX2Nvbm5fZXZfcnhfZGlzY19jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkgewomIzQzOwkJCQkJdTggZl9iaXQ7CiYjNDM7CiYjNDM7CQkJCQlsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCAmYW1wO2ZfYml0KTsKJiM0MzsJCQkJCWxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCAmYW1wO3NhZGRyLCBmX2JpdCk7CiYjNDM7CQkJCX0gZWxzZSBpZiAoIWxsY19jb25uX2V2X3J4X3h4eF9jbWRfcGJpdF9zZXRfMShzaywgc2tiKSkgewomIzQzOwkJCQkJbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsICZhbXA7c2FkZHIsIDEpOwomIzQzOwkJCQl9CiYjNDM7CQkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQkJfQomIzQzOwkJCW5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItJmd0O2RldiwgJmFtcDtzYWRkciwKJiM0MzsJCQkJCQkJICZhbXA7ZGFkZHIpOwomIzQzOwkJCWlmICghbmV3c2spCiYjNDM7CQkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQkJbmV3c2tfbG9ja2VkID0gdHJ1ZTsKJiM0MzsJCX0KIAkJc2tiX3NldF9vd25lcl9yKHNrYiwgbmV3c2spOwogCX0gZWxzZSB7CiAJCS8qCkBAIC04MTMsMTggJiM0Mzs5NjEsNDYgQEAgdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCXNrYi0mZ3Q7c2sgPSBzazsKIAkJc2tiLSZndDtkZXN0cnVjdG9yID0gc29ja19lZnJlZTsKIAl9Ci0JaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKQomIzQzOwlpZiAodW5saWtlbHkobGxjX3NrKHNrYi0mZ3Q7c2spLSZndDtzdGF0ZSAmbHQ7IExMQ19DT05OX1NUQVRFX0FETSkpIHsKJiM0MzsJCWlmIChuZXdzaykKJiM0MzsJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCWVsc2UgaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKHNrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkJIExMQ19JTkNPTUlOR19OT05FKQomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spOwomIzQzOwkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJfQomIzQzOwlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKIAkJbGxjX2Nvbm5fcmN2KHNrLCBza2IpOwotCWVsc2UgewomIzQzOwkJaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwl9IGVsc2UgewogCQlkcHJpbnRrKCYjMzQ7JXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXG4mIzM0OywgX19mdW5jX18pOwogCQlsbGNfc2V0X2JhY2tsb2dfdHlwZShza2IsIExMQ19QQUNLRVQpOwotCQlpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpKSkKJiM0MzsJCWlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpKSB7CiYjNDM7CQkJaWYgKG5ld3NrKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQl9CiAJfQogb3V0OgomIzQzOwlpZiAobmV3c2tfbG9ja2VkKQomIzQzOwkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwogCWJoX3VubG9ja19zb2NrKHNrKTsKIAlzb2NrX3B1dChzayk7CiYjNDM7CWlmIChuZXdza19sb29rdXBfcmVmKQomIzQzOwkJc29ja19wdXQobmV3c2spOwogCXJldHVybjsKJiM0MztyZXRyeV91bmxvY2s6CiYjNDM7CWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJbmV3c2tfbG9ja2VkID0gZmFsc2U7CiYjNDM7CWJoX3VubG9ja19zb2NrKHNrKTsKJiM0MzsJc29ja19wdXQoc2spOwomIzQzOwlzb2NrX3B1dChuZXdzayk7CiYjNDM7CW5ld3NrID0gTlVMTDsKJiM0MzsJbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlOwomIzQzOwlnb3RvIGxvb2t1cDsKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuOwpAQCAtODUyLDEyICYjNDM7MTAyOCw1MyBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiYjNDM7CXN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi0mZ3Q7c2s7CiAKIAlpZiAobGlrZWx5KGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfUEFDS0VUKSkgewotCQlpZiAobGlrZWx5KGxsYy0mZ3Q7c3RhdGUgJmd0OyAxKSkgLyogbm90IGNsb3NlZCAqLwomIzQzOwkJaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7CiYjNDM7CQkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJCWJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spOwomIzQzOwkJCWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJCSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIHJldHJ5OwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8CiYjNDM7CQkJICAgIHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8CiYjNDM7CQkJICAgIGxsY19zayhuZXdzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNKSB7CiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQkJfQogCQkJcmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7Ci0JCWVsc2UKJiM0MzsJCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpCiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCX0gZWxzZSBpZiAobmV3c2sgJmFtcDsmYW1wOwomIzQzOwkJCSAgIGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkJICAgTExDX0lOQ09NSU5HX1FVRVVFRCkgewomIzQzOwkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQlpZiAobGxjX3NrKG5ld3NrKS0mZ3Q7c3RhdGUgJmx0Oz0gTExDX0NPTk5fU1RBVEVfQURNKSB7CiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQkJfQomIzQzOwkJCXJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpOwomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCX0gZWxzZSBpZiAobGlrZWx5KGxsYy0mZ3Q7c3RhdGUgJmd0OyAxKSkgewomIzQzOwkJCXJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpOwomIzQzOwkJfSBlbHNlIHsKIAkJCWdvdG8gb3V0X2tmcmVlX3NrYjsKJiM0MzsJCX0KIAl9IGVsc2UgaWYgKGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfRVZFTlQpIHsKIAkJLyogdGltZXIgZXhwaXJhdGlvbiBldmVudCAqLwogCQlpZiAobGlrZWx5KGxsYy0mZ3Q7c3RhdGUgJmd0OyAxKSkgIC8qIG5vdCBjbG9zZWQgKi8KQEAgLTg3MCw2ICYjNDM7MTA4NywyNCBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJfQogb3V0OgogCXJldHVybiByYzsKJiM0MztyZXRyeToKJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CSAgICBMTENfSU5DT01JTkdfUVVFVUVEKSB7CiYjNDM7CQlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCWlmIChsbGNfc2sobmV3c2spLSZndDtzdGF0ZSAmZ3Q7IExMQ19DT05OX1NUQVRFX0FETSkKJiM0MzsJCQlyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTsKJiM0MzsJCWVsc2UgewomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQl9CiYjNDM7CQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWdvdG8gb3V0X2tmcmVlX3NrYjsKIG91dF9rZnJlZV9za2I6CiAJa2ZyZWVfc2tiKHNrYik7CiAJZ290byBvdXQ7CkBAIC05NTksMTcgJiM0MzsxMTk0LDE4IEBAIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYykKIAogLyoqCiAgKglsbGNfc2tfZnJlZSAtIEZyZWVzIGEgTExDIHNvY2tldAotICoJQHNrOiAtIHNvY2tldCB0byBmcmVlCiYjNDM7ICoJQHNrOiBzb2NrZXQgdG8gZnJlZQomIzQzOyAqCUBzeW5jOiB3aGV0aGVyIHRvIHN5bmNocm9ub3VzbHkgc3RvcCB0aW1lcnMKICAqCi0gKglGcmVlcyBhIExMQyBzb2NrZXQKJiM0MzsgKglGcmVlcyBhIExMQyBzb2NrZXQuCiAgKi8KLXZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKQomIzQzO3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpCiB7CiAJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwogCiAJbGxjLSZndDtzdGF0ZSA9IExMQ19DT05OX09VVF9PRl9TVkM7CiAJLyogU3RvcCBhbGwgKHBvc3NpYmx5KSBydW5uaW5nIHRpbWVycyAqLwotCWxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpOwomIzQzOwlsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCBzeW5jKTsKICNpZmRlZiBERUJVR19MTENfQ09OTl9BTExPQwogCXByaW50ayhLRVJOX0lORk8gJiMzNDslczogdW5hY2txPSVkLCB0eHE9JWRcbiYjMzQ7LCBfX2Z1bmNfXywKIAkJc2tiX3F1ZXVlX2xlbigmYW1wO2xsYy0mZ3Q7cGR1X3VuYWNrX3EpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDExODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQgZm9yIExMQyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBwYXRjaCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIExMQyBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbCAoYG5ldC9sbGMvYCksIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHNvY2tldCBoYW5kbGluZyBkdXJpbmcgaW5jb21pbmcgY29ubmVjdGlvbnMsIGxpa2VseSBhaW1pbmcgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHRpZWQgdG8gc29ja2V0IGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggdGVuZCB0byBiZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpGaXJzdCwgbGV0JiMzOTtzIGlzb2xhdGUgdGhlIGNoYW5nZXMuIFdlJiMzOTt2ZSBnb3QgYWRkaXRpb25zIHRvIGBzdHJ1Y3QgbGxjX3NvY2tgIChuZXcgZmllbGRzIGBpbmNvbWluZ19zdGF0ZWAsIGBpbmNvbWluZ19saXN0ZW5lcmAsIGBpbmNvbWluZ193b3JrYCksIG1vZGlmaWNhdGlvbnMgaW4gYGFmX2xsYy5jYCBpbnZvbHZpbmcgc29ja2V0IHJlbGVhc2UgKGBsbGNfdWlfcmVsZWFzZWApLCBhbmQgbW9kaWZpY2F0aW9ucyBpbiBgbGxjX2Nvbm4uY2AgdG8gaGFuZGxlIHRoZSBsaWZlY3ljbGUgd2l0aCB0aGUgbmV3IGZpZWxkcywgd29ya3F1ZXVlIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnRyb2R1Y2Ugc3RhdGUgdHJhY2tpbmcgYW5kIGEgd29ya3F1ZXVlIHRvIG1hbmFnZSB0aGUgZnJlZWluZyBvZiBpbmNvbWluZyBzb2NrZXRzLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IERvZXMgdGhpcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBBcmUgdGhlcmUgbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlPyBOby4gQXJlIHRoZSBuZXcgYHN0cnVjdCBsbGNfc29ja2AgZmllbGRzIGluaXRpYWxpemVkIGJlZm9yZSB1c2U/IFllcywgdGhleSYjMzk7cmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrYC4gRG9lcyB0aGlzIHRvdWNoIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnM/IE5vLiBEb2VzIHRoaXMgY29weSBkYXRhIHRvIHVzZXIgc3BhY2U/IE5vLCBub3RoaW5nIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4KCkJhc2VkIG9uIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlc+KAlHNvY2tldCBsaWZlY3ljbGUsIGxvY2tpbmcsIGFuZCBzdGF0ZSBtYWNoaW5lIHRyYW5zaXRpb25z4oCUaXQgYXBwZWFycyB0byBiZSBhIGZpeCBmb3IgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIHRoZSBicmVhZCBhbmQgYnV0dGVyIG9mIEtBU0FOIGFuZCBMT0NLREVQLiBObyByZWQgZmxhZ3MgcG9pbnRpbmcgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSBhcmUgcHJlc2VudCBhdCB0aGlzIHBvaW50LgoKTGV0JiMzOTtzIGRvIGEgZmluYWwgY2hlY2suIFRoZSBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgIGZ1bmN0aW9uIGlzIGFkZGVkLCB3aGljaCBpbnZvbHZlcyBgbGxjX2FsbG9jX2ZyYW1lYCwgYGxsY19wZHVfaGVhZGVyX2luaXRgLCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAsIGFuZCBgbGxjX21hY19oZHJfaW5pdGAuIFdlJiMzOTtyZSBjcmVhdGluZyBhbmQgc2VuZGluZyBTS0JzLCBidXQgdHlwaWNhbGx5IGZ1bmN0aW9ucyBsaWtlIGBhbGxvY19za2JgIGFuZCBoZWFkZXIgaW5pdGlhbGl6YXRpb24gd3JpdGUgdGhlIGJ5dGVzIGV4YWN0bHkgYXMgbmVlZGVkLiBMZXQgbWUgcXVlcnkgZm9yIGBsbGNfYWxsb2NfZnJhbWVgIHRvIGJlIGNlcnRhaW4uCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBwYXRjaCwgYW5kIG5vIGluZGljYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsbGNfYWxsb2NfZnJhbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbGxjX3NhcC5oPTE3PXZvaWQgbGxjX3NhdmVfcHJpbWl0aXZlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L2xsY19zYXAuaC0xOC1cdFx0XHR1bnNpZ25lZCBjaGFyIHByaW0pO1xuaW5jbHVkZS9uZXQvbGxjX3NhcC5oOjE5OnN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9uZXQvbGxjX3NhcC5oLTIwLVx0XHRcdFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTE5Mj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kaXNjX2NtZF9wX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMTk1LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjE5NjpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtMTk3LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0yMTc9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0yMjAtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjIxOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMjItXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTI0Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kbV9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTI0Ni1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzoyNDc6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTI0OC1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MjY3PWludCBsbGNfY29ubl9hY19zZW5kX2ZybXJfcnNwX2Zfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0yNzktXHRcdGZfYml0ID0gMDtcbm5ldC9sbGMvbGxjX2NfYWMuYzoyODA6XHRuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yODEtXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0zMDE9aW50IGxsY19jb25uX2FjX3Jlc2VuZF9mcm1yX3JzcF9mX3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMzA0LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjMwNTpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMDYtXHRcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY19mcm1yX2luZm8pKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MzI4PWludCBsbGNfY29ubl9hY19yZXNlbmRfZnJtcl9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTMzNS1cdGxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsIFx1MDAyNmZfYml0KTtcbm5ldC9sbGMvbGxjX2NfYWMuYzozMzY6XHRuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMzctXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz00MjE9aW50IGxsY19jb25uX2FjX3Jlc2VuZF9pX3h4eF94X3NldF8wX29yX3NlbmRfcnIoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy00MjctXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NDI4Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy00MjktXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTQ1OT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy00NjItXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NDYzOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy00NjQtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTQ4Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy00ODYtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NDg3Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy00ODgtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTUwNz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01MTAtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NTExOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy01MTItXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTUzMT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01MzQtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NTM1Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy01MzYtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTU1NT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01NTgtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NTU5Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy01NjAtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTU3OT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01ODItXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NTgzOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy01ODQtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTYxNT1pbnQgbGxjX2Nvbm5fYWNfb3B0X3NlbmRfcm5yX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNjE4LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjYxOTpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNjIwLVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz02Mzk9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy02NDItXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NjQzOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy02NDQtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTY2Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTY2Ni1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo2Njc6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTY2OC1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9Njg4PWludCBsbGNfY29ubl9hY19zZW5kX2Fja19yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTY5MS1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo2OTI6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTY5My1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NzEyPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzE1LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjcxNjpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNzE3LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz03MzY9aW50IGxsY19jb25uX2FjX3NlbmRfYWNrX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzM5LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjc0MDpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNzQxLVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz03NzA9aW50IGxsY19jb25uX2FjX3NlbmRfc2FibWVfY21kX3Bfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy03NzMtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6Nzc0Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy03NzUtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTc5OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF91YV9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTgwMi1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo4MDM6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTgwNC1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9OTU5PXN0YXRpYyBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9yc3BfZl9zZXRfYWNrcGYoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy05NjMtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6OTY0Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy05NjUtXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTg1Mj1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy04NTctXG5uZXQvbGxjL2xsY19jb25uLmM6ODU4Olx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG5uZXQvbGxjL2xsY19jb25uLmMtODU5LVx0aWYgKCFuc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0xMDU9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfeGlkX3Ioc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19zX2FjLmMtMTEzLVx0bGxjX3BkdV9kZWNvZGVfc3NhcChza2IsIFx1MDAyNmRzYXApO1xubmV0L2xsYy9sbGNfc19hYy5jOjExNDpcdG5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXG5uZXQvbGxjL2xsY19zX2FjLmMtMTE1LVx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY194aWRfaW5mbykpO1xuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0xNDg9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfdGVzdF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTE2My1cdGRhdGFfc2l6ZSA9IG50b2hzKGV0aF9oZHIoc2tiKS1cdTAwM2VoX3Byb3RvKSAtIDM7XG5uZXQvbGxjL2xsY19zX2FjLmM6MTY0Olx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgZGF0YV9zaXplKTtcbm5ldC9sbGMvbGxjX3NfYWMuYy0xNjUtXHRpZiAoIW5za2IpXG4tLVxubmV0L2xsYy9sbGNfc2FwLmM9MjI9c3RhdGljIGludCBsbGNfbWFjX2hlYWRlcl9sZW4odW5zaWduZWQgc2hvcnQgZGV2dHlwZSlcbi0tXG5uZXQvbGxjL2xsY19zYXAuYy0zMi0vKipcbm5ldC9sbGMvbGxjX3NhcC5jOjMzOiAqXHRsbGNfYWxsb2NfZnJhbWUgLSBhbGxvY2F0ZXMgc2tfYnVmZiBmb3IgZnJhbWVcbm5ldC9sbGMvbGxjX3NhcC5jLTM0LSAqXHRAc2s6ICBzb2NrZXQgdG8gYWxsb2NhdGUgZnJhbWUgdG9cbi0tXG5uZXQvbGxjL2xsY19zYXAuYy00MS0gKi9cbm5ldC9sbGMvbGxjX3NhcC5jOjQyOnN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2xsYy9sbGNfc2FwLmMtNDMtXHRcdFx0XHR1OCB0eXBlLCB1MzIgZGF0YV9zaXplKVxuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYz00Mj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfeGlkX3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtNDUtXHRpbnQgcmMgPSAxO1xubmV0L2xsYy9sbGNfc3RhdGlvbi5jOjQ2Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtNDctXHRcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY194aWRfaW5mbykpO1xuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYz02Nj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfdGVzdF9yKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTc3LVx0ZGF0YV9zaXplID0gbnRvaHMoZXRoX2hkcihza2IpLVx1MDAzZWhfcHJvdG8pIC0gMztcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo3ODpcdG5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIGRhdGFfc2l6ZSk7XG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtNzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTY0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgbGxjX2FsbG9jX2ZyYW1lYCBGdW5jdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgbGxjX2FsbG9jX2ZyYW1lYCwgYW5kIGl0cyByb2xlIGluIGFsbG9jYXRpbmcgYW4gYHNrYmAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgbmV0d29yayBidWZmZXIgc3RydWN0dXJlLCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGNsZWFybHkgY3JpdGljYWwuIExldCYjMzk7cyBkaWcgaW4gYW5kIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBsbGNfYWxsb2NfZnJhbWVgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGludGVyZmFjaW5nIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2tiIGFsbG9jYXRpb24gbWVjaGFuaXNtcy4gV2hhdCYjMzk7cyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgaXQgdXNpbmcgYSBzdGFuZGFyZCBga21hbGxvY2AgYXBwcm9hY2gsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIGZvciBza2JzPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGZsYWdzIG9yIHBhcmFtZXRlcnMgcGFzc2VkIHRoYXQgaGludCBhdCBMTEMtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGZvciB0aGUgbmV0d29yayBmcmFtZT8gS25vd2luZyBob3cgaXQmIzM5O3MgYWxsb2NhdGluZywgaW5pdGlhbGl6aW5nLCBhbmQgcG90ZW50aWFsbHkgbGlua2luZyB0aGlzIGBza2JgIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBwcm90b2NvbCBzdGFjay4gSSBuZWVkIHRvIHNlZSBpZiBpdCB1dGlsaXplcyBhbnkgY3VzdG9tIGFsbG9jYXRvcnMsIG9yIGlmIGl0IG1pZ2h0IGJlIHN1YmplY3QgdG8gZnJhZ21lbnRhdGlvbiBpc3N1ZXMgaWYgaGFuZGxpbmcgbGFyZ2VyIGZyYW1lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNrX2J1ZmYgXFwqbGxjX2FsbG9jX2ZyYW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xsY19zYXAuaD0xNz12b2lkIGxsY19zYXZlX3ByaW1pdGl2ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL25ldC9sbGNfc2FwLmgtMTgtXHRcdFx0dW5zaWduZWQgY2hhciBwcmltKTtcbmluY2x1ZGUvbmV0L2xsY19zYXAuaDoxOTpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L2xsY19zYXAuaC0yMC1cdFx0XHRcdHU4IHR5cGUsIHUzMiBkYXRhX3NpemUpO1xuLS1cbm5ldC9sbGMvbGxjX3NhcC5jPTIyPXN0YXRpYyBpbnQgbGxjX21hY19oZWFkZXJfbGVuKHVuc2lnbmVkIHNob3J0IGRldnR5cGUpXG4tLVxubmV0L2xsYy9sbGNfc2FwLmMtNDEtICovXG5uZXQvbGxjL2xsY19zYXAuYzo0MjpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9sbGMvbGxjX3NhcC5jLTQzLVx0XHRcdFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBsbGNfc2FwLmNgIC0gTGluZSA0MioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGluIHRoZSBMTEMgKExvZ2ljYWwgTGluayBDb250cm9sKSBzdWJsYXllciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFNlcnZpY2UgQWNjZXNzIFBvaW50IChTQVApIGZ1bmN0aW9uYWxpdHkuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBuZXQvbGxjL2xsY19zYXAuY2AgYmVjYXVzZSBpdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIFNBUC1yZWxhdGVkIGNvZGUuIE15IGh1bmNoIGlzIHRoYXQgdGhpcyBmaWxlIHdpbGwgY29udGFpbiB0aGUgcmVnaXN0cmF0aW9uLCBsb29rdXAsIGFuZCBwb3RlbnRpYWwgaGFuZGxpbmcgb2YgU0FQcy4gTm93LCBzaW5jZSBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjayBhcmNoaXRlY3R1cmUsIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIGxpbmUgNDIuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdldCBtZSBpbnRvIHRoZSBoZWFydCBvZiBhIHJlbGV2YW50IGZ1bmN0aW9uIG9yIGRhdGEgc3RydWN0dXJlIGRlZmluaXRpb24uIERlcGVuZGluZyBvbiB0aGUgY29kZSBzdHlsZSwgbGluZSA0MiBjb3VsZCBiZSB0aGUgc3RhcnQgb2YgYSBmdW5jdGlvbiBvciBhIGdsb2JhbCB2YXJpYWJsZS4gS25vd2luZyB0aGUgc3RydWN0dXJlIG9mIHRoZSBmaWxlIGlzIGtleSwgc28gbGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQgdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2xsYy9sbGNfc2FwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0fVxuICAzMTpcdFxuICAzMjpcdC8qKlxuICAzMzpcdCAqXHRsbGNfYWxsb2NfZnJhbWUgLSBhbGxvY2F0ZXMgc2tfYnVmZiBmb3IgZnJhbWVcbiAgMzQ6XHQgKlx0QHNrOiAgc29ja2V0IHRvIGFsbG9jYXRlIGZyYW1lIHRvXG4gIDM1Olx0ICpcdEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRoaXMgc2tiIHdpbGwgYmUgc2VudCBvdmVyXG4gIDM2Olx0ICpcdEB0eXBlOiBwZHUgdHlwZSB0byBhbGxvY2F0ZVxuICAzNzpcdCAqXHRAZGF0YV9zaXplOiBkYXRhIHNpemUgdG8gYWxsb2NhdGVcbiAgMzg6XHQgKlxuICAzOTpcdCAqXHRBbGxvY2F0ZXMgYW4gc2tfYnVmZiBmb3IgZnJhbWUgYW5kIGluaXRpYWxpemVzIHNrX2J1ZmYgZmllbGRzLlxuICA0MDpcdCAqXHRSZXR1cm5zIGFsbG9jYXRlZCBza2Igb3IgJU5VTEwgd2hlbiBvdXQgb2YgbWVtb3J5LlxuICA0MTpcdCAqL1xuICA0MjpcdHN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICA0MzpcdFx0XHRcdFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcbiAgNDQ6XHR7XG4gIDQ1Olx0XHRpbnQgaGxlbiA9IHR5cGUgPT0gTExDX1BEVV9UWVBFX1UgPyAzIDogNDtcbiAgNDY6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gIDQ3Olx0XG4gIDQ4Olx0XHRobGVuICYjNDM7PSBsbGNfbWFjX2hlYWRlcl9sZW4oZGV2LVx1MDAzZXR5cGUpO1xuICA0OTpcdFx0c2tiID0gYWxsb2Nfc2tiKGhsZW4gJiM0MzsgZGF0YV9zaXplLCBHRlBfQVRPTUlDKTtcbiAgNTA6XHRcbiAgNTE6XHRcdGlmIChza2IpIHtcbiAgNTI6XHRcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiAgNTM6XHRcdFx0c2tiX3Jlc2VydmUoc2tiLCBobGVuKTtcbiAgNTQ6XHRcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gIDU1Olx0XHRcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gIDU2Olx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTtcbiAgNTc6XHRcdFx0c2tiLVx1MDAzZWRldiAgICAgID0gZGV2O1xuICA1ODpcdFx0XHRpZiAoc2sgIT0gTlVMTClcbiAgNTk6XHRcdFx0XHRza2Jfc2V0X293bmVyX3coc2tiLCBzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDU3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMTEMgRnJhbWUgQWxsb2NhdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgbGxjX2FsbG9jX2ZyYW1lYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSB1c2Ugb2YgYGFsbG9jX3NrYmAg4oCTIHRoYXQmIzM5O3Mgc3RhbmRhcmQgZm9yIGFsbG9jYXRpbmcgdGhlIHNvY2tldCBidWZmZXIsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIG5ldHdvcmsgY29tbXVuaWNhdGlvbi4gTm93LCBpdCBsb29rcyBsaWtlIGFmdGVyIHRoZSBTS0IgaXMgYWxsb2NhdGVkLCB0aGVyZSBhcmUgc2V2ZXJhbCBpbml0aWFsaXphdGlvbiBzdGVwcy4gU3BlY2lmaWNhbGx5LCBgbGxjX3BkdV9oZWFkZXJfaW5pdGAsIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCwgYW5kIGBsbGNfbWFjX2hkcl9pbml0YCBhcmUgY2FsbGVkLCBhbmQgSSBzdXNwZWN0IHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgcGllY2VzIHRoYXQgcG9wdWxhdGUgdGhlIGhlYWRlcnMgd2l0aGluIHRoZSBTS0IuIE15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGJvdGggYGxsY19wZHVfaGVhZGVyX2luaXRgIGFuZCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBQcm90b2NvbCBEYXRhIFVuaXQgKFBEVSkgaGVhZGVycyBhbmQgdGhlIERhdGEgTWFuYWdlbWVudCByZXNwb25zZSBhcmUgYmVpbmcgY29uc3RydWN0ZWQuIFRoYXQmIzM5O2xsIGJlIGtleSB0byBmaWd1cmluZyBvdXQgaG93IHRoZSBmcmFtZSBpcyBwdXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgbGxjX3BkdV9oZWFkZXJfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sbGNfcGR1Lmg9MjEyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19wZHVfdW4gKmxsY19wZHVfdW5faGRyKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTIyNi0gKi9cbmluY2x1ZGUvbmV0L2xsY19wZHUuaDoyMjc6c3RhdGljIGlubGluZSB2b2lkIGxsY19wZHVfaGVhZGVyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHlwZSxcbmluY2x1ZGUvbmV0L2xsY19wZHUuaC0yMjgtXHRcdFx0XHQgICAgICAgdTggc3NhcCwgdTggZHNhcCwgdTggY3IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTUwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBMTEMgUERVIFN0cnVjdHVyZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBMTEMgUERVIHN0cnVjdHVyZSwgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGluY2x1ZGUvbmV0L2xsY19wZHUuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMjcuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4gdG8gZ2V0IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFueSBkZWZpbmVkIGNvbnN0YW50cyByZWxhdGVkIHRvIHRoZSBwcm90b2NvbCBkYXRhIHVuaXQuIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIGZpZWxkcy4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCBob3cgdGhlIHZhcmlvdXMgY29tcG9uZW50cyBhcmUgYXJyYW5nZWQgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBlYWNoIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xsY19wZHUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0ICpcdEB0eXBlOiB0eXBlIG9mIFBEVSAoVSwgSSBvciBTKS5cbiAyMjE6XHQgKlx0QHNzYXA6IHNvdXJjZSBzYXAuXG4gMjIyOlx0ICpcdEBkc2FwOiBkZXN0aW5hdGlvbiBzYXAuXG4gMjIzOlx0ICpcdEBjcjogY29tbWFuZC9yZXNwb25zZSBiaXQgKDAgb3IgMSkuXG4gMjI0Olx0ICpcbiAyMjU6XHQgKlx0VGhpcyBmdW5jdGlvbiBzZXRzIERTQVAsIFNTQVAgYW5kIGNvbW1hbmQvUmVzcG9uc2UgYml0IGluIExMQyBoZWFkZXIuXG4gMjI2Olx0ICovXG4gMjI3Olx0c3RhdGljIGlubGluZSB2b2lkIGxsY19wZHVfaGVhZGVyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHlwZSxcbiAyMjg6XHRcdFx0XHRcdCAgICAgICB1OCBzc2FwLCB1OCBkc2FwLCB1OCBjcilcbiAyMjk6XHR7XG4gMjMwOlx0XHRpbnQgaGxlbiA9IDQ7IC8qIGRlZmF1bHQgdmFsdWUgZm9yIEkgYW5kIFMgdHlwZXMgKi9cbiAyMzE6XHRcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHU7XG4gMjMyOlx0XG4gMjMzOlx0XHRzd2l0Y2ggKHR5cGUpIHtcbiAyMzQ6XHRcdGNhc2UgTExDX1BEVV9UWVBFX1U6XG4gMjM1Olx0XHRcdGhsZW4gPSAzO1xuIDIzNjpcdFx0XHRicmVhaztcbiAyMzc6XHRcdGNhc2UgTExDX1BEVV9UWVBFX1VfWElEOlxuIDIzODpcdFx0XHRobGVuID0gNjtcbiAyMzk6XHRcdFx0YnJlYWs7XG4gMjQwOlx0XHR9XG4gMjQxOlx0XG4gMjQyOlx0XHRza2JfcHVzaChza2IsIGhsZW4pO1xuIDI0MzpcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gMjQ0Olx0XHRwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpO1xuIDI0NTpcdFx0cGR1LVx1MDAzZWRzYXAgPSBkc2FwO1xuIDI0NjpcdFx0cGR1LVx1MDAzZXNzYXAgPSBzc2FwO1xuIDI0NzpcdFx0cGR1LVx1MDAzZXNzYXAgfD0gY3I7XG4gMjQ4Olx0fVxuIDI0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYyOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYC4gSSBuZWVkIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoaXMgZnVuY3Rpb24gYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgb3ZlcmFsbCBwcm90b2NvbCBzdGFjay4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSBpdHMgcm9sZTsgaXQgc2VlbXMgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIERhdGEgTW9kZSAoRE0pIHJlc3BvbnNlLCBwcm9iYWJseSByZWxhdGVkIHRvIExMQyAoTG9naWNhbCBMaW5rIENvbnRyb2wpIGluaXRpYWxpemF0aW9uLiBJJiMzOTtsbCBtZW50YWxseSBtYXAgb3V0IHRoZSB0eXBpY2FsIGNhbGwgZmxvdyBhcm91bmQgdGhpcyBwb2ludCDigJMgd2hlcmUgZG9lcyB0aGlzIGZpdCB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBzZXF1ZW5jZT8gSXMgdGhpcyB0cmlnZ2VyZWQgYnkgYW4gaW5jb21pbmcgRE0gZnJhbWU/IElzIGl0IGEgcmVzcG9uc2UgdG8gYSBzcGVjaWZpYyByZXF1ZXN0IGZyb20gdGhlIHBlZXI/IEtub3dpbmcgdGhlIGNvbnRleHQsIEkgY2FuIHF1aWNrbHkgaG9uZSBpbiBvbiB0aGUgY29yZSBsb2dpYyBhbmQgY3JpdGljYWwgcGFyYW1ldGVycy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmdW5jdGlvbi4gV2hhdCBmYWlsdXJlIGNhc2VzIGFyZSBjb3ZlcmVkPyBBcmUgdGhleSBoYW5kbGVkIGdyYWNlZnVsbHksIG9yIGRvIHRoZXkgcG90ZW50aWFsbHkgbGVhdmUgdGhlIHN5c3RlbSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGU/IEZpbmFsbHksIEkgbmVlZCB0byBjb25zaWRlciBpdHMgaW50ZXJhY3Rpb25zIHdpdGggbG93ZXIgbGF5ZXJzLiBEb2VzIGl0IGNhbGwgYW55IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGxlYWQgdG8gcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3Igc3RhdGUgY2hhbmdlcyBpbiB0aGUgbGluayBsYXllcj8gQXJlIHRoZXNlIHByb3Blcmx5IHN5bmNocm9uaXplZCBhbmQgbWFuYWdlZD8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjb2RlIGFuZCBjb25maXJtIHRoaXMgbWVudGFsIG1vZGVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGxsY19wZHVfaW5pdF9hc19kbV9yc3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbGxjX3BkdS5oPTQzMD12b2lkIGxsY19wZHVfaW5pdF9hc19zYWJtZV9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcF9iaXQpO1xuaW5jbHVkZS9uZXQvbGxjX3BkdS5oOjQzMTp2b2lkIGxsY19wZHVfaW5pdF9hc19kbV9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZl9iaXQpO1xuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTQzMi12b2lkIGxsY19wZHVfaW5pdF9hc19mcm1yX3JzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGxjX3BkdV9zbiAqcHJldl9wZHUsXG4tLVxubmV0L2xsYy9sbGNfcGR1LmM9MTc4PXZvaWQgbGxjX3BkdV9pbml0X2FzX3NhYm1lX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwX2JpdClcbi0tXG5uZXQvbGxjL2xsY19wZHUuYy0xOTMtICovXG5uZXQvbGxjL2xsY19wZHUuYzoxOTQ6dm9pZCBsbGNfcGR1X2luaXRfYXNfZG1fcnNwKHN0cnVjdCBza19idWZmICpza2IsIHU4IGZfYml0KVxubmV0L2xsYy9sbGNfcGR1LmMtMTk1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMjkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbmV0L2xsYy9sbGNfcGR1LmNgIGFyb3VuZCBMaW5lIDE5NCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgbmV0L2xsYy9sbGNfcGR1LmNgLiBCYXNlZCBvbiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgMTk0LiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHBhcnQgb2YgdGhlIExMQyAoTG9naWNhbCBMaW5rIENvbnRyb2wpIFBEVSAoUHJvdG9jb2wgRGF0YSBVbml0KSBoYW5kbGluZywgcHJvYmFibHkgZWl0aGVyIGNvbnN0cnVjdGluZywgcGFyc2luZyBvciBwcm9jZXNzaW5nIHRoZSBkYXRhIHdpdGhpbiB0aGUgTExDIGhlYWRlciBvciBwYXlsb2FkLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiB3aWxsIHRlbGwgbWUgdGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxvdyBhbmQgd2hldGhlciBpdOKAmXMgcmVsYXRlZCB0byBpbmNvbWluZyBmcmFtZXMsIG91dGdvaW5nIGZyYW1lcywgY29ubmVjdGlvbiBzZXR1cCBvciBkYXRhIHRyYW5zZmVyLiBHaXZlbiB0aGF0IHRoaXMgaXMgTExDLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgRFNBUCAoRGVzdGluYXRpb24gU2VydmljZSBBY2Nlc3MgUG9pbnQpLCBTU0FQIChTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQpLCBDb250cm9sIGZpZWxkcywgcG90ZW50aWFsbHkgYW4gSW5mb3JtYXRpb24gZmllbGQsIGFuZCBtYXliZSBldmVuIHNvbWUgc3VibmV0d29yayBhY2Nlc3MgcHJvdG9jb2wgZGV0YWlscy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGVycm9ycywgc3RhdGUgdHJhbnNpdGlvbnMsIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIE1BQyBsYXllci4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgbGluZSAxOTQgbWlnaHQgaG9sZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbGxjL2xsY19wZHUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0ICpcdEBmX2JpdDogVGhlIEYgYml0IHRvIHNldCBpbiB0aGUgUERVXG4gMTkxOlx0ICpcbiAxOTI6XHQgKlx0QnVpbGRzIGEgcGR1IGZyYW1lIGFzIGEgRE0gcmVzcG9uc2UuXG4gMTkzOlx0ICovXG4gMTk0Olx0dm9pZCBsbGNfcGR1X2luaXRfYXNfZG1fcnNwKHN0cnVjdCBza19idWZmICpza2IsIHU4IGZfYml0KVxuIDE5NTpcdHtcbiAxOTY6XHRcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpO1xuIDE5NzpcdFxuIDE5ODpcdFx0cGR1LVx1MDAzZWN0cmxfMSAgPSBMTENfUERVX1RZUEVfVTtcbiAxOTk6XHRcdHBkdS1cdTAwM2VjdHJsXzEgfD0gTExDXzJfUERVX1JTUF9ETTtcbiAyMDA6XHRcdHBkdS1cdTAwM2VjdHJsXzEgfD0gKChmX2JpdCBcdTAwMjYgMSkgXHUwMDNjXHUwMDNjIDQpIFx1MDAyNiBMTENfVV9QRl9CSVRfTUFTSztcbiAyMDE6XHR9XG4gMjAyOlx0XG4gMjAzOlx0LyoqXG4gMjA0Olx0ICpcdGxsY19wZHVfaW5pdF9hc19mcm1yX3JzcCAtIGJ1aWxkcyBGUk1SIHJlc3BvbnNlIFBEVVxuIDIwNTpcdCAqXHRAc2tiOiBBZGRyZXNzIG9mIHRoZSBmcmFtZSB0byBidWlsZFxuIDIwNjpcdCAqXHRAcHJldl9wZHU6IFRoZSByZWplY3RlZCBQRFUgZnJhbWVcbiAyMDc6XHQgKlx0QGZfYml0OiBUaGUgRiBiaXQgdG8gc2V0IGluIHRoZSBQRFVcbiAyMDg6XHQgKlx0QHZzOiB0eCBzdGF0ZSB2YXJpIHZhbHVlIGZvciB0aGUgZGF0YSBsaW5rIGNvbm4gYXQgdGhlIHJlamVjdGluZyBMTENcbiAyMDk6XHQgKlx0QHZyOiByeCBzdGF0ZSB2YXIgdmFsdWUgZm9yIHRoZSBkYXRhIGxpbmsgY29ubiBhdCB0aGUgcmVqZWN0aW5nIExMQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk0MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExMQyBQRFUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgTExDIFBEVSBpcyBpbml0aWFsaXplZC4gYGxsY19wZHVfaGVhZGVyX2luaXRgIGlzIHRha2luZyBjYXJlIG9mIHNldHRpbmcgdGhlIGBkc2FwYCBhbmQgYHNzYXBgIGZpZWxkcy4gVGhlbiwgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBgY3RybF8xYCBmaWVsZC4gUmlnaHQsIHNvIGZhciwgc28gZ29vZC4KCkZvciB0aGUgYExMQ19QRFVfVFlQRV9VYCBQRFUgdHlwZSwgdGhlIGhlYWRlciBsZW5ndGgsIGBobGVuYCwgaXMgc2V0IHRvIDMgYnl0ZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZSBMTEMgc3VibGF5ZXIuIE5vdywgbGV0JiMzOTtzIGNvbm5lY3QgdGhlIGRvdHMuIFRoZSBgc3RydWN0IGxsY19wZHVfdW5gIHN0cnVjdHVyZSBpcyBkZWZpbmVkIHRvIGhvbGQgdGhlIGBkc2FwYCwgYHNzYXBgLCBhbmQgYGN0cmxfMWAgZmllbGRzLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgaXMgY29ycmVjdC4gSeKAmW0gZ29pbmcgdG8gZ28gYWhlYWQgYW5kIGNoZWNrIHRoYXQgYHN0cnVjdCBsbGNfcGR1X3VuYCBkZWZpbml0aW9uIGFnYWluLiBKdXN0IHRvIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGxsY19wZHVfdW4gXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xsY19wZHUuaD0yMDA9c3RhdGljIGlubGluZSBzdHJ1Y3QgbGxjX3BkdV9zbiAqbGxjX3BkdV9zbl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjA1LS8qIFVuLW51bWJlcmVkIFBEVSBmb3JtYXQgKDMgYnl0ZXMgaW4gbGVuZ3RoKSAqL1xuaW5jbHVkZS9uZXQvbGxjX3BkdS5oOjIwNjpzdHJ1Y3QgbGxjX3BkdV91biB7XG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjA3LVx0dTggZHNhcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIExMQyBQRFUgU3RydWN0dXJlKioKCk9rYXksIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBMb2dpY2FsIExpbmsgQ29udHJvbCAoTExDKSBQcm90b2NvbCBEYXRhIFVuaXQgKFBEVSkgZm9ybWF0LCBwYXJ0aWN1bGFybHkgaG93IGl0JiMzOTtzIGRlZmluZWQgaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGluY2x1ZGUvbmV0L2xsY19wZHUuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMDYuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uIHJlc2lkZXMsIG9yIGF0IGxlYXN0IGEgZ29vZCBjaHVuayBvZiByZWxhdGVkIGVudW1zIGFuZCBzdHJ1Y3R1cmVzLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBsYXlvdXQgYW5kIGFueSBjcnVjaWFsIGZpZWxkcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJiMzOTttIGRlYnVnZ2luZyBvciB0aGUgb3B0aW1pemF0aW9uIEkmIzM5O20gY29uc2lkZXJpbmcuIFRoaW5raW5nIHRoaXMgd291bGQgYmUgdGhlIGJlc3QgbG9jYXRpb24gdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbGxjX3BkdS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGNfcGR1X3NuICpsbGNfcGR1X3NuX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDIwMTpcdHtcbiAyMDI6XHRcdHJldHVybiAoc3RydWN0IGxsY19wZHVfc24gKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiAyMDM6XHR9XG4gMjA0Olx0XG4gMjA1Olx0LyogVW4tbnVtYmVyZWQgUERVIGZvcm1hdCAoMyBieXRlcyBpbiBsZW5ndGgpICovXG4gMjA2Olx0c3RydWN0IGxsY19wZHVfdW4ge1xuIDIwNzpcdFx0dTggZHNhcDtcbiAyMDg6XHRcdHU4IHNzYXA7XG4gMjA5Olx0XHR1OCBjdHJsXzE7XG4gMjEwOlx0fSBfX3BhY2tlZDtcbiAyMTE6XHRcbiAyMTI6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGNfcGR1X3VuICpsbGNfcGR1X3VuX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDIxMzpcdHtcbiAyMTQ6XHRcdHJldHVybiAoc3RydWN0IGxsY19wZHVfdW4gKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiAyMTU6XHR9XG4gMjE2Olx0XG4gMjE3Olx0LyoqXG4gMjE4Olx0ICpcdGxsY19wZHVfaGVhZGVyX2luaXQgLSBpbml0aWFsaXplcyBwZHUgaGVhZGVyXG4gMjE5Olx0ICpcdEBza2I6IGlucHV0IHNrYiB0aGF0IGhlYWRlciBtdXN0IGJlIHNldCBpbnRvIGl0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk3NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkxMQyBQRFUgSW5pdGlhbGl6YXRpb246IEEgUXVpY2sgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20ganVzdCBxdWlja2x5IGdvaW5nIG92ZXIgdGhlIExMQyBQRFUgaW5pdGlhbGl6YXRpb24gdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkgc2VlIHRoYXQgdGhlIGBzdHJ1Y3QgbGxjX3BkdV91bmAgaXMsIGFzIGV4cGVjdGVkLCBhIGNvbXBhY3QgMyBieXRlcy4gTm93LCBJIHJlbWVtYmVyIHRoYXQgYGxsY19wZHVfaGVhZGVyX2luaXRgIGNsZWFubHkgc2V0cyB0aGUgYGRzYXBgIGFuZCBgc3NhcGAgZmllbGRzLiBFeGNlbGxlbnQuIFRoZW4sIHRvIHJvdW5kIHRoaW5ncyBvdXQsIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCB0YWtlcyBjYXJlIG9mIHRoZSBgY3RybF8xYCBieXRlLgoKU28sIGZyb20gd2hhdCBJIGNhbiBzZWUgaGVyZSwgYWxsIDMgYnl0ZXMgd2l0aGluIHRoYXQgc3RydWN0dXJlIGFyZSBkZWZpbml0ZWx5IGluaXRpYWxpemVkLiBJJiMzOTttIGp1c3Qgd29uZGVyaW5nIGlmIHRoZXJlIGlzIGFueXRoaW5nIEkgc2hvdWxkIGJlIGF3YXJlIG9mIHJlZ2FyZGluZyBgbGxjX21hY19oZHJfaW5pdGAgdGhhdCBJIGFtIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBsbGNfbWFjX2hkcl9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xsYy5oPTk0PWludCBsbGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsXG4tLVxuaW5jbHVkZS9uZXQvbGxjLmgtOTYtXG5pbmNsdWRlL25ldC9sbGMuaDo5NzppbnQgbGxjX21hY19oZHJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSxcbmluY2x1ZGUvbmV0L2xsYy5oLTk4LVx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhKTtcbi0tXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0yNC0gKi9cbm5ldC9sbGMvbGxjX291dHB1dC5jOjI1OmludCBsbGNfbWFjX2hkcl9pbml0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0yNi1cdFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDY2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlIGZvciBgbmV0L2xsYy9sbGNfb3V0cHV0LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgb3V0cHV0IHByb2Nlc3MgaXMgaGFuZGxlZCB0aGVyZS4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZWN0aW9uIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgaW4gdGhlIExMQyBsYXllciwgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgbG9naWMgYXQgdGhpcyBwb2ludCBpbiB0aGUgY29kZS4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyBzZWN0aW9uIHByb2JhYmx5IHRvdWNoZXMgb24gZnJhbWUgZm9ybWF0dGluZywgcXVldWluZywgYW5kIHBvc3NpYmx5IGludGVyYWN0aW9uIHdpdGggbG93ZXItbGV2ZWwgZHJpdmVycy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gYW55IHN1YnRsZSBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgYm90dGxlbmVja3MuIEdldHRpbmcgdGhlIGRldGFpbHMgcmlnaHQgaGVyZSBjYW4gbWFrZSBhIGJpZyBkaWZmZXJlbmNlLCBlc3BlY2lhbGx5IGluIGhpZ2gtdGhyb3VnaHB1dCBlbnZpcm9ubWVudHMuIFRoaXMgd2lsbCBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbGxjL2xsY19vdXRwdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQgKlx0QGRhOiBUaGUgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3NcbiAgMjE6XHQgKlxuICAyMjpcdCAqXHRGaWxscyBNQUMgaGVhZGVyIGZpZWxkcywgZGVwZW5kaW5nIG9uIE1BQyB0eXBlLiBSZXR1cm5zIDAsIElmIE1BQyB0eXBlXG4gIDIzOlx0ICpcdGlzIGEgdmFsaWQgdHlwZSBhbmQgaW5pdGlhbGl6YXRpb24gY29tcGxldGVzIGNvcnJlY3RseSAxLCBvdGhlcndpc2UuXG4gIDI0Olx0ICovXG4gIDI1Olx0aW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgMjY6XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGEpXG4gIDI3Olx0e1xuICAyODpcdFx0aW50IHJjID0gLUVJTlZBTDtcbiAgMjk6XHRcbiAgMzA6XHRcdHN3aXRjaCAoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlKSB7XG4gIDMxOlx0XHRjYXNlIEFSUEhSRF9FVEhFUjpcbiAgMzI6XHRcdGNhc2UgQVJQSFJEX0xPT1BCQUNLOlxuICAzMzpcdFx0XHRyYyA9IGRldl9oYXJkX2hlYWRlcihza2IsIHNrYi1cdTAwM2VkZXYsIEVUSF9QXzgwMl8yLCBkYSwgc2EsXG4gIDM0Olx0XHRcdFx0XHQgICAgIHNrYi1cdTAwM2VsZW4pO1xuICAzNTpcdFx0XHRpZiAocmMgXHUwMDNlIDApXG4gIDM2Olx0XHRcdFx0cmMgPSAwO1xuICAzNzpcdFx0XHRicmVhaztcbiAgMzg6XHRcdGRlZmF1bHQ6XG4gIDM5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk2OAoJCQkJCQkJb3V0cHV0OiAyMzcKCQkJCQkJCXRob3VnaHRzOiAzNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FmZXR5KioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUg4oCTIGEgcmFjZSBjb25kaXRpb24sIHNwZWNpZmljYWxseSBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBpbiB0aGUgTExDIHByb3RvY29sJiMzOTtzIGluY29taW5nIGNvbm5lY3Rpb24gaGFuZGxpbmcuIFRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCBhIGxpc3RlbmluZyBzb2NrZXQgY2FuIGJlIGRlc3Ryb3llZCB3aGlsZSBjaGlsZCBzb2NrZXRzIChpbmNvbWluZyBjb25uZWN0aW9ucykgYXJlIHN0aWxsIGluIGEgcGVuZGluZyBvciBxdWV1ZWQgc3RhdGUuIFRoaXMgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgZWxlZ2FudDogaXQgaW50cm9kdWNlcyBhIHN0YXRlIG1hY2hpbmUgKGBpbmNvbWluZ19zdGF0ZWApIHRvIHRyYWNrIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgaW5jb21pbmcgc29ja2V0cyBhbmQgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCkgdG8gZGVmZXIgdGhlaXIgZnJlZWluZy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGNsZWFudXAgaGFwcGVucyBzYWZlbHksIHJlc29sdmluZyB0aGUgcmFjZSBjb25kaXRpb24uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGtpbmQgb2YgYnVnLCB0aGlzICpzcGVjaWZpYyogdHlwZSBvZiB1c2UtYWZ0ZXItZnJlZSwgaXMgZXhhY3RseSB3aGF0IEtBU0FOLCBhbmQgZXZlbiBMT0NLREVQIGZvciB0aGF0IG1hdHRlciwgaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IHRoZXNlIHRvb2xzIGV4Y2VsIGF0IGNhdGNoaW5nIGR1cmluZyBkZXZlbG9wbWVudC4KCkxvb2tpbmcgY2xvc2VyLCB0aGVyZSYjMzk7cyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzICpuZXcqIHdheXMgdG8gbGVhayBpbmZvcm1hdGlvbiBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIGBkZXZfaGFyZF9oZWFkZXJgIGluaXRpYWxpemVzIHRoZSBNQUMgaGVhZGVyLCBzbyB0aGUgU0tCIGRvZXNuJiMzOTt0IGhhdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEV2ZXJ5dGhpbmcgYWRkZWQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBhbmQgdGhlIG5ld2x5IGFkZGVkIGZ1bmN0aW9uIGBsbGNfY29ubl9zZW5kX2RtX3JzcGAgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGFsbG9jYXRlZCBTS0IgaGVhZGVycyBiZWZvcmUgdHJhbnNtaXNzaW9uLiBUaGUgcGF0Y2ggaXMgY2FyZWZ1bGx5IGFkZHJlc3NpbmcgYSBjb25jdXJyZW5jeSBwcm9ibGVtIHdpdGgga25vd24sIHdlbGwtdW5kZXJzdG9vZCB0ZWNobmlxdWVzIChzdGF0ZSBtYW5hZ2VtZW50LCB3b3JrcXVldWUpLiBUaGUgcGF0Y2ggaXMgY2FyZWZ1bGx5IGFkZHJlc3NpbmcgYSBjb25jdXJyZW5jeSBwcm9ibGVtIHdpdGgga25vd24sIHdlbGwtdW5kZXJzdG9vZCB0ZWNobmlxdWVzIChzdGF0ZSBtYW5hZ2VtZW50LCB3b3JrcXVldWUpLiBOb3RoaW5nJiMzOTtzIGJlaW5nIHNoaXBwZWQgdG8gdXNlcnNwYWNlIHRoYXTigJlzIG5ldywgdW50ZXN0ZWQsIG9yIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLgoKU28sIGdpdmVuIGFsbCBvZiB0aGlzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IHdhcnJhbnRlZCBoZXJlLiBLQVNBTiBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBkb2luZyBpdHMgam9iIGFuZCBjYXRjaGluZyBhbnkgaW50cm9kdWNlZCBtZW1vcnkgZXJyb3JzLCBhbmQgdGhlcmUgYXJlIG5vIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgcGF0Y2ggaXRzZWxmLiBXZSBzaG91bGQgYmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgTExDIHByb3RvY29sIHJlbGF0ZWQgdG8gaW5jb21pbmcgY29ubmVjdGlvbiBoYW5kbGluZy4gSXQgaW50cm9kdWNlcyBuZXcgc3RhdGUgdHJhY2tpbmcgKGBpbmNvbWluZ19zdGF0ZWApIGFuZCBhIHdvcmtxdWV1ZSAoYGluY29taW5nX3dvcmtgKSB0byBzYWZlbHkgbWFuYWdlIGFuZCBkZWZlciB0aGUgZnJlZWluZyBvZiBpbmNvbWluZyBzb2NrZXRzLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gYSBsaXN0ZW5pbmcgc29ja2V0IGlzIGNsb3NlZCB3aGlsZSBjaGlsZCBzb2NrZXRzIGFyZSBzdGlsbCBwZW5kaW5nIG9yIHF1ZXVlZC5cblxuVGhlc2UgdHlwZXMgb2YgYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbGwgbmV3bHkgaW50cm9kdWNlZCBmaWVsZHMgaW4gYHN0cnVjdCBsbGNfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdW5jdGlvbiBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHNrYiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIExMQyBwcm90b2NvbCByZWxhdGVkIHRvIGluY29taW5nIGNvbm5lY3Rpb24gaGFuZGxpbmcuIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgKSBhbmQgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCkgdG8gc2FmZWx5IG1hbmFnZSBhbmQgZGVmZXIgdGhlIGZyZWVpbmcgb2YgaW5jb21pbmcgc29ja2V0cywgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGEgbGlzdGVuaW5nIHNvY2tldCBpcyBjbG9zZWQgd2hpbGUgY2hpbGQgc29ja2V0cyBhcmUgc3RpbGwgcGVuZGluZyBvciBxdWV1ZWQuXG5cblRoZXNlIHR5cGVzIG9mIGJ1Z3MgKHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSBhcmUgYWxyZWFkeSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gQWxsIG5ld2x5IGludHJvZHVjZWQgZmllbGRzIGluIGBzdHJ1Y3QgbGxjX3NvY2tgIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIG5ld2x5IGFkZGVkIGBsbGNfY29ubl9zZW5kX2RtX3JzcGAgZnVuY3Rpb24gZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGFsbG9jYXRlZCBza2IgaGVhZGVycyBiZWZvcmUgdHJhbnNtaXNzaW9uLlxuXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhlc2UgY2hhbmdlcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjQ3OjQ5LjgyMTUxNTgzMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MzIyMjA1NjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMTEMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGxjX2Nvbm5faGFuZGxlclwiLFxuICAgIFwibGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja1wiLFxuICAgIFwibGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlblwiLFxuICAgIFwibGxjX3NrX2ZyZWVcIixcbiAgICBcImxsY19jb25uX3N0YXRlX3Byb2Nlc3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIExMQyBwcm90b2NvbCByZWxhdGVkIHRvIGluY29taW5nIGNvbm5lY3Rpb24gaGFuZGxpbmcuIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgKSBhbmQgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCkgdG8gc2FmZWx5IG1hbmFnZSBhbmQgZGVmZXIgdGhlIGZyZWVpbmcgb2YgaW5jb21pbmcgc29ja2V0cywgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGEgbGlzdGVuaW5nIHNvY2tldCBpcyBjbG9zZWQgd2hpbGUgY2hpbGQgc29ja2V0cyBhcmUgc3RpbGwgcGVuZGluZyBvciBxdWV1ZWQuXFxuXFxuVGhlc2UgdHlwZXMgb2YgYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbGwgbmV3bHkgaW50cm9kdWNlZCBmaWVsZHMgaW4gYHN0cnVjdCBsbGNfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdW5jdGlvbiBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHNrYiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYyBvZiB0aGUgTExDIHByb3RvY29sLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo0Nzo0OS44MjE1MjE4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NTY2OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTg4Njc5MmYzYjJjYTA0MzYwOTg0ZmU3MTQwY2FlZGQ1NzA3YjFmOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwODo0Nzo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9sbGNfY29ubi5oIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxcbmluZGV4IGUxYTMwMjY5NjcyMzQuLjlhY2RhMGE2ZjA2OWYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxcbisrKyBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcXG5AQCAtNiw2ICs2LDcgQEBcXG4gICogXFx0XFx0IDIwMDEsIDIwMDIgYnkgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIFxcdTAwM2NhY21lQGNvbmVjdGl2YS5jb20uYnJcXHUwMDNlXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2xsY19pZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xsYy5oXFx1MDAzZVxcbkBAIC0xMyw2ICsxNCwxMCBAQFxcbiAjZGVmaW5lIExMQ19FVkVOVCAgICAgICAgICAgICAgICAxXFxuICNkZWZpbmUgTExDX1BBQ0tFVCAgICAgICAgICAgICAgIDJcXG4gXFxuKyNkZWZpbmUgTExDX0lOQ09NSU5HX05PTkUgICAgICAgIDBcXG4rI2RlZmluZSBMTENfSU5DT01JTkdfUEVORElORyAgICAgMVxcbisjZGVmaW5lIExMQ19JTkNPTUlOR19RVUVVRUQgICAgICAyXFxuK1xcbiAjZGVmaW5lIExMQzJfUF9USU1FICAgICAgICAgICAgICAgMlxcbiAjZGVmaW5lIExMQzJfQUNLX1RJTUUgICAgICAgICAgICAgMVxcbiAjZGVmaW5lIExMQzJfUkVKX1RJTUUgICAgICAgICAgICAgM1xcbkBAIC03Miw2ICs3Nyw5IEBAIHN0cnVjdCBsbGNfc29jayB7XFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHJlY2VpdmVkIGFuZCBjYXVzZWQgc2VuZGluZyBGUk1SLlxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBVc2VkIGZvciByZXNlbmRpbmcgRlJNUiAqL1xcbiBcXHR1MzJcXHRcXHQgICAgY21zZ19mbGFncztcXG4rXFx0YXRvbWljX3RcXHQgICAgaW5jb21pbmdfc3RhdGU7XFxuK1xcdHN0cnVjdCBzb2NrXFx0ICAgICppbmNvbWluZ19saXN0ZW5lcjtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0IGluY29taW5nX3dvcms7XFxuIFxcdHN0cnVjdCBobGlzdF9ub2RlICAgZGV2X2hhc2hfbm9kZTtcXG4gfTtcXG4gXFxuQEAgLTkzLDcgKzEwMSwxMCBAQCBzdGF0aWMgX19pbmxpbmVfXyBjaGFyIGxsY19iYWNrbG9nX3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gc3RydWN0IHNvY2sgKmxsY19za19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5LFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pO1xcbiB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpO1xcbi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzayk7XFxuK3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpO1xcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcXG4rdm9pZCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcXG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spO1xcbiBcXG4gdm9pZCBsbGNfc2tfcmVzZXQoc3RydWN0IHNvY2sgKnNrKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jXFxuaW5kZXggYjA0NDdjMzNkYmYwOS4uN2QyNDZkNGQyODFiYiAxMDA2NDRcXG4tLS0gYS9uZXQvbGxjL2FmX2xsYy5jXFxuKysrIGIvbmV0L2xsYy9hZl9sbGMuY1xcbkBAIC0xOTYsNiArMTk2LDcgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbiB7XFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiBcXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYztcXG4rXFx0Ym9vbCBsaXN0ZW5lcjtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShzayA9PSBOVUxMKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuQEAgLTIwNiw2ICsyMDcsOSBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuIFxcdFxcdGxsYy1cXHUwMDNlbGFkZHIubHNhcCwgbGxjLVxcdTAwM2VkYWRkci5sc2FwKTtcXG4gXFx0aWYgKCFsbGNfc2VuZF9kaXNjKHNrKSlcXG4gXFx0XFx0bGxjX3VpX3dhaXRfZm9yX2Rpc2Moc2ssIFJFQURfT05DRShzay1cXHUwMDNlc2tfcmN2dGltZW8pKTtcXG4rXFx0bGlzdGVuZXIgPSBzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTjtcXG4rXFx0aWYgKGxpc3RlbmVyKVxcbitcXHRcXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xcbiBcXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19aQVBQRUQpKSB7XFxuIFxcdFxcdHN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtXFx1MDAzZXNhcDtcXG4gXFxuQEAgLTIxNCwxNiArMjE4LDE4IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGxsY19zYXBfaG9sZChzYXApO1xcbiBcXHRcXHRsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLVxcdTAwM2VzYXAsIHNrKTtcXG4rXFx0XFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xcbiBcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiBcXHRcXHRsbGNfc2FwX3B1dChzYXApO1xcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzayk7XFxuIFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIFxcdH1cXG4gXFx0bmV0ZGV2X3B1dChsbGMtXFx1MDAzZWRldiwgXFx1MDAyNmxsYy1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbiBcXHRzb2NrX3B1dChzayk7XFxuIFxcdHNvY2tfb3JwaGFuKHNrKTtcXG4gXFx0c29jay1cXHUwMDNlc2sgPSBOVUxMO1xcbi1cXHRsbGNfc2tfZnJlZShzayk7XFxuK1xcdGxsY19za19mcmVlKHNrLCB0cnVlKTtcXG4gb3V0OlxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC03MjIsNiArNzI4LDcgQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuIFxcdFxcdGdvdG8gZnJlZXM7XFxuIFxcdHJjID0gMDtcXG4gXFx0bmV3c2sgPSBza2ItXFx1MDAzZXNrO1xcbitcXHRsbGNfYWNjZXB0X2luY29taW5nX3NvY2sobmV3c2spO1xcbiBcXHQvKiBhdHRhY2ggY29ubmVjdGlvbiB0byBhIG5ldyBzb2NrZXQuICovXFxuIFxcdGxsY191aV9za19pbml0KG5ld3NvY2ssIG5ld3NrKTtcXG4gXFx0c29ja19yZXNldF9mbGFnKG5ld3NrLCBTT0NLX1pBUFBFRCk7XFxuZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2Nvbm4uYyBiL25ldC9sbGMvbGxjX2Nvbm4uY1xcbmluZGV4IDI2MDQ2MGQ1MGY1NGMuLjQyNzJjZTRkNGExY2EgMTAwNjQ0XFxuLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jXFxuKysrIGIvbmV0L2xsYy9sbGNfY29ubi5jXFxuQEAgLTMyLDYgKzMyLDcgQEAgc3RhdGljIGludCBsbGNfZXhlY19jb25uX3RyYW5zX2FjdGlvbnMoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKmV2KTtcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyAqbGxjX3F1YWxpZnlfY29ubl9ldihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbitzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuIFxcbiAvKiBPZmZzZXQgdGFibGUgb24gY29ubmVjdGlvbiBzdGF0ZXMgdHJhbnNpdGlvbiBkaWFncmFtICovXFxuIHN0YXRpYyBpbnQgbGxjX29mZnNldF90YWJsZVtOQlJfQ09OTl9TVEFURVNdW05CUl9DT05OX0VWXTtcXG5AQCAtODgsNiArODksMTEgQEAgaW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHQgKiBza2ItXFx1MDAzZXNrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluXFxuIFxcdFxcdCAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lXFxuIFxcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2sgIT0gc2tiLVxcdTAwM2VzayBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhza2ItXFx1MDAzZXNrKS1cXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XFxuK1xcdFxcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcXG4rXFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2bGxjX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSxcXG4rXFx0XFx0XFx0XFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCk7XFxuIFxcdFxcdHNrYl9nZXQoc2tiKTtcXG4gXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLCBza2IpO1xcbiBcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcXG5AQCAtMzU0LDcgKzM2MCw4IEBAIHN0YXRpYyBpbnQgbGxjX2Nvbm5fc2VydmljZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG4gXFx0aW50IHJjID0gMTtcXG4gXFxuLVxcdGlmIChsbGMtXFx1MDAzZXN0YXRlIFxcdTAwM2UgTkJSX0NPTk5fU1RBVEVTKVxcbitcXHRpZiAobGxjLVxcdTAwM2VzdGF0ZSBcXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSB8fFxcbitcXHQgICAgbGxjLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIE5CUl9DT05OX1NUQVRFUylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdHJjID0gMDtcXG4gXFx0dHJhbnMgPSBsbGNfcXVhbGlmeV9jb25uX2V2KHNrLCBza2IpO1xcbkBAIC03NjUsMjcgKzc3MiwxNTMgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRtZW1jcHkoXFx1MDAyNm5ld2xsYy1cXHUwMDNlbGFkZHIsIGRhZGRyLCBzaXplb2YobmV3bGxjLVxcdTAwM2VsYWRkcikpO1xcbiBcXHRtZW1jcHkoXFx1MDAyNm5ld2xsYy1cXHUwMDNlZGFkZHIsIHNhZGRyLCBzaXplb2YobmV3bGxjLVxcdTAwM2VkYWRkcikpO1xcbiBcXHRuZXdsbGMtXFx1MDAzZWRldiA9IGRldjtcXG4rXFx0bmV3bGxjLVxcdTAwM2VpbmNvbWluZ19saXN0ZW5lciA9IHNrO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZuZXdsbGMtXFx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfUEVORElORyk7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2bmV3bGxjLVxcdTAwM2VpbmNvbWluZ193b3JrLCBsbGNfaW5jb21pbmdfc29ja193b3JrKTtcXG4rXFx0c29ja19ob2xkKHNrKTtcXG4gXFx0ZGV2X2hvbGQoZGV2KTtcXG4gXFx0bGxjX3NhcF9hZGRfc29ja2V0KGxsYy1cXHUwMDNlc2FwLCBuZXdzayk7XFxuIG91dDpcXG4gXFx0cmV0dXJuIG5ld3NrO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGxjX3NvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBpbmNvbWluZ193b3JrKTtcXG4rXFx0c3RydWN0IHNvY2sgKnNrID0gXFx1MDAyNmxsYy1cXHUwMDNlc2s7XFxuK1xcdHN0cnVjdCBzb2NrICpsaXN0ZW5lciA9IGxsYy1cXHUwMDNlaW5jb21pbmdfbGlzdGVuZXI7XFxuK1xcbitcXHRsb2NrX3NvY2sobGlzdGVuZXIpO1xcbitcXHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcdGxsY19za19mcmVlKHNrLCBmYWxzZSk7XFxuK1xcdHNvY2tfb3JwaGFuKHNrKTtcXG4rXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4rXFx0bGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7XFxuK1xcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XFxuK1xcdGRldl9wdXQobGxjLVxcdTAwM2VkZXYpO1xcbitcXHRsbGMtXFx1MDAzZWRldiA9IE5VTEw7XFxuK1xcdHNvY2tfcHV0KHNrKTtcXG4rXFx0c29ja19wdXQobGlzdGVuZXIpO1xcbit9XFxuK1xcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG4rXFxuK1xcdGlmIChhdG9taWNfeGNoZyhcXHUwMDI2bGxjLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX05PTkUpID09XFxuK1xcdCAgICBMTENfSU5DT01JTkdfTk9ORSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0V1JJVEVfT05DRShsbGMtXFx1MDAzZXN0YXRlLCBMTENfQ09OTl9PVVRfT0ZfU1ZDKTtcXG4rXFx0c29ja19ob2xkKHNrKTtcXG4rXFx0bGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy1cXHUwMDNlc2FwLCBzayk7XFxuK1xcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmxsYy1cXHUwMDNlaW5jb21pbmdfd29yayk7XFxuK31cXG4rXFxuK3ZvaWQgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxuK1xcbitcXHRpZiAoYXRvbWljX3hjaGcoXFx1MDAyNmxsYy1cXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19OT05FKSAhPVxcbitcXHQgICAgTExDX0lOQ09NSU5HX05PTkUpXFxuK1xcdFxcdHNvY2tfcHV0KGxsYy1cXHUwMDNlaW5jb21pbmdfbGlzdGVuZXIpO1xcbit9XFxuK1xcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpKSB7XFxuK1xcdFxcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi1cXHUwMDNlc2s7XFxuK1xcbitcXHRcXHRpZiAobmV3c2sgXFx1MDAyNlxcdTAwMjYgbmV3c2sgIT0gc2spIHtcXG4rXFx0XFx0XFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XFxuK1xcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XFxuK1xcdFxcdFxcdCAgICBMTENfSU5DT01JTkdfTk9ORSlcXG4rXFx0XFx0XFx0XFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XFxuK1xcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0fVxcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhpcyBtaXJyb3JzIHRoZSBBRE0tc3RhdGUgRE0gYWN0aW9ucywgYnV0IGEgbGlzdGVuZXIgaGFzIG5vIHBlZXJcXG4rICogYWRkcmVzcyBpbiBsbGMtXFx1MDAzZWRhZGRyIHlldC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGxsY19jb25uX3NlbmRfZG1fcnNwKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdClcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbitcXHRpZiAoIW5za2IpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG4rXFx0XFx0XFx0ICAgIHNhZGRyLVxcdTAwM2Vsc2FwLCBMTENfUERVX1JTUCk7XFxuK1xcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AobnNrYiwgZl9iaXQpO1xcbitcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBzYWRkci1cXHUwMDNlbWFjKTtcXG4rXFx0aWYgKHVubGlrZWx5KHJjKSlcXG4rXFx0XFx0a2ZyZWVfc2tiKG5za2IpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGRldl9xdWV1ZV94bWl0KG5za2IpO1xcbit9XFxuK1xcbiB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRzdHJ1Y3QgbGxjX2FkZHIgc2FkZHIsIGRhZGRyO1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2s7XFxuK1xcdHN0cnVjdCBzb2NrICpzaywgKm5ld3NrID0gTlVMTDtcXG4rXFx0Ym9vbCBuZXdza19sb29rdXBfcmVmID0gZmFsc2U7XFxuK1xcdGJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7XFxuIFxcbiBcXHRsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7XFxuIFxcdGxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCBcXHUwMDI2c2FkZHIubHNhcCk7XFxuIFxcdGxsY19wZHVfZGVjb2RlX2RhKHNrYiwgZGFkZHIubWFjKTtcXG4gXFx0bGxjX3BkdV9kZWNvZGVfZHNhcChza2IsIFxcdTAwMjZkYWRkci5sc2FwKTtcXG4gXFxuK2xvb2t1cDpcXG4gXFx0c2sgPSBfX2xsY19sb29rdXAoc2FwLCBcXHUwMDI2c2FkZHIsIFxcdTAwMjZkYWRkciwgZGV2X25ldChza2ItXFx1MDAzZWRldikpO1xcbiBcXHRpZiAoIXNrKVxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcbitcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxcbitcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcXG4rXFx0XFx0bmV3c2sgPSBzaztcXG4rXFx0XFx0YmhfbG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cXG4rXFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XFxuK1xcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0c29ja19wdXQobmV3c2spO1xcbitcXHRcXHRcXHRuZXdzayA9IE5VTEw7XFxuK1xcdFxcdFxcdGdvdG8gbG9va3VwO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNrID0gbGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfbGlzdGVuZXI7XFxuK1xcdFxcdHNvY2tfaG9sZChzayk7XFxuK1xcdFxcdG5ld3NrX2xvb2t1cF9yZWYgPSB0cnVlO1xcbitcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuK1xcdH1cXG4rXFxuIFxcdGJoX2xvY2tfc29jayhzayk7XFxuK1xcdGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpXFxuK1xcdFxcdGdvdG8gZHJvcF91bmxvY2s7XFxuK1xcdGlmIChuZXdza19sb29rdXBfcmVmKSB7XFxuK1xcdFxcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xcbitcXHRcXHRuZXdza19sb2NrZWQgPSB0cnVlO1xcbitcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhuZXdzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxcbitcXHRcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnlfdW5sb2NrO1xcbitcXHRcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcXG4rXFx0XFx0XFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKSB7XFxuK1xcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0LypcXG4gXFx0ICogVGhpcyBoYXMgdG8gYmUgZG9uZSBoZXJlIGFuZCBub3QgYXQgdGhlIHVwcGVyIGxheWVyIC1cXHUwMDNlYWNjZXB0XFxuIFxcdCAqIG1ldGhvZCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIFBST0NPTSBzdGF0ZSBtYWNoaW5lIHdvcmtzOlxcbkBAIC03OTUsMTAgKzkyOCwyNSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0ICogaW4gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgcHJpdmF0ZSBhcmVhLiAtYWNtZVxcbiBcXHQgKi9cXG4gXFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSkge1xcbi1cXHRcXHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2FkZHIsIFxcdTAwMjZkYWRkcik7XFxuLVxcdFxcdGlmICghbmV3c2spXFxuLVxcdFxcdFxcdGdvdG8gZHJvcF91bmxvY2s7XFxuK1xcdFxcdGlmICghbmV3c2spIHtcXG4rXFx0XFx0XFx0aWYgKGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XFxuK1xcdFxcdFxcdFxcdGlmICghbGxjX2Nvbm5fZXZfcnhfZGlzY19jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xcbitcXHRcXHRcXHRcXHRcXHR1OCBmX2JpdDtcXG4rXFxuK1xcdFxcdFxcdFxcdFxcdGxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsIFxcdTAwMjZmX2JpdCk7XFxuK1xcdFxcdFxcdFxcdFxcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcXHUwMDI2c2FkZHIsIGZfYml0KTtcXG4rXFx0XFx0XFx0XFx0fSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcXHUwMDI2c2FkZHIsIDEpO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGdvdG8gZHJvcF91bmxvY2s7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi1cXHUwMDNlZGV2LCBcXHUwMDI2c2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZGFkZHIpO1xcbitcXHRcXHRcXHRpZiAoIW5ld3NrKVxcbitcXHRcXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHRcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0XFx0bmV3c2tfbG9ja2VkID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qXFxuQEAgLTgxMywxOCArOTYxLDQ2IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRza2ItXFx1MDAzZXNrID0gc2s7XFxuIFxcdFxcdHNrYi1cXHUwMDNlZGVzdHJ1Y3RvciA9IHNvY2tfZWZyZWU7XFxuIFxcdH1cXG4tXFx0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKVxcbitcXHRpZiAodW5saWtlbHkobGxjX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2VzdGF0ZSBcXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkpIHtcXG4rXFx0XFx0aWYgKG5ld3NrKVxcbitcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0ZWxzZSBpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxcbitcXHRcXHRcXHQgTExDX0lOQ09NSU5HX05PTkUpXFxuK1xcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spO1xcbitcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHR9XFxuK1xcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xcbiBcXHRcXHRsbGNfY29ubl9yY3Yoc2ssIHNrYik7XFxuLVxcdGVsc2Uge1xcbitcXHRcXHRpZiAobmV3c2sgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cXG4rXFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxcbitcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZHByaW50ayhcXFwiJXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdGxsY19zZXRfYmFja2xvZ190eXBlKHNrYiwgTExDX1BBQ0tFVCk7XFxuLVxcdFxcdGlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3JjdmJ1ZikpKVxcbitcXHRcXHRpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpKSkge1xcbitcXHRcXHRcXHRpZiAobmV3c2spXFxuK1xcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbiBcXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gb3V0OlxcbitcXHRpZiAobmV3c2tfbG9ja2VkKVxcbitcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuIFxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG4gXFx0c29ja19wdXQoc2spO1xcbitcXHRpZiAobmV3c2tfbG9va3VwX3JlZilcXG4rXFx0XFx0c29ja19wdXQobmV3c2spO1xcbiBcXHRyZXR1cm47XFxuK3JldHJ5X3VubG9jazpcXG4rXFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRuZXdza19sb2NrZWQgPSBmYWxzZTtcXG4rXFx0YmhfdW5sb2NrX3NvY2soc2spO1xcbitcXHRzb2NrX3B1dChzayk7XFxuK1xcdHNvY2tfcHV0KG5ld3NrKTtcXG4rXFx0bmV3c2sgPSBOVUxMO1xcbitcXHRuZXdza19sb29rdXBfcmVmID0gZmFsc2U7XFxuK1xcdGdvdG8gbG9va3VwO1xcbiBkcm9wOlxcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0cmV0dXJuO1xcbkBAIC04NTIsMTIgKzEwMjgsNTMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdGludCByYyA9IDA7XFxuIFxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG4rXFx0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVxcdTAwM2VzaztcXG4gXFxuIFxcdGlmIChsaWtlbHkobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19QQUNLRVQpKSB7XFxuLVxcdFxcdGlmIChsaWtlbHkobGxjLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIDEpKSAvKiBub3QgY2xvc2VkICovXFxuK1xcdFxcdGlmIChuZXdzayBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhuZXdzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxcbitcXHRcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcXG4rXFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cXG4rXFx0XFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XFxuK1xcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuK1xcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fFxcbitcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcXG4rXFx0XFx0XFx0ICAgIGxsY19zayhuZXdzayktXFx1MDAzZXN0YXRlIFxcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XFxuK1xcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuK1xcdFxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9rZnJlZV9za2I7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XFxuLVxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cXG4rXFx0XFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxcbitcXHRcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChuZXdzayBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICBhdG9taWNfcmVhZChcXHUwMDI2bGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XFxuK1xcdFxcdFxcdCAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcXG4rXFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0XFx0aWYgKGxsY19zayhuZXdzayktXFx1MDAzZXN0YXRlIFxcdTAwM2M9IExMQ19DT05OX1NUQVRFX0FETSkge1xcbitcXHRcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfa2ZyZWVfc2tiO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpO1xcbitcXHRcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuK1xcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXHRcXHR9IGVsc2UgaWYgKGxpa2VseShsbGMtXFx1MDAzZXN0YXRlIFxcdTAwM2UgMSkpIHtcXG4rXFx0XFx0XFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X2tmcmVlX3NrYjtcXG4rXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfRVZFTlQpIHtcXG4gXFx0XFx0LyogdGltZXIgZXhwaXJhdGlvbiBldmVudCAqL1xcbiBcXHRcXHRpZiAobGlrZWx5KGxsYy1cXHUwMDNlc3RhdGUgXFx1MDAzZSAxKSkgIC8qIG5vdCBjbG9zZWQgKi9cXG5AQCAtODcwLDYgKzEwODcsMjQgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHR9XFxuIG91dDpcXG4gXFx0cmV0dXJuIHJjO1xcbityZXRyeTpcXG4rXFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cXG4rXFx0ICAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcXG4rXFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0aWYgKGxsY19zayhuZXdzayktXFx1MDAzZXN0YXRlIFxcdTAwM2UgTExDX0NPTk5fU1RBVEVfQURNKVxcbitcXHRcXHRcXHRyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTtcXG4rXFx0XFx0ZWxzZSB7XFxuK1xcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuK1xcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXHRcXHRcXHRnb3RvIG91dF9rZnJlZV9za2I7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0Z290byBvdXRfa2ZyZWVfc2tiO1xcbiBvdXRfa2ZyZWVfc2tiOlxcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0Z290byBvdXQ7XFxuQEAgLTk1OSwxNyArMTE5NCwxOCBAQCB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXFxuIFxcbiAvKipcXG4gICpcXHRsbGNfc2tfZnJlZSAtIEZyZWVzIGEgTExDIHNvY2tldFxcbi0gKlxcdEBzazogLSBzb2NrZXQgdG8gZnJlZVxcbisgKlxcdEBzazogc29ja2V0IHRvIGZyZWVcXG4rICpcXHRAc3luYzogd2hldGhlciB0byBzeW5jaHJvbm91c2x5IHN0b3AgdGltZXJzXFxuICAqXFxuLSAqXFx0RnJlZXMgYSBMTEMgc29ja2V0XFxuKyAqXFx0RnJlZXMgYSBMTEMgc29ja2V0LlxcbiAgKi9cXG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spXFxuK3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXFxuIHtcXG4gXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbiBcXG4gXFx0bGxjLVxcdTAwM2VzdGF0ZSA9IExMQ19DT05OX09VVF9PRl9TVkM7XFxuIFxcdC8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi9cXG4tXFx0bGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7XFxuK1xcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHN5bmMpO1xcbiAjaWZkZWYgREVCVUdfTExDX0NPTk5fQUxMT0NcXG4gXFx0cHJpbnRrKEtFUk5fSU5GTyBcXFwiJXM6IHVuYWNrcT0lZCwgdHhxPSVkXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4gXFx0XFx0c2tiX3F1ZXVlX2xlbihcXHUwMDI2bGxjLVxcdTAwM2VwZHVfdW5hY2tfcSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjQ3OjUwLjI4ODMxNzE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjE5NDc2NzE4MjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxMQzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsbGNfY29ubl9oYW5kbGVyXCIsXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfYWNjZXB0X2luY29taW5nX3NvY2tcIixcbiAgICBcImxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuXCIsXG4gICAgXCJsbGNfc2tfZnJlZVwiLFxuICAgIFwibGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYyBvZiB0aGUgTExDIHByb3RvY29sLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ODg2NzkyZjNiMmNhMDQzNjA5ODRmZTcxNDBjYWVkZDU3MDdiMWY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDg6NDc6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9sbGNfY29ubi5oIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuaW5kZXggZTFhMzAyNjk2NzIzNC4uOWFjZGEwYTZmMDY5ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcbisrKyBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcbkBAIC02LDYgKzYsNyBAQFxuICAqIFx0XHQgMjAwMSwgMjAwMiBieSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gXHUwMDNjYWNtZUBjb25lY3RpdmEuY29tLmJyXHUwMDNlXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2xsY19pZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsYy5oXHUwMDNlXG5AQCAtMTMsNiArMTQsMTAgQEBcbiAjZGVmaW5lIExMQ19FVkVOVCAgICAgICAgICAgICAgICAxXG4gI2RlZmluZSBMTENfUEFDS0VUICAgICAgICAgICAgICAgMlxuIFxuKyNkZWZpbmUgTExDX0lOQ09NSU5HX05PTkUgICAgICAgIDBcbisjZGVmaW5lIExMQ19JTkNPTUlOR19QRU5ESU5HICAgICAxXG4rI2RlZmluZSBMTENfSU5DT01JTkdfUVVFVUVEICAgICAgMlxuK1xuICNkZWZpbmUgTExDMl9QX1RJTUUgICAgICAgICAgICAgICAyXG4gI2RlZmluZSBMTEMyX0FDS19USU1FICAgICAgICAgICAgIDFcbiAjZGVmaW5lIExMQzJfUkVKX1RJTUUgICAgICAgICAgICAgM1xuQEAgLTcyLDYgKzc3LDkgQEAgc3RydWN0IGxsY19zb2NrIHtcbiBcdFx0XHRcdFx0ICAgICAgcmVjZWl2ZWQgYW5kIGNhdXNlZCBzZW5kaW5nIEZSTVIuXG4gXHRcdFx0XHRcdCAgICAgIFVzZWQgZm9yIHJlc2VuZGluZyBGUk1SICovXG4gXHR1MzJcdFx0ICAgIGNtc2dfZmxhZ3M7XG4rXHRhdG9taWNfdFx0ICAgIGluY29taW5nX3N0YXRlO1xuK1x0c3RydWN0IHNvY2tcdCAgICAqaW5jb21pbmdfbGlzdGVuZXI7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW5jb21pbmdfd29yaztcbiBcdHN0cnVjdCBobGlzdF9ub2RlICAgZGV2X2hhc2hfbm9kZTtcbiB9O1xuIFxuQEAgLTkzLDcgKzEwMSwxMCBAQCBzdGF0aWMgX19pbmxpbmVfXyBjaGFyIGxsY19iYWNrbG9nX3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksXG4gXHRcdFx0ICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKTtcbiB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpO1xuLXZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKTtcbit2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTtcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbit2b2lkIGxsY19hY2NlcHRfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKTtcbiBcbiB2b2lkIGxsY19za19yZXNldChzdHJ1Y3Qgc29jayAqc2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jXG5pbmRleCBiMDQ0N2MzM2RiZjA5Li43ZDI0NmQ0ZDI4MWJiIDEwMDY0NFxuLS0tIGEvbmV0L2xsYy9hZl9sbGMuY1xuKysrIGIvbmV0L2xsYy9hZl9sbGMuY1xuQEAgLTE5Niw2ICsxOTYsNyBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4ge1xuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjO1xuK1x0Ym9vbCBsaXN0ZW5lcjtcbiBcbiBcdGlmICh1bmxpa2VseShzayA9PSBOVUxMKSlcbiBcdFx0Z290byBvdXQ7XG5AQCAtMjA2LDYgKzIwNyw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcdFx0bGxjLVx1MDAzZWxhZGRyLmxzYXAsIGxsYy1cdTAwM2VkYWRkci5sc2FwKTtcbiBcdGlmICghbGxjX3NlbmRfZGlzYyhzaykpXG4gXHRcdGxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2dGltZW8pKTtcbitcdGxpc3RlbmVyID0gc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTjtcbitcdGlmIChsaXN0ZW5lcilcbitcdFx0c29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcbiBcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpIHtcbiBcdFx0c3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy1cdTAwM2VzYXA7XG4gXG5AQCAtMjE0LDE2ICsyMTgsMTggQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0XHQgKi9cbiBcdFx0bGxjX3NhcF9ob2xkKHNhcCk7XG4gXHRcdGxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtXHUwMDNlc2FwLCBzayk7XG4rXHRcdGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTtcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdFx0bGxjX3NhcF9wdXQoc2FwKTtcbiBcdH0gZWxzZSB7XG4rXHRcdGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTtcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdH1cbiBcdG5ldGRldl9wdXQobGxjLVx1MDAzZWRldiwgXHUwMDI2bGxjLVx1MDAzZWRldl90cmFja2VyKTtcbiBcdHNvY2tfcHV0KHNrKTtcbiBcdHNvY2tfb3JwaGFuKHNrKTtcbiBcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuLVx0bGxjX3NrX2ZyZWUoc2spO1xuK1x0bGxjX3NrX2ZyZWUoc2ssIHRydWUpO1xuIG91dDpcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03MjIsNiArNzI4LDcgQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRcdGdvdG8gZnJlZXM7XG4gXHRyYyA9IDA7XG4gXHRuZXdzayA9IHNrYi1cdTAwM2VzaztcbitcdGxsY19hY2NlcHRfaW5jb21pbmdfc29jayhuZXdzayk7XG4gXHQvKiBhdHRhY2ggY29ubmVjdGlvbiB0byBhIG5ldyBzb2NrZXQuICovXG4gXHRsbGNfdWlfc2tfaW5pdChuZXdzb2NrLCBuZXdzayk7XG4gXHRzb2NrX3Jlc2V0X2ZsYWcobmV3c2ssIFNPQ0tfWkFQUEVEKTtcbmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb25uLmMgYi9uZXQvbGxjL2xsY19jb25uLmNcbmluZGV4IDI2MDQ2MGQ1MGY1NGMuLjQyNzJjZTRkNGExY2EgMTAwNjQ0XG4tLS0gYS9uZXQvbGxjL2xsY19jb25uLmNcbisrKyBiL25ldC9sbGMvbGxjX2Nvbm4uY1xuQEAgLTMyLDYgKzMyLDcgQEAgc3RhdGljIGludCBsbGNfZXhlY19jb25uX3RyYW5zX2FjdGlvbnMoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpldik7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyAqbGxjX3F1YWxpZnlfY29ubl9ldihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gXG4gLyogT2Zmc2V0IHRhYmxlIG9uIGNvbm5lY3Rpb24gc3RhdGVzIHRyYW5zaXRpb24gZGlhZ3JhbSAqL1xuIHN0YXRpYyBpbnQgbGxjX29mZnNldF90YWJsZVtOQlJfQ09OTl9TVEFURVNdW05CUl9DT05OX0VWXTtcbkBAIC04OCw2ICs4OSwxMSBAQCBpbnQgbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCAqIHNrYi1cdTAwM2VzayBwb2ludGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBpblxuIFx0XHQgKiBsbGNfY29ubl9oYW5kbGVyLiAtYWNtZVxuIFx0XHQgKi9cbitcdFx0aWYgKHNrICE9IHNrYi1cdTAwM2VzayBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSxcbitcdFx0XHRcdCAgIExMQ19JTkNPTUlOR19RVUVVRUQpO1xuIFx0XHRza2JfZ2V0KHNrYik7XG4gXHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYik7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG5AQCAtMzU0LDcgKzM2MCw4IEBAIHN0YXRpYyBpbnQgbGxjX2Nvbm5fc2VydmljZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4gXHRpbnQgcmMgPSAxO1xuIFxuLVx0aWYgKGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgTkJSX0NPTk5fU1RBVEVTKVxuK1x0aWYgKGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNIHx8XG4rXHQgICAgbGxjLVx1MDAzZXN0YXRlIFx1MDAzZSBOQlJfQ09OTl9TVEFURVMpXG4gXHRcdGdvdG8gb3V0O1xuIFx0cmMgPSAwO1xuIFx0dHJhbnMgPSBsbGNfcXVhbGlmeV9jb25uX2V2KHNrLCBza2IpO1xuQEAgLTc2NSwyNyArNzcyLDE1MyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKmxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRtZW1jcHkoXHUwMDI2bmV3bGxjLVx1MDAzZWxhZGRyLCBkYWRkciwgc2l6ZW9mKG5ld2xsYy1cdTAwM2VsYWRkcikpO1xuIFx0bWVtY3B5KFx1MDAyNm5ld2xsYy1cdTAwM2VkYWRkciwgc2FkZHIsIHNpemVvZihuZXdsbGMtXHUwMDNlZGFkZHIpKTtcbiBcdG5ld2xsYy1cdTAwM2VkZXYgPSBkZXY7XG4rXHRuZXdsbGMtXHUwMDNlaW5jb21pbmdfbGlzdGVuZXIgPSBzaztcbitcdGF0b21pY19zZXQoXHUwMDI2bmV3bGxjLVx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfUEVORElORyk7XG4rXHRJTklUX1dPUksoXHUwMDI2bmV3bGxjLVx1MDAzZWluY29taW5nX3dvcmssIGxsY19pbmNvbWluZ19zb2NrX3dvcmspO1xuK1x0c29ja19ob2xkKHNrKTtcbiBcdGRldl9ob2xkKGRldik7XG4gXHRsbGNfc2FwX2FkZF9zb2NrZXQobGxjLVx1MDAzZXNhcCwgbmV3c2spO1xuIG91dDpcbiBcdHJldHVybiBuZXdzaztcbiB9XG4gXG4rc3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGxsY19zb2NrICpsbGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxsY19zb2NrLFxuK1x0XHRcdFx0XHRcdCAgICBpbmNvbWluZ193b3JrKTtcbitcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNmxsYy1cdTAwM2VzaztcbitcdHN0cnVjdCBzb2NrICpsaXN0ZW5lciA9IGxsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcjtcbitcbitcdGxvY2tfc29jayhsaXN0ZW5lcik7XG4rXHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4rXHRsbGNfc2tfZnJlZShzaywgZmFsc2UpO1xuK1x0c29ja19vcnBoYW4oc2spO1xuK1x0cmVsZWFzZV9zb2NrKHNrKTtcbitcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpO1xuK1x0cmVsZWFzZV9zb2NrKGxpc3RlbmVyKTtcbitcdGRldl9wdXQobGxjLVx1MDAzZWRldik7XG4rXHRsbGMtXHUwMDNlZGV2ID0gTlVMTDtcbitcdHNvY2tfcHV0KHNrKTtcbitcdHNvY2tfcHV0KGxpc3RlbmVyKTtcbit9XG4rXG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4rXG4rXHRpZiAoYXRvbWljX3hjaGcoXHUwMDI2bGxjLVx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgPT1cbitcdCAgICBMTENfSU5DT01JTkdfTk9ORSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0V1JJVEVfT05DRShsbGMtXHUwMDNlc3RhdGUsIExMQ19DT05OX09VVF9PRl9TVkMpO1xuK1x0c29ja19ob2xkKHNrKTtcbitcdGxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtXHUwMDNlc2FwLCBzayk7XG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNmxsYy1cdTAwM2VpbmNvbWluZ193b3JrKTtcbit9XG4rXG4rdm9pZCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbitcbitcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZsbGMtXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19OT05FKSAhPVxuK1x0ICAgIExMQ19JTkNPTUlOR19OT05FKVxuK1x0XHRzb2NrX3B1dChsbGMtXHUwMDNlaW5jb21pbmdfbGlzdGVuZXIpO1xuK31cbitcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSkpIHtcbitcdFx0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVx1MDAzZXNrO1xuK1xuK1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2IG5ld3NrICE9IHNrKSB7XG4rXHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdFx0ICAgIExMQ19JTkNPTUlOR19OT05FKVxuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHR9XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0fVxuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4rfVxuK1xuKy8qXG4rICogVGhpcyBtaXJyb3JzIHRoZSBBRE0tc3RhdGUgRE0gYWN0aW9ucywgYnV0IGEgbGlzdGVuZXIgaGFzIG5vIHBlZXJcbisgKiBhZGRyZXNzIGluIGxsYy1cdTAwM2VkYWRkciB5ZXQuXG4rICovXG4rc3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdClcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbitcdGludCByYztcbitcbitcdG5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xuK1x0aWYgKCFuc2tiKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbitcdFx0XHQgICAgc2FkZHItXHUwMDNlbHNhcCwgTExDX1BEVV9SU1ApO1xuK1x0bGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7XG4rXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgc2FkZHItXHUwMDNlbWFjKTtcbitcdGlmICh1bmxpa2VseShyYykpXG4rXHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdGVsc2VcbitcdFx0ZGV2X3F1ZXVlX3htaXQobnNrYik7XG4rfVxuK1xuIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBsbGNfYWRkciBzYWRkciwgZGFkZHI7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4rXHRzdHJ1Y3Qgc29jayAqc2ssICpuZXdzayA9IE5VTEw7XG4rXHRib29sIG5ld3NrX2xvb2t1cF9yZWYgPSBmYWxzZTtcbitcdGJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7XG4gXG4gXHRsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgXHUwMDI2c2FkZHIubHNhcCk7XG4gXHRsbGNfcGR1X2RlY29kZV9kYShza2IsIGRhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgXHUwMDI2ZGFkZHIubHNhcCk7XG4gXG4rbG9va3VwOlxuIFx0c2sgPSBfX2xsY19sb29rdXAoc2FwLCBcdTAwMjZzYWRkciwgXHUwMDI2ZGFkZHIsIGRldl9uZXQoc2tiLVx1MDAzZWRldikpO1xuIFx0aWYgKCFzaylcbiBcdFx0Z290byBkcm9wO1xuIFxuK1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0bmV3c2sgPSBzaztcbitcdFx0YmhfbG9ja19zb2NrKG5ld3NrKTtcbitcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuK1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRzb2NrX3B1dChuZXdzayk7XG4rXHRcdFx0bmV3c2sgPSBOVUxMO1xuK1x0XHRcdGdvdG8gbG9va3VwO1xuK1x0XHR9XG4rXHRcdHNrID0gbGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcjtcbitcdFx0c29ja19ob2xkKHNrKTtcbitcdFx0bmV3c2tfbG9va3VwX3JlZiA9IHRydWU7XG4rXHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdH1cbitcbiBcdGJoX2xvY2tfc29jayhzayk7XG4rXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKVxuK1x0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0aWYgKG5ld3NrX2xvb2t1cF9yZWYpIHtcbitcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdG5ld3NrX2xvY2tlZCA9IHRydWU7XG4rXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0Z290byByZXRyeV91bmxvY2s7XG4rXHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8XG4rXHRcdFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKSB7XG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0Z290byBkcm9wX3VubG9jaztcbitcdFx0fVxuK1x0fVxuIFx0LypcbiBcdCAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGF0IHRoZSB1cHBlciBsYXllciAtXHUwMDNlYWNjZXB0XG4gXHQgKiBtZXRob2QgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBQUk9DT00gc3RhdGUgbWFjaGluZSB3b3JrczpcbkBAIC03OTUsMTAgKzkyOCwyNSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdCAqIGluIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIHByaXZhdGUgYXJlYS4gLWFjbWVcbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpuZXdzayA9IGxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzaywgc2tiLVx1MDAzZWRldixcbi1cdFx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNnNhZGRyLCBcdTAwMjZkYWRkcik7XG4tXHRcdGlmICghbmV3c2spXG4tXHRcdFx0Z290byBkcm9wX3VubG9jaztcbitcdFx0aWYgKCFuZXdzaykge1xuK1x0XHRcdGlmIChsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xuK1x0XHRcdFx0aWYgKCFsbGNfY29ubl9ldl9yeF9kaXNjX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XG4rXHRcdFx0XHRcdHU4IGZfYml0O1xuK1xuK1x0XHRcdFx0XHRsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCBcdTAwMjZmX2JpdCk7XG4rXHRcdFx0XHRcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcdTAwMjZzYWRkciwgZl9iaXQpO1xuK1x0XHRcdFx0fSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7XG4rXHRcdFx0XHRcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcdTAwMjZzYWRkciwgMSk7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHRcdH1cbitcdFx0XHRuZXdzayA9IGxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzaywgc2tiLVx1MDAzZWRldiwgXHUwMDI2c2FkZHIsXG4rXHRcdFx0XHRcdFx0XHQgXHUwMDI2ZGFkZHIpO1xuK1x0XHRcdGlmICghbmV3c2spXG4rXHRcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuK1x0XHRcdG5ld3NrX2xvY2tlZCA9IHRydWU7XG4rXHRcdH1cbiBcdFx0c2tiX3NldF9vd25lcl9yKHNrYiwgbmV3c2spO1xuIFx0fSBlbHNlIHtcbiBcdFx0LypcbkBAIC04MTMsMTggKzk2MSw0NiBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZXNrID0gc2s7XG4gXHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0gc29ja19lZnJlZTtcbiBcdH1cbi1cdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSlcbitcdGlmICh1bmxpa2VseShsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSkge1xuK1x0XHRpZiAobmV3c2spXG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdGVsc2UgaWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdFx0IExMQ19JTkNPTUlOR19OT05FKVxuK1x0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spO1xuK1x0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0fVxuK1x0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7XG4gXHRcdGxsY19jb25uX3Jjdihzaywgc2tiKTtcbi1cdGVsc2Uge1xuK1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHR9IGVsc2Uge1xuIFx0XHRkcHJpbnRrKFwiJXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0bGxjX3NldF9iYWNrbG9nX3R5cGUoc2tiLCBMTENfUEFDS0VUKTtcbi1cdFx0aWYgKHNrX2FkZF9iYWNrbG9nKHNrLCBza2IsIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSlcbitcdFx0aWYgKHNrX2FkZF9iYWNrbG9nKHNrLCBza2IsIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSkge1xuK1x0XHRcdGlmIChuZXdzaylcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuIFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRcdH1cbiBcdH1cbiBvdXQ6XG4rXHRpZiAobmV3c2tfbG9ja2VkKVxuK1x0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4gXHRiaF91bmxvY2tfc29jayhzayk7XG4gXHRzb2NrX3B1dChzayk7XG4rXHRpZiAobmV3c2tfbG9va3VwX3JlZilcbitcdFx0c29ja19wdXQobmV3c2spO1xuIFx0cmV0dXJuO1xuK3JldHJ5X3VubG9jazpcbitcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdG5ld3NrX2xvY2tlZCA9IGZhbHNlO1xuK1x0YmhfdW5sb2NrX3NvY2soc2spO1xuK1x0c29ja19wdXQoc2spO1xuK1x0c29ja19wdXQobmV3c2spO1xuK1x0bmV3c2sgPSBOVUxMO1xuK1x0bmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuK1x0Z290byBsb29rdXA7XG4gZHJvcDpcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuO1xuQEAgLTg1MiwxMiArMTAyOCw1MyBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0aW50IHJjID0gMDtcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbitcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi1cdTAwM2VzaztcbiBcbiBcdGlmIChsaWtlbHkobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19QQUNLRVQpKSB7XG4tXHRcdGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkgLyogbm90IGNsb3NlZCAqL1xuK1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHxcbitcdFx0XHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuK1x0XHRcdCAgICBsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0pIHtcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdFx0XHRnb3RvIG91dF9rZnJlZV9za2I7XG4rXHRcdFx0fVxuIFx0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpO1xuLVx0XHRlbHNlXG4rXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHR9IGVsc2UgaWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCkge1xuK1x0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0XHRpZiAobGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2M9IExMQ19DT05OX1NUQVRFX0FETSkge1xuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbitcdFx0XHR9XG4rXHRcdFx0cmMgPSBsbGNfY29ubl9yY3YobmV3c2ssIHNrYik7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHR9IGVsc2UgaWYgKGxpa2VseShsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIDEpKSB7XG4rXHRcdFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0Z290byBvdXRfa2ZyZWVfc2tiO1xuK1x0XHR9XG4gXHR9IGVsc2UgaWYgKGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfRVZFTlQpIHtcbiBcdFx0LyogdGltZXIgZXhwaXJhdGlvbiBldmVudCAqL1xuIFx0XHRpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpICAvKiBub3QgY2xvc2VkICovXG5AQCAtODcwLDYgKzEwODcsMjQgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIG91dDpcbiBcdHJldHVybiByYztcbityZXRyeTpcbitcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0ICAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcbitcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0aWYgKGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNlIExMQ19DT05OX1NUQVRFX0FETSlcbitcdFx0XHRyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTtcbitcdFx0ZWxzZSB7XG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbitcdFx0fVxuK1x0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiBvdXRfa2ZyZWVfc2tiOlxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRnb3RvIG91dDtcbkBAIC05NTksMTcgKzExOTQsMTggQEAgdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKVxuIFxuIC8qKlxuICAqXHRsbGNfc2tfZnJlZSAtIEZyZWVzIGEgTExDIHNvY2tldFxuLSAqXHRAc2s6IC0gc29ja2V0IHRvIGZyZWVcbisgKlx0QHNrOiBzb2NrZXQgdG8gZnJlZVxuKyAqXHRAc3luYzogd2hldGhlciB0byBzeW5jaHJvbm91c2x5IHN0b3AgdGltZXJzXG4gICpcbi0gKlx0RnJlZXMgYSBMTEMgc29ja2V0XG4rICpcdEZyZWVzIGEgTExDIHNvY2tldC5cbiAgKi9cbi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaylcbit2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKVxuIHtcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiBcbiBcdGxsYy1cdTAwM2VzdGF0ZSA9IExMQ19DT05OX09VVF9PRl9TVkM7XG4gXHQvKiBTdG9wIGFsbCAocG9zc2libHkpIHJ1bm5pbmcgdGltZXJzICovXG4tXHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTtcbitcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHN5bmMpO1xuICNpZmRlZiBERUJVR19MTENfQ09OTl9BTExPQ1xuIFx0cHJpbnRrKEtFUk5fSU5GTyBcIiVzOiB1bmFja3E9JWQsIHR4cT0lZFxcblwiLCBfX2Z1bmNfXyxcbiBcdFx0c2tiX3F1ZXVlX2xlbihcdTAwMjZsbGMtXHUwMDNlcGR1X3VuYWNrX3EpLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NDc6NTAuMjg4MzE5N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MTc2ODA2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTExDIFN1YnN5c3RlbSBQYXRjaCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBkaWdnaW5nIGludG8gdGhlIGBuZXQvbGxjL2Agc3Vic3lzdGVtIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBSaWdodCBhd2F5LCB0aGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgYW55IGNoYW5nZSB0byB0aGUgY29yZSBuZXR3b3JrIGxvZ2ljIGlzIHNvbWV0aGluZyB3ZSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8sIGVzcGVjaWFsbHkgZ2l2ZW4gTExDJ3MgcmVhY2ggaW50byB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMsIHRyYWNraW5nIHN0YXRlcyBsaWtlIGBMTENfSU5DT01JTkdfTk9ORWAsIGBMTENfSU5DT01JTkdfUEVORElOR2AsIGFuZCBgTExDX0lOQ09NSU5HX1FVRVVFRGAsIHNjcmVhbXMgXCJwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJlaGF2aW9yXCIgYW5kIG1ha2VzIHRoaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5MZXQncyBob25lIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZmZWN0ZWQuIEkndmUgZ290IGEgY29tcHJlaGVuc2l2ZSBsaXN0OiBgbGxjX3VpX3JlbGVhc2VgLCBgbGxjX3VpX2FjY2VwdGAsIGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYCwgYGxsY19jb25uX3NlcnZpY2VgLCBgbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrYCwgYGxsY19pbmNvbWluZ19zb2NrX3dvcmtgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfYmFja2xvZ19yY3ZgLCBhbmQgYGxsY19za19mcmVlYC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVudHJ5cG9pbnRzIOKAkyB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9ucyB3ZSBjYW4gcmVhbGlzdGljYWxseSB0YXJnZXQgZm9yIGZ1enppbmcuIEFmdGVyIGEgcXVpY2sgc2NhbiwgSSdtIGZvY3VzaW5nIG9uOiBgbGxjX3VpX3JlbGVhc2VgICh0aG91Z2ggaXQncyBzdGF0aWMsIGl0J3MgcGFydCBvZiB0aGUgYHByb3RvX29wc2ApLCBgbGxjX3VpX2FjY2VwdGAgKGFsc28gc3RhdGljLCBwYXJ0IG9mIGBwcm90b19vcHNgKSwgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGFuZCBgbGxjX3NrX2ZyZWVgLiBUaGVzZSBhcmUgbXkgbGlrZWx5IHN0YXJ0aW5nIHBvaW50cy5cblxuSSBzaG91bGQgYWxzbyBnbGFuY2UgYXQgdGhlIGBLY29uZmlnYCBmb3IgdGhlIExMQyBzdWJzeXN0ZW0sIHdoaWNoIGlzIGBuZXQvbGxjL0tjb25maWdgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGVpdGhlciBgQ09ORklHX0xMQ2Agb3IgYENPTkZJR19MTEMyYCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFVuZGVyc3RhbmRpbmcgaG93IExMQyBpcyBlbmFibGVkIG9yIGRpc2FibGVkIHdpbGwgYmUga2V5IGluIHNldHRpbmcgdXAgdGhlIGFwcHJvcHJpYXRlIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo0Nzo1OC45MDYwMDcwMTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxODU5OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMTENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2xsYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2xsYy9LY29uZmlnOjI6Y29uZmlnIExMQ1xcbm5ldC9sbGMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxubmV0L2xsYy9LY29uZmlnLTQtXFxubmV0L2xsYy9LY29uZmlnOjU6Y29uZmlnIExMQzJcXG5uZXQvbGxjL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiQU5TSS9JRUVFIDgwMi4yIExMQyB0eXBlIDIgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NDc6NTkuMjA3ODcwOTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI0ODcxMTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgTExDIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gYENPTkZJR19MTEMyYCBpcyB0aGUgb25lIHRoZSB1c2VyICpleHBsaWNpdGx5KiBoYXMgYSBzYXkgaW4sIHRoZSBvbmUgdGhleSdyZSBnb2luZyB0byB0b2dnbGUuIFRoYXQgc3VnZ2VzdHMgYENPTkZJR19MTENgIGlzIGxpa2VseSBhbiB1bmRlcmx5aW5nIGRlcGVuZGVuY3ksIHBlcmhhcHMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBvciBlbmFibGVkICpieSogYENPTkZJR19MTEMyYC4gSXQncyBhIGNvbW1vbiBwYXR0ZXJuIGluIEtjb25maWcuIFRvIGJlIGNlcnRhaW4sIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIGFyZSByZWxhdGVkIGFuZCBzZWUgdGhlIGxvZ2ljIGJlaGluZCB0aGVpciBpbnRlcmFjdGlvbnMuIFRoZSBwbGFjZSB0byBnbyBmb3IgdGhhdCBpcyBhbG1vc3QgY2VydGFpbmx5IGBuZXQvbGxjL0tjb25maWdgLiBUaW1lIHRvIGRpdmUgaW4gYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbiBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYExMQ2AgYW5kIGBMTEMyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjQ4OjA5LjQ1NjU4NTkxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9sbGMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIExMQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGVcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIExMQzJcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0c2VsZWN0IExMQ1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGlzIGEgTG9naWNhbCBMaW5rIExheWVyIHR5cGUgMiwgY29ubmVjdGlvbiBvcmllbnRlZCBzdXBwb3J0LlxcbiAgMTA6XFx0XFx0ICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnQgZm9yIFBGX0xMQyBzb2NrZXRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo0ODowOS40NTY2NTIzMDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODI5OTQ2OTI0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTExDIEtlcm5lbCBNb2R1bGUgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIGBDT05GSUdfTExDMmAgaXMgZGVmaW5pdGVseSBzZWxlY3RpbmcgYENPTkZJR19MTENgIGFuZCB0aGF0IGVuYWJsZXMgYFBGX0xMQ2Agc29ja2V0cy4gR3JlYXQsIHRoYXQncyBzdHJhaWdodGZvcndhcmQgLSBzbyBgRW5hYmxlQ29uZmlnczogW1wiTExDMlwiXWAgaXMgY29ycmVjdC5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIExMQyBtb2R1bGUgdGhhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSd2ZSBnb3QgYSBwcmVsaW1pbmFyeSBsaXN0OiBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbmAsIGBsbGNfc2tfZnJlZWAsIGBsbGNfdWlfYWNjZXB0YCwgYW5kIGBsbGNfdWlfcmVsZWFzZWAuXG5cbkhvbGQgb24uLi4gSSBqdXN0IHJlYWxpemVkIGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYCBhcmUgbGlzdGVkIGFzICpzdGF0aWMqIGluIGBuZXQvbGxjL2FmX2xsYy5jYC4gVGhhdCdzIGltcG9ydGFudDsgc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbWl0ZWQgc2NvcGUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgd2l0aGluIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYgdG8gbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgcmlnaHQuIExldCdzIHB1bGwgdXAgYG5ldC9sbGMvYWZfbGxjLmNgIGFuZCB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMzOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU3OjUyLjQ1MTM0OTA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjI1NDI5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNfdWlfYWNjZXB0fGxsY191aV9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sbGMvYWZfbGxjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2xsYy9hZl9sbGMuYz0xNjY9c3RhdGljIGludCBsbGNfdWlfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy0xODktLyoqXFxubmV0L2xsYy9hZl9sbGMuYzoxOTA6ICpcXHRsbGNfdWlfcmVsZWFzZSAtIHNodXRkb3duIHNvY2tldFxcbm5ldC9sbGMvYWZfbGxjLmMtMTkxLSAqXFx0QHNvY2s6IFNvY2tldCB0byByZWxlYXNlLlxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy0xOTQtICovXFxubmV0L2xsYy9hZl9sbGMuYzoxOTU6c3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC9sbGMvYWZfbGxjLmMtMTk2LXtcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmM9Njc2PXN0YXRpYyB2b2lkIGxsY19jbXNnX3JjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2FmX2xsYy5jLTY5MS0vKipcXG5uZXQvbGxjL2FmX2xsYy5jOjY5MjogKlxcdGxsY191aV9hY2NlcHQgLSBhY2NlcHQgYSBuZXcgaW5jb21pbmcgY29ubmVjdGlvbi5cXG5uZXQvbGxjL2FmX2xsYy5jLTY5My0gKlxcdEBzb2NrOiBTb2NrZXQgd2hpY2ggY29ubmVjdGlvbnMgYXJyaXZlIG9uLlxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy02OTktICovXFxubmV0L2xsYy9hZl9sbGMuYzo3MDA6c3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxubmV0L2xsYy9hZl9sbGMuYy03MDEtXFx0XFx0XFx0IHN0cnVjdCBwcm90b19hY2NlcHRfYXJnICphcmcpXFxuLS1cXG5uZXQvbGxjL2FmX2xsYy5jPTEyMjg9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjX3VpX29wcyA9IHtcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmMtMTIzMC1cXHQub3duZXIgICAgICAgPSBUSElTX01PRFVMRSxcXG5uZXQvbGxjL2FmX2xsYy5jOjEyMzE6XFx0LnJlbGVhc2UgICAgID0gbGxjX3VpX3JlbGVhc2UsXFxubmV0L2xsYy9hZl9sbGMuYy0xMjMyLVxcdC5iaW5kXFx0ICAgICA9IGxsY191aV9iaW5kLFxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy0xMjM0LVxcdC5zb2NrZXRwYWlyICA9IHNvY2tfbm9fc29ja2V0cGFpcixcXG5uZXQvbGxjL2FmX2xsYy5jOjEyMzU6XFx0LmFjY2VwdCAgICAgID0gbGxjX3VpX2FjY2VwdCxcXG5uZXQvbGxjL2FmX2xsYy5jLTEyMzYtXFx0LmdldG5hbWUgICAgID0gbGxjX3VpX2dldG5hbWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU3OjUyLjg4NzYxMjA2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MTc3OTQ2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTExDIFNvY2tldCBTeXNjYWxsIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGBQRl9MTENgIHNvY2tldHMgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXkgYXJlIHN0YXRpYy4gVGhpcyBwcmVzZW50cyBhIGNoYWxsZW5nZS4gV2hpbGUgdGhleSBhcmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBgcmVsZWFzZWAgYW5kIGBhY2NlcHRgIHN5c2NhbGxzLCBiZWluZyBzdGF0aWMgY291bGQgbWFrZSB0aGVtIGxlc3MgdmlzaWJsZSB0byBmdXp6ZXJzIHRoYXQgZGVwZW5kIG9uIGBrYWxsc3ltc2AsIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgcmVseWluZyBvbiBuYW1lLWJhc2VkIHRhcmdldGluZy4gRm9ydHVuYXRlbHksIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciBjYW4gZGlyZWN0bHkgdGFyZ2V0IHN5c2NhbGxzIHdpdGhpbiBzcGVjaWZpYyBzb2NrZXQgZmFtaWxpZXMsIHdoaWNoIGlzIGEgZ29vZCB3b3JrYXJvdW5kLlxuXG5JZGVhbGx5LCB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIHRoZSBiZXN0IGZ1enppbmcgc3RyYXRlZ3kuIFNvLCBsZXQncyBzZWUgd2hpY2ggZ2xvYmFsIGZ1bmN0aW9ucyB3ZXJlIGFkZGVkIG9yIG1vZGlmaWVkOiBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbmAsIGBsbGNfc2tfZnJlZWAsIGFuZCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AuIFRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc2V0IHRvIHByaW9yaXRpemUuXG5cbkhtbSwgd2FpdCBhIHNlY29uZC4uLiBJIHNlZSBgbGxjX3VpX2FjY2VwdGAgYW5kIGBsbGNfdWlfcmVsZWFzZWAgaW4gaGVyZSwgYW5kIHRoZXkncmUgc3RhdGljLCBidXQgY2xlYXJseSBpbXBvcnRhbnQuIFRoZXkgcmVwcmVzZW50IHNpbWlsYXIgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBtYWluIHN5c2NhbGxzIGFuZCBjb3VsZCBiZSBlbnRyeSBwb2ludHMgdG8gdGhlIGNvZGUuIEkgdGhpbmsgSSdsbCBtYWtlIHRoZSBjYWxsIHRvIGV4Y2x1ZGUgdGhvc2UgdG8gc3RyaWN0bHkgYWRoZXJlIHRvIHRoZSBcInByZWZlciBub24tc3RhdGljXCIgcnVsZSwgYnV0IHRoZSBnbG9iYWxzIHNlZW0gc2FmZSB0byBpbmNsdWRlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgYW0gYmVpbmcgY2xlYXIgaGVyZSBhbmQgbWFraW5nIHRoZSBiZXN0IGRlY2lzaW9uIGZvciBmdXp6aW5nLlxuXG5Ob3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbGxjX2Nvbm5faGFuZGxlcmAgaXMgaW5kZWVkIGdsb2JhbC4gSXQncyBiZXN0IHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQyMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1Nzo1OS44MDU0MTAyODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Nzc4MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY19jb25uX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2xsYy9hZl9sbGMuYz0xMjU1PXN0YXRpYyBpbnQgX19pbml0IGxsYzJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy0xMjgwLVxcdGxsY19hZGRfcGFjayhMTENfREVTVF9TQVAsIGxsY19zYXBfaGFuZGxlcik7XFxubmV0L2xsYy9hZl9sbGMuYzoxMjgxOlxcdGxsY19hZGRfcGFjayhMTENfREVTVF9DT05OLCBsbGNfY29ubl9oYW5kbGVyKTtcXG5uZXQvbGxjL2FmX2xsYy5jLTEyODItb3V0Olxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTU3PWludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy04OS1cXHRcXHQgKiBza2ItXFx1MDAzZXNrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluXFxubmV0L2xsYy9sbGNfY29ubi5jOjkwOlxcdFxcdCAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lXFxubmV0L2xsYy9sbGNfY29ubi5jLTkxLVxcdFxcdCAqL1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTg1Mj1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTg3MS1cXG5uZXQvbGxjL2xsY19jb25uLmM6ODcyOnZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1Nzo1OS44NTUyMDk1OTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxOTY5NTgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipHbG9iYWwgU2NvcGUgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gb2JzZXJ2aW5nIHRoYXQgYGxsY19jb25uX2hhbmRsZXJgIGhhcyBiZWVuIGRlZmluZWQgYXQgYSBnbG9iYWwgc2NvcGUuIEFuZCwgaWYgSSB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgY29ycmVjdGx5LCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBhbmQgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCBhcmUgYWxzbyBnbG9iYWxseSBhY2Nlc3NpYmxlLCB3aGljaCBpcyBjcnVjaWFsIGZvciBob3cgdGhleSBpbnRlcm9wZXJhdGUuIEl0J3MgYWxzbyBhcHBhcmVudCB0aGF0IGBsbGNfc2tfZnJlZWAgaXMgYW5vdGhlciBnbG9iYWxseSBkZWZpbmVkIGZ1bmN0aW9uIHdoaWNoIG1heSBhbHNvIGNyZWF0ZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgb3RoZXIgZ2xvYmFsIHZhcmlhYmxlcy5cblxuTm93LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gaG93IGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYCBvcGVyYXRlcy4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgY29ubmVjdGlvbiBzdGF0ZSBtYW5hZ2VtZW50IHJlc2lkZXMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlc2UgZ2xvYmFsIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIHRvIGFzc2VzcyBpdHMgb3ZlcmFsbCBkZXNpZ24gYW5kIHBvdGVudGlhbCBmb3IgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjA0LjM3NDkwODAxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyODQzMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbGxjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbGxjL2xsY19jX2FjLmM9MTQzND1zdGF0aWMgdm9pZCBsbGNfcHJvY2Vzc190bXJfZXYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTE0NDEtXFx0XFx0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKVxcbm5ldC9sbGMvbGxjX2NfYWMuYzoxNDQyOlxcdFxcdFxcdGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XFxubmV0L2xsYy9sbGNfY19hYy5jLTE0NDMtXFx0XFx0ZWxzZSB7XFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9NDM9aW50IHN5c2N0bF9sbGMyX2J1c3lfdGltZW91dCA9IExMQzJfQlVTWV9USU1FICogSFo7XFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtNDUtLyoqXFxubmV0L2xsYy9sbGNfY29ubi5jOjQ2OiAqXFx0bGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyAtIHNlbmRzIGV2ZW50IHRvIGNvbm5lY3Rpb24gc3RhdGUgbWFjaGluZVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy00Ny0gKlxcdEBzazogY29ubmVjdGlvblxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTU2LSAqL1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzo1NzppbnQgbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2xsYy9sbGNfY29ubi5jLTU4LXtcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz0xNzg9dm9pZCBsbGNfY29ubl9zZW5kX3BkdShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtMTkxLSAqXFx0UHJlcGFyZXMgc2VydmljZSBwYXJhbWV0ZXJzIChwcmltIGFuZCBwcmltX2RhdGEpLiBjYWxsaW5nIGluZGljYXRpb25cXG5uZXQvbGxjL2xsY19jb25uLmM6MTkyOiAqXFx0ZnVuY3Rpb24gd2lsbCBiZSBkb25lIGluIGxsY19jb25uX3N0YXRlX3Byb2Nlc3MuXFxubmV0L2xsYy9sbGNfY29ubi5jLTE5My0gKi9cXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz03NTE9c3RhdGljIGludCBsbGNfY29ubl9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTc1Ni1cXHRldi1cXHUwMDNlcmVhc29uID0gMDtcXG5uZXQvbGxjL2xsY19jb25uLmM6NzU3OlxcdHJldHVybiBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy03NTgtfVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTg3Mj12b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy05NTMtXFx0XFx0ICogQ2FuJ3QgYmUgc2tiX3NldF9vd25lcl9yLCB0aGlzIHdpbGwgYmUgZG9uZSBhdCB0aGVcXG5uZXQvbGxjL2xsY19jb25uLmM6OTU0OlxcdFxcdCAqIGxsY19jb25uX3N0YXRlX3Byb2Nlc3MgZnVuY3Rpb24sIGxhdGVyIG9uLCB3aGVuIHdlIHdpbGwgdXNlXFxubmV0L2xsYy9sbGNfY29ubi5jLTk1NS1cXHRcXHQgKiBza2JfcXVldWVfcmN2X3NrYiB0byBzZW5kIGl0IHRvIHVwcGVyIGxheWVycywgdGhpcyBpc1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTEwMjc9c3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTEwODAtXFx0XFx0aWYgKGxpa2VseShsbGMtXFx1MDAzZXN0YXRlIFxcdTAwM2UgMSkpICAvKiBub3QgY2xvc2VkICovXFxubmV0L2xsYy9sbGNfY29ubi5jOjEwODE6XFx0XFx0XFx0cmMgPSBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDgyLVxcdFxcdGVsc2VcXG4tLVxcbm5ldC9sbGMvbGxjX2lmLmM9Mzg9aW50IGxsY19idWlsZF9hbmRfc2VuZF9wa3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfaWYuYy01Ni1cXHRza2ItXFx1MDAzZWRldiAgICAgID0gbGxjLVxcdTAwM2VkZXY7XFxubmV0L2xsYy9sbGNfaWYuYzo1NzpcXHRyZXR1cm4gbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTtcXG5uZXQvbGxjL2xsY19pZi5jLTU4LVxcbi0tXFxubmV0L2xsYy9sbGNfaWYuYz03Nz1pbnQgbGxjX2VzdGFibGlzaF9jb25uZWN0aW9uKHN0cnVjdCBzb2NrICpzaywgY29uc3QgdTggKmxtYWMsIHU4ICpkbWFjLCB1OCBkc2FwKVxcbi0tXFxubmV0L2xsYy9sbGNfaWYuYy0xMDYtXFx0XFx0c2tiX3NldF9vd25lcl93KHNrYiwgc2spO1xcbm5ldC9sbGMvbGxjX2lmLmM6MTA3OlxcdFxcdHJjID0gbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTtcXG5uZXQvbGxjL2xsY19pZi5jLTEwOC1cXHR9XFxuLS1cXG5uZXQvbGxjL2xsY19pZi5jPTEyMz1pbnQgbGxjX3NlbmRfZGlzYyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbGxjL2xsY19pZi5jLTE0Ni1cXHRldi1cXHUwMDNlcHJpbV90eXBlID0gTExDX1BSSU1fVFlQRV9SRVE7XFxubmV0L2xsYy9sbGNfaWYuYzoxNDc6XFx0cmMgPSBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xcbm5ldC9sbGMvbGxjX2lmLmMtMTQ4LW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTg6MDQuNDIxMjAwMDA4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTYwMDUwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBMTEMgQ29ubmVjdGlvbiBIYW5kbGluZyBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIHdheSBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQsIHNwZWNpZmljYWxseSBhaW1pbmcgdG8gYWRkcmVzcyByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlIGZhY3QgdGhhdCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AgaXMgZ2xvYmFsIGFuZCBoZWF2aWx5IHVzZWQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBjcml0aWNhbCBhcmVhIGZvciBzY3J1dGlueS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2Uga2V5IGZ1bmN0aW9uczogYGxsY19jb25uX2hhbmRsZXJgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBgbGxjX3NrX2ZyZWVgLCBhbmQgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYC5cblxuVGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyB3b3JrcXVldWUgYW5kIHN0YXRlIG1hY2hpbmUgc3Ryb25nbHkgc3VnZ2VzdHMgYSBzaGlmdCB0b3dhcmRzIG1vcmUgYXN5bmNocm9ub3VzIGFuZCBjb250cm9sbGVkIGNvbm5lY3Rpb24gaGFuZGxpbmcuIFRoaXMgbGlrZWx5IGludm9sdmVzIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2Ygc29ja2V0cyBhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgbW9yZSBjYXJlZnVsbHkuIFNpbmNlIHRoZSBMTEMgcHJvdG9jb2wgaXMgdXNlci1zcGFjZSBhY2Nlc3NpYmxlIHZpYSBQRl9MTEMgc29ja2V0cywgYW55IGZsYXdzIGhlcmUgY291bGQgYmUgZXhwbG9pdGVkLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBzdGF0ZSBtYWNoaW5lIGludGVncmF0ZXMgd2l0aCB0aGUgZXhpc3RpbmcgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYy4gSSBuZWVkIHRvIGRpdmUgaW50byBlYWNoIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgaG93IHRoZSBuZXcgc3RhdGUgbWFjaGluZSBhbmQgd29ya3F1ZXVlIGludGVyYWN0IHdpdGggdGhlbSB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3QgYW5kIGRvbid0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgbmV3IHN5c3RlbSBpcyBhY3R1YWxseSBzb2x2aW5nIHRoZSB1bmRlcmx5aW5nIHByb2JsZW1zIG9mIHRoZSBvbGQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk3MiwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTg6MDkuNjc3MjA3ODQxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4MjQxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxMQzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsbGNfY29ubl9oYW5kbGVyXCIsXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfYWNjZXB0X2luY29taW5nX3NvY2tcIixcbiAgICBcImxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuXCIsXG4gICAgXCJsbGNfc2tfZnJlZVwiLFxuICAgIFwibGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYyBvZiB0aGUgTExDIHByb3RvY29sLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxMQzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsbGNfY29ubl9oYW5kbGVyXCIsXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfYWNjZXB0X2luY29taW5nX3NvY2tcIixcbiAgICBcImxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuXCIsXG4gICAgXCJsbGNfc2tfZnJlZVwiLFxuICAgIFwibGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSBtYWNoaW5lIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgY29ubmVjdGlvbiBoYW5kbGluZyBsb2dpYyBvZiB0aGUgTExDIHByb3RvY29sLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1ODowOS43NjUwNDAwOTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzI3ODUyMjE2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjA5Ljc2NTcwMzY2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMjMyNzc4NTQ2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIExMQyBwcm90b2NvbCByZWxhdGVkIHRvIGluY29taW5nIGNvbm5lY3Rpb24gaGFuZGxpbmcuIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgKSBhbmQgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCkgdG8gc2FmZWx5IG1hbmFnZSBhbmQgZGVmZXIgdGhlIGZyZWVpbmcgb2YgaW5jb21pbmcgc29ja2V0cywgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGEgbGlzdGVuaW5nIHNvY2tldCBpcyBjbG9zZWQgd2hpbGUgY2hpbGQgc29ja2V0cyBhcmUgc3RpbGwgcGVuZGluZyBvciBxdWV1ZWQuXFxuXFxuVGhlc2UgdHlwZXMgb2YgYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbGwgbmV3bHkgaW50cm9kdWNlZCBmaWVsZHMgaW4gYHN0cnVjdCBsbGNfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdW5jdGlvbiBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHNrYiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4ODY3OTJmM2IyY2EwNDM2MDk4NGZlNzE0MGNhZWRkNTcwN2IxZjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwODo0Nzo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmggYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG5pbmRleCBlMWEzMDI2OTY3MjM0Li45YWNkYTBhNmYwNjlmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuKysrIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuQEAgLTYsNiArNiw3IEBAXG4gICogXHRcdCAyMDAxLCAyMDAyIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyBcdTAwM2NhY21lQGNvbmVjdGl2YS5jb20uYnJcdTAwM2VcbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX2lmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGxjLmhcdTAwM2VcbkBAIC0xMyw2ICsxNCwxMCBAQFxuICNkZWZpbmUgTExDX0VWRU5UICAgICAgICAgICAgICAgIDFcbiAjZGVmaW5lIExMQ19QQUNLRVQgICAgICAgICAgICAgICAyXG4gXG4rI2RlZmluZSBMTENfSU5DT01JTkdfTk9ORSAgICAgICAgMFxuKyNkZWZpbmUgTExDX0lOQ09NSU5HX1BFTkRJTkcgICAgIDFcbisjZGVmaW5lIExMQ19JTkNPTUlOR19RVUVVRUQgICAgICAyXG4rXG4gI2RlZmluZSBMTEMyX1BfVElNRSAgICAgICAgICAgICAgIDJcbiAjZGVmaW5lIExMQzJfQUNLX1RJTUUgICAgICAgICAgICAgMVxuICNkZWZpbmUgTExDMl9SRUpfVElNRSAgICAgICAgICAgICAzXG5AQCAtNzIsNiArNzcsOSBAQCBzdHJ1Y3QgbGxjX3NvY2sge1xuIFx0XHRcdFx0XHQgICAgICByZWNlaXZlZCBhbmQgY2F1c2VkIHNlbmRpbmcgRlJNUi5cbiBcdFx0XHRcdFx0ICAgICAgVXNlZCBmb3IgcmVzZW5kaW5nIEZSTVIgKi9cbiBcdHUzMlx0XHQgICAgY21zZ19mbGFncztcbitcdGF0b21pY190XHQgICAgaW5jb21pbmdfc3RhdGU7XG4rXHRzdHJ1Y3Qgc29ja1x0ICAgICppbmNvbWluZ19saXN0ZW5lcjtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCBpbmNvbWluZ193b3JrO1xuIFx0c3RydWN0IGhsaXN0X25vZGUgICBkZXZfaGFzaF9ub2RlO1xuIH07XG4gXG5AQCAtOTMsNyArMTAxLDEwIEBAIHN0YXRpYyBfX2lubGluZV9fIGNoYXIgbGxjX2JhY2tsb2dfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0cnVjdCBzb2NrICpsbGNfc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcbiBcdFx0XHQgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pO1xuIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7XG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xuK3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpO1xuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xuK3ZvaWQgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spO1xuIFxuIHZvaWQgbGxjX3NrX3Jlc2V0KHN0cnVjdCBzb2NrICpzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmNcbmluZGV4IGIwNDQ3YzMzZGJmMDkuLjdkMjQ2ZDRkMjgxYmIgMTAwNjQ0XG4tLS0gYS9uZXQvbGxjL2FmX2xsYy5jXG4rKysgYi9uZXQvbGxjL2FmX2xsYy5jXG5AQCAtMTk2LDYgKzE5Niw3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGM7XG4rXHRib29sIGxpc3RlbmVyO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrID09IE5VTEwpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0yMDYsNiArMjA3LDkgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0XHRsbGMtXHUwMDNlbGFkZHIubHNhcCwgbGxjLVx1MDAzZWRhZGRyLmxzYXApO1xuIFx0aWYgKCFsbGNfc2VuZF9kaXNjKHNrKSlcbiBcdFx0bGxjX3VpX3dhaXRfZm9yX2Rpc2Moc2ssIFJFQURfT05DRShzay1cdTAwM2Vza19yY3Z0aW1lbykpO1xuK1x0bGlzdGVuZXIgPSBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOO1xuK1x0aWYgKGxpc3RlbmVyKVxuK1x0XHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xuIFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkge1xuIFx0XHRzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLVx1MDAzZXNhcDtcbiBcbkBAIC0yMTQsMTYgKzIxOCwxOCBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4gXHRcdCAqL1xuIFx0XHRsbGNfc2FwX2hvbGQoc2FwKTtcbiBcdFx0bGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy1cdTAwM2VzYXAsIHNrKTtcbitcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRsbGNfc2FwX3B1dChzYXApO1xuIFx0fSBlbHNlIHtcbitcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0fVxuIFx0bmV0ZGV2X3B1dChsbGMtXHUwMDNlZGV2LCBcdTAwMjZsbGMtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIFx0c29ja19wdXQoc2spO1xuIFx0c29ja19vcnBoYW4oc2spO1xuIFx0c29jay1cdTAwM2VzayA9IE5VTEw7XG4tXHRsbGNfc2tfZnJlZShzayk7XG4rXHRsbGNfc2tfZnJlZShzaywgdHJ1ZSk7XG4gb3V0OlxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTcyMiw2ICs3MjgsNyBAQCBzdGF0aWMgaW50IGxsY191aV9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdFx0Z290byBmcmVlcztcbiBcdHJjID0gMDtcbiBcdG5ld3NrID0gc2tiLVx1MDAzZXNrO1xuK1x0bGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbiBcdC8qIGF0dGFjaCBjb25uZWN0aW9uIHRvIGEgbmV3IHNvY2tldC4gKi9cbiBcdGxsY191aV9za19pbml0KG5ld3NvY2ssIG5ld3NrKTtcbiBcdHNvY2tfcmVzZXRfZmxhZyhuZXdzaywgU09DS19aQVBQRUQpO1xuZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2Nvbm4uYyBiL25ldC9sbGMvbGxjX2Nvbm4uY1xuaW5kZXggMjYwNDYwZDUwZjU0Yy4uNDI3MmNlNGQ0YTFjYSAxMDA2NDRcbi0tLSBhL25ldC9sbGMvbGxjX2Nvbm4uY1xuKysrIGIvbmV0L2xsYy9sbGNfY29ubi5jXG5AQCAtMzIsNiArMzIsNyBAQCBzdGF0aWMgaW50IGxsY19leGVjX2Nvbm5fdHJhbnNfYWN0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKmV2KTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zICpsbGNfcXVhbGlmeV9jb25uX2V2KHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xuK3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbiAvKiBPZmZzZXQgdGFibGUgb24gY29ubmVjdGlvbiBzdGF0ZXMgdHJhbnNpdGlvbiBkaWFncmFtICovXG4gc3RhdGljIGludCBsbGNfb2Zmc2V0X3RhYmxlW05CUl9DT05OX1NUQVRFU11bTkJSX0NPTk5fRVZdO1xuQEAgLTg4LDYgKzg5LDExIEBAIGludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0ICogc2tiLVx1MDAzZXNrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluXG4gXHRcdCAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lXG4gXHRcdCAqL1xuK1x0XHRpZiAoc2sgIT0gc2tiLVx1MDAzZXNrIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKHNrYi1cdTAwM2VzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbitcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZWluY29taW5nX3N0YXRlLFxuK1x0XHRcdFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCk7XG4gXHRcdHNrYl9nZXQoc2tiKTtcbiBcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTtcbiBcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbkBAIC0zNTQsNyArMzYwLDggQEAgc3RhdGljIGludCBsbGNfY29ubl9zZXJ2aWNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiBcdGludCByYyA9IDE7XG4gXG4tXHRpZiAobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSBOQlJfQ09OTl9TVEFURVMpXG4rXHRpZiAobGxjLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0gfHxcbitcdCAgICBsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIE5CUl9DT05OX1NUQVRFUylcbiBcdFx0Z290byBvdXQ7XG4gXHRyYyA9IDA7XG4gXHR0cmFucyA9IGxsY19xdWFsaWZ5X2Nvbm5fZXYoc2ssIHNrYik7XG5AQCAtNzY1LDI3ICs3NzIsMTUzIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayxcbiBcdG1lbWNweShcdTAwMjZuZXdsbGMtXHUwMDNlbGFkZHIsIGRhZGRyLCBzaXplb2YobmV3bGxjLVx1MDAzZWxhZGRyKSk7XG4gXHRtZW1jcHkoXHUwMDI2bmV3bGxjLVx1MDAzZWRhZGRyLCBzYWRkciwgc2l6ZW9mKG5ld2xsYy1cdTAwM2VkYWRkcikpO1xuIFx0bmV3bGxjLVx1MDAzZWRldiA9IGRldjtcbitcdG5ld2xsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lciA9IHNrO1xuK1x0YXRvbWljX3NldChcdTAwMjZuZXdsbGMtXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19QRU5ESU5HKTtcbitcdElOSVRfV09SSyhcdTAwMjZuZXdsbGMtXHUwMDNlaW5jb21pbmdfd29yaywgbGxjX2luY29taW5nX3NvY2tfd29yayk7XG4rXHRzb2NrX2hvbGQoc2spO1xuIFx0ZGV2X2hvbGQoZGV2KTtcbiBcdGxsY19zYXBfYWRkX3NvY2tldChsbGMtXHUwMDNlc2FwLCBuZXdzayk7XG4gb3V0OlxuIFx0cmV0dXJuIG5ld3NrO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGxjX3NvY2ssXG4rXHRcdFx0XHRcdFx0ICAgIGluY29taW5nX3dvcmspO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2bGxjLVx1MDAzZXNrO1xuK1x0c3RydWN0IHNvY2sgKmxpc3RlbmVyID0gbGxjLVx1MDAzZWluY29taW5nX2xpc3RlbmVyO1xuK1xuK1x0bG9ja19zb2NrKGxpc3RlbmVyKTtcbitcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcdGxsY19za19mcmVlKHNrLCBmYWxzZSk7XG4rXHRzb2NrX29ycGhhbihzayk7XG4rXHRyZWxlYXNlX3NvY2soc2spO1xuK1x0bGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7XG4rXHRyZWxlYXNlX3NvY2sobGlzdGVuZXIpO1xuK1x0ZGV2X3B1dChsbGMtXHUwMDNlZGV2KTtcbitcdGxsYy1cdTAwM2VkZXYgPSBOVUxMO1xuK1x0c29ja19wdXQoc2spO1xuK1x0c29ja19wdXQobGlzdGVuZXIpO1xuK31cbitcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbitcbitcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZsbGMtXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19OT05FKSA9PVxuK1x0ICAgIExMQ19JTkNPTUlOR19OT05FKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRXUklURV9PTkNFKGxsYy1cdTAwM2VzdGF0ZSwgTExDX0NPTk5fT1VUX09GX1NWQyk7XG4rXHRzb2NrX2hvbGQoc2spO1xuK1x0bGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy1cdTAwM2VzYXAsIHNrKTtcbitcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bGxjLVx1MDAzZWluY29taW5nX3dvcmspO1xuK31cbitcbit2b2lkIGxsY19hY2NlcHRfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuK1xuK1x0aWYgKGF0b21pY194Y2hnKFx1MDAyNmxsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX05PTkUpICE9XG4rXHQgICAgTExDX0lOQ09NSU5HX05PTkUpXG4rXHRcdHNvY2tfcHV0KGxsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcik7XG4rfVxuK1xuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXG4rXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSkge1xuK1x0XHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza2ItXHUwMDNlc2s7XG4rXG4rXHRcdGlmIChuZXdzayBcdTAwMjZcdTAwMjYgbmV3c2sgIT0gc2spIHtcbitcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbitcdFx0XHQgICAgTExDX0lOQ09NSU5HX05PTkUpXG4rXHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdH1cbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHR9XG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbit9XG4rXG4rLypcbisgKiBUaGlzIG1pcnJvcnMgdGhlIEFETS1zdGF0ZSBETSBhY3Rpb25zLCBidXQgYSBsaXN0ZW5lciBoYXMgbm8gcGVlclxuKyAqIGFkZHJlc3MgaW4gbGxjLVx1MDAzZWRhZGRyIHlldC5cbisgKi9cbitzdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0IHN0cnVjdCBsbGNfYWRkciAqc2FkZHIsIHU4IGZfYml0KVxuK3tcbitcdHN0cnVjdCBza19idWZmICpuc2tiO1xuK1x0aW50IHJjO1xuK1xuK1x0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG4rXHRpZiAoIW5za2IpXG4rXHRcdHJldHVybjtcbitcbitcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxuK1x0XHRcdCAgICBzYWRkci1cdTAwM2Vsc2FwLCBMTENfUERVX1JTUCk7XG4rXHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcbitcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBzYWRkci1cdTAwM2VtYWMpO1xuK1x0aWYgKHVubGlrZWx5KHJjKSlcbitcdFx0a2ZyZWVfc2tiKG5za2IpO1xuK1x0ZWxzZVxuK1x0XHRkZXZfcXVldWVfeG1pdChuc2tiKTtcbit9XG4rXG4gdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGxsY19hZGRyIHNhZGRyLCBkYWRkcjtcbi1cdHN0cnVjdCBzb2NrICpzaztcbitcdHN0cnVjdCBzb2NrICpzaywgKm5ld3NrID0gTlVMTDtcbitcdGJvb2wgbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuK1x0Ym9vbCBuZXdza19sb2NrZWQgPSBmYWxzZTtcbiBcbiBcdGxsY19wZHVfZGVjb2RlX3NhKHNrYiwgc2FkZHIubWFjKTtcbiBcdGxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCBcdTAwMjZzYWRkci5sc2FwKTtcbiBcdGxsY19wZHVfZGVjb2RlX2RhKHNrYiwgZGFkZHIubWFjKTtcbiBcdGxsY19wZHVfZGVjb2RlX2RzYXAoc2tiLCBcdTAwMjZkYWRkci5sc2FwKTtcbiBcbitsb29rdXA6XG4gXHRzayA9IF9fbGxjX2xvb2t1cChzYXAsIFx1MDAyNnNhZGRyLCBcdTAwMjZkYWRkciwgZGV2X25ldChza2ItXHUwMDNlZGV2KSk7XG4gXHRpZiAoIXNrKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKHNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuK1x0XHRuZXdzayA9IHNrO1xuK1x0XHRiaF9sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbitcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdHNvY2tfcHV0KG5ld3NrKTtcbitcdFx0XHRuZXdzayA9IE5VTEw7XG4rXHRcdFx0Z290byBsb29rdXA7XG4rXHRcdH1cbitcdFx0c2sgPSBsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX2xpc3RlbmVyO1xuK1x0XHRzb2NrX2hvbGQoc2spO1xuK1x0XHRuZXdza19sb29rdXBfcmVmID0gdHJ1ZTtcbitcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0fVxuK1xuIFx0YmhfbG9ja19zb2NrKHNrKTtcbitcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpXG4rXHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRpZiAobmV3c2tfbG9va3VwX3JlZikge1xuK1x0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0bmV3c2tfbG9ja2VkID0gdHJ1ZTtcbitcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbitcdFx0XHRnb3RvIHJldHJ5X3VubG9jaztcbitcdFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcbitcdFx0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpIHtcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHR9XG4rXHR9XG4gXHQvKlxuIFx0ICogVGhpcyBoYXMgdG8gYmUgZG9uZSBoZXJlIGFuZCBub3QgYXQgdGhlIHVwcGVyIGxheWVyIC1cdTAwM2VhY2NlcHRcbiBcdCAqIG1ldGhvZCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIFBST0NPTSBzdGF0ZSBtYWNoaW5lIHdvcmtzOlxuQEAgLTc5NSwxMCArOTI4LDI1IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0ICogaW4gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgcHJpdmF0ZSBhcmVhLiAtYWNtZVxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikpIHtcbi1cdFx0c3RydWN0IHNvY2sgKm5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2c2FkZHIsIFx1MDAyNmRhZGRyKTtcbi1cdFx0aWYgKCFuZXdzaylcbi1cdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHRpZiAoIW5ld3NrKSB7XG4rXHRcdFx0aWYgKGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XG4rXHRcdFx0XHRpZiAoIWxsY19jb25uX2V2X3J4X2Rpc2NfY21kX3BiaXRfc2V0X3goc2ssIHNrYikpIHtcbitcdFx0XHRcdFx0dTggZl9iaXQ7XG4rXG4rXHRcdFx0XHRcdGxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsIFx1MDAyNmZfYml0KTtcbitcdFx0XHRcdFx0bGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsIFx1MDAyNnNhZGRyLCBmX2JpdCk7XG4rXHRcdFx0XHR9IGVsc2UgaWYgKCFsbGNfY29ubl9ldl9yeF94eHhfY21kX3BiaXRfc2V0XzEoc2ssIHNrYikpIHtcbitcdFx0XHRcdFx0bGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsIFx1MDAyNnNhZGRyLCAxKTtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRcdFx0fVxuK1x0XHRcdG5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItXHUwMDNlZGV2LCBcdTAwMjZzYWRkcixcbitcdFx0XHRcdFx0XHRcdCBcdTAwMjZkYWRkcik7XG4rXHRcdFx0aWYgKCFuZXdzaylcbitcdFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdFx0bmV3c2tfbG9ja2VkID0gdHJ1ZTtcbitcdFx0fVxuIFx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuQEAgLTgxMywxOCArOTYxLDQ2IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRza2ItXHUwMDNlc2sgPSBzaztcbiBcdFx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX2VmcmVlO1xuIFx0fVxuLVx0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKVxuK1x0aWYgKHVubGlrZWx5KGxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0pKSB7XG4rXHRcdGlmIChuZXdzaylcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0ZWxzZSBpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKHNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbitcdFx0XHQgTExDX0lOQ09NSU5HX05PTkUpXG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzayk7XG4rXHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHR9XG4rXHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHtcbiBcdFx0bGxjX2Nvbm5fcmN2KHNrLCBza2IpO1xuLVx0ZWxzZSB7XG4rXHRcdGlmIChuZXdzayBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdH0gZWxzZSB7XG4gXHRcdGRwcmludGsoXCIlczogYWRkaW5nIHRvIGJhY2tsb2cuLi5cXG5cIiwgX19mdW5jX18pO1xuIFx0XHRsbGNfc2V0X2JhY2tsb2dfdHlwZShza2IsIExMQ19QQUNLRVQpO1xuLVx0XHRpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpKVxuK1x0XHRpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpKSB7XG4rXHRcdFx0aWYgKG5ld3NrKVxuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4gXHRcdFx0Z290byBkcm9wX3VubG9jaztcbitcdFx0fVxuIFx0fVxuIG91dDpcbitcdGlmIChuZXdza19sb2NrZWQpXG4rXHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiBcdGJoX3VubG9ja19zb2NrKHNrKTtcbiBcdHNvY2tfcHV0KHNrKTtcbitcdGlmIChuZXdza19sb29rdXBfcmVmKVxuK1x0XHRzb2NrX3B1dChuZXdzayk7XG4gXHRyZXR1cm47XG4rcmV0cnlfdW5sb2NrOlxuK1x0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0bmV3c2tfbG9ja2VkID0gZmFsc2U7XG4rXHRiaF91bmxvY2tfc29jayhzayk7XG4rXHRzb2NrX3B1dChzayk7XG4rXHRzb2NrX3B1dChuZXdzayk7XG4rXHRuZXdzayA9IE5VTEw7XG4rXHRuZXdza19sb29rdXBfcmVmID0gZmFsc2U7XG4rXHRnb3RvIGxvb2t1cDtcbiBkcm9wOlxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRyZXR1cm47XG5AQCAtODUyLDEyICsxMDI4LDUzIEBAIHN0YXRpYyBpbnQgbGxjX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRpbnQgcmMgPSAwO1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuK1x0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVx1MDAzZXNrO1xuIFxuIFx0aWYgKGxpa2VseShsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX1BBQ0tFVCkpIHtcbi1cdFx0aWYgKGxpa2VseShsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIDEpKSAvKiBub3QgY2xvc2VkICovXG4rXHRcdGlmIChuZXdzayBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuK1x0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbitcdFx0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRcdFx0Z290byByZXRyeTtcbitcdFx0XHR9XG4rXHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fFxuK1x0XHRcdCAgICBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8XG4rXHRcdFx0ICAgIGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkge1xuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbitcdFx0XHR9XG4gXHRcdFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4tXHRcdGVsc2VcbitcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdFx0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdH0gZWxzZSBpZiAobmV3c2sgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdFx0XHQgICBMTENfSU5DT01JTkdfUVVFVUVEKSB7XG4rXHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuK1x0XHRcdGlmIChsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzYz0gTExDX0NPTk5fU1RBVEVfQURNKSB7XG4rXHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRcdFx0Z290byBvdXRfa2ZyZWVfc2tiO1xuK1x0XHRcdH1cbitcdFx0XHRyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTtcbitcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdH0gZWxzZSBpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpIHtcbitcdFx0XHRyYyA9IGxsY19jb25uX3Jjdihzaywgc2tiKTtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRnb3RvIG91dF9rZnJlZV9za2I7XG4rXHRcdH1cbiBcdH0gZWxzZSBpZiAobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19FVkVOVCkge1xuIFx0XHQvKiB0aW1lciBleHBpcmF0aW9uIGV2ZW50ICovXG4gXHRcdGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkgIC8qIG5vdCBjbG9zZWQgKi9cbkBAIC04NzAsNiArMTA4NywyNCBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gb3V0OlxuIFx0cmV0dXJuIHJjO1xuK3JldHJ5OlxuK1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHQgICAgTExDX0lOQ09NSU5HX1FVRVVFRCkge1xuK1x0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuK1x0XHRpZiAobGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2UgTExDX0NPTk5fU1RBVEVfQURNKVxuK1x0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpO1xuK1x0XHRlbHNlIHtcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdFx0Z290byBvdXRfa2ZyZWVfc2tiO1xuK1x0XHR9XG4rXHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0Z290byBvdXRfa2ZyZWVfc2tiO1xuIG91dF9rZnJlZV9za2I6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdGdvdG8gb3V0O1xuQEAgLTk1OSwxNyArMTE5NCwxOCBAQCB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXG4gXG4gLyoqXG4gICpcdGxsY19za19mcmVlIC0gRnJlZXMgYSBMTEMgc29ja2V0XG4tICpcdEBzazogLSBzb2NrZXQgdG8gZnJlZVxuKyAqXHRAc2s6IHNvY2tldCB0byBmcmVlXG4rICpcdEBzeW5jOiB3aGV0aGVyIHRvIHN5bmNocm9ub3VzbHkgc3RvcCB0aW1lcnNcbiAgKlxuLSAqXHRGcmVlcyBhIExMQyBzb2NrZXRcbisgKlx0RnJlZXMgYSBMTEMgc29ja2V0LlxuICAqL1xuLXZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxuK3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXG4ge1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuIFxuIFx0bGxjLVx1MDAzZXN0YXRlID0gTExDX0NPTk5fT1VUX09GX1NWQztcbiBcdC8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi9cbi1cdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpO1xuK1x0bGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgc3luYyk7XG4gI2lmZGVmIERFQlVHX0xMQ19DT05OX0FMTE9DXG4gXHRwcmludGsoS0VSTl9JTkZPIFwiJXM6IHVuYWNrcT0lZCwgdHhxPSVkXFxuXCIsIF9fZnVuY19fLFxuIFx0XHRza2JfcXVldWVfbGVuKFx1MDAyNmxsYy1cdTAwM2VwZHVfdW5hY2tfcSksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1ODowOS43NjU3MDQ4NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0MTg4MDU0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQgZm9yIExMQyBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgcGF0Y2ggd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IEl0J3MgdG91Y2hpbmcgdGhlIExMQyBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbCAoYG5ldC9sbGMvYCksIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHNvY2tldCBoYW5kbGluZyBkdXJpbmcgaW5jb21pbmcgY29ubmVjdGlvbnMsIGxpa2VseSBhaW1pbmcgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHRpZWQgdG8gc29ja2V0IGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgaXNzdWVzLCB3aGljaCB0ZW5kIHRvIGJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gSG93ZXZlciwgd2UgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuRmlyc3QsIGxldCdzIGlzb2xhdGUgdGhlIGNoYW5nZXMuIFdlJ3ZlIGdvdCBhZGRpdGlvbnMgdG8gYHN0cnVjdCBsbGNfc29ja2AgKG5ldyBmaWVsZHMgYGluY29taW5nX3N0YXRlYCwgYGluY29taW5nX2xpc3RlbmVyYCwgYGluY29taW5nX3dvcmtgKSwgbW9kaWZpY2F0aW9ucyBpbiBgYWZfbGxjLmNgIGludm9sdmluZyBzb2NrZXQgcmVsZWFzZSAoYGxsY191aV9yZWxlYXNlYCksIGFuZCBtb2RpZmljYXRpb25zIGluIGBsbGNfY29ubi5jYCB0byBoYW5kbGUgdGhlIGxpZmVjeWNsZSB3aXRoIHRoZSBuZXcgZmllbGRzLCB3b3JrcXVldWUgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludHJvZHVjZSBzdGF0ZSB0cmFja2luZyBhbmQgYSB3b3JrcXVldWUgdG8gbWFuYWdlIHRoZSBmcmVlaW5nIG9mIGluY29taW5nIHNvY2tldHMuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gQXJlIHRoZXJlIG5ldyBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZT8gTm8uIEFyZSB0aGUgbmV3IGBzdHJ1Y3QgbGxjX3NvY2tgIGZpZWxkcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlPyBZZXMsIHRoZXkncmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrYC4gRG9lcyB0aGlzIHRvdWNoIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnM/IE5vLiBEb2VzIHRoaXMgY29weSBkYXRhIHRvIHVzZXIgc3BhY2U/IE5vLCBub3RoaW5nIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cblxuQmFzZWQgb24gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2Vz4oCUc29ja2V0IGxpZmVjeWNsZSwgbG9ja2luZywgYW5kIHN0YXRlIG1hY2hpbmUgdHJhbnNpdGlvbnPigJRpdCBhcHBlYXJzIHRvIGJlIGEgZml4IGZvciB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YgS0FTQU4gYW5kIExPQ0tERVAuIE5vIHJlZCBmbGFncyBwb2ludGluZyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlIGFyZSBwcmVzZW50IGF0IHRoaXMgcG9pbnQuXG5cbkxldCdzIGRvIGEgZmluYWwgY2hlY2suIFRoZSBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgIGZ1bmN0aW9uIGlzIGFkZGVkLCB3aGljaCBpbnZvbHZlcyBgbGxjX2FsbG9jX2ZyYW1lYCwgYGxsY19wZHVfaGVhZGVyX2luaXRgLCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAsIGFuZCBgbGxjX21hY19oZHJfaW5pdGAuIFdlJ3JlIGNyZWF0aW5nIGFuZCBzZW5kaW5nIFNLQnMsIGJ1dCB0eXBpY2FsbHkgZnVuY3Rpb25zIGxpa2UgYGFsbG9jX3NrYmAgYW5kIGhlYWRlciBpbml0aWFsaXphdGlvbiB3cml0ZSB0aGUgYnl0ZXMgZXhhY3RseSBhcyBuZWVkZWQuIExldCBtZSBxdWVyeSBmb3IgYGxsY19hbGxvY19mcmFtZWAgdG8gYmUgY2VydGFpbi5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgcGF0Y2gsIGFuZCBubyBpbmRpY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc5MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1OTowNC4xODQ1MTM5MzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODAxNDQzNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX2FsbG9jX2ZyYW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2xsY19zYXAuaD0xNz12b2lkIGxsY19zYXZlX3ByaW1pdGl2ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQvbGxjX3NhcC5oLTE4LVxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgcHJpbSk7XFxuaW5jbHVkZS9uZXQvbGxjX3NhcC5oOjE5OnN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L2xsY19zYXAuaC0yMC1cXHRcXHRcXHRcXHR1OCB0eXBlLCB1MzIgZGF0YV9zaXplKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0xOTI9aW50IGxsY19jb25uX2FjX3NlbmRfZGlzY19jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMTk1LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6MTk2OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy0xOTctXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MjE3PWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMjAtXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzoyMjE6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTIyMi1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0yNDM9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTI0Ni1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjI0NzpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtMjQ4LVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTI2Nz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9mcm1yX3JzcF9mX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yNzktXFx0XFx0Zl9iaXQgPSAwO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzoyODA6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yODEtXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTMwMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTMwNC1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjMwNTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMDYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTMyOD1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTMzNS1cXHRsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCBcXHUwMDI2Zl9iaXQpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzozMzY6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMzctXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTQyMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2lfeHh4X3hfc2V0XzBfb3Jfc2VuZF9ycihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDI3LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDI4OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00MjktXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NDU5PWludCBsbGNfY29ubl9hY19zZW5kX3Jlal9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDYyLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDYzOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00NjQtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NDgzPWludCBsbGNfY29ubl9hY19zZW5kX3Jlal9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDg2LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDg3OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00ODgtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTA3PWludCBsbGNfY29ubl9hY19zZW5kX3Jlal94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTEwLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTExOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01MTItXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTMxPWludCBsbGNfY29ubl9hY19zZW5kX3Jucl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTM0LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTM1OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01MzYtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTU1PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTU4LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTU5OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01NjAtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTc5PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTgyLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTgzOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01ODQtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NjE1PWludCBsbGNfY29ubl9hY19vcHRfc2VuZF9ybnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTYxOC1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjYxOTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNjIwLVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTYzOT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjQyLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NjQzOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy02NDQtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NjYzPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy02NjYtXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo2Njc6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTY2OC1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz02ODg9aW50IGxsY19jb25uX2FjX3NlbmRfYWNrX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy02OTEtXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo2OTI6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTY5My1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz03MTI9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTcxNS1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjcxNjpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNzE3LVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTczNj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTczOS1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjc0MDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNzQxLVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTc3MD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9zYWJtZV9jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNzczLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6Nzc0OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy03NzUtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9Nzk4PWludCBsbGNfY29ubl9hY19zZW5kX3VhX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy04MDItXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo4MDM6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTgwNC1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz05NTk9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF9hY2twZihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtOTYzLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6OTY0OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy05NjUtXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9ODUyPXN0YXRpYyB2b2lkIGxsY19jb25uX3NlbmRfZG1fcnNwKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtODU3LVxcbm5ldC9sbGMvbGxjX2Nvbm4uYzo4NTg6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NTktXFx0aWYgKCFuc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTEwNT1pbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF94aWRfcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jLTExMy1cXHRsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgXFx1MDAyNmRzYXApO1xcbm5ldC9sbGMvbGxjX3NfYWMuYzoxMTQ6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXFxubmV0L2xsYy9sbGNfc19hYy5jLTExNS1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfeGlkX2luZm8pKTtcXG4tLVxcbm5ldC9sbGMvbGxjX3NfYWMuYz0xNDg9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfdGVzdF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zX2FjLmMtMTYzLVxcdGRhdGFfc2l6ZSA9IG50b2hzKGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9wcm90bykgLSAzO1xcbm5ldC9sbGMvbGxjX3NfYWMuYzoxNjQ6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIGRhdGFfc2l6ZSk7XFxubmV0L2xsYy9sbGNfc19hYy5jLTE2NS1cXHRpZiAoIW5za2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zYXAuYz0yMj1zdGF0aWMgaW50IGxsY19tYWNfaGVhZGVyX2xlbih1bnNpZ25lZCBzaG9ydCBkZXZ0eXBlKVxcbi0tXFxubmV0L2xsYy9sbGNfc2FwLmMtMzItLyoqXFxubmV0L2xsYy9sbGNfc2FwLmM6MzM6ICpcXHRsbGNfYWxsb2NfZnJhbWUgLSBhbGxvY2F0ZXMgc2tfYnVmZiBmb3IgZnJhbWVcXG5uZXQvbGxjL2xsY19zYXAuYy0zNC0gKlxcdEBzazogIHNvY2tldCB0byBhbGxvY2F0ZSBmcmFtZSB0b1xcbi0tXFxubmV0L2xsYy9sbGNfc2FwLmMtNDEtICovXFxubmV0L2xsYy9sbGNfc2FwLmM6NDI6c3RydWN0IHNrX2J1ZmYgKmxsY19hbGxvY19mcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2xsYy9sbGNfc2FwLmMtNDMtXFx0XFx0XFx0XFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYz00Mj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfeGlkX3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy00NS1cXHRpbnQgcmMgPSAxO1xcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo0NjpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTQ3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY194aWRfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jPTY2PXN0YXRpYyBpbnQgbGxjX3N0YXRpb25fYWNfc2VuZF90ZXN0X3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy03Ny1cXHRkYXRhX3NpemUgPSBudG9ocyhldGhfaGRyKHNrYiktXFx1MDAzZWhfcHJvdG8pIC0gMztcXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM6Nzg6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIGRhdGFfc2l6ZSk7XFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTc5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1OTowNi40NjQ2NjM4NDVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUxMjkwOTg1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYGxsY19hbGxvY19mcmFtZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBsbGNfYWxsb2NfZnJhbWVgLCBhbmQgaXRzIHJvbGUgaW4gYWxsb2NhdGluZyBhbiBgc2tiYC4gVGhhdCdzIHRoZSBjb3JlIG5ldHdvcmsgYnVmZmVyIHN0cnVjdHVyZSwgc28gdGhpcyBmdW5jdGlvbiBpcyBjbGVhcmx5IGNyaXRpY2FsLiBMZXQncyBkaWcgaW4gYW5kIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBsbGNfYWxsb2NfZnJhbWVgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJmYWNpbmcgd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNrYiBhbGxvY2F0aW9uIG1lY2hhbmlzbXMuIFdoYXQncyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgaXQgdXNpbmcgYSBzdGFuZGFyZCBga21hbGxvY2AgYXBwcm9hY2gsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIGZvciBza2JzPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGZsYWdzIG9yIHBhcmFtZXRlcnMgcGFzc2VkIHRoYXQgaGludCBhdCBMTEMtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGZvciB0aGUgbmV0d29yayBmcmFtZT8gS25vd2luZyBob3cgaXQncyBhbGxvY2F0aW5nLCBpbml0aWFsaXppbmcsIGFuZCBwb3RlbnRpYWxseSBsaW5raW5nIHRoaXMgYHNrYmAgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIHByb3RvY29sIHN0YWNrLiBJIG5lZWQgdG8gc2VlIGlmIGl0IHV0aWxpemVzIGFueSBjdXN0b20gYWxsb2NhdG9ycywgb3IgaWYgaXQgbWlnaHQgYmUgc3ViamVjdCB0byBmcmFnbWVudGF0aW9uIGlzc3VlcyBpZiBoYW5kbGluZyBsYXJnZXIgZnJhbWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE2NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU5OjIxLjU5Mzc2Njk2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwNTg1OTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc2tfYnVmZiBcXFxcKmxsY19hbGxvY19mcmFtZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9sbGNfc2FwLmg9MTc9dm9pZCBsbGNfc2F2ZV9wcmltaXRpdmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L2xsY19zYXAuaC0xOC1cXHRcXHRcXHR1bnNpZ25lZCBjaGFyIHByaW0pO1xcbmluY2x1ZGUvbmV0L2xsY19zYXAuaDoxOTpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5pbmNsdWRlL25ldC9sbGNfc2FwLmgtMjAtXFx0XFx0XFx0XFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSk7XFxuLS1cXG5uZXQvbGxjL2xsY19zYXAuYz0yMj1zdGF0aWMgaW50IGxsY19tYWNfaGVhZGVyX2xlbih1bnNpZ25lZCBzaG9ydCBkZXZ0eXBlKVxcbi0tXFxubmV0L2xsYy9sbGNfc2FwLmMtNDEtICovXFxubmV0L2xsYy9sbGNfc2FwLmM6NDI6c3RydWN0IHNrX2J1ZmYgKmxsY19hbGxvY19mcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2xsYy9sbGNfc2FwLmMtNDMtXFx0XFx0XFx0XFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTk6MjQuMjk5NjM2OTI1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMzIyNzk5NzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbGxjX3NhcC5jYCAtIExpbmUgNDIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGluIHRoZSBMTEMgKExvZ2ljYWwgTGluayBDb250cm9sKSBzdWJsYXllciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIFNlcnZpY2UgQWNjZXNzIFBvaW50IChTQVApIGZ1bmN0aW9uYWxpdHkuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG5ldC9sbGMvbGxjX3NhcC5jYCBiZWNhdXNlIGl0J3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIGZvciBTQVAtcmVsYXRlZCBjb2RlLiBNeSBodW5jaCBpcyB0aGF0IHRoaXMgZmlsZSB3aWxsIGNvbnRhaW4gdGhlIHJlZ2lzdHJhdGlvbiwgbG9va3VwLCBhbmQgcG90ZW50aWFsIGhhbmRsaW5nIG9mIFNBUHMuIE5vdywgc2luY2UgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjayBhcmNoaXRlY3R1cmUsIEknbGwgZ28gZGlyZWN0bHkgdG8gbGluZSA0Mi4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2V0IG1lIGludG8gdGhlIGhlYXJ0IG9mIGEgcmVsZXZhbnQgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4gRGVwZW5kaW5nIG9uIHRoZSBjb2RlIHN0eWxlLCBsaW5lIDQyIGNvdWxkIGJlIHRoZSBzdGFydCBvZiBhIGZ1bmN0aW9uIG9yIGEgZ2xvYmFsIHZhcmlhYmxlLiBLbm93aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGZpbGUgaXMga2V5LCBzbyBsZXQncyBzZWUgd2hhdCB3ZSBmaW5kIHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY5NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAyOjQ3LjUyNzYzODU0NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbGxjL2xsY19zYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHR9XFxuICAzMTpcXHRcXG4gIDMyOlxcdC8qKlxcbiAgMzM6XFx0ICpcXHRsbGNfYWxsb2NfZnJhbWUgLSBhbGxvY2F0ZXMgc2tfYnVmZiBmb3IgZnJhbWVcXG4gIDM0OlxcdCAqXFx0QHNrOiAgc29ja2V0IHRvIGFsbG9jYXRlIGZyYW1lIHRvXFxuICAzNTpcXHQgKlxcdEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRoaXMgc2tiIHdpbGwgYmUgc2VudCBvdmVyXFxuICAzNjpcXHQgKlxcdEB0eXBlOiBwZHUgdHlwZSB0byBhbGxvY2F0ZVxcbiAgMzc6XFx0ICpcXHRAZGF0YV9zaXplOiBkYXRhIHNpemUgdG8gYWxsb2NhdGVcXG4gIDM4OlxcdCAqXFxuICAzOTpcXHQgKlxcdEFsbG9jYXRlcyBhbiBza19idWZmIGZvciBmcmFtZSBhbmQgaW5pdGlhbGl6ZXMgc2tfYnVmZiBmaWVsZHMuXFxuICA0MDpcXHQgKlxcdFJldHVybnMgYWxsb2NhdGVkIHNrYiBvciAlTlVMTCB3aGVuIG91dCBvZiBtZW1vcnkuXFxuICA0MTpcXHQgKi9cXG4gIDQyOlxcdHN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiAgNDM6XFx0XFx0XFx0XFx0XFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcXG4gIDQ0OlxcdHtcXG4gIDQ1OlxcdFxcdGludCBobGVuID0gdHlwZSA9PSBMTENfUERVX1RZUEVfVSA/IDMgOiA0O1xcbiAgNDY6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0aGxlbiArPSBsbGNfbWFjX2hlYWRlcl9sZW4oZGV2LVxcdTAwM2V0eXBlKTtcXG4gIDQ5OlxcdFxcdHNrYiA9IGFsbG9jX3NrYihobGVuICsgZGF0YV9zaXplLCBHRlBfQVRPTUlDKTtcXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0aWYgKHNrYikge1xcbiAgNTI6XFx0XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gIDUzOlxcdFxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgaGxlbik7XFxuICA1NDpcXHRcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gIDU1OlxcdFxcdFxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuICA1NjpcXHRcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpO1xcbiAgNTc6XFx0XFx0XFx0c2tiLVxcdTAwM2VkZXYgICAgICA9IGRldjtcXG4gIDU4OlxcdFxcdFxcdGlmIChzayAhPSBOVUxMKVxcbiAgNTk6XFx0XFx0XFx0XFx0c2tiX3NldF9vd25lcl93KHNrYiwgc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMjo0Ny41Mjc3MTE4MTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3ODEyNTQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExMQyBGcmFtZSBBbGxvY2F0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgbGxjX2FsbG9jX2ZyYW1lYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSB1c2Ugb2YgYGFsbG9jX3NrYmAg4oCTIHRoYXQncyBzdGFuZGFyZCBmb3IgYWxsb2NhdGluZyB0aGUgc29ja2V0IGJ1ZmZlciwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBmb3IgbmV0d29yayBjb21tdW5pY2F0aW9uLiBOb3csIGl0IGxvb2tzIGxpa2UgYWZ0ZXIgdGhlIFNLQiBpcyBhbGxvY2F0ZWQsIHRoZXJlIGFyZSBzZXZlcmFsIGluaXRpYWxpemF0aW9uIHN0ZXBzLiBTcGVjaWZpY2FsbHksIGBsbGNfcGR1X2hlYWRlcl9pbml0YCwgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgLCBhbmQgYGxsY19tYWNfaGRyX2luaXRgIGFyZSBjYWxsZWQsIGFuZCBJIHN1c3BlY3QgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwaWVjZXMgdGhhdCBwb3B1bGF0ZSB0aGUgaGVhZGVycyB3aXRoaW4gdGhlIFNLQi4gTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgb2YgYm90aCBgbGxjX3BkdV9oZWFkZXJfaW5pdGAgYW5kIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCDigJMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFByb3RvY29sIERhdGEgVW5pdCAoUERVKSBoZWFkZXJzIGFuZCB0aGUgRGF0YSBNYW5hZ2VtZW50IHJlc3BvbnNlIGFyZSBiZWluZyBjb25zdHJ1Y3RlZC4gVGhhdCdsbCBiZSBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyB0aGUgZnJhbWUgaXMgcHV0IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ1NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDI6NTEuMzA1ODQxMzk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA4MzI5NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbGxjX3BkdV9oZWFkZXJfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9sbGNfcGR1Lmg9MjEyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19wZHVfdW4gKmxsY19wZHVfdW5faGRyKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjI2LSAqL1xcbmluY2x1ZGUvbmV0L2xsY19wZHUuaDoyMjc6c3RhdGljIGlubGluZSB2b2lkIGxsY19wZHVfaGVhZGVyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHlwZSxcXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjI4LVxcdFxcdFxcdFxcdCAgICAgICB1OCBzc2FwLCB1OCBkc2FwLCB1OCBjcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDI6NTMuMzE0MTgwOTc5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDc1ODUwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gTExDIFBEVSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBMTEMgUERVIHN0cnVjdHVyZSwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCB3aXRoIGBpbmNsdWRlL25ldC9sbGNfcGR1LmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjI3LiBUaGF0J3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gYmVnaW4gdG8gZ2V0IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFueSBkZWZpbmVkIGNvbnN0YW50cyByZWxhdGVkIHRvIHRoZSBwcm90b2NvbCBkYXRhIHVuaXQuIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIGZpZWxkcy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIGhvdyB0aGUgdmFyaW91cyBjb21wb25lbnRzIGFyZSBhcnJhbmdlZCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTUwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDI6NTYuMzYxNzY4NTk5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2xsY19wZHUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0ICpcXHRAdHlwZTogdHlwZSBvZiBQRFUgKFUsIEkgb3IgUykuXFxuIDIyMTpcXHQgKlxcdEBzc2FwOiBzb3VyY2Ugc2FwLlxcbiAyMjI6XFx0ICpcXHRAZHNhcDogZGVzdGluYXRpb24gc2FwLlxcbiAyMjM6XFx0ICpcXHRAY3I6IGNvbW1hbmQvcmVzcG9uc2UgYml0ICgwIG9yIDEpLlxcbiAyMjQ6XFx0ICpcXG4gMjI1OlxcdCAqXFx0VGhpcyBmdW5jdGlvbiBzZXRzIERTQVAsIFNTQVAgYW5kIGNvbW1hbmQvUmVzcG9uc2UgYml0IGluIExMQyBoZWFkZXIuXFxuIDIyNjpcXHQgKi9cXG4gMjI3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2hlYWRlcl9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsXFxuIDIyODpcXHRcXHRcXHRcXHRcXHQgICAgICAgdTggc3NhcCwgdTggZHNhcCwgdTggY3IpXFxuIDIyOTpcXHR7XFxuIDIzMDpcXHRcXHRpbnQgaGxlbiA9IDQ7IC8qIGRlZmF1bHQgdmFsdWUgZm9yIEkgYW5kIFMgdHlwZXMgKi9cXG4gMjMxOlxcdFxcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHU7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdHN3aXRjaCAodHlwZSkge1xcbiAyMzQ6XFx0XFx0Y2FzZSBMTENfUERVX1RZUEVfVTpcXG4gMjM1OlxcdFxcdFxcdGhsZW4gPSAzO1xcbiAyMzY6XFx0XFx0XFx0YnJlYWs7XFxuIDIzNzpcXHRcXHRjYXNlIExMQ19QRFVfVFlQRV9VX1hJRDpcXG4gMjM4OlxcdFxcdFxcdGhsZW4gPSA2O1xcbiAyMzk6XFx0XFx0XFx0YnJlYWs7XFxuIDI0MDpcXHRcXHR9XFxuIDI0MTpcXHRcXG4gMjQyOlxcdFxcdHNrYl9wdXNoKHNrYiwgaGxlbik7XFxuIDI0MzpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gMjQ0OlxcdFxcdHBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7XFxuIDI0NTpcXHRcXHRwZHUtXFx1MDAzZWRzYXAgPSBkc2FwO1xcbiAyNDY6XFx0XFx0cGR1LVxcdTAwM2Vzc2FwID0gc3NhcDtcXG4gMjQ3OlxcdFxcdHBkdS1cXHUwMDNlc3NhcCB8PSBjcjtcXG4gMjQ4OlxcdH1cXG4gMjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMjo1Ni4zNjE4NDQyNzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3Mjc4OTIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYC4gSSBuZWVkIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoaXMgZnVuY3Rpb24gYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgb3ZlcmFsbCBwcm90b2NvbCBzdGFjay4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSBpdHMgcm9sZTsgaXQgc2VlbXMgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIERhdGEgTW9kZSAoRE0pIHJlc3BvbnNlLCBwcm9iYWJseSByZWxhdGVkIHRvIExMQyAoTG9naWNhbCBMaW5rIENvbnRyb2wpIGluaXRpYWxpemF0aW9uLiBJJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHR5cGljYWwgY2FsbCBmbG93IGFyb3VuZCB0aGlzIHBvaW50IOKAkyB3aGVyZSBkb2VzIHRoaXMgZml0IHdpdGhpbiB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHNlcXVlbmNlPyBJcyB0aGlzIHRyaWdnZXJlZCBieSBhbiBpbmNvbWluZyBETSBmcmFtZT8gSXMgaXQgYSByZXNwb25zZSB0byBhIHNwZWNpZmljIHJlcXVlc3QgZnJvbSB0aGUgcGVlcj8gS25vd2luZyB0aGUgY29udGV4dCwgSSBjYW4gcXVpY2tseSBob25lIGluIG9uIHRoZSBjb3JlIGxvZ2ljIGFuZCBjcml0aWNhbCBwYXJhbWV0ZXJzLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFdoYXQgZmFpbHVyZSBjYXNlcyBhcmUgY292ZXJlZD8gQXJlIHRoZXkgaGFuZGxlZCBncmFjZWZ1bGx5LCBvciBkbyB0aGV5IHBvdGVudGlhbGx5IGxlYXZlIHRoZSBzeXN0ZW0gaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlPyBGaW5hbGx5LCBJIG5lZWQgdG8gY29uc2lkZXIgaXRzIGludGVyYWN0aW9ucyB3aXRoIGxvd2VyIGxheWVycy4gRG9lcyBpdCBjYWxsIGFueSBmdW5jdGlvbnMgdGhhdCBtaWdodCBsZWFkIHRvIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIHN0YXRlIGNoYW5nZXMgaW4gdGhlIGxpbmsgbGF5ZXI/IEFyZSB0aGVzZSBwcm9wZXJseSBzeW5jaHJvbml6ZWQgYW5kIG1hbmFnZWQ/IExldCdzIGNoZWNrIHRoZSBjb2RlIGFuZCBjb25maXJtIHRoaXMgbWVudGFsIG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYyOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDI6NTkuOTM0NjM3MDMzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI5MDkxODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbGxjX3BkdV9pbml0X2FzX2RtX3JzcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9sbGNfcGR1Lmg9NDMwPXZvaWQgbGxjX3BkdV9pbml0X2FzX3NhYm1lX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwX2JpdCk7XFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oOjQzMTp2b2lkIGxsY19wZHVfaW5pdF9hc19kbV9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZl9iaXQpO1xcbmluY2x1ZGUvbmV0L2xsY19wZHUuaC00MzItdm9pZCBsbGNfcGR1X2luaXRfYXNfZnJtcl9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxsY19wZHVfc24gKnByZXZfcGR1LFxcbi0tXFxubmV0L2xsYy9sbGNfcGR1LmM9MTc4PXZvaWQgbGxjX3BkdV9pbml0X2FzX3NhYm1lX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwX2JpdClcXG4tLVxcbm5ldC9sbGMvbGxjX3BkdS5jLTE5My0gKi9cXG5uZXQvbGxjL2xsY19wZHUuYzoxOTQ6dm9pZCBsbGNfcGR1X2luaXRfYXNfZG1fcnNwKHN0cnVjdCBza19idWZmICpza2IsIHU4IGZfYml0KVxcbm5ldC9sbGMvbGxjX3BkdS5jLTE5NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjAxLjU2MzczNTAyMloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzcyODYzMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbmV0L2xsYy9sbGNfcGR1LmNgIGFyb3VuZCBMaW5lIDE5NCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvbGxjL2xsY19wZHUuY2AuIEJhc2VkIG9uIHdoYXQgSSdtIGxvb2tpbmcgYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXJvdW5kIGxpbmUgMTk0LiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIHRoZSBMTEMgKExvZ2ljYWwgTGluayBDb250cm9sKSBQRFUgKFByb3RvY29sIERhdGEgVW5pdCkgaGFuZGxpbmcsIHByb2JhYmx5IGVpdGhlciBjb25zdHJ1Y3RpbmcsIHBhcnNpbmcgb3IgcHJvY2Vzc2luZyB0aGUgZGF0YSB3aXRoaW4gdGhlIExMQyBoZWFkZXIgb3IgcGF5bG9hZC4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIHNwZWNpZmljIHNlY3Rpb24gd2lsbCB0ZWxsIG1lIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZsb3cgYW5kIHdoZXRoZXIgaXTigJlzIHJlbGF0ZWQgdG8gaW5jb21pbmcgZnJhbWVzLCBvdXRnb2luZyBmcmFtZXMsIGNvbm5lY3Rpb24gc2V0dXAgb3IgZGF0YSB0cmFuc2Zlci4gR2l2ZW4gdGhhdCB0aGlzIGlzIExMQywgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgRFNBUCAoRGVzdGluYXRpb24gU2VydmljZSBBY2Nlc3MgUG9pbnQpLCBTU0FQIChTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQpLCBDb250cm9sIGZpZWxkcywgcG90ZW50aWFsbHkgYW4gSW5mb3JtYXRpb24gZmllbGQsIGFuZCBtYXliZSBldmVuIHNvbWUgc3VibmV0d29yayBhY2Nlc3MgcHJvdG9jb2wgZGV0YWlscy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgZXJyb3JzLCBzdGF0ZSB0cmFuc2l0aW9ucywgb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgTUFDIGxheWVyLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGxpbmUgMTk0IG1pZ2h0IGhvbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjI5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDM6MDUuMzM2NjAxNzM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbGxjL2xsY19wZHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTA6XFx0ICpcXHRAZl9iaXQ6IFRoZSBGIGJpdCB0byBzZXQgaW4gdGhlIFBEVVxcbiAxOTE6XFx0ICpcXG4gMTkyOlxcdCAqXFx0QnVpbGRzIGEgcGR1IGZyYW1lIGFzIGEgRE0gcmVzcG9uc2UuXFxuIDE5MzpcXHQgKi9cXG4gMTk0OlxcdHZvaWQgbGxjX3BkdV9pbml0X2FzX2RtX3JzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmX2JpdClcXG4gMTk1OlxcdHtcXG4gMTk2OlxcdFxcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpO1xcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHRwZHUtXFx1MDAzZWN0cmxfMSAgPSBMTENfUERVX1RZUEVfVTtcXG4gMTk5OlxcdFxcdHBkdS1cXHUwMDNlY3RybF8xIHw9IExMQ18yX1BEVV9SU1BfRE07XFxuIDIwMDpcXHRcXHRwZHUtXFx1MDAzZWN0cmxfMSB8PSAoKGZfYml0IFxcdTAwMjYgMSkgXFx1MDAzY1xcdTAwM2MgNCkgXFx1MDAyNiBMTENfVV9QRl9CSVRfTUFTSztcXG4gMjAxOlxcdH1cXG4gMjAyOlxcdFxcbiAyMDM6XFx0LyoqXFxuIDIwNDpcXHQgKlxcdGxsY19wZHVfaW5pdF9hc19mcm1yX3JzcCAtIGJ1aWxkcyBGUk1SIHJlc3BvbnNlIFBEVVxcbiAyMDU6XFx0ICpcXHRAc2tiOiBBZGRyZXNzIG9mIHRoZSBmcmFtZSB0byBidWlsZFxcbiAyMDY6XFx0ICpcXHRAcHJldl9wZHU6IFRoZSByZWplY3RlZCBQRFUgZnJhbWVcXG4gMjA3OlxcdCAqXFx0QGZfYml0OiBUaGUgRiBiaXQgdG8gc2V0IGluIHRoZSBQRFVcXG4gMjA4OlxcdCAqXFx0QHZzOiB0eCBzdGF0ZSB2YXJpIHZhbHVlIGZvciB0aGUgZGF0YSBsaW5rIGNvbm4gYXQgdGhlIHJlamVjdGluZyBMTENcXG4gMjA5OlxcdCAqXFx0QHZyOiByeCBzdGF0ZSB2YXIgdmFsdWUgZm9yIHRoZSBkYXRhIGxpbmsgY29ubiBhdCB0aGUgcmVqZWN0aW5nIExMQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzowNS4zMzY3MDQzNDhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNTY2MDA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExMQyBQRFUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIExMQyBQRFUgaXMgaW5pdGlhbGl6ZWQuIGBsbGNfcGR1X2hlYWRlcl9pbml0YCBpcyB0YWtpbmcgY2FyZSBvZiBzZXR0aW5nIHRoZSBgZHNhcGAgYW5kIGBzc2FwYCBmaWVsZHMuIFRoZW4sIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUgYGN0cmxfMWAgZmllbGQuIFJpZ2h0LCBzbyBmYXIsIHNvIGdvb2QuXG5cbkZvciB0aGUgYExMQ19QRFVfVFlQRV9VYCBQRFUgdHlwZSwgdGhlIGhlYWRlciBsZW5ndGgsIGBobGVuYCwgaXMgc2V0IHRvIDMgYnl0ZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZSBMTEMgc3VibGF5ZXIuIE5vdywgbGV0J3MgY29ubmVjdCB0aGUgZG90cy4gVGhlIGBzdHJ1Y3QgbGxjX3BkdV91bmAgc3RydWN0dXJlIGlzIGRlZmluZWQgdG8gaG9sZCB0aGUgYGRzYXBgLCBgc3NhcGAsIGFuZCBgY3RybF8xYCBmaWVsZHMuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBpcyBjb3JyZWN0LiBJ4oCZbSBnb2luZyB0byBnbyBhaGVhZCBhbmQgY2hlY2sgdGhhdCBgc3RydWN0IGxsY19wZHVfdW5gIGRlZmluaXRpb24gYWdhaW4uIEp1c3QgdG8gdmVyaWZ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk0MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjA5LjM3MjM2ODE0NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMzkzNDQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbGxjX3BkdV91biBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9sbGNfcGR1Lmg9MjAwPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19wZHVfc24gKmxsY19wZHVfc25faGRyKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjA1LS8qIFVuLW51bWJlcmVkIFBEVSBmb3JtYXQgKDMgYnl0ZXMgaW4gbGVuZ3RoKSAqL1xcbmluY2x1ZGUvbmV0L2xsY19wZHUuaDoyMDY6c3RydWN0IGxsY19wZHVfdW4ge1xcbmluY2x1ZGUvbmV0L2xsY19wZHUuaC0yMDctXFx0dTggZHNhcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDM6MTEuODg2MzEwMzQzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjI5NDQ3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gTExDIFBEVSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgTG9naWNhbCBMaW5rIENvbnRyb2wgKExMQykgUHJvdG9jb2wgRGF0YSBVbml0IChQRFUpIGZvcm1hdCwgcGFydGljdWxhcmx5IGhvdyBpdCdzIGRlZmluZWQgaW4gdGhlIGtlcm5lbC4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaW5jbHVkZS9uZXQvbGxjX3BkdS5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIwNi4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiByZXNpZGVzLCBvciBhdCBsZWFzdCBhIGdvb2QgY2h1bmsgb2YgcmVsYXRlZCBlbnVtcyBhbmQgc3RydWN0dXJlcy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBsYXlvdXQgYW5kIGFueSBjcnVjaWFsIGZpZWxkcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJ20gZGVidWdnaW5nIG9yIHRoZSBvcHRpbWl6YXRpb24gSSdtIGNvbnNpZGVyaW5nLiBUaGlua2luZyB0aGlzIHdvdWxkIGJlIHRoZSBiZXN0IGxvY2F0aW9uIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQyMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjE1LjI0OTI1ODQ4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2xsY19wZHUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbGxjX3BkdV9zbiAqbGxjX3BkdV9zbl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMjAxOlxcdHtcXG4gMjAyOlxcdFxcdHJldHVybiAoc3RydWN0IGxsY19wZHVfc24gKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gMjAzOlxcdH1cXG4gMjA0OlxcdFxcbiAyMDU6XFx0LyogVW4tbnVtYmVyZWQgUERVIGZvcm1hdCAoMyBieXRlcyBpbiBsZW5ndGgpICovXFxuIDIwNjpcXHRzdHJ1Y3QgbGxjX3BkdV91biB7XFxuIDIwNzpcXHRcXHR1OCBkc2FwO1xcbiAyMDg6XFx0XFx0dTggc3NhcDtcXG4gMjA5OlxcdFxcdHU4IGN0cmxfMTtcXG4gMjEwOlxcdH0gX19wYWNrZWQ7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19wZHVfdW4gKmxsY19wZHVfdW5faGRyKHN0cnVjdCBza19idWZmICpza2IpXFxuIDIxMzpcXHR7XFxuIDIxNDpcXHRcXHRyZXR1cm4gKHN0cnVjdCBsbGNfcGR1X3VuICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDIxNTpcXHR9XFxuIDIxNjpcXHRcXG4gMjE3OlxcdC8qKlxcbiAyMTg6XFx0ICpcXHRsbGNfcGR1X2hlYWRlcl9pbml0IC0gaW5pdGlhbGl6ZXMgcGR1IGhlYWRlclxcbiAyMTk6XFx0ICpcXHRAc2tiOiBpbnB1dCBza2IgdGhhdCBoZWFkZXIgbXVzdCBiZSBzZXQgaW50byBpdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDM6MTUuMjQ5MzQ0MjVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3Nzk1NTU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipMTEMgUERVIEluaXRpYWxpemF0aW9uOiBBIFF1aWNrIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBqdXN0IHF1aWNrbHkgZ29pbmcgb3ZlciB0aGUgTExDIFBEVSBpbml0aWFsaXphdGlvbiB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJIHNlZSB0aGF0IHRoZSBgc3RydWN0IGxsY19wZHVfdW5gIGlzLCBhcyBleHBlY3RlZCwgYSBjb21wYWN0IDMgYnl0ZXMuIE5vdywgSSByZW1lbWJlciB0aGF0IGBsbGNfcGR1X2hlYWRlcl9pbml0YCBjbGVhbmx5IHNldHMgdGhlIGBkc2FwYCBhbmQgYHNzYXBgIGZpZWxkcy4gRXhjZWxsZW50LiBUaGVuLCB0byByb3VuZCB0aGluZ3Mgb3V0LCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAgdGFrZXMgY2FyZSBvZiB0aGUgYGN0cmxfMWAgYnl0ZS5cblxuU28sIGZyb20gd2hhdCBJIGNhbiBzZWUgaGVyZSwgYWxsIDMgYnl0ZXMgd2l0aGluIHRoYXQgc3RydWN0dXJlIGFyZSBkZWZpbml0ZWx5IGluaXRpYWxpemVkLiBJJ20ganVzdCB3b25kZXJpbmcgaWYgdGhlcmUgaXMgYW55dGhpbmcgSSBzaG91bGQgYmUgYXdhcmUgb2YgcmVnYXJkaW5nIGBsbGNfbWFjX2hkcl9pbml0YCB0aGF0IEkgYW0gbWlzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NzYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjE5LjMyNzMwMjE3NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNDUwODcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgbGxjX21hY19oZHJfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9sbGMuaD05ND1pbnQgbGxjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LFxcbi0tXFxuaW5jbHVkZS9uZXQvbGxjLmgtOTYtXFxuaW5jbHVkZS9uZXQvbGxjLmg6OTc6aW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2EsXFxuaW5jbHVkZS9uZXQvbGxjLmgtOTgtXFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYSk7XFxuLS1cXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0yNC0gKi9cXG5uZXQvbGxjL2xsY19vdXRwdXQuYzoyNTppbnQgbGxjX21hY19oZHJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9sbGMvbGxjX291dHB1dC5jLTI2LVxcdFxcdCAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzoyMS4wNjE4MTY2NjNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5OTI3MzgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlIGZvciBgbmV0L2xsYy9sbGNfb3V0cHV0LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgb3V0cHV0IHByb2Nlc3MgaXMgaGFuZGxlZCB0aGVyZS4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZWN0aW9uIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgaW4gdGhlIExMQyBsYXllciwgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgbG9naWMgYXQgdGhpcyBwb2ludCBpbiB0aGUgY29kZS4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyBzZWN0aW9uIHByb2JhYmx5IHRvdWNoZXMgb24gZnJhbWUgZm9ybWF0dGluZywgcXVldWluZywgYW5kIHBvc3NpYmx5IGludGVyYWN0aW9uIHdpdGggbG93ZXItbGV2ZWwgZHJpdmVycy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gYW55IHN1YnRsZSBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgYm90dGxlbmVja3MuIEdldHRpbmcgdGhlIGRldGFpbHMgcmlnaHQgaGVyZSBjYW4gbWFrZSBhIGJpZyBkaWZmZXJlbmNlLCBlc3BlY2lhbGx5IGluIGhpZ2gtdGhyb3VnaHB1dCBlbnZpcm9ubWVudHMuIFRoaXMgd2lsbCBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzoyNC41NjEwOTM2MTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2xsYy9sbGNfb3V0cHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0ICpcXHRAZGE6IFRoZSBNQUMgZGVzdGluYXRpb24gYWRkcmVzc1xcbiAgMjE6XFx0ICpcXG4gIDIyOlxcdCAqXFx0RmlsbHMgTUFDIGhlYWRlciBmaWVsZHMsIGRlcGVuZGluZyBvbiBNQUMgdHlwZS4gUmV0dXJucyAwLCBJZiBNQUMgdHlwZVxcbiAgMjM6XFx0ICpcXHRpcyBhIHZhbGlkIHR5cGUgYW5kIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlcyBjb3JyZWN0bHkgMSwgb3RoZXJ3aXNlLlxcbiAgMjQ6XFx0ICovXFxuICAyNTpcXHRpbnQgbGxjX21hY19oZHJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgMjY6XFx0XFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGEpXFxuICAyNzpcXHR7XFxuICAyODpcXHRcXHRpbnQgcmMgPSAtRUlOVkFMO1xcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlKSB7XFxuICAzMTpcXHRcXHRjYXNlIEFSUEhSRF9FVEhFUjpcXG4gIDMyOlxcdFxcdGNhc2UgQVJQSFJEX0xPT1BCQUNLOlxcbiAgMzM6XFx0XFx0XFx0cmMgPSBkZXZfaGFyZF9oZWFkZXIoc2tiLCBza2ItXFx1MDAzZWRldiwgRVRIX1BfODAyXzIsIGRhLCBzYSxcXG4gIDM0OlxcdFxcdFxcdFxcdFxcdCAgICAgc2tiLVxcdTAwM2VsZW4pO1xcbiAgMzU6XFx0XFx0XFx0aWYgKHJjIFxcdTAwM2UgMClcXG4gIDM2OlxcdFxcdFxcdFxcdHJjID0gMDtcXG4gIDM3OlxcdFxcdFxcdGJyZWFrO1xcbiAgMzg6XFx0XFx0ZGVmYXVsdDpcXG4gIDM5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzoyNC41NjExNjQxNDZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ4MjM3MDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNhZmV0eSoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUg4oCTIGEgcmFjZSBjb25kaXRpb24sIHNwZWNpZmljYWxseSBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBpbiB0aGUgTExDIHByb3RvY29sJ3MgaW5jb21pbmcgY29ubmVjdGlvbiBoYW5kbGluZy4gVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0IGEgbGlzdGVuaW5nIHNvY2tldCBjYW4gYmUgZGVzdHJveWVkIHdoaWxlIGNoaWxkIHNvY2tldHMgKGluY29taW5nIGNvbm5lY3Rpb25zKSBhcmUgc3RpbGwgaW4gYSBwZW5kaW5nIG9yIHF1ZXVlZCBzdGF0ZS4gVGhpcyBwYXRjaCdzIHNvbHV0aW9uIGlzIGVsZWdhbnQ6IGl0IGludHJvZHVjZXMgYSBzdGF0ZSBtYWNoaW5lIChgaW5jb21pbmdfc3RhdGVgKSB0byB0cmFjayB0aGUgbGlmZWN5Y2xlIG9mIHRoZXNlIGluY29taW5nIHNvY2tldHMgYW5kIGEgd29ya3F1ZXVlIChgaW5jb21pbmdfd29ya2ApIHRvIGRlZmVyIHRoZWlyIGZyZWVpbmcuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjbGVhbnVwIGhhcHBlbnMgc2FmZWx5LCByZXNvbHZpbmcgdGhlIHJhY2UgY29uZGl0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGtpbmQgb2YgYnVnLCB0aGlzICpzcGVjaWZpYyogdHlwZSBvZiB1c2UtYWZ0ZXItZnJlZSwgaXMgZXhhY3RseSB3aGF0IEtBU0FOLCBhbmQgZXZlbiBMT0NLREVQIGZvciB0aGF0IG1hdHRlciwgaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBXZSdyZSB0YWxraW5nIGFib3V0IHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgdGhlc2UgdG9vbHMgZXhjZWwgYXQgY2F0Y2hpbmcgZHVyaW5nIGRldmVsb3BtZW50LlxuXG5Mb29raW5nIGNsb3NlciwgdGhlcmUncyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzICpuZXcqIHdheXMgdG8gbGVhayBpbmZvcm1hdGlvbiBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIGBkZXZfaGFyZF9oZWFkZXJgIGluaXRpYWxpemVzIHRoZSBNQUMgaGVhZGVyLCBzbyB0aGUgU0tCIGRvZXNuJ3QgaGF2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gRXZlcnl0aGluZyBhZGRlZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFuZCB0aGUgbmV3bHkgYWRkZWQgZnVuY3Rpb24gYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIFNLQiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uIFRoZSBwYXRjaCBpcyBjYXJlZnVsbHkgYWRkcmVzc2luZyBhIGNvbmN1cnJlbmN5IHByb2JsZW0gd2l0aCBrbm93biwgd2VsbC11bmRlcnN0b29kIHRlY2huaXF1ZXMgKHN0YXRlIG1hbmFnZW1lbnQsIHdvcmtxdWV1ZSkuIFRoZSBwYXRjaCBpcyBjYXJlZnVsbHkgYWRkcmVzc2luZyBhIGNvbmN1cnJlbmN5IHByb2JsZW0gd2l0aCBrbm93biwgd2VsbC11bmRlcnN0b29kIHRlY2huaXF1ZXMgKHN0YXRlIG1hbmFnZW1lbnQsIHdvcmtxdWV1ZSkuIE5vdGhpbmcncyBiZWluZyBzaGlwcGVkIHRvIHVzZXJzcGFjZSB0aGF04oCZcyBuZXcsIHVudGVzdGVkLCBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYy5cblxuU28sIGdpdmVuIGFsbCBvZiB0aGlzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJ3Qgd2FycmFudGVkIGhlcmUuIEtBU0FOIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRvaW5nIGl0cyBqb2IgYW5kIGNhdGNoaW5nIGFueSBpbnRyb2R1Y2VkIG1lbW9yeSBlcnJvcnMsIGFuZCB0aGVyZSBhcmUgbm8gaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBwYXRjaCBpdHNlbGYuIFdlIHNob3VsZCBiZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk2OCwiT3V0cHV0VG9rZW5zIjoyMzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzozMy4wNDM1Mzg1MTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIExMQyBwcm90b2NvbCByZWxhdGVkIHRvIGluY29taW5nIGNvbm5lY3Rpb24gaGFuZGxpbmcuIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgKSBhbmQgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCkgdG8gc2FmZWx5IG1hbmFnZSBhbmQgZGVmZXIgdGhlIGZyZWVpbmcgb2YgaW5jb21pbmcgc29ja2V0cywgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGEgbGlzdGVuaW5nIHNvY2tldCBpcyBjbG9zZWQgd2hpbGUgY2hpbGQgc29ja2V0cyBhcmUgc3RpbGwgcGVuZGluZyBvciBxdWV1ZWQuXFxuXFxuVGhlc2UgdHlwZXMgb2YgYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbGwgbmV3bHkgaW50cm9kdWNlZCBmaWVsZHMgaW4gYHN0cnVjdCBsbGNfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdW5jdGlvbiBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHNrYiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIExMQyBwcm90b2NvbCByZWxhdGVkIHRvIGluY29taW5nIGNvbm5lY3Rpb24gaGFuZGxpbmcuIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgKSBhbmQgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCkgdG8gc2FmZWx5IG1hbmFnZSBhbmQgZGVmZXIgdGhlIGZyZWVpbmcgb2YgaW5jb21pbmcgc29ja2V0cywgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGEgbGlzdGVuaW5nIHNvY2tldCBpcyBjbG9zZWQgd2hpbGUgY2hpbGQgc29ja2V0cyBhcmUgc3RpbGwgcGVuZGluZyBvciBxdWV1ZWQuXFxuXFxuVGhlc2UgdHlwZXMgb2YgYnVncyAodXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbGwgbmV3bHkgaW50cm9kdWNlZCBmaWVsZHMgaW4gYHN0cnVjdCBsbGNfc29ja2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgbmV3bHkgYWRkZWQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBmdW5jdGlvbiBmdWxseSBpbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIHNrYiBoZWFkZXJzIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowtxg4h[1] Phase: Succeeded StartedAt: 2026-08-22 09:03:44 +0000 UTC FinishedAt: 2026-08-22 09:03:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-22 09:03:44 +0000 UTC FinishedAt: 2026-08-22 09:03:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2] Phase: Succeeded StartedAt: 2026-08-22 09:03:44 +0000 UTC FinishedAt: 2026-08-22 12:44:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:03:44 +0000 UTC FinishedAt: 2026-08-22 12:44:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:03:44 +0000 UTC FinishedAt: 2026-08-22 09:03:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:03:44 +0000 UTC FinishedAt: 2026-08-22 09:03:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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-workflowtxg4h/series-workflowtxg4h-convert-artifact-3350590109/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:03:54 +0000 UTC FinishedAt: 2026-08-22 09:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:03:54 +0000 UTC FinishedAt: 2026-08-22 09:21:01 +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:*58824944-9ba8-42cc-94a7-0761d74a165e,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-workflowtxg4h/series-workflowtxg4h-convert-artifact-3350590109/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": "3583e1c2-c631-49ba-b9d8-2a6f7d205fbc", "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-workflowtxg4h/series-workflowtxg4h-build-action-3362415571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:03:54 +0000 UTC FinishedAt: 2026-08-22 09:20:51 +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:*58824944-9ba8-42cc-94a7-0761d74a165e,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-workflowtxg4h/series-workflowtxg4h-convert-artifact-3350590109/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": "3583e1c2-c631-49ba-b9d8-2a6f7d205fbc", "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-workflowtxg4h/series-workflowtxg4h-build-action-3362415571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:21:01 +0000 UTC FinishedAt: 2026-08-22 09:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:21:01 +0000 UTC FinishedAt: 2026-08-22 09:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:21:01 +0000 UTC FinishedAt: 2026-08-22 09:21:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:21:01 +0000 UTC FinishedAt: 2026-08-22 09:21:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-workflowtxg4h/series-workflowtxg4h-convert-artifact-60764024/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:21:11 +0000 UTC FinishedAt: 2026-08-22 09:23:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:21:11 +0000 UTC FinishedAt: 2026-08-22 09:23:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3583e1c2-c631-49ba-b9d8-2a6f7d205fbc,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-workflowtxg4h/series-workflowtxg4h-build-action-3362415571/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-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:23:43 +0000 UTC FinishedAt: 2026-08-22 09:23:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:23:43 +0000 UTC FinishedAt: 2026-08-22 09:23:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:23:43 +0000 UTC FinishedAt: 2026-08-22 09:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:23:43 +0000 UTC FinishedAt: 2026-08-22 09:40:46 +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:*58824944-9ba8-42cc-94a7-0761d74a165e,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-workflowtxg4h/series-workflowtxg4h-convert-artifact-60764024/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": "f890f2bd-e028-4e33-9c7e-8c37ba2e9d0d", "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-workflowtxg4h/series-workflowtxg4h-build-action-2370360420/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:23:43 +0000 UTC FinishedAt: 2026-08-22 09:40:36 +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:*58824944-9ba8-42cc-94a7-0761d74a165e,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-workflowtxg4h/series-workflowtxg4h-convert-artifact-60764024/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": "f890f2bd-e028-4e33-9c7e-8c37ba2e9d0d", "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-workflowtxg4h/series-workflowtxg4h-build-action-2370360420/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:40:46 +0000 UTC FinishedAt: 2026-08-22 09:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:40:46 +0000 UTC FinishedAt: 2026-08-22 09:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:40:46 +0000 UTC FinishedAt: 2026-08-22 09:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:40:46 +0000 UTC FinishedAt: 2026-08-22 09:42:19 +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:*f890f2bd-e028-4e33-9c7e-8c37ba2e9d0d,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-workflowtxg4h/series-workflowtxg4h-build-action-2370360420/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-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:42:30 +0000 UTC FinishedAt: 2026-08-22 12:44:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:42:30 +0000 UTC FinishedAt: 2026-08-22 12:44:15 +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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"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:*3583e1c2-c631-49ba-b9d8-2a6f7d205fbc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f890f2bd-e028-4e33-9c7e-8c37ba2e9d0d,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-workflowtxg4h/series-workflowtxg4h-build-action-3362415571/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-workflowtxg4h/series-workflowtxg4h-build-action-2370360420/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:42:30 +0000 UTC FinishedAt: 2026-08-22 09:42:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:42:30 +0000 UTC FinishedAt: 2026-08-22 09:42:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"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-workflowtxg4h/series-workflowtxg4h-convert-artifact-3902161617/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:42:30 +0000 UTC FinishedAt: 2026-08-22 09:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:42:30 +0000 UTC FinishedAt: 2026-08-22 09:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:42:31 +0000 UTC FinishedAt: 2026-08-22 09:42:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:42:41 +0000 UTC FinishedAt: 2026-08-22 12:44:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxg4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","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_conn_handler","llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_sk_free","llc_conn_state_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"6af1f24c-1614-4d0c-8beb-0334e6ec7ed4","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-22 09:42:41 +0000 UTC FinishedAt: 2026-08-22 12:44:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3583e1c2-c631-49ba-b9d8-2a6f7d205fbc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f890f2bd-e028-4e33-9c7e-8c37ba2e9d0d,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-workflowtxg4h/series-workflowtxg4h-build-action-3362415571/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-workflowtxg4h/series-workflowtxg4h-build-action-2370360420/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-workflowtxg4h/series-workflowtxg4h-convert-artifact-3902161617/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,}