Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w2kDh-000Yl3-0i for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 06:17:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2kDg-007pqD-0W for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 06:17:28 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w2kDf-007pq5-0C for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 06:17:27 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1w2kDW-00000000JJB-12iU for pgsql-hackers@postgresql.org; Wed, 18 Mar 2026 06:17:26 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1773814636; bh=XN8ERX1M9q5a7v2KN+d4yASJidlFGtHmfkTUVpnktkQ=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Message-ID:From; b=EIzY+4vrIrq253kNq0C6uLTpxEukLfAq6OLNUYpEGKGm39xf2b+Gf2qQAUC0U8wq7 dWEeNF4/2c3CuKrqnJj7InuUe9lphOMxjv08GpxlxpKGPCqtfzhOX66+2i/x1hChZg rhQoUzohk+Z0XlJ4qnhN7GHao6bptluw80AMsxxBSfJT2Ird2iYpJdd1H54LsA5sDb mBk3iCeDBCs1DS5RGwJbUDqEOoczwQcQWwT52/C4Xy8DjHEz9QhL4CgExeYOiHaP8r GEWokKKGTP/jbxmvtXz54K8kELE/84m6gUvwkeE9myRixrptSniBXkq46PneezGkJL yUM2rMKSJChdg== Received: from mail.l.postgrespro.ru (webmail-master-mstn.l.postgrespro.ru [192.168.2.26]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.pyhalov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id D226060A7A; Wed, 18 Mar 2026 09:17:15 +0300 (MSK) MIME-Version: 1.0 Date: Wed, 18 Mar 2026 09:17:15 +0300 From: Alexander Pyhalov To: Pgsql Hackers Cc: Matheus Alcantara Subject: Re: Asynchronous MergeAppend In-Reply-To: <554a73f7ffea8b22b3f81a4804b5fc34@postgrespro.ru> References: <59be194c5a409fb9fc9f2031581b8a44@postgrespro.ru> <764dd8b8-6374-4f5a-aac7-d8e3f6ebe5fd@postgrespro.ru> <159b591411bb2c81332018927acbd509@postgrespro.ru> <2fb1d9923b6995492e7b163e6cb95402@postgrespro.ru> <782a968c8e01ec6db3b2da2120adf73b@postgrespro.ru> <554a73f7ffea8b22b3f81a4804b5fc34@postgrespro.ru> Message-ID: X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_768e045455637ea52d3563fff0679bcf" X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2026/03/18 01:55:00 #28297273 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_768e045455637ea52d3563fff0679bcf Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Alexander Pyhalov писал(а) 2026-03-02 09:44: > Alexander Pyhalov писал(а) 2026-02-12 10:08: >> Alexander Pyhalov писал(а) 2025-12-30 22:04: >>> Matheus Alcantara писал(а) 2025-12-30 18:04: >>>> On Tue Dec 30, 2025 at 10:15 AM -03, Alexander Pyhalov wrote: >>>>> Looks good. What do you think about >>>>> classify_matching_subplans_common()? >>>>> Should it stay where it is or should we hide it to >>>>> src/include/executor/execAppend.h ? >>>>> >>>> Yeah, sounds better to me to move classify_matching_subplans_common >>>> to >>>> execAppend.h since it very specific for the MergeAppend and Append >>>> execution. I've declared the function as static inline on >>>> execAppend.h >>>> but I'm not sure if it's the best approach. >>>> >>>> I've also wrote a proper commit message for this new version. >>> >>> Looks good to me. >> >> Hi. >> Rebased patches over fresh master. > > Hi. > Rebased patches over fresh master. Hi. Rebased patches over fresh master. -- Best regards, Alexander Pyhalov, Postgres Professional --=_768e045455637ea52d3563fff0679bcf Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v15-0001-mark_async_capable-subpath-should-match-subplan.patch Content-Disposition: attachment; filename=v15-0001-mark_async_capable-subpath-should-match-subplan.patch; size=2420 RnJvbSBkMWY1MDY5NmM4MzA3NWRlZjAwOWEyODcwYTc2NWU0Nzc4Yzg0YjFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBUaHUsIDEyIEZlYiAyMDI2IDA5OjE3OjM4ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAxLzNdIG1hcmtfYXN5bmNfY2FwYWJsZSgpOiBzdWJwYXRoIHNob3VsZCBtYXRjaCBzdWJw bGFuCgptYXJrX2FzeW5jX2NhcGFibGUoKSBiZWxpZXZlcyB0aGF0IHBhdGggY29ycmVzcG9uZHMg dG8gcGxhbi4gVGhpcyBpcwpub3QgdHJ1ZSB3aGVuIGNyZWF0ZV9bbWVyZ2VfXWFwcGVuZF9wbGFu KCkgaW5zZXJ0cyBzb3J0IG5vZGUuIEluCnRoaXMgY2FzZSBtYXJrX2FzeW5jX2NhcGFibGUoKSBj YW4gdHJlYXQgU29ydCBwbGFuIG5vZGUgYXMgc29tZQpvdGhlciBhbmQgY3Jhc2guIEZpeCB0aGlz IGJ5IGhhbmRsaW5nIHRoZSBTb3J0IG5vZGUgc2VwYXJhdGVseS4KClRoaXMgaXMgbmVlZGVkIHRv IG1ha2UgTWVyZ2VBcHBlbmQgbm9kZSBhc3luYy1jYXBhYmxlIHRoYXQgd2lsbApiZSBpbXBsZW1l bnRlZCBpbiBhIG5leHQgY29tbWl0LgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYyB8IDE4ICsrKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEwIGlu c2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jCmluZGV4IDUwYjBlMTAzMDhiLi41ZDcwNGUzOGYzNyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTEzOCwxMCArMTEzOCwxMiBAQCBtYXJrX2Fz eW5jX2NhcGFibGVfcGxhbihQbGFuICpwbGFuLCBQYXRoICpwYXRoKQogCQkJCVN1YnF1ZXJ5U2Nh biAqc2Nhbl9wbGFuID0gKFN1YnF1ZXJ5U2NhbiAqKSBwbGFuOwogCiAJCQkJLyoKLQkJCQkgKiBJ ZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBSZXN1bHQgbm9kZSwK LQkJCQkgKiB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5LgorCQkJCSAqIENoZWNr IHRoYXQgcGxhbiBpcyByZWFsbHkgYSBTdWJxdWVyeVNjYW4gYmVmb3JlIHVzaW5nIGl0LgorCQkJ CSAqIEl0IGNhbiBiZSBub3QgdHJ1ZSwgaWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVk ZXMgYQorCQkJCSAqIGdhdGluZyBSZXN1bHQgbm9kZSBvciBhIFNvcnQgbm9kZS4gSW4gc3VjaCBj YXNlIHdlIGNhbid0CisJCQkJICogZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNseS4KIAkJCQkgKi8K LQkJCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCQkJaWYgKCFJc0EocGxhbiwgU3VicXVlcnlT Y2FuKSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCiAJCQkJLyoKQEAgLTExNTksMTAgKzExNjEsMTAg QEAgbWFya19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIAkJCQlG ZHdSb3V0aW5lICpmZHdyb3V0aW5lID0gcGF0aC0+cGFyZW50LT5mZHdyb3V0aW5lOwogCiAJCQkJ LyoKLQkJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBS ZXN1bHQgbm9kZSwKLQkJCQkgKiB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5Lgor CQkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGluY2x1ZGVzIGEgZ2F0aW5nIFJlc3Vs dCBub2RlIG9yCisJCQkJICogYSBTb3J0IG5vZGUsIHdlIGNhbid0IGV4ZWN1dGUgaXQgYXN5bmNo cm9ub3VzbHkuCiAJCQkJICovCi0JCQkJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQkJCWlmIChJ c0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29ydCkpCiAJCQkJCXJldHVybiBmYWxzZTsK IAogCQkJCUFzc2VydChmZHdyb3V0aW5lICE9IE5VTEwpOwpAQCAtMTE3NSw5ICsxMTc3LDkgQEAg bWFya19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIAogCQkJLyoK IAkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGluY2x1ZGVzIGEgUmVzdWx0IG5vZGUg Zm9yIHRoZQotCQkJICogcHJvamVjdGlvbiwgd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25v dXNseS4KKwkJCSAqIHByb2plY3Rpb24gb3IgYSBTb3J0IG5vZGUsIHdlIGNhbid0IGV4ZWN1dGUg aXQgYXN5bmNocm9ub3VzbHkuCiAJCQkgKi8KLQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSkKKwkJ CWlmIChJc0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29ydCkpCiAJCQkJcmV0dXJuIGZh bHNlOwogCiAJCQkvKgotLSAKMi40My4wCgo= --=_768e045455637ea52d3563fff0679bcf Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v15-0002-MergeAppend-should-support-Async-Foreign-Scan-subpla.patch Content-Disposition: attachment; filename*0*=UTF-8''v15-0002-MergeAppend-should-support-Async-Foreign-Scan; filename*1*=-subpla.patch; size=51539 RnJvbSAwMjQ3NGY2YzliOTE1MmM1ZDA4MzE2Y2IwOGI4NTcxZTNkM2I0MTkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDE1IE5vdiAyMDI1IDEwOjIzOjQ3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAyLzNdIE1lcmdlQXBwZW5kIHNob3VsZCBzdXBwb3J0IEFzeW5jIEZvcmVpZ24gU2NhbiBz dWJwbGFucwoKLS0tCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQg ICAgfCAyODggKysrKysrKysrKysKIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5j ICAgICAgICAgICB8ICAxMCArLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zk dy5zcWwgICAgIHwgIDg3ICsrKysKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAg ICAgICAgICAgICB8ICAxNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYyAgICAg ICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jICAgICAg ICAgICAgIHwgIDI0ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyAg ICAgICAgfCA0NzEgKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jICAgICAgIHwgICA5ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Bh cmFtZXRlcnMuZGF0ICAgICB8ICAgOCArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUgfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBw ZW5kLmggICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAg ICAgICAgICAgICB8ICA1OSArKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91 dCAgICAgICAgfCAgIDMgKy0KIDE1IGZpbGVzIGNoYW5nZWQsIDk1MSBpbnNlcnRpb25zKCspLCAz MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3Rl ZC9wb3N0Z3Jlc19mZHcub3V0IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdy ZXNfZmR3Lm91dAppbmRleCAwZjUyNzFkNDc2ZS4uZTczZGI3MGNhNjkgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKKysrIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dApAQCAtMTE1NzUsNiArMTE1 NzUsNDYgQEAgU0VMRUNUICogRlJPTSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiAoMiByb3dzKQog CiBERUxFVEUgRlJPTSByZXN1bHRfdGJsOworLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAlIDEw MCA9IDAgT1JERVIgQlkgYiwgYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2Ug QXBwZW5kCisgICBTb3J0IEtleTogYXN5bmNfcHQuYiwgYXN5bmNfcHQuYQorICAgLT4gIEFzeW5j IEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDEgYXN5bmNfcHRfMQorICAgICAgICAgT3V0 cHV0OiBhc3luY19wdF8xLmEsIGFzeW5jX3B0XzEuYiwgYXN5bmNfcHRfMS5jCisgICAgICAgICBS ZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDEgV0hFUkUgKCgo YiAlIDEwMCkgPSAwKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFT VAorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRf MgorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRf Mi5jCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNl X3RibDIgV0hFUkUgKCgoYiAlIDEwMCkgPSAwKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwg YSBBU0MgTlVMTFMgTEFTVAorKDggcm93cykKKworU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVS RSBiICUgMTAwID0gMCBPUkRFUiBCWSBiLCBhOworICBhICAgfCAgYiAgfCAgYyAgIAorLS0tLS0t Ky0tLS0tKy0tLS0tLQorIDEwMDAgfCAgIDAgfCAwMDAwCisgMjAwMCB8ICAgMCB8IDAwMDAKKyAx MTAwIHwgMTAwIHwgMDEwMAorIDIxMDAgfCAxMDAgfCAwMTAwCisgMTIwMCB8IDIwMCB8IDAyMDAK KyAyMjAwIHwgMjAwIHwgMDIwMAorIDEzMDAgfCAzMDAgfCAwMzAwCisgMjMwMCB8IDMwMCB8IDAz MDAKKyAxNDAwIHwgNDAwIHwgMDQwMAorIDI0MDAgfCA0MDAgfCAwNDAwCisgMTUwMCB8IDUwMCB8 IDA1MDAKKyAyNTAwIHwgNTAwIHwgMDUwMAorIDE2MDAgfCA2MDAgfCAwNjAwCisgMjYwMCB8IDYw MCB8IDA2MDAKKyAxNzAwIHwgNzAwIHwgMDcwMAorIDI3MDAgfCA3MDAgfCAwNzAwCisgMTgwMCB8 IDgwMCB8IDA4MDAKKyAyODAwIHwgODAwIHwgMDgwMAorIDE5MDAgfCA5MDAgfCAwOTAwCisgMjkw MCB8IDkwMCB8IDA5MDAKKygyMCByb3dzKQorCiAtLSBUZXN0IGVycm9yIGhhbmRsaW5nLCBpZiBh Y2Nlc3Npbmcgb25lIG9mIHRoZSBmb3JlaWduIHBhcnRpdGlvbnMgZXJyb3JzIG91dAogQ1JFQVRF IEZPUkVJR04gVEFCTEUgYXN5bmNfcF9icm9rZW4gUEFSVElUSU9OIE9GIGFzeW5jX3B0IEZPUiBW QUxVRVMgRlJPTSAoMTAwMDApIFRPICgxMDAwMSkKICAgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMg KHRhYmxlX25hbWUgJ25vbl9leGlzdGVudF90YWJsZScpOwpAQCAtMTE2MjMsNiArMTE2NjMsNzYg QEAgQ09QWSBhc3luY19wdCBUTyBzdGRvdXQ7IC0tZXJyb3IKIEVSUk9SOiAgY2Fubm90IGNvcHkg ZnJvbSBmb3JlaWduIHRhYmxlICJhc3luY19wMSIKIERFVEFJTDogIFBhcnRpdGlvbiAiYXN5bmNf cDEiIGlzIGEgZm9yZWlnbiB0YWJsZSBpbiBwYXJ0aXRpb25lZCB0YWJsZSAiYXN5bmNfcHQiCiBI SU5UOiAgVHJ5IHRoZSBDT1BZIChTRUxFQ1QgLi4uKSBUTyB2YXJpYW50LgorLS0gVGVzdCBNZXJn ZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5 bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFwcGVuZAorICAgU29ydCBLZXk6IGFzeW5jX3B0LmIs IGFzeW5jX3B0LmEKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3Ax IGFzeW5jX3B0XzEKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMS5hLCBhc3luY19wdF8xLmIs IGFzeW5jX3B0XzEuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRfMS5iID09PSA1MDUpCisg ICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDEg T1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAorICAgLT4gIEFzeW5j IEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRfMgorICAgICAgICAgT3V0 cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRfMi5jCisgICAgICAgICBG aWx0ZXI6IChhc3luY19wdF8yLmIgPT09IDUwNSkKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVD VCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMiBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNU LCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5h c3luY19wMyBhc3luY19wdF8zCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzMuYSwgYXN5bmNf cHRfMy5iLCBhc3luY19wdF8zLmMKKyAgICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzMuYiA9PT0g NTA1KQorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFz ZV90YmwzIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QsIGEgQVNDIE5VTExTIExBU1QKKygxNCBy b3dzKQorCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBi LCBhOworICBhICAgfCAgYiAgfCAgYyAgIAorLS0tLS0tKy0tLS0tKy0tLS0tLQorIDE1MDUgfCA1 MDUgfCAwNTA1CisgMjUwNSB8IDUwNSB8IDA1MDUKKyAzNTA1IHwgNTA1IHwgMDUwNQorKDMgcm93 cykKKworLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQgcmVzY2FuCitFWFBMQUlOIChWRVJCT1NF LCBDT1NUUyBPRkYpCitTRUxFQ1QKKwlBUlJBWShTRUxFQ1QgZi5pIEZST00gKFNFTEVDVCBiICsg Zy5pIEZST00gYXN5bmNfcHQgV0hFUkUgYSA+IGcuaSBPUkRFUiBCWSBiKSBmKGkpIE9SREVSIEJZ IGYuaSBMSU1JVCAxMCkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGcoaSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRhbG9n LmdlbmVyYXRlX3NlcmllcyBnCisgICBPdXRwdXQ6IEFSUkFZKFN1YlBsYW4gYXJyYXlfMSkKKyAg IEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCAzKQorICAgU3ViUGxhbiBhcnJheV8x CisgICAgIC0+ICBMaW1pdAorICAgICAgICAgICBPdXRwdXQ6IGYuaQorICAgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgICBPdXRwdXQ6IGYuaQorICAgICAgICAgICAgICAgICBTb3J0 IEtleTogZi5pCisgICAgICAgICAgICAgICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9uIGYKKyAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmLmkKKyAgICAgICAgICAgICAgICAgICAgICAgLT4g IE1lcmdlIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogYXN5 bmNfcHQuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBT Y2FuIG9uIHB1YmxpYy5hc3luY19wMSBhc3luY19wdF8xCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogKGFzeW5jX3B0XzEuYiArIGcuaSksIGFzeW5jX3B0XzEuYgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYiBG Uk9NIHB1YmxpYy5iYXNlX3RibDEgV0hFUkUgKChhID4gJDE6OmludGVnZXIpKSBPUkRFUiBCWSBi IEFTQyBOVUxMUyBMQVNUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBBc3luYyBG b3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AyIGFzeW5jX3B0XzIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiAoYXN5bmNfcHRfMi5iICsgZy5pKSwgYXN5bmNf cHRfMi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNF TEVDVCBiIEZST00gcHVibGljLmJhc2VfdGJsMiBXSEVSRSAoKGEgPiAkMTo6aW50ZWdlcikpIE9S REVSIEJZIGIgQVNDIE5VTExTIExBU1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDMgYXN5bmNfcHRfMworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IChhc3luY19wdF8zLmIgKyBnLmkp LCBhc3luY19wdF8zLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3Rl IFNRTDogU0VMRUNUIGIgRlJPTSBwdWJsaWMuYmFzZV90YmwzIFdIRVJFICgoYSA+ICQxOjppbnRl Z2VyKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVAorKDIyIHJvd3MpCisKK1NFTEVDVAorCUFS UkFZKFNFTEVDVCBmLmkgRlJPTSAoU0VMRUNUIGIgKyBnLmkgRlJPTSBhc3luY19wdCBXSEVSRSBh ID4gZy5pIE9SREVSIEJZIGIpIGYoaSkgT1JERVIgQlkgZi5pIExJTUlUIDEwKQorRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwgMykgZyhpKTsKKyAgICAgICAgICAgYXJyYXkgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgezEsMSwxLDYsNiw2LDExLDExLDExLDE2fQorIHsy LDIsMiw3LDcsNywxMiwxMiwxMiwxN30KKyB7MywzLDMsOCw4LDgsMTMsMTMsMTMsMTh9CisoMyBy b3dzKQorCiBEUk9QIEZPUkVJR04gVEFCTEUgYXN5bmNfcDM7CiBEUk9QIFRBQkxFIGJhc2VfdGJs MzsKIC0tIENoZWNrIGNhc2Ugd2hlcmUgdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGhhcyBsb2NhbC9y ZW1vdGUgcGFydGl0aW9ucwpAQCAtMTE2NTgsNiArMTE3NjgsMzcgQEAgU0VMRUNUICogRlJPTSBy ZXN1bHRfdGJsIE9SREVSIEJZIGE7CiAoMyByb3dzKQogCiBERUxFVEUgRlJPTSByZXN1bHRfdGJs OworLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFwcGVuZAorICAgU29ydCBL ZXk6IGFzeW5jX3B0LmIsIGFzeW5jX3B0LmEKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24g cHVibGljLmFzeW5jX3AxIGFzeW5jX3B0XzEKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMS5h LCBhc3luY19wdF8xLmIsIGFzeW5jX3B0XzEuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRf MS5iID09PSA1MDUpCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1 YmxpYy5iYXNlX3RibDEgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFT VAorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRf MgorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRf Mi5jCisgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8yLmIgPT09IDUwNSkKKyAgICAgICAgIFJl bW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMiBPUkRFUiBCWSBi IEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgU29ydAorICAgICAgICAg T3V0cHV0OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwgYXN5bmNfcHRfMy5jCisgICAgICAg ICBTb3J0IEtleTogYXN5bmNfcHRfMy5iLCBhc3luY19wdF8zLmEKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuYXN5bmNfcDMgYXN5bmNfcHRfMworICAgICAgICAgICAgICAgT3V0cHV0 OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwgYXN5bmNfcHRfMy5jCisgICAgICAgICAgICAg ICBGaWx0ZXI6IChhc3luY19wdF8zLmIgPT09IDUwNSkKKygxNiByb3dzKQorCitTRUxFQ1QgKiBG Uk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworICBhICAgfCAgYiAg fCAgYyAgIAorLS0tLS0tKy0tLS0tKy0tLS0tLQorIDE1MDUgfCA1MDUgfCAwNTA1CisgMjUwNSB8 IDUwNSB8IDA1MDUKKyAzNTA1IHwgNTA1IHwgMDUwNQorKDMgcm93cykKKwogLS0gcGFydGl0aW9u d2lzZSBqb2lucwogU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gVE8gdHJ1ZTsKIENSRUFU RSBUQUJMRSBqb2luX3RibCAoYTEgaW50LCBiMSBpbnQsIGMxIHRleHQsIGEyIGludCwgYjIgaW50 LCBjMiB0ZXh0KTsKQEAgLTEyNDQwLDYgKzEyNTgxLDE1MyBAQCBTRUxFQ1QgYSBGUk9NIGJhc2Vf dGJsIFdIRVJFIChhLCByYW5kb20oKSA+IDApIElOIChTRUxFQ1QgYSwgcmFuZG9tKCkgPiAwIEZS T00gZgogRFJPUCBGT1JFSUdOIFRBQkxFIGZvcmVpZ25fdGJsIENBU0NBREU7CiBOT1RJQ0U6ICBk cm9wIGNhc2NhZGVzIHRvIGZvcmVpZ24gdGFibGUgZm9yZWlnbl90YmwyCiBEUk9QIFRBQkxFIGJh c2VfdGJsOworLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQKK0NSRUFURSBUQUJMRSBkaXN0cjEg KGkgaW50LCBqIGludCwgayB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFC TEUgYmFzZTEgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlMiAoaSBp bnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3AxIFBBUlRJ VElPTiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQor U0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UxJyk7CitDUkVBVEUgRk9S RUlHTiBUQUJMRSBkaXN0cjFfcDIgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEgg KE1PRFVMVVMgMiwgUkVNQUlOREVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVf bmFtZSAnYmFzZTInKTsKK0NSRUFURSBUQUJMRSBkaXN0cjIgKGkgaW50LCBqIGludCwgayB0ZXh0 KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUgYmFzZTMgKGkgaW50LCBqIGlu dCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlNCAoaSBpbnQsIGogaW50LCBrIHRleHQpOwor Q1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIyX3AxIFBBUlRJVElPTiBPRiBkaXN0cjIgRk9SIFZB TFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VSVkVSIGxvb3BiYWNrIE9QVElP TlMgKHRhYmxlX25hbWUgJ2Jhc2UzJyk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJfcDIg UEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVS IDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTQnKTsKK0lOU0VS VCBJTlRPIGRpc3RyMQorU0VMRUNUIGksIGkqMTAsICdkYXRhXycgfHwgaSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAxMDAwKSBpOworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSwgaSoxMCwg J2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0FOQUxZWkUgZGlz dHIxX3AxOworQU5BTFlaRSBkaXN0cjFfcDI7CitBTkFMWVpFIGRpc3RyMl9wMTsKK0FOQUxZWkUg ZGlzdHIyX3AyOworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gVE8gT047CistLSBUZXN0 IGpvaW5zIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5p IEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRp c3RyMi5pIExJTUlUIDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0CisgICBP dXRwdXQ6IGRpc3RyMS5pLCBkaXN0cjEuaiwgZGlzdHIxLmssIGRpc3RyMi5pLCBkaXN0cjIuaiwg ZGlzdHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjEu aQorICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbgorICAgICAgICAgICAgICAgT3V0cHV0 OiBkaXN0cjFfMS5pLCBkaXN0cjFfMS5qLCBkaXN0cjFfMS5rLCBkaXN0cjJfMS5pLCBkaXN0cjJf MS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAgICBSZWxhdGlvbnM6IChwdWJsaWMuZGlzdHIx X3AxIGRpc3RyMV8xKSBJTk5FUiBKT0lOIChwdWJsaWMuZGlzdHIyX3AxIGRpc3RyMl8xKQorICAg ICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHIzLmksIHIzLmosIHIzLmssIHI1LmksIHI1 LmosIHI1LmsgRlJPTSAocHVibGljLmJhc2UxIHIzIElOTkVSIEpPSU4gcHVibGljLmJhc2UzIHI1 IE9OICgoKHIzLmkgPSByNS5pKSkgQU5EICgocjUuaiA+IDkwKSkgQU5EICgocjUuayB+fiAnZGF0 YSUnKSkpKSBPUkRFUiBCWSByMy5pIEFTQyBOVUxMUyBMQVNUCisgICAgICAgICAtPiAgQXN5bmMg Rm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICBPdXRwdXQ6IGRpc3RyMV8yLmksIGRpc3RyMV8y LmosIGRpc3RyMV8yLmssIGRpc3RyMl8yLmksIGRpc3RyMl8yLmosIGRpc3RyMl8yLmsKKyAgICAg ICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFfcDIgZGlzdHIxXzIpIElOTkVSIEpP SU4gKHB1YmxpYy5kaXN0cjJfcDIgZGlzdHIyXzIpCisgICAgICAgICAgICAgICBSZW1vdGUgU1FM OiBTRUxFQ1QgcjQuaSwgcjQuaiwgcjQuaywgcjYuaSwgcjYuaiwgcjYuayBGUk9NIChwdWJsaWMu YmFzZTIgcjQgSU5ORVIgSk9JTiBwdWJsaWMuYmFzZTQgcjYgT04gKCgocjQuaSA9IHI2LmkpKSBB TkQgKChyNi5qID4gOTApKSBBTkQgKChyNi5rIH5+ICdkYXRhJScpKSkpIE9SREVSIEJZIHI0Lmkg QVNDIE5VTExTIExBU1QKKygxMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIy IFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBs aWtlICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOworIGkgIHwgIGogIHwgICAg ayAgICB8IGkgIHwgIGogIHwgICAgayAgICAKKy0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0rLS0t LS0rLS0tLS0tLS0tCisgMTAgfCAxMDAgfCBkYXRhXzEwIHwgMTAgfCAxMDAgfCBkYXRhXzEwCisg MTEgfCAxMTAgfCBkYXRhXzExIHwgMTEgfCAxMTAgfCBkYXRhXzExCisgMTIgfCAxMjAgfCBkYXRh XzEyIHwgMTIgfCAxMjAgfCBkYXRhXzEyCisgMTMgfCAxMzAgfCBkYXRhXzEzIHwgMTMgfCAxMzAg fCBkYXRhXzEzCisgMTQgfCAxNDAgfCBkYXRhXzE0IHwgMTQgfCAxNDAgfCBkYXRhXzE0CisgMTUg fCAxNTAgfCBkYXRhXzE1IHwgMTUgfCAxNTAgfCBkYXRhXzE1CisgMTYgfCAxNjAgfCBkYXRhXzE2 IHwgMTYgfCAxNjAgfCBkYXRhXzE2CisgMTcgfCAxNzAgfCBkYXRhXzE3IHwgMTcgfCAxNzAgfCBk YXRhXzE3CisgMTggfCAxODAgfCBkYXRhXzE4IHwgMTggfCAxODAgfCBkYXRhXzE4CisgMTkgfCAx OTAgfCBkYXRhXzE5IHwgMTkgfCAxOTAgfCBkYXRhXzE5CisoMTAgcm93cykKKworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lOIGRpc3Ry MiBPTiBkaXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFICBk aXN0cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0cjEuaSBMSU1JVCAyMDsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMS5pLCBkaXN0cjEuaiwgZGlz dHIxLmssIGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQK KyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjEuaQorICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24g U2NhbgorICAgICAgICAgICAgICAgT3V0cHV0OiBkaXN0cjFfMS5pLCBkaXN0cjFfMS5qLCBkaXN0 cjFfMS5rLCBkaXN0cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAg ICBSZWxhdGlvbnM6IChwdWJsaWMuZGlzdHIxX3AxIGRpc3RyMV8xKSBMRUZUIEpPSU4gKHB1Ymxp Yy5kaXN0cjJfcDEgZGlzdHIyXzEpCisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1Qg cjQuaSwgcjQuaiwgcjQuaywgcjYuaSwgcjYuaiwgcjYuayBGUk9NIChwdWJsaWMuYmFzZTEgcjQg TEVGVCBKT0lOIHB1YmxpYy5iYXNlMyByNiBPTiAoKChyNC5pID0gcjYuaSkpIEFORCAoKHI2Lmsg fn4gJ2RhdGElJykpKSkgV0hFUkUgKChyNC5pID4gOTApKSBPUkRFUiBCWSByNC5pIEFTQyBOVUxM UyBMQVNUCisgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICBP dXRwdXQ6IGRpc3RyMV8yLmksIGRpc3RyMV8yLmosIGRpc3RyMV8yLmssIGRpc3RyMl8yLmksIGRp c3RyMl8yLmosIGRpc3RyMl8yLmsKKyAgICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5k aXN0cjFfcDIgZGlzdHIxXzIpIExFRlQgSk9JTiAocHVibGljLmRpc3RyMl9wMiBkaXN0cjJfMikK KyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCByNS5pLCByNS5qLCByNS5rLCByNy5p LCByNy5qLCByNy5rIEZST00gKHB1YmxpYy5iYXNlMiByNSBMRUZUIEpPSU4gcHVibGljLmJhc2U0 IHI3IE9OICgoKHI1LmkgPSByNy5pKSkgQU5EICgocjcuayB+fiAnZGF0YSUnKSkpKSBXSEVSRSAo KHI1LmkgPiA5MCkpIE9SREVSIEJZIHI1LmkgQVNDIE5VTExTIExBU1QKKygxMiByb3dzKQorCitT RUxFQ1QgKiBGUk9NIGRpc3RyMSBMRUZUIEpPSU4gZGlzdHIyIE9OICBkaXN0cjEuaT1kaXN0cjIu aSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFIGRpc3RyMS5pID4gOTAKK09SREVSIEJZ IGRpc3RyMS5pIExJTUlUIDIwOworICBpICB8ICBqICAgfCAgICBrICAgICB8ICBpICB8ICBqICAg fCAgICBrICAgICAKKy0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0t LS0tCisgIDkxIHwgIDkxMCB8IGRhdGFfOTEgIHwgIDkxIHwgIDkxMCB8IGRhdGFfOTEKKyAgOTIg fCAgOTIwIHwgZGF0YV85MiAgfCAgOTIgfCAgOTIwIHwgZGF0YV85MgorICA5MyB8ICA5MzAgfCBk YXRhXzkzICB8ICA5MyB8ICA5MzAgfCBkYXRhXzkzCisgIDk0IHwgIDk0MCB8IGRhdGFfOTQgIHwg IDk0IHwgIDk0MCB8IGRhdGFfOTQKKyAgOTUgfCAgOTUwIHwgZGF0YV85NSAgfCAgOTUgfCAgOTUw IHwgZGF0YV85NQorICA5NiB8ICA5NjAgfCBkYXRhXzk2ICB8ICA5NiB8ICA5NjAgfCBkYXRhXzk2 CisgIDk3IHwgIDk3MCB8IGRhdGFfOTcgIHwgIDk3IHwgIDk3MCB8IGRhdGFfOTcKKyAgOTggfCAg OTgwIHwgZGF0YV85OCAgfCAgOTggfCAgOTgwIHwgZGF0YV85OAorICA5OSB8ICA5OTAgfCBkYXRh Xzk5ICB8ICA5OSB8ICA5OTAgfCBkYXRhXzk5CisgMTAwIHwgMTAwMCB8IGRhdGFfMTAwIHwgMTAw IHwgMTAwMCB8IGRhdGFfMTAwCisgMTAxIHwgMTAxMCB8IGRhdGFfMTAxIHwgICAgIHwgICAgICB8 IAorIDEwMiB8IDEwMjAgfCBkYXRhXzEwMiB8ICAgICB8ICAgICAgfCAKKyAxMDMgfCAxMDMwIHwg ZGF0YV8xMDMgfCAgICAgfCAgICAgIHwgCisgMTA0IHwgMTA0MCB8IGRhdGFfMTA0IHwgICAgIHwg ICAgICB8IAorIDEwNSB8IDEwNTAgfCBkYXRhXzEwNSB8ICAgICB8ICAgICAgfCAKKyAxMDYgfCAx MDYwIHwgZGF0YV8xMDYgfCAgICAgfCAgICAgIHwgCisgMTA3IHwgMTA3MCB8IGRhdGFfMTA3IHwg ICAgIHwgICAgICB8IAorIDEwOCB8IDEwODAgfCBkYXRhXzEwOCB8ICAgICB8ICAgICAgfCAKKyAx MDkgfCAxMDkwIHwgZGF0YV8xMDkgfCAgICAgfCAgICAgIHwgCisgMTEwIHwgMTEwMCB8IGRhdGFf MTEwIHwgICAgIHwgICAgICB8IAorKDIwIHJvd3MpCisKKy0tIFRlc3QgcHJ1bmluZyB3aXRoIGFz eW5jIE1lcmdlIEFwcGVuZAorREVMRVRFIEZST00gZGlzdHIyOworSU5TRVJUIElOVE8gZGlzdHIy CitTRUxFQ1QgaSUxMCwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDApIGk7CitERUFMTE9DQVRFIEFMTDsKK1NFVCBwbGFuX2NhY2hlX21vZGUgVE8gZm9yY2Vf Z2VuZXJpY19wbGFuOworUFJFUEFSRSBhc3luY19wdF9xdWVyeSAoaW50LCBpbnQpIEFTCisgIFNF TEVDVCAqIEZST00gZGlzdHIyIFdIRVJFIGkgPSBBTlkoQVJSQVlbJDEsICQyXSkKKyAgT1JERVIg QlkgaSxqCisgIExJTUlUIDEwOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorCUVYRUNV VEUgYXN5bmNfcHRfcXVlcnkoMSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ICBN ZXJnZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjIuaSwgZGlzdHIyLmoKKyAgICAg ICAgIFN1YnBsYW5zIFJlbW92ZWQ6IDEKKyAgICAgICAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4g b24gcHVibGljLmRpc3RyMl9wMSBkaXN0cjJfMQorICAgICAgICAgICAgICAgT3V0cHV0OiBkaXN0 cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAgICBSZW1vdGUgU1FM OiBTRUxFQ1QgaSwgaiwgayBGUk9NIHB1YmxpYy5iYXNlMyBXSEVSRSAoKGkgPSBBTlkgKEFSUkFZ WyQxOjppbnRlZ2VyLCAkMjo6aW50ZWdlcl0pKSkgT1JERVIgQlkgaSBBU0MgTlVMTFMgTEFTVCwg aiBBU0MgTlVMTFMgTEFTVAorKDggcm93cykKKworRVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAx KTsKKyBpIHwgIGogIHwgICAgayAgICAKKy0tLSstLS0tLSstLS0tLS0tLS0KKyAxIHwgIDEwIHwg ZGF0YV8xCisgMSB8IDExMCB8IGRhdGFfMTEKKyAxIHwgMjEwIHwgZGF0YV8yMQorIDEgfCAzMTAg fCBkYXRhXzMxCisgMSB8IDQxMCB8IGRhdGFfNDEKKyAxIHwgNTEwIHwgZGF0YV81MQorIDEgfCA2 MTAgfCBkYXRhXzYxCisgMSB8IDcxMCB8IGRhdGFfNzEKKyAxIHwgODEwIHwgZGF0YV84MQorIDEg fCA5MTAgfCBkYXRhXzkxCisoMTAgcm93cykKKworUkVTRVQgcGxhbl9jYWNoZV9tb2RlOworUkVT RVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbjsKK0RST1AgVEFCTEUgZGlzdHIxLCBkaXN0cjIs IGJhc2UxLCBiYXNlMiwgYmFzZTMsIGJhc2U0OwogQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9QVElP TlMgKERST1AgYXN5bmNfY2FwYWJsZSk7CiBBTFRFUiBTRVJWRVIgbG9vcGJhY2syIE9QVElPTlMg KERST1AgYXN5bmNfY2FwYWJsZSk7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9jb250cmli L3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3Rn cmVzX2Zkdy5jCmluZGV4IDQxZTQ3Y2M3OTViLi40ZDExMzA1MGNkYSAxMDA2NDQKLS0tIGEvY29u dHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19m ZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTcyMTQsMTIgKzcyMTQsMTYgQEAgcG9zdGdyZXNGb3JlaWdu QXN5bmNDb25maWd1cmVXYWl0KEFzeW5jUmVxdWVzdCAqYXJlcSkKIAlGb3JlaWduU2NhblN0YXRl ICpub2RlID0gKEZvcmVpZ25TY2FuU3RhdGUgKikgYXJlcS0+cmVxdWVzdGVlOwogCVBnRmR3U2Nh blN0YXRlICpmc3N0YXRlID0gKFBnRmR3U2NhblN0YXRlICopIG5vZGUtPmZkd19zdGF0ZTsKIAlB c3luY1JlcXVlc3QgKnBlbmRpbmdBcmVxID0gZnNzdGF0ZS0+Y29ubl9zdGF0ZS0+cGVuZGluZ0Fy ZXE7Ci0JQXBwZW5kU3RhdGUgKnJlcXVlc3RvciA9IChBcHBlbmRTdGF0ZSAqKSBhcmVxLT5yZXF1 ZXN0b3I7Ci0JV2FpdEV2ZW50U2V0ICpzZXQgPSByZXF1ZXN0b3ItPmFzX2V2ZW50c2V0OworCVBs YW5TdGF0ZSAgKnJlcXVlc3RvciA9IGFyZXEtPnJlcXVlc3RvcjsKKwlXYWl0RXZlbnRTZXQgKnNl dDsKKwlCaXRtYXBzZXQgICpuZWVkcmVxdWVzdDsKIAogCS8qIFRoaXMgc2hvdWxkIG5vdCBiZSBj YWxsZWQgdW5sZXNzIGNhbGxiYWNrX3BlbmRpbmcgKi8KIAlBc3NlcnQoYXJlcS0+Y2FsbGJhY2tf cGVuZGluZyk7CiAKKwlzZXQgPSBHZXRBcHBlbmRFdmVudFNldChyZXF1ZXN0b3IpOworCW5lZWRy ZXF1ZXN0ID0gR2V0TmVlZFJlcXVlc3QocmVxdWVzdG9yKTsKKwogCS8qCiAJICogSWYgcHJvY2Vz c19wZW5kaW5nX3JlcXVlc3QoKSBoYXMgYmVlbiBpbnZva2VkIG9uIHRoZSBnaXZlbiByZXF1ZXN0 CiAJICogYmVmb3JlIHdlIGdldCBoZXJlLCB3ZSBtaWdodCBoYXZlIHNvbWUgdHVwbGVzIGFscmVh ZHk7IGluIHdoaWNoIGNhc2UKQEAgLTcyNTcsNyArNzI2MSw3IEBAIHBvc3RncmVzRm9yZWlnbkFz eW5jQ29uZmlndXJlV2FpdChBc3luY1JlcXVlc3QgKmFyZXEpCiAJCSAqIGJlbG93LCBiZWNhdXNl IHdlIG1pZ2h0IG90aGVyd2lzZSBlbmQgdXAgd2l0aCBubyBjb25maWd1cmVkIGV2ZW50cwogCQkg KiBvdGhlciB0aGFuIHRoZSBwb3N0bWFzdGVyIGRlYXRoIGV2ZW50LgogCQkgKi8KLQkJaWYgKCFi bXNfaXNfZW1wdHkocmVxdWVzdG9yLT5hc19uZWVkcmVxdWVzdCkpCisJCWlmICghYm1zX2lzX2Vt cHR5KG5lZWRyZXF1ZXN0KSkKIAkJCXJldHVybjsKIAkJaWYgKEdldE51bVJlZ2lzdGVyZWRXYWl0 RXZlbnRzKHNldCkgPiAxKQogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jl c19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9z dGdyZXNfZmR3LnNxbAppbmRleCA0OWVkNzk3ZThlZi4uNzNmYzUzMTdhZDUgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCisrKyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCkBAIC0zOTQzLDYgKzM5NDMsMTEgQEAg SU5TRVJUIElOVE8gcmVzdWx0X3RibCBTRUxFQ1QgYSwgYiwgJ0FBQScgfHwgYyBGUk9NIGFzeW5j X3B0IFdIRVJFIGIgPT09IDUwNTsKIFNFTEVDVCAqIEZST00gcmVzdWx0X3RibCBPUkRFUiBCWSBh OwogREVMRVRFIEZST00gcmVzdWx0X3RibDsKIAorLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExB SU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAl IDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAl IDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKKwogLS0gVGVzdCBlcnJvciBoYW5kbGluZywgaWYgYWNj ZXNzaW5nIG9uZSBvZiB0aGUgZm9yZWlnbiBwYXJ0aXRpb25zIGVycm9ycyBvdXQKIENSRUFURSBG T1JFSUdOIFRBQkxFIGFzeW5jX3BfYnJva2VuIFBBUlRJVElPTiBPRiBhc3luY19wdCBGT1IgVkFM VUVTIEZST00gKDEwMDAwKSBUTyAoMTAwMDEpCiAgIFNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0 YWJsZV9uYW1lICdub25fZXhpc3RlbnRfdGFibGUnKTsKQEAgLTM5NjYsNiArMzk3MSwyMCBAQCBE RUxFVEUgRlJPTSByZXN1bHRfdGJsOwogLS0gVGVzdCBDT1BZIFRPIHdoZW4gZm9yZWlnbiB0YWJs ZSBpcyBwYXJ0aXRpb24KIENPUFkgYXN5bmNfcHQgVE8gc3Rkb3V0OyAtLWVycm9yCiAKKy0tIFRl c3QgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworU0VMRUNUICogRlJP TSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKKworLS0gVGVzdCBhc3lu YyBNZXJnZSBBcHBlbmQgcmVzY2FuCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxF Q1QKKwlBUlJBWShTRUxFQ1QgZi5pIEZST00gKFNFTEVDVCBiICsgZy5pIEZST00gYXN5bmNfcHQg V0hFUkUgYSA+IGcuaSBPUkRFUiBCWSBiKSBmKGkpIE9SREVSIEJZIGYuaSBMSU1JVCAxMCkKK0ZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGcoaSk7CitTRUxFQ1QKKwlBUlJBWShTRUxFQ1QgZi5p IEZST00gKFNFTEVDVCBiICsgZy5pIEZST00gYXN5bmNfcHQgV0hFUkUgYSA+IGcuaSBPUkRFUiBC WSBiKSBmKGkpIE9SREVSIEJZIGYuaSBMSU1JVCAxMCkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDMpIGcoaSk7CisKIERST1AgRk9SRUlHTiBUQUJMRSBhc3luY19wMzsKIERST1AgVEFCTEUgYmFz ZV90YmwzOwogCkBAIC0zOTgxLDYgKzQwMDAsMTEgQEAgSU5TRVJUIElOVE8gcmVzdWx0X3RibCBT RUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNTsKIFNFTEVDVCAqIEZST00gcmVz dWx0X3RibCBPUkRFUiBCWSBhOwogREVMRVRFIEZST00gcmVzdWx0X3RibDsKIAorLS0gVGVzdCBN ZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00g YXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CitTRUxFQ1QgKiBGUk9NIGFz eW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworCiAtLSBwYXJ0aXRpb253aXNl IGpvaW5zCiBTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOwogCkBAIC00MjE5 LDYgKzQyNDMsNjkgQEAgU0VMRUNUIGEgRlJPTSBiYXNlX3RibCBXSEVSRSAoYSwgcmFuZG9tKCkg PiAwKSBJTiAoU0VMRUNUIGEsIHJhbmRvbSgpID4gMCBGUk9NIGYKIERST1AgRk9SRUlHTiBUQUJM RSBmb3JlaWduX3RibCBDQVNDQURFOwogRFJPUCBUQUJMRSBiYXNlX3RibDsKIAorLS0gVGVzdCBh c3luYyBNZXJnZSBBcHBlbmQKK0NSRUFURSBUQUJMRSBkaXN0cjEgKGkgaW50LCBqIGludCwgayB0 ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUgYmFzZTEgKGkgaW50LCBq IGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlMiAoaSBpbnQsIGogaW50LCBrIHRleHQp OworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3AxIFBBUlRJVElPTiBPRiBkaXN0cjEgRk9S IFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VSVkVSIGxvb3BiYWNrIE9Q VElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UxJyk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjFf cDIgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlO REVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTInKTsKKwor Q1JFQVRFIFRBQkxFIGRpc3RyMiAoaSBpbnQsIGogaW50LCBrIHRleHQpIFBBUlRJVElPTiBCWSBI QVNIIChpKTsKK0NSRUFURSBUQUJMRSBiYXNlMyAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JF QVRFIFRBQkxFIGJhc2U0IChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUgRk9SRUlHTiBU QUJMRSBkaXN0cjJfcDEgUEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKE1PRFVM VVMgMiwgUkVNQUlOREVSIDApCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAn YmFzZTMnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMl9wMiBQQVJUSVRJT04gT0YgZGlz dHIyIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKK1NFUlZFUiBsb29w YmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlNCcpOworCitJTlNFUlQgSU5UTyBkaXN0cjEK K1NFTEVDVCBpLCBpKjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAw MCkgaTsKKworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSwgaSoxMCwgJ2RhdGFfJyB8fCBp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKKworQU5BTFlaRSBkaXN0cjFfcDE7CitB TkFMWVpFIGRpc3RyMV9wMjsKK0FOQUxZWkUgZGlzdHIyX3AxOworQU5BTFlaRSBkaXN0cjJfcDI7 CisKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luIFRPIE9OOworCistLSBUZXN0IGpvaW5z IHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBk aXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5p IExJTUlUIDEwOworU0VMRUNUICogRlJPTSBkaXN0cjEsIGRpc3RyMiBXSEVSRSBkaXN0cjEuaT1k aXN0cjIuaSBBTkQgZGlzdHIyLmogPiA5MCBhbmQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnCitPUkRF UiBCWSBkaXN0cjIuaSBMSU1JVCAxMDsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lOIGRpc3RyMiBPTiBkaXN0cjEuaT1kaXN0cjIu aSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFICBkaXN0cjEuaSA+IDkwCitPUkRFUiBC WSBkaXN0cjEuaSBMSU1JVCAyMDsKK1NFTEVDVCAqIEZST00gZGlzdHIxIExFRlQgSk9JTiBkaXN0 cjIgT04gIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScgV0hFUkUg ZGlzdHIxLmkgPiA5MAorT1JERVIgQlkgZGlzdHIxLmkgTElNSVQgMjA7CisKKy0tIFRlc3QgcHJ1 bmluZyB3aXRoIGFzeW5jIE1lcmdlIEFwcGVuZAorREVMRVRFIEZST00gZGlzdHIyOworSU5TRVJU IElOVE8gZGlzdHIyCitTRUxFQ1QgaSUxMCwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDApIGk7CisKK0RFQUxMT0NBVEUgQUxMOworU0VUIHBsYW5fY2FjaGVf bW9kZSBUTyBmb3JjZV9nZW5lcmljX3BsYW47CitQUkVQQVJFIGFzeW5jX3B0X3F1ZXJ5IChpbnQs IGludCkgQVMKKyAgU0VMRUNUICogRlJPTSBkaXN0cjIgV0hFUkUgaSA9IEFOWShBUlJBWVskMSwg JDJdKQorICBPUkRFUiBCWSBpLGoKKyAgTElNSVQgMTA7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpCisJRVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAxKTsKK0VYRUNVVEUgYXN5bmNfcHRf cXVlcnkoMSwgMSk7CitSRVNFVCBwbGFuX2NhY2hlX21vZGU7CisKK1JFU0VUIGVuYWJsZV9wYXJ0 aXRpb253aXNlX2pvaW47CisKK0RST1AgVEFCTEUgZGlzdHIxLCBkaXN0cjIsIGJhc2UxLCBiYXNl MiwgYmFzZTMsIGJhc2U0OworCiBBTFRFUiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAoRFJPUCBh c3luY19jYXBhYmxlKTsKIEFMVEVSIFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAoRFJPUCBhc3lu Y19jYXBhYmxlKTsKIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDhjZGQ4MjZmYmQzLi4wNTc3ZDViYzM3NCAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbApAQCAtNTU1Niw2ICs1NTU2LDIwIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAg ICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVu dHJ5IGlkPSJndWMtZW5hYmxlLWFzeW5jLW1lcmdlLWFwcGVuZCIgeHJlZmxhYmVsPSJlbmFibGVf YXN5bmNfbWVyZ2VfYXBwZW5kIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9hc3luY19t ZXJnZV9hcHBlbmQ8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRl eHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVu ZDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2lu ZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcXVlcnkgcGxhbm5lcidzIHVzZSBvZiBh c3luYy1hd2FyZQorICAgICAgICBtZXJnZSBhcHBlbmQgcGxhbiB0eXBlcy4gVGhlIGRlZmF1bHQg aXMgPGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0 ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1l bmFibGUtYml0bWFwc2NhbiIgeHJlZmxhYmVsPSJlbmFibGVfYml0bWFwc2NhbiI+CiAgICAgICA8 dGVybT48dmFybmFtZT5lbmFibGVfYml0bWFwc2NhbjwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48 L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNBc3luYy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FzeW5jLmMKaW5kZXgg Y2Y3ZGRiYjAxZjQuLmY4MzlmNWYyNTVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjQXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYwpAQCAt MTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAi ZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVBcHBlbmQuaCIK KyNpbmNsdWRlICJleGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaCIKICNpbmNsdWRlICJleGVjdXRv ci9ub2RlRm9yZWlnbnNjYW4uaCIKIAogLyoKQEAgLTEyMiw2ICsxMjMsOSBAQCBFeGVjQXN5bmNS ZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEpCiAJCWNhc2UgVF9BcHBlbmRTdGF0ZToKIAkJCUV4 ZWNBc3luY0FwcGVuZFJlc3BvbnNlKGFyZXEpOwogCQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFw cGVuZFN0YXRlOgorCQkJRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZShhcmVxKTsKKwkJCWJy ZWFrOwogCQlkZWZhdWx0OgogCQkJLyogSWYgdGhlIG5vZGUgZG9lc24ndCBzdXBwb3J0IGFzeW5j LCBjYWxsZXIgbWVzc2VkIHVwLiAqLwogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2Rl IHR5cGU6ICVkIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwppbmRleCA4NWM4NTU2OWI1ZS4u NTUxNjRlMzZjZTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKQEAgLTExODksMTAgKzEx ODksNyBAQCBFeGVjQXN5bmNBcHBlbmRSZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEpCiBzdGF0 aWMgdm9pZAogY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoQXBwZW5kU3RhdGUgKm5vZGUpCiB7 Ci0JQml0bWFwc2V0ICAqdmFsaWRfYXN5bmNwbGFuczsKLQogCUFzc2VydChub2RlLT5hc192YWxp ZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKLQlBc3NlcnQobm9kZS0+YXNfdmFsaWRfYXN5bmNwbGFu cyA9PSBOVUxMKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIHZhbGlkIHN1 YnBsYW5zLiAqLwogCWlmIChibXNfaXNfZW1wdHkobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMpKQpA QCAtMTIwMiwyMSArMTE5OSwxMCBAQCBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhBcHBlbmRT dGF0ZSAqbm9kZSkKIAkJcmV0dXJuOwogCX0KIAotCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUg YXJlIG5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwotCWlmICghYm1zX292ZXJsYXAobm9kZS0+ YXNfdmFsaWRfc3VicGxhbnMsIG5vZGUtPmFzX2FzeW5jcGxhbnMpKQotCXsKKwkvKiBObyB2YWxp ZCBhc3luYyBzdWJwbGFucyBpZGVudGlmaWVkLiAqLworCWlmICghY2xhc3NpZnlfbWF0Y2hpbmdf c3VicGxhbnNfY29tbW9uKAorCQkJCQkJCQkJCSAgICZub2RlLT5hc192YWxpZF9zdWJwbGFucywK KwkJCQkJCQkJCQkgICBub2RlLT5hc19hc3luY3BsYW5zLAorCQkJCQkJCQkJCSAgICZub2RlLT5h c192YWxpZF9hc3luY3BsYW5zKSkKIAkJbm9kZS0+YXNfbmFzeW5jcmVtYWluID0gMDsKLQkJcmV0 dXJuOwotCX0KLQotCS8qIEdldCB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KLQl2YWxpZF9hc3lu Y3BsYW5zID0gYm1zX2ludGVyc2VjdChub2RlLT5hc19hc3luY3BsYW5zLAotCQkJCQkJCQkJIG5v ZGUtPmFzX3ZhbGlkX3N1YnBsYW5zKTsKLQotCS8qIEFkanVzdCB0aGUgdmFsaWQgc3VicGxhbnMg dG8gY29udGFpbiBzeW5jIHN1YnBsYW5zIG9ubHkuICovCi0Jbm9kZS0+YXNfdmFsaWRfc3VicGxh bnMgPSBibXNfZGVsX21lbWJlcnMobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsCi0JCQkJCQkJCQkJ CSAgdmFsaWRfYXN5bmNwbGFucyk7Ci0KLQkvKiBTYXZlIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAq LwotCW5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMgPSB2YWxpZF9hc3luY3BsYW5zOwogfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCA3MmVlYmQ1MGJkZi4uNTYxYTFj ZTMyNjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCkBAIC0zOSwxMSAr MzksMTYgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhl Y3V0b3IuaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjQXN5bmMuaCIKICNpbmNsdWRlICJleGVj dXRvci9leGVjUGFydGl0aW9uLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5k LmgiCiAjaW5jbHVkZSAibGliL2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIK KyNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAidXRpbHMvc29ydHN1cHBvcnQu aCIKKyNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCisKKyNkZWZpbmUgRVZFTlRfQlVGRkVS X1NJWkUgICAgICAgICAgICAgICAgICAgICAxNgogCiAvKgogICogV2UgaGF2ZSBvbmUgc2xvdCBm b3IgZWFjaCBpdGVtIGluIHRoZSBoZWFwIGFycmF5LiAgV2UgdXNlIFNsb3ROdW1iZXIKQEAgLTU1 LDYgKzYwLDEyIEBAIHR5cGVkZWYgaW50MzIgU2xvdE51bWJlcjsKIHN0YXRpYyBUdXBsZVRhYmxl U2xvdCAqRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKTsKIHN0YXRpYyBpbnQJaGVh cF9jb21wYXJlX3Nsb3RzKERhdHVtIGEsIERhdHVtIGIsIHZvaWQgKmFyZyk7CiAKK3N0YXRpYyB2 b2lkIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOwor c3RhdGljIHZvaWQgRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdpbihNZXJnZUFwcGVuZFN0YXRlICpu b2RlKTsKK3N0YXRpYyB2b2lkIEV4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0TmV4dChNZXJnZUFwcGVu ZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pOworc3RhdGljIGJvb2wgRXhlY01lcmdlQXBwZW5kQXN5 bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbik7CitzdGF0aWMgdm9p ZCBFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50V2FpdChNZXJnZUFwcGVuZFN0YXRlICpub2RlKTsK KwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0luaXRNZXJnZUFwcGVuZApAQCAtNzIsNiArODMsOCBA QCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwg aW50IGVmbGFncykKIAlpbnQJCQlucGxhbnM7CiAJaW50CQkJaSwKIAkJCQlqOworCUJpdG1hcHNl dCAgKmFzeW5jcGxhbnM7CisJaW50CQkJbmFzeW5jcGxhbnM7CiAKIAkvKiBjaGVjayBmb3IgdW5z dXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShlZmxhZ3MgJiAoRVhFQ19GTEFHX0JBQ0tXQVJE IHwgRVhFQ19GTEFHX01BUkspKSk7CkBAIC0xMDcsNyArMTIwLDEwIEBAIEV4ZWNJbml0TWVyZ2VB cHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkg KiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCiAJCSAqLwogCQlpZiAo IXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkKKwkJewogCQkJbWVyZ2Vz dGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAt IDEpOworCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7 CisJCX0KIAl9CiAJZWxzZQogCXsKQEAgLTEyMCw2ICsxMzYsNyBAQCBFeGVjSW5pdE1lcmdlQXBw ZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJQXNz ZXJ0KG5wbGFucyA+IDApOwogCQltZXJnZXN0YXRlLT5tc192YWxpZF9zdWJwbGFucyA9IHZhbGlk c3VicGxhbnMgPQogCQkJYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKKwkJbWVy Z2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CiAJCW1lcmdlc3Rh dGUtPm1zX3BydW5lX3N0YXRlID0gTlVMTDsKIAl9CiAKQEAgLTEzNiwxMSArMTUzLDI1IEBAIEV4 ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQg ZWZsYWdzKQogCSAqIHRoZSByZXN1bHRzIGludG8gdGhlIG1lcmdlcGxhbnN0YXRlcyBhcnJheS4K IAkgKi8KIAlqID0gMDsKKwlhc3luY3BsYW5zID0gTlVMTDsKKwluYXN5bmNwbGFucyA9IDA7CisK IAlpID0gLTE7CiAJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHZhbGlkc3VicGxhbnMsIGkp KSA+PSAwKQogCXsKIAkJUGxhbgkgICAqaW5pdE5vZGUgPSAoUGxhbiAqKSBsaXN0X250aChub2Rl LT5tZXJnZXBsYW5zLCBpKTsKIAorCQkvKgorCQkgKiBSZWNvcmQgYXN5bmMgc3VicGxhbnMuICBX aGVuIGV4ZWN1dGluZyBFdmFsUGxhblF1YWwsIHdlIHRyZWF0IHRoZW0KKwkJICogYXMgc3luYyBv bmVzOyBkb24ndCBkbyB0aGlzIHdoZW4gaW5pdGlhbGl6aW5nIGFuIEV2YWxQbGFuUXVhbCBwbGFu CisJCSAqIHRyZWUuCisJCSAqLworCQlpZiAoaW5pdE5vZGUtPmFzeW5jX2NhcGFibGUgJiYgZXN0 YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpCisJCXsKKwkJCWFzeW5jcGxhbnMgPSBibXNfYWRk X21lbWJlcihhc3luY3BsYW5zLCBqKTsKKwkJCW5hc3luY3BsYW5zKys7CisJCX0KKwogCQltZXJn ZXBsYW5zdGF0ZXNbaisrXSA9IEV4ZWNJbml0Tm9kZShpbml0Tm9kZSwgZXN0YXRlLCBlZmxhZ3Mp OwogCX0KIApAQCAtMTcxLDYgKzIwMiw0NSBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBw ZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkgKi8KIAltZXJnZXN0YXRl LT5wcy5wc19Qcm9qSW5mbyA9IE5VTEw7CiAKKwkvKiBJbml0aWFsaXplIGFzeW5jIHN0YXRlICov CisJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNwbGFucyA9IGFzeW5jcGxhbnM7CisJbWVyZ2VzdGF0ZS0+ bXNfbmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKKwltZXJnZXN0YXRlLT5tc19hc3luY3JlcXVl c3RzID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19hc3luY3Jlc3VsdHMgPSBOVUxMOworCW1lcmdl c3RhdGUtPm1zX2hhc19hc3luY3Jlc3VsdHMgPSBOVUxMOworCW1lcmdlc3RhdGUtPm1zX2FzeW5j cmVtYWluID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19uZWVkcmVxdWVzdCA9IE5VTEw7CisJbWVy Z2VzdGF0ZS0+bXNfZXZlbnRzZXQgPSBOVUxMOworCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX2FzeW5j cGxhbnMgPSBOVUxMOworCisJaWYgKG5hc3luY3BsYW5zID4gMCkKKwl7CisJCW1lcmdlc3RhdGUt Pm1zX2FzeW5jcmVxdWVzdHMgPSAoQXN5bmNSZXF1ZXN0ICoqKQorCQkJcGFsbG9jMChucGxhbnMg KiBzaXplb2YoQXN5bmNSZXF1ZXN0ICopKTsKKworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJt c19uZXh0X21lbWJlcihhc3luY3BsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJQXN5bmNSZXF1ZXN0 ICphcmVxOworCisJCQlhcmVxID0gcGFsbG9jKHNpemVvZihBc3luY1JlcXVlc3QpKTsKKwkJCWFy ZXEtPnJlcXVlc3RvciA9IChQbGFuU3RhdGUgKikgbWVyZ2VzdGF0ZTsKKwkJCWFyZXEtPnJlcXVl c3RlZSA9IG1lcmdlcGxhbnN0YXRlc1tpXTsKKwkJCWFyZXEtPnJlcXVlc3RfaW5kZXggPSBpOwor CQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOworCQkJYXJlcS0+cmVxdWVzdF9jb21w bGV0ZSA9IGZhbHNlOworCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKKworCQkJbWVyZ2VzdGF0ZS0+ bXNfYXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7CisJCX0KKworCQltZXJnZXN0YXRlLT5tc19hc3lu Y3Jlc3VsdHMgPSAoVHVwbGVUYWJsZVNsb3QgKiopCisJCQlwYWxsb2MwKG5wbGFucyAqIHNpemVv ZihUdXBsZVRhYmxlU2xvdCAqKSk7CisKKwkJaWYgKG1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBs YW5zX2lkZW50aWZpZWQpCisJCQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhtZXJnZXN0YXRl KTsKKwl9CisKIAkvKgogCSAqIGluaXRpYWxpemUgc29ydC1rZXkgaW5mb3JtYXRpb24KIAkgKi8K QEAgLTIyNywxNCArMjk3LDE4IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkK IAkJaWYgKG5vZGUtPm1zX25wbGFucyA9PSAwKQogCQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5v ZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CiAKLQkJLyoKLQkJICogSWYgd2UndmUgeWV0IHRv IGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhlbiBkbyBzbyBub3cuICBJZgotCQkgKiBy dW4tdGltZSBwcnVuaW5nIGlzIGRpc2FibGVkIHRoZW4gdGhlIHZhbGlkIHN1YnBsYW5zIHdpbGwg YWx3YXlzIGJlCi0JCSAqIHNldCB0byBhbGwgc3VicGxhbnMuCi0JCSAqLwotCQlpZiAobm9kZS0+ bXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKKwkJLyogSWYgd2UndmUgeWV0IHRvIGRldGVybWlu ZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhlbiBkbyBzbyBub3cuICovCisJCWlmICghbm9kZS0+bXNf dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJewogCQkJbm9kZS0+bXNfdmFsaWRfc3VicGxh bnMgPQogCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5tc19wcnVuZV9zdGF0ZSwg ZmFsc2UsIE5VTEwpOworCQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRy dWU7CisJCQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhub2RlKTsKKwkJfQorCisJCS8qIElm IHRoZXJlIGFyZSBhbnkgYXN5bmMgc3VicGxhbnMsIGJlZ2luIGV4ZWN1dGluZyB0aGVtLiAqLwor CQlpZiAobm9kZS0+bXNfbmFzeW5jcGxhbnMgPiAwKQorCQkJRXhlY01lcmdlQXBwZW5kQXN5bmNC ZWdpbihub2RlKTsKIAogCQkvKgogCQkgKiBGaXJzdCB0aW1lIHRocm91Z2g6IHB1bGwgdGhlIGZp cnN0IHR1cGxlIGZyb20gZWFjaCB2YWxpZCBzdWJwbGFuLApAQCAtMjQ3LDYgKzMyMSwxNiBAQCBF eGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCQlpZiAoIVR1cElzTnVsbChub2Rl LT5tc19zbG90c1tpXSkpCiAJCQkJYmluYXJ5aGVhcF9hZGRfdW5vcmRlcmVkKG5vZGUtPm1zX2hl YXAsIEludDMyR2V0RGF0dW0oaSkpOwogCQl9CisKKwkJLyogTG9vayBhdCB2YWxpZCBhc3luYyBz dWJwbGFucyAqLworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2Rl LT5tc192YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJRXhlY01lcmdlQXBwZW5k QXN5bmNHZXROZXh0KG5vZGUsIGkpOworCQkJaWYgKCFUdXBJc051bGwobm9kZS0+bXNfc2xvdHNb aV0pKQorCQkJCWJpbmFyeWhlYXBfYWRkX3Vub3JkZXJlZChub2RlLT5tc19oZWFwLCBJbnQzMkdl dERhdHVtKGkpKTsKKwkJfQorCiAJCWJpbmFyeWhlYXBfYnVpbGQobm9kZS0+bXNfaGVhcCk7CiAJ CW5vZGUtPm1zX2luaXRpYWxpemVkID0gdHJ1ZTsKIAl9CkBAIC0yNjEsNyArMzQ1LDEzIEBAIEV4 ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICogdG8gbm90IHB1bGwgdHVwbGVz IHVudGlsIG5lY2Vzc2FyeS4pCiAJCSAqLwogCQlpID0gRGF0dW1HZXRJbnQzMihiaW5hcnloZWFw X2ZpcnN0KG5vZGUtPm1zX2hlYXApKTsKLQkJbm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05v ZGUobm9kZS0+bWVyZ2VwbGFuc1tpXSk7CisJCWlmIChibXNfaXNfbWVtYmVyKGksIG5vZGUtPm1z X2FzeW5jcGxhbnMpKQorCQkJRXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0KG5vZGUsIGkpOwor CQllbHNlCisJCXsKKwkJCUFzc2VydChibXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zX3ZhbGlkX3N1 YnBsYW5zKSk7CisJCQlub2RlLT5tc19zbG90c1tpXSA9IEV4ZWNQcm9jTm9kZShub2RlLT5tZXJn ZXBsYW5zW2ldKTsKKwkJfQogCQlpZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkpCiAJ CQliaW5hcnloZWFwX3JlcGxhY2VfZmlyc3Qobm9kZS0+bXNfaGVhcCwgSW50MzJHZXREYXR1bShp KSk7CiAJCWVsc2UKQEAgLTI3Nyw2ICszNjcsOCBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRl ICpwc3RhdGUpCiAJewogCQlpID0gRGF0dW1HZXRJbnQzMihiaW5hcnloZWFwX2ZpcnN0KG5vZGUt Pm1zX2hlYXApKTsKIAkJcmVzdWx0ID0gbm9kZS0+bXNfc2xvdHNbaV07CisJCS8qIEZvciBhc3lu YyBwbGFuIHJlY29yZCB0aGF0IHdlIGNhbiBnZXQgdGhlIG5leHQgdHVwbGUgKi8KKwkJbm9kZS0+ bXNfaGFzX2FzeW5jcmVzdWx0cyA9IGJtc19kZWxfbWVtYmVyKG5vZGUtPm1zX2hhc19hc3luY3Jl c3VsdHMsIGkpOwogCX0KIAogCXJldHVybiByZXN1bHQ7CkBAIC0zNTYsNiArNDQ4LDcgQEAgdm9p ZAogRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiB7CiAJaW50 CQkJaTsKKwlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUtPm1zX25hc3luY3BsYW5zOwogCiAJLyoK IAkgKiBJZiBhbnkgUEFSQU1fRVhFQyBQYXJhbXMgdXNlZCBpbiBwcnVuaW5nIGV4cHJlc3Npb25z IGhhdmUgY2hhbmdlZCwgdGhlbgpAQCAtMzY2LDggKzQ1OSwxMSBAQCBFeGVjUmVTY2FuTWVyZ2VB cHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIAkJYm1zX292ZXJsYXAobm9kZS0+cHMuY2hn UGFyYW0sCiAJCQkJCW5vZGUtPm1zX3BydW5lX3N0YXRlLT5leGVjcGFyYW1pZHMpKQogCXsKKwkJ bm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IGZhbHNlOwogCQlibXNfZnJlZShu b2RlLT5tc192YWxpZF9zdWJwbGFucyk7CiAJCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gTlVM TDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucyk7CisJCW5vZGUtPm1zX3Zh bGlkX2FzeW5jcGxhbnMgPSBOVUxMOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBub2RlLT5tc19u cGxhbnM7IGkrKykKQEAgLTM4OCw2ICs0ODQsMzY3IEBAIEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChN ZXJnZUFwcGVuZFN0YXRlICpub2RlKQogCQlpZiAoc3Vibm9kZS0+Y2hnUGFyYW0gPT0gTlVMTCkK IAkJCUV4ZWNSZVNjYW4oc3Vibm9kZSk7CiAJfQorCisJLyogUmVzZXQgYXN5bmMgc3RhdGUgKi8K KwlpZiAobmFzeW5jcGxhbnMgPiAwKQorCXsKKwkJaSA9IC0xOworCQl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIobm9kZS0+bXNfYXN5bmNwbGFucywgaSkpID49IDApCisJCXsKKwkJCUFzeW5j UmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2FzeW5jcmVxdWVzdHNbaV07CisKKwkJCWFyZXEtPmNh bGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKKwkJCWFyZXEtPnJlcXVlc3RfY29tcGxldGUgPSBmYWxz ZTsKKwkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7CisJCX0KKworCQlibXNfZnJlZShub2RlLT5tc19h c3luY3JlbWFpbik7CisJCW5vZGUtPm1zX2FzeW5jcmVtYWluID0gTlVMTDsKKwkJYm1zX2ZyZWUo bm9kZS0+bXNfbmVlZHJlcXVlc3QpOworCQlub2RlLT5tc19uZWVkcmVxdWVzdCA9IE5VTEw7CisJ CWJtc19mcmVlKG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpOworCQlub2RlLT5tc19oYXNfYXN5 bmNyZXN1bHRzID0gTlVMTDsKKwl9CiAJYmluYXJ5aGVhcF9yZXNldChub2RlLT5tc19oZWFwKTsK IAlub2RlLT5tc19pbml0aWFsaXplZCA9IGZhbHNlOwogfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAg ICAgICAgICAgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMKKyAqCisgKiAgICAgICAgICAgICAg Q2xhc3NpZnkgdGhlIG5vZGUncyBtc192YWxpZF9zdWJwbGFucyBpbnRvIHN5bmMgb25lcyBhbmQK KyAqICAgICAgICAgICAgICBhc3luYyBvbmVzLCBhZGp1c3QgaXQgdG8gY29udGFpbiBzeW5jIG9u ZXMgb25seSwgYW5kIHNhdmUKKyAqICAgICAgICAgICAgICBhc3luYyBvbmVzIGluIHRoZSBub2Rl J3MgbXNfdmFsaWRfYXN5bmNwbGFucy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK2Ns YXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCit7CisJQXNz ZXJ0KG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOworCisJLyogTm90aGluZyB0 byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgc3VicGxhbnMuICovCisJaWYgKGJtc19pc19lbXB0 eShub2RlLT5tc192YWxpZF9zdWJwbGFucykpCisJeworCQlub2RlLT5tc19hc3luY3JlbWFpbiA9 IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKiBObyB2YWxpZCBhc3luYyBzdWJwbGFucyBpZGVu dGlmaWVkLiAqLworCWlmICghY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnNfY29tbW9uKAorCQkJ CQkJCQkJCSAgICZub2RlLT5tc192YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJCQkgICBub2RlLT5t c19hc3luY3BsYW5zLAorCQkJCQkJCQkJCSAgICZub2RlLT5tc192YWxpZF9hc3luY3BsYW5zKSkK KwkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAg ICAgICAgICAgRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdpbgorICoKKyAqICAgICAgICAgICAgICBC ZWdpbiBleGVjdXRpbmcgZGVzaWduZWQgYXN5bmMtY2FwYWJsZSBzdWJwbGFucy4KKyAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNNZXJnZUFwcGVuZEFzeW5jQmVnaW4oTWVyZ2VBcHBl bmRTdGF0ZSAqbm9kZSkKK3sKKwlpbnQJCQlpOworCisJLyogQmFja3dhcmQgc2NhbiBpcyBub3Qg c3VwcG9ydGVkIGJ5IGFzeW5jLWF3YXJlIE1lcmdlQXBwZW5kcy4gKi8KKwlBc3NlcnQoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7CisKKwkvKiBX ZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5zICovCisJ QXNzZXJ0KG5vZGUtPm1zX25wbGFucyA+IDApOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNh bGxlZCB3aGVuIHRoZXJlIGFyZSBubyBhc3luYyBzdWJwbGFucy4gKi8KKwlBc3NlcnQobm9kZS0+ bXNfbmFzeW5jcGxhbnMgPiAwKTsKKworCS8qIEV4ZWNNZXJnZUFwcGVuZCgpIGlkZW50aWZpZXMg dmFsaWQgc3VicGxhbnMgKi8KKwlBc3NlcnQobm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRp ZmllZCk7CisKKwkvKiBJbml0aWFsaXplIHN0YXRlIHZhcmlhYmxlcy4gKi8KKwlub2RlLT5tc19h c3luY3JlbWFpbiA9IGJtc19jb3B5KG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMpOworCisJLyog Tm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCisJ aWYgKGJtc19pc19lbXB0eShub2RlLT5tc19hc3luY3JlbWFpbikpCisJCXJldHVybjsKKworCS8q IE1ha2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8K KwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zX3ZhbGlkX2Fz eW5jcGxhbnMsIGkpKSA+PSAwKQorCXsKKwkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+bXNf YXN5bmNyZXF1ZXN0c1tpXTsKKworCQlBc3NlcnQoYXJlcS0+cmVxdWVzdF9pbmRleCA9PSBpKTsK KwkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKKworCQkvKiBEbyB0aGUgYWN0dWFs IHdvcmsuICovCisJCUV4ZWNBc3luY1JlcXVlc3QoYXJlcSk7CisJfQorfQorCisvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKiAgICAgICAgICAgICAgRXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0CisgKgorICogICAg ICAgICAgICAgIEdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIHNwZWNpZmllZCBhc3luY2hyb25vdXMg c3VicGxhbi4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNNZXJnZUFwcGVuZEFz eW5jR2V0TmV4dChNZXJnZUFwcGVuZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pCit7CisJbm9kZS0+ bXNfc2xvdHNbbXBsYW5dID0gTlVMTDsKKworCS8qIFJlcXVlc3QgYSB0dXBsZSBhc3luY2hyb25v dXNseS4gKi8KKwlpZiAoRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KG5vZGUsIG1wbGFuKSkK KwkJcmV0dXJuOworCisJLyoKKwkgKiBub2RlLT5tc19hc3luY3JlbWFpbiBjYW4gYmUgTlVMTCBp ZiB3ZSBoYXZlIGZldGNoZWQgdHVwbGVzLCBidXQgaGF2ZW4ndAorCSAqIHJldHVybmVkIHRoZW0g eWV0LiBJbiB0aGlzIGNhc2UgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KCkgYWJvdmUKKwkg KiBqdXN0IHJldHVybnMgdHVwbGVzIHdpdGhvdXQgcGVyZm9ybWluZyBhIHJlcXVlc3QuCisJICov CisJd2hpbGUgKGJtc19pc19tZW1iZXIobXBsYW4sIG5vZGUtPm1zX2FzeW5jcmVtYWluKSkKKwl7 CisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogV2FpdCBvciBwb2xsIGZvciBhc3lu YyBldmVudHMuICovCisJCUV4ZWNNZXJnZUFwcGVuZEFzeW5jRXZlbnRXYWl0KG5vZGUpOworCisJ CS8qIFJlcXVlc3QgYSB0dXBsZSBhc3luY2hyb25vdXNseS4gKi8KKwkJaWYgKEV4ZWNNZXJnZUFw cGVuZEFzeW5jUmVxdWVzdChub2RlLCBtcGxhbikpCisJCQlyZXR1cm47CisKKwkJLyoKKwkJICog V2FpdGluZyB1bnRpbCB0aGVyZSdzIG5vIGFzeW5jIHJlcXVlc3RzIHBlbmRpbmcgb3Igd2UgZ290 IHNvbWUKKwkJICogdHVwbGVzIGZyb20gb3VyIHJlcXVlc3QKKwkJICovCisJfQorCisJLyogTm8g dHVwbGVzICovCisJcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgRXhl Y01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0CisgKgorICogICAgICAgICAgICAgIFJlcXVlc3QgYSB0 dXBsZSBhc3luY2hyb25vdXNseS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIGJvb2wKK0V4ZWNN ZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChNZXJnZUFwcGVuZFN0YXRlICpub2RlLCBpbnQgbXBsYW4p Cit7CisJQml0bWFwc2V0ICAqbmVlZHJlcXVlc3Q7CisJaW50CQkJaTsKKworCS8qCisJICogSWYg d2UndmUgYWxyZWFkeSBmZXRjaGVkIG5lY2Vzc2FyeSBkYXRhLCBqdXN0IHJldHVybiBpdAorCSAq LworCWlmIChibXNfaXNfbWVtYmVyKG1wbGFuLCBub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzKSkK Kwl7CisJCW5vZGUtPm1zX3Nsb3RzW21wbGFuXSA9IG5vZGUtPm1zX2FzeW5jcmVzdWx0c1ttcGxh bl07CisJCXJldHVybiB0cnVlOworCX0KKworCS8qCisJICogR2V0IGEgbGlzdCBvZiBtZW1iZXJz IHdoaWNoIGNhbiBwcm9jZXNzIHJlcXVlc3QgYW5kIGRvbid0IGhhdmUgZGF0YQorCSAqIHJlYWR5 LgorCSAqLworCW5lZWRyZXF1ZXN0ID0gTlVMTDsKKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1z X25leHRfbWVtYmVyKG5vZGUtPm1zX25lZWRyZXF1ZXN0LCBpKSkgPj0gMCkKKwl7CisJCWlmICgh Ym1zX2lzX21lbWJlcihpLCBub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzKSkKKwkJCW5lZWRyZXF1 ZXN0ID0gYm1zX2FkZF9tZW1iZXIobmVlZHJlcXVlc3QsIGkpOworCX0KKworCS8qCisJICogSWYg dGhlcmUncyBubyBtZW1iZXJzLCB3aGljaCBzdGlsbCBuZWVkIHJlcXVlc3QsIG5vIG5lZWQgdG8g c2VuZCBpdC4KKwkgKi8KKwlpZiAoYm1zX2lzX2VtcHR5KG5lZWRyZXF1ZXN0KSkKKwkJcmV0dXJu IGZhbHNlOworCisJLyogQ2xlYXIgbXNfbmVlZHJlcXVlc3QgZmxhZywgYXMgd2UgYXJlIGdvaW5n IHRvIHNlbmQgcmVxdWVzdHMgbm93ICovCisJbm9kZS0+bXNfbmVlZHJlcXVlc3QgPSBibXNfZGVs X21lbWJlcnMobm9kZS0+bXNfbmVlZHJlcXVlc3QsIG5lZWRyZXF1ZXN0KTsKKworCS8qIE1ha2Ug YSBuZXcgcmVxdWVzdCBmb3IgZWFjaCBvZiB0aGUgYXN5bmMgc3VicGxhbnMgdGhhdCBuZWVkIGl0 LiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobmVlZHJlcXVlc3Qs IGkpKSA+PSAwKQorCXsKKwkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1 ZXN0c1tpXTsKKworCQkvKgorCQkgKiBXZSd2ZSBqdXN0IGNoZWNrZWQgdGhhdCBzdWJwbGFuIGRv ZXNuJ3QgYWxyZWFkeSBoYXZlIHNvbWUgZmV0Y2hlZAorCQkgKiBkYXRhCisJCSAqLworCQlBc3Nl cnQoIWJtc19pc19tZW1iZXIoaSwgbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykpOworCisJCS8q IERvIHRoZSBhY3R1YWwgd29yay4gKi8KKwkJRXhlY0FzeW5jUmVxdWVzdChhcmVxKTsKKwl9CisJ Ym1zX2ZyZWUobmVlZHJlcXVlc3QpOworCisJLyogUmV0dXJuIG5lZWRlZCBhc3luY2hyb25vdXNs eS1nZW5lcmF0ZWQgcmVzdWx0cyBpZiBhbnkuICovCisJaWYgKGJtc19pc19tZW1iZXIobXBsYW4s IG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQorCXsKKwkJbm9kZS0+bXNfc2xvdHNbbXBsYW5d ID0gbm9kZS0+bXNfYXN5bmNyZXN1bHRzW21wbGFuXTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJ cmV0dXJuIGZhbHNlOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgRXhlY0FzeW5j TWVyZ2VBcHBlbmRSZXNwb25zZQorICoKKyAqICAgICAgICAgICAgICBSZWNlaXZlIGEgcmVzcG9u c2UgZnJvbSBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCB3ZSBtYWRlLgorICogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov Cit2b2lkCitFeGVjQXN5bmNNZXJnZUFwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkK K3sKKwlNZXJnZUFwcGVuZFN0YXRlICpub2RlID0gKE1lcmdlQXBwZW5kU3RhdGUgKikgYXJlcS0+ cmVxdWVzdG9yOworCVR1cGxlVGFibGVTbG90ICpzbG90ID0gYXJlcS0+cmVzdWx0OworCisJLyog VGhlIHJlc3VsdCBzaG91bGQgYmUgYSBUdXBsZVRhYmxlU2xvdCBvciBOVUxMLiAqLworCUFzc2Vy dChzbG90ID09IE5VTEwgfHwgSXNBKHNsb3QsIFR1cGxlVGFibGVTbG90KSk7CisJLyogV2Ugc2hv dWxkIGhhbmRsZSBwcmV2aW91cyBhc3luYyByZXN1bHQgcHJpb3IgdG8gZ2V0dGluZyBuZXcgb25l ICovCisJQXNzZXJ0KCFibXNfaXNfbWVtYmVyKGFyZXEtPnJlcXVlc3RfaW5kZXgsIG5vZGUtPm1z X2hhc19hc3luY3Jlc3VsdHMpKTsKKworCW5vZGUtPm1zX2FzeW5jcmVzdWx0c1thcmVxLT5yZXF1 ZXN0X2luZGV4XSA9IE5VTEw7CisJLyogTm90aGluZyB0byBkbyBpZiB0aGUgcmVxdWVzdCBpcyBw ZW5kaW5nLiAqLworCWlmICghYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSkKKwl7CisJCS8qIFRoZSBy ZXF1ZXN0IHdvdWxkIGhhdmUgYmVlbiBwZW5kaW5nIGZvciBhIGNhbGxiYWNrLiAqLworCQlBc3Nl cnQoYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiB0aGUg cmVzdWx0IGlzIE5VTEwgb3IgYW4gZW1wdHkgc2xvdCwgdGhlcmUncyBub3RoaW5nIG1vcmUgdG8g ZG8uICovCisJaWYgKFR1cElzTnVsbChzbG90KSkKKwl7CisJCS8qIFRoZSBlbmRpbmcgc3VicGxh biB3b3VsZG4ndCBoYXZlIGJlZW4gcGVuZGluZyBmb3IgYSBjYWxsYmFjay4gKi8KKwkJQXNzZXJ0 KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKKwkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBibXNf ZGVsX21lbWJlcihub2RlLT5tc19hc3luY3JlbWFpbiwKKwkJCQkJCQkJCQkJICBhcmVxLT5yZXF1 ZXN0X2luZGV4KTsKKwkJcmV0dXJuOworCX0KKworCS8qIE1hcmsgdGhhdCB0aGUgYXN5bmMgcmVx dWVzdCBoYXMgYSByZXN1bHQgKi8KKwlub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzID0gYm1zX2Fk ZF9tZW1iZXIobm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cywKKwkJCQkJCQkJCQkJICAgYXJlcS0+ cmVxdWVzdF9pbmRleCk7CisJLyogU2F2ZSByZXN1bHQgc28gd2UgY2FuIHJldHVybiBpdC4gKi8K Kwlub2RlLT5tc19hc3luY3Jlc3VsdHNbYXJlcS0+cmVxdWVzdF9pbmRleF0gPSBzbG90OworCisJ LyoKKwkgKiBNYXJrIHRoZSBzdWJwbGFuIHRoYXQgcmV0dXJuZWQgYSByZXN1bHQgYXMgcmVhZHkg Zm9yIGEgbmV3IHJlcXVlc3QuICBXZQorCSAqIGRvbid0IGxhdW5jaCBhbm90aGVyIG9uZSBoZXJl IGltbWVkaWF0ZWx5IGJlY2F1c2UgaXQgbWlnaHQgY29tcGxldGUuCisJICovCisJbm9kZS0+bXNf bmVlZHJlcXVlc3QgPSBibXNfYWRkX21lbWJlcihub2RlLT5tc19uZWVkcmVxdWVzdCwKKwkJCQkJ CQkJCQkgIGFyZXEtPnJlcXVlc3RfaW5kZXgpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJRXhlY01l cmdlQXBwZW5kQXN5bmNFdmVudFdhaXQKKyAqCisgKgkJV2FpdCBvciBwb2xsIGZvciBmaWxlIGRl c2NyaXB0b3IgZXZlbnRzIGFuZCBmaXJlIGNhbGxiYWNrcy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3Rh dGljIHZvaWQKK0V4ZWNNZXJnZUFwcGVuZEFzeW5jRXZlbnRXYWl0KE1lcmdlQXBwZW5kU3RhdGUg Km5vZGUpCit7CisJaW50CQkJbmV2ZW50cyA9IG5vZGUtPm1zX25hc3luY3BsYW5zICsgMjsgLyog b25lIGZvciBQTSBkZWF0aCBhbmQKKwkJCQkJCQkJCQkJCQkgKiBvbmUgZm9yIGxhdGNoICovCisJ V2FpdEV2ZW50CW9jY3VycmVkX2V2ZW50W0VWRU5UX0JVRkZFUl9TSVpFXTsKKwlpbnQJCQlub2Nj dXJyZWQ7CisJaW50CQkJaTsKKworCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0 aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCisJQXNzZXJ0KGJtc19udW1fbWVt YmVycyhub2RlLT5tc19hc3luY3JlbWFpbikgPiAwKTsKKworCW5vZGUtPm1zX2V2ZW50c2V0ID0g Q3JlYXRlV2FpdEV2ZW50U2V0KEN1cnJlbnRSZXNvdXJjZU93bmVyLCBuZXZlbnRzKTsKKwlBZGRX YWl0RXZlbnRUb1NldChub2RlLT5tc19ldmVudHNldCwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgUEdJ TlZBTElEX1NPQ0tFVCwKKwkJCQkJICBOVUxMLCBOVUxMKTsKKworCS8qIEdpdmUgZWFjaCB3YWl0 aW5nIHN1YnBsYW4gYSBjaGFuY2UgdG8gYWRkIGFuIGV2ZW50LiAqLworCWkgPSAtMTsKKwl3aGls ZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfYXN5bmNwbGFucywgaSkpID49IDApCisJ eworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ldOworCisJ CWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQorCQkJRXhlY0FzeW5jQ29uZmlndXJlV2FpdChh cmVxKTsKKwl9CisKKwkvKgorCSAqIE5vIG5lZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBpZiBu b25lIG9mIHRoZSBzdWJwbGFucyBjb25maWd1cmVkIGFueQorCSAqIGV2ZW50cy4KKwkgKi8KKwlp ZiAoR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMobm9kZS0+bXNfZXZlbnRzZXQpID09IDEpCisJ eworCQlGcmVlV2FpdEV2ZW50U2V0KG5vZGUtPm1zX2V2ZW50c2V0KTsKKwkJbm9kZS0+bXNfZXZl bnRzZXQgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBBZGQgdGhlIHByb2Nlc3Mg bGF0Y2ggdG8gdGhlIHNldCwgc28gdGhhdCB3ZSB3YWtlIHVwIHRvIHByb2Nlc3MgdGhlCisJICog c3RhbmRhcmQgaW50ZXJydXB0cyB3aXRoIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkuCisJICoKKwkg KiBOT1RFOiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBpdCdzIGltcG9ydGFudCB0aGF0IHRoaXMg aXMgYWRkZWQgdG8gdGhlCisJICogV2FpdEV2ZW50U2V0IGFmdGVyIHRoZSBFeGVjQXN5bmNDb25m aWd1cmVXYWl0KCkgY2FsbHMuICBOYW1lbHksCisJICogcG9zdGdyZXNfZmR3IGNhbGxzICJHZXRO dW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhzZXQpID09IDEiIHRvIGNoZWNrIGlmCisJICogYW55IG90 aGVyIGV2ZW50cyBhcmUgaW4gdGhlIHNldC4gIFRoYXQncyBhIHBvb3IgZGVzaWduLCBpdCdzCisJ ICogcXVlc3Rpb25hYmxlIGZvciBwb3N0Z3Jlc19mZHcgdG8gYmUgZG9pbmcgdGhhdCBpbiB0aGUg Zmlyc3QgcGxhY2UsIGJ1dAorCSAqIHdlIGNhbm5vdCBjaGFuZ2UgaXQgbm93LiAgVGhlIHBhdHRl cm4gaGFzIHBvc3NpYmx5IGJlZW4gY29waWVkIHRvIG90aGVyCisJICogZXh0ZW5zaW9ucyB0b28u CisJICovCisJQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+bXNfZXZlbnRzZXQsIFdMX0xBVENIX1NF VCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJICBNeUxhdGNoLCBOVUxMKTsKKworCS8qIFJldHVy biBhdCBtb3N0IEVWRU5UX0JVRkZFUl9TSVpFIGV2ZW50cyBpbiBvbmUgY2FsbC4gKi8KKwlpZiAo bmV2ZW50cyA+IEVWRU5UX0JVRkZFUl9TSVpFKQorCQluZXZlbnRzID0gRVZFTlRfQlVGRkVSX1NJ WkU7CisKKwkvKgorCSAqIFdhaXQgdW50aWwgYXQgbGVhc3Qgb25lIGV2ZW50IG9jY3Vycy4KKwkg Ki8KKwlub2NjdXJyZWQgPSBXYWl0RXZlbnRTZXRXYWl0KG5vZGUtPm1zX2V2ZW50c2V0LCAtMSAv KiBubyB0aW1lb3V0ICovICwgb2NjdXJyZWRfZXZlbnQsCisJCQkJCQkJCSBuZXZlbnRzLCBXQUlU X0VWRU5UX0FQUEVORF9SRUFEWSk7CisJRnJlZVdhaXRFdmVudFNldChub2RlLT5tc19ldmVudHNl dCk7CisJbm9kZS0+bXNfZXZlbnRzZXQgPSBOVUxMOworCWlmIChub2NjdXJyZWQgPT0gMCkKKwkJ cmV0dXJuOworCisJLyogRGVsaXZlciBub3RpZmljYXRpb25zLiAqLworCWZvciAoaSA9IDA7IGkg PCBub2NjdXJyZWQ7IGkrKykKKwl7CisJCVdhaXRFdmVudCAgKncgPSAmb2NjdXJyZWRfZXZlbnRb aV07CisKKwkJLyoKKwkJICogRWFjaCB3YWl0aW5nIHN1YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0 ZXJlZCBpdHMgd2FpdCBldmVudCB3aXRoCisJCSAqIHVzZXJfZGF0YSBwb2ludGluZyBiYWNrIHRv IGl0cyBBc3luY1JlcXVlc3QuCisJCSAqLworCQlpZiAoKHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9S RUFEQUJMRSkgIT0gMCkKKwkJeworCQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVz dCAqKSB3LT51c2VyX2RhdGE7CisKKwkJCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQorCQkJ eworCQkJCS8qCisJCQkJICogTWFyayBpdCBhcyBubyBsb25nZXIgbmVlZGluZyBhIGNhbGxiYWNr LiAgV2UgbXVzdCBkbyB0aGlzCisJCQkJICogYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFj ayBpbiBjYXNlIHRoZSBjYWxsYmFjayByZXNldHMKKwkJCQkgKiB0aGUgZmxhZy4KKwkJCQkgKi8K KwkJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7CisKKwkJCQkvKiBEbyB0aGUgYWN0 dWFsIHdvcmsuICovCisJCQkJRXhlY0FzeW5jTm90aWZ5KGFyZXEpOworCQkJfQorCQl9CisKKwkJ LyogSGFuZGxlIHN0YW5kYXJkIGludGVycnVwdHMgKi8KKwkJaWYgKCh3LT5ldmVudHMgJiBXTF9M QVRDSF9TRVQpICE9IDApCisJCXsKKwkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlDSEVDS19G T1JfSU5URVJSVVBUUygpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3Rz aXplLmMKaW5kZXggNTZkNDUyODdjODkuLmRjOWQyYzMxYTgxIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE2NCw2ICsxNjQsNyBAQCBib29sCQllbmFibGVfcGFyYWxs ZWxfaGFzaCA9IHRydWU7CiBib29sCQllbmFibGVfcGFydGl0aW9uX3BydW5pbmcgPSB0cnVlOwog Ym9vbAkJZW5hYmxlX3ByZXNvcnRlZF9hZ2dyZWdhdGUgPSB0cnVlOwogYm9vbAkJZW5hYmxlX2Fz eW5jX2FwcGVuZCA9IHRydWU7Citib29sCQllbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kID0gdHJ1 ZTsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBs YW4uYwppbmRleCA1ZDcwNGUzOGYzNy4uNWEzZmMwZDI4MWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTE0NjYsNiArMTQ2Niw3IEBAIGNyZWF0ZV9tZXJnZV9h cHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgs CiAJTGlzdAkgICAqc3VicGxhbnMgPSBOSUw7CiAJTGlzdENlbGwgICAqc3VicGF0aHM7CiAJUmVs T3B0SW5mbyAqcmVsID0gYmVzdF9wYXRoLT5wYXRoLnBhcmVudDsKKwlib29sCQljb25zaWRlcl9h c3luYyA9IGZhbHNlOwogCiAJLyoKIAkgKiBXZSBkb24ndCBoYXZlIHRoZSBhY3R1YWwgY3JlYXRp b24gb2YgdGhlIE1lcmdlQXBwZW5kIG5vZGUgc3BsaXQgb3V0CkBAIC0xNDgxLDYgKzE0ODIsMTAg QEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVu ZFBhdGggKmJlc3RfcGF0aCwKIAlub2RlLT5hcHByZWxpZHMgPSByZWwtPnJlbGlkczsKIAlub2Rl LT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IGJlc3RfcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlk X3NldHM7CiAKKwljb25zaWRlcl9hc3luYyA9IChlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kICYm CisJCQkJCSAgIWJlc3RfcGF0aC0+cGF0aC5wYXJhbGxlbF9zYWZlICYmCisJCQkJCSAgbGlzdF9s ZW5ndGgoYmVzdF9wYXRoLT5zdWJwYXRocykgPiAxKTsKKwogCS8qCiAJICogQ29tcHV0ZSBzb3J0 IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgog CSAqIEJlY2F1c2Ugd2UgcGFzcyBhZGp1c3RfdGxpc3RfaW5fcGxhY2UgPSB0cnVlLCB3ZSBtYXkg aWdub3JlIHRoZQpAQCAtMTU4MSw2ICsxNTg2LDEwIEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxh bihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJCQlzdWJw bGFuID0gc29ydF9wbGFuOwogCQl9CiAKKwkJLyogSWYgbmVlZGVkLCBjaGVjayB0byBzZWUgaWYg c3VicGxhbiBjYW4gYmUgZXhlY3V0ZWQgYXN5bmNocm9ub3VzbHkgKi8KKwkJaWYgKGNvbnNpZGVy X2FzeW5jKQorCQkJbWFya19hc3luY19jYXBhYmxlX3BsYW4oc3VicGxhbiwgc3VicGF0aCk7CisK IAkJc3VicGxhbnMgPSBsYXBwZW5kKHN1YnBsYW5zLCBzdWJwbGFuKTsKIAl9CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggYTVhMGVkZjI1MzQuLmU3MzY0 Nzk2MjZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJz LmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAt ODIxLDYgKzgyMSwxNCBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUgPT4g J2VuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAn UEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCisgIHNob3J0X2Rl c2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNlIG9mIGFzeW5jIG1lcmdlIGFwcGVuZCBw bGFucy4nLAorICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLAorICB2YXJpYWJsZSA9PiAnZW5hYmxl X2FzeW5jX21lcmdlX2FwcGVuZCcsCisgIGJvb3RfdmFsID0+ICd0cnVlJywKK30sCisKKwogeyBu YW1lID0+ICdlbmFibGVfYml0bWFwc2NhbicsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQ R0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywKICAgc2hvcnRfZGVz YyA9PiAnRW5hYmxlcyB0aGUgcGxhbm5lclwncyB1c2Ugb2YgYml0bWFwLXNjYW4gcGxhbnMuJywK ICAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBlNjg2ZDg4YWZjNC4uNzM0MzAyMzUzZmYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTQxMCw2 ICs0MTAsNyBAQAogIyAtIFBsYW5uZXIgTWV0aG9kIENvbmZpZ3VyYXRpb24gLQogCiAjZW5hYmxl X2FzeW5jX2FwcGVuZCA9IG9uCisjZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCA9IG9uCiAjZW5h YmxlX2JpdG1hcHNjYW4gPSBvbgogI2VuYWJsZV9nYXRoZXJtZXJnZSA9IG9uCiAjZW5hYmxlX2hh c2hhZ2cgPSBvbgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBw ZW5kLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaAppbmRleCBkZmNm NDUwOTliYS4uMjI1NWNjNjhiMjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25v ZGVNZXJnZUFwcGVuZC5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVu ZC5oCkBAIC0xOSw1ICsxOSw2IEBACiBleHRlcm4gTWVyZ2VBcHBlbmRTdGF0ZSAqRXhlY0luaXRN ZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3Mp OwogZXh0ZXJuIHZvaWQgRXhlY0VuZE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUp OwogZXh0ZXJuIHZvaWQgRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5v ZGUpOworZXh0ZXJuIHZvaWQgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZShBc3luY1JlcXVl c3QgKmFyZXEpOwogCiAjZW5kaWYJCQkJCQkJLyogTk9ERU1FUkdFQVBQRU5EX0ggKi8KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKaW5kZXggMDcxNmM1YTlhZWQuLjA3NDllOTZjOTQ3IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVj bm9kZXMuaApAQCAtMTU1NywxMCArMTU1Nyw2OSBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVu ZFN0YXRlCiAJVHVwbGVUYWJsZVNsb3QgKiptc19zbG90czsJLyogYXJyYXkgb2YgbGVuZ3RoIG1z X25wbGFucyAqLwogCXN0cnVjdCBiaW5hcnloZWFwICptc19oZWFwOyAvKiBiaW5hcnkgaGVhcCBv ZiBzbG90IGluZGljZXMgKi8KIAlib29sCQltc19pbml0aWFsaXplZDsgLyogYXJlIHN1YnBsYW5z IHN0YXJ0ZWQ/ICovCisJQml0bWFwc2V0ICAqbXNfYXN5bmNwbGFuczsJLyogYXN5bmNocm9ub3Vz IHBsYW5zIGluZGV4ZXMgKi8KKwlpbnQJCQltc19uYXN5bmNwbGFuczsgLyogIyBvZiBhc3luY2hy b25vdXMgcGxhbnMgKi8KKwlBc3luY1JlcXVlc3QgKiptc19hc3luY3JlcXVlc3RzOwkvKiBhcnJh eSBvZiBBc3luY1JlcXVlc3RzICovCisJVHVwbGVUYWJsZVNsb3QgKiptc19hc3luY3Jlc3VsdHM7 CS8qIHVucmV0dXJuZWQgcmVzdWx0cyBvZiBhc3luYyBwbGFucyAqLworCUJpdG1hcHNldCAgKm1z X2hhc19hc3luY3Jlc3VsdHM7CS8qIHBsYW5zIHdoaWNoIGhhdmUgYXN5bmMgcmVzdWx0cyAqLwor CUJpdG1hcHNldCAgKm1zX2FzeW5jcmVtYWluOyAvKiByZW1haW5pbmcgYXN5bmNocm9ub3VzIHBs YW5zICovCisJQml0bWFwc2V0ICAqbXNfbmVlZHJlcXVlc3Q7IC8qIGFzeW5jaHJvbm91cyBwbGFu cyBuZWVkaW5nIGEgbmV3IHJlcXVlc3QgKi8KKwlzdHJ1Y3QgV2FpdEV2ZW50U2V0ICptc19ldmVu dHNldDsJLyogV2FpdEV2ZW50U2V0IHVzZWQgdG8gY29uZmlndXJlIGZpbGUKKwkJCQkJCQkJCQkg KiBkZXNjcmlwdG9yIHdhaXQgZXZlbnRzICovCiAJc3RydWN0IFBhcnRpdGlvblBydW5lU3RhdGUg Km1zX3BydW5lX3N0YXRlOworCWJvb2wJCW1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQ7CS8q IGlzIG1zX3ZhbGlkX3N1YnBsYW5zIHZhbGlkPyAqLwogCUJpdG1hcHNldCAgKm1zX3ZhbGlkX3N1 YnBsYW5zOworCUJpdG1hcHNldCAgKm1zX3ZhbGlkX2FzeW5jcGxhbnM7CS8qIHZhbGlkIGFzeW5j aHJvbm91cyBwbGFucyBpbmRleGVzICovCiB9IE1lcmdlQXBwZW5kU3RhdGU7CiAKKy8qIEdldHRl cnMgZm9yIEFwcGVuZFN0YXRlIGFuZCBNZXJnZUFwcGVuZFN0YXRlICovCitzdGF0aWMgaW5saW5l IHN0cnVjdCBXYWl0RXZlbnRTZXQgKgorR2V0QXBwZW5kRXZlbnRTZXQoUGxhblN0YXRlICpwcykK K3sKKwlBc3NlcnQoSXNBKHBzLCBBcHBlbmRTdGF0ZSkgfHwgSXNBKHBzLCBNZXJnZUFwcGVuZFN0 YXRlKSk7CisKKwlpZiAoSXNBKHBzLCBBcHBlbmRTdGF0ZSkpCisJCXJldHVybiAoKEFwcGVuZFN0 YXRlICopIHBzKS0+YXNfZXZlbnRzZXQ7CisJZWxzZQorCQlyZXR1cm4gKChNZXJnZUFwcGVuZFN0 YXRlICopIHBzKS0+bXNfZXZlbnRzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgQml0bWFwc2V0ICoK K0dldE5lZWRSZXF1ZXN0KFBsYW5TdGF0ZSAqcHMpCit7CisJQXNzZXJ0KElzQShwcywgQXBwZW5k U3RhdGUpIHx8IElzQShwcywgTWVyZ2VBcHBlbmRTdGF0ZSkpOworCisJaWYgKElzQShwcywgQXBw ZW5kU3RhdGUpKQorCQlyZXR1cm4gKChBcHBlbmRTdGF0ZSAqKSBwcyktPmFzX25lZWRyZXF1ZXN0 OworCWVsc2UKKwkJcmV0dXJuICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwcyktPm1zX25lZWRyZXF1 ZXN0OworfQorCisvKiBDb21tb24gcGFydCBvZiBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucygp IGZvciBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2NsYXNz aWZ5X21hdGNoaW5nX3N1YnBsYW5zX2NvbW1vbihCaXRtYXBzZXQgKip2YWxpZF9zdWJwbGFucywK KwkJCQkJCQkJICBCaXRtYXBzZXQgKmFzeW5jcGxhbnMsCisJCQkJCQkJCSAgQml0bWFwc2V0ICoq dmFsaWRfYXN5bmNwbGFucykKK3sKKwlBc3NlcnQoKnZhbGlkX2FzeW5jcGxhbnMgPT0gTlVMTCk7 CisKKwkvKiBDaGVja2VkIGJ5IGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKCkgKi8KKwlBc3Nl cnQoIWJtc19pc19lbXB0eSgqdmFsaWRfc3VicGxhbnMpKTsKKworCS8qIE5vdGhpbmcgdG8gZG8g aWYgdGhlcmUgYXJlIG5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCWlmICghYm1zX292ZXJs YXAoKnZhbGlkX3N1YnBsYW5zLCBhc3luY3BsYW5zKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyog R2V0IHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCSp2YWxpZF9hc3luY3BsYW5zID0gYm1zX2lu dGVyc2VjdChhc3luY3BsYW5zLAorCQkJCQkJCQkJICAqdmFsaWRfc3VicGxhbnMpOworCisJLyog QWRqdXN0IHRoZSB2YWxpZCBzdWJwbGFucyB0byBjb250YWluIHN5bmMgc3VicGxhbnMgb25seS4g Ki8KKwkqdmFsaWRfc3VicGxhbnMgPSBibXNfZGVsX21lbWJlcnMoKnZhbGlkX3N1YnBsYW5zLAor CQkJCQkJCQkJICAqdmFsaWRfYXN5bmNwbGFucyk7CisJcmV0dXJuIHRydWU7Cit9CisKIC8qIC0t LS0tLS0tLS0tLS0tLS0KICAqCSBSZWN1cnNpdmVVbmlvblN0YXRlIGluZm9ybWF0aW9uCiAgKgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29w dGltaXplci9jb3N0LmgKaW5kZXggZjJmZDVkMzE1MDcuLjc5OGFmMWZjZDVjIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXpl ci9jb3N0LmgKQEAgLTcwLDYgKzcwLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxl X3BhcmFsbGVsX2hhc2g7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfcGFydGl0aW9u X3BydW5pbmc7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfcHJlc29ydGVkX2FnZ3Jl Z2F0ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9hc3luY19hcHBlbmQ7CitleHRl cm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kOwogZXh0ZXJuIFBH RExMSU1QT1JUIGludCBjb25zdHJhaW50X2V4Y2x1c2lvbjsKIAogZXh0ZXJuIGRvdWJsZSBpbmRl eF9wYWdlc19mZXRjaGVkKGRvdWJsZSB0dXBsZXNfZmV0Y2hlZCwgQmxvY2tOdW1iZXIgcGFnZXMs CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDEzMmI1NmE1ODY0Li40 MjJjYThiN2QxZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3 cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE1 Niw2ICsxNTYsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJl IG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgICAgICAgICAgICAgIG5hbWUgICAgICAgICAgICAgIHwg c2V0dGluZyAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLQogIGVu YWJsZV9hc3luY19hcHBlbmQgICAgICAgICAgICB8IG9uCisgZW5hYmxlX2FzeW5jX21lcmdlX2Fw cGVuZCAgICAgIHwgb24KICBlbmFibGVfYml0bWFwc2NhbiAgICAgICAgICAgICAgfCBvbgogIGVu YWJsZV9kaXN0aW5jdF9yZW9yZGVyaW5nICAgICB8IG9uCiAgZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0 ZSAgICAgICAgIHwgb24KQEAgLTE4MCw3ICsxODEsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBm cm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNj YW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAgICAgICAgICAgICAg fCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8IG9uCi0oMjUgcm93cykKKygy NiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQgZGVzY3JpcHRpb25zIGZv ciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1heSBiZSBwcmVzZW50IG9yIGFi c2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBwb3N0bWFzdGVyIHN0YXJ0Lgot LSAKMi40My4wCgo= --=_768e045455637ea52d3563fff0679bcf Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v15-0003-Common-infrastructure-to-MergeAppend-and-Append-node.patch Content-Disposition: attachment; filename*0*=UTF-8''v15-0003-Common-infrastructure-to-MergeAppend-and-Appe; filename*1*=nd-node.patch; size=92811 RnJvbSA5YjQ3MTY4MTgxOWI5ZTA3NGE2MGFmMjkxZTlmNzgyM2ViODRjMDM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFR1ZSwgMzAgRGVjIDIwMjUgMTQ6MzI6MjAgKzAzMDAKU3ViamVjdDogW1BBVENIIDMvM10g Q29tbW9uIGluZnJhc3RydWN0dXJlIHRvIE1lcmdlQXBwZW5kIGFuZCBBcHBlbmQgbm9kZXMKClRo aXMgY29tbWl0IGludHJvZHVjZXMgdGhlIGV4ZWNBcHBlbmQuYyBmaWxlIHRvIGNlbnRyYWxpemUg ZXhlY3V0b3IKb3BlcmF0aW9ucyB0aGF0IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBNZXJnZUFwcGVu ZCBhbmQgQXBwZW5kIG5vZGVzLgoKVGhlIGxvZ2ljIGZvciBpbml0aWFsaXppbmcgYW5kIGVuZGlu ZyB0aGUgbm9kZXMsIGFzIHdlbGwgYXMgaW5pdGlhbGl6aW5nCmFzeW5jaHJvbm91cyBleGVjdXRp b24sIGlzIHZlcnkgc2ltaWxhciBmb3IgYm90aCBNZXJnZUFwcGVuZCBhbmQgQXBwZW5kLgpUbyBy ZWR1Y2UgcmVkdW5kYW5jeSwgdGhlIGR1cGxpY2F0ZWQgY29kZSBoYXMgYmVlbiBtb3ZlZCB0byBl eGVjQXBwZW5kLmMKc28gdGhhdCB0aGVzZSBub2RlcyBjYW4gcmV1c2UgdGhlIGNvbW1vbiBpbXBs ZW1lbnRhdGlvbi4KClRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBmZXRjaGluZyB0 aGUgdHVwbGVzIHJlbWFpbnMgc3BlY2lmaWMKdG8gZWFjaCBub2RlIGFuZCB3YXMgbm90IHJlZmFj dG9yZWQgaW50byBleGVjQXBwZW5kLmMgdG8gcHJlc2VydmUgdGhlCnVuaXF1ZSBleGVjdXRpb24g cmVxdWlyZW1lbnRzIG9mIGVhY2ggbm9kZSB0eXBlLgotLS0KIGNvbnRyaWIvcGdfb3ZlcmV4cGxh aW4vcGdfb3ZlcmV4cGxhaW4uYyB8ICAgOCArLQogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3NjYW4uYyAgICAgIHwgICA0ICstCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2Vy LmMgICAgfCAgIDggKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jICAgICB8 ICAgOCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAgIHwgIDI2ICst CiBzcmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9l eGVjdXRvci9leGVjQXBwZW5kLmMgICAgICAgfCA0MDggKysrKysrKysrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0N1cnJlbnQuYyAgICAgIHwgICA0ICstCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUHJvY25vZGUuYyAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL21lc29uLmJ1aWxkICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl QXBwZW5kLmMgICAgICAgfCA0OTYgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyAgfCA0MTYgKysrLS0tLS0tLS0tLS0tLS0tLS0K IHNyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jICAgICAgICAgICB8ICAgOCArLQogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIHwgIDM4ICstCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgfCAgNDggKy0tCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zdWJzZWxlY3QuYyAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxl dXRpbHMuYyAgICAgICB8ICAgOCArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0FwcGVuZC5o ICAgICAgIHwgIDYwICsrKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAg IHwgMTA1ICsrLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgfCAg NTYgKy0tCiAyMSBmaWxlcyBjaGFuZ2VkLCA3NTggaW5zZXJ0aW9ucygrKSwgOTU5IGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBcHBlbmQu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaAoK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyBiL2Nv bnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRleCBjMmI5MDQ5M2NjNi4u NzM2MTgzNGM1NDQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4 cGxhaW4uYworKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKQEAg LTIzMiwxOCArMjMyLDE4IEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hvb2soUGxhblN0YXRlICpw bGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQlicmVhazsKIAkJCWNhc2UgVF9BcHBlbmQ6 CiAJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0KCJBcHBlbmQgUlRJcyIsCi0JCQkJCQkJCQkgICgo QXBwZW5kICopIHBsYW4pLT5hcHByZWxpZHMsCisJCQkJCQkJCQkgICgoQXBwZW5kICopIHBsYW4p LT5hcC5hcHByZWxpZHMsCiAJCQkJCQkJCQkgIGVzKTsKIAkJCQlvdmVyZXhwbGFpbl9iaXRtYXBz ZXRfbGlzdCgiQ2hpbGQgQXBwZW5kIFJUSXMiLAotCQkJCQkJCQkJCSAgICgoQXBwZW5kICopIHBs YW4pLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICAoKEFwcGVuZCAqKSBw bGFuKS0+YXAuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJCQkJICAgZXMpOwogCQkJ CWJyZWFrOwogCQkJY2FzZSBUX01lcmdlQXBwZW5kOgogCQkJCW92ZXJleHBsYWluX2JpdG1hcHNl dCgiQXBwZW5kIFJUSXMiLAotCQkJCQkJCQkJICAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5hcHBy ZWxpZHMsCisJCQkJCQkJCQkgICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmFwLmFwcHJlbGlkcywK IAkJCQkJCQkJCSAgZXMpOwogCQkJCW92ZXJleHBsYWluX2JpdG1hcHNldF9saXN0KCJDaGlsZCBB cHBlbmQgUlRJcyIsCi0JCQkJCQkJCQkJICAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRf YXBwZW5kX3JlbGlkX3NldHMsCisJCQkJCQkJCQkJICAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+ YXAuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJCQkJICAgZXMpOwogCQkJCWJyZWFr OwogCQkJY2FzZSBUX1Jlc3VsdDoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9zY2FuLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCmluZGV4IDVm MjEwZjJiNzI1Li4xOGI0ZWYwZmIwMyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3NjYW4uYworKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCkBA IC0xNDIsNyArMTQyLDcgQEAgcGdwYV9idWlsZF9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAogCiAJCQkJLyogQmUgc3VyZSB0byBhY2NvdW50IGZvciBw dWxsZWQtdXAgc2NhbnMuICovCiAJCQkJY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQotCQkJCQko KEFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisJCQkJCSgoQXBwZW5k ICopIHBsYW4pLT5hcC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAkJCQlicmVhazsKIAkJCWNh c2UgVF9NZXJnZUFwcGVuZDoKIAkJCQkvKiBTYW1lIGxvZ2ljIGhlcmUgYXMgZm9yIEFwcGVuZCwg YWJvdmUuICovCkBAIC0xNTQsNyArMTU0LDcgQEAgcGdwYV9idWlsZF9zY2FuKHBncGFfcGxhbl93 YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAogCiAJCQkJLyogQmUgc3VyZSB0byBh Y2NvdW50IGZvciBwdWxsZWQtdXAgc2NhbnMuICovCiAJCQkJY2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHMgPQotCQkJCQkoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0 czsKKwkJCQkJKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXAuY2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHM7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09S RElOQVJZOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5j IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCmluZGV4IDdiODZjYzVlNmY5 Li42Y2JhZGU1OTU1MyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dh bGtlci5jCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpAQCAtNDA5 LDE0ICs0MDksMTQgQEAgcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHBncGFfcGxhbl93YWxrZXJfY29u dGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAogCQkJewogCQkJCUFwcGVuZAkgICAqYXBsYW4gPSAo QXBwZW5kICopIHBsYW47CiAKLQkJCQlleHRyYXBsYW5zID0gYXBsYW4tPmFwcGVuZHBsYW5zOwor CQkJCWV4dHJhcGxhbnMgPSBhcGxhbi0+YXAuc3VicGxhbnM7CiAJCQl9CiAJCQlicmVhazsKIAkJ Y2FzZSBUX01lcmdlQXBwZW5kOgogCQkJewogCQkJCU1lcmdlQXBwZW5kICptYXBsYW4gPSAoTWVy Z2VBcHBlbmQgKikgcGxhbjsKIAotCQkJCWV4dHJhcGxhbnMgPSBtYXBsYW4tPm1lcmdlcGxhbnM7 CisJCQkJZXh0cmFwbGFucyA9IG1hcGxhbi0+YXAuc3VicGxhbnM7CiAJCQl9CiAJCQlicmVhazsK IAkJY2FzZSBUX0JpdG1hcEFuZDoKQEAgLTUzOSw5ICs1MzksOSBAQCBwZ3BhX3JlbGlkcyhQbGFu ICpwbGFuKQogCWVsc2UgaWYgKElzQShwbGFuLCBGb3JlaWduU2NhbikpCiAJCXJldHVybiAoKEZv cmVpZ25TY2FuICopIHBsYW4pLT5mc19yZWxpZHM7CiAJZWxzZSBpZiAoSXNBKHBsYW4sIEFwcGVu ZCkpCi0JCXJldHVybiAoKEFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRzOworCQlyZXR1cm4gKChB cHBlbmQgKikgcGxhbiktPmFwLmFwcHJlbGlkczsKIAllbHNlIGlmIChJc0EocGxhbiwgTWVyZ2VB cHBlbmQpKQotCQlyZXR1cm4gKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRzOworCQly ZXR1cm4gKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXAuYXBwcmVsaWRzOwogCiAJcmV0dXJuIE5V TEw7CiB9CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBi L2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IDRkMTEzMDUwY2RhLi5i NzQ0NGZkYjIyZSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3 LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTI0MTMsOCAr MjQxMyw4IEBAIGZpbmRfbW9kaWZ5dGFibGVfc3VicGxhbihQbGFubmVySW5mbyAqcm9vdCwKIAl7 CiAJCUFwcGVuZAkgICAqYXBwZW5kcGxhbiA9IChBcHBlbmQgKikgc3VicGxhbjsKIAotCQlpZiAo c3VicGxhbl9pbmRleCA8IGxpc3RfbGVuZ3RoKGFwcGVuZHBsYW4tPmFwcGVuZHBsYW5zKSkKLQkJ CXN1YnBsYW4gPSAoUGxhbiAqKSBsaXN0X250aChhcHBlbmRwbGFuLT5hcHBlbmRwbGFucywgc3Vi cGxhbl9pbmRleCk7CisJCWlmIChzdWJwbGFuX2luZGV4IDwgbGlzdF9sZW5ndGgoYXBwZW5kcGxh bi0+YXAuc3VicGxhbnMpKQorCQkJc3VicGxhbiA9IChQbGFuICopIGxpc3RfbnRoKGFwcGVuZHBs YW4tPmFwLnN1YnBsYW5zLCBzdWJwbGFuX2luZGV4KTsKIAl9CiAJZWxzZSBpZiAoSXNBKHN1YnBs YW4sIFJlc3VsdCkgJiYKIAkJCSBvdXRlclBsYW4oc3VicGxhbikgIT0gTlVMTCAmJgpAQCAtMjQy Miw4ICsyNDIyLDggQEAgZmluZF9tb2RpZnl0YWJsZV9zdWJwbGFuKFBsYW5uZXJJbmZvICpyb290 LAogCXsKIAkJQXBwZW5kCSAgICphcHBlbmRwbGFuID0gKEFwcGVuZCAqKSBvdXRlclBsYW4oc3Vi cGxhbik7CiAKLQkJaWYgKHN1YnBsYW5faW5kZXggPCBsaXN0X2xlbmd0aChhcHBlbmRwbGFuLT5h cHBlbmRwbGFucykpCi0JCQlzdWJwbGFuID0gKFBsYW4gKikgbGlzdF9udGgoYXBwZW5kcGxhbi0+ YXBwZW5kcGxhbnMsIHN1YnBsYW5faW5kZXgpOworCQlpZiAoc3VicGxhbl9pbmRleCA8IGxpc3Rf bGVuZ3RoKGFwcGVuZHBsYW4tPmFwLnN1YnBsYW5zKSkKKwkJCXN1YnBsYW4gPSAoUGxhbiAqKSBs aXN0X250aChhcHBlbmRwbGFuLT5hcC5zdWJwbGFucywgc3VicGxhbl9pbmRleCk7CiAJfQogCiAJ LyogTm93LCBoYXZlIHdlIGdvdCBhIEZvcmVpZ25TY2FuIG9uIHRoZSBkZXNpcmVkIHJlbD8gKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCAyOTZlYThhMWVkMi4uN2RhZTYzNmZmZjkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMKQEAgLTEyMjgsMTEgKzEyMjgsMTEgQEAgRXhwbGFpblByZVNjYW5O b2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBCaXRtYXBzZXQgKipyZWxzX3VzZWQpCiAJCQlicmVh azsKIAkJY2FzZSBUX0FwcGVuZDoKIAkJCSpyZWxzX3VzZWQgPSBibXNfYWRkX21lbWJlcnMoKnJl bHNfdXNlZCwKLQkJCQkJCQkJCQkgKChBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkcyk7CisJCQkJ CQkJCQkJICgoQXBwZW5kICopIHBsYW4pLT5hcC5hcHByZWxpZHMpOwogCQkJYnJlYWs7CiAJCWNh c2UgVF9NZXJnZUFwcGVuZDoKIAkJCSpyZWxzX3VzZWQgPSBibXNfYWRkX21lbWJlcnMoKnJlbHNf dXNlZCwKLQkJCQkJCQkJCQkgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRzKTsKKwkJ CQkJCQkJCQkgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXAuYXBwcmVsaWRzKTsKIAkJCWJyZWFr OwogCQljYXNlIFRfUmVzdWx0OgogCQkJKnJlbHNfdXNlZCA9IGJtc19hZGRfbWVtYmVycygqcmVs c191c2VkLApAQCAtMTI3Niw3ICsxMjc2LDcgQEAgcGxhbl9pc19kaXNhYmxlZChQbGFuICpwbGFu KQogCQkgKiBpbmNsdWRlcyBhbnkgcnVuLXRpbWUgcHJ1bmVkIGNoaWxkcmVuLiAgSWdub3Jpbmcg dGhvc2UgY291bGQgZ2l2ZQogCQkgKiB1cyB0aGUgaW5jb3JyZWN0IG51bWJlciBvZiBkaXNhYmxl ZCBub2Rlcy4KIAkJICovCi0JCWZvcmVhY2gobGMsIGFwbGFuLT5hcHBlbmRwbGFucykKKwkJZm9y ZWFjaChsYywgYXBsYW4tPmFwLnN1YnBsYW5zKQogCQl7CiAJCQlQbGFuCSAgICpzdWJwbGFuID0g bGZpcnN0KGxjKTsKIApAQCAtMTI5Myw3ICsxMjkzLDcgQEAgcGxhbl9pc19kaXNhYmxlZChQbGFu ICpwbGFuKQogCQkgKiBpbmNsdWRlcyBhbnkgcnVuLXRpbWUgcHJ1bmVkIGNoaWxkcmVuLiAgSWdu b3JpbmcgdGhvc2UgY291bGQgZ2l2ZQogCQkgKiB1cyB0aGUgaW5jb3JyZWN0IG51bWJlciBvZiBk aXNhYmxlZCBub2Rlcy4KIAkJICovCi0JCWZvcmVhY2gobGMsIG1hcGxhbi0+bWVyZ2VwbGFucykK KwkJZm9yZWFjaChsYywgbWFwbGFuLT5hcC5zdWJwbGFucykKIAkJewogCQkJUGxhbgkgICAqc3Vi cGxhbiA9IGxmaXJzdChsYyk7CiAKQEAgLTIzNDAsMTMgKzIzNDAsMTMgQEAgRXhwbGFpbk5vZGUo UGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAlzd2l0Y2ggKG5vZGVUYWco cGxhbikpCiAJewogCQljYXNlIFRfQXBwZW5kOgotCQkJRXhwbGFpbk1pc3NpbmdNZW1iZXJzKCgo QXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+YXNfbnBsYW5zLAotCQkJCQkJCQkgIGxpc3RfbGVu Z3RoKCgoQXBwZW5kICopIHBsYW4pLT5hcHBlbmRwbGFucyksCisJCQlFeHBsYWluTWlzc2luZ01l bWJlcnMoKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcy5ucGxhbnMsCisJCQkJCQkJCSAg bGlzdF9sZW5ndGgoKChBcHBlbmQgKikgcGxhbiktPmFwLnN1YnBsYW5zKSwKIAkJCQkJCQkJICBl cyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX01lcmdlQXBwZW5kOgotCQkJRXhwbGFpbk1pc3NpbmdN ZW1iZXJzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tc19ucGxhbnMsCi0JCQkJ CQkJCSAgbGlzdF9sZW5ndGgoKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+bWVyZ2VwbGFucyksCisJ CQlFeHBsYWluTWlzc2luZ01lbWJlcnMoKChNZXJnZUFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSkt Pm1zLm5wbGFucywKKwkJCQkJCQkJICBsaXN0X2xlbmd0aCgoKE1lcmdlQXBwZW5kICopIHBsYW4p LT5hcC5zdWJwbGFucyksCiAJCQkJCQkJCSAgZXMpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBA IC0yMzkwLDEzICsyMzkwLDEzIEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBM aXN0ICphbmNlc3RvcnMsCiAJc3dpdGNoIChub2RlVGFnKHBsYW4pKQogCXsKIAkJY2FzZSBUX0Fw cGVuZDoKLQkJCUV4cGxhaW5NZW1iZXJOb2RlcygoKEFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSkt PmFwcGVuZHBsYW5zLAotCQkJCQkJCSAgICgoQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+YXNf bnBsYW5zLAorCQkJRXhwbGFpbk1lbWJlck5vZGVzKCgoQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRl KS0+YXMucGxhbnMsCisJCQkJCQkJICAgKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcy5u cGxhbnMsCiAJCQkJCQkJICAgYW5jZXN0b3JzLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX01l cmdlQXBwZW5kOgotCQkJRXhwbGFpbk1lbWJlck5vZGVzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBw bGFuc3RhdGUpLT5tZXJnZXBsYW5zLAotCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBw bGFuc3RhdGUpLT5tc19ucGxhbnMsCisJCQlFeHBsYWluTWVtYmVyTm9kZXMoKChNZXJnZUFwcGVu ZFN0YXRlICopIHBsYW5zdGF0ZSktPm1zLnBsYW5zLAorCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmRT dGF0ZSAqKSBwbGFuc3RhdGUpLT5tcy5ucGxhbnMsCiAJCQkJCQkJICAgYW5jZXN0b3JzLCBlcyk7 CiAJCQlicmVhazsKIAkJY2FzZSBUX0JpdG1hcEFuZDoKQEAgLTI2MTAsNyArMjYxMCw3IEBAIHN0 YXRpYyB2b2lkCiBzaG93X21lcmdlX2FwcGVuZF9rZXlzKE1lcmdlQXBwZW5kU3RhdGUgKm1zdGF0 ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCQkgICBFeHBsYWluU3RhdGUgKmVzKQogewotCU1lcmdl QXBwZW5kICpwbGFuID0gKE1lcmdlQXBwZW5kICopIG1zdGF0ZS0+cHMucGxhbjsKKwlNZXJnZUFw cGVuZCAqcGxhbiA9IChNZXJnZUFwcGVuZCAqKSBtc3RhdGUtPm1zLnBzLnBsYW47CiAKIAlzaG93 X3NvcnRfZ3JvdXBfa2V5cygoUGxhblN0YXRlICopIG1zdGF0ZSwgIlNvcnQgS2V5IiwKIAkJCQkJ CSBwbGFuLT5udW1Db2xzLCAwLCBwbGFuLT5zb3J0Q29sSWR4LApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZQpp bmRleCAxMTExOGQwY2UwMi4uNjZiNjJmY2E5MjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlCkBAIC0x NSw2ICsxNSw3IEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwK IE9CSlMgPSBcCiAJZXhlY0FtaS5vIFwKIAlleGVjQXN5bmMubyBcCisJZXhlY0FwcGVuZC5vIFwK IAlleGVjQ3VycmVudC5vIFwKIAlleGVjRXhwci5vIFwKIAlleGVjRXhwckludGVycC5vIFwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNBbWkuYwppbmRleCAzN2ZlMDNmZGMzNy4uMjNjYjJmODIyODEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjQW1pLmMKQEAgLTUzOCw3ICs1MzgsNyBAQCBFeGVjU3VwcG9ydHNCYWNrd2FyZFNj YW4oUGxhbiAqbm9kZSkKIAkJCQlpZiAoKChBcHBlbmQgKikgbm9kZSktPm5hc3luY3BsYW5zID4g MCkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCi0JCQkJZm9yZWFjaChsLCAoKEFwcGVuZCAqKSBub2Rl KS0+YXBwZW5kcGxhbnMpCisJCQkJZm9yZWFjaChsLCAoKEFwcGVuZCAqKSBub2RlKS0+YXAuc3Vi cGxhbnMpCiAJCQkJewogCQkJCQlpZiAoIUV4ZWNTdXBwb3J0c0JhY2t3YXJkU2NhbigoUGxhbiAq KSBsZmlyc3QobCkpKQogCQkJCQkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0FwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FwcGVu ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZTc2MjQ4ZjJkNwot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuYwpAQCAt MCwwICsxLDQwOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXhlY0FwcGVuZC5jCisg KgkgIFRoaXMgY29kZSBwcm92aWRlcyBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgZXhlY3V0aW5nIE1l cmdlQXBwZW5kIGFuZCBBcHBlbmQKKyAqCSAgbm9kZXMuCisgKgorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjQXBwZW5kLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lu Y2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKKyNpbmNs dWRlICJleGVjdXRvci9leGVjQXBwZW5kLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FzeW5j LmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oIgorI2luY2x1ZGUgInN0b3Jh Z2UvbGF0Y2guaCIKKyNpbmNsdWRlICJzdG9yYWdlL3dhaXRldmVudHNldC5oIgorI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgorCisjZGVmaW5lIEVWRU5UX0JVRkZFUl9TSVpFCQkJMTYKKworLyogIEJl Z2luIGFsbCBvZiB0aGUgc3Vic2NhbnMgb2YgYW4gQXBwZW5kZXIgbm9kZS4gKi8KK3ZvaWQKK0V4 ZWNJbml0QXBwZW5kZXIoQXBwZW5kZXJTdGF0ZSAqIHN0YXRlLAorCQkJCSBBcHBlbmRlciAqIG5v ZGUsCisJCQkJIEVTdGF0ZSAqZXN0YXRlLAorCQkJCSBpbnQgZWZsYWdzLAorCQkJCSBpbnQgZmly c3RfcGFydGlhbF9wbGFuLAorCQkJCSBpbnQgKmZpcnN0X3ZhbGlkX3BhcnRpYWxfcGxhbikKK3sK KwlQbGFuU3RhdGUgKiphcHBlbmRwbGFuc3RhdGVzOworCWNvbnN0IFR1cGxlVGFibGVTbG90T3Bz ICphcHBlbmRvcHM7CisJQml0bWFwc2V0ICAqdmFsaWRzdWJwbGFuczsKKwlCaXRtYXBzZXQgICph c3luY3BsYW5zOworCWludAkJCW5wbGFuczsKKwlpbnQJCQluYXN5bmNwbGFuczsKKwlpbnQJCQlm aXJzdHZhbGlkOworCWludAkJCWksCisJCQkJajsKKworCS8qIElmIHJ1bi10aW1lIHBhcnRpdGlv biBwcnVuaW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93ICovCisJaWYgKG5vZGUt PnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKKwl7CisJCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5l c3RhdGU7CisKKwkJLyoKKwkJICogU2V0IHVwIHBydW5pbmcgZGF0YSBzdHJ1Y3R1cmUuICBUaGlz IGFsc28gaW5pdGlhbGl6ZXMgdGhlIHNldCBvZgorCQkgKiBzdWJwbGFucyB0byBpbml0aWFsaXpl ICh2YWxpZHN1YnBsYW5zKSBieSB0YWtpbmcgaW50byBhY2NvdW50IHRoZQorCQkgKiByZXN1bHQg b2YgcGVyZm9ybWluZyBpbml0aWFsIHBydW5pbmcgaWYgYW55LgorCQkgKi8KKwkJcHJ1bmVzdGF0 ZSA9IEV4ZWNJbml0UGFydGl0aW9uRXhlY1BydW5pbmcoJnN0YXRlLT5wcywKKwkJCQkJCQkJCQkJ CSAgbGlzdF9sZW5ndGgobm9kZS0+c3VicGxhbnMpLAorCQkJCQkJCQkJCQkJICBub2RlLT5wYXJ0 X3BydW5lX2luZGV4LAorCQkJCQkJCQkJCQkJICBub2RlLT5hcHByZWxpZHMsCisJCQkJCQkJCQkJ CQkgICZ2YWxpZHN1YnBsYW5zKTsKKwkJc3RhdGUtPnBydW5lX3N0YXRlID0gcHJ1bmVzdGF0ZTsK KwkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOworCisJCS8qCisJCSAq IFdoZW4gbm8gcnVuLXRpbWUgcHJ1bmluZyBpcyByZXF1aXJlZCBhbmQgdGhlcmUncyBhdCBsZWFz dCBvbmUKKwkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwgdmFsaWRfc3VicGxhbnMgaW1tZWRpYXRl bHksIHByZXZlbnRpbmcKKwkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBs YW5zLgorCQkgKi8KKwkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+ IDApCisJCXsKKwkJCXN0YXRlLT52YWxpZF9zdWJwbGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwg MCwgbnBsYW5zIC0gMSk7CisJCQlzdGF0ZS0+dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRy dWU7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJbnBsYW5zID0gbGlzdF9sZW5ndGgobm9kZS0+c3Vi cGxhbnMpOworCisJCS8qCisJCSAqIFdoZW4gcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgaXMg bm90IGVuYWJsZWQgd2UgY2FuIGp1c3QgbWFyayBhbGwKKwkJICogc3VicGxhbnMgYXMgdmFsaWQ7 IHRoZXkgbXVzdCBhbHNvIGFsbCBiZSBpbml0aWFsaXplZC4KKwkJICovCisJCUFzc2VydChucGxh bnMgPiAwKTsKKwkJc3RhdGUtPnZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFucyA9CisJCQli bXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOworCQlzdGF0ZS0+dmFsaWRfc3VicGxh bnNfaWRlbnRpZmllZCA9IHRydWU7CisJCXN0YXRlLT5wcnVuZV9zdGF0ZSA9IE5VTEw7CisJfQor CisJYXBwZW5kcGxhbnN0YXRlcyA9IHBhbGxvYzBfYXJyYXkoUGxhblN0YXRlICosIG5wbGFucyk7 CisKKwkvKgorCSAqIGNhbGwgRXhlY0luaXROb2RlIG9uIGVhY2ggb2YgdGhlIHZhbGlkIHBsYW5z IHRvIGJlIGV4ZWN1dGVkIGFuZCBzYXZlCisJICogdGhlIHJlc3VsdHMgaW50byB0aGUgYXBwZW5k cGxhbnN0YXRlcyBhcnJheS4KKwkgKgorCSAqIFdoaWxlIGF0IGl0LCBmaW5kIG91dCB0aGUgZmly c3QgdmFsaWQgcGFydGlhbCBwbGFuLgorCSAqLworCWogPSAwOworCWFzeW5jcGxhbnMgPSBOVUxM OworCW5hc3luY3BsYW5zID0gMDsKKwlmaXJzdHZhbGlkID0gbnBsYW5zOworCWkgPSAtMTsKKwl3 aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIodmFsaWRzdWJwbGFucywgaSkpID49IDApCisJewor CQlQbGFuCSAgICppbml0Tm9kZSA9IChQbGFuICopIGxpc3RfbnRoKG5vZGUtPnN1YnBsYW5zLCBp KTsKKworCQkvKgorCQkgKiBSZWNvcmQgYXN5bmMgc3VicGxhbnMuICBXaGVuIGV4ZWN1dGluZyBF dmFsUGxhblF1YWwsIHdlIHRyZWF0IHRoZW0KKwkJICogYXMgc3luYyBvbmVzOyBkb24ndCBkbyB0 aGlzIHdoZW4gaW5pdGlhbGl6aW5nIGFuIEV2YWxQbGFuUXVhbCBwbGFuCisJCSAqIHRyZWUuCisJ CSAqLworCQlpZiAoaW5pdE5vZGUtPmFzeW5jX2NhcGFibGUgJiYgZXN0YXRlLT5lc19lcHFfYWN0 aXZlID09IE5VTEwpCisJCXsKKwkJCWFzeW5jcGxhbnMgPSBibXNfYWRkX21lbWJlcihhc3luY3Bs YW5zLCBqKTsKKwkJCW5hc3luY3BsYW5zKys7CisJCX0KKworCQkvKgorCQkgKiBSZWNvcmQgdGhl IGxvd2VzdCBhcHBlbmRwbGFucyBpbmRleCB3aGljaCBpcyBhIHZhbGlkIHBhcnRpYWwgcGxhbi4K KwkJICovCisJCWlmIChmaXJzdF92YWxpZF9wYXJ0aWFsX3BsYW4gJiYgaSA+PSBmaXJzdF9wYXJ0 aWFsX3BsYW4gJiYgaiA8IGZpcnN0dmFsaWQpCisJCQlmaXJzdHZhbGlkID0gajsKKworCQlhcHBl bmRwbGFuc3RhdGVzW2orK10gPSBFeGVjSW5pdE5vZGUoaW5pdE5vZGUsIGVzdGF0ZSwgZWZsYWdz KTsKKwl9CisKKwlpZiAoZmlyc3RfdmFsaWRfcGFydGlhbF9wbGFuKQorCQkqZmlyc3RfdmFsaWRf cGFydGlhbF9wbGFuID0gZmlyc3R2YWxpZDsKKworCXN0YXRlLT5wbGFucyA9IGFwcGVuZHBsYW5z dGF0ZXM7CisJc3RhdGUtPm5wbGFucyA9IG5wbGFuczsKKworCS8qCisJICogSW5pdGlhbGl6ZSBB cHBlbmQncyByZXN1bHQgdHVwbGUgdHlwZSBhbmQgc2xvdC4gIElmIHRoZSBjaGlsZCBwbGFucyBh bGwKKwkgKiBwcm9kdWNlIHRoZSBzYW1lIGZpeGVkIHNsb3QgdHlwZSwgd2UgY2FuIHVzZSB0aGF0 IHNsb3QgdHlwZTsgb3RoZXJ3aXNlCisJICogbWFrZSBhIHZpcnR1YWwgc2xvdC4gIChOb3RlIHRo YXQgdGhlIHJlc3VsdCBzbG90IGl0c2VsZiBpcyB1c2VkIG9ubHkgdG8KKwkgKiByZXR1cm4gYSBu dWxsIHR1cGxlIGF0IGVuZCBvZiBleGVjdXRpb247IHJlYWwgdHVwbGVzIGFyZSByZXR1cm5lZCB0 bworCSAqIHRoZSBjYWxsZXIgaW4gdGhlIGNoaWxkcmVuJ3Mgb3duIHJlc3VsdCBzbG90cy4gIFdo YXQgd2UgYXJlIGRvaW5nIGhlcmUKKwkgKiBpcyBhbGxvd2luZyB0aGUgcGFyZW50IHBsYW4gbm9k ZSB0byBvcHRpbWl6ZSBpZiB0aGUgQXBwZW5kIHdpbGwgcmV0dXJuCisJICogb25seSBvbmUga2lu ZCBvZiBzbG90LikKKwkgKi8KKwlhcHBlbmRvcHMgPSBFeGVjR2V0Q29tbW9uU2xvdE9wcyhhcHBl bmRwbGFuc3RhdGVzLCBqKTsKKwlpZiAoYXBwZW5kb3BzICE9IE5VTEwpCisJeworCQlFeGVjSW5p dFJlc3VsdFR1cGxlU2xvdFRMKCZzdGF0ZS0+cHMsIGFwcGVuZG9wcyk7CisJfQorCWVsc2UKKwl7 CisJCUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90VEwoJnN0YXRlLT5wcywgJlRUU09wc1ZpcnR1YWwp OworCQkvKiBzaG93IHRoYXQgdGhlIG91dHB1dCBzbG90IHR5cGUgaXMgbm90IGZpeGVkICovCisJ CXN0YXRlLT5wcy5yZXN1bHRvcHNzZXQgPSB0cnVlOworCQlzdGF0ZS0+cHMucmVzdWx0b3BzZml4 ZWQgPSBmYWxzZTsKKwl9CisKKwkvKiBJbml0aWFsaXplIGFzeW5jIHN0YXRlICovCisJc3RhdGUt PmFzeW5jcGxhbnMgPSBhc3luY3BsYW5zOworCXN0YXRlLT5uYXN5bmNwbGFucyA9IG5hc3luY3Bs YW5zOworCXN0YXRlLT5hc3luY3JlcXVlc3RzID0gTlVMTDsKKwlzdGF0ZS0+YXN5bmNyZXN1bHRz ID0gTlVMTDsKKwlzdGF0ZS0+bmVlZHJlcXVlc3QgPSBOVUxMOworCXN0YXRlLT5ldmVudHNldCA9 IE5VTEw7CisJc3RhdGUtPnZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOworCisJaWYgKG5hc3luY3Bs YW5zID4gMCkKKwl7CisJCXN0YXRlLT5hc3luY3JlcXVlc3RzID0gcGFsbG9jMF9hcnJheShBc3lu Y1JlcXVlc3QgKiwgbnBsYW5zKTsKKworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0 X21lbWJlcihhc3luY3BsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJQXN5bmNSZXF1ZXN0ICphcmVx OworCisJCQlhcmVxID0gcGFsbG9jX29iamVjdChBc3luY1JlcXVlc3QpOworCQkJYXJlcS0+cmVx dWVzdG9yID0gKFBsYW5TdGF0ZSAqKSBzdGF0ZTsKKwkJCWFyZXEtPnJlcXVlc3RlZSA9IGFwcGVu ZHBsYW5zdGF0ZXNbaV07CisJCQlhcmVxLT5yZXF1ZXN0X2luZGV4ID0gaTsKKwkJCWFyZXEtPmNh bGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKKwkJCWFyZXEtPnJlcXVlc3RfY29tcGxldGUgPSBmYWxz ZTsKKwkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7CisKKwkJCXN0YXRlLT5hc3luY3JlcXVlc3RzW2ld ID0gYXJlcTsKKwkJfQorCisJCS8qCisJCSAqIEFwcGVuZFN0YXRlIGFuZCBNZXJnZUFwcGVuZFN0 YXRlIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IGFsbG9jYXRpb24KKwkJICogc2l6ZXMgZm9yIGFz eW5jcmVzdWx0cyBpbiB0aGUgb3JpZ2luYWwgY29kZSwgYnV0IHdlIHVuaWZ5IHRvIHRoZQorCQkg KiBsYXJnZXIgcmVxdWlyZW1lbnQgb3Igc3BlY2lmaWMgbnBsYW5zIGlmIHJlcXVpcmVkLgorCQkg Ki8KKwkJc3RhdGUtPmFzeW5jcmVzdWx0cyA9IHBhbGxvYzBfYXJyYXkoVHVwbGVUYWJsZVNsb3Qg KiwgbnBsYW5zKTsKKwl9CisKKwkvKgorCSAqIE1pc2NlbGxhbmVvdXMgaW5pdGlhbGl6YXRpb24K KwkgKi8KKwlzdGF0ZS0+cHMucHNfUHJvakluZm8gPSBOVUxMOworfQorCit2b2lkCitFeGVjUmVT Y2FuQXBwZW5kZXIoQXBwZW5kZXJTdGF0ZSAqIG5vZGUpCit7CisJaW50CQkJaTsKKwlpbnQJCQlu YXN5bmNwbGFucyA9IG5vZGUtPm5hc3luY3BsYW5zOworCisJLyoKKwkgKiBJZiBhbnkgUEFSQU1f RVhFQyBQYXJhbXMgdXNlZCBpbiBwcnVuaW5nIGV4cHJlc3Npb25zIGhhdmUgY2hhbmdlZCwgdGhl bgorCSAqIHdlJ2QgYmV0dGVyIHVuc2V0IHRoZSB2YWxpZCBzdWJwbGFucyBzbyB0aGF0IHRoZXkg YXJlIHJlc2VsZWN0ZWQgZm9yCisJICogdGhlIG5ldyBwYXJhbWV0ZXIgdmFsdWVzLgorCSAqLwor CWlmIChub2RlLT5wcnVuZV9zdGF0ZSAmJgorCQlibXNfb3ZlcmxhcChub2RlLT5wcy5jaGdQYXJh bSwKKwkJCQkJbm9kZS0+cHJ1bmVfc3RhdGUtPmV4ZWNwYXJhbWlkcykpCisJeworCQlub2RlLT52 YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gZmFsc2U7CisJCWJtc19mcmVlKG5vZGUtPnZhbGlk X3N1YnBsYW5zKTsKKwkJbm9kZS0+dmFsaWRfc3VicGxhbnMgPSBOVUxMOworCQlibXNfZnJlZShu b2RlLT52YWxpZF9hc3luY3BsYW5zKTsKKwkJbm9kZS0+dmFsaWRfYXN5bmNwbGFucyA9IE5VTEw7 CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5vZGUtPm5wbGFuczsgaSsrKQorCXsKKwkJUGxhblN0 YXRlICAqc3Vibm9kZSA9IG5vZGUtPnBsYW5zW2ldOworCisJCS8qCisJCSAqIEV4ZWNSZVNjYW4g ZG9lc24ndCBrbm93IGFib3V0IG15IHN1YnBsYW5zLCBzbyBJIGhhdmUgdG8gZG8KKwkJICogY2hh bmdlZC1wYXJhbWV0ZXIgc2lnbmFsaW5nIG15c2VsZi4KKwkJICovCisJCWlmIChub2RlLT5wcy5j aGdQYXJhbSAhPSBOVUxMKQorCQkJVXBkYXRlQ2hhbmdlZFBhcmFtU2V0KHN1Ym5vZGUsIG5vZGUt PnBzLmNoZ1BhcmFtKTsKKworCQkvKgorCQkgKiBJZiBjaGdQYXJhbSBvZiBzdWJub2RlIGlzIG5v dCBudWxsIHRoZW4gcGxhbiB3aWxsIGJlIHJlLXNjYW5uZWQgYnkKKwkJICogZmlyc3QgRXhlY1By b2NOb2RlLgorCQkgKi8KKwkJaWYgKHN1Ym5vZGUtPmNoZ1BhcmFtID09IE5VTEwpCisJCQlFeGVj UmVTY2FuKHN1Ym5vZGUpOworCX0KKworCS8qIFJlc2V0IGFzeW5jIHN0YXRlICovCisJaWYgKG5h c3luY3BsYW5zID4gMCkKKwl7CisJCWkgPSAtMTsKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVt YmVyKG5vZGUtPmFzeW5jcGxhbnMsIGkpKSA+PSAwKQorCQl7CisJCQlBc3luY1JlcXVlc3QgKmFy ZXEgPSBub2RlLT5hc3luY3JlcXVlc3RzW2ldOworCisJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5n ID0gZmFsc2U7CisJCQlhcmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7CisJCQlhcmVxLT5y ZXN1bHQgPSBOVUxMOworCQl9CisKKwkJYm1zX2ZyZWUobm9kZS0+bmVlZHJlcXVlc3QpOworCQlu b2RlLT5uZWVkcmVxdWVzdCA9IE5VTEw7CisJfQorfQorCisvKiAgV2FpdCBvciBwb2xsIGZvciBm aWxlIGRlc2NyaXB0b3IgZXZlbnRzIGFuZCBmaXJlIGNhbGxiYWNrcy4gKi8KK3ZvaWQKK0V4ZWNB cHBlbmRlckFzeW5jRXZlbnRXYWl0KEFwcGVuZGVyU3RhdGUgKiBub2RlLCBpbnQgdGltZW91dCwg dWludDMyIHdhaXRfZXZlbnRfaW5mbykKK3sKKwlpbnQJCQluZXZlbnRzID0gbm9kZS0+bmFzeW5j cGxhbnMgKyAyOwkvKiBvbmUgZm9yIFBNIGRlYXRoIGFuZAorCQkJCQkJCQkJCQkJCSAqIG9uZSBm b3IgbGF0Y2ggKi8KKwlpbnQJCQlub2NjdXJyZWQ7CisJaW50CQkJaTsKKwlXYWl0RXZlbnQJb2Nj dXJyZWRfZXZlbnRbRVZFTlRfQlVGRkVSX1NJWkVdOworCisJQXNzZXJ0KG5vZGUtPmV2ZW50c2V0 ID09IE5VTEwpOworCisJbm9kZS0+ZXZlbnRzZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVu dFJlc291cmNlT3duZXIsIG5ldmVudHMpOworCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPmV2ZW50 c2V0LCBXTF9FWElUX09OX1BNX0RFQVRILCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIE5VTEws IE5VTEwpOworCisJLyogR2l2ZSBlYWNoIHdhaXRpbmcgc3VicGxhbiBhIGNoYW5jZSB0byBhZGQg YW4gZXZlbnQuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2Rl LT5hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwl7CisJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUt PmFzeW5jcmVxdWVzdHNbaV07CisKKwkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpCisJCQlF eGVjQXN5bmNDb25maWd1cmVXYWl0KGFyZXEpOworCX0KKworCS8qCisJICogTm8gbmVlZCBmb3Ig ZnVydGhlciBwcm9jZXNzaW5nIGlmIG5vbmUgb2YgdGhlIHN1YnBsYW5zIGNvbmZpZ3VyZWQgYW55 CisJICogZXZlbnRzLgorCSAqLworCWlmIChHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhub2Rl LT5ldmVudHNldCkgPT0gMSkKKwl7CisJCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+ZXZlbnRzZXQp OworCQlub2RlLT5ldmVudHNldCA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEFk ZCB0aGUgcHJvY2VzcyBsYXRjaCB0byB0aGUgc2V0LCBzbyB0aGF0IHdlIHdha2UgdXAgdG8gcHJv Y2VzcyB0aGUKKwkgKiBzdGFuZGFyZCBpbnRlcnJ1cHRzIHdpdGggQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKS4KKwkgKgorCSAqIE5PVEU6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGl0J3MgaW1wb3J0 YW50IHRoYXQgdGhpcyBpcyBhZGRlZCB0byB0aGUKKwkgKiBXYWl0RXZlbnRTZXQgYWZ0ZXIgdGhl IEV4ZWNBc3luY0NvbmZpZ3VyZVdhaXQoKSBjYWxscy4gIE5hbWVseSwKKwkgKiBwb3N0Z3Jlc19m ZHcgY2FsbHMgIkdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNldCkgPT0gMSIgdG8gY2hlY2sg aWYKKwkgKiBhbnkgb3RoZXIgZXZlbnRzIGFyZSBpbiB0aGUgc2V0LiAgVGhhdCdzIGEgcG9vciBk ZXNpZ24sIGl0J3MKKwkgKiBxdWVzdGlvbmFibGUgZm9yIHBvc3RncmVzX2ZkdyB0byBiZSBkb2lu ZyB0aGF0IGluIHRoZSBmaXJzdCBwbGFjZSwgYnV0CisJICogd2UgY2Fubm90IGNoYW5nZSBpdCBu b3cuICBUaGUgcGF0dGVybiBoYXMgcG9zc2libHkgYmVlbiBjb3BpZWQgdG8gb3RoZXIKKwkgKiBl eHRlbnNpb25zIHRvby4KKwkgKi8KKwlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5ldmVudHNldCwg V0xfTEFUQ0hfU0VULCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIE15TGF0Y2gsIE5VTEwpOwor CisJLyogUmV0dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJWkUgZXZlbnRzIGluIG9uZSBjYWxs LiAqLworCWlmIChuZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJWkUpCisJCW5ldmVudHMgPSBFVkVO VF9CVUZGRVJfU0laRTsKKworCS8qIFdhaXQgdW50aWwgYXQgbGVhc3Qgb25lIGV2ZW50IG9jY3Vy cy4gKi8KKwlub2NjdXJyZWQgPSBXYWl0RXZlbnRTZXRXYWl0KG5vZGUtPmV2ZW50c2V0LCB0aW1l b3V0LCBvY2N1cnJlZF9ldmVudCwKKwkJCQkJCQkJIG5ldmVudHMsIHdhaXRfZXZlbnRfaW5mbyk7 CisKKworCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+ZXZlbnRzZXQpOworCW5vZGUtPmV2ZW50c2V0 ID0gTlVMTDsKKwlpZiAobm9jY3VycmVkID09IDApCisJCXJldHVybjsKKworCisJLyogRGVsaXZl ciBub3RpZmljYXRpb25zLiAqLworCWZvciAoaSA9IDA7IGkgPCBub2NjdXJyZWQ7IGkrKykKKwl7 CisJCVdhaXRFdmVudCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07CisKKwkJLyoKKwkJICogRWFj aCB3YWl0aW5nIHN1YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJlZCBpdHMgd2FpdCBldmVudCB3 aXRoCisJCSAqIHVzZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0cyBBc3luY1JlcXVlc3QuCisJ CSAqLworCQlpZiAoKHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFEQUJMRSkgIT0gMCkKKwkJewor CQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAqKSB3LT51c2VyX2RhdGE7CisK KwkJCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQorCQkJeworCQkJCS8qCisJCQkJICogTWFy ayBpdCBhcyBubyBsb25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAgV2UgbXVzdCBkbyB0aGlzCisJ CQkJICogYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBpbiBjYXNlIHRoZSBjYWxsYmFj ayByZXNldHMKKwkJCQkgKiB0aGUgZmxhZy4KKwkJCQkgKi8KKwkJCQlhcmVxLT5jYWxsYmFja19w ZW5kaW5nID0gZmFsc2U7CisKKwkJCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCisJCQkJRXhl Y0FzeW5jTm90aWZ5KGFyZXEpOworCQkJfQorCQl9CisKKwkJLyogSGFuZGxlIHN0YW5kYXJkIGlu dGVycnVwdHMgKi8KKwkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQpICE9IDApCisJCXsK KwkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQl9 CisJfQorfQorCisvKiAgQmVnaW4gZXhlY3V0aW5nIGFzeW5jLWNhcGFibGUgc3VicGxhbnMuICov Cit2b2lkCitFeGVjQXBwZW5kZXJBc3luY0JlZ2luKEFwcGVuZGVyU3RhdGUgKiBub2RlKQorewor CWludAkJCWk7CisKKwkvKiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYXN5bmMt YXdhcmUgQXBwZW5kcy4gKi8KKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5w cy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7CisKKwkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVk IHdoZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5zICovCisJQXNzZXJ0KG5vZGUtPm5wbGFucyA+IDAp OworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBhc3lu YyBzdWJwbGFucy4gKi8KKwlBc3NlcnQobm9kZS0+bmFzeW5jcGxhbnMgPiAwKTsKKworCS8qIE1h a2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlp ID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPnZhbGlkX2FzeW5jcGxh bnMsIGkpKSA+PSAwKQorCXsKKwkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXN5bmNyZXF1 ZXN0c1tpXTsKKworCQlBc3NlcnQoYXJlcS0+cmVxdWVzdF9pbmRleCA9PSBpKTsKKwkJQXNzZXJ0 KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKKworCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICov CisJCUV4ZWNBc3luY1JlcXVlc3QoYXJlcSk7CisJfQorfQorCisvKiAgU2h1dHMgZG93biB0aGUg c3VicGxhbnMgb2YgYW4gQXBwZW5kZXIgbm9kZS4gKi8KK3ZvaWQKK0V4ZWNFbmRBcHBlbmRlcihB cHBlbmRlclN0YXRlICogbm9kZSkKK3sKKwlQbGFuU3RhdGUgKipzdWJwbGFuczsKKwlpbnQJCQlu cGxhbnM7CisJaW50CQkJaTsKKworCS8qCisJICogZ2V0IGluZm9ybWF0aW9uIGZyb20gdGhlIG5v ZGUKKwkgKi8KKwlzdWJwbGFucyA9IG5vZGUtPnBsYW5zOworCW5wbGFucyA9IG5vZGUtPm5wbGFu czsKKworCS8qCisJICogc2h1dCBkb3duIGVhY2ggb2YgdGhlIHN1YnNjYW5zCisJICovCisJZm9y IChpID0gMDsgaSA8IG5wbGFuczsgaSsrKQorCQlFeGVjRW5kTm9kZShzdWJwbGFuc1tpXSk7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQ3VycmVudC5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY0N1cnJlbnQuYwppbmRleCA5OWYyYjJkMGM2Zi4uMzdmNWM3ZmQy YzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNDdXJyZW50LmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0N1cnJlbnQuYwpAQCAtMzc1LDkgKzM3NSw5IEBAIHNl YXJjaF9wbGFuX3RyZWUoUGxhblN0YXRlICpub2RlLCBPaWQgdGFibGVfb2lkLAogCQkJCUFwcGVu ZFN0YXRlICphc3RhdGUgPSAoQXBwZW5kU3RhdGUgKikgbm9kZTsKIAkJCQlpbnQJCQlpOwogCi0J CQkJZm9yIChpID0gMDsgaSA8IGFzdGF0ZS0+YXNfbnBsYW5zOyBpKyspCisJCQkJZm9yIChpID0g MDsgaSA8IGFzdGF0ZS0+YXMubnBsYW5zOyBpKyspCiAJCQkJewotCQkJCQlTY2FuU3RhdGUgICpl bGVtID0gc2VhcmNoX3BsYW5fdHJlZShhc3RhdGUtPmFwcGVuZHBsYW5zW2ldLAorCQkJCQlTY2Fu U3RhdGUgICplbGVtID0gc2VhcmNoX3BsYW5fdHJlZShhc3RhdGUtPmFzLnBsYW5zW2ldLAogCQkJ CQkJCQkJCQkJCQl0YWJsZV9vaWQsCiAJCQkJCQkJCQkJCQkJCXBlbmRpbmdfcmVzY2FuKTsKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYwppbmRleCBkMzU5NzY5MjVhZS4uODI4MmU4NjYz NWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCkBAIC05MTEsOCArOTExLDggQEAg RXhlY1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGlsZF9u b2RlKQogCQlBcHBlbmRTdGF0ZSAqYVN0YXRlID0gKEFwcGVuZFN0YXRlICopIGNoaWxkX25vZGU7 CiAJCWludAkJCWk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGFTdGF0ZS0+YXNfbnBsYW5zOyBpKysp Ci0JCQlFeGVjU2V0VHVwbGVCb3VuZCh0dXBsZXNfbmVlZGVkLCBhU3RhdGUtPmFwcGVuZHBsYW5z W2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IGFTdGF0ZS0+YXMubnBsYW5zOyBpKyspCisJCQlFeGVj U2V0VHVwbGVCb3VuZCh0dXBsZXNfbmVlZGVkLCBhU3RhdGUtPmFzLnBsYW5zW2ldKTsKIAl9CiAJ ZWxzZSBpZiAoSXNBKGNoaWxkX25vZGUsIE1lcmdlQXBwZW5kU3RhdGUpKQogCXsKQEAgLTkyNCw4 ICs5MjQsOCBAQCBFeGVjU2V0VHVwbGVCb3VuZChpbnQ2NCB0dXBsZXNfbmVlZGVkLCBQbGFuU3Rh dGUgKmNoaWxkX25vZGUpCiAJCU1lcmdlQXBwZW5kU3RhdGUgKm1hU3RhdGUgPSAoTWVyZ2VBcHBl bmRTdGF0ZSAqKSBjaGlsZF9ub2RlOwogCQlpbnQJCQlpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBt YVN0YXRlLT5tc19ucGxhbnM7IGkrKykKLQkJCUV4ZWNTZXRUdXBsZUJvdW5kKHR1cGxlc19uZWVk ZWQsIG1hU3RhdGUtPm1lcmdlcGxhbnNbaV0pOworCQlmb3IgKGkgPSAwOyBpIDwgbWFTdGF0ZS0+ bXMubnBsYW5zOyBpKyspCisJCQlFeGVjU2V0VHVwbGVCb3VuZCh0dXBsZXNfbmVlZGVkLCBtYVN0 YXRlLT5tcy5wbGFuc1tpXSk7CiAJfQogCWVsc2UgaWYgKElzQShjaGlsZF9ub2RlLCBSZXN1bHRT dGF0ZSkpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvbWVzb24uYnVpbGQg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9tZXNvbi5idWlsZAppbmRleCBkYzQ1YmUwYjJjZS4uMDYx OTFiMjIxNDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21lc29uLmJ1aWxkCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21lc29uLmJ1aWxkCkBAIC0zLDYgKzMsNyBAQAogYmFj a2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnZXhlY0FtaS5jJywKICAgJ2V4ZWNBc3luYy5jJywK KyAgJ2V4ZWNBcHBlbmQuYycsCiAgICdleGVjQ3VycmVudC5jJywKICAgJ2V4ZWNFeHByLmMnLAog ICAnZXhlY0V4cHJJbnRlcnAuYycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKaW5kZXggNTUx NjRlMzZjZTMuLjk3NWFlODdhMDM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCkBAIC01 Nyw2ICs1Nyw3IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiZXhlY3V0 b3IvZXhlY0FwcGVuZC5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBc3luYy5oIgogI2luY2x1 ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRv ci5oIgpAQCAtMTExLDE1ICsxMTIsNiBAQCBBcHBlbmRTdGF0ZSAqCiBFeGVjSW5pdEFwcGVuZChB cHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogewogCUFwcGVuZFN0YXRl ICphcHBlbmRzdGF0ZSA9IG1ha2VOb2RlKEFwcGVuZFN0YXRlKTsKLQlQbGFuU3RhdGUgKiphcHBl bmRwbGFuc3RhdGVzOwotCWNvbnN0IFR1cGxlVGFibGVTbG90T3BzICphcHBlbmRvcHM7Ci0JQml0 bWFwc2V0ICAqdmFsaWRzdWJwbGFuczsKLQlCaXRtYXBzZXQgICphc3luY3BsYW5zOwotCWludAkJ CW5wbGFuczsKLQlpbnQJCQluYXN5bmNwbGFuczsKLQlpbnQJCQlmaXJzdHZhbGlkOwotCWludAkJ CWksCi0JCQkJajsKIAogCS8qIGNoZWNrIGZvciB1bnN1cHBvcnRlZCBmbGFncyAqLwogCUFzc2Vy dCghKGVmbGFncyAmIEVYRUNfRkxBR19NQVJLKSk7CkBAIC0xMjcsMTY3ICsxMTksMjcgQEAgRXhl Y0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkv KgogCSAqIGNyZWF0ZSBuZXcgQXBwZW5kU3RhdGUgZm9yIG91ciBhcHBlbmQgbm9kZQogCSAqLwot CWFwcGVuZHN0YXRlLT5wcy5wbGFuID0gKFBsYW4gKikgbm9kZTsKLQlhcHBlbmRzdGF0ZS0+cHMu c3RhdGUgPSBlc3RhdGU7Ci0JYXBwZW5kc3RhdGUtPnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNBcHBl bmQ7CisJYXBwZW5kc3RhdGUtPmFzLnBzLnBsYW4gPSAoUGxhbiAqKSBub2RlOworCWFwcGVuZHN0 YXRlLT5hcy5wcy5zdGF0ZSA9IGVzdGF0ZTsKKwlhcHBlbmRzdGF0ZS0+YXMucHMuRXhlY1Byb2NO b2RlID0gRXhlY0FwcGVuZDsKIAogCS8qIExldCBjaG9vc2VfbmV4dF9zdWJwbGFuXyogZnVuY3Rp b24gaGFuZGxlIHNldHRpbmcgdGhlIGZpcnN0IHN1YnBsYW4gKi8KIAlhcHBlbmRzdGF0ZS0+YXNf d2hpY2hwbGFuID0gSU5WQUxJRF9TVUJQTEFOX0lOREVYOwogCWFwcGVuZHN0YXRlLT5hc19zeW5j ZG9uZSA9IGZhbHNlOwogCWFwcGVuZHN0YXRlLT5hc19iZWd1biA9IGZhbHNlOwogCi0JLyogSWYg cnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgaXMgZW5hYmxlZCwgdGhlbiBzZXQgdGhhdCB1cCBu b3cgKi8KLQlpZiAobm9kZS0+cGFydF9wcnVuZV9pbmRleCA+PSAwKQotCXsKLQkJUGFydGl0aW9u UHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKLQotCQkvKgotCQkgKiBTZXQgdXAgcHJ1bmluZyBkYXRh IHN0cnVjdHVyZS4gIFRoaXMgYWxzbyBpbml0aWFsaXplcyB0aGUgc2V0IG9mCi0JCSAqIHN1YnBs YW5zIHRvIGluaXRpYWxpemUgKHZhbGlkc3VicGxhbnMpIGJ5IHRha2luZyBpbnRvIGFjY291bnQg dGhlCi0JCSAqIHJlc3VsdCBvZiBwZXJmb3JtaW5nIGluaXRpYWwgcHJ1bmluZyBpZiBhbnkuCi0J CSAqLwotCQlwcnVuZXN0YXRlID0gRXhlY0luaXRQYXJ0aXRpb25FeGVjUHJ1bmluZygmYXBwZW5k c3RhdGUtPnBzLAotCQkJCQkJCQkJCQkJICBsaXN0X2xlbmd0aChub2RlLT5hcHBlbmRwbGFucyks Ci0JCQkJCQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXgsCi0JCQkJCQkJCQkJCQkgIG5v ZGUtPmFwcHJlbGlkcywKLQkJCQkJCQkJCQkJCSAgJnZhbGlkc3VicGxhbnMpOwotCQlhcHBlbmRz dGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPSBwcnVuZXN0YXRlOwotCQlucGxhbnMgPSBibXNfbnVtX21l bWJlcnModmFsaWRzdWJwbGFucyk7Ci0KLQkJLyoKLQkJICogV2hlbiBubyBydW4tdGltZSBwcnVu aW5nIGlzIHJlcXVpcmVkIGFuZCB0aGVyZSdzIGF0IGxlYXN0IG9uZQotCQkgKiBzdWJwbGFuLCB3 ZSBjYW4gZmlsbCBhc192YWxpZF9zdWJwbGFucyBpbW1lZGlhdGVseSwgcHJldmVudGluZwotCQkg KiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCi0JCSAqLwotCQlpZiAo IXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkKLQkJewotCQkJYXBwZW5k c3RhdGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMg LSAxKTsKLQkJCWFwcGVuZHN0YXRlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1 ZTsKLQkJfQotCX0KLQllbHNlCi0JewotCQlucGxhbnMgPSBsaXN0X2xlbmd0aChub2RlLT5hcHBl bmRwbGFucyk7Ci0KLQkJLyoKLQkJICogV2hlbiBydW4tdGltZSBwYXJ0aXRpb24gcHJ1bmluZyBp cyBub3QgZW5hYmxlZCB3ZSBjYW4ganVzdCBtYXJrIGFsbAotCQkgKiBzdWJwbGFucyBhcyB2YWxp ZDsgdGhleSBtdXN0IGFsc28gYWxsIGJlIGluaXRpYWxpemVkLgotCQkgKi8KLQkJQXNzZXJ0KG5w bGFucyA+IDApOwotCQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnMgPSB2YWxpZHN1YnBs YW5zID0KLQkJCWJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7Ci0JCWFwcGVuZHN0 YXRlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKLQkJYXBwZW5kc3RhdGUt PmFzX3BydW5lX3N0YXRlID0gTlVMTDsKLQl9Ci0KLQlhcHBlbmRwbGFuc3RhdGVzID0gKFBsYW5T dGF0ZSAqKikgcGFsbG9jKG5wbGFucyAqCi0JCQkJCQkJCQkJCSBzaXplb2YoUGxhblN0YXRlICop KTsKLQotCS8qCi0JICogY2FsbCBFeGVjSW5pdE5vZGUgb24gZWFjaCBvZiB0aGUgdmFsaWQgcGxh bnMgdG8gYmUgZXhlY3V0ZWQgYW5kIHNhdmUKLQkgKiB0aGUgcmVzdWx0cyBpbnRvIHRoZSBhcHBl bmRwbGFuc3RhdGVzIGFycmF5LgotCSAqCi0JICogV2hpbGUgYXQgaXQsIGZpbmQgb3V0IHRoZSBm aXJzdCB2YWxpZCBwYXJ0aWFsIHBsYW4uCi0JICovCi0JaiA9IDA7Ci0JYXN5bmNwbGFucyA9IE5V TEw7Ci0JbmFzeW5jcGxhbnMgPSAwOwotCWZpcnN0dmFsaWQgPSBucGxhbnM7Ci0JaSA9IC0xOwot CXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcih2YWxpZHN1YnBsYW5zLCBpKSkgPj0gMCkKLQl7 Ci0JCVBsYW4JICAgKmluaXROb2RlID0gKFBsYW4gKikgbGlzdF9udGgobm9kZS0+YXBwZW5kcGxh bnMsIGkpOwotCi0JCS8qCi0JCSAqIFJlY29yZCBhc3luYyBzdWJwbGFucy4gIFdoZW4gZXhlY3V0 aW5nIEV2YWxQbGFuUXVhbCwgd2UgdHJlYXQgdGhlbQotCQkgKiBhcyBzeW5jIG9uZXM7IGRvbid0 IGRvIHRoaXMgd2hlbiBpbml0aWFsaXppbmcgYW4gRXZhbFBsYW5RdWFsIHBsYW4KLQkJICogdHJl ZS4KLQkJICovCi0JCWlmIChpbml0Tm9kZS0+YXN5bmNfY2FwYWJsZSAmJiBlc3RhdGUtPmVzX2Vw cV9hY3RpdmUgPT0gTlVMTCkKLQkJewotCQkJYXN5bmNwbGFucyA9IGJtc19hZGRfbWVtYmVyKGFz eW5jcGxhbnMsIGopOwotCQkJbmFzeW5jcGxhbnMrKzsKLQkJfQotCi0JCS8qCi0JCSAqIFJlY29y ZCB0aGUgbG93ZXN0IGFwcGVuZHBsYW5zIGluZGV4IHdoaWNoIGlzIGEgdmFsaWQgcGFydGlhbCBw bGFuLgotCQkgKi8KLQkJaWYgKGkgPj0gbm9kZS0+Zmlyc3RfcGFydGlhbF9wbGFuICYmIGogPCBm aXJzdHZhbGlkKQotCQkJZmlyc3R2YWxpZCA9IGo7Ci0KLQkJYXBwZW5kcGxhbnN0YXRlc1tqKytd ID0gRXhlY0luaXROb2RlKGluaXROb2RlLCBlc3RhdGUsIGVmbGFncyk7Ci0JfQotCi0JYXBwZW5k c3RhdGUtPmFzX2ZpcnN0X3BhcnRpYWxfcGxhbiA9IGZpcnN0dmFsaWQ7Ci0JYXBwZW5kc3RhdGUt PmFwcGVuZHBsYW5zID0gYXBwZW5kcGxhbnN0YXRlczsKLQlhcHBlbmRzdGF0ZS0+YXNfbnBsYW5z ID0gbnBsYW5zOworCS8qIEluaXRpYWxpemUgY29tbW9uIGZpZWxkcyAqLworCUV4ZWNJbml0QXBw ZW5kZXIoJmFwcGVuZHN0YXRlLT5hcywKKwkJCQkJICZub2RlLT5hcCwKKwkJCQkJIGVzdGF0ZSwK KwkJCQkJIGVmbGFncywKKwkJCQkJIG5vZGUtPmZpcnN0X3BhcnRpYWxfcGxhbiwKKwkJCQkJICZh cHBlbmRzdGF0ZS0+YXNfZmlyc3RfcGFydGlhbF9wbGFuKTsKIAotCS8qCi0JICogSW5pdGlhbGl6 ZSBBcHBlbmQncyByZXN1bHQgdHVwbGUgdHlwZSBhbmQgc2xvdC4gIElmIHRoZSBjaGlsZCBwbGFu cyBhbGwKLQkgKiBwcm9kdWNlIHRoZSBzYW1lIGZpeGVkIHNsb3QgdHlwZSwgd2UgY2FuIHVzZSB0 aGF0IHNsb3QgdHlwZTsgb3RoZXJ3aXNlCi0JICogbWFrZSBhIHZpcnR1YWwgc2xvdC4gIChOb3Rl IHRoYXQgdGhlIHJlc3VsdCBzbG90IGl0c2VsZiBpcyB1c2VkIG9ubHkgdG8KLQkgKiByZXR1cm4g YSBudWxsIHR1cGxlIGF0IGVuZCBvZiBleGVjdXRpb247IHJlYWwgdHVwbGVzIGFyZSByZXR1cm5l ZCB0bwotCSAqIHRoZSBjYWxsZXIgaW4gdGhlIGNoaWxkcmVuJ3Mgb3duIHJlc3VsdCBzbG90cy4g IFdoYXQgd2UgYXJlIGRvaW5nIGhlcmUKLQkgKiBpcyBhbGxvd2luZyB0aGUgcGFyZW50IHBsYW4g bm9kZSB0byBvcHRpbWl6ZSBpZiB0aGUgQXBwZW5kIHdpbGwgcmV0dXJuCi0JICogb25seSBvbmUg a2luZCBvZiBzbG90LikKLQkgKi8KLQlhcHBlbmRvcHMgPSBFeGVjR2V0Q29tbW9uU2xvdE9wcyhh cHBlbmRwbGFuc3RhdGVzLCBqKTsKLQlpZiAoYXBwZW5kb3BzICE9IE5VTEwpCi0JewotCQlFeGVj SW5pdFJlc3VsdFR1cGxlU2xvdFRMKCZhcHBlbmRzdGF0ZS0+cHMsIGFwcGVuZG9wcyk7Ci0JfQot CWVsc2UKLQl7Ci0JCUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90VEwoJmFwcGVuZHN0YXRlLT5wcywg JlRUU09wc1ZpcnR1YWwpOwotCQkvKiBzaG93IHRoYXQgdGhlIG91dHB1dCBzbG90IHR5cGUgaXMg bm90IGZpeGVkICovCi0JCWFwcGVuZHN0YXRlLT5wcy5yZXN1bHRvcHNzZXQgPSB0cnVlOwotCQlh cHBlbmRzdGF0ZS0+cHMucmVzdWx0b3BzZml4ZWQgPSBmYWxzZTsKLQl9CisJaWYgKGFwcGVuZHN0 YXRlLT5hcy5uYXN5bmNwbGFucyA+IDAgJiYgYXBwZW5kc3RhdGUtPmFzLnZhbGlkX3N1YnBsYW5z X2lkZW50aWZpZWQpCisJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKGFwcGVuZHN0YXRlKTsK IAotCS8qIEluaXRpYWxpemUgYXN5bmMgc3RhdGUgKi8KLQlhcHBlbmRzdGF0ZS0+YXNfYXN5bmNw bGFucyA9IGFzeW5jcGxhbnM7Ci0JYXBwZW5kc3RhdGUtPmFzX25hc3luY3BsYW5zID0gbmFzeW5j cGxhbnM7Ci0JYXBwZW5kc3RhdGUtPmFzX2FzeW5jcmVxdWVzdHMgPSBOVUxMOwotCWFwcGVuZHN0 YXRlLT5hc19hc3luY3Jlc3VsdHMgPSBOVUxMOwotCWFwcGVuZHN0YXRlLT5hc19uYXN5bmNyZXN1 bHRzID0gMDsKIAlhcHBlbmRzdGF0ZS0+YXNfbmFzeW5jcmVtYWluID0gMDsKLQlhcHBlbmRzdGF0 ZS0+YXNfbmVlZHJlcXVlc3QgPSBOVUxMOwotCWFwcGVuZHN0YXRlLT5hc19ldmVudHNldCA9IE5V TEw7Ci0JYXBwZW5kc3RhdGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwotCi0JaWYgKG5h c3luY3BsYW5zID4gMCkKLQl7Ci0JCWFwcGVuZHN0YXRlLT5hc19hc3luY3JlcXVlc3RzID0gKEFz eW5jUmVxdWVzdCAqKikKLQkJCXBhbGxvYzAobnBsYW5zICogc2l6ZW9mKEFzeW5jUmVxdWVzdCAq KSk7Ci0KLQkJaSA9IC0xOwotCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoYXN5bmNwbGFu cywgaSkpID49IDApCi0JCXsKLQkJCUFzeW5jUmVxdWVzdCAqYXJlcTsKLQotCQkJYXJlcSA9IHBh bGxvY19vYmplY3QoQXN5bmNSZXF1ZXN0KTsKLQkJCWFyZXEtPnJlcXVlc3RvciA9IChQbGFuU3Rh dGUgKikgYXBwZW5kc3RhdGU7Ci0JCQlhcmVxLT5yZXF1ZXN0ZWUgPSBhcHBlbmRwbGFuc3RhdGVz W2ldOwotCQkJYXJlcS0+cmVxdWVzdF9pbmRleCA9IGk7Ci0JCQlhcmVxLT5jYWxsYmFja19wZW5k aW5nID0gZmFsc2U7Ci0JCQlhcmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7Ci0JCQlhcmVx LT5yZXN1bHQgPSBOVUxMOwotCi0JCQlhcHBlbmRzdGF0ZS0+YXNfYXN5bmNyZXF1ZXN0c1tpXSA9 IGFyZXE7Ci0JCX0KLQotCQlhcHBlbmRzdGF0ZS0+YXNfYXN5bmNyZXN1bHRzID0gKFR1cGxlVGFi bGVTbG90ICoqKQotCQkJcGFsbG9jMChuYXN5bmNwbGFucyAqIHNpemVvZihUdXBsZVRhYmxlU2xv dCAqKSk7Ci0KLQkJaWYgKGFwcGVuZHN0YXRlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVk KQotCQkJY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoYXBwZW5kc3RhdGUpOwotCX0KLQotCS8q Ci0JICogTWlzY2VsbGFuZW91cyBpbml0aWFsaXphdGlvbgotCSAqLwotCi0JYXBwZW5kc3RhdGUt PnBzLnBzX1Byb2pJbmZvID0gTlVMTDsKIAogCS8qIEZvciBwYXJhbGxlbCBxdWVyeSwgdGhpcyB3 aWxsIGJlIG92ZXJyaWRkZW4gbGF0ZXIuICovCiAJYXBwZW5kc3RhdGUtPmNob29zZV9uZXh0X3N1 YnBsYW4gPSBjaG9vc2VfbmV4dF9zdWJwbGFuX2xvY2FsbHk7CkBAIC0zMTcsMTEgKzE2OSwxMSBA QCBFeGVjQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQlBc3NlcnQoIW5vZGUtPmFzX3N5bmNk b25lKTsKIAogCQkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyBzdWJwbGFucyAqLwot CQlpZiAobm9kZS0+YXNfbnBsYW5zID09IDApCi0JCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9k ZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90KTsKKwkJaWYgKG5vZGUtPmFzLm5wbGFucyA9PSAwKQor CQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPmFzLnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7 CiAKIAkJLyogSWYgdGhlcmUgYXJlIGFueSBhc3luYyBzdWJwbGFucywgYmVnaW4gZXhlY3V0aW5n IHRoZW0uICovCi0JCWlmIChub2RlLT5hc19uYXN5bmNwbGFucyA+IDApCisJCWlmIChub2RlLT5h cy5uYXN5bmNwbGFucyA+IDApCiAJCQlFeGVjQXBwZW5kQXN5bmNCZWdpbihub2RlKTsKIAogCQkv KgpAQCAtMzI5LDExICsxODEsMTEgQEAgRXhlY0FwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJ ICogcHJvY2VlZGluZy4KIAkJICovCiAJCWlmICghbm9kZS0+Y2hvb3NlX25leHRfc3VicGxhbihu b2RlKSAmJiBub2RlLT5hc19uYXN5bmNyZW1haW4gPT0gMCkKLQkJCXJldHVybiBFeGVjQ2xlYXJU dXBsZShub2RlLT5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOworCQkJcmV0dXJuIEV4ZWNDbGVhclR1 cGxlKG5vZGUtPmFzLnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CiAKIAkJQXNzZXJ0KG5vZGUtPmFz X3N5bmNkb25lIHx8CiAJCQkgICAobm9kZS0+YXNfd2hpY2hwbGFuID49IDAgJiYKLQkJCQlub2Rl LT5hc193aGljaHBsYW4gPCBub2RlLT5hc19ucGxhbnMpKTsKKwkJCQlub2RlLT5hc193aGljaHBs YW4gPCBub2RlLT5hcy5ucGxhbnMpKTsKIAogCQkvKiBBbmQgd2UncmUgaW5pdGlhbGl6ZWQuICov CiAJCW5vZGUtPmFzX2JlZ3VuID0gdHJ1ZTsKQEAgLTM0OCwxOSArMjAwLDE5IEBAIEV4ZWNBcHBl bmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCS8qCiAJCSAqIHRyeSB0byBnZXQgYSB0dXBsZSBmcm9t IGFuIGFzeW5jIHN1YnBsYW4gaWYgYW55CiAJCSAqLwotCQlpZiAobm9kZS0+YXNfc3luY2RvbmUg fHwgIWJtc19pc19lbXB0eShub2RlLT5hc19uZWVkcmVxdWVzdCkpCisJCWlmIChub2RlLT5hc19z eW5jZG9uZSB8fCAhYm1zX2lzX2VtcHR5KG5vZGUtPmFzLm5lZWRyZXF1ZXN0KSkKIAkJewogCQkJ aWYgKEV4ZWNBcHBlbmRBc3luY0dldE5leHQobm9kZSwgJnJlc3VsdCkpCiAJCQkJcmV0dXJuIHJl c3VsdDsKIAkJCUFzc2VydCghbm9kZS0+YXNfc3luY2RvbmUpOwotCQkJQXNzZXJ0KGJtc19pc19l bXB0eShub2RlLT5hc19uZWVkcmVxdWVzdCkpOworCQkJQXNzZXJ0KGJtc19pc19lbXB0eShub2Rl LT5hcy5uZWVkcmVxdWVzdCkpOwogCQl9CiAKIAkJLyoKIAkJICogZmlndXJlIG91dCB3aGljaCBz eW5jIHN1YnBsYW4gd2UgYXJlIGN1cnJlbnRseSBwcm9jZXNzaW5nCiAJCSAqLwotCQlBc3NlcnQo bm9kZS0+YXNfd2hpY2hwbGFuID49IDAgJiYgbm9kZS0+YXNfd2hpY2hwbGFuIDwgbm9kZS0+YXNf bnBsYW5zKTsKLQkJc3Vibm9kZSA9IG5vZGUtPmFwcGVuZHBsYW5zW25vZGUtPmFzX3doaWNocGxh bl07CisJCUFzc2VydChub2RlLT5hc193aGljaHBsYW4gPj0gMCAmJiBub2RlLT5hc193aGljaHBs YW4gPCBub2RlLT5hcy5ucGxhbnMpOworCQlzdWJub2RlID0gbm9kZS0+YXMucGxhbnNbbm9kZS0+ YXNfd2hpY2hwbGFuXTsKIAogCQkvKgogCQkgKiBnZXQgYSB0dXBsZSBmcm9tIHRoZSBzdWJwbGFu CkBAIC0zODcsNyArMjM5LDcgQEAgRXhlY0FwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAogCQkv KiBjaG9vc2UgbmV3IHN5bmMgc3VicGxhbjsgaWYgbm8gc3luYy9hc3luYyBzdWJwbGFucywgd2Un cmUgZG9uZSAqLwogCQlpZiAoIW5vZGUtPmNob29zZV9uZXh0X3N1YnBsYW4obm9kZSkgJiYgbm9k ZS0+YXNfbmFzeW5jcmVtYWluID09IDApCi0JCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+ cHMucHNfUmVzdWx0VHVwbGVTbG90KTsKKwkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5h cy5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCX0KIH0KIApAQCAtNDAyLDgxICsyNTQsMjIgQEAg RXhlY0FwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIHZvaWQKIEV4ZWNFbmRBcHBlbmQoQXBwZW5k U3RhdGUgKm5vZGUpCiB7Ci0JUGxhblN0YXRlICoqYXBwZW5kcGxhbnM7Ci0JaW50CQkJbnBsYW5z OwotCWludAkJCWk7Ci0KLQkvKgotCSAqIGdldCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBub2RlCi0J ICovCi0JYXBwZW5kcGxhbnMgPSBub2RlLT5hcHBlbmRwbGFuczsKLQlucGxhbnMgPSBub2RlLT5h c19ucGxhbnM7Ci0KLQkvKgotCSAqIHNodXQgZG93biBlYWNoIG9mIHRoZSBzdWJzY2FucwotCSAq LwotCWZvciAoaSA9IDA7IGkgPCBucGxhbnM7IGkrKykKLQkJRXhlY0VuZE5vZGUoYXBwZW5kcGxh bnNbaV0pOworCUV4ZWNFbmRBcHBlbmRlcigmbm9kZS0+YXMpOwogfQogCiB2b2lkCiBFeGVjUmVT Y2FuQXBwZW5kKEFwcGVuZFN0YXRlICpub2RlKQogewotCWludAkJCW5hc3luY3BsYW5zID0gbm9k ZS0+YXNfbmFzeW5jcGxhbnM7Ci0JaW50CQkJaTsKLQotCS8qCi0JICogSWYgYW55IFBBUkFNX0VY RUMgUGFyYW1zIHVzZWQgaW4gcHJ1bmluZyBleHByZXNzaW9ucyBoYXZlIGNoYW5nZWQsIHRoZW4K LQkgKiB3ZSdkIGJldHRlciB1bnNldCB0aGUgdmFsaWQgc3VicGxhbnMgc28gdGhhdCB0aGV5IGFy ZSByZXNlbGVjdGVkIGZvcgotCSAqIHRoZSBuZXcgcGFyYW1ldGVyIHZhbHVlcy4KLQkgKi8KLQlp ZiAobm9kZS0+YXNfcHJ1bmVfc3RhdGUgJiYKLQkJYm1zX292ZXJsYXAobm9kZS0+cHMuY2hnUGFy YW0sCi0JCQkJCW5vZGUtPmFzX3BydW5lX3N0YXRlLT5leGVjcGFyYW1pZHMpKQotCXsKLQkJbm9k ZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IGZhbHNlOwotCQlibXNfZnJlZShub2Rl LT5hc192YWxpZF9zdWJwbGFucyk7Ci0JCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0gTlVMTDsK LQkJYm1zX2ZyZWUobm9kZS0+YXNfdmFsaWRfYXN5bmNwbGFucyk7Ci0JCW5vZGUtPmFzX3ZhbGlk X2FzeW5jcGxhbnMgPSBOVUxMOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBub2RlLT5hc19ucGxh bnM7IGkrKykKLQl7Ci0JCVBsYW5TdGF0ZSAgKnN1Ym5vZGUgPSBub2RlLT5hcHBlbmRwbGFuc1tp XTsKIAotCQkvKgotCQkgKiBFeGVjUmVTY2FuIGRvZXNuJ3Qga25vdyBhYm91dCBteSBzdWJwbGFu cywgc28gSSBoYXZlIHRvIGRvCi0JCSAqIGNoYW5nZWQtcGFyYW1ldGVyIHNpZ25hbGluZyBteXNl bGYuCi0JCSAqLwotCQlpZiAobm9kZS0+cHMuY2hnUGFyYW0gIT0gTlVMTCkKLQkJCVVwZGF0ZUNo YW5nZWRQYXJhbVNldChzdWJub2RlLCBub2RlLT5wcy5jaGdQYXJhbSk7CisJaW50CQkJbmFzeW5j cGxhbnMgPSBub2RlLT5hcy5uYXN5bmNwbGFuczsKIAotCQkvKgotCQkgKiBJZiBjaGdQYXJhbSBv ZiBzdWJub2RlIGlzIG5vdCBudWxsIHRoZW4gcGxhbiB3aWxsIGJlIHJlLXNjYW5uZWQgYnkKLQkJ ICogZmlyc3QgRXhlY1Byb2NOb2RlIG9yIGJ5IGZpcnN0IEV4ZWNBc3luY1JlcXVlc3QuCi0JCSAq LwotCQlpZiAoc3Vibm9kZS0+Y2hnUGFyYW0gPT0gTlVMTCkKLQkJCUV4ZWNSZVNjYW4oc3Vibm9k ZSk7Ci0JfQorCUV4ZWNSZVNjYW5BcHBlbmRlcigmbm9kZS0+YXMpOwogCi0JLyogUmVzZXQgYXN5 bmMgc3RhdGUgKi8KKwkvKiBSZXNldCBzcGVjaWZpYyBhcHBlbmQgYXN5bmMgc3RhdGUgKi8KIAlp ZiAobmFzeW5jcGxhbnMgPiAwKQogCXsKLQkJaSA9IC0xOwotCQl3aGlsZSAoKGkgPSBibXNfbmV4 dF9tZW1iZXIobm9kZS0+YXNfYXN5bmNwbGFucywgaSkpID49IDApCi0JCXsKLQkJCUFzeW5jUmVx dWVzdCAqYXJlcSA9IG5vZGUtPmFzX2FzeW5jcmVxdWVzdHNbaV07Ci0KLQkJCWFyZXEtPmNhbGxi YWNrX3BlbmRpbmcgPSBmYWxzZTsKLQkJCWFyZXEtPnJlcXVlc3RfY29tcGxldGUgPSBmYWxzZTsK LQkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7Ci0JCX0KLQogCQlub2RlLT5hc19uYXN5bmNyZXN1bHRz ID0gMDsKIAkJbm9kZS0+YXNfbmFzeW5jcmVtYWluID0gMDsKLQkJYm1zX2ZyZWUobm9kZS0+YXNf bmVlZHJlcXVlc3QpOwotCQlub2RlLT5hc19uZWVkcmVxdWVzdCA9IE5VTEw7CiAJfQogCiAJLyog TGV0IGNob29zZV9uZXh0X3N1YnBsYW5fKiBmdW5jdGlvbiBoYW5kbGUgc2V0dGluZyB0aGUgZmly c3Qgc3VicGxhbiAqLwpAQCAtNTAzLDcgKzI5Niw3IEBAIEV4ZWNBcHBlbmRFc3RpbWF0ZShBcHBl bmRTdGF0ZSAqbm9kZSwKIHsKIAlub2RlLT5wc3RhdGVfbGVuID0KIAkJYWRkX3NpemUob2Zmc2V0 b2YoUGFyYWxsZWxBcHBlbmRTdGF0ZSwgcGFfZmluaXNoZWQpLAotCQkJCSBzaXplb2YoYm9vbCkg KiBub2RlLT5hc19ucGxhbnMpOworCQkJCSBzaXplb2YoYm9vbCkgKiBub2RlLT5hcy5ucGxhbnMp OwogCiAJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBub2RlLT5wc3Rh dGVfbGVuKTsKIAlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CkBA IC01MjUsNyArMzE4LDcgQEAgRXhlY0FwcGVuZEluaXRpYWxpemVEU00oQXBwZW5kU3RhdGUgKm5v ZGUsCiAJcHN0YXRlID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIG5vZGUtPnBzdGF0ZV9s ZW4pOwogCW1lbXNldChwc3RhdGUsIDAsIG5vZGUtPnBzdGF0ZV9sZW4pOwogCUxXTG9ja0luaXRp YWxpemUoJnBzdGF0ZS0+cGFfbG9jaywgTFdUUkFOQ0hFX1BBUkFMTEVMX0FQUEVORCk7Ci0Jc2ht X3RvY19pbnNlcnQocGN4dC0+dG9jLCBub2RlLT5wcy5wbGFuLT5wbGFuX25vZGVfaWQsIHBzdGF0 ZSk7CisJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBub2RlLT5hcy5wcy5wbGFuLT5wbGFuX25v ZGVfaWQsIHBzdGF0ZSk7CiAKIAlub2RlLT5hc19wc3RhdGUgPSBwc3RhdGU7CiAJbm9kZS0+Y2hv b3NlX25leHRfc3VicGxhbiA9IGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX2xlYWRlcjsKQEAgLTU0 Myw3ICszMzYsNyBAQCBFeGVjQXBwZW5kUmVJbml0aWFsaXplRFNNKEFwcGVuZFN0YXRlICpub2Rl LCBQYXJhbGxlbENvbnRleHQgKnBjeHQpCiAJUGFyYWxsZWxBcHBlbmRTdGF0ZSAqcHN0YXRlID0g bm9kZS0+YXNfcHN0YXRlOwogCiAJcHN0YXRlLT5wYV9uZXh0X3BsYW4gPSAwOwotCW1lbXNldChw c3RhdGUtPnBhX2ZpbmlzaGVkLCAwLCBzaXplb2YoYm9vbCkgKiBub2RlLT5hc19ucGxhbnMpOwor CW1lbXNldChwc3RhdGUtPnBhX2ZpbmlzaGVkLCAwLCBzaXplb2YoYm9vbCkgKiBub2RlLT5hcy5u cGxhbnMpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NTYsNyArMzQ5LDcgQEAgRXhlY0FwcGVuZFJl SW5pdGlhbGl6ZURTTShBcHBlbmRTdGF0ZSAqbm9kZSwgUGFyYWxsZWxDb250ZXh0ICpwY3h0KQog dm9pZAogRXhlY0FwcGVuZEluaXRpYWxpemVXb3JrZXIoQXBwZW5kU3RhdGUgKm5vZGUsIFBhcmFs bGVsV29ya2VyQ29udGV4dCAqcHdjeHQpCiB7Ci0Jbm9kZS0+YXNfcHN0YXRlID0gc2htX3RvY19s b29rdXAocHdjeHQtPnRvYywgbm9kZS0+cHMucGxhbi0+cGxhbl9ub2RlX2lkLCBmYWxzZSk7CisJ bm9kZS0+YXNfcHN0YXRlID0gc2htX3RvY19sb29rdXAocHdjeHQtPnRvYywgbm9kZS0+YXMucHMu cGxhbi0+cGxhbl9ub2RlX2lkLCBmYWxzZSk7CiAJbm9kZS0+Y2hvb3NlX25leHRfc3VicGxhbiA9 IGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX3dvcmtlcjsKIH0KIApAQCAtNTc0LDcgKzM2Nyw3IEBA IGNob29zZV9uZXh0X3N1YnBsYW5fbG9jYWxseShBcHBlbmRTdGF0ZSAqbm9kZSkKIAlpbnQJCQlu ZXh0cGxhbjsKIAogCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUg bm8gc3VicGxhbnMgKi8KLQlBc3NlcnQobm9kZS0+YXNfbnBsYW5zID4gMCk7CisJQXNzZXJ0KG5v ZGUtPmFzLm5wbGFucyA+IDApOwogCiAJLyogTm90aGluZyB0byBkbyBpZiBzeW5jZG9uZSAqLwog CWlmIChub2RlLT5hc19zeW5jZG9uZSkKQEAgLTU4OSwzMyArMzgyLDMzIEBAIGNob29zZV9uZXh0 X3N1YnBsYW5fbG9jYWxseShBcHBlbmRTdGF0ZSAqbm9kZSkKIAkgKi8KIAlpZiAod2hpY2hwbGFu ID09IElOVkFMSURfU1VCUExBTl9JTkRFWCkKIAl7Ci0JCWlmIChub2RlLT5hc19uYXN5bmNwbGFu cyA+IDApCisJCWlmIChub2RlLT5hcy5uYXN5bmNwbGFucyA+IDApCiAJCXsKIAkJCS8qIFdlJ2Qg aGF2ZSBmaWxsZWQgYXNfdmFsaWRfc3VicGxhbnMgYWxyZWFkeSAqLwotCQkJQXNzZXJ0KG5vZGUt PmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOworCQkJQXNzZXJ0KG5vZGUtPmFzLnZhbGlk X3N1YnBsYW5zX2lkZW50aWZpZWQpOwogCQl9Ci0JCWVsc2UgaWYgKCFub2RlLT5hc192YWxpZF9z dWJwbGFuc19pZGVudGlmaWVkKQorCQllbHNlIGlmICghbm9kZS0+YXMudmFsaWRfc3VicGxhbnNf aWRlbnRpZmllZCkKIAkJewotCQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPQotCQkJCUV4ZWNG aW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwot CQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCQlub2RlLT5h cy52YWxpZF9zdWJwbGFucyA9CisJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFz LnBydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJCQlub2RlLT5hcy52YWxpZF9zdWJwbGFuc19p ZGVudGlmaWVkID0gdHJ1ZTsKIAkJfQogCiAJCXdoaWNocGxhbiA9IC0xOwogCX0KIAogCS8qIEVu c3VyZSB3aGljaHBsYW4gaXMgd2l0aGluIHRoZSBleHBlY3RlZCByYW5nZSAqLwotCUFzc2VydCh3 aGljaHBsYW4gPj0gLTEgJiYgd2hpY2hwbGFuIDw9IG5vZGUtPmFzX25wbGFucyk7CisJQXNzZXJ0 KHdoaWNocGxhbiA+PSAtMSAmJiB3aGljaHBsYW4gPD0gbm9kZS0+YXMubnBsYW5zKTsKIAotCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKQot CQluZXh0cGxhbiA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hc192YWxpZF9zdWJwbGFucywgd2hp Y2hwbGFuKTsKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5hcy5wcy5zdGF0ZS0+ ZXNfZGlyZWN0aW9uKSkKKwkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXMudmFs aWRfc3VicGxhbnMsIHdoaWNocGxhbik7CiAJZWxzZQotCQluZXh0cGxhbiA9IGJtc19wcmV2X21l bWJlcihub2RlLT5hc192YWxpZF9zdWJwbGFucywgd2hpY2hwbGFuKTsKKwkJbmV4dHBsYW4gPSBi bXNfcHJldl9tZW1iZXIobm9kZS0+YXMudmFsaWRfc3VicGxhbnMsIHdoaWNocGxhbik7CiAKIAlp ZiAobmV4dHBsYW4gPCAwKQogCXsKIAkJLyogU2V0IGFzX3N5bmNkb25lIGlmIGluIGFzeW5jIG1v ZGUgKi8KLQkJaWYgKG5vZGUtPmFzX25hc3luY3BsYW5zID4gMCkKKwkJaWYgKG5vZGUtPmFzLm5h c3luY3BsYW5zID4gMCkKIAkJCW5vZGUtPmFzX3N5bmNkb25lID0gdHJ1ZTsKIAkJcmV0dXJuIGZh bHNlOwogCX0KQEAgLTYzOSwxMCArNDMyLDEwIEBAIGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX2xl YWRlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAlQYXJhbGxlbEFwcGVuZFN0YXRlICpwc3RhdGUgPSBu b2RlLT5hc19wc3RhdGU7CiAKIAkvKiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkg cGFyYWxsZWwtYXdhcmUgcGxhbnMgKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChu b2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7CisJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQobm9kZS0+YXMucHMuc3RhdGUtPmVzX2RpcmVjdGlvbikpOwogCiAJLyogV2Ugc2hvdWxk IG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBzdWJwbGFucyAqLwotCUFzc2VydChu b2RlLT5hc19ucGxhbnMgPiAwKTsKKwlBc3NlcnQobm9kZS0+YXMubnBsYW5zID4gMCk7CiAKIAlM V0xvY2tBY3F1aXJlKCZwc3RhdGUtPnBhX2xvY2ssIExXX0VYQ0xVU0lWRSk7CiAKQEAgLTY1NCwx OCArNDQ3LDE4IEBAIGNob29zZV9uZXh0X3N1YnBsYW5fZm9yX2xlYWRlcihBcHBlbmRTdGF0ZSAq bm9kZSkKIAllbHNlCiAJewogCQkvKiBTdGFydCB3aXRoIGxhc3Qgc3VicGxhbi4gKi8KLQkJbm9k ZS0+YXNfd2hpY2hwbGFuID0gbm9kZS0+YXNfbnBsYW5zIC0gMTsKKwkJbm9kZS0+YXNfd2hpY2hw bGFuID0gbm9kZS0+YXMubnBsYW5zIC0gMTsKIAogCQkvKgogCQkgKiBJZiB3ZSd2ZSB5ZXQgdG8g ZGV0ZXJtaW5lIHRoZSB2YWxpZCBzdWJwbGFucyB0aGVuIGRvIHNvIG5vdy4gIElmCiAJCSAqIHJ1 bi10aW1lIHBydW5pbmcgaXMgZGlzYWJsZWQgdGhlbiB0aGUgdmFsaWQgc3VicGxhbnMgd2lsbCBh bHdheXMgYmUKIAkJICogc2V0IHRvIGFsbCBzdWJwbGFucy4KIAkJICovCi0JCWlmICghbm9kZS0+ YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJaWYgKCFub2RlLT5hcy52YWxpZF9zdWJw bGFuc19pZGVudGlmaWVkKQogCQl7Ci0JCQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9Ci0JCQkJ RXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVM TCk7Ci0JCQlub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJCW5v ZGUtPmFzLnZhbGlkX3N1YnBsYW5zID0KKwkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9k ZS0+YXMucHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKKwkJCW5vZGUtPmFzLnZhbGlkX3N1YnBs YW5zX2lkZW50aWZpZWQgPSB0cnVlOwogCiAJCQkvKgogCQkJICogTWFyayBlYWNoIGludmFsaWQg cGxhbiBhcyBmaW5pc2hlZCB0byBhbGxvdyB0aGUgbG9vcCBiZWxvdyB0bwpAQCAtNzIxLDEwICs1 MTQsMTAgQEAgY2hvb3NlX25leHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0YXRlICpub2Rl KQogCVBhcmFsbGVsQXBwZW5kU3RhdGUgKnBzdGF0ZSA9IG5vZGUtPmFzX3BzdGF0ZTsKIAogCS8q IEJhY2t3YXJkIHNjYW4gaXMgbm90IHN1cHBvcnRlZCBieSBwYXJhbGxlbC1hd2FyZSBwbGFucyAq LwotCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPnBzLnN0YXRlLT5lc19kaXJl Y3Rpb24pKTsKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5hcy5wcy5zdGF0 ZS0+ZXNfZGlyZWN0aW9uKSk7CiAKIAkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4g dGhlcmUgYXJlIG5vIHN1YnBsYW5zICovCi0JQXNzZXJ0KG5vZGUtPmFzX25wbGFucyA+IDApOwor CUFzc2VydChub2RlLT5hcy5ucGxhbnMgPiAwKTsKIAogCUxXTG9ja0FjcXVpcmUoJnBzdGF0ZS0+ cGFfbG9jaywgTFdfRVhDTFVTSVZFKTsKIApAQCAtNzM3LDExICs1MzAsMTEgQEAgY2hvb3NlX25l eHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0YXRlICpub2RlKQogCSAqIHJ1bi10aW1lIHBy dW5pbmcgaXMgZGlzYWJsZWQgdGhlbiB0aGUgdmFsaWQgc3VicGxhbnMgd2lsbCBhbHdheXMgYmUg c2V0CiAJICogdG8gYWxsIHN1YnBsYW5zLgogCSAqLwotCWVsc2UgaWYgKCFub2RlLT5hc192YWxp ZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCWVsc2UgaWYgKCFub2RlLT5hcy52YWxpZF9zdWJwbGFu c19pZGVudGlmaWVkKQogCXsKLQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMgPQotCQkJRXhlY0Zp bmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7Ci0J CW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQlub2RlLT5hcy52 YWxpZF9zdWJwbGFucyA9CisJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXMucHJ1 bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKKwkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRp ZmllZCA9IHRydWU7CiAKIAkJbWFya19pbnZhbGlkX3N1YnBsYW5zX2FzX2ZpbmlzaGVkKG5vZGUp OwogCX0KQEAgLTc2MSw3ICs1NTQsNyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIo QXBwZW5kU3RhdGUgKm5vZGUpCiAJewogCQlpbnQJCQluZXh0cGxhbjsKIAotCQluZXh0cGxhbiA9 IGJtc19uZXh0X21lbWJlcihub2RlLT5hc192YWxpZF9zdWJwbGFucywKKwkJbmV4dHBsYW4gPSBi bXNfbmV4dF9tZW1iZXIobm9kZS0+YXMudmFsaWRfc3VicGxhbnMsCiAJCQkJCQkJCSAgIHBzdGF0 ZS0+cGFfbmV4dF9wbGFuKTsKIAkJaWYgKG5leHRwbGFuID49IDApCiAJCXsKQEAgLTc3NCw3ICs1 NjcsNyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIoQXBwZW5kU3RhdGUgKm5vZGUp CiAJCQkgKiBUcnkgbG9vcGluZyBiYWNrIHRvIHRoZSBmaXJzdCB2YWxpZCBwYXJ0aWFsIHBsYW4s IGlmIHRoZXJlIGlzCiAJCQkgKiBvbmUuICBJZiB0aGVyZSBpc24ndCwgYXJyYW5nZSB0byBiYWls IG91dCBiZWxvdy4KIAkJCSAqLwotCQkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+ YXNfdmFsaWRfc3VicGxhbnMsCisJCQluZXh0cGxhbiA9IGJtc19uZXh0X21lbWJlcihub2RlLT5h cy52YWxpZF9zdWJwbGFucywKIAkJCQkJCQkJCSAgIG5vZGUtPmFzX2ZpcnN0X3BhcnRpYWxfcGxh biAtIDEpOwogCQkJcHN0YXRlLT5wYV9uZXh0X3BsYW4gPQogCQkJCW5leHRwbGFuIDwgMCA/IG5v ZGUtPmFzX3doaWNocGxhbiA6IG5leHRwbGFuOwpAQCAtNzk5LDcgKzU5Miw3IEBAIGNob29zZV9u ZXh0X3N1YnBsYW5fZm9yX3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAogCS8qIFBpY2sgdGhl IHBsYW4gd2UgZm91bmQsIGFuZCBhZHZhbmNlIHBhX25leHRfcGxhbiBvbmUgbW9yZSB0aW1lLiAq LwogCW5vZGUtPmFzX3doaWNocGxhbiA9IHBzdGF0ZS0+cGFfbmV4dF9wbGFuOwotCXBzdGF0ZS0+ cGFfbmV4dF9wbGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLAor CXBzdGF0ZS0+cGFfbmV4dF9wbGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1 YnBsYW5zLAogCQkJCQkJCQkJCSAgIHBzdGF0ZS0+cGFfbmV4dF9wbGFuKTsKIAogCS8qCkBAIC04 MDgsNyArNjAxLDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVuZFN0YXRl ICpub2RlKQogCSAqLwogCWlmIChwc3RhdGUtPnBhX25leHRfcGxhbiA8IDApCiAJewotCQlpbnQJ CQluZXh0cGxhbiA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hc192YWxpZF9zdWJwbGFucywKKwkJ aW50CQkJbmV4dHBsYW4gPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXMudmFsaWRfc3VicGxhbnMs CiAJCQkJCQkJCQkJCSAgIG5vZGUtPmFzX2ZpcnN0X3BhcnRpYWxfcGxhbiAtIDEpOwogCiAJCWlm IChuZXh0cGxhbiA+PSAwKQpAQCAtODUwLDE2ICs2NDMsMTYgQEAgbWFya19pbnZhbGlkX3N1YnBs YW5zX2FzX2ZpbmlzaGVkKEFwcGVuZFN0YXRlICpub2RlKQogCUFzc2VydChub2RlLT5hc19wc3Rh dGUpOwogCiAJLyogU2hvdWxkbid0IGhhdmUgYmVlbiBjYWxsZWQgd2hlbiBydW4tdGltZSBwcnVu aW5nIGlzIG5vdCBlbmFibGVkICovCi0JQXNzZXJ0KG5vZGUtPmFzX3BydW5lX3N0YXRlKTsKKwlB c3NlcnQobm9kZS0+YXMucHJ1bmVfc3RhdGUpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiBhbGwg cGxhbnMgYXJlIHZhbGlkICovCi0JaWYgKGJtc19udW1fbWVtYmVycyhub2RlLT5hc192YWxpZF9z dWJwbGFucykgPT0gbm9kZS0+YXNfbnBsYW5zKQorCWlmIChibXNfbnVtX21lbWJlcnMobm9kZS0+ YXMudmFsaWRfc3VicGxhbnMpID09IG5vZGUtPmFzLm5wbGFucykKIAkJcmV0dXJuOwogCiAJLyog TWFyayBhbGwgbm9uLXZhbGlkIHBsYW5zIGFzIGZpbmlzaGVkICovCi0JZm9yIChpID0gMDsgaSA8 IG5vZGUtPmFzX25wbGFuczsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBub2RlLT5hcy5ucGxhbnM7 IGkrKykKIAl7Ci0JCWlmICghYm1zX2lzX21lbWJlcihpLCBub2RlLT5hc192YWxpZF9zdWJwbGFu cykpCisJCWlmICghYm1zX2lzX21lbWJlcihpLCBub2RlLT5hcy52YWxpZF9zdWJwbGFucykpCiAJ CQlub2RlLT5hc19wc3RhdGUtPnBhX2ZpbmlzaGVkW2ldID0gdHJ1ZTsKIAl9CiB9CkBAIC04Nzgs NDcgKzY3MSwyNSBAQCBtYXJrX2ludmFsaWRfc3VicGxhbnNfYXNfZmluaXNoZWQoQXBwZW5kU3Rh dGUgKm5vZGUpCiBzdGF0aWMgdm9pZAogRXhlY0FwcGVuZEFzeW5jQmVnaW4oQXBwZW5kU3RhdGUg Km5vZGUpCiB7Ci0JaW50CQkJaTsKLQotCS8qIEJhY2t3YXJkIHNjYW4gaXMgbm90IHN1cHBvcnRl ZCBieSBhc3luYy1hd2FyZSBBcHBlbmRzLiAqLwotCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKG5vZGUtPnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKTsKLQotCS8qIFdlIHNob3VsZCBuZXZl ciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KLQlBc3NlcnQobm9kZS0+ YXNfbnBsYW5zID4gMCk7Ci0KLQkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhl cmUgYXJlIG5vIGFzeW5jIHN1YnBsYW5zLiAqLwotCUFzc2VydChub2RlLT5hc19uYXN5bmNwbGFu cyA+IDApOwotCiAJLyogSWYgd2UndmUgeWV0IHRvIGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxh bnMgdGhlbiBkbyBzbyBub3cuICovCi0JaWYgKCFub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVu dGlmaWVkKQorCWlmICghbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKIAl7Ci0J CW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhu b2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwotCQlub2RlLT5hc192YWxpZF9zdWJw bGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnMgPQorCQkJ RXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFzLnBydW5lX3N0YXRlLCBmYWxzZSwgTlVM TCk7CisJCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwogCiAJCWNs YXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKG5vZGUpOwogCX0KIAogCS8qIEluaXRpYWxpemUgc3Rh dGUgdmFyaWFibGVzLiAqLwotCW5vZGUtPmFzX3N5bmNkb25lID0gYm1zX2lzX2VtcHR5KG5vZGUt PmFzX3ZhbGlkX3N1YnBsYW5zKTsKLQlub2RlLT5hc19uYXN5bmNyZW1haW4gPSBibXNfbnVtX21l bWJlcnMobm9kZS0+YXNfdmFsaWRfYXN5bmNwbGFucyk7CisJbm9kZS0+YXNfc3luY2RvbmUgPSBi bXNfaXNfZW1wdHkobm9kZS0+YXMudmFsaWRfc3VicGxhbnMpOworCW5vZGUtPmFzX25hc3luY3Jl bWFpbiA9IGJtc19udW1fbWVtYmVycyhub2RlLT5hcy52YWxpZF9hc3luY3BsYW5zKTsKIAogCS8q IE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwog CWlmIChub2RlLT5hc19uYXN5bmNyZW1haW4gPT0gMCkKIAkJcmV0dXJuOwogCi0JLyogTWFrZSBh IHJlcXVlc3QgZm9yIGVhY2ggb2YgdGhlIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwotCWkgPSAt MTsKLQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXNfdmFsaWRfYXN5bmNwbGFu cywgaSkpID49IDApCi0JewotCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hc19hc3luY3Jl cXVlc3RzW2ldOwotCi0JCUFzc2VydChhcmVxLT5yZXF1ZXN0X2luZGV4ID09IGkpOwotCQlBc3Nl cnQoIWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpOwotCi0JCS8qIERvIHRoZSBhY3R1YWwgd29yay4g Ki8KLQkJRXhlY0FzeW5jUmVxdWVzdChhcmVxKTsKLQl9CisJRXhlY0FwcGVuZGVyQXN5bmNCZWdp bigmbm9kZS0+YXMpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05NjMsNyArNzM0LDcgQEAgRXhlY0Fw cGVuZEFzeW5jR2V0TmV4dChBcHBlbmRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKipyZXN1 bHQpCiAJaWYgKG5vZGUtPmFzX3N5bmNkb25lKQogCXsKIAkJQXNzZXJ0KG5vZGUtPmFzX25hc3lu Y3JlbWFpbiA9PSAwKTsKLQkJKnJlc3VsdCA9IEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jl c3VsdFR1cGxlU2xvdCk7CisJCSpyZXN1bHQgPSBFeGVjQ2xlYXJUdXBsZShub2RlLT5hcy5wcy5w c19SZXN1bHRUdXBsZVNsb3QpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKQEAgLTk4Myw3ICs3NTQs NyBAQCBFeGVjQXBwZW5kQXN5bmNSZXF1ZXN0KEFwcGVuZFN0YXRlICpub2RlLCBUdXBsZVRhYmxl U2xvdCAqKnJlc3VsdCkKIAlpbnQJCQlpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBh cmUgbm8gYXN5bmMgc3VicGxhbnMgbmVlZGluZyBhIG5ldyByZXF1ZXN0LiAqLwotCWlmIChibXNf aXNfZW1wdHkobm9kZS0+YXNfbmVlZHJlcXVlc3QpKQorCWlmIChibXNfaXNfZW1wdHkobm9kZS0+ YXMubmVlZHJlcXVlc3QpKQogCXsKIAkJQXNzZXJ0KG5vZGUtPmFzX25hc3luY3Jlc3VsdHMgPT0g MCk7CiAJCXJldHVybiBmYWxzZTsKQEAgLTk5NiwxNyArNzY3LDE3IEBAIEV4ZWNBcHBlbmRBc3lu Y1JlcXVlc3QoQXBwZW5kU3RhdGUgKm5vZGUsIFR1cGxlVGFibGVTbG90ICoqcmVzdWx0KQogCWlm IChub2RlLT5hc19uYXN5bmNyZXN1bHRzID4gMCkKIAl7CiAJCS0tbm9kZS0+YXNfbmFzeW5jcmVz dWx0czsKLQkJKnJlc3VsdCA9IG5vZGUtPmFzX2FzeW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNy ZXN1bHRzXTsKKwkJKnJlc3VsdCA9IG5vZGUtPmFzLmFzeW5jcmVzdWx0c1tub2RlLT5hc19uYXN5 bmNyZXN1bHRzXTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCiAJLyogTWFrZSBhIG5ldyByZXF1ZXN0 IGZvciBlYWNoIG9mIHRoZSBhc3luYyBzdWJwbGFucyB0aGF0IG5lZWQgaXQuICovCi0JbmVlZHJl cXVlc3QgPSBub2RlLT5hc19uZWVkcmVxdWVzdDsKLQlub2RlLT5hc19uZWVkcmVxdWVzdCA9IE5V TEw7CisJbmVlZHJlcXVlc3QgPSBub2RlLT5hcy5uZWVkcmVxdWVzdDsKKwlub2RlLT5hcy5uZWVk cmVxdWVzdCA9IE5VTEw7CiAJaSA9IC0xOwogCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihu ZWVkcmVxdWVzdCwgaSkpID49IDApCiAJewotCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5h c19hc3luY3JlcXVlc3RzW2ldOworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hcy5hc3lu Y3JlcXVlc3RzW2ldOwogCiAJCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KIAkJRXhlY0FzeW5j UmVxdWVzdChhcmVxKTsKQEAgLTEwMTcsNyArNzg4LDcgQEAgRXhlY0FwcGVuZEFzeW5jUmVxdWVz dChBcHBlbmRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKipyZXN1bHQpCiAJaWYgKG5vZGUt PmFzX25hc3luY3Jlc3VsdHMgPiAwKQogCXsKIAkJLS1ub2RlLT5hc19uYXN5bmNyZXN1bHRzOwot CQkqcmVzdWx0ID0gbm9kZS0+YXNfYXN5bmNyZXN1bHRzW25vZGUtPmFzX25hc3luY3Jlc3VsdHNd OworCQkqcmVzdWx0ID0gbm9kZS0+YXMuYXN5bmNyZXN1bHRzW25vZGUtPmFzX25hc3luY3Jlc3Vs dHNdOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKQEAgLTEwMzMsMTA1ICs4MDQsMTIgQEAgRXhlY0Fw cGVuZEFzeW5jUmVxdWVzdChBcHBlbmRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKipyZXN1 bHQpCiBzdGF0aWMgdm9pZAogRXhlY0FwcGVuZEFzeW5jRXZlbnRXYWl0KEFwcGVuZFN0YXRlICpu b2RlKQogewotCWludAkJCW5ldmVudHMgPSBub2RlLT5hc19uYXN5bmNwbGFucyArIDI7CiAJbG9u ZwkJdGltZW91dCA9IG5vZGUtPmFzX3N5bmNkb25lID8gLTEgOiAwOwotCVdhaXRFdmVudAlvY2N1 cnJlZF9ldmVudFtFVkVOVF9CVUZGRVJfU0laRV07Ci0JaW50CQkJbm9jY3VycmVkOwotCWludAkJ CWk7CiAKIAkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHZh bGlkIGFzeW5jIHN1YnBsYW5zLiAqLwogCUFzc2VydChub2RlLT5hc19uYXN5bmNyZW1haW4gPiAw KTsKIAotCUFzc2VydChub2RlLT5hc19ldmVudHNldCA9PSBOVUxMKTsKLQlub2RlLT5hc19ldmVu dHNldCA9IENyZWF0ZVdhaXRFdmVudFNldChDdXJyZW50UmVzb3VyY2VPd25lciwgbmV2ZW50cyk7 Ci0JQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+YXNfZXZlbnRzZXQsIFdMX0VYSVRfT05fUE1fREVB VEgsIFBHSU5WQUxJRF9TT0NLRVQsCi0JCQkJCSAgTlVMTCwgTlVMTCk7Ci0KLQkvKiBHaXZlIGVh Y2ggd2FpdGluZyBzdWJwbGFuIGEgY2hhbmNlIHRvIGFkZCBhbiBldmVudC4gKi8KLQlpID0gLTE7 Ci0Jd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX2FzeW5jcGxhbnMsIGkpKSA+ PSAwKQotCXsKLQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXNfYXN5bmNyZXF1ZXN0c1tp XTsKLQotCQlpZiAoYXJlcS0+Y2FsbGJhY2tfcGVuZGluZykKLQkJCUV4ZWNBc3luY0NvbmZpZ3Vy ZVdhaXQoYXJlcSk7Ci0JfQotCi0JLyoKLQkgKiBObyBuZWVkIGZvciBmdXJ0aGVyIHByb2Nlc3Np bmcgaWYgbm9uZSBvZiB0aGUgc3VicGxhbnMgY29uZmlndXJlZCBhbnkKLQkgKiBldmVudHMuCi0J ICovCi0JaWYgKEdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKG5vZGUtPmFzX2V2ZW50c2V0KSA9 PSAxKQotCXsKLQkJRnJlZVdhaXRFdmVudFNldChub2RlLT5hc19ldmVudHNldCk7Ci0JCW5vZGUt PmFzX2V2ZW50c2V0ID0gTlVMTDsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogQWRkIHRoZSBw cm9jZXNzIGxhdGNoIHRvIHRoZSBzZXQsIHNvIHRoYXQgd2Ugd2FrZSB1cCB0byBwcm9jZXNzIHRo ZQotCSAqIHN0YW5kYXJkIGludGVycnVwdHMgd2l0aCBDSEVDS19GT1JfSU5URVJSVVBUUygpLgot CSAqCi0JICogTk9URTogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgaXQncyBpbXBvcnRhbnQgdGhh dCB0aGlzIGlzIGFkZGVkIHRvIHRoZQotCSAqIFdhaXRFdmVudFNldCBhZnRlciB0aGUgRXhlY0Fz eW5jQ29uZmlndXJlV2FpdCgpIGNhbGxzLiAgTmFtZWx5LAotCSAqIHBvc3RncmVzX2ZkdyBjYWxs cyAiR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMoc2V0KSA9PSAxIiB0byBjaGVjayBpZgotCSAq IGFueSBvdGhlciBldmVudHMgYXJlIGluIHRoZSBzZXQuICBUaGF0J3MgYSBwb29yIGRlc2lnbiwg aXQncwotCSAqIHF1ZXN0aW9uYWJsZSBmb3IgcG9zdGdyZXNfZmR3IHRvIGJlIGRvaW5nIHRoYXQg aW4gdGhlIGZpcnN0IHBsYWNlLCBidXQKLQkgKiB3ZSBjYW5ub3QgY2hhbmdlIGl0IG5vdy4gIFRo ZSBwYXR0ZXJuIGhhcyBwb3NzaWJseSBiZWVuIGNvcGllZCB0byBvdGhlcgotCSAqIGV4dGVuc2lv bnMgdG9vLgotCSAqLwotCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPmFzX2V2ZW50c2V0LCBXTF9M QVRDSF9TRVQsIFBHSU5WQUxJRF9TT0NLRVQsCi0JCQkJCSAgTXlMYXRjaCwgTlVMTCk7Ci0KLQkv KiBSZXR1cm4gYXQgbW9zdCBFVkVOVF9CVUZGRVJfU0laRSBldmVudHMgaW4gb25lIGNhbGwuICov Ci0JaWYgKG5ldmVudHMgPiBFVkVOVF9CVUZGRVJfU0laRSkKLQkJbmV2ZW50cyA9IEVWRU5UX0JV RkZFUl9TSVpFOwotCi0JLyoKLQkgKiBJZiB0aGUgdGltZW91dCBpcyAtMSwgd2FpdCB1bnRpbCBh dCBsZWFzdCBvbmUgZXZlbnQgb2NjdXJzLiAgSWYgdGhlCi0JICogdGltZW91dCBpcyAwLCBwb2xs IGZvciBldmVudHMsIGJ1dCBkbyBub3Qgd2FpdCBhdCBhbGwuCi0JICovCi0Jbm9jY3VycmVkID0g V2FpdEV2ZW50U2V0V2FpdChub2RlLT5hc19ldmVudHNldCwgdGltZW91dCwgb2NjdXJyZWRfZXZl bnQsCi0JCQkJCQkJCSBuZXZlbnRzLCBXQUlUX0VWRU5UX0FQUEVORF9SRUFEWSk7Ci0JRnJlZVdh aXRFdmVudFNldChub2RlLT5hc19ldmVudHNldCk7Ci0Jbm9kZS0+YXNfZXZlbnRzZXQgPSBOVUxM OwotCWlmIChub2NjdXJyZWQgPT0gMCkKLQkJcmV0dXJuOwotCi0JLyogRGVsaXZlciBub3RpZmlj YXRpb25zLiAqLwotCWZvciAoaSA9IDA7IGkgPCBub2NjdXJyZWQ7IGkrKykKLQl7Ci0JCVdhaXRF dmVudCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07Ci0KLQkJLyoKLQkJICogRWFjaCB3YWl0aW5n IHN1YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJlZCBpdHMgd2FpdCBldmVudCB3aXRoCi0JCSAq IHVzZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0cyBBc3luY1JlcXVlc3QuCi0JCSAqLwotCQlp ZiAoKHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFEQUJMRSkgIT0gMCkKLQkJewotCQkJQXN5bmNS ZXF1ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAqKSB3LT51c2VyX2RhdGE7Ci0KLQkJCWlmIChh cmVxLT5jYWxsYmFja19wZW5kaW5nKQotCQkJewotCQkJCS8qCi0JCQkJICogTWFyayBpdCBhcyBu byBsb25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAgV2UgbXVzdCBkbyB0aGlzCi0JCQkJICogYmVm b3JlIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBpbiBjYXNlIHRoZSBjYWxsYmFjayByZXNldHMK LQkJCQkgKiB0aGUgZmxhZy4KLQkJCQkgKi8KLQkJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0g ZmFsc2U7Ci0KLQkJCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCQkJRXhlY0FzeW5jTm90 aWZ5KGFyZXEpOwotCQkJfQotCQl9Ci0KLQkJLyogSGFuZGxlIHN0YW5kYXJkIGludGVycnVwdHMg Ki8KLQkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQpICE9IDApCi0JCXsKLQkJCVJlc2V0 TGF0Y2goTXlMYXRjaCk7Ci0JCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQl9Ci0JfQorCUV4 ZWNBcHBlbmRlckFzeW5jRXZlbnRXYWl0KCZub2RlLT5hcywgdGltZW91dCwgV0FJVF9FVkVOVF9B UFBFTkRfUkVBRFkpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTY3LDE0ICs4NDUsMTQgQEAgRXhl Y0FzeW5jQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQogCX0KIAogCS8qIFNhdmUg cmVzdWx0IHNvIHdlIGNhbiByZXR1cm4gaXQuICovCi0JQXNzZXJ0KG5vZGUtPmFzX25hc3luY3Jl c3VsdHMgPCBub2RlLT5hc19uYXN5bmNwbGFucyk7Ci0Jbm9kZS0+YXNfYXN5bmNyZXN1bHRzW25v ZGUtPmFzX25hc3luY3Jlc3VsdHMrK10gPSBzbG90OworCUFzc2VydChub2RlLT5hc19uYXN5bmNy ZXN1bHRzIDwgbm9kZS0+YXMubmFzeW5jcGxhbnMpOworCW5vZGUtPmFzLmFzeW5jcmVzdWx0c1tu b2RlLT5hc19uYXN5bmNyZXN1bHRzKytdID0gc2xvdDsKIAogCS8qCiAJICogTWFyayB0aGUgc3Vi cGxhbiB0aGF0IHJldHVybmVkIGEgcmVzdWx0IGFzIHJlYWR5IGZvciBhIG5ldyByZXF1ZXN0LiAg V2UKIAkgKiBkb24ndCBsYXVuY2ggYW5vdGhlciBvbmUgaGVyZSBpbW1lZGlhdGVseSBiZWNhdXNl IGl0IG1pZ2h0IGNvbXBsZXRlLgogCSAqLwotCW5vZGUtPmFzX25lZWRyZXF1ZXN0ID0gYm1zX2Fk ZF9tZW1iZXIobm9kZS0+YXNfbmVlZHJlcXVlc3QsCisJbm9kZS0+YXMubmVlZHJlcXVlc3QgPSBi bXNfYWRkX21lbWJlcihub2RlLT5hcy5uZWVkcmVxdWVzdCwKIAkJCQkJCQkJCQkgIGFyZXEtPnJl cXVlc3RfaW5kZXgpOwogfQogCkBAIC0xMTg5LDEwICs4NjcsMTAgQEAgRXhlY0FzeW5jQXBwZW5k UmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQogc3RhdGljIHZvaWQKIGNsYXNzaWZ5X21hdGNo aW5nX3N1YnBsYW5zKEFwcGVuZFN0YXRlICpub2RlKQogewotCUFzc2VydChub2RlLT5hc192YWxp ZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKKwlBc3NlcnQobm9kZS0+YXMudmFsaWRfc3VicGxhbnNf aWRlbnRpZmllZCk7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2YWxpZCBz dWJwbGFucy4gKi8KLQlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zKSkK KwlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zKSkKIAl7CiAJCW5vZGUt PmFzX3N5bmNkb25lID0gdHJ1ZTsKIAkJbm9kZS0+YXNfbmFzeW5jcmVtYWluID0gMDsKQEAgLTEy MDEsOCArODc5LDggQEAgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoQXBwZW5kU3RhdGUgKm5v ZGUpCiAKIAkvKiBObyB2YWxpZCBhc3luYyBzdWJwbGFucyBpZGVudGlmaWVkLiAqLwogCWlmICgh Y2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnNfY29tbW9uKAotCQkJCQkJCQkJCSAgICZub2RlLT5h c192YWxpZF9zdWJwbGFucywKLQkJCQkJCQkJCQkgICBub2RlLT5hc19hc3luY3BsYW5zLAotCQkJ CQkJCQkJCSAgICZub2RlLT5hc192YWxpZF9hc3luY3BsYW5zKSkKKwkJCQkJCQkJCQkgICAmbm9k ZS0+YXMudmFsaWRfc3VicGxhbnMsCisJCQkJCQkJCQkJICAgbm9kZS0+YXMuYXN5bmNwbGFucywK KwkJCQkJCQkJCQkgICAmbm9kZS0+YXMudmFsaWRfYXN5bmNwbGFucykpCiAJCW5vZGUtPmFzX25h c3luY3JlbWFpbiA9IDA7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl TWVyZ2VBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCmlu ZGV4IDU2MWExY2UzMjYwLi4zZDRkODM4NjE3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1l cmdlQXBwZW5kLmMKQEAgLTM4LDYgKzM4LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAK KyNpbmNsdWRlICJleGVjdXRvci9leGVjQXBwZW5kLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhl Y3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjQXN5bmMuaCIKICNpbmNsdWRlICJleGVj dXRvci9leGVjUGFydGl0aW9uLmgiCkBAIC03NywxNCArNzgsNyBAQCBNZXJnZUFwcGVuZFN0YXRl ICoKIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRl LCBpbnQgZWZsYWdzKQogewogCU1lcmdlQXBwZW5kU3RhdGUgKm1lcmdlc3RhdGUgPSBtYWtlTm9k ZShNZXJnZUFwcGVuZFN0YXRlKTsKLQlQbGFuU3RhdGUgKiptZXJnZXBsYW5zdGF0ZXM7Ci0JY29u c3QgVHVwbGVUYWJsZVNsb3RPcHMgKm1lcmdlb3BzOwotCUJpdG1hcHNldCAgKnZhbGlkc3VicGxh bnM7Ci0JaW50CQkJbnBsYW5zOwotCWludAkJCWksCi0JCQkJajsKLQlCaXRtYXBzZXQgICphc3lu Y3BsYW5zOwotCWludAkJCW5hc3luY3BsYW5zOworCWludAkJCWk7CiAKIAkvKiBjaGVjayBmb3Ig dW5zdXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShlZmxhZ3MgJiAoRVhFQ19GTEFHX0JBQ0tX QVJEIHwgRVhFQ19GTEFHX01BUkspKSk7CkBAIC05MiwxNTQgKzg2LDI3IEBAIEV4ZWNJbml0TWVy Z2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQog CS8qCiAJICogY3JlYXRlIG5ldyBNZXJnZUFwcGVuZFN0YXRlIGZvciBvdXIgbm9kZQogCSAqLwot CW1lcmdlc3RhdGUtPnBzLnBsYW4gPSAoUGxhbiAqKSBub2RlOwotCW1lcmdlc3RhdGUtPnBzLnN0 YXRlID0gZXN0YXRlOwotCW1lcmdlc3RhdGUtPnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNNZXJnZUFw cGVuZDsKLQotCS8qIElmIHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIGVuYWJsZWQsIHRo ZW4gc2V0IHRoYXQgdXAgbm93ICovCi0JaWYgKG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkK LQl7Ci0JCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7Ci0KLQkJLyoKLQkJICogU2V0 IHVwIHBydW5pbmcgZGF0YSBzdHJ1Y3R1cmUuICBUaGlzIGFsc28gaW5pdGlhbGl6ZXMgdGhlIHNl dCBvZgotCQkgKiBzdWJwbGFucyB0byBpbml0aWFsaXplICh2YWxpZHN1YnBsYW5zKSBieSB0YWtp bmcgaW50byBhY2NvdW50IHRoZQotCQkgKiByZXN1bHQgb2YgcGVyZm9ybWluZyBpbml0aWFsIHBy dW5pbmcgaWYgYW55LgotCQkgKi8KLQkJcHJ1bmVzdGF0ZSA9IEV4ZWNJbml0UGFydGl0aW9uRXhl Y1BydW5pbmcoJm1lcmdlc3RhdGUtPnBzLAotCQkJCQkJCQkJCQkJICBsaXN0X2xlbmd0aChub2Rl LT5tZXJnZXBsYW5zKSwKLQkJCQkJCQkJCQkJCSAgbm9kZS0+cGFydF9wcnVuZV9pbmRleCwKLQkJ CQkJCQkJCQkJCSAgbm9kZS0+YXBwcmVsaWRzLAotCQkJCQkJCQkJCQkJICAmdmFsaWRzdWJwbGFu cyk7Ci0JCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gcHJ1bmVzdGF0ZTsKLQkJbnBsYW5z ID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwotCi0JCS8qCi0JCSAqIFdoZW4gbm8g cnVuLXRpbWUgcHJ1bmluZyBpcyByZXF1aXJlZCBhbmQgdGhlcmUncyBhdCBsZWFzdCBvbmUKLQkJ ICogc3VicGxhbiwgd2UgY2FuIGZpbGwgbXNfdmFsaWRfc3VicGxhbnMgaW1tZWRpYXRlbHksIHBy ZXZlbnRpbmcKLQkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgot CQkgKi8KLQkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+IDApCi0J CXsKLQkJCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxM LCAwLCBucGxhbnMgLSAxKTsKLQkJCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50 aWZpZWQgPSB0cnVlOwotCQl9Ci0JfQotCWVsc2UKLQl7Ci0JCW5wbGFucyA9IGxpc3RfbGVuZ3Ro KG5vZGUtPm1lcmdlcGxhbnMpOwotCi0JCS8qCi0JCSAqIFdoZW4gcnVuLXRpbWUgcGFydGl0aW9u IHBydW5pbmcgaXMgbm90IGVuYWJsZWQgd2UgY2FuIGp1c3QgbWFyayBhbGwKLQkJICogc3VicGxh bnMgYXMgdmFsaWQ7IHRoZXkgbXVzdCBhbHNvIGFsbCBiZSBpbml0aWFsaXplZC4KLQkJICovCi0J CUFzc2VydChucGxhbnMgPiAwKTsKLQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSB2 YWxpZHN1YnBsYW5zID0KLQkJCWJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7Ci0J CW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwotCQltZXJn ZXN0YXRlLT5tc19wcnVuZV9zdGF0ZSA9IE5VTEw7Ci0JfQotCi0JbWVyZ2VwbGFuc3RhdGVzID0g cGFsbG9jX2FycmF5KFBsYW5TdGF0ZSAqLCBucGxhbnMpOwotCW1lcmdlc3RhdGUtPm1lcmdlcGxh bnMgPSBtZXJnZXBsYW5zdGF0ZXM7Ci0JbWVyZ2VzdGF0ZS0+bXNfbnBsYW5zID0gbnBsYW5zOwot Ci0JbWVyZ2VzdGF0ZS0+bXNfc2xvdHMgPSBwYWxsb2MwX2FycmF5KFR1cGxlVGFibGVTbG90ICos IG5wbGFucyk7Ci0JbWVyZ2VzdGF0ZS0+bXNfaGVhcCA9IGJpbmFyeWhlYXBfYWxsb2NhdGUobnBs YW5zLCBoZWFwX2NvbXBhcmVfc2xvdHMsCisJbWVyZ2VzdGF0ZS0+bXMucHMucGxhbiA9IChQbGFu ICopIG5vZGU7CisJbWVyZ2VzdGF0ZS0+bXMucHMuc3RhdGUgPSBlc3RhdGU7CisJbWVyZ2VzdGF0 ZS0+bXMucHMuRXhlY1Byb2NOb2RlID0gRXhlY01lcmdlQXBwZW5kOworCisJLyogSW5pdGlhbGl6 ZSBjb21tb24gZmllbGRzICovCisJRXhlY0luaXRBcHBlbmRlcigmbWVyZ2VzdGF0ZS0+bXMsCisJ CQkJCSAmbm9kZS0+YXAsCisJCQkJCSBlc3RhdGUsCisJCQkJCSBlZmxhZ3MsCisJCQkJCSAtMSwK KwkJCQkJIE5VTEwpOworCisJaWYgKG1lcmdlc3RhdGUtPm1zLm5hc3luY3BsYW5zID4gMCAmJiBt ZXJnZXN0YXRlLT5tcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCQljbGFzc2lmeV9tYXRj aGluZ19zdWJwbGFucyhtZXJnZXN0YXRlKTsKKworCW1lcmdlc3RhdGUtPm1zX3Nsb3RzID0gcGFs bG9jMF9hcnJheShUdXBsZVRhYmxlU2xvdCAqLCBtZXJnZXN0YXRlLT5tcy5ucGxhbnMpOworCW1l cmdlc3RhdGUtPm1zX2hlYXAgPSBiaW5hcnloZWFwX2FsbG9jYXRlKG1lcmdlc3RhdGUtPm1zLm5w bGFucywgaGVhcF9jb21wYXJlX3Nsb3RzLAogCQkJCQkJCQkJCQkgIG1lcmdlc3RhdGUpOwogCi0J LyoKLQkgKiBjYWxsIEV4ZWNJbml0Tm9kZSBvbiBlYWNoIG9mIHRoZSB2YWxpZCBwbGFucyB0byBi ZSBleGVjdXRlZCBhbmQgc2F2ZQotCSAqIHRoZSByZXN1bHRzIGludG8gdGhlIG1lcmdlcGxhbnN0 YXRlcyBhcnJheS4KLQkgKi8KLQlqID0gMDsKLQlhc3luY3BsYW5zID0gTlVMTDsKLQluYXN5bmNw bGFucyA9IDA7Ci0KLQlpID0gLTE7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHZhbGlk c3VicGxhbnMsIGkpKSA+PSAwKQotCXsKLQkJUGxhbgkgICAqaW5pdE5vZGUgPSAoUGxhbiAqKSBs aXN0X250aChub2RlLT5tZXJnZXBsYW5zLCBpKTsKLQotCQkvKgotCQkgKiBSZWNvcmQgYXN5bmMg c3VicGxhbnMuICBXaGVuIGV4ZWN1dGluZyBFdmFsUGxhblF1YWwsIHdlIHRyZWF0IHRoZW0KLQkJ ICogYXMgc3luYyBvbmVzOyBkb24ndCBkbyB0aGlzIHdoZW4gaW5pdGlhbGl6aW5nIGFuIEV2YWxQ bGFuUXVhbCBwbGFuCi0JCSAqIHRyZWUuCi0JCSAqLwotCQlpZiAoaW5pdE5vZGUtPmFzeW5jX2Nh cGFibGUgJiYgZXN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpCi0JCXsKLQkJCWFzeW5jcGxh bnMgPSBibXNfYWRkX21lbWJlcihhc3luY3BsYW5zLCBqKTsKLQkJCW5hc3luY3BsYW5zKys7Ci0J CX0KLQotCQltZXJnZXBsYW5zdGF0ZXNbaisrXSA9IEV4ZWNJbml0Tm9kZShpbml0Tm9kZSwgZXN0 YXRlLCBlZmxhZ3MpOwotCX0KLQotCS8qCi0JICogSW5pdGlhbGl6ZSBNZXJnZUFwcGVuZCdzIHJl c3VsdCB0dXBsZSB0eXBlIGFuZCBzbG90LiAgSWYgdGhlIGNoaWxkCi0JICogcGxhbnMgYWxsIHBy b2R1Y2UgdGhlIHNhbWUgZml4ZWQgc2xvdCB0eXBlLCB3ZSBjYW4gdXNlIHRoYXQgc2xvdCB0eXBl OwotCSAqIG90aGVyd2lzZSBtYWtlIGEgdmlydHVhbCBzbG90LiAgKE5vdGUgdGhhdCB0aGUgcmVz dWx0IHNsb3QgaXRzZWxmIGlzCi0JICogdXNlZCBvbmx5IHRvIHJldHVybiBhIG51bGwgdHVwbGUg YXQgZW5kIG9mIGV4ZWN1dGlvbjsgcmVhbCB0dXBsZXMgYXJlCi0JICogcmV0dXJuZWQgdG8gdGhl IGNhbGxlciBpbiB0aGUgY2hpbGRyZW4ncyBvd24gcmVzdWx0IHNsb3RzLiAgV2hhdCB3ZSBhcmUK LQkgKiBkb2luZyBoZXJlIGlzIGFsbG93aW5nIHRoZSBwYXJlbnQgcGxhbiBub2RlIHRvIG9wdGlt aXplIGlmIHRoZQotCSAqIE1lcmdlQXBwZW5kIHdpbGwgcmV0dXJuIG9ubHkgb25lIGtpbmQgb2Yg c2xvdC4pCi0JICovCi0JbWVyZ2VvcHMgPSBFeGVjR2V0Q29tbW9uU2xvdE9wcyhtZXJnZXBsYW5z dGF0ZXMsIGopOwotCWlmIChtZXJnZW9wcyAhPSBOVUxMKQotCXsKLQkJRXhlY0luaXRSZXN1bHRU dXBsZVNsb3RUTCgmbWVyZ2VzdGF0ZS0+cHMsIG1lcmdlb3BzKTsKLQl9Ci0JZWxzZQotCXsKLQkJ RXhlY0luaXRSZXN1bHRUdXBsZVNsb3RUTCgmbWVyZ2VzdGF0ZS0+cHMsICZUVFNPcHNWaXJ0dWFs KTsKLQkJLyogc2hvdyB0aGF0IHRoZSBvdXRwdXQgc2xvdCB0eXBlIGlzIG5vdCBmaXhlZCAqLwot CQltZXJnZXN0YXRlLT5wcy5yZXN1bHRvcHNzZXQgPSB0cnVlOwotCQltZXJnZXN0YXRlLT5wcy5y ZXN1bHRvcHNmaXhlZCA9IGZhbHNlOwotCX0KLQotCS8qCi0JICogTWlzY2VsbGFuZW91cyBpbml0 aWFsaXphdGlvbgotCSAqLwotCW1lcmdlc3RhdGUtPnBzLnBzX1Byb2pJbmZvID0gTlVMTDsKLQot CS8qIEluaXRpYWxpemUgYXN5bmMgc3RhdGUgKi8KLQltZXJnZXN0YXRlLT5tc19hc3luY3BsYW5z ID0gYXN5bmNwbGFuczsKLQltZXJnZXN0YXRlLT5tc19uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5z OwotCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVxdWVzdHMgPSBOVUxMOwotCW1lcmdlc3RhdGUtPm1z X2FzeW5jcmVzdWx0cyA9IE5VTEw7CiAJbWVyZ2VzdGF0ZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9 IE5VTEw7CiAJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOwotCW1lcmdlc3RhdGUt Pm1zX25lZWRyZXF1ZXN0ID0gTlVMTDsKLQltZXJnZXN0YXRlLT5tc19ldmVudHNldCA9IE5VTEw7 Ci0JbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfYXN5bmNwbGFucyA9IE5VTEw7Ci0KLQlpZiAobmFzeW5j cGxhbnMgPiAwKQotCXsKLQkJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXF1ZXN0cyA9IChBc3luY1Jl cXVlc3QgKiopCi0JCQlwYWxsb2MwKG5wbGFucyAqIHNpemVvZihBc3luY1JlcXVlc3QgKikpOwot Ci0JCWkgPSAtMTsKLQkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGFzeW5jcGxhbnMsIGkp KSA+PSAwKQotCQl7Ci0JCQlBc3luY1JlcXVlc3QgKmFyZXE7Ci0KLQkJCWFyZXEgPSBwYWxsb2Mo c2l6ZW9mKEFzeW5jUmVxdWVzdCkpOwotCQkJYXJlcS0+cmVxdWVzdG9yID0gKFBsYW5TdGF0ZSAq KSBtZXJnZXN0YXRlOwotCQkJYXJlcS0+cmVxdWVzdGVlID0gbWVyZ2VwbGFuc3RhdGVzW2ldOwot CQkJYXJlcS0+cmVxdWVzdF9pbmRleCA9IGk7Ci0JCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0g ZmFsc2U7Ci0JCQlhcmVxLT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7Ci0JCQlhcmVxLT5yZXN1 bHQgPSBOVUxMOwotCi0JCQltZXJnZXN0YXRlLT5tc19hc3luY3JlcXVlc3RzW2ldID0gYXJlcTsK LQkJfQotCi0JCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVzdWx0cyA9IChUdXBsZVRhYmxlU2xvdCAq KikKLQkJCXBhbGxvYzAobnBsYW5zICogc2l6ZW9mKFR1cGxlVGFibGVTbG90ICopKTsKLQotCQlp ZiAobWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKLQkJCWNsYXNzaWZ5 X21hdGNoaW5nX3N1YnBsYW5zKG1lcmdlc3RhdGUpOwotCX0KIAogCS8qCiAJICogaW5pdGlhbGl6 ZSBzb3J0LWtleSBpbmZvcm1hdGlvbgpAQCAtMjk0LDIwICsxNjEsMjAgQEAgRXhlY01lcmdlQXBw ZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCWlmICghbm9kZS0+bXNfaW5pdGlhbGl6ZWQpCiAJewog CQkvKiBOb3RoaW5nIHRvIGRvIGlmIGFsbCBzdWJwbGFucyB3ZXJlIHBydW5lZCAqLwotCQlpZiAo bm9kZS0+bXNfbnBsYW5zID09IDApCi0JCQlyZXR1cm4gRXhlY0NsZWFyVHVwbGUobm9kZS0+cHMu cHNfUmVzdWx0VHVwbGVTbG90KTsKKwkJaWYgKG5vZGUtPm1zLm5wbGFucyA9PSAwKQorCQkJcmV0 dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPm1zLnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CiAKIAkJ LyogSWYgd2UndmUgeWV0IHRvIGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhlbiBkbyBz byBub3cuICovCi0JCWlmICghbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJ aWYgKCFub2RlLT5tcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQogCQl7Ci0JCQlub2RlLT5t c192YWxpZF9zdWJwbGFucyA9Ci0JCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPm1z X3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7Ci0JCQlub2RlLT5tc192YWxpZF9zdWJwbGFuc19p ZGVudGlmaWVkID0gdHJ1ZTsKKwkJCW5vZGUtPm1zLnZhbGlkX3N1YnBsYW5zID0KKwkJCQlFeGVj RmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+bXMucHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsK KwkJCW5vZGUtPm1zLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwogCQkJY2xhc3Np ZnlfbWF0Y2hpbmdfc3VicGxhbnMobm9kZSk7CiAJCX0KIAogCQkvKiBJZiB0aGVyZSBhcmUgYW55 IGFzeW5jIHN1YnBsYW5zLCBiZWdpbiBleGVjdXRpbmcgdGhlbS4gKi8KLQkJaWYgKG5vZGUtPm1z X25hc3luY3BsYW5zID4gMCkKKwkJaWYgKG5vZGUtPm1zLm5hc3luY3BsYW5zID4gMCkKIAkJCUV4 ZWNNZXJnZUFwcGVuZEFzeW5jQmVnaW4obm9kZSk7CiAKIAkJLyoKQEAgLTMxNSwxNiArMTgyLDE2 IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICogYW5kIHNldCB1cCB0 aGUgaGVhcC4KIAkJICovCiAJCWkgPSAtMTsKLQkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVy KG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zLCBpKSkgPj0gMCkKKwkJd2hpbGUgKChpID0gYm1zX25l eHRfbWVtYmVyKG5vZGUtPm1zLnZhbGlkX3N1YnBsYW5zLCBpKSkgPj0gMCkKIAkJewotCQkJbm9k ZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUobm9kZS0+bWVyZ2VwbGFuc1tpXSk7CisJCQlu b2RlLT5tc19zbG90c1tpXSA9IEV4ZWNQcm9jTm9kZShub2RlLT5tcy5wbGFuc1tpXSk7CiAJCQlp ZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkpCiAJCQkJYmluYXJ5aGVhcF9hZGRfdW5v cmRlcmVkKG5vZGUtPm1zX2hlYXAsIEludDMyR2V0RGF0dW0oaSkpOwogCQl9CiAKIAkJLyogTG9v ayBhdCB2YWxpZCBhc3luYyBzdWJwbGFucyAqLwogCQlpID0gLTE7Ci0JCXdoaWxlICgoaSA9IGJt c19uZXh0X21lbWJlcihub2RlLT5tc192YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwkJd2hp bGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zLnZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+ PSAwKQogCQl7CiAJCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0dldE5leHQobm9kZSwgaSk7CiAJCQlp ZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkpCkBAIC0zNDUsMTIgKzIxMiwxMiBAQCBF eGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCSAqIHRvIG5vdCBwdWxsIHR1cGxl cyB1bnRpbCBuZWNlc3NhcnkuKQogCQkgKi8KIAkJaSA9IERhdHVtR2V0SW50MzIoYmluYXJ5aGVh cF9maXJzdChub2RlLT5tc19oZWFwKSk7Ci0JCWlmIChibXNfaXNfbWVtYmVyKGksIG5vZGUtPm1z X2FzeW5jcGxhbnMpKQorCQlpZiAoYm1zX2lzX21lbWJlcihpLCBub2RlLT5tcy5hc3luY3BsYW5z KSkKIAkJCUV4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0TmV4dChub2RlLCBpKTsKIAkJZWxzZQogCQl7 Ci0JCQlBc3NlcnQoYm1zX2lzX21lbWJlcihpLCBub2RlLT5tc192YWxpZF9zdWJwbGFucykpOwot CQkJbm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUobm9kZS0+bWVyZ2VwbGFuc1tpXSk7 CisJCQlBc3NlcnQoYm1zX2lzX21lbWJlcihpLCBub2RlLT5tcy52YWxpZF9zdWJwbGFucykpOwor CQkJbm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUobm9kZS0+bXMucGxhbnNbaV0pOwog CQl9CiAJCWlmICghVHVwSXNOdWxsKG5vZGUtPm1zX3Nsb3RzW2ldKSkKIAkJCWJpbmFyeWhlYXBf cmVwbGFjZV9maXJzdChub2RlLT5tc19oZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKQEAgLTM2MSw3 ICsyMjgsNyBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJaWYgKGJpbmFy eWhlYXBfZW1wdHkobm9kZS0+bXNfaGVhcCkpCiAJewogCQkvKiBBbGwgdGhlIHN1YnBsYW5zIGFy ZSBleGhhdXN0ZWQsIGFuZCBzbyBpcyB0aGUgaGVhcCAqLwotCQlyZXN1bHQgPSBFeGVjQ2xlYXJU dXBsZShub2RlLT5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOworCQlyZXN1bHQgPSBFeGVjQ2xlYXJU dXBsZShub2RlLT5tcy5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCX0KIAllbHNlCiAJewpAQCAt NDI3LDgxICsyOTQsMjEgQEAgaGVhcF9jb21wYXJlX3Nsb3RzKERhdHVtIGEsIERhdHVtIGIsIHZv aWQgKmFyZykKIHZvaWQKIEV4ZWNFbmRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2Rl KQogewotCVBsYW5TdGF0ZSAqKm1lcmdlcGxhbnM7Ci0JaW50CQkJbnBsYW5zOwotCWludAkJCWk7 Ci0KLQkvKgotCSAqIGdldCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBub2RlCi0JICovCi0JbWVyZ2Vw bGFucyA9IG5vZGUtPm1lcmdlcGxhbnM7Ci0JbnBsYW5zID0gbm9kZS0+bXNfbnBsYW5zOwotCi0J LyoKLQkgKiBzaHV0IGRvd24gZWFjaCBvZiB0aGUgc3Vic2NhbnMKLQkgKi8KLQlmb3IgKGkgPSAw OyBpIDwgbnBsYW5zOyBpKyspCi0JCUV4ZWNFbmROb2RlKG1lcmdlcGxhbnNbaV0pOworCUV4ZWNF bmRBcHBlbmRlcigmbm9kZS0+bXMpOwogfQogCiB2b2lkCiBFeGVjUmVTY2FuTWVyZ2VBcHBlbmQo TWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlpbnQJCQlpOwotCWludAkJCW5hc3luY3BsYW5z ID0gbm9kZS0+bXNfbmFzeW5jcGxhbnM7CisJaW50CQkJbmFzeW5jcGxhbnMgPSBub2RlLT5tcy5u YXN5bmNwbGFuczsKIAotCS8qCi0JICogSWYgYW55IFBBUkFNX0VYRUMgUGFyYW1zIHVzZWQgaW4g cHJ1bmluZyBleHByZXNzaW9ucyBoYXZlIGNoYW5nZWQsIHRoZW4KLQkgKiB3ZSdkIGJldHRlciB1 bnNldCB0aGUgdmFsaWQgc3VicGxhbnMgc28gdGhhdCB0aGV5IGFyZSByZXNlbGVjdGVkIGZvcgot CSAqIHRoZSBuZXcgcGFyYW1ldGVyIHZhbHVlcy4KLQkgKi8KLQlpZiAobm9kZS0+bXNfcHJ1bmVf c3RhdGUgJiYKLQkJYm1zX292ZXJsYXAobm9kZS0+cHMuY2hnUGFyYW0sCi0JCQkJCW5vZGUtPm1z X3BydW5lX3N0YXRlLT5leGVjcGFyYW1pZHMpKQotCXsKLQkJbm9kZS0+bXNfdmFsaWRfc3VicGxh bnNfaWRlbnRpZmllZCA9IGZhbHNlOwotCQlibXNfZnJlZShub2RlLT5tc192YWxpZF9zdWJwbGFu cyk7Ci0JCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gTlVMTDsKLQkJYm1zX2ZyZWUobm9kZS0+ bXNfdmFsaWRfYXN5bmNwbGFucyk7Ci0JCW5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxM OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBub2RlLT5tc19ucGxhbnM7IGkrKykKLQl7Ci0JCVBs YW5TdGF0ZSAgKnN1Ym5vZGUgPSBub2RlLT5tZXJnZXBsYW5zW2ldOwotCi0JCS8qCi0JCSAqIEV4 ZWNSZVNjYW4gZG9lc24ndCBrbm93IGFib3V0IG15IHN1YnBsYW5zLCBzbyBJIGhhdmUgdG8gZG8K LQkJICogY2hhbmdlZC1wYXJhbWV0ZXIgc2lnbmFsaW5nIG15c2VsZi4KLQkJICovCi0JCWlmIChu b2RlLT5wcy5jaGdQYXJhbSAhPSBOVUxMKQotCQkJVXBkYXRlQ2hhbmdlZFBhcmFtU2V0KHN1Ym5v ZGUsIG5vZGUtPnBzLmNoZ1BhcmFtKTsKLQotCQkvKgotCQkgKiBJZiBjaGdQYXJhbSBvZiBzdWJu b2RlIGlzIG5vdCBudWxsIHRoZW4gcGxhbiB3aWxsIGJlIHJlLXNjYW5uZWQgYnkKLQkJICogZmly c3QgRXhlY1Byb2NOb2RlLgotCQkgKi8KLQkJaWYgKHN1Ym5vZGUtPmNoZ1BhcmFtID09IE5VTEwp Ci0JCQlFeGVjUmVTY2FuKHN1Ym5vZGUpOwotCX0KKwlFeGVjUmVTY2FuQXBwZW5kZXIoJm5vZGUt Pm1zKTsKIAotCS8qIFJlc2V0IGFzeW5jIHN0YXRlICovCisJLyogUmVzZXQgc3BlY2lmaWMgbWVy Z2UgYXBwZW5kIGFzeW5jIHN0YXRlICovCiAJaWYgKG5hc3luY3BsYW5zID4gMCkKIAl7Ci0JCWkg PSAtMTsKLQkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zX2FzeW5jcGxhbnMs IGkpKSA+PSAwKQotCQl7Ci0JCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3Jl cXVlc3RzW2ldOwotCi0JCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7Ci0JCQlhcmVx LT5yZXF1ZXN0X2NvbXBsZXRlID0gZmFsc2U7Ci0JCQlhcmVxLT5yZXN1bHQgPSBOVUxMOwotCQl9 Ci0KIAkJYm1zX2ZyZWUobm9kZS0+bXNfYXN5bmNyZW1haW4pOwogCQlub2RlLT5tc19hc3luY3Jl bWFpbiA9IE5VTEw7Ci0JCWJtc19mcmVlKG5vZGUtPm1zX25lZWRyZXF1ZXN0KTsKLQkJbm9kZS0+ bXNfbmVlZHJlcXVlc3QgPSBOVUxMOwogCQlibXNfZnJlZShub2RlLT5tc19oYXNfYXN5bmNyZXN1 bHRzKTsKIAkJbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IE5VTEw7CiAJfQpAQCAtNTIwLDEw ICszMjcsMTAgQEAgRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUp CiBzdGF0aWMgdm9pZAogY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoTWVyZ2VBcHBlbmRTdGF0 ZSAqbm9kZSkKIHsKLQlBc3NlcnQobm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7 CisJQXNzZXJ0KG5vZGUtPm1zLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOwogCiAJLyogTm90 aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgc3VicGxhbnMuICovCi0JaWYgKGJtc19p c19lbXB0eShub2RlLT5tc192YWxpZF9zdWJwbGFucykpCisJaWYgKGJtc19pc19lbXB0eShub2Rl LT5tcy52YWxpZF9zdWJwbGFucykpCiAJewogCQlub2RlLT5tc19hc3luY3JlbWFpbiA9IE5VTEw7 CiAJCXJldHVybjsKQEAgLTUzMSw5ICszMzgsOSBAQCBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFu cyhNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogCiAJLyogTm8gdmFsaWQgYXN5bmMgc3VicGxhbnMg aWRlbnRpZmllZC4gKi8KIAlpZiAoIWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zX2NvbW1vbigK LQkJCQkJCQkJCQkgICAmbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMsCi0JCQkJCQkJCQkJICAgbm9k ZS0+bXNfYXN5bmNwbGFucywKLQkJCQkJCQkJCQkgICAmbm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFu cykpCisJCQkJCQkJCQkJICAgJm5vZGUtPm1zLnZhbGlkX3N1YnBsYW5zLAorCQkJCQkJCQkJCSAg IG5vZGUtPm1zLmFzeW5jcGxhbnMsCisJCQkJCQkJCQkJICAgJm5vZGUtPm1zLnZhbGlkX2FzeW5j cGxhbnMpKQogCQlub2RlLT5tc19hc3luY3JlbWFpbiA9IE5VTEw7CiB9CiAKQEAgLTU0NiwzOSAr MzUzLDE3IEBAIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1lcmdlQXBwZW5kU3RhdGUgKm5v ZGUpCiBzdGF0aWMgdm9pZAogRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdpbihNZXJnZUFwcGVuZFN0 YXRlICpub2RlKQogewotCWludAkJCWk7Ci0KLQkvKiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBw b3J0ZWQgYnkgYXN5bmMtYXdhcmUgTWVyZ2VBcHBlbmRzLiAqLwotCUFzc2VydChTY2FuRGlyZWN0 aW9uSXNGb3J3YXJkKG5vZGUtPnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKTsKLQotCS8qIFdlIHNo b3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KLQlBc3Nl cnQobm9kZS0+bXNfbnBsYW5zID4gMCk7Ci0KLQkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVk IHdoZW4gdGhlcmUgYXJlIG5vIGFzeW5jIHN1YnBsYW5zLiAqLwotCUFzc2VydChub2RlLT5tc19u YXN5bmNwbGFucyA+IDApOwotCiAJLyogRXhlY01lcmdlQXBwZW5kKCkgaWRlbnRpZmllcyB2YWxp ZCBzdWJwbGFucyAqLwotCUFzc2VydChub2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVk KTsKKwlBc3NlcnQobm9kZS0+bXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CiAKIAkvKiBJ bml0aWFsaXplIHN0YXRlIHZhcmlhYmxlcy4gKi8KLQlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJt c19jb3B5KG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMpOworCW5vZGUtPm1zX2FzeW5jcmVtYWlu ID0gYm1zX2NvcHkobm9kZS0+bXMudmFsaWRfYXN5bmNwbGFucyk7CiAKIAkvKiBOb3RoaW5nIHRv IGRvIGlmIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KIAlpZiAoYm1zX2lz X2VtcHR5KG5vZGUtPm1zX2FzeW5jcmVtYWluKSkKIAkJcmV0dXJuOwogCi0JLyogTWFrZSBhIHJl cXVlc3QgZm9yIGVhY2ggb2YgdGhlIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwotCWkgPSAtMTsK LQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucywg aSkpID49IDApCi0JewotCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVl c3RzW2ldOwotCi0JCUFzc2VydChhcmVxLT5yZXF1ZXN0X2luZGV4ID09IGkpOwotCQlBc3NlcnQo IWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpOwotCi0JCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8K LQkJRXhlY0FzeW5jUmVxdWVzdChhcmVxKTsKLQl9CisJRXhlY0FwcGVuZGVyQXN5bmNCZWdpbigm bm9kZS0+bXMpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02MzksNyArNDI0LDcgQEAgRXhlY01lcmdl QXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKIAkg Ki8KIAlpZiAoYm1zX2lzX21lbWJlcihtcGxhbiwgbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykp CiAJewotCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2RlLT5tc19hc3luY3Jlc3VsdHNbbXBs YW5dOworCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2RlLT5tcy5hc3luY3Jlc3VsdHNbbXBs YW5dOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKQEAgLTY0OSw3ICs0MzQsNyBAQCBFeGVjTWVyZ2VB cHBlbmRBc3luY1JlcXVlc3QoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSwgaW50IG1wbGFuKQogCSAq LwogCW5lZWRyZXF1ZXN0ID0gTlVMTDsKIAlpID0gLTE7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRf bWVtYmVyKG5vZGUtPm1zX25lZWRyZXF1ZXN0LCBpKSkgPj0gMCkKKwl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIobm9kZS0+bXMubmVlZHJlcXVlc3QsIGkpKSA+PSAwKQogCXsKIAkJaWYgKCFi bXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQogCQkJbmVlZHJlcXVl c3QgPSBibXNfYWRkX21lbWJlcihuZWVkcmVxdWVzdCwgaSk7CkBAIC02NjIsMTMgKzQ0NywxMyBA QCBFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3QoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSwgaW50 IG1wbGFuKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBDbGVhciBtc19uZWVkcmVxdWVzdCBmbGFn LCBhcyB3ZSBhcmUgZ29pbmcgdG8gc2VuZCByZXF1ZXN0cyBub3cgKi8KLQlub2RlLT5tc19uZWVk cmVxdWVzdCA9IGJtc19kZWxfbWVtYmVycyhub2RlLT5tc19uZWVkcmVxdWVzdCwgbmVlZHJlcXVl c3QpOworCW5vZGUtPm1zLm5lZWRyZXF1ZXN0ID0gYm1zX2RlbF9tZW1iZXJzKG5vZGUtPm1zLm5l ZWRyZXF1ZXN0LCBuZWVkcmVxdWVzdCk7CiAKIAkvKiBNYWtlIGEgbmV3IHJlcXVlc3QgZm9yIGVh Y2ggb2YgdGhlIGFzeW5jIHN1YnBsYW5zIHRoYXQgbmVlZCBpdC4gKi8KIAlpID0gLTE7CiAJd2hp bGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5lZWRyZXF1ZXN0LCBpKSkgPj0gMCkKIAl7Ci0JCUFz eW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2FzeW5jcmVxdWVzdHNbaV07CisJCUFzeW5jUmVx dWVzdCAqYXJlcSA9IG5vZGUtPm1zLmFzeW5jcmVxdWVzdHNbaV07CiAKIAkJLyoKIAkJICogV2Un dmUganVzdCBjaGVja2VkIHRoYXQgc3VicGxhbiBkb2Vzbid0IGFscmVhZHkgaGF2ZSBzb21lIGZl dGNoZWQKQEAgLTY4NCw3ICs0NjksNyBAQCBFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3QoTWVy Z2VBcHBlbmRTdGF0ZSAqbm9kZSwgaW50IG1wbGFuKQogCS8qIFJldHVybiBuZWVkZWQgYXN5bmNo cm9ub3VzbHktZ2VuZXJhdGVkIHJlc3VsdHMgaWYgYW55LiAqLwogCWlmIChibXNfaXNfbWVtYmVy KG1wbGFuLCBub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzKSkKIAl7Ci0JCW5vZGUtPm1zX3Nsb3Rz W21wbGFuXSA9IG5vZGUtPm1zX2FzeW5jcmVzdWx0c1ttcGxhbl07CisJCW5vZGUtPm1zX3Nsb3Rz W21wbGFuXSA9IG5vZGUtPm1zLmFzeW5jcmVzdWx0c1ttcGxhbl07CiAJCXJldHVybiB0cnVlOwog CX0KIApAQCAtNzA4LDcgKzQ5Myw3IEBAIEV4ZWNBc3luY01lcmdlQXBwZW5kUmVzcG9uc2UoQXN5 bmNSZXF1ZXN0ICphcmVxKQogCS8qIFdlIHNob3VsZCBoYW5kbGUgcHJldmlvdXMgYXN5bmMgcmVz dWx0IHByaW9yIHRvIGdldHRpbmcgbmV3IG9uZSAqLwogCUFzc2VydCghYm1zX2lzX21lbWJlcihh cmVxLT5yZXF1ZXN0X2luZGV4LCBub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzKSk7CiAKLQlub2Rl LT5tc19hc3luY3Jlc3VsdHNbYXJlcS0+cmVxdWVzdF9pbmRleF0gPSBOVUxMOworCW5vZGUtPm1z LmFzeW5jcmVzdWx0c1thcmVxLT5yZXF1ZXN0X2luZGV4XSA9IE5VTEw7CiAJLyogTm90aGluZyB0 byBkbyBpZiB0aGUgcmVxdWVzdCBpcyBwZW5kaW5nLiAqLwogCWlmICghYXJlcS0+cmVxdWVzdF9j b21wbGV0ZSkKIAl7CkBAIC03MzEsMTMgKzUxNiwxMyBAQCBFeGVjQXN5bmNNZXJnZUFwcGVuZFJl c3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIAlub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzID0g Ym1zX2FkZF9tZW1iZXIobm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cywKIAkJCQkJCQkJCQkJICAg YXJlcS0+cmVxdWVzdF9pbmRleCk7CiAJLyogU2F2ZSByZXN1bHQgc28gd2UgY2FuIHJldHVybiBp dC4gKi8KLQlub2RlLT5tc19hc3luY3Jlc3VsdHNbYXJlcS0+cmVxdWVzdF9pbmRleF0gPSBzbG90 OworCW5vZGUtPm1zLmFzeW5jcmVzdWx0c1thcmVxLT5yZXF1ZXN0X2luZGV4XSA9IHNsb3Q7CiAK IAkvKgogCSAqIE1hcmsgdGhlIHN1YnBsYW4gdGhhdCByZXR1cm5lZCBhIHJlc3VsdCBhcyByZWFk eSBmb3IgYSBuZXcgcmVxdWVzdC4gIFdlCiAJICogZG9uJ3QgbGF1bmNoIGFub3RoZXIgb25lIGhl cmUgaW1tZWRpYXRlbHkgYmVjYXVzZSBpdCBtaWdodCBjb21wbGV0ZS4KIAkgKi8KLQlub2RlLT5t c19uZWVkcmVxdWVzdCA9IGJtc19hZGRfbWVtYmVyKG5vZGUtPm1zX25lZWRyZXF1ZXN0LAorCW5v ZGUtPm1zLm5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1iZXIobm9kZS0+bXMubmVlZHJlcXVlc3Qs CiAJCQkJCQkJCQkJICBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKIH0KIApAQCAtNzUwLDEwMSArNTM1 LDggQEAgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEpCiBz dGF0aWMgdm9pZAogRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQoTWVyZ2VBcHBlbmRTdGF0 ZSAqbm9kZSkKIHsKLQlpbnQJCQluZXZlbnRzID0gbm9kZS0+bXNfbmFzeW5jcGxhbnMgKyAyOyAv KiBvbmUgZm9yIFBNIGRlYXRoIGFuZAotCQkJCQkJCQkJCQkJCSAqIG9uZSBmb3IgbGF0Y2ggKi8K LQlXYWl0RXZlbnQJb2NjdXJyZWRfZXZlbnRbRVZFTlRfQlVGRkVSX1NJWkVdOwotCWludAkJCW5v Y2N1cnJlZDsKLQlpbnQJCQlpOwotCiAJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVu IHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KIAlBc3NlcnQoYm1zX251bV9t ZW1iZXJzKG5vZGUtPm1zX2FzeW5jcmVtYWluKSA+IDApOwogCi0Jbm9kZS0+bXNfZXZlbnRzZXQg PSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVudFJlc291cmNlT3duZXIsIG5ldmVudHMpOwotCUFk ZFdhaXRFdmVudFRvU2V0KG5vZGUtPm1zX2V2ZW50c2V0LCBXTF9FWElUX09OX1BNX0RFQVRILCBQ R0lOVkFMSURfU09DS0VULAotCQkJCQkgIE5VTEwsIE5VTEwpOwotCi0JLyogR2l2ZSBlYWNoIHdh aXRpbmcgc3VicGxhbiBhIGNoYW5jZSB0byBhZGQgYW4gZXZlbnQuICovCi0JaSA9IC0xOwotCXdo aWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc19hc3luY3BsYW5zLCBpKSkgPj0gMCkK LQl7Ci0JCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2FzeW5jcmVxdWVzdHNbaV07Ci0K LQkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpCi0JCQlFeGVjQXN5bmNDb25maWd1cmVXYWl0 KGFyZXEpOwotCX0KLQotCS8qCi0JICogTm8gbmVlZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGlm IG5vbmUgb2YgdGhlIHN1YnBsYW5zIGNvbmZpZ3VyZWQgYW55Ci0JICogZXZlbnRzLgotCSAqLwot CWlmIChHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhub2RlLT5tc19ldmVudHNldCkgPT0gMSkK LQl7Ci0JCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+bXNfZXZlbnRzZXQpOwotCQlub2RlLT5tc19l dmVudHNldCA9IE5VTEw7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIEFkZCB0aGUgcHJvY2Vz cyBsYXRjaCB0byB0aGUgc2V0LCBzbyB0aGF0IHdlIHdha2UgdXAgdG8gcHJvY2VzcyB0aGUKLQkg KiBzdGFuZGFyZCBpbnRlcnJ1cHRzIHdpdGggQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4KLQkgKgot CSAqIE5PVEU6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGl0J3MgaW1wb3J0YW50IHRoYXQgdGhp cyBpcyBhZGRlZCB0byB0aGUKLQkgKiBXYWl0RXZlbnRTZXQgYWZ0ZXIgdGhlIEV4ZWNBc3luY0Nv bmZpZ3VyZVdhaXQoKSBjYWxscy4gIE5hbWVseSwKLQkgKiBwb3N0Z3Jlc19mZHcgY2FsbHMgIkdl dE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNldCkgPT0gMSIgdG8gY2hlY2sgaWYKLQkgKiBhbnkg b3RoZXIgZXZlbnRzIGFyZSBpbiB0aGUgc2V0LiAgVGhhdCdzIGEgcG9vciBkZXNpZ24sIGl0J3MK LQkgKiBxdWVzdGlvbmFibGUgZm9yIHBvc3RncmVzX2ZkdyB0byBiZSBkb2luZyB0aGF0IGluIHRo ZSBmaXJzdCBwbGFjZSwgYnV0Ci0JICogd2UgY2Fubm90IGNoYW5nZSBpdCBub3cuICBUaGUgcGF0 dGVybiBoYXMgcG9zc2libHkgYmVlbiBjb3BpZWQgdG8gb3RoZXIKLQkgKiBleHRlbnNpb25zIHRv by4KLQkgKi8KLQlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5tc19ldmVudHNldCwgV0xfTEFUQ0hf U0VULCBQR0lOVkFMSURfU09DS0VULAotCQkJCQkgIE15TGF0Y2gsIE5VTEwpOwotCi0JLyogUmV0 dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJWkUgZXZlbnRzIGluIG9uZSBjYWxsLiAqLwotCWlm IChuZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJWkUpCi0JCW5ldmVudHMgPSBFVkVOVF9CVUZGRVJf U0laRTsKLQotCS8qCi0JICogV2FpdCB1bnRpbCBhdCBsZWFzdCBvbmUgZXZlbnQgb2NjdXJzLgot CSAqLwotCW5vY2N1cnJlZCA9IFdhaXRFdmVudFNldFdhaXQobm9kZS0+bXNfZXZlbnRzZXQsIC0x IC8qIG5vIHRpbWVvdXQgKi8gLCBvY2N1cnJlZF9ldmVudCwKLQkJCQkJCQkJIG5ldmVudHMsIFdB SVRfRVZFTlRfQVBQRU5EX1JFQURZKTsKLQlGcmVlV2FpdEV2ZW50U2V0KG5vZGUtPm1zX2V2ZW50 c2V0KTsKLQlub2RlLT5tc19ldmVudHNldCA9IE5VTEw7Ci0JaWYgKG5vY2N1cnJlZCA9PSAwKQot CQlyZXR1cm47Ci0KLQkvKiBEZWxpdmVyIG5vdGlmaWNhdGlvbnMuICovCi0JZm9yIChpID0gMDsg aSA8IG5vY2N1cnJlZDsgaSsrKQotCXsKLQkJV2FpdEV2ZW50ICAqdyA9ICZvY2N1cnJlZF9ldmVu dFtpXTsKLQotCQkvKgotCQkgKiBFYWNoIHdhaXRpbmcgc3VicGxhbiBzaG91bGQgaGF2ZSByZWdp c3RlcmVkIGl0cyB3YWl0IGV2ZW50IHdpdGgKLQkJICogdXNlcl9kYXRhIHBvaW50aW5nIGJhY2sg dG8gaXRzIEFzeW5jUmVxdWVzdC4KLQkJICovCi0JCWlmICgody0+ZXZlbnRzICYgV0xfU09DS0VU X1JFQURBQkxFKSAhPSAwKQotCQl7Ci0JCQlBc3luY1JlcXVlc3QgKmFyZXEgPSAoQXN5bmNSZXF1 ZXN0ICopIHctPnVzZXJfZGF0YTsKLQotCQkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpCi0J CQl7Ci0JCQkJLyoKLQkJCQkgKiBNYXJrIGl0IGFzIG5vIGxvbmdlciBuZWVkaW5nIGEgY2FsbGJh Y2suICBXZSBtdXN0IGRvIHRoaXMKLQkJCQkgKiBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGNhbGxi YWNrIGluIGNhc2UgdGhlIGNhbGxiYWNrIHJlc2V0cwotCQkJCSAqIHRoZSBmbGFnLgotCQkJCSAq LwotCQkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKLQotCQkJCS8qIERvIHRoZSBh Y3R1YWwgd29yay4gKi8KLQkJCQlFeGVjQXN5bmNOb3RpZnkoYXJlcSk7Ci0JCQl9Ci0JCX0KLQot CQkvKiBIYW5kbGUgc3RhbmRhcmQgaW50ZXJydXB0cyAqLwotCQlpZiAoKHctPmV2ZW50cyAmIFdM X0xBVENIX1NFVCkgIT0gMCkKLQkJewotCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKLQkJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7Ci0JCX0KLQl9CisJRXhlY0FwcGVuZGVyQXN5bmNFdmVudFdhaXQo Jm5vZGUtPm1zLCAtMSAvKiBubyB0aW1lb3V0ICovICwgV0FJVF9FVkVOVF9BUFBFTkRfUkVBRFkp OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgYi9zcmMvYmFj a2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCA2YTg1MDM0OWNmNy4uNTEyNGU3ODdiMTQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5k L25vZGVzL25vZGVGdW5jcy5jCkBAIC00ODI1LDE0ICs0ODI1LDE0IEBAIHBsYW5zdGF0ZV90cmVl X3dhbGtlcl9pbXBsKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCXN3aXRjaCAobm9kZVRhZyhwbGFu KSkKIAl7CiAJCWNhc2UgVF9BcHBlbmQ6Ci0JCQlpZiAocGxhbnN0YXRlX3dhbGtfbWVtYmVycygo KEFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFwcGVuZHBsYW5zLAotCQkJCQkJCQkJICAgKChB cHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hc19ucGxhbnMsCisJCQlpZiAocGxhbnN0YXRlX3dh bGtfbWVtYmVycygoKEFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFzLnBsYW5zLAorCQkJCQkJ CQkJICAgKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcy5ucGxhbnMsCiAJCQkJCQkJCQkg ICB3YWxrZXIsIGNvbnRleHQpKQogCQkJCXJldHVybiB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2Ug VF9NZXJnZUFwcGVuZDoKLQkJCWlmIChwbGFuc3RhdGVfd2Fsa19tZW1iZXJzKCgoTWVyZ2VBcHBl bmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tZXJnZXBsYW5zLAotCQkJCQkJCQkJICAgKChNZXJnZUFw cGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPm1zX25wbGFucywKKwkJCWlmIChwbGFuc3RhdGVfd2Fs a19tZW1iZXJzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tcy5wbGFucywKKwkJ CQkJCQkJCSAgICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tcy5ucGxhbnMsCiAJ CQkJCQkJCQkgICB3YWxrZXIsIGNvbnRleHQpKQogCQkJCXJldHVybiB0cnVlOwogCQkJYnJlYWs7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggNWEzZmMwZDI4MWIu LjRhYzI0ZmZhM2FmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVh dGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBA IC0xMjYxLDEyICsxMjYxLDEyIEBAIGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9v dCwgQXBwZW5kUGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3MpCiAJICogY2hpbGQgcGxhbnMsIHRv IG1ha2UgY3Jvc3MtY2hlY2tpbmcgdGhlIHNvcnQgaW5mbyBlYXNpZXIuCiAJICovCiAJcGxhbiA9 IG1ha2VOb2RlKEFwcGVuZCk7Ci0JcGxhbi0+cGxhbi50YXJnZXRsaXN0ID0gdGxpc3Q7Ci0JcGxh bi0+cGxhbi5xdWFsID0gTklMOwotCXBsYW4tPnBsYW4ubGVmdHRyZWUgPSBOVUxMOwotCXBsYW4t PnBsYW4ucmlnaHR0cmVlID0gTlVMTDsKLQlwbGFuLT5hcHByZWxpZHMgPSByZWwtPnJlbGlkczsK LQlwbGFuLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IGJlc3RfcGF0aC0+Y2hpbGRfYXBwZW5k X3JlbGlkX3NldHM7CisJcGxhbi0+YXAucGxhbi50YXJnZXRsaXN0ID0gdGxpc3Q7CisJcGxhbi0+ YXAucGxhbi5xdWFsID0gTklMOworCXBsYW4tPmFwLnBsYW4ubGVmdHRyZWUgPSBOVUxMOworCXBs YW4tPmFwLnBsYW4ucmlnaHR0cmVlID0gTlVMTDsKKwlwbGFuLT5hcC5hcHByZWxpZHMgPSByZWwt PnJlbGlkczsKKwlwbGFuLT5hcC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IGJlc3RfcGF0aC0+ Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAKIAlpZiAocGF0aGtleXMgIT0gTklMKQogCXsKQEAg LTEyODUsNyArMTI4NSw3IEBAIGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwg QXBwZW5kUGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3MpCiAJCQkJCQkJCQkJICAmbm9kZVNvcnRP cGVyYXRvcnMsCiAJCQkJCQkJCQkJICAmbm9kZUNvbGxhdGlvbnMsCiAJCQkJCQkJCQkJICAmbm9k ZU51bGxzRmlyc3QpOwotCQl0bGlzdF93YXNfY2hhbmdlZCA9IChvcmlnX3RsaXN0X2xlbmd0aCAh PSBsaXN0X2xlbmd0aChwbGFuLT5wbGFuLnRhcmdldGxpc3QpKTsKKwkJdGxpc3Rfd2FzX2NoYW5n ZWQgPSAob3JpZ190bGlzdF9sZW5ndGggIT0gbGlzdF9sZW5ndGgocGxhbi0+YXAucGxhbi50YXJn ZXRsaXN0KSk7CiAJfQogCiAJLyogSWYgYXBwcm9wcmlhdGUsIGNvbnNpZGVyIGFzeW5jIGFwcGVu ZCAqLwpAQCAtMTM5NSw3ICsxMzk1LDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZv ICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAl9CiAKIAkvKiBTZXQg YmVsb3cgaWYgd2UgZmluZCBxdWFscyB0aGF0IHdlIGNhbiB1c2UgdG8gcnVuLXRpbWUgcHJ1bmUg Ki8KLQlwbGFuLT5wYXJ0X3BydW5lX2luZGV4ID0gLTE7CisJcGxhbi0+YXAucGFydF9wcnVuZV9p bmRleCA9IC0xOwogCiAJLyoKIAkgKiBJZiBhbnkgcXVhbHMgZXhpc3QsIHRoZXkgbWF5IGJlIHVz ZWZ1bCB0byBwZXJmb3JtIGZ1cnRoZXIgcGFydGl0aW9uCkBAIC0xNDIwLDE2ICsxNDIwLDE2IEBA IGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9w YXRoLCBpbnQgZmxhZ3MpCiAJCX0KIAogCQlpZiAocHJ1bmVxdWFsICE9IE5JTCkKLQkJCXBsYW4t PnBhcnRfcHJ1bmVfaW5kZXggPSBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8ocm9vdCwgcmVsLAor CQkJcGxhbi0+YXAucGFydF9wcnVuZV9pbmRleCA9IG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhy b290LCByZWwsCiAJCQkJCQkJCQkJCQkJCQkgIGJlc3RfcGF0aC0+c3VicGF0aHMsCiAJCQkJCQkJ CQkJCQkJCQkgIHBydW5lcXVhbCk7CiAJfQogCi0JcGxhbi0+YXBwZW5kcGxhbnMgPSBzdWJwbGFu czsKKwlwbGFuLT5hcC5zdWJwbGFucyA9IHN1YnBsYW5zOwogCXBsYW4tPm5hc3luY3BsYW5zID0g bmFzeW5jcGxhbnM7CiAJcGxhbi0+Zmlyc3RfcGFydGlhbF9wbGFuID0gYmVzdF9wYXRoLT5maXJz dF9wYXJ0aWFsX3BhdGg7CiAKLQljb3B5X2dlbmVyaWNfcGF0aF9pbmZvKCZwbGFuLT5wbGFuLCAo UGF0aCAqKSBiZXN0X3BhdGgpOworCWNvcHlfZ2VuZXJpY19wYXRoX2luZm8oJnBsYW4tPmFwLnBs YW4sIChQYXRoICopIGJlc3RfcGF0aCk7CiAKIAkvKgogCSAqIElmIHByZXBhcmVfc29ydF9mcm9t X3BhdGhrZXlzIGFkZGVkIHNvcnQgY29sdW1ucywgYnV0IHdlIHdlcmUgdG9sZCB0bwpAQCAtMTQz OCw5ICsxNDM4LDkgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBBcHBl bmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAkgKi8KIAlpZiAodGxpc3Rfd2FzX2NoYW5n ZWQgJiYgKGZsYWdzICYgKENQX0VYQUNUX1RMSVNUIHwgQ1BfU01BTExfVExJU1QpKSkKIAl7Ci0J CXRsaXN0ID0gbGlzdF9jb3B5X2hlYWQocGxhbi0+cGxhbi50YXJnZXRsaXN0LCBvcmlnX3RsaXN0 X2xlbmd0aCk7CisJCXRsaXN0ID0gbGlzdF9jb3B5X2hlYWQocGxhbi0+YXAucGxhbi50YXJnZXRs aXN0LCBvcmlnX3RsaXN0X2xlbmd0aCk7CiAJCXJldHVybiBpbmplY3RfcHJvamVjdGlvbl9wbGFu KChQbGFuICopIHBsYW4sIHRsaXN0LAotCQkJCQkJCQkJICBwbGFuLT5wbGFuLnBhcmFsbGVsX3Nh ZmUpOworCQkJCQkJCQkJICBwbGFuLT5hcC5wbGFuLnBhcmFsbGVsX3NhZmUpOwogCX0KIAllbHNl CiAJCXJldHVybiAoUGxhbiAqKSBwbGFuOwpAQCAtMTQ1OCw3ICsxNDU4LDcgQEAgY3JlYXRlX21l cmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3Rf cGF0aCwKIAkJCQkJCSBpbnQgZmxhZ3MpCiB7CiAJTWVyZ2VBcHBlbmQgKm5vZGUgPSBtYWtlTm9k ZShNZXJnZUFwcGVuZCk7Ci0JUGxhbgkgICAqcGxhbiA9ICZub2RlLT5wbGFuOworCVBsYW4JICAg KnBsYW4gPSAmbm9kZS0+YXAucGxhbjsKIAlMaXN0CSAgICp0bGlzdCA9IGJ1aWxkX3BhdGhfdGxp c3Qocm9vdCwgJmJlc3RfcGF0aC0+cGF0aCk7CiAJaW50CQkJb3JpZ190bGlzdF9sZW5ndGggPSBs aXN0X2xlbmd0aCh0bGlzdCk7CiAJYm9vbAkJdGxpc3Rfd2FzX2NoYW5nZWQ7CkBAIC0xNDc5LDgg KzE0NzksOCBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1l cmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4tPnF1YWwgPSBOSUw7CiAJcGxhbi0+bGVm dHRyZWUgPSBOVUxMOwogCXBsYW4tPnJpZ2h0dHJlZSA9IE5VTEw7Ci0Jbm9kZS0+YXBwcmVsaWRz ID0gcmVsLT5yZWxpZHM7Ci0Jbm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBiZXN0X3Bh dGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCW5vZGUtPmFwLmFwcHJlbGlkcyA9IHJlbC0+ cmVsaWRzOworCW5vZGUtPmFwLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gYmVzdF9wYXRoLT5j aGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCWNvbnNpZGVyX2FzeW5jID0gKGVuYWJsZV9hc3lu Y19tZXJnZV9hcHBlbmQgJiYKIAkJCQkJICAhYmVzdF9wYXRoLT5wYXRoLnBhcmFsbGVsX3NhZmUg JiYKQEAgLTE1OTQsNyArMTU5NCw3IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVy SW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJfQogCiAJLyogU2V0IGJl bG93IGlmIHdlIGZpbmQgcXVhbHMgdGhhdCB3ZSBjYW4gdXNlIHRvIHJ1bi10aW1lIHBydW5lICov Ci0Jbm9kZS0+cGFydF9wcnVuZV9pbmRleCA9IC0xOworCW5vZGUtPmFwLnBhcnRfcHJ1bmVfaW5k ZXggPSAtMTsKIAogCS8qCiAJICogSWYgYW55IHF1YWxzIGV4aXN0LCB0aGV5IG1heSBiZSB1c2Vm dWwgdG8gcGVyZm9ybSBmdXJ0aGVyIHBhcnRpdGlvbgpAQCAtMTYxMSwxMiArMTYxMSwxMiBAQCBj cmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0 aCAqYmVzdF9wYXRoLAogCQlBc3NlcnQoYmVzdF9wYXRoLT5wYXRoLnBhcmFtX2luZm8gPT0gTlVM TCk7CiAKIAkJaWYgKHBydW5lcXVhbCAhPSBOSUwpCi0JCQlub2RlLT5wYXJ0X3BydW5lX2luZGV4 ID0gbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKHJvb3QsIHJlbCwKKwkJCW5vZGUtPmFwLnBhcnRf cHJ1bmVfaW5kZXggPSBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8ocm9vdCwgcmVsLAogCQkJCQkJ CQkJCQkJCQkJICBiZXN0X3BhdGgtPnN1YnBhdGhzLAogCQkJCQkJCQkJCQkJCQkJICBwcnVuZXF1 YWwpOwogCX0KIAotCW5vZGUtPm1lcmdlcGxhbnMgPSBzdWJwbGFuczsKKwlub2RlLT5hcC5zdWJw bGFucyA9IHN1YnBsYW5zOwogCiAJLyoKIAkgKiBJZiBwcmVwYXJlX3NvcnRfZnJvbV9wYXRoa2V5 cyBhZGRlZCBzb3J0IGNvbHVtbnMsIGJ1dCB3ZSB3ZXJlIHRvbGQgdG8KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3NldHJlZnMuYwppbmRleCAxYjViOWI1ZWQ5Yy4uMGMxZmM0NTU0MjMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTE4ODEsMTAgKzE4ODEsMTAgQEAgc2V0X2Fw cGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAqIGNoZWNrIHF1YWxzLiAgSWYg aXQncyBnb3QgZXhhY3RseSBvbmUgY2hpbGQgcGxhbiwgdGhlbiBpdCdzIG5vdCBkb2luZwogCSAq IGFueXRoaW5nIHVzZWZ1bCBhdCBhbGwsIGFuZCB3ZSBjYW4gc3RyaXAgaXQgb3V0LgogCSAqLwot CUFzc2VydChhcGxhbi0+cGxhbi5xdWFsID09IE5JTCk7CisJQXNzZXJ0KGFwbGFuLT5hcC5wbGFu LnF1YWwgPT0gTklMKTsKIAogCS8qIEZpcnN0LCB3ZSBnb3R0YSByZWN1cnNlIG9uIHRoZSBjaGls ZHJlbiAqLwotCWZvcmVhY2gobCwgYXBsYW4tPmFwcGVuZHBsYW5zKQorCWZvcmVhY2gobCwgYXBs YW4tPmFwLnN1YnBsYW5zKQogCXsKIAkJbGZpcnN0KGwpID0gc2V0X3BsYW5fcmVmcyhyb290LCAo UGxhbiAqKSBsZmlyc3QobCksIHJ0b2Zmc2V0KTsKIAl9CkBAIC0xODk3LDExICsxODk3LDExIEBA IHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkgKiBwbGFuIG1heSBl eGVjdXRlIHRoZSBub24tcGFyYWxsZWwgYXdhcmUgY2hpbGQgbXVsdGlwbGUgdGltZXMuICAoSWYg eW91CiAJICogY2hhbmdlIHRoZXNlIHJ1bGVzLCB1cGRhdGUgY3JlYXRlX2FwcGVuZF9wYXRoIHRv IG1hdGNoLikKIAkgKi8KLQlpZiAobGlzdF9sZW5ndGgoYXBsYW4tPmFwcGVuZHBsYW5zKSA9PSAx KQorCWlmIChsaXN0X2xlbmd0aChhcGxhbi0+YXAuc3VicGxhbnMpID09IDEpCiAJewotCQlQbGFu CSAgICpwID0gKFBsYW4gKikgbGluaXRpYWwoYXBsYW4tPmFwcGVuZHBsYW5zKTsKKwkJUGxhbgkg ICAqcCA9IChQbGFuICopIGxpbml0aWFsKGFwbGFuLT5hcC5zdWJwbGFucyk7CiAKLQkJaWYgKHAt PnBhcmFsbGVsX2F3YXJlID09IGFwbGFuLT5wbGFuLnBhcmFsbGVsX2F3YXJlKQorCQlpZiAocC0+ cGFyYWxsZWxfYXdhcmUgPT0gYXBsYW4tPmFwLnBsYW4ucGFyYWxsZWxfYXdhcmUpCiAJCXsKIAkJ CVBsYW4JICAgKnJlc3VsdDsKIApAQCAtMTkwOSw3ICsxOTA5LDcgQEAgc2V0X2FwcGVuZF9yZWZl cmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCiAJCQkvKiBSZW1lbWJlciB0aGF0IHdlIHJlbW92 ZWQgYW4gQXBwZW5kICovCiAJCQlyZWNvcmRfZWxpZGVkX25vZGUocm9vdC0+Z2xvYiwgcC0+cGxh bl9ub2RlX2lkLCBUX0FwcGVuZCwKLQkJCQkJCQkgICBvZmZzZXRfcmVsaWRfc2V0KGFwbGFuLT5h cHByZWxpZHMsIHJ0b2Zmc2V0KSk7CisJCQkJCQkJICAgb2Zmc2V0X3JlbGlkX3NldChhcGxhbi0+ YXAuYXBwcmVsaWRzLCBydG9mZnNldCkpOwogCiAJCQlyZXR1cm4gcmVzdWx0OwogCQl9CkBAIC0x OTIyLDE5ICsxOTIyLDE5IEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9v dCwKIAkgKi8KIAlzZXRfZHVtbXlfdGxpc3RfcmVmZXJlbmNlcygoUGxhbiAqKSBhcGxhbiwgcnRv ZmZzZXQpOwogCi0JYXBsYW4tPmFwcHJlbGlkcyA9IG9mZnNldF9yZWxpZF9zZXQoYXBsYW4tPmFw cHJlbGlkcywgcnRvZmZzZXQpOworCWFwbGFuLT5hcC5hcHByZWxpZHMgPSBvZmZzZXRfcmVsaWRf c2V0KGFwbGFuLT5hcC5hcHByZWxpZHMsIHJ0b2Zmc2V0KTsKIAogCS8qCiAJICogQWRkIFBhcnRp dGlvblBydW5lSW5mbywgaWYgYW55LCB0byBQbGFubmVyR2xvYmFsIGFuZCB1cGRhdGUgdGhlIGlu ZGV4LgogCSAqIEFsc28gdXBkYXRlIHRoZSBSVCBpbmRleGVzIHByZXNlbnQgaW4gaXQgdG8gYWRk IHRoZSBvZmZzZXQuCiAJICovCi0JaWYgKGFwbGFuLT5wYXJ0X3BydW5lX2luZGV4ID49IDApCi0J CWFwbGFuLT5wYXJ0X3BydW5lX2luZGV4ID0KLQkJCXJlZ2lzdGVyX3BhcnRwcnVuZWluZm8ocm9v dCwgYXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXgsIHJ0b2Zmc2V0KTsKKwlpZiAoYXBsYW4tPmFwLnBh cnRfcHJ1bmVfaW5kZXggPj0gMCkKKwkJYXBsYW4tPmFwLnBhcnRfcHJ1bmVfaW5kZXggPQorCQkJ cmVnaXN0ZXJfcGFydHBydW5laW5mbyhyb290LCBhcGxhbi0+YXAucGFydF9wcnVuZV9pbmRleCwg cnRvZmZzZXQpOwogCiAJLyogV2UgZG9uJ3QgbmVlZCB0byByZWN1cnNlIHRvIGxlZnR0cmVlIG9y IHJpZ2h0dHJlZSAuLi4gKi8KLQlBc3NlcnQoYXBsYW4tPnBsYW4ubGVmdHRyZWUgPT0gTlVMTCk7 Ci0JQXNzZXJ0KGFwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9PSBOVUxMKTsKKwlBc3NlcnQoYXBsYW4t PmFwLnBsYW4ubGVmdHRyZWUgPT0gTlVMTCk7CisJQXNzZXJ0KGFwbGFuLT5hcC5wbGFuLnJpZ2h0 dHJlZSA9PSBOVUxMKTsKIAogCXJldHVybiAoUGxhbiAqKSBhcGxhbjsKIH0KQEAgLTE5NTgsMTAg KzE5NTgsMTAgQEAgc2V0X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3Qs CiAJICogb3IgY2hlY2sgcXVhbHMuICBJZiBpdCdzIGdvdCBleGFjdGx5IG9uZSBjaGlsZCBwbGFu LCB0aGVuIGl0J3Mgbm90CiAJICogZG9pbmcgYW55dGhpbmcgdXNlZnVsIGF0IGFsbCwgYW5kIHdl IGNhbiBzdHJpcCBpdCBvdXQuCiAJICovCi0JQXNzZXJ0KG1wbGFuLT5wbGFuLnF1YWwgPT0gTklM KTsKKwlBc3NlcnQobXBsYW4tPmFwLnBsYW4ucXVhbCA9PSBOSUwpOwogCiAJLyogRmlyc3QsIHdl IGdvdHRhIHJlY3Vyc2Ugb24gdGhlIGNoaWxkcmVuICovCi0JZm9yZWFjaChsLCBtcGxhbi0+bWVy Z2VwbGFucykKKwlmb3JlYWNoKGwsIG1wbGFuLT5hcC5zdWJwbGFucykKIAl7CiAJCWxmaXJzdChs KSA9IHNldF9wbGFuX3JlZnMocm9vdCwgKFBsYW4gKikgbGZpcnN0KGwpLCBydG9mZnNldCk7CiAJ fQpAQCAtMTk3NSwxMSArMTk3NSwxMSBAQCBzZXRfbWVyZ2VhcHBlbmRfcmVmZXJlbmNlcyhQbGFu bmVySW5mbyAqcm9vdCwKIAkgKiBtdWx0aXBsZSB0aW1lcy4gIChJZiB5b3UgY2hhbmdlIHRoZXNl IHJ1bGVzLCB1cGRhdGUKIAkgKiBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGggdG8gbWF0Y2guKQog CSAqLwotCWlmIChsaXN0X2xlbmd0aChtcGxhbi0+bWVyZ2VwbGFucykgPT0gMSkKKwlpZiAobGlz dF9sZW5ndGgobXBsYW4tPmFwLnN1YnBsYW5zKSA9PSAxKQogCXsKLQkJUGxhbgkgICAqcCA9IChQ bGFuICopIGxpbml0aWFsKG1wbGFuLT5tZXJnZXBsYW5zKTsKKwkJUGxhbgkgICAqcCA9IChQbGFu ICopIGxpbml0aWFsKG1wbGFuLT5hcC5zdWJwbGFucyk7CiAKLQkJaWYgKHAtPnBhcmFsbGVsX2F3 YXJlID09IG1wbGFuLT5wbGFuLnBhcmFsbGVsX2F3YXJlKQorCQlpZiAocC0+cGFyYWxsZWxfYXdh cmUgPT0gbXBsYW4tPmFwLnBsYW4ucGFyYWxsZWxfYXdhcmUpCiAJCXsKIAkJCVBsYW4JICAgKnJl c3VsdDsKIApAQCAtMTk4Nyw3ICsxOTg3LDcgQEAgc2V0X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMo UGxhbm5lckluZm8gKnJvb3QsCiAKIAkJCS8qIFJlbWVtYmVyIHRoYXQgd2UgcmVtb3ZlZCBhIE1l cmdlQXBwZW5kICovCiAJCQlyZWNvcmRfZWxpZGVkX25vZGUocm9vdC0+Z2xvYiwgcC0+cGxhbl9u b2RlX2lkLCBUX01lcmdlQXBwZW5kLAotCQkJCQkJCSAgIG9mZnNldF9yZWxpZF9zZXQobXBsYW4t PmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKKwkJCQkJCQkgICBvZmZzZXRfcmVsaWRfc2V0KG1wbGFu LT5hcC5hcHByZWxpZHMsIHJ0b2Zmc2V0KSk7CiAKIAkJCXJldHVybiByZXN1bHQ7CiAJCX0KQEAg LTIwMDAsMTkgKzIwMDAsMTkgQEAgc2V0X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lcklu Zm8gKnJvb3QsCiAJICovCiAJc2V0X2R1bW15X3RsaXN0X3JlZmVyZW5jZXMoKFBsYW4gKikgbXBs YW4sIHJ0b2Zmc2V0KTsKIAotCW1wbGFuLT5hcHByZWxpZHMgPSBvZmZzZXRfcmVsaWRfc2V0KG1w bGFuLT5hcHByZWxpZHMsIHJ0b2Zmc2V0KTsKKwltcGxhbi0+YXAuYXBwcmVsaWRzID0gb2Zmc2V0 X3JlbGlkX3NldChtcGxhbi0+YXAuYXBwcmVsaWRzLCBydG9mZnNldCk7CiAKIAkvKgogCSAqIEFk ZCBQYXJ0aXRpb25QcnVuZUluZm8sIGlmIGFueSwgdG8gUGxhbm5lckdsb2JhbCBhbmQgdXBkYXRl IHRoZSBpbmRleC4KIAkgKiBBbHNvIHVwZGF0ZSB0aGUgUlQgaW5kZXhlcyBwcmVzZW50IGluIGl0 IHRvIGFkZCB0aGUgb2Zmc2V0LgogCSAqLwotCWlmIChtcGxhbi0+cGFydF9wcnVuZV9pbmRleCA+ PSAwKQotCQltcGxhbi0+cGFydF9wcnVuZV9pbmRleCA9Ci0JCQlyZWdpc3Rlcl9wYXJ0cHJ1bmVp bmZvKHJvb3QsIG1wbGFuLT5wYXJ0X3BydW5lX2luZGV4LCBydG9mZnNldCk7CisJaWYgKG1wbGFu LT5hcC5wYXJ0X3BydW5lX2luZGV4ID49IDApCisJCW1wbGFuLT5hcC5wYXJ0X3BydW5lX2luZGV4 ID0KKwkJCXJlZ2lzdGVyX3BhcnRwcnVuZWluZm8ocm9vdCwgbXBsYW4tPmFwLnBhcnRfcHJ1bmVf aW5kZXgsIHJ0b2Zmc2V0KTsKIAogCS8qIFdlIGRvbid0IG5lZWQgdG8gcmVjdXJzZSB0byBsZWZ0 dHJlZSBvciByaWdodHRyZWUgLi4uICovCi0JQXNzZXJ0KG1wbGFuLT5wbGFuLmxlZnR0cmVlID09 IE5VTEwpOwotCUFzc2VydChtcGxhbi0+cGxhbi5yaWdodHRyZWUgPT0gTlVMTCk7CisJQXNzZXJ0 KG1wbGFuLT5hcC5wbGFuLmxlZnR0cmVlID09IE5VTEwpOworCUFzc2VydChtcGxhbi0+YXAucGxh bi5yaWdodHRyZWUgPT0gTlVMTCk7CiAKIAlyZXR1cm4gKFBsYW4gKikgbXBsYW47CiB9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3N1YnNlbGVjdC5jCmluZGV4IDBkMzE4NjFkYTdmLi43MWE3NGFh NjQ1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vic2VsZWN0LmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vic2VsZWN0LmMKQEAgLTI5MDQsNyAr MjkwNCw3IEBAIGZpbmFsaXplX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4sCiAK IAkJY2FzZSBUX0FwcGVuZDoKIAkJCXsKLQkJCQlmb3JlYWNoKGwsICgoQXBwZW5kICopIHBsYW4p LT5hcHBlbmRwbGFucykKKwkJCQlmb3JlYWNoKGwsICgoQXBwZW5kICopIHBsYW4pLT5hcC5zdWJw bGFucykKIAkJCQl7CiAJCQkJCWNvbnRleHQucGFyYW1pZHMgPQogCQkJCQkJYm1zX2FkZF9tZW1i ZXJzKGNvbnRleHQucGFyYW1pZHMsCkBAIC0yOTE5LDcgKzI5MTksNyBAQCBmaW5hbGl6ZV9wbGFu KFBsYW5uZXJJbmZvICpyb290LCBQbGFuICpwbGFuLAogCiAJCWNhc2UgVF9NZXJnZUFwcGVuZDoK IAkJCXsKLQkJCQlmb3JlYWNoKGwsICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPm1lcmdlcGxhbnMp CisJCQkJZm9yZWFjaChsLCAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5hcC5zdWJwbGFucykKIAkJ CQl7CiAJCQkJCWNvbnRleHQucGFyYW1pZHMgPQogCQkJCQkJYm1zX2FkZF9tZW1iZXJzKGNvbnRl eHQucGFyYW1pZHMsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggN2JjMTI1ODllNDAu LjM2YTdkNzM2ZmRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC01NTIwLDkgKzU1 MjAsOSBAQCBzZXRfZGVwYXJzZV9wbGFuKGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBQbGFuICpw bGFuKQogCSAqIG5hdHVyYWwgY2hvaWNlLgogCSAqLwogCWlmIChJc0EocGxhbiwgQXBwZW5kKSkK LQkJZHBucy0+b3V0ZXJfcGxhbiA9IGxpbml0aWFsKCgoQXBwZW5kICopIHBsYW4pLT5hcHBlbmRw bGFucyk7CisJCWRwbnMtPm91dGVyX3BsYW4gPSBsaW5pdGlhbCgoKEFwcGVuZCAqKSBwbGFuKS0+ YXAuc3VicGxhbnMpOwogCWVsc2UgaWYgKElzQShwbGFuLCBNZXJnZUFwcGVuZCkpCi0JCWRwbnMt Pm91dGVyX3BsYW4gPSBsaW5pdGlhbCgoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5tZXJnZXBsYW5z KTsKKwkJZHBucy0+b3V0ZXJfcGxhbiA9IGxpbml0aWFsKCgoTWVyZ2VBcHBlbmQgKikgcGxhbikt PmFwLnN1YnBsYW5zKTsKIAllbHNlCiAJCWRwbnMtPm91dGVyX3BsYW4gPSBvdXRlclBsYW4ocGxh bik7CiAKQEAgLTg0OTgsMTAgKzg0OTgsMTAgQEAgcmVzb2x2ZV9zcGVjaWFsX3Zhcm5vKE5vZGUg Km5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAogCQlpZiAoSXNBKGRwbnMtPnBsYW4s IEFwcGVuZCkpCiAJCQljb250ZXh0LT5hcHBlbmRwYXJlbnRzID0gYm1zX3VuaW9uKGNvbnRleHQt PmFwcGVuZHBhcmVudHMsCi0JCQkJCQkJCQkJCSAgICgoQXBwZW5kICopIGRwbnMtPnBsYW4pLT5h cHByZWxpZHMpOworCQkJCQkJCQkJCQkgICAoKEFwcGVuZCAqKSBkcG5zLT5wbGFuKS0+YXAuYXBw cmVsaWRzKTsKIAkJZWxzZSBpZiAoSXNBKGRwbnMtPnBsYW4sIE1lcmdlQXBwZW5kKSkKIAkJCWNv bnRleHQtPmFwcGVuZHBhcmVudHMgPSBibXNfdW5pb24oY29udGV4dC0+YXBwZW5kcGFyZW50cywK LQkJCQkJCQkJCQkJICAgKChNZXJnZUFwcGVuZCAqKSBkcG5zLT5wbGFuKS0+YXBwcmVsaWRzKTsK KwkJCQkJCQkJCQkJICAgKChNZXJnZUFwcGVuZCAqKSBkcG5zLT5wbGFuKS0+YXAuYXBwcmVsaWRz KTsKIAogCQlwdXNoX2NoaWxkX3BsYW4oZHBucywgZHBucy0+b3V0ZXJfcGxhbiwgJnNhdmVfZHBu cyk7CiAJCXJlc29sdmVfc3BlY2lhbF92YXJubygoTm9kZSAqKSB0bGUtPmV4cHIsIGNvbnRleHQs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjQXBwZW5kLmggYi9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjQXBwZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmI1NTA5MzczNTI0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY0FwcGVuZC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICogZXhlY0FwcGVuZC5oCisgKgkJU3VwcG9ydCBmdW5jdGlvbnMgZm9yIE1lcmdlQXBwZW5kIGFu ZCBBcHBlbmQgbm9kZXMuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoK KyAqIElERU5USUZJQ0FUSU9OCisgKgkJc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0FwcGVuZC5o CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIEVYRUNBUFBFTkRfSAorI2RlZmlu ZSBFWEVDQVBQRU5EX0gKKworI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgorCit2b2lkCQlF eGVjSW5pdEFwcGVuZGVyKEFwcGVuZGVyU3RhdGUgKiBzdGF0ZSwKKwkJCQkJCQkgQXBwZW5kZXIg KiBub2RlLAorCQkJCQkJCSBFU3RhdGUgKmVzdGF0ZSwKKwkJCQkJCQkgaW50IGVmbGFncywKKwkJ CQkJCQkgaW50IGZpcnN0X3BhcnRpYWxfcGxhbiwKKwkJCQkJCQkgaW50ICpmaXJzdF92YWxpZF9w YXJ0aWFsX3BsYW4pOworCit2b2lkCQlFeGVjRW5kQXBwZW5kZXIoQXBwZW5kZXJTdGF0ZSAqIG5v ZGUpOworCit2b2lkCQlFeGVjUmVTY2FuQXBwZW5kZXIoQXBwZW5kZXJTdGF0ZSAqIG5vZGUpOwor Cit2b2lkCQlFeGVjQXBwZW5kZXJBc3luY0JlZ2luKEFwcGVuZGVyU3RhdGUgKiBub2RlKTsKKwor dm9pZAkJRXhlY0FwcGVuZGVyQXN5bmNFdmVudFdhaXQoQXBwZW5kZXJTdGF0ZSAqIG5vZGUsCisJ CQkJCQkJCQkgICBpbnQgdGltZW91dCwKKwkJCQkJCQkJCSAgIHVpbnQzMiB3YWl0X2V2ZW50X2lu Zm8pOworCisvKiBDb21tb24gcGFydCBvZiBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucygpIGZv ciBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2NsYXNzaWZ5 X21hdGNoaW5nX3N1YnBsYW5zX2NvbW1vbihCaXRtYXBzZXQgKip2YWxpZF9zdWJwbGFucywKKwkJ CQkJCQkJICBCaXRtYXBzZXQgKmFzeW5jcGxhbnMsCisJCQkJCQkJCSAgQml0bWFwc2V0ICoqdmFs aWRfYXN5bmNwbGFucykKK3sKKwlBc3NlcnQoKnZhbGlkX2FzeW5jcGxhbnMgPT0gTlVMTCk7CisK KwkvKiBDaGVja2VkIGJ5IGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKCkgKi8KKwlBc3NlcnQo IWJtc19pc19lbXB0eSgqdmFsaWRfc3VicGxhbnMpKTsKKworCS8qIE5vdGhpbmcgdG8gZG8gaWYg dGhlcmUgYXJlIG5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCWlmICghYm1zX292ZXJsYXAo KnZhbGlkX3N1YnBsYW5zLCBhc3luY3BsYW5zKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogR2V0 IHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCSp2YWxpZF9hc3luY3BsYW5zID0gYm1zX2ludGVy c2VjdChhc3luY3BsYW5zLAorCQkJCQkJCQkJICAqdmFsaWRfc3VicGxhbnMpOworCisJLyogQWRq dXN0IHRoZSB2YWxpZCBzdWJwbGFucyB0byBjb250YWluIHN5bmMgc3VicGxhbnMgb25seS4gKi8K KwkqdmFsaWRfc3VicGxhbnMgPSBibXNfZGVsX21lbWJlcnMoKnZhbGlkX3N1YnBsYW5zLAorCQkJ CQkJCQkJICAqdmFsaWRfYXN5bmNwbGFucyk7CisJcmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZgkJ CQkJCQkvKiBFWEVDQVBQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggMDc0OWU5NmM5 NDcuLjQyZmYyYTIzNzY3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTQ4NCw2ICsxNDg0LDI3 IEBAIHR5cGVkZWYgc3RydWN0IE1vZGlmeVRhYmxlU3RhdGUKIAlMaXN0CSAgICptdF9tZXJnZUpv aW5Db25kaXRpb25zOwogfSBNb2RpZnlUYWJsZVN0YXRlOwogCit0eXBlZGVmIHN0cnVjdCBBcHBl bmRlclN0YXRlCit7CisJUGxhblN0YXRlCXBzOwkJCQkvKiBpdHMgZmlyc3QgZmllbGQgaXMgTm9k ZVRhZyAqLworCVBsYW5TdGF0ZSAqKnBsYW5zOwkJCS8qIGFycmF5IG9mIFBsYW5TdGF0ZXMgZm9y IG15IGlucHV0cyAqLworCWludAkJCW5wbGFuczsKKworCS8qIEFzeW5jaHJvbm91cyBleGVjdXRp b24gc3RhdGUgKi8KKwlCaXRtYXBzZXQgICphc3luY3BsYW5zOwkJLyogYXN5bmNocm9ub3VzIHBs YW5zIGluZGV4ZXMgKi8KKwlpbnQJCQluYXN5bmNwbGFuczsJLyogIyBvZiBhc3luY2hyb25vdXMg cGxhbnMgKi8KKwlBc3luY1JlcXVlc3QgKiphc3luY3JlcXVlc3RzOwkvKiBhcnJheSBvZiBBc3lu Y1JlcXVlc3RzICovCisJVHVwbGVUYWJsZVNsb3QgKiphc3luY3Jlc3VsdHM7CS8qIHVucmV0dXJu ZWQgcmVzdWx0cyBvZiBhc3luYyBwbGFucyAqLworCUJpdG1hcHNldCAgKm5lZWRyZXF1ZXN0Owkv KiBhc3luY2hyb25vdXMgcGxhbnMgbmVlZGluZyBhIG5ldyByZXF1ZXN0ICovCisJc3RydWN0IFdh aXRFdmVudFNldCAqZXZlbnRzZXQ7CS8qIFdhaXRFdmVudFNldCBmb3IgZmlsZSBkZXNjcmlwdG9y IHdhaXRzICovCisKKwkvKiBQYXJ0aXRpb24gcHJ1bmluZyBzdGF0ZSAqLworCXN0cnVjdCBQYXJ0 aXRpb25QcnVuZVN0YXRlICpwcnVuZV9zdGF0ZTsKKwlib29sCQl2YWxpZF9zdWJwbGFuc19pZGVu dGlmaWVkOworCUJpdG1hcHNldCAgKnZhbGlkX3N1YnBsYW5zOworCUJpdG1hcHNldCAgKnZhbGlk X2FzeW5jcGxhbnM7CS8qIHZhbGlkIGFzeW5jaHJvbm91cyBwbGFucyBpbmRleGVzICovCit9CQkJ QXBwZW5kZXJTdGF0ZTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJIEFwcGVuZFN0YXRlIGlu Zm9ybWF0aW9uCiAgKgpAQCAtMTUwNSwzMSArMTUyNiwyMCBAQCBzdHJ1Y3QgUGFydGl0aW9uUHJ1 bmVTdGF0ZTsKIAogc3RydWN0IEFwcGVuZFN0YXRlCiB7Ci0JUGxhblN0YXRlCXBzOwkJCQkvKiBp dHMgZmlyc3QgZmllbGQgaXMgTm9kZVRhZyAqLwotCVBsYW5TdGF0ZSAqKmFwcGVuZHBsYW5zOwkv KiBhcnJheSBvZiBQbGFuU3RhdGVzIGZvciBteSBpbnB1dHMgKi8KLQlpbnQJCQlhc19ucGxhbnM7 CisJQXBwZW5kZXJTdGF0ZSBhczsKKwogCWludAkJCWFzX3doaWNocGxhbjsKIAlib29sCQlhc19i ZWd1bjsJCS8qIGZhbHNlIG1lYW5zIG5lZWQgdG8gaW5pdGlhbGl6ZSAqLwotCUJpdG1hcHNldCAg KmFzX2FzeW5jcGxhbnM7CS8qIGFzeW5jaHJvbm91cyBwbGFucyBpbmRleGVzICovCi0JaW50CQkJ YXNfbmFzeW5jcGxhbnM7IC8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCi0JQXN5bmNSZXF1 ZXN0ICoqYXNfYXN5bmNyZXF1ZXN0czsJLyogYXJyYXkgb2YgQXN5bmNSZXF1ZXN0cyAqLwotCVR1 cGxlVGFibGVTbG90ICoqYXNfYXN5bmNyZXN1bHRzOwkvKiB1bnJldHVybmVkIHJlc3VsdHMgb2Yg YXN5bmMgcGxhbnMgKi8KLQlpbnQJCQlhc19uYXN5bmNyZXN1bHRzOwkvKiAjIG9mIHZhbGlkIGVu dHJpZXMgaW4gYXNfYXN5bmNyZXN1bHRzICovCi0JYm9vbAkJYXNfc3luY2RvbmU7CS8qIHRydWUg aWYgYWxsIHN5bmNocm9ub3VzIHBsYW5zIGRvbmUgaW4KLQkJCQkJCQkJICogYXN5bmNocm9ub3Vz IG1vZGUsIGVsc2UgZmFsc2UgKi8KKwlpbnQJCQlhc19uYXN5bmNyZXN1bHRzOwkvKiAjIG9mIHZh bGlkIGVudHJpZXMgaW4gYXN5bmNyZXN1bHRzICovCisJYm9vbAkJYXNfc3luY2RvbmU7CS8qIGFs bCBzeW5jIHBsYW5zIGRvbmUgaW4gYXN5bmMgbW9kZT8gKi8KIAlpbnQJCQlhc19uYXN5bmNyZW1h aW47CS8qICMgb2YgcmVtYWluaW5nIGFzeW5jaHJvbm91cyBwbGFucyAqLwotCUJpdG1hcHNldCAg KmFzX25lZWRyZXF1ZXN0OyAvKiBhc3luY2hyb25vdXMgcGxhbnMgbmVlZGluZyBhIG5ldyByZXF1 ZXN0ICovCi0Jc3RydWN0IFdhaXRFdmVudFNldCAqYXNfZXZlbnRzZXQ7CS8qIFdhaXRFdmVudFNl dCB1c2VkIHRvIGNvbmZpZ3VyZSBmaWxlCi0JCQkJCQkJCQkJICogZGVzY3JpcHRvciB3YWl0IGV2 ZW50cyAqLwotCWludAkJCWFzX2ZpcnN0X3BhcnRpYWxfcGxhbjsJLyogSW5kZXggb2YgJ2FwcGVu ZHBsYW5zJyBjb250YWluaW5nCi0JCQkJCQkJCQkJICogdGhlIGZpcnN0IHBhcnRpYWwgcGxhbiAq LwotCVBhcmFsbGVsQXBwZW5kU3RhdGUgKmFzX3BzdGF0ZTsgLyogcGFyYWxsZWwgY29vcmRpbmF0 aW9uIGluZm8gKi8KLQlTaXplCQlwc3RhdGVfbGVuOwkJLyogc2l6ZSBvZiBwYXJhbGxlbCBjb29y ZGluYXRpb24gaW5mbyAqLwotCXN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRlICphc19wcnVuZV9z dGF0ZTsKLQlib29sCQlhc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkOwkvKiBpcyBhc192YWxp ZF9zdWJwbGFucyB2YWxpZD8gKi8KLQlCaXRtYXBzZXQgICphc192YWxpZF9zdWJwbGFuczsKLQlC aXRtYXBzZXQgICphc192YWxpZF9hc3luY3BsYW5zOwkvKiB2YWxpZCBhc3luY2hyb25vdXMgcGxh bnMgaW5kZXhlcyAqLwotCWJvb2wJCSgqY2hvb3NlX25leHRfc3VicGxhbikgKEFwcGVuZFN0YXRl ICopOworCWludAkJCWFzX2ZpcnN0X3BhcnRpYWxfcGxhbjsKKworCS8qIFBhcmFsbGVsIGFwcGVu ZCBzcGVjaWZpYyAqLworCVBhcmFsbGVsQXBwZW5kU3RhdGUgKmFzX3BzdGF0ZTsKKwlTaXplCQlw c3RhdGVfbGVuOworCisJYm9vbAkJKCpjaG9vc2VfbmV4dF9zdWJwbGFuKSAoc3RydWN0IEFwcGVu ZFN0YXRlICopOwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTU0OSwyNyArMTU1OSwx NyBAQCBzdHJ1Y3QgQXBwZW5kU3RhdGUKICAqLwogdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VBcHBlbmRT dGF0ZQogewotCVBsYW5TdGF0ZQlwczsJCQkJLyogaXRzIGZpcnN0IGZpZWxkIGlzIE5vZGVUYWcg Ki8KLQlQbGFuU3RhdGUgKiptZXJnZXBsYW5zOwkJLyogYXJyYXkgb2YgUGxhblN0YXRlcyBmb3Ig bXkgaW5wdXRzICovCi0JaW50CQkJbXNfbnBsYW5zOworCUFwcGVuZGVyU3RhdGUgbXM7CisKIAlp bnQJCQltc19ua2V5czsKIAlTb3J0U3VwcG9ydCBtc19zb3J0a2V5czsJLyogYXJyYXkgb2YgbGVu Z3RoIG1zX25rZXlzICovCiAJVHVwbGVUYWJsZVNsb3QgKiptc19zbG90czsJLyogYXJyYXkgb2Yg bGVuZ3RoIG1zX25wbGFucyAqLwogCXN0cnVjdCBiaW5hcnloZWFwICptc19oZWFwOyAvKiBiaW5h cnkgaGVhcCBvZiBzbG90IGluZGljZXMgKi8KIAlib29sCQltc19pbml0aWFsaXplZDsgLyogYXJl IHN1YnBsYW5zIHN0YXJ0ZWQ/ICovCi0JQml0bWFwc2V0ICAqbXNfYXN5bmNwbGFuczsJLyogYXN5 bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMgKi8KLQlpbnQJCQltc19uYXN5bmNwbGFuczsgLyogIyBv ZiBhc3luY2hyb25vdXMgcGxhbnMgKi8KLQlBc3luY1JlcXVlc3QgKiptc19hc3luY3JlcXVlc3Rz OwkvKiBhcnJheSBvZiBBc3luY1JlcXVlc3RzICovCi0JVHVwbGVUYWJsZVNsb3QgKiptc19hc3lu Y3Jlc3VsdHM7CS8qIHVucmV0dXJuZWQgcmVzdWx0cyBvZiBhc3luYyBwbGFucyAqLworCisJLyog TWVyZ2Utc3BlY2lmaWMgYXN5bmMgdHJhY2tpbmcgKi8KIAlCaXRtYXBzZXQgICptc19oYXNfYXN5 bmNyZXN1bHRzOwkvKiBwbGFucyB3aGljaCBoYXZlIGFzeW5jIHJlc3VsdHMgKi8KIAlCaXRtYXBz ZXQgICptc19hc3luY3JlbWFpbjsgLyogcmVtYWluaW5nIGFzeW5jaHJvbm91cyBwbGFucyAqLwot CUJpdG1hcHNldCAgKm1zX25lZWRyZXF1ZXN0OyAvKiBhc3luY2hyb25vdXMgcGxhbnMgbmVlZGlu ZyBhIG5ldyByZXF1ZXN0ICovCi0Jc3RydWN0IFdhaXRFdmVudFNldCAqbXNfZXZlbnRzZXQ7CS8q IFdhaXRFdmVudFNldCB1c2VkIHRvIGNvbmZpZ3VyZSBmaWxlCi0JCQkJCQkJCQkJICogZGVzY3Jp cHRvciB3YWl0IGV2ZW50cyAqLwotCXN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRlICptc19wcnVu ZV9zdGF0ZTsKLQlib29sCQltc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkOwkvKiBpcyBtc192 YWxpZF9zdWJwbGFucyB2YWxpZD8gKi8KLQlCaXRtYXBzZXQgICptc192YWxpZF9zdWJwbGFuczsK LQlCaXRtYXBzZXQgICptc192YWxpZF9hc3luY3BsYW5zOwkvKiB2YWxpZCBhc3luY2hyb25vdXMg cGxhbnMgaW5kZXhlcyAqLwogfSBNZXJnZUFwcGVuZFN0YXRlOwogCiAvKiBHZXR0ZXJzIGZvciBB cHBlbmRTdGF0ZSBhbmQgTWVyZ2VBcHBlbmRTdGF0ZSAqLwpAQCAtMTU3OSw5ICsxNTc5LDkgQEAg R2V0QXBwZW5kRXZlbnRTZXQoUGxhblN0YXRlICpwcykKIAlBc3NlcnQoSXNBKHBzLCBBcHBlbmRT dGF0ZSkgfHwgSXNBKHBzLCBNZXJnZUFwcGVuZFN0YXRlKSk7CiAKIAlpZiAoSXNBKHBzLCBBcHBl bmRTdGF0ZSkpCi0JCXJldHVybiAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXNfZXZlbnRzZXQ7CisJ CXJldHVybiAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXMuZXZlbnRzZXQ7CiAJZWxzZQotCQlyZXR1 cm4gKChNZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bXNfZXZlbnRzZXQ7CisJCXJldHVybiAoKE1l cmdlQXBwZW5kU3RhdGUgKikgcHMpLT5tcy5ldmVudHNldDsKIH0KIAogc3RhdGljIGlubGluZSBC aXRtYXBzZXQgKgpAQCAtMTU5MCwzNCArMTU5MCw5IEBAIEdldE5lZWRSZXF1ZXN0KFBsYW5TdGF0 ZSAqcHMpCiAJQXNzZXJ0KElzQShwcywgQXBwZW5kU3RhdGUpIHx8IElzQShwcywgTWVyZ2VBcHBl bmRTdGF0ZSkpOwogCiAJaWYgKElzQShwcywgQXBwZW5kU3RhdGUpKQotCQlyZXR1cm4gKChBcHBl bmRTdGF0ZSAqKSBwcyktPmFzX25lZWRyZXF1ZXN0OworCQlyZXR1cm4gKChBcHBlbmRTdGF0ZSAq KSBwcyktPmFzLm5lZWRyZXF1ZXN0OwogCWVsc2UKLQkJcmV0dXJuICgoTWVyZ2VBcHBlbmRTdGF0 ZSAqKSBwcyktPm1zX25lZWRyZXF1ZXN0OwotfQotCi0vKiBDb21tb24gcGFydCBvZiBjbGFzc2lm eV9tYXRjaGluZ19zdWJwbGFucygpIGZvciBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kICovCi1zdGF0 aWMgaW5saW5lIGJvb2wKLWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zX2NvbW1vbihCaXRtYXBz ZXQgKip2YWxpZF9zdWJwbGFucywKLQkJCQkJCQkJICBCaXRtYXBzZXQgKmFzeW5jcGxhbnMsCi0J CQkJCQkJCSAgQml0bWFwc2V0ICoqdmFsaWRfYXN5bmNwbGFucykKLXsKLQlBc3NlcnQoKnZhbGlk X2FzeW5jcGxhbnMgPT0gTlVMTCk7Ci0KLQkvKiBDaGVja2VkIGJ5IGNsYXNzaWZ5X21hdGNoaW5n X3N1YnBsYW5zKCkgKi8KLQlBc3NlcnQoIWJtc19pc19lbXB0eSgqdmFsaWRfc3VicGxhbnMpKTsK LQotCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIHZhbGlkIGFzeW5jIHN1YnBsYW5z LiAqLwotCWlmICghYm1zX292ZXJsYXAoKnZhbGlkX3N1YnBsYW5zLCBhc3luY3BsYW5zKSkKLQkJ cmV0dXJuIGZhbHNlOwotCi0JLyogR2V0IHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwotCSp2YWxp ZF9hc3luY3BsYW5zID0gYm1zX2ludGVyc2VjdChhc3luY3BsYW5zLAotCQkJCQkJCQkJICAqdmFs aWRfc3VicGxhbnMpOwotCi0JLyogQWRqdXN0IHRoZSB2YWxpZCBzdWJwbGFucyB0byBjb250YWlu IHN5bmMgc3VicGxhbnMgb25seS4gKi8KLQkqdmFsaWRfc3VicGxhbnMgPSBibXNfZGVsX21lbWJl cnMoKnZhbGlkX3N1YnBsYW5zLAotCQkJCQkJCQkJICAqdmFsaWRfYXN5bmNwbGFucyk7Ci0JcmV0 dXJuIHRydWU7CisJCXJldHVybiAoKE1lcmdlQXBwZW5kU3RhdGUgKikgcHMpLT5tcy5uZWVkcmVx dWVzdDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCBi NjE4NTgyNWZjYi4uYjBmNjFlYWFiNWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0zODYsNiAr Mzg2LDIyIEBAIHR5cGVkZWYgc3RydWN0IE1vZGlmeVRhYmxlCiAKIHN0cnVjdCBQYXJ0aXRpb25Q cnVuZUluZm87CQkvKiBmb3J3YXJkIHJlZmVyZW5jZSB0byBzdHJ1Y3QgYmVsb3cgKi8KIAordHlw ZWRlZiBzdHJ1Y3QgQXBwZW5kZXIKK3sKKwlQbGFuCQlwbGFuOwkJCS8qIGl0cyBmaXJzdCBmaWVs ZCBpcyBOb2RlVGFnICovCisJQml0bWFwc2V0ICAqYXBwcmVsaWRzOwkJLyogUlRJcyBvZiBhcHBl bmRyZWwocykgZm9ybWVkIGJ5IHRoaXMgbm9kZSAqLworCUxpc3QJICAgKmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzOwkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscworCQkJCQkJCQkJCQkgKiBj b25zb2xpZGF0ZWQgaW50byB0aGlzIG5vZGUgKi8KKwlMaXN0CSAgICpzdWJwbGFuczsJCS8qIExp c3Qgb2YgUGxhbnMgKGZvcm1lcmx5CisJCQkJCQkJCSAqIGFwcGVuZHBsYW5zL21lcmdlcGxhbnMp ICovCisKKwkvKgorCSAqIEluZGV4IGludG8gUGxhbm5lZFN0bXQucGFydFBydW5lSW5mb3MgYW5k IHBhcmFsbGVsIGxpc3RzIGluIEVTdGF0ZS4gU2V0CisJICogdG8gLTEgaWYgbm8gcnVuLXRpbWUg cHJ1bmluZyBpcyB1c2VkLgorCSAqLworCWludAkJCXBhcnRfcHJ1bmVfaW5kZXg7Cit9CQkJQXBw ZW5kZXI7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCSBBcHBlbmQgbm9kZSAtCiAgKgkJR2Vu ZXJhdGUgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHJlc3VsdHMgb2Ygc3ViLXBsYW5zLgpAQCAt MzkzLDMyICs0MDksMTYgQEAgc3RydWN0IFBhcnRpdGlvblBydW5lSW5mbzsJCS8qIGZvcndhcmQg cmVmZXJlbmNlIHRvIHN0cnVjdCBiZWxvdyAqLwogICovCiB0eXBlZGVmIHN0cnVjdCBBcHBlbmQK IHsKLQlQbGFuCQlwbGFuOwotCi0JLyogUlRJcyBvZiBhcHBlbmRyZWwocykgZm9ybWVkIGJ5IHRo aXMgbm9kZSAqLwotCUJpdG1hcHNldCAgKmFwcHJlbGlkczsKLQotCS8qIHNldHMgb2YgUlRJcyBv ZiBhcHBlbmRyZWxzIGNvbnNvbGlkYXRlZCBpbnRvIHRoaXMgbm9kZSAqLwotCUxpc3QJICAgKmNo aWxkX2FwcGVuZF9yZWxpZF9zZXRzOwotCi0JLyogcGxhbnMgdG8gcnVuICovCi0JTGlzdAkgICAq YXBwZW5kcGxhbnM7CisJQXBwZW5kZXIJYXA7CiAKIAkvKiAjIG9mIGFzeW5jaHJvbm91cyBwbGFu cyAqLwogCWludAkJCW5hc3luY3BsYW5zOwogCiAJLyoKLQkgKiBBbGwgJ2FwcGVuZHBsYW5zJyBw cmVjZWRpbmcgdGhpcyBpbmRleCBhcmUgbm9uLXBhcnRpYWwgcGxhbnMuIEFsbAotCSAqICdhcHBl bmRwbGFucycgZnJvbSB0aGlzIGluZGV4IG9ud2FyZHMgYXJlIHBhcnRpYWwgcGxhbnMuCisJICog QWxsICdzdWJwbGFucycgcHJlY2VkaW5nIHRoaXMgaW5kZXggYXJlIG5vbi1wYXJ0aWFsIHBsYW5z LiBBbGwKKwkgKiAnc3VicGxhbnMnIGZyb20gdGhpcyBpbmRleCBvbndhcmRzIGFyZSBwYXJ0aWFs IHBsYW5zLgogCSAqLwogCWludAkJCWZpcnN0X3BhcnRpYWxfcGxhbjsKLQotCS8qCi0JICogSW5k ZXggaW50byBQbGFubmVkU3RtdC5wYXJ0UHJ1bmVJbmZvcyBhbmQgcGFyYWxsZWwgbGlzdHMgaW4g RVN0YXRlOgotCSAqIGVzX3BhcnRfcHJ1bmVfc3RhdGVzIGFuZCBlc19wYXJ0X3BydW5lX3Jlc3Vs dHMuIFNldCB0byAtMSBpZiBubwotCSAqIHJ1bi10aW1lIHBydW5pbmcgaXMgdXNlZC4KLQkgKi8K LQlpbnQJCQlwYXJ0X3BydW5lX2luZGV4OwogfSBBcHBlbmQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0KQEAgLTQyOCwxNiArNDI4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kCiAgKi8KIHR5cGVk ZWYgc3RydWN0IE1lcmdlQXBwZW5kCiB7Ci0JUGxhbgkJcGxhbjsKLQotCS8qIFJUSXMgb2YgYXBw ZW5kcmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KLQlCaXRtYXBzZXQgICphcHByZWxpZHM7 Ci0KLQkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0ZWQgaW50byB0aGlz IG5vZGUgKi8KLQlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKLQotCS8qIHBsYW5z IHRvIHJ1biAqLwotCUxpc3QJICAgKm1lcmdlcGxhbnM7CisJQXBwZW5kZXIJYXA7CiAKIAkvKiB0 aGVzZSBmaWVsZHMgYXJlIGp1c3QgbGlrZSB0aGUgc29ydC1rZXkgaW5mbyBpbiBzdHJ1Y3QgU29y dDogKi8KIApAQCAtNDU1LDEzICs0NDYsNiBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZAog CiAJLyogTlVMTFMgRklSU1QvTEFTVCBkaXJlY3Rpb25zICovCiAJYm9vbAkgICAqbnVsbHNGaXJz dCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7Ci0KLQkvKgotCSAqIEluZGV4IGlu dG8gUGxhbm5lZFN0bXQucGFydFBydW5lSW5mb3MgYW5kIHBhcmFsbGVsIGxpc3RzIGluIEVTdGF0 ZToKLQkgKiBlc19wYXJ0X3BydW5lX3N0YXRlcyBhbmQgZXNfcGFydF9wcnVuZV9yZXN1bHRzLiBT ZXQgdG8gLTEgaWYgbm8KLQkgKiBydW4tdGltZSBwcnVuaW5nIGlzIHVzZWQuCi0JICovCi0JaW50 CQkJcGFydF9wcnVuZV9pbmRleDsKIH0gTWVyZ2VBcHBlbmQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0KLS0gCjIuNDMuMAoK --=_768e045455637ea52d3563fff0679bcf--