From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from www346.sakura.ne.jp ([202.181.99.66]) by canuck.infradead.org with esmtps (Exim 4.61 #1 (Red Hat Linux)) id 1FcGdn-0001yC-Ia for linux-mtd@lists.infradead.org; Sat, 06 May 2006 02:51:52 -0400 Message-ID: <445C476A.2090506@ak.jp.nec.com> Date: Sat, 06 May 2006 15:51:22 +0900 From: KaiGai Kohei MIME-Version: 1.0 To: dwmw2@infradead.org, joern@wohnheim.fh-wedel.de, linux-mtd@lists.infradead.org Content-Type: multipart/mixed; boundary="------------080502050609010207090805" Cc: jmorris@redhat.com, sds@tycho.nsa.gov, lorenzo@gnu.org, russell@coker.com.au Subject: [PATCH] XATTR support on JFFS2 (version. 5) List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , This is a multi-part message in MIME format. --------------080502050609010207090805 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Hello, This attached patches provide xattr support including POSIX-ACL and SELinux support on JFFS2 (version.5). We can apply those patches to the latest git-tree. - xattr_on_jffs2.kernel.version-5.patch can be applied to mtd-2.6.git. - xattr_on_jffs2.utils.version-5.patch can be applied to mtd-utils.git. There are some significant differences from previous version posted at last December. The biggest change is addition of EBS(Erase Block Summary) support. Currently, both kernel and usermode utility (sumtool) can recognize xattr nodes which have JFFS2_NODETYPE_XATTR/_XREF nodetype. In addition, some bugs are fixed. - A potential race condition was fixed. - Unexpected fail when updating a xattr by same name/value pair was fixed. - A bug when removing xattr name/value pair was fixed. The fundamental structures (such as using two new nodetypes and exclusion mechanism by rwsem) are unchanged. But most of implementation were reviewed and updated if necessary. Espacially, we had to change several internal implementations related to load_xattr_datum() to avoid a potential race condition. [1/2] xattr_on_jffs2.kernel.version-5.patch [2/2] xattr_on_jffs2.utils.version-5.patch Signed-off-by: KaiGai Kohei We can get those patches from http://www.kaigai.gr.jp/ Any comments please. Thanks, -- KaiGai Kohei --------------080502050609010207090805 Content-Type: text/plain; name="xattr_on_jffs2.kernel.version-5.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="xattr_on_jffs2.kernel.version-5.patch" LS0tIG10ZC0yLjYuZ2l0L2ZzL0tjb25maWcJMjAwNi0wNS0wNSAwMzoxNDo0MC4wMDAwMDAw MDAgKzA5MDAKKysrIG10ZC0yLjYuMDUwNi9mcy9LY29uZmlnCTIwMDYtMDUtMDYgMTE6Mjg6 MTkuMDAwMDAwMDAwICswOTAwCkBAIC0xMDc1LDYgKzEwNzUsNDQgQEAgY29uZmlnIEpGRlMy X0ZTX0RFQlVHCiAJICBJZiByZXBvcnRpbmcgYnVncywgcGxlYXNlIHRyeSB0byBoYXZlIGF2 YWlsYWJsZSBhIGZ1bGwgZHVtcCBvZiB0aGUKIAkgIG1lc3NhZ2VzIGF0IGRlYnVnIGxldmVs IDEgd2hpbGUgdGhlIG1pc2JlaGF2aW91ciB3YXMgb2NjdXJyaW5nLgogCitjb25maWcgSkZG UzJfRlNfWEFUVFIKKwlib29sICJKRkZTMiBYQVRUUiBzdXBwb3J0IgorCWRlcGVuZHMgb24g SkZGUzJfRlMKKwlkZWZhdWx0IG4KKwloZWxwCisJICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFy ZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKKwkgIHRoZSBr ZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3Igdmlz aXQKKwkgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLgorCSAgCisJ ICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgSkZGUzJfRlNfUE9TSVhfQUNMCisJYm9v bCAiSkZGUzIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCisJZGVwZW5kcyBvbiBKRkZT Ml9GU19YQVRUUgorCWRlZmF1bHQgeQorCXNlbGVjdCBGU19QT1NJWF9BQ0wKKwloZWxwCisJ ICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9u cyBmb3IgdXNlcnMgYW5kCisJICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3Js ZCBzY2hlbWUuCisJICAKKwkgIFRvIGxlYXJuIG1vcmUgYWJvdXQgQWNjZXNzIENvbnRyb2wg TGlzdHMsIHZpc2l0IHRoZSBQb3NpeCBBQ0xzIGZvcgorCSAgTGludXggd2Vic2l0ZSA8aHR0 cDovL2FjbC5iZXN0Yml0cy5hdC8+LgorCSAgCisJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0 IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4KKworY29uZmlnIEpGRlMyX0ZTX1NF Q1VSSVRZCisJYm9vbCAiSkZGUzIgU2VjdXJpdHkgTGFiZWxzIgorCWRlcGVuZHMgb24gSkZG UzJfRlNfWEFUVFIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTZWN1cml0eSBsYWJlbHMgc3Vw cG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHMKKwkgIGltcGxlbWVudGVk IGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb24KKwkgIGVu YWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHkK KwkgIGxhYmVscyBpbiB0aGUgamZmczIgZmlsZXN5c3RlbS4KKwkgIAorCSAgSWYgeW91IGFy ZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZworCSAg ZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgor CiBjb25maWcgSkZGUzJfRlNfV1JJVEVCVUZGRVIKIAlib29sICJKRkZTMiB3cml0ZS1idWZm ZXJpbmcgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEpGRlMyX0ZTCi0tLSBtdGQtMi42LmdpdC9m cy9qZmZzMi9NYWtlZmlsZQkyMDA2LTA0LTMwIDE4OjA2OjUxLjAwMDAwMDAwMCArMDkwMAor KysgbXRkLTIuNi4wNTA2L2ZzL2pmZnMyL01ha2VmaWxlCTIwMDYtMDUtMDYgMTI6NTA6MDIu MDAwMDAwMDAwICswOTAwCkBAIC0xMiw2ICsxMiw5IEBAIGpmZnMyLXkJKz0gc3ltbGluay5v IGJ1aWxkLm8gZXJhc2UubyBiYWMKIGpmZnMyLXkJKz0gc3VwZXIubyBkZWJ1Zy5vCiAKIGpm ZnMyLSQoQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSKQkrPSB3YnVmLm8KK2pmZnMyLSQo Q09ORklHX0pGRlMyX0ZTX1hBVFRSKQkJKz0geGF0dHIubyB4YXR0cl90cnVzdGVkLm8geGF0 dHJfdXNlci5vCitqZmZzMi0kKENPTkZJR19KRkZTMl9GU19TRUNVUklUWSkJKz0gc2VjdXJp dHkubworamZmczItJChDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMKQkrPSBhY2wubwogamZm czItJChDT05GSUdfSkZGUzJfUlVCSU4pCSs9IGNvbXByX3J1YmluLm8KIGpmZnMyLSQoQ09O RklHX0pGRlMyX1JUSU1FKQkrPSBjb21wcl9ydGltZS5vCiBqZmZzMi0kKENPTkZJR19KRkZT Ml9aTElCKQkrPSBjb21wcl96bGliLm8KLS0tIG10ZC0yLjYuZ2l0L2ZzL2pmZnMyL2FjbC5j CTE5NzAtMDEtMDEgMDk6MDA6MDAuMDAwMDAwMDAwICswOTAwCisrKyBtdGQtMi42LjA1MDYv ZnMvamZmczIvYWNsLmMJMjAwNi0wNS0wNiAxMToyODoxOS4wMDAwMDAwMDAgKzA5MDAKQEAg LTAsMCArMSw0ODMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqICBGaWxlOiBmcy9q ZmZzMi9hY2wuYworICogIFBPU0lYIEFDTCBzdXBwb3J0IG9uIEpGRlMyIEZpbGVTeXN0ZW0K KyAqCisgKiAgSW1wbGVtZW50ZWQgYnkgS2FpR2FpIEtvaGVpIDxrYWlnYWlAYWsuanAubmVj LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTkVDIENvcnBvcmF0aW9uCisgKgorICog IEZvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24sIHNlZSB0aGUgZmlsZSAnTElDRU5DRScgaW4g dGhlIGpmZnMyIGRpcmVjdG9yeS4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUg PGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4 L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvamZmczIuaD4KKyNpbmNsdWRlIDxsaW51eC94 YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbF94YXR0ci5oPgorI2luY2x1ZGUg PGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlICJub2RlbGlzdC5oIgorCitzdGF0aWMgc2l6 ZV90IGpmZnMyX2FjbF9zaXplKGludCBjb3VudCkKK3sKKwlpZiAoY291bnQgPD0gNCkgewor CQlyZXR1cm4gc2l6ZW9mKGpmZnMyX2FjbF9oZWFkZXIpCisJCSAgICAgICArIGNvdW50ICog c2l6ZW9mKGpmZnMyX2FjbF9lbnRyeV9zaG9ydCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHNp emVvZihqZmZzMl9hY2xfaGVhZGVyKQorCQkgICAgICAgKyA0ICogc2l6ZW9mKGpmZnMyX2Fj bF9lbnRyeV9zaG9ydCkKKwkJICAgICAgICsgKGNvdW50IC0gNCkgKiBzaXplb2YoamZmczJf YWNsX2VudHJ5KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgamZmczJfYWNsX2NvdW50KHNpemVf dCBzaXplKQoreworCXNpemVfdCBzOworCisJc2l6ZSAtPSBzaXplb2YoamZmczJfYWNsX2hl YWRlcik7CisJcyA9IHNpemUgLSA0ICogc2l6ZW9mKGpmZnMyX2FjbF9lbnRyeV9zaG9ydCk7 CisJaWYgKHMgPCAwKSB7CisJCWlmIChzaXplICUgc2l6ZW9mKGpmZnMyX2FjbF9lbnRyeV9z aG9ydCkpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiBzaXplIC8gc2l6ZW9mKGpmZnMyX2Fj bF9lbnRyeV9zaG9ydCk7CisJfSBlbHNlIHsKKwkJaWYgKHMgJSBzaXplb2YoamZmczJfYWNs X2VudHJ5KSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIHMgLyBzaXplb2YoamZmczJfYWNs X2VudHJ5KSArIDQ7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqamZmczJf YWNsX2Zyb21fbWVkaXVtKGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKK3sKKwlj b25zdCBjaGFyICplbmQgPSAoY2hhciAqKXZhbHVlICsgc2l6ZTsKKwlzdHJ1Y3QgcG9zaXhf YWNsICphY2w7CisJdWludDMyX3QgdmVyOworCWludCBpLCBjb3VudDsKKworCWlmICghdmFs dWUpCisJCXJldHVybiBOVUxMOworCWlmIChzaXplIDwgc2l6ZW9mKGpmZnMyX2FjbF9oZWFk ZXIpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl2ZXIgPSBqZTMyX3RvX2NwdSgo KGpmZnMyX2FjbF9oZWFkZXIgKil2YWx1ZSktPmFfdmVyc2lvbik7CisJaWYgKHZlciAhPSBK RkZTMl9BQ0xfVkVSU0lPTikgeworCQlKRkZTMl9XQVJOSU5HKCJJbnZhbGlkIEFDTCB2ZXJz aW9uLiAoPSV1KVxuIiwgdmVyKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQor CisJdmFsdWUgPSAoY2hhciAqKXZhbHVlICsgc2l6ZW9mKGpmZnMyX2FjbF9oZWFkZXIpOwor CWNvdW50ID0gamZmczJfYWNsX2NvdW50KHNpemUpOworCWlmIChjb3VudCA8IDApCisJCXJl dHVybiBFUlJfUFRSKC1FSU5WQUwpOworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gTlVM TDsKKworCWFjbCA9IHBvc2l4X2FjbF9hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYg KCFhY2wpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZm9yIChpPTA7IGkgPCBj b3VudDsgaSsrKSB7CisJCWpmZnMyX2FjbF9lbnRyeSAqZW50cnkgPSAoamZmczJfYWNsX2Vu dHJ5ICopdmFsdWU7CisJCWlmICgoY2hhciAqKXZhbHVlICsgc2l6ZW9mKGpmZnMyX2FjbF9l bnRyeV9zaG9ydCkgPiBlbmQpCisJCQlnb3RvIGZhaWw7CisJCWFjbC0+YV9lbnRyaWVzW2ld LmVfdGFnID0gamUxNl90b19jcHUoZW50cnktPmVfdGFnKTsKKwkJYWNsLT5hX2VudHJpZXNb aV0uZV9wZXJtID0gamUxNl90b19jcHUoZW50cnktPmVfcGVybSk7CisJCXN3aXRjaCAoYWNs LT5hX2VudHJpZXNbaV0uZV90YWcpIHsKKwkJCWNhc2UgQUNMX1VTRVJfT0JKOgorCQkJY2Fz ZSBBQ0xfR1JPVVBfT0JKOgorCQkJY2FzZSBBQ0xfTUFTSzoKKwkJCWNhc2UgQUNMX09USEVS OgorCQkJCXZhbHVlID0gKGNoYXIgKil2YWx1ZSArIHNpemVvZihqZmZzMl9hY2xfZW50cnlf c2hvcnQpOworCQkJCWFjbC0+YV9lbnRyaWVzW2ldLmVfaWQgPSBBQ0xfVU5ERUZJTkVEX0lE OworCQkJCWJyZWFrOworCisJCQljYXNlIEFDTF9VU0VSOgorCQkJY2FzZSBBQ0xfR1JPVVA6 CisJCQkJdmFsdWUgPSAoY2hhciAqKXZhbHVlICsgc2l6ZW9mKGpmZnMyX2FjbF9lbnRyeSk7 CisJCQkJaWYgKChjaGFyICopdmFsdWUgPiBlbmQpCisJCQkJCWdvdG8gZmFpbDsKKwkJCQlh Y2wtPmFfZW50cmllc1tpXS5lX2lkID0gamUzMl90b19jcHUoZW50cnktPmVfaWQpOworCQkJ CWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKwlpZiAo dmFsdWUgIT0gZW5kKQorCQlnb3RvIGZhaWw7CisJcmV0dXJuIGFjbDsKKyBmYWlsOgorCXBv c2l4X2FjbF9yZWxlYXNlKGFjbCk7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisK K3N0YXRpYyB2b2lkICpqZmZzMl9hY2xfdG9fbWVkaXVtKGNvbnN0IHN0cnVjdCBwb3NpeF9h Y2wgKmFjbCwgc2l6ZV90ICpzaXplKQoreworCWpmZnMyX2FjbF9oZWFkZXIgKmpmZnMyX2Fj bDsKKwljaGFyICplOworCXNpemVfdCBpOworCisJKnNpemUgPSBqZmZzMl9hY2xfc2l6ZShh Y2wtPmFfY291bnQpOworCWpmZnMyX2FjbCA9IChqZmZzMl9hY2xfaGVhZGVyICopa21hbGxv YyhzaXplb2YoamZmczJfYWNsX2hlYWRlcikKKwkJCQkJCSsgYWNsLT5hX2NvdW50ICogc2l6 ZW9mKGpmZnMyX2FjbF9lbnRyeSksCisJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWpmZnMy X2FjbCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJamZmczJfYWNsLT5hX3ZlcnNp b24gPSBjcHVfdG9famUzMihKRkZTMl9BQ0xfVkVSU0lPTik7CisJZSA9IChjaGFyICopamZm czJfYWNsICsgc2l6ZW9mKGpmZnMyX2FjbF9oZWFkZXIpOworCWZvciAoaT0wOyBpIDwgYWNs LT5hX2NvdW50OyBpKyspIHsKKwkJamZmczJfYWNsX2VudHJ5ICplbnRyeSA9IChqZmZzMl9h Y2xfZW50cnkgKillOworCQllbnRyeS0+ZV90YWcgPSBjcHVfdG9famUxNihhY2wtPmFfZW50 cmllc1tpXS5lX3RhZyk7CisJCWVudHJ5LT5lX3Blcm0gPSBjcHVfdG9famUxNihhY2wtPmFf ZW50cmllc1tpXS5lX3Blcm0pOworCQlzd2l0Y2goYWNsLT5hX2VudHJpZXNbaV0uZV90YWcp IHsKKwkJCWNhc2UgQUNMX1VTRVI6CisJCQljYXNlIEFDTF9HUk9VUDoKKwkJCQllbnRyeS0+ ZV9pZCA9IGNwdV90b19qZTMyKGFjbC0+YV9lbnRyaWVzW2ldLmVfaWQpOworCQkJCWUgKz0g c2l6ZW9mKGpmZnMyX2FjbF9lbnRyeSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQUNMX1VT RVJfT0JKOgorCQkJY2FzZSBBQ0xfR1JPVVBfT0JKOgorCQkJY2FzZSBBQ0xfTUFTSzoKKwkJ CWNhc2UgQUNMX09USEVSOgorCQkJCWUgKz0gc2l6ZW9mKGpmZnMyX2FjbF9lbnRyeV9zaG9y dCk7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJZ290byBmYWlsOworCQl9CisJ fQorCXJldHVybiAoY2hhciAqKWpmZnMyX2FjbDsKKyBmYWlsOgorCWtmcmVlKGpmZnMyX2Fj bCk7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9z aXhfYWNsICpqZmZzMl9pZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcG9z aXhfYWNsICoqaV9hY2wpCit7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gSkZGUzJfQUNM X05PVF9DQUNIRUQ7CisKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCWlmICgqaV9h Y2wgIT0gSkZGUzJfQUNMX05PVF9DQUNIRUQpCisJCWFjbCA9IHBvc2l4X2FjbF9kdXAoKmlf YWNsKTsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJcmV0dXJuIGFjbDsKK30K Kworc3RhdGljIHZvaWQgamZmczJfaXNldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3Ry dWN0IHBvc2l4X2FjbCAqKmlfYWNsLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCit7CisJc3Bp bl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlpZiAoKmlfYWNsICE9IEpGRlMyX0FDTF9OT1Rf Q0FDSEVEKQorCQlwb3NpeF9hY2xfcmVsZWFzZSgqaV9hY2wpOworCSppX2FjbCA9IHBvc2l4 X2FjbF9kdXAoYWNsKTsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Cit9CisKK3N0 YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpqZmZzMl9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5v ZGUsIGludCB0eXBlKQoreworCXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmID0gSkZGUzJf SU5PREVfSU5GTyhpbm9kZSk7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsOworCWNoYXIgKnZh bHVlID0gTlVMTDsKKwlpbnQgcmMsIHhwcmVmaXg7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwlj YXNlIEFDTF9UWVBFX0FDQ0VTUzoKKwkJYWNsID0gamZmczJfaWdldF9hY2woaW5vZGUsICZm LT5pX2FjbF9hY2Nlc3MpOworCQlpZiAoYWNsICE9IEpGRlMyX0FDTF9OT1RfQ0FDSEVEKQor CQkJcmV0dXJuIGFjbDsKKwkJeHByZWZpeCA9IEpGRlMyX1hQUkVGSVhfQUNMX0FDQ0VTUzsK KwkJYnJlYWs7CisJY2FzZSBBQ0xfVFlQRV9ERUZBVUxUOgorCQlhY2wgPSBqZmZzMl9pZ2V0 X2FjbChpbm9kZSwgJmYtPmlfYWNsX2RlZmF1bHQpOworCQlpZiAoYWNsICE9IEpGRlMyX0FD TF9OT1RfQ0FDSEVEKQorCQkJcmV0dXJuIGFjbDsKKwkJeHByZWZpeCA9IEpGRlMyX1hQUkVG SVhfQUNMX0RFRkFVTFQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBFUlJfUFRS KC1FSU5WQUwpOworCX0KKwlyYyA9IGRvX2pmZnMyX2dldHhhdHRyKGlub2RlLCB4cHJlZml4 LCAiIiwgTlVMTCwgMCk7CisJaWYgKHJjID4gMCkgeworCQl2YWx1ZSA9IGttYWxsb2MocmMs IEdGUF9LRVJORUwpOworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7CisJCXJjID0gZG9famZmczJfZ2V0eGF0dHIoaW5vZGUsIHhwcmVmaXgsICIiLCB2YWx1 ZSwgcmMpOworCX0KKwlpZiAocmMgPiAwKSB7CisJCWFjbCA9IGpmZnMyX2FjbF9mcm9tX21l ZGl1bSh2YWx1ZSwgcmMpOworCX0gZWxzZSBpZiAocmMgPT0gLUVOT0RBVEEgfHwgcmMgPT0g LUVOT1NZUykgeworCQlhY2wgPSBOVUxMOworCX0gZWxzZSB7CisJCWFjbCA9IEVSUl9QVFIo cmMpOworCX0KKwlpZiAodmFsdWUpCisJCWtmcmVlKHZhbHVlKTsKKwlpZiAoIUlTX0VSUihh Y2wpKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEFDTF9UWVBFX0FDQ0VTUzoKKwkJ CWpmZnMyX2lzZXRfYWNsKGlub2RlLCAmZi0+aV9hY2xfYWNjZXNzLCBhY2wpOworCQkJYnJl YWs7CisJCWNhc2UgQUNMX1RZUEVfREVGQVVMVDoKKwkJCWpmZnMyX2lzZXRfYWNsKGlub2Rl LCAmZi0+aV9hY2xfZGVmYXVsdCwgYWNsKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVy biBhY2w7Cit9CisKK3N0YXRpYyBpbnQgamZmczJfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlu b2RlLCBpbnQgdHlwZSwgc3RydWN0IHBvc2l4X2FjbCAqYWNsKQoreworCXN0cnVjdCBqZmZz Ml9pbm9kZV9pbmZvICpmID0gSkZGUzJfSU5PREVfSU5GTyhpbm9kZSk7CisJc2l6ZV90IHNp emUgPSAwOworCWNoYXIgKnZhbHVlID0gTlVMTDsKKwlpbnQgcmMsIHhwcmVmaXg7CisKKwlp ZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJ c3dpdGNoICh0eXBlKSB7CisJY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6CisJCXhwcmVmaXggPSBK RkZTMl9YUFJFRklYX0FDTF9BQ0NFU1M7CisJCWlmIChhY2wpIHsKKwkJCW1vZGVfdCBtb2Rl ID0gaW5vZGUtPmlfbW9kZTsKKwkJCXJjID0gcG9zaXhfYWNsX2VxdWl2X21vZGUoYWNsLCAm bW9kZSk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJCWlmIChpbm9kZS0+ aV9tb2RlICE9IG1vZGUpIHsKKwkJCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKwkJCQlqZmZz Ml9kaXJ0eV9pbm9kZShpbm9kZSk7CisJCQl9CisJCQlpZiAocmMgPT0gMCkKKwkJCQlhY2wg PSBOVUxMOworCQl9CisJCWJyZWFrOworCWNhc2UgQUNMX1RZUEVfREVGQVVMVDoKKwkJeHBy ZWZpeCA9IEpGRlMyX1hQUkVGSVhfQUNMX0RFRkFVTFQ7CisJCWlmICghU19JU0RJUihpbm9k ZS0+aV9tb2RlKSkKKwkJCXJldHVybiBhY2wgPyAtRUFDQ0VTIDogMDsKKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChhY2wpIHsKKwkJdmFsdWUg PSBqZmZzMl9hY2xfdG9fbWVkaXVtKGFjbCwgJnNpemUpOworCQlpZiAoSVNfRVJSKHZhbHVl KSkKKwkJCXJldHVybiBQVFJfRVJSKHZhbHVlKTsKKwl9CisKKwlyYyA9IGRvX2pmZnMyX3Nl dHhhdHRyKGlub2RlLCB4cHJlZml4LCAiIiwgdmFsdWUsIHNpemUsIDApOworCWlmICh2YWx1 ZSkKKwkJa2ZyZWUodmFsdWUpOworCWlmICghcmMpIHsKKwkJc3dpdGNoKHR5cGUpIHsKKwkJ Y2FzZSBBQ0xfVFlQRV9BQ0NFU1M6CisJCQlqZmZzMl9pc2V0X2FjbChpbm9kZSwgJmYtPmlf YWNsX2FjY2VzcywgYWNsKTsKKwkJCWJyZWFrOworCQljYXNlIEFDTF9UWVBFX0RFRkFVTFQ6 CisJCQlqZmZzMl9pc2V0X2FjbChpbm9kZSwgJmYtPmlfYWNsX2RlZmF1bHQsIGFjbCk7CisJ CQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgamZmczJf Y2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQoreworCXN0cnVjdCBw b3NpeF9hY2wgKmFjbDsKKwlpbnQgcmM7CisKKwlhY2wgPSBqZmZzMl9nZXRfYWNsKGlub2Rl LCBBQ0xfVFlQRV9BQ0NFU1MpOworCWlmIChJU19FUlIoYWNsKSkKKwkJcmV0dXJuIFBUUl9F UlIoYWNsKTsKKwlpZiAoYWNsKSB7CisJCXJjID0gcG9zaXhfYWNsX3Blcm1pc3Npb24oaW5v ZGUsIGFjbCwgbWFzayk7CisJCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CisJCXJldHVybiBy YzsKKwl9CisJcmV0dXJuIC1FQUdBSU47Cit9CisKK2ludCBqZmZzMl9wZXJtaXNzaW9uKHN0 cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sK KwlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBqZmZzMl9jaGVja19h Y2wpOworfQorCitpbnQgamZmczJfaW5pdF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3Ry dWN0IGlub2RlICpkaXIpCit7CisJc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYgPSBKRkZT Ml9JTk9ERV9JTkZPKGlub2RlKTsKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMLCAq Y2xvbmU7CisJbW9kZV90IG1vZGU7CisJaW50IHJjID0gMDsKKworCWYtPmlfYWNsX2FjY2Vz cyA9IEpGRlMyX0FDTF9OT1RfQ0FDSEVEOworCWYtPmlfYWNsX2RlZmF1bHQgPSBKRkZTMl9B Q0xfTk9UX0NBQ0hFRDsKKwlpZiAoIVNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKKwkJYWNs ID0gamZmczJfZ2V0X2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpOworCQlpZiAoSVNfRVJS KGFjbCkpCisJCQlyZXR1cm4gUFRSX0VSUihhY2wpOworCQlpZiAoIWFjbCkKKwkJCWlub2Rl LT5pX21vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwl9CisJaWYgKGFjbCkgeworCQlp ZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgeworCQkJcmMgPSBqZmZzMl9zZXRfYWNsKGlu b2RlLCBBQ0xfVFlQRV9ERUZBVUxULCBhY2wpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gY2xl YW51cDsKKwkJfQorCQljbG9uZSA9IHBvc2l4X2FjbF9jbG9uZShhY2wsIEdGUF9LRVJORUwp OworCQlyYyA9IC1FTk9NRU07CisJCWlmICghY2xvbmUpCisJCQlnb3RvIGNsZWFudXA7CisJ CW1vZGUgPSBpbm9kZS0+aV9tb2RlOworCQlyYyA9IHBvc2l4X2FjbF9jcmVhdGVfbWFzcShj bG9uZSwgJm1vZGUpOworCQlpZiAocmMgPj0gMCkgeworCQkJaW5vZGUtPmlfbW9kZSA9IG1v ZGU7CisJCQlpZiAocmMgPiAwKQorCQkJCXJjID0gamZmczJfc2V0X2FjbChpbm9kZSwgQUNM X1RZUEVfQUNDRVNTLCBjbG9uZSk7CisJCX0KKwkJcG9zaXhfYWNsX3JlbGVhc2UoY2xvbmUp OworCX0KKyBjbGVhbnVwOgorCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CisJcmV0dXJuIHJj OworfQorCit2b2lkIGpmZnMyX2NsZWFyX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlKQorewor CXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmID0gSkZGUzJfSU5PREVfSU5GTyhpbm9kZSk7 CisKKwlpZiAoZi0+aV9hY2xfYWNjZXNzICYmIGYtPmlfYWNsX2FjY2VzcyAhPSBKRkZTMl9B Q0xfTk9UX0NBQ0hFRCkgeworCQlwb3NpeF9hY2xfcmVsZWFzZShmLT5pX2FjbF9hY2Nlc3Mp OworCQlmLT5pX2FjbF9hY2Nlc3MgPSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRDsKKwl9CisJaWYg KGYtPmlfYWNsX2RlZmF1bHQgJiYgZi0+aV9hY2xfZGVmYXVsdCAhPSBKRkZTMl9BQ0xfTk9U X0NBQ0hFRCkgeworCQlwb3NpeF9hY2xfcmVsZWFzZShmLT5pX2FjbF9kZWZhdWx0KTsKKwkJ Zi0+aV9hY2xfZGVmYXVsdCA9IEpGRlMyX0FDTF9OT1RfQ0FDSEVEOworCX0KK30KKworaW50 IGpmZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBwb3Np eF9hY2wgKmFjbCwgKmNsb25lOworCWludCByYzsKKworCWlmIChTX0lTTE5LKGlub2RlLT5p X21vZGUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJYWNsID0gamZmczJfZ2V0X2FjbChp bm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKKwlpZiAoSVNfRVJSKGFjbCkgfHwgIWFjbCkKKwkJ cmV0dXJuIFBUUl9FUlIoYWNsKTsKKwljbG9uZSA9IHBvc2l4X2FjbF9jbG9uZShhY2wsIEdG UF9LRVJORUwpOworCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CisJaWYgKCFjbG9uZSkKKwkJ cmV0dXJuIC1FTk9NRU07CisJcmMgPSBwb3NpeF9hY2xfY2htb2RfbWFzcShjbG9uZSwgaW5v ZGUtPmlfbW9kZSk7CisJaWYgKCFyYykKKwkJcmMgPSBqZmZzMl9zZXRfYWNsKGlub2RlLCBB Q0xfVFlQRV9BQ0NFU1MsIGNsb25lKTsKKwlwb3NpeF9hY2xfcmVsZWFzZShjbG9uZSk7CisJ cmV0dXJuIHJjOworfQorCitzdGF0aWMgc2l6ZV90IGpmZnMyX2FjbF9hY2Nlc3NfbGlzdHhh dHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUs CisJCQkJCSBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCit7CisJY29uc3Qg aW50IHJldGxlbiA9IHNpemVvZihQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTKTsKKworCWlmIChs aXN0ICYmIHJldGxlbiA8PSBsaXN0X3NpemUpCisJCXN0cmNweShsaXN0LCBQT1NJWF9BQ0xf WEFUVFJfQUNDRVNTKTsKKwlyZXR1cm4gcmV0bGVuOworfQorCitzdGF0aWMgc2l6ZV90IGpm ZnMyX2FjbF9kZWZhdWx0X2xpc3R4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICps aXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVf dCBuYW1lX2xlbikKK3sKKwljb25zdCBpbnQgcmV0bGVuID0gc2l6ZW9mKFBPU0lYX0FDTF9Y QVRUUl9ERUZBVUxUKTsKKworCWlmIChsaXN0ICYmIHJldGxlbiA8PSBsaXN0X3NpemUpCisJ CXN0cmNweShsaXN0LCBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCk7CisJcmV0dXJuIHJldGxl bjsKK30KKworc3RhdGljIGludCBqZmZzMl9hY2xfZ2V0eGF0dHIoc3RydWN0IGlub2RlICpp bm9kZSwgaW50IHR5cGUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0 IHBvc2l4X2FjbCAqYWNsOworCWludCByYzsKKworCWFjbCA9IGpmZnMyX2dldF9hY2woaW5v ZGUsIHR5cGUpOworCWlmIChJU19FUlIoYWNsKSkKKwkJcmV0dXJuIFBUUl9FUlIoYWNsKTsK KwlpZiAoIWFjbCkKKwkJcmV0dXJuIC1FTk9EQVRBOworCXJjID0gcG9zaXhfYWNsX3RvX3hh dHRyKGFjbCwgYnVmZmVyLCBzaXplKTsKKwlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCisJ cmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGpmZnMyX2FjbF9hY2Nlc3NfZ2V0eGF0dHIo c3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBz aXplX3Qgc2l6ZSkKK3sKKwlpZiAobmFtZVswXSAhPSAnXDAnKQorCQlyZXR1cm4gLUVJTlZB TDsKKwlyZXR1cm4gamZmczJfYWNsX2dldHhhdHRyKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1Ms IGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgamZmczJfYWNsX2RlZmF1bHRfZ2V0 eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVm ZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAobmFtZVswXSAhPSAnXDAnKQorCQlyZXR1cm4g LUVJTlZBTDsKKwlyZXR1cm4gamZmczJfYWNsX2dldHhhdHRyKGlub2RlLCBBQ0xfVFlQRV9E RUZBVUxULCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgaW50IGpmZnMyX2FjbF9zZXR4 YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUs IHNpemVfdCBzaXplKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKKwlpbnQgcmM7CisK KwlpZiAoKGN1cnJlbnQtPmZzdWlkICE9IGlub2RlLT5pX3VpZCkgJiYgIWNhcGFibGUoQ0FQ X0ZPV05FUikpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAodmFsdWUpIHsKKwkJYWNsID0g cG9zaXhfYWNsX2Zyb21feGF0dHIodmFsdWUsIHNpemUpOworCQlpZiAoSVNfRVJSKGFjbCkp CisJCQlyZXR1cm4gUFRSX0VSUihhY2wpOworCQlpZiAoYWNsKSB7CisJCQlyYyA9IHBvc2l4 X2FjbF92YWxpZChhY2wpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gb3V0OworCQl9CisJfSBl bHNlIHsKKwkJYWNsID0gTlVMTDsKKwl9CisJcmMgPSBqZmZzMl9zZXRfYWNsKGlub2RlLCB0 eXBlLCBhY2wpOworIG91dDoKKwlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCXJldHVybiBy YzsKK30KKworc3RhdGljIGludCBqZmZzMl9hY2xfYWNjZXNzX3NldHhhdHRyKHN0cnVjdCBp bm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICBjb25zdCB2b2lkICpi dWZmZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJaWYgKG5hbWVbMF0gIT0gJ1ww JykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGpmZnMyX2FjbF9zZXR4YXR0cihpbm9k ZSwgQUNMX1RZUEVfQUNDRVNTLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgaW50IGpm ZnMyX2FjbF9kZWZhdWx0X3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNo YXIgKm5hbWUsCisJCQkJICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwg aW50IGZsYWdzKQoreworCWlmIChuYW1lWzBdICE9ICdcMCcpCisJCXJldHVybiAtRUlOVkFM OworCXJldHVybiBqZmZzMl9hY2xfc2V0eGF0dHIoaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQs IGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIGpmZnMyX2FjbF9h Y2Nlc3NfeGF0dHJfaGFuZGxlciA9IHsKKwkucHJlZml4CT0gUE9TSVhfQUNMX1hBVFRSX0FD Q0VTUywKKwkubGlzdAk9IGpmZnMyX2FjbF9hY2Nlc3NfbGlzdHhhdHRyLAorCS5nZXQJPSBq ZmZzMl9hY2xfYWNjZXNzX2dldHhhdHRyLAorCS5zZXQJPSBqZmZzMl9hY2xfYWNjZXNzX3Nl dHhhdHRyLAorfTsKKworc3RydWN0IHhhdHRyX2hhbmRsZXIgamZmczJfYWNsX2RlZmF1bHRf eGF0dHJfaGFuZGxlciA9IHsKKwkucHJlZml4CT0gUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQs CisJLmxpc3QJPSBqZmZzMl9hY2xfZGVmYXVsdF9saXN0eGF0dHIsCisJLmdldAk9IGpmZnMy X2FjbF9kZWZhdWx0X2dldHhhdHRyLAorCS5zZXQJPSBqZmZzMl9hY2xfZGVmYXVsdF9zZXR4 YXR0ciwKK307Ci0tLSBtdGQtMi42LmdpdC9mcy9qZmZzMi9hY2wuaAkxOTcwLTAxLTAxIDA5 OjAwOjAwLjAwMDAwMDAwMCArMDkwMAorKysgbXRkLTIuNi4wNTA2L2ZzL2pmZnMyL2FjbC5o CTIwMDYtMDUtMDYgMTE6Mjg6MTkuMDAwMDAwMDAwICswOTAwCkBAIC0wLDAgKzEsNDYgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqICBGaWxlOiBmcy9qZmZzMi9hY2wuaAorICog IFBPU0lYIEFDTCBzdXBwb3J0IG9uIEpGRlMyIEZpbGVTeXN0ZW0KKyAqCisgKiAgSW1wbGVt ZW50ZWQgYnkgS2FpR2FpIEtvaGVpIDxrYWlnYWlAYWsuanAubmVjLmNvbT4KKyAqICBDb3B5 cmlnaHQgKEMpIDIwMDYgTkVDIENvcnBvcmF0aW9uCisgKgorICogIEZvciBsaWNlbnNpbmcg aW5mb3JtYXRpb24sIHNlZSB0aGUgZmlsZSAnTElDRU5DRScgaW4gdGhlIGpmZnMyIGRpcmVj dG9yeS4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB7CisJamlu dDE2X3QJZV90YWc7CisJamludDE2X3QJZV9wZXJtOworCWppbnQzMl90CWVfaWQ7Cit9IGpm ZnMyX2FjbF9lbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWppbnQxNl90CWVfdGFnOwor CWppbnQxNl90CWVfcGVybTsKK30gamZmczJfYWNsX2VudHJ5X3Nob3J0OworCit0eXBlZGVm IHN0cnVjdCB7CisJamludDMyX3QJYV92ZXJzaW9uOworfSBqZmZzMl9hY2xfaGVhZGVyOwor CisjaWZkZWYgX19LRVJORUxfXworI2lmZGVmIENPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0wK KworI2RlZmluZSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRCAoKHZvaWQgKiktMSkKKworZXh0ZXJu IGludCBqZmZzMl9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQsIHN0cnVjdCBuYW1l aWRhdGEgKik7CitleHRlcm4gaW50IGpmZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKik7 CitleHRlcm4gaW50IGpmZnMyX2luaXRfYWNsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5v ZGUgKik7CitleHRlcm4gdm9pZCBqZmZzMl9jbGVhcl9hY2woc3RydWN0IGlub2RlICopOwor CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgamZmczJfYWNsX2FjY2Vzc194YXR0cl9o YW5kbGVyOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIGpmZnMyX2FjbF9kZWZhdWx0 X3hhdHRyX2hhbmRsZXI7CisKKyNlbHNlCisKKyNkZWZpbmUgamZmczJfcGVybWlzc2lvbiBO VUxMCisjZGVmaW5lIGpmZnMyX2FjbF9jaG1vZChpbm9kZSkJCSgwKQorI2RlZmluZSBqZmZz Ml9pbml0X2FjbChpbm9kZSxkaXIpCSgwKQorI2RlZmluZSBqZmZzMl9jbGVhcl9hY2woaW5v ZGUpCisKKyNlbmRpZgkvKiBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMICovCisjZW5kaWYJ LyogX19LRVJORUxfXyAqLwotLS0gbXRkLTIuNi5naXQvZnMvamZmczIvYnVpbGQuYwkyMDA2 LTA0LTMwIDE4OjA2OjUxLjAwMDAwMDAwMCArMDkwMAorKysgbXRkLTIuNi4wNTA2L2ZzL2pm ZnMyL2J1aWxkLmMJMjAwNi0wNS0wNiAxMToyODoxOS4wMDAwMDAwMDAgKzA5MDAKQEAgLTE2 MCw2ICsxNjAsNyBAQCBzdGF0aWMgaW50IGpmZnMyX2J1aWxkX2ZpbGVzeXN0ZW0oc3RydWN0 CiAJCWljLT5zY2FuX2RlbnRzID0gTlVMTDsKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQorCWpm ZnMyX2J1aWxkX3hhdHRyX3N1YnN5c3RlbShjKTsKIAljLT5mbGFncyAmPSB+SkZGUzJfU0Jf RkxBR19CVUlMRElORzsKIAogCWRiZ19mc2J1aWxkKCJGUyBidWlsZCBjb21wbGV0ZVxuIik7 CkBAIC0xNzgsNiArMTc5LDcgQEAgZXhpdDoKIAkJCQlqZmZzMl9mcmVlX2Z1bGxfZGlyZW50 KGZkKTsKIAkJCX0KIAkJfQorCQlqZmZzMl9jbGVhcl94YXR0cl9zdWJzeXN0ZW0oYyk7CiAJ fQogCiAJcmV0dXJuIHJldDsKLS0tIG10ZC0yLjYuZ2l0L2ZzL2pmZnMyL2RlYnVnLmgJMjAw Ni0wNC0zMCAxODowNjo1MS4wMDAwMDAwMDAgKzA5MDAKKysrIG10ZC0yLjYuMDUwNi9mcy9q ZmZzMi9kZWJ1Zy5oCTIwMDYtMDUtMDYgMTE6Mjg6MTkuMDAwMDAwMDAwICswOTAwCkBAIC0x NzEsNiArMTcxLDEyIEBACiAjZGVmaW5lIGRiZ19tZW1hbGxvYyhmbXQsIC4uLikKICNlbmRp ZgogCisvKiBXYXRjaCB0aGUgWEFUVFIgc3Vic3lzdGVtICovCisjaWZkZWYgSkZGUzJfREJH X1hBVFRSX01FU1NBR0VTCisjZGVmaW5lIGRiZ194YXR0cihmbXQsIC4uLikgIEpGRlMyX0RF QlVHKGZtdCwgIyNfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIGRiZ194YXR0cihmbXQs IC4uLikKKyNlbmRpZiAKIAogLyogIlNhbml0eSIgY2hlY2tzICovCiB2b2lkCi0tLSBtdGQt Mi42LmdpdC9mcy9qZmZzMi9kaXIuYwkyMDA2LTA1LTA1IDAzOjE0OjQwLjAwMDAwMDAwMCAr MDkwMAorKysgbXRkLTIuNi4wNTA2L2ZzL2pmZnMyL2Rpci5jCTIwMDYtMDUtMDYgMTE6Mjg6 MTkuMDAwMDAwMDAwICswOTAwCkBAIC01Nyw3ICs1NywxMiBAQCBzdHJ1Y3QgaW5vZGVfb3Bl cmF0aW9ucyBqZmZzMl9kaXJfaW5vZGVfCiAJLnJtZGlyID0JamZmczJfcm1kaXIsCiAJLm1r bm9kID0JamZmczJfbWtub2QsCiAJLnJlbmFtZSA9CWpmZnMyX3JlbmFtZSwKKwkucGVybWlz c2lvbiA9CWpmZnMyX3Blcm1pc3Npb24sCiAJLnNldGF0dHIgPQlqZmZzMl9zZXRhdHRyLAor CS5zZXR4YXR0ciA9CWpmZnMyX3NldHhhdHRyLAorCS5nZXR4YXR0ciA9CWpmZnMyX2dldHhh dHRyLAorCS5saXN0eGF0dHIgPQlqZmZzMl9saXN0eGF0dHIsCisJLnJlbW92ZXhhdHRyID0J amZmczJfcmVtb3ZleGF0dHIKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIwOSwx MiArMjE0LDE1IEBAIHN0YXRpYyBpbnQgamZmczJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGkK IAlyZXQgPSBqZmZzMl9kb19jcmVhdGUoYywgZGlyX2YsIGYsIHJpLAogCQkJICAgICAgZGVu dHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuKTsKIAotCWlmIChyZXQpIHsK LQkJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOwotCQlpcHV0KGlub2RlKTsKLQkJamZmczJfZnJl ZV9yYXdfaW5vZGUocmkpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0KQorCQlnb3Rv IGZhaWw7CisKKwlyZXQgPSBqZmZzMl9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXJfaSk7CisJ aWYgKHJldCkKKwkJZ290byBmYWlsOworCXJldCA9IGpmZnMyX2luaXRfYWNsKGlub2RlLCBk aXJfaSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOwogCiAJZGlyX2ktPmlfbXRpbWUgPSBk aXJfaS0+aV9jdGltZSA9IElUSU1FKGplMzJfdG9fY3B1KHJpLT5jdGltZSkpOwogCkBAIC0y MjQsNiArMjMyLDEyIEBAIHN0YXRpYyBpbnQgamZmczJfY3JlYXRlKHN0cnVjdCBpbm9kZSAq ZGkKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfY3JlYXRlOiBDcmVhdGVkIGlubyAj JWx1IHdpdGggbW9kZSAlbywgbmxpbmsgJWQoJWQpLiBucnBhZ2VzICVsZFxuIiwKIAkJICBp bm9kZS0+aV9pbm8sIGlub2RlLT5pX21vZGUsIGlub2RlLT5pX25saW5rLCBmLT5pbm9jYWNo ZS0+bmxpbmssIGlub2RlLT5pX21hcHBpbmctPm5ycGFnZXMpKTsKIAlyZXR1cm4gMDsKKwor IGZhaWw6CisJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOworCWlwdXQoaW5vZGUpOworCWpmZnMy X2ZyZWVfcmF3X2lub2RlKHJpKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCkBAIC0zNzQsNiArMzg4LDE4IEBAIHN0YXRpYyBpbnQgamZmczJfc3ltbGluayAo c3RydWN0IGlub2RlICoKIAl1cCgmZi0+c2VtKTsKIAogCWpmZnMyX2NvbXBsZXRlX3Jlc2Vy dmF0aW9uKGMpOworCisJcmV0ID0gamZmczJfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyX2kp OworCWlmIChyZXQpIHsKKwkJamZmczJfY2xlYXJfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4g cmV0OworCX0KKwlyZXQgPSBqZmZzMl9pbml0X2FjbChpbm9kZSwgZGlyX2kpOworCWlmIChy ZXQpIHsKKwkJamZmczJfY2xlYXJfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4gcmV0OworCX0K KwogCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyZCkrbmFtZWxlbiwg JnBoeXNfb2ZzLCAmYWxsb2NsZW4sCiAJCQkJQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZ X0RJUkVOVF9TSVpFKG5hbWVsZW4pKTsKIAlpZiAocmV0KSB7CkBAIC01MDQsNiArNTMwLDE4 IEBAIHN0YXRpYyBpbnQgamZmczJfbWtkaXIgKHN0cnVjdCBpbm9kZSAqZGkKIAl1cCgmZi0+ c2VtKTsKIAogCWpmZnMyX2NvbXBsZXRlX3Jlc2VydmF0aW9uKGMpOworCisJcmV0ID0gamZm czJfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyX2kpOworCWlmIChyZXQpIHsKKwkJamZmczJf Y2xlYXJfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBqZmZzMl9p bml0X2FjbChpbm9kZSwgZGlyX2kpOworCWlmIChyZXQpIHsKKwkJamZmczJfY2xlYXJfaW5v ZGUoaW5vZGUpOworCQlyZXR1cm4gcmV0OworCX0KKwogCXJldCA9IGpmZnMyX3Jlc2VydmVf c3BhY2UoYywgc2l6ZW9mKCpyZCkrbmFtZWxlbiwgJnBoeXNfb2ZzLCAmYWxsb2NsZW4sCiAJ CQkJQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0RJUkVOVF9TSVpFKG5hbWVsZW4pKTsK IAlpZiAocmV0KSB7CkBAIC02NjAsNiArNjk4LDE4IEBAIHN0YXRpYyBpbnQgamZmczJfbWtu b2QgKHN0cnVjdCBpbm9kZSAqZGkKIAl1cCgmZi0+c2VtKTsKIAogCWpmZnMyX2NvbXBsZXRl X3Jlc2VydmF0aW9uKGMpOworCisJcmV0ID0gamZmczJfaW5pdF9zZWN1cml0eShpbm9kZSwg ZGlyX2kpOworCWlmIChyZXQpIHsKKwkJamZmczJfY2xlYXJfaW5vZGUoaW5vZGUpOworCQly ZXR1cm4gcmV0OworCX0KKwlyZXQgPSBqZmZzMl9pbml0X2FjbChpbm9kZSwgZGlyX2kpOwor CWlmIChyZXQpIHsKKwkJamZmczJfY2xlYXJfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4gcmV0 OworCX0KKwogCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyZCkrbmFt ZWxlbiwgJnBoeXNfb2ZzLCAmYWxsb2NsZW4sCiAJCQkJQUxMT0NfTk9STUFMLCBKRkZTMl9T VU1NQVJZX0RJUkVOVF9TSVpFKG5hbWVsZW4pKTsKIAlpZiAocmV0KSB7Ci0tLSBtdGQtMi42 LmdpdC9mcy9qZmZzMi9maWxlLmMJMjAwNi0wNC0zMCAxODowNjo1MS4wMDAwMDAwMDAgKzA5 MDAKKysrIG10ZC0yLjYuMDUwNi9mcy9qZmZzMi9maWxlLmMJMjAwNi0wNS0wNiAxMToyODox OS4wMDAwMDAwMDAgKzA5MDAKQEAgLTU0LDcgKzU0LDEyIEBAIGNvbnN0IHN0cnVjdCBmaWxl X29wZXJhdGlvbnMgamZmczJfZmlsZV8KIAogc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZm czJfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0KIHsKLQkuc2V0YXR0ciA9CWpmZnMyX3NldGF0 dHIKKwkucGVybWlzc2lvbiA9CWpmZnMyX3Blcm1pc3Npb24sCisJLnNldGF0dHIgPQlqZmZz Ml9zZXRhdHRyLAorCS5zZXR4YXR0ciA9CWpmZnMyX3NldHhhdHRyLAorCS5nZXR4YXR0ciA9 CWpmZnMyX2dldHhhdHRyLAorCS5saXN0eGF0dHIgPQlqZmZzMl9saXN0eGF0dHIsCisJLnJl bW92ZXhhdHRyID0JamZmczJfcmVtb3ZleGF0dHIKIH07CiAKIHN0cnVjdCBhZGRyZXNzX3Nw YWNlX29wZXJhdGlvbnMgamZmczJfZmlsZV9hZGRyZXNzX29wZXJhdGlvbnMgPQotLS0gbXRk LTIuNi5naXQvZnMvamZmczIvZnMuYwkyMDA2LTA1LTA2IDExOjI3OjM1LjAwMDAwMDAwMCAr MDkwMAorKysgbXRkLTIuNi4wNTA2L2ZzL2pmZnMyL2ZzLmMJMjAwNi0wNS0wNiAxMToyODox OS4wMDAwMDAwMDAgKzA5MDAKQEAgLTE4NSw3ICsxODUsMTIgQEAgc3RhdGljIGludCBqZmZz Ml9kb19zZXRhdHRyIChzdHJ1Y3QgaW5vZAogCiBpbnQgamZmczJfc2V0YXR0cihzdHJ1Y3Qg ZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpCiB7Ci0JcmV0dXJuIGpmZnMy X2RvX3NldGF0dHIoZGVudHJ5LT5kX2lub2RlLCBpYXR0cik7CisJaW50IHJjOworCisJcmMg PSBqZmZzMl9kb19zZXRhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgaWF0dHIpOworCWlmICghcmMg JiYgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkpCisJCXJjID0gamZmczJfYWNsX2No bW9kKGRlbnRyeS0+ZF9pbm9kZSk7CisJcmV0dXJuIHJjOwogfQogCiBpbnQgamZmczJfc3Rh dGZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrc3RhdGZzICpidWYpCkBAIC0y MjQsNiArMjI5LDcgQEAgdm9pZCBqZmZzMl9jbGVhcl9pbm9kZSAoc3RydWN0IGlub2RlICpp bgogCiAJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2NsZWFyX2lub2RlKCk6IGlubyAj JWx1IG1vZGUgJW9cbiIsIGlub2RlLT5pX2lubywgaW5vZGUtPmlfbW9kZSkpOwogCisJamZm czJfeGF0dHJfZGVsZXRlX2lub2RlKGMsIGYtPmlub2NhY2hlKTsKIAlqZmZzMl9kb19jbGVh cl9pbm9kZShjLCBmKTsKIH0KIApAQCAtNDk3LDYgKzUwMyw4IEBAIGludCBqZmZzMl9kb19m aWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG8KIAl9CiAJbWVtc2V0KGMtPmlub2NhY2hlX2xp c3QsIDAsIElOT0NBQ0hFX0hBU0hTSVpFICogc2l6ZW9mKHN0cnVjdCBqZmZzMl9pbm9kZV9j YWNoZSAqKSk7CiAKKwlqZmZzMl9pbml0X3hhdHRyX3N1YnN5c3RlbShjKTsKKwogCWlmICgo cmV0ID0gamZmczJfZG9fbW91bnRfZnMoYykpKQogCQlnb3RvIG91dF9pbm9oYXNoOwogCkBA IC01MzEsNiArNTM5LDcgQEAgaW50IGpmZnMyX2RvX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVy X2JsbwogCWVsc2UKIAkJa2ZyZWUoYy0+YmxvY2tzKTsKICBvdXRfaW5vaGFzaDoKKwlqZmZz Ml9jbGVhcl94YXR0cl9zdWJzeXN0ZW0oYyk7CiAJa2ZyZWUoYy0+aW5vY2FjaGVfbGlzdCk7 CiAgb3V0X3didWY6CiAJamZmczJfZmxhc2hfY2xlYW51cChjKTsKLS0tIG10ZC0yLjYuZ2l0 L2ZzL2pmZnMyL2djLmMJMjAwNi0wNC0zMCAxODowNjo1MS4wMDAwMDAwMDAgKzA5MDAKKysr IG10ZC0yLjYuMDUwNi9mcy9qZmZzMi9nYy5jCTIwMDYtMDUtMDYgMTE6Mjg6MTkuMDAwMDAw MDAwICswOTAwCkBAIC0xMjUsNiArMTI1LDcgQEAgaW50IGpmZnMyX2dhcmJhZ2VfY29sbGVj dF9wYXNzKHN0cnVjdCBqZgogCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWI7CiAJc3Ry dWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmF3OwogCWludCByZXQgPSAwLCBpbnVtLCBubGlu azsKKwlpbnQgeGF0dHIgPSAwOwogCiAJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYy0+YWxs b2Nfc2VtKSkKIAkJcmV0dXJuIC1FSU5UUjsKQEAgLTEzOCw3ICsxMzksNyBAQCBpbnQgamZm czJfZ2FyYmFnZV9jb2xsZWN0X3Bhc3Moc3RydWN0IGpmCiAJCSAgIHRoZSBub2RlIENSQ3Mg ZXRjLiBEbyBpdCBub3cuICovCiAKIAkJLyogY2hlY2tlZF9pbm8gaXMgcHJvdGVjdGVkIGJ5 IHRoZSBhbGxvY19zZW0gKi8KLQkJaWYgKGMtPmNoZWNrZWRfaW5vID4gYy0+aGlnaGVzdF9p bm8pIHsKKwkJaWYgKGMtPmNoZWNrZWRfaW5vID4gYy0+aGlnaGVzdF9pbm8gJiYgeGF0dHIp IHsKIAkJCXByaW50ayhLRVJOX0NSSVQgIkNoZWNrZWQgYWxsIGlub2RlcyBidXQgc3RpbGwg MHgleCBieXRlcyBvZiB1bmNoZWNrZWQgc3BhY2U/XG4iLAogCQkJICAgICAgIGMtPnVuY2hl Y2tlZF9zaXplKTsKIAkJCWpmZnMyX2RiZ19kdW1wX2Jsb2NrX2xpc3RzX25vbG9jayhjKTsK QEAgLTE0OCw2ICsxNDksOSBAQCBpbnQgamZmczJfZ2FyYmFnZV9jb2xsZWN0X3Bhc3Moc3Ry dWN0IGpmCiAKIAkJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAK KwkJaWYgKCF4YXR0cikKKwkJCXhhdHRyID0gamZmczJfdmVyaWZ5X3hhdHRyKGMpOworCiAJ CXNwaW5fbG9jaygmYy0+aW5vY2FjaGVfbG9jayk7CiAKIAkJaWMgPSBqZmZzMl9nZXRfaW5v X2NhY2hlKGMsIGMtPmNoZWNrZWRfaW5vKyspOwpAQCAtMjYyLDYgKzI2NiwxNiBAQCBpbnQg amZmczJfZ2FyYmFnZV9jb2xsZWN0X3Bhc3Moc3RydWN0IGpmCiAKIAlpYyA9IGpmZnMyX3Jh d19yZWZfdG9faWMocmF3KTsKIAorCS8qIFdoZW4gJ2ljJyByZWZlcnMgeGF0dHJfZGF0dW0v eGF0dHJfcmVmLCB0aGlzIG5vZGUgaXMgR0NlZCBhcyB4YXR0ci4KKwkgICBXZSBjYW4gZGVj aWRlIHdoZXRoZXIgdGhpcyBub2RlIGlzIGlub2RlIG9yIHhhdHRyIGJ5IGljLT5jbGFzcy4K KwkgICByZXQgPSAwIDogaWMgaXMgeGF0dHJfZGF0dW0veGF0dHJfcmVmLCBhbmQgR0Mgd2Fz IFNVQ0NFU1NFRC4KKwkgICByZXQgPCAwIDogaWMgaXMgeGF0dHJfZGF0dW0veGF0dHJfcmVm LCBidXQgR0Mgd2FzIEZBSUxFRC4KKwkgICByZXQgPiAwIDogaWMgaXMgTk9UIHhhdHRyX2Rh dHVtL3hhdHRyX3JlZi4KKwkqLworCXJldCA9IGpmZnMyX2dhcmJhZ2VfY29sbGVjdF94YXR0 cihjLCBpYyk7CisJaWYgKHJldCA8PSAwKQorCQlnb3RvIHJlbGVhc2Vfc2VtOworCiAJLyog V2UgbmVlZCB0byBob2xkIHRoZSBpbm9jYWNoZS4gRWl0aGVyIHRoZSBlcmFzZV9jb21wbGV0 aW9uX2xvY2sgb3IKIAkgICB0aGUgaW5vY2FjaGVfbG9jayBhcmUgc3VmZmljaWVudDsgd2Ug dHJhZGUgZG93biBzaW5jZSB0aGUgaW5vY2FjaGVfbG9jawogCSAgIGNhdXNlcyBsZXNzIGNv bnRlbnRpb24uICovCi0tLSBtdGQtMi42LmdpdC9mcy9qZmZzMi9qZmZzMl9mc19pLmgJMjAw Ni0wNS0wNSAwMzoxNDo0MC4wMDAwMDAwMDAgKzA5MDAKKysrIG10ZC0yLjYuMDUwNi9mcy9q ZmZzMi9qZmZzMl9mc19pLmgJMjAwNi0wNS0wNiAxMToyODoxOS4wMDAwMDAwMDAgKzA5MDAK QEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVk ZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+CiAjaW5j bHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyB7CkBA IC00NSw2ICs0NiwxMCBAQCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyB7CiAJc3RydWN0IGlu b2RlIHZmc19pbm9kZTsKICNlbmRpZgogI2VuZGlmCisjaWZkZWYgQ09ORklHX0pGRlMyX0ZT X1BPU0lYX0FDTAorCXN0cnVjdCBwb3NpeF9hY2wgKmlfYWNsX2FjY2VzczsKKwlzdHJ1Y3Qg cG9zaXhfYWNsICppX2FjbF9kZWZhdWx0OworI2VuZGlmCiB9OwogCiAjZW5kaWYgLyogX0pG RlMyX0ZTX0kgKi8KLS0tIG10ZC0yLjYuZ2l0L2ZzL2pmZnMyL2pmZnMyX2ZzX3NiLmgJMjAw Ni0wNS0wNSAwMzoxNDo0MC4wMDAwMDAwMDAgKzA5MDAKKysrIG10ZC0yLjYuMDUwNi9mcy9q ZmZzMi9qZmZzMl9mc19zYi5oCTIwMDYtMDUtMDYgMTE6Mjg6MTkuMDAwMDAwMDAwICswOTAw CkBAIC0xMTUsNiArMTE1LDE2IEBAIHN0cnVjdCBqZmZzMl9zYl9pbmZvIHsKIAogCXN0cnVj dCBqZmZzMl9zdW1tYXJ5ICpzdW1tYXJ5OwkJLyogU3VtbWFyeSBpbmZvcm1hdGlvbiAqLwog CisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1hBVFRSCisjZGVmaW5lIFhBVFRSSU5ERVhfSEFT SFNJWkUJKDU3KQorCXVpbnQzMl90IGhpZ2hlc3RfeGlkOworCXN0cnVjdCBsaXN0X2hlYWQg eGF0dHJpbmRleFtYQVRUUklOREVYX0hBU0hTSVpFXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHhh dHRyX3RlbXA7CisJc3RydWN0IGxpc3RfaGVhZCB4YXR0cl91bmNoZWNrZWQ7CisJc3RydWN0 IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07CisJdWludDMyX3QgeGRhdHVtX21lbV91c2FnZTsK Kwl1aW50MzJfdCB4ZGF0dW1fbWVtX3RocmVzaG9sZDsKKyNlbmRpZgogCS8qIE9TLXByaXZh dGUgcG9pbnRlciBmb3IgZ2V0dGluZyBiYWNrIHRvIG1hc3RlciBzdXBlcmJsb2NrIGluZm8g Ki8KIAl2b2lkICpvc19wcml2OwogfTsKLS0tIG10ZC0yLjYuZ2l0L2ZzL2pmZnMyL21hbGxv Yy5jCTIwMDYtMDQtMzAgMTg6MDY6NTEuMDAwMDAwMDAwICswOTAwCisrKyBtdGQtMi42LjA1 MDYvZnMvamZmczIvbWFsbG9jLmMJMjAwNi0wNS0wNiAxMToyODoxOS4wMDAwMDAwMDAgKzA5 MDAKQEAgLTI2LDYgKzI2LDEwIEBAIHN0YXRpYyBrbWVtX2NhY2hlX3QgKnRtcF9kbm9kZV9p bmZvX3NsYWIKIHN0YXRpYyBrbWVtX2NhY2hlX3QgKnJhd19ub2RlX3JlZl9zbGFiOwogc3Rh dGljIGttZW1fY2FjaGVfdCAqbm9kZV9mcmFnX3NsYWI7CiBzdGF0aWMga21lbV9jYWNoZV90 ICppbm9kZV9jYWNoZV9zbGFiOworI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgorc3Rh dGljIGttZW1fY2FjaGVfdCAqeGF0dHJfZGF0dW1fY2FjaGU7CitzdGF0aWMga21lbV9jYWNo ZV90ICp4YXR0cl9yZWZfY2FjaGU7CisjZW5kaWYKIAogaW50IF9faW5pdCBqZmZzMl9jcmVh dGVfc2xhYl9jYWNoZXModm9pZCkKIHsKQEAgLTY4LDggKzcyLDI0IEBAIGludCBfX2luaXQg amZmczJfY3JlYXRlX3NsYWJfY2FjaGVzKHZvaWQKIAlpbm9kZV9jYWNoZV9zbGFiID0ga21l bV9jYWNoZV9jcmVhdGUoImpmZnMyX2lub2RlX2NhY2hlIiwKIAkJCQkJICAgICBzaXplb2Yo c3RydWN0IGpmZnMyX2lub2RlX2NhY2hlKSwKIAkJCQkJICAgICAwLCAwLCBOVUxMLCBOVUxM KTsKLQlpZiAoaW5vZGVfY2FjaGVfc2xhYikKLQkJcmV0dXJuIDA7CisJaWYgKCFpbm9kZV9j YWNoZV9zbGFiKQorCQlnb3RvIGVycjsKKworI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRU UgorCXhhdHRyX2RhdHVtX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImpmZnMyX3hhdHRy X2RhdHVtIiwKKwkJCQkJICAgICBzaXplb2Yoc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtKSwK KwkJCQkJICAgICAwLCAwLCBOVUxMLCBOVUxMKTsKKwlpZiAoIXhhdHRyX2RhdHVtX2NhY2hl KQorCQlnb3RvIGVycjsKKworCXhhdHRyX3JlZl9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRl KCJqZmZzMl94YXR0cl9yZWYiLAorCQkJCQkgICBzaXplb2Yoc3RydWN0IGpmZnMyX3hhdHRy X3JlZiksCisJCQkJCSAgIDAsIDAsIE5VTEwsIE5VTEwpOworCWlmICgheGF0dHJfcmVmX2Nh Y2hlKQorCQlnb3RvIGVycjsKKyNlbmRpZgorCisJcmV0dXJuIDA7CiAgZXJyOgogCWpmZnMy X2Rlc3Ryb3lfc2xhYl9jYWNoZXMoKTsKIAlyZXR1cm4gLUVOT01FTTsKQEAgLTkxLDYgKzEx MSwxMiBAQCB2b2lkIGpmZnMyX2Rlc3Ryb3lfc2xhYl9jYWNoZXModm9pZCkKIAkJa21lbV9j YWNoZV9kZXN0cm95KG5vZGVfZnJhZ19zbGFiKTsKIAlpZihpbm9kZV9jYWNoZV9zbGFiKQog CQlrbWVtX2NhY2hlX2Rlc3Ryb3koaW5vZGVfY2FjaGVfc2xhYik7CisjaWZkZWYgQ09ORklH X0pGRlMyX0ZTX1hBVFRSCisJaWYgKHhhdHRyX2RhdHVtX2NhY2hlKQorCQlrbWVtX2NhY2hl X2Rlc3Ryb3koeGF0dHJfZGF0dW1fY2FjaGUpOworCWlmICh4YXR0cl9yZWZfY2FjaGUpCisJ CWttZW1fY2FjaGVfZGVzdHJveSh4YXR0cl9yZWZfY2FjaGUpOworI2VuZGlmCiB9CiAKIHN0 cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqamZmczJfYWxsb2NfZnVsbF9kaXJlbnQoaW50IG5h bWVzaXplKQpAQCAtMjA1LDMgKzIzMSw0MSBAQCB2b2lkIGpmZnMyX2ZyZWVfaW5vZGVfY2Fj aGUoc3RydWN0IGpmZnMyCiAJZGJnX21lbWFsbG9jKCIlcFxuIiwgeCk7CiAJa21lbV9jYWNo ZV9mcmVlKGlub2RlX2NhY2hlX3NsYWIsIHgpOwogfQorCisjaWZkZWYgQ09ORklHX0pGRlMy X0ZTX1hBVFRSCitzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKmpmZnMyX2FsbG9jX3hhdHRy X2RhdHVtKHZvaWQpCit7CisJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZDsKKwl4ZCA9 IGttZW1fY2FjaGVfYWxsb2MoeGF0dHJfZGF0dW1fY2FjaGUsIEdGUF9LRVJORUwpOworCWRi Z19tZW1hbGxvYygiJXBcbiIsIHhkKTsKKworCW1lbXNldCh4ZCwgMCwgc2l6ZW9mKHN0cnVj dCBqZmZzMl94YXR0cl9kYXR1bSkpOworCXhkLT5jbGFzcyA9IFJBV05PREVfQ0xBU1NfWEFU VFJfREFUVU07CisJSU5JVF9MSVNUX0hFQUQoJnhkLT54aW5kZXgpOworCXJldHVybiB4ZDsK K30KKwordm9pZCBqZmZzMl9mcmVlX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl94YXR0cl9k YXR1bSAqeGQpCit7CisJZGJnX21lbWFsbG9jKCIlcFxuIiwgeGQpOworCWttZW1fY2FjaGVf ZnJlZSh4YXR0cl9kYXR1bV9jYWNoZSwgeGQpOworfQorCitzdHJ1Y3QgamZmczJfeGF0dHJf cmVmICpqZmZzMl9hbGxvY194YXR0cl9yZWYodm9pZCkKK3sKKwlzdHJ1Y3QgamZmczJfeGF0 dHJfcmVmICpyZWY7CisJcmVmID0ga21lbV9jYWNoZV9hbGxvYyh4YXR0cl9yZWZfY2FjaGUs IEdGUF9LRVJORUwpOworCWRiZ19tZW1hbGxvYygiJXBcbiIsIHJlZik7CisKKwltZW1zZXQo cmVmLCAwLCBzaXplb2Yoc3RydWN0IGpmZnMyX3hhdHRyX3JlZikpOworCXJlZi0+Y2xhc3Mg PSBSQVdOT0RFX0NMQVNTX1hBVFRSX1JFRjsKKwlJTklUX0xJU1RfSEVBRCgmcmVmLT5pbGlz dCk7CisJcmV0dXJuIHJlZjsKK30KKwordm9pZCBqZmZzMl9mcmVlX3hhdHRyX3JlZihzdHJ1 Y3QgamZmczJfeGF0dHJfcmVmICpyZWYpCit7CisJZGJnX21lbWFsbG9jKCIlcFxuIiwgcmVm KTsKKwlrbWVtX2NhY2hlX2ZyZWUoeGF0dHJfcmVmX2NhY2hlLCByZWYpOworfQorI2VuZGlm Ci0tLSBtdGQtMi42LmdpdC9mcy9qZmZzMi9ub2RlbGlzdC5jCTIwMDYtMDQtMzAgMTg6MDY6 NTEuMDAwMDAwMDAwICswOTAwCisrKyBtdGQtMi42LjA1MDYvZnMvamZmczIvbm9kZWxpc3Qu YwkyMDA2LTA1LTA2IDExOjI4OjE5LjAwMDAwMDAwMCArMDkwMApAQCAtOTM4LDYgKzkzOCw3 IEBAIHZvaWQgamZmczJfZnJlZV9pbm9fY2FjaGVzKHN0cnVjdCBqZmZzMl8KIAkJdGhpcyA9 IGMtPmlub2NhY2hlX2xpc3RbaV07CiAJCXdoaWxlICh0aGlzKSB7CiAJCQluZXh0ID0gdGhp cy0+bmV4dDsKKwkJCWpmZnMyX3hhdHRyX2ZyZWVfaW5vZGUoYywgdGhpcyk7CiAJCQlqZmZz Ml9mcmVlX2lub2RlX2NhY2hlKHRoaXMpOwogCQkJdGhpcyA9IG5leHQ7CiAJCX0KLS0tIG10 ZC0yLjYuZ2l0L2ZzL2pmZnMyL25vZGVsaXN0LmgJMjAwNi0wNS0wNSAwMzoxNDo0MC4wMDAw MDAwMDAgKzA5MDAKKysrIG10ZC0yLjYuMDUwNi9mcy9qZmZzMi9ub2RlbGlzdC5oCTIwMDYt MDUtMDYgMTE6Mjg6MTkuMDAwMDAwMDAwICswOTAwCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5j bHVkZSA8bGludXgvamZmczIuaD4KICNpbmNsdWRlICJqZmZzMl9mc19zYi5oIgogI2luY2x1 ZGUgImpmZnMyX2ZzX2kuaCIKKyNpbmNsdWRlICJ4YXR0ci5oIgorI2luY2x1ZGUgImFjbC5o IgogI2luY2x1ZGUgInN1bW1hcnkuaCIKIAogI2lmZGVmIF9fRUNPUwpAQCAtMTA3LDExICsx MDksMTYgQEAgc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlIHsKIAkJdGVtcG9yYXJ5IGxpc3Rz IG9mIGRpcmVudHMsIGFuZCBsYXRlciBtdXN0IGJlIHNldCB0bwogCQlOVUxMIHRvIG1hcmsg dGhlIGVuZCBvZiB0aGUgcmF3X25vZGVfcmVmLT5uZXh0X2luX2lubwogCQljaGFpbi4gKi8K Kwl1OCBjbGFzczsJLyogSXQncyB1c2VkIGZvciBpZGVudGlmaWNhdGlvbiAqLworCXU4IGZs YWdzOworCXVpbnQxNl90IHN0YXRlOwogCXN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqbmV4 dDsKIAlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpub2RlczsKIAl1aW50MzJfdCBpbm87 CiAJaW50IG5saW5rOwotCWludCBzdGF0ZTsKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFU VFIKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlsaXN0OworI2VuZGlmCiB9OwogCiAvKiBJbm9kZSBz dGF0ZXMgZm9yICdzdGF0ZScgYWJvdmUuIFdlIG5lZWQgdGhlICdHQycgc3RhdGUgdG8gcHJl dmVudApAQCAtMTI1LDYgKzEzMiwxMiBAQCBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgewog I2RlZmluZSBJTk9fU1RBVEVfUkVBRElORwk1CS8qIEluIHJlYWRfaW5vZGUoKSAqLwogI2Rl ZmluZSBJTk9fU1RBVEVfQ0xFQVJJTkcJNgkvKiBJbiBjbGVhcl9pbm9kZSgpICovCiAKKyNk ZWZpbmUgSU5PX0ZMQUdTX1hBVFRSX0NIRUNLRUQJMHgwMQkvKiBoYXMgbm8gZHVwbGljYXRl IHhhdHRyX3JlZiAqLworCisjZGVmaW5lIFJBV05PREVfQ0xBU1NfSU5PREVfQ0FDSEUJMAor I2RlZmluZSBSQVdOT0RFX0NMQVNTX1hBVFRSX0RBVFVNCTEKKyNkZWZpbmUgUkFXTk9ERV9D TEFTU19YQVRUUl9SRUYJCTIKKwogI2RlZmluZSBJTk9DQUNIRV9IQVNIU0laRSAxMjgKIAog LyoKQEAgLTM3NCw2ICszODcsMTIgQEAgc3RydWN0IGpmZnMyX25vZGVfZnJhZyAqamZmczJf YWxsb2Nfbm9kZQogdm9pZCBqZmZzMl9mcmVlX25vZGVfZnJhZyhzdHJ1Y3QgamZmczJfbm9k ZV9mcmFnICopOwogc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICpqZmZzMl9hbGxvY19pbm9k ZV9jYWNoZSh2b2lkKTsKIHZvaWQgamZmczJfZnJlZV9pbm9kZV9jYWNoZShzdHJ1Y3QgamZm czJfaW5vZGVfY2FjaGUgKik7CisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1hBVFRSCitzdHJ1 Y3QgamZmczJfeGF0dHJfZGF0dW0gKmpmZnMyX2FsbG9jX3hhdHRyX2RhdHVtKHZvaWQpOwor dm9pZCBqZmZzMl9mcmVlX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAq KTsKK3N0cnVjdCBqZmZzMl94YXR0cl9yZWYgKmpmZnMyX2FsbG9jX3hhdHRyX3JlZih2b2lk KTsKK3ZvaWQgamZmczJfZnJlZV94YXR0cl9yZWYoc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAq KTsKKyNlbmRpZgogCiAvKiBnYy5jICovCiBpbnQgamZmczJfZ2FyYmFnZV9jb2xsZWN0X3Bh c3Moc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOwotLS0gbXRkLTIuNi5naXQvZnMvamZmczIv b3MtbGludXguaAkyMDA2LTA0LTMwIDE4OjA2OjUxLjAwMDAwMDAwMCArMDkwMAorKysgbXRk LTIuNi4wNTA2L2ZzL2pmZnMyL29zLWxpbnV4LmgJMjAwNi0wNS0wNiAxMToyODoxOS4wMDAw MDAwMDAgKzA5MDAKQEAgLTYwLDYgKzYwLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBqZmZz Ml9pbml0X2lub2RlX2luZm8KIAlmLT50YXJnZXQgPSBOVUxMOwogCWYtPmZsYWdzID0gMDsK IAlmLT51c2VyY29tcHIgPSAwOworI2lmZGVmIENPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0wK KwlmLT5pX2FjbF9hY2Nlc3MgPSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRDsKKwlmLT5pX2FjbF9k ZWZhdWx0ID0gSkZGUzJfQUNMX05PVF9DQUNIRUQ7CisjZW5kaWYKIH0KIAogCi0tLSBtdGQt Mi42LmdpdC9mcy9qZmZzMi9yZWFkaW5vZGUuYwkyMDA2LTA0LTMwIDE4OjA2OjUxLjAwMDAw MDAwMCArMDkwMAorKysgbXRkLTIuNi4wNTA2L2ZzL2pmZnMyL3JlYWRpbm9kZS5jCTIwMDYt MDUtMDYgMTE6Mjg6MTkuMDAwMDAwMDAwICswOTAwCkBAIC05MDIsNiArOTAyLDcgQEAgaW50 IGpmZnMyX2RvX3JlYWRfaW5vZGUoc3RydWN0IGpmZnMyX3NiXwogCQlmLT5pbm9jYWNoZS0+ aW5vID0gZi0+aW5vY2FjaGUtPm5saW5rID0gMTsKIAkJZi0+aW5vY2FjaGUtPm5vZGVzID0g KHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKilmLT5pbm9jYWNoZTsKIAkJZi0+aW5vY2Fj aGUtPnN0YXRlID0gSU5PX1NUQVRFX1JFQURJTkc7CisJCWluaXRfeGF0dHJfaW5vZGVfY2Fj aGUoZi0+aW5vY2FjaGUpOwogCQlqZmZzMl9hZGRfaW5vX2NhY2hlKGMsIGYtPmlub2NhY2hl KTsKIAl9CiAJaWYgKCFmLT5pbm9jYWNoZSkgewotLS0gbXRkLTIuNi5naXQvZnMvamZmczIv c2Nhbi5jCTIwMDYtMDQtMzAgMTg6MDY6NTEuMDAwMDAwMDAwICswOTAwCisrKyBtdGQtMi42 LjA1MDYvZnMvamZmczIvc2Nhbi5jCTIwMDYtMDUtMDYgMTE6Mjg6MTkuMDAwMDAwMDAwICsw OTAwCkBAIC0zMDYsNiArMzA2LDEzNiBAQCBpbnQgamZmczJfc2Nhbl9jbGFzc2lmeV9qZWIo c3RydWN0IGpmZnMyCiAJCXJldHVybiBCTEtfU1RBVEVfQUxMRElSVFk7CiB9CiAKKyNpZmRl ZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKK3N0YXRpYyBpbnQgamZmczJfc2Nhbl94YXR0cl9u b2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAq amViLAorCQkJCSBzdHJ1Y3QgamZmczJfcmF3X3hhdHRyICpyeCwgdWludDMyX3Qgb2ZzLAor CQkJCSBzdHJ1Y3QgamZmczJfc3VtbWFyeSAqcykKK3sKKwlzdHJ1Y3QgamZmczJfeGF0dHJf ZGF0dW0gKnhkOworCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdzsKKwl1aW50MzJf dCB0b3RsZW4sIGNyYzsKKworCWNyYyA9IGNyYzMyKDAsIHJ4LCBzaXplb2Yoc3RydWN0IGpm ZnMyX3Jhd194YXR0cikgLSA0KTsKKwlpZiAoY3JjICE9IGplMzJfdG9fY3B1KHJ4LT5ub2Rl X2NyYykpIHsKKwkJaWYgKGplMzJfdG9fY3B1KHJ4LT5ub2RlX2NyYykgIT0gMHhmZmZmZmZm ZikKKwkJCUpGRlMyX1dBUk5JTkcoIm5vZGUgQ1JDIGZhaWxlZCBhdCAlIzA4eCwgcmVhZD0l IzA4eCwgY2FsYz0lIzA4eFxuIiwKKwkJCQkgICAgICBvZnMsIGplMzJfdG9fY3B1KHJ4LT5u b2RlX2NyYyksIGNyYyk7CisJCURJUlRZX1NQQUNFKGplMzJfdG9fY3B1KHJ4LT50b3RsZW4p KTsKKwkJcmV0dXJuIDA7CisJfQorCisJdG90bGVuID0gUEFEKHNpemVvZigqcngpICsgcngt Pm5hbWVfbGVuICsgMSArIGplMTZfdG9fY3B1KHJ4LT52YWx1ZV9sZW4pKTsKKwlpZiAodG90 bGVuICE9IGplMzJfdG9fY3B1KHJ4LT50b3RsZW4pKSB7CisJCUpGRlMyX1dBUk5JTkcoIm5v ZGUgbGVuZ3RoIG1pc21hdGNoIGF0ICUjMDh4LCByZWFkPSV1LCBjYWxjPSV1XG4iLAorCQkJ ICAgICAgb2ZzLCBqZTMyX3RvX2NwdShyeC0+dG90bGVuKSwgdG90bGVuKTsKKwkJRElSVFlf U1BBQ0UoamUzMl90b19jcHUocngtPnRvdGxlbikpOworCQlyZXR1cm4gMDsKKwl9CisKKwly YXcgPSAgamZmczJfYWxsb2NfcmF3X25vZGVfcmVmKCk7CisJaWYgKCFyYXcpCisJCXJldHVy biAtRU5PTUVNOworCisJeGQgPSBqZmZzMl9zZXR1cF94YXR0cl9kYXR1bShjLCBqZTMyX3Rv X2NwdShyeC0+eGlkKSwgamUzMl90b19jcHUocngtPnZlcnNpb24pKTsKKwlpZiAoSVNfRVJS KHhkKSkgeworCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyYXcpOworCQlpZiAoUFRSX0VS Uih4ZCkgPT0gLUVFWElTVCkgeworCQkJRElSVFlfU1BBQ0UoUEFEKGplMzJfdG9fY3B1KHJ4 LT50b3RsZW4pKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gUFRSX0VSUih4ZCk7 CisJfQorCXhkLT54cHJlZml4ID0gcngtPnhwcmVmaXg7CisJeGQtPm5hbWVfbGVuID0gcngt Pm5hbWVfbGVuOworCXhkLT52YWx1ZV9sZW4gPSBqZTE2X3RvX2NwdShyeC0+dmFsdWVfbGVu KTsKKwl4ZC0+ZGF0YV9jcmMgPSBqZTMyX3RvX2NwdShyeC0+ZGF0YV9jcmMpOworCXhkLT5u b2RlID0gcmF3OworCisJcmF3LT5fX3RvdGxlbiA9IHRvdGxlbjsKKwlyYXctPmZsYXNoX29m ZnNldCA9IG9mcyB8IFJFRl9QUklTVElORTsKKwlyYXctPm5leHRfcGh5cyA9IE5VTEw7CisJ cmF3LT5uZXh0X2luX2lubyA9ICh2b2lkICopeGQ7CisJaWYgKCFqZWItPmZpcnN0X25vZGUp CisJCWplYi0+Zmlyc3Rfbm9kZSA9IHJhdzsKKwlpZiAoamViLT5sYXN0X25vZGUpCisJCWpl Yi0+bGFzdF9ub2RlLT5uZXh0X3BoeXMgPSByYXc7CisJamViLT5sYXN0X25vZGUgPSByYXc7 CisKKwlVU0VEX1NQQUNFKFBBRChqZTMyX3RvX2NwdShyeC0+dG90bGVuKSkpOworCWlmIChq ZmZzMl9zdW1fYWN0aXZlKCkpCisJCWpmZnMyX3N1bV9hZGRfeGF0dHJfbWVtKHMsIHJ4LCBv ZnMgLSBqZWItPm9mZnNldCk7CisJZGJnX3hhdHRyKCJzY2FuaW5nIHhkYXR1bSBhdCAlIzA4 eCAoeGlkPSV1LCB2ZXJzaW9uPSV1KVxuIiwKKwkJICBvZnMsIHhkLT54aWQsIHhkLT52ZXJz aW9uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqZmZzMl9zY2FuX3hyZWZfbm9k ZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmpl YiwKKwkJCQlzdHJ1Y3QgamZmczJfcmF3X3hyZWYgKnJyLCB1aW50MzJfdCBvZnMsCisJCQkJ c3RydWN0IGpmZnMyX3N1bW1hcnkgKnMpCit7CisJc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAq cmVmOworCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdzsKKwl1aW50MzJfdCBjcmM7 CisKKwljcmMgPSBjcmMzMigwLCByciwgc2l6ZW9mKCpycikgLSA0KTsKKwlpZiAoY3JjICE9 IGplMzJfdG9fY3B1KHJyLT5ub2RlX2NyYykpIHsKKwkJaWYgKGplMzJfdG9fY3B1KHJyLT5u b2RlX2NyYykgIT0gMHhmZmZmZmZmZikKKwkJCUpGRlMyX1dBUk5JTkcoIm5vZGUgQ1JDIGZh aWxlZCBhdCAlIzA4eCwgcmVhZD0lIzA4eCwgY2FsYz0lIzA4eFxuIiwKKwkJCQkgICAgICBv ZnMsIGplMzJfdG9fY3B1KHJyLT5ub2RlX2NyYyksIGNyYyk7CisJCURJUlRZX1NQQUNFKFBB RChqZTMyX3RvX2NwdShyci0+dG90bGVuKSkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAo UEFEKHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hyZWYpKSAhPSBqZTMyX3RvX2NwdShyci0+ dG90bGVuKSkgeworCQlKRkZTMl9XQVJOSU5HKCJub2RlIGxlbmd0aCBtaXNtYXRjaCBhdCAl IzA4eCwgcmVhZD0ldSwgY2FsYz0ldVxuIiwKKwkJCSAgICAgIG9mcywgamUzMl90b19jcHUo cnItPnRvdGxlbiksCisJCQkgICAgICBQQUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeHJl ZikpKTsKKwkJRElSVFlfU1BBQ0UoamUzMl90b19jcHUocnItPnRvdGxlbikpOworCQlyZXR1 cm4gMDsKKwl9CisKKwlyZWYgPSBqZmZzMl9hbGxvY194YXR0cl9yZWYoKTsKKwlpZiAoIXJl ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyYXcgPSAgamZmczJfYWxsb2NfcmF3X25vZGVf cmVmKCk7CisJaWYgKCFyYXcpIHsKKwkJamZmczJfZnJlZV94YXR0cl9yZWYocmVmKTsKKwkJ cmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQkVGT1JFIGpmZnMyX2J1aWxkX3hhdHRyX3N1 YnN5c3RlbSgpIGNhbGxlZCwgCisJICogcmVmLT54aWQgaXMgdXNlZCB0byBzdG9yZSAzMmJp dCB4aWQsIHhkIGlzIG5vdCB1c2VkCisJICogcmVmLT5pbm8gaXMgdXNlZCB0byBzdG9yZSAz MmJpdCBpbm9kZS1udW1iZXIsIGljIGlzIG5vdCB1c2VkCisJICogVGhvZXMgdmFyaWFibGVz IGFyZSBkZWNsYXJlZCBhcyB1bmlvbiwgdGh1cyB1c2luZyB0aG9zZQorCSAqIGFyZSBleGNs dXNpdmUuIEluIGEgc2ltaWxhciB3YXksIHJlZi0+aWxpc3QgaXMgdGVtcG9yYXJpbHkKKwkg KiB1c2VkIHRvIGNoYWluIGFsbCB4YXR0cl9yZWYgb2JqZWN0LiBJdCdzIHJlLWNoYWluZWQg dG8KKwkgKiBqZmZzMl9pbm9kZV9jYWNoZSBpbiBqZmZzMl9idWlsZF94YXR0cl9zdWJzeXN0 ZW0oKSBjb3JyZWN0bHkuCisJICovCisJcmVmLT5ub2RlID0gcmF3OworCXJlZi0+aW5vID0g amUzMl90b19jcHUocnItPmlubyk7CisJcmVmLT54aWQgPSBqZTMyX3RvX2NwdShyci0+eGlk KTsKKwlsaXN0X2FkZF90YWlsKCZyZWYtPmlsaXN0LCAmYy0+eGF0dHJfdGVtcCk7CisKKwly YXctPl9fdG90bGVuID0gUEFEKGplMzJfdG9fY3B1KHJyLT50b3RsZW4pKTsKKwlyYXctPmZs YXNoX29mZnNldCA9IG9mcyB8IFJFRl9QUklTVElORTsKKwlyYXctPm5leHRfcGh5cyA9IE5V TEw7CisJcmF3LT5uZXh0X2luX2lubyA9ICh2b2lkICopcmVmOworCWlmICghamViLT5maXJz dF9ub2RlKQorCQlqZWItPmZpcnN0X25vZGUgPSByYXc7CisJaWYgKGplYi0+bGFzdF9ub2Rl KQorCQlqZWItPmxhc3Rfbm9kZS0+bmV4dF9waHlzID0gcmF3OworCWplYi0+bGFzdF9ub2Rl ID0gcmF3OworCisJVVNFRF9TUEFDRShQQUQoamUzMl90b19jcHUocnItPnRvdGxlbikpKTsJ CisJaWYgKGpmZnMyX3N1bV9hY3RpdmUoKSkKKwkJamZmczJfc3VtX2FkZF94cmVmX21lbShz LCByciwgb2ZzIC0gamViLT5vZmZzZXQpOworCWRiZ194YXR0cigic2NhbiB4cmVmIGF0ICUj MDh4ICh4aWQ9JXUsIGlubz0ldSlcbiIsCisJCSAgb2ZzLCByZWYtPnhpZCwgcmVmLT5pbm8p OworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgamZmczJfc2Nhbl9lcmFz ZWJsb2NrIChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxv Y2sgKmplYiwKIAkJCQl1bnNpZ25lZCBjaGFyICpidWYsIHVpbnQzMl90IGJ1Zl9zaXplLCBz dHJ1Y3QgamZmczJfc3VtbWFyeSAqcykgewogCXN0cnVjdCBqZmZzMl91bmtub3duX25vZGUg Km5vZGU7CkBAIC02MTQsNiArNzQ0LDQzIEBAIHNjYW5fbW9yZToKIAkJCW9mcyArPSBQQUQo amUzMl90b19jcHUobm9kZS0+dG90bGVuKSk7CiAJCQlicmVhazsKIAorI2lmZGVmIENPTkZJ R19KRkZTMl9GU19YQVRUUgorCQljYXNlIEpGRlMyX05PREVUWVBFX1hBVFRSOgorCQkJaWYg KGJ1Zl9vZnMgKyBidWZfbGVuIDwgb2ZzICsgamUzMl90b19jcHUobm9kZS0+dG90bGVuKSkg eworCQkJCWJ1Zl9sZW4gPSBtaW5fdCh1aW50MzJfdCwgYnVmX3NpemUsIGplYi0+b2Zmc2V0 ICsgYy0+c2VjdG9yX3NpemUgLSBvZnMpOworCQkJCUQxKHByaW50ayhLRVJOX0RFQlVHICJG ZXdlciB0aGFuICVkIGJ5dGVzICh4YXR0ciBub2RlKSIKKwkJCQkJICAiIGxlZnQgdG8gZW5k IG9mIGJ1Zi4gUmVhZGluZyAweCV4IGF0IDB4JTA4eFxuIiwKKwkJCQkJICBqZTMyX3RvX2Nw dShub2RlLT50b3RsZW4pLCBidWZfbGVuLCBvZnMpKTsKKwkJCQllcnIgPSBqZmZzMl9maWxs X3NjYW5fYnVmKGMsIGJ1Ziwgb2ZzLCBidWZfbGVuKTsKKwkJCQlpZiAoZXJyKQorCQkJCQly ZXR1cm4gZXJyOworCQkJCWJ1Zl9vZnMgPSBvZnM7CisJCQkJbm9kZSA9ICh2b2lkICopYnVm OworCQkJfQorCQkJZXJyID0gamZmczJfc2Nhbl94YXR0cl9ub2RlKGMsIGplYiwgKHZvaWQg Kilub2RlLCBvZnMsIHMpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJb2Zz ICs9IFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKTsKKwkJCWJyZWFrOworCQljYXNl IEpGRlMyX05PREVUWVBFX1hSRUY6CisJCQlpZiAoYnVmX29mcyArIGJ1Zl9sZW4gPCBvZnMg KyBqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKSB7CisJCQkJYnVmX2xlbiA9IG1pbl90KHVp bnQzMl90LCBidWZfc2l6ZSwgamViLT5vZmZzZXQgKyBjLT5zZWN0b3Jfc2l6ZSAtIG9mcyk7 CisJCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkZld2VyIHRoYW4gJWQgYnl0ZXMgKHhyZWYg bm9kZSkiCisJCQkJCSAgIiBsZWZ0IHRvIGVuZCBvZiBidWYuIFJlYWRpbmcgMHgleCBhdCAw eCUwOHhcbiIsCisJCQkJCSAgamUzMl90b19jcHUobm9kZS0+dG90bGVuKSwgYnVmX2xlbiwg b2ZzKSk7CisJCQkJZXJyID0gamZmczJfZmlsbF9zY2FuX2J1ZihjLCBidWYsIG9mcywgYnVm X2xlbik7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQlidWZfb2ZzID0g b2ZzOworCQkJCW5vZGUgPSAodm9pZCAqKWJ1ZjsKKwkJCX0KKwkJCWVyciA9IGpmZnMyX3Nj YW5feHJlZl9ub2RlKGMsIGplYiwgKHZvaWQgKilub2RlLCBvZnMsIHMpOworCQkJaWYgKGVy cikKKwkJCQlyZXR1cm4gZXJyOworCQkJb2ZzICs9IFBBRChqZTMyX3RvX2NwdShub2RlLT50 b3RsZW4pKTsKKwkJCWJyZWFrOworI2VuZGlmCS8qIENPTkZJR19KRkZTMl9GU19YQVRUUiAq LworCiAJCWNhc2UgSkZGUzJfTk9ERVRZUEVfQ0xFQU5NQVJLRVI6CiAJCQlEMShwcmludGso S0VSTl9ERUJVRyAiQ0xFQU5NQVJLRVIgbm9kZSBmb3VuZCBhdCAweCUwOHhcbiIsIG9mcykp OwogCQkJaWYgKGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikgIT0gYy0+Y2xlYW5tYXJrZXJf c2l6ZSkgewpAQCAtNzIxLDYgKzg4OCw3IEBAIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAq amZmczJfc2Nhbl9tYWsKIAogCWljLT5pbm8gPSBpbm87CiAJaWMtPm5vZGVzID0gKHZvaWQg KilpYzsKKwlpbml0X3hhdHRyX2lub2RlX2NhY2hlKGljKTsKIAlqZmZzMl9hZGRfaW5vX2Nh Y2hlKGMsIGljKTsKIAlpZiAoaW5vID09IDEpCiAJCWljLT5ubGluayA9IDE7Ci0tLSBtdGQt Mi42LmdpdC9mcy9qZmZzMi9zZWN1cml0eS5jCTE5NzAtMDEtMDEgMDk6MDA6MDAuMDAwMDAw MDAwICswOTAwCisrKyBtdGQtMi42LjA1MDYvZnMvamZmczIvc2VjdXJpdHkuYwkyMDA2LTA1 LTA2IDExOjI4OjE5LjAwMDAwMDAwMCArMDkwMApAQCAtMCwwICsxLDgyIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0qCisgKiAgRmlsZTogZnMvamZmczIvc2VjdXJpdHkuYworICogIFNl Y3VyaXR5IExhYmVscyBzdXBwb3J0IG9uIEpGRlMyIEZpbGVTeXN0ZW0KKyAqCisgKiAgSW1w bGVtZW50ZWQgYnkgS2FpR2FpIEtvaGVpIDxrYWlnYWlAYWsuanAubmVjLmNvbT4KKyAqICBD b3B5cmlnaHQgKEMpIDIwMDYgTkVDIENvcnBvcmF0aW9uCisgKgorICogIEZvciBsaWNlbnNp bmcgaW5mb3JtYXRpb24sIHNlZSB0aGUgZmlsZSAnTElDRU5DRScgaW4gdGhlIGpmZnMyIGRp cmVjdG9yeS4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZnMu aD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5o PgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5o PgorI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+CisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4K KyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHku aD4KKyNpbmNsdWRlICJub2RlbGlzdC5oIgorCisvKiAtLS0tIEluaXRpYWwgU2VjdXJpdHkg TGFiZWwgQXR0YWNobWVudCAtLS0tLS0tLS0tLS0tLSAqLworaW50IGpmZnMyX2luaXRfc2Vj dXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCit7CisJaW50 IHJjOworCXNpemVfdCBsZW47CisJdm9pZCAqdmFsdWU7CisJY2hhciAqbmFtZTsKKworCXJj ID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCAmbmFtZSwgJnZh bHVlLCAmbGVuKTsKKwlpZiAocmMpIHsKKwkJaWYgKHJjID09IC1FT1BOT1RTVVBQKQorCQkJ cmV0dXJuIDA7CisJCXJldHVybiByYzsKKwl9CisJcmMgPSBkb19qZmZzMl9zZXR4YXR0cihp bm9kZSwgSkZGUzJfWFBSRUZJWF9TRUNVUklUWSwgbmFtZSwgdmFsdWUsIGxlbiwgMCk7CisK KyAgICAgICAga2ZyZWUobmFtZSk7CisgICAgICAgIGtmcmVlKHZhbHVlKTsKKyAgICAgICAg cmV0dXJuIHJjOworfQorCisvKiAtLS0tIFhBVFRSIEhhbmRsZXIgZm9yICJzZWN1cml0eS4q IiAtLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGludCBqZmZzMl9zZWN1cml0eV9nZXR4 YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIHZv aWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJaWYgKCFzdHJjbXAobmFtZSwgIiIpKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBkb19qZmZzMl9nZXR4YXR0cihpbm9kZSwg SkZGUzJfWFBSRUZJWF9TRUNVUklUWSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKK30KKworc3Rh dGljIGludCBqZmZzMl9zZWN1cml0eV9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBj b25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCisJCQkJICAgc2l6ZV90IHNp emUsIGludCBmbGFncykKK3sKKwlpZiAoIXN0cmNtcChuYW1lLCAiIikpCisJCXJldHVybiAt RUlOVkFMOworCisJcmV0dXJuIGRvX2pmZnMyX3NldHhhdHRyKGlub2RlLCBKRkZTMl9YUFJF RklYX1NFQ1VSSVRZLCBuYW1lLCBidWZmZXIsIHNpemUsIGZsYWdzKTsKK30KKworc3RhdGlj IHNpemVfdCBqZmZzMl9zZWN1cml0eV9saXN0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwg Y2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAq bmFtZSwgc2l6ZV90IG5hbWVfbGVuKQoreworCXNpemVfdCByZXRsZW4gPSBYQVRUUl9TRUNV UklUWV9QUkVGSVhfTEVOICsgbmFtZV9sZW4gKyAxOworCisJaWYgKGxpc3QgJiYgcmV0bGVu IDw9IGxpc3Rfc2l6ZSkgeworCQlzdHJjcHkobGlzdCwgWEFUVFJfU0VDVVJJVFlfUFJFRklY KTsKKwkJc3RyY3B5KGxpc3QgKyBYQVRUUl9TRUNVUklUWV9QUkVGSVhfTEVOLCBuYW1lKTsK Kwl9CisKKwlyZXR1cm4gcmV0bGVuOworfQorCitzdHJ1Y3QgeGF0dHJfaGFuZGxlciBqZmZz Ml9zZWN1cml0eV94YXR0cl9oYW5kbGVyID0geworCS5wcmVmaXggPSBYQVRUUl9TRUNVUklU WV9QUkVGSVgsCisJLmxpc3QgPSBqZmZzMl9zZWN1cml0eV9saXN0eGF0dHIsCisJLnNldCA9 IGpmZnMyX3NlY3VyaXR5X3NldHhhdHRyLAorCS5nZXQgPSBqZmZzMl9zZWN1cml0eV9nZXR4 YXR0cgorfTsKLS0tIG10ZC0yLjYuZ2l0L2ZzL2pmZnMyL3N1bW1hcnkuYwkyMDA2LTA0LTMw IDE4OjA2OjUxLjAwMDAwMDAwMCArMDkwMAorKysgbXRkLTIuNi4wNTA2L2ZzL2pmZnMyL3N1 bW1hcnkuYwkyMDA2LTA1LTA2IDExOjI4OjE5LjAwMDAwMDAwMCArMDkwMApAQCAtNSw2ICs1 LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgWm9sdGFuIFNvZ29yIDx3ZXRoQGluZi51 LXN6ZWdlZC5odT4sCiAgKiAgICAgICAgICAgICAgICAgICAgIFBhdHJpayBLbHViYSA8cGFq a29AaGFsb20udS1zemVnZWQuaHU+LAogICogICAgICAgICAgICAgICAgICAgICBVbml2ZXJz aXR5IG9mIFN6ZWdlZCwgSHVuZ2FyeQorICogICAgICAgICAgICAgICAyMDA1ICBLYWlHYWkg S29oZWkgPGthaWdhaUBhay5qcC5uZWMuY29tPgogICoKICAqIEZvciBsaWNlbnNpbmcgaW5m b3JtYXRpb24sIHNlZSB0aGUgZmlsZSAnTElDRU5DRScgaW4gdGhpcyBkaXJlY3RvcnkuCiAg KgpAQCAtODEsNiArODIsMTkgQEAgc3RhdGljIGludCBqZmZzMl9zdW1fYWRkX21lbShzdHJ1 Y3QgamZmcwogCQkJZGJnX3N1bW1hcnkoImRpcmVudCAoJXUpIGFkZGVkIHRvIHN1bW1hcnlc biIsCiAJCQkJCQlqZTMyX3RvX2NwdShpdGVtLT5kLmlubykpOwogCQkJYnJlYWs7CisjaWZk ZWYgQ09ORklHX0pGRlMyX0ZTX1hBVFRSCisJCWNhc2UgSkZGUzJfTk9ERVRZUEVfWEFUVFI6 CisJCQlzLT5zdW1fc2l6ZSArPSBKRkZTMl9TVU1NQVJZX1hBVFRSX1NJWkU7CisJCQlzLT5z dW1fbnVtKys7CisJCQlkYmdfc3VtbWFyeSgieGF0dHIgKHhpZD0ldSwgdmVyc2lvbj0ldSkg YWRkZWQgdG8gc3VtbWFyeVxuIiwKKwkJCQkgICAgamUzMl90b19jcHUoaXRlbS0+eC54aWQp LCBqZTMyX3RvX2NwdShpdGVtLT54LnZlcnNpb24pKTsKKwkJCWJyZWFrOworCQljYXNlIEpG RlMyX05PREVUWVBFX1hSRUY6CisJCQlzLT5zdW1fc2l6ZSArPSBKRkZTMl9TVU1NQVJZX1hS RUZfU0laRTsKKwkJCXMtPnN1bV9udW0rKzsKKwkJCWRiZ19zdW1tYXJ5KCJ4cmVmIGFkZGVk IHRvIHN1bW1hcnlcbiIpOworCQkJYnJlYWs7CisjZW5kaWYKIAkJZGVmYXVsdDoKIAkJCUpG RlMyX1dBUk5JTkcoIlVOS05PV04gbm9kZSB0eXBlICV1XG4iLAogCQkJCQkgICAgamUxNl90 b19jcHUoaXRlbS0+dS5ub2RldHlwZSkpOwpAQCAtMTQxLDYgKzE1NSw0MCBAQCBpbnQgamZm czJfc3VtX2FkZF9kaXJlbnRfbWVtKHN0cnVjdCBqZmZzCiAJcmV0dXJuIGpmZnMyX3N1bV9h ZGRfbWVtKHMsICh1bmlvbiBqZmZzMl9zdW1fbWVtICopdGVtcCk7CiB9CiAKKyNpZmRlZiBD T05GSUdfSkZGUzJfRlNfWEFUVFIKK2ludCBqZmZzMl9zdW1fYWRkX3hhdHRyX21lbShzdHJ1 Y3QgamZmczJfc3VtbWFyeSAqcywgc3RydWN0IGpmZnMyX3Jhd194YXR0ciAqcngsIHVpbnQz Ml90IG9mcykKK3sKKwlzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX21lbSAqdGVtcDsKKworCXRl bXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX21lbSksIEdGUF9L RVJORUwpOworCWlmICghdGVtcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0ZW1wLT5ub2Rl dHlwZSA9IHJ4LT5ub2RldHlwZTsKKwl0ZW1wLT54aWQgPSByeC0+eGlkOworCXRlbXAtPnZl cnNpb24gPSByeC0+dmVyc2lvbjsKKwl0ZW1wLT5vZmZzZXQgPSBjcHVfdG9famUzMihvZnMp OworCXRlbXAtPnRvdGxlbiA9IHJ4LT50b3RsZW47CisJdGVtcC0+bmV4dCA9IE5VTEw7CisK KwlyZXR1cm4gamZmczJfc3VtX2FkZF9tZW0ocywgKHVuaW9uIGpmZnMyX3N1bV9tZW0gKil0 ZW1wKTsKK30KKworaW50IGpmZnMyX3N1bV9hZGRfeHJlZl9tZW0oc3RydWN0IGpmZnMyX3N1 bW1hcnkgKnMsIHN0cnVjdCBqZmZzMl9yYXdfeHJlZiAqcnIsIHVpbnQzMl90IG9mcykKK3sK KwlzdHJ1Y3QgamZmczJfc3VtX3hyZWZfbWVtICp0ZW1wOworCisJdGVtcCA9IGttYWxsb2Mo c2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1feHJlZl9tZW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAo IXRlbXApCisJCXJldHVybiAtRU5PTUVNOworCisJdGVtcC0+bm9kZXR5cGUgPSByci0+bm9k ZXR5cGU7CisJdGVtcC0+b2Zmc2V0ID0gY3B1X3RvX2plMzIob2ZzKTsKKwl0ZW1wLT5uZXh0 ID0gTlVMTDsKKworCXJldHVybiBqZmZzMl9zdW1fYWRkX21lbShzLCAodW5pb24gamZmczJf c3VtX21lbSAqKXRlbXApOworfQorI2VuZGlmCiAvKiBDbGVhbnVwIGV2ZXJ5IGNvbGxlY3Rl ZCBzdW1tYXJ5IGluZm9ybWF0aW9uICovCiAKIHN0YXRpYyB2b2lkIGpmZnMyX3N1bV9jbGVh bl9jb2xsZWN0ZWQoc3RydWN0IGpmZnMyX3N1bW1hcnkgKnMpCkBAIC0yNTksNyArMzA3LDQw IEBAIGludCBqZmZzMl9zdW1fYWRkX2t2ZWMoc3RydWN0IGpmZnMyX3NiX2kKIAogCQkJcmV0 dXJuIGpmZnMyX3N1bV9hZGRfbWVtKGMtPnN1bW1hcnksICh1bmlvbiBqZmZzMl9zdW1fbWVt ICopdGVtcCk7CiAJCX0KKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKKwkJY2FzZSBK RkZTMl9OT0RFVFlQRV9YQVRUUjogeworCQkJc3RydWN0IGpmZnMyX3N1bV94YXR0cl9tZW0g KnRlbXA7CisJCQlpZiAoamUzMl90b19jcHUobm9kZS0+eC52ZXJzaW9uKSA9PSAweGZmZmZm ZmZmKQorCQkJCXJldHVybiAwOworCQkJdGVtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBq ZmZzMl9zdW1feGF0dHJfbWVtKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXRlbXApCisJCQkJ Z290byBub19tZW07CiAKKwkJCXRlbXAtPm5vZGV0eXBlID0gbm9kZS0+eC5ub2RldHlwZTsK KwkJCXRlbXAtPnhpZCA9IG5vZGUtPngueGlkOworCQkJdGVtcC0+dmVyc2lvbiA9IG5vZGUt PngudmVyc2lvbjsKKwkJCXRlbXAtPnRvdGxlbiA9IG5vZGUtPngudG90bGVuOworCQkJdGVt cC0+b2Zmc2V0ID0gY3B1X3RvX2plMzIob2ZzKTsKKwkJCXRlbXAtPm5leHQgPSBOVUxMOwor CisJCQlyZXR1cm4gamZmczJfc3VtX2FkZF9tZW0oYy0+c3VtbWFyeSwgKHVuaW9uIGpmZnMy X3N1bV9tZW0gKil0ZW1wKTsKKwkJfQorCQljYXNlIEpGRlMyX05PREVUWVBFX1hSRUY6IHsK KwkJCXN0cnVjdCBqZmZzMl9zdW1feHJlZl9tZW0gKnRlbXA7CisKKwkJCWlmIChqZTMyX3Rv X2NwdShub2RlLT5yLmlubykgPT0gMHhmZmZmZmZmZgorCQkJICAgICYmIGplMzJfdG9fY3B1 KG5vZGUtPnIueGlkKSA9PSAweGZmZmZmZmZmKQorCQkJCXJldHVybiAwOworCQkJdGVtcCA9 IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1feHJlZl9tZW0pLCBHRlBfS0VSTkVM KTsKKwkJCWlmICghdGVtcCkKKwkJCQlnb3RvIG5vX21lbTsKKwkJCXRlbXAtPm5vZGV0eXBl ID0gbm9kZS0+ci5ub2RldHlwZTsKKwkJCXRlbXAtPm9mZnNldCA9IGNwdV90b19qZTMyKG9m cyk7CisJCQl0ZW1wLT5uZXh0ID0gTlVMTDsKKworCQkJcmV0dXJuIGpmZnMyX3N1bV9hZGRf bWVtKGMtPnN1bW1hcnksICh1bmlvbiBqZmZzMl9zdW1fbWVtICopdGVtcCk7CisJCX0KKyNl bmRpZgogCQljYXNlIEpGRlMyX05PREVUWVBFX1BBRERJTkc6CiAJCQlkYmdfc3VtbWFyeSgi bm9kZSBQQURESU5HXG4iKTsKIAkJCWMtPnN1bW1hcnktPnN1bV9wYWRkZWQgKz0gamUzMl90 b19jcHUobm9kZS0+dS50b3RsZW4pOwpAQCAtNDA4LDggKzQ4OSw5NCBAQCBzdGF0aWMgaW50 IGpmZnMyX3N1bV9wcm9jZXNzX3N1bV9kYXRhKHN0CiAKIAkJCQlicmVhazsKIAkJCX0KKyNp ZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKKwkJCWNhc2UgSkZGUzJfTk9ERVRZUEVfWEFU VFI6IHsKKwkJCQlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkOworCQkJCXN0cnVjdCBq ZmZzMl9zdW1feGF0dHJfZmxhc2ggKnNweDsKKwkJCQl1aW50MzJfdCBvZnM7CisKKwkJCQlz cHggPSAoc3RydWN0IGpmZnMyX3N1bV94YXR0cl9mbGFzaCAqKXNwOworCQkJCW9mcyA9IGpl Yi0+b2Zmc2V0ICsgamUzMl90b19jcHUoc3B4LT5vZmZzZXQpOworCQkJCWRiZ19zdW1tYXJ5 KCJ4YXR0ciBhdCAlIzA4eCAoeGlkPSV1LCB2ZXJzaW9uPSV1KVxuIiwgb2ZzLAorCQkJCQkg ICAgamUzMl90b19jcHUoc3B4LT54aWQpLCBqZTMyX3RvX2NwdShzcHgtPnZlcnNpb24pKTsK KwkJCQlyYXcgPSBqZmZzMl9hbGxvY19yYXdfbm9kZV9yZWYoKTsKKwkJCQlpZiAoIXJhdykg eworCQkJCQlKRkZTMl9OT1RJQ0UoImFsbG9jYXRpb24gb2Ygbm9kZSByZWZlcmVuY2UgZmFp bGVkXG4iKTsKKwkJCQkJa2ZyZWUoc3VtbWFyeSk7CisJCQkJCXJldHVybiAtRU5PTUVNOwor CQkJCX0KKwkJCQl4ZCA9IGpmZnMyX3NldHVwX3hhdHRyX2RhdHVtKGMsIGplMzJfdG9fY3B1 KHNweC0+eGlkKSwKKwkJCQkJCQkJamUzMl90b19jcHUoc3B4LT52ZXJzaW9uKSk7CisJCQkJ aWYgKElTX0VSUih4ZCkpIHsKKwkJCQkJSkZGUzJfTk9USUNFKCJhbGxvY2F0aW9uIG9mIHhh dHRyX2RhdHVtIGZhaWxlZFxuIik7CisJCQkJCWpmZnMyX2ZyZWVfcmF3X25vZGVfcmVmKHJh dyk7CisJCQkJCWtmcmVlKHN1bW1hcnkpOworCQkJCQlyZXR1cm4gUFRSX0VSUih4ZCk7CisJ CQkJfQorCQkJCXhkLT5ub2RlID0gcmF3OworCisJCQkJcmF3LT5mbGFzaF9vZmZzZXQgPSBv ZnMgfCBSRUZfVU5DSEVDS0VEOworCQkJCXJhdy0+X190b3RsZW4gPSBQQUQoamUzMl90b19j cHUoc3B4LT50b3RsZW4pKTsKKwkJCQlyYXctPm5leHRfcGh5cyA9IE5VTEw7CisJCQkJcmF3 LT5uZXh0X2luX2lubyA9ICh2b2lkICopeGQ7CisJCQkJaWYgKCFqZWItPmZpcnN0X25vZGUp CisJCQkJCWplYi0+Zmlyc3Rfbm9kZSA9IHJhdzsKKwkJCQlpZiAoamViLT5sYXN0X25vZGUp CisJCQkJCWplYi0+bGFzdF9ub2RlLT5uZXh0X3BoeXMgPSByYXc7CisJCQkJamViLT5sYXN0 X25vZGUgPSByYXc7CisKKwkJCQkqcHNldWRvX3JhbmRvbSArPSBqZTMyX3RvX2NwdShzcHgt PnhpZCk7CisJCQkJVU5DSEVDS0VEX1NQQUNFKGplMzJfdG9fY3B1KHNweC0+dG90bGVuKSk7 CisJCQkJc3AgKz0gSkZGUzJfU1VNTUFSWV9YQVRUUl9TSVpFOworCisJCQkJYnJlYWs7CisJ CQl9CisJCQljYXNlIEpGRlMyX05PREVUWVBFX1hSRUY6IHsKKwkJCQlzdHJ1Y3QgamZmczJf eGF0dHJfcmVmICpyZWY7CisJCQkJc3RydWN0IGpmZnMyX3N1bV94cmVmX2ZsYXNoICpzcHI7 CisJCQkJdWludDMyX3Qgb2ZzOworCisJCQkJc3ByID0gKHN0cnVjdCBqZmZzMl9zdW1feHJl Zl9mbGFzaCAqKXNwOworCQkJCW9mcyA9IGplYi0+b2Zmc2V0ICsgamUzMl90b19jcHUoc3By LT5vZmZzZXQpOworCQkJCWRiZ19zdW1tYXJ5KCJ4cmVmIGF0ICUjMDh4ICh4aWQ9JXUsIGlu bz0ldSlcbiIsIG9mcywKKwkJCQkJICAgIGplMzJfdG9fY3B1KHNwci0+eGlkKSwgamUzMl90 b19jcHUoc3ByLT5pbm8pKTsKKwkJCQlyYXcgPSBqZmZzMl9hbGxvY19yYXdfbm9kZV9yZWYo KTsKKwkJCQlpZiAoIXJhdykgeworCQkJCQlKRkZTMl9OT1RJQ0UoImFsbG9jYXRpb24gb2Yg bm9kZSByZWZlcmVuY2UgZmFpbGVkXG4iKTsKKwkJCQkJa2ZyZWUoc3VtbWFyeSk7CisJCQkJ CXJldHVybiAtRU5PTUVNOworCQkJCX0KKwkJCQlyZWYgPSBqZmZzMl9hbGxvY194YXR0cl9y ZWYoKTsKKwkJCQlpZiAoIXJlZikgeworCQkJCQlKRkZTMl9OT1RJQ0UoImFsbG9jYXRpb24g b2YgeGF0dHJfZGF0dW0gZmFpbGVkXG4iKTsKKwkJCQkJamZmczJfZnJlZV9yYXdfbm9kZV9y ZWYocmF3KTsKKwkJCQkJa2ZyZWUoc3VtbWFyeSk7CisJCQkJCXJldHVybiAtRU5PTUVNOwor CQkJCX0KKwkJCQlyZWYtPmlubyA9IDB4ZmZmZmZmZmU7CisJCQkJcmVmLT54aWQgPSAweGZm ZmZmZmZkOworCQkJCXJlZi0+bm9kZSA9IHJhdzsKKwkJCQlsaXN0X2FkZF90YWlsKCZyZWYt PmlsaXN0LCAmYy0+eGF0dHJfdGVtcCk7CiAKKwkJCQlyYXctPl9fdG90bGVuID0gUEFEKHNp emVvZihzdHJ1Y3QgamZmczJfcmF3X3hyZWYpKTsKKwkJCQlyYXctPmZsYXNoX29mZnNldCA9 IG9mcyB8IFJFRl9VTkNIRUNLRUQ7CisJCQkJcmF3LT5uZXh0X3BoeXMgPSBOVUxMOworCQkJ CXJhdy0+bmV4dF9pbl9pbm8gPSAodm9pZCAqKXJlZjsKKwkJCQlpZiAoIWplYi0+Zmlyc3Rf bm9kZSkKKwkJCQkJamViLT5maXJzdF9ub2RlID0gcmF3OworCQkJCWlmIChqZWItPmxhc3Rf bm9kZSkKKwkJCQkJamViLT5sYXN0X25vZGUtPm5leHRfcGh5cyA9IHJhdzsKKwkJCQlqZWIt Pmxhc3Rfbm9kZSA9IHJhdzsKKworCQkJCVVOQ0hFQ0tFRF9TUEFDRShQQUQoc2l6ZW9mKHN0 cnVjdCBqZmZzMl9yYXdfeHJlZikpKTsKKwkJCQkqcHNldWRvX3JhbmRvbSArPSBvZnM7CisJ CQkJc3AgKz0gSkZGUzJfU1VNTUFSWV9YUkVGX1NJWkU7CisKKwkJCQlicmVhazsKKwkJCX0K KyNlbmRpZgogCQkJZGVmYXVsdCA6IHsKK3ByaW50aygibm9kZXR5cGUgPSAlIzA0eFxuIixq ZTE2X3RvX2NwdSgoKHN0cnVjdCBqZmZzMl9zdW1fdW5rbm93bl9mbGFzaCAqKXNwKS0+bm9k ZXR5cGUpKTsKIAkJCQlKRkZTMl9XQVJOSU5HKCJVbnN1cHBvcnRlZCBub2RlIHR5cGUgZm91 bmQgaW4gc3VtbWFyeSEgRXhpdGluZy4uLiIpOwogCQkJCWtmcmVlKHN1bW1hcnkpOwogCQkJ CXJldHVybiAtRUlPOwpAQCAtNjE2LDcgKzc4MywzMSBAQCBzdGF0aWMgaW50IGpmZnMyX3N1 bV93cml0ZV9kYXRhKHN0cnVjdCBqCiAKIAkJCQlicmVhazsKIAkJCX0KKyNpZmRlZiBDT05G SUdfSkZGUzJfRlNfWEFUVFIKKwkJCWNhc2UgSkZGUzJfTk9ERVRZUEVfWEFUVFI6IHsKKwkJ CQlzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX2ZsYXNoICpzeGF0dHJfcHRyID0gd3BhZ2U7CisK KwkJCQl0ZW1wID0gYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZDsKKwkJCQlzeGF0dHJfcHRy LT5ub2RldHlwZSA9IHRlbXAtPngubm9kZXR5cGU7CisJCQkJc3hhdHRyX3B0ci0+eGlkID0g dGVtcC0+eC54aWQ7CisJCQkJc3hhdHRyX3B0ci0+dmVyc2lvbiA9IHRlbXAtPngudmVyc2lv bjsKKwkJCQlzeGF0dHJfcHRyLT5vZmZzZXQgPSB0ZW1wLT54Lm9mZnNldDsKKwkJCQlzeGF0 dHJfcHRyLT50b3RsZW4gPSB0ZW1wLT54LnRvdGxlbjsKKworCQkJCXdwYWdlICs9IEpGRlMy X1NVTU1BUllfWEFUVFJfU0laRTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgSkZGUzJf Tk9ERVRZUEVfWFJFRjogeworCQkJCXN0cnVjdCBqZmZzMl9zdW1feHJlZl9mbGFzaCAqc3hy ZWZfcHRyID0gd3BhZ2U7CisKKwkJCQl0ZW1wID0gYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVh ZDsKKwkJCQlzeHJlZl9wdHItPm5vZGV0eXBlID0gdGVtcC0+ci5ub2RldHlwZTsKKwkJCQlz eHJlZl9wdHItPm9mZnNldCA9IHRlbXAtPnIub2Zmc2V0OwogCisJCQkJd3BhZ2UgKz0gSkZG UzJfU1VNTUFSWV9YUkVGX1NJWkU7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYKIAkJCWRl ZmF1bHQgOiB7CiAJCQkJQlVHKCk7CS8qIHVua25vd24gbm9kZSBpbiBzdW1tYXJ5IGluZm9y bWF0aW9uICovCiAJCQl9Ci0tLSBtdGQtMi42LmdpdC9mcy9qZmZzMi9zdW1tYXJ5LmgJMjAw Ni0wNC0zMCAxODowNjo1MS4wMDAwMDAwMDAgKzA5MDAKKysrIG10ZC0yLjYuMDUwNi9mcy9q ZmZzMi9zdW1tYXJ5LmgJMjAwNi0wNS0wNiAxMToyODoxOS4wMDAwMDAwMDAgKzA5MDAKQEAg LTQ1LDYgKzQ1LDggQEAKICNkZWZpbmUgSkZGUzJfU1VNTUFSWV9OT1NVTV9TSVpFIDB4ZmZm ZmZmZmYKICNkZWZpbmUgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFIChzaXplb2Yoc3RydWN0 IGpmZnMyX3N1bV9pbm9kZV9mbGFzaCkpCiAjZGVmaW5lIEpGRlMyX1NVTU1BUllfRElSRU5U X1NJWkUoeCkgKHNpemVvZihzdHJ1Y3QgamZmczJfc3VtX2RpcmVudF9mbGFzaCkgKyAoeCkp CisjZGVmaW5lIEpGRlMyX1NVTU1BUllfWEFUVFJfU0laRSAoc2l6ZW9mKHN0cnVjdCBqZmZz Ml9zdW1feGF0dHJfZmxhc2gpKQorI2RlZmluZSBKRkZTMl9TVU1NQVJZX1hSRUZfU0laRSAo c2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1feHJlZl9mbGFzaCkpCiAKIC8qIFN1bW1hcnkgc3Ry dWN0dXJlcyB1c2VkIG9uIGZsYXNoICovCiAKQEAgLTc1LDExICs3NywyOCBAQCBzdHJ1Y3Qg amZmczJfc3VtX2RpcmVudF9mbGFzaAogCXVpbnQ4X3QgbmFtZVswXTsJLyogZGlyZW50IG5h bWUgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKK3N0cnVjdCBqZmZzMl9zdW1f eGF0dHJfZmxhc2gKK3sKKwlqaW50MTZfdCBub2RldHlwZTsJLyogPT0gSkZGUzJfTk9ERVRZ UEVfWEFUUiAqLworCWppbnQzMl90IHhpZDsJCS8qIHhhdHRyIGlkZW50aWZpZXIgKi8KKwlq aW50MzJfdCB2ZXJzaW9uOwkvKiB2ZXJzaW9uIG51bWJlciAqLworCWppbnQzMl90IG9mZnNl dDsJLyogb2Zmc2V0IG9uIGplYiAqLworCWppbnQzMl90IHRvdGxlbjsJLyogbm9kZSBsZW5n dGggKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBqZmZzMl9zdW1f eHJlZl9mbGFzaAoreworCWppbnQxNl90IG5vZGV0eXBlOwkvKiA9PSBKRkZTMl9OT0RFVFlQ RV9YUkVGICovCisJamludDMyX3Qgb2Zmc2V0OwkvKiBvZmZzZXQgb24gamViICovCit9IF9f YXR0cmlidXRlX18oKHBhY2tlZCkpOworCiB1bmlvbiBqZmZzMl9zdW1fZmxhc2gKIHsKIAlz dHJ1Y3QgamZmczJfc3VtX3Vua25vd25fZmxhc2ggdTsKIAlzdHJ1Y3QgamZmczJfc3VtX2lu b2RlX2ZsYXNoIGk7CiAJc3RydWN0IGpmZnMyX3N1bV9kaXJlbnRfZmxhc2ggZDsKKwlzdHJ1 Y3QgamZmczJfc3VtX3hhdHRyX2ZsYXNoIHg7CisJc3RydWN0IGpmZnMyX3N1bV94cmVmX2Zs YXNoIHI7CiB9OwogCiAvKiBTdW1tYXJ5IHN0cnVjdHVyZXMgdXNlZCBpbiB0aGUgbWVtb3J5 ICovCkBAIC0xMTQsMTEgKzEzMywzMCBAQCBzdHJ1Y3QgamZmczJfc3VtX2RpcmVudF9tZW0K IAl1aW50OF90IG5hbWVbMF07CS8qIGRpcmVudCBuYW1lICovCiB9IF9fYXR0cmlidXRlX18o KHBhY2tlZCkpOwogCitzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX21lbQoreworCXVuaW9uIGpm ZnMyX3N1bV9tZW0gKm5leHQ7CisJamludDE2X3Qgbm9kZXR5cGU7CisJamludDMyX3QgeGlk OworCWppbnQzMl90IHZlcnNpb247CisJamludDMyX3Qgb2Zmc2V0OworCWppbnQzMl90IHRv dGxlbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBqZmZzMl9zdW1f eHJlZl9tZW0KK3sKKwl1bmlvbiBqZmZzMl9zdW1fbWVtICpuZXh0OworCWppbnQxNl90IG5v ZGV0eXBlOworCWppbnQzMl90IG9mZnNldDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7 CisKIHVuaW9uIGpmZnMyX3N1bV9tZW0KIHsKIAlzdHJ1Y3QgamZmczJfc3VtX3Vua25vd25f bWVtIHU7CiAJc3RydWN0IGpmZnMyX3N1bV9pbm9kZV9tZW0gaTsKIAlzdHJ1Y3QgamZmczJf c3VtX2RpcmVudF9tZW0gZDsKKwlzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX21lbSB4OworCXN0 cnVjdCBqZmZzMl9zdW1feHJlZl9tZW0gcjsKIH07CiAKIC8qIFN1bW1hcnkgcmVsYXRlZCBp bmZvcm1hdGlvbiBzdG9yZWQgaW4gc3VwZXJibG9jayAqLwpAQCAtMTU5LDYgKzE5Nyw4IEBA IGludCBqZmZzMl9zdW1fd3JpdGVfc3Vtbm9kZShzdHJ1Y3QgamZmczIKIGludCBqZmZzMl9z dW1fYWRkX3BhZGRpbmdfbWVtKHN0cnVjdCBqZmZzMl9zdW1tYXJ5ICpzLCB1aW50MzJfdCBz aXplKTsKIGludCBqZmZzMl9zdW1fYWRkX2lub2RlX21lbShzdHJ1Y3QgamZmczJfc3VtbWFy eSAqcywgc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqcmksIHVpbnQzMl90IG9mcyk7CiBpbnQg amZmczJfc3VtX2FkZF9kaXJlbnRfbWVtKHN0cnVjdCBqZmZzMl9zdW1tYXJ5ICpzLCBzdHJ1 Y3QgamZmczJfcmF3X2RpcmVudCAqcmQsIHVpbnQzMl90IG9mcyk7CitpbnQgamZmczJfc3Vt X2FkZF94YXR0cl9tZW0oc3RydWN0IGpmZnMyX3N1bW1hcnkgKnMsIHN0cnVjdCBqZmZzMl9y YXdfeGF0dHIgKnJ4LCB1aW50MzJfdCBvZnMpOworaW50IGpmZnMyX3N1bV9hZGRfeHJlZl9t ZW0oc3RydWN0IGpmZnMyX3N1bW1hcnkgKnMsIHN0cnVjdCBqZmZzMl9yYXdfeHJlZiAqcnIs IHVpbnQzMl90IG9mcyk7CiBpbnQgamZmczJfc3VtX3NjYW5fc3Vtbm9kZShzdHJ1Y3QgamZm czJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwKIAkJCXVpbnQz Ml90IG9mcywgdWludDMyX3QgKnBzZXVkb19yYW5kb20pOwogCkBAIC0xNzYsNiArMjE2LDgg QEAgaW50IGpmZnMyX3N1bV9zY2FuX3N1bW5vZGUoc3RydWN0IGpmZnMyXwogI2RlZmluZSBq ZmZzMl9zdW1fYWRkX3BhZGRpbmdfbWVtKGEsYikKICNkZWZpbmUgamZmczJfc3VtX2FkZF9p bm9kZV9tZW0oYSxiLGMpCiAjZGVmaW5lIGpmZnMyX3N1bV9hZGRfZGlyZW50X21lbShhLGIs YykKKyNkZWZpbmUgamZmczJfc3VtX2FkZF94YXR0cl9tZW0oYSxiLGMpCisjZGVmaW5lIGpm ZnMyX3N1bV9hZGRfeHJlZl9tZW0oYSxiLGMpCiAjZGVmaW5lIGpmZnMyX3N1bV9zY2FuX3N1 bW5vZGUoYSxiLGMsZCkgKDApCiAKICNlbmRpZiAvKiBDT05GSUdfSkZGUzJfU1VNTUFSWSAq LwotLS0gbXRkLTIuNi5naXQvZnMvamZmczIvc3VwZXIuYwkyMDA2LTA0LTMwIDE4OjA2OjUx LjAwMDAwMDAwMCArMDkwMAorKysgbXRkLTIuNi4wNTA2L2ZzL2pmZnMyL3N1cGVyLmMJMjAw Ni0wNS0wNiAxMToyODoxOS4wMDAwMDAwMDAgKzA5MDAKQEAgLTE1MSw3ICsxNTEsMTAgQEAg c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqamZmczJfZ2V0X3NiXwogCiAJc2ItPnNfb3Ag PSAmamZmczJfc3VwZXJfb3BlcmF0aW9uczsKIAlzYi0+c19mbGFncyA9IGZsYWdzIHwgTVNf Tk9BVElNRTsKLQorCXNiLT5zX3hhdHRyID0gamZmczJfeGF0dHJfaGFuZGxlcnM7CisjaWZk ZWYgQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTAorCXNiLT5zX2ZsYWdzIHw9IE1TX1BPU0lY QUNMOworI2VuZGlmCiAJcmV0ID0gamZmczJfZG9fZmlsbF9zdXBlcihzYiwgZGF0YSwgZmxh Z3MgJiBNU19TSUxFTlQgPyAxIDogMCk7CiAKIAlpZiAocmV0KSB7CkBAIC0yOTMsNiArMjk2 LDcgQEAgc3RhdGljIHZvaWQgamZmczJfcHV0X3N1cGVyIChzdHJ1Y3Qgc3VwZQogCQlrZnJl ZShjLT5ibG9ja3MpOwogCWpmZnMyX2ZsYXNoX2NsZWFudXAoYyk7CiAJa2ZyZWUoYy0+aW5v Y2FjaGVfbGlzdCk7CisJamZmczJfY2xlYXJfeGF0dHJfc3Vic3lzdGVtKGMpOwogCWlmIChj LT5tdGQtPnN5bmMpCiAJCWMtPm10ZC0+c3luYyhjLT5tdGQpOwogCi0tLSBtdGQtMi42Lmdp dC9mcy9qZmZzMi9zeW1saW5rLmMJMjAwNi0wNC0zMCAxODowNjo1MS4wMDAwMDAwMDAgKzA5 MDAKKysrIG10ZC0yLjYuMDUwNi9mcy9qZmZzMi9zeW1saW5rLmMJMjAwNi0wNS0wNiAxMToy ODoxOS4wMDAwMDAwMDAgKzA5MDAKQEAgLTI0LDcgKzI0LDEyIEBAIHN0cnVjdCBpbm9kZV9v cGVyYXRpb25zIGpmZnMyX3N5bWxpbmtfaW4KIHsKIAkucmVhZGxpbmsgPQlnZW5lcmljX3Jl YWRsaW5rLAogCS5mb2xsb3dfbGluayA9CWpmZnMyX2ZvbGxvd19saW5rLAotCS5zZXRhdHRy ID0JamZmczJfc2V0YXR0cgorCS5wZXJtaXNzaW9uID0JamZmczJfcGVybWlzc2lvbiwKKwku c2V0YXR0ciA9CWpmZnMyX3NldGF0dHIsCisJLnNldHhhdHRyID0JamZmczJfc2V0eGF0dHIs CisJLmdldHhhdHRyID0JamZmczJfZ2V0eGF0dHIsCisJLmxpc3R4YXR0ciA9CWpmZnMyX2xp c3R4YXR0ciwKKwkucmVtb3ZleGF0dHIgPQlqZmZzMl9yZW1vdmV4YXR0cgogfTsKIAogc3Rh dGljIHZvaWQgKmpmZnMyX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3Ry dWN0IG5hbWVpZGF0YSAqbmQpCi0tLSBtdGQtMi42LmdpdC9mcy9qZmZzMi93cml0ZS5jCTIw MDYtMDQtMzAgMTg6MDY6NTEuMDAwMDAwMDAwICswOTAwCisrKyBtdGQtMi42LjA1MDYvZnMv amZmczIvd3JpdGUuYwkyMDA2LTA1LTA2IDExOjI4OjE5LjAwMDAwMDAwMCArMDkwMApAQCAt MzYsNyArMzYsNyBAQCBpbnQgamZmczJfZG9fbmV3X2lub2RlKHN0cnVjdCBqZmZzMl9zYl9p CiAJZi0+aW5vY2FjaGUtPm5saW5rID0gMTsKIAlmLT5pbm9jYWNoZS0+bm9kZXMgPSAoc3Ry dWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqKWYtPmlub2NhY2hlOwogCWYtPmlub2NhY2hlLT5z dGF0ZSA9IElOT19TVEFURV9QUkVTRU5UOwotCisJaW5pdF94YXR0cl9pbm9kZV9jYWNoZShm LT5pbm9jYWNoZSk7CiAKIAlqZmZzMl9hZGRfaW5vX2NhY2hlKGMsIGYtPmlub2NhY2hlKTsK IAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfZG9fbmV3X2lub2RlKCk6IEFzc2lnbmVk IGlubyMgJWRcbiIsIGYtPmlub2NhY2hlLT5pbm8pKTsKLS0tIG10ZC0yLjYuZ2l0L2ZzL2pm ZnMyL3hhdHRyLmMJMTk3MC0wMS0wMSAwOTowMDowMC4wMDAwMDAwMDAgKzA5MDAKKysrIG10 ZC0yLjYuMDUwNi9mcy9qZmZzMi94YXR0ci5jCTIwMDYtMDUtMDYgMTE6Mjg6MTkuMDAwMDAw MDAwICswOTAwCkBAIC0wLDAgKzEsMTI3MSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICogIEZpbGU6IGZzL2pmZnMyL3hhdHRyLmMKKyAqICBYQVRUUiBzdXBwb3J0IG9uIEpGRlMy IEZpbGVTeXN0ZW0KKyAqCisgKiAgSW1wbGVtZW50ZWQgYnkgS2FpR2FpIEtvaGVpIDxrYWln YWlAYWsuanAubmVjLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTkVDIENvcnBvcmF0 aW9uCisgKgorICogIEZvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24sIHNlZSB0aGUgZmlsZSAn TElDRU5DRScgaW4gdGhlIGpmZnMyIGRpcmVjdG9yeS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4K KyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5o PgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvamZmczIuaD4K KyNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4K KyNpbmNsdWRlICJub2RlbGlzdC5oIgorLyogLS0tLS0tLS0geGRhdHVtIHJlbGF0ZWQgZnVu Y3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0KKyAqIHhhdHRyX2RhdHVtX2hhc2hrZXkoeHByZWZp eCwgeG5hbWUsIHh2YWx1ZSwgeHNpemUpCisgKiAgIGlzIHVzZWQgdG8gY2FsY3VyYXRlIHhk YXR1bSBoYXNoa2V5LiBUaGUgcmVtaW5kZXIgb2YgaGFzaGtleSBpbnRvIFhBVFRSSU5ERVhf SEFTSFNJWkUgaXMKKyAqICAgdGhlIGluZGV4IG9mIHRoZSB4YXR0ciBuYW1lL3ZhbHVlIHBh aXIgY2FjaGUgKGMtPnhhdHRyaW5kZXgpLgorICogdW5sb2FkX3hhdHRyX2RhdHVtKGMsIHhk KQorICogICBpcyB1c2VkIHRvIHJlbGVhc2UgeGF0dHIgbmFtZS92YWx1ZSBwYWlyIGFuZCBk ZXRhY2ggZnJvbSBjLT54YXR0cmluZGV4LgorICogcmVjbGFpbV94YXR0cl9kYXR1bShjKQor ICogICBpcyB1c2VkIHRvIHJlY2xhaW0geGF0dHIgbmFtZS92YWx1ZSBwYWlycyBvbiB0aGUg eGF0dHIgbmFtZS92YWx1ZSBwYWlyIGNhY2hlIHdoZW4KKyAqICAgbWVtb3J5IHVzYWdlIGJ5 IGNhY2hlIGlzIG92ZXIgYy0+eGRhdHVtX21lbV90aHJlc2hvbGQuIEN1cnJlbnRyeSwgdGhp cyB0aHJlc2hvbGQgCisgKiAgIGlzIGhhcmQgY29kZWQgYXMgMzJLaUIuCisgKiBkZWxldGVf eGF0dHJfZGF0dW1fbm9kZShjLCB4ZCkKKyAqICAgaXMgdXNlZCB0byBkZWxldGUgYSBqZmZz MiBub2RlIGlzIGRvbWluYXRlZCBieSB4ZGF0dW0uIFdoZW4gRUJTKEVyYXNlIEJsb2NrIFN1 bW1hcnkpIGlzCisgKiAgIGVuYWJsZWQsIGl0IG92ZXJ3cml0ZXMgdGhlIG9ic29sZXRlIG5v ZGUgYnkgbXlzZWxmLgorICogZGVsZXRlX3hhdHRyX2RhdHVtKGMsIHhkKQorICogICBpcyB1 c2VkIHRvIGRlbGV0ZSBqZmZzMl94YXR0cl9kYXR1bSBvYmplY3QuIEl0IG11c3QgYmUgY2Fs bGVkIHdpdGggMC12YWx1ZSBvZiByZWZlcmVuY2UKKyAqICAgY291bnRlci4gKEl0IG1lYW5z IGhvdyBtYW55IGpmZnMyX3hhdHRyX3JlZiBvYmplY3QgcmVmZXJzIHRoaXMgeGRhdHVtLikK KyAqIGRvX3ZlcmlmeV94YXR0cl9kYXR1bShjLCB4ZCkKKyAqICAgaXMgdXNlZCB0byBsb2Fk IHRoZSB4ZGF0dW0gaW5mb3JtYXRpb25zIHdpdGhvdXQgbmFtZS92YWx1ZSBwYWlyIGZyb20g dGhlIG1lZGl1bS4KKyAqICAgSXQncyBuZWNlc3Nhcnkgb25jZSwgYmVjYXVzZSB0aG9zZSBp bmZvcm1hdGlvbnMgYXJlIG5vdCBjb2xsZWN0ZWQgZHVyaW5nIG1vdW50aW5nCisgKiAgIHBy b2Nlc3Mgd2hlbiBFQlMgaXMgZW5hYmxlZC4KKyAqICAgMCB3aWxsIGJlIHJldHVybmVkLCBp ZiBzdWNjZXNzLiBBbiBuZWdhdGl2ZSByZXR1cm4gdmFsdWUgbWVhbnMgcmVjb3ZlcmFibGUg ZXJyb3IsIGFuZAorICogICBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgbWVhbnMgdW5yZWNvdmVy YWJsZSBlcnJvci4gVGh1cywgY2FsbGVyIG11c3QgcmVtb3ZlIHRoaXMgeGRhdHVtCisgKiAg IGFuZCB4cmVmIHdoZW4gaXQgcmV0dXJuZWQgcG9zaXRpdmUgdmFsdWUuCisgKiBkb19sb2Fk X3hhdHRyX2RhdHVtKGMsIHhkKQorICogICBpcyB1c2VkIHRvIGxvYWQgbmFtZS92YWx1ZSBw YWlyIGZyb20gdGhlIG1lZGl1bS4KKyAqICAgVGhlIG1lYW5pbmdzIG9mIHJldHVybiB2YWx1 ZSBpcyBzYW1lIGFzIGRvX3ZlcmlmeV94YXR0cl9kYXR1bSgpLgorICogbG9hZF94YXR0cl9k YXR1bShjLCB4ZCkKKyAqICAgaXMgdXNlZCB0byBiZSBhcyBhIHdyYXBwZXIgb2YgZG9fdmVy aWZ5X3hhdHRyX2RhdHVtKCkgYW5kIGRvX2xvYWRfeGF0dHJfZGF0dW0oKS4KKyAqICAgSWYg eGQgbmVlZCB0byBjYWxsIGRvX3ZlcmlmeV94YXR0cl9kYXR1bSgpIGF0IGZpcnN0LCBpdCdz IGNhbGxlZCBiZWZvcmUgY2FsbGluZworICogICBkb19sb2FkX3hhdHRyX2RhdHVtKCkuIFRo ZSBtZWFuaW5ncyBvZiByZXR1cm4gdmFsdWUgaXMgc2FtZSBhcyBkb192ZXJpZnlfeGF0dHJf ZGF0dW0oKS4KKyAqIHNhdmVfeGF0dHJfZGF0dW0oYywgeGQsIHBoeXNfb2ZzKQorICogICBp cyB1c2VkIHRvIHdyaXRlIHhkYXR1bSB0byBtZWRpdW0uIHhkLT52ZXJzaW9uIHdpbGwgYmUg aW5jcmVtZW50ZWQuCisgKiBjcmVhdGVfeGF0dHJfZGF0dW0oYywgeHByZWZpeCwgeG5hbWUs IHh2YWx1ZSwgeHNpemUsIHBoeXNfb2ZzKQorICogICBpcyB1c2VkIHRvIGNyZWF0ZSBuZXcg eGRhdHVtIGFuZCB3cml0ZSB0byBtZWRpdW0uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdWludDMyX3QgeGF0 dHJfZGF0dW1faGFzaGtleShpbnQgeHByZWZpeCwgY29uc3QgY2hhciAqeG5hbWUsIGNvbnN0 IGNoYXIgKnh2YWx1ZSwgaW50IHhzaXplKQoreworCWludCBuYW1lX2xlbiA9IHN0cmxlbih4 bmFtZSk7CisKKwlyZXR1cm4gY3JjMzIoeHByZWZpeCwgeG5hbWUsIG5hbWVfbGVuKSBeIGNy YzMyKHhwcmVmaXgsIHh2YWx1ZSwgeHNpemUpOworfQorCitzdGF0aWMgdm9pZCB1bmxvYWRf eGF0dHJfZGF0dW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0 cl9kYXR1bSAqeGQpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4 YXR0cl9zZW0pICovCisJRDEoZGJnX3hhdHRyKCIlczogeGlkPSV1LCB2ZXJzaW9uPSV1XG4i LCBfX0ZVTkNUSU9OX18sIHhkLT54aWQsIHhkLT52ZXJzaW9uKSk7CisJaWYgKHhkLT54bmFt ZSkgeworCQljLT54ZGF0dW1fbWVtX3VzYWdlIC09ICh4ZC0+bmFtZV9sZW4gKyAxICsgeGQt PnZhbHVlX2xlbik7CisJCWtmcmVlKHhkLT54bmFtZSk7CisJfQorCisJbGlzdF9kZWxfaW5p dCgmeGQtPnhpbmRleCk7CisJeGQtPmhhc2hrZXkgPSAwOworCXhkLT54bmFtZSA9IE5VTEw7 CisJeGQtPnh2YWx1ZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJlY2xhaW1feGF0dHJf ZGF0dW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpCit7CisJLyogbXVzdCBiZSBjYWxsZWQg dW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCisJc3RydWN0IGpmZnMyX3hhdHRyX2Rh dHVtICp4ZCwgKl94ZDsKKwl1aW50MzJfdCB0YXJnZXQsIGJlZm9yZTsKKwlzdGF0aWMgaW50 IGluZGV4ID0gMDsKKwlpbnQgY291bnQ7CisKKwlpZiAoYy0+eGRhdHVtX21lbV90aHJlc2hv bGQgPiBjLT54ZGF0dW1fbWVtX3VzYWdlKQorCQlyZXR1cm47CisKKwliZWZvcmUgPSBjLT54 ZGF0dW1fbWVtX3VzYWdlOworCXRhcmdldCA9IGMtPnhkYXR1bV9tZW1fdXNhZ2UgKiA0IC8g NTsgLyogMjAlIHJlZHVjdGlvbiAqLworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IFhBVFRS SU5ERVhfSEFTSFNJWkU7IGNvdW50KyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KHhkLCBfeGQsICZjLT54YXR0cmluZGV4W2luZGV4XSwgeGluZGV4KSB7CisJCQlpZiAoeGQt PmZsYWdzICYgSkZGUzJfWEZMQUdTX0hPVCkgeworCQkJCXhkLT5mbGFncyAmPSB+SkZGUzJf WEZMQUdTX0hPVDsKKwkJCX0gZWxzZSBpZiAoISh4ZC0+ZmxhZ3MgJiBKRkZTMl9YRkxBR1Nf QklORCkpIHsKKwkJCQl1bmxvYWRfeGF0dHJfZGF0dW0oYywgeGQpOworCQkJfQorCQkJaWYg KGMtPnhkYXR1bV9tZW1fdXNhZ2UgPD0gdGFyZ2V0KQorCQkJCWdvdG8gb3V0OworCQl9CisJ CWluZGV4ID0gKGluZGV4KzEpICUgWEFUVFJJTkRFWF9IQVNIU0laRTsKKwl9Cisgb3V0Ogor CUpGRlMyX05PVElDRSgieGRhdHVtX21lbV91c2FnZSBmcm9tICV1IGJ5dGUgdG8gJXUgYnl0 ZSAoJXUgYnl0ZSByZWNsYWltZWQpXG4iLAorCQkgICAgIGJlZm9yZSwgYy0+eGRhdHVtX21l bV91c2FnZSwgYmVmb3JlIC0gYy0+eGRhdHVtX21lbV91c2FnZSk7Cit9CisKK3N0YXRpYyB2 b2lkIGRlbGV0ZV94YXR0cl9kYXR1bV9ub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBz dHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkKQoreworCS8qIG11c3QgYmUgY2FsbGVkIHVu ZGVyIGRvd25fd3JpdGUoeGF0dHJfc2VtKSAqLworCXN0cnVjdCBqZmZzMl9yYXdfeGF0dHIg cng7CisJdWludDMyX3QgbGVuZ3RoOworCWludCByYzsKKworCWlmICgheGQtPm5vZGUpIHsK KwkJSkZGUzJfV0FSTklORygieGRhdHVtICh4aWQ9JXUpIGlzIHJlbW92ZWQgdHdpY2UuXG4i LCB4ZC0+eGlkKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoamZmczJfc3VtX2FjdGl2ZSgpKSB7 CisJCW1lbXNldCgmcngsIDB4ZmYsIHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hhdHRyKSk7 CisJCXJjID0gamZmczJfZmxhc2hfcmVhZChjLCByZWZfb2Zmc2V0KHhkLT5ub2RlKSwKKwkJ CQkgICAgICBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSksCisJCQkJICAgICAg Jmxlbmd0aCwgKGNoYXIgKikmcngpOworCQlpZiAocmMgfHwgbGVuZ3RoICE9IHNpemVvZihz dHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSkgeworCQkJSkZGUzJfRVJST1IoImpmZnMyX2Zs YXNoX3JlYWQoKT0lZCwgcmVxPSV1LCByZWFkPSV1IGF0ICUjMDh4XG4iLAorCQkJCSAgICBy Yywgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpLAorCQkJCSAgICBsZW5ndGgs IHJlZl9vZmZzZXQoeGQtPm5vZGUpKTsKKwkJfQorCQlyYyA9IGpmZnMyX2ZsYXNoX3dyaXRl KGMsIHJlZl9vZmZzZXQoeGQtPm5vZGUpLCBzaXplb2YocngpLAorCQkJCSAgICAgICAmbGVu Z3RoLCAoY2hhciAqKSZyeCk7CisJCWlmIChyYyB8fCBsZW5ndGggIT0gc2l6ZW9mKHN0cnVj dCBqZmZzMl9yYXdfeGF0dHIpKSB7CisJCQlKRkZTMl9FUlJPUigiamZmczJfZmxhc2hfd3Jp dGUoKT0lZCwgcmVxPSV1LCB3cm90ZT0ldSBhciAlIzA4eFxuIiwKKwkJCQkgICAgcmMsIHNp emVvZihyeCksIGxlbmd0aCwgcmVmX29mZnNldCh4ZC0+bm9kZSkpOworCQl9CisJfQorCXNw aW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwl4ZC0+bm9kZS0+bmV4dF9p bl9pbm8gPSBOVUxMOworCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2sp OworCWpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShjLCB4ZC0+bm9kZSk7CisJeGQtPm5vZGUg PSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfeGF0dHJfZGF0dW0oc3RydWN0IGpm ZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQpCit7CisJLyog bXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCisJQlVHX09O KHhkLT5yZWZjbnQpOworCisJdW5sb2FkX3hhdHRyX2RhdHVtKGMsIHhkKTsKKwlpZiAoeGQt Pm5vZGUpIHsKKwkJZGVsZXRlX3hhdHRyX2RhdHVtX25vZGUoYywgeGQpOworCQl4ZC0+bm9k ZSA9IE5VTEw7CisJfQorCWpmZnMyX2ZyZWVfeGF0dHJfZGF0dW0oeGQpOworfQorCitzdGF0 aWMgaW50IGRvX3ZlcmlmeV94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywg c3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCkKK3sKKwkvKiBtdXN0IGJlIGNhbGxlZCB1 bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSkgKi8KKwlzdHJ1Y3QgamZmczJfZXJhc2VibG9j ayAqamViOworCXN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgcng7CisJc2l6ZV90IHJlYWRsZW47 CisJdWludDMyX3QgY3JjLCB0b3RsZW47CisJaW50IHJjOworCisJQlVHX09OKCF4ZC0+bm9k ZSk7CisJQlVHX09OKHJlZl9mbGFncyh4ZC0+bm9kZSkgIT0gUkVGX1VOQ0hFQ0tFRCk7CisK KwlyYyA9IGpmZnMyX2ZsYXNoX3JlYWQoYywgcmVmX29mZnNldCh4ZC0+bm9kZSksIHNpemVv ZihyeCksICZyZWFkbGVuLCAoY2hhciAqKSZyeCk7CisJaWYgKHJjIHx8IHJlYWRsZW4gIT0g c2l6ZW9mKHJ4KSkgeworCQlKRkZTMl9XQVJOSU5HKCJqZmZzMl9mbGFzaF9yZWFkKCk9JWQs IHJlcT0ldSwgcmVhZD0ldSBhdCAlIzA4eFxuIiwKKwkJCSAgICAgIHJjLCBzaXplb2Yocngp LCByZWFkbGVuLCByZWZfb2Zmc2V0KHhkLT5ub2RlKSk7CisJCXJldHVybiByYyA/IHJjIDog LUVJTzsKKwl9CisJY3JjID0gY3JjMzIoMCwgJnJ4LCBzaXplb2YocngpIC0gNCk7CisJaWYg KGNyYyAhPSBqZTMyX3RvX2NwdShyeC5ub2RlX2NyYykpIHsKKwkJaWYgKGplMzJfdG9fY3B1 KHJ4Lm5vZGVfY3JjKSAhPSAweGZmZmZmZmZmKQorCQkJSkZGUzJfRVJST1IoIm5vZGUgQ1JD IGZhaWxlZCBhdCAlIzA4eCwgcmVhZD0lIzA4eCwgY2FsYz0lIzA4eFxuIiwKKwkJCQkgICAg cmVmX29mZnNldCh4ZC0+bm9kZSksIGplMzJfdG9fY3B1KHJ4Lmhkcl9jcmMpLCBjcmMpOwor CQlyZXR1cm4gRUlPOworCX0KKwl0b3RsZW4gPSBQQUQoc2l6ZW9mKHJ4KSArIHJ4Lm5hbWVf bGVuICsgMSArIGplMTZfdG9fY3B1KHJ4LnZhbHVlX2xlbikpOworCWlmIChqZTE2X3RvX2Nw dShyeC5tYWdpYykgIT0gSkZGUzJfTUFHSUNfQklUTUFTSworCSAgICB8fCBqZTE2X3RvX2Nw dShyeC5ub2RldHlwZSkgIT0gSkZGUzJfTk9ERVRZUEVfWEFUVFIKKwkgICAgfHwgamUzMl90 b19jcHUocngudG90bGVuKSAhPSB0b3RsZW4KKwkgICAgfHwgamUzMl90b19jcHUocngueGlk KSAhPSB4ZC0+eGlkCisJICAgIHx8IGplMzJfdG9fY3B1KHJ4LnZlcnNpb24pICE9IHhkLT52 ZXJzaW9uKSB7CisJCUpGRlMyX0VSUk9SKCJpbmNvbnNpc3RlbnQgeGRhdHVtIGF0ICUjMDh4 LCBtYWdpYz0lIzA0eC8lIzA0eCwgIgorCQkJICAgICJub2RldHlwZT0lIzA0eC8lIzA0eCwg dG90bGVuPSV1LyV1LCB4aWQ9JXUvJXUsIHZlcnNpb249JXUvJXVcbiIsCisJCQkgICAgcmVm X29mZnNldCh4ZC0+bm9kZSksIGplMTZfdG9fY3B1KHJ4Lm1hZ2ljKSwgSkZGUzJfTUFHSUNf QklUTUFTSywKKwkJCSAgICBqZTE2X3RvX2NwdShyeC5ub2RldHlwZSksIEpGRlMyX05PREVU WVBFX1hBVFRSLAorCQkJICAgIGplMzJfdG9fY3B1KHJ4LnRvdGxlbiksIHRvdGxlbiwKKwkJ CSAgICBqZTMyX3RvX2NwdShyeC54aWQpLCB4ZC0+eGlkLAorCQkJICAgIGplMzJfdG9fY3B1 KHJ4LnZlcnNpb24pLCB4ZC0+dmVyc2lvbik7CisJCXJldHVybiBFSU87CisJfQorCXhkLT54 cHJlZml4ID0gcngueHByZWZpeDsKKwl4ZC0+bmFtZV9sZW4gPSByeC5uYW1lX2xlbjsKKwl4 ZC0+dmFsdWVfbGVuID0gamUxNl90b19jcHUocngudmFsdWVfbGVuKTsKKwl4ZC0+ZGF0YV9j cmMgPSBqZTMyX3RvX2NwdShyeC5kYXRhX2NyYyk7CisKKwkvKiBUaGlzIEpGRlMyX05PREVU WVBFX1hBVFRSIG5vZGUgaXMgY2hlY2tlZCAqLworCWplYiA9ICZjLT5ibG9ja3NbcmVmX29m ZnNldCh4ZC0+bm9kZSkgLyBjLT5zZWN0b3Jfc2l6ZV07CisJdG90bGVuID0gUEFEKGplMzJf dG9fY3B1KHJ4LnRvdGxlbikpOworCisJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9u X2xvY2spOworCWMtPnVuY2hlY2tlZF9zaXplIC09IHRvdGxlbjsgYy0+dXNlZF9zaXplICs9 IHRvdGxlbjsKKwlqZWItPnVuY2hlY2tlZF9zaXplIC09IHRvdGxlbjsgamViLT51c2VkX3Np emUgKz0gdG90bGVuOworCXhkLT5ub2RlLT5mbGFzaF9vZmZzZXQgPSByZWZfb2Zmc2V0KHhk LT5ub2RlKSB8IFJFRl9QUklTVElORTsKKwlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxl dGlvbl9sb2NrKTsKKworCS8qIHVuY2hlY2tlZCB4ZGF0dW0gaXMgY2hhaW5lZCB3aXRoIGMt PnhhdHRyX3VuY2hlY2tlZCAqLworCWxpc3RfZGVsX2luaXQoJnhkLT54aW5kZXgpOworCisJ ZGJnX3hhdHRyKCJzdWNjZXNzIG9uIHZlcmZ5aW5nIHhkYXR1bSAoeGlkPSV1LCB2ZXJzaW9u PSV1KVxuIiwKKwkJICB4ZC0+eGlkLCB4ZC0+dmVyc2lvbik7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBkb19sb2FkX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZv ICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkKQoreworCS8qIG11c3QgYmUgY2Fs bGVkIHVuZGVyIGRvd25fd3JpdGUoeGF0dHJfc2VtKSAqLworCWNoYXIgKmRhdGE7CisJc2l6 ZV90IHJlYWRsZW47CisJdWludDMyX3QgY3JjLCBsZW5ndGg7CisJaW50IGksIHJldCwgcmV0 cnkgPSAwOworCisJQlVHX09OKCF4ZC0+bm9kZSk7CisJQlVHX09OKHJlZl9mbGFncyh4ZC0+ bm9kZSkgIT0gUkVGX1BSSVNUSU5FKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJnhkLT54aW5k ZXgpKTsKKyByZXRyeToKKwlsZW5ndGggPSB4ZC0+bmFtZV9sZW4gKyAxICsgeGQtPnZhbHVl X2xlbjsKKwlkYXRhID0ga21hbGxvYyhsZW5ndGgsIEdGUF9LRVJORUwpOworCWlmICghZGF0 YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBqZmZzMl9mbGFzaF9yZWFkKGMsIHJl Zl9vZmZzZXQoeGQtPm5vZGUpK3NpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hhdHRyKSwKKwkJ CSAgICAgICBsZW5ndGgsICZyZWFkbGVuLCBkYXRhKTsKKworCWlmIChyZXQgfHwgbGVuZ3Ro IT1yZWFkbGVuKSB7CisJCUpGRlMyX1dBUk5JTkcoImpmZnMyX2ZsYXNoX3JlYWQoKSByZXR1 cm5lZCAlZCwgcmVxdWVzdD0lZCwgcmVhZGxlbj0lZCwgYXQgJSMwOHhcbiIsCisJCQkgICAg ICByZXQsIGxlbmd0aCwgcmVhZGxlbiwgcmVmX29mZnNldCh4ZC0+bm9kZSkpOworCQlrZnJl ZShkYXRhKTsKKwkJcmV0dXJuIHJldCA/IHJldCA6IC1FSU87CisJfQorCisJZGF0YVt4ZC0+ bmFtZV9sZW5dID0gJ1wwJzsKKwljcmMgPSBjcmMzMigwLCBkYXRhLCBsZW5ndGgpOworCWlm IChjcmMgIT0geGQtPmRhdGFfY3JjKSB7CisJCUpGRlMyX1dBUk5JTkcoIm5vZGUgQ1JDIGZh aWxlZCAoSkZGUzJfTk9ERVRZUEVfWFJFRikiCisJCQkgICAgICAiIGF0ICUjMDh4LCByZWFk OiAweCUwOHggY2FsY3VsYXRlZDogMHglMDh4XG4iLAorCQkJICAgICAgcmVmX29mZnNldCh4 ZC0+bm9kZSksIHhkLT5kYXRhX2NyYywgY3JjKTsKKwkJa2ZyZWUoZGF0YSk7CisJCXJldHVy biBFSU87CisJfQorCisJeGQtPmZsYWdzIHw9IEpGRlMyX1hGTEFHU19IT1Q7CisJeGQtPnhu YW1lID0gZGF0YTsKKwl4ZC0+eHZhbHVlID0gZGF0YSArIHhkLT5uYW1lX2xlbisxOworCisJ Yy0+eGRhdHVtX21lbV91c2FnZSArPSBsZW5ndGg7CisKKwl4ZC0+aGFzaGtleSA9IHhhdHRy X2RhdHVtX2hhc2hrZXkoeGQtPnhwcmVmaXgsIHhkLT54bmFtZSwgeGQtPnh2YWx1ZSwgeGQt PnZhbHVlX2xlbik7CisJaSA9IHhkLT5oYXNoa2V5ICUgWEFUVFJJTkRFWF9IQVNIU0laRTsK KwlsaXN0X2FkZCgmeGQtPnhpbmRleCwgJmMtPnhhdHRyaW5kZXhbaV0pOworCWlmICghcmV0 cnkpIHsKKwkJcmV0cnkgPSAxOworCQlyZWNsYWltX3hhdHRyX2RhdHVtKGMpOworCQlpZiAo IXhkLT54bmFtZSkKKwkJCWdvdG8gcmV0cnk7CisJfQorCisJZGJnX3hhdHRyKCJzdWNjZXNz IG9uIGxvYWRpbmcgeGRhdHVtICh4aWQ9JXUsIHhwcmVmaXg9JXUsIHhuYW1lPSclcycpXG4i LAorCQkgIHhkLT54aWQsIHhkLT54cHJlZml4LCB4ZC0+eG5hbWUpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgbG9hZF94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczJfc2JfaW5m byAqYywgc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCkKK3sKKwkvKiBtdXN0IGJlIGNh bGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSk7CisJICogcmMgPCAwIDogcmVjb3Zl cmFibGUgZXJyb3IsIHRyeSBhZ2FpbgorCSAqIHJjID0gMCA6IHN1Y2Nlc3MKKwkgKiByYyA+ IDAgOiBVbnJlY292ZXJhYmxlIGVycm9yLCB0aGlzIG5vZGUgc2hvdWxkIGJlIGRlbGV0ZWQu CisJICovCisJaW50IHJjID0gMDsKKwlCVUdfT04oeGQtPnhuYW1lKTsKKwlpZiAoIXhkLT5u b2RlKQorCQlyZXR1cm4gRUlPOworCWlmICh1bmxpa2VseShyZWZfZmxhZ3MoeGQtPm5vZGUp ICE9IFJFRl9QUklTVElORSkpIHsKKwkJcmMgPSBkb192ZXJpZnlfeGF0dHJfZGF0dW0oYywg eGQpOworCQlpZiAocmMgPiAwKSB7CisJCQlsaXN0X2RlbF9pbml0KCZ4ZC0+eGluZGV4KTsK KwkJCWRlbGV0ZV94YXR0cl9kYXR1bV9ub2RlKGMsIHhkKTsKKwkJfQorCX0KKwlpZiAoIXJj KQorCQlyYyA9IGRvX2xvYWRfeGF0dHJfZGF0dW0oYywgeGQpOworCXJldHVybiByYzsKK30K Kworc3RhdGljIGludCBzYXZlX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpj LCBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkLCB1aW50MzJfdCBwaHlzX29mcykKK3sK KwkvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSkgKi8KKwlz dHJ1Y3QgamZmczJfcmF3X3hhdHRyIHJ4OworCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYg KnJhdzsKKwlzdHJ1Y3Qga3ZlYyB2ZWNzWzJdOworCXVpbnQzMl90IGxlbmd0aDsKKwlpbnQg cmMsIHRvdGxlbjsKKworCUJVR19PTigheGQtPnhuYW1lKTsKKworCXZlY3NbMF0uaW92X2Jh c2UgPSAmcng7CisJdmVjc1swXS5pb3ZfbGVuID0gUEFEKHNpemVvZihyeCkpOworCXZlY3Nb MV0uaW92X2Jhc2UgPSB4ZC0+eG5hbWU7CisJdmVjc1sxXS5pb3ZfbGVuID0geGQtPm5hbWVf bGVuICsgMSArIHhkLT52YWx1ZV9sZW47CisJdG90bGVuID0gdmVjc1swXS5pb3ZfbGVuICsg dmVjc1sxXS5pb3ZfbGVuOworCisJcmF3ID0gamZmczJfYWxsb2NfcmF3X25vZGVfcmVmKCk7 CisJaWYgKCFyYXcpCisJCXJldHVybiAtRU5PTUVNOworCXJhdy0+Zmxhc2hfb2Zmc2V0ID0g cGh5c19vZnM7CisJcmF3LT5fX3RvdGxlbiA9IFBBRCh0b3RsZW4pOworCXJhdy0+bmV4dF9w aHlzID0gTlVMTDsKKwlyYXctPm5leHRfaW5faW5vID0gKHZvaWQgKil4ZDsKKworCS8qIFNl dHVwIHJhdy14YXR0ciAqLworCXJ4Lm1hZ2ljID0gY3B1X3RvX2plMTYoSkZGUzJfTUFHSUNf QklUTUFTSyk7CisJcngubm9kZXR5cGUgPSBjcHVfdG9famUxNihKRkZTMl9OT0RFVFlQRV9Y QVRUUik7CisJcngudG90bGVuID0gY3B1X3RvX2plMzIoUEFEKHRvdGxlbikpOworCXJ4Lmhk cl9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCAmcngsIHNpemVvZihzdHJ1Y3QgamZmczJf dW5rbm93bl9ub2RlKSAtIDQpKTsKKworCXJ4LnhpZCA9IGNwdV90b19qZTMyKHhkLT54aWQp OworCXJ4LnZlcnNpb24gPSBjcHVfdG9famUzMigrK3hkLT52ZXJzaW9uKTsKKwlyeC54cHJl Zml4ID0geGQtPnhwcmVmaXg7CisJcngubmFtZV9sZW4gPSB4ZC0+bmFtZV9sZW47CisJcngu dmFsdWVfbGVuID0gY3B1X3RvX2plMTYoeGQtPnZhbHVlX2xlbik7CisJcnguZGF0YV9jcmMg PSBjcHVfdG9famUzMihjcmMzMigwLCB2ZWNzWzFdLmlvdl9iYXNlLCB2ZWNzWzFdLmlvdl9s ZW4pKTsKKwlyeC5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsICZyeCwgc2l6ZW9m KHN0cnVjdCBqZmZzMl9yYXdfeGF0dHIpIC0gNCkpOworCisJcmMgPSBqZmZzMl9mbGFzaF93 cml0ZXYoYywgdmVjcywgMiwgcGh5c19vZnMsICZsZW5ndGgsIDApOworCWlmIChyYyB8fCB0 b3RsZW4gIT0gbGVuZ3RoKSB7CisJCUpGRlMyX1dBUk5JTkcoImpmZnMyX2ZsYXNoX3dyaXRl digpPSVkLCByZXE9JXUsIHdyb3RlPSV1LCBhdCAlIzA4eFxuIiwKKwkJCSAgICAgIHJjLCB0 b3RsZW4sIGxlbmd0aCwgcGh5c19vZnMpOworCQlyYyA9IHJjID8gcmMgOiAtRUlPOworCQlp ZiAobGVuZ3RoKSB7CisJCQlyYXctPmZsYXNoX29mZnNldCB8PSBSRUZfT0JTT0xFVEU7CisJ CQlyYXctPm5leHRfaW5faW5vID0gTlVMTDsKKwkJCWpmZnMyX2FkZF9waHlzaWNhbF9ub2Rl X3JlZihjLCByYXcpOworCQkJamZmczJfbWFya19ub2RlX29ic29sZXRlKGMsIHJhdyk7CisJ CX0gZWxzZSB7CisJCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyYXcpOworCQl9CisJCXJl dHVybiByYzsKKwl9CisJQlVHX09OKHJhdy0+X190b3RsZW4gPCBzaXplb2Yoc3RydWN0IGpm ZnMyX3Jhd194YXR0cikpOworCS8qIHN1Y2Nlc3MgKi8KKwlyYXctPmZsYXNoX29mZnNldCB8 PSBSRUZfUFJJU1RJTkU7CisJamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIHJhdyk7 CisJaWYgKHhkLT5ub2RlKQorCQlkZWxldGVfeGF0dHJfZGF0dW1fbm9kZShjLCB4ZCk7CisJ eGQtPm5vZGUgPSByYXc7CisKKwlkYmdfeGF0dHIoInN1Y2Nlc3Mgb24gc2F2aW5nIHhkYXR1 bSAoeGlkPSV1LCB2ZXJzaW9uPSV1LCB4cHJlZml4PSV1LCB4bmFtZT0nJXMnKVxuIiwKKwkJ ICB4ZC0+eGlkLCB4ZC0+dmVyc2lvbiwgeGQtPnhwcmVmaXgsIHhkLT54bmFtZSk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqY3JlYXRl X3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAorCQkJCQkJICAgIGludCB4 cHJlZml4LCBjb25zdCBjaGFyICp4bmFtZSwKKwkJCQkJCSAgICBjb25zdCBjaGFyICp4dmFs dWUsIGludCB4c2l6ZSwKKwkJCQkJCSAgICB1aW50MzJfdCBwaHlzX29mcykKK3sKKwkvKiBt dXN0IGJlIGNhbGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSkgKi8KKwlzdHJ1Y3Qg amZmczJfeGF0dHJfZGF0dW0gKnhkOworCXVpbnQzMl90IGhhc2hrZXksIG5hbWVfbGVuOwor CWNoYXIgKmRhdGE7CisJaW50IGksIHJjOworCisJLyogU2VhcmNoIHhhdHRyX2RhdHVtIGhh cyBzYW1lIHhuYW1lL3h2YWx1ZSBieSBpbmRleCAqLworCWhhc2hrZXkgPSB4YXR0cl9kYXR1 bV9oYXNoa2V5KHhwcmVmaXgsIHhuYW1lLCB4dmFsdWUsIHhzaXplKTsKKwlpID0gaGFzaGtl eSAlIFhBVFRSSU5ERVhfSEFTSFNJWkU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh4ZCwgJmMt PnhhdHRyaW5kZXhbaV0sIHhpbmRleCkgeworCQlpZiAoeGQtPmhhc2hrZXk9PWhhc2hrZXkK KwkJICAgICYmIHhkLT54cHJlZml4PT14cHJlZml4CisJCSAgICAmJiB4ZC0+dmFsdWVfbGVu PT14c2l6ZQorCQkgICAgJiYgIXN0cmNtcCh4ZC0+eG5hbWUsIHhuYW1lKQorCQkgICAgJiYg IW1lbWNtcCh4ZC0+eHZhbHVlLCB4dmFsdWUsIHhzaXplKSkgeworCQkJeGQtPnJlZmNudCsr OworCQkJcmV0dXJuIHhkOworCQl9CisJfQorCisJLyogTm90IGZvdW5kLCBDcmVhdGUgTkVX IFhBVFRSLUNhY2hlICovCisJbmFtZV9sZW4gPSBzdHJsZW4oeG5hbWUpOworCisJeGQgPSBq ZmZzMl9hbGxvY194YXR0cl9kYXR1bSgpOworCWlmICgheGQpCisJCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOworCisJZGF0YSA9IGttYWxsb2MobmFtZV9sZW4gKyAxICsgeHNpemUsIEdG UF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQlqZmZzMl9mcmVlX3hhdHRyX2RhdHVtKHhk KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCXN0cmNweShkYXRhLCB4bmFt ZSk7CisJbWVtY3B5KGRhdGEgKyBuYW1lX2xlbiArIDEsIHh2YWx1ZSwgeHNpemUpOworCisJ eGQtPnJlZmNudCA9IDE7CisJeGQtPnhpZCA9ICsrYy0+aGlnaGVzdF94aWQ7CisJeGQtPmZs YWdzIHw9IEpGRlMyX1hGTEFHU19IT1Q7CisJeGQtPnhwcmVmaXggPSB4cHJlZml4OworCisJ eGQtPmhhc2hrZXkgPSBoYXNoa2V5OworCXhkLT54bmFtZSA9IGRhdGE7CisJeGQtPnh2YWx1 ZSA9IGRhdGEgKyBuYW1lX2xlbiArIDE7CisJeGQtPm5hbWVfbGVuID0gbmFtZV9sZW47CisJ eGQtPnZhbHVlX2xlbiA9IHhzaXplOworCXhkLT5kYXRhX2NyYyA9IGNyYzMyKDAsIGRhdGEs IHhkLT5uYW1lX2xlbiArIDEgKyB4ZC0+dmFsdWVfbGVuKTsKKworCXJjID0gc2F2ZV94YXR0 cl9kYXR1bShjLCB4ZCwgcGh5c19vZnMpOworCWlmIChyYykgeworCQlrZnJlZSh4ZC0+eG5h bWUpOworCQlqZmZzMl9mcmVlX3hhdHRyX2RhdHVtKHhkKTsKKwkJcmV0dXJuIEVSUl9QVFIo cmMpOworCX0KKworCS8qIEluc2VydCBIYXNoIEluZGV4ICovCisJaSA9IGhhc2hrZXkgJSBY QVRUUklOREVYX0hBU0hTSVpFOworCWxpc3RfYWRkKCZ4ZC0+eGluZGV4LCAmYy0+eGF0dHJp bmRleFtpXSk7CisKKwljLT54ZGF0dW1fbWVtX3VzYWdlICs9ICh4ZC0+bmFtZV9sZW4gKyAx ICsgeGQtPnZhbHVlX2xlbik7CisJcmVjbGFpbV94YXR0cl9kYXR1bShjKTsKKworCXJldHVy biB4ZDsKK30KKworLyogLS0tLS0tLS0geGRhdHVtIHJlbGF0ZWQgZnVuY3Rpb25zIC0tLS0t LS0tLS0tLS0tLS0KKyAqIHZlcmlmeV94YXR0cl9yZWYoYywgcmVmKQorICogICBpcyB1c2Vk IHRvIGxvYWQgeHJlZiBpbmZvcm1hdGlvbiBmcm9tIG1lZGl1bS4gQmVjYXVzZSBzdW1tYXJ5 IGRhdGEgZG9lcyBub3QKKyAqICAgY29udGFpbiB4aWQvaW5vLCBpdCdzIG5lY2Vzc2FyeSB0 byB2ZXJpZnkgb25jZSB3aGlsZSBtb3VudGluZyBwcm9jZXNzLgorICogZGVsZXRlX3hhdHRy X3JlZl9ub2RlKGMsIHJlZikKKyAqICAgaXMgdXNlZCB0byBkZWxldGUgYSBqZmZzMiBub2Rl IGlzIGRvbWluYXRlZCBieSB4cmVmLiBXaGVuIEVCUyBpcyBlbmFibGVkLAorICogICBpdCBv dmVyd3JpdGVzIHRoZSBvYnNvbGV0ZSBub2RlIGJ5IG15c2VsZi4gCisgKiBkZWxldGVfeGF0 dHJfcmVmKGMsIHJlZikKKyAqICAgaXMgdXNlZCB0byBkZWxldGUgamZmczJfeGF0dHJfcmVm IG9iamVjdC4gSWYgdGhlIHJlZmVyZW5jZSBjb3VudGVyIG9mIHhkYXR1bQorICogICBpcyBy ZWZlcmVkIGJ5IHRoaXMgeHJlZiBiZWNvbWUgMCwgZGVsZXRlX3hhdHRyX2RhdHVtKCkgaXMg Y2FsbGVkIGxhdGVyLgorICogc2F2ZV94YXR0cl9yZWYoYywgcmVmLCBwaHlzX29mcykKKyAq ICAgaXMgdXNlZCB0byB3cml0ZSB4cmVmIHRvIG1lZGl1bS4KKyAqIGNyZWF0ZV94YXR0cl9y ZWYoYywgaWMsIHhkLCBwaHlzX29mcykKKyAqICAgaXMgdXNlZCB0byBjcmVhdGUgYSBuZXcg eHJlZiBhbmQgd3JpdGUgdG8gbWVkaXVtLgorICogamZmczJfeGF0dHJfZGVsZXRlX2lub2Rl KGMsIGljKQorICogICBpcyBjYWxsZWQgdG8gcmVtb3ZlIHhyZWZzIHJlbGF0ZWQgdG8gb2Jz b2xldGUgaW5vZGUgd2hlbiBpbm9kZSBpcyB1bmxpbmtlZC4KKyAqIGpmZnMyX3hhdHRyX2Zy ZWVfaW5vZGUoYywgaWMpCisgKiAgIGlzIGNhbGxlZCB0byByZWxlYXNlIHhhdHRyIHJlbGF0 ZWQgb2JqZWN0cyB3aGVuIHVubW91bnRpbmcuIAorICogY2hlY2tfeGF0dHJfcmVmX2lsaXN0 KGMsIGljKQorICogICBpcyB1c2VkIHRvIGNvbmZpcm0gaW5vZGUgZG9lcyBub3QgaGF2ZSBk dXBsaWNhdGUgeGF0dHIgbmFtZS92YWx1ZSBwYWlyLgorICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbnQgdmVyaWZ5 X3hhdHRyX3JlZihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRy X3JlZiAqcmVmKQoreworCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWI7CisJc3RydWN0 IGpmZnMyX3Jhd194cmVmIHJyOworCXNpemVfdCByZWFkbGVuOworCXVpbnQzMl90IGNyYywg dG90bGVuOworCWludCByYzsKKworCUJVR19PTihyZWZfZmxhZ3MocmVmLT5ub2RlKSAhPSBS RUZfVU5DSEVDS0VEKTsKKworCXJjID0gamZmczJfZmxhc2hfcmVhZChjLCByZWZfb2Zmc2V0 KHJlZi0+bm9kZSksIHNpemVvZihyciksICZyZWFkbGVuLCAoY2hhciAqKSZycik7CisJaWYg KHJjIHx8IHNpemVvZihycikgIT0gcmVhZGxlbikgeworCQlKRkZTMl9XQVJOSU5HKCJqZmZz Ml9mbGFzaF9yZWFkKCk9JWQsIHJlcT0ldSwgcmVhZD0ldSwgYXQgJSMwOHhcbiIsCisJCQkg ICAgICByYywgc2l6ZW9mKHJyKSwgcmVhZGxlbiwgcmVmX29mZnNldChyZWYtPm5vZGUpKTsK KwkJcmV0dXJuIHJjID8gcmMgOiAtRUlPOworCX0KKwkvKiBvYnNvbGV0ZSBub2RlICovCisJ Y3JjID0gY3JjMzIoMCwgJnJyLCBzaXplb2YocnIpIC0gNCk7CisJaWYgKGNyYyAhPSBqZTMy X3RvX2NwdShyci5ub2RlX2NyYykpIHsKKwkJaWYgKGplMzJfdG9fY3B1KHJyLm5vZGVfY3Jj KSAhPSAweGZmZmZmZmZmKQorCQkJSkZGUzJfRVJST1IoIm5vZGUgQ1JDIGZhaWxlZCBhdCAl IzA4eCwgcmVhZD0lIzA4eCwgY2FsYz0lIzA4eFxuIiwKKwkJCQkgICAgcmVmX29mZnNldChy ZWYtPm5vZGUpLCBqZTMyX3RvX2NwdShyci5ub2RlX2NyYyksIGNyYyk7CisJCXJldHVybiBF SU87CisJfQorCWlmIChqZTE2X3RvX2NwdShyci5tYWdpYykgIT0gSkZGUzJfTUFHSUNfQklU TUFTSworCSAgICB8fCBqZTE2X3RvX2NwdShyci5ub2RldHlwZSkgIT0gSkZGUzJfTk9ERVRZ UEVfWFJFRgorCSAgICB8fCBqZTMyX3RvX2NwdShyci50b3RsZW4pICE9IFBBRChzaXplb2Yo cnIpKSkgeworCQlKRkZTMl9FUlJPUigiaW5jb25zaXN0ZW50IHhyZWYgYXQgJSMwOHgsIG1h Z2ljPSUjMDR4LyUjMDR4LCAiCisJCQkgICAgIm5vZGV0eXBlPSUjMDR4LyUjMDR4LCB0b3Rs ZW49JXUvJXVcbiIsCisJCQkgICAgcmVmX29mZnNldChyZWYtPm5vZGUpLCBqZTE2X3RvX2Nw dShyci5tYWdpYyksIEpGRlMyX01BR0lDX0JJVE1BU0ssCisJCQkgICAgamUxNl90b19jcHUo cnIubm9kZXR5cGUpLCBKRkZTMl9OT0RFVFlQRV9YUkVGLAorCQkJICAgIGplMzJfdG9fY3B1 KHJyLnRvdGxlbiksIFBBRChzaXplb2YocnIpKSk7CisJCXJldHVybiBFSU87CisJfQorCXJl Zi0+aW5vID0gamUzMl90b19jcHUocnIuaW5vKTsKKwlyZWYtPnhpZCA9IGplMzJfdG9fY3B1 KHJyLnhpZCk7CisKKwkvKiBmaXh1cCBzdXBlcmJsb2NrL2VyYXNlYmxvY2sgaW5mbyAqLwor CWplYiA9ICZjLT5ibG9ja3NbcmVmX29mZnNldChyZWYtPm5vZGUpIC8gYy0+c2VjdG9yX3Np emVdOworCXRvdGxlbiA9IFBBRChzaXplb2YocnIpKTsKKworCXNwaW5fbG9jaygmYy0+ZXJh c2VfY29tcGxldGlvbl9sb2NrKTsKKwljLT51bmNoZWNrZWRfc2l6ZSAtPSB0b3RsZW47IGMt PnVzZWRfc2l6ZSArPSB0b3RsZW47CisJamViLT51bmNoZWNrZWRfc2l6ZSAtPSB0b3RsZW47 IGplYi0+dXNlZF9zaXplICs9IHRvdGxlbjsKKwlyZWYtPm5vZGUtPmZsYXNoX29mZnNldCA9 IHJlZl9vZmZzZXQocmVmLT5ub2RlKSB8IFJFRl9QUklTVElORTsKKwlzcGluX3VubG9jaygm Yy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKworCWRiZ194YXR0cigic3VjY2VzcyBvbiB2 ZXJpZnlpbmcgeHJlZiAoaW5vPSV1LCB4aWQ9JXUpIGF0ICUjMDh4XG4iLAorCQkgIHJlZi0+ aW5vLCByZWYtPnhpZCwgcmVmX29mZnNldChyZWYtPm5vZGUpKTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgZGVsZXRlX3hhdHRyX3JlZl9ub2RlKHN0cnVjdCBqZmZzMl9zYl9p bmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYpCit7CisJc3RydWN0IGpmZnMy X3Jhd194cmVmIHJyOworCXVpbnQzMl90IGxlbmd0aDsKKwlpbnQgcmM7CisKKwlpZiAoamZm czJfc3VtX2FjdGl2ZSgpKSB7CisJCW1lbXNldCgmcnIsIDB4ZmYsIHNpemVvZihycikpOwor CQlyYyA9IGpmZnMyX2ZsYXNoX3JlYWQoYywgcmVmX29mZnNldChyZWYtPm5vZGUpLAorCQkJ CSAgICAgIHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSwKKwkJCQkgICAgICAm bGVuZ3RoLCAoY2hhciAqKSZycik7CisJCWlmIChyYyB8fCBsZW5ndGggIT0gc2l6ZW9mKHN0 cnVjdCBqZmZzMl91bmtub3duX25vZGUpKSB7CisJCQlKRkZTMl9FUlJPUigiamZmczJfZmxh c2hfcmVhZCgpPSVkLCByZXE9JXUsIHJlYWQ9JXUgYXQgJSMwOHhcbiIsCisJCQkJICAgIHJj LCBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSksCisJCQkJICAgIGxlbmd0aCwg cmVmX29mZnNldChyZWYtPm5vZGUpKTsKKwkJfQorCQlyYyA9IGpmZnMyX2ZsYXNoX3dyaXRl KGMsIHJlZl9vZmZzZXQocmVmLT5ub2RlKSwgc2l6ZW9mKHJyKSwKKwkJCQkgICAgICAgJmxl bmd0aCwgKGNoYXIgKikmcnIpOworCQlpZiAocmMgfHwgbGVuZ3RoICE9IHNpemVvZihzdHJ1 Y3QgamZmczJfcmF3X3hyZWYpKSB7CisJCQlKRkZTMl9FUlJPUigiamZmczJfZmxhc2hfd3Jp dGUoKT0lZCwgcmVxPSV1LCB3cm90ZT0ldSBhdCAlIzA4eFxuIiwKKwkJCQkgICAgcmMsIHNp emVvZihyciksIGxlbmd0aCwgcmVmX29mZnNldChyZWYtPm5vZGUpKTsKKwkJfQorCX0KKwlz cGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJcmVmLT5ub2RlLT5uZXh0 X2luX2lubyA9IE5VTEw7CisJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9j ayk7CisJamZmczJfbWFya19ub2RlX29ic29sZXRlKGMsIHJlZi0+bm9kZSk7CisJcmVmLT5u b2RlID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlX3hhdHRyX3JlZihzdHJ1Y3Qg amZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmKQoreworCS8q IG11c3QgYmUgY2FsbGVkIHVuZGVyIGRvd25fd3JpdGUoeGF0dHJfc2VtKSAqLworCXN0cnVj dCBqZmZzMl94YXR0cl9kYXR1bSAqeGQ7CisKKwlCVUdfT04oIXJlZi0+bm9kZSk7CisJZGVs ZXRlX3hhdHRyX3JlZl9ub2RlKGMsIHJlZik7CisKKwlsaXN0X2RlbCgmcmVmLT5pbGlzdCk7 CisJeGQgPSByZWYtPnhkOworCXhkLT5yZWZjbnQtLTsKKwlpZiAoIXhkLT5yZWZjbnQpCisJ CWRlbGV0ZV94YXR0cl9kYXR1bShjLCB4ZCk7CisJamZmczJfZnJlZV94YXR0cl9yZWYocmVm KTsKK30KKworc3RhdGljIGludCBzYXZlX3hhdHRyX3JlZihzdHJ1Y3QgamZmczJfc2JfaW5m byAqYywgc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmLCB1aW50MzJfdCBwaHlzX29mcykK K3sKKwkvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSkgKi8K KwlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyYXc7CisJc3RydWN0IGpmZnMyX3Jhd194 cmVmIHJyOworCXVpbnQzMl90IGxlbmd0aDsKKwlpbnQgcmV0OworCisJcmF3ID0gamZmczJf YWxsb2NfcmF3X25vZGVfcmVmKCk7CisJaWYgKCFyYXcpCisJCXJldHVybiAtRU5PTUVNOwor CXJhdy0+Zmxhc2hfb2Zmc2V0ID0gcGh5c19vZnM7CisJcmF3LT5fX3RvdGxlbiA9IFBBRChz aXplb2YocnIpKTsKKwlyYXctPm5leHRfcGh5cyA9IE5VTEw7CisJcmF3LT5uZXh0X2luX2lu byA9ICh2b2lkICopcmVmOworCisJcnIubWFnaWMgPSBjcHVfdG9famUxNihKRkZTMl9NQUdJ Q19CSVRNQVNLKTsKKwlyci5ub2RldHlwZSA9IGNwdV90b19qZTE2KEpGRlMyX05PREVUWVBF X1hSRUYpOworCXJyLnRvdGxlbiA9IGNwdV90b19qZTMyKFBBRChzaXplb2YocnIpKSk7CisJ cnIuaGRyX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsICZyciwgc2l6ZW9mKHN0cnVjdCBq ZmZzMl91bmtub3duX25vZGUpIC0gNCkpOworCisJcnIuaW5vID0gY3B1X3RvX2plMzIocmVm LT5pYy0+aW5vKTsKKwlyci54aWQgPSBjcHVfdG9famUzMihyZWYtPnhkLT54aWQpOworCXJy Lm5vZGVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgJnJyLCBzaXplb2YocnIpIC0gNCkp OworCisJcmV0ID0gamZmczJfZmxhc2hfd3JpdGUoYywgcGh5c19vZnMsIHNpemVvZihyciks ICZsZW5ndGgsIChjaGFyICopJnJyKTsKKwlpZiAocmV0IHx8IHNpemVvZihycikgIT0gbGVu Z3RoKSB7CisJCUpGRlMyX1dBUk5JTkcoImpmZnMyX2ZsYXNoX3dyaXRlKCkgcmV0dXJuZWQg JWQsIHJlcXVlc3Q9JXUsIHJldGxlbj0ldSwgYXQgJSMwOHhcbiIsCisJCQkgICAgICByZXQs IHNpemVvZihyciksIGxlbmd0aCwgcGh5c19vZnMpOworCQlyZXQgPSByZXQgPyByZXQgOiAt RUlPOworCQlpZiAobGVuZ3RoKSB7CisJCQlyYXctPmZsYXNoX29mZnNldCB8PSBSRUZfT0JT T0xFVEU7CisJCQlyYXctPm5leHRfaW5faW5vID0gTlVMTDsKKwkJCWpmZnMyX2FkZF9waHlz aWNhbF9ub2RlX3JlZihjLCByYXcpOworCQkJamZmczJfbWFya19ub2RlX29ic29sZXRlKGMs IHJhdyk7CisJCX0gZWxzZSB7CisJCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyYXcpOwor CQl9CisJCXJldHVybiByZXQ7CisJfQorCXJhdy0+Zmxhc2hfb2Zmc2V0IHw9IFJFRl9QUklT VElORTsKKworCWpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCByYXcpOworCWlmIChy ZWYtPm5vZGUpCisJCWRlbGV0ZV94YXR0cl9yZWZfbm9kZShjLCByZWYpOworCXJlZi0+bm9k ZSA9IHJhdzsKKworCWRiZ194YXR0cigic3VjY2VzcyBvbiBzYXZpbmcgeHJlZiAoaW5vPSV1 LCB4aWQ9JXUpXG4iLCByZWYtPmljLT5pbm8sIHJlZi0+eGQtPnhpZCk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKmNyZWF0ZV94YXR0cl9y ZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAq aWMsCisJCQkJCQlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkLCB1aW50MzJfdCBwaHlz X29mcykKK3sKKwkvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3Nl bSkgKi8KKwlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWY7CisJaW50IHJldDsKKworCXJl ZiA9IGpmZnMyX2FsbG9jX3hhdHRyX3JlZigpOworCWlmICghcmVmKQorCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKKwlyZWYtPmljID0gaWM7CisJcmVmLT54ZCA9IHhkOworCisJcmV0 ID0gc2F2ZV94YXR0cl9yZWYoYywgcmVmLCBwaHlzX29mcyk7CisJaWYgKHJldCkgeworCQlq ZmZzMl9mcmVlX3hhdHRyX3JlZihyZWYpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0K KworCS8qIENoYWluIHRvIGlub2RlICovCisJbGlzdF9hZGQoJnJlZi0+aWxpc3QsICZpYy0+ aWxpc3QpOworCisJcmV0dXJuIHJlZjsgLyogc3VjY2VzcyAqLworfQorCit2b2lkIGpmZnMy X3hhdHRyX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpm ZnMyX2lub2RlX2NhY2hlICppYykKK3sKKwkvKiBJdCdzIGNhbGxlZCBmcm9tIGpmZnMyX2Ns ZWFyX2lub2RlKCkgb24gaW5vZGUgcmVtb3ZpbmcuCisJICAgV2hlbiBhbiBpbm9kZSB3aXRo IFhBVFRSIGlzIHJlbW92ZWQsIHRob3NlIFhBVFRScyBtdXN0IGJlIHJlbW92ZWQuICovCisJ c3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmLCAqX3JlZjsKKworCWlmICghaWMgfHwgaWMt Pm5saW5rID4gMCkKKwkJcmV0dXJuOworCisJZG93bl93cml0ZSgmYy0+eGF0dHJfc2VtKTsK KwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVmLCBfcmVmLCAmaWMtPmlsaXN0LCBpbGlz dCkKKwkJZGVsZXRlX3hhdHRyX3JlZihjLCByZWYpOworCXVwX3dyaXRlKCZjLT54YXR0cl9z ZW0pOworfQorCit2b2lkIGpmZnMyX3hhdHRyX2ZyZWVfaW5vZGUoc3RydWN0IGpmZnMyX3Ni X2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWMpCit7CisJLyogSXQncyBj YWxsZWQgZnJvbSBqZmZzMl9mcmVlX2lub19jYWNoZXMoKSB1bnRpbCB1bm1vdW50aW5nIEZT LiAqLworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQ7CisJc3RydWN0IGpmZnMyX3hh dHRyX3JlZiAqcmVmLCAqX3JlZjsKKworCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlZiwgX3JlZiwgJmljLT5pbGlzdCwgaWxpc3Qp IHsKKwkJbGlzdF9kZWwoJnJlZi0+aWxpc3QpOworCQl4ZCA9IHJlZi0+eGQ7CisJCXhkLT5y ZWZjbnQtLTsKKwkJaWYgKCF4ZC0+cmVmY250KSB7CisJCQl1bmxvYWRfeGF0dHJfZGF0dW0o YywgeGQpOworCQkJamZmczJfZnJlZV94YXR0cl9kYXR1bSh4ZCk7CisJCX0KKwkJamZmczJf ZnJlZV94YXR0cl9yZWYocmVmKTsKKwl9CisJdXBfd3JpdGUoJmMtPnhhdHRyX3NlbSk7Cit9 CisKK3N0YXRpYyBpbnQgY2hlY2tfeGF0dHJfcmVmX2lsaXN0KHN0cnVjdCBqZmZzMl9zYl9p bmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljKQoreworCS8qIHN1Y2Nlc3Mg b2YgY2hlY2tfeGF0dHJfcmVmX2lsaXN0KCkgbWVhbnMgdGFodCBpbm9kZSAoaWMpIGRvc2Ug bm90IGhhdmUKKwkgKiBkdXBsaWNhdGUgbmFtZS92YWx1ZSBwYWlycy4gSWYgZHVwbGljYXRl IG5hbWUvdmFsdWUgcGFpciB3b3VsZCBiZSBmb3VuZCwKKwkgKiBvbmUgd2lsbCBiZSByZW1v dmVkLgorCSAqLworCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZiwgKmNtcDsKKwlpbnQg cmMgPSAwOworCisJaWYgKGxpa2VseShpYy0+ZmxhZ3MgJiBJTk9fRkxBR1NfWEFUVFJfQ0hF Q0tFRCkpCisJCXJldHVybiAwOworCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisgcmV0 cnk6CisJcmMgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVmLCAmaWMtPmlsaXN0LCBp bGlzdCkgeworCQlpZiAoIXJlZi0+eGQtPnhuYW1lKSB7CisJCQlyYyA9IGxvYWRfeGF0dHJf ZGF0dW0oYywgcmVmLT54ZCk7CisJCQlpZiAodW5saWtlbHkocmMgPiAwKSkgeworCQkJCWRl bGV0ZV94YXR0cl9yZWYoYywgcmVmKTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfSBlbHNlIGlm ICh1bmxpa2VseShyYyA8IDApKQorCQkJCWdvdG8gb3V0OworCQl9CisJCWNtcCA9IHJlZjsK KwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShjbXAsICZpYy0+aWxpc3QsIGlsaXN0 KSB7CisJCQlpZiAoIWNtcC0+eGQtPnhuYW1lKSB7CisJCQkJcmVmLT54ZC0+ZmxhZ3MgfD0g SkZGUzJfWEZMQUdTX0JJTkQ7CisJCQkJcmMgPSBsb2FkX3hhdHRyX2RhdHVtKGMsIGNtcC0+ eGQpOworCQkJCXJlZi0+eGQtPmZsYWdzICY9IH5KRkZTMl9YRkxBR1NfQklORDsKKwkJCQlp ZiAodW5saWtlbHkocmMgPiAwKSkgeworCQkJCQlkZWxldGVfeGF0dHJfcmVmKGMsIGNtcCk7 CisJCQkJCWdvdG8gcmV0cnk7CisJCQkJfSBlbHNlIGlmICh1bmxpa2VseShyYyA8IDApKQor CQkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWlmIChyZWYtPnhkLT54cHJlZml4ID09IGNtcC0+ eGQtPnhwcmVmaXgKKwkJCSAgICAmJiAhc3RyY21wKHJlZi0+eGQtPnhuYW1lLCBjbXAtPnhk LT54bmFtZSkpIHsKKwkJCQlkZWxldGVfeGF0dHJfcmVmKGMsIGNtcCk7CisJCQkJZ290byBy ZXRyeTsKKwkJCX0KKwkJfQorCX0KKwlpYy0+ZmxhZ3MgfD0gSU5PX0ZMQUdTX1hBVFRSX0NI RUNLRUQ7Cisgb3V0OgorCXVwX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCisJcmV0dXJuIHJj OworfQorCisvKiAtLS0tLS0tLSB4YXR0ciBzdWJzeXN0ZW0gZnVuY3Rpb25zIC0tLS0tLS0t LS0tLS0tLQorICogamZmczJfaW5pdF94YXR0cl9zdWJzeXN0ZW0oYykKKyAqICAgaXMgdXNl ZCB0byBpbml0aWFsaXplIHNlbWFwaG9yZSBhbmQgbGlzdF9oZWFkLCBhbmQgc29tZSB2YXJp YWJsZXMuCisgKiBqZmZzMl9maW5kX3hhdHRyX2RhdHVtKGMsIHhpZCkKKyAqICAgaXMgdXNl ZCB0byBsb29rdXAgeGRhdHVtIHdoaWxlIHNjYW5uaW5nIHByb2Nlc3MuCisgKiBqZmZzMl9j bGVhcl94YXR0cl9zdWJzeXN0ZW0oYykKKyAqICAgaXMgdXNlZCB0byByZWxlYXNlIGFueSB4 YXR0ciByZWxhdGVkIG9iamVjdHMuCisgKiBqZmZzMl9idWlsZF94YXR0cl9zdWJzeXN0ZW0o YykKKyAqICAgaXMgdXNlZCB0byBhc3NvY2lhdGUgeGRhdHVtIGFuZCB4cmVmIHdoaWxlIHN1 cGVyIGJsb2NrIGJ1aWxkaW5nIHByb2Nlc3MuCisgKiBqZmZzMl9zZXR1cF94YXR0cl9kYXR1 bShjLCB4aWQsIHZlcnNpb24pCisgKiAgIGlzIHVzZWQgdG8gaW5zZXJ0IHhkYXR1bSB3aGls ZSBzY2FubmluZyBwcm9jZXNzLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3ZvaWQgamZmczJfaW5pdF94YXR0cl9zdWJzeXN0 ZW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpCit7CisJaW50IGk7CisKKwlmb3IgKGk9MDsg aSA8IFhBVFRSSU5ERVhfSEFTSFNJWkU7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJmMtPnhh dHRyaW5kZXhbaV0pOworCUlOSVRfTElTVF9IRUFEKCZjLT54YXR0cl90ZW1wKTsKKwlJTklU X0xJU1RfSEVBRCgmYy0+eGF0dHJfdW5jaGVja2VkKTsKKworCWluaXRfcndzZW0oJmMtPnhh dHRyX3NlbSk7CisJYy0+eGRhdHVtX21lbV91c2FnZSA9IDA7CisJYy0+eGRhdHVtX21lbV90 aHJlc2hvbGQgPSAzMiAqIDEwMjQ7CS8qIERlZmF1bHQgMzJLQiAqLworfQorCitzdGF0aWMg c3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICpqZmZzMl9maW5kX3hhdHRyX2RhdHVtKHN0cnVj dCBqZmZzMl9zYl9pbmZvICpjLCB1aW50MzJfdCB4aWQpCit7CisJc3RydWN0IGpmZnMyX3hh dHRyX2RhdHVtICp4ZDsKKwlpbnQgaSA9IHhpZCAlIFhBVFRSSU5ERVhfSEFTSFNJWkU7CisK KwkvKiBJdCdzIG9ubHkgdXNlZCBpbiBzY2FubmluZy9idWlsZGluZyBwcm9jZXNzLiAqLwor CUJVR19PTighKGMtPmZsYWdzICYgKEpGRlMyX1NCX0ZMQUdfU0NBTk5JTkd8SkZGUzJfU0Jf RkxBR19CVUlMRElORykpKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoeGQsICZjLT54YXR0 cmluZGV4W2ldLCB4aW5kZXgpIHsKKwkJaWYgKHhkLT54aWQ9PXhpZCkKKwkJCXJldHVybiB4 ZDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgamZmczJfY2xlYXJfeGF0dHJfc3Vi c3lzdGVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQoreworCXN0cnVjdCBqZmZzMl94YXR0 cl9kYXR1bSAqeGQsICpfeGQ7CisJc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmLCAqX3Jl ZjsKKwlpbnQgaTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWYsIF9yZWYsICZj LT54YXR0cl90ZW1wLCBpbGlzdCkKKwkJamZmczJfZnJlZV94YXR0cl9yZWYocmVmKTsKKwor CWZvciAoaT0wOyBpIDwgWEFUVFJJTkRFWF9IQVNIU0laRTsgaSsrKSB7CisJCWxpc3RfZm9y X2VhY2hfZW50cnlfc2FmZSh4ZCwgX3hkLCAmYy0+eGF0dHJpbmRleFtpXSwgeGluZGV4KSB7 CisJCQlsaXN0X2RlbCgmeGQtPnhpbmRleCk7CisJCQlpZiAoeGQtPnhuYW1lKQorCQkJCWtm cmVlKHhkLT54bmFtZSk7CisJCQlqZmZzMl9mcmVlX3hhdHRyX2RhdHVtKHhkKTsKKwkJfQor CX0KK30KKwordm9pZCBqZmZzMl9idWlsZF94YXR0cl9zdWJzeXN0ZW0oc3RydWN0IGpmZnMy X3NiX2luZm8gKmMpCit7CisJc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmLCAqX3JlZjsK KwlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkLCAqX3hkOworCXN0cnVjdCBqZmZzMl9p bm9kZV9jYWNoZSAqaWM7CisJaW50IGksIHhkYXR1bV9jb3VudCA9MCwgeGRhdHVtX3VuY2hl Y2tlZF9jb3VudCA9IDAsIHhyZWZfY291bnQgPSAwOworCisJQlVHX09OKCEoYy0+ZmxhZ3Mg JiBKRkZTMl9TQl9GTEFHX0JVSUxESU5HKSk7CisKKwkvKiBQaGFzZS4xICovCisJbGlzdF9m b3JfZWFjaF9lbnRyeV9zYWZlKHJlZiwgX3JlZiwgJmMtPnhhdHRyX3RlbXAsIGlsaXN0KSB7 CisJCWxpc3RfZGVsX2luaXQoJnJlZi0+aWxpc3QpOworCQkvKiBjaGVja2luZyBSRUZfVU5D SEVDS0VEIG5vZGVzICovCisJCWlmIChyZWZfZmxhZ3MocmVmLT5ub2RlKSAhPSBSRUZfUFJJ U1RJTkUpIHsKKwkJCWlmICh2ZXJpZnlfeGF0dHJfcmVmKGMsIHJlZikpIHsKKwkJCQlkZWxl dGVfeGF0dHJfcmVmX25vZGUoYywgcmVmKTsKKwkJCQlqZmZzMl9mcmVlX3hhdHRyX3JlZihy ZWYpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCS8qIEF0IHRoaXMgcG9pbnQsIHJl Zi0+eGlkIGFuZCByZWYtPmlubyBjb250YWluIFhJRCBhbmQgaW5vZGUgbnVtYmVyLgorCQkg ICByZWYtPnhkIGFuZCByZWYtPmljIGFyZSBub3QgdmFsaWQgeWV0LiAqLworCQl4ZCA9IGpm ZnMyX2ZpbmRfeGF0dHJfZGF0dW0oYywgcmVmLT54aWQpOworCQlpYyA9IGpmZnMyX2dldF9p bm9fY2FjaGUoYywgcmVmLT5pbm8pOworCQlpZiAoIXhkIHx8ICFpYykgeworCQkJaWYgKHJl Zl9mbGFncyhyZWYtPm5vZGUpICE9IFJFRl9VTkNIRUNLRUQpCisJCQkJSkZGUzJfV0FSTklO RygieHJlZihpbm89JXUsIHhpZD0ldSkgaXMgb3JwaGFuLiBcbiIsCisJCQkJCSAgICAgIHJl Zi0+aW5vLCByZWYtPnhpZCk7CisJCQlkZWxldGVfeGF0dHJfcmVmX25vZGUoYywgcmVmKTsK KwkJCWpmZnMyX2ZyZWVfeGF0dHJfcmVmKHJlZik7CisJCQljb250aW51ZTsKKwkJfQorCQly ZWYtPnhkID0geGQ7CisJCXJlZi0+aWMgPSBpYzsKKwkJeGQtPnJlZmNudCsrOworCQlsaXN0 X2FkZF90YWlsKCZyZWYtPmlsaXN0LCAmaWMtPmlsaXN0KTsKKwkJeHJlZl9jb3VudCsrOwor CX0KKwkvKiBBZnRlciB0aGlzLCByZWYtPnhpZC9pbm8gYXJlIE5FVkVSIHVzZWQuICovCisK KwkvKiBQaGFzZS4yICovCisJZm9yIChpPTA7IGkgPCBYQVRUUklOREVYX0hBU0hTSVpFOyBp KyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHhkLCBfeGQsICZjLT54YXR0cmlu ZGV4W2ldLCB4aW5kZXgpIHsKKwkJCWxpc3RfZGVsX2luaXQoJnhkLT54aW5kZXgpOworCQkJ aWYgKCF4ZC0+cmVmY250KSB7CisJCQkJaWYgKHJlZl9mbGFncyh4ZC0+bm9kZSkgIT0gUkVG X1VOQ0hFQ0tFRCkKKwkJCQkJSkZGUzJfV0FSTklORygib3JwaGFuIHhkYXR1bSh4aWQ9JXUs IHZlcnNpb249JXUpIGF0ICUjMDh4XG4iLAorCQkJCQkJICAgICAgeGQtPnhpZCwgeGQtPnZl cnNpb24sIHJlZl9vZmZzZXQoeGQtPm5vZGUpKTsKKwkJCQlkZWxldGVfeGF0dHJfZGF0dW0o YywgeGQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHJlZl9mbGFncyh4ZC0+bm9k ZSkgIT0gUkVGX1BSSVNUSU5FKSB7CisJCQkJZGJnX3hhdHRyKCJ1bmNoZWNrZWQgeGRhdHVt KHhpZD0ldSkgYXQgJSMwOHhcbiIsCisJCQkJCSAgeGQtPnhpZCwgcmVmX29mZnNldCh4ZC0+ bm9kZSkpOworCQkJCWxpc3RfYWRkKCZ4ZC0+eGluZGV4LCAmYy0+eGF0dHJfdW5jaGVja2Vk KTsKKwkJCQl4ZGF0dW1fdW5jaGVja2VkX2NvdW50Kys7CisJCQl9CisJCQl4ZGF0dW1fY291 bnQrKzsKKwkJfQorCX0KKwkvKiBidWlsZCBjb21wbGV0ZSAqLworCUpGRlMyX05PVElDRSgi Y29tcGxldGUgYnVpbGRpbmcgeGF0dHIgc3Vic3lzdGVtLCAldSBvZiB4ZGF0dW0gKCV1IHVu Y2hlY2tlZCkgYW5kICIKKwkJICAgICAiJXUgb2YgeHJlZiBmb3VuZC5cbiIsIHhkYXR1bV9j b3VudCwgeGRhdHVtX3VuY2hlY2tlZF9jb3VudCwgeHJlZl9jb3VudCk7Cit9CisKK3N0cnVj dCBqZmZzMl94YXR0cl9kYXR1bSAqamZmczJfc2V0dXBfeGF0dHJfZGF0dW0oc3RydWN0IGpm ZnMyX3NiX2luZm8gKmMsCisJCQkJCQkgIHVpbnQzMl90IHhpZCwgdWludDMyX3QgdmVyc2lv bikKK3sKKwlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkLCAqX3hkOworCisJX3hkID0g amZmczJfZmluZF94YXR0cl9kYXR1bShjLCB4aWQpOworCWlmIChfeGQpIHsKKwkJZGJnX3hh dHRyKCJkdXBsaWNhdGUgeGRhdHVtICh4aWQ9JXUsIHZlcnNpb249JXUvJXUpIGF0ICUjMDh4 XG4iLAorCQkJICB4aWQsIHZlcnNpb24sIF94ZC0+dmVyc2lvbiwgcmVmX29mZnNldChfeGQt Pm5vZGUpKTsKKwkJaWYgKHZlcnNpb24gPCBfeGQtPnZlcnNpb24pCisJCQlyZXR1cm4gRVJS X1BUUigtRUVYSVNUKTsKKwl9CisJeGQgPSBqZmZzMl9hbGxvY194YXR0cl9kYXR1bSgpOwor CWlmICgheGQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCXhkLT54aWQgPSB4aWQ7 CisJeGQtPnZlcnNpb24gPSB2ZXJzaW9uOworCWlmICh4ZC0+eGlkID4gYy0+aGlnaGVzdF94 aWQpCisJCWMtPmhpZ2hlc3RfeGlkID0geGQtPnhpZDsKKwlsaXN0X2FkZF90YWlsKCZ4ZC0+ eGluZGV4LCAmYy0+eGF0dHJpbmRleFt4aWQgJSBYQVRUUklOREVYX0hBU0hTSVpFXSk7CisK KwlpZiAoX3hkKSB7CisJCWxpc3RfZGVsX2luaXQoJl94ZC0+eGluZGV4KTsKKwkJZGVsZXRl X3hhdHRyX2RhdHVtX25vZGUoYywgX3hkKTsKKwkJamZmczJfZnJlZV94YXR0cl9kYXR1bShf eGQpOworCX0KKwlyZXR1cm4geGQ7Cit9CisKKy8qIC0tLS0tLS0tIHhhdHRyIHN1YnN5c3Rl bSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tCisgKiB4cHJlZml4X3RvX2hhbmRsZXIoeHBy ZWZpeCkKKyAqICAgaXMgdXNlZCB0byB0cmFuc2xhdGUgeHByZWZpeCBpbnRvIHhhdHRyX2hh bmRsZXIuCisgKiBqZmZzMl9saXN0eGF0dHIoZGVudHJ5LCBidWZmZXIsIHNpemUpCisgKiAg IGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGxpc3R4YXR0ciBoYW5kbGVyIG9uIGpmZnMyLgor ICogZG9famZmczJfZ2V0eGF0dHIoaW5vZGUsIHhwcmVmaXgsIHhuYW1lLCBidWZmZXIsIHNp emUpCisgKiAgIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGdldHhhdHRyIGhhbmRsZXIgb24g amZmczIuCisgKiBkb19qZmZzMl9zZXR4YXR0cihpbm9kZSwgeHByZWZpeCwgeG5hbWUsIGJ1 ZmZlciwgc2l6ZSwgZmxhZ3MpCisgKiAgIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHNldHhh dHRyIGhhbmRsZXIgb24gamZmczIuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RydWN0IHhhdHRyX2hhbmRsZXIgKmpmZnMy X3hhdHRyX2hhbmRsZXJzW10gPSB7CisJJmpmZnMyX3VzZXJfeGF0dHJfaGFuZGxlciwKKyNp ZmRlZiBDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFkKKwkmamZmczJfc2VjdXJpdHlfeGF0dHJf aGFuZGxlciwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0wKKwkm amZmczJfYWNsX2FjY2Vzc194YXR0cl9oYW5kbGVyLAorCSZqZmZzMl9hY2xfZGVmYXVsdF94 YXR0cl9oYW5kbGVyLAorI2VuZGlmCisJJmpmZnMyX3RydXN0ZWRfeGF0dHJfaGFuZGxlciwK KwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IHhhdHRyX2hhbmRsZXIgKnhwcmVmaXhfdG9f aGFuZGxlcihpbnQgeHByZWZpeCkgeworCXN0cnVjdCB4YXR0cl9oYW5kbGVyICpyZXQ7CisK Kwlzd2l0Y2ggKHhwcmVmaXgpIHsKKwljYXNlIEpGRlMyX1hQUkVGSVhfVVNFUjoKKwkJcmV0 ID0gJmpmZnMyX3VzZXJfeGF0dHJfaGFuZGxlcjsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklH X0pGRlMyX0ZTX1NFQ1VSSVRZCisJY2FzZSBKRkZTMl9YUFJFRklYX1NFQ1VSSVRZOgorCQly ZXQgPSAmamZmczJfc2VjdXJpdHlfeGF0dHJfaGFuZGxlcjsKKwkJYnJlYWs7CisjZW5kaWYK KyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMCisJY2FzZSBKRkZTMl9YUFJFRklY X0FDTF9BQ0NFU1M6CisJCXJldCA9ICZqZmZzMl9hY2xfYWNjZXNzX3hhdHRyX2hhbmRsZXI7 CisJCWJyZWFrOworCWNhc2UgSkZGUzJfWFBSRUZJWF9BQ0xfREVGQVVMVDoKKwkJcmV0ID0g JmpmZnMyX2FjbF9kZWZhdWx0X3hhdHRyX2hhbmRsZXI7CisJCWJyZWFrOworI2VuZGlmCisJ Y2FzZSBKRkZTMl9YUFJFRklYX1RSVVNURUQ6CisJCXJldCA9ICZqZmZzMl90cnVzdGVkX3hh dHRyX2hhbmRsZXI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IE5VTEw7CisJCWJy ZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzc2l6ZV90IGpmZnMyX2xpc3R4YXR0cihz dHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJ c3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgamZmczJf aW5vZGVfaW5mbyAqZiA9IEpGRlMyX0lOT0RFX0lORk8oaW5vZGUpOworCXN0cnVjdCBqZmZz Ml9zYl9pbmZvICpjID0gSkZGUzJfU0JfSU5GTyhpbm9kZS0+aV9zYik7CisJc3RydWN0IGpm ZnMyX2lub2RlX2NhY2hlICppYyA9IGYtPmlub2NhY2hlOworCXN0cnVjdCBqZmZzMl94YXR0 cl9yZWYgKnJlZjsKKwlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkOworCXN0cnVjdCB4 YXR0cl9oYW5kbGVyICp4aGFuZGxlOworCXNzaXplX3QgbGVuLCByYzsKKwlpbnQgcmV0cnkg PSAwOworCisJcmMgPSBjaGVja194YXR0cl9yZWZfaWxpc3QoYywgaWMpOworCWlmICh1bmxp a2VseShyYykpCisJCXJldHVybiByYzsKKworCWRvd25fcmVhZCgmYy0+eGF0dHJfc2VtKTsK KyByZXRyeToKKwlsZW4gPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVmLCAmaWMtPmls aXN0LCBpbGlzdCkgeworCQlCVUdfT04ocmVmLT5pYyAhPSBpYyk7CisJCXhkID0gcmVmLT54 ZDsKKwkJaWYgKCF4ZC0+eG5hbWUpIHsKKwkJCS8qIHhkYXR1bSBpcyB1bmNoYWNoZWQgKi8K KwkJCWlmICghcmV0cnkpIHsKKwkJCQlyZXRyeSA9IDE7CisJCQkJdXBfcmVhZCgmYy0+eGF0 dHJfc2VtKTsKKwkJCQlkb3duX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCQkJCWdvdG8gcmV0 cnk7CisJCQl9IGVsc2UgeworCQkJCXJjID0gbG9hZF94YXR0cl9kYXR1bShjLCB4ZCk7CisJ CQkJaWYgKHVubGlrZWx5KHJjID4gMCkpIHsKKwkJCQkJZGVsZXRlX3hhdHRyX3JlZihjLCBy ZWYpOworCQkJCQlnb3RvIHJldHJ5OworCQkJCX0gZWxzZSBpZiAodW5saWtlbHkocmMgPCAw KSkKKwkJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwkJeGhhbmRsZSA9IHhwcmVmaXhfdG9f aGFuZGxlcih4ZC0+eHByZWZpeCk7CisJCWlmICgheGhhbmRsZSkKKwkJCWNvbnRpbnVlOwor CQlpZiAoYnVmZmVyKSB7CisJCQlyYyA9IHhoYW5kbGUtPmxpc3QoaW5vZGUsIGJ1ZmZlcits ZW4sIHNpemUtbGVuLCB4ZC0+eG5hbWUsIHhkLT5uYW1lX2xlbik7CisJCX0gZWxzZSB7CisJ CQlyYyA9IHhoYW5kbGUtPmxpc3QoaW5vZGUsIE5VTEwsIDAsIHhkLT54bmFtZSwgeGQtPm5h bWVfbGVuKTsKKwkJfQorCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisJCWxlbiArPSBy YzsKKwl9CisJcmMgPSBsZW47Cisgb3V0OgorCWlmICghcmV0cnkpIHsKKwkJdXBfcmVhZCgm Yy0+eGF0dHJfc2VtKTsKKwl9IGVsc2UgeworCQl1cF93cml0ZSgmYy0+eGF0dHJfc2VtKTsK Kwl9CisJcmV0dXJuIHJjOworfQorCitpbnQgZG9famZmczJfZ2V0eGF0dHIoc3RydWN0IGlu b2RlICppbm9kZSwgaW50IHhwcmVmaXgsIGNvbnN0IGNoYXIgKnhuYW1lLAorCQkgICAgICBj aGFyICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZv ICpmID0gSkZGUzJfSU5PREVfSU5GTyhpbm9kZSk7CisJc3RydWN0IGpmZnMyX3NiX2luZm8g KmMgPSBKRkZTMl9TQl9JTkZPKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgamZmczJfaW5vZGVf Y2FjaGUgKmljID0gZi0+aW5vY2FjaGU7CisJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4 ZDsKKwlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWY7CisJaW50IHJjLCByZXRyeSA9IDA7 CisKKwlyYyA9IGNoZWNrX3hhdHRyX3JlZl9pbGlzdChjLCBpYyk7CisJaWYgKHVubGlrZWx5 KHJjKSkKKwkJcmV0dXJuIHJjOworCisJZG93bl9yZWFkKCZjLT54YXR0cl9zZW0pOworIHJl dHJ5OgorCWxpc3RfZm9yX2VhY2hfZW50cnkocmVmLCAmaWMtPmlsaXN0LCBpbGlzdCkgewor CQlCVUdfT04ocmVmLT5pYyE9aWMpOworCisJCXhkID0gcmVmLT54ZDsKKwkJaWYgKHhkLT54 cHJlZml4ICE9IHhwcmVmaXgpCisJCQljb250aW51ZTsKKwkJaWYgKCF4ZC0+eG5hbWUpIHsK KwkJCS8qIHhkYXR1bSBpcyB1bmNoYWNoZWQgKi8KKwkJCWlmICghcmV0cnkpIHsKKwkJCQly ZXRyeSA9IDE7CisJCQkJdXBfcmVhZCgmYy0+eGF0dHJfc2VtKTsKKwkJCQlkb3duX3dyaXRl KCZjLT54YXR0cl9zZW0pOworCQkJCWdvdG8gcmV0cnk7CisJCQl9IGVsc2UgeworCQkJCXJj ID0gbG9hZF94YXR0cl9kYXR1bShjLCB4ZCk7CisJCQkJaWYgKHVubGlrZWx5KHJjID4gMCkp IHsKKwkJCQkJZGVsZXRlX3hhdHRyX3JlZihjLCByZWYpOworCQkJCQlnb3RvIHJldHJ5Owor CQkJCX0gZWxzZSBpZiAodW5saWtlbHkocmMgPCAwKSkgeworCQkJCQlnb3RvIG91dDsKKwkJ CQl9CisJCQl9CisJCX0KKwkJaWYgKCFzdHJjbXAoeG5hbWUsIHhkLT54bmFtZSkpIHsKKwkJ CXJjID0geGQtPnZhbHVlX2xlbjsKKwkJCWlmIChidWZmZXIpIHsKKwkJCQlpZiAoc2l6ZSA8 IHJjKSB7CisJCQkJCXJjID0gLUVSQU5HRTsKKwkJCQl9IGVsc2UgeworCQkJCQltZW1jcHko YnVmZmVyLCB4ZC0+eHZhbHVlLCByYyk7CisJCQkJfQorCQkJfQorCQkJZ290byBvdXQ7CisJ CX0KKwl9CisJcmMgPSAtRU5PREFUQTsKKyBvdXQ6CisJaWYgKCFyZXRyeSkgeworCQl1cF9y ZWFkKCZjLT54YXR0cl9zZW0pOworCX0gZWxzZSB7CisJCXVwX3dyaXRlKCZjLT54YXR0cl9z ZW0pOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK2ludCBkb19qZmZzMl9zZXR4YXR0cihzdHJ1 Y3QgaW5vZGUgKmlub2RlLCBpbnQgeHByZWZpeCwgY29uc3QgY2hhciAqeG5hbWUsCisJCSAg ICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlz dHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiA9IEpGRlMyX0lOT0RFX0lORk8oaW5vZGUpOwor CXN0cnVjdCBqZmZzMl9zYl9pbmZvICpjID0gSkZGUzJfU0JfSU5GTyhpbm9kZS0+aV9zYik7 CisJc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYyA9IGYtPmlub2NhY2hlOworCXN0cnVj dCBqZmZzMl94YXR0cl9kYXR1bSAqeGQ7CisJc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVm LCAqbmV3cmVmOworCXVpbnQzMl90IHBoeXNfb2ZzLCBsZW5ndGgsIHJlcXVlc3Q7CisJaW50 IHJjOworCisJcmMgPSBjaGVja194YXR0cl9yZWZfaWxpc3QoYywgaWMpOworCWlmICh1bmxp a2VseShyYykpCisJCXJldHVybiByYzsKKworCXJlcXVlc3QgPSBQQUQoc2l6ZW9mKHN0cnVj dCBqZmZzMl9yYXdfeGF0dHIpICsgc3RybGVuKHhuYW1lKSArIDEgKyBzaXplKTsKKwlyYyA9 IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgcmVxdWVzdCwgJnBoeXNfb2ZzLCAmbGVuZ3RoLAor CQkJCSBBTExPQ19OT1JNQUwsIEpGRlMyX1NVTU1BUllfWEFUVFJfU0laRSk7CisJaWYgKHJj KSB7CisJCUpGRlMyX1dBUk5JTkcoImpmZnMyX3Jlc2VydmVfc3BhY2UoKT0lZCwgcmVxdWVz dD0ldVxuIiwgcmMsIHJlcXVlc3QpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogRmluZCBl eGlzdGluZyB4YXR0ciAqLworCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisgcmV0cnk6 CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWYsICZpYy0+aWxpc3QsIGlsaXN0KSB7CisJCXhk ID0gcmVmLT54ZDsKKwkJaWYgKHhkLT54cHJlZml4ICE9IHhwcmVmaXgpCisJCQljb250aW51 ZTsKKwkJaWYgKCF4ZC0+eG5hbWUpIHsKKwkJCXJjID0gbG9hZF94YXR0cl9kYXR1bShjLCB4 ZCk7CisJCQlpZiAodW5saWtlbHkocmMgPiAwKSkgeworCQkJCWRlbGV0ZV94YXR0cl9yZWYo YywgcmVmKTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfSBlbHNlIGlmICh1bmxpa2VseShyYyA8 IDApKQorCQkJCWdvdG8gb3V0OworCQl9CisJCWlmICghc3RyY21wKHhkLT54bmFtZSwgeG5h bWUpKSB7CisJCQlpZiAoZmxhZ3MgJiBYQVRUUl9DUkVBVEUpIHsKKwkJCQlyYyA9IC1FRVhJ U1Q7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlpZiAoIWJ1ZmZlcikgeworCQkJCWRlbGV0 ZV94YXR0cl9yZWYoYywgcmVmKTsKKwkJCQlyYyA9IDA7CisJCQkJZ290byBvdXQ7CisJCQl9 CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCS8qIG5vdCBmb3VuZCAqLworCXJlZiA9IE5V TEw7CisJaWYgKGZsYWdzICYgWEFUVFJfUkVQTEFDRSkgeworCQlyYyA9IC1FTk9EQVRBOwor CQlnb3RvIG91dDsKKwl9CisJaWYgKCFidWZmZXIpIHsKKwkJcmMgPSAtRUlOVkFMOworCQln b3RvIG91dDsKKwl9CisgZm91bmQ6CisJeGQgPSBjcmVhdGVfeGF0dHJfZGF0dW0oYywgeHBy ZWZpeCwgeG5hbWUsIGJ1ZmZlciwgc2l6ZSwgcGh5c19vZnMpOworCWlmIChJU19FUlIoeGQp KSB7CisJCXJjID0gUFRSX0VSUih4ZCk7CisJCWdvdG8gb3V0OworCX0KKwl1cF93cml0ZSgm Yy0+eGF0dHJfc2VtKTsKKwlqZmZzMl9jb21wbGV0ZV9yZXNlcnZhdGlvbihjKTsKKworCS8q IGNyZWF0ZSB4YXR0cl9yZWYgKi8KKwlyZXF1ZXN0ID0gUEFEKHNpemVvZihzdHJ1Y3QgamZm czJfcmF3X3hyZWYpKTsKKwlyYyA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgcmVxdWVzdCwg JnBoeXNfb2ZzLCAmbGVuZ3RoLAorCQkJCSBBTExPQ19OT1JNQUwsIEpGRlMyX1NVTU1BUllf WFJFRl9TSVpFKTsKKwlpZiAocmMpIHsKKwkJSkZGUzJfV0FSTklORygiamZmczJfcmVzZXJ2 ZV9zcGFjZSgpPSVkLCByZXF1ZXN0PSV1XG4iLCByYywgcmVxdWVzdCk7CisJCWRvd25fd3Jp dGUoJmMtPnhhdHRyX3NlbSk7CisJCXhkLT5yZWZjbnQtLTsKKwkJaWYgKCF4ZC0+cmVmY250 KQorCQkJZGVsZXRlX3hhdHRyX2RhdHVtKGMsIHhkKTsKKwkJdXBfd3JpdGUoJmMtPnhhdHRy X3NlbSk7CisJCXJldHVybiByYzsKKwl9CisJZG93bl93cml0ZSgmYy0+eGF0dHJfc2VtKTsK KwluZXdyZWYgPSBjcmVhdGVfeGF0dHJfcmVmKGMsIGljLCB4ZCwgcGh5c19vZnMpOworCWlm IChJU19FUlIobmV3cmVmKSkgeworCQlyYyA9IFBUUl9FUlIobmV3cmVmKTsKKwkJeGQtPnJl ZmNudC0tOworCQlpZiAoIXhkLT5yZWZjbnQpCisJCQlkZWxldGVfeGF0dHJfZGF0dW0oYywg eGQpOworCX0gZWxzZSBpZiAocmVmKSB7CisJCS8qIElmIHJlcGxhY2VkIHhhdHRyX3JlZiBl eGlzdHMgKi8KKwkJZGVsZXRlX3hhdHRyX3JlZihjLCByZWYpOworCX0KKyBvdXQ6CisJdXBf d3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJamZmczJfY29tcGxldGVfcmVzZXJ2YXRpb24oYyk7 CisJcmV0dXJuIHJjOworfQorCisvKiAtLS0tLS0tLSBnYXJiYWdlIGNvbGxlY3RvciBmdW5j dGlvbnMgLS0tLS0tLS0tLS0tLQorICogamZmczJfZ2FyYmFnZV9jb2xsZWN0X3hhdHRyX2Rh dHVtKGMsIHhkKQorICogICBpcyB1c2VkIHRvIG1vdmUgeGRhdHVtIGludG8gbmV3IG5vZGUu CisgKiBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0dHJfcmVmKGMsIHJlZikKKyAqICAgaXMg dXNlZCB0byBtb3ZlIHhyZWYgaW50byBuZXcgbm9kZS4KKyAqIGpmZnMyX2dhcmJhZ2VfY29s bGVjdF94YXR0cihjLCBpYykKKyAqICAgaXMgdXNlZCB0byBjYWxsIGFwcHJvcHJpYXRlIGdh cmJhZ2UgY29sbGVjdG9yIGZ1bmN0aW9uLCBpZiBhcmd1bWVudAorICogICBwb2ludGVyIChp YykgaXMgdGhlIHJlZmVyZW5jZSBvZiB4ZGF0dW0veHJlZi4KKyAqIGpmZnMyX3ZlcmlmeV94 YXR0cihjKQorICogICBpcyB1c2VkIHRvIGNhbGwgZG9fdmVyaWZ5X3hhdHRyX2RhdHVtKCkg YmVmb3JlIGdhcmJhZ2UgY29sbGVjdGluZy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IGpmZnMyX2dhcmJh Z2VfY29sbGVjdF94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKKwkJCQkJ ICAgICBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkKQoreworCS8qIG11c3QgYmUgY2Fs bGVkIHVuZGVyIGRvd25fd3JpdGUoeGF0dHJfc2VtKSwgYW5kIGNhbGxlZCBmcm9tIEdDIHRo cmVhZCAqLworCXVpbnQzMl90IHBoeXNfb2ZzLCB0b3RsZW4sIGxlbmd0aCwgb2xkX29mczsK KwlpbnQgcmM7CisKKwlCVUdfT04oIXhkLT5ub2RlKTsKKworCW9sZF9vZnMgPSByZWZfb2Zm c2V0KHhkLT5ub2RlKTsKKwl0b3RsZW4gPSByZWZfdG90bGVuKGMsIGMtPmdjYmxvY2ssIHhk LT5ub2RlKTsKKwlpZiAodG90bGVuIDwgc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeGF0dHIp KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgheGQtPnhuYW1lKSB7CisJCXJjID0gbG9h ZF94YXR0cl9kYXR1bShjLCB4ZCk7CisJCWlmICh1bmxpa2VseShyYyA+IDApKSB7CisJCQlk ZWxldGVfeGF0dHJfZGF0dW1fbm9kZShjLCB4ZCk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNl IGlmICh1bmxpa2VseShyYyA8IDApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJjID0g amZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhjLCB0b3RsZW4sICZwaHlzX29mcywgJmxlbmd0aCwg SkZGUzJfU1VNTUFSWV9YQVRUUl9TSVpFKTsKKwlpZiAocmMgfHwgbGVuZ3RoIDwgdG90bGVu KSB7CisJCUpGRlMyX1dBUk5JTkcoImpmZnMyX3Jlc2VydmVfc3BhY2UoKT0lZCwgcmVxdWVz dD0ldVxuIiwgcmMsIHRvdGxlbik7CisJCXJldHVybiByYyA/IHJjIDogLUVCQURGRDsKKwl9 CisJcmMgPSBzYXZlX3hhdHRyX2RhdHVtKGMsIHhkLCBwaHlzX29mcyk7CisJaWYgKCFyYykK KwkJZGJnX3hhdHRyKCJ4ZGF0dW0gKHhpZD0ldSwgdmVyc2lvbj0ldSkgR0MnZWQgZnJvbSAl IzA4eCB0byAlMDh4XG4iLAorCQkJICB4ZC0+eGlkLCB4ZC0+dmVyc2lvbiwgb2xkX29mcywg cmVmX29mZnNldCh4ZC0+bm9kZSkpOworCXJldHVybiByYzsKK30KKworCitzdGF0aWMgaW50 IGpmZnMyX2dhcmJhZ2VfY29sbGVjdF94YXR0cl9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8g KmMsCisJCQkJCSAgIHN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZikKK3sKKwkvKiBtdXN0 IGJlIGNhbGxlZCB1bmRlciBkb3duKGFsbG9jX3NlbSkgKi8KKwl1aW50MzJfdCBwaHlzX29m cywgdG90bGVuLCBsZW5ndGgsIG9sZF9vZnM7CisJaW50IHJjOworCisJQlVHX09OKCFyZWYt Pm5vZGUpOworCisJb2xkX29mcyA9IHJlZl9vZmZzZXQocmVmLT5ub2RlKTsKKwl0b3RsZW4g PSByZWZfdG90bGVuKGMsIGMtPmdjYmxvY2ssIHJlZi0+bm9kZSk7CisJaWYgKHRvdGxlbiAh PSBzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd194cmVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJ cmMgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIHRvdGxlbiwgJnBoeXNfb2ZzLCAmbGVu Z3RoLCBKRkZTMl9TVU1NQVJZX1hSRUZfU0laRSk7CisJaWYgKHJjIHx8IGxlbmd0aCA8IHRv dGxlbikgeworCQlKRkZTMl9XQVJOSU5HKCIlczogamZmczJfcmVzZXJ2ZV9zcGFjZSgpID0g JWQsIHJlcXVlc3QgPSAldVxuIiwKKwkJCSAgICAgIF9fRlVOQ1RJT05fXywgcmMsIHRvdGxl bik7CisJCXJldHVybiByYyA/IHJjIDogLUVCQURGRDsKKwl9CisJcmMgPSBzYXZlX3hhdHRy X3JlZihjLCByZWYsIHBoeXNfb2ZzKTsKKwlpZiAoIXJjKQorCQlkYmdfeGF0dHIoInhyZWYg KGlubz0ldSwgeGlkPSV1KSBHQydlZCBmcm9tICUjMDh4IHRvICUwOHhcbiIsCisJCQkgIHJl Zi0+aWMtPmlubywgcmVmLT54ZC0+eGlkLCBvbGRfb2ZzLCByZWZfb2Zmc2V0KHJlZi0+bm9k ZSkpOworCXJldHVybiByYzsKK30KKworaW50IGpmZnMyX2dhcmJhZ2VfY29sbGVjdF94YXR0 cihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICpp YykKK3sKKwlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkOworCXN0cnVjdCBqZmZzMl94 YXR0cl9yZWYgKnJlZjsKKwlpbnQgcmV0OworCisJc3dpdGNoIChpYy0+Y2xhc3MpIHsKKwlj YXNlIFJBV05PREVfQ0xBU1NfWEFUVFJfREFUVU06CisJCXNwaW5fdW5sb2NrKCZjLT5lcmFz ZV9jb21wbGV0aW9uX2xvY2spOworCisJCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJ CXhkID0gKHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqKWljOworCQlyZXQgPSB4ZCA/IGpm ZnMyX2dhcmJhZ2VfY29sbGVjdF94YXR0cl9kYXR1bShjLCB4ZCkgOiAwOworCQl1cF93cml0 ZSgmYy0+eGF0dHJfc2VtKTsKKwkJYnJlYWs7CisJY2FzZSBSQVdOT0RFX0NMQVNTX1hBVFRS X1JFRjoKKwkJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisKKwkJ ZG93bl93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKwkJcmVmID0gKHN0cnVjdCBqZmZzMl94YXR0 cl9yZWYgKilpYzsKKwkJcmV0ID0gcmVmID8gamZmczJfZ2FyYmFnZV9jb2xsZWN0X3hhdHRy X3JlZihjLCByZWYpIDogMDsKKwkJdXBfd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJCWJyZWFr OworCWRlZmF1bHQ6CisJCS8qIFRoaXMgbm9kZSBpcyBub3QgeGF0dHJfZGF0dW0veGF0dHJf cmVmICovCisJCXJldCA9IDE7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitp bnQgamZmczJfdmVyaWZ5X3hhdHRyKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQoreworCXN0 cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQsICpfeGQ7CisJaW50IHJjOworCisJZG93bl93 cml0ZSgmYy0+eGF0dHJfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeGQsIF94 ZCwgJmMtPnhhdHRyX3VuY2hlY2tlZCwgeGluZGV4KSB7CisJCXJjID0gZG9fdmVyaWZ5X3hh dHRyX2RhdHVtKGMsIHhkKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCWxpc3RfZGVsX2luaXQo JnhkLT54aW5kZXgpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAocmMgPiAwKSB7CisJCQls aXN0X2RlbF9pbml0KCZ4ZC0+eGluZGV4KTsKKwkJCWRlbGV0ZV94YXR0cl9kYXR1bV9ub2Rl KGMsIHhkKTsKKwkJfQorCX0KKwl1cF93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKworCXJldHVy biBsaXN0X2VtcHR5KCZjLT54YXR0cl91bmNoZWNrZWQpID8gMSA6IDA7Cit9Ci0tLSBtdGQt Mi42LmdpdC9mcy9qZmZzMi94YXR0ci5oCTE5NzAtMDEtMDEgMDk6MDA6MDAuMDAwMDAwMDAw ICswOTAwCisrKyBtdGQtMi42LjA1MDYvZnMvamZmczIveGF0dHIuaAkyMDA2LTA1LTA2IDEx OjI4OjE5LjAwMDAwMDAwMCArMDkwMApAQCAtMCwwICsxLDEyMCBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKgorICogIEZpbGU6IGZzL2pmZnMyL3hhdHRyLmMKKyAqICBYQVRUUiBzdXBw b3J0IG9uIEpGRlMyIEZpbGVTeXN0ZW0KKyAqCisgKiAgSW1wbGVtZW50ZWQgYnkgS2FpR2Fp IEtvaGVpIDxrYWlnYWlAYWsuanAubmVjLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYg TkVDIENvcnBvcmF0aW9uCisgKgorICogIEZvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24sIHNl ZSB0aGUgZmlsZSAnTElDRU5DRScgaW4gdGhlIGpmZnMyIGRpcmVjdG9yeS4KKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgX0pGRlMyX0ZTX1hBVFRSX0hfCisjZGVmaW5l IF9KRkZTMl9GU19YQVRUUl9IXworCisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKworI2Rl ZmluZSBKRkZTMl9YRkxBR1NfSE9UCSgweDAxKQkvKiBUaGlzIGRhdHVtIGlzIEhPVCAqLwor I2RlZmluZSBKRkZTMl9YRkxBR1NfQklORAkoMHgwMikJLyogVGhpcyBkYXR1bSBpcyBub3Qg cmVjbGFpbWVkICovCisKK3N0cnVjdCBqZmZzMl94YXR0cl9kYXR1bQoreworCXZvaWQgKmFs d2F5c19udWxsOworCXU4IGNsYXNzOworCXU4IGZsYWdzOworCXUxNiB4cHJlZml4OwkJCS8q IHNlZSBKRkZTMl9YQVRUUl9QUkVGSVhfKiAqLworCisJc3RydWN0IGpmZnMyX3Jhd19ub2Rl X3JlZiAqbm9kZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHhpbmRleDsJLyogY2hhaW5lZCBmcm9t IGMtPnhhdHRyaW5kZXhbbl0gKi8KKwl1aW50MzJfdCByZWZjbnQ7CQkvKiAjIG9mIHhhdHRy X3JlZiByZWZlcnMgdGhpcyAqLworCXVpbnQzMl90IHhpZDsKKwl1aW50MzJfdCB2ZXJzaW9u OworCisJdWludDMyX3QgZGF0YV9jcmM7CisJdWludDMyX3QgaGFzaGtleTsKKwljaGFyICp4 bmFtZTsJCS8qIFhBVFRSIG5hbWUgd2l0aG91dCBwcmVmaXggKi8KKwl1aW50MzJfdCBuYW1l X2xlbjsJLyogbGVuZ3RoIG9mIHhuYW1lICovCisJY2hhciAqeHZhbHVlOwkJLyogWEFUVFIg dmFsdWUgKi8KKwl1aW50MzJfdCB2YWx1ZV9sZW47CS8qIGxlbmd0aCBvZiB4dmFsdWUgKi8K K307CisKK3N0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZTsJLyogZm9yd2FyZCByZWZlbmNlICov CitzdHJ1Y3QgamZmczJfeGF0dHJfcmVmCit7CisJdm9pZCAqYWx3YXlzX251bGw7CisJdTgg Y2xhc3M7CisJdTggZmxhZ3M7CQkvKiBDdXJyZW50bHkgdW51c2VkICovCisJdTE2IHVudXNl ZDsKKworCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKm5vZGU7CisJdW5pb24geworCQlz dHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljOwkvKiByZWZlcmVuY2UgdG8gamZmczJfaW5v ZGVfY2FjaGUgKi8KKwkJdWludDMyX3QgaW5vOwkJCS8qIG9ubHkgdXNlZCBpbiBzY2Fubmlu Zy9idWlsZGluZyAgKi8KKwl9OworCXVuaW9uIHsKKwkJc3RydWN0IGpmZnMyX3hhdHRyX2Rh dHVtICp4ZDsJLyogcmVmZXJlbmNlIHRvIGpmZnMyX3hhdHRyX2RhdHVtICovCisJCXVpbnQz Ml90IHhpZDsJCQkvKiBvbmx5IHVzZWQgaW4gc2NjYW5uaW5nL2J1aWxkaW5nICovCisJfTsK KwlzdHJ1Y3QgbGlzdF9oZWFkIGlsaXN0OwkJCS8qIGNoYWluZWQgZnJvbSBpYy0+aWxpc3Qg Ki8KK307CisKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKKworZXh0ZXJuIHZvaWQg amZmczJfaW5pdF94YXR0cl9zdWJzeXN0ZW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOwor ZXh0ZXJuIHZvaWQgamZmczJfYnVpbGRfeGF0dHJfc3Vic3lzdGVtKHN0cnVjdCBqZmZzMl9z Yl9pbmZvICpjKTsKK2V4dGVybiB2b2lkIGpmZnMyX2NsZWFyX3hhdHRyX3N1YnN5c3RlbShz dHJ1Y3QgamZmczJfc2JfaW5mbyAqYyk7CisKK2V4dGVybiBzdHJ1Y3QgamZmczJfeGF0dHJf ZGF0dW0gKmpmZnMyX3NldHVwX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpj LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCB4aWQsIHVpbnQzMl90IHZlcnNpb24pOworCitleHRlcm4gdm9pZCBqZmZzMl94 YXR0cl9kZWxldGVfaW5vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZz Ml9pbm9kZV9jYWNoZSAqaWMpOworZXh0ZXJuIHZvaWQgamZmczJfeGF0dHJfZnJlZV9pbm9k ZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICpp Yyk7CisKK2V4dGVybiBpbnQgamZmczJfZ2FyYmFnZV9jb2xsZWN0X3hhdHRyKHN0cnVjdCBq ZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljKTsKK2V4dGVy biBpbnQgamZmczJfdmVyaWZ5X3hhdHRyKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKTsKKwor ZXh0ZXJuIGludCBkb19qZmZzMl9nZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQg eHByZWZpeCwgY29uc3QgY2hhciAqeG5hbWUsCisJCQkgICAgIGNoYXIgKmJ1ZmZlciwgc2l6 ZV90IHNpemUpOworZXh0ZXJuIGludCBkb19qZmZzMl9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBpbnQgeHByZWZpeCwgY29uc3QgY2hhciAqeG5hbWUsCisJCQkgICAgIGNvbnN0 IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CisKK2V4dGVybiBzdHJ1 Y3QgeGF0dHJfaGFuZGxlciAqamZmczJfeGF0dHJfaGFuZGxlcnNbXTsKK2V4dGVybiBzdHJ1 Y3QgeGF0dHJfaGFuZGxlciBqZmZzMl91c2VyX3hhdHRyX2hhbmRsZXI7CitleHRlcm4gc3Ry dWN0IHhhdHRyX2hhbmRsZXIgamZmczJfdHJ1c3RlZF94YXR0cl9oYW5kbGVyOworCitleHRl cm4gc3NpemVfdCBqZmZzMl9saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIHNp emVfdCk7CisjZGVmaW5lIGpmZnMyX2dldHhhdHRyCQlnZW5lcmljX2dldHhhdHRyCisjZGVm aW5lIGpmZnMyX3NldHhhdHRyCQlnZW5lcmljX3NldHhhdHRyCisjZGVmaW5lIGpmZnMyX3Jl bW92ZXhhdHRyCWdlbmVyaWNfcmVtb3ZleGF0dHIKKworLyotLS0tIEFueSBpbmxpbmUgaW5p dGlhbGl6ZSBmdW5jdGlvbnMgLS0tLSovCisjZGVmaW5lIGluaXRfeGF0dHJfaW5vZGVfY2Fj aGUoeCkgSU5JVF9MSVNUX0hFQUQoJigoeCktPmlsaXN0KSkKKworI2Vsc2UKKworI2RlZmlu ZSBqZmZzMl9pbml0X3hhdHRyX3N1YnN5c3RlbShjKQorI2RlZmluZSBqZmZzMl9idWlsZF94 YXR0cl9zdWJzeXN0ZW0oYykKKyNkZWZpbmUgamZmczJfY2xlYXJfeGF0dHJfc3Vic3lzdGVt KGMpCisKKyNkZWZpbmUgamZmczJfeGF0dHJfZGVsZXRlX2lub2RlKGMsIGljKQorI2RlZmlu ZSBqZmZzMl94YXR0cl9mcmVlX2lub2RlKGMsIGljKQorI2RlZmluZSBqZmZzMl9nYXJiYWdl X2NvbGxlY3RfeGF0dHIoYywgaWMpCSgxKQorI2RlZmluZSBqZmZzMl92ZXJpZnlfeGF0dHIo YykJCQkoMSkKKworI2RlZmluZSBqZmZzMl94YXR0cl9oYW5kbGVycwlOVUxMCisjZGVmaW5l IGpmZnMyX2xpc3R4YXR0cgkJTlVMTAorI2RlZmluZSBqZmZzMl9nZXR4YXR0cgkJTlVMTAor I2RlZmluZSBqZmZzMl9zZXR4YXR0cgkJTlVMTAorI2RlZmluZSBqZmZzMl9yZW1vdmV4YXR0 cglOVUxMCisKKyNkZWZpbmUgaW5pdF94YXR0cl9pbm9kZV9jYWNoZSh4KQorCisjZW5kaWYg LyogQ09ORklHX0pGRlMyX0ZTX1hBVFRSICovCisKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNf U0VDVVJJVFkKK2V4dGVybiBpbnQgamZmczJfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcik7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRs ZXIgamZmczJfc2VjdXJpdHlfeGF0dHJfaGFuZGxlcjsKKyNlbHNlCisjZGVmaW5lIGpmZnMy X2luaXRfc2VjdXJpdHkoaW5vZGUsZGlyKQkoMCkKKyNlbmRpZiAvKiBDT05GSUdfSkZGUzJf RlNfU0VDVVJJVFkgKi8KKworI2VuZGlmIC8qIF9KRkZTMl9GU19YQVRUUl9IXyAqLwotLS0g bXRkLTIuNi5naXQvZnMvamZmczIveGF0dHJfdHJ1c3RlZC5jCTE5NzAtMDEtMDEgMDk6MDA6 MDAuMDAwMDAwMDAwICswOTAwCisrKyBtdGQtMi42LjA1MDYvZnMvamZmczIveGF0dHJfdHJ1 c3RlZC5jCTIwMDYtMDUtMDYgMTE6Mjg6MTkuMDAwMDAwMDAwICswOTAwCkBAIC0wLDAgKzEs NTEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqICBGaWxlOiBmcy9qZmZzMi94YXR0 cl90cnVzdGVkLmMKKyAqICBYQVRUUiBzdXBwb3J0IG9uIEpGRlMyIEZpbGVTeXN0ZW0KKyAq CisgKiAgSW1wbGVtZW50ZWQgYnkgS2FpR2FpIEtvaGVpIDxrYWlnYWlAYWsuanAubmVjLmNv bT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTkVDIENvcnBvcmF0aW9uCisgKgorICogIEZv ciBsaWNlbnNpbmcgaW5mb3JtYXRpb24sIHNlZSB0aGUgZmlsZSAnTElDRU5DRScgaW4gdGhl IGpmZnMyIGRpcmVjdG9yeS4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaW5jbHVkZSA8 bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51 eC9qZmZzMi5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CisjaW5jbHVkZSA8bGludXgv bXRkL210ZC5oPgorI2luY2x1ZGUgIm5vZGVsaXN0LmgiCisKK3N0YXRpYyBpbnQgamZmczJf dHJ1c3RlZF9nZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1l LAorCQkJCSAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoIXN0cmNtcChu YW1lLCAiIikpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBkb19qZmZzMl9nZXR4YXR0 cihpbm9kZSwgSkZGUzJfWFBSRUZJWF9UUlVTVEVELCBuYW1lLCBidWZmZXIsIHNpemUpOwor fQorCitzdGF0aWMgaW50IGpmZnMyX3RydXN0ZWRfc2V0eGF0dHIoc3RydWN0IGlub2RlICpp bm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCSAgc2l6 ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlpZiAoIXN0cmNtcChuYW1lLCAiIikpCisJCXJl dHVybiAtRUlOVkFMOworCXJldHVybiBkb19qZmZzMl9zZXR4YXR0cihpbm9kZSwgSkZGUzJf WFBSRUZJWF9UUlVTVEVELCBuYW1lLCBidWZmZXIsIHNpemUsIGZsYWdzKTsKK30KKworc3Rh dGljIHNpemVfdCBqZmZzMl90cnVzdGVkX2xpc3R4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2Rl LCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkJCSAgICAgIGNvbnN0IGNoYXIg Km5hbWUsIHNpemVfdCBuYW1lX2xlbikKK3sKKwlzaXplX3QgcmV0bGVuID0gWEFUVFJfVFJV U1RFRF9QUkVGSVhfTEVOICsgbmFtZV9sZW4gKyAxOworCisJaWYgKGxpc3QgJiYgcmV0bGVu PD1saXN0X3NpemUpIHsKKwkJc3RyY3B5KGxpc3QsIFhBVFRSX1RSVVNURURfUFJFRklYKTsK KwkJc3RyY3B5KGxpc3QgKyBYQVRUUl9UUlVTVEVEX1BSRUZJWF9MRU4sIG5hbWUpOworCX0K KworCXJldHVybiByZXRsZW47Cit9CisKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIGpmZnMyX3Ry dXN0ZWRfeGF0dHJfaGFuZGxlciA9IHsKKwkucHJlZml4ID0gWEFUVFJfVFJVU1RFRF9QUkVG SVgsCisJLmxpc3QgPSBqZmZzMl90cnVzdGVkX2xpc3R4YXR0ciwKKwkuc2V0ID0gamZmczJf dHJ1c3RlZF9zZXR4YXR0ciwKKwkuZ2V0ID0gamZmczJfdHJ1c3RlZF9nZXR4YXR0cgorfTsK LS0tIG10ZC0yLjYuZ2l0L2ZzL2pmZnMyL3hhdHRyX3VzZXIuYwkxOTcwLTAxLTAxIDA5OjAw OjAwLjAwMDAwMDAwMCArMDkwMAorKysgbXRkLTIuNi4wNTA2L2ZzL2pmZnMyL3hhdHRyX3Vz ZXIuYwkyMDA2LTA1LTA2IDExOjI4OjE5LjAwMDAwMDAwMCArMDkwMApAQCAtMCwwICsxLDUx IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiAgRmlsZTogZnMvamZmczIveGF0dHJf dXNlci5jCisgKiAgWEFUVFIgc3VwcG9ydCBvbiBKRkZTMiBGaWxlU3lzdGVtCisgKgorICog IEltcGxlbWVudGVkIGJ5IEthaUdhaSBLb2hlaSA8a2FpZ2FpQGFrLmpwLm5lYy5jb20+Cisg KiAgQ29weXJpZ2h0IChDKSAyMDA2IE5FQyBDb3Jwb3JhdGlvbgorICoKKyAqICBGb3IgbGlj ZW5zaW5nIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZpbGUgJ0xJQ0VOQ0UnIGluIHRoZSBqZmZz MiBkaXJlY3RvcnkuCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvamZm czIuaD4KKyNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9t dGQuaD4KKyNpbmNsdWRlICJub2RlbGlzdC5oIgorCitzdGF0aWMgaW50IGpmZnMyX3VzZXJf Z2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQor eworCWlmICghc3RyY21wKG5hbWUsICIiKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJu IGRvX2pmZnMyX2dldHhhdHRyKGlub2RlLCBKRkZTMl9YUFJFRklYX1VTRVIsIG5hbWUsIGJ1 ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgamZmczJfdXNlcl9zZXR4YXR0cihzdHJ1 Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIGludCBmbGFn cykKK3sKKwlpZiAoIXN0cmNtcChuYW1lLCAiIikpCisJCXJldHVybiAtRUlOVkFMOworCXJl dHVybiBkb19qZmZzMl9zZXR4YXR0cihpbm9kZSwgSkZGUzJfWFBSRUZJWF9VU0VSLCBuYW1l LCBidWZmZXIsIHNpemUsIGZsYWdzKTsKK30KKworc3RhdGljIHNpemVfdCBqZmZzMl91c2Vy X2xpc3R4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlz dF9zaXplLAorCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK3sK KwlzaXplX3QgcmV0bGVuID0gWEFUVFJfVVNFUl9QUkVGSVhfTEVOICsgbmFtZV9sZW4gKyAx OworCisJaWYgKGxpc3QgJiYgcmV0bGVuIDw9IGxpc3Rfc2l6ZSkgeworCQlzdHJjcHkobGlz dCwgWEFUVFJfVVNFUl9QUkVGSVgpOworCQlzdHJjcHkobGlzdCArIFhBVFRSX1VTRVJfUFJF RklYX0xFTiwgbmFtZSk7CisJfQorCisJcmV0dXJuIHJldGxlbjsKK30KKworc3RydWN0IHhh dHRyX2hhbmRsZXIgamZmczJfdXNlcl94YXR0cl9oYW5kbGVyID0geworCS5wcmVmaXggPSBY QVRUUl9VU0VSX1BSRUZJWCwKKwkubGlzdCA9IGpmZnMyX3VzZXJfbGlzdHhhdHRyLAorCS5z ZXQgPSBqZmZzMl91c2VyX3NldHhhdHRyLAorCS5nZXQgPSBqZmZzMl91c2VyX2dldHhhdHRy Cit9OwotLS0gbXRkLTIuNi5naXQvaW5jbHVkZS9saW51eC9qZmZzMi5oCTIwMDYtMDQtMzAg MTg6MDY6NTQuMDAwMDAwMDAwICswOTAwCisrKyBtdGQtMi42LjA1MDYvaW5jbHVkZS9saW51 eC9qZmZzMi5oCTIwMDYtMDUtMDYgMTE6Mjg6MTkuMDAwMDAwMDAwICswOTAwCkBAIC02NSw2 ICs2NSwxOCBAQAogCiAjZGVmaW5lIEpGRlMyX05PREVUWVBFX1NVTU1BUlkgKEpGRlMyX0ZF QVRVUkVfUldDT01QQVRfREVMRVRFIHwgSkZGUzJfTk9ERV9BQ0NVUkFURSB8IDYpCiAKKyNk ZWZpbmUgSkZGUzJfTk9ERVRZUEVfWEFUVFIgKEpGRlMyX0ZFQVRVUkVfSU5DT01QQVQgfCBK RkZTMl9OT0RFX0FDQ1VSQVRFIHwgOCkKKyNkZWZpbmUgSkZGUzJfTk9ERVRZUEVfWFJFRiAo SkZGUzJfRkVBVFVSRV9JTkNPTVBBVCB8IEpGRlMyX05PREVfQUNDVVJBVEUgfCA5KQorCisv KiBYQVRUUiBSZWxhdGVkICovCisjZGVmaW5lIEpGRlMyX1hQUkVGSVhfVVNFUgkJMQkvKiBm b3IgInVzZXIuIiAqLworI2RlZmluZSBKRkZTMl9YUFJFRklYX1NFQ1VSSVRZCQkyCS8qIGZv ciAic2VjdXJpdHkuIiAqLworI2RlZmluZSBKRkZTMl9YUFJFRklYX0FDTF9BQ0NFU1MJMwkv KiBmb3IgInN5c3RlbS5wb3NpeF9hY2xfYWNjZXNzIiAqLworI2RlZmluZSBKRkZTMl9YUFJF RklYX0FDTF9ERUZBVUxUCTQJLyogZm9yICJzeXN0ZW0ucG9zaXhfYWNsX2RlZmF1bHQiICov CisjZGVmaW5lIEpGRlMyX1hQUkVGSVhfVFJVU1RFRAkJNQkvKiBmb3IgInRydXN0ZWQuKiIg Ki8KKworI2RlZmluZSBKRkZTMl9BQ0xfVkVSU0lPTgkJMHgwMDAxCisKIC8vIE1heWJlIGxh dGVyLi4uCiAvLyNkZWZpbmUgSkZGUzJfTk9ERVRZUEVfQ0hFQ0tQT0lOVCAoSkZGUzJfRkVB VFVSRV9SV0NPTVBBVF9ERUxFVEUgfCBKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgMykKIC8vI2Rl ZmluZSBKRkZTMl9OT0RFVFlQRV9PUFRJT05TIChKRkZTMl9GRUFUVVJFX1JXQ09NUEFUX0NP UFkgfCBKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgNCkKQEAgLTE1MSw2ICsxNjMsMzIgQEAgc3Ry dWN0IGpmZnMyX3Jhd19pbm9kZQogCXVpbnQ4X3QgZGF0YVswXTsKIH0gX19hdHRyaWJ1dGVf XygocGFja2VkKSk7CiAKK3N0cnVjdCBqZmZzMl9yYXdfeGF0dHIgeworCWppbnQxNl90IG1h Z2ljOworCWppbnQxNl90IG5vZGV0eXBlOwkvKiA9IEpGRlMyX05PREVUWVBFX1hBVFRSICov CisJamludDMyX3QgdG90bGVuOworCWppbnQzMl90IGhkcl9jcmM7CisJamludDMyX3QgeGlk OwkJLyogWEFUVFIgaWRlbnRpZmllciBudW1iZXIgKi8KKwlqaW50MzJfdCB2ZXJzaW9uOwor CXVpbnQ4X3QgeHByZWZpeDsKKwl1aW50OF90IG5hbWVfbGVuOworCWppbnQxNl90IHZhbHVl X2xlbjsKKwlqaW50MzJfdCBkYXRhX2NyYzsKKwlqaW50MzJfdCBub2RlX2NyYzsKKwl1aW50 OF90IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgamZm czJfcmF3X3hyZWYKK3sKKwlqaW50MTZfdCBtYWdpYzsKKwlqaW50MTZfdCBub2RldHlwZTsJ LyogPSBKRkZTMl9OT0RFVFlQRV9YUkVGICovCisJamludDMyX3QgdG90bGVuOworCWppbnQz Ml90IGhkcl9jcmM7CisJamludDMyX3QgaW5vOwkJLyogaW5vZGUgbnVtYmVyICovCisJamlu dDMyX3QgeGlkOwkJLyogWEFUVFIgaWRlbnRpZmllciBudW1iZXIgKi8KKwlqaW50MzJfdCBu b2RlX2NyYzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKIHN0cnVjdCBqZmZzMl9y YXdfc3VtbWFyeQogewogCWppbnQxNl90IG1hZ2ljOwpAQCAtMTY5LDYgKzIwNyw4IEBAIHVu aW9uIGpmZnMyX25vZGVfdW5pb24KIHsKIAlzdHJ1Y3QgamZmczJfcmF3X2lub2RlIGk7CiAJ c3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgZDsKKwlzdHJ1Y3QgamZmczJfcmF3X3hhdHRyIHg7 CisJc3RydWN0IGpmZnMyX3Jhd194cmVmIHI7CiAJc3RydWN0IGpmZnMyX3Jhd19zdW1tYXJ5 IHM7CiAJc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSB1OwogfTsK --------------080502050609010207090805 Content-Type: text/plain; name="xattr_on_jffs2.utils.version-5.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="xattr_on_jffs2.utils.version-5.patch" ZGlmZiAtcHJOVTMgbXRkLXV0aWxzLmdpdC9pbmNsdWRlL2xpbnV4L2pmZnMyLmggbXRkLXV0 aWxzLnhhdHRyL2luY2x1ZGUvbGludXgvamZmczIuaAotLS0gbXRkLXV0aWxzLmdpdC9pbmNs dWRlL2xpbnV4L2pmZnMyLmgJMjAwNi0wNS0wNSAyMDoyNDoxOC4wMDAwMDAwMDAgKzA5MDAK KysrIG10ZC11dGlscy54YXR0ci9pbmNsdWRlL2xpbnV4L2pmZnMyLmgJMjAwNi0wNS0wNSAy MTozMzo0OC4wMDAwMDAwMDAgKzA5MDAKQEAgLTY1LDYgKzY1LDE4IEBACiAKICNkZWZpbmUg SkZGUzJfTk9ERVRZUEVfU1VNTUFSWSAoSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9ERUxFVEUg fCBKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgNikKIAorI2RlZmluZSBKRkZTMl9OT0RFVFlQRV9Y QVRUUiAoSkZGUzJfRkVBVFVSRV9JTkNPTVBBVCB8IEpGRlMyX05PREVfQUNDVVJBVEUgfCA4 KQorI2RlZmluZSBKRkZTMl9OT0RFVFlQRV9YUkVGIChKRkZTMl9GRUFUVVJFX0lOQ09NUEFU IHwgSkZGUzJfTk9ERV9BQ0NVUkFURSB8IDkpCisKKy8qIFhBVFRSIFJlbGF0ZWQgKi8KKyNk ZWZpbmUgSkZGUzJfWFBSRUZJWF9VU0VSCQkxCS8qIGZvciAidXNlci4iICovCisjZGVmaW5l IEpGRlMyX1hQUkVGSVhfU0VDVVJJVFkJCTIJLyogZm9yICJzZWN1cml0eS4iICovCisjZGVm aW5lIEpGRlMyX1hQUkVGSVhfQUNMX0FDQ0VTUwkzCS8qIGZvciAic3lzdGVtLnBvc2l4X2Fj bF9hY2Nlc3MiICovCisjZGVmaW5lIEpGRlMyX1hQUkVGSVhfQUNMX0RFRkFVTFQJNAkvKiBm b3IgInN5c3RlbS5wb3NpeF9hY2xfZGVmYXVsdCIgKi8KKyNkZWZpbmUgSkZGUzJfWFBSRUZJ WF9UUlVTVEVECQk1CS8qIGZvciAidHJ1c3RlZC4qIiAqLworCisjZGVmaW5lIEpGRlMyX0FD TF9WRVJTSU9OCQkweDAwMDEKKwogLy8gTWF5YmUgbGF0ZXIuLi4KIC8vI2RlZmluZSBKRkZT Ml9OT0RFVFlQRV9DSEVDS1BPSU5UIChKRkZTMl9GRUFUVVJFX1JXQ09NUEFUX0RFTEVURSB8 IEpGRlMyX05PREVfQUNDVVJBVEUgfCAzKQogLy8jZGVmaW5lIEpGRlMyX05PREVUWVBFX09Q VElPTlMgKEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfQ09QWSB8IEpGRlMyX05PREVfQUNDVVJB VEUgfCA0KQpAQCAtMTUxLDYgKzE2MywzMiBAQCBzdHJ1Y3QgamZmczJfcmF3X2lub2RlCiAJ dWludDhfdCBkYXRhWzBdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorc3RydWN0 IGpmZnMyX3Jhd194YXR0ciB7CisJamludDE2X3QgbWFnaWM7CisJamludDE2X3Qgbm9kZXR5 cGU7CS8qID0gSkZGUzJfTk9ERVRZUEVfWEFUVFIgKi8KKwlqaW50MzJfdCB0b3RsZW47CisJ amludDMyX3QgaGRyX2NyYzsKKwlqaW50MzJfdCB4aWQ7CQkvKiBYQVRUUiBpZGVudGlmaWVy IG51bWJlciAqLworCWppbnQzMl90IHZlcnNpb247CisJdWludDhfdCB4cHJlZml4OworCXVp bnQ4X3QgbmFtZV9sZW47CisJamludDE2X3QgdmFsdWVfbGVuOworCWppbnQzMl90IGRhdGFf Y3JjOworCWppbnQzMl90IG5vZGVfY3JjOworCXVpbnQ4X3QgZGF0YVswXTsKK30gX19hdHRy aWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBqZmZzMl9yYXdfeHJlZgoreworCWppbnQx Nl90IG1hZ2ljOworCWppbnQxNl90IG5vZGV0eXBlOwkvKiA9IEpGRlMyX05PREVUWVBFX1hS RUYgKi8KKwlqaW50MzJfdCB0b3RsZW47CisJamludDMyX3QgaGRyX2NyYzsKKwlqaW50MzJf dCBpbm87CQkvKiBpbm9kZSBudW1iZXIgKi8KKwlqaW50MzJfdCB4aWQ7CQkvKiBYQVRUUiBp ZGVudGlmaWVyIG51bWJlciAqLworCWppbnQzMl90IG5vZGVfY3JjOworfSBfX2F0dHJpYnV0 ZV9fKChwYWNrZWQpKTsKKwogc3RydWN0IGpmZnMyX3Jhd19zdW1tYXJ5CiB7CiAJamludDE2 X3QgbWFnaWM7CkBAIC0xNjksNiArMjA3LDggQEAgdW5pb24gamZmczJfbm9kZV91bmlvbgog ewogCXN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgaTsKIAlzdHJ1Y3QgamZmczJfcmF3X2RpcmVu dCBkOworCXN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgeDsKKwlzdHJ1Y3QgamZmczJfcmF3X3hy ZWYgcjsKIAlzdHJ1Y3QgamZmczJfcmF3X3N1bW1hcnkgczsKIAlzdHJ1Y3QgamZmczJfdW5r bm93bl9ub2RlIHU7CiB9OwpkaWZmIC1wck5VMyBtdGQtdXRpbHMuZ2l0L2luY2x1ZGUvbXRk L2pmZnMyLXVzZXIuaCBtdGQtdXRpbHMueGF0dHIvaW5jbHVkZS9tdGQvamZmczItdXNlci5o Ci0tLSBtdGQtdXRpbHMuZ2l0L2luY2x1ZGUvbXRkL2pmZnMyLXVzZXIuaAkyMDA2LTA1LTA1 IDIwOjI0OjE4LjAwMDAwMDAwMCArMDkwMAorKysgbXRkLXV0aWxzLnhhdHRyL2luY2x1ZGUv bXRkL2pmZnMyLXVzZXIuaAkyMDA2LTA1LTA1IDIzOjI5OjEzLjAwMDAwMDAwMCArMDkwMApA QCAtMzIsNCArMzIsNTEgQEAgZXh0ZXJuIGludCB0YXJnZXRfZW5kaWFuOwogI2RlZmluZSBq ZTMyX3RvX2NwdSh4KSAodDMyKCh4KS52MzIpKQogI2RlZmluZSBqZW1vZGVfdG9fY3B1KHgp ICh0MzIoKHgpLm0pKQogCisjZGVmaW5lIGxlMTZfdG9fY3B1KHgpCShfX0JZVEVfT1JERVI9 PV9fTElUVExFX0VORElBTiA/ICh4KSA6IGJzd2FwXzE2KHgpKQorI2RlZmluZSBsZTMyX3Rv X2NwdSh4KQkoX19CWVRFX09SREVSPT1fX0xJVFRMRV9FTkRJQU4gPyAoeCkgOiBic3dhcF8z Mih4KSkKKyNkZWZpbmUgY3B1X3RvX2xlMTYoeCkJKF9fQllURV9PUkRFUj09X19MSVRUTEVf RU5ESUFOID8gKHgpIDogYnN3YXBfMTYoeCkpCisjZGVmaW5lIGNwdV90b19sZTMyKHgpCShf X0JZVEVfT1JERVI9PV9fTElUVExFX0VORElBTiA/ICh4KSA6IGJzd2FwXzMyKHgpKQorCisv KiBYQVRUUi9QT1NJWC1BQ0wgcmVsYXRlZCBkZWZpbml0aW9uICovCisvKiBOYW1lc3BhY2Vz IGNvcGllZCBmcm9tIHhhdHRyLmggYW5kIHBvc2l4X2FjbF94YXR0ci5oICovCisjZGVmaW5l IFhBVFRSX1VTRVJfUFJFRklYCQkidXNlci4iCisjZGVmaW5lIFhBVFRSX1VTRVJfUFJFRklY X0xFTgkJKHNpemVvZiAoWEFUVFJfVVNFUl9QUkVGSVgpIC0gMSkKKyNkZWZpbmUgWEFUVFJf U0VDVVJJVFlfUFJFRklYCQkic2VjdXJpdHkuIgorI2RlZmluZSBYQVRUUl9TRUNVUklUWV9Q UkVGSVhfTEVOCShzaXplb2YgKFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCkgLSAxKQorI2RlZmlu ZSBQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTCQkic3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3MiCisj ZGVmaW5lIFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1NfTEVOCShzaXplb2YgKFBPU0lYX0FDTF9Y QVRUUl9BQ0NFU1MpIC0gMSkKKyNkZWZpbmUgUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQJCSJz eXN0ZW0ucG9zaXhfYWNsX2RlZmF1bHQiCisjZGVmaW5lIFBPU0lYX0FDTF9YQVRUUl9ERUZB VUxUX0xFTgkoc2l6ZW9mIChQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCkgLSAxKQorI2RlZmlu ZSBYQVRUUl9UUlVTVEVEX1BSRUZJWAkJInRydXN0ZWQuIgorI2RlZmluZSBYQVRUUl9UUlVT VEVEX1BSRUZJWF9MRU4JKHNpemVvZiAoWEFUVFJfVFJVU1RFRF9QUkVGSVgpIC0gMSkKKwor dHlwZWRlZiBzdHJ1Y3QgeworCWppbnQxNl90CWVfdGFnOworCWppbnQxNl90CWVfcGVybTsK KwlqaW50MzJfdAllX2lkOworfSBqZmZzMl9hY2xfZW50cnk7CisKK3R5cGVkZWYgc3RydWN0 IHsKKwlqaW50MTZfdAllX3RhZzsKKwlqaW50MTZfdAllX3Blcm07Cit9IGpmZnMyX2FjbF9l bnRyeV9zaG9ydDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWppbnQzMl90CWFfdmVyc2lvbjsK K30gamZmczJfYWNsX2hlYWRlcjsKKworLyogY29waWVkIGZyb20gaW5jbHVkZS9saW51eC9w b3NpeF9hY2xfeGF0dHIuaCAqLworI2RlZmluZSBQT1NJWF9BQ0xfWEFUVFJfVkVSU0lPTiAw eDAwMDIKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQxNl90CQllX3RhZzsKKwl1aW50MTZf dAkJZV9wZXJtOworCXVpbnQzMl90CQllX2lkOworfSBwb3NpeF9hY2xfeGF0dHJfZW50cnk7 CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50MzJfdAkJYV92ZXJzaW9uOworCXBvc2l4X2Fj bF94YXR0cl9lbnRyeQlhX2VudHJpZXNbMF07Cit9IHBvc2l4X2FjbF94YXR0cl9oZWFkZXI7 CisKICNlbmRpZiAvKiBfX0pGRlMyX1VTRVJfSF9fICovCi0tLSBtdGQtdXRpbHMuZ2l0L21r ZnMuamZmczIuMQkyMDA2LTA1LTA1IDIwOjI0OjE4LjAwMDAwMDAwMCArMDkwMAorKysgbXRk LXV0aWxzLnhhdHRyL21rZnMuamZmczIuMQkyMDA2LTA1LTA1IDIxOjEyOjQ3LjAwMDAwMDAw MCArMDkwMApAQCAtNDksNiArNDksMTUgQEAgbWtmcy5qZmZzMiBcLSBDcmVhdGUgYSBKRkZT MiBmaWxlIHN5c3RlbQogLkIgLVAsLS1zcXVhc2gtcGVybXMKIF0KIFsKKy5CIC0td2l0aC14 YXR0cgorXQorWworLkIgLS13aXRoLXNlbGludXgKK10KK1sKKy5CIC0td2l0aC1wb3NpeC1h Y2wKK10KK1sKIC5CIC1tLC0tY29tcHJlc3Npb24tbW9kZT1NT0RFCiBdCiBbCkBAIC0xNzgs NiArMTg3LDE1IEBAIFNxdWFzaCBvd25lcnMgbWFraW5nIGFsbCBmaWxlcyBiZSBvd25lZCAK IC5CIC1QLCAtLXNxdWFzaC1wZXJtcwogU3F1YXNoIHBlcm1pc3Npb25zLCByZW1vdmluZyB3 cml0ZSBwZXJtaXNzaW9uIGZvciBcJ2dyb3VwXCcgYW5kIFwnb3RoZXJcJy4KIC5UUAorLkIg LS13aXRoLXhhdHRyCitFbmFibGVzIHhhdHRyLCBzdHVmZiBhbGwgeGF0dHIgZW50cmllcyBp bnRvIGpmZnMyIGltYWdlIGZpbGUuCisuVFAKKy5CIC0td2l0aC1zZWxpbnV4CitFbmFibGVz IHhhdHRyLCBzdHVmZiBvbmx5IFNFTGludXggTGFiZWxzIGludG8gamZmczIgaW1hZ2UgZmls ZS4KKy5UUAorLkIgLS13aXRoLXBvc2l4LWFjbAorRW5hYmxlIHhhdHRyLCBzdHVmZiBvbmx5 IFBPU0lYIEFDTCBlbnRyaWVzIGludG8gamZmczIgaW1hZ2UgZmlsZS4KKy5UUAogLkIgLW0s IC0tY29tcHJlc3Npb24tbW9kZT1NT0RFCiBTZXQgdGhlIGRlZmF1bHQgY29tcHJlc3Npb24g bW9kZS4gVGhlIGRlZmF1bHQgbW9kZSBpcyAKIC5CIHByaW9yaXR5IAotLS0gbXRkLXV0aWxz LmdpdC9ta2ZzLmpmZnMyLmMJMjAwNi0wNS0wNSAyMDoyNDoxOC4wMDAwMDAwMDAgKzA5MDAK KysrIG10ZC11dGlscy54YXR0ci9ta2ZzLmpmZnMyLmMJMjAwNi0wNS0wNiAxMDo0NDoyNi4w MDAwMDAwMDAgKzA5MDAKQEAgLTcsNiArNyw3IEBACiAgKiAgICAgICAgICAgMjAwMiBBeGlz IENvbW11bmljYXRpb25zIEFCCiAgKiAgICAgICAgICAgMjAwMSwgMjAwMiBFcmlrIEFuZGVy c2VuIDxhbmRlcnNlbkBjb2RlcG9ldC5vcmc+CiAgKiAgICAgICAgICAgMjAwNCBVbml2ZXJz aXR5IG9mIFN6ZWdlZCwgSHVuZ2FyeQorICogICAgICAgICAgIDIwMDYgS2FpR2FpIEtvaGVp IDxrYWlnYWlAYWsuanAubmVjLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKQEAgLTYzLDYgKzY0LDggQEAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2lu Y2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxzeXMveGF0 dHIuaD4KKyNpbmNsdWRlIDxzeXMvYWNsLmg+CiAjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KICNk ZWZpbmUgY3JjMzIgX19jb21wbGV0ZV9jcmFwCiAjaW5jbHVkZSA8emxpYi5oPgpAQCAtMTAy Miw2ICsxMDI1LDIzMyBAQCBzdGF0aWMgdm9pZCB3cml0ZV9zcGVjaWFsX2ZpbGUoc3RydWN0 IGZpCiAJcGFkd29yZCgpOwogfQogCit0eXBlZGVmIHN0cnVjdCB4YXR0cl9lbnRyeSB7CisJ c3RydWN0IHhhdHRyX2VudHJ5ICpuZXh0OworCXVpbnQzMl90IHhpZDsKKwlpbnQgeHByZWZp eDsKKwljaGFyICp4bmFtZTsKKwljaGFyICp4dmFsdWU7CisJaW50IG5hbWVfbGVuOworCWlu dCB2YWx1ZV9sZW47Cit9IHhhdHRyX2VudHJ5X3Q7CisKKyNkZWZpbmUgWEFUVFJfQlVGRkVS X1NJWkUJCSg2NCAqIDEwMjQpCS8qIDY0S0IgKi8KK3N0YXRpYyB1aW50MzJfdCBlbmFibGVf eGF0dHIgPSAwOworc3RhdGljIHVpbnQzMl90IGhpZ2hlc3RfeGlkID0gMDsKKworc3RhdGlj IHN0cnVjdCB7CisJaW50IHhwcmVmaXg7CisJY2hhciAqc3RyaW5nOworCWludCBsZW5ndGg7 Cit9IHhwcmVmaXhfdGJsW10gPSB7CisJeyBKRkZTMl9YUFJFRklYX1VTRVIsIFhBVFRSX1VT RVJfUFJFRklYLCBYQVRUUl9VU0VSX1BSRUZJWF9MRU4gfSwKKwl7IEpGRlMyX1hQUkVGSVhf U0VDVVJJVFksIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCwgWEFUVFJfU0VDVVJJVFlfUFJFRklY X0xFTiB9LAorCXsgSkZGUzJfWFBSRUZJWF9BQ0xfQUNDRVNTLCBQT1NJWF9BQ0xfWEFUVFJf QUNDRVNTLCBQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTX0xFTiB9LAorCXsgSkZGUzJfWFBSRUZJ WF9BQ0xfREVGQVVMVCwgUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQsIFBPU0lYX0FDTF9YQVRU Ul9ERUZBVUxUX0xFTiB9LAorCXsgSkZGUzJfWFBSRUZJWF9UUlVTVEVELCBYQVRUUl9UUlVT VEVEX1BSRUZJWCwgWEFUVFJfVFJVU1RFRF9QUkVGSVhfTEVOIH0sCisJeyAwLCBOVUxMLCAw IH0KK307CisKK3N0YXRpYyB2b2lkIGZvcm1hbGl6ZV9wb3NpeF9hY2woY2hhciAqeHZhbHVl LCBpbnQgKnZhbHVlX2xlbikKK3sKKwlwb3NpeF9hY2xfeGF0dHJfaGVhZGVyICpwYWNsX2hl YWRlcjsKKwlwb3NpeF9hY2xfeGF0dHJfZW50cnkgKnBlbnQsICpwbGltOworCWpmZnMyX2Fj bF9oZWFkZXIgKmphY2xfaGVhZGVyOworCWpmZnMyX2FjbF9lbnRyeSAqamVudDsKKwlqZmZz Ml9hY2xfZW50cnlfc2hvcnQgKmplbnRfczsKKwljaGFyIGJ1ZmZlcltYQVRUUl9CVUZGRVJf U0laRV07CisJaW50IG9mZnNldCA9IDA7CisKKwlwYWNsX2hlYWRlciA9IChwb3NpeF9hY2xf eGF0dHJfaGVhZGVyICopeHZhbHVlOzsKKwlwZW50ID0gcGFjbF9oZWFkZXItPmFfZW50cmll czsKKwlwbGltID0gKHBvc2l4X2FjbF94YXR0cl9lbnRyeSAqKSh4dmFsdWUgKyAqdmFsdWVf bGVuKTsKKworCWphY2xfaGVhZGVyID0gKGpmZnMyX2FjbF9oZWFkZXIgKilidWZmZXI7CisJ b2Zmc2V0ICs9IHNpemVvZihqZmZzMl9hY2xfaGVhZGVyKTsKKwlqYWNsX2hlYWRlci0+YV92 ZXJzaW9uID0gY3B1X3RvX2plMzIoSkZGUzJfQUNMX1ZFUlNJT04pOworCisJd2hpbGUgKHBl bnQgPCBwbGltKSB7CisJCXN3aXRjaChsZTE2X3RvX2NwdShwZW50LT5lX3RhZykpIHsKKwkJ Y2FzZSBBQ0xfVVNFUl9PQko6CisJCWNhc2UgQUNMX0dST1VQX09CSjoKKwkJY2FzZSBBQ0xf TUFTSzoKKwkJY2FzZSBBQ0xfT1RIRVI6CisJCQlqZW50X3MgPSAoamZmczJfYWNsX2VudHJ5 X3Nob3J0ICopKGJ1ZmZlciArIG9mZnNldCk7CisJCQlvZmZzZXQgKz0gc2l6ZW9mKGpmZnMy X2FjbF9lbnRyeV9zaG9ydCk7CisJCQlqZW50X3MtPmVfdGFnID0gY3B1X3RvX2plMTYobGUx Nl90b19jcHUocGVudC0+ZV90YWcpKTsKKwkJCWplbnRfcy0+ZV9wZXJtID0gY3B1X3RvX2pl MTYobGUxNl90b19jcHUocGVudC0+ZV9wZXJtKSk7CisJCQlicmVhazsKKwkJY2FzZSBBQ0xf VVNFUjoKKwkJY2FzZSBBQ0xfR1JPVVA6CisJCQlqZW50ID0gKGpmZnMyX2FjbF9lbnRyeSAq KShidWZmZXIgKyBvZmZzZXQpOworCQkJb2Zmc2V0ICs9IHNpemVvZihqZmZzMl9hY2xfZW50 cnkpOworCQkJamVudC0+ZV90YWcgPSBjcHVfdG9famUxNihsZTE2X3RvX2NwdShwZW50LT5l X3RhZykpOworCQkJamVudC0+ZV9wZXJtID0gY3B1X3RvX2plMTYobGUxNl90b19jcHUocGVu dC0+ZV9wZXJtKSk7CisJCQlqZW50LT5lX2lkID0gY3B1X3RvX2plMzIobGUzMl90b19jcHUo cGVudC0+ZV9pZCkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGYoIiUwNHgg OiBVbmtub3duIFhBVFRSIGVudHJ5IHRhZy5cbiIsIGxlMTZfdG9fY3B1KHBlbnQtPmVfdGFn KSk7CisJCQlleGl0KDEpOworCQl9CisJCXBlbnQrKzsKKwl9CisJaWYgKG9mZnNldCA+ICp2 YWx1ZV9sZW4pIHsKKwkJcHJpbnRmKCJMZW5ndGggb2YgSkZGUzIgQUNMIGV4cHJlc3Npb24o JXUpIGlzIGxvbmdlciB0aGFuIGdlbmVyYWwgb25lKCV1KS5cbiIsCisJCSAgICAgICBvZmZz ZXQsICp2YWx1ZV9sZW4pOworCQlleGl0KDEpOworCX0KKwltZW1jcHkoeHZhbHVlLCBidWZm ZXIsIG9mZnNldCk7CisJKnZhbHVlX2xlbiA9IG9mZnNldDsKK30KKworc3RhdGljIHhhdHRy X2VudHJ5X3QgKmNyZWF0ZV94YXR0cl9lbnRyeShpbnQgeHByZWZpeCwgY2hhciAqeG5hbWUs IGNoYXIgKnh2YWx1ZSwgaW50IHZhbHVlX2xlbikKK3sKKwl4YXR0cl9lbnRyeV90ICp4ZTsK KwlzdHJ1Y3QgamZmczJfcmF3X3hhdHRyIHJ4OworCWludCBuYW1lX2xlbjsKKworCS8qIGNy ZWF0ZSB4YXR0ciBlbnRyeSAqLworCW5hbWVfbGVuID0gc3RybGVuKHhuYW1lKTsKKwl4ZSA9 IHhjYWxsb2MoMSwgc2l6ZW9mKHhhdHRyX2VudHJ5X3QpICsgbmFtZV9sZW4gKyAxICsgdmFs dWVfbGVuKTsKKwl4ZS0+bmV4dCA9IE5VTEw7CisJeGUtPnhpZCA9ICsraGlnaGVzdF94aWQ7 CisJeGUtPnhwcmVmaXggPSB4cHJlZml4OworCXhlLT54bmFtZSA9ICgoY2hhciAqKXhlKSAr IHNpemVvZih4YXR0cl9lbnRyeV90KTsKKwl4ZS0+eHZhbHVlID0geGUtPnhuYW1lICsgbmFt ZV9sZW4gKyAxOworCXhlLT5uYW1lX2xlbiA9IG5hbWVfbGVuOworCXhlLT52YWx1ZV9sZW4g PSB2YWx1ZV9sZW47CisJc3RyY3B5KHhlLT54bmFtZSwgeG5hbWUpOworCW1lbWNweSh4ZS0+ eHZhbHVlLCB4dmFsdWUsIHZhbHVlX2xlbik7CisKKwkvKiB3cml0ZSB4YXR0ciBub2RlICov CisJbWVtc2V0KCZyeCwgMCwgc2l6ZW9mKHJ4KSk7CisJcngubWFnaWMgPSBjcHVfdG9famUx NihKRkZTMl9NQUdJQ19CSVRNQVNLKTsKKwlyeC5ub2RldHlwZSA9IGNwdV90b19qZTE2KEpG RlMyX05PREVUWVBFX1hBVFRSKTsKKwlyeC50b3RsZW4gPSBjcHVfdG9famUzMihQQUQoc2l6 ZW9mKHJ4KSArIHhlLT5uYW1lX2xlbiArIDEgKyB4ZS0+dmFsdWVfbGVuKSk7CisJcnguaGRy X2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsICZyeCwgc2l6ZW9mKHN0cnVjdCBqZmZzMl91 bmtub3duX25vZGUpIC0gNCkpOworCisJcngueGlkID0gY3B1X3RvX2plMzIoeGUtPnhpZCk7 CisJcngudmVyc2lvbiA9IGNwdV90b19qZTMyKDEpOwkvKiBpbml0aWFsIHZlcnNpb24gKi8K KwlyeC54cHJlZml4ID0geHByZWZpeDsKKwlyeC5uYW1lX2xlbiA9IHhlLT5uYW1lX2xlbjsK KwlyeC52YWx1ZV9sZW4gPSBjcHVfdG9famUxNih4ZS0+dmFsdWVfbGVuKTsKKwlyeC5kYXRh X2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIHhlLT54bmFtZSwgeGUtPm5hbWVfbGVuICsg MSArIHhlLT52YWx1ZV9sZW4pKTsKKwlyeC5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMy KDAsICZyeCwgc2l6ZW9mKHJ4KSAtIDQpKTsKKworCXBhZF9ibG9ja19pZl9sZXNzX3RoYW4o c2l6ZW9mKHJ4KSArIHhlLT5uYW1lX2xlbiArIDEgKyB4ZS0+dmFsdWVfbGVuKTsKKwlmdWxs X3dyaXRlKG91dF9mZCwgJnJ4LCBzaXplb2YocngpKTsKKwlmdWxsX3dyaXRlKG91dF9mZCwg eGUtPnhuYW1lLCB4ZS0+bmFtZV9sZW4gKyAxICsgeGUtPnZhbHVlX2xlbik7CisJcGFkd29y ZCgpOworCisJcmV0dXJuIHhlOworfQorCisjZGVmaW5lIFhBVFRSRU5UUllfSEFTSFNJWkUJ NTcKK3N0YXRpYyB4YXR0cl9lbnRyeV90ICpmaW5kX3hhdHRyX2VudHJ5KGludCB4cHJlZml4 LCBjaGFyICp4bmFtZSwgY2hhciAqeHZhbHVlLCBpbnQgdmFsdWVfbGVuKQoreworCXN0YXRp YyB4YXR0cl9lbnRyeV90ICoqeGVudHJ5X2hhc2ggPSBOVUxMOworCXhhdHRyX2VudHJ5X3Qg KnhlOworCWludCBpbmRleCwgbmFtZV9sZW47CisKKwkvKiBjcmVhdGUgaGFzaCB0YWJsZSAq LworCWlmICgheGVudHJ5X2hhc2gpCisJCXhlbnRyeV9oYXNoID0geGNhbGxvYygxLCBzaXpl b2YoeGUpICogWEFUVFJFTlRSWV9IQVNIU0laRSk7CisKKwlpZiAoeHByZWZpeCA9PSBKRkZT Ml9YUFJFRklYX0FDTF9BQ0NFU1MKKwkgICAgfHwgeHByZWZpeCA9PSBKRkZTMl9YUFJFRklY X0FDTF9ERUZBVUxUKQorCQlmb3JtYWxpemVfcG9zaXhfYWNsKHh2YWx1ZSwgJnZhbHVlX2xl bik7CisKKwluYW1lX2xlbiA9IHN0cmxlbih4bmFtZSk7CisJaW5kZXggPSAoY3JjMzIoMCwg eG5hbWUsIG5hbWVfbGVuKSBeIGNyYzMyKDAsIHh2YWx1ZSwgdmFsdWVfbGVuKSkgJSBYQVRU UkVOVFJZX0hBU0hTSVpFOworCWZvciAoeGUgPSB4ZW50cnlfaGFzaFtpbmRleF07IHhlOyB4 ZSA9IHhlLT5uZXh0KSB7CisJCWlmICh4ZS0+eHByZWZpeCA9PSB4cHJlZml4CisJCSAgICAm JiB4ZS0+dmFsdWVfbGVuID09IHZhbHVlX2xlbgorCQkgICAgJiYgIXN0cmNtcCh4ZS0+eG5h bWUsIHhuYW1lKQorCQkgICAgJiYgIW1lbWNtcCh4ZS0+eHZhbHVlLCB4dmFsdWUsIHZhbHVl X2xlbikpCisJCQlicmVhazsKKwl9CisJaWYgKCF4ZSkgeworCQl4ZSA9IGNyZWF0ZV94YXR0 cl9lbnRyeSh4cHJlZml4LCB4bmFtZSwgeHZhbHVlLCB2YWx1ZV9sZW4pOworCQl4ZS0+bmV4 dCA9IHhlbnRyeV9oYXNoW2luZGV4XTsKKwkJeGVudHJ5X2hhc2hbaW5kZXhdID0geGU7CisJ fQorCXJldHVybiB4ZTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfeGF0dHJfZW50cnkoc3Ry dWN0IGZpbGVzeXN0ZW1fZW50cnkgKmUpCit7CisJc3RydWN0IGpmZnMyX3Jhd194cmVmIHJl ZjsKKwlzdHJ1Y3QgeGF0dHJfZW50cnkgKnhlOworCWNoYXIgeGxpc3RbWEFUVFJfQlVGRkVS X1NJWkVdLCB4dmFsdWVbWEFUVFJfQlVGRkVSX1NJWkVdOworCWNoYXIgKnhuYW1lLCAqcHJl Zml4X3N0cjsKKwlpbnQgaSwgeHByZWZpeCwgcHJlZml4X2xlbjsKKwlpbnQgbGlzdF9zeiwg b2Zmc2V0LCBuYW1lX2xlbiwgdmFsdWVfbGVuOworCisJaWYgKCFlbmFibGVfeGF0dHIpCisJ CXJldHVybjsKKworCWxpc3Rfc3ogPSBsbGlzdHhhdHRyKGUtPmhvc3RuYW1lLCB4bGlzdCwg WEFUVFJfQlVGRkVSX1NJWkUpOworCWlmIChsaXN0X3N6IDwgMCkgeworCQlpZiAodmVyYm9z ZSkKKwkJCXByaW50ZigibGxpc3R4YXR0cignJXMnKSA9ICVkIDogJXNcbiIsCisJCQkgICAg ICAgZS0+aG9zdG5hbWUsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm47CisJ fQorCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBsaXN0X3N6OyBvZmZzZXQgKz0gbmFt ZV9sZW4pIHsKKwkJeG5hbWUgPSB4bGlzdCArIG9mZnNldDsKKwkJbmFtZV9sZW4gPSBzdHJs ZW4oeG5hbWUpICsgMTsKKworCQlmb3IgKGkgPSAwOyAoeHByZWZpeCA9IHhwcmVmaXhfdGJs W2ldLnhwcmVmaXgpOyBpKyspIHsKKwkJCXByZWZpeF9zdHIgPSB4cHJlZml4X3RibFtpXS5z dHJpbmc7CisJCQlwcmVmaXhfbGVuID0geHByZWZpeF90YmxbaV0ubGVuZ3RoOworCQkJaWYg KHByZWZpeF9zdHJbcHJlZml4X2xlbiAtIDFdID09ICcuJykgeworCQkJCWlmICghc3RybmNt cCh4bmFtZSwgcHJlZml4X3N0ciwgcHJlZml4X2xlbiAtIDEpKQorCQkJCQlicmVhazsKKwkJ CX0gZWxzZSB7CisJCQkJaWYgKCFzdHJjbXAoeG5hbWUsIHByZWZpeF9zdHIpKQorCQkJCQli cmVhazsKKwkJCX0KKwkJfQorCQlpZiAoIXhwcmVmaXgpIHsKKwkJCWlmICh2ZXJib3NlKQor CQkJCXByaW50ZigiJXM6IHhhdHRyICclcycgaXMgbm90IHN1cHBvcnRlZC5cbiIsCisJCQkJ ICAgICAgIGUtPmhvc3RuYW1lLCB4bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAo KGVuYWJsZV94YXR0ciAmICgxIDw8IHhwcmVmaXgpKSA9PSAwKQorCQkJY29udGludWU7CisK KwkJdmFsdWVfbGVuID0gbGdldHhhdHRyKGUtPmhvc3RuYW1lLCB4bmFtZSwgeHZhbHVlLCBY QVRUUl9CVUZGRVJfU0laRSk7CisJCWlmICh2YWx1ZV9sZW4gPCAwKSB7CisJCQlpZiAodmVy Ym9zZSkKKwkJCQlwcmludGYoImxnZXR4YXR0cignJXMnLCAnJXMnKSA9ICVkIDogJXNcbiIs CisJCQkJICAgICAgIGUtPmhvc3RuYW1lLCB4bmFtZSwgZXJybm8sIHN0cmVycm9yKGVycm5v KSk7CisJCQljb250aW51ZTsKKwkJfQorCQl4ZSA9IGZpbmRfeGF0dHJfZW50cnkoeHByZWZp eCwgeG5hbWUgKyBwcmVmaXhfbGVuLCB4dmFsdWUsIHZhbHVlX2xlbik7CisJCWlmICgheGUp IHsKKwkJCWlmICh2ZXJib3NlKQorCQkJCXByaW50ZigiJXMgOiB4YXR0ciAnJXMnIHdhcyBp Z25vcmVkLlxuIiwKKwkJCQkgICAgICAgZS0+aG9zdG5hbWUsIHhuYW1lKTsKKwkJCWNvbnRp bnVlOworCQl9CisKKwkJbWVtc2V0KCZyZWYsIDAsIHNpemVvZihyZWYpKTsKKwkJcmVmLm1h Z2ljID0gY3B1X3RvX2plMTYoSkZGUzJfTUFHSUNfQklUTUFTSyk7CisJCXJlZi5ub2RldHlw ZSA9IGNwdV90b19qZTE2KEpGRlMyX05PREVUWVBFX1hSRUYpOworCQlyZWYudG90bGVuID0g Y3B1X3RvX2plMzIoc2l6ZW9mKHJlZikpOworCQlyZWYuaGRyX2NyYyA9IGNwdV90b19qZTMy KGNyYzMyKDAsICZyZWYsIHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSAtIDQp KTsKKwkJcmVmLmlubyA9IGNwdV90b19qZTMyKGUtPnNiLnN0X2lubyk7CisJCXJlZi54aWQg PSBjcHVfdG9famUzMih4ZS0+eGlkKTsKKwkJcmVmLm5vZGVfY3JjID0gY3B1X3RvX2plMzIo Y3JjMzIoMCwgJnJlZiwgc2l6ZW9mKHJlZikgLSA0KSk7CisKKwkJcGFkX2Jsb2NrX2lmX2xl c3NfdGhhbihzaXplb2YocmVmKSk7CisJCWZ1bGxfd3JpdGUob3V0X2ZkLCAmcmVmLCBzaXpl b2YocmVmKSk7CisJCXBhZHdvcmQoKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHJlY3Vyc2l2 ZV9wb3B1bGF0ZV9kaXJlY3Rvcnkoc3RydWN0IGZpbGVzeXN0ZW1fZW50cnkgKmRpcikKIHsK IAlzdHJ1Y3QgZmlsZXN5c3RlbV9lbnRyeSAqZTsKQEAgLTEwMjksNiArMTI1OSw4IEBAIHN0 YXRpYyB2b2lkIHJlY3Vyc2l2ZV9wb3B1bGF0ZV9kaXJlY3RvcnkKIAlpZiAodmVyYm9zZSkg ewogCQlwcmludGYoIiVzXG4iLCBkaXItPmZ1bGxuYW1lKTsKIAl9CisJd3JpdGVfeGF0dHJf ZW50cnkoZGlyKTsJCS8qIGZvciAnLycgKi8KKwogCWUgPSBkaXItPmZpbGVzOwogCXdoaWxl IChlKSB7CiAKQEAgLTEwNDEsNiArMTI3Myw3IEBAIHN0YXRpYyB2b2lkIHJlY3Vyc2l2ZV9w b3B1bGF0ZV9kaXJlY3RvcnkKIAkJCQkJCQllLT5uYW1lKTsKIAkJCQl9CiAJCQkJd3JpdGVf cGlwZShlKTsKKwkJCQl3cml0ZV94YXR0cl9lbnRyeShlKTsKIAkJCQlicmVhazsKIAkJCWNh c2UgU19JRlNPQ0s6CiAJCQkJaWYgKHZlcmJvc2UpIHsKQEAgLTEwNDksNiArMTI4Miw3IEBA IHN0YXRpYyB2b2lkIHJlY3Vyc2l2ZV9wb3B1bGF0ZV9kaXJlY3RvcnkKIAkJCQkJCQkoaW50 KSBlLT5zYi5zdF91aWQsIChpbnQpIGUtPnNiLnN0X2dpZCwgZS0+bmFtZSk7CiAJCQkJfQog CQkJCXdyaXRlX3BpcGUoZSk7CisJCQkJd3JpdGVfeGF0dHJfZW50cnkoZSk7CiAJCQkJYnJl YWs7CiAJCQljYXNlIFNfSUZJRk86CiAJCQkJaWYgKHZlcmJvc2UpIHsKQEAgLTEwNTcsNiAr MTI5MSw3IEBAIHN0YXRpYyB2b2lkIHJlY3Vyc2l2ZV9wb3B1bGF0ZV9kaXJlY3RvcnkKIAkJ CQkJCQkoaW50KSBlLT5zYi5zdF91aWQsIChpbnQpIGUtPnNiLnN0X2dpZCwgZS0+bmFtZSk7 CiAJCQkJfQogCQkJCXdyaXRlX3BpcGUoZSk7CisJCQkJd3JpdGVfeGF0dHJfZW50cnkoZSk7 CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNfSUZDSFI6CiAJCQkJaWYgKHZlcmJvc2UpIHsKQEAg LTEwNjYsNiArMTMwMSw3IEBAIHN0YXRpYyB2b2lkIHJlY3Vyc2l2ZV9wb3B1bGF0ZV9kaXJl Y3RvcnkKIAkJCQkJCQkoaW50KSBlLT5zYi5zdF9naWQsIGUtPm5hbWUpOwogCQkJCX0KIAkJ CQl3cml0ZV9zcGVjaWFsX2ZpbGUoZSk7CisJCQkJd3JpdGVfeGF0dHJfZW50cnkoZSk7CiAJ CQkJYnJlYWs7CiAJCQljYXNlIFNfSUZCTEs6CiAJCQkJaWYgKHZlcmJvc2UpIHsKQEAgLTEw NzUsNiArMTMxMSw3IEBAIHN0YXRpYyB2b2lkIHJlY3Vyc2l2ZV9wb3B1bGF0ZV9kaXJlY3Rv cnkKIAkJCQkJCQkoaW50KSBlLT5zYi5zdF9naWQsIGUtPm5hbWUpOwogCQkJCX0KIAkJCQl3 cml0ZV9zcGVjaWFsX2ZpbGUoZSk7CisJCQkJd3JpdGVfeGF0dHJfZW50cnkoZSk7CiAJCQkJ YnJlYWs7CiAJCQljYXNlIFNfSUZMTks6CiAJCQkJaWYgKHZlcmJvc2UpIHsKQEAgLTEwODQs NiArMTMyMSw3IEBAIHN0YXRpYyB2b2lkIHJlY3Vyc2l2ZV9wb3B1bGF0ZV9kaXJlY3RvcnkK IAkJCQkJCQllLT5saW5rKTsKIAkJCQl9CiAJCQkJd3JpdGVfc3ltbGluayhlKTsKKwkJCQl3 cml0ZV94YXR0cl9lbnRyeShlKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgU19JRlJFRzoKIAkJ CQlpZiAodmVyYm9zZSkgewpAQCAtMTA5Miw2ICsxMzMwLDcgQEAgc3RhdGljIHZvaWQgcmVj dXJzaXZlX3BvcHVsYXRlX2RpcmVjdG9yeQogCQkJCQkJCShpbnQpIGUtPnNiLnN0X3VpZCwg KGludCkgZS0+c2Iuc3RfZ2lkLCBlLT5uYW1lKTsKIAkJCQl9CiAJCQkJd3JpdGVfcmVndWxh cl9maWxlKGUpOworCQkJCXdyaXRlX3hhdHRyX2VudHJ5KGUpOwogCQkJCWJyZWFrOwogCQkJ ZGVmYXVsdDoKIAkJCQllcnJvcl9tc2coIlVua25vd24gbW9kZSAlbyBmb3IgJXMiLCBlLT5z Yi5zdF9tb2RlLApAQCAtMTE2OSw2ICsxNDA4LDkgQEAgc3RhdGljIHN0cnVjdCBvcHRpb24g bG9uZ19vcHRpb25zW10gPSB7CiAJeyJ0ZXN0LWNvbXByZXNzaW9uIiwgMCwgTlVMTCwgJ3Qn fSwKIAl7ImNvbXByZXNzb3ItcHJpb3JpdHkiLCAxLCBOVUxMLCAneSd9LAogCXsiaW5jcmVt ZW50YWwiLCAxLCBOVUxMLCAnaSd9LAorCXsid2l0aC14YXR0ciIsIDAsIE5VTEwsIDEwMDAg fSwKKwl7IndpdGgtc2VsaW51eCIsIDAsIE5VTEwsIDEwMDEgfSwKKwl7IndpdGgtcG9zaXgt YWNsIiwgMCwgTlVMTCwgMTAwMiB9LAogCXtOVUxMLCAwLCBOVUxMLCAwfQogfTsKIApAQCAt MTIwMSw2ICsxNDQzLDkgQEAgc3RhdGljIGNoYXIgKmhlbHB0ZXh0ID0KIAkiICAtcSwgLS1z cXVhc2ggICAgICAgICAgICBTcXVhc2ggcGVybWlzc2lvbnMgYW5kIG93bmVycyBtYWtpbmcg YWxsIGZpbGVzIGJlIG93bmVkIGJ5IHJvb3RcbiIKIAkiICAtVSwgLS1zcXVhc2gtdWlkcyAg ICAgICBTcXVhc2ggb3duZXJzIG1ha2luZyBhbGwgZmlsZXMgYmUgb3duZWQgYnkgcm9vdFxu IgogCSIgIC1QLCAtLXNxdWFzaC1wZXJtcyAgICAgIFNxdWFzaCBwZXJtaXNzaW9ucyBvbiBh bGwgZmlsZXNcbiIKKwkiICAgICAgLS13aXRoLXhhdHRyICAgICAgICBzdHVmZiBhbGwgeGF0 dHIgZW50cmllcyBpbnRvIGltYWdlXG4iCisJIiAgICAgIC0td2l0aC1zZWxpbnV4ICAgICAg c3R1ZmYgb25seSBTRUxpbnV4IExhYmVscyBpbnRvIGpmZnMyIGltYWdlXG4iCisJIiAgICAg IC0td2l0aC1wb3NpeC1hY2wgICAgc3R1ZmYgb25seSBQT1NJWCBBQ0wgZW50cmllcyBpbnRv IGpmZnMyIGltYWdlXG4iCiAJIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgRGlzcGxheSB0 aGlzIGhlbHAgdGV4dFxuIgogCSIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgIFZlcmJvc2Ug b3BlcmF0aW9uXG4iCiAJIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgRGlzcGxheSB2ZXJz aW9uIGluZm9ybWF0aW9uXG4iCkBAIC0xNTE5LDYgKzE3NjQsMjAgQEAgaW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQlwZXJyb3JfbXNnX2FuZF9kaWUoImNhbm5vdCBv cGVuIChpbmNyZW1lbnRhbCkgZmlsZSIpOwogCQkJCX0KIAkJCQlicmVhazsKKwkJCWNhc2Ug MTAwMDoJLyogLS13aXRoLXhhdHRyICAqLworCQkJCWVuYWJsZV94YXR0ciB8PSAoMSA8PCBK RkZTMl9YUFJFRklYX1VTRVIpCisJCQkJCQl8ICgxIDw8IEpGRlMyX1hQUkVGSVhfU0VDVVJJ VFkpCisJCQkJCQl8ICgxIDw8IEpGRlMyX1hQUkVGSVhfQUNMX0FDQ0VTUykKKwkJCQkJCXwg KDEgPDwgSkZGUzJfWFBSRUZJWF9BQ0xfREVGQVVMVCkKKwkJCQkJCXwgKDEgPDwgSkZGUzJf WFBSRUZJWF9UUlVTVEVEKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTAwMToJLyogIC0td2l0 aC1zZWxpbnV4ICAqLworCQkJCWVuYWJsZV94YXR0ciB8PSAoMSA8PCBKRkZTMl9YUFJFRklY X1NFQ1VSSVRZKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTAwMjoJLyogIC0td2l0aC1wb3Np eC1hY2wgICovCisJCQkJZW5hYmxlX3hhdHRyIHw9ICgxIDw8IEpGRlMyX1hQUkVGSVhfQUNM X0FDQ0VTUykKKwkJCQkJCXwgKDEgPDwgSkZGUzJfWFBSRUZJWF9BQ0xfREVGQVVMVCk7CisJ CQkJYnJlYWs7CiAJCX0KIAl9CiAJaWYgKG91dF9mZCA9PSAtMSkgewotLS0gbXRkLXV0aWxz LmdpdC9zdW1tYXJ5LmgJMjAwNi0wNS0wNSAyMDoyNDoxOC4wMDAwMDAwMDAgKzA5MDAKKysr IG10ZC11dGlscy54YXR0ci9zdW1tYXJ5LmgJMjAwNi0wNS0wNiAxMDoxNTowMy4wMDAwMDAw MDAgKzA5MDAKQEAgLTQ1LDYgKzQ1LDggQEAKICNkZWZpbmUgSkZGUzJfU1VNTUFSWV9OT1NV TV9TSVpFIDB4ZmZmZmZmZmYKICNkZWZpbmUgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFIChz aXplb2Yoc3RydWN0IGpmZnMyX3N1bV9pbm9kZV9mbGFzaCkpCiAjZGVmaW5lIEpGRlMyX1NV TU1BUllfRElSRU5UX1NJWkUoeCkgKHNpemVvZihzdHJ1Y3QgamZmczJfc3VtX2RpcmVudF9m bGFzaCkgKyAoeCkpCisjZGVmaW5lIEpGRlMyX1NVTU1BUllfWEFUVFJfU0laRSAoc2l6ZW9m KHN0cnVjdCBqZmZzMl9zdW1feGF0dHJfZmxhc2gpKQorI2RlZmluZSBKRkZTMl9TVU1NQVJZ X1hSRUZfU0laRSAoc2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1feHJlZl9mbGFzaCkpCiAKIC8q IFN1bW1hcnkgc3RydWN0dXJlcyB1c2VkIG9uIGZsYXNoICovCiAKQEAgLTc1LDExICs3Nywy OCBAQCBzdHJ1Y3QgamZmczJfc3VtX2RpcmVudF9mbGFzaAogCXVpbnQ4X3QgbmFtZVswXTsJ LyogZGlyZW50IG5hbWUgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKK3N0cnVj dCBqZmZzMl9zdW1feGF0dHJfZmxhc2gKK3sKKwlqaW50MTZfdCBub2RldHlwZTsJLyogPT0g SkZGUzJfTk9ERVRZUEVfWEFUUiAqLworCWppbnQzMl90IHhpZDsJCS8qIHhhdHRyIGlkZW50 aWZpZXIgKi8KKwlqaW50MzJfdCB2ZXJzaW9uOwkvKiB2ZXJzaW9uIG51bWJlciAqLworCWpp bnQzMl90IG9mZnNldDsJLyogb2Zmc2V0IG9uIGplYiAqLworCWppbnQzMl90IHRvdGxlbjsJ Lyogbm9kZSBsZW5ndGggKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVj dCBqZmZzMl9zdW1feHJlZl9mbGFzaAoreworCWppbnQxNl90IG5vZGV0eXBlOwkvKiA9PSBK RkZTMl9OT0RFVFlQRV9YUkVGICovCisJamludDMyX3Qgb2Zmc2V0OwkvKiBvZmZzZXQgb24g amViICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiB1bmlvbiBqZmZzMl9zdW1f Zmxhc2gKIHsKIAlzdHJ1Y3QgamZmczJfc3VtX3Vua25vd25fZmxhc2ggdTsKIAlzdHJ1Y3Qg amZmczJfc3VtX2lub2RlX2ZsYXNoIGk7CiAJc3RydWN0IGpmZnMyX3N1bV9kaXJlbnRfZmxh c2ggZDsKKwlzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX2ZsYXNoIHg7CisJc3RydWN0IGpmZnMy X3N1bV94cmVmX2ZsYXNoIHI7CiB9OwogCiAvKiBTdW1tYXJ5IHN0cnVjdHVyZXMgdXNlZCBp biB0aGUgbWVtb3J5ICovCkBAIC0xMTQsMTEgKzEzMywzMCBAQCBzdHJ1Y3QgamZmczJfc3Vt X2RpcmVudF9tZW0KIAl1aW50OF90IG5hbWVbMF07CS8qIGRpcmVudCBuYW1lICovCiB9IF9f YXR0cmlidXRlX18oKHBhY2tlZCkpOwogCitzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX21lbQor eworCXVuaW9uIGpmZnMyX3N1bV9tZW0gKm5leHQ7CisJamludDE2X3Qgbm9kZXR5cGU7CisJ amludDMyX3QgeGlkOworCWppbnQzMl90IHZlcnNpb247CisJamludDMyX3Qgb2Zmc2V0Owor CWppbnQzMl90IHRvdGxlbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVj dCBqZmZzMl9zdW1feHJlZl9tZW0KK3sKKwl1bmlvbiBqZmZzMl9zdW1fbWVtICpuZXh0Owor CWppbnQxNl90IG5vZGV0eXBlOworCWppbnQzMl90IG9mZnNldDsKK30gX19hdHRyaWJ1dGVf XygocGFja2VkKSk7CisKIHVuaW9uIGpmZnMyX3N1bV9tZW0KIHsKIAlzdHJ1Y3QgamZmczJf c3VtX3Vua25vd25fbWVtIHU7CiAJc3RydWN0IGpmZnMyX3N1bV9pbm9kZV9tZW0gaTsKIAlz dHJ1Y3QgamZmczJfc3VtX2RpcmVudF9tZW0gZDsKKwlzdHJ1Y3QgamZmczJfc3VtX3hhdHRy X21lbSB4OworCXN0cnVjdCBqZmZzMl9zdW1feHJlZl9tZW0gcjsKIH07CiAKIHN0cnVjdCBq ZmZzMl9zdW1tYXJ5Ci0tLSBtdGQtdXRpbHMuZ2l0L3N1bXRvb2wuYwkyMDA2LTA1LTA1IDIw OjI0OjE4LjAwMDAwMDAwMCArMDkwMAorKysgbXRkLXV0aWxzLnhhdHRyL3N1bXRvb2wuYwky MDA2LTA1LTA2IDEwOjI3OjUwLjAwMDAwMDAwMCArMDkwMApAQCAtNCw2ICs0LDcgQEAKICAq ICBDb3B5cmlnaHQgKEMpIDIwMDQgWm9sdGFuIFNvZ29yIDx3ZXRoQGluZi51LXN6ZWdlZC5o dT4sCiAgKiAgICAgICAgICAgICAgICAgICAgIEZlcmVuYyBIYXZhc2kgPGhhdmFzaUBpbmYu dS1zemVnZWQuaHU+CiAgKiAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdHkgb2YgU3pl Z2VkLCBIdW5nYXJ5CisgKiAgICAgICAgICAgICAgICAyMDA2IEthaUdhaSBLb2hlaSA8a2Fp Z2FpQGFrLmpwLm5lYy5jb20+CiAgKgogICogJElkOiBzdW10b29sLmMsdiAxLjkgMjAwNi8w MS8yMyAwODoyMjo0NSBoYXZhc2kgRXhwICQKICAqCkBAIC00NDIsNiArNDQzLDI5IEBAIHZv aWQgZHVtcF9zdW1fcmVjb3JkcygpCiAJCQkJYnJlYWs7CiAJCQl9CiAKKwkJCWNhc2UgSkZG UzJfTk9ERVRZUEVfWEFUVFI6IHsKKwkJCQlzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX2ZsYXNo ICpzeGF0dHJfcHRyID0gd3BhZ2U7CisKKwkJCQlzeGF0dHJfcHRyLT5ub2RldHlwZSA9IHN1 bV9jb2xsZWN0ZWQtPnN1bV9saXN0X2hlYWQtPngubm9kZXR5cGU7CisJCQkJc3hhdHRyX3B0 ci0+eGlkID0gc3VtX2NvbGxlY3RlZC0+c3VtX2xpc3RfaGVhZC0+eC54aWQ7CisJCQkJc3hh dHRyX3B0ci0+dmVyc2lvbiA9IHN1bV9jb2xsZWN0ZWQtPnN1bV9saXN0X2hlYWQtPngudmVy c2lvbjsKKwkJCQlzeGF0dHJfcHRyLT5vZmZzZXQgPSBzdW1fY29sbGVjdGVkLT5zdW1fbGlz dF9oZWFkLT54Lm9mZnNldDsKKwkJCQlzeGF0dHJfcHRyLT50b3RsZW4gPSBzdW1fY29sbGVj dGVkLT5zdW1fbGlzdF9oZWFkLT54LnRvdGxlbjsKKworCQkJCXdwYWdlICs9IEpGRlMyX1NV TU1BUllfWEFUVFJfU0laRTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJY2FzZSBKRkZTMl9O T0RFVFlQRV9YUkVGOiB7CisJCQkJc3RydWN0IGpmZnMyX3N1bV94cmVmX2ZsYXNoICpzeHJl Zl9wdHIgPSB3cGFnZTsKKworCQkJCXN4cmVmX3B0ci0+bm9kZXR5cGUgPSBzdW1fY29sbGVj dGVkLT5zdW1fbGlzdF9oZWFkLT5yLm5vZGV0eXBlOworCQkJCXN4cmVmX3B0ci0+b2Zmc2V0 ID0gc3VtX2NvbGxlY3RlZC0+c3VtX2xpc3RfaGVhZC0+ci5vZmZzZXQ7CisKKwkJCQl3cGFn ZSArPSBKRkZTMl9TVU1NQVJZX1hSRUZfU0laRTsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJ ZGVmYXVsdCA6IHsKIAkJCQlwcmludGYoIlVua25vd24gbm9kZSB0eXBlIVxuIik7CiAJCQl9 CkBAIC01NzcsNiArNjAxLDE2IEBAIGludCBhZGRfc3VtX21lbSh1bmlvbiBqZmZzMl9zdW1f bWVtICppdGUKIAkJCXN1bV9jb2xsZWN0ZWQtPnN1bV9udW0rKzsKIAkJCWJyZWFrOwogCisJ CWNhc2UgSkZGUzJfTk9ERVRZUEVfWEFUVFI6CisJCQlzdW1fY29sbGVjdGVkLT5zdW1fc2l6 ZSArPSBKRkZTMl9TVU1NQVJZX1hBVFRSX1NJWkU7CisJCQlzdW1fY29sbGVjdGVkLT5zdW1f bnVtKys7CisJCQlicmVhazsKKworCQljYXNlIEpGRlMyX05PREVUWVBFX1hSRUY6CisJCQlz dW1fY29sbGVjdGVkLT5zdW1fc2l6ZSArPSBKRkZTMl9TVU1NQVJZX1hSRUZfU0laRTsKKwkJ CXN1bV9jb2xsZWN0ZWQtPnN1bV9udW0rKzsKKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJ CQllcnJvcl9tc2dfYW5kX2RpZSgiX19qZmZzMl9hZGRfc3VtX21lbSgpOiBVTktOT1dOIG5v ZGUgdHlwZSAlZFxuIiwgamUxNl90b19jcHUoaXRlbS0+dS5ub2RldHlwZSkpOwogCX0KQEAg LTYyMiw2ICs2NTYsMzcgQEAgdm9pZCBhZGRfc3VtX2RpcmVudF9tZW0odW5pb24gamZmczJf bm9kZQogCWFkZF9zdW1fbWVtKCh1bmlvbiBqZmZzMl9zdW1fbWVtICopIHRlbXApOwogfQog Cit2b2lkIGFkZF9zdW1feGF0dHJfbWVtKHVuaW9uIGpmZnMyX25vZGVfdW5pb24gKm5vZGUp Cit7CisJc3RydWN0IGpmZnMyX3N1bV94YXR0cl9tZW0gKnRlbXAgPSAoc3RydWN0IGpmZnMy X3N1bV94YXR0cl9tZW0gKikKKwkJCW1hbGxvYyhzaXplb2Yoc3RydWN0IGpmZnMyX3N1bV94 YXR0cl9tZW0pKTsKKwlpZiAoIXRlbXApCisJCWVycm9yX21zZ19hbmRfZGllKCJDYW4ndCBh bGxvY2F0ZSBtZW1vcnkgZm9yIHN1bW1hcnkgaW5mb3JtYXRpb24hXG4iKTsKKworCXRlbXAt Pm5vZGV0eXBlID0gbm9kZS0+eC5ub2RldHlwZTsKKwl0ZW1wLT54aWQgPSBub2RlLT54Lnhp ZDsKKwl0ZW1wLT52ZXJzaW9uID0gbm9kZS0+eC52ZXJzaW9uOworCXRlbXAtPm9mZnNldCA9 IGNwdV90b19qZTMyKGRhdGFfb2ZzKTsKKwl0ZW1wLT50b3RsZW4gPSBub2RlLT54LnRvdGxl bjsKKwl0ZW1wLT5uZXh0ID0gTlVMTDsKKworCWFkZF9zdW1fbWVtKCh1bmlvbiBqZmZzMl9z dW1fbWVtICopIHRlbXApOworfQorCit2b2lkIGFkZF9zdW1feHJlZl9tZW0odW5pb24gamZm czJfbm9kZV91bmlvbiAqbm9kZSkKK3sKKwlzdHJ1Y3QgamZmczJfc3VtX3hyZWZfbWVtICp0 ZW1wID0gKHN0cnVjdCBqZmZzMl9zdW1feHJlZl9tZW0gKikKKwkJCW1hbGxvYyhzaXplb2Yo c3RydWN0IGpmZnMyX3N1bV94cmVmX21lbSkpOworCWlmICghdGVtcCkKKwkJZXJyb3JfbXNn X2FuZF9kaWUoIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3Igc3VtbWFyeSBpbmZvcm1hdGlv biFcbiIpOworCisJdGVtcC0+bm9kZXR5cGUgPSBub2RlLT5yLm5vZGV0eXBlOworCXRlbXAt Pm9mZnNldCA9IGNwdV90b19qZTMyKGRhdGFfb2ZzKTsKKwl0ZW1wLT5uZXh0ID0gTlVMTDsK KworCWFkZF9zdW1fbWVtKCh1bmlvbiBqZmZzMl9zdW1fbWVtICopIHRlbXApOworfQorCiB2 b2lkIHdyaXRlX2RpcmVudF90b19idWZmKHVuaW9uIGpmZnMyX25vZGVfdW5pb24gKm5vZGUp CiB7CiAJcGFkX2Jsb2NrX2lmX2xlc3NfdGhhbihqZTMyX3RvX2NwdSAobm9kZS0+ZC50b3Rs ZW4pLEpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUobm9kZS0+ZC5uc2l6ZSkpOwpAQCAtNjM5 LDExICs3MDQsMjcgQEAgdm9pZCB3cml0ZV9pbm9kZV90b19idWZmKHVuaW9uIGpmZnMyX25v ZAogCXBhZHdvcmQoKTsKIH0KIAordm9pZCB3cml0ZV94YXR0cl90b19idWZmKHVuaW9uIGpm ZnMyX25vZGVfdW5pb24gKm5vZGUpCit7CisJcGFkX2Jsb2NrX2lmX2xlc3NfdGhhbihqZTMy X3RvX2NwdShub2RlLT54LnRvdGxlbiksIEpGRlMyX1NVTU1BUllfWEFUVFJfU0laRSk7CisJ YWRkX3N1bV94YXR0cl9tZW0obm9kZSk7CS8qIEFkZCB4ZGF0dW0gc3VtbWFyeSBtZW0gdG8g c3VtbWFyeSBsaXN0ICovCisJZnVsbF93cml0ZShkYXRhX2J1ZmZlciArIGRhdGFfb2ZzLCAm KG5vZGUtPngpLCBqZTMyX3RvX2NwdShub2RlLT54LnRvdGxlbikpOworCXBhZHdvcmQoKTsK K30KKwordm9pZCB3cml0ZV94cmVmX3RvX2J1ZmYodW5pb24gamZmczJfbm9kZV91bmlvbiAq bm9kZSkKK3sKKwlwYWRfYmxvY2tfaWZfbGVzc190aGFuKGplMzJfdG9fY3B1KG5vZGUtPnIu dG90bGVuKSwgSkZGUzJfU1VNTUFSWV9YUkVGX1NJWkUpOworCWFkZF9zdW1feHJlZl9tZW0o bm9kZSk7CQkvKiBBZGQgeHJlZiBzdW1tYXJ5IG1lbSB0byBzdW1tYXJ5IGxpc3QgKi8KKwlm dWxsX3dyaXRlKGRhdGFfYnVmZmVyICsgZGF0YV9vZnMsICYobm9kZS0+ciksIGplMzJfdG9f Y3B1KG5vZGUtPnIudG90bGVuKSk7CisJcGFkd29yZCgpOworfQorCiB2b2lkIGNyZWF0ZV9z dW1tZWRfaW1hZ2UoaW50IGlucF9zaXplKQogewogCXVpbnQ4X3QgKnAgPSBmaWxlX2J1ZmZl cjsKIAl1bmlvbiBqZmZzMl9ub2RlX3VuaW9uICpub2RlOwotCXVpbnQzMl90IGNyYzsKKwl1 aW50MzJfdCBjcmMsIGxlbmd0aDsKIAl1aW50MTZfdCB0eXBlOwogCWludCBiaXRjaGJpdG1h c2sgPSAwOwogCWludCBvYnNvbGV0ZTsKQEAgLTc0Myw2ICs4MjQsNTYgQEAgdm9pZCBjcmVh dGVfc3VtbWVkX2ltYWdlKGludCBpbnBfc2l6ZSkKIAkJCQlwICs9IFBBRChqZTMyX3RvX2Nw dSAobm9kZS0+ZC50b3RsZW4pKTsKIAkJCQlicmVhazsKIAorCQkJY2FzZSBKRkZTMl9OT0RF VFlQRV9YQVRUUjoKKwkJCQlpZiAoamUzMl90b19jcHUobm9kZS0+eC5ub2RlX2NyYykgPT0g MHhmZmZmZmZmZikKKwkJCQkJb2Jzb2xldGUgPSAxOworCQkJCWlmICh2ZXJib3NlKQorCQkJ CQlwcmludGYoIiU4cyBYZGF0dW0gICAgIG5vZGUgYXQgMHglMDh4LCB0b3RsZW4gMHglMDh4 LCAiCisJCQkJCSAgICAgICAiI3hpZCAgJTV1LCB2ZXJzaW9uICU1dVxuIiwKKwkJCQkJICAg ICAgIG9ic29sZXRlID8gIk9ic29sZXRlIiA6ICIiLAorCQkJCQkgICAgICAgcCAtIGZpbGVf YnVmZmVyLCBqZTMyX3RvX2NwdSAobm9kZS0+eC50b3RsZW4pLAorCQkJCQkgICAgICAgamUz Ml90b19jcHUobm9kZS0+eC54aWQpLCBqZTMyX3RvX2NwdShub2RlLT54LnZlcnNpb24pKTsK KwkJCQljcmMgPSBjcmMzMigwLCBub2RlLCBzaXplb2YgKHN0cnVjdCBqZmZzMl9yYXdfeGF0 dHIpIC0gNCk7CisJCQkJaWYgKGNyYyAhPSBqZTMyX3RvX2NwdShub2RlLT54Lm5vZGVfY3Jj KSkgeworCQkJCQlwcmludGYoIldyb25nIG5vZGVfY3JjIGF0IDB4JTA4eCwgMHglMDh4IGlu c3RlYWQgb2YgMHglMDh4XG4iLAorCQkJCQkgICAgICAgcCAtIGZpbGVfYnVmZmVyLCBqZTMy X3RvX2NwdShub2RlLT54Lm5vZGVfY3JjKSwgY3JjKTsKKwkJCQkJcCArPSBQQUQoamUzMl90 b19jcHUgKG5vZGUtPngudG90bGVuKSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQls ZW5ndGggPSBub2RlLT54Lm5hbWVfbGVuICsgMSArIGplMTZfdG9fY3B1KG5vZGUtPngudmFs dWVfbGVuKTsKKwkJCQljcmMgPSBjcmMzMigwLCBub2RlLT54LmRhdGEsIGxlbmd0aCk7CisJ CQkJaWYgKGNyYyAhPSBqZTMyX3RvX2NwdShub2RlLT54LmRhdGFfY3JjKSkgeworCQkJCQlw cmludGYoIldyb25nIGRhdGFfY3JjIGF0IDB4JTA4eCwgMHglMDh4IGluc3RlYWQgb2YgMHgl MDh4XG4iLAorCQkJCQkgICAgICAgcCAtIGZpbGVfYnVmZmVyLCBqZTMyX3RvX2NwdShub2Rl LT54LmRhdGFfY3JjKSwgY3JjKTsKKwkJCQkJcCArPSBQQUQoamUzMl90b19jcHUgKG5vZGUt PngudG90bGVuKSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCXdyaXRlX3hhdHRy X3RvX2J1ZmYobm9kZSk7CisJCQkJcCArPSBQQUQoamUzMl90b19jcHUgKG5vZGUtPngudG90 bGVuKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSkZGUzJfTk9ERVRZUEVfWFJFRjoKKwkJ CQlpZiAoamUzMl90b19jcHUobm9kZS0+ci5ub2RlX2NyYykgPT0gMHhmZmZmZmZmZikKKwkJ CQkJb2Jzb2xldGUgPSAxOworCQkJCWlmICh2ZXJib3NlKQorCQkJCQlwcmludGYoIiU4cyBY cmVmICAgICAgIG5vZGUgYXQgMHglMDh4LCB0b3RsZW4gMHglMDh4LCAiCisJCQkJCSAgICAg ICAiI2lubyAgJTV1LCB4aWQgICAgICU1dVxuIiwKKwkJCQkJICAgICAgIG9ic29sZXRlID8g Ik9ic29sZXRlIiA6ICIiLAorCQkJCQkgICAgICAgcCAtIGZpbGVfYnVmZmVyLCBqZTMyX3Rv X2NwdShub2RlLT5yLnRvdGxlbiksCisJCQkJCSAgICAgICBqZTMyX3RvX2NwdShub2RlLT5y LmlubyksIGplMzJfdG9fY3B1KG5vZGUtPnIueGlkKSk7CisJCQkJY3JjID0gY3JjMzIoMCwg bm9kZSwgc2l6ZW9mIChzdHJ1Y3QgamZmczJfcmF3X3hyZWYpIC0gNCk7CisJCQkJaWYgKGNy YyAhPSBqZTMyX3RvX2NwdShub2RlLT5yLm5vZGVfY3JjKSkgeworCQkJCQlwcmludGYoIldy b25nIG5vZGVfY3JjIGF0IDB4JTA4eCwgMHglMDh4IGluc3RlYWQgb2YgMHglMDh4XG4iLAor CQkJCQkgICAgICAgcCAtIGZpbGVfYnVmZmVyLCBqZTMyX3RvX2NwdShub2RlLT5yLm5vZGVf Y3JjKSwgY3JjKTsKKwkJCQkJcCArPSBQQUQoamUzMl90b19jcHUgKG5vZGUtPnIudG90bGVu KSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCXdyaXRlX3hyZWZfdG9fYnVmZihu b2RlKTsKKwkJCQlwICs9IFBBRChqZTMyX3RvX2NwdSAobm9kZS0+ci50b3RsZW4pKTsKKwkJ CQlicmVhazsKKwogCQkJY2FzZSBKRkZTMl9OT0RFVFlQRV9DTEVBTk1BUktFUjoKIAkJCQlp ZiAodmVyYm9zZSkgewogCQkJCQlwcmludGYgKCIlOHMgQ2xlYW5tYXJrZXIgICAgIGF0IDB4 JTA4eCwgdG90bGVuIDB4JTA4eFxuIiwK --------------080502050609010207090805--