Name: series-workflowsw7zm Phase: Succeeded StartedAt: 2026-08-03 17:55:37 +0000 UTC FinishedAt: 2026-08-03 18:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw7zm[0] Phase: Succeeded StartedAt: 2026-08-03 17:55:37 +0000 UTC FinishedAt: 2026-08-03 17:59:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw7zm[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 17:55:37 +0000 UTC FinishedAt: 2026-08-03 17:59:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "415606a7be939835db9b0d6b711887586646346d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KPROBES", "TRACEPOINTS", "PERF_EVENTS", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "415606a7be939835db9b0d6b711887586646346d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KPROBES", "TRACEPOINTS", "PERF_EVENTS", "BPF_SYSCALL" ], "series_id": "3a2a4a93-4ad6-4709-b28e-59d6b2a85c10" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "rcu_barrier", "srcu_barrier", "srcu_offline_drain", "rcutree_migrate_callbacks" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7VFJBQ0VQT0lOVFMmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9vZmZsaW5lX2RyYWluJiMzNDssCiAgICAmIzM0O3JjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBkZWZlcnJlZCBSQ1UgYW5kIFNSQ1UgY2FsbGJhY2tzIHRvIHNhZmVseSBoYW5kbGUgcmUtZW50cmFudCBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgaW52b2NhdGlvbnMsIHN1Y2ggYXMgdGhvc2Ugb3JpZ2luYXRpbmcgZnJvbSBOTUkgY29udGV4dHMgb3IgQlBGIHByb2dyYW1zLiBJdCBtb2RpZmllcyBjb3JlIFJDVS9TUkNVIHN5bmNocm9uaXphdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBuZXcgY2FsbGJhY2sgZHJhaW5pbmcgbWVjaGFuaXNtcy4gVGhpcyBpcyBoaWdobHkgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYxYmJlNmY5YmRhMzM4Nzk5ZDJlZmFiMDhjMzVjNGVlN2E2ZDA2MjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjU3OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuaW5kZXggZmJjZjEzYmMxMmQxNS4uNDcyNzVkMTgyOTY2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjZGVmaW5lIF9MSU5VWF9TUkNVX1RJTllfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YWl0LmhcdTAwM2VcbiBcbiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuQEAgLTI2LDYgJiM0MzsyNyw4IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgKipzcmN1X2NiX3RhaWw7XHQvKiBQZW5kaW5nIGNhbGxiYWNrczogVGFpbC4gKi9cbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzcmN1X3dvcms7XHQvKiBGb3IgZHJpdmluZyBncmFjZSBwZXJpb2RzLiAqL1xuIFx0c3RydWN0IGlycV93b3JrIHNyY3VfaXJxX3dvcms7XHQvKiBEZWZlciBzY2hlZHVsZV93b3JrKCkgdG8gaXJxIHdvcmsuICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1x0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xuJiM0MztcdHN0cnVjdCBpcnFfd29yayBkZWZlcl9pdztcdFx0LyogUmVnaXN0ZXJzIGRlZmVyX2NicyBsYXRlci4gKi9cbiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0NcbiBcdHN0cnVjdCBsb2NrZGVwX21hcCBkZXBfbWFwO1xuICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi9cbkBAIC0zMyw2ICYjNDM7MzYsNyBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuIFxuIHZvaWQgc3JjdV9kcml2ZV9ncChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndwKTtcbiB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiYjNDM7dm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspO1xuIFxuICNkZWZpbmUgX19TUkNVX1NUUlVDVF9JTklUKG5hbWUsIF9faWdub3JlZCwgX19faWdub3JlZCwgX19fX2lnbm9yZWQpXHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuQEAgLTQwLDYgJiM0Mzs0NCw4IEBAIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspO1xuIFx0LnNyY3VfY2JfdGFpbCA9IFx1MDAyNm5hbWUuc3JjdV9jYl9oZWFkLFx0XHRcdFx0XFxcbiBcdC5zcmN1X3dvcmsgPSBfX1dPUktfSU5JVElBTElaRVIobmFtZS5zcmN1X3dvcmssIHNyY3VfZHJpdmVfZ3ApLFx0XFxcbiBcdC5zcmN1X2lycV93b3JrID0geyAuZnVuYyA9IHNyY3VfdGlueV9pcnFfd29yayB9LFx0XHRcXFxuJiM0MztcdC5kZWZlcl9jYnMgPSBMTElTVF9IRUFEX0lOSVQobmFtZS5kZWZlcl9jYnMpLFx0XHRcdFxcXG4mIzQzO1x0LmRlZmVyX2l3ID0geyAuZnVuYyA9IHNyY3VfZGVmZXJfZHJhaW4gfSxcdFx0XHRcdFxcXG4gXHRfX1NSQ1VfREVQX01BUF9JTklUKG5hbWUpXHRcdFx0XHRcdFxcXG4gfVxuIFxuQEAgLTEzMSwxMCAmIzQzOzEzNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbi17XG4tXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4tfVxuJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkgeyB9XG4gI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbmluZGV4IDc1ZTU0ZTRmOTYzZmEuLjFjZTc1OWZiNzA5NDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxuQEAgLTEzLDYgJiM0MzsxMyw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1X25vZGVfdHJlZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuIFxuIHN0cnVjdCBzcmN1X25vZGU7XG4gc3RydWN0IHNyY3Vfc3RydWN0O1xuQEAgLTQxLDYgJiM0Mzs0Myw4IEBAIHN0cnVjdCBzcmN1X2RhdGEge1xuIFx0Ym9vbCBzcmN1X2NibGlzdF9pbnZva2luZztcdFx0LyogSW52b2tpbmcgdGhlc2UgQ0JzPyAqL1xuIFx0c3RydWN0IHRpbWVyX2xpc3QgZGVsYXlfd29yaztcdFx0LyogRGVsYXkgZm9yIENCIGludm9raW5nICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcdFx0LyogQ29udGV4dCBmb3IgQ0IgaW52b2tpbmcuICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1x0XHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgZGVmZXJfbGluaztcdFx0LyogTGlua3Mgb250byB0aGUgcGVyLUNQVSBkZWZlcnJhbCBkcmFpbiBsaXN0ICovXG4gXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7XHQvKiBGb3Igc3JjdV9iYXJyaWVyKCkgdXNlLiAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDtcdFx0LyogRm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpIHVzZS4gKi9cbiBcdGludCBzcmN1X2VjX3N0YXRlO1x0XHRcdC8qICBTdGF0ZSBmb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkuICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9LY29uZmlnIGIva2VybmVsL3JjdS9LY29uZmlnXG5pbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L0tjb25maWdcbkBAIC0xNzUsNiAmIzQzOzE3NSwxMiBAQCBjb25maWcgUkNVX1NUQUxMX0NPTU1PTlxuIGNvbmZpZyBSQ1VfTkVFRF9TRUdDQkxJU1RcbiBcdGRlZl9ib29sICggVFJFRV9SQ1UgfHwgVFJFRV9TUkNVIHx8IFRBU0tTX1JDVV9HRU5FUklDIClcbiBcbiYjNDM7IyBUaGUgZGVmZXJyYWwgKGFuZCB0aGUgSVJRX1dPUksgaXQgdXNlcykgaXMgb25seSBuZWVkZWQgd2hlcmUgY2FsbF9yY3UoKSAvXG4mIzQzOyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuXG4mIzQzO2NvbmZpZyBSQ1VfREVGRVJcbiYjNDM7XHRkZWZfYm9vbCBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UU1xuJiM0MztcdHNlbGVjdCBJUlFfV09SS1xuJiM0MztcbiBjb25maWcgUkNVX0ZBTk9VVFxuIFx0aW50IFwmIzM0O1RyZWUtYmFzZWQgaGllcmFyY2hpY2FsIFJDVSBmYW5vdXQgdmFsdWVcJiMzNDtcbiBcdHJhbmdlIDIgNjQgaWYgNjRCSVRcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdS5oIGIva2VybmVsL3JjdS9yY3UuaFxuaW5kZXggMzlhOWY2ZmE5YTdiMi4uY2EwNWQ0ODc3M2M3OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvcmN1LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvcmN1LmhcbkBAIC01NzIsNiAmIzQzOzU3MiwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza3NfY2JsaXN0X2luaXRfZ2VuZXJpYyh2b2lkKSB7IH1cbiAjZGVmaW5lIFJDVV9TQ0hFRFVMRVJfSU5JVFx0MVxuICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9SVU5OSU5HXHQyXG4gXG4mIzQzOy8qXG4mIzQzOyAqIERlZmVyIGEgY2FsbF9yY3UoKS9jYWxsX3NyY3UoKSBjYWxsYmFjayByYXRoZXIgdGhhbiBlbnF1ZXVlIGl0IG5vdz8gIERlZmVyXG4mIzQzOyAqIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzaW5jZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIG1heSBiZSBpblxuJiM0MzsgKiBmbGlnaHQgb24gdGhpcyBDUFUuICBOb3Qgd2hpbGUgdGhlIHNjaGVkdWxlciBpcyBkb3duLCB0aG91Z2g6IGlycV93b3JrIGlzXG4mIzQzOyAqIHVudXNhYmxlIGJlZm9yZSBpbml0X0lSUSgpLCB5ZXQgcmN1X2luaXQoKSBhbHJlYWR5IGNhbGxzIGNhbGxfcmN1KCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaXJxc19kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUmIzM5O3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXG4mIzQzO3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xuJiM0MztcbiBlbnVtIHJjdXRvcnR1cmVfdHlwZSB7XG4gXHRSQ1VfRkxBVk9SLFxuIFx0UkNVX1RBU0tTX0ZMQVZPUixcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG5pbmRleCA3OTQ5MzdlMTNlN2MzLi45ZWQxN2I2NDM2MjBhIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG5AQCAtNDgsNiAmIzQzOzQ4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aWNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV90cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm1pLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cmN1LmhcJiMzNDtcbiBcbkBAIC0xMTUsNiAmIzQzOzExNiw3IEBAIHRvcnR1cmVfcGFyYW0oaW50LCBsZWFrcG9pbnRlciwgMCwgXCYjMzQ7TGVhayBwb2ludGVyIGRlcmVmZXJlbmNlcyBmcm9tIHJlYWRlcnNcJiMzNDspO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBuX2JhcnJpZXJfY2JzLCAwLCBcJiMzNDsjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nXCYjMzQ7KTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbl91cF9kb3duLCAzMiwgXCYjMzQ7IyBvZiBjb25jdXJyZW50IHVwL2Rvd24gaHJ0aW1lci1iYXNlZCBSQ1UgcmVhZGVyc1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5mYWtld3JpdGVycywgNCwgXCYjMzQ7TnVtYmVyIG9mIFJDVSBmYWtlIHdyaXRlciB0aHJlYWRzXCYjMzQ7KTtcbiYjNDM7dG9ydHVyZV9wYXJhbShib29sLCBubWlfY2FsbHMsIHRydWUsIFwmIzM0O0V4ZXJjaXNlIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkgb24gbm1pX2NhcGFibGUgZmxhdm9yc1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5yZWFkZXJzLCAtMSwgXCYjMzQ7TnVtYmVyIG9mIFJDVSByZWFkZXIgdGhyZWFkc1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShib29sLCBud3JpdGVycywgMSwgXCYjMzQ7TnVtYmVyIG9mIFJDVSB3cml0ZXIgdGhyZWFkcyAoMCBvciAxKVwmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG9iamVjdF9kZWJ1ZywgMCwgXCYjMzQ7RW5hYmxlIGRlYnVnLW9iamVjdCBkb3VibGUgY2FsbF9yY3UoKSB0ZXN0aW5nXCYjMzQ7KTtcbkBAIC0yMTYsNiAmIzQzOzIxOCw4IEBAIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfZmFpbHVyZTtcbiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0cztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVycztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX2lycXM7XG4mIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NhbGw7XG4mIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NiO1xuIHN0YXRpYyBsb25nIG5fYmFycmllcl9hdHRlbXB0cztcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfc3VjY2Vzc2VzOyAvKiBkaWQgcmN1X2JhcnJpZXIgdGVzdCBzdWNjZWVkPyAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5fcmVhZF9leGl0cztcbkBAIC00MzMsNiAmIzQzOzQzNyw3IEBAIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMge1xuIFx0Ym9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpO1xuIFx0bG9uZyBjYmZsb29kX21heDtcbiBcdGludCBpcnFfY2FwYWJsZTtcbiYjNDM7XHRpbnQgbm1pX2NhcGFibGU7XG4gXHRpbnQgY2FuX2Jvb3N0O1xuIFx0aW50IGV4dGVuZGFibGVzO1xuIFx0aW50IHNsb3dfZ3BzO1xuQEAgLTY0OCw2ICYjNDM7NjUzLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgcmN1X29wcyA9IHtcbiBcdC5leHRlbmRhYmxlc1x0XHQ9IFJDVVRPUlRVUkVfTUFYX0VYVEVORCxcbiBcdC5kZWJ1Z19vYmplY3RzXHRcdD0gMSxcbiBcdC5zdGFydF9wb2xsX2lycXNvZmZcdD0gMSxcbiYjNDM7XHQubm1pX2NhcGFibGVcdFx0PSAxLFxuIFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O3JjdVwmIzM0O1xuIH07XG4gXG5AQCAtOTQyLDYgJiM0Mzs5NDgsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1X29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbiYjNDM7XHQubm1pX2NhcGFibGVcdD0gMSxcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7c3JjdVwmIzM0O1xuIH07XG4gXG5AQCAtMTAwNSw2ICYjNDM7MTAxMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHNyY3VkX29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbiYjNDM7XHQubm1pX2NhcGFibGVcdD0gMSxcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7c3JjdWRcJiMzNDtcbiB9O1xuIFxuQEAgLTEyNjksNiAmIzQzOzEyNzcsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyB0YXNrc190cmFjaW5nX29wcyA9IHtcbiBcdC5jYmZsb29kX21heFx0PSA1MDAwMCxcbiBcdC5pcnFfY2FwYWJsZVx0PSAxLFxuIFx0LnNsb3dfZ3BzXHQ9IDEsXG4mIzQzO1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwmIzM0O3Rhc2tzLXRyYWNpbmdcJiMzNDtcbiB9O1xuIFxuQEAgLTI2NTksMTIgJiM0MzsyNjY4LDk0IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxuIFxuIHN0YXRpYyBERUZJTkVfVE9SVFVSRV9SQU5ET01fUEVSQ1BVKHJjdV90b3J0dXJlX3RpbWVyX3JhbmQpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBFeGVyY2lzZSAtXHUwMDNlY2FsbCgpIGZyb20gTk1JIGNvbnRleHQgZm9yIGZsYXZvcnMgdGhhdCBzZXQgLVx1MDAzZW5taV9jYXBhYmxlLiAgQVxuJiM0MzsgKiBwZXItQ1BVIGhhcmR3YXJlIHBlcmYgY291bnRlciBvdmVyZmxvd3MgaW50byBhbiBOTUksIGFuZCBpdHMgaGFuZGxlciBzdWJtaXRzXG4mIzQzOyAqIG9uZSBwcmVhbGxvY2F0ZWQgY2FsbGJhY2sgdmlhIC1cdTAwM2VjYWxsKCkuICBPbmUgY2FsbGJhY2sgaXMgaW4gZmxpZ2h0IGF0IGEgdGltZVxuJiM0MzsgKiAoZ3VhcmRlZCBieSBhbiBhdG9taWMpIHRvIGF2b2lkIGFsbG9jYXRpbmcgaW4gTk1JLiAgVGhpcyBtaXJyb3JzIGhvdyBhIEJQRlxuJiM0MzsgKiBwcm9ncmFtIHJlYWNoZXMgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSS5cbiYjNDM7ICovXG4mIzQzOyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcbiYjNDM7c3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgcmN1X3RvcnR1cmVfbm1pX2F0dHIgPSB7XG4mIzQzO1x0LnR5cGVcdFx0PSBQRVJGX1RZUEVfSEFSRFdBUkUsXG4mIzQzO1x0LmNvbmZpZ1x0XHQ9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUyxcbiYjNDM7XHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyKSxcbiYjNDM7XHQucGlubmVkXHRcdD0gMSxcbiYjNDM7XHQuZGlzYWJsZWRcdD0gMSxcbiYjNDM7XHQuZnJlcVx0XHQ9IDEsXG4mIzQzO1x0LnNhbXBsZV9mcmVxXHQ9IDEwMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKipyY3VfdG9ydHVyZV9ubWlfZXZlbnRzO1xuJiM0MztzdGF0aWMgc3RydWN0IHJjdV9oZWFkIHJjdV90b3J0dXJlX25taV9yaDtcbiYjNDM7c3RhdGljIGF0b21pY190IHJjdV90b3J0dXJlX25taV9yaF9pbnVzZTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jYihzdHJ1Y3QgcmN1X2hlYWQgKnJocClcbiYjNDM7e1xuJiM0MztcdGF0b21pY19sb25nX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYik7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiYjNDM7e1xuJiM0MztcdGlmICghaW5fbm1pKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKGN1cl9vcHMtXHUwMDNlY2FsbCBcdTAwMjZcdTAwMjYgIWF0b21pY194Y2hnKFx1MDAyNnJjdV90b3J0dXJlX25taV9yaF9pbnVzZSwgMSkpIHtcbiYjNDM7XHRcdGN1cl9vcHMtXHUwMDNlY2FsbChcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmgsIHJjdV90b3J0dXJlX25taV9jYik7XG4mIzQzO1x0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50O1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGlmICghbm1pX2NhbGxzIHx8ICFjdXJfb3BzLVx1MDAzZW5taV9jYXBhYmxlIHx8ICFjdXJfb3BzLVx1MDAzZWNhbGwpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCpyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKSxcbiYjNDM7XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbiYjNDM7XHRcdGV2ZW50ID0gcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX2F0dHIsIGNwdSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgTlVMTCwgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93LCBOVUxMKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoZXZlbnQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSA9IGV2ZW50O1xuJiM0MztcdFx0cGVyZl9ldmVudF9lbmFibGUoZXZlbnQpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRwZXJmX2V2ZW50X2Rpc2FibGUocmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKTtcbiYjNDM7XHRcdHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwocmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKTtcbiYjNDM7XHR9XG4mIzQzO1x0a2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7XG4mIzQzO1x0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IE5VTEw7XG4mIzQzO31cbiYjNDM7I2Vsc2UgLyogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKSB7IH1cbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9XG4mIzQzOyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXG4mIzQzO1xuIC8qXG4gICogUkNVIHRvcnR1cmUgcmVhZGVyIGZyb20gdGltZXIgaGFuZGxlci4gIERlcmVmZXJlbmNlcyByY3VfdG9ydHVyZV9jdXJyZW50LFxuICAqIGluY3JlbWVudGluZyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBwaXBlbGluZSBhcnJheS4gIFRoZVxuICAqIGNvdW50ZXIgaW4gdGhlIGVsZW1lbnQgc2hvdWxkIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAxLCBvdGhlcndpc2UsIHRoZVxuICAqIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyBicm9rZW4uXG4gICovXG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp1bnVzZWQpXG4ge1xuIFx0V0FSTl9PTl9PTkNFKCFpbl9zZXJ2aW5nX3NvZnRpcnEoKSk7XG5AQCAtMzA0Nyw2ICYjNDM7MzEzOCw5IEBAIHJjdV90b3J0dXJlX3N0YXRzX3ByaW50KHZvaWQpXG4gXHRcdGRhdGFfcmFjZShuX2JhcnJpZXJfYXR0ZW1wdHMpLFxuIFx0XHRkYXRhX3JhY2Uobl9yY3VfdG9ydHVyZV9iYXJyaWVyX2Vycm9yKSk7XG4gXHRwcl9jb250KFwmIzM0O3JlYWQtZXhpdHM6ICVsZCBcJiMzNDssIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLlxuJiM0MztcdHByX2NvbnQoXCYjMzQ7bm1pLWNhbGxzOiAlbGQgbm1pLWNiczogJWxkIFwmIzM0OyxcbiYjNDM7XHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksXG4mIzQzO1x0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XG4gXHRwcl9jb250KFwmIzM0O25vY2ItdG9nZ2xlczogJWxkOiVsZCBcJiMzNDssXG4gXHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9ub2NiX29mZmxvYWQpLCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fbm9jYl9kZW9mZmxvYWQpKTtcbiBcdHByX2NvbnQoXCYjMzQ7Z3B3cmFwczogJWxkXFxuXCYjMzQ7LCBuX2dwd3JhcHMpO1xuQEAgLTQzMjUsNiAmIzQzOzQ0MTksOCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXG4gXHRcdGtmcmVlKHJlYWRlcl90YXNrcyk7XG4gXHRcdHJlYWRlcl90YXNrcyA9IE5VTEw7XG4gXHR9XG4mIzQzO1x0LyogRGlzYWJsZSB0aGUgcGVyZiBjb3VudGVycyAoYW5kIHRodXMgdGhlIE5NSSAtXHUwMDNlY2FsbCgpIGZpcmluZykgbm93LiAqL1xuJiM0MztcdHJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7XG4gXHRrZnJlZShyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGspO1xuIFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDtcbiBcbkBAIC00MzU0LDYgJiM0Mzs0NDUwLDIwIEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcbiBcdFx0cHJfaW5mbyhcJiMzNDslczogSW52b2tpbmcgJXBTKCkuXFxuXCYjMzQ7LCBfX2Z1bmNfXywgY3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKTtcbiBcdFx0Y3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKCk7XG4gXHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogY2JfYmFycmllcigpIGFib3ZlIGRyYWluZWQgZXZlcnkgZGVmZXJyZWQgTk1JIC1cdTAwM2VjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZVxuJiM0MztcdCAqIGNvdW50IGlzc3VlZCBmcm9tIE5NSSBtdXN0IGVxdWFsIHRoZSBjb3VudCBpbnZva2VkOyBhIG1pc21hdGNoIG1lYW5zIGFcbiYjNDM7XHQgKiBjYWxsYmFjayB3YXMgbG9zdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKSAhPVxuJiM0MztcdCAgICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSkge1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7JXM6IE5NSSAtXHUwMDNlY2FsbCgpIGxvc3QgYSBjYWxsYmFjazogaXNzdWVkICVsZCBpbnZva2VkICVsZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IF9fZnVuY19fLCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxuJiM0MztcdFx0XHQgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpO1xuJiM0MztcdFx0YXRvbWljX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX2Vycm9yKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGN1cl9vcHMtXHUwMDNlY2xlYW51cCAhPSBOVUxMKVxuIFx0XHRjdXJfb3BzLVx1MDAzZWNsZWFudXAoKTtcbiBcbkBAIC00Nzg2LDYgJiM0Mzs0ODk2LDggQEAgcmN1X3RvcnR1cmVfaW5pdCh2b2lkKVxuIFx0XHRmaXJzdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gdW53aW5kO1xuIFx0fVxuJiM0MztcdC8qIEFybSB0aGUgcGVyLUNQVSBwZXJmIGNvdW50ZXJzIHRoYXQgZHJpdmUgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSS4gKi9cbiYjNDM7XHRyY3VfdG9ydHVyZV9ubWlfaW5pdCgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlYWxyZWFkZXJzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGtbaV0ucnRjX2Noa3JkciA9IC0xO1xuIFx0XHRmaXJzdGVyciA9IHRvcnR1cmVfY3JlYXRlX2t0aHJlYWQocmN1X3RvcnR1cmVfcmVhZGVyLCAodm9pZCAqKWksXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dGlueS5jIGIva2VybmVsL3JjdS9zcmN1dGlueS5jXG5pbmRleCA1NThiYThkMzE2ZGI2Li5hMGE5MWY3ZmMyNThhIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWVtcHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuQEAgLTQzLDYgJiM0Mzs0NCw4IEBAIHN0YXRpYyBpbnQgaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRJTklUX1dPUksoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzc3AtXHUwMDNlc3JjdV93b3JrLmVudHJ5KTtcbiBcdGluaXRfaXJxX3dvcmsoXHUwMDI2c3NwLVx1MDAzZXNyY3VfaXJxX3dvcmssIHNyY3VfdGlueV9pcnFfd29yayk7XG4mIzQzO1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9jYnMpO1xuJiM0MztcdGluaXRfaXJxX3dvcmsoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2l3LCBzcmN1X2RlZmVyX2RyYWluKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC04Niw2ICYjNDM7ODksOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChpbml0X3NyY3Vfc3RydWN0X2dlbmVyaWMpO1xuIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB7XG4gXHRXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSk7XG4mIzQzO1x0LyogUmUtaXNzdWUgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBzbyAtXHUwMDNlc3JjdV9jYl9oZWFkIHNlZXMgdGhlbSBiZWxvdy4gKi9cbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbiYjNDM7XHRcdGlycV93b3JrX3N5bmMoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2l3KTtcbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2c3NwLVx1MDAzZXNyY3VfaXJxX3dvcmspO1xuIFx0Zmx1c2hfd29yayhcdTAwMjZzc3AtXHUwMDNlc3JjdV93b3JrKTtcbiBcdFdBUk5fT04oc3NwLVx1MDAzZXNyY3VfZ3BfcnVubmluZyk7XG5AQCAtMjEzLDExICYjNDM7MjE5LDExIEBAIHN0YXRpYyB2b2lkIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBcbiAvKlxuLSAqIEVucXVldWUgYW4gU1JDVSBjYWxsYmFjayBvbiB0aGUgc3BlY2lmaWVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZSxcbi0gKiBpbml0aWF0aW5nIGdyYWNlLXBlcmlvZCBwcm9jZXNzaW5nIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcuXG4mIzQzOyAqIEVucXVldWUgQHJocCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHNyY3VfZGVmZXJfZHJhaW4oKSB0b1xuJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLlxuICAqL1xuLXZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbi1cdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxuJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuJiM0MztcdFx0XHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuQEAgLTIzMSw2ICYjNDM7MjM3LDQ2IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCk7XG4gXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbiYjNDM7XG4mIzQzOy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXG4mIzQzO3N0YXRpYyBib29sIHNyY3VfZGVmZXJfZHJhaW5pbmc7XG4mIzQzO1xuJiM0Mzt2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QsIGRlZmVyX2l3KTtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4mIzQzO1xuJiM0MztcdC8qIENhbGxiYWNrcyBhcmUgdW5vcmRlcmVkLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy4gKi9cbiYjNDM7XHRzcmN1X2RlZmVyX2RyYWluaW5nID0gdHJ1ZTtcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2NicykpIHtcbiYjNDM7XHRcdHN0cnVjdCByY3VfaGVhZCAqcmhwID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7XG4mIzQzO1xuJiM0MztcdFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtXHUwMDNlZnVuYyk7XG4mIzQzO1x0fVxuJiM0MztcdHNyY3VfZGVmZXJfZHJhaW5pbmcgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2RlZmVyX2RyYWluKTtcbiYjNDM7XG4mIzQzO3ZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiYjNDM7XHQgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiYjNDM7e1xuJiM0MztcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbiYjNDM7XHRcdC8qIEEgcmUtZW50cmFudCBjYWxsX3NyY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0LiAqL1xuJiM0MztcdFx0aWYgKHNyY3VfZGVmZXJfZHJhaW5pbmcgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuJiM0MztcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Y2FsbF9zcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyaHAtXHUwMDNlZnVuYyA9IGZ1bmM7XG4mIzQzO1x0XHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2NicykpXG4mIzQzO1x0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9pdyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuJiM0MztcbiYjNDM7XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9zcmN1KTtcbiBcbiAvKlxuQEAgLTI2MCw2ICYjNDM7MzA2LDE1IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7XG4gXG4mIzQzOy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBmb3IgYWxsIGluLWZsaWdodCBvbmVzLiAqL1xuJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiYjNDM7e1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuJiM0MztcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2JhcnJpZXIpO1xuJiM0MztcbiAvKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuaW5kZXggMzA0MTEyNjc0ZThhMi4uMjY2OTU5NGE2NDAyZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJjcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWVtcHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuQEAgLTc5LDYgJiM0Mzs4MCw0NyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3NyY3Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBzdGF0aWMgdm9pZCBzcmN1X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqd29yayk7XG4gc3RhdGljIHZvaWQgc3JjdV9kZWxheV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLCBzaGFyZWQgYnkgZXZlcnkgc3JjdV9zdHJ1Y3QuICBBIGRlZmVycmVkXG4mIzQzOyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJiMzOTtzIC1cdTAwM2VkZWZlcl9jYnM7IHRoYXQgc3JjdV9kYXRhIGlzIGNoYWluZWRcbiYjNDM7ICogdmlhIC1cdTAwM2VkZWZlcl9saW5rIG9udG8gLVx1MDAzZWxpc3QsIHdoaWNoIHRoZSBpcnFfd29yayB3YWxrcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBzcmN1X2RlZmVyIHtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZFx0bGlzdDtcbiYjNDM7XHRzdHJ1Y3QgaXJxX3dvcmtcdFx0aXc7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3RcdFx0bG9jaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3JjdV9kZWZlciwgc3JjdV9kZWZlcikgPSB7XG4mIzQzO1x0LmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoc3JjdV9kZWZlci5sb2NrKSxcbiYjNDM7XHQuaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbiksXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBTZXQgd2hpbGUgc3JjdV9kZWZlcl9kcmFpbigpIHJlLWlzc3VlcywgdG8gY2F0Y2ggYSByZS1lbnRyYW50IGNhbGxfc3JjdSgpLiAqL1xuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgc3JjdV9kZWZlcl9kcmFpbmluZyk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBGbHVzaCBwZW5kaW5nIGRlZmVycmVkIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyBzcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS5cbiYjNDM7ICogV2FpdCBvdXQgYW4gb25saW5lIENQVSYjMzk7cyBpcnFfd29yazsgZHJhaW4gYW4gb2ZmbGluZSBDUFUmIzM5O3MgbGlzdCBkaXJlY3RseSwgYXNcbiYjNDM7ICogaXRzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiYjNDM7XHRcdGlmIChjcHVfb25saW5lKGNwdSkpXG4mIzQzO1x0XHRcdGlycV93b3JrX3N5bmMoXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c3JjdV9kZWZlcl9kcmFpbihcdTAwMjZwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSkuaXcpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEluaXRpYWxpemUgU1JDVSBwZXItQ1BVIGRhdGEuICBOb3RlIHRoYXQgc3RhdGljYWxseSBhbGxvY2F0ZWRcbiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmVzIG1pZ2h0IGFscmVhZHkgaGF2ZSBzcmN1X3JlYWRfbG9jaygpIGFuZFxuQEAgLTEwNyw2ICYjNDM7MTQ5LDExIEBAIHN0YXRpYyB2b2lkIGluaXRfc3JjdV9zdHJ1Y3RfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdFx0c2RwLVx1MDAzZWNwdSA9IGNwdTtcbiBcdFx0SU5JVF9XT1JLKFx1MDAyNnNkcC1cdTAwM2V3b3JrLCBzcmN1X2ludm9rZV9jYWxsYmFja3MpO1xuIFx0XHR0aW1lcl9zZXR1cChcdTAwMjZzZHAtXHUwMDNlZGVsYXlfd29yaywgc3JjdV9kZWxheV90aW1lciwgMCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogLVx1MDAzZWRlZmVyX2NicyBhbmQgLVx1MDAzZWRlZmVyX2xpbmsgYXJlIHZhbGlkIHdoZW4gemVyb2VkIGFuZCBhcmUgbm90XG4mIzQzO1x0XHQgKiByZWluaXRpYWxpemVkIGhlcmUsIGxlc3Qgd2UgY2xvYmJlciBjYWxsYmFja3MgYSByZWVudHJhbnRcbiYjNDM7XHRcdCAqIGNhbGxfc3JjdSgpIGFscmVhZHkgc3RhZ2VkLiAgU2VlIF9fY2FsbF9zcmN1KCkuXG4mIzQzO1x0XHQgKi9cbiBcdFx0c2RwLVx1MDAzZXNzcCA9IHNzcDtcbiBcdH1cbiB9XG5AQCAtNjk1LDcgJiM0Mzs3NDIsMTIgQEAgdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIFx0XHRyZXR1cm47IC8qIEp1c3QgbGVhayBpdCEgKi9cbiBcdGlmIChXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSkpXG4gXHRcdHJldHVybjsgLyogSnVzdCBsZWFrIGl0ISAqL1xuLVx0LyogV2FpdCBmb3IgaXJxX3dvcmsgdG8gZmluaXNoIGZpcnN0IGFzIGl0IG1heSBxdWV1ZSBhIG5ldyB3b3JrLiAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRHJhaW4gZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzeW5jaW5nIC1cdTAwM2VpcnFfd29yazogcmUtaXNzdWluZyBvbmUgY2FuXG4mIzQzO1x0ICogc3RhcnQgYSBncmFjZSBwZXJpb2QgYW5kIHJlLXF1ZXVlIC1cdTAwM2VpcnFfd29yaywgd2hpY2ggdGhlbiBzY2hlZHVsZXNcbiYjNDM7XHQgKiAtXHUwMDNld29yaywgc28gYm90aCBtdXN0IGJlIHdhaXRlZCBvdXQgYWZ0ZXIgdGhlIGRyYWluLlxuJiM0MztcdCAqL1xuJiM0MztcdHNyY3VfZGVmZXJfZmx1c2goKTtcbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2c3VwLVx1MDAzZWlycV93b3JrKTtcbiBcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzdXAtXHUwMDNld29yayk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG5AQCAtMTQxMCw4ICYjNDM7MTQ2MiwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCxcbiAgKiBzcmN1X3JlYWRfbG9jaygpLCBhbmQgc3JjdV9yZWFkX3VubG9jaygpIHRoYXQgYXJlIGFsbCBwYXNzZWQgdGhlIHNhbWVcbiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUuXG4gICovXG4tc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuLVx0XHRcdHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcbiYjNDM7LypcbiYjNDM7ICogVGhlIHNyY3VfY2JsaXN0IGFuZCBzcmN1X25vZGUgdHJlZSBhcmUgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWRcbiYjNDM7ICogKHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkgZW5xdWV1ZXMgdW5kZXIgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgYW5kIG1heSB3YWxrXG4mIzQzOyAqIHRoZSB0cmVlKS4gIExpa2UgY2FsbF9yY3UoKSwgX19jYWxsX3NyY3UoKSBkZWZlcnMgd2hlbiBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5XG4mIzQzOyAqIGRpc2FibGVkLCBzbyBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpIGZyb20gYVxuJiM0MzsgKiBCUEYgcHJvZ3JhbSAtLSBjYW5ub3QgY29ycnVwdCB0aGUgbGlzdCBvciBkZWFkbG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHNyY3VfZG9fZW5xdWV1ZShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4mIzQzO1x0XHRcdCAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXG4ge1xuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHtcbiBcdFx0LyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi9cbkBAIC0xNDIzLDYgJiM0MzsxNDgyLDgxIEBAIHN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdCh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiYjNDM7XHRcdFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tXG4mIzQzO1x0XHQgKiBpbnNpZGUgc3JjdV9kZWZlcl9kcmFpbigpLiAgUmUtcXVldWluZyB3b3VsZCBsaXZlbG9jayB0aGVcbiYjNDM7XHRcdCAqIGRyYWluLCBzbyBkcm9wIHRoZSBjYWxsYmFjazsgYW4gTk1JIGNhbm5vdCBsb29wLCBzbyBsZXQgaXQgaW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICh0aGlzX2NwdV9yZWFkKHNyY3VfZGVmZXJfZHJhaW5pbmcpIFx1MDAyNlx1MDAyNiAhaW5fbm1pKCkpIHtcbiYjNDM7XHRcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O2NhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2RwID0gdGhpc19jcHVfcHRyKHNzcC1cdTAwM2VzZGEpO1xuJiM0MztcdFx0cmhwLVx1MDAzZWZ1bmMgPSBmdW5jO1xuJiM0MztcdFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpKSB7XG4mIzQzO1x0XHRcdC8qIEZpcnN0IGRlZmVycmFsIG9uIHRoaXMgc3JjdV9kYXRhOiBjaGFpbiBpdCBmb3IgdGhlIGRyYWluLiAqL1xuJiM0MztcdFx0XHRzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9IHRoaXNfY3B1X3B0cihcdTAwMjZzcmN1X2RlZmVyKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHNkcC1cdTAwM2Vzc3AgPSBzc3A7XG4mIzQzO1x0XHRcdGlmIChsbGlzdF9hZGQoXHUwMDI2c2RwLVx1MDAzZWRlZmVyX2xpbmssIFx1MDAyNnNuZHAtXHUwMDNlbGlzdCkpXG4mIzQzO1x0XHRcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2c25kcC1cdTAwM2Vpdyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuJiM0MztcbiYjNDM7XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMsIGRvX25vcm0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc28gdGhleSBjYW5ub3QgZGVmZXJcbiYjNDM7ICogYWdhaW4uICAtXHUwMDNlbG9jayBzZXJpYWxpemVzIHRoZSBkcmFpbmVyczogdGhlIGlycV93b3JrLCBzcmN1X2RlZmVyX2ZsdXNoKCkgYW5kXG4mIzQzOyAqIHNyY3Vfb2ZmbGluZV9kcmFpbigpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyk7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKnNub2RlLCAqc25leHQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNuZHAtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdHRoaXNfY3B1X3dyaXRlKHNyY3VfZGVmZXJfZHJhaW5pbmcsIHRydWUpO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX3NhZmUoc25vZGUsIHNuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnNuZHAtXHUwMDNlbGlzdCkpIHtcbiYjNDM7XHRcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IGNvbnRhaW5lcl9vZihzbm9kZSwgc3RydWN0IHNyY3VfZGF0YSwgZGVmZXJfbGluayk7XG4mIzQzO1x0XHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCA9IHNkcC1cdTAwM2Vzc3A7XG4mIzQzO1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqY25vZGUsICpjbmV4dDtcbiYjNDM7XG4mIzQzO1x0XHRjbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2c2RwLVx1MDAzZWRlZmVyX2Nicyk7XG4mIzQzO1x0XHRsbGlzdF9mb3JfZWFjaF9zYWZlKGNub2RlLCBjbmV4dCwgY25vZGUpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7XG4mIzQzO1xuJiM0MztcdFx0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jLCB0cnVlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0dGhpc19jcHVfd3JpdGUoc3JjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnNuZHAtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEcmFpbiBAY3B1JiMzOTtzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcyBmcm9tIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKVxuJiM0MzsgKiBvbmNlIEBjcHUgaXMgZGVhZC4gIE9uZSBwYXNzIGNvdmVycyBldmVyeSBzcmN1X3N0cnVjdCwgYW5kIHRoZSByZS1pc3N1ZSBsYW5kc1xuJiM0MzsgKiBvbiB0aGUgY3VycmVudCBDUFUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHNyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBjYWxsX3NyY3UoKSAtIFF1ZXVlIGEgY2FsbGJhY2sgZm9yIGludm9jYXRpb24gYWZ0ZXIgYW4gU1JDVSBncmFjZSBwZXJpb2RcbiAgKiBAc3NwOiBzcmN1X3N0cnVjdCBpbiBxdWV1ZSB0aGUgY2FsbGJhY2tcbkBAIC0xNjc3LDkgJiM0MzsxODExLDE3IEBAIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIHtcbiBcdGludCBjcHU7XG4gXHRpbnQgaWR4O1xuLVx0dW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHM7XG4gXG4gXHRjaGVja19pbml0X3NyY3Vfc3RydWN0KHNzcCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gIFRoZVxuJiM0MztcdCAqIHNoYXJlZCBpcnFfd29yayBtYXkgYWxzbyBkcmFpbiBvdGhlciBzcmN1X3N0cnVjdHMmIzM5Oywgd2hpY2ggaXMgaGFybWxlc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3JjdV9kZWZlcl9mbHVzaCgpO1xuJiM0MztcbiYjNDM7XHRzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9tdXRleCk7XG4gXHRpZiAocmN1X3NlcV9kb25lKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxLCBzKSkge1xuIFx0XHRzbXBfbWIoKTsgLyogRm9yY2Ugb3JkZXJpbmcgZm9sbG93aW5nIHJldHVybi4gKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RpbnkuYyBiL2tlcm5lbC9yY3UvdGlueS5jXG5pbmRleCBkY2NjY2Q2YmU5NDExLi41NzM2Yjk2NGQ4ZWUxIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90aW55LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdGlueS5jXG5AQCAtMTEsNiAmIzQzOzExLDggQEBcbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbkBAIC00Miw4ICYjNDM7NDQsODYgQEAgc3RhdGljIHN0cnVjdCByY3VfY3RybGJsayByY3VfY3RybGJsayA9IHtcbiBcdC5ncF9zZXFcdFx0PSAwIC0gMzAwVUwsXG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKVxuJiM0MzsgKiB0aGF0IGFycml2ZXMgd2l0aCBpbnRlcnJ1cHRzIG9mZiBzdGFnZXMgdGhlIGNhbGxiYWNrIG9uIGEgbG9ja2xlc3MgbGlzdCB0aGF0XG4mIzQzOyAqIGFuIGlycV93b3JrIHJlLWlzc3VlcyBsYXRlci4gIE9uZSBnbG9iYWwgbGlzdCBhbmQgaXJxX3dvcmsgc3VmZmljZSwgYXMgVGlueVxuJiM0MzsgKiBSQ1UgaXMgdW5pcHJvY2Vzc29yLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xuJiM0MztzdGF0aWMgTExJU1RfSEVBRChyY3VfZGVmZXJfbGlzdCk7XG4mIzQzO3N0YXRpYyBERUZJTkVfSVJRX1dPUksocmN1X2RlZmVyX2l3LCByY3VfZGVmZXJfZHJhaW4pO1xuJiM0MztzdGF0aWMgYm9vbCByY3VfZGVmZXJfZHJhaW5pbmc7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkgdG9cbiYjNDM7ICogcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsIGNvbmRpdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcbiYjNDM7XHRcdGlmIChhdG9taWNfaW5jX3JldHVybihcdTAwMjZkb3VibGVmcmVlcykgXHUwMDNjIDQpIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0OyVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cdTAwM2UlcFMoKSEhISAgXCYjMzQ7LCBfX2Z1bmNfXywgaGVhZCwgaGVhZC1cdTAwM2VmdW5jKTtcbiYjNDM7XHRcdFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbiYjNDM7XHRoZWFkLVx1MDAzZW5leHQgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4mIzQzO1x0KnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkO1xuJiM0MztcdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcdTAwMjZoZWFkLVx1MDAzZW5leHQ7XG4mIzQzO1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkge1xuJiM0MztcdFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cbiYjNDM7XHRcdHJlc2NoZWRfY3B1KDApO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4mIzQzO1xuJiM0MztcdC8qIENhbGxiYWNrcyBhcmUgdW5vcmRlcmVkLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy4gKi9cbiYjNDM7XHRyY3VfZGVmZXJfZHJhaW5pbmcgPSB0cnVlO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZyY3VfZGVmZXJfbGlzdCkpIHtcbiYjNDM7XHRcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xuJiM0MztcbiYjNDM7XHRcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9kZWZlcl9kcmFpbmluZyA9IGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4mIzQzO3tcbiYjNDM7XHQvKiBBIHJlLWVudHJhbnQgY2FsbF9yY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0OyBkcm9wIGl0LiAqL1xuJiM0MztcdGlmIChyY3VfZGVmZXJfZHJhaW5pbmcgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuJiM0MztcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O2NhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuJiM0MztcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgXHUwMDI2cmN1X2RlZmVyX2xpc3QpKVxuJiM0MztcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2cmN1X2RlZmVyX2l3KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyByY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLiAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpcnFfd29ya19zeW5jKFx1MDAyNnJjdV9kZWZlcl9pdyk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCByY3VfYmFycmllcih2b2lkKVxuIHtcbiYjNDM7XHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGZpcnN0LiAqL1xuJiM0MztcdHJjdV9kZWZlcl9mbHVzaCgpO1xuIFx0d2FpdF9yY3VfZ3AoY2FsbF9yY3VfaHVycnkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHJjdV9iYXJyaWVyKTtcbkBAIC0xNTcsMjkgJiM0MzsyMzcsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTtcbiAgKi9cbiB2b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4tXHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVxuLVx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4tXHRcdGlmIChhdG9taWNfaW5jX3JldHVybihcdTAwMjZkb3VibGVmcmVlcykgXHUwMDNjIDQpIHtcbi1cdFx0XHRwcl9lcnIoXCYjMzQ7JXMoKTogRG91YmxlLWZyZWVkIENCICVwLVx1MDAzZSVwUygpISEhICBcJiMzNDssIF9fZnVuY19fLCBoZWFkLCBoZWFkLVx1MDAzZWZ1bmMpO1xuLVx0XHRcdG1lbV9kdW1wX29iaihoZWFkKTtcbi1cdFx0fVxuJiM0MztcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbiYjNDM7XHRcdGNhbGxfcmN1X2RlZmVyKGhlYWQsIGZ1bmMpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuLVx0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbi1cbi1cdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbi1cdCpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDtcbi1cdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcdTAwMjZoZWFkLVx1MDAzZW5leHQ7XG4tXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4mIzQzO1x0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbiBcbi1cdGlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7XG4tXHRcdC8qIGZvcmNlIHNjaGVkdWxpbmcgZm9yIHJjdV9xcygpICovXG4tXHRcdHJlc2NoZWRfY3B1KDApO1xuLVx0fVxuJiM0MztcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuY1xuaW5kZXggOTY4NDhmYzFmMDJiOC4uZTIxZWI1NTFiMTEwZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvdHJlZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3RyZWUuY1xuQEAgLTI0LDYgJiM0MzsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2RlYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ubWkuaFx1MDAzZVxuQEAgLTMxNDgsMjEgJiM0MzszMTQ5LDI4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2NiX292bGQoc3RydWN0IHJjdV9kYXRhICpyZHApXG4gXHRyYXdfc3Bpbl91bmxvY2tfcmN1X25vZGUocm5wKTtcbiB9XG4gXG4tc3RhdGljIHZvaWRcbi1fX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcbiYjNDM7LypcbiYjNDM7ICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKVxuJiM0MzsgKiB0aGF0IGFycml2ZXMgd2l0aCBpbnRlcnJ1cHRzIG9mZiAoc2VlIHNob3VsZF9yY3VfZGVmZXIoKSkgc3RhZ2VzIHRoZSBjYWxsYmFja1xuJiM0MzsgKiBvbiBhIHBlci1DUFUgbGxpc3QgdGhhdCBhbiBpcnFfd29yayByZS1pc3N1ZXMgb25jZSBpbnRlcnJ1cHRzIGFyZSBvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbiYjNDM7XG4mIzQzOy8qIFNldCB3aGlsZSByY3VfZGVmZXJfZHJhaW4oKSByZS1pc3N1ZXMsIHRvIGNhdGNoIGEgcmUtZW50cmFudCBjYWxsX3JjdSgpLiAqL1xuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgcmN1X2RlZmVyX2RyYWluaW5nKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEVucXVldWUgQGhlYWQgb24gdGhpcyBDUFUmIzM5O3MgcmN1X3NlZ2NibGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpXG4mIzQzOyAqIHRvIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbFxuJiM0MzsgKiBjb25kaXRpb24uICBFaXRoZXIgY2FsbGVyIG1heSBoYXZlIGludGVycnVwdHMgYWxyZWFkeSBkaXNhYmxlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuIHtcbiBcdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRib29sIGxhenk7XG4gXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcDtcbiBcbi1cdC8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovXG4tXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcdTAwMjYgKHNpemVvZih2b2lkICopIC0gMSkpO1xuLVxuLVx0LyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqL1xuLVx0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXG4tXHRcdHJldHVybjtcbi1cbiBcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9yY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suXG5AQCAtMzIwNiw2ICYjNDM7MzIxNCw5MiBAQCBfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdCBkZWZlclxuJiM0MzsgKiBhZ2Fpbi4gIC1cdTAwM2VkZWZlcl9sb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGlzIENQVSYjMzk7cyBpcnFfd29yayxcbiYjNDM7ICogcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCByY3VfZGF0YSwgZGVmZXJfd29yayk7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xuJiM0MztcdHRoaXNfY3B1X3dyaXRlKHJjdV9kZWZlcl9kcmFpbmluZywgdHJ1ZSk7XG4mIzQzO1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSkge1xuJiM0MztcdFx0c3RydWN0IHJjdV9oZWFkICpoZWFkID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7XG4mIzQzO1xuJiM0MztcdFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cdTAwM2VmdW5jLCBmYWxzZSk7XG4mIzQzO1x0fVxuJiM0MztcdHRoaXNfY3B1X3dyaXRlKHJjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9sb2NrLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFN0YWdlIEBoZWFkIGZvciB0aGlzIENQVSYjMzk7cyBpcnFfd29yayB3aGVuIGNhbGxfcmN1KCkgY2Fubm90IGVucXVldWUgbm93LiAqL1xuJiM0MztzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHRoaXNfY3B1X3B0cihcdTAwMjZyY3VfZGF0YSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW5zdHJ1bWVudGF0aW9uIG9uIHRoZSBlbnF1ZXVlIHBhdGggY2FuIHJlLWVudGVyIGhlcmUgZnJvbSBpbnNpZGVcbiYjNDM7XHQgKiByY3VfZGVmZXJfZHJhaW4oKS4gIFJlLXF1ZXVpbmcgd291bGQgbGl2ZWxvY2sgdGhlIGRyYWluLCBzbyBkcm9wIHRoZVxuJiM0MztcdCAqIGNhbGxiYWNrOyBhbiBOTUkgaXMgb25lLXNob3QgYW5kIGNhbm5vdCBsb29wLCBzbyBsZXQgaXQgdGhyb3VnaC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodGhpc19jcHVfcmVhZChyY3VfZGVmZXJfZHJhaW5pbmcpIFx1MDAyNlx1MDAyNiAhaW5fbm1pKCkpIHtcbiYjNDM7XHRcdFdBUk5fT05DRSgxLCBcJiMzNDtjYWxsX3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbiYjNDM7XHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSlcbiYjNDM7XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl93b3JrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmdcbiYjNDM7ICogcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gIFRoaXMgcnVucyBiZWZvcmUgcmN1X2JhcnJpZXIoKSBzY2FucyB0aGVcbiYjNDM7ICogbGlzdHMuICBBbiBvbmxpbmUgQ1BVJiMzOTtzIG93biBpcnFfd29yayByZS1pc3N1ZXMgaXRzIGNhbGxiYWNrcywgc28gd2FpdCBpdCBvdXQ7XG4mIzQzOyAqIGFuIG9mZmxpbmUgQ1BVJiMzOTtzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4sIHNvIGRyYWluIGl0cyBsaXN0IGRpcmVjdGx5XG4mIzQzOyAqIG9udG8gdGhpcyBDUFUgaW5zdGVhZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjcHVfb25saW5lKGNwdSkpXG4mIzQzO1x0XHRcdGlycV93b3JrX3N5bmMoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7X19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4mIzQzO3tcbiYjNDM7XHQvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqL1xuJiM0MztcdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4mIzQzO1xuJiM0MztcdC8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi9cbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuJiM0MztcbiYjNDM7XHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBmdW5jLCBsYXp5X2luKTtcbiYjNDM7fVxuJiM0MztcbiAjaWZkZWYgQ09ORklHX1JDVV9MQVpZXG4gc3RhdGljIGJvb2wgZW5hYmxlX3JjdV9sYXp5IF9fcmVhZF9tb3N0bHkgPSAhSVNfRU5BQkxFRChDT05GSUdfUkNVX0xBWllfREVGQVVMVF9PRkYpO1xuIG1vZHVsZV9wYXJhbShlbmFibGVfcmN1X2xhenksIGJvb2wsIDA0NDQpO1xuQEAgLTM4OTYsOCAmIzQzOzM5OTAsMTIgQEAgdm9pZCByY3VfYmFycmllcih2b2lkKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHVuc2lnbmVkIGxvbmcgZ3NlcTtcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xuLVx0dW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnJjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHM7XG4gXG4mIzQzO1x0LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gKi9cbiYjNDM7XHRyY3VfZGVmZXJfZmx1c2goKTtcbiYjNDM7XG4mIzQzO1x0cyA9IHJjdV9zZXFfc25hcChcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XG4gXHRyY3VfYmFycmllcl90cmFjZShUUFMoXCYjMzQ7QmVnaW5cJiMzNDspLCAtMSwgcyk7XG4gXG4gXHQvKiBUYWtlIG11dGV4IHRvIHNlcmlhbGl6ZSBjb25jdXJyZW50IHJjdV9iYXJyaWVyKCkgcmVxdWVzdHMuICovXG5AQCAtNDIzMSw2ICYjNDM7NDMyOSwxMCBAQCByY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpXG4gXHRyZHAtXHUwMDNlcmN1X29ubF9ncF9zdGF0ZSA9IFJDVV9HUF9DTEVBTkVEO1xuIFx0cmRwLVx1MDAzZWxhc3Rfc2NoZWRfY2xvY2sgPSBqaWZmaWVzO1xuIFx0cmRwLVx1MDAzZWNwdSA9IGNwdTtcbiYjNDM7XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2hlYWQpO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jayk7XG4mIzQzO1x0LyogSGFyZCBpcnFfd29yayBzbyB0aGUgcmUtaXNzdWUgcnVucyBwcm9tcHRseS4gKi9cbiYjNDM7XHRyZHAtXHUwMDNlZGVmZXJfd29yayA9IElSUV9XT1JLX0lOSVRfSEFSRChyY3VfZGVmZXJfZHJhaW4pO1xuIFx0cmN1X2Jvb3RfaW5pdF9ub2NiX3BlcmNwdV9kYXRhKHJkcCk7XG4gfVxuIFxuQEAgLTQ1MjgsNiAmIzQzOzQ2MzAsMTYgQEAgdm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKGludCBjcHUpXG4gXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xuIFx0Ym9vbCBuZWVkd2FrZTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENhbGxiYWNrcyB0aGUgb3V0Z29pbmcgQ1BVIGRlZmVycmVkIGxhdGUgaW4gdGhlIG9mZmxpbmUgcGF0aCAocGFzdCB0aGVcbiYjNDM7XHQgKiBwb2ludCBpdHMgaXJxX3dvcmsgY2FuIHJ1bikgc2l0IG9uIC1cdTAwM2VkZWZlcl9oZWFkLCB3aGljaCB0aGUgLVx1MDAzZWNibGlzdFxuJiM0MztcdCAqIG1pZ3JhdGlvbiBiZWxvdyBkb2VzIG5vdCBjb3Zlci4gIERyYWluIHRoZW0gaGVyZSwgYmVmb3JlIHRoZSBlYXJseVxuJiM0MztcdCAqIHJldHVybnM7IHRoZSByZS1pc3N1ZSBsYW5kcyBvbiB0aGlzIENQVS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuJiM0MztcdC8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcy4gKi9cbiYjNDM7XHRzcmN1X29mZmxpbmVfZHJhaW4oY3B1KTtcbiYjNDM7XG4gXHRpZiAocmN1X3JkcF9pc19vZmZsb2FkZWQocmRwKSlcbiBcdFx0cmV0dXJuO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmhcbmluZGV4IGVlZGZhNDMwNTllODAuLjNhOGUxNzEzNmM1YTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmhcbkBAIC0yMjksNiAmIzQzOzIyOSwxMSBAQCBzdHJ1Y3QgcmN1X2RhdGEge1xuIFx0c3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDtcbiBcdGludCBleHBfd2F0Y2hpbmdfc25hcDtcdFx0LyogRG91YmxlLWNoZWNrIG5lZWQgZm9yIElQSS4gKi9cbiBcbiYjNDM7XHQvKiBEZWZlcnJhbCBvZiBhbiBOTUkvcmVlbnRyYW50IGNhbGxfcmN1KCk7IHNlZSBfX2NhbGxfcmN1X2NvbW1vbigpLiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2hlYWQ7XG4mIzQzO1x0c3RydWN0IGlycV93b3JrIGRlZmVyX3dvcms7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3QgZGVmZXJfbG9jaztcbiYjNDM7XG4gXHQvKiA1KSBDYWxsYmFjayBvZmZsb2FkaW5nLiAqL1xuICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVXG4gXHRzdHJ1Y3Qgc3dhaXRfcXVldWVfaGVhZCBub2NiX2NiX3dxOyAvKiBGb3Igbm9jYiBrdGhyZWFkcyB0byBzbGVlcCBvbi4gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY2ZWNkOTNiZTMwZjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmNcbkBAIC0wLDAgJiM0MzsxLDU4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIEV4ZXJjaXNlIHJlLWVudHJ5IGludG8gY2FsbF9zcmN1KCkgZnJvbSBCUEY7IHNlZSBwcm9ncy9yY3VfcmVlbnRyeS5jLiAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmN1X3JlZW50cnkuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN5c2NhbGwoX19OUl9waWRmZF9vcGVuLCBwaWQsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmN1X3JlZW50cnkgKnNrZWw7XG4mIzQzO1x0aW50IGVyciwgcGlkZmQgPSAtMSwgbWFwX2ZkO1xuJiM0MztcdF9fdTY0IHZhbCA9IDE7XG4mIzQzO1x0Y3B1X3NldF90IHNldDtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHJjdV9yZWVudHJ5X19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IHJjdV9yZWVudHJ5X19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtza2VsX2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgcmUtZW50cnkgb24gYSBzaW5nbGUgQ1BVLiAqL1xuJiM0MztcdENQVV9aRVJPKFx1MDAyNnNldCk7XG4mIzQzO1x0Q1BVX1NFVCgwLCBcdTAwMjZzZXQpO1xuJiM0MztcdGlmIChzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2Yoc2V0KSwgXHUwMDI2c2V0KSlcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDtzY2hlZF9zZXRhZmZpbml0eVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBpZGZkID0gc3lzX3BpZGZkX29wZW4oZ2V0cGlkKCksIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKHBpZGZkLCAwLCBcJiMzNDtwaWRmZF9vcGVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy50YXNrX3N0Zyk7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkLCBcdTAwMjZ2YWwsIEJQRl9OT0VYSVNUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2Jvb3RfY3JlYXRlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF9kZWxldGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkKTtcbiYjNDM7XHRBU1NFUlRfT0soZXJyLCBcJiMzNDtib290X2RlbGV0ZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgVHJlZSBTUkNVIGVucXVldWVzIHZpYSByY3Vfc2VnY2JsaXN0X2VucXVldWUoKTsgc2tpcCBlbHNld2hlcmUuICovXG4mIzQzO1x0aWYgKCFza2VsLVx1MDAzZWJzcy1cdTAwM2VoaXRzKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlZW50ZXJlZCwgMSwgXCYjMzQ7cmVlbnRyeV9kZWZlcnJlZFwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAocGlkZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UocGlkZmQpO1xuJiM0MztcdHJjdV9yZWVudHJ5X19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ5MmE5MjdmZjUxYzBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jXG5AQCAtMCwwICYjNDM7MSw0NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBSZS1lbnRlciBjYWxsX3NyY3UoKSBmcm9tIGEgQlBGIHByb2dyYW0uICBmZW50cnkgb24gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKClcbiYjNDM7ICogZmlyZXMgaW5zaWRlIGNhbGxfc3JjdSgpJiMzOTtzIGVucXVldWUgKHJlYWNoZWQgZnJvbSBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZCgpXG4mIzQzOyAqIHdpdGggdGhlIHNyY3VfZGF0YSAtXHUwMDNlbG9jayBoZWxkKTsgdGhlIGhhbmRsZXIgdGhlbiBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpXG4mIzQzOyAqIC0tIGl0c2VsZiBjYWxsX3NyY3UoKSBvbiByY3VfdGFza3NfdHJhY2Vfc3JjdV9zdHJ1Y3QgLS0gcmUtZW50ZXJpbmcgdGhlIHNhbWVcbiYjNDM7ICogc3JjdV9kYXRhIG9uIHRoZSBzYW1lIENQVS5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuJiM0Mzt9IHRhc2tfc3RnIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztpbnQgdGFyZ2V0X3BpZDtcbiYjNDM7aW50IGhpdHM7XG4mIzQzO2ludCByZWVudGVyZWQ7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L3JjdV9zZWdjYmxpc3RfZW5xdWV1ZVwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHJlZW50ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlZW50ZXJlZCB8fCAhdGFyZ2V0X3BpZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjdXIgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRpZiAoIWN1ciB8fCBjdXItXHUwMDNlcGlkICE9IHRhcmdldF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogUmUtZW50ZXIgdmlhIGEgdGFzay1zdG9yYWdlIGRlbGV0ZSwgd2hpY2ggY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbiYjNDM7XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZoaXRzLCAxKTtcbiYjNDM7XHRicGZfdGFza19zdG9yYWdlX2dldChcdTAwMjZ0YXNrX3N0ZywgY3VyLCAwLCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpO1xuJiM0MztcdGJwZl90YXNrX3N0b3JhZ2VfZGVsZXRlKFx1MDAyNnRhc2tfc3RnLCBjdXIpO1xuJiM0MztcbiYjNDM7XHRyZWVudGVyZWQgPSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7VFJBQ0VQT0lOVFMmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9vZmZsaW5lX2RyYWluJiMzNDssCiAgICAmIzM0O3JjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBkZWZlcnJlZCBSQ1UgYW5kIFNSQ1UgY2FsbGJhY2tzIHRvIHNhZmVseSBoYW5kbGUgcmUtZW50cmFudCBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgaW52b2NhdGlvbnMsIHN1Y2ggYXMgdGhvc2Ugb3JpZ2luYXRpbmcgZnJvbSBOTUkgY29udGV4dHMgb3IgQlBGIHByb2dyYW1zLiBJdCBtb2RpZmllcyBjb3JlIFJDVS9TUkNVIHN5bmNocm9uaXphdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBuZXcgY2FsbGJhY2sgZHJhaW5pbmcgbWVjaGFuaXNtcy4gVGhpcyBpcyBoaWdobHkgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxYmJlNmY5YmRhMzM4Nzk5ZDJlZmFiMDhjMzVjNGVlN2E2ZDA2MjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjU3OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oCmluZGV4IGZiY2YxM2JjMTJkMTUuLjQ3Mjc1ZDE4Mjk2NmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmgKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9TUkNVX1RJTllfSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmtfdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zd2FpdC5oJmd0OwogCiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgewpAQCAtMjYsNiAmIzQzOzI3LDggQEAgc3RydWN0IHNyY3Vfc3RydWN0IHsKIAlzdHJ1Y3QgcmN1X2hlYWQgKipzcmN1X2NiX3RhaWw7CS8qIFBlbmRpbmcgY2FsbGJhY2tzOiBUYWlsLiAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzcmN1X3dvcms7CS8qIEZvciBkcml2aW5nIGdyYWNlIHBlcmlvZHMuICovCiAJc3RydWN0IGlycV93b3JrIHNyY3VfaXJxX3dvcms7CS8qIERlZmVyIHNjaGVkdWxlX3dvcmsoKSB0byBpcnEgd29yay4gKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzOwkvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovCiYjNDM7CXN0cnVjdCBpcnFfd29yayBkZWZlcl9pdzsJCS8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIAlzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KQEAgLTMzLDYgJiM0MzszNiw3IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7CiAKIHZvaWQgc3JjdV9kcml2ZV9ncChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndwKTsKIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspOwomIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTsKIAogI2RlZmluZSBfX1NSQ1VfU1RSVUNUX0lOSVQobmFtZSwgX19pZ25vcmVkLCBfX19pZ25vcmVkLCBfX19faWdub3JlZCkJXAogewkJCQkJCQkJCVwKQEAgLTQwLDYgJiM0Mzs0NCw4IEBAIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspOwogCS5zcmN1X2NiX3RhaWwgPSAmYW1wO25hbWUuc3JjdV9jYl9oZWFkLAkJCQlcCiAJLnNyY3Vfd29yayA9IF9fV09SS19JTklUSUFMSVpFUihuYW1lLnNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCksCVwKIAkuc3JjdV9pcnFfd29yayA9IHsgLmZ1bmMgPSBzcmN1X3RpbnlfaXJxX3dvcmsgfSwJCVwKJiM0MzsJLmRlZmVyX2NicyA9IExMSVNUX0hFQURfSU5JVChuYW1lLmRlZmVyX2NicyksCQkJXAomIzQzOwkuZGVmZXJfaXcgPSB7IC5mdW5jID0gc3JjdV9kZWZlcl9kcmFpbiB9LAkJCQlcCiAJX19TUkNVX0RFUF9NQVBfSU5JVChuYW1lKQkJCQkJXAogfQogCkBAIC0xMzEsMTAgJiM0MzsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiAJc3luY2hyb25pemVfc3JjdShzc3ApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQotewotCXN5bmNocm9uaXplX3NyY3Uoc3NwKTsKLX0KJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApIHsgfQogI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaAppbmRleCA3NWU1NGU0Zjk2M2ZhLi4xY2U3NTlmYjcwOTQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oCkBAIC0xMyw2ICYjNDM7MTMsOCBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1X25vZGVfdHJlZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBsZXRpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmtfdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKIAogc3RydWN0IHNyY3Vfbm9kZTsKIHN0cnVjdCBzcmN1X3N0cnVjdDsKQEAgLTQxLDYgJiM0Mzs0Myw4IEBAIHN0cnVjdCBzcmN1X2RhdGEgewogCWJvb2wgc3JjdV9jYmxpc3RfaW52b2tpbmc7CQkvKiBJbnZva2luZyB0aGVzZSBDQnM/ICovCiAJc3RydWN0IHRpbWVyX2xpc3QgZGVsYXlfd29yazsJCS8qIERlbGF5IGZvciBDQiBpbnZva2luZyAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwkJLyogQ29udGV4dCBmb3IgQ0IgaW52b2tpbmcuICovCiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NiczsJCS8qIENhbGxiYWNrcyBkZWZlcnJlZCBvbiByZS1lbnRyeS4gKi8KJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgZGVmZXJfbGluazsJCS8qIExpbmtzIG9udG8gdGhlIHBlci1DUFUgZGVmZXJyYWwgZHJhaW4gbGlzdCAqLwogCXN0cnVjdCByY3VfaGVhZCBzcmN1X2JhcnJpZXJfaGVhZDsJLyogRm9yIHNyY3VfYmFycmllcigpIHVzZS4gKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9lY19oZWFkOwkJLyogRm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpIHVzZS4gKi8KIAlpbnQgc3JjdV9lY19zdGF0ZTsJCQkvKiAgU3RhdGUgZm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpLiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9LY29uZmlnIGIva2VybmVsL3JjdS9LY29uZmlnCmluZGV4IDMzMmRmN2E3YTYzNDcuLmJjOTQ4M2MwYjVkODQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L0tjb25maWcKQEAgLTE3NSw2ICYjNDM7MTc1LDEyIEBAIGNvbmZpZyBSQ1VfU1RBTExfQ09NTU9OCiBjb25maWcgUkNVX05FRURfU0VHQ0JMSVNUCiAJZGVmX2Jvb2wgKCBUUkVFX1JDVSB8fCBUUkVFX1NSQ1UgfHwgVEFTS1NfUkNVX0dFTkVSSUMgKQogCiYjNDM7IyBUaGUgZGVmZXJyYWwgKGFuZCB0aGUgSVJRX1dPUksgaXQgdXNlcykgaXMgb25seSBuZWVkZWQgd2hlcmUgY2FsbF9yY3UoKSAvCiYjNDM7IyBjYWxsX3NyY3UoKSBjYW4gYmUgaW52b2tlZCB3aGlsZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodC4KJiM0Mztjb25maWcgUkNVX0RFRkVSCiYjNDM7CWRlZl9ib29sIEhBVkVfTk1JIHx8IEtQUk9CRVMgfHwgRlVOQ1RJT05fVFJBQ0VSIHx8IFRSQUNFUE9JTlRTCiYjNDM7CXNlbGVjdCBJUlFfV09SSwomIzQzOwogY29uZmlnIFJDVV9GQU5PVVQKIAlpbnQgJiMzNDtUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgZmFub3V0IHZhbHVlJiMzNDsKIAlyYW5nZSAyIDY0IGlmIDY0QklUCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdS5oIGIva2VybmVsL3JjdS9yY3UuaAppbmRleCAzOWE5ZjZmYTlhN2IyLi5jYTA1ZDQ4NzczYzc5IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3JjdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvcmN1LmgKQEAgLTU3Miw2ICYjNDM7NTcyLDIzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrc19jYmxpc3RfaW5pdF9nZW5lcmljKHZvaWQpIHsgfQogI2RlZmluZSBSQ1VfU0NIRURVTEVSX0lOSVQJMQogI2RlZmluZSBSQ1VfU0NIRURVTEVSX1JVTk5JTkcJMgogCiYjNDM7LyoKJiM0MzsgKiBEZWZlciBhIGNhbGxfcmN1KCkvY2FsbF9zcmN1KCkgY2FsbGJhY2sgcmF0aGVyIHRoYW4gZW5xdWV1ZSBpdCBub3c/ICBEZWZlcgomIzQzOyAqIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzaW5jZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIG1heSBiZSBpbgomIzQzOyAqIGZsaWdodCBvbiB0aGlzIENQVS4gIE5vdCB3aGlsZSB0aGUgc2NoZWR1bGVyIGlzIGRvd24sIHRob3VnaDogaXJxX3dvcmsgaXMKJiM0MzsgKiB1bnVzYWJsZSBiZWZvcmUgaW5pdF9JUlEoKSwgeWV0IHJjdV9pbml0KCkgYWxyZWFkeSBjYWxscyBjYWxsX3JjdSgpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBpcnFzX2Rpc2FibGVkKCkgJmFtcDsmYW1wOyByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUmIzM5O3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovCiYjNDM7dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSk7CiYjNDM7CiBlbnVtIHJjdXRvcnR1cmVfdHlwZSB7CiAJUkNVX0ZMQVZPUiwKIAlSQ1VfVEFTS1NfRkxBVk9SLApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwppbmRleCA3OTQ5MzdlMTNlN2MzLi45ZWQxN2I2NDM2MjBhIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwpAQCAtNDgsNiAmIzQzOzQ4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC90aWNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfdHJhY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ubWkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3JjdS5oJiMzNDsKIApAQCAtMTE1LDYgJiM0MzsxMTYsNyBAQCB0b3J0dXJlX3BhcmFtKGludCwgbGVha3BvaW50ZXIsIDAsICYjMzQ7TGVhayBwb2ludGVyIGRlcmVmZXJlbmNlcyBmcm9tIHJlYWRlcnMmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgbl9iYXJyaWVyX2NicywgMCwgJiMzNDsjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nJiMzNDspOwogdG9ydHVyZV9wYXJhbShpbnQsIG5fdXBfZG93biwgMzIsICYjMzQ7IyBvZiBjb25jdXJyZW50IHVwL2Rvd24gaHJ0aW1lci1iYXNlZCBSQ1UgcmVhZGVycyYjMzQ7KTsKIHRvcnR1cmVfcGFyYW0oaW50LCBuZmFrZXdyaXRlcnMsIDQsICYjMzQ7TnVtYmVyIG9mIFJDVSBmYWtlIHdyaXRlciB0aHJlYWRzJiMzNDspOwomIzQzO3RvcnR1cmVfcGFyYW0oYm9vbCwgbm1pX2NhbGxzLCB0cnVlLCAmIzM0O0V4ZXJjaXNlIC0mZ3Q7Y2FsbCgpIGZyb20gTk1JIG9uIG5taV9jYXBhYmxlIGZsYXZvcnMmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgbnJlYWRlcnMsIC0xLCAmIzM0O051bWJlciBvZiBSQ1UgcmVhZGVyIHRocmVhZHMmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGJvb2wsIG53cml0ZXJzLCAxLCAmIzM0O051bWJlciBvZiBSQ1Ugd3JpdGVyIHRocmVhZHMgKDAgb3IgMSkmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgb2JqZWN0X2RlYnVnLCAwLCAmIzM0O0VuYWJsZSBkZWJ1Zy1vYmplY3QgZG91YmxlIGNhbGxfcmN1KCkgdGVzdGluZyYjMzQ7KTsKQEAgLTIxNiw2ICYjNDM7MjE4LDggQEAgc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdF9mYWlsdXJlOwogc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdHM7CiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVyczsKIHN0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfaXJxczsKJiM0MztzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYWxsOwomIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NiOwogc3RhdGljIGxvbmcgbl9iYXJyaWVyX2F0dGVtcHRzOwogc3RhdGljIGxvbmcgbl9iYXJyaWVyX3N1Y2Nlc3NlczsgLyogZGlkIHJjdV9iYXJyaWVyIHRlc3Qgc3VjY2VlZD8gKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5fcmVhZF9leGl0czsKQEAgLTQzMyw2ICYjNDM7NDM3LDcgQEAgc3RydWN0IHJjdV90b3J0dXJlX29wcyB7CiAJYm9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpOwogCWxvbmcgY2JmbG9vZF9tYXg7CiAJaW50IGlycV9jYXBhYmxlOwomIzQzOwlpbnQgbm1pX2NhcGFibGU7CiAJaW50IGNhbl9ib29zdDsKIAlpbnQgZXh0ZW5kYWJsZXM7CiAJaW50IHNsb3dfZ3BzOwpAQCAtNjQ4LDYgJiM0Mzs2NTMsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyByY3Vfb3BzID0gewogCS5leHRlbmRhYmxlcwkJPSBSQ1VUT1JUVVJFX01BWF9FWFRFTkQsCiAJLmRlYnVnX29iamVjdHMJCT0gMSwKIAkuc3RhcnRfcG9sbF9pcnFzb2ZmCT0gMSwKJiM0MzsJLm5taV9jYXBhYmxlCQk9IDEsCiAJLm5hbWUJCQk9ICYjMzQ7cmN1JiMzNDsKIH07CiAKQEAgLTk0Miw2ICYjNDM7OTQ4LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdV9vcHMgPSB7CiAJLmRlYnVnX29iamVjdHMJPSAxLAogCS5oYXZlX3VwX2Rvd24JPSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpCiAJCQkJPyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLAomIzQzOwkubm1pX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICYjMzQ7c3JjdSYjMzQ7CiB9OwogCkBAIC0xMDA1LDYgJiM0MzsxMDEyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdWRfb3BzID0gewogCS5kZWJ1Z19vYmplY3RzCT0gMSwKIAkuaGF2ZV91cF9kb3duCT0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKQogCQkJCT8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTiwKJiM0MzsJLm5taV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAmIzM0O3NyY3VkJiMzNDsKIH07CiAKQEAgLTEyNjksNiAmIzQzOzEyNzcsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyB0YXNrc190cmFjaW5nX29wcyA9IHsKIAkuY2JmbG9vZF9tYXgJPSA1MDAwMCwKIAkuaXJxX2NhcGFibGUJPSAxLAogCS5zbG93X2dwcwk9IDEsCiYjNDM7CS5ubWlfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gJiMzNDt0YXNrcy10cmFjaW5nJiMzNDsKIH07CiAKQEAgLTI2NTksMTIgJiM0MzsyNjY4LDk0IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKQogCiBzdGF0aWMgREVGSU5FX1RPUlRVUkVfUkFORE9NX1BFUkNQVShyY3VfdG9ydHVyZV90aW1lcl9yYW5kKTsKIAomIzQzOy8qCiYjNDM7ICogRXhlcmNpc2UgLSZndDtjYWxsKCkgZnJvbSBOTUkgY29udGV4dCBmb3IgZmxhdm9ycyB0aGF0IHNldCAtJmd0O25taV9jYXBhYmxlLiAgQQomIzQzOyAqIHBlci1DUFUgaGFyZHdhcmUgcGVyZiBjb3VudGVyIG92ZXJmbG93cyBpbnRvIGFuIE5NSSwgYW5kIGl0cyBoYW5kbGVyIHN1Ym1pdHMKJiM0MzsgKiBvbmUgcHJlYWxsb2NhdGVkIGNhbGxiYWNrIHZpYSAtJmd0O2NhbGwoKS4gIE9uZSBjYWxsYmFjayBpcyBpbiBmbGlnaHQgYXQgYSB0aW1lCiYjNDM7ICogKGd1YXJkZWQgYnkgYW4gYXRvbWljKSB0byBhdm9pZCBhbGxvY2F0aW5nIGluIE5NSS4gIFRoaXMgbWlycm9ycyBob3cgYSBCUEYKJiM0MzsgKiBwcm9ncmFtIHJlYWNoZXMgLSZndDtjYWxsKCkgZnJvbSBOTUkuCiYjNDM7ICovCiYjNDM7I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0gewomIzQzOwkudHlwZQkJPSBQRVJGX1RZUEVfSEFSRFdBUkUsCiYjNDM7CS5jb25maWcJCT0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLAomIzQzOwkuc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksCiYjNDM7CS5waW5uZWQJCT0gMSwKJiM0MzsJLmRpc2FibGVkCT0gMSwKJiM0MzsJLmZyZXEJCT0gMSwKJiM0MzsJLnNhbXBsZV9mcmVxCT0gMTAwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudCAqKnJjdV90b3J0dXJlX25taV9ldmVudHM7CiYjNDM7c3RhdGljIHN0cnVjdCByY3VfaGVhZCByY3VfdG9ydHVyZV9ubWlfcmg7CiYjNDM7c3RhdGljIGF0b21pY190IHJjdV90b3J0dXJlX25taV9yaF9pbnVzZTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApCiYjNDM7ewomIzQzOwlhdG9taWNfbG9uZ19pbmMoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYik7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAomIzQzOwkJCQkgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAomIzQzOwkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQomIzQzO3sKJiM0MzsJaWYgKCFpbl9ubWkoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJaWYgKGN1cl9vcHMtJmd0O2NhbGwgJmFtcDsmYW1wOyAhYXRvbWljX3hjaGcoJmFtcDtyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDEpKSB7CiYjNDM7CQljdXJfb3BzLSZndDtjYWxsKCZhbXA7cmN1X3RvcnR1cmVfbm1pX3JoLCByY3VfdG9ydHVyZV9ubWlfY2IpOwomIzQzOwkJYXRvbWljX2xvbmdfaW5jKCZhbXA7bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFubWlfY2FsbHMgfHwgIWN1cl9vcHMtJmd0O25taV9jYXBhYmxlIHx8ICFjdXJfb3BzLSZndDtjYWxsKQomIzQzOwkJcmV0dXJuOwomIzQzOwlyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0ga2NhbGxvYyhucl9jcHVfaWRzLCBzaXplb2YoKnJjdV90b3J0dXJlX25taV9ldmVudHMpLAomIzQzOwkJCQkJIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiYjNDM7CQlldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKCZhbXA7cmN1X3RvcnR1cmVfbm1pX2F0dHIsIGNwdSwKJiM0MzsJCQkJCQkJIE5VTEwsIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7CiYjNDM7CQlpZiAoSVNfRVJSKGV2ZW50KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSA9IGV2ZW50OwomIzQzOwkJcGVyZl9ldmVudF9lbmFibGUoZXZlbnQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKJiM0MzsJCWlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcGVyZl9ldmVudF9kaXNhYmxlKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7CiYjNDM7CQlwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7CiYjNDM7CX0KJiM0MzsJa2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7CiYjNDM7CXJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMOwomIzQzO30KJiM0MzsjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkgeyB9CiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9CiYjNDM7I2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KJiM0MzsKIC8qCiAgKiBSQ1UgdG9ydHVyZSByZWFkZXIgZnJvbSB0aW1lciBoYW5kbGVyLiAgRGVyZWZlcmVuY2VzIHJjdV90b3J0dXJlX2N1cnJlbnQsCiAgKiBpbmNyZW1lbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgcGlwZWxpbmUgYXJyYXkuICBUaGUKICAqIGNvdW50ZXIgaW4gdGhlIGVsZW1lbnQgc2hvdWxkIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAxLCBvdGhlcndpc2UsIHRoZQogICogUkNVIGltcGxlbWVudGF0aW9uIGlzIGJyb2tlbi4KICAqLwomIzQzOwogc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnVudXNlZCkKIHsKIAlXQVJOX09OX09OQ0UoIWluX3NlcnZpbmdfc29mdGlycSgpKTsKQEAgLTMwNDcsNiAmIzQzOzMxMzgsOSBAQCByY3VfdG9ydHVyZV9zdGF0c19wcmludCh2b2lkKQogCQlkYXRhX3JhY2Uobl9iYXJyaWVyX2F0dGVtcHRzKSwKIAkJZGF0YV9yYWNlKG5fcmN1X3RvcnR1cmVfYmFycmllcl9lcnJvcikpOwogCXByX2NvbnQoJiMzNDtyZWFkLWV4aXRzOiAlbGQgJiMzNDssIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLgomIzQzOwlwcl9jb250KCYjMzQ7bm1pLWNhbGxzOiAlbGQgbm1pLWNiczogJWxkICYjMzQ7LAomIzQzOwkJYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLAomIzQzOwkJYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NiKSk7CiAJcHJfY29udCgmIzM0O25vY2ItdG9nZ2xlczogJWxkOiVsZCAmIzM0OywKIAkJYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fbm9jYl9vZmZsb2FkKSwgYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fbm9jYl9kZW9mZmxvYWQpKTsKIAlwcl9jb250KCYjMzQ7Z3B3cmFwczogJWxkXG4mIzM0Oywgbl9ncHdyYXBzKTsKQEAgLTQzMjUsNiAmIzQzOzQ0MTksOCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpCiAJCWtmcmVlKHJlYWRlcl90YXNrcyk7CiAJCXJlYWRlcl90YXNrcyA9IE5VTEw7CiAJfQomIzQzOwkvKiBEaXNhYmxlIHRoZSBwZXJmIGNvdW50ZXJzIChhbmQgdGh1cyB0aGUgTk1JIC0mZ3Q7Y2FsbCgpIGZpcmluZykgbm93LiAqLwomIzQzOwlyY3VfdG9ydHVyZV9ubWlfY2xlYW51cCgpOwogCWtmcmVlKHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoayk7CiAJcmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDsKIApAQCAtNDM1NCw2ICYjNDM7NDQ1MCwyMCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpCiAJCXByX2luZm8oJiMzNDslczogSW52b2tpbmcgJXBTKCkuXG4mIzM0OywgX19mdW5jX18sIGN1cl9vcHMtJmd0O2NiX2JhcnJpZXIpOwogCQljdXJfb3BzLSZndDtjYl9iYXJyaWVyKCk7CiAJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBjYl9iYXJyaWVyKCkgYWJvdmUgZHJhaW5lZCBldmVyeSBkZWZlcnJlZCBOTUkgLSZndDtjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZQomIzQzOwkgKiBjb3VudCBpc3N1ZWQgZnJvbSBOTUkgbXVzdCBlcXVhbCB0aGUgY291bnQgaW52b2tlZDsgYSBtaXNtYXRjaCBtZWFucyBhCiYjNDM7CSAqIGNhbGxiYWNrIHdhcyBsb3N0LgomIzQzOwkgKi8KJiM0MzsJaWYgKGF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYWxsKSAhPQomIzQzOwkgICAgYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NiKSkgewomIzQzOwkJcHJfYWxlcnQoJiMzNDslczogTk1JIC0mZ3Q7Y2FsbCgpIGxvc3QgYSBjYWxsYmFjazogaXNzdWVkICVsZCBpbnZva2VkICVsZFxuJiMzNDssCiYjNDM7CQkJIF9fZnVuY19fLCBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksCiYjNDM7CQkJIGF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYikpOwomIzQzOwkJYXRvbWljX2luYygmYW1wO25fcmN1X3RvcnR1cmVfZXJyb3IpOwomIzQzOwl9CiYjNDM7CiAJaWYgKGN1cl9vcHMtJmd0O2NsZWFudXAgIT0gTlVMTCkKIAkJY3VyX29wcy0mZ3Q7Y2xlYW51cCgpOwogCkBAIC00Nzg2LDYgJiM0Mzs0ODk2LDggQEAgcmN1X3RvcnR1cmVfaW5pdCh2b2lkKQogCQlmaXJzdGVyciA9IC1FTk9NRU07CiAJCWdvdG8gdW53aW5kOwogCX0KJiM0MzsJLyogQXJtIHRoZSBwZXItQ1BVIHBlcmYgY291bnRlcnMgdGhhdCBkcml2ZSAtJmd0O2NhbGwoKSBmcm9tIE5NSS4gKi8KJiM0MzsJcmN1X3RvcnR1cmVfbm1pX2luaXQoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJlYWxyZWFkZXJzOyBpJiM0MzsmIzQzOykgewogCQlyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGtbaV0ucnRjX2Noa3JkciA9IC0xOwogCQlmaXJzdGVyciA9IHRvcnR1cmVfY3JlYXRlX2t0aHJlYWQocmN1X3RvcnR1cmVfcmVhZGVyLCAodm9pZCAqKWksCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmMKaW5kZXggNTU4YmE4ZDMxNmRiNi4uYTBhOTFmN2ZjMjU4YSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmVlbXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfd2FpdC5oJmd0OwpAQCAtNDMsNiAmIzQzOzQ0LDggQEAgc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAlJTklUX1dPUksoJmFtcDtzc3AtJmd0O3NyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtzc3AtJmd0O3NyY3Vfd29yay5lbnRyeSk7CiAJaW5pdF9pcnFfd29yaygmYW1wO3NzcC0mZ3Q7c3JjdV9pcnFfd29yaywgc3JjdV90aW55X2lycV93b3JrKTsKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c3NwLSZndDtkZWZlcl9jYnMpOwomIzQzOwlpbml0X2lycV93b3JrKCZhbXA7c3NwLSZndDtkZWZlcl9pdywgc3JjdV9kZWZlcl9kcmFpbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg2LDYgJiM0Mzs4OSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7CiB2b2lkIGNsZWFudXBfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiB7CiAJV0FSTl9PTihzcmN1X3JlYWRlcnNfYWN0aXZlKHNzcCkpOwomIzQzOwkvKiBSZS1pc3N1ZSBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIC0mZ3Q7c3JjdV9jYl9oZWFkIHNlZXMgdGhlbSBiZWxvdy4gKi8KJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlpcnFfd29ya19zeW5jKCZhbXA7c3NwLSZndDtkZWZlcl9pdyk7CiAJaXJxX3dvcmtfc3luYygmYW1wO3NzcC0mZ3Q7c3JjdV9pcnFfd29yayk7CiAJZmx1c2hfd29yaygmYW1wO3NzcC0mZ3Q7c3JjdV93b3JrKTsKIAlXQVJOX09OKHNzcC0mZ3Q7c3JjdV9ncF9ydW5uaW5nKTsKQEAgLTIxMywxMSAmIzQzOzIxOSwxMSBAQCBzdGF0aWMgdm9pZCBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIH0KIAogLyoKLSAqIEVucXVldWUgYW4gU1JDVSBjYWxsYmFjayBvbiB0aGUgc3BlY2lmaWVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZSwKLSAqIGluaXRpYXRpbmcgZ3JhY2UtcGVyaW9kIHByb2Nlc3NpbmcgaWYgaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy4KJiM0MzsgKiBFbnF1ZXVlIEByaHAgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSBzcmN1X2RlZmVyX2RyYWluKCkgdG8KJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLgogICovCi12b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCi0JICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpCiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKJiM0MzsJCQkgICAgcmN1X2NhbGxiYWNrX3QgZnVuYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yMzEsNiAmIzQzOzIzNyw0NiBAQCB2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCiAJc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQomIzQzOwomIzQzOy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovCiYjNDM7c3RhdGljIGJvb2wgc3JjdV9kZWZlcl9kcmFpbmluZzsKJiM0MzsKJiM0Mzt2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QsIGRlZmVyX2l3KTsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0OwomIzQzOwomIzQzOwkvKiBDYWxsYmFja3MgYXJlIHVub3JkZXJlZCwgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuICovCiYjNDM7CXNyY3VfZGVmZXJfZHJhaW5pbmcgPSB0cnVlOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoJmFtcDtzc3AtJmd0O2RlZmVyX2NicykpIHsKJiM0MzsJCXN0cnVjdCByY3VfaGVhZCAqcmhwID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7CiYjNDM7CiYjNDM7CQlzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC0mZ3Q7ZnVuYyk7CiYjNDM7CX0KJiM0MzsJc3JjdV9kZWZlcl9kcmFpbmluZyA9IGZhbHNlOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2RlZmVyX2RyYWluKTsKJiM0MzsKJiM0Mzt2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCiYjNDM7CSAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJaWYgKHNob3VsZF9yY3VfZGVmZXIoKSkgewomIzQzOwkJLyogQSByZS1lbnRyYW50IGNhbGxfc3JjdSgpIGR1cmluZyB0aGUgZHJhaW4gd291bGQgbGl2ZWxvY2sgaXQuICovCiYjNDM7CQlpZiAoc3JjdV9kZWZlcl9kcmFpbmluZyAmYW1wOyZhbXA7ICFpbl9ubWkoKSkgewomIzQzOwkJCVdBUk5fT05DRSgxLCAmIzM0O2NhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJcmhwLSZndDtmdW5jID0gZnVuYzsKJiM0MzsJCWlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCAmYW1wO3NzcC0mZ3Q7ZGVmZXJfY2JzKSkKJiM0MzsJCQlpcnFfd29ya19xdWV1ZSgmYW1wO3NzcC0mZ3Q7ZGVmZXJfaXcpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSAmYW1wOyZhbXA7IGluX25taSgpKTsKJiM0MzsKJiM0MzsJc3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3NyY3UpOwogCiAvKgpAQCAtMjYwLDYgJiM0MzszMDYsMTUgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7CiAKJiM0MzsvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzLCB0aGVuIHdhaXQgZm9yIGFsbCBpbi1mbGlnaHQgb25lcy4gKi8KJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKJiM0Mzt7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJaXJxX3dvcmtfc3luYygmYW1wO3NzcC0mZ3Q7ZGVmZXJfaXcpOwomIzQzOwlzeW5jaHJvbml6ZV9zcmN1KHNzcCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7CiYjNDM7CiAvKgogICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llCiAgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYwppbmRleCAzMDQxMTI2NzRlOGEyLi4yNjY5NTk0YTY0MDJmIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dHJlZS5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmNwdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWVtcHQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnFfd29yay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlX3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NtcC5oJmd0OwpAQCAtNzksNiAmIzQzOzgwLDQ3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc3JjdShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgc3JjdV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspOwogc3RhdGljIHZvaWQgc3JjdV9kZWxheV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7CiAKJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogUGVyLUNQVSBjYWxsX3NyY3UoKSBkZWZlcnJhbCBzdGF0ZSwgc2hhcmVkIGJ5IGV2ZXJ5IHNyY3Vfc3RydWN0LiAgQSBkZWZlcnJlZAomIzQzOyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJiMzOTtzIC0mZ3Q7ZGVmZXJfY2JzOyB0aGF0IHNyY3VfZGF0YSBpcyBjaGFpbmVkCiYjNDM7ICogdmlhIC0mZ3Q7ZGVmZXJfbGluayBvbnRvIC0mZ3Q7bGlzdCwgd2hpY2ggdGhlIGlycV93b3JrIHdhbGtzLgomIzQzOyAqLwomIzQzO3N0cnVjdCBzcmN1X2RlZmVyIHsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQJbGlzdDsKJiM0MzsJc3RydWN0IGlycV93b3JrCQlpdzsKJiM0MzsJcmF3X3NwaW5sb2NrX3QJCWxvY2s7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNyY3VfZGVmZXIsIHNyY3VfZGVmZXIpID0gewomIzQzOwkubG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRChzcmN1X2RlZmVyLmxvY2spLAomIzQzOwkuaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbiksCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBTZXQgd2hpbGUgc3JjdV9kZWZlcl9kcmFpbigpIHJlLWlzc3VlcywgdG8gY2F0Y2ggYSByZS1lbnRyYW50IGNhbGxfc3JjdSgpLiAqLwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCBzcmN1X2RlZmVyX2RyYWluaW5nKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEZsdXNoIHBlbmRpbmcgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHNyY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLgomIzQzOyAqIFdhaXQgb3V0IGFuIG9ubGluZSBDUFUmIzM5O3MgaXJxX3dvcms7IGRyYWluIGFuIG9mZmxpbmUgQ1BVJiMzOTtzIGxpc3QgZGlyZWN0bHksIGFzCiYjNDM7ICogaXRzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiYjNDM7CQlpZiAoY3B1X29ubGluZShjcHUpKQomIzQzOwkJCWlycV93b3JrX3N5bmMoJmFtcDtwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSkuaXcpOwomIzQzOwkJZWxzZQomIzQzOwkJCXNyY3VfZGVmZXJfZHJhaW4oJmFtcDtwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSkuaXcpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIEluaXRpYWxpemUgU1JDVSBwZXItQ1BVIGRhdGEuICBOb3RlIHRoYXQgc3RhdGljYWxseSBhbGxvY2F0ZWQKICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgbWlnaHQgYWxyZWFkeSBoYXZlIHNyY3VfcmVhZF9sb2NrKCkgYW5kCkBAIC0xMDcsNiAmIzQzOzE0OSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3NyY3Vfc3RydWN0X2RhdGEoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiAJCXNkcC0mZ3Q7Y3B1ID0gY3B1OwogCQlJTklUX1dPUksoJmFtcDtzZHAtJmd0O3dvcmssIHNyY3VfaW52b2tlX2NhbGxiYWNrcyk7CiAJCXRpbWVyX3NldHVwKCZhbXA7c2RwLSZndDtkZWxheV93b3JrLCBzcmN1X2RlbGF5X3RpbWVyLCAwKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiAtJmd0O2RlZmVyX2NicyBhbmQgLSZndDtkZWZlcl9saW5rIGFyZSB2YWxpZCB3aGVuIHplcm9lZCBhbmQgYXJlIG5vdAomIzQzOwkJICogcmVpbml0aWFsaXplZCBoZXJlLCBsZXN0IHdlIGNsb2JiZXIgY2FsbGJhY2tzIGEgcmVlbnRyYW50CiYjNDM7CQkgKiBjYWxsX3NyY3UoKSBhbHJlYWR5IHN0YWdlZC4gIFNlZSBfX2NhbGxfc3JjdSgpLgomIzQzOwkJICovCiAJCXNkcC0mZ3Q7c3NwID0gc3NwOwogCX0KIH0KQEAgLTY5NSw3ICYjNDM7NzQyLDEyIEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAkJcmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovCiAJaWYgKFdBUk5fT04oc3JjdV9yZWFkZXJzX2FjdGl2ZShzc3ApKSkKIAkJcmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovCi0JLyogV2FpdCBmb3IgaXJxX3dvcmsgdG8gZmluaXNoIGZpcnN0IGFzIGl0IG1heSBxdWV1ZSBhIG5ldyB3b3JrLiAqLwomIzQzOwkvKgomIzQzOwkgKiBEcmFpbiBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHN5bmNpbmcgLSZndDtpcnFfd29yazogcmUtaXNzdWluZyBvbmUgY2FuCiYjNDM7CSAqIHN0YXJ0IGEgZ3JhY2UgcGVyaW9kIGFuZCByZS1xdWV1ZSAtJmd0O2lycV93b3JrLCB3aGljaCB0aGVuIHNjaGVkdWxlcwomIzQzOwkgKiAtJmd0O3dvcmssIHNvIGJvdGggbXVzdCBiZSB3YWl0ZWQgb3V0IGFmdGVyIHRoZSBkcmFpbi4KJiM0MzsJICovCiYjNDM7CXNyY3VfZGVmZXJfZmx1c2goKTsKIAlpcnFfd29ya19zeW5jKCZhbXA7c3VwLSZndDtpcnFfd29yayk7CiAJZmx1c2hfZGVsYXllZF93b3JrKCZhbXA7c3VwLSZndDt3b3JrKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CkBAIC0xNDEwLDggJiM0MzsxNDYyLDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLAogICogc3JjdV9yZWFkX2xvY2soKSwgYW5kIHNyY3VfcmVhZF91bmxvY2soKSB0aGF0IGFyZSBhbGwgcGFzc2VkIHRoZSBzYW1lCiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUuCiAgKi8KLXN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKLQkJCXJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSkKJiM0MzsvKgomIzQzOyAqIFRoZSBzcmN1X2NibGlzdCBhbmQgc3JjdV9ub2RlIHRyZWUgYXJlIG9ubHkgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCiYjNDM7ICogKHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkgZW5xdWV1ZXMgdW5kZXIgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgYW5kIG1heSB3YWxrCiYjNDM7ICogdGhlIHRyZWUpLiAgTGlrZSBjYWxsX3JjdSgpLCBfX2NhbGxfc3JjdSgpIGRlZmVycyB3aGVuIGludGVycnVwdHMgYXJlIGFscmVhZHkKJiM0MzsgKiBkaXNhYmxlZCwgc28gYSByZS1lbnRyYW50IGNhbGxfc3JjdSgpIC0tIGUuZy4gY2FsbF9yY3VfdGFza3NfdHJhY2UoKSBmcm9tIGEKJiM0MzsgKiBCUEYgcHJvZ3JhbSAtLSBjYW5ub3QgY29ycnVwdCB0aGUgbGlzdCBvciBkZWFkbG9jay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAomIzQzOwkJCSAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pCiB7CiAJaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHsKIAkJLyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi8KQEAgLTE0MjMsNiAmIzQzOzE0ODIsODEgQEAgc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAogCSh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKJiM0MzsJCQlyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pCiYjNDM7ewomIzQzOwlpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9kYXRhICpzZHA7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogSW5zdHJ1bWVudGF0aW9uIG9uIHRoZSBlbnF1ZXVlIHBhdGggY2FuIHJlLWVudGVyIGhlcmUgZnJvbQomIzQzOwkJICogaW5zaWRlIHNyY3VfZGVmZXJfZHJhaW4oKS4gIFJlLXF1ZXVpbmcgd291bGQgbGl2ZWxvY2sgdGhlCiYjNDM7CQkgKiBkcmFpbiwgc28gZHJvcCB0aGUgY2FsbGJhY2s7IGFuIE5NSSBjYW5ub3QgbG9vcCwgc28gbGV0IGl0IGluLgomIzQzOwkJICovCiYjNDM7CQlpZiAodGhpc19jcHVfcmVhZChzcmN1X2RlZmVyX2RyYWluaW5nKSAmYW1wOyZhbXA7ICFpbl9ubWkoKSkgewomIzQzOwkJCVdBUk5fT05DRSgxLCAmIzM0O2NhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJc2RwID0gdGhpc19jcHVfcHRyKHNzcC0mZ3Q7c2RhKTsKJiM0MzsJCXJocC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CQlpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgJmFtcDtzZHAtJmd0O2RlZmVyX2NicykpIHsKJiM0MzsJCQkvKiBGaXJzdCBkZWZlcnJhbCBvbiB0aGlzIHNyY3VfZGF0YTogY2hhaW4gaXQgZm9yIHRoZSBkcmFpbi4gKi8KJiM0MzsJCQlzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9IHRoaXNfY3B1X3B0cigmYW1wO3NyY3VfZGVmZXIpOwomIzQzOwomIzQzOwkJCXNkcC0mZ3Q7c3NwID0gc3NwOwomIzQzOwkJCWlmIChsbGlzdF9hZGQoJmFtcDtzZHAtJmd0O2RlZmVyX2xpbmssICZhbXA7c25kcC0mZ3Q7bGlzdCkpCiYjNDM7CQkJCWlycV93b3JrX3F1ZXVlKCZhbXA7c25kcC0mZ3Q7aXcpOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSAmYW1wOyZhbXA7IGluX25taSgpKTsKJiM0MzsKJiM0MzsJc3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jLCBkb19ub3JtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc28gdGhleSBjYW5ub3QgZGVmZXIKJiM0MzsgKiBhZ2Fpbi4gIC0mZ3Q7bG9jayBzZXJpYWxpemVzIHRoZSBkcmFpbmVyczogdGhlIGlycV93b3JrLCBzcmN1X2RlZmVyX2ZsdXNoKCkgYW5kCiYjNDM7ICogc3JjdV9vZmZsaW5lX2RyYWluKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KQomIzQzO3sKJiM0MzsJc3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpzbm9kZSwgKnNuZXh0OwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzbmRwLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CXRoaXNfY3B1X3dyaXRlKHNyY3VfZGVmZXJfZHJhaW5pbmcsIHRydWUpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbCgmYW1wO3NuZHAtJmd0O2xpc3QpKSB7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9kYXRhICpzZHAgPSBjb250YWluZXJfb2Yoc25vZGUsIHN0cnVjdCBzcmN1X2RhdGEsIGRlZmVyX2xpbmspOwomIzQzOwkJc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBzZHAtJmd0O3NzcDsKJiM0MzsJCXN0cnVjdCBsbGlzdF9ub2RlICpjbm9kZSwgKmNuZXh0OwomIzQzOwomIzQzOwkJY25vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7c2RwLSZndDtkZWZlcl9jYnMpOwomIzQzOwkJbGxpc3RfZm9yX2VhY2hfc2FmZShjbm9kZSwgY25leHQsIGNub2RlKSB7CiYjNDM7CQkJc3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7CiYjNDM7CiYjNDM7CQkJc3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtJmd0O2Z1bmMsIHRydWUpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXRoaXNfY3B1X3dyaXRlKHNyY3VfZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTsKJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtzbmRwLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRHJhaW4gQGNwdSYjMzk7cyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3MgZnJvbSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkKJiM0MzsgKiBvbmNlIEBjcHUgaXMgZGVhZC4gIE9uZSBwYXNzIGNvdmVycyBldmVyeSBzcmN1X3N0cnVjdCwgYW5kIHRoZSByZS1pc3N1ZSBsYW5kcwomIzQzOyAqIG9uIHRoZSBjdXJyZW50IENQVS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KQomIzQzO3sKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlzcmN1X2RlZmVyX2RyYWluKCZhbXA7cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZAogICogQHNzcDogc3JjdV9zdHJ1Y3QgaW4gcXVldWUgdGhlIGNhbGxiYWNrCkBAIC0xNjc3LDkgJiM0MzsxODExLDE3IEBAIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogewogCWludCBjcHU7CiAJaW50IGlkeDsKLQl1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoJmFtcDtzc3AtJmd0O3NyY3Vfc3VwLSZndDtzcmN1X2JhcnJpZXJfc2VxKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzOwogCiAJY2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAgVGhlCiYjNDM7CSAqIHNoYXJlZCBpcnFfd29yayBtYXkgYWxzbyBkcmFpbiBvdGhlciBzcmN1X3N0cnVjdHMmIzM5Oywgd2hpY2ggaXMgaGFybWxlc3MuCiYjNDM7CSAqLwomIzQzOwlzcmN1X2RlZmVyX2ZsdXNoKCk7CiYjNDM7CiYjNDM7CXMgPSByY3Vfc2VxX3NuYXAoJmFtcDtzc3AtJmd0O3NyY3Vfc3VwLSZndDtzcmN1X2JhcnJpZXJfc2VxKTsKIAltdXRleF9sb2NrKCZhbXA7c3NwLSZndDtzcmN1X3N1cC0mZ3Q7c3JjdV9iYXJyaWVyX211dGV4KTsKIAlpZiAocmN1X3NlcV9kb25lKCZhbXA7c3NwLSZndDtzcmN1X3N1cC0mZ3Q7c3JjdV9iYXJyaWVyX3NlcSwgcykpIHsKIAkJc21wX21iKCk7IC8qIEZvcmNlIG9yZGVyaW5nIGZvbGxvd2luZyByZXR1cm4uICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RpbnkuYyBiL2tlcm5lbC9yY3UvdGlueS5jCmluZGV4IGRjY2NjZDZiZTk0MTEuLjU3MzZiOTY0ZDhlZTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdGlueS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdGlueS5jCkBAIC0xMSw2ICYjNDM7MTEsOCBAQAogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pcnFfd29yay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25vdGlmaWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwpAQCAtNDIsOCAmIzQzOzQ0LDg2IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2N0cmxibGsgPSB7CiAJLmdwX3NlcQkJPSAwIC0gMzAwVUwsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpCiYjNDM7ICogdGhhdCBhcnJpdmVzIHdpdGggaW50ZXJydXB0cyBvZmYgc3RhZ2VzIHRoZSBjYWxsYmFjayBvbiBhIGxvY2tsZXNzIGxpc3QgdGhhdAomIzQzOyAqIGFuIGlycV93b3JrIHJlLWlzc3VlcyBsYXRlci4gIE9uZSBnbG9iYWwgbGlzdCBhbmQgaXJxX3dvcmsgc3VmZmljZSwgYXMgVGlueQomIzQzOyAqIFJDVSBpcyB1bmlwcm9jZXNzb3IuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpOwomIzQzO3N0YXRpYyBMTElTVF9IRUFEKHJjdV9kZWZlcl9saXN0KTsKJiM0MztzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHJjdV9kZWZlcl9pdywgcmN1X2RlZmVyX2RyYWluKTsKJiM0MztzdGF0aWMgYm9vbCByY3VfZGVmZXJfZHJhaW5pbmc7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkgdG8KJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYykKJiM0Mzt7CiYjNDM7CXN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlczsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7CiYjNDM7CQlpZiAoYXRvbWljX2luY19yZXR1cm4oJmFtcDtkb3VibGVmcmVlcykgJmx0OyA0KSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMoKTogRG91YmxlLWZyZWVkIENCICVwLSZndDslcFMoKSEhISAgJiMzNDssIF9fZnVuY19fLCBoZWFkLCBoZWFkLSZndDtmdW5jKTsKJiM0MzsJCQltZW1fZHVtcF9vYmooaGVhZCk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGVhZC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CWhlYWQtJmd0O25leHQgPSBOVUxMOwomIzQzOwomIzQzOwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CSpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDsKJiM0MzsJcmN1X2N0cmxibGsuY3VydGFpbCA9ICZhbXA7aGVhZC0mZ3Q7bmV4dDsKJiM0MzsJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkgewomIzQzOwkJLyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi8KJiM0MzsJCXJlc2NoZWRfY3B1KDApOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KQomIzQzO3sKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0OwomIzQzOwomIzQzOwkvKiBDYWxsYmFja3MgYXJlIHVub3JkZXJlZCwgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuICovCiYjNDM7CXJjdV9kZWZlcl9kcmFpbmluZyA9IHRydWU7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbCgmYW1wO3JjdV9kZWZlcl9saXN0KSkgewomIzQzOwkJc3RydWN0IHJjdV9oZWFkICpoZWFkID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7CiYjNDM7CiYjNDM7CQlyY3VfZG9fZW5xdWV1ZShoZWFkLCBoZWFkLSZndDtmdW5jKTsKJiM0MzsJfQomIzQzOwlyY3VfZGVmZXJfZHJhaW5pbmcgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJLyogQSByZS1lbnRyYW50IGNhbGxfcmN1KCkgZHVyaW5nIHRoZSBkcmFpbiB3b3VsZCBsaXZlbG9jayBpdDsgZHJvcCBpdC4gKi8KJiM0MzsJaWYgKHJjdV9kZWZlcl9kcmFpbmluZyAmYW1wOyZhbXA7ICFpbl9ubWkoKSkgewomIzQzOwkJV0FSTl9PTkNFKDEsICYjMzQ7Y2FsbF9yY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CWhlYWQtJmd0O2Z1bmMgPSBmdW5jOwomIzQzOwlpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsICZhbXA7cmN1X2RlZmVyX2xpc3QpKQomIzQzOwkJaXJxX3dvcmtfcXVldWUoJmFtcDtyY3VfZGVmZXJfaXcpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlycV93b3JrX3N5bmMoJmFtcDtyY3VfZGVmZXJfaXcpOwomIzQzO30KJiM0MzsKIHZvaWQgcmN1X2JhcnJpZXIodm9pZCkKIHsKJiM0MzsJLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBmaXJzdC4gKi8KJiM0MzsJcmN1X2RlZmVyX2ZsdXNoKCk7CiAJd2FpdF9yY3VfZ3AoY2FsbF9yY3VfaHVycnkpOwogfQogRVhQT1JUX1NZTUJPTChyY3VfYmFycmllcik7CkBAIC0xNTcsMjkgJiM0MzsyMzcsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTsKICAqLwogdm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpCiB7Ci0Jc3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHsKLQkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZhbXA7ZG91YmxlZnJlZXMpICZsdDsgNCkgewotCQkJcHJfZXJyKCYjMzQ7JXMoKTogRG91YmxlLWZyZWVkIENCICVwLSZndDslcFMoKSEhISAgJiMzNDssIF9fZnVuY19fLCBoZWFkLCBoZWFkLSZndDtmdW5jKTsKLQkJCW1lbV9kdW1wX29iaihoZWFkKTsKLQkJfQomIzQzOwlpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7CiYjNDM7CQljYWxsX3JjdV9kZWZlcihoZWFkLCBmdW5jKTsKIAkJcmV0dXJuOwogCX0KIAotCWhlYWQtJmd0O2Z1bmMgPSBmdW5jOwotCWhlYWQtJmd0O25leHQgPSBOVUxMOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDsKLQlyY3VfY3RybGJsay5jdXJ0YWlsID0gJmFtcDtoZWFkLSZndDtuZXh0OwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKJiM0MzsJLyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovCiYjNDM7CVdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpICZhbXA7JmFtcDsgaW5fbm1pKCkpOwogCi0JaWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHsKLQkJLyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi8KLQkJcmVzY2hlZF9jcHUoMCk7Ci0JfQomIzQzOwlyY3VfZG9fZW5xdWV1ZShoZWFkLCBmdW5jKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuYwppbmRleCA5Njg0OGZjMWYwMmI4Li5lMjFlYjU1MWIxMTBlIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3RyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3RyZWUuYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZV93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9kZWJ1Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25taS5oJmd0OwpAQCAtMzE0OCwyMSAmIzQzOzMxNDksMjggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2Jfb3ZsZChzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIAlyYXdfc3Bpbl91bmxvY2tfcmN1X25vZGUocm5wKTsKIH0KIAotc3RhdGljIHZvaWQKLV9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKQomIzQzOy8qCiYjNDM7ICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKQomIzQzOyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIChzZWUgc2hvdWxkX3JjdV9kZWZlcigpKSBzdGFnZXMgdGhlIGNhbGxiYWNrCiYjNDM7ICogb24gYSBwZXItQ1BVIGxsaXN0IHRoYXQgYW4gaXJxX3dvcmsgcmUtaXNzdWVzIG9uY2UgaW50ZXJydXB0cyBhcmUgb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpOwomIzQzOwomIzQzOy8qIFNldCB3aGlsZSByY3VfZGVmZXJfZHJhaW4oKSByZS1pc3N1ZXMsIHRvIGNhdGNoIGEgcmUtZW50cmFudCBjYWxsX3JjdSgpLiAqLwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCByY3VfZGVmZXJfZHJhaW5pbmcpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSYjMzk7cyByY3Vfc2VnY2JsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkKJiM0MzsgKiB0byByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwKJiM0MzsgKiBjb25kaXRpb24uICBFaXRoZXIgY2FsbGVyIG1heSBoYXZlIGludGVycnVwdHMgYWxyZWFkeSBkaXNhYmxlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbikKIHsKIAlzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlib29sIGxhenk7CiAJc3RydWN0IHJjdV9kYXRhICpyZHA7CiAKLQkvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqLwotCVdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkICZhbXA7IChzaXplb2Yodm9pZCAqKSAtIDEpKTsKLQotCS8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi8KLQlpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSkKLQkJcmV0dXJuOwotCiAJaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7CiAJCS8qCiAJCSAqIFByb2JhYmxlIGRvdWJsZSBjYWxsX3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4KQEAgLTMyMDYsNiAmIzQzOzMyMTQsOTIgQEAgX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gdGhlIGVucXVldWUgc28gdGhleSBjYW5ub3QgZGVmZXIKJiM0MzsgKiBhZ2Fpbi4gIC0mZ3Q7ZGVmZXJfbG9jayBzZXJpYWxpemVzIHRoZSBkcmFpbmVyczogdGhpcyBDUFUmIzM5O3MgaXJxX3dvcmssCiYjNDM7ICogcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByY3VfZGF0YSAqcmRwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3QgcmN1X2RhdGEsIGRlZmVyX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfbG9jaywgZmxhZ3MpOwomIzQzOwl0aGlzX2NwdV93cml0ZShyY3VfZGVmZXJfZHJhaW5pbmcsIHRydWUpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoJmFtcDtyZHAtJmd0O2RlZmVyX2hlYWQpKSB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTsKJiM0MzsKJiM0MzsJCXJjdV9kb19lbnF1ZXVlKGhlYWQsIGhlYWQtJmd0O2Z1bmMsIGZhbHNlKTsKJiM0MzsJfQomIzQzOwl0aGlzX2NwdV93cml0ZShyY3VfZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTsKJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyZHAtJmd0O2RlZmVyX2xvY2ssIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU3RhZ2UgQGhlYWQgZm9yIHRoaXMgQ1BVJiMzOTtzIGlycV93b3JrIHdoZW4gY2FsbF9yY3UoKSBjYW5ub3QgZW5xdWV1ZSBub3cuICovCiYjNDM7c3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJc3RydWN0IHJjdV9kYXRhICpyZHAgPSB0aGlzX2NwdV9wdHIoJmFtcDtyY3VfZGF0YSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEluc3RydW1lbnRhdGlvbiBvbiB0aGUgZW5xdWV1ZSBwYXRoIGNhbiByZS1lbnRlciBoZXJlIGZyb20gaW5zaWRlCiYjNDM7CSAqIHJjdV9kZWZlcl9kcmFpbigpLiAgUmUtcXVldWluZyB3b3VsZCBsaXZlbG9jayB0aGUgZHJhaW4sIHNvIGRyb3AgdGhlCiYjNDM7CSAqIGNhbGxiYWNrOyBhbiBOTUkgaXMgb25lLXNob3QgYW5kIGNhbm5vdCBsb29wLCBzbyBsZXQgaXQgdGhyb3VnaC4KJiM0MzsJICovCiYjNDM7CWlmICh0aGlzX2NwdV9yZWFkKHJjdV9kZWZlcl9kcmFpbmluZykgJmFtcDsmYW1wOyAhaW5fbm1pKCkpIHsKJiM0MzsJCVdBUk5fT05DRSgxLCAmIzM0O2NhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwloZWFkLSZndDtmdW5jID0gZnVuYzsKJiM0MzsJaWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCAmYW1wO3JkcC0mZ3Q7ZGVmZXJfaGVhZCkpCiYjNDM7CQlpcnFfd29ya19xdWV1ZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfd29yayk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmcKJiM0MzsgKiByY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLiAgVGhpcyBydW5zIGJlZm9yZSByY3VfYmFycmllcigpIHNjYW5zIHRoZQomIzQzOyAqIGxpc3RzLiAgQW4gb25saW5lIENQVSYjMzk7cyBvd24gaXJxX3dvcmsgcmUtaXNzdWVzIGl0cyBjYWxsYmFja3MsIHNvIHdhaXQgaXQgb3V0OwomIzQzOyAqIGFuIG9mZmxpbmUgQ1BVJiMzOTtzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4sIHNvIGRyYWluIGl0cyBsaXN0IGRpcmVjdGx5CiYjNDM7ICogb250byB0aGlzIENQVSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKCZhbXA7cmN1X2RhdGEsIGNwdSk7CiYjNDM7CiYjNDM7CQlpZiAoY3B1X29ubGluZShjcHUpKQomIzQzOwkJCWlycV93b3JrX3N5bmMoJmFtcDtyZHAtJmd0O2RlZmVyX3dvcmspOwomIzQzOwkJZWxzZQomIzQzOwkJCXJjdV9kZWZlcl9kcmFpbigmYW1wO3JkcC0mZ3Q7ZGVmZXJfd29yayk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0MztfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbikKJiM0Mzt7CiYjNDM7CS8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovCiYjNDM7CVdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkICZhbXA7IChzaXplb2Yodm9pZCAqKSAtIDEpKTsKJiM0MzsKJiM0MzsJLyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHNob3VsZF9yY3VfZGVmZXIoKSkgewomIzQzOwkJY2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovCiYjNDM7CVdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpICZhbXA7JmFtcDsgaW5fbm1pKCkpOwomIzQzOwomIzQzOwlyY3VfZG9fZW5xdWV1ZShoZWFkLCBmdW5jLCBsYXp5X2luKTsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX1JDVV9MQVpZCiBzdGF0aWMgYm9vbCBlbmFibGVfcmN1X2xhenkgX19yZWFkX21vc3RseSA9ICFJU19FTkFCTEVEKENPTkZJR19SQ1VfTEFaWV9ERUZBVUxUX09GRik7CiBtb2R1bGVfcGFyYW0oZW5hYmxlX3JjdV9sYXp5LCBib29sLCAwNDQ0KTsKQEAgLTM4OTYsOCAmIzQzOzM5OTAsMTIgQEAgdm9pZCByY3VfYmFycmllcih2b2lkKQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBnc2VxOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwOwotCXVuc2lnbmVkIGxvbmcgcyA9IHJjdV9zZXFfc25hcCgmYW1wO3JjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzOwogCiYjNDM7CS8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHNuYXBzaG90dGluZyB0aGUgc2VxdWVuY2UuICovCiYjNDM7CXJjdV9kZWZlcl9mbHVzaCgpOwomIzQzOwomIzQzOwlzID0gcmN1X3NlcV9zbmFwKCZhbXA7cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpOwogCXJjdV9iYXJyaWVyX3RyYWNlKFRQUygmIzM0O0JlZ2luJiMzNDspLCAtMSwgcyk7CiAKIAkvKiBUYWtlIG11dGV4IHRvIHNlcmlhbGl6ZSBjb25jdXJyZW50IHJjdV9iYXJyaWVyKCkgcmVxdWVzdHMuICovCkBAIC00MjMxLDYgJiM0Mzs0MzI5LDEwIEBAIHJjdV9ib290X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSkKIAlyZHAtJmd0O3JjdV9vbmxfZ3Bfc3RhdGUgPSBSQ1VfR1BfQ0xFQU5FRDsKIAlyZHAtJmd0O2xhc3Rfc2NoZWRfY2xvY2sgPSBqaWZmaWVzOwogCXJkcC0mZ3Q7Y3B1ID0gY3B1OwomIzQzOwlpbml0X2xsaXN0X2hlYWQoJmFtcDtyZHAtJmd0O2RlZmVyX2hlYWQpOwomIzQzOwlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtyZHAtJmd0O2RlZmVyX2xvY2spOwomIzQzOwkvKiBIYXJkIGlycV93b3JrIHNvIHRoZSByZS1pc3N1ZSBydW5zIHByb21wdGx5LiAqLwomIzQzOwlyZHAtJmd0O2RlZmVyX3dvcmsgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTsKIAlyY3VfYm9vdF9pbml0X25vY2JfcGVyY3B1X2RhdGEocmRwKTsKIH0KIApAQCAtNDUyOCw2ICYjNDM7NDYzMCwxNiBAQCB2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSkKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKCZhbXA7cmN1X2RhdGEsIGNwdSk7CiAJYm9vbCBuZWVkd2FrZTsKIAomIzQzOwkvKgomIzQzOwkgKiBDYWxsYmFja3MgdGhlIG91dGdvaW5nIENQVSBkZWZlcnJlZCBsYXRlIGluIHRoZSBvZmZsaW5lIHBhdGggKHBhc3QgdGhlCiYjNDM7CSAqIHBvaW50IGl0cyBpcnFfd29yayBjYW4gcnVuKSBzaXQgb24gLSZndDtkZWZlcl9oZWFkLCB3aGljaCB0aGUgLSZndDtjYmxpc3QKJiM0MzsJICogbWlncmF0aW9uIGJlbG93IGRvZXMgbm90IGNvdmVyLiAgRHJhaW4gdGhlbSBoZXJlLCBiZWZvcmUgdGhlIGVhcmx5CiYjNDM7CSAqIHJldHVybnM7IHRoZSByZS1pc3N1ZSBsYW5kcyBvbiB0aGlzIENQVS4KJiM0MzsJICovCiYjNDM7CXJjdV9kZWZlcl9kcmFpbigmYW1wO3JkcC0mZ3Q7ZGVmZXJfd29yayk7CiYjNDM7CS8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcy4gKi8KJiM0MzsJc3JjdV9vZmZsaW5lX2RyYWluKGNwdSk7CiYjNDM7CiAJaWYgKHJjdV9yZHBfaXNfb2ZmbG9hZGVkKHJkcCkpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmggYi9rZXJuZWwvcmN1L3RyZWUuaAppbmRleCBlZWRmYTQzMDU5ZTgwLi4zYThlMTcxMzZjNWE3IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3RyZWUuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3RyZWUuaApAQCAtMjI5LDYgJiM0MzsyMjksMTEgQEAgc3RydWN0IHJjdV9kYXRhIHsKIAlzdHJ1Y3QgcmN1X2hlYWQgYmFycmllcl9oZWFkOwogCWludCBleHBfd2F0Y2hpbmdfc25hcDsJCS8qIERvdWJsZS1jaGVjayBuZWVkIGZvciBJUEkuICovCiAKJiM0MzsJLyogRGVmZXJyYWwgb2YgYW4gTk1JL3JlZW50cmFudCBjYWxsX3JjdSgpOyBzZWUgX19jYWxsX3JjdV9jb21tb24oKS4gKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfaGVhZDsKJiM0MzsJc3RydWN0IGlycV93b3JrIGRlZmVyX3dvcms7CiYjNDM7CXJhd19zcGlubG9ja190IGRlZmVyX2xvY2s7CiYjNDM7CiAJLyogNSkgQ2FsbGJhY2sgb2ZmbG9hZGluZy4gKi8KICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVCiAJc3RydWN0IHN3YWl0X3F1ZXVlX2hlYWQgbm9jYl9jYl93cTsgLyogRm9yIG5vY2Iga3RocmVhZHMgdG8gc2xlZXAgb24uICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mNmVjZDkzYmUzMGY0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYwpAQCAtMCwwICYjNDM7MSw1OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogRXhlcmNpc2UgcmUtZW50cnkgaW50byBjYWxsX3NyY3UoKSBmcm9tIEJQRjsgc2VlIHByb2dzL3JjdV9yZWVudHJ5LmMuICovCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtzY2hlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtyY3VfcmVlbnRyeS5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgc3lzX3BpZGZkX29wZW4ocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzY2FsbChfX05SX3BpZGZkX29wZW4sIHBpZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfcmN1X3JlZW50cnkodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByY3VfcmVlbnRyeSAqc2tlbDsKJiM0MzsJaW50IGVyciwgcGlkZmQgPSAtMSwgbWFwX2ZkOwomIzQzOwlfX3U2NCB2YWwgPSAxOwomIzQzOwljcHVfc2V0X3Qgc2V0OwomIzQzOwomIzQzOwlza2VsID0gcmN1X3JlZW50cnlfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSByY3VfcmVlbnRyeV9fYXR0YWNoKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2tlbF9hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogS2VlcCB0aGUgcmUtZW50cnkgb24gYSBzaW5nbGUgQ1BVLiAqLwomIzQzOwlDUFVfWkVSTygmYW1wO3NldCk7CiYjNDM7CUNQVV9TRVQoMCwgJmFtcDtzZXQpOwomIzQzOwlpZiAoc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksICZhbXA7c2V0KSkKJiM0MzsJCXBlcnJvcigmIzM0O3NjaGVkX3NldGFmZmluaXR5JiMzNDspOwomIzQzOwomIzQzOwlwaWRmZCA9IHN5c19waWRmZF9vcGVuKGdldHBpZCgpLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocGlkZmQsIDAsICYjMzQ7cGlkZmRfb3BlbiYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwltYXBfZmQgPSBicGZfbWFwX19mZChza2VsLSZndDttYXBzLnRhc2tfc3RnKTsKJiM0MzsJZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsICZhbXA7cGlkZmQsICZhbXA7dmFsLCBCUEZfTk9FWElTVCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtib290X2NyZWF0ZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7CiYjNDM7CWVyciA9IGJwZl9tYXBfZGVsZXRlX2VsZW0obWFwX2ZkLCAmYW1wO3BpZGZkKTsKJiM0MzsJQVNTRVJUX09LKGVyciwgJiMzNDtib290X2RlbGV0ZSYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogT25seSBUcmVlIFNSQ1UgZW5xdWV1ZXMgdmlhIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpOyBza2lwIGVsc2V3aGVyZS4gKi8KJiM0MzsJaWYgKCFza2VsLSZndDtic3MtJmd0O2hpdHMpIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3JlZW50ZXJlZCwgMSwgJiMzNDtyZWVudHJ5X2RlZmVycmVkJiMzNDspOwomIzQzO291dDoKJiM0MzsJaWYgKHBpZGZkICZndDs9IDApCiYjNDM7CQljbG9zZShwaWRmZCk7CiYjNDM7CXJjdV9yZWVudHJ5X19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZDkyYTkyN2ZmNTFjMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jCkBAIC0wLDAgJiM0MzsxLDQ1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIFJlLWVudGVyIGNhbGxfc3JjdSgpIGZyb20gYSBCUEYgcHJvZ3JhbS4gIGZlbnRyeSBvbiByY3Vfc2VnY2JsaXN0X2VucXVldWUoKQomIzQzOyAqIGZpcmVzIGluc2lkZSBjYWxsX3NyY3UoKSYjMzk7cyBlbnF1ZXVlIChyZWFjaGVkIGZyb20gc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKQomIzQzOyAqIHdpdGggdGhlIHNyY3VfZGF0YSAtJmd0O2xvY2sgaGVsZCk7IHRoZSBoYW5kbGVyIHRoZW4gY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKQomIzQzOyAqIC0tIGl0c2VsZiBjYWxsX3NyY3UoKSBvbiByY3VfdGFza3NfdHJhY2Vfc3JjdV9zdHJ1Y3QgLS0gcmUtZW50ZXJpbmcgdGhlIHNhbWUKJiM0MzsgKiBzcmN1X2RhdGEgb24gdGhlIHNhbWUgQ1BVLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1RBU0tfU1RPUkFHRSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBfX3U2NCk7CiYjNDM7fSB0YXNrX3N0ZyBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztpbnQgdGFyZ2V0X3BpZDsKJiM0MztpbnQgaGl0czsKJiM0MztpbnQgcmVlbnRlcmVkOwomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9yY3Vfc2VnY2JsaXN0X2VucXVldWUmIzM0OykKJiM0MztpbnQgQlBGX1BST0cocmVlbnRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyOwomIzQzOwomIzQzOwlpZiAocmVlbnRlcmVkIHx8ICF0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWN1ciA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlpZiAoIWN1ciB8fCBjdXItJmd0O3BpZCAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFJlLWVudGVyIHZpYSBhIHRhc2stc3RvcmFnZSBkZWxldGUsIHdoaWNoIGNhbGxzIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkuICovCiYjNDM7CV9fc3luY19mZXRjaF9hbmRfYWRkKCZhbXA7aGl0cywgMSk7CiYjNDM7CWJwZl90YXNrX3N0b3JhZ2VfZ2V0KCZhbXA7dGFza19zdGcsIGN1ciwgMCwgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTsKJiM0MzsJYnBmX3Rhc2tfc3RvcmFnZV9kZWxldGUoJmFtcDt0YXNrX3N0ZywgY3VyKTsKJiM0MzsKJiM0MzsJcmVlbnRlcmVkID0gMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgxOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDkzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBSQ1UvU1JDVSBEZWZlcnJhbCBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgaW50cm9kdWNlcyBkZWZlcnJlZCBjYWxsYmFja3MgaW4gUkNVL1NSQ1UuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHllcywgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgdG91Y2hpbmcgZnVuZGFtZW50YWwga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgUkNVIGFuZCBTUkNVLCBhbmQgdGhhdCYjMzk7cyBhbHdheXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFdlIGhhdmUgYSBzb2xpZCBzdGFydGluZyBwb2ludCB0b28sIHNpbmNlIHRoZXJlIGFyZSBuZXcgZnVuY3Rpb25zIGJlaW5nIGFkZGVkOiBgc3JjdV9kZWZlcl9kcmFpbmAsIGByY3VfZGVmZXJfZHJhaW5gLCBgc3JjdV9vZmZsaW5lX2RyYWluYCwgYGNhbGxfcmN1X2RlZmVyYCwgYHJjdV9kZWZlcl9mbHVzaGAsIGFuZCBgc3JjdV9kZWZlcl9mbHVzaGAuIFBsdXMsIHNldmVyYWwgZXhpc3RpbmcgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCBsaWtlIGBjYWxsX3JjdWAsIGBjYWxsX3NyY3VgLCBgcmN1X2JhcnJpZXJgLCBhbmQgYHNyY3VfYmFycmllcmAuCgpOb3csIGJlZm9yZSBJIGNhbiByZWFsbHkgZ2V0IGludG8gZnV6emluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBjb21waWxlZC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBDT05GSUdfUkNVX0RFRkVSYCwgYnV0IGl0JiMzOTtzIGEgYGRlZl9ib29sYC4gSXQgYXBwZWFycyBpdCB3aWxsIGJlIGVuYWJsZWQgYXV0b21hdGljYWxseSBpZiBgSEFWRV9OTUlgLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBvciBgVFJBQ0VQT0lOVFNgIGFyZSBlbmFibGVkLiBTbywgdG8gZW5zdXJlIGl0JiMzOTtzIGVuYWJsZWQgZHVyaW5nIGZ1enppbmcsIEkgc2hvdWxkIHByb2JhYmx5IGVuYWJsZSBhdCBsZWFzdCBvbmUgb2YgdGhlc2UgY29uZmlnIG9wdGlvbnMuIFRoZSBLY29uZmlnIGRvY3VtZW50YXRpb24gc2F5cyB0byBsaXN0IHRoZSBmbGFncyB0aGF0IG5lZWQgdG8gYmUgKmV4cGxpY2l0bHkqIGVuYWJsZWQsIHNvIEkgZG9uJiMzOTt0IHRoaW5rIEkgY2FuIGV4cGxpY2l0bHkgc2V0IGBSQ1VfREVGRVJgIGl0c2VsZjsgYnV0LCBzaW5jZSBpdCBoYXMgbm8gcHJvbXB0LCBJIGNhbiYjMzk7dCBzZXQgaXQgZGlyZWN0bHkuIFNvLCBJIHdpbGwgbmVlZCB0byBlbmFibGUgZWl0aGVyIGBLUFJPQkVTYCBvciBgVFJBQ0VQT0lOVFNgIG9yIGBGVU5DVElPTl9UUkFDRVJgIHRvIGVuc3VyZSBpdCBpcyBzZWxlY3RlZC4gQWxzbywgc2luY2UgYHJjdXRvcnR1cmUuY2AgdXNlcyBgQ09ORklHX1BFUkZfRVZFTlRTYCwgSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGVuYWJsZSB0aGF0LiBBbmQgb2J2aW91c2x5IGBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVGAgdG8gZW5hYmxlIHRoZSBtb2R1bGUuCgpJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSBzaG91bGQgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uOiB0aGUgbW9zdCBpbXBvcnRhbnQgYXJlIHRob3NlIGRpcmVjdGx5IGV4cG9zZWQgYXMgQVBJcyBvciBtb2RpZmllZCBieSB0aGUgcGF0Y2guIFNvLCBJJiMzOTttIHRoaW5raW5nOgoKKiAgIGBzcmN1X2RlZmVyX2RyYWluYCAoYW5kIEkgc2hvdWxkIGNoZWNrIGl0cyB1c2FnZSBzaW5jZSBpdCBoYXMgZHVwbGljYXRlIGRlZmluaXRpb25zIGJldHdlZW4gYHNyY3V0aW55LmNgIGFuZCBgc3JjdXRyZWUuY2ApCiogICBgcmN1X2RlZmVyX2RyYWluYCAoY2hlY2sgaWYgaXQmIzM5O3Mgc3RhdGljKQoqICAgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgKHNlZW1zIGxpa2UgYW4gaW50ZXJlc3Rpbmcgb25lKQoqICAgYGNhbGxfc3JjdWAgKGRlZmluaXRlbHkgYW4gQVBJIGVudHJ5KQoqICAgYGNhbGxfcmN1YCAoYWdhaW4sIEFQSSkKKiAgIGBzcmN1X2JhcnJpZXJgIChhbm90aGVyIEFQSSBlbnRyeSkKKiAgIGByY3VfYmFycmllcmAgKGFuZCBhbm90aGVyKQoKU28sIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgYGtlcm5lbC9yY3Uvc3JjdXRyZWUuY2AgYW5kIGBrZXJuZWwvcmN1L3RyZWUuY2AgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuIE9rYXksIG5vdyBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIHN0YXJ0IGlkZW50aWZ5aW5nIHBvdGVudGlhbCBmdXp6aW5nIGVudHJ5IHBvaW50cyBhbmQgdGVzdCBjYXNlcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkuKnNyY3VfZGVmZXJfZHJhaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcmN1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcmN1L3NyY3V0aW55LmM9MjQyPXN0YXRpYyBib29sIHNyY3VfZGVmZXJfZHJhaW5pbmc7XG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMjQzLVxua2VybmVsL3JjdS9zcmN1dGlueS5jOjI0NDp2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNDUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlNSQ1UgRHJhaW4gSW1wbGVtZW50YXRpb24gLSBBIFF1aWNrIE1lbnRhbCBOYXZpZ2F0aW9uKioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIFNSQ1UgZHJhaW4gbWVjaGFuaXNtLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhlIGRlZmVycmVkIGFjdGlvbiB0byBkcmFpbiBTUkNVIGlzIGhhbmRsZWQuIE15IG1pbmQgaW1tZWRpYXRlbHkgd2VudCB0byB0aGUgYHNyY3V0cmVlLmNgIGZpbGUsIGFzIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gQW5kIHllcywgdGhlcmUgaXQgaXMhIEkmIzM5O20gcHJldHR5IHN1cmUgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBkZWZlcnJpbmcgdGhlIHdvcmsgYW5kIHRoZSBmaW5hbCBkcmFpbmluZyBhZnRlciB0aGF0IHdvcmsgaXMgZG9uZSBpcyBgc3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KWAuIEkmIzM5O20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBpcnFfd29ya2AgaW4gbXkgaGVhZCwgYXMgd2VsbCBhcyB0aGUgY2FsbCBjaGFpbiB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBldmVudHVhbGx5IGNhbGxpbmcgdGhhdCBkZWZlciBmdW5jdGlvbiwgbGlrZWx5IGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9zcmN1dHJlZS5jPTgxPXN0YXRpYyB2b2lkIHNyY3VfZGVsYXlfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xua2VybmVsL3JjdS9zcmN1dHJlZS5jLTgyLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjgzOnN0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtODQtXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE0ODU9c3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTIzLSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE1MjQ6c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1MjUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDE5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIGNvZGUsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqU1JDVVRyZWUgdnMuIFNSQ1VUaW55OiBTdGF0aWMgdnMuIE5vbi1TdGF0aWMgRnVuY3Rpb24gVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBhIGRpc2NyZXBhbmN5IGhlcmUgdGhhdCBuZWVkcyBjbGFyaWZpY2F0aW9uLiBgc3JjdV9kZWZlcl9kcmFpbmAsIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBkZWZlcnJlZCBkcmFpbiBwcm9jZXNzIGZvciBTUkNVLCBpcyAqc3RhdGljKiB3aXRoaW4gdGhlIGBzcmN1dHJlZS5jYCBmaWxlLiBUaGlzIGlzIGV4cGVjdGVkLCBtZWFuaW5nIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSBhbmQgY2FsbGFibGUgd2l0aGluIHRoYXQgY29tcGlsYXRpb24gdW5pdC4gSG93ZXZlciwgSSYjMzk7bSBmaW5kaW5nIHRoYXQgc2FtZSBmdW5jdGlvbiBkZWNsYXJlZCBhcyAqbm9uLXN0YXRpYyogaW4gYHNyY3V0aW55LmNgLiBUaGF0JiMzOTtzIHVudXN1YWwsIGFuZCBpdOKAmXMgcmFpc2luZyBhIGZsYWcuIFRoaXMgaW1wbGllcyBzb21lIHNvcnQgb2YgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgcGVyaGFwcyBhIGRlc2lnbiBwYXR0ZXJuIHRoYXQgSSBkb24mIzM5O3QgZnVsbHkgdW5kZXJzdGFuZCB5ZXQsIGJ1dCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGxvb2sgaW50byBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aHkgdGhhdCB3b3VsZCBiZSB0aGUgY2FzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRpZmZlcmVudCBzY29waW5nIGFuZCBpdHMgaW1wYWN0IG9uIGNyb3NzLWZpbGUgZnVuY3Rpb24gY2FsbHMgb3IgbGlua2FnZS4KCkZ1cnRoZXJtb3JlLCBgc3JjdV9vZmZsaW5lX2RyYWluYCBpcyAqbm9uLXN0YXRpYyogaW4gYHNyY3V0cmVlLmNgLiBUaGlzIG1ha2VzIHNlbnNlLCBhcyBpdOKAmXMgbGlrZWx5IGludGVuZGVkIHRvIGJlIHBhcnQgb2YgdGhlIEFQSSBvZmZlcmVkIGJ5IHRoZSBgc3JjdXRyZWVgIG1vZHVsZS4KSSBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZXNlIGRpZmZlcmVudCB2aXNpYmlsaXR5IGxldmVscyBhcmUgdXNlZCBhbmQgd2hhdCB0aGUgcHJhY3RpY2FsIGVmZmVjdHMgYXJlLgpJIHdpbGwgaGF2ZSB0byBjaGVjayBob3cgdGhlIGRpZmZlcmVudCBjb21wb25lbnRzIGludGVyYWN0IHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBpbnRlcnByZXRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBzcmN1X29mZmxpbmVfZHJhaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcmN1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcmN1L3JjdS5oPTU4MT1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNTg5LS8qIERyYWluIGFuIG91dGdvaW5nIENQVSYjMzk7cyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi9cbmtlcm5lbC9yY3UvcmN1Lmg6NTkwOnZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xua2VybmVsL3JjdS9yY3UuaC01OTEtXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE1MjQ9c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTUyLSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE1NTM6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSlcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTU0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYxOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBSQ1UgRGVmZXJyYWwgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBSQ1UgZGVmZXJyYWwgaW1wbGVtZW50YXRpb24uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIG5vdGljaW5nIGlzIHRoZSBtb2RpZmljYXRpb24gb2YgYHJjdV9iYXJyaWVyYCwgYHNyY3VfYmFycmllcmAsIGBjYWxsX3JjdWAsIGFuZCBgY2FsbF9zcmN1YC4gVGhvc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyB0b3VjaGVkLiBJJiMzOTttIGFsc28gc2VlaW5nIGNoYW5nZXMgaW4gYHJjdXRvcnR1cmUuY2AsIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0ZXN0aW5nIGlzIGluIHBsYWNlLgoKTGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgY2FsbF9yY3VgCiogICBgY2FsbF9zcmN1YAoqICAgYHJjdV9iYXJyaWVyYAoqICAgYHNyY3VfYmFycmllcmAKKiAgIGBzcmN1X29mZmxpbmVfZHJhaW5gCgpBbmQsIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSBlbmFibGVkOgoKKiAgIGBQRVJGX0VWRU5UU2AKKiAgIGBLUFJPQkVTYAoqICAgYFRSQUNFUE9JTlRTYAoqICAgYFJDVV9UT1JUVVJFX1RFU1RgIChhbHRob3VnaCB0aGlzIGlzIGZvciB0ZXN0aW5nLCBpdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZCkKCldhaXQsIGEgY3J1Y2lhbCBwb2ludCEgYFJDVV9ERUZFUmAgaXMgdGllZCB0byBgSEFWRV9OTUlgLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYC4gU28sIGVuc3VyaW5nIGBLUFJPQkVTYCBhbmQgYFRSQUNFUE9JTlRTYCBhcmUgZW5hYmxlZCBpbXBsaWNpdGx5IGhhbmRsZXMgdGhhdC4gQW5kLCBgUEVSRl9FVkVOVFNgIGlzIG5lZWRlZCBmb3IgdGhlIE5NSSB0ZXN0aW5nIHdpdGhpbiBgcmN1dG9ydHVyZWAuCgpOb3csIGFib3V0IGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgLiBUaGUgcHJvbXB0ICpkb2VzKiB3YXJuIGFnYWluc3QgZm9jdXNpbmcgb24gZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucywgYW5kIHRoZXNlIGFyZSBFWFRSRU1FTFkgaG90LXBhdGghIEhvd2V2ZXIsIHRoZSBwYXRjaCAqc3BlY2lmaWNhbGx5KiBtb2RpZmllcyB0aGVtIHRvIGhhbmRsZSBkZWZlcnJhbCB3aGVuIGBzaG91bGRfcmN1X2RlZmVyKClgIGlzIHRydWUgKHdoaWNoIGlzIHdoZW4gYGlycXNfZGlzYWJsZWQoKWAgYW5kIGByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFYCkuIFNvLCB3aGlsZSB0aGV5JiMzOTtyZSBjb3JlLCBkaXJlY3QgZnV6emluZyBtaWdodCBza2V3IHJlc3VsdHMuIE1heWJlLCBJIHNob3VsZCBwcmlvcml0aXplIGByY3VfYmFycmllcmAsIGBzcmN1X2JhcnJpZXJgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgaW5zdGVhZD8gVGhleSBhcmUgbm90IGhvdC1wYXRoLiBgc3JjdV9vZmZsaW5lX2RyYWluYCBpcyBjYWxsZWQgZHVyaW5nIENQVSBob3RwbHVnIHdoaWNoIGlzbiYjMzk7dCBob3QtcGF0aCBlaXRoZXIuCgpUaW1lIHRvIGxvb2sgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGFyZWEuLi4gbGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgdGhlcmUgbWlnaHQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIC4qX2RyYWluJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9yY3UuaD01ODE9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZClcbi0tXG5rZXJuZWwvcmN1L3JjdS5oLTU4OS0vKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUmIzM5O3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXG5rZXJuZWwvcmN1L3JjdS5oOjU5MDp2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcbmtlcm5lbC9yY3UvcmN1LmgtNTkxLVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0yNDI9c3RhdGljIGJvb2wgc3JjdV9kZWZlcl9kcmFpbmluZztcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNDMtXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MjQ0OnZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTI0NS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE1MjQ9c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTUyLSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE1NTM6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSlcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTU0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWwgaW4gU1JDVSBhbmQgUkNVKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgc3JjdV9vZmZsaW5lX2RyYWluYCBhbmQgYHNyY3VfZGVmZXJfZHJhaW5gLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGlzICYjMzk7dGlueSYjMzk7IGNvbnRleHQuIFRoZSBmYWN0IHRoYXQgYHNyY3VfZGVmZXJfZHJhaW5gIGlzIGV4cG9ydGVkIGZyb20gdGhlICYjMzk7dGlueSYjMzk7IG1vZHVsZSBwcmVzZW50cyBhbiBpbnRlcmVzdGluZyBzdXJmYWNlIGZvciBmdXp6aW5nLCBkb2VzbiYjMzk7dCBpdD8gSG93ZXZlciwgSSYjMzk7bSBub3RpbmcgdGhhdCBpdCYjMzk7cyBhbiBgaXJxX3dvcmtgIGNhbGxiYWNrLCBzbyBkaXJlY3QgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBpcyB1bmxpa2VseS4gVGhhdCBsaW1pdHMgaW1tZWRpYXRlIGF2ZW51ZXMuCgpNeSBleHBlcnQgbWluZCBzaGlmdHMgZ2VhcnM7IEkmIzM5O20gdGhpbmtpbmcgdGhhdCBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYCBhcmUgYWx3YXlzIGdvb2QgdGFyZ2V0cyB0byBleHBsb3JlLiBUaGV5JiMzOTtyZSBmdW5kYW1lbnRhbCBhbmQgcmVwcmVzZW50IGNyaXRpY2FsIHN5bmNocm9uaXphdGlvbiBwb2ludHMuIFRoZXkmIzM5O3JlIHdlbGwta25vd24gYnV0IHBvdGVudGlhbGx5IG9mZmVyIHZ1bG5lcmFiaWxpdGllcyBpbiB1bnVzdWFsIHNjZW5hcmlvcy4KCk5vdywgdGhhdCBnZXRzIG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgPyBJdCYjMzk7cyBiZWVuIG1vZGlmaWVkIHRvIGNhbGwgYm90aCBgcmN1X2RlZmVyX2RyYWluYCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAuIFNpbmNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgbW9yZSBpbnRlcmVzdGluZyB3aXRoaW4gYSAmIzM0O3RpbnkmIzM0OyBjb250ZXh0LCBJIHdvdWxkIG5lZWQgdG8gYW5hbHl6ZSAqaG93KiBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgYW5kIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29tYmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcmN1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcmN1L3RyZWUuYz00NTcwPXZvaWQgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQodm9pZClcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00NjI0LSAqL1xua2VybmVsL3JjdS90cmVlLmM6NDYyNTp2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MjYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQzMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDYWxsYmFjayBNaWdyYXRpb24gUG9pbnRzKioKCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBzaXR1YXRpb24sIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBzZWVtcyBsaWtlIGEgc3Ryb25nIGNvbnRlbmRlciBhcyBhIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIGZpcnN0IGd1ZXNzIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoYXQsIEkgc2hvdWxkIGRvIGEgcXVpY2sgY2hlY2staW4gd2l0aCBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYC4gVGhvc2UgYXJlIG9mdGVuIGludm9sdmVkIGluIHNpbWlsYXIgc2NlbmFyaW9zLCBhbmQgaXQmIzM5O3MgYWx3YXlzIHNtYXJ0IHRvIGhhdmUgYSB3aWRlciB2aWV3IG9mIHRoZSBjYWxsIHNpdGVzIGJlZm9yZSBkaXZpbmcgaW50byBvbmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgb2J2aW91cywgcmVsYXRlZCBwaWVjZXMgdGhhdCBtaWdodCBvZmZlciBhIG1vcmUgY29tcGxldGUgcGljdHVyZSwgb3IgZXZlbiBhIHNpbXBsZXIgcGF0aCB0byBhIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCByY3VfYmFycmllciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvdGFza3MuaD0xMjIyPUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV90YXNrcyk7XG4tLVxua2VybmVsL3JjdS90YXNrcy5oLTEyMjktICovXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTIzMDp2b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIzMS17XG4tLVxua2VybmVsL3JjdS90aW55LmM9MTE2PXN0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuLS1cbmtlcm5lbC9yY3UvdGlueS5jLTEyMi1cbmtlcm5lbC9yY3UvdGlueS5jOjEyMzp2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG5rZXJuZWwvcmN1L3RpbnkuYy0xMjQte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTM5NjE9c3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfaGFuZGxlcih2b2lkICpjcHVfaW4pXG4tLVxua2VybmVsL3JjdS90cmVlLmMtMzk4Ni0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjM5ODc6dm9pZCByY3VfYmFycmllcih2b2lkKVxua2VybmVsL3JjdS90cmVlLmMtMzk4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTIzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEJhcnJpZXIgSW1wbGVtZW50YXRpb25zKioKClJpZ2h0LCBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYOKAlHRoZXkmIzM5O3JlIGJvdGggY3JpdGljYWwgdG9vbHMsIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBhZ2Fpbi4gTGV0JiMzOTtzIGRpZyBpbnRvIGBzcmN1X2JhcnJpZXJgIHNwZWNpZmljYWxseS4gV2hhdCBhcmUgdGhlIGtleSBjb25zaWRlcmF0aW9ucyBhbmQgZWRnZSBjYXNlcyBpbiBpdHMgaW1wbGVtZW50YXRpb24/IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvciwgZXNwZWNpYWxseSBpbiBjb21wbGV4IGNvbmN1cnJlbnQgc2NlbmFyaW9zLiBBcmUgdGhlcmUgc3VidGxlIGRpZmZlcmVuY2VzIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBkaWZmZXJlbnQgbG9jayBoaWVyYXJjaGllcyBvciBtZW1vcnkgbW9kZWxzPyBJJiMzOTttIGdvaW5nIHRvIHJ1biB0aHJvdWdoIHNvbWUgc2NlbmFyaW9zIGFuZCBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYmVmb3JlIG1vdmluZyBvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGRlc2lnbiBpcyBzb3VuZCBhbmQgdGhhdCBJIGNhbiBqdXN0aWZ5IGl0cyB1c2FnZSBmb3Igd2hhdGV2ZXIgSSYjMzk7bSB3b3JraW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBzcmN1X2JhcnJpZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcmN1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcmN1L3NyY3V0aW55LmM9MzA3PUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0zMDktLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzEwOnZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMxMS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE3OTI9c3RhdGljIHZvaWQgc3JjdV9iYXJyaWVyX29uZV9jcHUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCBzcmN1X2RhdGEgKnNkcClcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTgwOS0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxODEwOnZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4MTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM4NQoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA4NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgUkNVL1NSQ1UgRGVmZXJyZWQgQ2FsbGJhY2tzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgZGVmZXJyZWQgUkNVIGFuZCBTUkNVIGNhbGxiYWNrcy4gSXQmIzM5O3MgZGVhbGluZyB3aXRoIHJlLWVudHJhbnQgY2FsbHMgZnJvbSBOTUkgY29udGV4dHMgYW5kIEJQRiwgd2hpY2ggaXMgY3JpdGljYWwsIHNvIHdlIG5lZWQgYSBnb29kIGZ1enppbmcgc3RyYXRlZ3kuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGVmaW5lIHNvbWUgZm9jdXMgc3ltYm9scy4gSSB0aGluayB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgYXJlOgoKKiAgIGByY3VfYmFycmllcmAKKiAgIGBzcmN1X2JhcnJpZXJgCiogICBgc3JjdV9vZmZsaW5lX2RyYWluYAoqICAgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgCgpXYWl0LCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgaXMgY2FsbGVkIGR1cmluZyBDUFUgb2ZmbGluZS4uLiBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIG90aGVyIGVudHJ5IHBvaW50cyBidXQgaXQgaXMgZGVmaW5pdGVseSBpbnRlcmVzdGluZyB0byBjb25zaWRlci4KClRoZSBwYXRjaCBhbHNvIGhhcyBhIEJQRiBzZWxmdGVzdC4gV2UgcHJvYmFibHkgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmaWNhbGx5IGluY2x1ZGUgYGJwZl90YXNrX3N0b3JhZ2VfZGVsZXRlYCBiZWNhdXNlIHRoYXQgaXMganVzdCB0aGUgbWVjaGFuaXNtIHRvIHRyaWdnZXIgdGhpbmdzLgoKTm93LCBmb3Iga2VybmVsIGNvbmZpZ3MsIGhlcmUmIzM5O3Mgd2hhdCBzZWVtcyBpbXBvcnRhbnQgdG8gZW5hYmxlOgoKKiAgIGBLUFJPQkVTYCAtIEVzc2VudGlhbCBmb3IgdHJpZ2dlcmluZyBkZWZlcnJlZCBjYWxscyBmcm9tIHByb2JlIGNvbnRleHRzLgoqICAgYFRSQUNFUE9JTlRTYCAtIFNpbWlsYXJseSBjcnVjaWFsIGZvciB0cmFjaW5nLgoqICAgYFBFUkZfRVZFTlRTYCAtIFRoaXMgYWxzbyBvcGVucyB1cCB0aGUgb3Bwb3J0dW5pdHkgdG8gcmVhY2ggZGVmZXJyZWQgY2FsbHMgZnJvbSBhbiBOTUkgY29udGV4dC4KKiAgIGBSQ1VfVE9SVFVSRV9URVNUYCAtIE9wdGlvbmFsLCBidXQgYSBnb29kIGFkZGl0aW9uIGZvciBtb3JlIGNvbXByZWhlbnNpdmUgdGVzdGluZyBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHRyaWdnZXIgbW9yZSBjb2RlIHBhdGhzLgoqICAgYEJQRl9TWVNDQUxMYCAtIFNpbmNlIHRoZSBzZWxmdGVzdCB1c2VzIEJQRiwgaXQmIzM5O3MgYSBnb29kIGlkZWEgdG8gZW5hYmxlIGl0IHRvIHRyeSB0byB0cmlnZ2VyIGl0IGZyb20gdGhlIEJQRiBzaWRlLCBhbHRob3VnaCBub3QgZXNzZW50aWFsLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFJDVV9ERUZFUmAgaXMgZW5hYmxlZC4gSXQgbG9va3MgbGlrZSBpdCBpcyBzZWxlY3RlZCBieSBgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNgLiBTbywgc2luY2Ugd2UgYXJlIGVuYWJsaW5nIGBLUFJPQkVTYCBhbmQgYFRSQUNFUE9JTlRTYCwgYFJDVV9ERUZFUmAgc2hvdWxkIGFscmVhZHkgYmUgY292ZXJlZC4KCkxldCBtZSB0aGluayBiYWNrIG9uIHRoaXMuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIFJDVS9TUkNVIGxvZ2ljOiBgY2FsbF9yY3VgLCBgY2FsbF9zcmN1YCwgYW5kIHRoZSBiYXJyaWVyIGZ1bmN0aW9ucywgYnV0IHNwZWNpZmljYWxseSB0aGUgZGVmZXJyYWwgcGFydC4gVGhpcyBkZWZlcnJhbCBpcyBoaXQgcHJpbWFyaWx5IGZyb20gTk1JIGNvbnRleHRzIGFuZCB0aHJvdWdoIEJQRi4KCkhlcmUmIzM5O3MgYSByZWZpbmVkIGxpc3Qgb2YgdGhpbmdzIHRvIGNvbnNpZGVyIGZvY3VzaW5nIG9uOgoKRm9jdXMgc3ltYm9sczoKCiogICBgcmN1X2JhcnJpZXJgCiogICBgc3JjdV9iYXJyaWVyYAoqICAgYHNyY3Vfb2ZmbGluZV9kcmFpbmAKKiAgIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYAoKQ29uZmlnczoKCiogICBgS1BST0JFU2AKKiAgIGBUUkFDRVBPSU5UU2AKKiAgIGBQRVJGX0VWRU5UU2AKKiAgIGBCUEZfU1lTQ0FMTGAKCk9rYXksIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIHJlYWNoYWJpbGl0eS4gYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGlzIGNhbGxlZCBieSBDUFUgaG90cGx1ZyB3aGljaCBpcyBnb29kISBBbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgaXMgYWxzbyBjYWxsZWQgYnkgaXQuIGByY3VfYmFycmllcmAgYW5kIGBzcmN1X2JhcnJpZXJgIGFyZSB2ZXJ5IHdpZGVseSB1c2VkLgoKVGhlcmUgaXMgYHNyY3VfZGVmZXJfZHJhaW5gIGluIHRoZSBgc3JjdXRpbnkuY2AgY29kZSwgYnV0IHRoYXQgaXMgYWxzbyBzdGF0aWMgaW4gdGhlIGBzcmN1dHJlZS5jYCBjb2RlLiBJdCBtaWdodCBub3QgYmUgYXZhaWxhYmxlIHdpdGhvdXQgYENPTkZJR19USU5ZX1NSQ1VgLCBzbyBJJiMzOTtsbCBleGNsdWRlIGl0LgoKV2FpdC4gQW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gYGNhbGxfcmN1YCBhbmQgYGNhbGxfc3JjdWAgYXJlIHRoZSBtYWluIGZ1bmN0aW9ucyBtb2RpZmllZC4gSSBrbm93IHRoZXkmIzM5O3JlIGhvdC1wYXRoLCBidXQgdGhlIGRlZmVycmFsIGlzIF9pbnNpZGVfIHRoZW0uIERvIEkgbmVlZCB0byBpbmNsdWRlIHRoZW0/IE5vLCB0aGF0JiMzOTtzIG5vdCBuZWVkZWQuIFRoZSBmdXp6ZXIgd2lsbCBoaXQgdGhlbSBhbnl3YXkgYW5kIGl0IGlzIGxpa2VseSB0aGUgZGVmZXJyYWwgY29kZSB3aWxsIGJlIHRyaWdnZXJlZC4gRm9jdXNpbmcgb24gdGhlbSBtaWdodCBzaW1wbHkgaGF2ZSB0aGUgZnV6emVyIHNwZW5kIGFsbCBpdHMgdGltZSBvbiBnZW5lcmljIGNhbGxzLCB3aGVuIHdlIHdhbnQgdG8gdGVzdCB0aGUgZGVmZXJyYWwgbG9naWMuIEFuZCB0aGUgZGVmZXJyYWwgcGFydCBvbmx5IGhhcHBlbnMgd2hlbiBgc2hvdWxkX3JjdV9kZWZlcigpYCBpcyB0cnVlLCB3aGljaCBpcyB3aGVuIGBpcnFzX2Rpc2FibGVkKClgLiBBbHNvLCB0aGUgQlBGIHNlbGZ0ZXN0IHRyaWdnZXJzIGl0IGJ5IGF0dGFjaGluZyBhIEJQRiBwcm9ncmFtIHRvIGByY3Vfc2VnY2JsaXN0X2VucXVldWVgIGFuZCBjYWxsaW5nIGBicGZfdGFza19zdG9yYWdlX2RlbGV0ZWAgZnJvbSBpdC4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50IHdpdGggdGhpcy4gSSB3aWxsIHNldCB0aGUgZnV6emluZyB0YXJnZXRzIGJhc2VkIG9uIHRoaXMgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1BST0JFUyYjMzQ7LAogICAgJiMzNDtUUkFDRVBPSU5UUyYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3NyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X29mZmxpbmVfZHJhaW4mIzM0OywKICAgICYjMzQ7cmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGRlZmVycmVkIFJDVSBhbmQgU1JDVSBjYWxsYmFja3MgdG8gc2FmZWx5IGhhbmRsZSByZS1lbnRyYW50IGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBpbnZvY2F0aW9ucywgc3VjaCBhcyB0aG9zZSBvcmlnaW5hdGluZyBmcm9tIE5NSSBjb250ZXh0cyBvciBCUEYgcHJvZ3JhbXMuIEl0IG1vZGlmaWVzIGNvcmUgUkNVL1NSQ1Ugc3luY2hyb25pemF0aW9uIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyBjYWxsYmFjayBkcmFpbmluZyBtZWNoYW5pc21zLiBUaGlzIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLUFJPQkVTJiMzNDssCiAgICAmIzM0O1RSQUNFUE9JTlRTJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3NyY3Vfb2ZmbGluZV9kcmFpbiYjMzQ7LAogICAgJiMzNDtyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZGVmZXJyZWQgUkNVIGFuZCBTUkNVIGNhbGxiYWNrcyB0byBzYWZlbHkgaGFuZGxlIHJlLWVudHJhbnQgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIGludm9jYXRpb25zLCBzdWNoIGFzIHRob3NlIG9yaWdpbmF0aW5nIGZyb20gTk1JIGNvbnRleHRzIG9yIEJQRiBwcm9ncmFtcy4gSXQgbW9kaWZpZXMgY29yZSBSQ1UvU1JDVSBzeW5jaHJvbml6YXRpb24gbG9naWMgYW5kIGludHJvZHVjZXMgbmV3IGNhbGxiYWNrIGRyYWluaW5nIG1lY2hhbmlzbXMuIFRoaXMgaXMgaGlnaGx5IGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1Nzo0Ny4wMzY3OTA5NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njg2MzIxNjc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLUFJPQkVTXCIsXG4gICAgXCJUUkFDRVBPSU5UU1wiLFxuICAgIFwiUEVSRl9FVkVOVFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmN1X2JhcnJpZXJcIixcbiAgICBcInNyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9vZmZsaW5lX2RyYWluXCIsXG4gICAgXCJyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBkZWZlcnJlZCBSQ1UgYW5kIFNSQ1UgY2FsbGJhY2tzIHRvIHNhZmVseSBoYW5kbGUgcmUtZW50cmFudCBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgaW52b2NhdGlvbnMsIHN1Y2ggYXMgdGhvc2Ugb3JpZ2luYXRpbmcgZnJvbSBOTUkgY29udGV4dHMgb3IgQlBGIHByb2dyYW1zLiBJdCBtb2RpZmllcyBjb3JlIFJDVS9TUkNVIHN5bmNocm9uaXphdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBuZXcgY2FsbGJhY2sgZHJhaW5pbmcgbWVjaGFuaXNtcy4gVGhpcyBpcyBoaWdobHkgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTc6NDcuMDM2Nzk4MjE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg5NDQ3MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjFiYmU2ZjliZGEzMzg3OTlkMmVmYWIwOGMzNWM0ZWU3YTZkMDYyM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjU3OjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxcbmluZGV4IGZiY2YxM2JjMTJkMTUuLjQ3Mjc1ZDE4Mjk2NmMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2RlZmluZSBfTElOVVhfU1JDVV9USU5ZX0hcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YWl0LmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xcbkBAIC0yNiw2ICsyNyw4IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7XFxuIFxcdHN0cnVjdCByY3VfaGVhZCAqKnNyY3VfY2JfdGFpbDtcXHQvKiBQZW5kaW5nIGNhbGxiYWNrczogVGFpbC4gKi9cXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IHNyY3Vfd29yaztcXHQvKiBGb3IgZHJpdmluZyBncmFjZSBwZXJpb2RzLiAqL1xcbiBcXHRzdHJ1Y3QgaXJxX3dvcmsgc3JjdV9pcnFfd29yaztcXHQvKiBEZWZlciBzY2hlZHVsZV93b3JrKCkgdG8gaXJxIHdvcmsuICovXFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcXHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXFxuK1xcdHN0cnVjdCBpcnFfd29yayBkZWZlcl9pdztcXHRcXHQvKiBSZWdpc3RlcnMgZGVmZXJfY2JzIGxhdGVyLiAqL1xcbiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0NcXG4gXFx0c3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7XFxuICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi9cXG5AQCAtMzMsNiArMzYsNyBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xcbiBcXG4gdm9pZCBzcmN1X2RyaXZlX2dwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3ApO1xcbiB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcXG4rdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspO1xcbiBcXG4gI2RlZmluZSBfX1NSQ1VfU1RSVUNUX0lOSVQobmFtZSwgX19pZ25vcmVkLCBfX19pZ25vcmVkLCBfX19faWdub3JlZClcXHRcXFxcXFxuIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTQwLDYgKzQ0LDggQEAgdm9pZCBzcmN1X3RpbnlfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XFxuIFxcdC5zcmN1X2NiX3RhaWwgPSBcXHUwMDI2bmFtZS5zcmN1X2NiX2hlYWQsXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQuc3JjdV93b3JrID0gX19XT1JLX0lOSVRJQUxJWkVSKG5hbWUuc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKSxcXHRcXFxcXFxuIFxcdC5zcmN1X2lycV93b3JrID0geyAuZnVuYyA9IHNyY3VfdGlueV9pcnFfd29yayB9LFxcdFxcdFxcXFxcXG4rXFx0LmRlZmVyX2NicyA9IExMSVNUX0hFQURfSU5JVChuYW1lLmRlZmVyX2NicyksXFx0XFx0XFx0XFxcXFxcbitcXHQuZGVmZXJfaXcgPSB7IC5mdW5jID0gc3JjdV9kZWZlcl9kcmFpbiB9LFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0X19TUkNVX0RFUF9NQVBfSU5JVChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfVxcbiBcXG5AQCAtMTMxLDEwICsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIFxcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4te1xcbi1cXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XFxuLX1cXG4rdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkgeyB9XFxuICNkZWZpbmUgc3JjdV9jaGVja19yZWFkX2ZsYXZvcihzc3AsIHJlYWRfZmxhdm9yKSBkbyB7IH0gd2hpbGUgKDApXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxcbmluZGV4IDc1ZTU0ZTRmOTYzZmEuLjFjZTc1OWZiNzA5NDggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXFxuQEAgLTEzLDYgKzEzLDggQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3Vfbm9kZV90cmVlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBzcmN1X25vZGU7XFxuIHN0cnVjdCBzcmN1X3N0cnVjdDtcXG5AQCAtNDEsNiArNDMsOCBAQCBzdHJ1Y3Qgc3JjdV9kYXRhIHtcXG4gXFx0Ym9vbCBzcmN1X2NibGlzdF9pbnZva2luZztcXHRcXHQvKiBJbnZva2luZyB0aGVzZSBDQnM/ICovXFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0IGRlbGF5X3dvcms7XFx0XFx0LyogRGVsYXkgZm9yIENCIGludm9raW5nICovXFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcdFxcdC8qIENvbnRleHQgZm9yIENCIGludm9raW5nLiAqL1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9jYnM7XFx0XFx0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBkZWZlcl9saW5rO1xcdFxcdC8qIExpbmtzIG9udG8gdGhlIHBlci1DUFUgZGVmZXJyYWwgZHJhaW4gbGlzdCAqL1xcbiBcXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7XFx0LyogRm9yIHNyY3VfYmFycmllcigpIHVzZS4gKi9cXG4gXFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDtcXHRcXHQvKiBGb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkgdXNlLiAqL1xcbiBcXHRpbnQgc3JjdV9lY19zdGF0ZTtcXHRcXHRcXHQvKiAgU3RhdGUgZm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpLiAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L0tjb25maWcgYi9rZXJuZWwvcmN1L0tjb25maWdcXG5pbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvS2NvbmZpZ1xcbisrKyBiL2tlcm5lbC9yY3UvS2NvbmZpZ1xcbkBAIC0xNzUsNiArMTc1LDEyIEBAIGNvbmZpZyBSQ1VfU1RBTExfQ09NTU9OXFxuIGNvbmZpZyBSQ1VfTkVFRF9TRUdDQkxJU1RcXG4gXFx0ZGVmX2Jvb2wgKCBUUkVFX1JDVSB8fCBUUkVFX1NSQ1UgfHwgVEFTS1NfUkNVX0dFTkVSSUMgKVxcbiBcXG4rIyBUaGUgZGVmZXJyYWwgKGFuZCB0aGUgSVJRX1dPUksgaXQgdXNlcykgaXMgb25seSBuZWVkZWQgd2hlcmUgY2FsbF9yY3UoKSAvXFxuKyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuXFxuK2NvbmZpZyBSQ1VfREVGRVJcXG4rXFx0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcXG4rXFx0c2VsZWN0IElSUV9XT1JLXFxuK1xcbiBjb25maWcgUkNVX0ZBTk9VVFxcbiBcXHRpbnQgXFxcIlRyZWUtYmFzZWQgaGllcmFyY2hpY2FsIFJDVSBmYW5vdXQgdmFsdWVcXFwiXFxuIFxcdHJhbmdlIDIgNjQgaWYgNjRCSVRcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmhcXG5pbmRleCAzOWE5ZjZmYTlhN2IyLi5jYTA1ZDQ4NzczYzc5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvcmN1LmhcXG4rKysgYi9rZXJuZWwvcmN1L3JjdS5oXFxuQEAgLTU3Miw2ICs1NzIsMjMgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tzX2NibGlzdF9pbml0X2dlbmVyaWModm9pZCkgeyB9XFxuICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9JTklUXFx0MVxcbiAjZGVmaW5lIFJDVV9TQ0hFRFVMRVJfUlVOTklOR1xcdDJcXG4gXFxuKy8qXFxuKyAqIERlZmVyIGEgY2FsbF9yY3UoKS9jYWxsX3NyY3UoKSBjYWxsYmFjayByYXRoZXIgdGhhbiBlbnF1ZXVlIGl0IG5vdz8gIERlZmVyXFxuKyAqIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzaW5jZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIG1heSBiZSBpblxcbisgKiBmbGlnaHQgb24gdGhpcyBDUFUuICBOb3Qgd2hpbGUgdGhlIHNjaGVkdWxlciBpcyBkb3duLCB0aG91Z2g6IGlycV93b3JrIGlzXFxuKyAqIHVudXNhYmxlIGJlZm9yZSBpbml0X0lSUSgpLCB5ZXQgcmN1X2luaXQoKSBhbHJlYWR5IGNhbGxzIGNhbGxfcmN1KCkuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxcbit7XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIGlycXNfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFO1xcbit9XFxuK1xcbisvKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUncyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi9cXG4rdm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSk7XFxuK1xcbiBlbnVtIHJjdXRvcnR1cmVfdHlwZSB7XFxuIFxcdFJDVV9GTEFWT1IsXFxuIFxcdFJDVV9UQVNLU19GTEFWT1IsXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jIGIva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcXG5pbmRleCA3OTQ5MzdlMTNlN2MzLi45ZWQxN2I2NDM2MjBhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXFxuKysrIGIva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcXG5AQCAtNDgsNiArNDgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGljay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25taS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInJjdS5oXFxcIlxcbiBcXG5AQCAtMTE1LDYgKzExNiw3IEBAIHRvcnR1cmVfcGFyYW0oaW50LCBsZWFrcG9pbnRlciwgMCwgXFxcIkxlYWsgcG9pbnRlciBkZXJlZmVyZW5jZXMgZnJvbSByZWFkZXJzXFxcIik7XFxuIHRvcnR1cmVfcGFyYW0oaW50LCBuX2JhcnJpZXJfY2JzLCAwLCBcXFwiIyBvZiBjYWxsYmFja3Mva3RocmVhZHMgZm9yIGJhcnJpZXIgdGVzdGluZ1xcXCIpO1xcbiB0b3J0dXJlX3BhcmFtKGludCwgbl91cF9kb3duLCAzMiwgXFxcIiMgb2YgY29uY3VycmVudCB1cC9kb3duIGhydGltZXItYmFzZWQgUkNVIHJlYWRlcnNcXFwiKTtcXG4gdG9ydHVyZV9wYXJhbShpbnQsIG5mYWtld3JpdGVycywgNCwgXFxcIk51bWJlciBvZiBSQ1UgZmFrZSB3cml0ZXIgdGhyZWFkc1xcXCIpO1xcbit0b3J0dXJlX3BhcmFtKGJvb2wsIG5taV9jYWxscywgdHJ1ZSwgXFxcIkV4ZXJjaXNlIC1cXHUwMDNlY2FsbCgpIGZyb20gTk1JIG9uIG5taV9jYXBhYmxlIGZsYXZvcnNcXFwiKTtcXG4gdG9ydHVyZV9wYXJhbShpbnQsIG5yZWFkZXJzLCAtMSwgXFxcIk51bWJlciBvZiBSQ1UgcmVhZGVyIHRocmVhZHNcXFwiKTtcXG4gdG9ydHVyZV9wYXJhbShib29sLCBud3JpdGVycywgMSwgXFxcIk51bWJlciBvZiBSQ1Ugd3JpdGVyIHRocmVhZHMgKDAgb3IgMSlcXFwiKTtcXG4gdG9ydHVyZV9wYXJhbShpbnQsIG9iamVjdF9kZWJ1ZywgMCwgXFxcIkVuYWJsZSBkZWJ1Zy1vYmplY3QgZG91YmxlIGNhbGxfcmN1KCkgdGVzdGluZ1xcXCIpO1xcbkBAIC0yMTYsNiArMjE4LDggQEAgc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdF9mYWlsdXJlO1xcbiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0cztcXG4gc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV90aW1lcnM7XFxuIHN0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfaXJxcztcXG4rc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9ubWlfY2FsbDtcXG4rc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9ubWlfY2I7XFxuIHN0YXRpYyBsb25nIG5fYmFycmllcl9hdHRlbXB0cztcXG4gc3RhdGljIGxvbmcgbl9iYXJyaWVyX3N1Y2Nlc3NlczsgLyogZGlkIHJjdV9iYXJyaWVyIHRlc3Qgc3VjY2VlZD8gKi9cXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbl9yZWFkX2V4aXRzO1xcbkBAIC00MzMsNiArNDM3LDcgQEAgc3RydWN0IHJjdV90b3J0dXJlX29wcyB7XFxuIFxcdGJvb2wgKCppc190YXNrX3JjdV9ib29zdGVkKSh2b2lkKTtcXG4gXFx0bG9uZyBjYmZsb29kX21heDtcXG4gXFx0aW50IGlycV9jYXBhYmxlO1xcbitcXHRpbnQgbm1pX2NhcGFibGU7XFxuIFxcdGludCBjYW5fYm9vc3Q7XFxuIFxcdGludCBleHRlbmRhYmxlcztcXG4gXFx0aW50IHNsb3dfZ3BzO1xcbkBAIC02NDgsNiArNjUzLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgcmN1X29wcyA9IHtcXG4gXFx0LmV4dGVuZGFibGVzXFx0XFx0PSBSQ1VUT1JUVVJFX01BWF9FWFRFTkQsXFxuIFxcdC5kZWJ1Z19vYmplY3RzXFx0XFx0PSAxLFxcbiBcXHQuc3RhcnRfcG9sbF9pcnFzb2ZmXFx0PSAxLFxcbitcXHQubm1pX2NhcGFibGVcXHRcXHQ9IDEsXFxuIFxcdC5uYW1lXFx0XFx0XFx0PSBcXFwicmN1XFxcIlxcbiB9O1xcbiBcXG5AQCAtOTQyLDYgKzk0OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHNyY3Vfb3BzID0ge1xcbiBcXHQuZGVidWdfb2JqZWN0c1xcdD0gMSxcXG4gXFx0LmhhdmVfdXBfZG93blxcdD0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKVxcbiBcXHRcXHRcXHRcXHQ/IDAgOiBTUkNVX1JFQURfRkxBVk9SX05PUk1BTCB8IFNSQ1VfUkVBRF9GTEFWT1JfRkFTVF9VUERPV04sXFxuK1xcdC5ubWlfY2FwYWJsZVxcdD0gMSxcXG4gXFx0Lm5hbWVcXHRcXHQ9IFxcXCJzcmN1XFxcIlxcbiB9O1xcbiBcXG5AQCAtMTAwNSw2ICsxMDEyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdWRfb3BzID0ge1xcbiBcXHQuZGVidWdfb2JqZWN0c1xcdD0gMSxcXG4gXFx0LmhhdmVfdXBfZG93blxcdD0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKVxcbiBcXHRcXHRcXHRcXHQ/IDAgOiBTUkNVX1JFQURfRkxBVk9SX05PUk1BTCB8IFNSQ1VfUkVBRF9GTEFWT1JfRkFTVF9VUERPV04sXFxuK1xcdC5ubWlfY2FwYWJsZVxcdD0gMSxcXG4gXFx0Lm5hbWVcXHRcXHQ9IFxcXCJzcmN1ZFxcXCJcXG4gfTtcXG4gXFxuQEAgLTEyNjksNiArMTI3Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHRhc2tzX3RyYWNpbmdfb3BzID0ge1xcbiBcXHQuY2JmbG9vZF9tYXhcXHQ9IDUwMDAwLFxcbiBcXHQuaXJxX2NhcGFibGVcXHQ9IDEsXFxuIFxcdC5zbG93X2dwc1xcdD0gMSxcXG4rXFx0Lm5taV9jYXBhYmxlXFx0PSAxLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcInRhc2tzLXRyYWNpbmdcXFwiXFxuIH07XFxuIFxcbkBAIC0yNjU5LDEyICsyNjY4LDk0IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxcbiBcXG4gc3RhdGljIERFRklORV9UT1JUVVJFX1JBTkRPTV9QRVJDUFUocmN1X3RvcnR1cmVfdGltZXJfcmFuZCk7XFxuIFxcbisvKlxcbisgKiBFeGVyY2lzZSAtXFx1MDAzZWNhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgc2V0IC1cXHUwMDNlbm1pX2NhcGFibGUuICBBXFxuKyAqIHBlci1DUFUgaGFyZHdhcmUgcGVyZiBjb3VudGVyIG92ZXJmbG93cyBpbnRvIGFuIE5NSSwgYW5kIGl0cyBoYW5kbGVyIHN1Ym1pdHNcXG4rICogb25lIHByZWFsbG9jYXRlZCBjYWxsYmFjayB2aWEgLVxcdTAwM2VjYWxsKCkuICBPbmUgY2FsbGJhY2sgaXMgaW4gZmxpZ2h0IGF0IGEgdGltZVxcbisgKiAoZ3VhcmRlZCBieSBhbiBhdG9taWMpIHRvIGF2b2lkIGFsbG9jYXRpbmcgaW4gTk1JLiAgVGhpcyBtaXJyb3JzIGhvdyBhIEJQRlxcbisgKiBwcm9ncmFtIHJlYWNoZXMgLVxcdTAwM2VjYWxsKCkgZnJvbSBOTUkuXFxuKyAqL1xcbisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXFxuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0ge1xcbitcXHQudHlwZVxcdFxcdD0gUEVSRl9UWVBFX0hBUkRXQVJFLFxcbitcXHQuY29uZmlnXFx0XFx0PSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXFxuK1xcdC5zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXFxuK1xcdC5waW5uZWRcXHRcXHQ9IDEsXFxuK1xcdC5kaXNhYmxlZFxcdD0gMSxcXG4rXFx0LmZyZXFcXHRcXHQ9IDEsXFxuK1xcdC5zYW1wbGVfZnJlcVxcdD0gMTAwMCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudCAqKnJjdV90b3J0dXJlX25taV9ldmVudHM7XFxuK3N0YXRpYyBzdHJ1Y3QgcmN1X2hlYWQgcmN1X3RvcnR1cmVfbm1pX3JoO1xcbitzdGF0aWMgYXRvbWljX3QgcmN1X3RvcnR1cmVfbm1pX3JoX2ludXNlO1xcbitcXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NiKHN0cnVjdCByY3VfaGVhZCAqcmhwKVxcbit7XFxuK1xcdGF0b21pY19sb25nX2luYyhcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbit7XFxuK1xcdGlmICghaW5fbm1pKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKGN1cl9vcHMtXFx1MDAzZWNhbGwgXFx1MDAyNlxcdTAwMjYgIWF0b21pY194Y2hnKFxcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDEpKSB7XFxuK1xcdFxcdGN1cl9vcHMtXFx1MDAzZWNhbGwoXFx1MDAyNnJjdV90b3J0dXJlX25taV9yaCwgcmN1X3RvcnR1cmVfbm1pX2NiKTtcXG4rXFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGlmICghbm1pX2NhbGxzIHx8ICFjdXJfb3BzLVxcdTAwM2VubWlfY2FwYWJsZSB8fCAhY3VyX29wcy1cXHUwMDNlY2FsbClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0ga2NhbGxvYyhucl9jcHVfaWRzLCBzaXplb2YoKnJjdV90b3J0dXJlX25taV9ldmVudHMpLFxcbitcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xcbitcXHRcXHRldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKFxcdTAwMjZyY3VfdG9ydHVyZV9ubWlfYXR0ciwgY3B1LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgTlVMTCwgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93LCBOVUxMKTtcXG4rXFx0XFx0aWYgKElTX0VSUihldmVudCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0gPSBldmVudDtcXG4rXFx0XFx0cGVyZl9ldmVudF9lbmFibGUoZXZlbnQpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpXFxuK3tcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuK1xcdFxcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cGVyZl9ldmVudF9kaXNhYmxlKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7XFxuK1xcdFxcdHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwocmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKTtcXG4rXFx0fVxcbitcXHRrZnJlZShyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKTtcXG4rXFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IE5VTEw7XFxuK31cXG4rI2Vsc2UgLyogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqL1xcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKSB7IH1cXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9XFxuKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXFxuK1xcbiAvKlxcbiAgKiBSQ1UgdG9ydHVyZSByZWFkZXIgZnJvbSB0aW1lciBoYW5kbGVyLiAgRGVyZWZlcmVuY2VzIHJjdV90b3J0dXJlX2N1cnJlbnQsXFxuICAqIGluY3JlbWVudGluZyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBwaXBlbGluZSBhcnJheS4gIFRoZVxcbiAgKiBjb3VudGVyIGluIHRoZSBlbGVtZW50IHNob3VsZCBuZXZlciBiZSBncmVhdGVyIHRoYW4gMSwgb3RoZXJ3aXNlLCB0aGVcXG4gICogUkNVIGltcGxlbWVudGF0aW9uIGlzIGJyb2tlbi5cXG4gICovXFxuK1xcbiBzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdW51c2VkKVxcbiB7XFxuIFxcdFdBUk5fT05fT05DRSghaW5fc2VydmluZ19zb2Z0aXJxKCkpO1xcbkBAIC0zMDQ3LDYgKzMxMzgsOSBAQCByY3VfdG9ydHVyZV9zdGF0c19wcmludCh2b2lkKVxcbiBcXHRcXHRkYXRhX3JhY2Uobl9iYXJyaWVyX2F0dGVtcHRzKSxcXG4gXFx0XFx0ZGF0YV9yYWNlKG5fcmN1X3RvcnR1cmVfYmFycmllcl9lcnJvcikpO1xcbiBcXHRwcl9jb250KFxcXCJyZWFkLWV4aXRzOiAlbGQgXFxcIiwgZGF0YV9yYWNlKG5fcmVhZF9leGl0cykpOyAvLyBTdGF0aXN0aWMuXFxuK1xcdHByX2NvbnQoXFxcIm5taS1jYWxsczogJWxkIG5taS1jYnM6ICVsZCBcXFwiLFxcbitcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKSxcXG4rXFx0XFx0YXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpKTtcXG4gXFx0cHJfY29udChcXFwibm9jYi10b2dnbGVzOiAlbGQ6JWxkIFxcXCIsXFxuIFxcdFxcdGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fbm9jYl9vZmZsb2FkKSwgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9ub2NiX2Rlb2ZmbG9hZCkpO1xcbiBcXHRwcl9jb250KFxcXCJncHdyYXBzOiAlbGRcXFxcblxcXCIsIG5fZ3B3cmFwcyk7XFxuQEAgLTQzMjUsNiArNDQxOSw4IEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcXG4gXFx0XFx0a2ZyZWUocmVhZGVyX3Rhc2tzKTtcXG4gXFx0XFx0cmVhZGVyX3Rhc2tzID0gTlVMTDtcXG4gXFx0fVxcbitcXHQvKiBEaXNhYmxlIHRoZSBwZXJmIGNvdW50ZXJzIChhbmQgdGh1cyB0aGUgTk1JIC1cXHUwMDNlY2FsbCgpIGZpcmluZykgbm93LiAqL1xcbitcXHRyY3VfdG9ydHVyZV9ubWlfY2xlYW51cCgpO1xcbiBcXHRrZnJlZShyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGspO1xcbiBcXHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGsgPSBOVUxMO1xcbiBcXG5AQCAtNDM1NCw2ICs0NDUwLDIwIEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcXG4gXFx0XFx0cHJfaW5mbyhcXFwiJXM6IEludm9raW5nICVwUygpLlxcXFxuXFxcIiwgX19mdW5jX18sIGN1cl9vcHMtXFx1MDAzZWNiX2JhcnJpZXIpO1xcbiBcXHRcXHRjdXJfb3BzLVxcdTAwM2VjYl9iYXJyaWVyKCk7XFxuIFxcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGNiX2JhcnJpZXIoKSBhYm92ZSBkcmFpbmVkIGV2ZXJ5IGRlZmVycmVkIE5NSSAtXFx1MDAzZWNhbGwoKSBjYWxsYmFjaywgc28gdGhlXFxuK1xcdCAqIGNvdW50IGlzc3VlZCBmcm9tIE5NSSBtdXN0IGVxdWFsIHRoZSBjb3VudCBpbnZva2VkOyBhIG1pc21hdGNoIG1lYW5zIGFcXG4rXFx0ICogY2FsbGJhY2sgd2FzIGxvc3QuXFxuK1xcdCAqL1xcbitcXHRpZiAoYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCkgIT1cXG4rXFx0ICAgIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSkge1xcbitcXHRcXHRwcl9hbGVydChcXFwiJXM6IE5NSSAtXFx1MDAzZWNhbGwoKSBsb3N0IGEgY2FsbGJhY2s6IGlzc3VlZCAlbGQgaW52b2tlZCAlbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBfX2Z1bmNfXywgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksXFxuK1xcdFxcdFxcdCBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpO1xcbitcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZuX3JjdV90b3J0dXJlX2Vycm9yKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGN1cl9vcHMtXFx1MDAzZWNsZWFudXAgIT0gTlVMTClcXG4gXFx0XFx0Y3VyX29wcy1cXHUwMDNlY2xlYW51cCgpO1xcbiBcXG5AQCAtNDc4Niw2ICs0ODk2LDggQEAgcmN1X3RvcnR1cmVfaW5pdCh2b2lkKVxcbiBcXHRcXHRmaXJzdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gdW53aW5kO1xcbiBcXHR9XFxuK1xcdC8qIEFybSB0aGUgcGVyLUNQVSBwZXJmIGNvdW50ZXJzIHRoYXQgZHJpdmUgLVxcdTAwM2VjYWxsKCkgZnJvbSBOTUkuICovXFxuK1xcdHJjdV90b3J0dXJlX25taV9pbml0KCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucmVhbHJlYWRlcnM7IGkrKykge1xcbiBcXHRcXHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGtbaV0ucnRjX2Noa3JkciA9IC0xO1xcbiBcXHRcXHRmaXJzdGVyciA9IHRvcnR1cmVfY3JlYXRlX2t0aHJlYWQocmN1X3RvcnR1cmVfcmVhZGVyLCAodm9pZCAqKWksXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbmluZGV4IDU1OGJhOGQzMTZkYjYuLmEwYTkxZjdmYzI1OGEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jXFxuKysrIGIva2VybmVsL3JjdS9zcmN1dGlueS5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWVtcHQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFxcdTAwM2VcXG5AQCAtNDMsNiArNDQsOCBAQCBzdGF0aWMgaW50IGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbiBcXHRJTklUX1dPUksoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV93b3JrLmVudHJ5KTtcXG4gXFx0aW5pdF9pcnFfd29yayhcXHUwMDI2c3NwLVxcdTAwM2VzcmN1X2lycV93b3JrLCBzcmN1X3RpbnlfaXJxX3dvcmspO1xcbitcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfY2JzKTtcXG4rXFx0aW5pdF9pcnFfd29yayhcXHUwMDI2c3NwLVxcdTAwM2VkZWZlcl9pdywgc3JjdV9kZWZlcl9kcmFpbik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC04Niw2ICs4OSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7XFxuIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4ge1xcbiBcXHRXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSk7XFxuK1xcdC8qIFJlLWlzc3VlIGFueSBkZWZlcnJlZCBjYWxsYmFja3Mgc28gLVxcdTAwM2VzcmN1X2NiX2hlYWQgc2VlcyB0aGVtIGJlbG93LiAqL1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2c3NwLVxcdTAwM2VkZWZlcl9pdyk7XFxuIFxcdGlycV93b3JrX3N5bmMoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9pcnFfd29yayk7XFxuIFxcdGZsdXNoX3dvcmsoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV93b3JrKTtcXG4gXFx0V0FSTl9PTihzc3AtXFx1MDAzZXNyY3VfZ3BfcnVubmluZyk7XFxuQEAgLTIxMywxMSArMjE5LDExIEBAIHN0YXRpYyB2b2lkIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBFbnF1ZXVlIGFuIFNSQ1UgY2FsbGJhY2sgb24gdGhlIHNwZWNpZmllZCBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUsXFxuLSAqIGluaXRpYXRpbmcgZ3JhY2UtcGVyaW9kIHByb2Nlc3NpbmcgaWYgaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy5cXG4rICogRW5xdWV1ZSBAcmhwIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgc3JjdV9kZWZlcl9kcmFpbigpIHRvXFxuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXFxuICAqL1xcbi12b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuLVxcdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxcbitzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbitcXHRcXHRcXHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG5AQCAtMjMxLDYgKzIzNyw0NiBAQCB2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuIFxcdHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCk7XFxuIFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuIH1cXG4rXFxuKy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXFxuK3N0YXRpYyBib29sIHNyY3VfZGVmZXJfZHJhaW5pbmc7XFxuK1xcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG4re1xcbitcXHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3Vfc3RydWN0LCBkZWZlcl9pdyk7XFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlLCAqbmV4dDtcXG4rXFxuK1xcdC8qIENhbGxiYWNrcyBhcmUgdW5vcmRlcmVkLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy4gKi9cXG4rXFx0c3JjdV9kZWZlcl9kcmFpbmluZyA9IHRydWU7XFxuK1xcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2c3NwLVxcdTAwM2VkZWZlcl9jYnMpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqcmhwID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7XFxuK1xcbitcXHRcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cXHUwMDNlZnVuYyk7XFxuK1xcdH1cXG4rXFx0c3JjdV9kZWZlcl9kcmFpbmluZyA9IGZhbHNlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZGVmZXJfZHJhaW4pO1xcbitcXG4rdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbitcXHQgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XFxuK1xcdFxcdC8qIEEgcmUtZW50cmFudCBjYWxsX3NyY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0LiAqL1xcbitcXHRcXHRpZiAoc3JjdV9kZWZlcl9kcmFpbmluZyBcXHUwMDI2XFx1MDAyNiAhaW5fbm1pKCkpIHtcXG4rXFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJjYWxsX3NyY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRyaHAtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbitcXHRcXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfY2JzKSlcXG4rXFx0XFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfaXcpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSk7XFxuK1xcbitcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfc3JjdSk7XFxuIFxcbiAvKlxcbkBAIC0yNjAsNiArMzA2LDE1IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcXG4gXFxuKy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBmb3IgYWxsIGluLWZsaWdodCBvbmVzLiAqL1xcbit2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4re1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2c3NwLVxcdTAwM2VkZWZlcl9pdyk7XFxuK1xcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2JhcnJpZXIpO1xcbitcXG4gLypcXG4gICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llXFxuICAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcXG5pbmRleCAzMDQxMTI2NzRlOGEyLi4yNjY5NTk0YTY0MDJmIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xcbkBAIC0yMCw2ICsyMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJjcHUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWVtcHQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NtcC5oXFx1MDAzZVxcbkBAIC03OSw2ICs4MCw0NyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3NyY3Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gc3RhdGljIHZvaWQgc3JjdV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspO1xcbiBzdGF0aWMgdm9pZCBzcmN1X2RlbGF5X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4gXFxuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XFxuK1xcbisvKlxcbisgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLCBzaGFyZWQgYnkgZXZlcnkgc3JjdV9zdHJ1Y3QuICBBIGRlZmVycmVkXFxuKyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJ3MgLVxcdTAwM2VkZWZlcl9jYnM7IHRoYXQgc3JjdV9kYXRhIGlzIGNoYWluZWRcXG4rICogdmlhIC1cXHUwMDNlZGVmZXJfbGluayBvbnRvIC1cXHUwMDNlbGlzdCwgd2hpY2ggdGhlIGlycV93b3JrIHdhbGtzLlxcbisgKi9cXG4rc3RydWN0IHNyY3VfZGVmZXIge1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZFxcdGxpc3Q7XFxuK1xcdHN0cnVjdCBpcnFfd29ya1xcdFxcdGl3O1xcbitcXHRyYXdfc3BpbmxvY2tfdFxcdFxcdGxvY2s7XFxuK307XFxuK1xcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNyY3VfZGVmZXIsIHNyY3VfZGVmZXIpID0ge1xcbitcXHQubG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRChzcmN1X2RlZmVyLmxvY2spLFxcbitcXHQuaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbiksXFxuK307XFxuK1xcbisvKiBTZXQgd2hpbGUgc3JjdV9kZWZlcl9kcmFpbigpIHJlLWlzc3VlcywgdG8gY2F0Y2ggYSByZS1lbnRyYW50IGNhbGxfc3JjdSgpLiAqL1xcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgc3JjdV9kZWZlcl9kcmFpbmluZyk7XFxuK1xcbisvKlxcbisgKiBGbHVzaCBwZW5kaW5nIGRlZmVycmVkIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyBzcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS5cXG4rICogV2FpdCBvdXQgYW4gb25saW5lIENQVSdzIGlycV93b3JrOyBkcmFpbiBhbiBvZmZsaW5lIENQVSdzIGxpc3QgZGlyZWN0bHksIGFzXFxuKyAqIGl0cyBpcnFfd29yayBtYXkgbmV2ZXIgcnVuIGFnYWluLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKVxcbit7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4rXFx0XFx0aWYgKGNwdV9vbmxpbmUoY3B1KSlcXG4rXFx0XFx0XFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzcmN1X2RlZmVyX2RyYWluKFxcdTAwMjZwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSkuaXcpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIEluaXRpYWxpemUgU1JDVSBwZXItQ1BVIGRhdGEuICBOb3RlIHRoYXQgc3RhdGljYWxseSBhbGxvY2F0ZWRcXG4gICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyBtaWdodCBhbHJlYWR5IGhhdmUgc3JjdV9yZWFkX2xvY2soKSBhbmRcXG5AQCAtMTA3LDYgKzE0OSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3NyY3Vfc3RydWN0X2RhdGEoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIFxcdFxcdHNkcC1cXHUwMDNlY3B1ID0gY3B1O1xcbiBcXHRcXHRJTklUX1dPUksoXFx1MDAyNnNkcC1cXHUwMDNld29yaywgc3JjdV9pbnZva2VfY2FsbGJhY2tzKTtcXG4gXFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNnNkcC1cXHUwMDNlZGVsYXlfd29yaywgc3JjdV9kZWxheV90aW1lciwgMCk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIC1cXHUwMDNlZGVmZXJfY2JzIGFuZCAtXFx1MDAzZWRlZmVyX2xpbmsgYXJlIHZhbGlkIHdoZW4gemVyb2VkIGFuZCBhcmUgbm90XFxuK1xcdFxcdCAqIHJlaW5pdGlhbGl6ZWQgaGVyZSwgbGVzdCB3ZSBjbG9iYmVyIGNhbGxiYWNrcyBhIHJlZW50cmFudFxcbitcXHRcXHQgKiBjYWxsX3NyY3UoKSBhbHJlYWR5IHN0YWdlZC4gIFNlZSBfX2NhbGxfc3JjdSgpLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0c2RwLVxcdTAwM2Vzc3AgPSBzc3A7XFxuIFxcdH1cXG4gfVxcbkBAIC02OTUsNyArNzQyLDEyIEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0XFx0cmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovXFxuIFxcdGlmIChXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSkpXFxuIFxcdFxcdHJldHVybjsgLyogSnVzdCBsZWFrIGl0ISAqL1xcbi1cXHQvKiBXYWl0IGZvciBpcnFfd29yayB0byBmaW5pc2ggZmlyc3QgYXMgaXQgbWF5IHF1ZXVlIGEgbmV3IHdvcmsuICovXFxuK1xcdC8qXFxuK1xcdCAqIERyYWluIGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc3luY2luZyAtXFx1MDAzZWlycV93b3JrOiByZS1pc3N1aW5nIG9uZSBjYW5cXG4rXFx0ICogc3RhcnQgYSBncmFjZSBwZXJpb2QgYW5kIHJlLXF1ZXVlIC1cXHUwMDNlaXJxX3dvcmssIHdoaWNoIHRoZW4gc2NoZWR1bGVzXFxuK1xcdCAqIC1cXHUwMDNld29yaywgc28gYm90aCBtdXN0IGJlIHdhaXRlZCBvdXQgYWZ0ZXIgdGhlIGRyYWluLlxcbitcXHQgKi9cXG4rXFx0c3JjdV9kZWZlcl9mbHVzaCgpO1xcbiBcXHRpcnFfd29ya19zeW5jKFxcdTAwMjZzdXAtXFx1MDAzZWlycV93b3JrKTtcXG4gXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzdXAtXFx1MDAzZXdvcmspO1xcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuQEAgLTE0MTAsOCArMTQ2MiwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCxcXG4gICogc3JjdV9yZWFkX2xvY2soKSwgYW5kIHNyY3VfcmVhZF91bmxvY2soKSB0aGF0IGFyZSBhbGwgcGFzc2VkIHRoZSBzYW1lXFxuICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZS5cXG4gICovXFxuLXN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4tXFx0XFx0XFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxcbisvKlxcbisgKiBUaGUgc3JjdV9jYmxpc3QgYW5kIHNyY3Vfbm9kZSB0cmVlIGFyZSBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZFxcbisgKiAoc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKSBlbnF1ZXVlcyB1bmRlciByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSBhbmQgbWF5IHdhbGtcXG4rICogdGhlIHRyZWUpLiAgTGlrZSBjYWxsX3JjdSgpLCBfX2NhbGxfc3JjdSgpIGRlZmVycyB3aGVuIGludGVycnVwdHMgYXJlIGFscmVhZHlcXG4rICogZGlzYWJsZWQsIHNvIGEgcmUtZW50cmFudCBjYWxsX3NyY3UoKSAtLSBlLmcuIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkgZnJvbSBhXFxuKyAqIEJQRiBwcm9ncmFtIC0tIGNhbm5vdCBjb3JydXB0IHRoZSBsaXN0IG9yIGRlYWRsb2NrLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4rXFx0XFx0XFx0ICAgIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcXG4ge1xcbiBcXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUocmhwKSkge1xcbiBcXHRcXHQvKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9zcmN1KCksIHNvIGxlYWsgdGhlIGNhbGxiYWNrLiAqL1xcbkBAIC0xNDIzLDYgKzE0ODIsODEgQEAgc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbiBcXHQodm9pZClzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzc3AsIHJocCwgZG9fbm9ybSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4rXFx0XFx0XFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxcbit7XFxuK1xcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcXG4rXFx0XFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSW5zdHJ1bWVudGF0aW9uIG9uIHRoZSBlbnF1ZXVlIHBhdGggY2FuIHJlLWVudGVyIGhlcmUgZnJvbVxcbitcXHRcXHQgKiBpbnNpZGUgc3JjdV9kZWZlcl9kcmFpbigpLiAgUmUtcXVldWluZyB3b3VsZCBsaXZlbG9jayB0aGVcXG4rXFx0XFx0ICogZHJhaW4sIHNvIGRyb3AgdGhlIGNhbGxiYWNrOyBhbiBOTUkgY2Fubm90IGxvb3AsIHNvIGxldCBpdCBpbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh0aGlzX2NwdV9yZWFkKHNyY3VfZGVmZXJfZHJhaW5pbmcpIFxcdTAwMjZcXHUwMDI2ICFpbl9ubWkoKSkge1xcbitcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcImNhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNkcCA9IHRoaXNfY3B1X3B0cihzc3AtXFx1MDAzZXNkYSk7XFxuK1xcdFxcdHJocC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuK1xcdFxcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCBcXHUwMDI2c2RwLVxcdTAwM2VkZWZlcl9jYnMpKSB7XFxuK1xcdFxcdFxcdC8qIEZpcnN0IGRlZmVycmFsIG9uIHRoaXMgc3JjdV9kYXRhOiBjaGFpbiBpdCBmb3IgdGhlIGRyYWluLiAqL1xcbitcXHRcXHRcXHRzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c3JjdV9kZWZlcik7XFxuK1xcbitcXHRcXHRcXHRzZHAtXFx1MDAzZXNzcCA9IHNzcDtcXG4rXFx0XFx0XFx0aWYgKGxsaXN0X2FkZChcXHUwMDI2c2RwLVxcdTAwM2VkZWZlcl9saW5rLCBcXHUwMDI2c25kcC1cXHUwMDNlbGlzdCkpXFxuK1xcdFxcdFxcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZzbmRwLVxcdTAwM2Vpdyk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cXG4rXFx0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpO1xcbitcXG4rXFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jLCBkb19ub3JtKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmUtaXNzdWUgZGVmZXJyZWQgY2FsbGJhY2tzIHN0cmFpZ2h0IHRvIHNyY3VfZG9fZW5xdWV1ZSgpIHNvIHRoZXkgY2Fubm90IGRlZmVyXFxuKyAqIGFnYWluLiAgLVxcdTAwM2Vsb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGUgaXJxX3dvcmssIHNyY3VfZGVmZXJfZmx1c2goKSBhbmRcXG4rICogc3JjdV9vZmZsaW5lX2RyYWluKCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuK3tcXG4rXFx0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyk7XFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlICpzbm9kZSwgKnNuZXh0O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzbmRwLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdHRoaXNfY3B1X3dyaXRlKHNyY3VfZGVmZXJfZHJhaW5pbmcsIHRydWUpO1xcbitcXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2c25kcC1cXHUwMDNlbGlzdCkpIHtcXG4rXFx0XFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwID0gY29udGFpbmVyX29mKHNub2RlLCBzdHJ1Y3Qgc3JjdV9kYXRhLCBkZWZlcl9saW5rKTtcXG4rXFx0XFx0c3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBzZHAtXFx1MDAzZXNzcDtcXG4rXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgKmNub2RlLCAqY25leHQ7XFxuK1xcbitcXHRcXHRjbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNnNkcC1cXHUwMDNlZGVmZXJfY2JzKTtcXG4rXFx0XFx0bGxpc3RfZm9yX2VhY2hfc2FmZShjbm9kZSwgY25leHQsIGNub2RlKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCByY3VfaGVhZCAqcmhwID0gKHN0cnVjdCByY3VfaGVhZCAqKWNub2RlO1xcbitcXG4rXFx0XFx0XFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtXFx1MDAzZWZ1bmMsIHRydWUpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0dGhpc19jcHVfd3JpdGUoc3JjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xcbitcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c25kcC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbisvKlxcbisgKiBEcmFpbiBAY3B1J3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzIGZyb20gcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpXFxuKyAqIG9uY2UgQGNwdSBpcyBkZWFkLiAgT25lIHBhc3MgY292ZXJzIGV2ZXJ5IHNyY3Vfc3RydWN0LCBhbmQgdGhlIHJlLWlzc3VlIGxhbmRzXFxuKyAqIG9uIHRoZSBjdXJyZW50IENQVS5cXG4rICovXFxuK3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpXFxuK3tcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHNyY3VfZGVmZXJfZHJhaW4oXFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBjYWxsX3NyY3UoKSAtIFF1ZXVlIGEgY2FsbGJhY2sgZm9yIGludm9jYXRpb24gYWZ0ZXIgYW4gU1JDVSBncmFjZSBwZXJpb2RcXG4gICogQHNzcDogc3JjdV9zdHJ1Y3QgaW4gcXVldWUgdGhlIGNhbGxiYWNrXFxuQEAgLTE2NzcsOSArMTgxMSwxNyBAQCB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4ge1xcbiBcXHRpbnQgY3B1O1xcbiBcXHRpbnQgaWR4O1xcbi1cXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9zdXAtXFx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xcbitcXHR1bnNpZ25lZCBsb25nIHM7XFxuIFxcbiBcXHRjaGVja19pbml0X3NyY3Vfc3RydWN0KHNzcCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAgVGhlXFxuK1xcdCAqIHNoYXJlZCBpcnFfd29yayBtYXkgYWxzbyBkcmFpbiBvdGhlciBzcmN1X3N0cnVjdHMnLCB3aGljaCBpcyBoYXJtbGVzcy5cXG4rXFx0ICovXFxuK1xcdHNyY3VfZGVmZXJfZmx1c2goKTtcXG4rXFxuK1xcdHMgPSByY3Vfc2VxX3NuYXAoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9zdXAtXFx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfc3VwLVxcdTAwM2VzcmN1X2JhcnJpZXJfbXV0ZXgpO1xcbiBcXHRpZiAocmN1X3NlcV9kb25lKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfc3VwLVxcdTAwM2VzcmN1X2JhcnJpZXJfc2VxLCBzKSkge1xcbiBcXHRcXHRzbXBfbWIoKTsgLyogRm9yY2Ugb3JkZXJpbmcgZm9sbG93aW5nIHJldHVybi4gKi9cXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90aW55LmMgYi9rZXJuZWwvcmN1L3RpbnkuY1xcbmluZGV4IGRjY2NjZDZiZTk0MTEuLjU3MzZiOTY0ZDhlZTEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS90aW55LmNcXG4rKysgYi9rZXJuZWwvcmN1L3RpbnkuY1xcbkBAIC0xMSw2ICsxMSw4IEBAXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGxldGlvbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29yay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG5AQCAtNDIsOCArNDQsODYgQEAgc3RhdGljIHN0cnVjdCByY3VfY3RybGJsayByY3VfY3RybGJsayA9IHtcXG4gXFx0LmdwX3NlcVxcdFxcdD0gMCAtIDMwMFVMLFxcbiB9O1xcbiBcXG4rLypcXG4rICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKVxcbisgKiB0aGF0IGFycml2ZXMgd2l0aCBpbnRlcnJ1cHRzIG9mZiBzdGFnZXMgdGhlIGNhbGxiYWNrIG9uIGEgbG9ja2xlc3MgbGlzdCB0aGF0XFxuKyAqIGFuIGlycV93b3JrIHJlLWlzc3VlcyBsYXRlci4gIE9uZSBnbG9iYWwgbGlzdCBhbmQgaXJxX3dvcmsgc3VmZmljZSwgYXMgVGlueVxcbisgKiBSQ1UgaXMgdW5pcHJvY2Vzc29yLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xcbitzdGF0aWMgTExJU1RfSEVBRChyY3VfZGVmZXJfbGlzdCk7XFxuK3N0YXRpYyBERUZJTkVfSVJRX1dPUksocmN1X2RlZmVyX2l3LCByY3VfZGVmZXJfZHJhaW4pO1xcbitzdGF0aWMgYm9vbCByY3VfZGVmZXJfZHJhaW5pbmc7XFxuK1xcbisvKlxcbisgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkgdG9cXG4rICogcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsIGNvbmRpdGlvbi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcXG4rXFx0XFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZkb3VibGVmcmVlcykgXFx1MDAzYyA0KSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiJXMoKTogRG91YmxlLWZyZWVkIENCICVwLVxcdTAwM2UlcFMoKSEhISAgXFxcIiwgX19mdW5jX18sIGhlYWQsIGhlYWQtXFx1MDAzZWZ1bmMpO1xcbitcXHRcXHRcXHRtZW1fZHVtcF9vYmooaGVhZCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRoZWFkLVxcdTAwM2VmdW5jID0gZnVuYztcXG4rXFx0aGVhZC1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuK1xcbitcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdCpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDtcXG4rXFx0cmN1X2N0cmxibGsuY3VydGFpbCA9IFxcdTAwMjZoZWFkLVxcdTAwM2VuZXh0O1xcbitcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkge1xcbitcXHRcXHQvKiBmb3JjZSBzY2hlZHVsaW5nIGZvciByY3VfcXMoKSAqL1xcbitcXHRcXHRyZXNjaGVkX2NwdSgwKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG4re1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XFxuK1xcbitcXHQvKiBDYWxsYmFja3MgYXJlIHVub3JkZXJlZCwgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuICovXFxuK1xcdHJjdV9kZWZlcl9kcmFpbmluZyA9IHRydWU7XFxuK1xcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2cmN1X2RlZmVyX2xpc3QpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xcbitcXG4rXFx0XFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cXHUwMDNlZnVuYyk7XFxuK1xcdH1cXG4rXFx0cmN1X2RlZmVyX2RyYWluaW5nID0gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHQvKiBBIHJlLWVudHJhbnQgY2FsbF9yY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0OyBkcm9wIGl0LiAqL1xcbitcXHRpZiAocmN1X2RlZmVyX2RyYWluaW5nIFxcdTAwMjZcXHUwMDI2ICFpbl9ubWkoKSkge1xcbitcXHRcXHRXQVJOX09OQ0UoMSwgXFxcImNhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0aGVhZC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuK1xcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgXFx1MDAyNnJjdV9kZWZlcl9saXN0KSlcXG4rXFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNnJjdV9kZWZlcl9pdyk7XFxuK31cXG4rXFxuKy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlycV93b3JrX3N5bmMoXFx1MDAyNnJjdV9kZWZlcl9pdyk7XFxuK31cXG4rXFxuIHZvaWQgcmN1X2JhcnJpZXIodm9pZClcXG4ge1xcbitcXHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGZpcnN0LiAqL1xcbitcXHRyY3VfZGVmZXJfZmx1c2goKTtcXG4gXFx0d2FpdF9yY3VfZ3AoY2FsbF9yY3VfaHVycnkpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xcbkBAIC0xNTcsMjkgKzIzNywxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3UpO1xcbiAgKi9cXG4gdm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXFxuIHtcXG4tXFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi1cXG4tXFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XFxuLVxcdFxcdGlmIChhdG9taWNfaW5jX3JldHVybihcXHUwMDI2ZG91YmxlZnJlZXMpIFxcdTAwM2MgNCkge1xcbi1cXHRcXHRcXHRwcl9lcnIoXFxcIiVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cXHUwMDNlJXBTKCkhISEgIFxcXCIsIF9fZnVuY19fLCBoZWFkLCBoZWFkLVxcdTAwM2VmdW5jKTtcXG4tXFx0XFx0XFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xcbi1cXHRcXHR9XFxuK1xcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcXG4rXFx0XFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aGVhZC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuLVxcdGhlYWQtXFx1MDAzZW5leHQgPSBOVUxMO1xcbi1cXG4tXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbi1cXHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XFxuLVxcdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcXHUwMDI2aGVhZC1cXHUwMDNlbmV4dDtcXG4tXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cXG4rXFx0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcXG4tXFx0XFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cXG4tXFx0XFx0cmVzY2hlZF9jcHUoMCk7XFxuLVxcdH1cXG4rXFx0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3UpO1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuY1xcbmluZGV4IDk2ODQ4ZmMxZjAyYjguLmUyMWViNTUxYjExMGUgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcXG4rKysgYi9rZXJuZWwvcmN1L3RyZWUuY1xcbkBAIC0yNCw2ICsyNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9kZWJ1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm1pLmhcXHUwMDNlXFxuQEAgLTMxNDgsMjEgKzMxNDksMjggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2Jfb3ZsZChzdHJ1Y3QgcmN1X2RhdGEgKnJkcClcXG4gXFx0cmF3X3NwaW5fdW5sb2NrX3JjdV9ub2RlKHJucCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkXFxuLV9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxcbisvKlxcbisgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpXFxuKyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIChzZWUgc2hvdWxkX3JjdV9kZWZlcigpKSBzdGFnZXMgdGhlIGNhbGxiYWNrXFxuKyAqIG9uIGEgcGVyLUNQVSBsbGlzdCB0aGF0IGFuIGlycV93b3JrIHJlLWlzc3VlcyBvbmNlIGludGVycnVwdHMgYXJlIG9uLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xcbitcXG4rLyogU2V0IHdoaWxlIHJjdV9kZWZlcl9kcmFpbigpIHJlLWlzc3VlcywgdG8gY2F0Y2ggYSByZS1lbnRyYW50IGNhbGxfcmN1KCkuICovXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCByY3VfZGVmZXJfZHJhaW5pbmcpO1xcbitcXG4rLypcXG4rICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSdzIHJjdV9zZWdjYmxpc3QuICBBbHNvIGNhbGxlZCBieSByY3VfZGVmZXJfZHJhaW4oKVxcbisgKiB0byByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWxcXG4rICogY29uZGl0aW9uLiAgRWl0aGVyIGNhbGxlciBtYXkgaGF2ZSBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcXG4ge1xcbiBcXHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGJvb2wgbGF6eTtcXG4gXFx0c3RydWN0IHJjdV9kYXRhICpyZHA7XFxuIFxcbi1cXHQvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqL1xcbi1cXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcXHUwMDI2IChzaXplb2Yodm9pZCAqKSAtIDEpKTtcXG4tXFxuLVxcdC8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi9cXG4tXFx0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9yY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suXFxuQEAgLTMyMDYsNiArMzIxNCw5MiBAQCBfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcXG4gXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gdGhlIGVucXVldWUgc28gdGhleSBjYW5ub3QgZGVmZXJcXG4rICogYWdhaW4uICAtXFx1MDAzZWRlZmVyX2xvY2sgc2VyaWFsaXplcyB0aGUgZHJhaW5lcnM6IHRoaXMgQ1BVJ3MgaXJxX3dvcmssXFxuKyAqIHJjdV9kZWZlcl9mbHVzaCgpIGFuZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG4re1xcbitcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHJjdV9kYXRhLCBkZWZlcl93b3JrKTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcXG4rXFx0dGhpc19jcHVfd3JpdGUocmN1X2RlZmVyX2RyYWluaW5nLCB0cnVlKTtcXG4rXFx0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2hlYWQpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xcbitcXG4rXFx0XFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cXHUwMDNlZnVuYywgZmFsc2UpO1xcbitcXHR9XFxuK1xcdHRoaXNfY3B1X3dyaXRlKHJjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xcbitcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl9sb2NrLCBmbGFncyk7XFxuK31cXG4rXFxuKy8qIFN0YWdlIEBoZWFkIGZvciB0aGlzIENQVSdzIGlycV93b3JrIHdoZW4gY2FsbF9yY3UoKSBjYW5ub3QgZW5xdWV1ZSBub3cuICovXFxuK3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2cmN1X2RhdGEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSW5zdHJ1bWVudGF0aW9uIG9uIHRoZSBlbnF1ZXVlIHBhdGggY2FuIHJlLWVudGVyIGhlcmUgZnJvbSBpbnNpZGVcXG4rXFx0ICogcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZSBkcmFpbiwgc28gZHJvcCB0aGVcXG4rXFx0ICogY2FsbGJhY2s7IGFuIE5NSSBpcyBvbmUtc2hvdCBhbmQgY2Fubm90IGxvb3AsIHNvIGxldCBpdCB0aHJvdWdoLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRoaXNfY3B1X3JlYWQocmN1X2RlZmVyX2RyYWluaW5nKSBcXHUwMDI2XFx1MDAyNiAhaW5fbm1pKCkpIHtcXG4rXFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJjYWxsX3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdGhlYWQtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbitcXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2hlYWQpKVxcbitcXHRcXHRpcnFfd29ya19xdWV1ZShcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl93b3JrKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmdcXG4rICogcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gIFRoaXMgcnVucyBiZWZvcmUgcmN1X2JhcnJpZXIoKSBzY2FucyB0aGVcXG4rICogbGlzdHMuICBBbiBvbmxpbmUgQ1BVJ3Mgb3duIGlycV93b3JrIHJlLWlzc3VlcyBpdHMgY2FsbGJhY2tzLCBzbyB3YWl0IGl0IG91dDtcXG4rICogYW4gb2ZmbGluZSBDUFUncyBpcnFfd29yayBtYXkgbmV2ZXIgcnVuIGFnYWluLCBzbyBkcmFpbiBpdHMgbGlzdCBkaXJlY3RseVxcbisgKiBvbnRvIHRoaXMgQ1BVIGluc3RlYWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZClcXG4re1xcbitcXHRpbnQgY3B1O1xcbitcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xcbitcXG4rXFx0XFx0aWYgKGNwdV9vbmxpbmUoY3B1KSlcXG4rXFx0XFx0XFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl93b3JrKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRyY3VfZGVmZXJfZHJhaW4oXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfd29yayk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXFxuK3tcXG4rXFx0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cXG4rXFx0V0FSTl9PTl9PTkNFKCh1bnNpZ25lZCBsb25nKWhlYWQgXFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XFxuK1xcbitcXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWZ1bmMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XFxuK1xcdFxcdGNhbGxfcmN1X2RlZmVyKGhlYWQsIGZ1bmMpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSk7XFxuK1xcbitcXHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBmdW5jLCBsYXp5X2luKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19SQ1VfTEFaWVxcbiBzdGF0aWMgYm9vbCBlbmFibGVfcmN1X2xhenkgX19yZWFkX21vc3RseSA9ICFJU19FTkFCTEVEKENPTkZJR19SQ1VfTEFaWV9ERUZBVUxUX09GRik7XFxuIG1vZHVsZV9wYXJhbShlbmFibGVfcmN1X2xhenksIGJvb2wsIDA0NDQpO1xcbkBAIC0zODk2LDggKzM5OTAsMTIgQEAgdm9pZCByY3VfYmFycmllcih2b2lkKVxcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGdzZXE7XFxuIFxcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xcbi1cXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXFx1MDAyNnJjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzO1xcbiBcXG4rXFx0LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gKi9cXG4rXFx0cmN1X2RlZmVyX2ZsdXNoKCk7XFxuK1xcbitcXHRzID0gcmN1X3NlcV9zbmFwKFxcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XFxuIFxcdHJjdV9iYXJyaWVyX3RyYWNlKFRQUyhcXFwiQmVnaW5cXFwiKSwgLTEsIHMpO1xcbiBcXG4gXFx0LyogVGFrZSBtdXRleCB0byBzZXJpYWxpemUgY29uY3VycmVudCByY3VfYmFycmllcigpIHJlcXVlc3RzLiAqL1xcbkBAIC00MjMxLDYgKzQzMjksMTAgQEAgcmN1X2Jvb3RfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1KVxcbiBcXHRyZHAtXFx1MDAzZXJjdV9vbmxfZ3Bfc3RhdGUgPSBSQ1VfR1BfQ0xFQU5FRDtcXG4gXFx0cmRwLVxcdTAwM2VsYXN0X3NjaGVkX2Nsb2NrID0gamlmZmllcztcXG4gXFx0cmRwLVxcdTAwM2VjcHUgPSBjcHU7XFxuK1xcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl9oZWFkKTtcXG4rXFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2xvY2spO1xcbitcXHQvKiBIYXJkIGlycV93b3JrIHNvIHRoZSByZS1pc3N1ZSBydW5zIHByb21wdGx5LiAqL1xcbitcXHRyZHAtXFx1MDAzZWRlZmVyX3dvcmsgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTtcXG4gXFx0cmN1X2Jvb3RfaW5pdF9ub2NiX3BlcmNwdV9kYXRhKHJkcCk7XFxuIH1cXG4gXFxuQEAgLTQ1MjgsNiArNDYzMCwxNiBAQCB2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcXG4gXFx0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihcXHUwMDI2cmN1X2RhdGEsIGNwdSk7XFxuIFxcdGJvb2wgbmVlZHdha2U7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBDYWxsYmFja3MgdGhlIG91dGdvaW5nIENQVSBkZWZlcnJlZCBsYXRlIGluIHRoZSBvZmZsaW5lIHBhdGggKHBhc3QgdGhlXFxuK1xcdCAqIHBvaW50IGl0cyBpcnFfd29yayBjYW4gcnVuKSBzaXQgb24gLVxcdTAwM2VkZWZlcl9oZWFkLCB3aGljaCB0aGUgLVxcdTAwM2VjYmxpc3RcXG4rXFx0ICogbWlncmF0aW9uIGJlbG93IGRvZXMgbm90IGNvdmVyLiAgRHJhaW4gdGhlbSBoZXJlLCBiZWZvcmUgdGhlIGVhcmx5XFxuK1xcdCAqIHJldHVybnM7IHRoZSByZS1pc3N1ZSBsYW5kcyBvbiB0aGlzIENQVS5cXG4rXFx0ICovXFxuK1xcdHJjdV9kZWZlcl9kcmFpbihcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl93b3JrKTtcXG4rXFx0LyogTGlrZXdpc2UgZm9yIHRoZSBvdXRnb2luZyBDUFUncyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3MuICovXFxuK1xcdHNyY3Vfb2ZmbGluZV9kcmFpbihjcHUpO1xcbitcXG4gXFx0aWYgKHJjdV9yZHBfaXNfb2ZmbG9hZGVkKHJkcCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmhcXG5pbmRleCBlZWRmYTQzMDU5ZTgwLi4zYThlMTcxMzZjNWE3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvdHJlZS5oXFxuKysrIGIva2VybmVsL3JjdS90cmVlLmhcXG5AQCAtMjI5LDYgKzIyOSwxMSBAQCBzdHJ1Y3QgcmN1X2RhdGEge1xcbiBcXHRzdHJ1Y3QgcmN1X2hlYWQgYmFycmllcl9oZWFkO1xcbiBcXHRpbnQgZXhwX3dhdGNoaW5nX3NuYXA7XFx0XFx0LyogRG91YmxlLWNoZWNrIG5lZWQgZm9yIElQSS4gKi9cXG4gXFxuK1xcdC8qIERlZmVycmFsIG9mIGFuIE5NSS9yZWVudHJhbnQgY2FsbF9yY3UoKTsgc2VlIF9fY2FsbF9yY3VfY29tbW9uKCkuICovXFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2hlYWQ7XFxuK1xcdHN0cnVjdCBpcnFfd29yayBkZWZlcl93b3JrO1xcbitcXHRyYXdfc3BpbmxvY2tfdCBkZWZlcl9sb2NrO1xcbitcXG4gXFx0LyogNSkgQ2FsbGJhY2sgb2ZmbG9hZGluZy4gKi9cXG4gI2lmZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVcXG4gXFx0c3RydWN0IHN3YWl0X3F1ZXVlX2hlYWQgbm9jYl9jYl93cTsgLyogRm9yIG5vY2Iga3RocmVhZHMgdG8gc2xlZXAgb24uICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNmVjZDkzYmUzMGY0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmNcXG5AQCAtMCwwICsxLDU4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIEV4ZXJjaXNlIHJlLWVudHJ5IGludG8gY2FsbF9zcmN1KCkgZnJvbSBCUEY7IHNlZSBwcm9ncy9yY3VfcmVlbnRyeS5jLiAqL1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcInJjdV9yZWVudHJ5LnNrZWwuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbnQgc3lzX3BpZGZkX29wZW4ocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIHN5c2NhbGwoX19OUl9waWRmZF9vcGVuLCBwaWQsIGZsYWdzKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJjdV9yZWVudHJ5ICpza2VsO1xcbitcXHRpbnQgZXJyLCBwaWRmZCA9IC0xLCBtYXBfZmQ7XFxuK1xcdF9fdTY0IHZhbCA9IDE7XFxuK1xcdGNwdV9zZXRfdCBzZXQ7XFxuK1xcbitcXHRza2VsID0gcmN1X3JlZW50cnlfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gcmN1X3JlZW50cnlfX2F0dGFjaChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2tlbF9hdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBLZWVwIHRoZSByZS1lbnRyeSBvbiBhIHNpbmdsZSBDUFUuICovXFxuK1xcdENQVV9aRVJPKFxcdTAwMjZzZXQpO1xcbitcXHRDUFVfU0VUKDAsIFxcdTAwMjZzZXQpO1xcbitcXHRpZiAoc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFxcdTAwMjZzZXQpKVxcbitcXHRcXHRwZXJyb3IoXFxcInNjaGVkX3NldGFmZmluaXR5XFxcIik7XFxuK1xcbitcXHRwaWRmZCA9IHN5c19waWRmZF9vcGVuKGdldHBpZCgpLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UocGlkZmQsIDAsIFxcXCJwaWRmZF9vcGVuXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRtYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVxcdTAwM2VtYXBzLnRhc2tfc3RnKTtcXG4rXFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFxcdTAwMjZwaWRmZCwgXFx1MDAyNnZhbCwgQlBGX05PRVhJU1QpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJib290X2NyZWF0ZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEFybSB0aGUgaGFuZGxlciBmb3IgdGhpcyB0aHJlYWQsIHRoZW4gdHJpZ2dlciBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRhcmdldF9waWQgPSBzeXNjYWxsKF9fTlJfZ2V0dGlkKTtcXG4rXFx0ZXJyID0gYnBmX21hcF9kZWxldGVfZWxlbShtYXBfZmQsIFxcdTAwMjZwaWRmZCk7XFxuK1xcdEFTU0VSVF9PSyhlcnIsIFxcXCJib290X2RlbGV0ZVxcXCIpO1xcbitcXG4rXFx0LyogT25seSBUcmVlIFNSQ1UgZW5xdWV1ZXMgdmlhIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpOyBza2lwIGVsc2V3aGVyZS4gKi9cXG4rXFx0aWYgKCFza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWhpdHMpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZWVudGVyZWQsIDEsIFxcXCJyZWVudHJ5X2RlZmVycmVkXFxcIik7XFxuK291dDpcXG4rXFx0aWYgKHBpZGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKHBpZGZkKTtcXG4rXFx0cmN1X3JlZW50cnlfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDkyYTkyN2ZmNTFjMFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xcbkBAIC0wLDAgKzEsNDUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogUmUtZW50ZXIgY2FsbF9zcmN1KCkgZnJvbSBhIEJQRiBwcm9ncmFtLiAgZmVudHJ5IG9uIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpXFxuKyAqIGZpcmVzIGluc2lkZSBjYWxsX3NyY3UoKSdzIGVucXVldWUgKHJlYWNoZWQgZnJvbSBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZCgpXFxuKyAqIHdpdGggdGhlIHNyY3VfZGF0YSAtXFx1MDAzZWxvY2sgaGVsZCk7IHRoZSBoYW5kbGVyIHRoZW4gY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKVxcbisgKiAtLSBpdHNlbGYgY2FsbF9zcmN1KCkgb24gcmN1X3Rhc2tzX3RyYWNlX3NyY3Vfc3RydWN0IC0tIHJlLWVudGVyaW5nIHRoZSBzYW1lXFxuKyAqIHNyY3VfZGF0YSBvbiB0aGUgc2FtZSBDUFUuXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UpO1xcbitcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuK1xcdF9fdHlwZShrZXksIGludCk7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xcbit9IHRhc2tfc3RnIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK2ludCB0YXJnZXRfcGlkO1xcbitpbnQgaGl0cztcXG4raW50IHJlZW50ZXJlZDtcXG4rXFxuK1NFQyhcXFwiZmVudHJ5L3JjdV9zZWdjYmxpc3RfZW5xdWV1ZVxcXCIpXFxuK2ludCBCUEZfUFJPRyhyZWVudGVyKVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyO1xcbitcXG4rXFx0aWYgKHJlZW50ZXJlZCB8fCAhdGFyZ2V0X3BpZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRjdXIgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0aWYgKCFjdXIgfHwgY3VyLVxcdTAwM2VwaWQgIT0gdGFyZ2V0X3BpZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBSZS1lbnRlciB2aWEgYSB0YXNrLXN0b3JhZ2UgZGVsZXRlLCB3aGljaCBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqL1xcbitcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2aGl0cywgMSk7XFxuK1xcdGJwZl90YXNrX3N0b3JhZ2VfZ2V0KFxcdTAwMjZ0YXNrX3N0ZywgY3VyLCAwLCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpO1xcbitcXHRicGZfdGFza19zdG9yYWdlX2RlbGV0ZShcXHUwMDI2dGFza19zdGcsIGN1cik7XFxuK1xcbitcXHRyZWVudGVyZWQgPSAxO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1Nzo0OC40MjY5NzM2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg1NDczMDIzNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIlRSQUNFUE9JTlRTXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X29mZmxpbmVfZHJhaW5cIixcbiAgICBcInJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGRlZmVycmVkIFJDVSBhbmQgU1JDVSBjYWxsYmFja3MgdG8gc2FmZWx5IGhhbmRsZSByZS1lbnRyYW50IGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBpbnZvY2F0aW9ucywgc3VjaCBhcyB0aG9zZSBvcmlnaW5hdGluZyBmcm9tIE5NSSBjb250ZXh0cyBvciBCUEYgcHJvZ3JhbXMuIEl0IG1vZGlmaWVzIGNvcmUgUkNVL1NSQ1Ugc3luY2hyb25pemF0aW9uIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyBjYWxsYmFjayBkcmFpbmluZyBtZWNoYW5pc21zLiBUaGlzIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MWJiZTZmOWJkYTMzODc5OWQyZWZhYjA4YzM1YzRlZTdhNmQwNjIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAxNzo1Nzo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuaW5kZXggZmJjZjEzYmMxMmQxNS4uNDcyNzVkMTgyOTY2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXG5AQCAtMTIsNiArMTIsNyBAQFxuICNkZWZpbmUgX0xJTlVYX1NSQ1VfVElOWV9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmtfdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FpdC5oXHUwMDNlXG4gXG4gc3RydWN0IHNyY3Vfc3RydWN0IHtcbkBAIC0yNiw2ICsyNyw4IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgKipzcmN1X2NiX3RhaWw7XHQvKiBQZW5kaW5nIGNhbGxiYWNrczogVGFpbC4gKi9cbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzcmN1X3dvcms7XHQvKiBGb3IgZHJpdmluZyBncmFjZSBwZXJpb2RzLiAqL1xuIFx0c3RydWN0IGlycV93b3JrIHNyY3VfaXJxX3dvcms7XHQvKiBEZWZlciBzY2hlZHVsZV93b3JrKCkgdG8gaXJxIHdvcmsuICovXG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9jYnM7XHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXG4rXHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfaXc7XHRcdC8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovXG4gI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DXG4gXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDtcbiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovXG5AQCAtMzMsNiArMzYsNyBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuIFxuIHZvaWQgc3JjdV9kcml2ZV9ncChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndwKTtcbiB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XG4gXG4gI2RlZmluZSBfX1NSQ1VfU1RSVUNUX0lOSVQobmFtZSwgX19pZ25vcmVkLCBfX19pZ25vcmVkLCBfX19faWdub3JlZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG5AQCAtNDAsNiArNDQsOCBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiBcdC5zcmN1X2NiX3RhaWwgPSBcdTAwMjZuYW1lLnNyY3VfY2JfaGVhZCxcdFx0XHRcdFxcXG4gXHQuc3JjdV93b3JrID0gX19XT1JLX0lOSVRJQUxJWkVSKG5hbWUuc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKSxcdFxcXG4gXHQuc3JjdV9pcnFfd29yayA9IHsgLmZ1bmMgPSBzcmN1X3RpbnlfaXJxX3dvcmsgfSxcdFx0XFxcbitcdC5kZWZlcl9jYnMgPSBMTElTVF9IRUFEX0lOSVQobmFtZS5kZWZlcl9jYnMpLFx0XHRcdFxcXG4rXHQuZGVmZXJfaXcgPSB7IC5mdW5jID0gc3JjdV9kZWZlcl9kcmFpbiB9LFx0XHRcdFx0XFxcbiBcdF9fU1JDVV9ERVBfTUFQX0lOSVQobmFtZSlcdFx0XHRcdFx0XFxcbiB9XG4gXG5AQCAtMTMxLDEwICsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4te1xuLVx0c3luY2hyb25pemVfc3JjdShzc3ApO1xuLX1cbit2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkgeyB9XG4gI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbmluZGV4IDc1ZTU0ZTRmOTYzZmEuLjFjZTc1OWZiNzA5NDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxuQEAgLTEzLDYgKzEzLDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3Vfbm9kZV90cmVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuIFxuIHN0cnVjdCBzcmN1X25vZGU7XG4gc3RydWN0IHNyY3Vfc3RydWN0O1xuQEAgLTQxLDYgKzQzLDggQEAgc3RydWN0IHNyY3VfZGF0YSB7XG4gXHRib29sIHNyY3VfY2JsaXN0X2ludm9raW5nO1x0XHQvKiBJbnZva2luZyB0aGVzZSBDQnM/ICovXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdCBkZWxheV93b3JrO1x0XHQvKiBEZWxheSBmb3IgQ0IgaW52b2tpbmcgKi9cbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1x0XHQvKiBDb250ZXh0IGZvciBDQiBpbnZva2luZy4gKi9cbitcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcdFx0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xuK1x0c3RydWN0IGxsaXN0X25vZGUgZGVmZXJfbGluaztcdFx0LyogTGlua3Mgb250byB0aGUgcGVyLUNQVSBkZWZlcnJhbCBkcmFpbiBsaXN0ICovXG4gXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7XHQvKiBGb3Igc3JjdV9iYXJyaWVyKCkgdXNlLiAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDtcdFx0LyogRm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpIHVzZS4gKi9cbiBcdGludCBzcmN1X2VjX3N0YXRlO1x0XHRcdC8qICBTdGF0ZSBmb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkuICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9LY29uZmlnIGIva2VybmVsL3JjdS9LY29uZmlnXG5pbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9LY29uZmlnXG4rKysgYi9rZXJuZWwvcmN1L0tjb25maWdcbkBAIC0xNzUsNiArMTc1LDEyIEBAIGNvbmZpZyBSQ1VfU1RBTExfQ09NTU9OXG4gY29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVFxuIFx0ZGVmX2Jvb2wgKCBUUkVFX1JDVSB8fCBUUkVFX1NSQ1UgfHwgVEFTS1NfUkNVX0dFTkVSSUMgKVxuIFxuKyMgVGhlIGRlZmVycmFsIChhbmQgdGhlIElSUV9XT1JLIGl0IHVzZXMpIGlzIG9ubHkgbmVlZGVkIHdoZXJlIGNhbGxfcmN1KCkgL1xuKyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuXG4rY29uZmlnIFJDVV9ERUZFUlxuK1x0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcbitcdHNlbGVjdCBJUlFfV09SS1xuK1xuIGNvbmZpZyBSQ1VfRkFOT1VUXG4gXHRpbnQgXCJUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgZmFub3V0IHZhbHVlXCJcbiBcdHJhbmdlIDIgNjQgaWYgNjRCSVRcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdS5oIGIva2VybmVsL3JjdS9yY3UuaFxuaW5kZXggMzlhOWY2ZmE5YTdiMi4uY2EwNWQ0ODc3M2M3OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvcmN1LmhcbisrKyBiL2tlcm5lbC9yY3UvcmN1LmhcbkBAIC01NzIsNiArNTcyLDIzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrc19jYmxpc3RfaW5pdF9nZW5lcmljKHZvaWQpIHsgfVxuICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9JTklUXHQxXG4gI2RlZmluZSBSQ1VfU0NIRURVTEVSX1JVTk5JTkdcdDJcbiBcbisvKlxuKyAqIERlZmVyIGEgY2FsbF9yY3UoKS9jYWxsX3NyY3UoKSBjYWxsYmFjayByYXRoZXIgdGhhbiBlbnF1ZXVlIGl0IG5vdz8gIERlZmVyXG4rICogd2hlbmV2ZXIgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHNpbmNlIGEgY2FsbGJhY2stbGlzdCBvcGVyYXRpb24gbWF5IGJlIGluXG4rICogZmxpZ2h0IG9uIHRoaXMgQ1BVLiAgTm90IHdoaWxlIHRoZSBzY2hlZHVsZXIgaXMgZG93biwgdGhvdWdoOiBpcnFfd29yayBpc1xuKyAqIHVudXNhYmxlIGJlZm9yZSBpbml0X0lSUSgpLCB5ZXQgcmN1X2luaXQoKSBhbHJlYWR5IGNhbGxzIGNhbGxfcmN1KCkuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZClcbit7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBpcnFzX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2IHJjdV9zY2hlZHVsZXJfYWN0aXZlICE9IFJDVV9TQ0hFRFVMRVJfSU5BQ1RJVkU7XG4rfVxuK1xuKy8qIERyYWluIGFuIG91dGdvaW5nIENQVSdzIGRlZmVycmVkIFNSQ1UgY2FsbGJhY2tzOyBzZWUgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLiAqL1xuK3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xuK1xuIGVudW0gcmN1dG9ydHVyZV90eXBlIHtcbiBcdFJDVV9GTEFWT1IsXG4gXHRSQ1VfVEFTS1NfRkxBVk9SLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jIGIva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbmluZGV4IDc5NDkzN2UxM2U3YzMuLjllZDE3YjY0MzYyMGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xuKysrIGIva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbkBAIC00OCw2ICs0OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGljay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25taS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJyY3UuaFwiXG4gXG5AQCAtMTE1LDYgKzExNiw3IEBAIHRvcnR1cmVfcGFyYW0oaW50LCBsZWFrcG9pbnRlciwgMCwgXCJMZWFrIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGZyb20gcmVhZGVyc1wiKTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbl9iYXJyaWVyX2NicywgMCwgXCIjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nXCIpO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBuX3VwX2Rvd24sIDMyLCBcIiMgb2YgY29uY3VycmVudCB1cC9kb3duIGhydGltZXItYmFzZWQgUkNVIHJlYWRlcnNcIik7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5mYWtld3JpdGVycywgNCwgXCJOdW1iZXIgb2YgUkNVIGZha2Ugd3JpdGVyIHRocmVhZHNcIik7XG4rdG9ydHVyZV9wYXJhbShib29sLCBubWlfY2FsbHMsIHRydWUsIFwiRXhlcmNpc2UgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSSBvbiBubWlfY2FwYWJsZSBmbGF2b3JzXCIpO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBucmVhZGVycywgLTEsIFwiTnVtYmVyIG9mIFJDVSByZWFkZXIgdGhyZWFkc1wiKTtcbiB0b3J0dXJlX3BhcmFtKGJvb2wsIG53cml0ZXJzLCAxLCBcIk51bWJlciBvZiBSQ1Ugd3JpdGVyIHRocmVhZHMgKDAgb3IgMSlcIik7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG9iamVjdF9kZWJ1ZywgMCwgXCJFbmFibGUgZGVidWctb2JqZWN0IGRvdWJsZSBjYWxsX3JjdSgpIHRlc3RpbmdcIik7XG5AQCAtMjE2LDYgKzIxOCw4IEBAIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfZmFpbHVyZTtcbiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0cztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVycztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX2lycXM7XG4rc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9ubWlfY2FsbDtcbitzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYjtcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfYXR0ZW1wdHM7XG4gc3RhdGljIGxvbmcgbl9iYXJyaWVyX3N1Y2Nlc3NlczsgLyogZGlkIHJjdV9iYXJyaWVyIHRlc3Qgc3VjY2VlZD8gKi9cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuX3JlYWRfZXhpdHM7XG5AQCAtNDMzLDYgKzQzNyw3IEBAIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMge1xuIFx0Ym9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpO1xuIFx0bG9uZyBjYmZsb29kX21heDtcbiBcdGludCBpcnFfY2FwYWJsZTtcbitcdGludCBubWlfY2FwYWJsZTtcbiBcdGludCBjYW5fYm9vc3Q7XG4gXHRpbnQgZXh0ZW5kYWJsZXM7XG4gXHRpbnQgc2xvd19ncHM7XG5AQCAtNjQ4LDYgKzY1Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHJjdV9vcHMgPSB7XG4gXHQuZXh0ZW5kYWJsZXNcdFx0PSBSQ1VUT1JUVVJFX01BWF9FWFRFTkQsXG4gXHQuZGVidWdfb2JqZWN0c1x0XHQ9IDEsXG4gXHQuc3RhcnRfcG9sbF9pcnFzb2ZmXHQ9IDEsXG4rXHQubm1pX2NhcGFibGVcdFx0PSAxLFxuIFx0Lm5hbWVcdFx0XHQ9IFwicmN1XCJcbiB9O1xuIFxuQEAgLTk0Miw2ICs5NDgsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1X29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbitcdC5ubWlfY2FwYWJsZVx0PSAxLFxuIFx0Lm5hbWVcdFx0PSBcInNyY3VcIlxuIH07XG4gXG5AQCAtMTAwNSw2ICsxMDEyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdWRfb3BzID0ge1xuIFx0LmRlYnVnX29iamVjdHNcdD0gMSxcbiBcdC5oYXZlX3VwX2Rvd25cdD0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKVxuIFx0XHRcdFx0PyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLFxuK1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwic3JjdWRcIlxuIH07XG4gXG5AQCAtMTI2OSw2ICsxMjc3LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgdGFza3NfdHJhY2luZ19vcHMgPSB7XG4gXHQuY2JmbG9vZF9tYXhcdD0gNTAwMDAsXG4gXHQuaXJxX2NhcGFibGVcdD0gMSxcbiBcdC5zbG93X2dwc1x0PSAxLFxuK1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwidGFza3MtdHJhY2luZ1wiXG4gfTtcbiBcbkBAIC0yNjU5LDEyICsyNjY4LDk0IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxuIFxuIHN0YXRpYyBERUZJTkVfVE9SVFVSRV9SQU5ET01fUEVSQ1BVKHJjdV90b3J0dXJlX3RpbWVyX3JhbmQpO1xuIFxuKy8qXG4rICogRXhlcmNpc2UgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgc2V0IC1cdTAwM2VubWlfY2FwYWJsZS4gIEFcbisgKiBwZXItQ1BVIGhhcmR3YXJlIHBlcmYgY291bnRlciBvdmVyZmxvd3MgaW50byBhbiBOTUksIGFuZCBpdHMgaGFuZGxlciBzdWJtaXRzXG4rICogb25lIHByZWFsbG9jYXRlZCBjYWxsYmFjayB2aWEgLVx1MDAzZWNhbGwoKS4gIE9uZSBjYWxsYmFjayBpcyBpbiBmbGlnaHQgYXQgYSB0aW1lXG4rICogKGd1YXJkZWQgYnkgYW4gYXRvbWljKSB0byBhdm9pZCBhbGxvY2F0aW5nIGluIE5NSS4gIFRoaXMgbWlycm9ycyBob3cgYSBCUEZcbisgKiBwcm9ncmFtIHJlYWNoZXMgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSS5cbisgKi9cbisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG4rc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgcmN1X3RvcnR1cmVfbm1pX2F0dHIgPSB7XG4rXHQudHlwZVx0XHQ9IFBFUkZfVFlQRV9IQVJEV0FSRSxcbitcdC5jb25maWdcdFx0PSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXG4rXHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyKSxcbitcdC5waW5uZWRcdFx0PSAxLFxuK1x0LmRpc2FibGVkXHQ9IDEsXG4rXHQuZnJlcVx0XHQ9IDEsXG4rXHQuc2FtcGxlX2ZyZXFcdD0gMTAwMCxcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudCAqKnJjdV90b3J0dXJlX25taV9ldmVudHM7XG4rc3RhdGljIHN0cnVjdCByY3VfaGVhZCByY3VfdG9ydHVyZV9ubWlfcmg7XG4rc3RhdGljIGF0b21pY190IHJjdV90b3J0dXJlX25taV9yaF9pbnVzZTtcbitcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApXG4re1xuK1x0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKTtcbitcdGF0b21pY19zZXQoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoX2ludXNlLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbitcdFx0XHRcdCAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuK3tcbitcdGlmICghaW5fbm1pKCkpXG4rXHRcdHJldHVybjtcbitcdGlmIChjdXJfb3BzLVx1MDAzZWNhbGwgXHUwMDI2XHUwMDI2ICFhdG9taWNfeGNoZyhcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDEpKSB7XG4rXHRcdGN1cl9vcHMtXHUwMDNlY2FsbChcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmgsIHJjdV90b3J0dXJlX25taV9jYik7XG4rXHRcdGF0b21pY19sb25nX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XG4rXHRpbnQgY3B1O1xuK1xuK1x0aWYgKCFubWlfY2FsbHMgfHwgIWN1cl9vcHMtXHUwMDNlbm1pX2NhcGFibGUgfHwgIWN1cl9vcHMtXHUwMDNlY2FsbClcbitcdFx0cmV0dXJuO1xuK1x0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCpyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKSxcbitcdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuK1x0aWYgKCFyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKVxuK1x0XHRyZXR1cm47XG4rXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xuK1x0XHRldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKFx1MDAyNnJjdV90b3J0dXJlX25taV9hdHRyLCBjcHUsXG4rXHRcdFx0XHRcdFx0XHQgTlVMTCwgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93LCBOVUxMKTtcbitcdFx0aWYgKElTX0VSUihldmVudCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSA9IGV2ZW50O1xuK1x0XHRwZXJmX2V2ZW50X2VuYWJsZShldmVudCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpXG4re1xuK1x0aW50IGNwdTtcbitcbitcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cylcbitcdFx0cmV0dXJuO1xuK1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuK1x0XHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0cGVyZl9ldmVudF9kaXNhYmxlKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7XG4rXHRcdHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwocmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKTtcbitcdH1cbitcdGtmcmVlKHJjdV90b3J0dXJlX25taV9ldmVudHMpO1xuK1x0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IE5VTEw7XG4rfVxuKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi9cbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKSB7IH1cbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2xlYW51cCh2b2lkKSB7IH1cbisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqL1xuK1xuIC8qXG4gICogUkNVIHRvcnR1cmUgcmVhZGVyIGZyb20gdGltZXIgaGFuZGxlci4gIERlcmVmZXJlbmNlcyByY3VfdG9ydHVyZV9jdXJyZW50LFxuICAqIGluY3JlbWVudGluZyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBwaXBlbGluZSBhcnJheS4gIFRoZVxuICAqIGNvdW50ZXIgaW4gdGhlIGVsZW1lbnQgc2hvdWxkIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAxLCBvdGhlcndpc2UsIHRoZVxuICAqIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyBicm9rZW4uXG4gICovXG4rXG4gc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnVudXNlZClcbiB7XG4gXHRXQVJOX09OX09OQ0UoIWluX3NlcnZpbmdfc29mdGlycSgpKTtcbkBAIC0zMDQ3LDYgKzMxMzgsOSBAQCByY3VfdG9ydHVyZV9zdGF0c19wcmludCh2b2lkKVxuIFx0XHRkYXRhX3JhY2Uobl9iYXJyaWVyX2F0dGVtcHRzKSxcbiBcdFx0ZGF0YV9yYWNlKG5fcmN1X3RvcnR1cmVfYmFycmllcl9lcnJvcikpO1xuIFx0cHJfY29udChcInJlYWQtZXhpdHM6ICVsZCBcIiwgZGF0YV9yYWNlKG5fcmVhZF9leGl0cykpOyAvLyBTdGF0aXN0aWMuXG4rXHRwcl9jb250KFwibm1pLWNhbGxzOiAlbGQgbm1pLWNiczogJWxkIFwiLFxuK1x0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxuK1x0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XG4gXHRwcl9jb250KFwibm9jYi10b2dnbGVzOiAlbGQ6JWxkIFwiLFxuIFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fbm9jYl9vZmZsb2FkKSwgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX25vY2JfZGVvZmZsb2FkKSk7XG4gXHRwcl9jb250KFwiZ3B3cmFwczogJWxkXFxuXCIsIG5fZ3B3cmFwcyk7XG5AQCAtNDMyNSw2ICs0NDE5LDggQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxuIFx0XHRrZnJlZShyZWFkZXJfdGFza3MpO1xuIFx0XHRyZWFkZXJfdGFza3MgPSBOVUxMO1xuIFx0fVxuK1x0LyogRGlzYWJsZSB0aGUgcGVyZiBjb3VudGVycyAoYW5kIHRodXMgdGhlIE5NSSAtXHUwMDNlY2FsbCgpIGZpcmluZykgbm93LiAqL1xuK1x0cmN1X3RvcnR1cmVfbm1pX2NsZWFudXAoKTtcbiBcdGtmcmVlKHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoayk7XG4gXHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGsgPSBOVUxMO1xuIFxuQEAgLTQzNTQsNiArNDQ1MCwyMCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXG4gXHRcdHByX2luZm8oXCIlczogSW52b2tpbmcgJXBTKCkuXFxuXCIsIF9fZnVuY19fLCBjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIpO1xuIFx0XHRjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIoKTtcbiBcdH1cbitcbitcdC8qXG4rXHQgKiBjYl9iYXJyaWVyKCkgYWJvdmUgZHJhaW5lZCBldmVyeSBkZWZlcnJlZCBOTUkgLVx1MDAzZWNhbGwoKSBjYWxsYmFjaywgc28gdGhlXG4rXHQgKiBjb3VudCBpc3N1ZWQgZnJvbSBOTUkgbXVzdCBlcXVhbCB0aGUgY291bnQgaW52b2tlZDsgYSBtaXNtYXRjaCBtZWFucyBhXG4rXHQgKiBjYWxsYmFjayB3YXMgbG9zdC5cbitcdCAqL1xuK1x0aWYgKGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCkgIT1cbitcdCAgICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSkge1xuK1x0XHRwcl9hbGVydChcIiVzOiBOTUkgLVx1MDAzZWNhbGwoKSBsb3N0IGEgY2FsbGJhY2s6IGlzc3VlZCAlbGQgaW52b2tlZCAlbGRcXG5cIixcbitcdFx0XHQgX19mdW5jX18sIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksXG4rXHRcdFx0IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpKTtcbitcdFx0YXRvbWljX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX2Vycm9yKTtcbitcdH1cbitcbiBcdGlmIChjdXJfb3BzLVx1MDAzZWNsZWFudXAgIT0gTlVMTClcbiBcdFx0Y3VyX29wcy1cdTAwM2VjbGVhbnVwKCk7XG4gXG5AQCAtNDc4Niw2ICs0ODk2LDggQEAgcmN1X3RvcnR1cmVfaW5pdCh2b2lkKVxuIFx0XHRmaXJzdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gdW53aW5kO1xuIFx0fVxuK1x0LyogQXJtIHRoZSBwZXItQ1BVIHBlcmYgY291bnRlcnMgdGhhdCBkcml2ZSAtXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAqL1xuK1x0cmN1X3RvcnR1cmVfbm1pX2luaXQoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWFscmVhZGVyczsgaSsrKSB7XG4gXHRcdHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoa1tpXS5ydGNfY2hrcmRyID0gLTE7XG4gXHRcdGZpcnN0ZXJyID0gdG9ydHVyZV9jcmVhdGVfa3RocmVhZChyY3VfdG9ydHVyZV9yZWFkZXIsICh2b2lkICopaSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbmluZGV4IDU1OGJhOGQzMTZkYjYuLmEwYTkxZjdmYzI1OGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuQEAgLTEwLDYgKzEwLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWVtcHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuQEAgLTQzLDYgKzQ0LDggQEAgc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdElOSVRfV09SSyhcdTAwMjZzc3AtXHUwMDNlc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3dvcmsuZW50cnkpO1xuIFx0aW5pdF9pcnFfd29yayhcdTAwMjZzc3AtXHUwMDNlc3JjdV9pcnFfd29yaywgc3JjdV90aW55X2lycV93b3JrKTtcbitcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKTtcbitcdGluaXRfaXJxX3dvcmsoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2l3LCBzcmN1X2RlZmVyX2RyYWluKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC04Niw2ICs4OSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7XG4gdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIHtcbiBcdFdBUk5fT04oc3JjdV9yZWFkZXJzX2FjdGl2ZShzc3ApKTtcbitcdC8qIFJlLWlzc3VlIGFueSBkZWZlcnJlZCBjYWxsYmFja3Mgc28gLVx1MDAzZXNyY3VfY2JfaGVhZCBzZWVzIHRoZW0gYmVsb3cuICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbitcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuIFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlc3JjdV9pcnFfd29yayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3dvcmspO1xuIFx0V0FSTl9PTihzc3AtXHUwMDNlc3JjdV9ncF9ydW5uaW5nKTtcbkBAIC0yMTMsMTEgKzIxOSwxMSBAQCBzdGF0aWMgdm9pZCBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB9XG4gXG4gLypcbi0gKiBFbnF1ZXVlIGFuIFNSQ1UgY2FsbGJhY2sgb24gdGhlIHNwZWNpZmllZCBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUsXG4tICogaW5pdGlhdGluZyBncmFjZS1wZXJpb2QgcHJvY2Vzc2luZyBpZiBpdCBpcyBub3QgYWxyZWFkeSBydW5uaW5nLlxuKyAqIEVucXVldWUgQHJocCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHNyY3VfZGVmZXJfZHJhaW4oKSB0b1xuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXG4gICovXG4tdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuLVx0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4rc3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbitcdFx0XHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuQEAgLTIzMSw2ICsyMzcsNDYgQEAgdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuIFx0c3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwKTtcbiBcdHByZWVtcHRfZW5hYmxlKCk7XG4gfVxuK1xuKy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXG4rc3RhdGljIGJvb2wgc3JjdV9kZWZlcl9kcmFpbmluZztcbitcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbit7XG4rXHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3Vfc3RydWN0LCBkZWZlcl9pdyk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4rXG4rXHQvKiBDYWxsYmFja3MgYXJlIHVub3JkZXJlZCwgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuICovXG4rXHRzcmN1X2RlZmVyX2RyYWluaW5nID0gdHJ1ZTtcbitcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKSkge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKnJocCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xuK1xuK1x0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jKTtcbitcdH1cbitcdHNyY3VfZGVmZXJfZHJhaW5pbmcgPSBmYWxzZTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9kZWZlcl9kcmFpbik7XG4rXG4rdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuK1x0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4re1xuK1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuK1x0XHQvKiBBIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkgZHVyaW5nIHRoZSBkcmFpbiB3b3VsZCBsaXZlbG9jayBpdC4gKi9cbitcdFx0aWYgKHNyY3VfZGVmZXJfZHJhaW5pbmcgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuK1x0XHRcdFdBUk5fT05DRSgxLCBcImNhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCIpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRyaHAtXHUwMDNlZnVuYyA9IGZ1bmM7XG4rXHRcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCBcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKSlcbitcdFx0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbitcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSk7XG4rXG4rXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMpO1xuK31cbiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3NyY3UpO1xuIFxuIC8qXG5AQCAtMjYwLDYgKzMwNiwxNSBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xuIFxuKy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBmb3IgYWxsIGluLWZsaWdodCBvbmVzLiAqL1xuK3ZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuK3tcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRpcnFfd29ya19zeW5jKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9pdyk7XG4rXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XG4rXG4gLypcbiAgKiBnZXRfc3RhdGVfc3luY2hyb25pemVfc3JjdSAtIFByb3ZpZGUgYW4gZW5kLW9mLWdyYWNlLXBlcmlvZCBjb29raWVcbiAgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcbmluZGV4IDMwNDExMjY3NGU4YTIuLjI2Njk1OTRhNjQwMmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJjcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWVtcHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NtcC5oXHUwMDNlXG5AQCAtNzksNiArODAsNDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19zcmN1KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gc3RhdGljIHZvaWQgc3JjdV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspO1xuIHN0YXRpYyB2b2lkIHNyY3VfZGVsYXlfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuIFxuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4rXG4rLypcbisgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLCBzaGFyZWQgYnkgZXZlcnkgc3JjdV9zdHJ1Y3QuICBBIGRlZmVycmVkXG4rICogY2FsbGJhY2sgaXMgc3RhZ2VkIG9uIGl0cyBzcmN1X2RhdGEncyAtXHUwMDNlZGVmZXJfY2JzOyB0aGF0IHNyY3VfZGF0YSBpcyBjaGFpbmVkXG4rICogdmlhIC1cdTAwM2VkZWZlcl9saW5rIG9udG8gLVx1MDAzZWxpc3QsIHdoaWNoIHRoZSBpcnFfd29yayB3YWxrcy5cbisgKi9cbitzdHJ1Y3Qgc3JjdV9kZWZlciB7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZFx0bGlzdDtcbitcdHN0cnVjdCBpcnFfd29ya1x0XHRpdztcbitcdHJhd19zcGlubG9ja190XHRcdGxvY2s7XG4rfTtcbitcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNyY3VfZGVmZXIsIHNyY3VfZGVmZXIpID0ge1xuK1x0LmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoc3JjdV9kZWZlci5sb2NrKSxcbitcdC5pdyA9IElSUV9XT1JLX0lOSVRfSEFSRChzcmN1X2RlZmVyX2RyYWluKSxcbit9O1xuK1xuKy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXG4rc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIHNyY3VfZGVmZXJfZHJhaW5pbmcpO1xuK1xuKy8qXG4rICogRmx1c2ggcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgc3JjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uXG4rICogV2FpdCBvdXQgYW4gb25saW5lIENQVSdzIGlycV93b3JrOyBkcmFpbiBhbiBvZmZsaW5lIENQVSdzIGxpc3QgZGlyZWN0bHksIGFzXG4rICogaXRzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4uXG4rICovXG4rc3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKVxuK3tcbitcdGludCBjcHU7XG4rXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybjtcbitcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbitcdFx0aWYgKGNwdV9vbmxpbmUoY3B1KSlcbitcdFx0XHRpcnFfd29ya19zeW5jKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XG4rXHRcdGVsc2VcbitcdFx0XHRzcmN1X2RlZmVyX2RyYWluKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogSW5pdGlhbGl6ZSBTUkNVIHBlci1DUFUgZGF0YS4gIE5vdGUgdGhhdCBzdGF0aWNhbGx5IGFsbG9jYXRlZFxuICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgbWlnaHQgYWxyZWFkeSBoYXZlIHNyY3VfcmVhZF9sb2NrKCkgYW5kXG5AQCAtMTA3LDYgKzE0OSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3NyY3Vfc3RydWN0X2RhdGEoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRcdHNkcC1cdTAwM2VjcHUgPSBjcHU7XG4gXHRcdElOSVRfV09SSyhcdTAwMjZzZHAtXHUwMDNld29yaywgc3JjdV9pbnZva2VfY2FsbGJhY2tzKTtcbiBcdFx0dGltZXJfc2V0dXAoXHUwMDI2c2RwLVx1MDAzZWRlbGF5X3dvcmssIHNyY3VfZGVsYXlfdGltZXIsIDApO1xuK1x0XHQvKlxuK1x0XHQgKiAtXHUwMDNlZGVmZXJfY2JzIGFuZCAtXHUwMDNlZGVmZXJfbGluayBhcmUgdmFsaWQgd2hlbiB6ZXJvZWQgYW5kIGFyZSBub3RcbitcdFx0ICogcmVpbml0aWFsaXplZCBoZXJlLCBsZXN0IHdlIGNsb2JiZXIgY2FsbGJhY2tzIGEgcmVlbnRyYW50XG4rXHRcdCAqIGNhbGxfc3JjdSgpIGFscmVhZHkgc3RhZ2VkLiAgU2VlIF9fY2FsbF9zcmN1KCkuXG4rXHRcdCAqL1xuIFx0XHRzZHAtXHUwMDNlc3NwID0gc3NwO1xuIFx0fVxuIH1cbkBAIC02OTUsNyArNzQyLDEyIEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdFx0cmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovXG4gXHRpZiAoV0FSTl9PTihzcmN1X3JlYWRlcnNfYWN0aXZlKHNzcCkpKVxuIFx0XHRyZXR1cm47IC8qIEp1c3QgbGVhayBpdCEgKi9cbi1cdC8qIFdhaXQgZm9yIGlycV93b3JrIHRvIGZpbmlzaCBmaXJzdCBhcyBpdCBtYXkgcXVldWUgYSBuZXcgd29yay4gKi9cbitcdC8qXG4rXHQgKiBEcmFpbiBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHN5bmNpbmcgLVx1MDAzZWlycV93b3JrOiByZS1pc3N1aW5nIG9uZSBjYW5cbitcdCAqIHN0YXJ0IGEgZ3JhY2UgcGVyaW9kIGFuZCByZS1xdWV1ZSAtXHUwMDNlaXJxX3dvcmssIHdoaWNoIHRoZW4gc2NoZWR1bGVzXG4rXHQgKiAtXHUwMDNld29yaywgc28gYm90aCBtdXN0IGJlIHdhaXRlZCBvdXQgYWZ0ZXIgdGhlIGRyYWluLlxuK1x0ICovXG4rXHRzcmN1X2RlZmVyX2ZsdXNoKCk7XG4gXHRpcnFfd29ya19zeW5jKFx1MDAyNnN1cC1cdTAwM2VpcnFfd29yayk7XG4gXHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c3VwLVx1MDAzZXdvcmspO1xuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuQEAgLTE0MTAsOCArMTQ2MiwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCxcbiAgKiBzcmN1X3JlYWRfbG9jaygpLCBhbmQgc3JjdV9yZWFkX3VubG9jaygpIHRoYXQgYXJlIGFsbCBwYXNzZWQgdGhlIHNhbWVcbiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUuXG4gICovXG4tc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuLVx0XHRcdHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcbisvKlxuKyAqIFRoZSBzcmN1X2NibGlzdCBhbmQgc3JjdV9ub2RlIHRyZWUgYXJlIG9ubHkgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkXG4rICogKHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkgZW5xdWV1ZXMgdW5kZXIgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgYW5kIG1heSB3YWxrXG4rICogdGhlIHRyZWUpLiAgTGlrZSBjYWxsX3JjdSgpLCBfX2NhbGxfc3JjdSgpIGRlZmVycyB3aGVuIGludGVycnVwdHMgYXJlIGFscmVhZHlcbisgKiBkaXNhYmxlZCwgc28gYSByZS1lbnRyYW50IGNhbGxfc3JjdSgpIC0tIGUuZy4gY2FsbF9yY3VfdGFza3NfdHJhY2UoKSBmcm9tIGFcbisgKiBCUEYgcHJvZ3JhbSAtLSBjYW5ub3QgY29ycnVwdCB0aGUgbGlzdCBvciBkZWFkbG9jay5cbisgKi9cbitzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuK1x0XHRcdCAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXG4ge1xuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHtcbiBcdFx0LyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi9cbkBAIC0xNDIzLDYgKzE0ODIsODEgQEAgc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuIFx0KHZvaWQpc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwLCByaHAsIGRvX25vcm0pO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4rXHRcdFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuK3tcbitcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbitcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tXG4rXHRcdCAqIGluc2lkZSBzcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZVxuK1x0XHQgKiBkcmFpbiwgc28gZHJvcCB0aGUgY2FsbGJhY2s7IGFuIE5NSSBjYW5ub3QgbG9vcCwgc28gbGV0IGl0IGluLlxuK1x0XHQgKi9cbitcdFx0aWYgKHRoaXNfY3B1X3JlYWQoc3JjdV9kZWZlcl9kcmFpbmluZykgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuK1x0XHRcdFdBUk5fT05DRSgxLCBcImNhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCIpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRzZHAgPSB0aGlzX2NwdV9wdHIoc3NwLVx1MDAzZXNkYSk7XG4rXHRcdHJocC1cdTAwM2VmdW5jID0gZnVuYztcbitcdFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpKSB7XG4rXHRcdFx0LyogRmlyc3QgZGVmZXJyYWwgb24gdGhpcyBzcmN1X2RhdGE6IGNoYWluIGl0IGZvciB0aGUgZHJhaW4uICovXG4rXHRcdFx0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSB0aGlzX2NwdV9wdHIoXHUwMDI2c3JjdV9kZWZlcik7XG4rXG4rXHRcdFx0c2RwLVx1MDAzZXNzcCA9IHNzcDtcbitcdFx0XHRpZiAobGxpc3RfYWRkKFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9saW5rLCBcdTAwMjZzbmRwLVx1MDAzZWxpc3QpKVxuK1x0XHRcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2c25kcC1cdTAwM2Vpdyk7XG4rXHRcdH1cbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXG4rXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuK1xuK1x0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jLCBkb19ub3JtKTtcbit9XG4rXG4rLypcbisgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc28gdGhleSBjYW5ub3QgZGVmZXJcbisgKiBhZ2Fpbi4gIC1cdTAwM2Vsb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGUgaXJxX3dvcmssIHNyY3VfZGVmZXJfZmx1c2goKSBhbmRcbisgKiBzcmN1X29mZmxpbmVfZHJhaW4oKS5cbisgKi9cbitzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4re1xuK1x0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqc25vZGUsICpzbmV4dDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHR0aGlzX2NwdV93cml0ZShzcmN1X2RlZmVyX2RyYWluaW5nLCB0cnVlKTtcbitcdGxsaXN0X2Zvcl9lYWNoX3NhZmUoc25vZGUsIHNuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnNuZHAtXHUwMDNlbGlzdCkpIHtcbitcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwID0gY29udGFpbmVyX29mKHNub2RlLCBzdHJ1Y3Qgc3JjdV9kYXRhLCBkZWZlcl9saW5rKTtcbitcdFx0c3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBzZHAtXHUwMDNlc3NwO1xuK1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqY25vZGUsICpjbmV4dDtcbitcbitcdFx0Y25vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpO1xuK1x0XHRsbGlzdF9mb3JfZWFjaF9zYWZlKGNub2RlLCBjbmV4dCwgY25vZGUpIHtcbitcdFx0XHRzdHJ1Y3QgcmN1X2hlYWQgKnJocCA9IChzdHJ1Y3QgcmN1X2hlYWQgKiljbm9kZTtcbitcbitcdFx0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jLCB0cnVlKTtcbitcdFx0fVxuK1x0fVxuK1x0dGhpc19jcHVfd3JpdGUoc3JjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rfVxuK1xuKy8qXG4rICogRHJhaW4gQGNwdSdzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcyBmcm9tIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKVxuKyAqIG9uY2UgQGNwdSBpcyBkZWFkLiAgT25lIHBhc3MgY292ZXJzIGV2ZXJ5IHNyY3Vfc3RydWN0LCBhbmQgdGhlIHJlLWlzc3VlIGxhbmRzXG4rICogb24gdGhlIGN1cnJlbnQgQ1BVLlxuKyAqL1xuK3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpXG4re1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXHRzcmN1X2RlZmVyX2RyYWluKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XG4rfVxuK1xuIC8qKlxuICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZFxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IGluIHF1ZXVlIHRoZSBjYWxsYmFja1xuQEAgLTE2NzcsOSArMTgxMSwxNyBAQCB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB7XG4gXHRpbnQgY3B1O1xuIFx0aW50IGlkeDtcbi1cdHVuc2lnbmVkIGxvbmcgcyA9IHJjdV9zZXFfc25hcChcdTAwMjZzc3AtXHUwMDNlc3JjdV9zdXAtXHUwMDNlc3JjdV9iYXJyaWVyX3NlcSk7XG4rXHR1bnNpZ25lZCBsb25nIHM7XG4gXG4gXHRjaGVja19pbml0X3NyY3Vfc3RydWN0KHNzcCk7XG4rXG4rXHQvKlxuK1x0ICogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gIFRoZVxuK1x0ICogc2hhcmVkIGlycV93b3JrIG1heSBhbHNvIGRyYWluIG90aGVyIHNyY3Vfc3RydWN0cycsIHdoaWNoIGlzIGhhcm1sZXNzLlxuK1x0ICovXG4rXHRzcmN1X2RlZmVyX2ZsdXNoKCk7XG4rXG4rXHRzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9tdXRleCk7XG4gXHRpZiAocmN1X3NlcV9kb25lKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxLCBzKSkge1xuIFx0XHRzbXBfbWIoKTsgLyogRm9yY2Ugb3JkZXJpbmcgZm9sbG93aW5nIHJldHVybi4gKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RpbnkuYyBiL2tlcm5lbC9yY3UvdGlueS5jXG5pbmRleCBkY2NjY2Q2YmU5NDExLi41NzM2Yjk2NGQ4ZWUxIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90aW55LmNcbisrKyBiL2tlcm5lbC9yY3UvdGlueS5jXG5AQCAtMTEsNiArMTEsOCBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbkBAIC00Miw4ICs0NCw4NiBAQCBzdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0ge1xuIFx0LmdwX3NlcVx0XHQ9IDAgLSAzMDBVTCxcbiB9O1xuIFxuKy8qXG4rICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKVxuKyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIHN0YWdlcyB0aGUgY2FsbGJhY2sgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXRcbisgKiBhbiBpcnFfd29yayByZS1pc3N1ZXMgbGF0ZXIuICBPbmUgZ2xvYmFsIGxpc3QgYW5kIGlycV93b3JrIHN1ZmZpY2UsIGFzIFRpbnlcbisgKiBSQ1UgaXMgdW5pcHJvY2Vzc29yLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbitzdGF0aWMgTExJU1RfSEVBRChyY3VfZGVmZXJfbGlzdCk7XG4rc3RhdGljIERFRklORV9JUlFfV09SSyhyY3VfZGVmZXJfaXcsIHJjdV9kZWZlcl9kcmFpbik7XG4rc3RhdGljIGJvb2wgcmN1X2RlZmVyX2RyYWluaW5nO1xuK1xuKy8qXG4rICogRW5xdWV1ZSBAaGVhZCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpIHRvXG4rICogcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsIGNvbmRpdGlvbi5cbisgKi9cbitzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4re1xuK1x0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xuK1x0XHRpZiAoYXRvbWljX2luY19yZXR1cm4oXHUwMDI2ZG91YmxlZnJlZXMpIFx1MDAzYyA0KSB7XG4rXHRcdFx0cHJfZXJyKFwiJXMoKTogRG91YmxlLWZyZWVkIENCICVwLVx1MDAzZSVwUygpISEhICBcIiwgX19mdW5jX18sIGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4rXHRcdFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xuK1x0XHR9XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4rXHRoZWFkLVx1MDAzZW5leHQgPSBOVUxMO1xuK1xuK1x0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuK1x0KnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkO1xuK1x0cmN1X2N0cmxibGsuY3VydGFpbCA9IFx1MDAyNmhlYWQtXHUwMDNlbmV4dDtcbitcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbitcbitcdGlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7XG4rXHRcdC8qIGZvcmNlIHNjaGVkdWxpbmcgZm9yIHJjdV9xcygpICovXG4rXHRcdHJlc2NoZWRfY3B1KDApO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbit7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4rXG4rXHQvKiBDYWxsYmFja3MgYXJlIHVub3JkZXJlZCwgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuICovXG4rXHRyY3VfZGVmZXJfZHJhaW5pbmcgPSB0cnVlO1xuK1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJjdV9kZWZlcl9saXN0KSkge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbitcbitcdFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cdTAwM2VmdW5jKTtcbitcdH1cbitcdHJjdV9kZWZlcl9kcmFpbmluZyA9IGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4re1xuK1x0LyogQSByZS1lbnRyYW50IGNhbGxfcmN1KCkgZHVyaW5nIHRoZSBkcmFpbiB3b3VsZCBsaXZlbG9jayBpdDsgZHJvcCBpdC4gKi9cbitcdGlmIChyY3VfZGVmZXJfZHJhaW5pbmcgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuK1x0XHRXQVJOX09OQ0UoMSwgXCJjYWxsX3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuK1x0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcdTAwMjZyY3VfZGVmZXJfbGlzdCkpXG4rXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnJjdV9kZWZlcl9pdyk7XG4rfVxuK1xuKy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gKi9cbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZClcbit7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybjtcbitcdGlycV93b3JrX3N5bmMoXHUwMDI2cmN1X2RlZmVyX2l3KTtcbit9XG4rXG4gdm9pZCByY3VfYmFycmllcih2b2lkKVxuIHtcbitcdC8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgZmlyc3QuICovXG4rXHRyY3VfZGVmZXJfZmx1c2goKTtcbiBcdHdhaXRfcmN1X2dwKGNhbGxfcmN1X2h1cnJ5KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChyY3VfYmFycmllcik7XG5AQCAtMTU3LDI5ICsyMzcsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTtcbiAgKi9cbiB2b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4tXHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVxuLVx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4tXHRcdGlmIChhdG9taWNfaW5jX3JldHVybihcdTAwMjZkb3VibGVmcmVlcykgXHUwMDNjIDQpIHtcbi1cdFx0XHRwcl9lcnIoXCIlcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtXHUwMDNlJXBTKCkhISEgIFwiLCBfX2Z1bmNfXywgaGVhZCwgaGVhZC1cdTAwM2VmdW5jKTtcbi1cdFx0XHRtZW1fZHVtcF9vYmooaGVhZCk7XG4tXHRcdH1cbitcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbitcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4tXHRoZWFkLVx1MDAzZW5leHQgPSBOVUxMO1xuLVxuLVx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuLVx0KnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkO1xuLVx0cmN1X2N0cmxibGsuY3VydGFpbCA9IFx1MDAyNmhlYWQtXHUwMDNlbmV4dDtcbi1cdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbitcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuK1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbiBcbi1cdGlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7XG4tXHRcdC8qIGZvcmNlIHNjaGVkdWxpbmcgZm9yIHJjdV9xcygpICovXG4tXHRcdHJlc2NoZWRfY3B1KDApO1xuLVx0fVxuK1x0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuYyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5pbmRleCA5Njg0OGZjMWYwMmI4Li5lMjFlYjU1MWIxMTBlIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcbisrKyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5AQCAtMjQsNiArMjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2RlYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ubWkuaFx1MDAzZVxuQEAgLTMxNDgsMjEgKzMxNDksMjggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2Jfb3ZsZChzdHJ1Y3QgcmN1X2RhdGEgKnJkcClcbiBcdHJhd19zcGluX3VubG9ja19yY3Vfbm9kZShybnApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZFxuLV9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuKy8qXG4rICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKVxuKyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIChzZWUgc2hvdWxkX3JjdV9kZWZlcigpKSBzdGFnZXMgdGhlIGNhbGxiYWNrXG4rICogb24gYSBwZXItQ1BVIGxsaXN0IHRoYXQgYW4gaXJxX3dvcmsgcmUtaXNzdWVzIG9uY2UgaW50ZXJydXB0cyBhcmUgb24uXG4rICovXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xuK1xuKy8qIFNldCB3aGlsZSByY3VfZGVmZXJfZHJhaW4oKSByZS1pc3N1ZXMsIHRvIGNhdGNoIGEgcmUtZW50cmFudCBjYWxsX3JjdSgpLiAqL1xuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCByY3VfZGVmZXJfZHJhaW5pbmcpO1xuK1xuKy8qXG4rICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSdzIHJjdV9zZWdjYmxpc3QuICBBbHNvIGNhbGxlZCBieSByY3VfZGVmZXJfZHJhaW4oKVxuKyAqIHRvIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbFxuKyAqIGNvbmRpdGlvbi4gIEVpdGhlciBjYWxsZXIgbWF5IGhhdmUgaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuIHtcbiBcdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRib29sIGxhenk7XG4gXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcDtcbiBcbi1cdC8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovXG4tXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcdTAwMjYgKHNpemVvZih2b2lkICopIC0gMSkpO1xuLVxuLVx0LyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqL1xuLVx0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXG4tXHRcdHJldHVybjtcbi1cbiBcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9yY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suXG5AQCAtMzIwNiw2ICszMjE0LDkyIEBAIF9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbiBcbisvKlxuKyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdCBkZWZlclxuKyAqIGFnYWluLiAgLVx1MDAzZWRlZmVyX2xvY2sgc2VyaWFsaXplcyB0aGUgZHJhaW5lcnM6IHRoaXMgQ1BVJ3MgaXJxX3dvcmssXG4rICogcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS5cbisgKi9cbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbit7XG4rXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHJjdV9kYXRhLCBkZWZlcl93b3JrKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlLCAqbmV4dDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcbitcdHRoaXNfY3B1X3dyaXRlKHJjdV9kZWZlcl9kcmFpbmluZywgdHJ1ZSk7XG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2hlYWQpKSB7XG4rXHRcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xuK1xuK1x0XHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBoZWFkLVx1MDAzZWZ1bmMsIGZhbHNlKTtcbitcdH1cbitcdHRoaXNfY3B1X3dyaXRlKHJjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4rLyogU3RhZ2UgQGhlYWQgZm9yIHRoaXMgQ1BVJ3MgaXJxX3dvcmsgd2hlbiBjYWxsX3JjdSgpIGNhbm5vdCBlbnF1ZXVlIG5vdy4gKi9cbitzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4re1xuK1x0c3RydWN0IHJjdV9kYXRhICpyZHAgPSB0aGlzX2NwdV9wdHIoXHUwMDI2cmN1X2RhdGEpO1xuK1xuK1x0LypcbitcdCAqIEluc3RydW1lbnRhdGlvbiBvbiB0aGUgZW5xdWV1ZSBwYXRoIGNhbiByZS1lbnRlciBoZXJlIGZyb20gaW5zaWRlXG4rXHQgKiByY3VfZGVmZXJfZHJhaW4oKS4gIFJlLXF1ZXVpbmcgd291bGQgbGl2ZWxvY2sgdGhlIGRyYWluLCBzbyBkcm9wIHRoZVxuK1x0ICogY2FsbGJhY2s7IGFuIE5NSSBpcyBvbmUtc2hvdCBhbmQgY2Fubm90IGxvb3AsIHNvIGxldCBpdCB0aHJvdWdoLlxuK1x0ICovXG4rXHRpZiAodGhpc19jcHVfcmVhZChyY3VfZGVmZXJfZHJhaW5pbmcpIFx1MDAyNlx1MDAyNiAhaW5fbm1pKCkpIHtcbitcdFx0V0FSTl9PTkNFKDEsIFwiY2FsbF9yY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbitcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2hlYWQpKVxuK1x0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZyZHAtXHUwMDNlZGVmZXJfd29yayk7XG4rfVxuK1xuKy8qXG4rICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmdcbisgKiByY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLiAgVGhpcyBydW5zIGJlZm9yZSByY3VfYmFycmllcigpIHNjYW5zIHRoZVxuKyAqIGxpc3RzLiAgQW4gb25saW5lIENQVSdzIG93biBpcnFfd29yayByZS1pc3N1ZXMgaXRzIGNhbGxiYWNrcywgc28gd2FpdCBpdCBvdXQ7XG4rICogYW4gb2ZmbGluZSBDUFUncyBpcnFfd29yayBtYXkgbmV2ZXIgcnVuIGFnYWluLCBzbyBkcmFpbiBpdHMgbGlzdCBkaXJlY3RseVxuKyAqIG9udG8gdGhpcyBDUFUgaW5zdGVhZC5cbisgKi9cbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZClcbit7XG4rXHRpbnQgY3B1O1xuK1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4rXHRcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIoXHUwMDI2cmN1X2RhdGEsIGNwdSk7XG4rXG4rXHRcdGlmIChjcHVfb25saW5lKGNwdSkpXG4rXHRcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZyZHAtXHUwMDNlZGVmZXJfd29yayk7XG4rXHRcdGVsc2VcbitcdFx0XHRyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZFxuK19fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuK3tcbitcdC8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovXG4rXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcdTAwMjYgKHNpemVvZih2b2lkICopIC0gMSkpO1xuK1xuK1x0LyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqL1xuK1x0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbitcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuK1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbitcbitcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMsIGxhenlfaW4pO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX1JDVV9MQVpZXG4gc3RhdGljIGJvb2wgZW5hYmxlX3JjdV9sYXp5IF9fcmVhZF9tb3N0bHkgPSAhSVNfRU5BQkxFRChDT05GSUdfUkNVX0xBWllfREVGQVVMVF9PRkYpO1xuIG1vZHVsZV9wYXJhbShlbmFibGVfcmN1X2xhenksIGJvb2wsIDA0NDQpO1xuQEAgLTM4OTYsOCArMzk5MCwxMiBAQCB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dW5zaWduZWQgbG9uZyBnc2VxO1xuIFx0c3RydWN0IHJjdV9kYXRhICpyZHA7XG4tXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpO1xuK1x0dW5zaWduZWQgbG9uZyBzO1xuIFxuK1x0LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gKi9cbitcdHJjdV9kZWZlcl9mbHVzaCgpO1xuK1xuK1x0cyA9IHJjdV9zZXFfc25hcChcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XG4gXHRyY3VfYmFycmllcl90cmFjZShUUFMoXCJCZWdpblwiKSwgLTEsIHMpO1xuIFxuIFx0LyogVGFrZSBtdXRleCB0byBzZXJpYWxpemUgY29uY3VycmVudCByY3VfYmFycmllcigpIHJlcXVlc3RzLiAqL1xuQEAgLTQyMzEsNiArNDMyOSwxMCBAQCByY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpXG4gXHRyZHAtXHUwMDNlcmN1X29ubF9ncF9zdGF0ZSA9IFJDVV9HUF9DTEVBTkVEO1xuIFx0cmRwLVx1MDAzZWxhc3Rfc2NoZWRfY2xvY2sgPSBqaWZmaWVzO1xuIFx0cmRwLVx1MDAzZWNwdSA9IGNwdTtcbitcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfaGVhZCk7XG4rXHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2spO1xuK1x0LyogSGFyZCBpcnFfd29yayBzbyB0aGUgcmUtaXNzdWUgcnVucyBwcm9tcHRseS4gKi9cbitcdHJkcC1cdTAwM2VkZWZlcl93b3JrID0gSVJRX1dPUktfSU5JVF9IQVJEKHJjdV9kZWZlcl9kcmFpbik7XG4gXHRyY3VfYm9vdF9pbml0X25vY2JfcGVyY3B1X2RhdGEocmRwKTtcbiB9XG4gXG5AQCAtNDUyOCw2ICs0NjMwLDE2IEBAIHZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KVxuIFx0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihcdTAwMjZyY3VfZGF0YSwgY3B1KTtcbiBcdGJvb2wgbmVlZHdha2U7XG4gXG4rXHQvKlxuK1x0ICogQ2FsbGJhY2tzIHRoZSBvdXRnb2luZyBDUFUgZGVmZXJyZWQgbGF0ZSBpbiB0aGUgb2ZmbGluZSBwYXRoIChwYXN0IHRoZVxuK1x0ICogcG9pbnQgaXRzIGlycV93b3JrIGNhbiBydW4pIHNpdCBvbiAtXHUwMDNlZGVmZXJfaGVhZCwgd2hpY2ggdGhlIC1cdTAwM2VjYmxpc3RcbitcdCAqIG1pZ3JhdGlvbiBiZWxvdyBkb2VzIG5vdCBjb3Zlci4gIERyYWluIHRoZW0gaGVyZSwgYmVmb3JlIHRoZSBlYXJseVxuK1x0ICogcmV0dXJuczsgdGhlIHJlLWlzc3VlIGxhbmRzIG9uIHRoaXMgQ1BVLlxuK1x0ICovXG4rXHRyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuK1x0LyogTGlrZXdpc2UgZm9yIHRoZSBvdXRnb2luZyBDUFUncyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3MuICovXG4rXHRzcmN1X29mZmxpbmVfZHJhaW4oY3B1KTtcbitcbiBcdGlmIChyY3VfcmRwX2lzX29mZmxvYWRlZChyZHApKVxuIFx0XHRyZXR1cm47XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmggYi9rZXJuZWwvcmN1L3RyZWUuaFxuaW5kZXggZWVkZmE0MzA1OWU4MC4uM2E4ZTE3MTM2YzVhNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvdHJlZS5oXG4rKysgYi9rZXJuZWwvcmN1L3RyZWUuaFxuQEAgLTIyOSw2ICsyMjksMTEgQEAgc3RydWN0IHJjdV9kYXRhIHtcbiBcdHN0cnVjdCByY3VfaGVhZCBiYXJyaWVyX2hlYWQ7XG4gXHRpbnQgZXhwX3dhdGNoaW5nX3NuYXA7XHRcdC8qIERvdWJsZS1jaGVjayBuZWVkIGZvciBJUEkuICovXG4gXG4rXHQvKiBEZWZlcnJhbCBvZiBhbiBOTUkvcmVlbnRyYW50IGNhbGxfcmN1KCk7IHNlZSBfX2NhbGxfcmN1X2NvbW1vbigpLiAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfaGVhZDtcbitcdHN0cnVjdCBpcnFfd29yayBkZWZlcl93b3JrO1xuK1x0cmF3X3NwaW5sb2NrX3QgZGVmZXJfbG9jaztcbitcbiBcdC8qIDUpIENhbGxiYWNrIG9mZmxvYWRpbmcuICovXG4gI2lmZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVcbiBcdHN0cnVjdCBzd2FpdF9xdWV1ZV9oZWFkIG5vY2JfY2Jfd3E7IC8qIEZvciBub2NiIGt0aHJlYWRzIHRvIHNsZWVwIG9uLiAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjZlY2Q5M2JlMzBmNFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuY1xuQEAgLTAsMCArMSw1OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogRXhlcmNpc2UgcmUtZW50cnkgaW50byBjYWxsX3NyY3UoKSBmcm9tIEJQRjsgc2VlIHByb2dzL3JjdV9yZWVudHJ5LmMuICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuKyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJyY3VfcmVlbnRyeS5za2VsLmhcIlxuK1xuK3N0YXRpYyBpbnQgc3lzX3BpZGZkX29wZW4ocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0cmV0dXJuIHN5c2NhbGwoX19OUl9waWRmZF9vcGVuLCBwaWQsIGZsYWdzKTtcbit9XG4rXG4rdm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpXG4re1xuK1x0c3RydWN0IHJjdV9yZWVudHJ5ICpza2VsO1xuK1x0aW50IGVyciwgcGlkZmQgPSAtMSwgbWFwX2ZkO1xuK1x0X191NjQgdmFsID0gMTtcbitcdGNwdV9zZXRfdCBzZXQ7XG4rXG4rXHRza2VsID0gcmN1X3JlZW50cnlfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZXJyID0gcmN1X3JlZW50cnlfX2F0dGFjaChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJza2VsX2F0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBLZWVwIHRoZSByZS1lbnRyeSBvbiBhIHNpbmdsZSBDUFUuICovXG4rXHRDUFVfWkVSTyhcdTAwMjZzZXQpO1xuK1x0Q1BVX1NFVCgwLCBcdTAwMjZzZXQpO1xuK1x0aWYgKHNjaGVkX3NldGFmZmluaXR5KDAsIHNpemVvZihzZXQpLCBcdTAwMjZzZXQpKVxuK1x0XHRwZXJyb3IoXCJzY2hlZF9zZXRhZmZpbml0eVwiKTtcbitcbitcdHBpZGZkID0gc3lzX3BpZGZkX29wZW4oZ2V0cGlkKCksIDApO1xuK1x0aWYgKCFBU1NFUlRfR0UocGlkZmQsIDAsIFwicGlkZmRfb3BlblwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRtYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMudGFza19zdGcpO1xuK1x0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkLCBcdTAwMjZ2YWwsIEJQRl9OT0VYSVNUKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJib290X2NyZWF0ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRhcmdldF9waWQgPSBzeXNjYWxsKF9fTlJfZ2V0dGlkKTtcbitcdGVyciA9IGJwZl9tYXBfZGVsZXRlX2VsZW0obWFwX2ZkLCBcdTAwMjZwaWRmZCk7XG4rXHRBU1NFUlRfT0soZXJyLCBcImJvb3RfZGVsZXRlXCIpO1xuK1xuK1x0LyogT25seSBUcmVlIFNSQ1UgZW5xdWV1ZXMgdmlhIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpOyBza2lwIGVsc2V3aGVyZS4gKi9cbitcdGlmICghc2tlbC1cdTAwM2Vic3MtXHUwMDNlaGl0cykge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlZW50ZXJlZCwgMSwgXCJyZWVudHJ5X2RlZmVycmVkXCIpO1xuK291dDpcbitcdGlmIChwaWRmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHBpZGZkKTtcbitcdHJjdV9yZWVudHJ5X19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDkyYTkyN2ZmNTFjMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmNcbkBAIC0wLDAgKzEsNDUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogUmUtZW50ZXIgY2FsbF9zcmN1KCkgZnJvbSBhIEJQRiBwcm9ncmFtLiAgZmVudHJ5IG9uIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpXG4rICogZmlyZXMgaW5zaWRlIGNhbGxfc3JjdSgpJ3MgZW5xdWV1ZSAocmVhY2hlZCBmcm9tIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKClcbisgKiB3aXRoIHRoZSBzcmN1X2RhdGEgLVx1MDAzZWxvY2sgaGVsZCk7IHRoZSBoYW5kbGVyIHRoZW4gY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKVxuKyAqIC0tIGl0c2VsZiBjYWxsX3NyY3UoKSBvbiByY3VfdGFza3NfdHJhY2Vfc3JjdV9zdHJ1Y3QgLS0gcmUtZW50ZXJpbmcgdGhlIHNhbWVcbisgKiBzcmN1X2RhdGEgb24gdGhlIHNhbWUgQ1BVLlxuKyAqL1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1RBU0tfU1RPUkFHRSk7XG4rXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4rfSB0YXNrX3N0ZyBTRUMoXCIubWFwc1wiKTtcbitcbitpbnQgdGFyZ2V0X3BpZDtcbitpbnQgaGl0cztcbitpbnQgcmVlbnRlcmVkO1xuK1xuK1NFQyhcImZlbnRyeS9yY3Vfc2VnY2JsaXN0X2VucXVldWVcIilcbitpbnQgQlBGX1BST0cocmVlbnRlcilcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjtcbitcbitcdGlmIChyZWVudGVyZWQgfHwgIXRhcmdldF9waWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Y3VyID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRpZiAoIWN1ciB8fCBjdXItXHUwMDNlcGlkICE9IHRhcmdldF9waWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogUmUtZW50ZXIgdmlhIGEgdGFzay1zdG9yYWdlIGRlbGV0ZSwgd2hpY2ggY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbitcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmhpdHMsIDEpO1xuK1x0YnBmX3Rhc2tfc3RvcmFnZV9nZXQoXHUwMDI2dGFza19zdGcsIGN1ciwgMCwgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTtcbitcdGJwZl90YXNrX3N0b3JhZ2VfZGVsZXRlKFx1MDAyNnRhc2tfc3RnLCBjdXIpO1xuK1xuK1x0cmVlbnRlcmVkID0gMTtcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU3OjQ4LjQyNjk3NDg4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzMjcyNjE5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgUkNVL1NSQ1UgRGVmZXJyYWwgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCBpbnRyb2R1Y2VzIGRlZmVycmVkIGNhbGxiYWNrcyBpbiBSQ1UvU1JDVS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgeWVzLCB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSB0b3VjaGluZyBmdW5kYW1lbnRhbCBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSBSQ1UgYW5kIFNSQ1UsIGFuZCB0aGF0J3MgYWx3YXlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSBoYXZlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgdG9vLCBzaW5jZSB0aGVyZSBhcmUgbmV3IGZ1bmN0aW9ucyBiZWluZyBhZGRlZDogYHNyY3VfZGVmZXJfZHJhaW5gLCBgcmN1X2RlZmVyX2RyYWluYCwgYHNyY3Vfb2ZmbGluZV9kcmFpbmAsIGBjYWxsX3JjdV9kZWZlcmAsIGByY3VfZGVmZXJfZmx1c2hgLCBhbmQgYHNyY3VfZGVmZXJfZmx1c2hgLiBQbHVzLCBzZXZlcmFsIGV4aXN0aW5nIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQgbGlrZSBgY2FsbF9yY3VgLCBgY2FsbF9zcmN1YCwgYHJjdV9iYXJyaWVyYCwgYW5kIGBzcmN1X2JhcnJpZXJgLlxuXG5Ob3csIGJlZm9yZSBJIGNhbiByZWFsbHkgZ2V0IGludG8gZnV6emluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBjb21waWxlZC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBDT05GSUdfUkNVX0RFRkVSYCwgYnV0IGl0J3MgYSBgZGVmX2Jvb2xgLiBJdCBhcHBlYXJzIGl0IHdpbGwgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IGlmIGBIQVZFX05NSWAsIGBLUFJPQkVTYCwgYEZVTkNUSU9OX1RSQUNFUmAsIG9yIGBUUkFDRVBPSU5UU2AgYXJlIGVuYWJsZWQuIFNvLCB0byBlbnN1cmUgaXQncyBlbmFibGVkIGR1cmluZyBmdXp6aW5nLCBJIHNob3VsZCBwcm9iYWJseSBlbmFibGUgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGNvbmZpZyBvcHRpb25zLiBUaGUgS2NvbmZpZyBkb2N1bWVudGF0aW9uIHNheXMgdG8gbGlzdCB0aGUgZmxhZ3MgdGhhdCBuZWVkIHRvIGJlICpleHBsaWNpdGx5KiBlbmFibGVkLCBzbyBJIGRvbid0IHRoaW5rIEkgY2FuIGV4cGxpY2l0bHkgc2V0IGBSQ1VfREVGRVJgIGl0c2VsZjsgYnV0LCBzaW5jZSBpdCBoYXMgbm8gcHJvbXB0LCBJIGNhbid0IHNldCBpdCBkaXJlY3RseS4gU28sIEkgd2lsbCBuZWVkIHRvIGVuYWJsZSBlaXRoZXIgYEtQUk9CRVNgIG9yIGBUUkFDRVBPSU5UU2Agb3IgYEZVTkNUSU9OX1RSQUNFUmAgdG8gZW5zdXJlIGl0IGlzIHNlbGVjdGVkLiBBbHNvLCBzaW5jZSBgcmN1dG9ydHVyZS5jYCB1c2VzIGBDT05GSUdfUEVSRl9FVkVOVFNgLCBJJ2xsIG1ha2Ugc3VyZSB0byBlbmFibGUgdGhhdC4gQW5kIG9idmlvdXNseSBgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1RgIHRvIGVuYWJsZSB0aGUgbW9kdWxlLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSBzaG91bGQgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uOiB0aGUgbW9zdCBpbXBvcnRhbnQgYXJlIHRob3NlIGRpcmVjdGx5IGV4cG9zZWQgYXMgQVBJcyBvciBtb2RpZmllZCBieSB0aGUgcGF0Y2guIFNvLCBJJ20gdGhpbmtpbmc6XG5cbiogICBgc3JjdV9kZWZlcl9kcmFpbmAgKGFuZCBJIHNob3VsZCBjaGVjayBpdHMgdXNhZ2Ugc2luY2UgaXQgaGFzIGR1cGxpY2F0ZSBkZWZpbml0aW9ucyBiZXR3ZWVuIGBzcmN1dGlueS5jYCBhbmQgYHNyY3V0cmVlLmNgKVxuKiAgIGByY3VfZGVmZXJfZHJhaW5gIChjaGVjayBpZiBpdCdzIHN0YXRpYylcbiogICBgc3JjdV9vZmZsaW5lX2RyYWluYCAoc2VlbXMgbGlrZSBhbiBpbnRlcmVzdGluZyBvbmUpXG4qICAgYGNhbGxfc3JjdWAgKGRlZmluaXRlbHkgYW4gQVBJIGVudHJ5KVxuKiAgIGBjYWxsX3JjdWAgKGFnYWluLCBBUEkpXG4qICAgYHNyY3VfYmFycmllcmAgKGFub3RoZXIgQVBJIGVudHJ5KVxuKiAgIGByY3VfYmFycmllcmAgKGFuZCBhbm90aGVyKVxuXG5TbywgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBga2VybmVsL3JjdS9zcmN1dHJlZS5jYCBhbmQgYGtlcm5lbC9yY3UvdHJlZS5jYCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZC4gT2theSwgbm93IGxldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCBpZGVudGlmeWluZyBwb3RlbnRpYWwgZnV6emluZyBlbnRyeSBwb2ludHMgYW5kIHRlc3QgY2FzZXMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1ODowMi43NTQyMzk3NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0MzM0NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxpbnR8Ym9vbCkuKnNyY3VfZGVmZXJfZHJhaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3JjdS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS9zcmN1dGlueS5jPTI0Mj1zdGF0aWMgYm9vbCBzcmN1X2RlZmVyX2RyYWluaW5nO1xcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNDMtXFxua2VybmVsL3JjdS9zcmN1dGlueS5jOjI0NDp2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMjQ1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTg6MDMuMjk4NTgwNTEzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MzU2MTg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlNSQ1UgRHJhaW4gSW1wbGVtZW50YXRpb24gLSBBIFF1aWNrIE1lbnRhbCBOYXZpZ2F0aW9uKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBTUkNVIGRyYWluIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IHdoZXJlIHRoZSBkZWZlcnJlZCBhY3Rpb24gdG8gZHJhaW4gU1JDVSBpcyBoYW5kbGVkLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHdlbnQgdG8gdGhlIGBzcmN1dHJlZS5jYCBmaWxlLCBhcyB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBBbmQgeWVzLCB0aGVyZSBpdCBpcyEgSSdtIHByZXR0eSBzdXJlIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZGVmZXJyaW5nIHRoZSB3b3JrIGFuZCB0aGUgZmluYWwgZHJhaW5pbmcgYWZ0ZXIgdGhhdCB3b3JrIGlzIGRvbmUgaXMgYHN0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylgLiBJJ20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBpcnFfd29ya2AgaW4gbXkgaGVhZCwgYXMgd2VsbCBhcyB0aGUgY2FsbCBjaGFpbiB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBldmVudHVhbGx5IGNhbGxpbmcgdGhhdCBkZWZlciBmdW5jdGlvbiwgbGlrZWx5IGFmdGVyIGEgZ3JhY2UgcGVyaW9kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjA3LjM0MjE0NTM0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjMzMzkyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvcmN1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcmN1L3NyY3V0cmVlLmM9ODE9c3RhdGljIHZvaWQgc3JjdV9kZWxheV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTgyLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzo4MzpzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04NC1cXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xNDg1PXN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTIzLSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxNTI0OnN0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTUyNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjA3LjQzNDQ4NDU1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTQyODA1NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGNvZGUsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipTUkNVVHJlZSB2cy4gU1JDVVRpbnk6IFN0YXRpYyB2cy4gTm9uLVN0YXRpYyBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIHNlZWluZyBhIGRpc2NyZXBhbmN5IGhlcmUgdGhhdCBuZWVkcyBjbGFyaWZpY2F0aW9uLiBgc3JjdV9kZWZlcl9kcmFpbmAsIHRoYXQncyB0aGUgZnVuY3Rpb24gaGFuZGxpbmcgdGhlIGRlZmVycmVkIGRyYWluIHByb2Nlc3MgZm9yIFNSQ1UsIGlzICpzdGF0aWMqIHdpdGhpbiB0aGUgYHNyY3V0cmVlLmNgIGZpbGUuIFRoaXMgaXMgZXhwZWN0ZWQsIG1lYW5pbmcgaXQncyBvbmx5IHZpc2libGUgYW5kIGNhbGxhYmxlIHdpdGhpbiB0aGF0IGNvbXBpbGF0aW9uIHVuaXQuIEhvd2V2ZXIsIEknbSBmaW5kaW5nIHRoYXQgc2FtZSBmdW5jdGlvbiBkZWNsYXJlZCBhcyAqbm9uLXN0YXRpYyogaW4gYHNyY3V0aW55LmNgLiBUaGF0J3MgdW51c3VhbCwgYW5kIGl04oCZcyByYWlzaW5nIGEgZmxhZy4gVGhpcyBpbXBsaWVzIHNvbWUgc29ydCBvZiBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBwZXJoYXBzIGEgZGVzaWduIHBhdHRlcm4gdGhhdCBJIGRvbid0IGZ1bGx5IHVuZGVyc3RhbmQgeWV0LCBidXQgaXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIGxvb2sgaW50byBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aHkgdGhhdCB3b3VsZCBiZSB0aGUgY2FzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRpZmZlcmVudCBzY29waW5nIGFuZCBpdHMgaW1wYWN0IG9uIGNyb3NzLWZpbGUgZnVuY3Rpb24gY2FsbHMgb3IgbGlua2FnZS5cblxuRnVydGhlcm1vcmUsIGBzcmN1X29mZmxpbmVfZHJhaW5gIGlzICpub24tc3RhdGljKiBpbiBgc3JjdXRyZWUuY2AuIFRoaXMgbWFrZXMgc2Vuc2UsIGFzIGl04oCZcyBsaWtlbHkgaW50ZW5kZWQgdG8gYmUgcGFydCBvZiB0aGUgQVBJIG9mZmVyZWQgYnkgdGhlIGBzcmN1dHJlZWAgbW9kdWxlLlxuSSBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZXNlIGRpZmZlcmVudCB2aXNpYmlsaXR5IGxldmVscyBhcmUgdXNlZCBhbmQgd2hhdCB0aGUgcHJhY3RpY2FsIGVmZmVjdHMgYXJlLlxuSSB3aWxsIGhhdmUgdG8gY2hlY2sgaG93IHRoZSBkaWZmZXJlbnQgY29tcG9uZW50cyBpbnRlcmFjdCB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgaW50ZXJwcmV0YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDE5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTg6MTkuNTc3MjkzOTg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTQxNTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBzcmN1X29mZmxpbmVfZHJhaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3JjdS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS9yY3UuaD01ODE9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZClcXG4tLVxcbmtlcm5lbC9yY3UvcmN1LmgtNTg5LS8qIERyYWluIGFuIG91dGdvaW5nIENQVSdzIGRlZmVycmVkIFNSQ1UgY2FsbGJhY2tzOyBzZWUgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLiAqL1xcbmtlcm5lbC9yY3UvcmN1Lmg6NTkwOnZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNTkxLVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE1MjQ9c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NTItICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE1NTM6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSlcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTU1NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjE5LjcxNjcxMzU0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODM3MzUzNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFJDVSBEZWZlcnJhbCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBSQ1UgZGVmZXJyYWwgaW1wbGVtZW50YXRpb24uIFRoZSBmaXJzdCB0aGluZyBJJ20gbm90aWNpbmcgaXMgdGhlIG1vZGlmaWNhdGlvbiBvZiBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYGNhbGxfcmN1YCwgYW5kIGBjYWxsX3NyY3VgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIHRvdWNoZWQuIEknbSBhbHNvIHNlZWluZyBjaGFuZ2VzIGluIGByY3V0b3J0dXJlLmNgLCB3aGljaCBpcyBnb29kIGJlY2F1c2UgdGhhdCBpbmRpY2F0ZXMgdGVzdGluZyBpcyBpbiBwbGFjZS5cblxuTGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJJ20gZm9jdXNpbmcgb246XG5cbiogICBgY2FsbF9yY3VgXG4qICAgYGNhbGxfc3JjdWBcbiogICBgcmN1X2JhcnJpZXJgXG4qICAgYHNyY3VfYmFycmllcmBcbiogICBgc3JjdV9vZmZsaW5lX2RyYWluYFxuXG5BbmQsIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSBlbmFibGVkOlxuXG4qICAgYFBFUkZfRVZFTlRTYFxuKiAgIGBLUFJPQkVTYFxuKiAgIGBUUkFDRVBPSU5UU2BcbiogICBgUkNVX1RPUlRVUkVfVEVTVGAgKGFsdGhvdWdoIHRoaXMgaXMgZm9yIHRlc3RpbmcsIGl0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQpXG5cbldhaXQsIGEgY3J1Y2lhbCBwb2ludCEgYFJDVV9ERUZFUmAgaXMgdGllZCB0byBgSEFWRV9OTUlgLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYC4gU28sIGVuc3VyaW5nIGBLUFJPQkVTYCBhbmQgYFRSQUNFUE9JTlRTYCBhcmUgZW5hYmxlZCBpbXBsaWNpdGx5IGhhbmRsZXMgdGhhdC4gQW5kLCBgUEVSRl9FVkVOVFNgIGlzIG5lZWRlZCBmb3IgdGhlIE5NSSB0ZXN0aW5nIHdpdGhpbiBgcmN1dG9ydHVyZWAuXG5cbk5vdywgYWJvdXQgYGNhbGxfcmN1YCBhbmQgYGNhbGxfc3JjdWAuIFRoZSBwcm9tcHQgKmRvZXMqIHdhcm4gYWdhaW5zdCBmb2N1c2luZyBvbiBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLCBhbmQgdGhlc2UgYXJlIEVYVFJFTUVMWSBob3QtcGF0aCEgSG93ZXZlciwgdGhlIHBhdGNoICpzcGVjaWZpY2FsbHkqIG1vZGlmaWVzIHRoZW0gdG8gaGFuZGxlIGRlZmVycmFsIHdoZW4gYHNob3VsZF9yY3VfZGVmZXIoKWAgaXMgdHJ1ZSAod2hpY2ggaXMgd2hlbiBgaXJxc19kaXNhYmxlZCgpYCBhbmQgYHJjdV9zY2hlZHVsZXJfYWN0aXZlICE9IFJDVV9TQ0hFRFVMRVJfSU5BQ1RJVkVgKS4gU28sIHdoaWxlIHRoZXkncmUgY29yZSwgZGlyZWN0IGZ1enppbmcgbWlnaHQgc2tldyByZXN1bHRzLiBNYXliZSwgSSBzaG91bGQgcHJpb3JpdGl6ZSBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYW5kIGBzcmN1X29mZmxpbmVfZHJhaW5gIGluc3RlYWQ/IFRoZXkgYXJlIG5vdCBob3QtcGF0aC4gYHNyY3Vfb2ZmbGluZV9kcmFpbmAgaXMgY2FsbGVkIGR1cmluZyBDUFUgaG90cGx1ZyB3aGljaCBpc24ndCBob3QtcGF0aCBlaXRoZXIuXG5cblRpbWUgdG8gbG9vayBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgYXJlYS4uLiBsZXQncyBzZWUgd2hhdCBlbHNlIHRoZXJlIG1pZ2h0IGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTYxOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1ODozMi41NTQwNzEwNjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMzg2OTgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCAuKl9kcmFpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvcmN1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcmN1L3JjdS5oPTU4MT1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC01ODktLyogRHJhaW4gYW4gb3V0Z29pbmcgQ1BVJ3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXFxua2VybmVsL3JjdS9yY3UuaDo1OTA6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSk7XFxua2VybmVsL3JjdS9yY3UuaC01OTEtXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MjQyPXN0YXRpYyBib29sIHNyY3VfZGVmZXJfZHJhaW5pbmc7XFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTI0My1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MjQ0OnZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNDUte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE1MjQ9c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NTItICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE1NTM6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSlcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTU1NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjMzLjI2Nzk0NzM0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODU3NTM2MDQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbCBpbiBTUkNVIGFuZCBSQ1UqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgc3JjdV9vZmZsaW5lX2RyYWluYCBhbmQgYHNyY3VfZGVmZXJfZHJhaW5gLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGlzICd0aW55JyBjb250ZXh0LiBUaGUgZmFjdCB0aGF0IGBzcmN1X2RlZmVyX2RyYWluYCBpcyBleHBvcnRlZCBmcm9tIHRoZSAndGlueScgbW9kdWxlIHByZXNlbnRzIGFuIGludGVyZXN0aW5nIHN1cmZhY2UgZm9yIGZ1enppbmcsIGRvZXNuJ3QgaXQ/IEhvd2V2ZXIsIEknbSBub3RpbmcgdGhhdCBpdCdzIGFuIGBpcnFfd29ya2AgY2FsbGJhY2ssIHNvIGRpcmVjdCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIHVubGlrZWx5LiBUaGF0IGxpbWl0cyBpbW1lZGlhdGUgYXZlbnVlcy5cblxuTXkgZXhwZXJ0IG1pbmQgc2hpZnRzIGdlYXJzOyBJJ20gdGhpbmtpbmcgdGhhdCBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYCBhcmUgYWx3YXlzIGdvb2QgdGFyZ2V0cyB0byBleHBsb3JlLiBUaGV5J3JlIGZ1bmRhbWVudGFsIGFuZCByZXByZXNlbnQgY3JpdGljYWwgc3luY2hyb25pemF0aW9uIHBvaW50cy4gVGhleSdyZSB3ZWxsLWtub3duIGJ1dCBwb3RlbnRpYWxseSBvZmZlciB2dWxuZXJhYmlsaXRpZXMgaW4gdW51c3VhbCBzY2VuYXJpb3MuXG5cbk5vdywgdGhhdCBnZXRzIG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgPyBJdCdzIGJlZW4gbW9kaWZpZWQgdG8gY2FsbCBib3RoIGByY3VfZGVmZXJfZHJhaW5gIGFuZCBgc3JjdV9vZmZsaW5lX2RyYWluYC4gU2luY2UgdGhvc2UgZnVuY3Rpb25zIGFyZSBtb3JlIGludGVyZXN0aW5nIHdpdGhpbiBhIFwidGlueVwiIGNvbnRleHQsIEkgd291bGQgbmVlZCB0byBhbmFseXplICpob3cqIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBhbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb21iaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTg6NTEuODQzMzA5OTIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTIzNjgyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9yY3UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9yY3UvdHJlZS5jPTQ1NzA9dm9pZCByY3V0cmVlX3JlcG9ydF9jcHVfZGVhZCh2b2lkKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDYyNC0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NjI1OnZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MjYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1ODo1MS45MzQ1NTIzMzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2Mzg3NDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ2FsbGJhY2sgTWlncmF0aW9uIFBvaW50cyoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBzaXR1YXRpb24sIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBzZWVtcyBsaWtlIGEgc3Ryb25nIGNvbnRlbmRlciBhcyBhIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoYXQncyBhIHJlYXNvbmFibGUgZmlyc3QgZ3Vlc3MgZ2l2ZW4gdGhlIGNvbnRleHQuIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhhdCwgSSBzaG91bGQgZG8gYSBxdWljayBjaGVjay1pbiB3aXRoIGByY3VfYmFycmllcmAgYW5kIGBzcmN1X2JhcnJpZXJgLiBUaG9zZSBhcmUgb2Z0ZW4gaW52b2x2ZWQgaW4gc2ltaWxhciBzY2VuYXJpb3MsIGFuZCBpdCdzIGFsd2F5cyBzbWFydCB0byBoYXZlIGEgd2lkZXIgdmlldyBvZiB0aGUgY2FsbCBzaXRlcyBiZWZvcmUgZGl2aW5nIGludG8gb25lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnkgb2J2aW91cywgcmVsYXRlZCBwaWVjZXMgdGhhdCBtaWdodCBvZmZlciBhIG1vcmUgY29tcGxldGUgcGljdHVyZSwgb3IgZXZlbiBhIHNpbXBsZXIgcGF0aCB0byBhIHNvbHV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQzMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjU1LjE5ODQzMDIzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxOTU2NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgcmN1X2JhcnJpZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3JjdS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS90YXNrcy5oPTEyMjI9RVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X3Rhc2tzKTtcXG4tLVxcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjI5LSAqL1xcbmtlcm5lbC9yY3UvdGFza3MuaDoxMjMwOnZvaWQgcmN1X2JhcnJpZXJfdGFza3Modm9pZClcXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIzMS17XFxuLS1cXG5rZXJuZWwvcmN1L3RpbnkuYz0xMTY9c3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXFxuLS1cXG5rZXJuZWwvcmN1L3RpbnkuYy0xMjItXFxua2VybmVsL3JjdS90aW55LmM6MTIzOnZvaWQgcmN1X2JhcnJpZXIodm9pZClcXG5rZXJuZWwvcmN1L3RpbnkuYy0xMjQte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9Mzk2MT1zdGF0aWMgdm9pZCByY3VfYmFycmllcl9oYW5kbGVyKHZvaWQgKmNwdV9pbilcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM5ODYtICovXFxua2VybmVsL3JjdS90cmVlLmM6Mzk4Nzp2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXFxua2VybmVsL3JjdS90cmVlLmMtMzk4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjU1LjI3ODYzMzU4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDI1NDMyNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQmFycmllciBJbXBsZW1lbnRhdGlvbnMqKlxuXG5SaWdodCwgYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmDigJR0aGV5J3JlIGJvdGggY3JpdGljYWwgdG9vbHMsIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBhZ2Fpbi4gTGV0J3MgZGlnIGludG8gYHNyY3VfYmFycmllcmAgc3BlY2lmaWNhbGx5LiBXaGF0IGFyZSB0aGUga2V5IGNvbnNpZGVyYXRpb25zIGFuZCBlZGdlIGNhc2VzIGluIGl0cyBpbXBsZW1lbnRhdGlvbj8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBtZW50YWwgbW9kZWwgb2YgaXRzIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggY29uY3VycmVudCBzY2VuYXJpb3MuIEFyZSB0aGVyZSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBsb2NrIGhpZXJhcmNoaWVzIG9yIG1lbW9yeSBtb2RlbHM/IEknbSBnb2luZyB0byBydW4gdGhyb3VnaCBzb21lIHNjZW5hcmlvcyBhbmQgZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGJlZm9yZSBtb3Zpbmcgb24uIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBkZXNpZ24gaXMgc291bmQgYW5kIHRoYXQgSSBjYW4ganVzdGlmeSBpdHMgdXNhZ2UgZm9yIHdoYXRldmVyIEknbSB3b3JraW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTkyMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjU5LjcwNDA3MDExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc5MDE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBzcmN1X2JhcnJpZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3JjdS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS9zcmN1dGlueS5jPTMwNz1FWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0zMDktLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovXFxua2VybmVsL3JjdS9zcmN1dGlueS5jOjMxMDp2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMzExLXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xNzkyPXN0YXRpYyB2b2lkIHNyY3VfYmFycmllcl9vbmVfY3B1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3Qgc3JjdV9kYXRhICpzZHApXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTgwOS0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTgxMDp2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTgxMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjU5Ljc1NTg2OTg1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDAxNzQyOTYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBSQ1UvU1JDVSBEZWZlcnJlZCBDYWxsYmFja3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgZGVmZXJyZWQgUkNVIGFuZCBTUkNVIGNhbGxiYWNrcy4gSXQncyBkZWFsaW5nIHdpdGggcmUtZW50cmFudCBjYWxscyBmcm9tIE5NSSBjb250ZXh0cyBhbmQgQlBGLCB3aGljaCBpcyBjcml0aWNhbCwgc28gd2UgbmVlZCBhIGdvb2QgZnV6emluZyBzdHJhdGVneS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRlZmluZSBzb21lIGZvY3VzIHN5bWJvbHMuIEkgdGhpbmsgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGFyZTpcblxuKiAgIGByY3VfYmFycmllcmBcbiogICBgc3JjdV9iYXJyaWVyYFxuKiAgIGBzcmN1X29mZmxpbmVfZHJhaW5gXG4qICAgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgXG5cbldhaXQsIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBpcyBjYWxsZWQgZHVyaW5nIENQVSBvZmZsaW5lLi4uIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBvdGhlciBlbnRyeSBwb2ludHMgYnV0IGl0IGlzIGRlZmluaXRlbHkgaW50ZXJlc3RpbmcgdG8gY29uc2lkZXIuXG5cblRoZSBwYXRjaCBhbHNvIGhhcyBhIEJQRiBzZWxmdGVzdC4gV2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBzcGVjaWZpY2FsbHkgaW5jbHVkZSBgYnBmX3Rhc2tfc3RvcmFnZV9kZWxldGVgIGJlY2F1c2UgdGhhdCBpcyBqdXN0IHRoZSBtZWNoYW5pc20gdG8gdHJpZ2dlciB0aGluZ3MuXG5cbk5vdywgZm9yIGtlcm5lbCBjb25maWdzLCBoZXJlJ3Mgd2hhdCBzZWVtcyBpbXBvcnRhbnQgdG8gZW5hYmxlOlxuXG4qICAgYEtQUk9CRVNgIC0gRXNzZW50aWFsIGZvciB0cmlnZ2VyaW5nIGRlZmVycmVkIGNhbGxzIGZyb20gcHJvYmUgY29udGV4dHMuXG4qICAgYFRSQUNFUE9JTlRTYCAtIFNpbWlsYXJseSBjcnVjaWFsIGZvciB0cmFjaW5nLlxuKiAgIGBQRVJGX0VWRU5UU2AgLSBUaGlzIGFsc28gb3BlbnMgdXAgdGhlIG9wcG9ydHVuaXR5IHRvIHJlYWNoIGRlZmVycmVkIGNhbGxzIGZyb20gYW4gTk1JIGNvbnRleHQuXG4qICAgYFJDVV9UT1JUVVJFX1RFU1RgIC0gT3B0aW9uYWwsIGJ1dCBhIGdvb2QgYWRkaXRpb24gZm9yIG1vcmUgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIGlmIHdlIGFyZSB0cnlpbmcgdG8gdHJpZ2dlciBtb3JlIGNvZGUgcGF0aHMuXG4qICAgYEJQRl9TWVNDQUxMYCAtIFNpbmNlIHRoZSBzZWxmdGVzdCB1c2VzIEJQRiwgaXQncyBhIGdvb2QgaWRlYSB0byBlbmFibGUgaXQgdG8gdHJ5IHRvIHRyaWdnZXIgaXQgZnJvbSB0aGUgQlBGIHNpZGUsIGFsdGhvdWdoIG5vdCBlc3NlbnRpYWwuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFJDVV9ERUZFUmAgaXMgZW5hYmxlZC4gSXQgbG9va3MgbGlrZSBpdCBpcyBzZWxlY3RlZCBieSBgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNgLiBTbywgc2luY2Ugd2UgYXJlIGVuYWJsaW5nIGBLUFJPQkVTYCBhbmQgYFRSQUNFUE9JTlRTYCwgYFJDVV9ERUZFUmAgc2hvdWxkIGFscmVhZHkgYmUgY292ZXJlZC5cblxuTGV0IG1lIHRoaW5rIGJhY2sgb24gdGhpcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgUkNVL1NSQ1UgbG9naWM6IGBjYWxsX3JjdWAsIGBjYWxsX3NyY3VgLCBhbmQgdGhlIGJhcnJpZXIgZnVuY3Rpb25zLCBidXQgc3BlY2lmaWNhbGx5IHRoZSBkZWZlcnJhbCBwYXJ0LiBUaGlzIGRlZmVycmFsIGlzIGhpdCBwcmltYXJpbHkgZnJvbSBOTUkgY29udGV4dHMgYW5kIHRocm91Z2ggQlBGLlxuXG5IZXJlJ3MgYSByZWZpbmVkIGxpc3Qgb2YgdGhpbmdzIHRvIGNvbnNpZGVyIGZvY3VzaW5nIG9uOlxuXG5Gb2N1cyBzeW1ib2xzOlxuXG4qICAgYHJjdV9iYXJyaWVyYFxuKiAgIGBzcmN1X2JhcnJpZXJgXG4qICAgYHNyY3Vfb2ZmbGluZV9kcmFpbmBcbiogICBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2BcblxuQ29uZmlnczpcblxuKiAgIGBLUFJPQkVTYFxuKiAgIGBUUkFDRVBPSU5UU2BcbiogICBgUEVSRl9FVkVOVFNgXG4qICAgYEJQRl9TWVNDQUxMYFxuXG5Pa2F5LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlYWNoYWJpbGl0eS4gYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGlzIGNhbGxlZCBieSBDUFUgaG90cGx1ZyB3aGljaCBpcyBnb29kISBBbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgaXMgYWxzbyBjYWxsZWQgYnkgaXQuIGByY3VfYmFycmllcmAgYW5kIGBzcmN1X2JhcnJpZXJgIGFyZSB2ZXJ5IHdpZGVseSB1c2VkLlxuXG5UaGVyZSBpcyBgc3JjdV9kZWZlcl9kcmFpbmAgaW4gdGhlIGBzcmN1dGlueS5jYCBjb2RlLCBidXQgdGhhdCBpcyBhbHNvIHN0YXRpYyBpbiB0aGUgYHNyY3V0cmVlLmNgIGNvZGUuIEl0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgd2l0aG91dCBgQ09ORklHX1RJTllfU1JDVWAsIHNvIEknbGwgZXhjbHVkZSBpdC5cblxuV2FpdC4gQW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gYGNhbGxfcmN1YCBhbmQgYGNhbGxfc3JjdWAgYXJlIHRoZSBtYWluIGZ1bmN0aW9ucyBtb2RpZmllZC4gSSBrbm93IHRoZXkncmUgaG90LXBhdGgsIGJ1dCB0aGUgZGVmZXJyYWwgaXMgX2luc2lkZV8gdGhlbS4gRG8gSSBuZWVkIHRvIGluY2x1ZGUgdGhlbT8gTm8sIHRoYXQncyBub3QgbmVlZGVkLiBUaGUgZnV6emVyIHdpbGwgaGl0IHRoZW0gYW55d2F5IGFuZCBpdCBpcyBsaWtlbHkgdGhlIGRlZmVycmFsIGNvZGUgd2lsbCBiZSB0cmlnZ2VyZWQuIEZvY3VzaW5nIG9uIHRoZW0gbWlnaHQgc2ltcGx5IGhhdmUgdGhlIGZ1enplciBzcGVuZCBhbGwgaXRzIHRpbWUgb24gZ2VuZXJpYyBjYWxscywgd2hlbiB3ZSB3YW50IHRvIHRlc3QgdGhlIGRlZmVycmFsIGxvZ2ljLiBBbmQgdGhlIGRlZmVycmFsIHBhcnQgb25seSBoYXBwZW5zIHdoZW4gYHNob3VsZF9yY3VfZGVmZXIoKWAgaXMgdHJ1ZSwgd2hpY2ggaXMgd2hlbiBgaXJxc19kaXNhYmxlZCgpYC4gQWxzbywgdGhlIEJQRiBzZWxmdGVzdCB0cmlnZ2VycyBpdCBieSBhdHRhY2hpbmcgYSBCUEYgcHJvZ3JhbSB0byBgcmN1X3NlZ2NibGlzdF9lbnF1ZXVlYCBhbmQgY2FsbGluZyBgYnBmX3Rhc2tfc3RvcmFnZV9kZWxldGVgIGZyb20gaXQuXG5cbk9rYXksIEknbSBjb25maWRlbnQgd2l0aCB0aGlzLiBJIHdpbGwgc2V0IHRoZSBmdXp6aW5nIHRhcmdldHMgYmFzZWQgb24gdGhpcyByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzg1LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1OToxMy43NzMzMDM5NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2ODg1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIlRSQUNFUE9JTlRTXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X29mZmxpbmVfZHJhaW5cIixcbiAgICBcInJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGRlZmVycmVkIFJDVSBhbmQgU1JDVSBjYWxsYmFja3MgdG8gc2FmZWx5IGhhbmRsZSByZS1lbnRyYW50IGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBpbnZvY2F0aW9ucywgc3VjaCBhcyB0aG9zZSBvcmlnaW5hdGluZyBmcm9tIE5NSSBjb250ZXh0cyBvciBCUEYgcHJvZ3JhbXMuIEl0IG1vZGlmaWVzIGNvcmUgUkNVL1NSQ1Ugc3luY2hyb25pemF0aW9uIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyBjYWxsYmFjayBkcmFpbmluZyBtZWNoYW5pc21zLiBUaGlzIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIlRSQUNFUE9JTlRTXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X29mZmxpbmVfZHJhaW5cIixcbiAgICBcInJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGRlZmVycmVkIFJDVSBhbmQgU1JDVSBjYWxsYmFja3MgdG8gc2FmZWx5IGhhbmRsZSByZS1lbnRyYW50IGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBpbnZvY2F0aW9ucywgc3VjaCBhcyB0aG9zZSBvcmlnaW5hdGluZyBmcm9tIE5NSSBjb250ZXh0cyBvciBCUEYgcHJvZ3JhbXMuIEl0IG1vZGlmaWVzIGNvcmUgUkNVL1NSQ1Ugc3luY2hyb25pemF0aW9uIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyBjYWxsYmFjayBkcmFpbmluZyBtZWNoYW5pc21zLiBUaGlzIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsw7zm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 17:55:37 +0000 UTC FinishedAt: 2026-08-03 17:59:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "415606a7be939835db9b0d6b711887586646346d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KPROBES", "TRACEPOINTS", "PERF_EVENTS", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "415606a7be939835db9b0d6b711887586646346d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KPROBES", "TRACEPOINTS", "PERF_EVENTS", "BPF_SYSCALL" ], "series_id": "3a2a4a93-4ad6-4709-b28e-59d6b2a85c10" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "rcu_barrier", "srcu_barrier", "srcu_offline_drain", "rcutree_migrate_callbacks" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7VFJBQ0VQT0lOVFMmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9vZmZsaW5lX2RyYWluJiMzNDssCiAgICAmIzM0O3JjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBkZWZlcnJlZCBSQ1UgYW5kIFNSQ1UgY2FsbGJhY2tzIHRvIHNhZmVseSBoYW5kbGUgcmUtZW50cmFudCBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgaW52b2NhdGlvbnMsIHN1Y2ggYXMgdGhvc2Ugb3JpZ2luYXRpbmcgZnJvbSBOTUkgY29udGV4dHMgb3IgQlBGIHByb2dyYW1zLiBJdCBtb2RpZmllcyBjb3JlIFJDVS9TUkNVIHN5bmNocm9uaXphdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBuZXcgY2FsbGJhY2sgZHJhaW5pbmcgbWVjaGFuaXNtcy4gVGhpcyBpcyBoaWdobHkgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYxYmJlNmY5YmRhMzM4Nzk5ZDJlZmFiMDhjMzVjNGVlN2E2ZDA2MjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjU3OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuaW5kZXggZmJjZjEzYmMxMmQxNS4uNDcyNzVkMTgyOTY2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjZGVmaW5lIF9MSU5VWF9TUkNVX1RJTllfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YWl0LmhcdTAwM2VcbiBcbiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuQEAgLTI2LDYgJiM0MzsyNyw4IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgKipzcmN1X2NiX3RhaWw7XHQvKiBQZW5kaW5nIGNhbGxiYWNrczogVGFpbC4gKi9cbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzcmN1X3dvcms7XHQvKiBGb3IgZHJpdmluZyBncmFjZSBwZXJpb2RzLiAqL1xuIFx0c3RydWN0IGlycV93b3JrIHNyY3VfaXJxX3dvcms7XHQvKiBEZWZlciBzY2hlZHVsZV93b3JrKCkgdG8gaXJxIHdvcmsuICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1x0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xuJiM0MztcdHN0cnVjdCBpcnFfd29yayBkZWZlcl9pdztcdFx0LyogUmVnaXN0ZXJzIGRlZmVyX2NicyBsYXRlci4gKi9cbiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0NcbiBcdHN0cnVjdCBsb2NrZGVwX21hcCBkZXBfbWFwO1xuICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi9cbkBAIC0zMyw2ICYjNDM7MzYsNyBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuIFxuIHZvaWQgc3JjdV9kcml2ZV9ncChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndwKTtcbiB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiYjNDM7dm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspO1xuIFxuICNkZWZpbmUgX19TUkNVX1NUUlVDVF9JTklUKG5hbWUsIF9faWdub3JlZCwgX19faWdub3JlZCwgX19fX2lnbm9yZWQpXHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuQEAgLTQwLDYgJiM0Mzs0NCw4IEBAIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspO1xuIFx0LnNyY3VfY2JfdGFpbCA9IFx1MDAyNm5hbWUuc3JjdV9jYl9oZWFkLFx0XHRcdFx0XFxcbiBcdC5zcmN1X3dvcmsgPSBfX1dPUktfSU5JVElBTElaRVIobmFtZS5zcmN1X3dvcmssIHNyY3VfZHJpdmVfZ3ApLFx0XFxcbiBcdC5zcmN1X2lycV93b3JrID0geyAuZnVuYyA9IHNyY3VfdGlueV9pcnFfd29yayB9LFx0XHRcXFxuJiM0MztcdC5kZWZlcl9jYnMgPSBMTElTVF9IRUFEX0lOSVQobmFtZS5kZWZlcl9jYnMpLFx0XHRcdFxcXG4mIzQzO1x0LmRlZmVyX2l3ID0geyAuZnVuYyA9IHNyY3VfZGVmZXJfZHJhaW4gfSxcdFx0XHRcdFxcXG4gXHRfX1NSQ1VfREVQX01BUF9JTklUKG5hbWUpXHRcdFx0XHRcdFxcXG4gfVxuIFxuQEAgLTEzMSwxMCAmIzQzOzEzNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbi17XG4tXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4tfVxuJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkgeyB9XG4gI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbmluZGV4IDc1ZTU0ZTRmOTYzZmEuLjFjZTc1OWZiNzA5NDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxuQEAgLTEzLDYgJiM0MzsxMyw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1X25vZGVfdHJlZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuIFxuIHN0cnVjdCBzcmN1X25vZGU7XG4gc3RydWN0IHNyY3Vfc3RydWN0O1xuQEAgLTQxLDYgJiM0Mzs0Myw4IEBAIHN0cnVjdCBzcmN1X2RhdGEge1xuIFx0Ym9vbCBzcmN1X2NibGlzdF9pbnZva2luZztcdFx0LyogSW52b2tpbmcgdGhlc2UgQ0JzPyAqL1xuIFx0c3RydWN0IHRpbWVyX2xpc3QgZGVsYXlfd29yaztcdFx0LyogRGVsYXkgZm9yIENCIGludm9raW5nICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcdFx0LyogQ29udGV4dCBmb3IgQ0IgaW52b2tpbmcuICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1x0XHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgZGVmZXJfbGluaztcdFx0LyogTGlua3Mgb250byB0aGUgcGVyLUNQVSBkZWZlcnJhbCBkcmFpbiBsaXN0ICovXG4gXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7XHQvKiBGb3Igc3JjdV9iYXJyaWVyKCkgdXNlLiAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDtcdFx0LyogRm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpIHVzZS4gKi9cbiBcdGludCBzcmN1X2VjX3N0YXRlO1x0XHRcdC8qICBTdGF0ZSBmb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkuICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9LY29uZmlnIGIva2VybmVsL3JjdS9LY29uZmlnXG5pbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L0tjb25maWdcbkBAIC0xNzUsNiAmIzQzOzE3NSwxMiBAQCBjb25maWcgUkNVX1NUQUxMX0NPTU1PTlxuIGNvbmZpZyBSQ1VfTkVFRF9TRUdDQkxJU1RcbiBcdGRlZl9ib29sICggVFJFRV9SQ1UgfHwgVFJFRV9TUkNVIHx8IFRBU0tTX1JDVV9HRU5FUklDIClcbiBcbiYjNDM7IyBUaGUgZGVmZXJyYWwgKGFuZCB0aGUgSVJRX1dPUksgaXQgdXNlcykgaXMgb25seSBuZWVkZWQgd2hlcmUgY2FsbF9yY3UoKSAvXG4mIzQzOyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuXG4mIzQzO2NvbmZpZyBSQ1VfREVGRVJcbiYjNDM7XHRkZWZfYm9vbCBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UU1xuJiM0MztcdHNlbGVjdCBJUlFfV09SS1xuJiM0MztcbiBjb25maWcgUkNVX0ZBTk9VVFxuIFx0aW50IFwmIzM0O1RyZWUtYmFzZWQgaGllcmFyY2hpY2FsIFJDVSBmYW5vdXQgdmFsdWVcJiMzNDtcbiBcdHJhbmdlIDIgNjQgaWYgNjRCSVRcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdS5oIGIva2VybmVsL3JjdS9yY3UuaFxuaW5kZXggMzlhOWY2ZmE5YTdiMi4uY2EwNWQ0ODc3M2M3OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvcmN1LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvcmN1LmhcbkBAIC01NzIsNiAmIzQzOzU3MiwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza3NfY2JsaXN0X2luaXRfZ2VuZXJpYyh2b2lkKSB7IH1cbiAjZGVmaW5lIFJDVV9TQ0hFRFVMRVJfSU5JVFx0MVxuICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9SVU5OSU5HXHQyXG4gXG4mIzQzOy8qXG4mIzQzOyAqIERlZmVyIGEgY2FsbF9yY3UoKS9jYWxsX3NyY3UoKSBjYWxsYmFjayByYXRoZXIgdGhhbiBlbnF1ZXVlIGl0IG5vdz8gIERlZmVyXG4mIzQzOyAqIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzaW5jZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIG1heSBiZSBpblxuJiM0MzsgKiBmbGlnaHQgb24gdGhpcyBDUFUuICBOb3Qgd2hpbGUgdGhlIHNjaGVkdWxlciBpcyBkb3duLCB0aG91Z2g6IGlycV93b3JrIGlzXG4mIzQzOyAqIHVudXNhYmxlIGJlZm9yZSBpbml0X0lSUSgpLCB5ZXQgcmN1X2luaXQoKSBhbHJlYWR5IGNhbGxzIGNhbGxfcmN1KCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaXJxc19kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUmIzM5O3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXG4mIzQzO3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xuJiM0MztcbiBlbnVtIHJjdXRvcnR1cmVfdHlwZSB7XG4gXHRSQ1VfRkxBVk9SLFxuIFx0UkNVX1RBU0tTX0ZMQVZPUixcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG5pbmRleCA3OTQ5MzdlMTNlN2MzLi45ZWQxN2I2NDM2MjBhIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG5AQCAtNDgsNiAmIzQzOzQ4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aWNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV90cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm1pLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cmN1LmhcJiMzNDtcbiBcbkBAIC0xMTUsNiAmIzQzOzExNiw3IEBAIHRvcnR1cmVfcGFyYW0oaW50LCBsZWFrcG9pbnRlciwgMCwgXCYjMzQ7TGVhayBwb2ludGVyIGRlcmVmZXJlbmNlcyBmcm9tIHJlYWRlcnNcJiMzNDspO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBuX2JhcnJpZXJfY2JzLCAwLCBcJiMzNDsjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nXCYjMzQ7KTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbl91cF9kb3duLCAzMiwgXCYjMzQ7IyBvZiBjb25jdXJyZW50IHVwL2Rvd24gaHJ0aW1lci1iYXNlZCBSQ1UgcmVhZGVyc1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5mYWtld3JpdGVycywgNCwgXCYjMzQ7TnVtYmVyIG9mIFJDVSBmYWtlIHdyaXRlciB0aHJlYWRzXCYjMzQ7KTtcbiYjNDM7dG9ydHVyZV9wYXJhbShib29sLCBubWlfY2FsbHMsIHRydWUsIFwmIzM0O0V4ZXJjaXNlIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkgb24gbm1pX2NhcGFibGUgZmxhdm9yc1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5yZWFkZXJzLCAtMSwgXCYjMzQ7TnVtYmVyIG9mIFJDVSByZWFkZXIgdGhyZWFkc1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShib29sLCBud3JpdGVycywgMSwgXCYjMzQ7TnVtYmVyIG9mIFJDVSB3cml0ZXIgdGhyZWFkcyAoMCBvciAxKVwmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG9iamVjdF9kZWJ1ZywgMCwgXCYjMzQ7RW5hYmxlIGRlYnVnLW9iamVjdCBkb3VibGUgY2FsbF9yY3UoKSB0ZXN0aW5nXCYjMzQ7KTtcbkBAIC0yMTYsNiAmIzQzOzIxOCw4IEBAIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfZmFpbHVyZTtcbiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0cztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVycztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX2lycXM7XG4mIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NhbGw7XG4mIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NiO1xuIHN0YXRpYyBsb25nIG5fYmFycmllcl9hdHRlbXB0cztcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfc3VjY2Vzc2VzOyAvKiBkaWQgcmN1X2JhcnJpZXIgdGVzdCBzdWNjZWVkPyAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5fcmVhZF9leGl0cztcbkBAIC00MzMsNiAmIzQzOzQzNyw3IEBAIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMge1xuIFx0Ym9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpO1xuIFx0bG9uZyBjYmZsb29kX21heDtcbiBcdGludCBpcnFfY2FwYWJsZTtcbiYjNDM7XHRpbnQgbm1pX2NhcGFibGU7XG4gXHRpbnQgY2FuX2Jvb3N0O1xuIFx0aW50IGV4dGVuZGFibGVzO1xuIFx0aW50IHNsb3dfZ3BzO1xuQEAgLTY0OCw2ICYjNDM7NjUzLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgcmN1X29wcyA9IHtcbiBcdC5leHRlbmRhYmxlc1x0XHQ9IFJDVVRPUlRVUkVfTUFYX0VYVEVORCxcbiBcdC5kZWJ1Z19vYmplY3RzXHRcdD0gMSxcbiBcdC5zdGFydF9wb2xsX2lycXNvZmZcdD0gMSxcbiYjNDM7XHQubm1pX2NhcGFibGVcdFx0PSAxLFxuIFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O3JjdVwmIzM0O1xuIH07XG4gXG5AQCAtOTQyLDYgJiM0Mzs5NDgsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1X29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbiYjNDM7XHQubm1pX2NhcGFibGVcdD0gMSxcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7c3JjdVwmIzM0O1xuIH07XG4gXG5AQCAtMTAwNSw2ICYjNDM7MTAxMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHNyY3VkX29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbiYjNDM7XHQubm1pX2NhcGFibGVcdD0gMSxcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7c3JjdWRcJiMzNDtcbiB9O1xuIFxuQEAgLTEyNjksNiAmIzQzOzEyNzcsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyB0YXNrc190cmFjaW5nX29wcyA9IHtcbiBcdC5jYmZsb29kX21heFx0PSA1MDAwMCxcbiBcdC5pcnFfY2FwYWJsZVx0PSAxLFxuIFx0LnNsb3dfZ3BzXHQ9IDEsXG4mIzQzO1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwmIzM0O3Rhc2tzLXRyYWNpbmdcJiMzNDtcbiB9O1xuIFxuQEAgLTI2NTksMTIgJiM0MzsyNjY4LDk0IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxuIFxuIHN0YXRpYyBERUZJTkVfVE9SVFVSRV9SQU5ET01fUEVSQ1BVKHJjdV90b3J0dXJlX3RpbWVyX3JhbmQpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBFeGVyY2lzZSAtXHUwMDNlY2FsbCgpIGZyb20gTk1JIGNvbnRleHQgZm9yIGZsYXZvcnMgdGhhdCBzZXQgLVx1MDAzZW5taV9jYXBhYmxlLiAgQVxuJiM0MzsgKiBwZXItQ1BVIGhhcmR3YXJlIHBlcmYgY291bnRlciBvdmVyZmxvd3MgaW50byBhbiBOTUksIGFuZCBpdHMgaGFuZGxlciBzdWJtaXRzXG4mIzQzOyAqIG9uZSBwcmVhbGxvY2F0ZWQgY2FsbGJhY2sgdmlhIC1cdTAwM2VjYWxsKCkuICBPbmUgY2FsbGJhY2sgaXMgaW4gZmxpZ2h0IGF0IGEgdGltZVxuJiM0MzsgKiAoZ3VhcmRlZCBieSBhbiBhdG9taWMpIHRvIGF2b2lkIGFsbG9jYXRpbmcgaW4gTk1JLiAgVGhpcyBtaXJyb3JzIGhvdyBhIEJQRlxuJiM0MzsgKiBwcm9ncmFtIHJlYWNoZXMgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSS5cbiYjNDM7ICovXG4mIzQzOyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcbiYjNDM7c3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgcmN1X3RvcnR1cmVfbm1pX2F0dHIgPSB7XG4mIzQzO1x0LnR5cGVcdFx0PSBQRVJGX1RZUEVfSEFSRFdBUkUsXG4mIzQzO1x0LmNvbmZpZ1x0XHQ9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUyxcbiYjNDM7XHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyKSxcbiYjNDM7XHQucGlubmVkXHRcdD0gMSxcbiYjNDM7XHQuZGlzYWJsZWRcdD0gMSxcbiYjNDM7XHQuZnJlcVx0XHQ9IDEsXG4mIzQzO1x0LnNhbXBsZV9mcmVxXHQ9IDEwMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKipyY3VfdG9ydHVyZV9ubWlfZXZlbnRzO1xuJiM0MztzdGF0aWMgc3RydWN0IHJjdV9oZWFkIHJjdV90b3J0dXJlX25taV9yaDtcbiYjNDM7c3RhdGljIGF0b21pY190IHJjdV90b3J0dXJlX25taV9yaF9pbnVzZTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jYihzdHJ1Y3QgcmN1X2hlYWQgKnJocClcbiYjNDM7e1xuJiM0MztcdGF0b21pY19sb25nX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYik7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiYjNDM7e1xuJiM0MztcdGlmICghaW5fbm1pKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKGN1cl9vcHMtXHUwMDNlY2FsbCBcdTAwMjZcdTAwMjYgIWF0b21pY194Y2hnKFx1MDAyNnJjdV90b3J0dXJlX25taV9yaF9pbnVzZSwgMSkpIHtcbiYjNDM7XHRcdGN1cl9vcHMtXHUwMDNlY2FsbChcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmgsIHJjdV90b3J0dXJlX25taV9jYik7XG4mIzQzO1x0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50O1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGlmICghbm1pX2NhbGxzIHx8ICFjdXJfb3BzLVx1MDAzZW5taV9jYXBhYmxlIHx8ICFjdXJfb3BzLVx1MDAzZWNhbGwpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCpyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKSxcbiYjNDM7XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbiYjNDM7XHRcdGV2ZW50ID0gcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX2F0dHIsIGNwdSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgTlVMTCwgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93LCBOVUxMKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoZXZlbnQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSA9IGV2ZW50O1xuJiM0MztcdFx0cGVyZl9ldmVudF9lbmFibGUoZXZlbnQpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRwZXJmX2V2ZW50X2Rpc2FibGUocmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKTtcbiYjNDM7XHRcdHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwocmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKTtcbiYjNDM7XHR9XG4mIzQzO1x0a2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7XG4mIzQzO1x0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IE5VTEw7XG4mIzQzO31cbiYjNDM7I2Vsc2UgLyogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKSB7IH1cbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9XG4mIzQzOyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXG4mIzQzO1xuIC8qXG4gICogUkNVIHRvcnR1cmUgcmVhZGVyIGZyb20gdGltZXIgaGFuZGxlci4gIERlcmVmZXJlbmNlcyByY3VfdG9ydHVyZV9jdXJyZW50LFxuICAqIGluY3JlbWVudGluZyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBwaXBlbGluZSBhcnJheS4gIFRoZVxuICAqIGNvdW50ZXIgaW4gdGhlIGVsZW1lbnQgc2hvdWxkIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAxLCBvdGhlcndpc2UsIHRoZVxuICAqIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyBicm9rZW4uXG4gICovXG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp1bnVzZWQpXG4ge1xuIFx0V0FSTl9PTl9PTkNFKCFpbl9zZXJ2aW5nX3NvZnRpcnEoKSk7XG5AQCAtMzA0Nyw2ICYjNDM7MzEzOCw5IEBAIHJjdV90b3J0dXJlX3N0YXRzX3ByaW50KHZvaWQpXG4gXHRcdGRhdGFfcmFjZShuX2JhcnJpZXJfYXR0ZW1wdHMpLFxuIFx0XHRkYXRhX3JhY2Uobl9yY3VfdG9ydHVyZV9iYXJyaWVyX2Vycm9yKSk7XG4gXHRwcl9jb250KFwmIzM0O3JlYWQtZXhpdHM6ICVsZCBcJiMzNDssIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLlxuJiM0MztcdHByX2NvbnQoXCYjMzQ7bm1pLWNhbGxzOiAlbGQgbm1pLWNiczogJWxkIFwmIzM0OyxcbiYjNDM7XHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksXG4mIzQzO1x0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XG4gXHRwcl9jb250KFwmIzM0O25vY2ItdG9nZ2xlczogJWxkOiVsZCBcJiMzNDssXG4gXHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9ub2NiX29mZmxvYWQpLCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fbm9jYl9kZW9mZmxvYWQpKTtcbiBcdHByX2NvbnQoXCYjMzQ7Z3B3cmFwczogJWxkXFxuXCYjMzQ7LCBuX2dwd3JhcHMpO1xuQEAgLTQzMjUsNiAmIzQzOzQ0MTksOCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXG4gXHRcdGtmcmVlKHJlYWRlcl90YXNrcyk7XG4gXHRcdHJlYWRlcl90YXNrcyA9IE5VTEw7XG4gXHR9XG4mIzQzO1x0LyogRGlzYWJsZSB0aGUgcGVyZiBjb3VudGVycyAoYW5kIHRodXMgdGhlIE5NSSAtXHUwMDNlY2FsbCgpIGZpcmluZykgbm93LiAqL1xuJiM0MztcdHJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7XG4gXHRrZnJlZShyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGspO1xuIFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDtcbiBcbkBAIC00MzU0LDYgJiM0Mzs0NDUwLDIwIEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcbiBcdFx0cHJfaW5mbyhcJiMzNDslczogSW52b2tpbmcgJXBTKCkuXFxuXCYjMzQ7LCBfX2Z1bmNfXywgY3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKTtcbiBcdFx0Y3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKCk7XG4gXHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogY2JfYmFycmllcigpIGFib3ZlIGRyYWluZWQgZXZlcnkgZGVmZXJyZWQgTk1JIC1cdTAwM2VjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZVxuJiM0MztcdCAqIGNvdW50IGlzc3VlZCBmcm9tIE5NSSBtdXN0IGVxdWFsIHRoZSBjb3VudCBpbnZva2VkOyBhIG1pc21hdGNoIG1lYW5zIGFcbiYjNDM7XHQgKiBjYWxsYmFjayB3YXMgbG9zdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKSAhPVxuJiM0MztcdCAgICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSkge1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7JXM6IE5NSSAtXHUwMDNlY2FsbCgpIGxvc3QgYSBjYWxsYmFjazogaXNzdWVkICVsZCBpbnZva2VkICVsZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IF9fZnVuY19fLCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxuJiM0MztcdFx0XHQgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpO1xuJiM0MztcdFx0YXRvbWljX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX2Vycm9yKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGN1cl9vcHMtXHUwMDNlY2xlYW51cCAhPSBOVUxMKVxuIFx0XHRjdXJfb3BzLVx1MDAzZWNsZWFudXAoKTtcbiBcbkBAIC00Nzg2LDYgJiM0Mzs0ODk2LDggQEAgcmN1X3RvcnR1cmVfaW5pdCh2b2lkKVxuIFx0XHRmaXJzdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gdW53aW5kO1xuIFx0fVxuJiM0MztcdC8qIEFybSB0aGUgcGVyLUNQVSBwZXJmIGNvdW50ZXJzIHRoYXQgZHJpdmUgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSS4gKi9cbiYjNDM7XHRyY3VfdG9ydHVyZV9ubWlfaW5pdCgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlYWxyZWFkZXJzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGtbaV0ucnRjX2Noa3JkciA9IC0xO1xuIFx0XHRmaXJzdGVyciA9IHRvcnR1cmVfY3JlYXRlX2t0aHJlYWQocmN1X3RvcnR1cmVfcmVhZGVyLCAodm9pZCAqKWksXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dGlueS5jIGIva2VybmVsL3JjdS9zcmN1dGlueS5jXG5pbmRleCA1NThiYThkMzE2ZGI2Li5hMGE5MWY3ZmMyNThhIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWVtcHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuQEAgLTQzLDYgJiM0Mzs0NCw4IEBAIHN0YXRpYyBpbnQgaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRJTklUX1dPUksoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzc3AtXHUwMDNlc3JjdV93b3JrLmVudHJ5KTtcbiBcdGluaXRfaXJxX3dvcmsoXHUwMDI2c3NwLVx1MDAzZXNyY3VfaXJxX3dvcmssIHNyY3VfdGlueV9pcnFfd29yayk7XG4mIzQzO1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9jYnMpO1xuJiM0MztcdGluaXRfaXJxX3dvcmsoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2l3LCBzcmN1X2RlZmVyX2RyYWluKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC04Niw2ICYjNDM7ODksOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChpbml0X3NyY3Vfc3RydWN0X2dlbmVyaWMpO1xuIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB7XG4gXHRXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSk7XG4mIzQzO1x0LyogUmUtaXNzdWUgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBzbyAtXHUwMDNlc3JjdV9jYl9oZWFkIHNlZXMgdGhlbSBiZWxvdy4gKi9cbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbiYjNDM7XHRcdGlycV93b3JrX3N5bmMoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2l3KTtcbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2c3NwLVx1MDAzZXNyY3VfaXJxX3dvcmspO1xuIFx0Zmx1c2hfd29yayhcdTAwMjZzc3AtXHUwMDNlc3JjdV93b3JrKTtcbiBcdFdBUk5fT04oc3NwLVx1MDAzZXNyY3VfZ3BfcnVubmluZyk7XG5AQCAtMjEzLDExICYjNDM7MjE5LDExIEBAIHN0YXRpYyB2b2lkIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBcbiAvKlxuLSAqIEVucXVldWUgYW4gU1JDVSBjYWxsYmFjayBvbiB0aGUgc3BlY2lmaWVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZSxcbi0gKiBpbml0aWF0aW5nIGdyYWNlLXBlcmlvZCBwcm9jZXNzaW5nIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcuXG4mIzQzOyAqIEVucXVldWUgQHJocCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHNyY3VfZGVmZXJfZHJhaW4oKSB0b1xuJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLlxuICAqL1xuLXZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbi1cdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxuJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuJiM0MztcdFx0XHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuQEAgLTIzMSw2ICYjNDM7MjM3LDQ2IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCk7XG4gXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbiYjNDM7XG4mIzQzOy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXG4mIzQzO3N0YXRpYyBib29sIHNyY3VfZGVmZXJfZHJhaW5pbmc7XG4mIzQzO1xuJiM0Mzt2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QsIGRlZmVyX2l3KTtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4mIzQzO1xuJiM0MztcdC8qIENhbGxiYWNrcyBhcmUgdW5vcmRlcmVkLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy4gKi9cbiYjNDM7XHRzcmN1X2RlZmVyX2RyYWluaW5nID0gdHJ1ZTtcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2NicykpIHtcbiYjNDM7XHRcdHN0cnVjdCByY3VfaGVhZCAqcmhwID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7XG4mIzQzO1xuJiM0MztcdFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtXHUwMDNlZnVuYyk7XG4mIzQzO1x0fVxuJiM0MztcdHNyY3VfZGVmZXJfZHJhaW5pbmcgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2RlZmVyX2RyYWluKTtcbiYjNDM7XG4mIzQzO3ZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiYjNDM7XHQgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiYjNDM7e1xuJiM0MztcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbiYjNDM7XHRcdC8qIEEgcmUtZW50cmFudCBjYWxsX3NyY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0LiAqL1xuJiM0MztcdFx0aWYgKHNyY3VfZGVmZXJfZHJhaW5pbmcgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuJiM0MztcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Y2FsbF9zcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyaHAtXHUwMDNlZnVuYyA9IGZ1bmM7XG4mIzQzO1x0XHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2NicykpXG4mIzQzO1x0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9pdyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuJiM0MztcbiYjNDM7XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9zcmN1KTtcbiBcbiAvKlxuQEAgLTI2MCw2ICYjNDM7MzA2LDE1IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7XG4gXG4mIzQzOy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBmb3IgYWxsIGluLWZsaWdodCBvbmVzLiAqL1xuJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiYjNDM7e1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuJiM0MztcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2JhcnJpZXIpO1xuJiM0MztcbiAvKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuaW5kZXggMzA0MTEyNjc0ZThhMi4uMjY2OTU5NGE2NDAyZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJjcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWVtcHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuQEAgLTc5LDYgJiM0Mzs4MCw0NyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3NyY3Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBzdGF0aWMgdm9pZCBzcmN1X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqd29yayk7XG4gc3RhdGljIHZvaWQgc3JjdV9kZWxheV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLCBzaGFyZWQgYnkgZXZlcnkgc3JjdV9zdHJ1Y3QuICBBIGRlZmVycmVkXG4mIzQzOyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJiMzOTtzIC1cdTAwM2VkZWZlcl9jYnM7IHRoYXQgc3JjdV9kYXRhIGlzIGNoYWluZWRcbiYjNDM7ICogdmlhIC1cdTAwM2VkZWZlcl9saW5rIG9udG8gLVx1MDAzZWxpc3QsIHdoaWNoIHRoZSBpcnFfd29yayB3YWxrcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBzcmN1X2RlZmVyIHtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZFx0bGlzdDtcbiYjNDM7XHRzdHJ1Y3QgaXJxX3dvcmtcdFx0aXc7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3RcdFx0bG9jaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3JjdV9kZWZlciwgc3JjdV9kZWZlcikgPSB7XG4mIzQzO1x0LmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoc3JjdV9kZWZlci5sb2NrKSxcbiYjNDM7XHQuaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbiksXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBTZXQgd2hpbGUgc3JjdV9kZWZlcl9kcmFpbigpIHJlLWlzc3VlcywgdG8gY2F0Y2ggYSByZS1lbnRyYW50IGNhbGxfc3JjdSgpLiAqL1xuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgc3JjdV9kZWZlcl9kcmFpbmluZyk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBGbHVzaCBwZW5kaW5nIGRlZmVycmVkIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyBzcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS5cbiYjNDM7ICogV2FpdCBvdXQgYW4gb25saW5lIENQVSYjMzk7cyBpcnFfd29yazsgZHJhaW4gYW4gb2ZmbGluZSBDUFUmIzM5O3MgbGlzdCBkaXJlY3RseSwgYXNcbiYjNDM7ICogaXRzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiYjNDM7XHRcdGlmIChjcHVfb25saW5lKGNwdSkpXG4mIzQzO1x0XHRcdGlycV93b3JrX3N5bmMoXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c3JjdV9kZWZlcl9kcmFpbihcdTAwMjZwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSkuaXcpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEluaXRpYWxpemUgU1JDVSBwZXItQ1BVIGRhdGEuICBOb3RlIHRoYXQgc3RhdGljYWxseSBhbGxvY2F0ZWRcbiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmVzIG1pZ2h0IGFscmVhZHkgaGF2ZSBzcmN1X3JlYWRfbG9jaygpIGFuZFxuQEAgLTEwNyw2ICYjNDM7MTQ5LDExIEBAIHN0YXRpYyB2b2lkIGluaXRfc3JjdV9zdHJ1Y3RfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdFx0c2RwLVx1MDAzZWNwdSA9IGNwdTtcbiBcdFx0SU5JVF9XT1JLKFx1MDAyNnNkcC1cdTAwM2V3b3JrLCBzcmN1X2ludm9rZV9jYWxsYmFja3MpO1xuIFx0XHR0aW1lcl9zZXR1cChcdTAwMjZzZHAtXHUwMDNlZGVsYXlfd29yaywgc3JjdV9kZWxheV90aW1lciwgMCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogLVx1MDAzZWRlZmVyX2NicyBhbmQgLVx1MDAzZWRlZmVyX2xpbmsgYXJlIHZhbGlkIHdoZW4gemVyb2VkIGFuZCBhcmUgbm90XG4mIzQzO1x0XHQgKiByZWluaXRpYWxpemVkIGhlcmUsIGxlc3Qgd2UgY2xvYmJlciBjYWxsYmFja3MgYSByZWVudHJhbnRcbiYjNDM7XHRcdCAqIGNhbGxfc3JjdSgpIGFscmVhZHkgc3RhZ2VkLiAgU2VlIF9fY2FsbF9zcmN1KCkuXG4mIzQzO1x0XHQgKi9cbiBcdFx0c2RwLVx1MDAzZXNzcCA9IHNzcDtcbiBcdH1cbiB9XG5AQCAtNjk1LDcgJiM0Mzs3NDIsMTIgQEAgdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIFx0XHRyZXR1cm47IC8qIEp1c3QgbGVhayBpdCEgKi9cbiBcdGlmIChXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSkpXG4gXHRcdHJldHVybjsgLyogSnVzdCBsZWFrIGl0ISAqL1xuLVx0LyogV2FpdCBmb3IgaXJxX3dvcmsgdG8gZmluaXNoIGZpcnN0IGFzIGl0IG1heSBxdWV1ZSBhIG5ldyB3b3JrLiAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRHJhaW4gZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzeW5jaW5nIC1cdTAwM2VpcnFfd29yazogcmUtaXNzdWluZyBvbmUgY2FuXG4mIzQzO1x0ICogc3RhcnQgYSBncmFjZSBwZXJpb2QgYW5kIHJlLXF1ZXVlIC1cdTAwM2VpcnFfd29yaywgd2hpY2ggdGhlbiBzY2hlZHVsZXNcbiYjNDM7XHQgKiAtXHUwMDNld29yaywgc28gYm90aCBtdXN0IGJlIHdhaXRlZCBvdXQgYWZ0ZXIgdGhlIGRyYWluLlxuJiM0MztcdCAqL1xuJiM0MztcdHNyY3VfZGVmZXJfZmx1c2goKTtcbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2c3VwLVx1MDAzZWlycV93b3JrKTtcbiBcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzdXAtXHUwMDNld29yayk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG5AQCAtMTQxMCw4ICYjNDM7MTQ2MiwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCxcbiAgKiBzcmN1X3JlYWRfbG9jaygpLCBhbmQgc3JjdV9yZWFkX3VubG9jaygpIHRoYXQgYXJlIGFsbCBwYXNzZWQgdGhlIHNhbWVcbiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUuXG4gICovXG4tc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuLVx0XHRcdHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcbiYjNDM7LypcbiYjNDM7ICogVGhlIHNyY3VfY2JsaXN0IGFuZCBzcmN1X25vZGUgdHJlZSBhcmUgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWRcbiYjNDM7ICogKHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkgZW5xdWV1ZXMgdW5kZXIgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgYW5kIG1heSB3YWxrXG4mIzQzOyAqIHRoZSB0cmVlKS4gIExpa2UgY2FsbF9yY3UoKSwgX19jYWxsX3NyY3UoKSBkZWZlcnMgd2hlbiBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5XG4mIzQzOyAqIGRpc2FibGVkLCBzbyBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpIGZyb20gYVxuJiM0MzsgKiBCUEYgcHJvZ3JhbSAtLSBjYW5ub3QgY29ycnVwdCB0aGUgbGlzdCBvciBkZWFkbG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHNyY3VfZG9fZW5xdWV1ZShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4mIzQzO1x0XHRcdCAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXG4ge1xuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHtcbiBcdFx0LyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi9cbkBAIC0xNDIzLDYgJiM0MzsxNDgyLDgxIEBAIHN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdCh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiYjNDM7XHRcdFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tXG4mIzQzO1x0XHQgKiBpbnNpZGUgc3JjdV9kZWZlcl9kcmFpbigpLiAgUmUtcXVldWluZyB3b3VsZCBsaXZlbG9jayB0aGVcbiYjNDM7XHRcdCAqIGRyYWluLCBzbyBkcm9wIHRoZSBjYWxsYmFjazsgYW4gTk1JIGNhbm5vdCBsb29wLCBzbyBsZXQgaXQgaW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICh0aGlzX2NwdV9yZWFkKHNyY3VfZGVmZXJfZHJhaW5pbmcpIFx1MDAyNlx1MDAyNiAhaW5fbm1pKCkpIHtcbiYjNDM7XHRcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O2NhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2RwID0gdGhpc19jcHVfcHRyKHNzcC1cdTAwM2VzZGEpO1xuJiM0MztcdFx0cmhwLVx1MDAzZWZ1bmMgPSBmdW5jO1xuJiM0MztcdFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpKSB7XG4mIzQzO1x0XHRcdC8qIEZpcnN0IGRlZmVycmFsIG9uIHRoaXMgc3JjdV9kYXRhOiBjaGFpbiBpdCBmb3IgdGhlIGRyYWluLiAqL1xuJiM0MztcdFx0XHRzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9IHRoaXNfY3B1X3B0cihcdTAwMjZzcmN1X2RlZmVyKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHNkcC1cdTAwM2Vzc3AgPSBzc3A7XG4mIzQzO1x0XHRcdGlmIChsbGlzdF9hZGQoXHUwMDI2c2RwLVx1MDAzZWRlZmVyX2xpbmssIFx1MDAyNnNuZHAtXHUwMDNlbGlzdCkpXG4mIzQzO1x0XHRcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2c25kcC1cdTAwM2Vpdyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuJiM0MztcbiYjNDM7XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMsIGRvX25vcm0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc28gdGhleSBjYW5ub3QgZGVmZXJcbiYjNDM7ICogYWdhaW4uICAtXHUwMDNlbG9jayBzZXJpYWxpemVzIHRoZSBkcmFpbmVyczogdGhlIGlycV93b3JrLCBzcmN1X2RlZmVyX2ZsdXNoKCkgYW5kXG4mIzQzOyAqIHNyY3Vfb2ZmbGluZV9kcmFpbigpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyk7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKnNub2RlLCAqc25leHQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNuZHAtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdHRoaXNfY3B1X3dyaXRlKHNyY3VfZGVmZXJfZHJhaW5pbmcsIHRydWUpO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX3NhZmUoc25vZGUsIHNuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnNuZHAtXHUwMDNlbGlzdCkpIHtcbiYjNDM7XHRcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IGNvbnRhaW5lcl9vZihzbm9kZSwgc3RydWN0IHNyY3VfZGF0YSwgZGVmZXJfbGluayk7XG4mIzQzO1x0XHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCA9IHNkcC1cdTAwM2Vzc3A7XG4mIzQzO1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqY25vZGUsICpjbmV4dDtcbiYjNDM7XG4mIzQzO1x0XHRjbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2c2RwLVx1MDAzZWRlZmVyX2Nicyk7XG4mIzQzO1x0XHRsbGlzdF9mb3JfZWFjaF9zYWZlKGNub2RlLCBjbmV4dCwgY25vZGUpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7XG4mIzQzO1xuJiM0MztcdFx0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jLCB0cnVlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0dGhpc19jcHVfd3JpdGUoc3JjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnNuZHAtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEcmFpbiBAY3B1JiMzOTtzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcyBmcm9tIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKVxuJiM0MzsgKiBvbmNlIEBjcHUgaXMgZGVhZC4gIE9uZSBwYXNzIGNvdmVycyBldmVyeSBzcmN1X3N0cnVjdCwgYW5kIHRoZSByZS1pc3N1ZSBsYW5kc1xuJiM0MzsgKiBvbiB0aGUgY3VycmVudCBDUFUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHNyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBjYWxsX3NyY3UoKSAtIFF1ZXVlIGEgY2FsbGJhY2sgZm9yIGludm9jYXRpb24gYWZ0ZXIgYW4gU1JDVSBncmFjZSBwZXJpb2RcbiAgKiBAc3NwOiBzcmN1X3N0cnVjdCBpbiBxdWV1ZSB0aGUgY2FsbGJhY2tcbkBAIC0xNjc3LDkgJiM0MzsxODExLDE3IEBAIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIHtcbiBcdGludCBjcHU7XG4gXHRpbnQgaWR4O1xuLVx0dW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHM7XG4gXG4gXHRjaGVja19pbml0X3NyY3Vfc3RydWN0KHNzcCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gIFRoZVxuJiM0MztcdCAqIHNoYXJlZCBpcnFfd29yayBtYXkgYWxzbyBkcmFpbiBvdGhlciBzcmN1X3N0cnVjdHMmIzM5Oywgd2hpY2ggaXMgaGFybWxlc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3JjdV9kZWZlcl9mbHVzaCgpO1xuJiM0MztcbiYjNDM7XHRzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9tdXRleCk7XG4gXHRpZiAocmN1X3NlcV9kb25lKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxLCBzKSkge1xuIFx0XHRzbXBfbWIoKTsgLyogRm9yY2Ugb3JkZXJpbmcgZm9sbG93aW5nIHJldHVybi4gKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RpbnkuYyBiL2tlcm5lbC9yY3UvdGlueS5jXG5pbmRleCBkY2NjY2Q2YmU5NDExLi41NzM2Yjk2NGQ4ZWUxIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90aW55LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdGlueS5jXG5AQCAtMTEsNiAmIzQzOzExLDggQEBcbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbkBAIC00Miw4ICYjNDM7NDQsODYgQEAgc3RhdGljIHN0cnVjdCByY3VfY3RybGJsayByY3VfY3RybGJsayA9IHtcbiBcdC5ncF9zZXFcdFx0PSAwIC0gMzAwVUwsXG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKVxuJiM0MzsgKiB0aGF0IGFycml2ZXMgd2l0aCBpbnRlcnJ1cHRzIG9mZiBzdGFnZXMgdGhlIGNhbGxiYWNrIG9uIGEgbG9ja2xlc3MgbGlzdCB0aGF0XG4mIzQzOyAqIGFuIGlycV93b3JrIHJlLWlzc3VlcyBsYXRlci4gIE9uZSBnbG9iYWwgbGlzdCBhbmQgaXJxX3dvcmsgc3VmZmljZSwgYXMgVGlueVxuJiM0MzsgKiBSQ1UgaXMgdW5pcHJvY2Vzc29yLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xuJiM0MztzdGF0aWMgTExJU1RfSEVBRChyY3VfZGVmZXJfbGlzdCk7XG4mIzQzO3N0YXRpYyBERUZJTkVfSVJRX1dPUksocmN1X2RlZmVyX2l3LCByY3VfZGVmZXJfZHJhaW4pO1xuJiM0MztzdGF0aWMgYm9vbCByY3VfZGVmZXJfZHJhaW5pbmc7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkgdG9cbiYjNDM7ICogcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsIGNvbmRpdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcbiYjNDM7XHRcdGlmIChhdG9taWNfaW5jX3JldHVybihcdTAwMjZkb3VibGVmcmVlcykgXHUwMDNjIDQpIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0OyVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cdTAwM2UlcFMoKSEhISAgXCYjMzQ7LCBfX2Z1bmNfXywgaGVhZCwgaGVhZC1cdTAwM2VmdW5jKTtcbiYjNDM7XHRcdFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbiYjNDM7XHRoZWFkLVx1MDAzZW5leHQgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4mIzQzO1x0KnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkO1xuJiM0MztcdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcdTAwMjZoZWFkLVx1MDAzZW5leHQ7XG4mIzQzO1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkge1xuJiM0MztcdFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cbiYjNDM7XHRcdHJlc2NoZWRfY3B1KDApO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4mIzQzO1xuJiM0MztcdC8qIENhbGxiYWNrcyBhcmUgdW5vcmRlcmVkLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy4gKi9cbiYjNDM7XHRyY3VfZGVmZXJfZHJhaW5pbmcgPSB0cnVlO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZyY3VfZGVmZXJfbGlzdCkpIHtcbiYjNDM7XHRcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xuJiM0MztcbiYjNDM7XHRcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9kZWZlcl9kcmFpbmluZyA9IGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4mIzQzO3tcbiYjNDM7XHQvKiBBIHJlLWVudHJhbnQgY2FsbF9yY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0OyBkcm9wIGl0LiAqL1xuJiM0MztcdGlmIChyY3VfZGVmZXJfZHJhaW5pbmcgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuJiM0MztcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O2NhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuJiM0MztcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgXHUwMDI2cmN1X2RlZmVyX2xpc3QpKVxuJiM0MztcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2cmN1X2RlZmVyX2l3KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyByY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLiAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpcnFfd29ya19zeW5jKFx1MDAyNnJjdV9kZWZlcl9pdyk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCByY3VfYmFycmllcih2b2lkKVxuIHtcbiYjNDM7XHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGZpcnN0LiAqL1xuJiM0MztcdHJjdV9kZWZlcl9mbHVzaCgpO1xuIFx0d2FpdF9yY3VfZ3AoY2FsbF9yY3VfaHVycnkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHJjdV9iYXJyaWVyKTtcbkBAIC0xNTcsMjkgJiM0MzsyMzcsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTtcbiAgKi9cbiB2b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4tXHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVxuLVx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4tXHRcdGlmIChhdG9taWNfaW5jX3JldHVybihcdTAwMjZkb3VibGVmcmVlcykgXHUwMDNjIDQpIHtcbi1cdFx0XHRwcl9lcnIoXCYjMzQ7JXMoKTogRG91YmxlLWZyZWVkIENCICVwLVx1MDAzZSVwUygpISEhICBcJiMzNDssIF9fZnVuY19fLCBoZWFkLCBoZWFkLVx1MDAzZWZ1bmMpO1xuLVx0XHRcdG1lbV9kdW1wX29iaihoZWFkKTtcbi1cdFx0fVxuJiM0MztcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbiYjNDM7XHRcdGNhbGxfcmN1X2RlZmVyKGhlYWQsIGZ1bmMpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuLVx0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbi1cbi1cdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbi1cdCpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDtcbi1cdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcdTAwMjZoZWFkLVx1MDAzZW5leHQ7XG4tXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4mIzQzO1x0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbiBcbi1cdGlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7XG4tXHRcdC8qIGZvcmNlIHNjaGVkdWxpbmcgZm9yIHJjdV9xcygpICovXG4tXHRcdHJlc2NoZWRfY3B1KDApO1xuLVx0fVxuJiM0MztcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuY1xuaW5kZXggOTY4NDhmYzFmMDJiOC4uZTIxZWI1NTFiMTEwZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvdHJlZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3RyZWUuY1xuQEAgLTI0LDYgJiM0MzsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2RlYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ubWkuaFx1MDAzZVxuQEAgLTMxNDgsMjEgJiM0MzszMTQ5LDI4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2NiX292bGQoc3RydWN0IHJjdV9kYXRhICpyZHApXG4gXHRyYXdfc3Bpbl91bmxvY2tfcmN1X25vZGUocm5wKTtcbiB9XG4gXG4tc3RhdGljIHZvaWRcbi1fX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcbiYjNDM7LypcbiYjNDM7ICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKVxuJiM0MzsgKiB0aGF0IGFycml2ZXMgd2l0aCBpbnRlcnJ1cHRzIG9mZiAoc2VlIHNob3VsZF9yY3VfZGVmZXIoKSkgc3RhZ2VzIHRoZSBjYWxsYmFja1xuJiM0MzsgKiBvbiBhIHBlci1DUFUgbGxpc3QgdGhhdCBhbiBpcnFfd29yayByZS1pc3N1ZXMgb25jZSBpbnRlcnJ1cHRzIGFyZSBvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbiYjNDM7XG4mIzQzOy8qIFNldCB3aGlsZSByY3VfZGVmZXJfZHJhaW4oKSByZS1pc3N1ZXMsIHRvIGNhdGNoIGEgcmUtZW50cmFudCBjYWxsX3JjdSgpLiAqL1xuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgcmN1X2RlZmVyX2RyYWluaW5nKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEVucXVldWUgQGhlYWQgb24gdGhpcyBDUFUmIzM5O3MgcmN1X3NlZ2NibGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpXG4mIzQzOyAqIHRvIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbFxuJiM0MzsgKiBjb25kaXRpb24uICBFaXRoZXIgY2FsbGVyIG1heSBoYXZlIGludGVycnVwdHMgYWxyZWFkeSBkaXNhYmxlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuIHtcbiBcdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRib29sIGxhenk7XG4gXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcDtcbiBcbi1cdC8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovXG4tXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcdTAwMjYgKHNpemVvZih2b2lkICopIC0gMSkpO1xuLVxuLVx0LyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqL1xuLVx0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXG4tXHRcdHJldHVybjtcbi1cbiBcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9yY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suXG5AQCAtMzIwNiw2ICYjNDM7MzIxNCw5MiBAQCBfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdCBkZWZlclxuJiM0MzsgKiBhZ2Fpbi4gIC1cdTAwM2VkZWZlcl9sb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGlzIENQVSYjMzk7cyBpcnFfd29yayxcbiYjNDM7ICogcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCByY3VfZGF0YSwgZGVmZXJfd29yayk7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xuJiM0MztcdHRoaXNfY3B1X3dyaXRlKHJjdV9kZWZlcl9kcmFpbmluZywgdHJ1ZSk7XG4mIzQzO1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSkge1xuJiM0MztcdFx0c3RydWN0IHJjdV9oZWFkICpoZWFkID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7XG4mIzQzO1xuJiM0MztcdFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cdTAwM2VmdW5jLCBmYWxzZSk7XG4mIzQzO1x0fVxuJiM0MztcdHRoaXNfY3B1X3dyaXRlKHJjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9sb2NrLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFN0YWdlIEBoZWFkIGZvciB0aGlzIENQVSYjMzk7cyBpcnFfd29yayB3aGVuIGNhbGxfcmN1KCkgY2Fubm90IGVucXVldWUgbm93LiAqL1xuJiM0MztzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHRoaXNfY3B1X3B0cihcdTAwMjZyY3VfZGF0YSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW5zdHJ1bWVudGF0aW9uIG9uIHRoZSBlbnF1ZXVlIHBhdGggY2FuIHJlLWVudGVyIGhlcmUgZnJvbSBpbnNpZGVcbiYjNDM7XHQgKiByY3VfZGVmZXJfZHJhaW4oKS4gIFJlLXF1ZXVpbmcgd291bGQgbGl2ZWxvY2sgdGhlIGRyYWluLCBzbyBkcm9wIHRoZVxuJiM0MztcdCAqIGNhbGxiYWNrOyBhbiBOTUkgaXMgb25lLXNob3QgYW5kIGNhbm5vdCBsb29wLCBzbyBsZXQgaXQgdGhyb3VnaC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodGhpc19jcHVfcmVhZChyY3VfZGVmZXJfZHJhaW5pbmcpIFx1MDAyNlx1MDAyNiAhaW5fbm1pKCkpIHtcbiYjNDM7XHRcdFdBUk5fT05DRSgxLCBcJiMzNDtjYWxsX3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbiYjNDM7XHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSlcbiYjNDM7XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl93b3JrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmdcbiYjNDM7ICogcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gIFRoaXMgcnVucyBiZWZvcmUgcmN1X2JhcnJpZXIoKSBzY2FucyB0aGVcbiYjNDM7ICogbGlzdHMuICBBbiBvbmxpbmUgQ1BVJiMzOTtzIG93biBpcnFfd29yayByZS1pc3N1ZXMgaXRzIGNhbGxiYWNrcywgc28gd2FpdCBpdCBvdXQ7XG4mIzQzOyAqIGFuIG9mZmxpbmUgQ1BVJiMzOTtzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4sIHNvIGRyYWluIGl0cyBsaXN0IGRpcmVjdGx5XG4mIzQzOyAqIG9udG8gdGhpcyBDUFUgaW5zdGVhZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjcHVfb25saW5lKGNwdSkpXG4mIzQzO1x0XHRcdGlycV93b3JrX3N5bmMoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7X19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4mIzQzO3tcbiYjNDM7XHQvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqL1xuJiM0MztcdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4mIzQzO1xuJiM0MztcdC8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi9cbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuJiM0MztcbiYjNDM7XHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBmdW5jLCBsYXp5X2luKTtcbiYjNDM7fVxuJiM0MztcbiAjaWZkZWYgQ09ORklHX1JDVV9MQVpZXG4gc3RhdGljIGJvb2wgZW5hYmxlX3JjdV9sYXp5IF9fcmVhZF9tb3N0bHkgPSAhSVNfRU5BQkxFRChDT05GSUdfUkNVX0xBWllfREVGQVVMVF9PRkYpO1xuIG1vZHVsZV9wYXJhbShlbmFibGVfcmN1X2xhenksIGJvb2wsIDA0NDQpO1xuQEAgLTM4OTYsOCAmIzQzOzM5OTAsMTIgQEAgdm9pZCByY3VfYmFycmllcih2b2lkKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHVuc2lnbmVkIGxvbmcgZ3NlcTtcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xuLVx0dW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnJjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHM7XG4gXG4mIzQzO1x0LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gKi9cbiYjNDM7XHRyY3VfZGVmZXJfZmx1c2goKTtcbiYjNDM7XG4mIzQzO1x0cyA9IHJjdV9zZXFfc25hcChcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XG4gXHRyY3VfYmFycmllcl90cmFjZShUUFMoXCYjMzQ7QmVnaW5cJiMzNDspLCAtMSwgcyk7XG4gXG4gXHQvKiBUYWtlIG11dGV4IHRvIHNlcmlhbGl6ZSBjb25jdXJyZW50IHJjdV9iYXJyaWVyKCkgcmVxdWVzdHMuICovXG5AQCAtNDIzMSw2ICYjNDM7NDMyOSwxMCBAQCByY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpXG4gXHRyZHAtXHUwMDNlcmN1X29ubF9ncF9zdGF0ZSA9IFJDVV9HUF9DTEVBTkVEO1xuIFx0cmRwLVx1MDAzZWxhc3Rfc2NoZWRfY2xvY2sgPSBqaWZmaWVzO1xuIFx0cmRwLVx1MDAzZWNwdSA9IGNwdTtcbiYjNDM7XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2hlYWQpO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jayk7XG4mIzQzO1x0LyogSGFyZCBpcnFfd29yayBzbyB0aGUgcmUtaXNzdWUgcnVucyBwcm9tcHRseS4gKi9cbiYjNDM7XHRyZHAtXHUwMDNlZGVmZXJfd29yayA9IElSUV9XT1JLX0lOSVRfSEFSRChyY3VfZGVmZXJfZHJhaW4pO1xuIFx0cmN1X2Jvb3RfaW5pdF9ub2NiX3BlcmNwdV9kYXRhKHJkcCk7XG4gfVxuIFxuQEAgLTQ1MjgsNiAmIzQzOzQ2MzAsMTYgQEAgdm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKGludCBjcHUpXG4gXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xuIFx0Ym9vbCBuZWVkd2FrZTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENhbGxiYWNrcyB0aGUgb3V0Z29pbmcgQ1BVIGRlZmVycmVkIGxhdGUgaW4gdGhlIG9mZmxpbmUgcGF0aCAocGFzdCB0aGVcbiYjNDM7XHQgKiBwb2ludCBpdHMgaXJxX3dvcmsgY2FuIHJ1bikgc2l0IG9uIC1cdTAwM2VkZWZlcl9oZWFkLCB3aGljaCB0aGUgLVx1MDAzZWNibGlzdFxuJiM0MztcdCAqIG1pZ3JhdGlvbiBiZWxvdyBkb2VzIG5vdCBjb3Zlci4gIERyYWluIHRoZW0gaGVyZSwgYmVmb3JlIHRoZSBlYXJseVxuJiM0MztcdCAqIHJldHVybnM7IHRoZSByZS1pc3N1ZSBsYW5kcyBvbiB0aGlzIENQVS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuJiM0MztcdC8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcy4gKi9cbiYjNDM7XHRzcmN1X29mZmxpbmVfZHJhaW4oY3B1KTtcbiYjNDM7XG4gXHRpZiAocmN1X3JkcF9pc19vZmZsb2FkZWQocmRwKSlcbiBcdFx0cmV0dXJuO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmhcbmluZGV4IGVlZGZhNDMwNTllODAuLjNhOGUxNzEzNmM1YTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmhcbkBAIC0yMjksNiAmIzQzOzIyOSwxMSBAQCBzdHJ1Y3QgcmN1X2RhdGEge1xuIFx0c3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDtcbiBcdGludCBleHBfd2F0Y2hpbmdfc25hcDtcdFx0LyogRG91YmxlLWNoZWNrIG5lZWQgZm9yIElQSS4gKi9cbiBcbiYjNDM7XHQvKiBEZWZlcnJhbCBvZiBhbiBOTUkvcmVlbnRyYW50IGNhbGxfcmN1KCk7IHNlZSBfX2NhbGxfcmN1X2NvbW1vbigpLiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2hlYWQ7XG4mIzQzO1x0c3RydWN0IGlycV93b3JrIGRlZmVyX3dvcms7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3QgZGVmZXJfbG9jaztcbiYjNDM7XG4gXHQvKiA1KSBDYWxsYmFjayBvZmZsb2FkaW5nLiAqL1xuICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVXG4gXHRzdHJ1Y3Qgc3dhaXRfcXVldWVfaGVhZCBub2NiX2NiX3dxOyAvKiBGb3Igbm9jYiBrdGhyZWFkcyB0byBzbGVlcCBvbi4gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY2ZWNkOTNiZTMwZjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmNcbkBAIC0wLDAgJiM0MzsxLDU4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIEV4ZXJjaXNlIHJlLWVudHJ5IGludG8gY2FsbF9zcmN1KCkgZnJvbSBCUEY7IHNlZSBwcm9ncy9yY3VfcmVlbnRyeS5jLiAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cmN1X3JlZW50cnkuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHN5c19waWRmZF9vcGVuKHBpZF90IHBpZCwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN5c2NhbGwoX19OUl9waWRmZF9vcGVuLCBwaWQsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmN1X3JlZW50cnkgKnNrZWw7XG4mIzQzO1x0aW50IGVyciwgcGlkZmQgPSAtMSwgbWFwX2ZkO1xuJiM0MztcdF9fdTY0IHZhbCA9IDE7XG4mIzQzO1x0Y3B1X3NldF90IHNldDtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHJjdV9yZWVudHJ5X19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IHJjdV9yZWVudHJ5X19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtza2VsX2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgcmUtZW50cnkgb24gYSBzaW5nbGUgQ1BVLiAqL1xuJiM0MztcdENQVV9aRVJPKFx1MDAyNnNldCk7XG4mIzQzO1x0Q1BVX1NFVCgwLCBcdTAwMjZzZXQpO1xuJiM0MztcdGlmIChzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2Yoc2V0KSwgXHUwMDI2c2V0KSlcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDtzY2hlZF9zZXRhZmZpbml0eVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBpZGZkID0gc3lzX3BpZGZkX29wZW4oZ2V0cGlkKCksIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKHBpZGZkLCAwLCBcJiMzNDtwaWRmZF9vcGVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy50YXNrX3N0Zyk7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkLCBcdTAwMjZ2YWwsIEJQRl9OT0VYSVNUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2Jvb3RfY3JlYXRlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF9kZWxldGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkKTtcbiYjNDM7XHRBU1NFUlRfT0soZXJyLCBcJiMzNDtib290X2RlbGV0ZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgVHJlZSBTUkNVIGVucXVldWVzIHZpYSByY3Vfc2VnY2JsaXN0X2VucXVldWUoKTsgc2tpcCBlbHNld2hlcmUuICovXG4mIzQzO1x0aWYgKCFza2VsLVx1MDAzZWJzcy1cdTAwM2VoaXRzKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlZW50ZXJlZCwgMSwgXCYjMzQ7cmVlbnRyeV9kZWZlcnJlZFwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAocGlkZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UocGlkZmQpO1xuJiM0MztcdHJjdV9yZWVudHJ5X19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ5MmE5MjdmZjUxYzBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jXG5AQCAtMCwwICYjNDM7MSw0NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBSZS1lbnRlciBjYWxsX3NyY3UoKSBmcm9tIGEgQlBGIHByb2dyYW0uICBmZW50cnkgb24gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKClcbiYjNDM7ICogZmlyZXMgaW5zaWRlIGNhbGxfc3JjdSgpJiMzOTtzIGVucXVldWUgKHJlYWNoZWQgZnJvbSBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZCgpXG4mIzQzOyAqIHdpdGggdGhlIHNyY3VfZGF0YSAtXHUwMDNlbG9jayBoZWxkKTsgdGhlIGhhbmRsZXIgdGhlbiBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpXG4mIzQzOyAqIC0tIGl0c2VsZiBjYWxsX3NyY3UoKSBvbiByY3VfdGFza3NfdHJhY2Vfc3JjdV9zdHJ1Y3QgLS0gcmUtZW50ZXJpbmcgdGhlIHNhbWVcbiYjNDM7ICogc3JjdV9kYXRhIG9uIHRoZSBzYW1lIENQVS5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuJiM0Mzt9IHRhc2tfc3RnIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztpbnQgdGFyZ2V0X3BpZDtcbiYjNDM7aW50IGhpdHM7XG4mIzQzO2ludCByZWVudGVyZWQ7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L3JjdV9zZWdjYmxpc3RfZW5xdWV1ZVwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHJlZW50ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlZW50ZXJlZCB8fCAhdGFyZ2V0X3BpZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjdXIgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbiYjNDM7XHRpZiAoIWN1ciB8fCBjdXItXHUwMDNlcGlkICE9IHRhcmdldF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogUmUtZW50ZXIgdmlhIGEgdGFzay1zdG9yYWdlIGRlbGV0ZSwgd2hpY2ggY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbiYjNDM7XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZoaXRzLCAxKTtcbiYjNDM7XHRicGZfdGFza19zdG9yYWdlX2dldChcdTAwMjZ0YXNrX3N0ZywgY3VyLCAwLCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpO1xuJiM0MztcdGJwZl90YXNrX3N0b3JhZ2VfZGVsZXRlKFx1MDAyNnRhc2tfc3RnLCBjdXIpO1xuJiM0MztcbiYjNDM7XHRyZWVudGVyZWQgPSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tQUk9CRVMmIzM0OywKICAgICYjMzQ7VFJBQ0VQT0lOVFMmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9vZmZsaW5lX2RyYWluJiMzNDssCiAgICAmIzM0O3JjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBkZWZlcnJlZCBSQ1UgYW5kIFNSQ1UgY2FsbGJhY2tzIHRvIHNhZmVseSBoYW5kbGUgcmUtZW50cmFudCBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgaW52b2NhdGlvbnMsIHN1Y2ggYXMgdGhvc2Ugb3JpZ2luYXRpbmcgZnJvbSBOTUkgY29udGV4dHMgb3IgQlBGIHByb2dyYW1zLiBJdCBtb2RpZmllcyBjb3JlIFJDVS9TUkNVIHN5bmNocm9uaXphdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBuZXcgY2FsbGJhY2sgZHJhaW5pbmcgbWVjaGFuaXNtcy4gVGhpcyBpcyBoaWdobHkgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxYmJlNmY5YmRhMzM4Nzk5ZDJlZmFiMDhjMzVjNGVlN2E2ZDA2MjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjU3OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oCmluZGV4IGZiY2YxM2JjMTJkMTUuLjQ3Mjc1ZDE4Mjk2NmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmgKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9TUkNVX1RJTllfSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmtfdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zd2FpdC5oJmd0OwogCiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgewpAQCAtMjYsNiAmIzQzOzI3LDggQEAgc3RydWN0IHNyY3Vfc3RydWN0IHsKIAlzdHJ1Y3QgcmN1X2hlYWQgKipzcmN1X2NiX3RhaWw7CS8qIFBlbmRpbmcgY2FsbGJhY2tzOiBUYWlsLiAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzcmN1X3dvcms7CS8qIEZvciBkcml2aW5nIGdyYWNlIHBlcmlvZHMuICovCiAJc3RydWN0IGlycV93b3JrIHNyY3VfaXJxX3dvcms7CS8qIERlZmVyIHNjaGVkdWxlX3dvcmsoKSB0byBpcnEgd29yay4gKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzOwkvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovCiYjNDM7CXN0cnVjdCBpcnFfd29yayBkZWZlcl9pdzsJCS8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIAlzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KQEAgLTMzLDYgJiM0MzszNiw3IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7CiAKIHZvaWQgc3JjdV9kcml2ZV9ncChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndwKTsKIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspOwomIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTsKIAogI2RlZmluZSBfX1NSQ1VfU1RSVUNUX0lOSVQobmFtZSwgX19pZ25vcmVkLCBfX19pZ25vcmVkLCBfX19faWdub3JlZCkJXAogewkJCQkJCQkJCVwKQEAgLTQwLDYgJiM0Mzs0NCw4IEBAIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspOwogCS5zcmN1X2NiX3RhaWwgPSAmYW1wO25hbWUuc3JjdV9jYl9oZWFkLAkJCQlcCiAJLnNyY3Vfd29yayA9IF9fV09SS19JTklUSUFMSVpFUihuYW1lLnNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCksCVwKIAkuc3JjdV9pcnFfd29yayA9IHsgLmZ1bmMgPSBzcmN1X3RpbnlfaXJxX3dvcmsgfSwJCVwKJiM0MzsJLmRlZmVyX2NicyA9IExMSVNUX0hFQURfSU5JVChuYW1lLmRlZmVyX2NicyksCQkJXAomIzQzOwkuZGVmZXJfaXcgPSB7IC5mdW5jID0gc3JjdV9kZWZlcl9kcmFpbiB9LAkJCQlcCiAJX19TUkNVX0RFUF9NQVBfSU5JVChuYW1lKQkJCQkJXAogfQogCkBAIC0xMzEsMTAgJiM0MzsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiAJc3luY2hyb25pemVfc3JjdShzc3ApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQotewotCXN5bmNocm9uaXplX3NyY3Uoc3NwKTsKLX0KJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApIHsgfQogI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaAppbmRleCA3NWU1NGU0Zjk2M2ZhLi4xY2U3NTlmYjcwOTQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oCkBAIC0xMyw2ICYjNDM7MTMsOCBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1X25vZGVfdHJlZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBsZXRpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmtfdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKIAogc3RydWN0IHNyY3Vfbm9kZTsKIHN0cnVjdCBzcmN1X3N0cnVjdDsKQEAgLTQxLDYgJiM0Mzs0Myw4IEBAIHN0cnVjdCBzcmN1X2RhdGEgewogCWJvb2wgc3JjdV9jYmxpc3RfaW52b2tpbmc7CQkvKiBJbnZva2luZyB0aGVzZSBDQnM/ICovCiAJc3RydWN0IHRpbWVyX2xpc3QgZGVsYXlfd29yazsJCS8qIERlbGF5IGZvciBDQiBpbnZva2luZyAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwkJLyogQ29udGV4dCBmb3IgQ0IgaW52b2tpbmcuICovCiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NiczsJCS8qIENhbGxiYWNrcyBkZWZlcnJlZCBvbiByZS1lbnRyeS4gKi8KJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgZGVmZXJfbGluazsJCS8qIExpbmtzIG9udG8gdGhlIHBlci1DUFUgZGVmZXJyYWwgZHJhaW4gbGlzdCAqLwogCXN0cnVjdCByY3VfaGVhZCBzcmN1X2JhcnJpZXJfaGVhZDsJLyogRm9yIHNyY3VfYmFycmllcigpIHVzZS4gKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9lY19oZWFkOwkJLyogRm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpIHVzZS4gKi8KIAlpbnQgc3JjdV9lY19zdGF0ZTsJCQkvKiAgU3RhdGUgZm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpLiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9LY29uZmlnIGIva2VybmVsL3JjdS9LY29uZmlnCmluZGV4IDMzMmRmN2E3YTYzNDcuLmJjOTQ4M2MwYjVkODQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L0tjb25maWcKQEAgLTE3NSw2ICYjNDM7MTc1LDEyIEBAIGNvbmZpZyBSQ1VfU1RBTExfQ09NTU9OCiBjb25maWcgUkNVX05FRURfU0VHQ0JMSVNUCiAJZGVmX2Jvb2wgKCBUUkVFX1JDVSB8fCBUUkVFX1NSQ1UgfHwgVEFTS1NfUkNVX0dFTkVSSUMgKQogCiYjNDM7IyBUaGUgZGVmZXJyYWwgKGFuZCB0aGUgSVJRX1dPUksgaXQgdXNlcykgaXMgb25seSBuZWVkZWQgd2hlcmUgY2FsbF9yY3UoKSAvCiYjNDM7IyBjYWxsX3NyY3UoKSBjYW4gYmUgaW52b2tlZCB3aGlsZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodC4KJiM0Mztjb25maWcgUkNVX0RFRkVSCiYjNDM7CWRlZl9ib29sIEhBVkVfTk1JIHx8IEtQUk9CRVMgfHwgRlVOQ1RJT05fVFJBQ0VSIHx8IFRSQUNFUE9JTlRTCiYjNDM7CXNlbGVjdCBJUlFfV09SSwomIzQzOwogY29uZmlnIFJDVV9GQU5PVVQKIAlpbnQgJiMzNDtUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgZmFub3V0IHZhbHVlJiMzNDsKIAlyYW5nZSAyIDY0IGlmIDY0QklUCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdS5oIGIva2VybmVsL3JjdS9yY3UuaAppbmRleCAzOWE5ZjZmYTlhN2IyLi5jYTA1ZDQ4NzczYzc5IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3JjdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvcmN1LmgKQEAgLTU3Miw2ICYjNDM7NTcyLDIzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrc19jYmxpc3RfaW5pdF9nZW5lcmljKHZvaWQpIHsgfQogI2RlZmluZSBSQ1VfU0NIRURVTEVSX0lOSVQJMQogI2RlZmluZSBSQ1VfU0NIRURVTEVSX1JVTk5JTkcJMgogCiYjNDM7LyoKJiM0MzsgKiBEZWZlciBhIGNhbGxfcmN1KCkvY2FsbF9zcmN1KCkgY2FsbGJhY2sgcmF0aGVyIHRoYW4gZW5xdWV1ZSBpdCBub3c/ICBEZWZlcgomIzQzOyAqIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzaW5jZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIG1heSBiZSBpbgomIzQzOyAqIGZsaWdodCBvbiB0aGlzIENQVS4gIE5vdCB3aGlsZSB0aGUgc2NoZWR1bGVyIGlzIGRvd24sIHRob3VnaDogaXJxX3dvcmsgaXMKJiM0MzsgKiB1bnVzYWJsZSBiZWZvcmUgaW5pdF9JUlEoKSwgeWV0IHJjdV9pbml0KCkgYWxyZWFkeSBjYWxscyBjYWxsX3JjdSgpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBpcnFzX2Rpc2FibGVkKCkgJmFtcDsmYW1wOyByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUmIzM5O3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovCiYjNDM7dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSk7CiYjNDM7CiBlbnVtIHJjdXRvcnR1cmVfdHlwZSB7CiAJUkNVX0ZMQVZPUiwKIAlSQ1VfVEFTS1NfRkxBVk9SLApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwppbmRleCA3OTQ5MzdlMTNlN2MzLi45ZWQxN2I2NDM2MjBhIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwpAQCAtNDgsNiAmIzQzOzQ4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC90aWNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfdHJhY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ubWkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3JjdS5oJiMzNDsKIApAQCAtMTE1LDYgJiM0MzsxMTYsNyBAQCB0b3J0dXJlX3BhcmFtKGludCwgbGVha3BvaW50ZXIsIDAsICYjMzQ7TGVhayBwb2ludGVyIGRlcmVmZXJlbmNlcyBmcm9tIHJlYWRlcnMmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgbl9iYXJyaWVyX2NicywgMCwgJiMzNDsjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nJiMzNDspOwogdG9ydHVyZV9wYXJhbShpbnQsIG5fdXBfZG93biwgMzIsICYjMzQ7IyBvZiBjb25jdXJyZW50IHVwL2Rvd24gaHJ0aW1lci1iYXNlZCBSQ1UgcmVhZGVycyYjMzQ7KTsKIHRvcnR1cmVfcGFyYW0oaW50LCBuZmFrZXdyaXRlcnMsIDQsICYjMzQ7TnVtYmVyIG9mIFJDVSBmYWtlIHdyaXRlciB0aHJlYWRzJiMzNDspOwomIzQzO3RvcnR1cmVfcGFyYW0oYm9vbCwgbm1pX2NhbGxzLCB0cnVlLCAmIzM0O0V4ZXJjaXNlIC0mZ3Q7Y2FsbCgpIGZyb20gTk1JIG9uIG5taV9jYXBhYmxlIGZsYXZvcnMmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgbnJlYWRlcnMsIC0xLCAmIzM0O051bWJlciBvZiBSQ1UgcmVhZGVyIHRocmVhZHMmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGJvb2wsIG53cml0ZXJzLCAxLCAmIzM0O051bWJlciBvZiBSQ1Ugd3JpdGVyIHRocmVhZHMgKDAgb3IgMSkmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgb2JqZWN0X2RlYnVnLCAwLCAmIzM0O0VuYWJsZSBkZWJ1Zy1vYmplY3QgZG91YmxlIGNhbGxfcmN1KCkgdGVzdGluZyYjMzQ7KTsKQEAgLTIxNiw2ICYjNDM7MjE4LDggQEAgc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdF9mYWlsdXJlOwogc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdHM7CiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVyczsKIHN0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfaXJxczsKJiM0MztzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYWxsOwomIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NiOwogc3RhdGljIGxvbmcgbl9iYXJyaWVyX2F0dGVtcHRzOwogc3RhdGljIGxvbmcgbl9iYXJyaWVyX3N1Y2Nlc3NlczsgLyogZGlkIHJjdV9iYXJyaWVyIHRlc3Qgc3VjY2VlZD8gKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5fcmVhZF9leGl0czsKQEAgLTQzMyw2ICYjNDM7NDM3LDcgQEAgc3RydWN0IHJjdV90b3J0dXJlX29wcyB7CiAJYm9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpOwogCWxvbmcgY2JmbG9vZF9tYXg7CiAJaW50IGlycV9jYXBhYmxlOwomIzQzOwlpbnQgbm1pX2NhcGFibGU7CiAJaW50IGNhbl9ib29zdDsKIAlpbnQgZXh0ZW5kYWJsZXM7CiAJaW50IHNsb3dfZ3BzOwpAQCAtNjQ4LDYgJiM0Mzs2NTMsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyByY3Vfb3BzID0gewogCS5leHRlbmRhYmxlcwkJPSBSQ1VUT1JUVVJFX01BWF9FWFRFTkQsCiAJLmRlYnVnX29iamVjdHMJCT0gMSwKIAkuc3RhcnRfcG9sbF9pcnFzb2ZmCT0gMSwKJiM0MzsJLm5taV9jYXBhYmxlCQk9IDEsCiAJLm5hbWUJCQk9ICYjMzQ7cmN1JiMzNDsKIH07CiAKQEAgLTk0Miw2ICYjNDM7OTQ4LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdV9vcHMgPSB7CiAJLmRlYnVnX29iamVjdHMJPSAxLAogCS5oYXZlX3VwX2Rvd24JPSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpCiAJCQkJPyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLAomIzQzOwkubm1pX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICYjMzQ7c3JjdSYjMzQ7CiB9OwogCkBAIC0xMDA1LDYgJiM0MzsxMDEyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdWRfb3BzID0gewogCS5kZWJ1Z19vYmplY3RzCT0gMSwKIAkuaGF2ZV91cF9kb3duCT0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKQogCQkJCT8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTiwKJiM0MzsJLm5taV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAmIzM0O3NyY3VkJiMzNDsKIH07CiAKQEAgLTEyNjksNiAmIzQzOzEyNzcsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyB0YXNrc190cmFjaW5nX29wcyA9IHsKIAkuY2JmbG9vZF9tYXgJPSA1MDAwMCwKIAkuaXJxX2NhcGFibGUJPSAxLAogCS5zbG93X2dwcwk9IDEsCiYjNDM7CS5ubWlfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gJiMzNDt0YXNrcy10cmFjaW5nJiMzNDsKIH07CiAKQEAgLTI2NTksMTIgJiM0MzsyNjY4LDk0IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKQogCiBzdGF0aWMgREVGSU5FX1RPUlRVUkVfUkFORE9NX1BFUkNQVShyY3VfdG9ydHVyZV90aW1lcl9yYW5kKTsKIAomIzQzOy8qCiYjNDM7ICogRXhlcmNpc2UgLSZndDtjYWxsKCkgZnJvbSBOTUkgY29udGV4dCBmb3IgZmxhdm9ycyB0aGF0IHNldCAtJmd0O25taV9jYXBhYmxlLiAgQQomIzQzOyAqIHBlci1DUFUgaGFyZHdhcmUgcGVyZiBjb3VudGVyIG92ZXJmbG93cyBpbnRvIGFuIE5NSSwgYW5kIGl0cyBoYW5kbGVyIHN1Ym1pdHMKJiM0MzsgKiBvbmUgcHJlYWxsb2NhdGVkIGNhbGxiYWNrIHZpYSAtJmd0O2NhbGwoKS4gIE9uZSBjYWxsYmFjayBpcyBpbiBmbGlnaHQgYXQgYSB0aW1lCiYjNDM7ICogKGd1YXJkZWQgYnkgYW4gYXRvbWljKSB0byBhdm9pZCBhbGxvY2F0aW5nIGluIE5NSS4gIFRoaXMgbWlycm9ycyBob3cgYSBCUEYKJiM0MzsgKiBwcm9ncmFtIHJlYWNoZXMgLSZndDtjYWxsKCkgZnJvbSBOTUkuCiYjNDM7ICovCiYjNDM7I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0gewomIzQzOwkudHlwZQkJPSBQRVJGX1RZUEVfSEFSRFdBUkUsCiYjNDM7CS5jb25maWcJCT0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLAomIzQzOwkuc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksCiYjNDM7CS5waW5uZWQJCT0gMSwKJiM0MzsJLmRpc2FibGVkCT0gMSwKJiM0MzsJLmZyZXEJCT0gMSwKJiM0MzsJLnNhbXBsZV9mcmVxCT0gMTAwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudCAqKnJjdV90b3J0dXJlX25taV9ldmVudHM7CiYjNDM7c3RhdGljIHN0cnVjdCByY3VfaGVhZCByY3VfdG9ydHVyZV9ubWlfcmg7CiYjNDM7c3RhdGljIGF0b21pY190IHJjdV90b3J0dXJlX25taV9yaF9pbnVzZTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApCiYjNDM7ewomIzQzOwlhdG9taWNfbG9uZ19pbmMoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYik7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAomIzQzOwkJCQkgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAomIzQzOwkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQomIzQzO3sKJiM0MzsJaWYgKCFpbl9ubWkoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJaWYgKGN1cl9vcHMtJmd0O2NhbGwgJmFtcDsmYW1wOyAhYXRvbWljX3hjaGcoJmFtcDtyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDEpKSB7CiYjNDM7CQljdXJfb3BzLSZndDtjYWxsKCZhbXA7cmN1X3RvcnR1cmVfbm1pX3JoLCByY3VfdG9ydHVyZV9ubWlfY2IpOwomIzQzOwkJYXRvbWljX2xvbmdfaW5jKCZhbXA7bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFubWlfY2FsbHMgfHwgIWN1cl9vcHMtJmd0O25taV9jYXBhYmxlIHx8ICFjdXJfb3BzLSZndDtjYWxsKQomIzQzOwkJcmV0dXJuOwomIzQzOwlyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0ga2NhbGxvYyhucl9jcHVfaWRzLCBzaXplb2YoKnJjdV90b3J0dXJlX25taV9ldmVudHMpLAomIzQzOwkJCQkJIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiYjNDM7CQlldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKCZhbXA7cmN1X3RvcnR1cmVfbm1pX2F0dHIsIGNwdSwKJiM0MzsJCQkJCQkJIE5VTEwsIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7CiYjNDM7CQlpZiAoSVNfRVJSKGV2ZW50KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSA9IGV2ZW50OwomIzQzOwkJcGVyZl9ldmVudF9lbmFibGUoZXZlbnQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKJiM0MzsJCWlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcGVyZl9ldmVudF9kaXNhYmxlKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7CiYjNDM7CQlwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7CiYjNDM7CX0KJiM0MzsJa2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7CiYjNDM7CXJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMOwomIzQzO30KJiM0MzsjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkgeyB9CiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9CiYjNDM7I2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KJiM0MzsKIC8qCiAgKiBSQ1UgdG9ydHVyZSByZWFkZXIgZnJvbSB0aW1lciBoYW5kbGVyLiAgRGVyZWZlcmVuY2VzIHJjdV90b3J0dXJlX2N1cnJlbnQsCiAgKiBpbmNyZW1lbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgcGlwZWxpbmUgYXJyYXkuICBUaGUKICAqIGNvdW50ZXIgaW4gdGhlIGVsZW1lbnQgc2hvdWxkIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAxLCBvdGhlcndpc2UsIHRoZQogICogUkNVIGltcGxlbWVudGF0aW9uIGlzIGJyb2tlbi4KICAqLwomIzQzOwogc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnVudXNlZCkKIHsKIAlXQVJOX09OX09OQ0UoIWluX3NlcnZpbmdfc29mdGlycSgpKTsKQEAgLTMwNDcsNiAmIzQzOzMxMzgsOSBAQCByY3VfdG9ydHVyZV9zdGF0c19wcmludCh2b2lkKQogCQlkYXRhX3JhY2Uobl9iYXJyaWVyX2F0dGVtcHRzKSwKIAkJZGF0YV9yYWNlKG5fcmN1X3RvcnR1cmVfYmFycmllcl9lcnJvcikpOwogCXByX2NvbnQoJiMzNDtyZWFkLWV4aXRzOiAlbGQgJiMzNDssIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLgomIzQzOwlwcl9jb250KCYjMzQ7bm1pLWNhbGxzOiAlbGQgbm1pLWNiczogJWxkICYjMzQ7LAomIzQzOwkJYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLAomIzQzOwkJYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NiKSk7CiAJcHJfY29udCgmIzM0O25vY2ItdG9nZ2xlczogJWxkOiVsZCAmIzM0OywKIAkJYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fbm9jYl9vZmZsb2FkKSwgYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fbm9jYl9kZW9mZmxvYWQpKTsKIAlwcl9jb250KCYjMzQ7Z3B3cmFwczogJWxkXG4mIzM0Oywgbl9ncHdyYXBzKTsKQEAgLTQzMjUsNiAmIzQzOzQ0MTksOCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpCiAJCWtmcmVlKHJlYWRlcl90YXNrcyk7CiAJCXJlYWRlcl90YXNrcyA9IE5VTEw7CiAJfQomIzQzOwkvKiBEaXNhYmxlIHRoZSBwZXJmIGNvdW50ZXJzIChhbmQgdGh1cyB0aGUgTk1JIC0mZ3Q7Y2FsbCgpIGZpcmluZykgbm93LiAqLwomIzQzOwlyY3VfdG9ydHVyZV9ubWlfY2xlYW51cCgpOwogCWtmcmVlKHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoayk7CiAJcmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDsKIApAQCAtNDM1NCw2ICYjNDM7NDQ1MCwyMCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpCiAJCXByX2luZm8oJiMzNDslczogSW52b2tpbmcgJXBTKCkuXG4mIzM0OywgX19mdW5jX18sIGN1cl9vcHMtJmd0O2NiX2JhcnJpZXIpOwogCQljdXJfb3BzLSZndDtjYl9iYXJyaWVyKCk7CiAJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBjYl9iYXJyaWVyKCkgYWJvdmUgZHJhaW5lZCBldmVyeSBkZWZlcnJlZCBOTUkgLSZndDtjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZQomIzQzOwkgKiBjb3VudCBpc3N1ZWQgZnJvbSBOTUkgbXVzdCBlcXVhbCB0aGUgY291bnQgaW52b2tlZDsgYSBtaXNtYXRjaCBtZWFucyBhCiYjNDM7CSAqIGNhbGxiYWNrIHdhcyBsb3N0LgomIzQzOwkgKi8KJiM0MzsJaWYgKGF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYWxsKSAhPQomIzQzOwkgICAgYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NiKSkgewomIzQzOwkJcHJfYWxlcnQoJiMzNDslczogTk1JIC0mZ3Q7Y2FsbCgpIGxvc3QgYSBjYWxsYmFjazogaXNzdWVkICVsZCBpbnZva2VkICVsZFxuJiMzNDssCiYjNDM7CQkJIF9fZnVuY19fLCBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksCiYjNDM7CQkJIGF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYikpOwomIzQzOwkJYXRvbWljX2luYygmYW1wO25fcmN1X3RvcnR1cmVfZXJyb3IpOwomIzQzOwl9CiYjNDM7CiAJaWYgKGN1cl9vcHMtJmd0O2NsZWFudXAgIT0gTlVMTCkKIAkJY3VyX29wcy0mZ3Q7Y2xlYW51cCgpOwogCkBAIC00Nzg2LDYgJiM0Mzs0ODk2LDggQEAgcmN1X3RvcnR1cmVfaW5pdCh2b2lkKQogCQlmaXJzdGVyciA9IC1FTk9NRU07CiAJCWdvdG8gdW53aW5kOwogCX0KJiM0MzsJLyogQXJtIHRoZSBwZXItQ1BVIHBlcmYgY291bnRlcnMgdGhhdCBkcml2ZSAtJmd0O2NhbGwoKSBmcm9tIE5NSS4gKi8KJiM0MzsJcmN1X3RvcnR1cmVfbm1pX2luaXQoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJlYWxyZWFkZXJzOyBpJiM0MzsmIzQzOykgewogCQlyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGtbaV0ucnRjX2Noa3JkciA9IC0xOwogCQlmaXJzdGVyciA9IHRvcnR1cmVfY3JlYXRlX2t0aHJlYWQocmN1X3RvcnR1cmVfcmVhZGVyLCAodm9pZCAqKWksCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmMKaW5kZXggNTU4YmE4ZDMxNmRiNi4uYTBhOTFmN2ZjMjU4YSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmVlbXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfd2FpdC5oJmd0OwpAQCAtNDMsNiAmIzQzOzQ0LDggQEAgc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAlJTklUX1dPUksoJmFtcDtzc3AtJmd0O3NyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtzc3AtJmd0O3NyY3Vfd29yay5lbnRyeSk7CiAJaW5pdF9pcnFfd29yaygmYW1wO3NzcC0mZ3Q7c3JjdV9pcnFfd29yaywgc3JjdV90aW55X2lycV93b3JrKTsKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c3NwLSZndDtkZWZlcl9jYnMpOwomIzQzOwlpbml0X2lycV93b3JrKCZhbXA7c3NwLSZndDtkZWZlcl9pdywgc3JjdV9kZWZlcl9kcmFpbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg2LDYgJiM0Mzs4OSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7CiB2b2lkIGNsZWFudXBfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiB7CiAJV0FSTl9PTihzcmN1X3JlYWRlcnNfYWN0aXZlKHNzcCkpOwomIzQzOwkvKiBSZS1pc3N1ZSBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIC0mZ3Q7c3JjdV9jYl9oZWFkIHNlZXMgdGhlbSBiZWxvdy4gKi8KJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlpcnFfd29ya19zeW5jKCZhbXA7c3NwLSZndDtkZWZlcl9pdyk7CiAJaXJxX3dvcmtfc3luYygmYW1wO3NzcC0mZ3Q7c3JjdV9pcnFfd29yayk7CiAJZmx1c2hfd29yaygmYW1wO3NzcC0mZ3Q7c3JjdV93b3JrKTsKIAlXQVJOX09OKHNzcC0mZ3Q7c3JjdV9ncF9ydW5uaW5nKTsKQEAgLTIxMywxMSAmIzQzOzIxOSwxMSBAQCBzdGF0aWMgdm9pZCBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIH0KIAogLyoKLSAqIEVucXVldWUgYW4gU1JDVSBjYWxsYmFjayBvbiB0aGUgc3BlY2lmaWVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZSwKLSAqIGluaXRpYXRpbmcgZ3JhY2UtcGVyaW9kIHByb2Nlc3NpbmcgaWYgaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy4KJiM0MzsgKiBFbnF1ZXVlIEByaHAgb24gdGhlIGNhbGxiYWNrIGxpc3QuICBBbHNvIGNhbGxlZCBieSBzcmN1X2RlZmVyX2RyYWluKCkgdG8KJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLgogICovCi12b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCi0JICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpCiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKJiM0MzsJCQkgICAgcmN1X2NhbGxiYWNrX3QgZnVuYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yMzEsNiAmIzQzOzIzNyw0NiBAQCB2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCiAJc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQomIzQzOwomIzQzOy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovCiYjNDM7c3RhdGljIGJvb2wgc3JjdV9kZWZlcl9kcmFpbmluZzsKJiM0MzsKJiM0Mzt2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QsIGRlZmVyX2l3KTsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0OwomIzQzOwomIzQzOwkvKiBDYWxsYmFja3MgYXJlIHVub3JkZXJlZCwgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuICovCiYjNDM7CXNyY3VfZGVmZXJfZHJhaW5pbmcgPSB0cnVlOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoJmFtcDtzc3AtJmd0O2RlZmVyX2NicykpIHsKJiM0MzsJCXN0cnVjdCByY3VfaGVhZCAqcmhwID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7CiYjNDM7CiYjNDM7CQlzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC0mZ3Q7ZnVuYyk7CiYjNDM7CX0KJiM0MzsJc3JjdV9kZWZlcl9kcmFpbmluZyA9IGZhbHNlOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2RlZmVyX2RyYWluKTsKJiM0MzsKJiM0Mzt2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCiYjNDM7CSAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJaWYgKHNob3VsZF9yY3VfZGVmZXIoKSkgewomIzQzOwkJLyogQSByZS1lbnRyYW50IGNhbGxfc3JjdSgpIGR1cmluZyB0aGUgZHJhaW4gd291bGQgbGl2ZWxvY2sgaXQuICovCiYjNDM7CQlpZiAoc3JjdV9kZWZlcl9kcmFpbmluZyAmYW1wOyZhbXA7ICFpbl9ubWkoKSkgewomIzQzOwkJCVdBUk5fT05DRSgxLCAmIzM0O2NhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJcmhwLSZndDtmdW5jID0gZnVuYzsKJiM0MzsJCWlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCAmYW1wO3NzcC0mZ3Q7ZGVmZXJfY2JzKSkKJiM0MzsJCQlpcnFfd29ya19xdWV1ZSgmYW1wO3NzcC0mZ3Q7ZGVmZXJfaXcpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSAmYW1wOyZhbXA7IGluX25taSgpKTsKJiM0MzsKJiM0MzsJc3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3NyY3UpOwogCiAvKgpAQCAtMjYwLDYgJiM0MzszMDYsMTUgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7CiAKJiM0MzsvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzLCB0aGVuIHdhaXQgZm9yIGFsbCBpbi1mbGlnaHQgb25lcy4gKi8KJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKJiM0Mzt7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJaXJxX3dvcmtfc3luYygmYW1wO3NzcC0mZ3Q7ZGVmZXJfaXcpOwomIzQzOwlzeW5jaHJvbml6ZV9zcmN1KHNzcCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7CiYjNDM7CiAvKgogICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llCiAgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYwppbmRleCAzMDQxMTI2NzRlOGEyLi4yNjY5NTk0YTY0MDJmIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dHJlZS5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmNwdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWVtcHQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnFfd29yay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlX3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NtcC5oJmd0OwpAQCAtNzksNiAmIzQzOzgwLDQ3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc3JjdShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgc3JjdV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspOwogc3RhdGljIHZvaWQgc3JjdV9kZWxheV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7CiAKJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogUGVyLUNQVSBjYWxsX3NyY3UoKSBkZWZlcnJhbCBzdGF0ZSwgc2hhcmVkIGJ5IGV2ZXJ5IHNyY3Vfc3RydWN0LiAgQSBkZWZlcnJlZAomIzQzOyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJiMzOTtzIC0mZ3Q7ZGVmZXJfY2JzOyB0aGF0IHNyY3VfZGF0YSBpcyBjaGFpbmVkCiYjNDM7ICogdmlhIC0mZ3Q7ZGVmZXJfbGluayBvbnRvIC0mZ3Q7bGlzdCwgd2hpY2ggdGhlIGlycV93b3JrIHdhbGtzLgomIzQzOyAqLwomIzQzO3N0cnVjdCBzcmN1X2RlZmVyIHsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQJbGlzdDsKJiM0MzsJc3RydWN0IGlycV93b3JrCQlpdzsKJiM0MzsJcmF3X3NwaW5sb2NrX3QJCWxvY2s7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNyY3VfZGVmZXIsIHNyY3VfZGVmZXIpID0gewomIzQzOwkubG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRChzcmN1X2RlZmVyLmxvY2spLAomIzQzOwkuaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbiksCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBTZXQgd2hpbGUgc3JjdV9kZWZlcl9kcmFpbigpIHJlLWlzc3VlcywgdG8gY2F0Y2ggYSByZS1lbnRyYW50IGNhbGxfc3JjdSgpLiAqLwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCBzcmN1X2RlZmVyX2RyYWluaW5nKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEZsdXNoIHBlbmRpbmcgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHNyY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLgomIzQzOyAqIFdhaXQgb3V0IGFuIG9ubGluZSBDUFUmIzM5O3MgaXJxX3dvcms7IGRyYWluIGFuIG9mZmxpbmUgQ1BVJiMzOTtzIGxpc3QgZGlyZWN0bHksIGFzCiYjNDM7ICogaXRzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiYjNDM7CQlpZiAoY3B1X29ubGluZShjcHUpKQomIzQzOwkJCWlycV93b3JrX3N5bmMoJmFtcDtwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSkuaXcpOwomIzQzOwkJZWxzZQomIzQzOwkJCXNyY3VfZGVmZXJfZHJhaW4oJmFtcDtwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSkuaXcpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIEluaXRpYWxpemUgU1JDVSBwZXItQ1BVIGRhdGEuICBOb3RlIHRoYXQgc3RhdGljYWxseSBhbGxvY2F0ZWQKICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgbWlnaHQgYWxyZWFkeSBoYXZlIHNyY3VfcmVhZF9sb2NrKCkgYW5kCkBAIC0xMDcsNiAmIzQzOzE0OSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3NyY3Vfc3RydWN0X2RhdGEoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiAJCXNkcC0mZ3Q7Y3B1ID0gY3B1OwogCQlJTklUX1dPUksoJmFtcDtzZHAtJmd0O3dvcmssIHNyY3VfaW52b2tlX2NhbGxiYWNrcyk7CiAJCXRpbWVyX3NldHVwKCZhbXA7c2RwLSZndDtkZWxheV93b3JrLCBzcmN1X2RlbGF5X3RpbWVyLCAwKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiAtJmd0O2RlZmVyX2NicyBhbmQgLSZndDtkZWZlcl9saW5rIGFyZSB2YWxpZCB3aGVuIHplcm9lZCBhbmQgYXJlIG5vdAomIzQzOwkJICogcmVpbml0aWFsaXplZCBoZXJlLCBsZXN0IHdlIGNsb2JiZXIgY2FsbGJhY2tzIGEgcmVlbnRyYW50CiYjNDM7CQkgKiBjYWxsX3NyY3UoKSBhbHJlYWR5IHN0YWdlZC4gIFNlZSBfX2NhbGxfc3JjdSgpLgomIzQzOwkJICovCiAJCXNkcC0mZ3Q7c3NwID0gc3NwOwogCX0KIH0KQEAgLTY5NSw3ICYjNDM7NzQyLDEyIEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAkJcmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovCiAJaWYgKFdBUk5fT04oc3JjdV9yZWFkZXJzX2FjdGl2ZShzc3ApKSkKIAkJcmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovCi0JLyogV2FpdCBmb3IgaXJxX3dvcmsgdG8gZmluaXNoIGZpcnN0IGFzIGl0IG1heSBxdWV1ZSBhIG5ldyB3b3JrLiAqLwomIzQzOwkvKgomIzQzOwkgKiBEcmFpbiBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHN5bmNpbmcgLSZndDtpcnFfd29yazogcmUtaXNzdWluZyBvbmUgY2FuCiYjNDM7CSAqIHN0YXJ0IGEgZ3JhY2UgcGVyaW9kIGFuZCByZS1xdWV1ZSAtJmd0O2lycV93b3JrLCB3aGljaCB0aGVuIHNjaGVkdWxlcwomIzQzOwkgKiAtJmd0O3dvcmssIHNvIGJvdGggbXVzdCBiZSB3YWl0ZWQgb3V0IGFmdGVyIHRoZSBkcmFpbi4KJiM0MzsJICovCiYjNDM7CXNyY3VfZGVmZXJfZmx1c2goKTsKIAlpcnFfd29ya19zeW5jKCZhbXA7c3VwLSZndDtpcnFfd29yayk7CiAJZmx1c2hfZGVsYXllZF93b3JrKCZhbXA7c3VwLSZndDt3b3JrKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CkBAIC0xNDEwLDggJiM0MzsxNDYyLDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLAogICogc3JjdV9yZWFkX2xvY2soKSwgYW5kIHNyY3VfcmVhZF91bmxvY2soKSB0aGF0IGFyZSBhbGwgcGFzc2VkIHRoZSBzYW1lCiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUuCiAgKi8KLXN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKLQkJCXJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSkKJiM0MzsvKgomIzQzOyAqIFRoZSBzcmN1X2NibGlzdCBhbmQgc3JjdV9ub2RlIHRyZWUgYXJlIG9ubHkgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCiYjNDM7ICogKHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkgZW5xdWV1ZXMgdW5kZXIgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgYW5kIG1heSB3YWxrCiYjNDM7ICogdGhlIHRyZWUpLiAgTGlrZSBjYWxsX3JjdSgpLCBfX2NhbGxfc3JjdSgpIGRlZmVycyB3aGVuIGludGVycnVwdHMgYXJlIGFscmVhZHkKJiM0MzsgKiBkaXNhYmxlZCwgc28gYSByZS1lbnRyYW50IGNhbGxfc3JjdSgpIC0tIGUuZy4gY2FsbF9yY3VfdGFza3NfdHJhY2UoKSBmcm9tIGEKJiM0MzsgKiBCUEYgcHJvZ3JhbSAtLSBjYW5ub3QgY29ycnVwdCB0aGUgbGlzdCBvciBkZWFkbG9jay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAomIzQzOwkJCSAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pCiB7CiAJaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHsKIAkJLyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi8KQEAgLTE0MjMsNiAmIzQzOzE0ODIsODEgQEAgc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAogCSh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKJiM0MzsJCQlyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pCiYjNDM7ewomIzQzOwlpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9kYXRhICpzZHA7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogSW5zdHJ1bWVudGF0aW9uIG9uIHRoZSBlbnF1ZXVlIHBhdGggY2FuIHJlLWVudGVyIGhlcmUgZnJvbQomIzQzOwkJICogaW5zaWRlIHNyY3VfZGVmZXJfZHJhaW4oKS4gIFJlLXF1ZXVpbmcgd291bGQgbGl2ZWxvY2sgdGhlCiYjNDM7CQkgKiBkcmFpbiwgc28gZHJvcCB0aGUgY2FsbGJhY2s7IGFuIE5NSSBjYW5ub3QgbG9vcCwgc28gbGV0IGl0IGluLgomIzQzOwkJICovCiYjNDM7CQlpZiAodGhpc19jcHVfcmVhZChzcmN1X2RlZmVyX2RyYWluaW5nKSAmYW1wOyZhbXA7ICFpbl9ubWkoKSkgewomIzQzOwkJCVdBUk5fT05DRSgxLCAmIzM0O2NhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJc2RwID0gdGhpc19jcHVfcHRyKHNzcC0mZ3Q7c2RhKTsKJiM0MzsJCXJocC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CQlpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgJmFtcDtzZHAtJmd0O2RlZmVyX2NicykpIHsKJiM0MzsJCQkvKiBGaXJzdCBkZWZlcnJhbCBvbiB0aGlzIHNyY3VfZGF0YTogY2hhaW4gaXQgZm9yIHRoZSBkcmFpbi4gKi8KJiM0MzsJCQlzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9IHRoaXNfY3B1X3B0cigmYW1wO3NyY3VfZGVmZXIpOwomIzQzOwomIzQzOwkJCXNkcC0mZ3Q7c3NwID0gc3NwOwomIzQzOwkJCWlmIChsbGlzdF9hZGQoJmFtcDtzZHAtJmd0O2RlZmVyX2xpbmssICZhbXA7c25kcC0mZ3Q7bGlzdCkpCiYjNDM7CQkJCWlycV93b3JrX3F1ZXVlKCZhbXA7c25kcC0mZ3Q7aXcpOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSAmYW1wOyZhbXA7IGluX25taSgpKTsKJiM0MzsKJiM0MzsJc3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jLCBkb19ub3JtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc28gdGhleSBjYW5ub3QgZGVmZXIKJiM0MzsgKiBhZ2Fpbi4gIC0mZ3Q7bG9jayBzZXJpYWxpemVzIHRoZSBkcmFpbmVyczogdGhlIGlycV93b3JrLCBzcmN1X2RlZmVyX2ZsdXNoKCkgYW5kCiYjNDM7ICogc3JjdV9vZmZsaW5lX2RyYWluKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KQomIzQzO3sKJiM0MzsJc3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpzbm9kZSwgKnNuZXh0OwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzbmRwLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CXRoaXNfY3B1X3dyaXRlKHNyY3VfZGVmZXJfZHJhaW5pbmcsIHRydWUpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbCgmYW1wO3NuZHAtJmd0O2xpc3QpKSB7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9kYXRhICpzZHAgPSBjb250YWluZXJfb2Yoc25vZGUsIHN0cnVjdCBzcmN1X2RhdGEsIGRlZmVyX2xpbmspOwomIzQzOwkJc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBzZHAtJmd0O3NzcDsKJiM0MzsJCXN0cnVjdCBsbGlzdF9ub2RlICpjbm9kZSwgKmNuZXh0OwomIzQzOwomIzQzOwkJY25vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7c2RwLSZndDtkZWZlcl9jYnMpOwomIzQzOwkJbGxpc3RfZm9yX2VhY2hfc2FmZShjbm9kZSwgY25leHQsIGNub2RlKSB7CiYjNDM7CQkJc3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7CiYjNDM7CiYjNDM7CQkJc3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtJmd0O2Z1bmMsIHRydWUpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXRoaXNfY3B1X3dyaXRlKHNyY3VfZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTsKJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtzbmRwLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRHJhaW4gQGNwdSYjMzk7cyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3MgZnJvbSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkKJiM0MzsgKiBvbmNlIEBjcHUgaXMgZGVhZC4gIE9uZSBwYXNzIGNvdmVycyBldmVyeSBzcmN1X3N0cnVjdCwgYW5kIHRoZSByZS1pc3N1ZSBsYW5kcwomIzQzOyAqIG9uIHRoZSBjdXJyZW50IENQVS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KQomIzQzO3sKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlzcmN1X2RlZmVyX2RyYWluKCZhbXA7cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZAogICogQHNzcDogc3JjdV9zdHJ1Y3QgaW4gcXVldWUgdGhlIGNhbGxiYWNrCkBAIC0xNjc3LDkgJiM0MzsxODExLDE3IEBAIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogewogCWludCBjcHU7CiAJaW50IGlkeDsKLQl1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoJmFtcDtzc3AtJmd0O3NyY3Vfc3VwLSZndDtzcmN1X2JhcnJpZXJfc2VxKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzOwogCiAJY2hlY2tfaW5pdF9zcmN1X3N0cnVjdChzc3ApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAgVGhlCiYjNDM7CSAqIHNoYXJlZCBpcnFfd29yayBtYXkgYWxzbyBkcmFpbiBvdGhlciBzcmN1X3N0cnVjdHMmIzM5Oywgd2hpY2ggaXMgaGFybWxlc3MuCiYjNDM7CSAqLwomIzQzOwlzcmN1X2RlZmVyX2ZsdXNoKCk7CiYjNDM7CiYjNDM7CXMgPSByY3Vfc2VxX3NuYXAoJmFtcDtzc3AtJmd0O3NyY3Vfc3VwLSZndDtzcmN1X2JhcnJpZXJfc2VxKTsKIAltdXRleF9sb2NrKCZhbXA7c3NwLSZndDtzcmN1X3N1cC0mZ3Q7c3JjdV9iYXJyaWVyX211dGV4KTsKIAlpZiAocmN1X3NlcV9kb25lKCZhbXA7c3NwLSZndDtzcmN1X3N1cC0mZ3Q7c3JjdV9iYXJyaWVyX3NlcSwgcykpIHsKIAkJc21wX21iKCk7IC8qIEZvcmNlIG9yZGVyaW5nIGZvbGxvd2luZyByZXR1cm4uICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RpbnkuYyBiL2tlcm5lbC9yY3UvdGlueS5jCmluZGV4IGRjY2NjZDZiZTk0MTEuLjU3MzZiOTY0ZDhlZTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdGlueS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdGlueS5jCkBAIC0xMSw2ICYjNDM7MTEsOCBAQAogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pcnFfd29yay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25vdGlmaWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwpAQCAtNDIsOCAmIzQzOzQ0LDg2IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2N0cmxibGsgPSB7CiAJLmdwX3NlcQkJPSAwIC0gMzAwVUwsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpCiYjNDM7ICogdGhhdCBhcnJpdmVzIHdpdGggaW50ZXJydXB0cyBvZmYgc3RhZ2VzIHRoZSBjYWxsYmFjayBvbiBhIGxvY2tsZXNzIGxpc3QgdGhhdAomIzQzOyAqIGFuIGlycV93b3JrIHJlLWlzc3VlcyBsYXRlci4gIE9uZSBnbG9iYWwgbGlzdCBhbmQgaXJxX3dvcmsgc3VmZmljZSwgYXMgVGlueQomIzQzOyAqIFJDVSBpcyB1bmlwcm9jZXNzb3IuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpOwomIzQzO3N0YXRpYyBMTElTVF9IRUFEKHJjdV9kZWZlcl9saXN0KTsKJiM0MztzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHJjdV9kZWZlcl9pdywgcmN1X2RlZmVyX2RyYWluKTsKJiM0MztzdGF0aWMgYm9vbCByY3VfZGVmZXJfZHJhaW5pbmc7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkgdG8KJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYykKJiM0Mzt7CiYjNDM7CXN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlczsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7CiYjNDM7CQlpZiAoYXRvbWljX2luY19yZXR1cm4oJmFtcDtkb3VibGVmcmVlcykgJmx0OyA0KSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMoKTogRG91YmxlLWZyZWVkIENCICVwLSZndDslcFMoKSEhISAgJiMzNDssIF9fZnVuY19fLCBoZWFkLCBoZWFkLSZndDtmdW5jKTsKJiM0MzsJCQltZW1fZHVtcF9vYmooaGVhZCk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGVhZC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CWhlYWQtJmd0O25leHQgPSBOVUxMOwomIzQzOwomIzQzOwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CSpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDsKJiM0MzsJcmN1X2N0cmxibGsuY3VydGFpbCA9ICZhbXA7aGVhZC0mZ3Q7bmV4dDsKJiM0MzsJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkgewomIzQzOwkJLyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi8KJiM0MzsJCXJlc2NoZWRfY3B1KDApOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KQomIzQzO3sKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0OwomIzQzOwomIzQzOwkvKiBDYWxsYmFja3MgYXJlIHVub3JkZXJlZCwgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuICovCiYjNDM7CXJjdV9kZWZlcl9kcmFpbmluZyA9IHRydWU7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbCgmYW1wO3JjdV9kZWZlcl9saXN0KSkgewomIzQzOwkJc3RydWN0IHJjdV9oZWFkICpoZWFkID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7CiYjNDM7CiYjNDM7CQlyY3VfZG9fZW5xdWV1ZShoZWFkLCBoZWFkLSZndDtmdW5jKTsKJiM0MzsJfQomIzQzOwlyY3VfZGVmZXJfZHJhaW5pbmcgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJLyogQSByZS1lbnRyYW50IGNhbGxfcmN1KCkgZHVyaW5nIHRoZSBkcmFpbiB3b3VsZCBsaXZlbG9jayBpdDsgZHJvcCBpdC4gKi8KJiM0MzsJaWYgKHJjdV9kZWZlcl9kcmFpbmluZyAmYW1wOyZhbXA7ICFpbl9ubWkoKSkgewomIzQzOwkJV0FSTl9PTkNFKDEsICYjMzQ7Y2FsbF9yY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CWhlYWQtJmd0O2Z1bmMgPSBmdW5jOwomIzQzOwlpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsICZhbXA7cmN1X2RlZmVyX2xpc3QpKQomIzQzOwkJaXJxX3dvcmtfcXVldWUoJmFtcDtyY3VfZGVmZXJfaXcpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlycV93b3JrX3N5bmMoJmFtcDtyY3VfZGVmZXJfaXcpOwomIzQzO30KJiM0MzsKIHZvaWQgcmN1X2JhcnJpZXIodm9pZCkKIHsKJiM0MzsJLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBmaXJzdC4gKi8KJiM0MzsJcmN1X2RlZmVyX2ZsdXNoKCk7CiAJd2FpdF9yY3VfZ3AoY2FsbF9yY3VfaHVycnkpOwogfQogRVhQT1JUX1NZTUJPTChyY3VfYmFycmllcik7CkBAIC0xNTcsMjkgJiM0MzsyMzcsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTsKICAqLwogdm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpCiB7Ci0Jc3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHsKLQkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZhbXA7ZG91YmxlZnJlZXMpICZsdDsgNCkgewotCQkJcHJfZXJyKCYjMzQ7JXMoKTogRG91YmxlLWZyZWVkIENCICVwLSZndDslcFMoKSEhISAgJiMzNDssIF9fZnVuY19fLCBoZWFkLCBoZWFkLSZndDtmdW5jKTsKLQkJCW1lbV9kdW1wX29iaihoZWFkKTsKLQkJfQomIzQzOwlpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7CiYjNDM7CQljYWxsX3JjdV9kZWZlcihoZWFkLCBmdW5jKTsKIAkJcmV0dXJuOwogCX0KIAotCWhlYWQtJmd0O2Z1bmMgPSBmdW5jOwotCWhlYWQtJmd0O25leHQgPSBOVUxMOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDsKLQlyY3VfY3RybGJsay5jdXJ0YWlsID0gJmFtcDtoZWFkLSZndDtuZXh0OwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKJiM0MzsJLyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovCiYjNDM7CVdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpICZhbXA7JmFtcDsgaW5fbm1pKCkpOwogCi0JaWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHsKLQkJLyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi8KLQkJcmVzY2hlZF9jcHUoMCk7Ci0JfQomIzQzOwlyY3VfZG9fZW5xdWV1ZShoZWFkLCBmdW5jKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuYwppbmRleCA5Njg0OGZjMWYwMmI4Li5lMjFlYjU1MWIxMTBlIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3RyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3RyZWUuYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZV93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9kZWJ1Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25taS5oJmd0OwpAQCAtMzE0OCwyMSAmIzQzOzMxNDksMjggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2Jfb3ZsZChzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIAlyYXdfc3Bpbl91bmxvY2tfcmN1X25vZGUocm5wKTsKIH0KIAotc3RhdGljIHZvaWQKLV9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKQomIzQzOy8qCiYjNDM7ICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKQomIzQzOyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIChzZWUgc2hvdWxkX3JjdV9kZWZlcigpKSBzdGFnZXMgdGhlIGNhbGxiYWNrCiYjNDM7ICogb24gYSBwZXItQ1BVIGxsaXN0IHRoYXQgYW4gaXJxX3dvcmsgcmUtaXNzdWVzIG9uY2UgaW50ZXJydXB0cyBhcmUgb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpOwomIzQzOwomIzQzOy8qIFNldCB3aGlsZSByY3VfZGVmZXJfZHJhaW4oKSByZS1pc3N1ZXMsIHRvIGNhdGNoIGEgcmUtZW50cmFudCBjYWxsX3JjdSgpLiAqLwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCByY3VfZGVmZXJfZHJhaW5pbmcpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSYjMzk7cyByY3Vfc2VnY2JsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkKJiM0MzsgKiB0byByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwKJiM0MzsgKiBjb25kaXRpb24uICBFaXRoZXIgY2FsbGVyIG1heSBoYXZlIGludGVycnVwdHMgYWxyZWFkeSBkaXNhYmxlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbikKIHsKIAlzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlib29sIGxhenk7CiAJc3RydWN0IHJjdV9kYXRhICpyZHA7CiAKLQkvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqLwotCVdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkICZhbXA7IChzaXplb2Yodm9pZCAqKSAtIDEpKTsKLQotCS8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi8KLQlpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSkKLQkJcmV0dXJuOwotCiAJaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7CiAJCS8qCiAJCSAqIFByb2JhYmxlIGRvdWJsZSBjYWxsX3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4KQEAgLTMyMDYsNiAmIzQzOzMyMTQsOTIgQEAgX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gdGhlIGVucXVldWUgc28gdGhleSBjYW5ub3QgZGVmZXIKJiM0MzsgKiBhZ2Fpbi4gIC0mZ3Q7ZGVmZXJfbG9jayBzZXJpYWxpemVzIHRoZSBkcmFpbmVyczogdGhpcyBDUFUmIzM5O3MgaXJxX3dvcmssCiYjNDM7ICogcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByY3VfZGF0YSAqcmRwID0gY29udGFpbmVyX29mKGl3LCBzdHJ1Y3QgcmN1X2RhdGEsIGRlZmVyX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfbG9jaywgZmxhZ3MpOwomIzQzOwl0aGlzX2NwdV93cml0ZShyY3VfZGVmZXJfZHJhaW5pbmcsIHRydWUpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoJmFtcDtyZHAtJmd0O2RlZmVyX2hlYWQpKSB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTsKJiM0MzsKJiM0MzsJCXJjdV9kb19lbnF1ZXVlKGhlYWQsIGhlYWQtJmd0O2Z1bmMsIGZhbHNlKTsKJiM0MzsJfQomIzQzOwl0aGlzX2NwdV93cml0ZShyY3VfZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTsKJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyZHAtJmd0O2RlZmVyX2xvY2ssIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU3RhZ2UgQGhlYWQgZm9yIHRoaXMgQ1BVJiMzOTtzIGlycV93b3JrIHdoZW4gY2FsbF9yY3UoKSBjYW5ub3QgZW5xdWV1ZSBub3cuICovCiYjNDM7c3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJc3RydWN0IHJjdV9kYXRhICpyZHAgPSB0aGlzX2NwdV9wdHIoJmFtcDtyY3VfZGF0YSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEluc3RydW1lbnRhdGlvbiBvbiB0aGUgZW5xdWV1ZSBwYXRoIGNhbiByZS1lbnRlciBoZXJlIGZyb20gaW5zaWRlCiYjNDM7CSAqIHJjdV9kZWZlcl9kcmFpbigpLiAgUmUtcXVldWluZyB3b3VsZCBsaXZlbG9jayB0aGUgZHJhaW4sIHNvIGRyb3AgdGhlCiYjNDM7CSAqIGNhbGxiYWNrOyBhbiBOTUkgaXMgb25lLXNob3QgYW5kIGNhbm5vdCBsb29wLCBzbyBsZXQgaXQgdGhyb3VnaC4KJiM0MzsJICovCiYjNDM7CWlmICh0aGlzX2NwdV9yZWFkKHJjdV9kZWZlcl9kcmFpbmluZykgJmFtcDsmYW1wOyAhaW5fbm1pKCkpIHsKJiM0MzsJCVdBUk5fT05DRSgxLCAmIzM0O2NhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwloZWFkLSZndDtmdW5jID0gZnVuYzsKJiM0MzsJaWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCAmYW1wO3JkcC0mZ3Q7ZGVmZXJfaGVhZCkpCiYjNDM7CQlpcnFfd29ya19xdWV1ZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfd29yayk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmcKJiM0MzsgKiByY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLiAgVGhpcyBydW5zIGJlZm9yZSByY3VfYmFycmllcigpIHNjYW5zIHRoZQomIzQzOyAqIGxpc3RzLiAgQW4gb25saW5lIENQVSYjMzk7cyBvd24gaXJxX3dvcmsgcmUtaXNzdWVzIGl0cyBjYWxsYmFja3MsIHNvIHdhaXQgaXQgb3V0OwomIzQzOyAqIGFuIG9mZmxpbmUgQ1BVJiMzOTtzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4sIHNvIGRyYWluIGl0cyBsaXN0IGRpcmVjdGx5CiYjNDM7ICogb250byB0aGlzIENQVSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKCZhbXA7cmN1X2RhdGEsIGNwdSk7CiYjNDM7CiYjNDM7CQlpZiAoY3B1X29ubGluZShjcHUpKQomIzQzOwkJCWlycV93b3JrX3N5bmMoJmFtcDtyZHAtJmd0O2RlZmVyX3dvcmspOwomIzQzOwkJZWxzZQomIzQzOwkJCXJjdV9kZWZlcl9kcmFpbigmYW1wO3JkcC0mZ3Q7ZGVmZXJfd29yayk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0MztfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbikKJiM0Mzt7CiYjNDM7CS8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovCiYjNDM7CVdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkICZhbXA7IChzaXplb2Yodm9pZCAqKSAtIDEpKTsKJiM0MzsKJiM0MzsJLyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHNob3VsZF9yY3VfZGVmZXIoKSkgewomIzQzOwkJY2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovCiYjNDM7CVdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpICZhbXA7JmFtcDsgaW5fbm1pKCkpOwomIzQzOwomIzQzOwlyY3VfZG9fZW5xdWV1ZShoZWFkLCBmdW5jLCBsYXp5X2luKTsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX1JDVV9MQVpZCiBzdGF0aWMgYm9vbCBlbmFibGVfcmN1X2xhenkgX19yZWFkX21vc3RseSA9ICFJU19FTkFCTEVEKENPTkZJR19SQ1VfTEFaWV9ERUZBVUxUX09GRik7CiBtb2R1bGVfcGFyYW0oZW5hYmxlX3JjdV9sYXp5LCBib29sLCAwNDQ0KTsKQEAgLTM4OTYsOCAmIzQzOzM5OTAsMTIgQEAgdm9pZCByY3VfYmFycmllcih2b2lkKQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBnc2VxOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwOwotCXVuc2lnbmVkIGxvbmcgcyA9IHJjdV9zZXFfc25hcCgmYW1wO3JjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzOwogCiYjNDM7CS8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHNuYXBzaG90dGluZyB0aGUgc2VxdWVuY2UuICovCiYjNDM7CXJjdV9kZWZlcl9mbHVzaCgpOwomIzQzOwomIzQzOwlzID0gcmN1X3NlcV9zbmFwKCZhbXA7cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpOwogCXJjdV9iYXJyaWVyX3RyYWNlKFRQUygmIzM0O0JlZ2luJiMzNDspLCAtMSwgcyk7CiAKIAkvKiBUYWtlIG11dGV4IHRvIHNlcmlhbGl6ZSBjb25jdXJyZW50IHJjdV9iYXJyaWVyKCkgcmVxdWVzdHMuICovCkBAIC00MjMxLDYgJiM0Mzs0MzI5LDEwIEBAIHJjdV9ib290X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSkKIAlyZHAtJmd0O3JjdV9vbmxfZ3Bfc3RhdGUgPSBSQ1VfR1BfQ0xFQU5FRDsKIAlyZHAtJmd0O2xhc3Rfc2NoZWRfY2xvY2sgPSBqaWZmaWVzOwogCXJkcC0mZ3Q7Y3B1ID0gY3B1OwomIzQzOwlpbml0X2xsaXN0X2hlYWQoJmFtcDtyZHAtJmd0O2RlZmVyX2hlYWQpOwomIzQzOwlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtyZHAtJmd0O2RlZmVyX2xvY2spOwomIzQzOwkvKiBIYXJkIGlycV93b3JrIHNvIHRoZSByZS1pc3N1ZSBydW5zIHByb21wdGx5LiAqLwomIzQzOwlyZHAtJmd0O2RlZmVyX3dvcmsgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTsKIAlyY3VfYm9vdF9pbml0X25vY2JfcGVyY3B1X2RhdGEocmRwKTsKIH0KIApAQCAtNDUyOCw2ICYjNDM7NDYzMCwxNiBAQCB2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSkKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKCZhbXA7cmN1X2RhdGEsIGNwdSk7CiAJYm9vbCBuZWVkd2FrZTsKIAomIzQzOwkvKgomIzQzOwkgKiBDYWxsYmFja3MgdGhlIG91dGdvaW5nIENQVSBkZWZlcnJlZCBsYXRlIGluIHRoZSBvZmZsaW5lIHBhdGggKHBhc3QgdGhlCiYjNDM7CSAqIHBvaW50IGl0cyBpcnFfd29yayBjYW4gcnVuKSBzaXQgb24gLSZndDtkZWZlcl9oZWFkLCB3aGljaCB0aGUgLSZndDtjYmxpc3QKJiM0MzsJICogbWlncmF0aW9uIGJlbG93IGRvZXMgbm90IGNvdmVyLiAgRHJhaW4gdGhlbSBoZXJlLCBiZWZvcmUgdGhlIGVhcmx5CiYjNDM7CSAqIHJldHVybnM7IHRoZSByZS1pc3N1ZSBsYW5kcyBvbiB0aGlzIENQVS4KJiM0MzsJICovCiYjNDM7CXJjdV9kZWZlcl9kcmFpbigmYW1wO3JkcC0mZ3Q7ZGVmZXJfd29yayk7CiYjNDM7CS8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcy4gKi8KJiM0MzsJc3JjdV9vZmZsaW5lX2RyYWluKGNwdSk7CiYjNDM7CiAJaWYgKHJjdV9yZHBfaXNfb2ZmbG9hZGVkKHJkcCkpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmggYi9rZXJuZWwvcmN1L3RyZWUuaAppbmRleCBlZWRmYTQzMDU5ZTgwLi4zYThlMTcxMzZjNWE3IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3RyZWUuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3RyZWUuaApAQCAtMjI5LDYgJiM0MzsyMjksMTEgQEAgc3RydWN0IHJjdV9kYXRhIHsKIAlzdHJ1Y3QgcmN1X2hlYWQgYmFycmllcl9oZWFkOwogCWludCBleHBfd2F0Y2hpbmdfc25hcDsJCS8qIERvdWJsZS1jaGVjayBuZWVkIGZvciBJUEkuICovCiAKJiM0MzsJLyogRGVmZXJyYWwgb2YgYW4gTk1JL3JlZW50cmFudCBjYWxsX3JjdSgpOyBzZWUgX19jYWxsX3JjdV9jb21tb24oKS4gKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfaGVhZDsKJiM0MzsJc3RydWN0IGlycV93b3JrIGRlZmVyX3dvcms7CiYjNDM7CXJhd19zcGlubG9ja190IGRlZmVyX2xvY2s7CiYjNDM7CiAJLyogNSkgQ2FsbGJhY2sgb2ZmbG9hZGluZy4gKi8KICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVCiAJc3RydWN0IHN3YWl0X3F1ZXVlX2hlYWQgbm9jYl9jYl93cTsgLyogRm9yIG5vY2Iga3RocmVhZHMgdG8gc2xlZXAgb24uICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mNmVjZDkzYmUzMGY0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYwpAQCAtMCwwICYjNDM7MSw1OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogRXhlcmNpc2UgcmUtZW50cnkgaW50byBjYWxsX3NyY3UoKSBmcm9tIEJQRjsgc2VlIHByb2dzL3JjdV9yZWVudHJ5LmMuICovCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtzY2hlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtyY3VfcmVlbnRyeS5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgc3lzX3BpZGZkX29wZW4ocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzY2FsbChfX05SX3BpZGZkX29wZW4sIHBpZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfcmN1X3JlZW50cnkodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByY3VfcmVlbnRyeSAqc2tlbDsKJiM0MzsJaW50IGVyciwgcGlkZmQgPSAtMSwgbWFwX2ZkOwomIzQzOwlfX3U2NCB2YWwgPSAxOwomIzQzOwljcHVfc2V0X3Qgc2V0OwomIzQzOwomIzQzOwlza2VsID0gcmN1X3JlZW50cnlfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSByY3VfcmVlbnRyeV9fYXR0YWNoKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2tlbF9hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogS2VlcCB0aGUgcmUtZW50cnkgb24gYSBzaW5nbGUgQ1BVLiAqLwomIzQzOwlDUFVfWkVSTygmYW1wO3NldCk7CiYjNDM7CUNQVV9TRVQoMCwgJmFtcDtzZXQpOwomIzQzOwlpZiAoc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksICZhbXA7c2V0KSkKJiM0MzsJCXBlcnJvcigmIzM0O3NjaGVkX3NldGFmZmluaXR5JiMzNDspOwomIzQzOwomIzQzOwlwaWRmZCA9IHN5c19waWRmZF9vcGVuKGdldHBpZCgpLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocGlkZmQsIDAsICYjMzQ7cGlkZmRfb3BlbiYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwltYXBfZmQgPSBicGZfbWFwX19mZChza2VsLSZndDttYXBzLnRhc2tfc3RnKTsKJiM0MzsJZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsICZhbXA7cGlkZmQsICZhbXA7dmFsLCBCUEZfTk9FWElTVCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtib290X2NyZWF0ZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7CiYjNDM7CWVyciA9IGJwZl9tYXBfZGVsZXRlX2VsZW0obWFwX2ZkLCAmYW1wO3BpZGZkKTsKJiM0MzsJQVNTRVJUX09LKGVyciwgJiMzNDtib290X2RlbGV0ZSYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogT25seSBUcmVlIFNSQ1UgZW5xdWV1ZXMgdmlhIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpOyBza2lwIGVsc2V3aGVyZS4gKi8KJiM0MzsJaWYgKCFza2VsLSZndDtic3MtJmd0O2hpdHMpIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3JlZW50ZXJlZCwgMSwgJiMzNDtyZWVudHJ5X2RlZmVycmVkJiMzNDspOwomIzQzO291dDoKJiM0MzsJaWYgKHBpZGZkICZndDs9IDApCiYjNDM7CQljbG9zZShwaWRmZCk7CiYjNDM7CXJjdV9yZWVudHJ5X19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZDkyYTkyN2ZmNTFjMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jCkBAIC0wLDAgJiM0MzsxLDQ1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIFJlLWVudGVyIGNhbGxfc3JjdSgpIGZyb20gYSBCUEYgcHJvZ3JhbS4gIGZlbnRyeSBvbiByY3Vfc2VnY2JsaXN0X2VucXVldWUoKQomIzQzOyAqIGZpcmVzIGluc2lkZSBjYWxsX3NyY3UoKSYjMzk7cyBlbnF1ZXVlIChyZWFjaGVkIGZyb20gc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKQomIzQzOyAqIHdpdGggdGhlIHNyY3VfZGF0YSAtJmd0O2xvY2sgaGVsZCk7IHRoZSBoYW5kbGVyIHRoZW4gY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKQomIzQzOyAqIC0tIGl0c2VsZiBjYWxsX3NyY3UoKSBvbiByY3VfdGFza3NfdHJhY2Vfc3JjdV9zdHJ1Y3QgLS0gcmUtZW50ZXJpbmcgdGhlIHNhbWUKJiM0MzsgKiBzcmN1X2RhdGEgb24gdGhlIHNhbWUgQ1BVLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1RBU0tfU1RPUkFHRSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBfX3U2NCk7CiYjNDM7fSB0YXNrX3N0ZyBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztpbnQgdGFyZ2V0X3BpZDsKJiM0MztpbnQgaGl0czsKJiM0MztpbnQgcmVlbnRlcmVkOwomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9yY3Vfc2VnY2JsaXN0X2VucXVldWUmIzM0OykKJiM0MztpbnQgQlBGX1BST0cocmVlbnRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyOwomIzQzOwomIzQzOwlpZiAocmVlbnRlcmVkIHx8ICF0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWN1ciA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpOwomIzQzOwlpZiAoIWN1ciB8fCBjdXItJmd0O3BpZCAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFJlLWVudGVyIHZpYSBhIHRhc2stc3RvcmFnZSBkZWxldGUsIHdoaWNoIGNhbGxzIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkuICovCiYjNDM7CV9fc3luY19mZXRjaF9hbmRfYWRkKCZhbXA7aGl0cywgMSk7CiYjNDM7CWJwZl90YXNrX3N0b3JhZ2VfZ2V0KCZhbXA7dGFza19zdGcsIGN1ciwgMCwgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTsKJiM0MzsJYnBmX3Rhc2tfc3RvcmFnZV9kZWxldGUoJmFtcDt0YXNrX3N0ZywgY3VyKTsKJiM0MzsKJiM0MzsJcmVlbnRlcmVkID0gMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgxOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDkzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBSQ1UvU1JDVSBEZWZlcnJhbCBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgaW50cm9kdWNlcyBkZWZlcnJlZCBjYWxsYmFja3MgaW4gUkNVL1NSQ1UuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHllcywgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgdG91Y2hpbmcgZnVuZGFtZW50YWwga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgUkNVIGFuZCBTUkNVLCBhbmQgdGhhdCYjMzk7cyBhbHdheXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFdlIGhhdmUgYSBzb2xpZCBzdGFydGluZyBwb2ludCB0b28sIHNpbmNlIHRoZXJlIGFyZSBuZXcgZnVuY3Rpb25zIGJlaW5nIGFkZGVkOiBgc3JjdV9kZWZlcl9kcmFpbmAsIGByY3VfZGVmZXJfZHJhaW5gLCBgc3JjdV9vZmZsaW5lX2RyYWluYCwgYGNhbGxfcmN1X2RlZmVyYCwgYHJjdV9kZWZlcl9mbHVzaGAsIGFuZCBgc3JjdV9kZWZlcl9mbHVzaGAuIFBsdXMsIHNldmVyYWwgZXhpc3RpbmcgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCBsaWtlIGBjYWxsX3JjdWAsIGBjYWxsX3NyY3VgLCBgcmN1X2JhcnJpZXJgLCBhbmQgYHNyY3VfYmFycmllcmAuCgpOb3csIGJlZm9yZSBJIGNhbiByZWFsbHkgZ2V0IGludG8gZnV6emluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBjb21waWxlZC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBDT05GSUdfUkNVX0RFRkVSYCwgYnV0IGl0JiMzOTtzIGEgYGRlZl9ib29sYC4gSXQgYXBwZWFycyBpdCB3aWxsIGJlIGVuYWJsZWQgYXV0b21hdGljYWxseSBpZiBgSEFWRV9OTUlgLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBvciBgVFJBQ0VQT0lOVFNgIGFyZSBlbmFibGVkLiBTbywgdG8gZW5zdXJlIGl0JiMzOTtzIGVuYWJsZWQgZHVyaW5nIGZ1enppbmcsIEkgc2hvdWxkIHByb2JhYmx5IGVuYWJsZSBhdCBsZWFzdCBvbmUgb2YgdGhlc2UgY29uZmlnIG9wdGlvbnMuIFRoZSBLY29uZmlnIGRvY3VtZW50YXRpb24gc2F5cyB0byBsaXN0IHRoZSBmbGFncyB0aGF0IG5lZWQgdG8gYmUgKmV4cGxpY2l0bHkqIGVuYWJsZWQsIHNvIEkgZG9uJiMzOTt0IHRoaW5rIEkgY2FuIGV4cGxpY2l0bHkgc2V0IGBSQ1VfREVGRVJgIGl0c2VsZjsgYnV0LCBzaW5jZSBpdCBoYXMgbm8gcHJvbXB0LCBJIGNhbiYjMzk7dCBzZXQgaXQgZGlyZWN0bHkuIFNvLCBJIHdpbGwgbmVlZCB0byBlbmFibGUgZWl0aGVyIGBLUFJPQkVTYCBvciBgVFJBQ0VQT0lOVFNgIG9yIGBGVU5DVElPTl9UUkFDRVJgIHRvIGVuc3VyZSBpdCBpcyBzZWxlY3RlZC4gQWxzbywgc2luY2UgYHJjdXRvcnR1cmUuY2AgdXNlcyBgQ09ORklHX1BFUkZfRVZFTlRTYCwgSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGVuYWJsZSB0aGF0LiBBbmQgb2J2aW91c2x5IGBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVGAgdG8gZW5hYmxlIHRoZSBtb2R1bGUuCgpJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSBzaG91bGQgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uOiB0aGUgbW9zdCBpbXBvcnRhbnQgYXJlIHRob3NlIGRpcmVjdGx5IGV4cG9zZWQgYXMgQVBJcyBvciBtb2RpZmllZCBieSB0aGUgcGF0Y2guIFNvLCBJJiMzOTttIHRoaW5raW5nOgoKKiAgIGBzcmN1X2RlZmVyX2RyYWluYCAoYW5kIEkgc2hvdWxkIGNoZWNrIGl0cyB1c2FnZSBzaW5jZSBpdCBoYXMgZHVwbGljYXRlIGRlZmluaXRpb25zIGJldHdlZW4gYHNyY3V0aW55LmNgIGFuZCBgc3JjdXRyZWUuY2ApCiogICBgcmN1X2RlZmVyX2RyYWluYCAoY2hlY2sgaWYgaXQmIzM5O3Mgc3RhdGljKQoqICAgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgKHNlZW1zIGxpa2UgYW4gaW50ZXJlc3Rpbmcgb25lKQoqICAgYGNhbGxfc3JjdWAgKGRlZmluaXRlbHkgYW4gQVBJIGVudHJ5KQoqICAgYGNhbGxfcmN1YCAoYWdhaW4sIEFQSSkKKiAgIGBzcmN1X2JhcnJpZXJgIChhbm90aGVyIEFQSSBlbnRyeSkKKiAgIGByY3VfYmFycmllcmAgKGFuZCBhbm90aGVyKQoKU28sIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgYGtlcm5lbC9yY3Uvc3JjdXRyZWUuY2AgYW5kIGBrZXJuZWwvcmN1L3RyZWUuY2AgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuIE9rYXksIG5vdyBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIHN0YXJ0IGlkZW50aWZ5aW5nIHBvdGVudGlhbCBmdXp6aW5nIGVudHJ5IHBvaW50cyBhbmQgdGVzdCBjYXNlcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkuKnNyY3VfZGVmZXJfZHJhaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcmN1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcmN1L3NyY3V0aW55LmM9MjQyPXN0YXRpYyBib29sIHNyY3VfZGVmZXJfZHJhaW5pbmc7XG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMjQzLVxua2VybmVsL3JjdS9zcmN1dGlueS5jOjI0NDp2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNDUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlNSQ1UgRHJhaW4gSW1wbGVtZW50YXRpb24gLSBBIFF1aWNrIE1lbnRhbCBOYXZpZ2F0aW9uKioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIFNSQ1UgZHJhaW4gbWVjaGFuaXNtLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhlIGRlZmVycmVkIGFjdGlvbiB0byBkcmFpbiBTUkNVIGlzIGhhbmRsZWQuIE15IG1pbmQgaW1tZWRpYXRlbHkgd2VudCB0byB0aGUgYHNyY3V0cmVlLmNgIGZpbGUsIGFzIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gQW5kIHllcywgdGhlcmUgaXQgaXMhIEkmIzM5O20gcHJldHR5IHN1cmUgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBkZWZlcnJpbmcgdGhlIHdvcmsgYW5kIHRoZSBmaW5hbCBkcmFpbmluZyBhZnRlciB0aGF0IHdvcmsgaXMgZG9uZSBpcyBgc3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KWAuIEkmIzM5O20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBpcnFfd29ya2AgaW4gbXkgaGVhZCwgYXMgd2VsbCBhcyB0aGUgY2FsbCBjaGFpbiB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBldmVudHVhbGx5IGNhbGxpbmcgdGhhdCBkZWZlciBmdW5jdGlvbiwgbGlrZWx5IGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9zcmN1dHJlZS5jPTgxPXN0YXRpYyB2b2lkIHNyY3VfZGVsYXlfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xua2VybmVsL3JjdS9zcmN1dHJlZS5jLTgyLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjgzOnN0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtODQtXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE0ODU9c3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTIzLSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE1MjQ6c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1MjUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDE5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIGNvZGUsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqU1JDVVRyZWUgdnMuIFNSQ1VUaW55OiBTdGF0aWMgdnMuIE5vbi1TdGF0aWMgRnVuY3Rpb24gVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBhIGRpc2NyZXBhbmN5IGhlcmUgdGhhdCBuZWVkcyBjbGFyaWZpY2F0aW9uLiBgc3JjdV9kZWZlcl9kcmFpbmAsIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBkZWZlcnJlZCBkcmFpbiBwcm9jZXNzIGZvciBTUkNVLCBpcyAqc3RhdGljKiB3aXRoaW4gdGhlIGBzcmN1dHJlZS5jYCBmaWxlLiBUaGlzIGlzIGV4cGVjdGVkLCBtZWFuaW5nIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSBhbmQgY2FsbGFibGUgd2l0aGluIHRoYXQgY29tcGlsYXRpb24gdW5pdC4gSG93ZXZlciwgSSYjMzk7bSBmaW5kaW5nIHRoYXQgc2FtZSBmdW5jdGlvbiBkZWNsYXJlZCBhcyAqbm9uLXN0YXRpYyogaW4gYHNyY3V0aW55LmNgLiBUaGF0JiMzOTtzIHVudXN1YWwsIGFuZCBpdOKAmXMgcmFpc2luZyBhIGZsYWcuIFRoaXMgaW1wbGllcyBzb21lIHNvcnQgb2YgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgcGVyaGFwcyBhIGRlc2lnbiBwYXR0ZXJuIHRoYXQgSSBkb24mIzM5O3QgZnVsbHkgdW5kZXJzdGFuZCB5ZXQsIGJ1dCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGxvb2sgaW50byBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aHkgdGhhdCB3b3VsZCBiZSB0aGUgY2FzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRpZmZlcmVudCBzY29waW5nIGFuZCBpdHMgaW1wYWN0IG9uIGNyb3NzLWZpbGUgZnVuY3Rpb24gY2FsbHMgb3IgbGlua2FnZS4KCkZ1cnRoZXJtb3JlLCBgc3JjdV9vZmZsaW5lX2RyYWluYCBpcyAqbm9uLXN0YXRpYyogaW4gYHNyY3V0cmVlLmNgLiBUaGlzIG1ha2VzIHNlbnNlLCBhcyBpdOKAmXMgbGlrZWx5IGludGVuZGVkIHRvIGJlIHBhcnQgb2YgdGhlIEFQSSBvZmZlcmVkIGJ5IHRoZSBgc3JjdXRyZWVgIG1vZHVsZS4KSSBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZXNlIGRpZmZlcmVudCB2aXNpYmlsaXR5IGxldmVscyBhcmUgdXNlZCBhbmQgd2hhdCB0aGUgcHJhY3RpY2FsIGVmZmVjdHMgYXJlLgpJIHdpbGwgaGF2ZSB0byBjaGVjayBob3cgdGhlIGRpZmZlcmVudCBjb21wb25lbnRzIGludGVyYWN0IHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBpbnRlcnByZXRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBzcmN1X29mZmxpbmVfZHJhaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcmN1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcmN1L3JjdS5oPTU4MT1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNTg5LS8qIERyYWluIGFuIG91dGdvaW5nIENQVSYjMzk7cyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi9cbmtlcm5lbC9yY3UvcmN1Lmg6NTkwOnZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xua2VybmVsL3JjdS9yY3UuaC01OTEtXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE1MjQ9c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTUyLSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE1NTM6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSlcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTU0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYxOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBSQ1UgRGVmZXJyYWwgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBSQ1UgZGVmZXJyYWwgaW1wbGVtZW50YXRpb24uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIG5vdGljaW5nIGlzIHRoZSBtb2RpZmljYXRpb24gb2YgYHJjdV9iYXJyaWVyYCwgYHNyY3VfYmFycmllcmAsIGBjYWxsX3JjdWAsIGFuZCBgY2FsbF9zcmN1YC4gVGhvc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyB0b3VjaGVkLiBJJiMzOTttIGFsc28gc2VlaW5nIGNoYW5nZXMgaW4gYHJjdXRvcnR1cmUuY2AsIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0ZXN0aW5nIGlzIGluIHBsYWNlLgoKTGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgY2FsbF9yY3VgCiogICBgY2FsbF9zcmN1YAoqICAgYHJjdV9iYXJyaWVyYAoqICAgYHNyY3VfYmFycmllcmAKKiAgIGBzcmN1X29mZmxpbmVfZHJhaW5gCgpBbmQsIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSBlbmFibGVkOgoKKiAgIGBQRVJGX0VWRU5UU2AKKiAgIGBLUFJPQkVTYAoqICAgYFRSQUNFUE9JTlRTYAoqICAgYFJDVV9UT1JUVVJFX1RFU1RgIChhbHRob3VnaCB0aGlzIGlzIGZvciB0ZXN0aW5nLCBpdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZCkKCldhaXQsIGEgY3J1Y2lhbCBwb2ludCEgYFJDVV9ERUZFUmAgaXMgdGllZCB0byBgSEFWRV9OTUlgLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYC4gU28sIGVuc3VyaW5nIGBLUFJPQkVTYCBhbmQgYFRSQUNFUE9JTlRTYCBhcmUgZW5hYmxlZCBpbXBsaWNpdGx5IGhhbmRsZXMgdGhhdC4gQW5kLCBgUEVSRl9FVkVOVFNgIGlzIG5lZWRlZCBmb3IgdGhlIE5NSSB0ZXN0aW5nIHdpdGhpbiBgcmN1dG9ydHVyZWAuCgpOb3csIGFib3V0IGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgLiBUaGUgcHJvbXB0ICpkb2VzKiB3YXJuIGFnYWluc3QgZm9jdXNpbmcgb24gZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucywgYW5kIHRoZXNlIGFyZSBFWFRSRU1FTFkgaG90LXBhdGghIEhvd2V2ZXIsIHRoZSBwYXRjaCAqc3BlY2lmaWNhbGx5KiBtb2RpZmllcyB0aGVtIHRvIGhhbmRsZSBkZWZlcnJhbCB3aGVuIGBzaG91bGRfcmN1X2RlZmVyKClgIGlzIHRydWUgKHdoaWNoIGlzIHdoZW4gYGlycXNfZGlzYWJsZWQoKWAgYW5kIGByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFYCkuIFNvLCB3aGlsZSB0aGV5JiMzOTtyZSBjb3JlLCBkaXJlY3QgZnV6emluZyBtaWdodCBza2V3IHJlc3VsdHMuIE1heWJlLCBJIHNob3VsZCBwcmlvcml0aXplIGByY3VfYmFycmllcmAsIGBzcmN1X2JhcnJpZXJgLCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgaW5zdGVhZD8gVGhleSBhcmUgbm90IGhvdC1wYXRoLiBgc3JjdV9vZmZsaW5lX2RyYWluYCBpcyBjYWxsZWQgZHVyaW5nIENQVSBob3RwbHVnIHdoaWNoIGlzbiYjMzk7dCBob3QtcGF0aCBlaXRoZXIuCgpUaW1lIHRvIGxvb2sgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGFyZWEuLi4gbGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgdGhlcmUgbWlnaHQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIC4qX2RyYWluJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9yY3UuaD01ODE9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZClcbi0tXG5rZXJuZWwvcmN1L3JjdS5oLTU4OS0vKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUmIzM5O3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXG5rZXJuZWwvcmN1L3JjdS5oOjU5MDp2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcbmtlcm5lbC9yY3UvcmN1LmgtNTkxLVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0yNDI9c3RhdGljIGJvb2wgc3JjdV9kZWZlcl9kcmFpbmluZztcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNDMtXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MjQ0OnZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTI0NS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE1MjQ9c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTUyLSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE1NTM6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSlcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTU0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWwgaW4gU1JDVSBhbmQgUkNVKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgc3JjdV9vZmZsaW5lX2RyYWluYCBhbmQgYHNyY3VfZGVmZXJfZHJhaW5gLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGlzICYjMzk7dGlueSYjMzk7IGNvbnRleHQuIFRoZSBmYWN0IHRoYXQgYHNyY3VfZGVmZXJfZHJhaW5gIGlzIGV4cG9ydGVkIGZyb20gdGhlICYjMzk7dGlueSYjMzk7IG1vZHVsZSBwcmVzZW50cyBhbiBpbnRlcmVzdGluZyBzdXJmYWNlIGZvciBmdXp6aW5nLCBkb2VzbiYjMzk7dCBpdD8gSG93ZXZlciwgSSYjMzk7bSBub3RpbmcgdGhhdCBpdCYjMzk7cyBhbiBgaXJxX3dvcmtgIGNhbGxiYWNrLCBzbyBkaXJlY3QgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBpcyB1bmxpa2VseS4gVGhhdCBsaW1pdHMgaW1tZWRpYXRlIGF2ZW51ZXMuCgpNeSBleHBlcnQgbWluZCBzaGlmdHMgZ2VhcnM7IEkmIzM5O20gdGhpbmtpbmcgdGhhdCBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYCBhcmUgYWx3YXlzIGdvb2QgdGFyZ2V0cyB0byBleHBsb3JlLiBUaGV5JiMzOTtyZSBmdW5kYW1lbnRhbCBhbmQgcmVwcmVzZW50IGNyaXRpY2FsIHN5bmNocm9uaXphdGlvbiBwb2ludHMuIFRoZXkmIzM5O3JlIHdlbGwta25vd24gYnV0IHBvdGVudGlhbGx5IG9mZmVyIHZ1bG5lcmFiaWxpdGllcyBpbiB1bnVzdWFsIHNjZW5hcmlvcy4KCk5vdywgdGhhdCBnZXRzIG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgPyBJdCYjMzk7cyBiZWVuIG1vZGlmaWVkIHRvIGNhbGwgYm90aCBgcmN1X2RlZmVyX2RyYWluYCBhbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAuIFNpbmNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgbW9yZSBpbnRlcmVzdGluZyB3aXRoaW4gYSAmIzM0O3RpbnkmIzM0OyBjb250ZXh0LCBJIHdvdWxkIG5lZWQgdG8gYW5hbHl6ZSAqaG93KiBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgYW5kIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29tYmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcmN1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcmN1L3RyZWUuYz00NTcwPXZvaWQgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQodm9pZClcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00NjI0LSAqL1xua2VybmVsL3JjdS90cmVlLmM6NDYyNTp2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MjYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQzMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDYWxsYmFjayBNaWdyYXRpb24gUG9pbnRzKioKCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBzaXR1YXRpb24sIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBzZWVtcyBsaWtlIGEgc3Ryb25nIGNvbnRlbmRlciBhcyBhIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIGZpcnN0IGd1ZXNzIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoYXQsIEkgc2hvdWxkIGRvIGEgcXVpY2sgY2hlY2staW4gd2l0aCBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYC4gVGhvc2UgYXJlIG9mdGVuIGludm9sdmVkIGluIHNpbWlsYXIgc2NlbmFyaW9zLCBhbmQgaXQmIzM5O3MgYWx3YXlzIHNtYXJ0IHRvIGhhdmUgYSB3aWRlciB2aWV3IG9mIHRoZSBjYWxsIHNpdGVzIGJlZm9yZSBkaXZpbmcgaW50byBvbmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgb2J2aW91cywgcmVsYXRlZCBwaWVjZXMgdGhhdCBtaWdodCBvZmZlciBhIG1vcmUgY29tcGxldGUgcGljdHVyZSwgb3IgZXZlbiBhIHNpbXBsZXIgcGF0aCB0byBhIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCByY3VfYmFycmllciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvdGFza3MuaD0xMjIyPUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV90YXNrcyk7XG4tLVxua2VybmVsL3JjdS90YXNrcy5oLTEyMjktICovXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTIzMDp2b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIzMS17XG4tLVxua2VybmVsL3JjdS90aW55LmM9MTE2PXN0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuLS1cbmtlcm5lbC9yY3UvdGlueS5jLTEyMi1cbmtlcm5lbC9yY3UvdGlueS5jOjEyMzp2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG5rZXJuZWwvcmN1L3RpbnkuYy0xMjQte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTM5NjE9c3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfaGFuZGxlcih2b2lkICpjcHVfaW4pXG4tLVxua2VybmVsL3JjdS90cmVlLmMtMzk4Ni0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjM5ODc6dm9pZCByY3VfYmFycmllcih2b2lkKVxua2VybmVsL3JjdS90cmVlLmMtMzk4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTIzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEJhcnJpZXIgSW1wbGVtZW50YXRpb25zKioKClJpZ2h0LCBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYOKAlHRoZXkmIzM5O3JlIGJvdGggY3JpdGljYWwgdG9vbHMsIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBhZ2Fpbi4gTGV0JiMzOTtzIGRpZyBpbnRvIGBzcmN1X2JhcnJpZXJgIHNwZWNpZmljYWxseS4gV2hhdCBhcmUgdGhlIGtleSBjb25zaWRlcmF0aW9ucyBhbmQgZWRnZSBjYXNlcyBpbiBpdHMgaW1wbGVtZW50YXRpb24/IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvciwgZXNwZWNpYWxseSBpbiBjb21wbGV4IGNvbmN1cnJlbnQgc2NlbmFyaW9zLiBBcmUgdGhlcmUgc3VidGxlIGRpZmZlcmVuY2VzIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBkaWZmZXJlbnQgbG9jayBoaWVyYXJjaGllcyBvciBtZW1vcnkgbW9kZWxzPyBJJiMzOTttIGdvaW5nIHRvIHJ1biB0aHJvdWdoIHNvbWUgc2NlbmFyaW9zIGFuZCBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYmVmb3JlIG1vdmluZyBvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGRlc2lnbiBpcyBzb3VuZCBhbmQgdGhhdCBJIGNhbiBqdXN0aWZ5IGl0cyB1c2FnZSBmb3Igd2hhdGV2ZXIgSSYjMzk7bSB3b3JraW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBzcmN1X2JhcnJpZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcmN1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcmN1L3NyY3V0aW55LmM9MzA3PUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0zMDktLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzEwOnZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMxMS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE3OTI9c3RhdGljIHZvaWQgc3JjdV9iYXJyaWVyX29uZV9jcHUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCBzcmN1X2RhdGEgKnNkcClcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTgwOS0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxODEwOnZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4MTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM4NQoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA4NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgUkNVL1NSQ1UgRGVmZXJyZWQgQ2FsbGJhY2tzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgZGVmZXJyZWQgUkNVIGFuZCBTUkNVIGNhbGxiYWNrcy4gSXQmIzM5O3MgZGVhbGluZyB3aXRoIHJlLWVudHJhbnQgY2FsbHMgZnJvbSBOTUkgY29udGV4dHMgYW5kIEJQRiwgd2hpY2ggaXMgY3JpdGljYWwsIHNvIHdlIG5lZWQgYSBnb29kIGZ1enppbmcgc3RyYXRlZ3kuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGVmaW5lIHNvbWUgZm9jdXMgc3ltYm9scy4gSSB0aGluayB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgYXJlOgoKKiAgIGByY3VfYmFycmllcmAKKiAgIGBzcmN1X2JhcnJpZXJgCiogICBgc3JjdV9vZmZsaW5lX2RyYWluYAoqICAgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgCgpXYWl0LCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgaXMgY2FsbGVkIGR1cmluZyBDUFUgb2ZmbGluZS4uLiBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIG90aGVyIGVudHJ5IHBvaW50cyBidXQgaXQgaXMgZGVmaW5pdGVseSBpbnRlcmVzdGluZyB0byBjb25zaWRlci4KClRoZSBwYXRjaCBhbHNvIGhhcyBhIEJQRiBzZWxmdGVzdC4gV2UgcHJvYmFibHkgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmaWNhbGx5IGluY2x1ZGUgYGJwZl90YXNrX3N0b3JhZ2VfZGVsZXRlYCBiZWNhdXNlIHRoYXQgaXMganVzdCB0aGUgbWVjaGFuaXNtIHRvIHRyaWdnZXIgdGhpbmdzLgoKTm93LCBmb3Iga2VybmVsIGNvbmZpZ3MsIGhlcmUmIzM5O3Mgd2hhdCBzZWVtcyBpbXBvcnRhbnQgdG8gZW5hYmxlOgoKKiAgIGBLUFJPQkVTYCAtIEVzc2VudGlhbCBmb3IgdHJpZ2dlcmluZyBkZWZlcnJlZCBjYWxscyBmcm9tIHByb2JlIGNvbnRleHRzLgoqICAgYFRSQUNFUE9JTlRTYCAtIFNpbWlsYXJseSBjcnVjaWFsIGZvciB0cmFjaW5nLgoqICAgYFBFUkZfRVZFTlRTYCAtIFRoaXMgYWxzbyBvcGVucyB1cCB0aGUgb3Bwb3J0dW5pdHkgdG8gcmVhY2ggZGVmZXJyZWQgY2FsbHMgZnJvbSBhbiBOTUkgY29udGV4dC4KKiAgIGBSQ1VfVE9SVFVSRV9URVNUYCAtIE9wdGlvbmFsLCBidXQgYSBnb29kIGFkZGl0aW9uIGZvciBtb3JlIGNvbXByZWhlbnNpdmUgdGVzdGluZyBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHRyaWdnZXIgbW9yZSBjb2RlIHBhdGhzLgoqICAgYEJQRl9TWVNDQUxMYCAtIFNpbmNlIHRoZSBzZWxmdGVzdCB1c2VzIEJQRiwgaXQmIzM5O3MgYSBnb29kIGlkZWEgdG8gZW5hYmxlIGl0IHRvIHRyeSB0byB0cmlnZ2VyIGl0IGZyb20gdGhlIEJQRiBzaWRlLCBhbHRob3VnaCBub3QgZXNzZW50aWFsLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFJDVV9ERUZFUmAgaXMgZW5hYmxlZC4gSXQgbG9va3MgbGlrZSBpdCBpcyBzZWxlY3RlZCBieSBgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNgLiBTbywgc2luY2Ugd2UgYXJlIGVuYWJsaW5nIGBLUFJPQkVTYCBhbmQgYFRSQUNFUE9JTlRTYCwgYFJDVV9ERUZFUmAgc2hvdWxkIGFscmVhZHkgYmUgY292ZXJlZC4KCkxldCBtZSB0aGluayBiYWNrIG9uIHRoaXMuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIFJDVS9TUkNVIGxvZ2ljOiBgY2FsbF9yY3VgLCBgY2FsbF9zcmN1YCwgYW5kIHRoZSBiYXJyaWVyIGZ1bmN0aW9ucywgYnV0IHNwZWNpZmljYWxseSB0aGUgZGVmZXJyYWwgcGFydC4gVGhpcyBkZWZlcnJhbCBpcyBoaXQgcHJpbWFyaWx5IGZyb20gTk1JIGNvbnRleHRzIGFuZCB0aHJvdWdoIEJQRi4KCkhlcmUmIzM5O3MgYSByZWZpbmVkIGxpc3Qgb2YgdGhpbmdzIHRvIGNvbnNpZGVyIGZvY3VzaW5nIG9uOgoKRm9jdXMgc3ltYm9sczoKCiogICBgcmN1X2JhcnJpZXJgCiogICBgc3JjdV9iYXJyaWVyYAoqICAgYHNyY3Vfb2ZmbGluZV9kcmFpbmAKKiAgIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYAoKQ29uZmlnczoKCiogICBgS1BST0JFU2AKKiAgIGBUUkFDRVBPSU5UU2AKKiAgIGBQRVJGX0VWRU5UU2AKKiAgIGBCUEZfU1lTQ0FMTGAKCk9rYXksIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIHJlYWNoYWJpbGl0eS4gYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGlzIGNhbGxlZCBieSBDUFUgaG90cGx1ZyB3aGljaCBpcyBnb29kISBBbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgaXMgYWxzbyBjYWxsZWQgYnkgaXQuIGByY3VfYmFycmllcmAgYW5kIGBzcmN1X2JhcnJpZXJgIGFyZSB2ZXJ5IHdpZGVseSB1c2VkLgoKVGhlcmUgaXMgYHNyY3VfZGVmZXJfZHJhaW5gIGluIHRoZSBgc3JjdXRpbnkuY2AgY29kZSwgYnV0IHRoYXQgaXMgYWxzbyBzdGF0aWMgaW4gdGhlIGBzcmN1dHJlZS5jYCBjb2RlLiBJdCBtaWdodCBub3QgYmUgYXZhaWxhYmxlIHdpdGhvdXQgYENPTkZJR19USU5ZX1NSQ1VgLCBzbyBJJiMzOTtsbCBleGNsdWRlIGl0LgoKV2FpdC4gQW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gYGNhbGxfcmN1YCBhbmQgYGNhbGxfc3JjdWAgYXJlIHRoZSBtYWluIGZ1bmN0aW9ucyBtb2RpZmllZC4gSSBrbm93IHRoZXkmIzM5O3JlIGhvdC1wYXRoLCBidXQgdGhlIGRlZmVycmFsIGlzIF9pbnNpZGVfIHRoZW0uIERvIEkgbmVlZCB0byBpbmNsdWRlIHRoZW0/IE5vLCB0aGF0JiMzOTtzIG5vdCBuZWVkZWQuIFRoZSBmdXp6ZXIgd2lsbCBoaXQgdGhlbSBhbnl3YXkgYW5kIGl0IGlzIGxpa2VseSB0aGUgZGVmZXJyYWwgY29kZSB3aWxsIGJlIHRyaWdnZXJlZC4gRm9jdXNpbmcgb24gdGhlbSBtaWdodCBzaW1wbHkgaGF2ZSB0aGUgZnV6emVyIHNwZW5kIGFsbCBpdHMgdGltZSBvbiBnZW5lcmljIGNhbGxzLCB3aGVuIHdlIHdhbnQgdG8gdGVzdCB0aGUgZGVmZXJyYWwgbG9naWMuIEFuZCB0aGUgZGVmZXJyYWwgcGFydCBvbmx5IGhhcHBlbnMgd2hlbiBgc2hvdWxkX3JjdV9kZWZlcigpYCBpcyB0cnVlLCB3aGljaCBpcyB3aGVuIGBpcnFzX2Rpc2FibGVkKClgLiBBbHNvLCB0aGUgQlBGIHNlbGZ0ZXN0IHRyaWdnZXJzIGl0IGJ5IGF0dGFjaGluZyBhIEJQRiBwcm9ncmFtIHRvIGByY3Vfc2VnY2JsaXN0X2VucXVldWVgIGFuZCBjYWxsaW5nIGBicGZfdGFza19zdG9yYWdlX2RlbGV0ZWAgZnJvbSBpdC4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50IHdpdGggdGhpcy4gSSB3aWxsIHNldCB0aGUgZnV6emluZyB0YXJnZXRzIGJhc2VkIG9uIHRoaXMgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1BST0JFUyYjMzQ7LAogICAgJiMzNDtUUkFDRVBPSU5UUyYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3NyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X29mZmxpbmVfZHJhaW4mIzM0OywKICAgICYjMzQ7cmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGRlZmVycmVkIFJDVSBhbmQgU1JDVSBjYWxsYmFja3MgdG8gc2FmZWx5IGhhbmRsZSByZS1lbnRyYW50IGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBpbnZvY2F0aW9ucywgc3VjaCBhcyB0aG9zZSBvcmlnaW5hdGluZyBmcm9tIE5NSSBjb250ZXh0cyBvciBCUEYgcHJvZ3JhbXMuIEl0IG1vZGlmaWVzIGNvcmUgUkNVL1NSQ1Ugc3luY2hyb25pemF0aW9uIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyBjYWxsYmFjayBkcmFpbmluZyBtZWNoYW5pc21zLiBUaGlzIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLUFJPQkVTJiMzNDssCiAgICAmIzM0O1RSQUNFUE9JTlRTJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3NyY3Vfb2ZmbGluZV9kcmFpbiYjMzQ7LAogICAgJiMzNDtyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZGVmZXJyZWQgUkNVIGFuZCBTUkNVIGNhbGxiYWNrcyB0byBzYWZlbHkgaGFuZGxlIHJlLWVudHJhbnQgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIGludm9jYXRpb25zLCBzdWNoIGFzIHRob3NlIG9yaWdpbmF0aW5nIGZyb20gTk1JIGNvbnRleHRzIG9yIEJQRiBwcm9ncmFtcy4gSXQgbW9kaWZpZXMgY29yZSBSQ1UvU1JDVSBzeW5jaHJvbml6YXRpb24gbG9naWMgYW5kIGludHJvZHVjZXMgbmV3IGNhbGxiYWNrIGRyYWluaW5nIG1lY2hhbmlzbXMuIFRoaXMgaXMgaGlnaGx5IGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1Nzo0Ny4wMzY3OTA5NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njg2MzIxNjc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLUFJPQkVTXCIsXG4gICAgXCJUUkFDRVBPSU5UU1wiLFxuICAgIFwiUEVSRl9FVkVOVFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmN1X2JhcnJpZXJcIixcbiAgICBcInNyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9vZmZsaW5lX2RyYWluXCIsXG4gICAgXCJyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBkZWZlcnJlZCBSQ1UgYW5kIFNSQ1UgY2FsbGJhY2tzIHRvIHNhZmVseSBoYW5kbGUgcmUtZW50cmFudCBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgaW52b2NhdGlvbnMsIHN1Y2ggYXMgdGhvc2Ugb3JpZ2luYXRpbmcgZnJvbSBOTUkgY29udGV4dHMgb3IgQlBGIHByb2dyYW1zLiBJdCBtb2RpZmllcyBjb3JlIFJDVS9TUkNVIHN5bmNocm9uaXphdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBuZXcgY2FsbGJhY2sgZHJhaW5pbmcgbWVjaGFuaXNtcy4gVGhpcyBpcyBoaWdobHkgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTc6NDcuMDM2Nzk4MjE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg5NDQ3MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjFiYmU2ZjliZGEzMzg3OTlkMmVmYWIwOGMzNWM0ZWU3YTZkMDYyM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjU3OjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxcbmluZGV4IGZiY2YxM2JjMTJkMTUuLjQ3Mjc1ZDE4Mjk2NmMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2RlZmluZSBfTElOVVhfU1JDVV9USU5ZX0hcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YWl0LmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xcbkBAIC0yNiw2ICsyNyw4IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7XFxuIFxcdHN0cnVjdCByY3VfaGVhZCAqKnNyY3VfY2JfdGFpbDtcXHQvKiBQZW5kaW5nIGNhbGxiYWNrczogVGFpbC4gKi9cXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IHNyY3Vfd29yaztcXHQvKiBGb3IgZHJpdmluZyBncmFjZSBwZXJpb2RzLiAqL1xcbiBcXHRzdHJ1Y3QgaXJxX3dvcmsgc3JjdV9pcnFfd29yaztcXHQvKiBEZWZlciBzY2hlZHVsZV93b3JrKCkgdG8gaXJxIHdvcmsuICovXFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcXHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXFxuK1xcdHN0cnVjdCBpcnFfd29yayBkZWZlcl9pdztcXHRcXHQvKiBSZWdpc3RlcnMgZGVmZXJfY2JzIGxhdGVyLiAqL1xcbiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0NcXG4gXFx0c3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7XFxuICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi9cXG5AQCAtMzMsNiArMzYsNyBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xcbiBcXG4gdm9pZCBzcmN1X2RyaXZlX2dwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3ApO1xcbiB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcXG4rdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspO1xcbiBcXG4gI2RlZmluZSBfX1NSQ1VfU1RSVUNUX0lOSVQobmFtZSwgX19pZ25vcmVkLCBfX19pZ25vcmVkLCBfX19faWdub3JlZClcXHRcXFxcXFxuIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTQwLDYgKzQ0LDggQEAgdm9pZCBzcmN1X3RpbnlfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XFxuIFxcdC5zcmN1X2NiX3RhaWwgPSBcXHUwMDI2bmFtZS5zcmN1X2NiX2hlYWQsXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQuc3JjdV93b3JrID0gX19XT1JLX0lOSVRJQUxJWkVSKG5hbWUuc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKSxcXHRcXFxcXFxuIFxcdC5zcmN1X2lycV93b3JrID0geyAuZnVuYyA9IHNyY3VfdGlueV9pcnFfd29yayB9LFxcdFxcdFxcXFxcXG4rXFx0LmRlZmVyX2NicyA9IExMSVNUX0hFQURfSU5JVChuYW1lLmRlZmVyX2NicyksXFx0XFx0XFx0XFxcXFxcbitcXHQuZGVmZXJfaXcgPSB7IC5mdW5jID0gc3JjdV9kZWZlcl9kcmFpbiB9LFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0X19TUkNVX0RFUF9NQVBfSU5JVChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfVxcbiBcXG5AQCAtMTMxLDEwICsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIFxcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4te1xcbi1cXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XFxuLX1cXG4rdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkgeyB9XFxuICNkZWZpbmUgc3JjdV9jaGVja19yZWFkX2ZsYXZvcihzc3AsIHJlYWRfZmxhdm9yKSBkbyB7IH0gd2hpbGUgKDApXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxcbmluZGV4IDc1ZTU0ZTRmOTYzZmEuLjFjZTc1OWZiNzA5NDggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXFxuQEAgLTEzLDYgKzEzLDggQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3Vfbm9kZV90cmVlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBzcmN1X25vZGU7XFxuIHN0cnVjdCBzcmN1X3N0cnVjdDtcXG5AQCAtNDEsNiArNDMsOCBAQCBzdHJ1Y3Qgc3JjdV9kYXRhIHtcXG4gXFx0Ym9vbCBzcmN1X2NibGlzdF9pbnZva2luZztcXHRcXHQvKiBJbnZva2luZyB0aGVzZSBDQnM/ICovXFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0IGRlbGF5X3dvcms7XFx0XFx0LyogRGVsYXkgZm9yIENCIGludm9raW5nICovXFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcdFxcdC8qIENvbnRleHQgZm9yIENCIGludm9raW5nLiAqL1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9jYnM7XFx0XFx0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBkZWZlcl9saW5rO1xcdFxcdC8qIExpbmtzIG9udG8gdGhlIHBlci1DUFUgZGVmZXJyYWwgZHJhaW4gbGlzdCAqL1xcbiBcXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7XFx0LyogRm9yIHNyY3VfYmFycmllcigpIHVzZS4gKi9cXG4gXFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDtcXHRcXHQvKiBGb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkgdXNlLiAqL1xcbiBcXHRpbnQgc3JjdV9lY19zdGF0ZTtcXHRcXHRcXHQvKiAgU3RhdGUgZm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpLiAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L0tjb25maWcgYi9rZXJuZWwvcmN1L0tjb25maWdcXG5pbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvS2NvbmZpZ1xcbisrKyBiL2tlcm5lbC9yY3UvS2NvbmZpZ1xcbkBAIC0xNzUsNiArMTc1LDEyIEBAIGNvbmZpZyBSQ1VfU1RBTExfQ09NTU9OXFxuIGNvbmZpZyBSQ1VfTkVFRF9TRUdDQkxJU1RcXG4gXFx0ZGVmX2Jvb2wgKCBUUkVFX1JDVSB8fCBUUkVFX1NSQ1UgfHwgVEFTS1NfUkNVX0dFTkVSSUMgKVxcbiBcXG4rIyBUaGUgZGVmZXJyYWwgKGFuZCB0aGUgSVJRX1dPUksgaXQgdXNlcykgaXMgb25seSBuZWVkZWQgd2hlcmUgY2FsbF9yY3UoKSAvXFxuKyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuXFxuK2NvbmZpZyBSQ1VfREVGRVJcXG4rXFx0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcXG4rXFx0c2VsZWN0IElSUV9XT1JLXFxuK1xcbiBjb25maWcgUkNVX0ZBTk9VVFxcbiBcXHRpbnQgXFxcIlRyZWUtYmFzZWQgaGllcmFyY2hpY2FsIFJDVSBmYW5vdXQgdmFsdWVcXFwiXFxuIFxcdHJhbmdlIDIgNjQgaWYgNjRCSVRcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmhcXG5pbmRleCAzOWE5ZjZmYTlhN2IyLi5jYTA1ZDQ4NzczYzc5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvcmN1LmhcXG4rKysgYi9rZXJuZWwvcmN1L3JjdS5oXFxuQEAgLTU3Miw2ICs1NzIsMjMgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tzX2NibGlzdF9pbml0X2dlbmVyaWModm9pZCkgeyB9XFxuICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9JTklUXFx0MVxcbiAjZGVmaW5lIFJDVV9TQ0hFRFVMRVJfUlVOTklOR1xcdDJcXG4gXFxuKy8qXFxuKyAqIERlZmVyIGEgY2FsbF9yY3UoKS9jYWxsX3NyY3UoKSBjYWxsYmFjayByYXRoZXIgdGhhbiBlbnF1ZXVlIGl0IG5vdz8gIERlZmVyXFxuKyAqIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzaW5jZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIG1heSBiZSBpblxcbisgKiBmbGlnaHQgb24gdGhpcyBDUFUuICBOb3Qgd2hpbGUgdGhlIHNjaGVkdWxlciBpcyBkb3duLCB0aG91Z2g6IGlycV93b3JrIGlzXFxuKyAqIHVudXNhYmxlIGJlZm9yZSBpbml0X0lSUSgpLCB5ZXQgcmN1X2luaXQoKSBhbHJlYWR5IGNhbGxzIGNhbGxfcmN1KCkuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxcbit7XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIGlycXNfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFO1xcbit9XFxuK1xcbisvKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUncyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi9cXG4rdm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSk7XFxuK1xcbiBlbnVtIHJjdXRvcnR1cmVfdHlwZSB7XFxuIFxcdFJDVV9GTEFWT1IsXFxuIFxcdFJDVV9UQVNLU19GTEFWT1IsXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jIGIva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcXG5pbmRleCA3OTQ5MzdlMTNlN2MzLi45ZWQxN2I2NDM2MjBhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXFxuKysrIGIva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcXG5AQCAtNDgsNiArNDgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGljay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25taS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInJjdS5oXFxcIlxcbiBcXG5AQCAtMTE1LDYgKzExNiw3IEBAIHRvcnR1cmVfcGFyYW0oaW50LCBsZWFrcG9pbnRlciwgMCwgXFxcIkxlYWsgcG9pbnRlciBkZXJlZmVyZW5jZXMgZnJvbSByZWFkZXJzXFxcIik7XFxuIHRvcnR1cmVfcGFyYW0oaW50LCBuX2JhcnJpZXJfY2JzLCAwLCBcXFwiIyBvZiBjYWxsYmFja3Mva3RocmVhZHMgZm9yIGJhcnJpZXIgdGVzdGluZ1xcXCIpO1xcbiB0b3J0dXJlX3BhcmFtKGludCwgbl91cF9kb3duLCAzMiwgXFxcIiMgb2YgY29uY3VycmVudCB1cC9kb3duIGhydGltZXItYmFzZWQgUkNVIHJlYWRlcnNcXFwiKTtcXG4gdG9ydHVyZV9wYXJhbShpbnQsIG5mYWtld3JpdGVycywgNCwgXFxcIk51bWJlciBvZiBSQ1UgZmFrZSB3cml0ZXIgdGhyZWFkc1xcXCIpO1xcbit0b3J0dXJlX3BhcmFtKGJvb2wsIG5taV9jYWxscywgdHJ1ZSwgXFxcIkV4ZXJjaXNlIC1cXHUwMDNlY2FsbCgpIGZyb20gTk1JIG9uIG5taV9jYXBhYmxlIGZsYXZvcnNcXFwiKTtcXG4gdG9ydHVyZV9wYXJhbShpbnQsIG5yZWFkZXJzLCAtMSwgXFxcIk51bWJlciBvZiBSQ1UgcmVhZGVyIHRocmVhZHNcXFwiKTtcXG4gdG9ydHVyZV9wYXJhbShib29sLCBud3JpdGVycywgMSwgXFxcIk51bWJlciBvZiBSQ1Ugd3JpdGVyIHRocmVhZHMgKDAgb3IgMSlcXFwiKTtcXG4gdG9ydHVyZV9wYXJhbShpbnQsIG9iamVjdF9kZWJ1ZywgMCwgXFxcIkVuYWJsZSBkZWJ1Zy1vYmplY3QgZG91YmxlIGNhbGxfcmN1KCkgdGVzdGluZ1xcXCIpO1xcbkBAIC0yMTYsNiArMjE4LDggQEAgc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdF9mYWlsdXJlO1xcbiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0cztcXG4gc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV90aW1lcnM7XFxuIHN0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfaXJxcztcXG4rc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9ubWlfY2FsbDtcXG4rc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9ubWlfY2I7XFxuIHN0YXRpYyBsb25nIG5fYmFycmllcl9hdHRlbXB0cztcXG4gc3RhdGljIGxvbmcgbl9iYXJyaWVyX3N1Y2Nlc3NlczsgLyogZGlkIHJjdV9iYXJyaWVyIHRlc3Qgc3VjY2VlZD8gKi9cXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbl9yZWFkX2V4aXRzO1xcbkBAIC00MzMsNiArNDM3LDcgQEAgc3RydWN0IHJjdV90b3J0dXJlX29wcyB7XFxuIFxcdGJvb2wgKCppc190YXNrX3JjdV9ib29zdGVkKSh2b2lkKTtcXG4gXFx0bG9uZyBjYmZsb29kX21heDtcXG4gXFx0aW50IGlycV9jYXBhYmxlO1xcbitcXHRpbnQgbm1pX2NhcGFibGU7XFxuIFxcdGludCBjYW5fYm9vc3Q7XFxuIFxcdGludCBleHRlbmRhYmxlcztcXG4gXFx0aW50IHNsb3dfZ3BzO1xcbkBAIC02NDgsNiArNjUzLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgcmN1X29wcyA9IHtcXG4gXFx0LmV4dGVuZGFibGVzXFx0XFx0PSBSQ1VUT1JUVVJFX01BWF9FWFRFTkQsXFxuIFxcdC5kZWJ1Z19vYmplY3RzXFx0XFx0PSAxLFxcbiBcXHQuc3RhcnRfcG9sbF9pcnFzb2ZmXFx0PSAxLFxcbitcXHQubm1pX2NhcGFibGVcXHRcXHQ9IDEsXFxuIFxcdC5uYW1lXFx0XFx0XFx0PSBcXFwicmN1XFxcIlxcbiB9O1xcbiBcXG5AQCAtOTQyLDYgKzk0OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHNyY3Vfb3BzID0ge1xcbiBcXHQuZGVidWdfb2JqZWN0c1xcdD0gMSxcXG4gXFx0LmhhdmVfdXBfZG93blxcdD0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKVxcbiBcXHRcXHRcXHRcXHQ/IDAgOiBTUkNVX1JFQURfRkxBVk9SX05PUk1BTCB8IFNSQ1VfUkVBRF9GTEFWT1JfRkFTVF9VUERPV04sXFxuK1xcdC5ubWlfY2FwYWJsZVxcdD0gMSxcXG4gXFx0Lm5hbWVcXHRcXHQ9IFxcXCJzcmN1XFxcIlxcbiB9O1xcbiBcXG5AQCAtMTAwNSw2ICsxMDEyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdWRfb3BzID0ge1xcbiBcXHQuZGVidWdfb2JqZWN0c1xcdD0gMSxcXG4gXFx0LmhhdmVfdXBfZG93blxcdD0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKVxcbiBcXHRcXHRcXHRcXHQ/IDAgOiBTUkNVX1JFQURfRkxBVk9SX05PUk1BTCB8IFNSQ1VfUkVBRF9GTEFWT1JfRkFTVF9VUERPV04sXFxuK1xcdC5ubWlfY2FwYWJsZVxcdD0gMSxcXG4gXFx0Lm5hbWVcXHRcXHQ9IFxcXCJzcmN1ZFxcXCJcXG4gfTtcXG4gXFxuQEAgLTEyNjksNiArMTI3Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHRhc2tzX3RyYWNpbmdfb3BzID0ge1xcbiBcXHQuY2JmbG9vZF9tYXhcXHQ9IDUwMDAwLFxcbiBcXHQuaXJxX2NhcGFibGVcXHQ9IDEsXFxuIFxcdC5zbG93X2dwc1xcdD0gMSxcXG4rXFx0Lm5taV9jYXBhYmxlXFx0PSAxLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcInRhc2tzLXRyYWNpbmdcXFwiXFxuIH07XFxuIFxcbkBAIC0yNjU5LDEyICsyNjY4LDk0IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxcbiBcXG4gc3RhdGljIERFRklORV9UT1JUVVJFX1JBTkRPTV9QRVJDUFUocmN1X3RvcnR1cmVfdGltZXJfcmFuZCk7XFxuIFxcbisvKlxcbisgKiBFeGVyY2lzZSAtXFx1MDAzZWNhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgc2V0IC1cXHUwMDNlbm1pX2NhcGFibGUuICBBXFxuKyAqIHBlci1DUFUgaGFyZHdhcmUgcGVyZiBjb3VudGVyIG92ZXJmbG93cyBpbnRvIGFuIE5NSSwgYW5kIGl0cyBoYW5kbGVyIHN1Ym1pdHNcXG4rICogb25lIHByZWFsbG9jYXRlZCBjYWxsYmFjayB2aWEgLVxcdTAwM2VjYWxsKCkuICBPbmUgY2FsbGJhY2sgaXMgaW4gZmxpZ2h0IGF0IGEgdGltZVxcbisgKiAoZ3VhcmRlZCBieSBhbiBhdG9taWMpIHRvIGF2b2lkIGFsbG9jYXRpbmcgaW4gTk1JLiAgVGhpcyBtaXJyb3JzIGhvdyBhIEJQRlxcbisgKiBwcm9ncmFtIHJlYWNoZXMgLVxcdTAwM2VjYWxsKCkgZnJvbSBOTUkuXFxuKyAqL1xcbisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXFxuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0ge1xcbitcXHQudHlwZVxcdFxcdD0gUEVSRl9UWVBFX0hBUkRXQVJFLFxcbitcXHQuY29uZmlnXFx0XFx0PSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXFxuK1xcdC5zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXFxuK1xcdC5waW5uZWRcXHRcXHQ9IDEsXFxuK1xcdC5kaXNhYmxlZFxcdD0gMSxcXG4rXFx0LmZyZXFcXHRcXHQ9IDEsXFxuK1xcdC5zYW1wbGVfZnJlcVxcdD0gMTAwMCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudCAqKnJjdV90b3J0dXJlX25taV9ldmVudHM7XFxuK3N0YXRpYyBzdHJ1Y3QgcmN1X2hlYWQgcmN1X3RvcnR1cmVfbm1pX3JoO1xcbitzdGF0aWMgYXRvbWljX3QgcmN1X3RvcnR1cmVfbm1pX3JoX2ludXNlO1xcbitcXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NiKHN0cnVjdCByY3VfaGVhZCAqcmhwKVxcbit7XFxuK1xcdGF0b21pY19sb25nX2luYyhcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbit7XFxuK1xcdGlmICghaW5fbm1pKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKGN1cl9vcHMtXFx1MDAzZWNhbGwgXFx1MDAyNlxcdTAwMjYgIWF0b21pY194Y2hnKFxcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDEpKSB7XFxuK1xcdFxcdGN1cl9vcHMtXFx1MDAzZWNhbGwoXFx1MDAyNnJjdV90b3J0dXJlX25taV9yaCwgcmN1X3RvcnR1cmVfbm1pX2NiKTtcXG4rXFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGlmICghbm1pX2NhbGxzIHx8ICFjdXJfb3BzLVxcdTAwM2VubWlfY2FwYWJsZSB8fCAhY3VyX29wcy1cXHUwMDNlY2FsbClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0ga2NhbGxvYyhucl9jcHVfaWRzLCBzaXplb2YoKnJjdV90b3J0dXJlX25taV9ldmVudHMpLFxcbitcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xcbitcXHRcXHRldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKFxcdTAwMjZyY3VfdG9ydHVyZV9ubWlfYXR0ciwgY3B1LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgTlVMTCwgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93LCBOVUxMKTtcXG4rXFx0XFx0aWYgKElTX0VSUihldmVudCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV0gPSBldmVudDtcXG4rXFx0XFx0cGVyZl9ldmVudF9lbmFibGUoZXZlbnQpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpXFxuK3tcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuK1xcdFxcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cGVyZl9ldmVudF9kaXNhYmxlKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7XFxuK1xcdFxcdHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwocmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKTtcXG4rXFx0fVxcbitcXHRrZnJlZShyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKTtcXG4rXFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IE5VTEw7XFxuK31cXG4rI2Vsc2UgLyogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqL1xcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKSB7IH1cXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9XFxuKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXFxuK1xcbiAvKlxcbiAgKiBSQ1UgdG9ydHVyZSByZWFkZXIgZnJvbSB0aW1lciBoYW5kbGVyLiAgRGVyZWZlcmVuY2VzIHJjdV90b3J0dXJlX2N1cnJlbnQsXFxuICAqIGluY3JlbWVudGluZyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBwaXBlbGluZSBhcnJheS4gIFRoZVxcbiAgKiBjb3VudGVyIGluIHRoZSBlbGVtZW50IHNob3VsZCBuZXZlciBiZSBncmVhdGVyIHRoYW4gMSwgb3RoZXJ3aXNlLCB0aGVcXG4gICogUkNVIGltcGxlbWVudGF0aW9uIGlzIGJyb2tlbi5cXG4gICovXFxuK1xcbiBzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdW51c2VkKVxcbiB7XFxuIFxcdFdBUk5fT05fT05DRSghaW5fc2VydmluZ19zb2Z0aXJxKCkpO1xcbkBAIC0zMDQ3LDYgKzMxMzgsOSBAQCByY3VfdG9ydHVyZV9zdGF0c19wcmludCh2b2lkKVxcbiBcXHRcXHRkYXRhX3JhY2Uobl9iYXJyaWVyX2F0dGVtcHRzKSxcXG4gXFx0XFx0ZGF0YV9yYWNlKG5fcmN1X3RvcnR1cmVfYmFycmllcl9lcnJvcikpO1xcbiBcXHRwcl9jb250KFxcXCJyZWFkLWV4aXRzOiAlbGQgXFxcIiwgZGF0YV9yYWNlKG5fcmVhZF9leGl0cykpOyAvLyBTdGF0aXN0aWMuXFxuK1xcdHByX2NvbnQoXFxcIm5taS1jYWxsczogJWxkIG5taS1jYnM6ICVsZCBcXFwiLFxcbitcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKSxcXG4rXFx0XFx0YXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpKTtcXG4gXFx0cHJfY29udChcXFwibm9jYi10b2dnbGVzOiAlbGQ6JWxkIFxcXCIsXFxuIFxcdFxcdGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fbm9jYl9vZmZsb2FkKSwgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9ub2NiX2Rlb2ZmbG9hZCkpO1xcbiBcXHRwcl9jb250KFxcXCJncHdyYXBzOiAlbGRcXFxcblxcXCIsIG5fZ3B3cmFwcyk7XFxuQEAgLTQzMjUsNiArNDQxOSw4IEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcXG4gXFx0XFx0a2ZyZWUocmVhZGVyX3Rhc2tzKTtcXG4gXFx0XFx0cmVhZGVyX3Rhc2tzID0gTlVMTDtcXG4gXFx0fVxcbitcXHQvKiBEaXNhYmxlIHRoZSBwZXJmIGNvdW50ZXJzIChhbmQgdGh1cyB0aGUgTk1JIC1cXHUwMDNlY2FsbCgpIGZpcmluZykgbm93LiAqL1xcbitcXHRyY3VfdG9ydHVyZV9ubWlfY2xlYW51cCgpO1xcbiBcXHRrZnJlZShyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGspO1xcbiBcXHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGsgPSBOVUxMO1xcbiBcXG5AQCAtNDM1NCw2ICs0NDUwLDIwIEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcXG4gXFx0XFx0cHJfaW5mbyhcXFwiJXM6IEludm9raW5nICVwUygpLlxcXFxuXFxcIiwgX19mdW5jX18sIGN1cl9vcHMtXFx1MDAzZWNiX2JhcnJpZXIpO1xcbiBcXHRcXHRjdXJfb3BzLVxcdTAwM2VjYl9iYXJyaWVyKCk7XFxuIFxcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGNiX2JhcnJpZXIoKSBhYm92ZSBkcmFpbmVkIGV2ZXJ5IGRlZmVycmVkIE5NSSAtXFx1MDAzZWNhbGwoKSBjYWxsYmFjaywgc28gdGhlXFxuK1xcdCAqIGNvdW50IGlzc3VlZCBmcm9tIE5NSSBtdXN0IGVxdWFsIHRoZSBjb3VudCBpbnZva2VkOyBhIG1pc21hdGNoIG1lYW5zIGFcXG4rXFx0ICogY2FsbGJhY2sgd2FzIGxvc3QuXFxuK1xcdCAqL1xcbitcXHRpZiAoYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCkgIT1cXG4rXFx0ICAgIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSkge1xcbitcXHRcXHRwcl9hbGVydChcXFwiJXM6IE5NSSAtXFx1MDAzZWNhbGwoKSBsb3N0IGEgY2FsbGJhY2s6IGlzc3VlZCAlbGQgaW52b2tlZCAlbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBfX2Z1bmNfXywgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksXFxuK1xcdFxcdFxcdCBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpO1xcbitcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZuX3JjdV90b3J0dXJlX2Vycm9yKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGN1cl9vcHMtXFx1MDAzZWNsZWFudXAgIT0gTlVMTClcXG4gXFx0XFx0Y3VyX29wcy1cXHUwMDNlY2xlYW51cCgpO1xcbiBcXG5AQCAtNDc4Niw2ICs0ODk2LDggQEAgcmN1X3RvcnR1cmVfaW5pdCh2b2lkKVxcbiBcXHRcXHRmaXJzdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gdW53aW5kO1xcbiBcXHR9XFxuK1xcdC8qIEFybSB0aGUgcGVyLUNQVSBwZXJmIGNvdW50ZXJzIHRoYXQgZHJpdmUgLVxcdTAwM2VjYWxsKCkgZnJvbSBOTUkuICovXFxuK1xcdHJjdV90b3J0dXJlX25taV9pbml0KCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucmVhbHJlYWRlcnM7IGkrKykge1xcbiBcXHRcXHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGtbaV0ucnRjX2Noa3JkciA9IC0xO1xcbiBcXHRcXHRmaXJzdGVyciA9IHRvcnR1cmVfY3JlYXRlX2t0aHJlYWQocmN1X3RvcnR1cmVfcmVhZGVyLCAodm9pZCAqKWksXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbmluZGV4IDU1OGJhOGQzMTZkYjYuLmEwYTkxZjdmYzI1OGEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jXFxuKysrIGIva2VybmVsL3JjdS9zcmN1dGlueS5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWVtcHQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFxcdTAwM2VcXG5AQCAtNDMsNiArNDQsOCBAQCBzdGF0aWMgaW50IGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbiBcXHRJTklUX1dPUksoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV93b3JrLmVudHJ5KTtcXG4gXFx0aW5pdF9pcnFfd29yayhcXHUwMDI2c3NwLVxcdTAwM2VzcmN1X2lycV93b3JrLCBzcmN1X3RpbnlfaXJxX3dvcmspO1xcbitcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfY2JzKTtcXG4rXFx0aW5pdF9pcnFfd29yayhcXHUwMDI2c3NwLVxcdTAwM2VkZWZlcl9pdywgc3JjdV9kZWZlcl9kcmFpbik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC04Niw2ICs4OSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7XFxuIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4ge1xcbiBcXHRXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSk7XFxuK1xcdC8qIFJlLWlzc3VlIGFueSBkZWZlcnJlZCBjYWxsYmFja3Mgc28gLVxcdTAwM2VzcmN1X2NiX2hlYWQgc2VlcyB0aGVtIGJlbG93LiAqL1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2c3NwLVxcdTAwM2VkZWZlcl9pdyk7XFxuIFxcdGlycV93b3JrX3N5bmMoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9pcnFfd29yayk7XFxuIFxcdGZsdXNoX3dvcmsoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV93b3JrKTtcXG4gXFx0V0FSTl9PTihzc3AtXFx1MDAzZXNyY3VfZ3BfcnVubmluZyk7XFxuQEAgLTIxMywxMSArMjE5LDExIEBAIHN0YXRpYyB2b2lkIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBFbnF1ZXVlIGFuIFNSQ1UgY2FsbGJhY2sgb24gdGhlIHNwZWNpZmllZCBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUsXFxuLSAqIGluaXRpYXRpbmcgZ3JhY2UtcGVyaW9kIHByb2Nlc3NpbmcgaWYgaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy5cXG4rICogRW5xdWV1ZSBAcmhwIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgc3JjdV9kZWZlcl9kcmFpbigpIHRvXFxuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXFxuICAqL1xcbi12b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuLVxcdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxcbitzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbitcXHRcXHRcXHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG5AQCAtMjMxLDYgKzIzNyw0NiBAQCB2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuIFxcdHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCk7XFxuIFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuIH1cXG4rXFxuKy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXFxuK3N0YXRpYyBib29sIHNyY3VfZGVmZXJfZHJhaW5pbmc7XFxuK1xcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG4re1xcbitcXHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3Vfc3RydWN0LCBkZWZlcl9pdyk7XFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlLCAqbmV4dDtcXG4rXFxuK1xcdC8qIENhbGxiYWNrcyBhcmUgdW5vcmRlcmVkLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy4gKi9cXG4rXFx0c3JjdV9kZWZlcl9kcmFpbmluZyA9IHRydWU7XFxuK1xcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2c3NwLVxcdTAwM2VkZWZlcl9jYnMpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqcmhwID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7XFxuK1xcbitcXHRcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cXHUwMDNlZnVuYyk7XFxuK1xcdH1cXG4rXFx0c3JjdV9kZWZlcl9kcmFpbmluZyA9IGZhbHNlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZGVmZXJfZHJhaW4pO1xcbitcXG4rdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbitcXHQgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XFxuK1xcdFxcdC8qIEEgcmUtZW50cmFudCBjYWxsX3NyY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0LiAqL1xcbitcXHRcXHRpZiAoc3JjdV9kZWZlcl9kcmFpbmluZyBcXHUwMDI2XFx1MDAyNiAhaW5fbm1pKCkpIHtcXG4rXFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJjYWxsX3NyY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRyaHAtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbitcXHRcXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfY2JzKSlcXG4rXFx0XFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfaXcpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSk7XFxuK1xcbitcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfc3JjdSk7XFxuIFxcbiAvKlxcbkBAIC0yNjAsNiArMzA2LDE1IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcXG4gXFxuKy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBmb3IgYWxsIGluLWZsaWdodCBvbmVzLiAqL1xcbit2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4re1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2c3NwLVxcdTAwM2VkZWZlcl9pdyk7XFxuK1xcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2JhcnJpZXIpO1xcbitcXG4gLypcXG4gICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llXFxuICAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcXG5pbmRleCAzMDQxMTI2NzRlOGEyLi4yNjY5NTk0YTY0MDJmIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xcbkBAIC0yMCw2ICsyMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJjcHUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWVtcHQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NtcC5oXFx1MDAzZVxcbkBAIC03OSw2ICs4MCw0NyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3NyY3Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gc3RhdGljIHZvaWQgc3JjdV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspO1xcbiBzdGF0aWMgdm9pZCBzcmN1X2RlbGF5X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4gXFxuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XFxuK1xcbisvKlxcbisgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLCBzaGFyZWQgYnkgZXZlcnkgc3JjdV9zdHJ1Y3QuICBBIGRlZmVycmVkXFxuKyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJ3MgLVxcdTAwM2VkZWZlcl9jYnM7IHRoYXQgc3JjdV9kYXRhIGlzIGNoYWluZWRcXG4rICogdmlhIC1cXHUwMDNlZGVmZXJfbGluayBvbnRvIC1cXHUwMDNlbGlzdCwgd2hpY2ggdGhlIGlycV93b3JrIHdhbGtzLlxcbisgKi9cXG4rc3RydWN0IHNyY3VfZGVmZXIge1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZFxcdGxpc3Q7XFxuK1xcdHN0cnVjdCBpcnFfd29ya1xcdFxcdGl3O1xcbitcXHRyYXdfc3BpbmxvY2tfdFxcdFxcdGxvY2s7XFxuK307XFxuK1xcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNyY3VfZGVmZXIsIHNyY3VfZGVmZXIpID0ge1xcbitcXHQubG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRChzcmN1X2RlZmVyLmxvY2spLFxcbitcXHQuaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbiksXFxuK307XFxuK1xcbisvKiBTZXQgd2hpbGUgc3JjdV9kZWZlcl9kcmFpbigpIHJlLWlzc3VlcywgdG8gY2F0Y2ggYSByZS1lbnRyYW50IGNhbGxfc3JjdSgpLiAqL1xcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgc3JjdV9kZWZlcl9kcmFpbmluZyk7XFxuK1xcbisvKlxcbisgKiBGbHVzaCBwZW5kaW5nIGRlZmVycmVkIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyBzcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS5cXG4rICogV2FpdCBvdXQgYW4gb25saW5lIENQVSdzIGlycV93b3JrOyBkcmFpbiBhbiBvZmZsaW5lIENQVSdzIGxpc3QgZGlyZWN0bHksIGFzXFxuKyAqIGl0cyBpcnFfd29yayBtYXkgbmV2ZXIgcnVuIGFnYWluLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKVxcbit7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4rXFx0XFx0aWYgKGNwdV9vbmxpbmUoY3B1KSlcXG4rXFx0XFx0XFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLml3KTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzcmN1X2RlZmVyX2RyYWluKFxcdTAwMjZwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSkuaXcpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIEluaXRpYWxpemUgU1JDVSBwZXItQ1BVIGRhdGEuICBOb3RlIHRoYXQgc3RhdGljYWxseSBhbGxvY2F0ZWRcXG4gICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyBtaWdodCBhbHJlYWR5IGhhdmUgc3JjdV9yZWFkX2xvY2soKSBhbmRcXG5AQCAtMTA3LDYgKzE0OSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3NyY3Vfc3RydWN0X2RhdGEoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIFxcdFxcdHNkcC1cXHUwMDNlY3B1ID0gY3B1O1xcbiBcXHRcXHRJTklUX1dPUksoXFx1MDAyNnNkcC1cXHUwMDNld29yaywgc3JjdV9pbnZva2VfY2FsbGJhY2tzKTtcXG4gXFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNnNkcC1cXHUwMDNlZGVsYXlfd29yaywgc3JjdV9kZWxheV90aW1lciwgMCk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIC1cXHUwMDNlZGVmZXJfY2JzIGFuZCAtXFx1MDAzZWRlZmVyX2xpbmsgYXJlIHZhbGlkIHdoZW4gemVyb2VkIGFuZCBhcmUgbm90XFxuK1xcdFxcdCAqIHJlaW5pdGlhbGl6ZWQgaGVyZSwgbGVzdCB3ZSBjbG9iYmVyIGNhbGxiYWNrcyBhIHJlZW50cmFudFxcbitcXHRcXHQgKiBjYWxsX3NyY3UoKSBhbHJlYWR5IHN0YWdlZC4gIFNlZSBfX2NhbGxfc3JjdSgpLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0c2RwLVxcdTAwM2Vzc3AgPSBzc3A7XFxuIFxcdH1cXG4gfVxcbkBAIC02OTUsNyArNzQyLDEyIEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0XFx0cmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovXFxuIFxcdGlmIChXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSkpXFxuIFxcdFxcdHJldHVybjsgLyogSnVzdCBsZWFrIGl0ISAqL1xcbi1cXHQvKiBXYWl0IGZvciBpcnFfd29yayB0byBmaW5pc2ggZmlyc3QgYXMgaXQgbWF5IHF1ZXVlIGEgbmV3IHdvcmsuICovXFxuK1xcdC8qXFxuK1xcdCAqIERyYWluIGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc3luY2luZyAtXFx1MDAzZWlycV93b3JrOiByZS1pc3N1aW5nIG9uZSBjYW5cXG4rXFx0ICogc3RhcnQgYSBncmFjZSBwZXJpb2QgYW5kIHJlLXF1ZXVlIC1cXHUwMDNlaXJxX3dvcmssIHdoaWNoIHRoZW4gc2NoZWR1bGVzXFxuK1xcdCAqIC1cXHUwMDNld29yaywgc28gYm90aCBtdXN0IGJlIHdhaXRlZCBvdXQgYWZ0ZXIgdGhlIGRyYWluLlxcbitcXHQgKi9cXG4rXFx0c3JjdV9kZWZlcl9mbHVzaCgpO1xcbiBcXHRpcnFfd29ya19zeW5jKFxcdTAwMjZzdXAtXFx1MDAzZWlycV93b3JrKTtcXG4gXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzdXAtXFx1MDAzZXdvcmspO1xcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuQEAgLTE0MTAsOCArMTQ2MiwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCxcXG4gICogc3JjdV9yZWFkX2xvY2soKSwgYW5kIHNyY3VfcmVhZF91bmxvY2soKSB0aGF0IGFyZSBhbGwgcGFzc2VkIHRoZSBzYW1lXFxuICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZS5cXG4gICovXFxuLXN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4tXFx0XFx0XFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxcbisvKlxcbisgKiBUaGUgc3JjdV9jYmxpc3QgYW5kIHNyY3Vfbm9kZSB0cmVlIGFyZSBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZFxcbisgKiAoc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKSBlbnF1ZXVlcyB1bmRlciByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSBhbmQgbWF5IHdhbGtcXG4rICogdGhlIHRyZWUpLiAgTGlrZSBjYWxsX3JjdSgpLCBfX2NhbGxfc3JjdSgpIGRlZmVycyB3aGVuIGludGVycnVwdHMgYXJlIGFscmVhZHlcXG4rICogZGlzYWJsZWQsIHNvIGEgcmUtZW50cmFudCBjYWxsX3NyY3UoKSAtLSBlLmcuIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkgZnJvbSBhXFxuKyAqIEJQRiBwcm9ncmFtIC0tIGNhbm5vdCBjb3JydXB0IHRoZSBsaXN0IG9yIGRlYWRsb2NrLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4rXFx0XFx0XFx0ICAgIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcXG4ge1xcbiBcXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUocmhwKSkge1xcbiBcXHRcXHQvKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9zcmN1KCksIHNvIGxlYWsgdGhlIGNhbGxiYWNrLiAqL1xcbkBAIC0xNDIzLDYgKzE0ODIsODEgQEAgc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbiBcXHQodm9pZClzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzc3AsIHJocCwgZG9fbm9ybSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4rXFx0XFx0XFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxcbit7XFxuK1xcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcXG4rXFx0XFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSW5zdHJ1bWVudGF0aW9uIG9uIHRoZSBlbnF1ZXVlIHBhdGggY2FuIHJlLWVudGVyIGhlcmUgZnJvbVxcbitcXHRcXHQgKiBpbnNpZGUgc3JjdV9kZWZlcl9kcmFpbigpLiAgUmUtcXVldWluZyB3b3VsZCBsaXZlbG9jayB0aGVcXG4rXFx0XFx0ICogZHJhaW4sIHNvIGRyb3AgdGhlIGNhbGxiYWNrOyBhbiBOTUkgY2Fubm90IGxvb3AsIHNvIGxldCBpdCBpbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh0aGlzX2NwdV9yZWFkKHNyY3VfZGVmZXJfZHJhaW5pbmcpIFxcdTAwMjZcXHUwMDI2ICFpbl9ubWkoKSkge1xcbitcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcImNhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNkcCA9IHRoaXNfY3B1X3B0cihzc3AtXFx1MDAzZXNkYSk7XFxuK1xcdFxcdHJocC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuK1xcdFxcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCBcXHUwMDI2c2RwLVxcdTAwM2VkZWZlcl9jYnMpKSB7XFxuK1xcdFxcdFxcdC8qIEZpcnN0IGRlZmVycmFsIG9uIHRoaXMgc3JjdV9kYXRhOiBjaGFpbiBpdCBmb3IgdGhlIGRyYWluLiAqL1xcbitcXHRcXHRcXHRzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c3JjdV9kZWZlcik7XFxuK1xcbitcXHRcXHRcXHRzZHAtXFx1MDAzZXNzcCA9IHNzcDtcXG4rXFx0XFx0XFx0aWYgKGxsaXN0X2FkZChcXHUwMDI2c2RwLVxcdTAwM2VkZWZlcl9saW5rLCBcXHUwMDI2c25kcC1cXHUwMDNlbGlzdCkpXFxuK1xcdFxcdFxcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZzbmRwLVxcdTAwM2Vpdyk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cXG4rXFx0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpO1xcbitcXG4rXFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jLCBkb19ub3JtKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmUtaXNzdWUgZGVmZXJyZWQgY2FsbGJhY2tzIHN0cmFpZ2h0IHRvIHNyY3VfZG9fZW5xdWV1ZSgpIHNvIHRoZXkgY2Fubm90IGRlZmVyXFxuKyAqIGFnYWluLiAgLVxcdTAwM2Vsb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGUgaXJxX3dvcmssIHNyY3VfZGVmZXJfZmx1c2goKSBhbmRcXG4rICogc3JjdV9vZmZsaW5lX2RyYWluKCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuK3tcXG4rXFx0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyk7XFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlICpzbm9kZSwgKnNuZXh0O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzbmRwLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdHRoaXNfY3B1X3dyaXRlKHNyY3VfZGVmZXJfZHJhaW5pbmcsIHRydWUpO1xcbitcXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2c25kcC1cXHUwMDNlbGlzdCkpIHtcXG4rXFx0XFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwID0gY29udGFpbmVyX29mKHNub2RlLCBzdHJ1Y3Qgc3JjdV9kYXRhLCBkZWZlcl9saW5rKTtcXG4rXFx0XFx0c3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBzZHAtXFx1MDAzZXNzcDtcXG4rXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgKmNub2RlLCAqY25leHQ7XFxuK1xcbitcXHRcXHRjbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNnNkcC1cXHUwMDNlZGVmZXJfY2JzKTtcXG4rXFx0XFx0bGxpc3RfZm9yX2VhY2hfc2FmZShjbm9kZSwgY25leHQsIGNub2RlKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCByY3VfaGVhZCAqcmhwID0gKHN0cnVjdCByY3VfaGVhZCAqKWNub2RlO1xcbitcXG4rXFx0XFx0XFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtXFx1MDAzZWZ1bmMsIHRydWUpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0dGhpc19jcHVfd3JpdGUoc3JjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xcbitcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2c25kcC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbisvKlxcbisgKiBEcmFpbiBAY3B1J3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzIGZyb20gcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpXFxuKyAqIG9uY2UgQGNwdSBpcyBkZWFkLiAgT25lIHBhc3MgY292ZXJzIGV2ZXJ5IHNyY3Vfc3RydWN0LCBhbmQgdGhlIHJlLWlzc3VlIGxhbmRzXFxuKyAqIG9uIHRoZSBjdXJyZW50IENQVS5cXG4rICovXFxuK3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpXFxuK3tcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHNyY3VfZGVmZXJfZHJhaW4oXFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBjYWxsX3NyY3UoKSAtIFF1ZXVlIGEgY2FsbGJhY2sgZm9yIGludm9jYXRpb24gYWZ0ZXIgYW4gU1JDVSBncmFjZSBwZXJpb2RcXG4gICogQHNzcDogc3JjdV9zdHJ1Y3QgaW4gcXVldWUgdGhlIGNhbGxiYWNrXFxuQEAgLTE2NzcsOSArMTgxMSwxNyBAQCB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4ge1xcbiBcXHRpbnQgY3B1O1xcbiBcXHRpbnQgaWR4O1xcbi1cXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9zdXAtXFx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xcbitcXHR1bnNpZ25lZCBsb25nIHM7XFxuIFxcbiBcXHRjaGVja19pbml0X3NyY3Vfc3RydWN0KHNzcCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAgVGhlXFxuK1xcdCAqIHNoYXJlZCBpcnFfd29yayBtYXkgYWxzbyBkcmFpbiBvdGhlciBzcmN1X3N0cnVjdHMnLCB3aGljaCBpcyBoYXJtbGVzcy5cXG4rXFx0ICovXFxuK1xcdHNyY3VfZGVmZXJfZmx1c2goKTtcXG4rXFxuK1xcdHMgPSByY3Vfc2VxX3NuYXAoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9zdXAtXFx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfc3VwLVxcdTAwM2VzcmN1X2JhcnJpZXJfbXV0ZXgpO1xcbiBcXHRpZiAocmN1X3NlcV9kb25lKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfc3VwLVxcdTAwM2VzcmN1X2JhcnJpZXJfc2VxLCBzKSkge1xcbiBcXHRcXHRzbXBfbWIoKTsgLyogRm9yY2Ugb3JkZXJpbmcgZm9sbG93aW5nIHJldHVybi4gKi9cXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90aW55LmMgYi9rZXJuZWwvcmN1L3RpbnkuY1xcbmluZGV4IGRjY2NjZDZiZTk0MTEuLjU3MzZiOTY0ZDhlZTEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS90aW55LmNcXG4rKysgYi9rZXJuZWwvcmN1L3RpbnkuY1xcbkBAIC0xMSw2ICsxMSw4IEBAXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGxldGlvbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29yay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG5AQCAtNDIsOCArNDQsODYgQEAgc3RhdGljIHN0cnVjdCByY3VfY3RybGJsayByY3VfY3RybGJsayA9IHtcXG4gXFx0LmdwX3NlcVxcdFxcdD0gMCAtIDMwMFVMLFxcbiB9O1xcbiBcXG4rLypcXG4rICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKVxcbisgKiB0aGF0IGFycml2ZXMgd2l0aCBpbnRlcnJ1cHRzIG9mZiBzdGFnZXMgdGhlIGNhbGxiYWNrIG9uIGEgbG9ja2xlc3MgbGlzdCB0aGF0XFxuKyAqIGFuIGlycV93b3JrIHJlLWlzc3VlcyBsYXRlci4gIE9uZSBnbG9iYWwgbGlzdCBhbmQgaXJxX3dvcmsgc3VmZmljZSwgYXMgVGlueVxcbisgKiBSQ1UgaXMgdW5pcHJvY2Vzc29yLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xcbitzdGF0aWMgTExJU1RfSEVBRChyY3VfZGVmZXJfbGlzdCk7XFxuK3N0YXRpYyBERUZJTkVfSVJRX1dPUksocmN1X2RlZmVyX2l3LCByY3VfZGVmZXJfZHJhaW4pO1xcbitzdGF0aWMgYm9vbCByY3VfZGVmZXJfZHJhaW5pbmc7XFxuK1xcbisvKlxcbisgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkgdG9cXG4rICogcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsIGNvbmRpdGlvbi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcXG4rXFx0XFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZkb3VibGVmcmVlcykgXFx1MDAzYyA0KSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiJXMoKTogRG91YmxlLWZyZWVkIENCICVwLVxcdTAwM2UlcFMoKSEhISAgXFxcIiwgX19mdW5jX18sIGhlYWQsIGhlYWQtXFx1MDAzZWZ1bmMpO1xcbitcXHRcXHRcXHRtZW1fZHVtcF9vYmooaGVhZCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRoZWFkLVxcdTAwM2VmdW5jID0gZnVuYztcXG4rXFx0aGVhZC1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuK1xcbitcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdCpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDtcXG4rXFx0cmN1X2N0cmxibGsuY3VydGFpbCA9IFxcdTAwMjZoZWFkLVxcdTAwM2VuZXh0O1xcbitcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkge1xcbitcXHRcXHQvKiBmb3JjZSBzY2hlZHVsaW5nIGZvciByY3VfcXMoKSAqL1xcbitcXHRcXHRyZXNjaGVkX2NwdSgwKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG4re1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XFxuK1xcbitcXHQvKiBDYWxsYmFja3MgYXJlIHVub3JkZXJlZCwgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuICovXFxuK1xcdHJjdV9kZWZlcl9kcmFpbmluZyA9IHRydWU7XFxuK1xcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2cmN1X2RlZmVyX2xpc3QpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xcbitcXG4rXFx0XFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cXHUwMDNlZnVuYyk7XFxuK1xcdH1cXG4rXFx0cmN1X2RlZmVyX2RyYWluaW5nID0gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHQvKiBBIHJlLWVudHJhbnQgY2FsbF9yY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0OyBkcm9wIGl0LiAqL1xcbitcXHRpZiAocmN1X2RlZmVyX2RyYWluaW5nIFxcdTAwMjZcXHUwMDI2ICFpbl9ubWkoKSkge1xcbitcXHRcXHRXQVJOX09OQ0UoMSwgXFxcImNhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0aGVhZC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuK1xcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgXFx1MDAyNnJjdV9kZWZlcl9saXN0KSlcXG4rXFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNnJjdV9kZWZlcl9pdyk7XFxuK31cXG4rXFxuKy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlycV93b3JrX3N5bmMoXFx1MDAyNnJjdV9kZWZlcl9pdyk7XFxuK31cXG4rXFxuIHZvaWQgcmN1X2JhcnJpZXIodm9pZClcXG4ge1xcbitcXHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGZpcnN0LiAqL1xcbitcXHRyY3VfZGVmZXJfZmx1c2goKTtcXG4gXFx0d2FpdF9yY3VfZ3AoY2FsbF9yY3VfaHVycnkpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xcbkBAIC0xNTcsMjkgKzIzNywxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3UpO1xcbiAgKi9cXG4gdm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXFxuIHtcXG4tXFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi1cXG4tXFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XFxuLVxcdFxcdGlmIChhdG9taWNfaW5jX3JldHVybihcXHUwMDI2ZG91YmxlZnJlZXMpIFxcdTAwM2MgNCkge1xcbi1cXHRcXHRcXHRwcl9lcnIoXFxcIiVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cXHUwMDNlJXBTKCkhISEgIFxcXCIsIF9fZnVuY19fLCBoZWFkLCBoZWFkLVxcdTAwM2VmdW5jKTtcXG4tXFx0XFx0XFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xcbi1cXHRcXHR9XFxuK1xcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcXG4rXFx0XFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aGVhZC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuLVxcdGhlYWQtXFx1MDAzZW5leHQgPSBOVUxMO1xcbi1cXG4tXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbi1cXHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XFxuLVxcdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcXHUwMDI2aGVhZC1cXHUwMDNlbmV4dDtcXG4tXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cXG4rXFx0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcXG4tXFx0XFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cXG4tXFx0XFx0cmVzY2hlZF9jcHUoMCk7XFxuLVxcdH1cXG4rXFx0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3UpO1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuY1xcbmluZGV4IDk2ODQ4ZmMxZjAyYjguLmUyMWViNTUxYjExMGUgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcXG4rKysgYi9rZXJuZWwvcmN1L3RyZWUuY1xcbkBAIC0yNCw2ICsyNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9kZWJ1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm1pLmhcXHUwMDNlXFxuQEAgLTMxNDgsMjEgKzMxNDksMjggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2Jfb3ZsZChzdHJ1Y3QgcmN1X2RhdGEgKnJkcClcXG4gXFx0cmF3X3NwaW5fdW5sb2NrX3JjdV9ub2RlKHJucCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkXFxuLV9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxcbisvKlxcbisgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpXFxuKyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIChzZWUgc2hvdWxkX3JjdV9kZWZlcigpKSBzdGFnZXMgdGhlIGNhbGxiYWNrXFxuKyAqIG9uIGEgcGVyLUNQVSBsbGlzdCB0aGF0IGFuIGlycV93b3JrIHJlLWlzc3VlcyBvbmNlIGludGVycnVwdHMgYXJlIG9uLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xcbitcXG4rLyogU2V0IHdoaWxlIHJjdV9kZWZlcl9kcmFpbigpIHJlLWlzc3VlcywgdG8gY2F0Y2ggYSByZS1lbnRyYW50IGNhbGxfcmN1KCkuICovXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCByY3VfZGVmZXJfZHJhaW5pbmcpO1xcbitcXG4rLypcXG4rICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSdzIHJjdV9zZWdjYmxpc3QuICBBbHNvIGNhbGxlZCBieSByY3VfZGVmZXJfZHJhaW4oKVxcbisgKiB0byByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWxcXG4rICogY29uZGl0aW9uLiAgRWl0aGVyIGNhbGxlciBtYXkgaGF2ZSBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcXG4ge1xcbiBcXHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGJvb2wgbGF6eTtcXG4gXFx0c3RydWN0IHJjdV9kYXRhICpyZHA7XFxuIFxcbi1cXHQvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqL1xcbi1cXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcXHUwMDI2IChzaXplb2Yodm9pZCAqKSAtIDEpKTtcXG4tXFxuLVxcdC8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi9cXG4tXFx0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9yY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suXFxuQEAgLTMyMDYsNiArMzIxNCw5MiBAQCBfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcXG4gXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gdGhlIGVucXVldWUgc28gdGhleSBjYW5ub3QgZGVmZXJcXG4rICogYWdhaW4uICAtXFx1MDAzZWRlZmVyX2xvY2sgc2VyaWFsaXplcyB0aGUgZHJhaW5lcnM6IHRoaXMgQ1BVJ3MgaXJxX3dvcmssXFxuKyAqIHJjdV9kZWZlcl9mbHVzaCgpIGFuZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG4re1xcbitcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHJjdV9kYXRhLCBkZWZlcl93b3JrKTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcXG4rXFx0dGhpc19jcHVfd3JpdGUocmN1X2RlZmVyX2RyYWluaW5nLCB0cnVlKTtcXG4rXFx0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2hlYWQpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xcbitcXG4rXFx0XFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cXHUwMDNlZnVuYywgZmFsc2UpO1xcbitcXHR9XFxuK1xcdHRoaXNfY3B1X3dyaXRlKHJjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xcbitcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl9sb2NrLCBmbGFncyk7XFxuK31cXG4rXFxuKy8qIFN0YWdlIEBoZWFkIGZvciB0aGlzIENQVSdzIGlycV93b3JrIHdoZW4gY2FsbF9yY3UoKSBjYW5ub3QgZW5xdWV1ZSBub3cuICovXFxuK3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2cmN1X2RhdGEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSW5zdHJ1bWVudGF0aW9uIG9uIHRoZSBlbnF1ZXVlIHBhdGggY2FuIHJlLWVudGVyIGhlcmUgZnJvbSBpbnNpZGVcXG4rXFx0ICogcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZSBkcmFpbiwgc28gZHJvcCB0aGVcXG4rXFx0ICogY2FsbGJhY2s7IGFuIE5NSSBpcyBvbmUtc2hvdCBhbmQgY2Fubm90IGxvb3AsIHNvIGxldCBpdCB0aHJvdWdoLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRoaXNfY3B1X3JlYWQocmN1X2RlZmVyX2RyYWluaW5nKSBcXHUwMDI2XFx1MDAyNiAhaW5fbm1pKCkpIHtcXG4rXFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJjYWxsX3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdGhlYWQtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbitcXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2hlYWQpKVxcbitcXHRcXHRpcnFfd29ya19xdWV1ZShcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl93b3JrKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmdcXG4rICogcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gIFRoaXMgcnVucyBiZWZvcmUgcmN1X2JhcnJpZXIoKSBzY2FucyB0aGVcXG4rICogbGlzdHMuICBBbiBvbmxpbmUgQ1BVJ3Mgb3duIGlycV93b3JrIHJlLWlzc3VlcyBpdHMgY2FsbGJhY2tzLCBzbyB3YWl0IGl0IG91dDtcXG4rICogYW4gb2ZmbGluZSBDUFUncyBpcnFfd29yayBtYXkgbmV2ZXIgcnVuIGFnYWluLCBzbyBkcmFpbiBpdHMgbGlzdCBkaXJlY3RseVxcbisgKiBvbnRvIHRoaXMgQ1BVIGluc3RlYWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZClcXG4re1xcbitcXHRpbnQgY3B1O1xcbitcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJjdV9kYXRhLCBjcHUpO1xcbitcXG4rXFx0XFx0aWYgKGNwdV9vbmxpbmUoY3B1KSlcXG4rXFx0XFx0XFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl93b3JrKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRyY3VfZGVmZXJfZHJhaW4oXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfd29yayk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXFxuK3tcXG4rXFx0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cXG4rXFx0V0FSTl9PTl9PTkNFKCh1bnNpZ25lZCBsb25nKWhlYWQgXFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XFxuK1xcbitcXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWZ1bmMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XFxuK1xcdFxcdGNhbGxfcmN1X2RlZmVyKGhlYWQsIGZ1bmMpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSk7XFxuK1xcbitcXHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBmdW5jLCBsYXp5X2luKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19SQ1VfTEFaWVxcbiBzdGF0aWMgYm9vbCBlbmFibGVfcmN1X2xhenkgX19yZWFkX21vc3RseSA9ICFJU19FTkFCTEVEKENPTkZJR19SQ1VfTEFaWV9ERUZBVUxUX09GRik7XFxuIG1vZHVsZV9wYXJhbShlbmFibGVfcmN1X2xhenksIGJvb2wsIDA0NDQpO1xcbkBAIC0zODk2LDggKzM5OTAsMTIgQEAgdm9pZCByY3VfYmFycmllcih2b2lkKVxcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGdzZXE7XFxuIFxcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xcbi1cXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXFx1MDAyNnJjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzO1xcbiBcXG4rXFx0LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gKi9cXG4rXFx0cmN1X2RlZmVyX2ZsdXNoKCk7XFxuK1xcbitcXHRzID0gcmN1X3NlcV9zbmFwKFxcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XFxuIFxcdHJjdV9iYXJyaWVyX3RyYWNlKFRQUyhcXFwiQmVnaW5cXFwiKSwgLTEsIHMpO1xcbiBcXG4gXFx0LyogVGFrZSBtdXRleCB0byBzZXJpYWxpemUgY29uY3VycmVudCByY3VfYmFycmllcigpIHJlcXVlc3RzLiAqL1xcbkBAIC00MjMxLDYgKzQzMjksMTAgQEAgcmN1X2Jvb3RfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1KVxcbiBcXHRyZHAtXFx1MDAzZXJjdV9vbmxfZ3Bfc3RhdGUgPSBSQ1VfR1BfQ0xFQU5FRDtcXG4gXFx0cmRwLVxcdTAwM2VsYXN0X3NjaGVkX2Nsb2NrID0gamlmZmllcztcXG4gXFx0cmRwLVxcdTAwM2VjcHUgPSBjcHU7XFxuK1xcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl9oZWFkKTtcXG4rXFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2xvY2spO1xcbitcXHQvKiBIYXJkIGlycV93b3JrIHNvIHRoZSByZS1pc3N1ZSBydW5zIHByb21wdGx5LiAqL1xcbitcXHRyZHAtXFx1MDAzZWRlZmVyX3dvcmsgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTtcXG4gXFx0cmN1X2Jvb3RfaW5pdF9ub2NiX3BlcmNwdV9kYXRhKHJkcCk7XFxuIH1cXG4gXFxuQEAgLTQ1MjgsNiArNDYzMCwxNiBAQCB2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcXG4gXFx0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihcXHUwMDI2cmN1X2RhdGEsIGNwdSk7XFxuIFxcdGJvb2wgbmVlZHdha2U7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBDYWxsYmFja3MgdGhlIG91dGdvaW5nIENQVSBkZWZlcnJlZCBsYXRlIGluIHRoZSBvZmZsaW5lIHBhdGggKHBhc3QgdGhlXFxuK1xcdCAqIHBvaW50IGl0cyBpcnFfd29yayBjYW4gcnVuKSBzaXQgb24gLVxcdTAwM2VkZWZlcl9oZWFkLCB3aGljaCB0aGUgLVxcdTAwM2VjYmxpc3RcXG4rXFx0ICogbWlncmF0aW9uIGJlbG93IGRvZXMgbm90IGNvdmVyLiAgRHJhaW4gdGhlbSBoZXJlLCBiZWZvcmUgdGhlIGVhcmx5XFxuK1xcdCAqIHJldHVybnM7IHRoZSByZS1pc3N1ZSBsYW5kcyBvbiB0aGlzIENQVS5cXG4rXFx0ICovXFxuK1xcdHJjdV9kZWZlcl9kcmFpbihcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl93b3JrKTtcXG4rXFx0LyogTGlrZXdpc2UgZm9yIHRoZSBvdXRnb2luZyBDUFUncyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3MuICovXFxuK1xcdHNyY3Vfb2ZmbGluZV9kcmFpbihjcHUpO1xcbitcXG4gXFx0aWYgKHJjdV9yZHBfaXNfb2ZmbG9hZGVkKHJkcCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmhcXG5pbmRleCBlZWRmYTQzMDU5ZTgwLi4zYThlMTcxMzZjNWE3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvdHJlZS5oXFxuKysrIGIva2VybmVsL3JjdS90cmVlLmhcXG5AQCAtMjI5LDYgKzIyOSwxMSBAQCBzdHJ1Y3QgcmN1X2RhdGEge1xcbiBcXHRzdHJ1Y3QgcmN1X2hlYWQgYmFycmllcl9oZWFkO1xcbiBcXHRpbnQgZXhwX3dhdGNoaW5nX3NuYXA7XFx0XFx0LyogRG91YmxlLWNoZWNrIG5lZWQgZm9yIElQSS4gKi9cXG4gXFxuK1xcdC8qIERlZmVycmFsIG9mIGFuIE5NSS9yZWVudHJhbnQgY2FsbF9yY3UoKTsgc2VlIF9fY2FsbF9yY3VfY29tbW9uKCkuICovXFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2hlYWQ7XFxuK1xcdHN0cnVjdCBpcnFfd29yayBkZWZlcl93b3JrO1xcbitcXHRyYXdfc3BpbmxvY2tfdCBkZWZlcl9sb2NrO1xcbitcXG4gXFx0LyogNSkgQ2FsbGJhY2sgb2ZmbG9hZGluZy4gKi9cXG4gI2lmZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVcXG4gXFx0c3RydWN0IHN3YWl0X3F1ZXVlX2hlYWQgbm9jYl9jYl93cTsgLyogRm9yIG5vY2Iga3RocmVhZHMgdG8gc2xlZXAgb24uICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNmVjZDkzYmUzMGY0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmNcXG5AQCAtMCwwICsxLDU4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIEV4ZXJjaXNlIHJlLWVudHJ5IGludG8gY2FsbF9zcmN1KCkgZnJvbSBCUEY7IHNlZSBwcm9ncy9yY3VfcmVlbnRyeS5jLiAqL1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcInJjdV9yZWVudHJ5LnNrZWwuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbnQgc3lzX3BpZGZkX29wZW4ocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIHN5c2NhbGwoX19OUl9waWRmZF9vcGVuLCBwaWQsIGZsYWdzKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJjdV9yZWVudHJ5ICpza2VsO1xcbitcXHRpbnQgZXJyLCBwaWRmZCA9IC0xLCBtYXBfZmQ7XFxuK1xcdF9fdTY0IHZhbCA9IDE7XFxuK1xcdGNwdV9zZXRfdCBzZXQ7XFxuK1xcbitcXHRza2VsID0gcmN1X3JlZW50cnlfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gcmN1X3JlZW50cnlfX2F0dGFjaChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2tlbF9hdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBLZWVwIHRoZSByZS1lbnRyeSBvbiBhIHNpbmdsZSBDUFUuICovXFxuK1xcdENQVV9aRVJPKFxcdTAwMjZzZXQpO1xcbitcXHRDUFVfU0VUKDAsIFxcdTAwMjZzZXQpO1xcbitcXHRpZiAoc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFxcdTAwMjZzZXQpKVxcbitcXHRcXHRwZXJyb3IoXFxcInNjaGVkX3NldGFmZmluaXR5XFxcIik7XFxuK1xcbitcXHRwaWRmZCA9IHN5c19waWRmZF9vcGVuKGdldHBpZCgpLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UocGlkZmQsIDAsIFxcXCJwaWRmZF9vcGVuXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRtYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVxcdTAwM2VtYXBzLnRhc2tfc3RnKTtcXG4rXFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFxcdTAwMjZwaWRmZCwgXFx1MDAyNnZhbCwgQlBGX05PRVhJU1QpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJib290X2NyZWF0ZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEFybSB0aGUgaGFuZGxlciBmb3IgdGhpcyB0aHJlYWQsIHRoZW4gdHJpZ2dlciBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRhcmdldF9waWQgPSBzeXNjYWxsKF9fTlJfZ2V0dGlkKTtcXG4rXFx0ZXJyID0gYnBmX21hcF9kZWxldGVfZWxlbShtYXBfZmQsIFxcdTAwMjZwaWRmZCk7XFxuK1xcdEFTU0VSVF9PSyhlcnIsIFxcXCJib290X2RlbGV0ZVxcXCIpO1xcbitcXG4rXFx0LyogT25seSBUcmVlIFNSQ1UgZW5xdWV1ZXMgdmlhIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpOyBza2lwIGVsc2V3aGVyZS4gKi9cXG4rXFx0aWYgKCFza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWhpdHMpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZWVudGVyZWQsIDEsIFxcXCJyZWVudHJ5X2RlZmVycmVkXFxcIik7XFxuK291dDpcXG4rXFx0aWYgKHBpZGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKHBpZGZkKTtcXG4rXFx0cmN1X3JlZW50cnlfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDkyYTkyN2ZmNTFjMFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xcbkBAIC0wLDAgKzEsNDUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogUmUtZW50ZXIgY2FsbF9zcmN1KCkgZnJvbSBhIEJQRiBwcm9ncmFtLiAgZmVudHJ5IG9uIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpXFxuKyAqIGZpcmVzIGluc2lkZSBjYWxsX3NyY3UoKSdzIGVucXVldWUgKHJlYWNoZWQgZnJvbSBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZCgpXFxuKyAqIHdpdGggdGhlIHNyY3VfZGF0YSAtXFx1MDAzZWxvY2sgaGVsZCk7IHRoZSBoYW5kbGVyIHRoZW4gY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKVxcbisgKiAtLSBpdHNlbGYgY2FsbF9zcmN1KCkgb24gcmN1X3Rhc2tzX3RyYWNlX3NyY3Vfc3RydWN0IC0tIHJlLWVudGVyaW5nIHRoZSBzYW1lXFxuKyAqIHNyY3VfZGF0YSBvbiB0aGUgc2FtZSBDUFUuXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UpO1xcbitcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuK1xcdF9fdHlwZShrZXksIGludCk7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xcbit9IHRhc2tfc3RnIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK2ludCB0YXJnZXRfcGlkO1xcbitpbnQgaGl0cztcXG4raW50IHJlZW50ZXJlZDtcXG4rXFxuK1NFQyhcXFwiZmVudHJ5L3JjdV9zZWdjYmxpc3RfZW5xdWV1ZVxcXCIpXFxuK2ludCBCUEZfUFJPRyhyZWVudGVyKVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyO1xcbitcXG4rXFx0aWYgKHJlZW50ZXJlZCB8fCAhdGFyZ2V0X3BpZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRjdXIgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcXG4rXFx0aWYgKCFjdXIgfHwgY3VyLVxcdTAwM2VwaWQgIT0gdGFyZ2V0X3BpZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBSZS1lbnRlciB2aWEgYSB0YXNrLXN0b3JhZ2UgZGVsZXRlLCB3aGljaCBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqL1xcbitcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2aGl0cywgMSk7XFxuK1xcdGJwZl90YXNrX3N0b3JhZ2VfZ2V0KFxcdTAwMjZ0YXNrX3N0ZywgY3VyLCAwLCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpO1xcbitcXHRicGZfdGFza19zdG9yYWdlX2RlbGV0ZShcXHUwMDI2dGFza19zdGcsIGN1cik7XFxuK1xcbitcXHRyZWVudGVyZWQgPSAxO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1Nzo0OC40MjY5NzM2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg1NDczMDIzNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIlRSQUNFUE9JTlRTXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X29mZmxpbmVfZHJhaW5cIixcbiAgICBcInJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGRlZmVycmVkIFJDVSBhbmQgU1JDVSBjYWxsYmFja3MgdG8gc2FmZWx5IGhhbmRsZSByZS1lbnRyYW50IGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBpbnZvY2F0aW9ucywgc3VjaCBhcyB0aG9zZSBvcmlnaW5hdGluZyBmcm9tIE5NSSBjb250ZXh0cyBvciBCUEYgcHJvZ3JhbXMuIEl0IG1vZGlmaWVzIGNvcmUgUkNVL1NSQ1Ugc3luY2hyb25pemF0aW9uIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyBjYWxsYmFjayBkcmFpbmluZyBtZWNoYW5pc21zLiBUaGlzIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MWJiZTZmOWJkYTMzODc5OWQyZWZhYjA4YzM1YzRlZTdhNmQwNjIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAxNzo1Nzo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuaW5kZXggZmJjZjEzYmMxMmQxNS4uNDcyNzVkMTgyOTY2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXG5AQCAtMTIsNiArMTIsNyBAQFxuICNkZWZpbmUgX0xJTlVYX1NSQ1VfVElOWV9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmtfdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FpdC5oXHUwMDNlXG4gXG4gc3RydWN0IHNyY3Vfc3RydWN0IHtcbkBAIC0yNiw2ICsyNyw4IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgKipzcmN1X2NiX3RhaWw7XHQvKiBQZW5kaW5nIGNhbGxiYWNrczogVGFpbC4gKi9cbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzcmN1X3dvcms7XHQvKiBGb3IgZHJpdmluZyBncmFjZSBwZXJpb2RzLiAqL1xuIFx0c3RydWN0IGlycV93b3JrIHNyY3VfaXJxX3dvcms7XHQvKiBEZWZlciBzY2hlZHVsZV93b3JrKCkgdG8gaXJxIHdvcmsuICovXG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9jYnM7XHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXG4rXHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfaXc7XHRcdC8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovXG4gI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DXG4gXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDtcbiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovXG5AQCAtMzMsNiArMzYsNyBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuIFxuIHZvaWQgc3JjdV9kcml2ZV9ncChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndwKTtcbiB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XG4gXG4gI2RlZmluZSBfX1NSQ1VfU1RSVUNUX0lOSVQobmFtZSwgX19pZ25vcmVkLCBfX19pZ25vcmVkLCBfX19faWdub3JlZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG5AQCAtNDAsNiArNDQsOCBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiBcdC5zcmN1X2NiX3RhaWwgPSBcdTAwMjZuYW1lLnNyY3VfY2JfaGVhZCxcdFx0XHRcdFxcXG4gXHQuc3JjdV93b3JrID0gX19XT1JLX0lOSVRJQUxJWkVSKG5hbWUuc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKSxcdFxcXG4gXHQuc3JjdV9pcnFfd29yayA9IHsgLmZ1bmMgPSBzcmN1X3RpbnlfaXJxX3dvcmsgfSxcdFx0XFxcbitcdC5kZWZlcl9jYnMgPSBMTElTVF9IRUFEX0lOSVQobmFtZS5kZWZlcl9jYnMpLFx0XHRcdFxcXG4rXHQuZGVmZXJfaXcgPSB7IC5mdW5jID0gc3JjdV9kZWZlcl9kcmFpbiB9LFx0XHRcdFx0XFxcbiBcdF9fU1JDVV9ERVBfTUFQX0lOSVQobmFtZSlcdFx0XHRcdFx0XFxcbiB9XG4gXG5AQCAtMTMxLDEwICsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4te1xuLVx0c3luY2hyb25pemVfc3JjdShzc3ApO1xuLX1cbit2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkgeyB9XG4gI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbmluZGV4IDc1ZTU0ZTRmOTYzZmEuLjFjZTc1OWZiNzA5NDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxuQEAgLTEzLDYgKzEzLDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3Vfbm9kZV90cmVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuIFxuIHN0cnVjdCBzcmN1X25vZGU7XG4gc3RydWN0IHNyY3Vfc3RydWN0O1xuQEAgLTQxLDYgKzQzLDggQEAgc3RydWN0IHNyY3VfZGF0YSB7XG4gXHRib29sIHNyY3VfY2JsaXN0X2ludm9raW5nO1x0XHQvKiBJbnZva2luZyB0aGVzZSBDQnM/ICovXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdCBkZWxheV93b3JrO1x0XHQvKiBEZWxheSBmb3IgQ0IgaW52b2tpbmcgKi9cbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1x0XHQvKiBDb250ZXh0IGZvciBDQiBpbnZva2luZy4gKi9cbitcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcdFx0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xuK1x0c3RydWN0IGxsaXN0X25vZGUgZGVmZXJfbGluaztcdFx0LyogTGlua3Mgb250byB0aGUgcGVyLUNQVSBkZWZlcnJhbCBkcmFpbiBsaXN0ICovXG4gXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7XHQvKiBGb3Igc3JjdV9iYXJyaWVyKCkgdXNlLiAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDtcdFx0LyogRm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpIHVzZS4gKi9cbiBcdGludCBzcmN1X2VjX3N0YXRlO1x0XHRcdC8qICBTdGF0ZSBmb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkuICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9LY29uZmlnIGIva2VybmVsL3JjdS9LY29uZmlnXG5pbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9LY29uZmlnXG4rKysgYi9rZXJuZWwvcmN1L0tjb25maWdcbkBAIC0xNzUsNiArMTc1LDEyIEBAIGNvbmZpZyBSQ1VfU1RBTExfQ09NTU9OXG4gY29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVFxuIFx0ZGVmX2Jvb2wgKCBUUkVFX1JDVSB8fCBUUkVFX1NSQ1UgfHwgVEFTS1NfUkNVX0dFTkVSSUMgKVxuIFxuKyMgVGhlIGRlZmVycmFsIChhbmQgdGhlIElSUV9XT1JLIGl0IHVzZXMpIGlzIG9ubHkgbmVlZGVkIHdoZXJlIGNhbGxfcmN1KCkgL1xuKyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuXG4rY29uZmlnIFJDVV9ERUZFUlxuK1x0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcbitcdHNlbGVjdCBJUlFfV09SS1xuK1xuIGNvbmZpZyBSQ1VfRkFOT1VUXG4gXHRpbnQgXCJUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgZmFub3V0IHZhbHVlXCJcbiBcdHJhbmdlIDIgNjQgaWYgNjRCSVRcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdS5oIGIva2VybmVsL3JjdS9yY3UuaFxuaW5kZXggMzlhOWY2ZmE5YTdiMi4uY2EwNWQ0ODc3M2M3OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvcmN1LmhcbisrKyBiL2tlcm5lbC9yY3UvcmN1LmhcbkBAIC01NzIsNiArNTcyLDIzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrc19jYmxpc3RfaW5pdF9nZW5lcmljKHZvaWQpIHsgfVxuICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9JTklUXHQxXG4gI2RlZmluZSBSQ1VfU0NIRURVTEVSX1JVTk5JTkdcdDJcbiBcbisvKlxuKyAqIERlZmVyIGEgY2FsbF9yY3UoKS9jYWxsX3NyY3UoKSBjYWxsYmFjayByYXRoZXIgdGhhbiBlbnF1ZXVlIGl0IG5vdz8gIERlZmVyXG4rICogd2hlbmV2ZXIgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHNpbmNlIGEgY2FsbGJhY2stbGlzdCBvcGVyYXRpb24gbWF5IGJlIGluXG4rICogZmxpZ2h0IG9uIHRoaXMgQ1BVLiAgTm90IHdoaWxlIHRoZSBzY2hlZHVsZXIgaXMgZG93biwgdGhvdWdoOiBpcnFfd29yayBpc1xuKyAqIHVudXNhYmxlIGJlZm9yZSBpbml0X0lSUSgpLCB5ZXQgcmN1X2luaXQoKSBhbHJlYWR5IGNhbGxzIGNhbGxfcmN1KCkuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZClcbit7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBpcnFzX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2IHJjdV9zY2hlZHVsZXJfYWN0aXZlICE9IFJDVV9TQ0hFRFVMRVJfSU5BQ1RJVkU7XG4rfVxuK1xuKy8qIERyYWluIGFuIG91dGdvaW5nIENQVSdzIGRlZmVycmVkIFNSQ1UgY2FsbGJhY2tzOyBzZWUgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLiAqL1xuK3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xuK1xuIGVudW0gcmN1dG9ydHVyZV90eXBlIHtcbiBcdFJDVV9GTEFWT1IsXG4gXHRSQ1VfVEFTS1NfRkxBVk9SLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jIGIva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbmluZGV4IDc5NDkzN2UxM2U3YzMuLjllZDE3YjY0MzYyMGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xuKysrIGIva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbkBAIC00OCw2ICs0OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGljay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25taS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJyY3UuaFwiXG4gXG5AQCAtMTE1LDYgKzExNiw3IEBAIHRvcnR1cmVfcGFyYW0oaW50LCBsZWFrcG9pbnRlciwgMCwgXCJMZWFrIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGZyb20gcmVhZGVyc1wiKTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbl9iYXJyaWVyX2NicywgMCwgXCIjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nXCIpO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBuX3VwX2Rvd24sIDMyLCBcIiMgb2YgY29uY3VycmVudCB1cC9kb3duIGhydGltZXItYmFzZWQgUkNVIHJlYWRlcnNcIik7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5mYWtld3JpdGVycywgNCwgXCJOdW1iZXIgb2YgUkNVIGZha2Ugd3JpdGVyIHRocmVhZHNcIik7XG4rdG9ydHVyZV9wYXJhbShib29sLCBubWlfY2FsbHMsIHRydWUsIFwiRXhlcmNpc2UgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSSBvbiBubWlfY2FwYWJsZSBmbGF2b3JzXCIpO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBucmVhZGVycywgLTEsIFwiTnVtYmVyIG9mIFJDVSByZWFkZXIgdGhyZWFkc1wiKTtcbiB0b3J0dXJlX3BhcmFtKGJvb2wsIG53cml0ZXJzLCAxLCBcIk51bWJlciBvZiBSQ1Ugd3JpdGVyIHRocmVhZHMgKDAgb3IgMSlcIik7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG9iamVjdF9kZWJ1ZywgMCwgXCJFbmFibGUgZGVidWctb2JqZWN0IGRvdWJsZSBjYWxsX3JjdSgpIHRlc3RpbmdcIik7XG5AQCAtMjE2LDYgKzIxOCw4IEBAIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfZmFpbHVyZTtcbiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0cztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVycztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX2lycXM7XG4rc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9ubWlfY2FsbDtcbitzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYjtcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfYXR0ZW1wdHM7XG4gc3RhdGljIGxvbmcgbl9iYXJyaWVyX3N1Y2Nlc3NlczsgLyogZGlkIHJjdV9iYXJyaWVyIHRlc3Qgc3VjY2VlZD8gKi9cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuX3JlYWRfZXhpdHM7XG5AQCAtNDMzLDYgKzQzNyw3IEBAIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMge1xuIFx0Ym9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpO1xuIFx0bG9uZyBjYmZsb29kX21heDtcbiBcdGludCBpcnFfY2FwYWJsZTtcbitcdGludCBubWlfY2FwYWJsZTtcbiBcdGludCBjYW5fYm9vc3Q7XG4gXHRpbnQgZXh0ZW5kYWJsZXM7XG4gXHRpbnQgc2xvd19ncHM7XG5AQCAtNjQ4LDYgKzY1Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHJjdV9vcHMgPSB7XG4gXHQuZXh0ZW5kYWJsZXNcdFx0PSBSQ1VUT1JUVVJFX01BWF9FWFRFTkQsXG4gXHQuZGVidWdfb2JqZWN0c1x0XHQ9IDEsXG4gXHQuc3RhcnRfcG9sbF9pcnFzb2ZmXHQ9IDEsXG4rXHQubm1pX2NhcGFibGVcdFx0PSAxLFxuIFx0Lm5hbWVcdFx0XHQ9IFwicmN1XCJcbiB9O1xuIFxuQEAgLTk0Miw2ICs5NDgsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1X29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbitcdC5ubWlfY2FwYWJsZVx0PSAxLFxuIFx0Lm5hbWVcdFx0PSBcInNyY3VcIlxuIH07XG4gXG5AQCAtMTAwNSw2ICsxMDEyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdWRfb3BzID0ge1xuIFx0LmRlYnVnX29iamVjdHNcdD0gMSxcbiBcdC5oYXZlX3VwX2Rvd25cdD0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKVxuIFx0XHRcdFx0PyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLFxuK1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwic3JjdWRcIlxuIH07XG4gXG5AQCAtMTI2OSw2ICsxMjc3LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgdGFza3NfdHJhY2luZ19vcHMgPSB7XG4gXHQuY2JmbG9vZF9tYXhcdD0gNTAwMDAsXG4gXHQuaXJxX2NhcGFibGVcdD0gMSxcbiBcdC5zbG93X2dwc1x0PSAxLFxuK1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwidGFza3MtdHJhY2luZ1wiXG4gfTtcbiBcbkBAIC0yNjU5LDEyICsyNjY4LDk0IEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxuIFxuIHN0YXRpYyBERUZJTkVfVE9SVFVSRV9SQU5ET01fUEVSQ1BVKHJjdV90b3J0dXJlX3RpbWVyX3JhbmQpO1xuIFxuKy8qXG4rICogRXhlcmNpc2UgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgc2V0IC1cdTAwM2VubWlfY2FwYWJsZS4gIEFcbisgKiBwZXItQ1BVIGhhcmR3YXJlIHBlcmYgY291bnRlciBvdmVyZmxvd3MgaW50byBhbiBOTUksIGFuZCBpdHMgaGFuZGxlciBzdWJtaXRzXG4rICogb25lIHByZWFsbG9jYXRlZCBjYWxsYmFjayB2aWEgLVx1MDAzZWNhbGwoKS4gIE9uZSBjYWxsYmFjayBpcyBpbiBmbGlnaHQgYXQgYSB0aW1lXG4rICogKGd1YXJkZWQgYnkgYW4gYXRvbWljKSB0byBhdm9pZCBhbGxvY2F0aW5nIGluIE5NSS4gIFRoaXMgbWlycm9ycyBob3cgYSBCUEZcbisgKiBwcm9ncmFtIHJlYWNoZXMgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSS5cbisgKi9cbisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG4rc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgcmN1X3RvcnR1cmVfbm1pX2F0dHIgPSB7XG4rXHQudHlwZVx0XHQ9IFBFUkZfVFlQRV9IQVJEV0FSRSxcbitcdC5jb25maWdcdFx0PSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXG4rXHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyKSxcbitcdC5waW5uZWRcdFx0PSAxLFxuK1x0LmRpc2FibGVkXHQ9IDEsXG4rXHQuZnJlcVx0XHQ9IDEsXG4rXHQuc2FtcGxlX2ZyZXFcdD0gMTAwMCxcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudCAqKnJjdV90b3J0dXJlX25taV9ldmVudHM7XG4rc3RhdGljIHN0cnVjdCByY3VfaGVhZCByY3VfdG9ydHVyZV9ubWlfcmg7XG4rc3RhdGljIGF0b21pY190IHJjdV90b3J0dXJlX25taV9yaF9pbnVzZTtcbitcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApXG4re1xuK1x0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKTtcbitcdGF0b21pY19zZXQoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX3JoX2ludXNlLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbitcdFx0XHRcdCAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuK3tcbitcdGlmICghaW5fbm1pKCkpXG4rXHRcdHJldHVybjtcbitcdGlmIChjdXJfb3BzLVx1MDAzZWNhbGwgXHUwMDI2XHUwMDI2ICFhdG9taWNfeGNoZyhcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmhfaW51c2UsIDEpKSB7XG4rXHRcdGN1cl9vcHMtXHUwMDNlY2FsbChcdTAwMjZyY3VfdG9ydHVyZV9ubWlfcmgsIHJjdV90b3J0dXJlX25taV9jYik7XG4rXHRcdGF0b21pY19sb25nX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XG4rXHRpbnQgY3B1O1xuK1xuK1x0aWYgKCFubWlfY2FsbHMgfHwgIWN1cl9vcHMtXHUwMDNlbm1pX2NhcGFibGUgfHwgIWN1cl9vcHMtXHUwMDNlY2FsbClcbitcdFx0cmV0dXJuO1xuK1x0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCpyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKSxcbitcdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuK1x0aWYgKCFyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKVxuK1x0XHRyZXR1cm47XG4rXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xuK1x0XHRldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKFx1MDAyNnJjdV90b3J0dXJlX25taV9hdHRyLCBjcHUsXG4rXHRcdFx0XHRcdFx0XHQgTlVMTCwgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93LCBOVUxMKTtcbitcdFx0aWYgKElTX0VSUihldmVudCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSA9IGV2ZW50O1xuK1x0XHRwZXJmX2V2ZW50X2VuYWJsZShldmVudCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpXG4re1xuK1x0aW50IGNwdTtcbitcbitcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cylcbitcdFx0cmV0dXJuO1xuK1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuK1x0XHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0cGVyZl9ldmVudF9kaXNhYmxlKHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSk7XG4rXHRcdHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwocmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdKTtcbitcdH1cbitcdGtmcmVlKHJjdV90b3J0dXJlX25taV9ldmVudHMpO1xuK1x0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IE5VTEw7XG4rfVxuKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi9cbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKSB7IH1cbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2xlYW51cCh2b2lkKSB7IH1cbisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqL1xuK1xuIC8qXG4gICogUkNVIHRvcnR1cmUgcmVhZGVyIGZyb20gdGltZXIgaGFuZGxlci4gIERlcmVmZXJlbmNlcyByY3VfdG9ydHVyZV9jdXJyZW50LFxuICAqIGluY3JlbWVudGluZyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBwaXBlbGluZSBhcnJheS4gIFRoZVxuICAqIGNvdW50ZXIgaW4gdGhlIGVsZW1lbnQgc2hvdWxkIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAxLCBvdGhlcndpc2UsIHRoZVxuICAqIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyBicm9rZW4uXG4gICovXG4rXG4gc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnVudXNlZClcbiB7XG4gXHRXQVJOX09OX09OQ0UoIWluX3NlcnZpbmdfc29mdGlycSgpKTtcbkBAIC0zMDQ3LDYgKzMxMzgsOSBAQCByY3VfdG9ydHVyZV9zdGF0c19wcmludCh2b2lkKVxuIFx0XHRkYXRhX3JhY2Uobl9iYXJyaWVyX2F0dGVtcHRzKSxcbiBcdFx0ZGF0YV9yYWNlKG5fcmN1X3RvcnR1cmVfYmFycmllcl9lcnJvcikpO1xuIFx0cHJfY29udChcInJlYWQtZXhpdHM6ICVsZCBcIiwgZGF0YV9yYWNlKG5fcmVhZF9leGl0cykpOyAvLyBTdGF0aXN0aWMuXG4rXHRwcl9jb250KFwibm1pLWNhbGxzOiAlbGQgbm1pLWNiczogJWxkIFwiLFxuK1x0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxuK1x0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XG4gXHRwcl9jb250KFwibm9jYi10b2dnbGVzOiAlbGQ6JWxkIFwiLFxuIFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fbm9jYl9vZmZsb2FkKSwgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX25vY2JfZGVvZmZsb2FkKSk7XG4gXHRwcl9jb250KFwiZ3B3cmFwczogJWxkXFxuXCIsIG5fZ3B3cmFwcyk7XG5AQCAtNDMyNSw2ICs0NDE5LDggQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxuIFx0XHRrZnJlZShyZWFkZXJfdGFza3MpO1xuIFx0XHRyZWFkZXJfdGFza3MgPSBOVUxMO1xuIFx0fVxuK1x0LyogRGlzYWJsZSB0aGUgcGVyZiBjb3VudGVycyAoYW5kIHRodXMgdGhlIE5NSSAtXHUwMDNlY2FsbCgpIGZpcmluZykgbm93LiAqL1xuK1x0cmN1X3RvcnR1cmVfbm1pX2NsZWFudXAoKTtcbiBcdGtmcmVlKHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoayk7XG4gXHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGsgPSBOVUxMO1xuIFxuQEAgLTQzNTQsNiArNDQ1MCwyMCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXG4gXHRcdHByX2luZm8oXCIlczogSW52b2tpbmcgJXBTKCkuXFxuXCIsIF9fZnVuY19fLCBjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIpO1xuIFx0XHRjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIoKTtcbiBcdH1cbitcbitcdC8qXG4rXHQgKiBjYl9iYXJyaWVyKCkgYWJvdmUgZHJhaW5lZCBldmVyeSBkZWZlcnJlZCBOTUkgLVx1MDAzZWNhbGwoKSBjYWxsYmFjaywgc28gdGhlXG4rXHQgKiBjb3VudCBpc3N1ZWQgZnJvbSBOTUkgbXVzdCBlcXVhbCB0aGUgY291bnQgaW52b2tlZDsgYSBtaXNtYXRjaCBtZWFucyBhXG4rXHQgKiBjYWxsYmFjayB3YXMgbG9zdC5cbitcdCAqL1xuK1x0aWYgKGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCkgIT1cbitcdCAgICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSkge1xuK1x0XHRwcl9hbGVydChcIiVzOiBOTUkgLVx1MDAzZWNhbGwoKSBsb3N0IGEgY2FsbGJhY2s6IGlzc3VlZCAlbGQgaW52b2tlZCAlbGRcXG5cIixcbitcdFx0XHQgX19mdW5jX18sIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksXG4rXHRcdFx0IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpKTtcbitcdFx0YXRvbWljX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX2Vycm9yKTtcbitcdH1cbitcbiBcdGlmIChjdXJfb3BzLVx1MDAzZWNsZWFudXAgIT0gTlVMTClcbiBcdFx0Y3VyX29wcy1cdTAwM2VjbGVhbnVwKCk7XG4gXG5AQCAtNDc4Niw2ICs0ODk2LDggQEAgcmN1X3RvcnR1cmVfaW5pdCh2b2lkKVxuIFx0XHRmaXJzdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gdW53aW5kO1xuIFx0fVxuK1x0LyogQXJtIHRoZSBwZXItQ1BVIHBlcmYgY291bnRlcnMgdGhhdCBkcml2ZSAtXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAqL1xuK1x0cmN1X3RvcnR1cmVfbm1pX2luaXQoKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWFscmVhZGVyczsgaSsrKSB7XG4gXHRcdHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoa1tpXS5ydGNfY2hrcmRyID0gLTE7XG4gXHRcdGZpcnN0ZXJyID0gdG9ydHVyZV9jcmVhdGVfa3RocmVhZChyY3VfdG9ydHVyZV9yZWFkZXIsICh2b2lkICopaSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbmluZGV4IDU1OGJhOGQzMTZkYjYuLmEwYTkxZjdmYzI1OGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuQEAgLTEwLDYgKzEwLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWVtcHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuQEAgLTQzLDYgKzQ0LDggQEAgc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdElOSVRfV09SSyhcdTAwMjZzc3AtXHUwMDNlc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3dvcmsuZW50cnkpO1xuIFx0aW5pdF9pcnFfd29yayhcdTAwMjZzc3AtXHUwMDNlc3JjdV9pcnFfd29yaywgc3JjdV90aW55X2lycV93b3JrKTtcbitcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKTtcbitcdGluaXRfaXJxX3dvcmsoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2l3LCBzcmN1X2RlZmVyX2RyYWluKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC04Niw2ICs4OSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7XG4gdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIHtcbiBcdFdBUk5fT04oc3JjdV9yZWFkZXJzX2FjdGl2ZShzc3ApKTtcbitcdC8qIFJlLWlzc3VlIGFueSBkZWZlcnJlZCBjYWxsYmFja3Mgc28gLVx1MDAzZXNyY3VfY2JfaGVhZCBzZWVzIHRoZW0gYmVsb3cuICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbitcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuIFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlc3JjdV9pcnFfd29yayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3dvcmspO1xuIFx0V0FSTl9PTihzc3AtXHUwMDNlc3JjdV9ncF9ydW5uaW5nKTtcbkBAIC0yMTMsMTEgKzIxOSwxMSBAQCBzdGF0aWMgdm9pZCBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB9XG4gXG4gLypcbi0gKiBFbnF1ZXVlIGFuIFNSQ1UgY2FsbGJhY2sgb24gdGhlIHNwZWNpZmllZCBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUsXG4tICogaW5pdGlhdGluZyBncmFjZS1wZXJpb2QgcHJvY2Vzc2luZyBpZiBpdCBpcyBub3QgYWxyZWFkeSBydW5uaW5nLlxuKyAqIEVucXVldWUgQHJocCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHNyY3VfZGVmZXJfZHJhaW4oKSB0b1xuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXG4gICovXG4tdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuLVx0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4rc3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbitcdFx0XHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuQEAgLTIzMSw2ICsyMzcsNDYgQEAgdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuIFx0c3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwKTtcbiBcdHByZWVtcHRfZW5hYmxlKCk7XG4gfVxuK1xuKy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXG4rc3RhdGljIGJvb2wgc3JjdV9kZWZlcl9kcmFpbmluZztcbitcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbit7XG4rXHRzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3Vfc3RydWN0LCBkZWZlcl9pdyk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4rXG4rXHQvKiBDYWxsYmFja3MgYXJlIHVub3JkZXJlZCwgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuICovXG4rXHRzcmN1X2RlZmVyX2RyYWluaW5nID0gdHJ1ZTtcbitcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKSkge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKnJocCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xuK1xuK1x0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jKTtcbitcdH1cbitcdHNyY3VfZGVmZXJfZHJhaW5pbmcgPSBmYWxzZTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9kZWZlcl9kcmFpbik7XG4rXG4rdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuK1x0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4re1xuK1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuK1x0XHQvKiBBIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkgZHVyaW5nIHRoZSBkcmFpbiB3b3VsZCBsaXZlbG9jayBpdC4gKi9cbitcdFx0aWYgKHNyY3VfZGVmZXJfZHJhaW5pbmcgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuK1x0XHRcdFdBUk5fT05DRSgxLCBcImNhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCIpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRyaHAtXHUwMDNlZnVuYyA9IGZ1bmM7XG4rXHRcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCBcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKSlcbitcdFx0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbitcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSk7XG4rXG4rXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMpO1xuK31cbiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3NyY3UpO1xuIFxuIC8qXG5AQCAtMjYwLDYgKzMwNiwxNSBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xuIFxuKy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBmb3IgYWxsIGluLWZsaWdodCBvbmVzLiAqL1xuK3ZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuK3tcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRpcnFfd29ya19zeW5jKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9pdyk7XG4rXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XG4rXG4gLypcbiAgKiBnZXRfc3RhdGVfc3luY2hyb25pemVfc3JjdSAtIFByb3ZpZGUgYW4gZW5kLW9mLWdyYWNlLXBlcmlvZCBjb29raWVcbiAgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcbmluZGV4IDMwNDExMjY3NGU4YTIuLjI2Njk1OTRhNjQwMmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJjcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWVtcHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NtcC5oXHUwMDNlXG5AQCAtNzksNiArODAsNDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19zcmN1KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gc3RhdGljIHZvaWQgc3JjdV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspO1xuIHN0YXRpYyB2b2lkIHNyY3VfZGVsYXlfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuIFxuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4rXG4rLypcbisgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLCBzaGFyZWQgYnkgZXZlcnkgc3JjdV9zdHJ1Y3QuICBBIGRlZmVycmVkXG4rICogY2FsbGJhY2sgaXMgc3RhZ2VkIG9uIGl0cyBzcmN1X2RhdGEncyAtXHUwMDNlZGVmZXJfY2JzOyB0aGF0IHNyY3VfZGF0YSBpcyBjaGFpbmVkXG4rICogdmlhIC1cdTAwM2VkZWZlcl9saW5rIG9udG8gLVx1MDAzZWxpc3QsIHdoaWNoIHRoZSBpcnFfd29yayB3YWxrcy5cbisgKi9cbitzdHJ1Y3Qgc3JjdV9kZWZlciB7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZFx0bGlzdDtcbitcdHN0cnVjdCBpcnFfd29ya1x0XHRpdztcbitcdHJhd19zcGlubG9ja190XHRcdGxvY2s7XG4rfTtcbitcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNyY3VfZGVmZXIsIHNyY3VfZGVmZXIpID0ge1xuK1x0LmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoc3JjdV9kZWZlci5sb2NrKSxcbitcdC5pdyA9IElSUV9XT1JLX0lOSVRfSEFSRChzcmN1X2RlZmVyX2RyYWluKSxcbit9O1xuK1xuKy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXG4rc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIHNyY3VfZGVmZXJfZHJhaW5pbmcpO1xuK1xuKy8qXG4rICogRmx1c2ggcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgc3JjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uXG4rICogV2FpdCBvdXQgYW4gb25saW5lIENQVSdzIGlycV93b3JrOyBkcmFpbiBhbiBvZmZsaW5lIENQVSdzIGxpc3QgZGlyZWN0bHksIGFzXG4rICogaXRzIGlycV93b3JrIG1heSBuZXZlciBydW4gYWdhaW4uXG4rICovXG4rc3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKVxuK3tcbitcdGludCBjcHU7XG4rXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybjtcbitcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbitcdFx0aWYgKGNwdV9vbmxpbmUoY3B1KSlcbitcdFx0XHRpcnFfd29ya19zeW5jKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XG4rXHRcdGVsc2VcbitcdFx0XHRzcmN1X2RlZmVyX2RyYWluKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogSW5pdGlhbGl6ZSBTUkNVIHBlci1DUFUgZGF0YS4gIE5vdGUgdGhhdCBzdGF0aWNhbGx5IGFsbG9jYXRlZFxuICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZXMgbWlnaHQgYWxyZWFkeSBoYXZlIHNyY3VfcmVhZF9sb2NrKCkgYW5kXG5AQCAtMTA3LDYgKzE0OSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3NyY3Vfc3RydWN0X2RhdGEoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRcdHNkcC1cdTAwM2VjcHUgPSBjcHU7XG4gXHRcdElOSVRfV09SSyhcdTAwMjZzZHAtXHUwMDNld29yaywgc3JjdV9pbnZva2VfY2FsbGJhY2tzKTtcbiBcdFx0dGltZXJfc2V0dXAoXHUwMDI2c2RwLVx1MDAzZWRlbGF5X3dvcmssIHNyY3VfZGVsYXlfdGltZXIsIDApO1xuK1x0XHQvKlxuK1x0XHQgKiAtXHUwMDNlZGVmZXJfY2JzIGFuZCAtXHUwMDNlZGVmZXJfbGluayBhcmUgdmFsaWQgd2hlbiB6ZXJvZWQgYW5kIGFyZSBub3RcbitcdFx0ICogcmVpbml0aWFsaXplZCBoZXJlLCBsZXN0IHdlIGNsb2JiZXIgY2FsbGJhY2tzIGEgcmVlbnRyYW50XG4rXHRcdCAqIGNhbGxfc3JjdSgpIGFscmVhZHkgc3RhZ2VkLiAgU2VlIF9fY2FsbF9zcmN1KCkuXG4rXHRcdCAqL1xuIFx0XHRzZHAtXHUwMDNlc3NwID0gc3NwO1xuIFx0fVxuIH1cbkBAIC02OTUsNyArNzQyLDEyIEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdFx0cmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovXG4gXHRpZiAoV0FSTl9PTihzcmN1X3JlYWRlcnNfYWN0aXZlKHNzcCkpKVxuIFx0XHRyZXR1cm47IC8qIEp1c3QgbGVhayBpdCEgKi9cbi1cdC8qIFdhaXQgZm9yIGlycV93b3JrIHRvIGZpbmlzaCBmaXJzdCBhcyBpdCBtYXkgcXVldWUgYSBuZXcgd29yay4gKi9cbitcdC8qXG4rXHQgKiBEcmFpbiBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHN5bmNpbmcgLVx1MDAzZWlycV93b3JrOiByZS1pc3N1aW5nIG9uZSBjYW5cbitcdCAqIHN0YXJ0IGEgZ3JhY2UgcGVyaW9kIGFuZCByZS1xdWV1ZSAtXHUwMDNlaXJxX3dvcmssIHdoaWNoIHRoZW4gc2NoZWR1bGVzXG4rXHQgKiAtXHUwMDNld29yaywgc28gYm90aCBtdXN0IGJlIHdhaXRlZCBvdXQgYWZ0ZXIgdGhlIGRyYWluLlxuK1x0ICovXG4rXHRzcmN1X2RlZmVyX2ZsdXNoKCk7XG4gXHRpcnFfd29ya19zeW5jKFx1MDAyNnN1cC1cdTAwM2VpcnFfd29yayk7XG4gXHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c3VwLVx1MDAzZXdvcmspO1xuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuQEAgLTE0MTAsOCArMTQ2MiwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCxcbiAgKiBzcmN1X3JlYWRfbG9jaygpLCBhbmQgc3JjdV9yZWFkX3VubG9jaygpIHRoYXQgYXJlIGFsbCBwYXNzZWQgdGhlIHNhbWVcbiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUuXG4gICovXG4tc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuLVx0XHRcdHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcbisvKlxuKyAqIFRoZSBzcmN1X2NibGlzdCBhbmQgc3JjdV9ub2RlIHRyZWUgYXJlIG9ubHkgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkXG4rICogKHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkgZW5xdWV1ZXMgdW5kZXIgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgYW5kIG1heSB3YWxrXG4rICogdGhlIHRyZWUpLiAgTGlrZSBjYWxsX3JjdSgpLCBfX2NhbGxfc3JjdSgpIGRlZmVycyB3aGVuIGludGVycnVwdHMgYXJlIGFscmVhZHlcbisgKiBkaXNhYmxlZCwgc28gYSByZS1lbnRyYW50IGNhbGxfc3JjdSgpIC0tIGUuZy4gY2FsbF9yY3VfdGFza3NfdHJhY2UoKSBmcm9tIGFcbisgKiBCUEYgcHJvZ3JhbSAtLSBjYW5ub3QgY29ycnVwdCB0aGUgbGlzdCBvciBkZWFkbG9jay5cbisgKi9cbitzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuK1x0XHRcdCAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXG4ge1xuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHtcbiBcdFx0LyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi9cbkBAIC0xNDIzLDYgKzE0ODIsODEgQEAgc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuIFx0KHZvaWQpc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwLCByaHAsIGRvX25vcm0pO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4rXHRcdFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuK3tcbitcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbitcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tXG4rXHRcdCAqIGluc2lkZSBzcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZVxuK1x0XHQgKiBkcmFpbiwgc28gZHJvcCB0aGUgY2FsbGJhY2s7IGFuIE5NSSBjYW5ub3QgbG9vcCwgc28gbGV0IGl0IGluLlxuK1x0XHQgKi9cbitcdFx0aWYgKHRoaXNfY3B1X3JlYWQoc3JjdV9kZWZlcl9kcmFpbmluZykgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuK1x0XHRcdFdBUk5fT05DRSgxLCBcImNhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCIpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRzZHAgPSB0aGlzX2NwdV9wdHIoc3NwLVx1MDAzZXNkYSk7XG4rXHRcdHJocC1cdTAwM2VmdW5jID0gZnVuYztcbitcdFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpKSB7XG4rXHRcdFx0LyogRmlyc3QgZGVmZXJyYWwgb24gdGhpcyBzcmN1X2RhdGE6IGNoYWluIGl0IGZvciB0aGUgZHJhaW4uICovXG4rXHRcdFx0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSB0aGlzX2NwdV9wdHIoXHUwMDI2c3JjdV9kZWZlcik7XG4rXG4rXHRcdFx0c2RwLVx1MDAzZXNzcCA9IHNzcDtcbitcdFx0XHRpZiAobGxpc3RfYWRkKFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9saW5rLCBcdTAwMjZzbmRwLVx1MDAzZWxpc3QpKVxuK1x0XHRcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2c25kcC1cdTAwM2Vpdyk7XG4rXHRcdH1cbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXG4rXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuK1xuK1x0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jLCBkb19ub3JtKTtcbit9XG4rXG4rLypcbisgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc28gdGhleSBjYW5ub3QgZGVmZXJcbisgKiBhZ2Fpbi4gIC1cdTAwM2Vsb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGUgaXJxX3dvcmssIHNyY3VfZGVmZXJfZmx1c2goKSBhbmRcbisgKiBzcmN1X29mZmxpbmVfZHJhaW4oKS5cbisgKi9cbitzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4re1xuK1x0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqc25vZGUsICpzbmV4dDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHR0aGlzX2NwdV93cml0ZShzcmN1X2RlZmVyX2RyYWluaW5nLCB0cnVlKTtcbitcdGxsaXN0X2Zvcl9lYWNoX3NhZmUoc25vZGUsIHNuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnNuZHAtXHUwMDNlbGlzdCkpIHtcbitcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwID0gY29udGFpbmVyX29mKHNub2RlLCBzdHJ1Y3Qgc3JjdV9kYXRhLCBkZWZlcl9saW5rKTtcbitcdFx0c3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBzZHAtXHUwMDNlc3NwO1xuK1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqY25vZGUsICpjbmV4dDtcbitcbitcdFx0Y25vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpO1xuK1x0XHRsbGlzdF9mb3JfZWFjaF9zYWZlKGNub2RlLCBjbmV4dCwgY25vZGUpIHtcbitcdFx0XHRzdHJ1Y3QgcmN1X2hlYWQgKnJocCA9IChzdHJ1Y3QgcmN1X2hlYWQgKiljbm9kZTtcbitcbitcdFx0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jLCB0cnVlKTtcbitcdFx0fVxuK1x0fVxuK1x0dGhpc19jcHVfd3JpdGUoc3JjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rfVxuK1xuKy8qXG4rICogRHJhaW4gQGNwdSdzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcyBmcm9tIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKVxuKyAqIG9uY2UgQGNwdSBpcyBkZWFkLiAgT25lIHBhc3MgY292ZXJzIGV2ZXJ5IHNyY3Vfc3RydWN0LCBhbmQgdGhlIHJlLWlzc3VlIGxhbmRzXG4rICogb24gdGhlIGN1cnJlbnQgQ1BVLlxuKyAqL1xuK3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpXG4re1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXHRzcmN1X2RlZmVyX2RyYWluKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KS5pdyk7XG4rfVxuK1xuIC8qKlxuICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZFxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IGluIHF1ZXVlIHRoZSBjYWxsYmFja1xuQEAgLTE2NzcsOSArMTgxMSwxNyBAQCB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB7XG4gXHRpbnQgY3B1O1xuIFx0aW50IGlkeDtcbi1cdHVuc2lnbmVkIGxvbmcgcyA9IHJjdV9zZXFfc25hcChcdTAwMjZzc3AtXHUwMDNlc3JjdV9zdXAtXHUwMDNlc3JjdV9iYXJyaWVyX3NlcSk7XG4rXHR1bnNpZ25lZCBsb25nIHM7XG4gXG4gXHRjaGVja19pbml0X3NyY3Vfc3RydWN0KHNzcCk7XG4rXG4rXHQvKlxuK1x0ICogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gIFRoZVxuK1x0ICogc2hhcmVkIGlycV93b3JrIG1heSBhbHNvIGRyYWluIG90aGVyIHNyY3Vfc3RydWN0cycsIHdoaWNoIGlzIGhhcm1sZXNzLlxuK1x0ICovXG4rXHRzcmN1X2RlZmVyX2ZsdXNoKCk7XG4rXG4rXHRzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9tdXRleCk7XG4gXHRpZiAocmN1X3NlcV9kb25lKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxLCBzKSkge1xuIFx0XHRzbXBfbWIoKTsgLyogRm9yY2Ugb3JkZXJpbmcgZm9sbG93aW5nIHJldHVybi4gKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RpbnkuYyBiL2tlcm5lbC9yY3UvdGlueS5jXG5pbmRleCBkY2NjY2Q2YmU5NDExLi41NzM2Yjk2NGQ4ZWUxIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90aW55LmNcbisrKyBiL2tlcm5lbC9yY3UvdGlueS5jXG5AQCAtMTEsNiArMTEsOCBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbkBAIC00Miw4ICs0NCw4NiBAQCBzdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0ge1xuIFx0LmdwX3NlcVx0XHQ9IDAgLSAzMDBVTCxcbiB9O1xuIFxuKy8qXG4rICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKVxuKyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIHN0YWdlcyB0aGUgY2FsbGJhY2sgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXRcbisgKiBhbiBpcnFfd29yayByZS1pc3N1ZXMgbGF0ZXIuICBPbmUgZ2xvYmFsIGxpc3QgYW5kIGlycV93b3JrIHN1ZmZpY2UsIGFzIFRpbnlcbisgKiBSQ1UgaXMgdW5pcHJvY2Vzc29yLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbitzdGF0aWMgTExJU1RfSEVBRChyY3VfZGVmZXJfbGlzdCk7XG4rc3RhdGljIERFRklORV9JUlFfV09SSyhyY3VfZGVmZXJfaXcsIHJjdV9kZWZlcl9kcmFpbik7XG4rc3RhdGljIGJvb2wgcmN1X2RlZmVyX2RyYWluaW5nO1xuK1xuKy8qXG4rICogRW5xdWV1ZSBAaGVhZCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpIHRvXG4rICogcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsIGNvbmRpdGlvbi5cbisgKi9cbitzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4re1xuK1x0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xuK1x0XHRpZiAoYXRvbWljX2luY19yZXR1cm4oXHUwMDI2ZG91YmxlZnJlZXMpIFx1MDAzYyA0KSB7XG4rXHRcdFx0cHJfZXJyKFwiJXMoKTogRG91YmxlLWZyZWVkIENCICVwLVx1MDAzZSVwUygpISEhICBcIiwgX19mdW5jX18sIGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4rXHRcdFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xuK1x0XHR9XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4rXHRoZWFkLVx1MDAzZW5leHQgPSBOVUxMO1xuK1xuK1x0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuK1x0KnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkO1xuK1x0cmN1X2N0cmxibGsuY3VydGFpbCA9IFx1MDAyNmhlYWQtXHUwMDNlbmV4dDtcbitcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbitcbitcdGlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7XG4rXHRcdC8qIGZvcmNlIHNjaGVkdWxpbmcgZm9yIHJjdV9xcygpICovXG4rXHRcdHJlc2NoZWRfY3B1KDApO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbit7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4rXG4rXHQvKiBDYWxsYmFja3MgYXJlIHVub3JkZXJlZCwgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuICovXG4rXHRyY3VfZGVmZXJfZHJhaW5pbmcgPSB0cnVlO1xuK1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJjdV9kZWZlcl9saXN0KSkge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbitcbitcdFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cdTAwM2VmdW5jKTtcbitcdH1cbitcdHJjdV9kZWZlcl9kcmFpbmluZyA9IGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4re1xuK1x0LyogQSByZS1lbnRyYW50IGNhbGxfcmN1KCkgZHVyaW5nIHRoZSBkcmFpbiB3b3VsZCBsaXZlbG9jayBpdDsgZHJvcCBpdC4gKi9cbitcdGlmIChyY3VfZGVmZXJfZHJhaW5pbmcgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuK1x0XHRXQVJOX09OQ0UoMSwgXCJjYWxsX3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRoZWFkLVx1MDAzZWZ1bmMgPSBmdW5jO1xuK1x0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcdTAwMjZyY3VfZGVmZXJfbGlzdCkpXG4rXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnJjdV9kZWZlcl9pdyk7XG4rfVxuK1xuKy8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gKi9cbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZClcbit7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybjtcbitcdGlycV93b3JrX3N5bmMoXHUwMDI2cmN1X2RlZmVyX2l3KTtcbit9XG4rXG4gdm9pZCByY3VfYmFycmllcih2b2lkKVxuIHtcbitcdC8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgZmlyc3QuICovXG4rXHRyY3VfZGVmZXJfZmx1c2goKTtcbiBcdHdhaXRfcmN1X2dwKGNhbGxfcmN1X2h1cnJ5KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChyY3VfYmFycmllcik7XG5AQCAtMTU3LDI5ICsyMzcsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTtcbiAgKi9cbiB2b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4tXHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVxuLVx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4tXHRcdGlmIChhdG9taWNfaW5jX3JldHVybihcdTAwMjZkb3VibGVmcmVlcykgXHUwMDNjIDQpIHtcbi1cdFx0XHRwcl9lcnIoXCIlcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtXHUwMDNlJXBTKCkhISEgIFwiLCBfX2Z1bmNfXywgaGVhZCwgaGVhZC1cdTAwM2VmdW5jKTtcbi1cdFx0XHRtZW1fZHVtcF9vYmooaGVhZCk7XG4tXHRcdH1cbitcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbitcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4tXHRoZWFkLVx1MDAzZW5leHQgPSBOVUxMO1xuLVxuLVx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuLVx0KnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkO1xuLVx0cmN1X2N0cmxibGsuY3VydGFpbCA9IFx1MDAyNmhlYWQtXHUwMDNlbmV4dDtcbi1cdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbitcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuK1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbiBcbi1cdGlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7XG4tXHRcdC8qIGZvcmNlIHNjaGVkdWxpbmcgZm9yIHJjdV9xcygpICovXG4tXHRcdHJlc2NoZWRfY3B1KDApO1xuLVx0fVxuK1x0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuYyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5pbmRleCA5Njg0OGZjMWYwMmI4Li5lMjFlYjU1MWIxMTBlIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcbisrKyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5AQCAtMjQsNiArMjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2RlYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ubWkuaFx1MDAzZVxuQEAgLTMxNDgsMjEgKzMxNDksMjggQEAgc3RhdGljIHZvaWQgY2hlY2tfY2Jfb3ZsZChzdHJ1Y3QgcmN1X2RhdGEgKnJkcClcbiBcdHJhd19zcGluX3VubG9ja19yY3Vfbm9kZShybnApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZFxuLV9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuKy8qXG4rICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKVxuKyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIChzZWUgc2hvdWxkX3JjdV9kZWZlcigpKSBzdGFnZXMgdGhlIGNhbGxiYWNrXG4rICogb24gYSBwZXItQ1BVIGxsaXN0IHRoYXQgYW4gaXJxX3dvcmsgcmUtaXNzdWVzIG9uY2UgaW50ZXJydXB0cyBhcmUgb24uXG4rICovXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xuK1xuKy8qIFNldCB3aGlsZSByY3VfZGVmZXJfZHJhaW4oKSByZS1pc3N1ZXMsIHRvIGNhdGNoIGEgcmUtZW50cmFudCBjYWxsX3JjdSgpLiAqL1xuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCByY3VfZGVmZXJfZHJhaW5pbmcpO1xuK1xuKy8qXG4rICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSdzIHJjdV9zZWdjYmxpc3QuICBBbHNvIGNhbGxlZCBieSByY3VfZGVmZXJfZHJhaW4oKVxuKyAqIHRvIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbFxuKyAqIGNvbmRpdGlvbi4gIEVpdGhlciBjYWxsZXIgbWF5IGhhdmUgaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuIHtcbiBcdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRib29sIGxhenk7XG4gXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcDtcbiBcbi1cdC8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovXG4tXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcdTAwMjYgKHNpemVvZih2b2lkICopIC0gMSkpO1xuLVxuLVx0LyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqL1xuLVx0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXG4tXHRcdHJldHVybjtcbi1cbiBcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9yY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suXG5AQCAtMzIwNiw2ICszMjE0LDkyIEBAIF9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbiBcbisvKlxuKyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdCBkZWZlclxuKyAqIGFnYWluLiAgLVx1MDAzZWRlZmVyX2xvY2sgc2VyaWFsaXplcyB0aGUgZHJhaW5lcnM6IHRoaXMgQ1BVJ3MgaXJxX3dvcmssXG4rICogcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS5cbisgKi9cbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbit7XG4rXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHJjdV9kYXRhLCBkZWZlcl93b3JrKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlLCAqbmV4dDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcbitcdHRoaXNfY3B1X3dyaXRlKHJjdV9kZWZlcl9kcmFpbmluZywgdHJ1ZSk7XG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2hlYWQpKSB7XG4rXHRcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xuK1xuK1x0XHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBoZWFkLVx1MDAzZWZ1bmMsIGZhbHNlKTtcbitcdH1cbitcdHRoaXNfY3B1X3dyaXRlKHJjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4rLyogU3RhZ2UgQGhlYWQgZm9yIHRoaXMgQ1BVJ3MgaXJxX3dvcmsgd2hlbiBjYWxsX3JjdSgpIGNhbm5vdCBlbnF1ZXVlIG5vdy4gKi9cbitzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4re1xuK1x0c3RydWN0IHJjdV9kYXRhICpyZHAgPSB0aGlzX2NwdV9wdHIoXHUwMDI2cmN1X2RhdGEpO1xuK1xuK1x0LypcbitcdCAqIEluc3RydW1lbnRhdGlvbiBvbiB0aGUgZW5xdWV1ZSBwYXRoIGNhbiByZS1lbnRlciBoZXJlIGZyb20gaW5zaWRlXG4rXHQgKiByY3VfZGVmZXJfZHJhaW4oKS4gIFJlLXF1ZXVpbmcgd291bGQgbGl2ZWxvY2sgdGhlIGRyYWluLCBzbyBkcm9wIHRoZVxuK1x0ICogY2FsbGJhY2s7IGFuIE5NSSBpcyBvbmUtc2hvdCBhbmQgY2Fubm90IGxvb3AsIHNvIGxldCBpdCB0aHJvdWdoLlxuK1x0ICovXG4rXHRpZiAodGhpc19jcHVfcmVhZChyY3VfZGVmZXJfZHJhaW5pbmcpIFx1MDAyNlx1MDAyNiAhaW5fbm1pKCkpIHtcbitcdFx0V0FSTl9PTkNFKDEsIFwiY2FsbF9yY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbitcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2hlYWQpKVxuK1x0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZyZHAtXHUwMDNlZGVmZXJfd29yayk7XG4rfVxuK1xuKy8qXG4rICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmdcbisgKiByY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLiAgVGhpcyBydW5zIGJlZm9yZSByY3VfYmFycmllcigpIHNjYW5zIHRoZVxuKyAqIGxpc3RzLiAgQW4gb25saW5lIENQVSdzIG93biBpcnFfd29yayByZS1pc3N1ZXMgaXRzIGNhbGxiYWNrcywgc28gd2FpdCBpdCBvdXQ7XG4rICogYW4gb2ZmbGluZSBDUFUncyBpcnFfd29yayBtYXkgbmV2ZXIgcnVuIGFnYWluLCBzbyBkcmFpbiBpdHMgbGlzdCBkaXJlY3RseVxuKyAqIG9udG8gdGhpcyBDUFUgaW5zdGVhZC5cbisgKi9cbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZClcbit7XG4rXHRpbnQgY3B1O1xuK1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4rXHRcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIoXHUwMDI2cmN1X2RhdGEsIGNwdSk7XG4rXG4rXHRcdGlmIChjcHVfb25saW5lKGNwdSkpXG4rXHRcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZyZHAtXHUwMDNlZGVmZXJfd29yayk7XG4rXHRcdGVsc2VcbitcdFx0XHRyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZFxuK19fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuK3tcbitcdC8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovXG4rXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcdTAwMjYgKHNpemVvZih2b2lkICopIC0gMSkpO1xuK1xuK1x0LyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqL1xuK1x0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbitcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuK1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbitcbitcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMsIGxhenlfaW4pO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX1JDVV9MQVpZXG4gc3RhdGljIGJvb2wgZW5hYmxlX3JjdV9sYXp5IF9fcmVhZF9tb3N0bHkgPSAhSVNfRU5BQkxFRChDT05GSUdfUkNVX0xBWllfREVGQVVMVF9PRkYpO1xuIG1vZHVsZV9wYXJhbShlbmFibGVfcmN1X2xhenksIGJvb2wsIDA0NDQpO1xuQEAgLTM4OTYsOCArMzk5MCwxMiBAQCB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dW5zaWduZWQgbG9uZyBnc2VxO1xuIFx0c3RydWN0IHJjdV9kYXRhICpyZHA7XG4tXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpO1xuK1x0dW5zaWduZWQgbG9uZyBzO1xuIFxuK1x0LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gKi9cbitcdHJjdV9kZWZlcl9mbHVzaCgpO1xuK1xuK1x0cyA9IHJjdV9zZXFfc25hcChcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XG4gXHRyY3VfYmFycmllcl90cmFjZShUUFMoXCJCZWdpblwiKSwgLTEsIHMpO1xuIFxuIFx0LyogVGFrZSBtdXRleCB0byBzZXJpYWxpemUgY29uY3VycmVudCByY3VfYmFycmllcigpIHJlcXVlc3RzLiAqL1xuQEAgLTQyMzEsNiArNDMyOSwxMCBAQCByY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpXG4gXHRyZHAtXHUwMDNlcmN1X29ubF9ncF9zdGF0ZSA9IFJDVV9HUF9DTEVBTkVEO1xuIFx0cmRwLVx1MDAzZWxhc3Rfc2NoZWRfY2xvY2sgPSBqaWZmaWVzO1xuIFx0cmRwLVx1MDAzZWNwdSA9IGNwdTtcbitcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfaGVhZCk7XG4rXHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2spO1xuK1x0LyogSGFyZCBpcnFfd29yayBzbyB0aGUgcmUtaXNzdWUgcnVucyBwcm9tcHRseS4gKi9cbitcdHJkcC1cdTAwM2VkZWZlcl93b3JrID0gSVJRX1dPUktfSU5JVF9IQVJEKHJjdV9kZWZlcl9kcmFpbik7XG4gXHRyY3VfYm9vdF9pbml0X25vY2JfcGVyY3B1X2RhdGEocmRwKTtcbiB9XG4gXG5AQCAtNDUyOCw2ICs0NjMwLDE2IEBAIHZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KVxuIFx0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihcdTAwMjZyY3VfZGF0YSwgY3B1KTtcbiBcdGJvb2wgbmVlZHdha2U7XG4gXG4rXHQvKlxuK1x0ICogQ2FsbGJhY2tzIHRoZSBvdXRnb2luZyBDUFUgZGVmZXJyZWQgbGF0ZSBpbiB0aGUgb2ZmbGluZSBwYXRoIChwYXN0IHRoZVxuK1x0ICogcG9pbnQgaXRzIGlycV93b3JrIGNhbiBydW4pIHNpdCBvbiAtXHUwMDNlZGVmZXJfaGVhZCwgd2hpY2ggdGhlIC1cdTAwM2VjYmxpc3RcbitcdCAqIG1pZ3JhdGlvbiBiZWxvdyBkb2VzIG5vdCBjb3Zlci4gIERyYWluIHRoZW0gaGVyZSwgYmVmb3JlIHRoZSBlYXJseVxuK1x0ICogcmV0dXJuczsgdGhlIHJlLWlzc3VlIGxhbmRzIG9uIHRoaXMgQ1BVLlxuK1x0ICovXG4rXHRyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuK1x0LyogTGlrZXdpc2UgZm9yIHRoZSBvdXRnb2luZyBDUFUncyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3MuICovXG4rXHRzcmN1X29mZmxpbmVfZHJhaW4oY3B1KTtcbitcbiBcdGlmIChyY3VfcmRwX2lzX29mZmxvYWRlZChyZHApKVxuIFx0XHRyZXR1cm47XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmggYi9rZXJuZWwvcmN1L3RyZWUuaFxuaW5kZXggZWVkZmE0MzA1OWU4MC4uM2E4ZTE3MTM2YzVhNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvdHJlZS5oXG4rKysgYi9rZXJuZWwvcmN1L3RyZWUuaFxuQEAgLTIyOSw2ICsyMjksMTEgQEAgc3RydWN0IHJjdV9kYXRhIHtcbiBcdHN0cnVjdCByY3VfaGVhZCBiYXJyaWVyX2hlYWQ7XG4gXHRpbnQgZXhwX3dhdGNoaW5nX3NuYXA7XHRcdC8qIERvdWJsZS1jaGVjayBuZWVkIGZvciBJUEkuICovXG4gXG4rXHQvKiBEZWZlcnJhbCBvZiBhbiBOTUkvcmVlbnRyYW50IGNhbGxfcmN1KCk7IHNlZSBfX2NhbGxfcmN1X2NvbW1vbigpLiAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfaGVhZDtcbitcdHN0cnVjdCBpcnFfd29yayBkZWZlcl93b3JrO1xuK1x0cmF3X3NwaW5sb2NrX3QgZGVmZXJfbG9jaztcbitcbiBcdC8qIDUpIENhbGxiYWNrIG9mZmxvYWRpbmcuICovXG4gI2lmZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVcbiBcdHN0cnVjdCBzd2FpdF9xdWV1ZV9oZWFkIG5vY2JfY2Jfd3E7IC8qIEZvciBub2NiIGt0aHJlYWRzIHRvIHNsZWVwIG9uLiAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjZlY2Q5M2JlMzBmNFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuY1xuQEAgLTAsMCArMSw1OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogRXhlcmNpc2UgcmUtZW50cnkgaW50byBjYWxsX3NyY3UoKSBmcm9tIEJQRjsgc2VlIHByb2dzL3JjdV9yZWVudHJ5LmMuICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuKyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJyY3VfcmVlbnRyeS5za2VsLmhcIlxuK1xuK3N0YXRpYyBpbnQgc3lzX3BpZGZkX29wZW4ocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0cmV0dXJuIHN5c2NhbGwoX19OUl9waWRmZF9vcGVuLCBwaWQsIGZsYWdzKTtcbit9XG4rXG4rdm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpXG4re1xuK1x0c3RydWN0IHJjdV9yZWVudHJ5ICpza2VsO1xuK1x0aW50IGVyciwgcGlkZmQgPSAtMSwgbWFwX2ZkO1xuK1x0X191NjQgdmFsID0gMTtcbitcdGNwdV9zZXRfdCBzZXQ7XG4rXG4rXHRza2VsID0gcmN1X3JlZW50cnlfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZXJyID0gcmN1X3JlZW50cnlfX2F0dGFjaChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJza2VsX2F0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBLZWVwIHRoZSByZS1lbnRyeSBvbiBhIHNpbmdsZSBDUFUuICovXG4rXHRDUFVfWkVSTyhcdTAwMjZzZXQpO1xuK1x0Q1BVX1NFVCgwLCBcdTAwMjZzZXQpO1xuK1x0aWYgKHNjaGVkX3NldGFmZmluaXR5KDAsIHNpemVvZihzZXQpLCBcdTAwMjZzZXQpKVxuK1x0XHRwZXJyb3IoXCJzY2hlZF9zZXRhZmZpbml0eVwiKTtcbitcbitcdHBpZGZkID0gc3lzX3BpZGZkX29wZW4oZ2V0cGlkKCksIDApO1xuK1x0aWYgKCFBU1NFUlRfR0UocGlkZmQsIDAsIFwicGlkZmRfb3BlblwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRtYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMudGFza19zdGcpO1xuK1x0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkLCBcdTAwMjZ2YWwsIEJQRl9OT0VYSVNUKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJib290X2NyZWF0ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRhcmdldF9waWQgPSBzeXNjYWxsKF9fTlJfZ2V0dGlkKTtcbitcdGVyciA9IGJwZl9tYXBfZGVsZXRlX2VsZW0obWFwX2ZkLCBcdTAwMjZwaWRmZCk7XG4rXHRBU1NFUlRfT0soZXJyLCBcImJvb3RfZGVsZXRlXCIpO1xuK1xuK1x0LyogT25seSBUcmVlIFNSQ1UgZW5xdWV1ZXMgdmlhIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpOyBza2lwIGVsc2V3aGVyZS4gKi9cbitcdGlmICghc2tlbC1cdTAwM2Vic3MtXHUwMDNlaGl0cykge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlZW50ZXJlZCwgMSwgXCJyZWVudHJ5X2RlZmVycmVkXCIpO1xuK291dDpcbitcdGlmIChwaWRmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHBpZGZkKTtcbitcdHJjdV9yZWVudHJ5X19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDkyYTkyN2ZmNTFjMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmNcbkBAIC0wLDAgKzEsNDUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogUmUtZW50ZXIgY2FsbF9zcmN1KCkgZnJvbSBhIEJQRiBwcm9ncmFtLiAgZmVudHJ5IG9uIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpXG4rICogZmlyZXMgaW5zaWRlIGNhbGxfc3JjdSgpJ3MgZW5xdWV1ZSAocmVhY2hlZCBmcm9tIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKClcbisgKiB3aXRoIHRoZSBzcmN1X2RhdGEgLVx1MDAzZWxvY2sgaGVsZCk7IHRoZSBoYW5kbGVyIHRoZW4gY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKVxuKyAqIC0tIGl0c2VsZiBjYWxsX3NyY3UoKSBvbiByY3VfdGFza3NfdHJhY2Vfc3JjdV9zdHJ1Y3QgLS0gcmUtZW50ZXJpbmcgdGhlIHNhbWVcbisgKiBzcmN1X2RhdGEgb24gdGhlIHNhbWUgQ1BVLlxuKyAqL1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1RBU0tfU1RPUkFHRSk7XG4rXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4rfSB0YXNrX3N0ZyBTRUMoXCIubWFwc1wiKTtcbitcbitpbnQgdGFyZ2V0X3BpZDtcbitpbnQgaGl0cztcbitpbnQgcmVlbnRlcmVkO1xuK1xuK1NFQyhcImZlbnRyeS9yY3Vfc2VnY2JsaXN0X2VucXVldWVcIilcbitpbnQgQlBGX1BST0cocmVlbnRlcilcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjtcbitcbitcdGlmIChyZWVudGVyZWQgfHwgIXRhcmdldF9waWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Y3VyID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4rXHRpZiAoIWN1ciB8fCBjdXItXHUwMDNlcGlkICE9IHRhcmdldF9waWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogUmUtZW50ZXIgdmlhIGEgdGFzay1zdG9yYWdlIGRlbGV0ZSwgd2hpY2ggY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbitcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmhpdHMsIDEpO1xuK1x0YnBmX3Rhc2tfc3RvcmFnZV9nZXQoXHUwMDI2dGFza19zdGcsIGN1ciwgMCwgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKTtcbitcdGJwZl90YXNrX3N0b3JhZ2VfZGVsZXRlKFx1MDAyNnRhc2tfc3RnLCBjdXIpO1xuK1xuK1x0cmVlbnRlcmVkID0gMTtcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU3OjQ4LjQyNjk3NDg4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzMjcyNjE5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgUkNVL1NSQ1UgRGVmZXJyYWwgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCBpbnRyb2R1Y2VzIGRlZmVycmVkIGNhbGxiYWNrcyBpbiBSQ1UvU1JDVS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgeWVzLCB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSB0b3VjaGluZyBmdW5kYW1lbnRhbCBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSBSQ1UgYW5kIFNSQ1UsIGFuZCB0aGF0J3MgYWx3YXlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSBoYXZlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgdG9vLCBzaW5jZSB0aGVyZSBhcmUgbmV3IGZ1bmN0aW9ucyBiZWluZyBhZGRlZDogYHNyY3VfZGVmZXJfZHJhaW5gLCBgcmN1X2RlZmVyX2RyYWluYCwgYHNyY3Vfb2ZmbGluZV9kcmFpbmAsIGBjYWxsX3JjdV9kZWZlcmAsIGByY3VfZGVmZXJfZmx1c2hgLCBhbmQgYHNyY3VfZGVmZXJfZmx1c2hgLiBQbHVzLCBzZXZlcmFsIGV4aXN0aW5nIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQgbGlrZSBgY2FsbF9yY3VgLCBgY2FsbF9zcmN1YCwgYHJjdV9iYXJyaWVyYCwgYW5kIGBzcmN1X2JhcnJpZXJgLlxuXG5Ob3csIGJlZm9yZSBJIGNhbiByZWFsbHkgZ2V0IGludG8gZnV6emluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBjb21waWxlZC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBDT05GSUdfUkNVX0RFRkVSYCwgYnV0IGl0J3MgYSBgZGVmX2Jvb2xgLiBJdCBhcHBlYXJzIGl0IHdpbGwgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IGlmIGBIQVZFX05NSWAsIGBLUFJPQkVTYCwgYEZVTkNUSU9OX1RSQUNFUmAsIG9yIGBUUkFDRVBPSU5UU2AgYXJlIGVuYWJsZWQuIFNvLCB0byBlbnN1cmUgaXQncyBlbmFibGVkIGR1cmluZyBmdXp6aW5nLCBJIHNob3VsZCBwcm9iYWJseSBlbmFibGUgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGNvbmZpZyBvcHRpb25zLiBUaGUgS2NvbmZpZyBkb2N1bWVudGF0aW9uIHNheXMgdG8gbGlzdCB0aGUgZmxhZ3MgdGhhdCBuZWVkIHRvIGJlICpleHBsaWNpdGx5KiBlbmFibGVkLCBzbyBJIGRvbid0IHRoaW5rIEkgY2FuIGV4cGxpY2l0bHkgc2V0IGBSQ1VfREVGRVJgIGl0c2VsZjsgYnV0LCBzaW5jZSBpdCBoYXMgbm8gcHJvbXB0LCBJIGNhbid0IHNldCBpdCBkaXJlY3RseS4gU28sIEkgd2lsbCBuZWVkIHRvIGVuYWJsZSBlaXRoZXIgYEtQUk9CRVNgIG9yIGBUUkFDRVBPSU5UU2Agb3IgYEZVTkNUSU9OX1RSQUNFUmAgdG8gZW5zdXJlIGl0IGlzIHNlbGVjdGVkLiBBbHNvLCBzaW5jZSBgcmN1dG9ydHVyZS5jYCB1c2VzIGBDT05GSUdfUEVSRl9FVkVOVFNgLCBJJ2xsIG1ha2Ugc3VyZSB0byBlbmFibGUgdGhhdC4gQW5kIG9idmlvdXNseSBgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1RgIHRvIGVuYWJsZSB0aGUgbW9kdWxlLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSBzaG91bGQgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uOiB0aGUgbW9zdCBpbXBvcnRhbnQgYXJlIHRob3NlIGRpcmVjdGx5IGV4cG9zZWQgYXMgQVBJcyBvciBtb2RpZmllZCBieSB0aGUgcGF0Y2guIFNvLCBJJ20gdGhpbmtpbmc6XG5cbiogICBgc3JjdV9kZWZlcl9kcmFpbmAgKGFuZCBJIHNob3VsZCBjaGVjayBpdHMgdXNhZ2Ugc2luY2UgaXQgaGFzIGR1cGxpY2F0ZSBkZWZpbml0aW9ucyBiZXR3ZWVuIGBzcmN1dGlueS5jYCBhbmQgYHNyY3V0cmVlLmNgKVxuKiAgIGByY3VfZGVmZXJfZHJhaW5gIChjaGVjayBpZiBpdCdzIHN0YXRpYylcbiogICBgc3JjdV9vZmZsaW5lX2RyYWluYCAoc2VlbXMgbGlrZSBhbiBpbnRlcmVzdGluZyBvbmUpXG4qICAgYGNhbGxfc3JjdWAgKGRlZmluaXRlbHkgYW4gQVBJIGVudHJ5KVxuKiAgIGBjYWxsX3JjdWAgKGFnYWluLCBBUEkpXG4qICAgYHNyY3VfYmFycmllcmAgKGFub3RoZXIgQVBJIGVudHJ5KVxuKiAgIGByY3VfYmFycmllcmAgKGFuZCBhbm90aGVyKVxuXG5TbywgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBga2VybmVsL3JjdS9zcmN1dHJlZS5jYCBhbmQgYGtlcm5lbC9yY3UvdHJlZS5jYCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZC4gT2theSwgbm93IGxldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCBpZGVudGlmeWluZyBwb3RlbnRpYWwgZnV6emluZyBlbnRyeSBwb2ludHMgYW5kIHRlc3QgY2FzZXMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1ODowMi43NTQyMzk3NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0MzM0NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxpbnR8Ym9vbCkuKnNyY3VfZGVmZXJfZHJhaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3JjdS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS9zcmN1dGlueS5jPTI0Mj1zdGF0aWMgYm9vbCBzcmN1X2RlZmVyX2RyYWluaW5nO1xcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNDMtXFxua2VybmVsL3JjdS9zcmN1dGlueS5jOjI0NDp2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMjQ1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTg6MDMuMjk4NTgwNTEzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MzU2MTg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlNSQ1UgRHJhaW4gSW1wbGVtZW50YXRpb24gLSBBIFF1aWNrIE1lbnRhbCBOYXZpZ2F0aW9uKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBTUkNVIGRyYWluIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IHdoZXJlIHRoZSBkZWZlcnJlZCBhY3Rpb24gdG8gZHJhaW4gU1JDVSBpcyBoYW5kbGVkLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHdlbnQgdG8gdGhlIGBzcmN1dHJlZS5jYCBmaWxlLCBhcyB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBBbmQgeWVzLCB0aGVyZSBpdCBpcyEgSSdtIHByZXR0eSBzdXJlIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZGVmZXJyaW5nIHRoZSB3b3JrIGFuZCB0aGUgZmluYWwgZHJhaW5pbmcgYWZ0ZXIgdGhhdCB3b3JrIGlzIGRvbmUgaXMgYHN0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylgLiBJJ20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBpcnFfd29ya2AgaW4gbXkgaGVhZCwgYXMgd2VsbCBhcyB0aGUgY2FsbCBjaGFpbiB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBldmVudHVhbGx5IGNhbGxpbmcgdGhhdCBkZWZlciBmdW5jdGlvbiwgbGlrZWx5IGFmdGVyIGEgZ3JhY2UgcGVyaW9kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjA3LjM0MjE0NTM0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjMzMzkyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvcmN1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcmN1L3NyY3V0cmVlLmM9ODE9c3RhdGljIHZvaWQgc3JjdV9kZWxheV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTgyLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzo4MzpzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04NC1cXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xNDg1PXN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTIzLSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxNTI0OnN0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTUyNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjA3LjQzNDQ4NDU1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTQyODA1NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGNvZGUsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipTUkNVVHJlZSB2cy4gU1JDVVRpbnk6IFN0YXRpYyB2cy4gTm9uLVN0YXRpYyBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIHNlZWluZyBhIGRpc2NyZXBhbmN5IGhlcmUgdGhhdCBuZWVkcyBjbGFyaWZpY2F0aW9uLiBgc3JjdV9kZWZlcl9kcmFpbmAsIHRoYXQncyB0aGUgZnVuY3Rpb24gaGFuZGxpbmcgdGhlIGRlZmVycmVkIGRyYWluIHByb2Nlc3MgZm9yIFNSQ1UsIGlzICpzdGF0aWMqIHdpdGhpbiB0aGUgYHNyY3V0cmVlLmNgIGZpbGUuIFRoaXMgaXMgZXhwZWN0ZWQsIG1lYW5pbmcgaXQncyBvbmx5IHZpc2libGUgYW5kIGNhbGxhYmxlIHdpdGhpbiB0aGF0IGNvbXBpbGF0aW9uIHVuaXQuIEhvd2V2ZXIsIEknbSBmaW5kaW5nIHRoYXQgc2FtZSBmdW5jdGlvbiBkZWNsYXJlZCBhcyAqbm9uLXN0YXRpYyogaW4gYHNyY3V0aW55LmNgLiBUaGF0J3MgdW51c3VhbCwgYW5kIGl04oCZcyByYWlzaW5nIGEgZmxhZy4gVGhpcyBpbXBsaWVzIHNvbWUgc29ydCBvZiBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBwZXJoYXBzIGEgZGVzaWduIHBhdHRlcm4gdGhhdCBJIGRvbid0IGZ1bGx5IHVuZGVyc3RhbmQgeWV0LCBidXQgaXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIGxvb2sgaW50byBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aHkgdGhhdCB3b3VsZCBiZSB0aGUgY2FzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRpZmZlcmVudCBzY29waW5nIGFuZCBpdHMgaW1wYWN0IG9uIGNyb3NzLWZpbGUgZnVuY3Rpb24gY2FsbHMgb3IgbGlua2FnZS5cblxuRnVydGhlcm1vcmUsIGBzcmN1X29mZmxpbmVfZHJhaW5gIGlzICpub24tc3RhdGljKiBpbiBgc3JjdXRyZWUuY2AuIFRoaXMgbWFrZXMgc2Vuc2UsIGFzIGl04oCZcyBsaWtlbHkgaW50ZW5kZWQgdG8gYmUgcGFydCBvZiB0aGUgQVBJIG9mZmVyZWQgYnkgdGhlIGBzcmN1dHJlZWAgbW9kdWxlLlxuSSBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZXNlIGRpZmZlcmVudCB2aXNpYmlsaXR5IGxldmVscyBhcmUgdXNlZCBhbmQgd2hhdCB0aGUgcHJhY3RpY2FsIGVmZmVjdHMgYXJlLlxuSSB3aWxsIGhhdmUgdG8gY2hlY2sgaG93IHRoZSBkaWZmZXJlbnQgY29tcG9uZW50cyBpbnRlcmFjdCB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgaW50ZXJwcmV0YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDE5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTg6MTkuNTc3MjkzOTg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTQxNTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBzcmN1X29mZmxpbmVfZHJhaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3JjdS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS9yY3UuaD01ODE9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZClcXG4tLVxcbmtlcm5lbC9yY3UvcmN1LmgtNTg5LS8qIERyYWluIGFuIG91dGdvaW5nIENQVSdzIGRlZmVycmVkIFNSQ1UgY2FsbGJhY2tzOyBzZWUgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLiAqL1xcbmtlcm5lbC9yY3UvcmN1Lmg6NTkwOnZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNTkxLVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE1MjQ9c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NTItICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE1NTM6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSlcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTU1NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjE5LjcxNjcxMzU0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODM3MzUzNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFJDVSBEZWZlcnJhbCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBSQ1UgZGVmZXJyYWwgaW1wbGVtZW50YXRpb24uIFRoZSBmaXJzdCB0aGluZyBJJ20gbm90aWNpbmcgaXMgdGhlIG1vZGlmaWNhdGlvbiBvZiBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYGNhbGxfcmN1YCwgYW5kIGBjYWxsX3NyY3VgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIHRvdWNoZWQuIEknbSBhbHNvIHNlZWluZyBjaGFuZ2VzIGluIGByY3V0b3J0dXJlLmNgLCB3aGljaCBpcyBnb29kIGJlY2F1c2UgdGhhdCBpbmRpY2F0ZXMgdGVzdGluZyBpcyBpbiBwbGFjZS5cblxuTGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJJ20gZm9jdXNpbmcgb246XG5cbiogICBgY2FsbF9yY3VgXG4qICAgYGNhbGxfc3JjdWBcbiogICBgcmN1X2JhcnJpZXJgXG4qICAgYHNyY3VfYmFycmllcmBcbiogICBgc3JjdV9vZmZsaW5lX2RyYWluYFxuXG5BbmQsIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSBlbmFibGVkOlxuXG4qICAgYFBFUkZfRVZFTlRTYFxuKiAgIGBLUFJPQkVTYFxuKiAgIGBUUkFDRVBPSU5UU2BcbiogICBgUkNVX1RPUlRVUkVfVEVTVGAgKGFsdGhvdWdoIHRoaXMgaXMgZm9yIHRlc3RpbmcsIGl0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQpXG5cbldhaXQsIGEgY3J1Y2lhbCBwb2ludCEgYFJDVV9ERUZFUmAgaXMgdGllZCB0byBgSEFWRV9OTUlgLCBgS1BST0JFU2AsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQgYFRSQUNFUE9JTlRTYC4gU28sIGVuc3VyaW5nIGBLUFJPQkVTYCBhbmQgYFRSQUNFUE9JTlRTYCBhcmUgZW5hYmxlZCBpbXBsaWNpdGx5IGhhbmRsZXMgdGhhdC4gQW5kLCBgUEVSRl9FVkVOVFNgIGlzIG5lZWRlZCBmb3IgdGhlIE5NSSB0ZXN0aW5nIHdpdGhpbiBgcmN1dG9ydHVyZWAuXG5cbk5vdywgYWJvdXQgYGNhbGxfcmN1YCBhbmQgYGNhbGxfc3JjdWAuIFRoZSBwcm9tcHQgKmRvZXMqIHdhcm4gYWdhaW5zdCBmb2N1c2luZyBvbiBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLCBhbmQgdGhlc2UgYXJlIEVYVFJFTUVMWSBob3QtcGF0aCEgSG93ZXZlciwgdGhlIHBhdGNoICpzcGVjaWZpY2FsbHkqIG1vZGlmaWVzIHRoZW0gdG8gaGFuZGxlIGRlZmVycmFsIHdoZW4gYHNob3VsZF9yY3VfZGVmZXIoKWAgaXMgdHJ1ZSAod2hpY2ggaXMgd2hlbiBgaXJxc19kaXNhYmxlZCgpYCBhbmQgYHJjdV9zY2hlZHVsZXJfYWN0aXZlICE9IFJDVV9TQ0hFRFVMRVJfSU5BQ1RJVkVgKS4gU28sIHdoaWxlIHRoZXkncmUgY29yZSwgZGlyZWN0IGZ1enppbmcgbWlnaHQgc2tldyByZXN1bHRzLiBNYXliZSwgSSBzaG91bGQgcHJpb3JpdGl6ZSBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYW5kIGBzcmN1X29mZmxpbmVfZHJhaW5gIGluc3RlYWQ/IFRoZXkgYXJlIG5vdCBob3QtcGF0aC4gYHNyY3Vfb2ZmbGluZV9kcmFpbmAgaXMgY2FsbGVkIGR1cmluZyBDUFUgaG90cGx1ZyB3aGljaCBpc24ndCBob3QtcGF0aCBlaXRoZXIuXG5cblRpbWUgdG8gbG9vayBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgYXJlYS4uLiBsZXQncyBzZWUgd2hhdCBlbHNlIHRoZXJlIG1pZ2h0IGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTYxOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1ODozMi41NTQwNzEwNjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMzg2OTgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCAuKl9kcmFpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvcmN1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcmN1L3JjdS5oPTU4MT1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC01ODktLyogRHJhaW4gYW4gb3V0Z29pbmcgQ1BVJ3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXFxua2VybmVsL3JjdS9yY3UuaDo1OTA6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSk7XFxua2VybmVsL3JjdS9yY3UuaC01OTEtXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MjQyPXN0YXRpYyBib29sIHNyY3VfZGVmZXJfZHJhaW5pbmc7XFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTI0My1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MjQ0OnZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNDUte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE1MjQ9c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NTItICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE1NTM6dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSlcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTU1NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjMzLjI2Nzk0NzM0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODU3NTM2MDQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbCBpbiBTUkNVIGFuZCBSQ1UqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgc3JjdV9vZmZsaW5lX2RyYWluYCBhbmQgYHNyY3VfZGVmZXJfZHJhaW5gLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGlzICd0aW55JyBjb250ZXh0LiBUaGUgZmFjdCB0aGF0IGBzcmN1X2RlZmVyX2RyYWluYCBpcyBleHBvcnRlZCBmcm9tIHRoZSAndGlueScgbW9kdWxlIHByZXNlbnRzIGFuIGludGVyZXN0aW5nIHN1cmZhY2UgZm9yIGZ1enppbmcsIGRvZXNuJ3QgaXQ/IEhvd2V2ZXIsIEknbSBub3RpbmcgdGhhdCBpdCdzIGFuIGBpcnFfd29ya2AgY2FsbGJhY2ssIHNvIGRpcmVjdCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIHVubGlrZWx5LiBUaGF0IGxpbWl0cyBpbW1lZGlhdGUgYXZlbnVlcy5cblxuTXkgZXhwZXJ0IG1pbmQgc2hpZnRzIGdlYXJzOyBJJ20gdGhpbmtpbmcgdGhhdCBgcmN1X2JhcnJpZXJgIGFuZCBgc3JjdV9iYXJyaWVyYCBhcmUgYWx3YXlzIGdvb2QgdGFyZ2V0cyB0byBleHBsb3JlLiBUaGV5J3JlIGZ1bmRhbWVudGFsIGFuZCByZXByZXNlbnQgY3JpdGljYWwgc3luY2hyb25pemF0aW9uIHBvaW50cy4gVGhleSdyZSB3ZWxsLWtub3duIGJ1dCBwb3RlbnRpYWxseSBvZmZlciB2dWxuZXJhYmlsaXRpZXMgaW4gdW51c3VhbCBzY2VuYXJpb3MuXG5cbk5vdywgdGhhdCBnZXRzIG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgPyBJdCdzIGJlZW4gbW9kaWZpZWQgdG8gY2FsbCBib3RoIGByY3VfZGVmZXJfZHJhaW5gIGFuZCBgc3JjdV9vZmZsaW5lX2RyYWluYC4gU2luY2UgdGhvc2UgZnVuY3Rpb25zIGFyZSBtb3JlIGludGVyZXN0aW5nIHdpdGhpbiBhIFwidGlueVwiIGNvbnRleHQsIEkgd291bGQgbmVlZCB0byBhbmFseXplICpob3cqIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBhbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb21iaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6NTg6NTEuODQzMzA5OTIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTIzNjgyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9yY3UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9yY3UvdHJlZS5jPTQ1NzA9dm9pZCByY3V0cmVlX3JlcG9ydF9jcHVfZGVhZCh2b2lkKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDYyNC0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NjI1OnZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MjYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1ODo1MS45MzQ1NTIzMzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2Mzg3NDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ2FsbGJhY2sgTWlncmF0aW9uIFBvaW50cyoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBzaXR1YXRpb24sIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBzZWVtcyBsaWtlIGEgc3Ryb25nIGNvbnRlbmRlciBhcyBhIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoYXQncyBhIHJlYXNvbmFibGUgZmlyc3QgZ3Vlc3MgZ2l2ZW4gdGhlIGNvbnRleHQuIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhhdCwgSSBzaG91bGQgZG8gYSBxdWljayBjaGVjay1pbiB3aXRoIGByY3VfYmFycmllcmAgYW5kIGBzcmN1X2JhcnJpZXJgLiBUaG9zZSBhcmUgb2Z0ZW4gaW52b2x2ZWQgaW4gc2ltaWxhciBzY2VuYXJpb3MsIGFuZCBpdCdzIGFsd2F5cyBzbWFydCB0byBoYXZlIGEgd2lkZXIgdmlldyBvZiB0aGUgY2FsbCBzaXRlcyBiZWZvcmUgZGl2aW5nIGludG8gb25lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnkgb2J2aW91cywgcmVsYXRlZCBwaWVjZXMgdGhhdCBtaWdodCBvZmZlciBhIG1vcmUgY29tcGxldGUgcGljdHVyZSwgb3IgZXZlbiBhIHNpbXBsZXIgcGF0aCB0byBhIHNvbHV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQzMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjU1LjE5ODQzMDIzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxOTU2NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgcmN1X2JhcnJpZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3JjdS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS90YXNrcy5oPTEyMjI9RVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X3Rhc2tzKTtcXG4tLVxcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjI5LSAqL1xcbmtlcm5lbC9yY3UvdGFza3MuaDoxMjMwOnZvaWQgcmN1X2JhcnJpZXJfdGFza3Modm9pZClcXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIzMS17XFxuLS1cXG5rZXJuZWwvcmN1L3RpbnkuYz0xMTY9c3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXFxuLS1cXG5rZXJuZWwvcmN1L3RpbnkuYy0xMjItXFxua2VybmVsL3JjdS90aW55LmM6MTIzOnZvaWQgcmN1X2JhcnJpZXIodm9pZClcXG5rZXJuZWwvcmN1L3RpbnkuYy0xMjQte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9Mzk2MT1zdGF0aWMgdm9pZCByY3VfYmFycmllcl9oYW5kbGVyKHZvaWQgKmNwdV9pbilcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM5ODYtICovXFxua2VybmVsL3JjdS90cmVlLmM6Mzk4Nzp2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXFxua2VybmVsL3JjdS90cmVlLmMtMzk4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjU1LjI3ODYzMzU4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDI1NDMyNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQmFycmllciBJbXBsZW1lbnRhdGlvbnMqKlxuXG5SaWdodCwgYHJjdV9iYXJyaWVyYCBhbmQgYHNyY3VfYmFycmllcmDigJR0aGV5J3JlIGJvdGggY3JpdGljYWwgdG9vbHMsIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBhZ2Fpbi4gTGV0J3MgZGlnIGludG8gYHNyY3VfYmFycmllcmAgc3BlY2lmaWNhbGx5LiBXaGF0IGFyZSB0aGUga2V5IGNvbnNpZGVyYXRpb25zIGFuZCBlZGdlIGNhc2VzIGluIGl0cyBpbXBsZW1lbnRhdGlvbj8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBtZW50YWwgbW9kZWwgb2YgaXRzIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggY29uY3VycmVudCBzY2VuYXJpb3MuIEFyZSB0aGVyZSBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBsb2NrIGhpZXJhcmNoaWVzIG9yIG1lbW9yeSBtb2RlbHM/IEknbSBnb2luZyB0byBydW4gdGhyb3VnaCBzb21lIHNjZW5hcmlvcyBhbmQgZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGJlZm9yZSBtb3Zpbmcgb24uIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBkZXNpZ24gaXMgc291bmQgYW5kIHRoYXQgSSBjYW4ganVzdGlmeSBpdHMgdXNhZ2UgZm9yIHdoYXRldmVyIEknbSB3b3JraW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTkyMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjU5LjcwNDA3MDExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc5MDE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBzcmN1X2JhcnJpZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3JjdS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS9zcmN1dGlueS5jPTMwNz1FWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0zMDktLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovXFxua2VybmVsL3JjdS9zcmN1dGlueS5jOjMxMDp2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMzExLXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xNzkyPXN0YXRpYyB2b2lkIHNyY3VfYmFycmllcl9vbmVfY3B1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3Qgc3JjdV9kYXRhICpzZHApXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTgwOS0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTgxMDp2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTgxMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjU4OjU5Ljc1NTg2OTg1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDAxNzQyOTYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBSQ1UvU1JDVSBEZWZlcnJlZCBDYWxsYmFja3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgZGVmZXJyZWQgUkNVIGFuZCBTUkNVIGNhbGxiYWNrcy4gSXQncyBkZWFsaW5nIHdpdGggcmUtZW50cmFudCBjYWxscyBmcm9tIE5NSSBjb250ZXh0cyBhbmQgQlBGLCB3aGljaCBpcyBjcml0aWNhbCwgc28gd2UgbmVlZCBhIGdvb2QgZnV6emluZyBzdHJhdGVneS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRlZmluZSBzb21lIGZvY3VzIHN5bWJvbHMuIEkgdGhpbmsgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGFyZTpcblxuKiAgIGByY3VfYmFycmllcmBcbiogICBgc3JjdV9iYXJyaWVyYFxuKiAgIGBzcmN1X29mZmxpbmVfZHJhaW5gXG4qICAgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgXG5cbldhaXQsIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBpcyBjYWxsZWQgZHVyaW5nIENQVSBvZmZsaW5lLi4uIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBvdGhlciBlbnRyeSBwb2ludHMgYnV0IGl0IGlzIGRlZmluaXRlbHkgaW50ZXJlc3RpbmcgdG8gY29uc2lkZXIuXG5cblRoZSBwYXRjaCBhbHNvIGhhcyBhIEJQRiBzZWxmdGVzdC4gV2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBzcGVjaWZpY2FsbHkgaW5jbHVkZSBgYnBmX3Rhc2tfc3RvcmFnZV9kZWxldGVgIGJlY2F1c2UgdGhhdCBpcyBqdXN0IHRoZSBtZWNoYW5pc20gdG8gdHJpZ2dlciB0aGluZ3MuXG5cbk5vdywgZm9yIGtlcm5lbCBjb25maWdzLCBoZXJlJ3Mgd2hhdCBzZWVtcyBpbXBvcnRhbnQgdG8gZW5hYmxlOlxuXG4qICAgYEtQUk9CRVNgIC0gRXNzZW50aWFsIGZvciB0cmlnZ2VyaW5nIGRlZmVycmVkIGNhbGxzIGZyb20gcHJvYmUgY29udGV4dHMuXG4qICAgYFRSQUNFUE9JTlRTYCAtIFNpbWlsYXJseSBjcnVjaWFsIGZvciB0cmFjaW5nLlxuKiAgIGBQRVJGX0VWRU5UU2AgLSBUaGlzIGFsc28gb3BlbnMgdXAgdGhlIG9wcG9ydHVuaXR5IHRvIHJlYWNoIGRlZmVycmVkIGNhbGxzIGZyb20gYW4gTk1JIGNvbnRleHQuXG4qICAgYFJDVV9UT1JUVVJFX1RFU1RgIC0gT3B0aW9uYWwsIGJ1dCBhIGdvb2QgYWRkaXRpb24gZm9yIG1vcmUgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIGlmIHdlIGFyZSB0cnlpbmcgdG8gdHJpZ2dlciBtb3JlIGNvZGUgcGF0aHMuXG4qICAgYEJQRl9TWVNDQUxMYCAtIFNpbmNlIHRoZSBzZWxmdGVzdCB1c2VzIEJQRiwgaXQncyBhIGdvb2QgaWRlYSB0byBlbmFibGUgaXQgdG8gdHJ5IHRvIHRyaWdnZXIgaXQgZnJvbSB0aGUgQlBGIHNpZGUsIGFsdGhvdWdoIG5vdCBlc3NlbnRpYWwuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFJDVV9ERUZFUmAgaXMgZW5hYmxlZC4gSXQgbG9va3MgbGlrZSBpdCBpcyBzZWxlY3RlZCBieSBgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNgLiBTbywgc2luY2Ugd2UgYXJlIGVuYWJsaW5nIGBLUFJPQkVTYCBhbmQgYFRSQUNFUE9JTlRTYCwgYFJDVV9ERUZFUmAgc2hvdWxkIGFscmVhZHkgYmUgY292ZXJlZC5cblxuTGV0IG1lIHRoaW5rIGJhY2sgb24gdGhpcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgUkNVL1NSQ1UgbG9naWM6IGBjYWxsX3JjdWAsIGBjYWxsX3NyY3VgLCBhbmQgdGhlIGJhcnJpZXIgZnVuY3Rpb25zLCBidXQgc3BlY2lmaWNhbGx5IHRoZSBkZWZlcnJhbCBwYXJ0LiBUaGlzIGRlZmVycmFsIGlzIGhpdCBwcmltYXJpbHkgZnJvbSBOTUkgY29udGV4dHMgYW5kIHRocm91Z2ggQlBGLlxuXG5IZXJlJ3MgYSByZWZpbmVkIGxpc3Qgb2YgdGhpbmdzIHRvIGNvbnNpZGVyIGZvY3VzaW5nIG9uOlxuXG5Gb2N1cyBzeW1ib2xzOlxuXG4qICAgYHJjdV9iYXJyaWVyYFxuKiAgIGBzcmN1X2JhcnJpZXJgXG4qICAgYHNyY3Vfb2ZmbGluZV9kcmFpbmBcbiogICBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2BcblxuQ29uZmlnczpcblxuKiAgIGBLUFJPQkVTYFxuKiAgIGBUUkFDRVBPSU5UU2BcbiogICBgUEVSRl9FVkVOVFNgXG4qICAgYEJQRl9TWVNDQUxMYFxuXG5Pa2F5LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIHJlYWNoYWJpbGl0eS4gYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGlzIGNhbGxlZCBieSBDUFUgaG90cGx1ZyB3aGljaCBpcyBnb29kISBBbmQgYHNyY3Vfb2ZmbGluZV9kcmFpbmAgaXMgYWxzbyBjYWxsZWQgYnkgaXQuIGByY3VfYmFycmllcmAgYW5kIGBzcmN1X2JhcnJpZXJgIGFyZSB2ZXJ5IHdpZGVseSB1c2VkLlxuXG5UaGVyZSBpcyBgc3JjdV9kZWZlcl9kcmFpbmAgaW4gdGhlIGBzcmN1dGlueS5jYCBjb2RlLCBidXQgdGhhdCBpcyBhbHNvIHN0YXRpYyBpbiB0aGUgYHNyY3V0cmVlLmNgIGNvZGUuIEl0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgd2l0aG91dCBgQ09ORklHX1RJTllfU1JDVWAsIHNvIEknbGwgZXhjbHVkZSBpdC5cblxuV2FpdC4gQW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gYGNhbGxfcmN1YCBhbmQgYGNhbGxfc3JjdWAgYXJlIHRoZSBtYWluIGZ1bmN0aW9ucyBtb2RpZmllZC4gSSBrbm93IHRoZXkncmUgaG90LXBhdGgsIGJ1dCB0aGUgZGVmZXJyYWwgaXMgX2luc2lkZV8gdGhlbS4gRG8gSSBuZWVkIHRvIGluY2x1ZGUgdGhlbT8gTm8sIHRoYXQncyBub3QgbmVlZGVkLiBUaGUgZnV6emVyIHdpbGwgaGl0IHRoZW0gYW55d2F5IGFuZCBpdCBpcyBsaWtlbHkgdGhlIGRlZmVycmFsIGNvZGUgd2lsbCBiZSB0cmlnZ2VyZWQuIEZvY3VzaW5nIG9uIHRoZW0gbWlnaHQgc2ltcGx5IGhhdmUgdGhlIGZ1enplciBzcGVuZCBhbGwgaXRzIHRpbWUgb24gZ2VuZXJpYyBjYWxscywgd2hlbiB3ZSB3YW50IHRvIHRlc3QgdGhlIGRlZmVycmFsIGxvZ2ljLiBBbmQgdGhlIGRlZmVycmFsIHBhcnQgb25seSBoYXBwZW5zIHdoZW4gYHNob3VsZF9yY3VfZGVmZXIoKWAgaXMgdHJ1ZSwgd2hpY2ggaXMgd2hlbiBgaXJxc19kaXNhYmxlZCgpYC4gQWxzbywgdGhlIEJQRiBzZWxmdGVzdCB0cmlnZ2VycyBpdCBieSBhdHRhY2hpbmcgYSBCUEYgcHJvZ3JhbSB0byBgcmN1X3NlZ2NibGlzdF9lbnF1ZXVlYCBhbmQgY2FsbGluZyBgYnBmX3Rhc2tfc3RvcmFnZV9kZWxldGVgIGZyb20gaXQuXG5cbk9rYXksIEknbSBjb25maWRlbnQgd2l0aCB0aGlzLiBJIHdpbGwgc2V0IHRoZSBmdXp6aW5nIHRhcmdldHMgYmFzZWQgb24gdGhpcyByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzg1LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzo1OToxMy43NzMzMDM5NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2ODg1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIlRSQUNFUE9JTlRTXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X29mZmxpbmVfZHJhaW5cIixcbiAgICBcInJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGRlZmVycmVkIFJDVSBhbmQgU1JDVSBjYWxsYmFja3MgdG8gc2FmZWx5IGhhbmRsZSByZS1lbnRyYW50IGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBpbnZvY2F0aW9ucywgc3VjaCBhcyB0aG9zZSBvcmlnaW5hdGluZyBmcm9tIE5NSSBjb250ZXh0cyBvciBCUEYgcHJvZ3JhbXMuIEl0IG1vZGlmaWVzIGNvcmUgUkNVL1NSQ1Ugc3luY2hyb25pemF0aW9uIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyBjYWxsYmFjayBkcmFpbmluZyBtZWNoYW5pc21zLiBUaGlzIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktQUk9CRVNcIixcbiAgICBcIlRSQUNFUE9JTlRTXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X29mZmxpbmVfZHJhaW5cIixcbiAgICBcInJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGRlZmVycmVkIFJDVSBhbmQgU1JDVSBjYWxsYmFja3MgdG8gc2FmZWx5IGhhbmRsZSByZS1lbnRyYW50IGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBpbnZvY2F0aW9ucywgc3VjaCBhcyB0aG9zZSBvcmlnaW5hdGluZyBmcm9tIE5NSSBjb250ZXh0cyBvciBCUEYgcHJvZ3JhbXMuIEl0IG1vZGlmaWVzIGNvcmUgUkNVL1NSQ1Ugc3luY2hyb25pemF0aW9uIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIG5ldyBjYWxsYmFjayBkcmFpbmluZyBtZWNoYW5pc21zLiBUaGlzIGlzIGhpZ2hseSBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsw7zm[1] Phase: Succeeded StartedAt: 2026-08-03 17:59:25 +0000 UTC FinishedAt: 2026-08-03 17:59:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw7zm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 17:59:25 +0000 UTC FinishedAt: 2026-08-03 17:59:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw7zm[2] Phase: Succeeded StartedAt: 2026-08-03 17:59:25 +0000 UTC FinishedAt: 2026-08-03 18:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-03 17:59:25 +0000 UTC FinishedAt: 2026-08-03 18:48:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 17:59:25 +0000 UTC FinishedAt: 2026-08-03 17:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 17:59:25 +0000 UTC FinishedAt: 2026-08-03 17:59:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsw7zm/series-workflowsw7zm-convert-artifact-1468234713/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 17:59:35 +0000 UTC FinishedAt: 2026-08-03 18:16:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 17:59:35 +0000 UTC FinishedAt: 2026-08-03 18:16:52 +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:*63195670-dec4-41f2-b4ca-199c59756e3a,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-workflowsw7zm/series-workflowsw7zm-convert-artifact-1468234713/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": "e8fad918-5435-4e7a-a683-4cbab65c9232", "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-workflowsw7zm/series-workflowsw7zm-build-action-2465700983/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 17:59:35 +0000 UTC FinishedAt: 2026-08-03 18:16:42 +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:*63195670-dec4-41f2-b4ca-199c59756e3a,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-workflowsw7zm/series-workflowsw7zm-convert-artifact-1468234713/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": "e8fad918-5435-4e7a-a683-4cbab65c9232", "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-workflowsw7zm/series-workflowsw7zm-build-action-2465700983/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 18:16:52 +0000 UTC FinishedAt: 2026-08-03 18:16:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 18:16:52 +0000 UTC FinishedAt: 2026-08-03 18:16:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 18:16:52 +0000 UTC FinishedAt: 2026-08-03 18:17:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 18:16:52 +0000 UTC FinishedAt: 2026-08-03 18:16:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsw7zm/series-workflowsw7zm-convert-artifact-3298655916/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 18:17:03 +0000 UTC FinishedAt: 2026-08-03 18:48:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 18:17:03 +0000 UTC FinishedAt: 2026-08-03 18:48:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e8fad918-5435-4e7a-a683-4cbab65c9232,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-workflowsw7zm/series-workflowsw7zm-build-action-2465700983/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": false },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-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-08-03 18:48:14 +0000 UTC FinishedAt: 2026-08-03 18:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsw7zm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KPROBES","TRACEPOINTS","PERF_EVENTS","BPF_SYSCALL"],"series_id":"3a2a4a93-4ad6-4709-b28e-59d6b2a85c10","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Failed StartedAt: 2026-08-03 18:48:14 +0000 UTC FinishedAt: 2026-08-03 18:48:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}