Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pScal-0002AO-QC for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Feb 2023 11:38:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pScak-0002T1-Lv for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Feb 2023 11:38:22 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pScaj-0002Sr-LU for pgsql-hackers@lists.postgresql.org; Thu, 16 Feb 2023 11:38:22 +0000 Received: from mail-4316.protonmail.ch ([185.70.43.16]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pScac-0005uv-46 for pgsql-hackers@lists.postgresql.org; Thu, 16 Feb 2023 11:38:20 +0000 Date: Thu, 16 Feb 2023 11:38:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1676547488; x=1676806688; bh=R/uDmUuXvpUXX7E78yPZmlZ4ORFi1oGpHHXQrVNs/B8=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=d+ICbiFJJ6Up9BHC4F66L9YC8jheXoZ6mDAWgYw2jtN52xFqz8Sy+H3+UCaaBEA3z 3i1M7jrZRncaKpgO7B99iZwUKHyi44EPKhkYaqRY3pkdPiKa3qtsPERcpn46EaXNtd QO3dzjgHTSTTyG59dFz3yFhtPu7ZDc+vSgYAZ06zIN1sW+2hfLT2GXnTOJHp177l7T UuNH5OtgewUVexQ3Kw3/gOii64ehchkrIj9uLFLvr+IuV8b4w5TpJeg+sGR3zkb2RT fLchWw48BDa0OfGS4AXCqjIByeCzmCM42vt1WCruWtyyEzKbDJJ/v3UQF16sxlARi4 FmdMAAzmFDJsg== To: "shiy.fnst@fujitsu.com" From: gkokolatos@pm.me Cc: Michael Paquier , Justin Pryzby , Tomas Vondra , "pgsql-hackers@lists.postgresql.org" , Rachel Heaton Subject: RE: Add LZ4 compression in pg_dump Message-ID: In-Reply-To: References: <7zu6GYFi72jByVk2SEe_nd8r1DHhwA35vSntAE9sAfiMX9Lfk6bwimkwmu7GDgYaEvL27SE4qF1uK4_LHWQM4H-SXOwkMAI-GV8PKGmED_E=@pm.me> <-myGeDiZ-ePDRyi18026Iu2HTTfmwfjWaJn4OWJ2F3oglZUfJTOQ7FARPW7gYxE4vK3b0HpwYoiHR45nfOWReRvvJZfCBfJzPP5iJyn4muk=@pm.me> <20230125180020.GF22427@telsasoft.com> <20230126062846.GO22427@telsasoft.com> <6YZqN2HEE4yJxxxXWiMl4QWwKzLon0SdKETTGVkT9zjWnXMftGZjLKHHjGFuwC_5I6xL2s8nMXdLQGA4vEFveYXSHbfD9K9pDQvEJF2y99o=@pm.me> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_mldhg9jehOXL00sI7C0ekpX4sxnwEyBnKWf54SrZAA" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --b1_mldhg9jehOXL00sI7C0ekpX4sxnwEyBnKWf54SrZAA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Wednesday, February 15th, 2023 at 2:51 PM, shiy.fnst@fujitsu.com wrote: >=20 > Hi, >=20 > I am interested in this feature and tried the patch. While reading the co= mments, > I noticed some minor things that could possibly be improved (in v27-0003 = patch). Thank you very much for the interest. Please find a rebased v28 attached. D= ue to the rebase, 0001 of v27 is no longer relevant and has been removed. Your co= mments are applied on v28-0002. >=20 > 1. > + /* > + * Open a file for writing. > + * > + * 'mode' can be one of ''w', 'wb', 'a', and 'ab'. Requrires an already > + * initialized CompressFileHandle. > + */ > + int (*open_write_func) (const char *path, const char *mode, > + CompressFileHandle CFH); >=20 > There is a redundant single quote in front of 'w'. Fixed. >=20 > 2. > / > * Callback function for WriteDataToArchive. Writes one block of (compress= ed) > * data to the archive. > / > / > * Callback function for ReadDataFromArchive. To keep things simple, we > * always read one compressed block at a time. > */ >=20 > Should the function names in the comments be updated? Agreed. Fixed. >=20 > 3. > + Assert(strcmp(mode, "r") =3D=3D 0 || strcmp(mode, "rb") =3D=3D 0); >=20 > Could we use PG_BINARY_R instead of "r" and "rb" here? We could and we should. Using PG_BINARY_R has the added benefit of needing only one strcmp() call. Fixed. Cheers, //Georgios >=20 > Regards, > Shi Yu --b1_mldhg9jehOXL00sI7C0ekpX4sxnwEyBnKWf54SrZAA Content-Type: text/x-patch; name=v28-0003-Add-LZ4-compression-to-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v28-0003-Add-LZ4-compression-to-pg_dump.patch RnJvbSBkNWE4ZTExZDc4ZThjYTliNTkyZjlhYmI1ZjY2Mzk2ZGY0NTQ3NzI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFRodSwgMTYgRmViIDIwMjMgMTE6MDA6MzUgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy OCAzLzNdIEFkZCBMWjQgY29tcHJlc3Npb24gdG8gcGdfZHVtcAoKVGhpcyBpcyBtb3N0bHkgZG9u ZSB3aXRoaW4gcGdfZHVtcCdzIGNvbXByZXNzaW9uIHN0cmVhbWluZyBhbmQgZmlsZSBBUElzLgpJ dCBpcyBjb25maW5lZCB3aXRoaW4gdGhlIG5ld2x5IGludHJvZHVjZWQgY29tcHJlc3NfbHo0Lntj LGh9IGZpbGVzLgoKVGhlIGZpcnN0IG9uZSwgaXMgYWltZWQgYXQgaW5saW5lZCB1c2UgY2FzZXMg YW5kIHRodXMgc2ltcGxlCmx6NC5oIGNhbGxzIGNhbiBiZSB1c2VkIGRpcmVjdGx5LiBUaGUgc2Vj b25kIG9uZSBpcyBnZW5lcmF0aW5nIG91dHB1dCwgb3IgaXMKcGFyc2luZyBpbnB1dCwgd2hpY2gg Y2FuIGJlIHJlYWQvZ2VuZXJhdGVkIHZpYSB0aGUgbHo0IHV0aWxpdHkuCgpXaGVyZXZlciB0aGUg TFo0RiBhcGkgZG9lcyBub3QgaW1wbGVtZW50IGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBjb3JyZXNw b25kaW5nCnRvIGZyZWFkKCksIGZ3cml0ZSgpLCBmZ2V0cygpLCBmZ2V0YygpLCBmZW9mKCksIGFu ZCBmY2xvc2UoKS4gV2hlcmUgdGhlCmZ1bmN0aW9uYWxpdHkgd2FzIG1pc3NpbmcgZnJvbSB0aGUg b2ZmaWNpYWwgQVBJLCBpdCBoYXMgYmVlbiBpbXBsZW1lbnRlZApsb2NhbHkuCi0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwgICAgICAgICB8ICAxMyArLQogc3JjL2Jpbi9wZ19kdW1w L01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf aW8uYyAgICAgICAgIHwgIDI0ICstCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmMgICAg ICAgIHwgNjI2ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfbHo0LmggICAgICAgIHwgIDI0ICsKIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAg ICAgICAgICAgfCAgIDggKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyAg fCAgIDYgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMgfCAgIDkgKy0K IHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iaW4v cGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICAgfCAgODIgKysrLQogc3JjL3Rvb2xzL3BnaW5j bHVkZS9jcGx1c3BsdXNjaGVjayAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgIHwgICAxICsKIDEyIGZpbGVzIGNoYW5nZWQsIDc4MCBpbnNlcnRpb25zKCsp LCAyMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfbHo0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf bHo0LmgKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbCBiL2RvYy9z cmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCmluZGV4IDJjOTM4Y2Q3ZTEuLjQ5ZDIxODkwNWYgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9yZWYvcGdfZHVtcC5zZ21sCkBAIC0zMzAsOSArMzMwLDEwIEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogICAgICAgICAgICBtYWNoaW5lLXJlYWRhYmxlIGZvcm1hdCB0aGF0IDxhcHBsaWNh dGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4KICAgICAgICAgICAgY2FuIHJlYWQuIEEgZGly ZWN0b3J5IGZvcm1hdCBhcmNoaXZlIGNhbiBiZSBtYW5pcHVsYXRlZCB3aXRoCiAgICAgICAgICAg IHN0YW5kYXJkIFVuaXggdG9vbHM7IGZvciBleGFtcGxlLCBmaWxlcyBpbiBhbiB1bmNvbXByZXNz ZWQgYXJjaGl2ZQotICAgICAgICAgICBjYW4gYmUgY29tcHJlc3NlZCB3aXRoIHRoZSA8YXBwbGlj YXRpb24+Z3ppcDwvYXBwbGljYXRpb24+IHRvb2wuCi0gICAgICAgICAgIFRoaXMgZm9ybWF0IGlz IGNvbXByZXNzZWQgYnkgZGVmYXVsdCBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbAotICAgICAg ICAgICBkdW1wcy4KKyAgICAgICAgICAgY2FuIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUgPGFwcGxp Y2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPiBvcgorICAgICAgICAgICA8YXBwbGljYXRpb24+bHo0 PC9hcHBsaWNhdGlvbj50b29sLgorICAgICAgICAgICBUaGlzIGZvcm1hdCBpcyBjb21wcmVzc2Vk IGJ5IGRlZmF1bHQgdXNpbmcgPGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4KKyAgICAgICAgICAgYW5k IGFsc28gc3VwcG9ydHMgcGFyYWxsZWwgZHVtcHMuCiAgICAgICAgICAgPC9wYXJhPgogICAgICAg ICAgPC9saXN0aXRlbT4KICAgICAgICAgPC92YXJsaXN0ZW50cnk+CkBAIC02NTQsNyArNjU1LDcg QEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNwZWNp ZnkgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBhbmQvb3IgdGhlIGNvbXByZXNzaW9uIGxldmVsIHRv IHVzZS4KICAgICAgICAgVGhlIGNvbXByZXNzaW9uIG1ldGhvZCBjYW4gYmUgc2V0IHRvIDxsaXRl cmFsPmd6aXA8L2xpdGVyYWw+IG9yCi0gICAgICAgIDxsaXRlcmFsPm5vbmU8L2xpdGVyYWw+IGZv ciBubyBjb21wcmVzc2lvbi4KKyAgICAgICAgPGxpdGVyYWw+bHo0PC9saXRlcmFsPiBvciA8bGl0 ZXJhbD5ub25lPC9saXRlcmFsPiBmb3Igbm8gY29tcHJlc3Npb24uCiAgICAgICAgIEEgY29tcHJl c3Npb24gZGV0YWlsIHN0cmluZyBjYW4gb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQuICBJZiB0aGUK ICAgICAgICAgZGV0YWlsIHN0cmluZyBpcyBhbiBpbnRlZ2VyLCBpdCBzcGVjaWZpZXMgdGhlIGNv bXByZXNzaW9uIGxldmVsLgogICAgICAgICBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIGNvbW1h LXNlcGFyYXRlZCBsaXN0IG9mIGl0ZW1zLCBlYWNoIG9mIHRoZQpAQCAtNjc1LDggKzY3Niw4IEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBpbmRpdmlkdWFsIHRhYmxlLWRhdGEg c2VnbWVudHMsIGFuZCB0aGUgZGVmYXVsdCBpcyB0byBjb21wcmVzcyB1c2luZwogICAgICAgICA8 bGl0ZXJhbD5nemlwPC9saXRlcmFsPiBhdCBhIG1vZGVyYXRlIGxldmVsLiBGb3IgcGxhaW4gdGV4 dCBvdXRwdXQsCiAgICAgICAgIHNldHRpbmcgYSBub256ZXJvIGNvbXByZXNzaW9uIGxldmVsIGNh dXNlcyB0aGUgZW50aXJlIG91dHB1dCBmaWxlIHRvIGJlIGNvbXByZXNzZWQsCi0gICAgICAgIGFz IHRob3VnaCBpdCBoYWQgYmVlbiBmZWQgdGhyb3VnaCA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGlj YXRpb24+OyBidXQgdGhlIGRlZmF1bHQKLSAgICAgICAgaXMgbm90IHRvIGNvbXByZXNzLgorICAg ICAgICBhcyB0aG91Z2ggaXQgaGFkIGJlZW4gZmVkIHRocm91Z2ggPGFwcGxpY2F0aW9uPmd6aXA8 L2FwcGxpY2F0aW9uPiBvcgorICAgICAgICA8YXBwbGljYXRpb24+bHo0PC9hcHBsaWNhdGlvbj47 IGJ1dCB0aGUgZGVmYXVsdCBpcyBub3QgdG8gY29tcHJlc3MuCiAgICAgICAgPC9wYXJhPgogICAg ICAgIDxwYXJhPgogICAgICAgICBUaGUgdGFyIGFyY2hpdmUgZm9ybWF0IGN1cnJlbnRseSBkb2Vz IG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIGF0IGFsbC4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCAwMDEzYmMwODBj Li5lYjhmNTk0NTlhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBAIHRvcF9idWlsZGRpciA9 IC4uLy4uLy4uCiBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAK IGV4cG9ydCBHWklQX1BST0dSQU09JChHWklQKQorZXhwb3J0IExaNAogZXhwb3J0IHdpdGhfaWN1 CiAKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNkaXIpICQoQ1BQRkxBR1MpCkBA IC0yNiw2ICsyNyw3IEBAIE9CSlMgPSBcCiAJJChXSU4zMlJFUykgXAogCWNvbXByZXNzX2d6aXAu byBcCiAJY29tcHJlc3NfaW8ubyBcCisJY29tcHJlc3NfbHo0Lm8gXAogCWNvbXByZXNzX25vbmUu byBcCiAJZHVtcHV0aWxzLm8gXAogCXBhcmFsbGVsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwppbmRl eCBjNTA3ZWViN2IzLi45MjliMzg5MDJiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtNTYsNyAr NTYsNyBAQAogICoJSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlIHRyaWVzIHRvIGRlZmZl ciB0aGUgY29tcHJlc3Npb24gYnkgdGhlCiAgKglmaWxlbmFtZSBzdWZmaXguIElmIHRoZSBzdWZm aXggaXMgbm90IHlldCBrbm93biwgdGhlbiBpdCB0cmllcyB0byBzaW1wbHkKICAqCW9wZW4gdGhl IGZpbGUsIGFuZCBpZiBpdCBmYWlscywgaXQgdHJpZXMgdG8gb3BlbiB0aGUgc2FtZSBmaWxlIHdp dGggdGhlIC5negotICoJc3VmZml4LgorICoJc3VmZml4LCBhbmQgdGhlbiBhZ2FpbiB3aXRoIHRo ZSAubHo0IHN1ZmZpeC4KICAqCiAgKiBJREVOVElGSUNBVElPTgogICoJICAgc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2lvLmMKQEAgLTcwLDYgKzcwLDcgQEAKIAogI2luY2x1ZGUgImNvbXByZXNz X2d6aXAuaCIKICNpbmNsdWRlICJjb21wcmVzc19pby5oIgorI2luY2x1ZGUgImNvbXByZXNzX2x6 NC5oIgogI2luY2x1ZGUgImNvbXByZXNzX25vbmUuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRp bHMuaCIKIApAQCAtOTAsNiArOTEsMTAgQEAgc3VwcG9ydHNfY29tcHJlc3Npb24oY29uc3QgcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogCWlmIChhbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJc3VwcG9ydGVkID0gdHJ1ZTsKICNlbmRpZgorI2lm ZGVmIFVTRV9MWjQKKwlpZiAoYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0xaNCkKKwkJc3Vw cG9ydGVkID0gdHJ1ZTsKKyNlbmRpZgogCiAJaWYgKCFzdXBwb3J0ZWQpCiAJCXJldHVybiBwc3By aW50ZigidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLApA QCAtMTIxLDYgKzEyNiw4IEBAIEFsbG9jYXRlQ29tcHJlc3Nvcihjb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCiAJCUluaXRDb21wcmVzc29yTm9uZShjcywg Y29tcHJlc3Npb25fc3BlYyk7CiAJZWxzZSBpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJSW5pdENvbXByZXNzb3JHemlwKGNzLCBjb21wcmVz c2lvbl9zcGVjKTsKKwllbHNlIGlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19D T01QUkVTU0lPTl9MWjQpCisJCUluaXRDb21wcmVzc29yTFo0KGNzLCBjb21wcmVzc2lvbl9zcGVj KTsKIAogCXJldHVybiBjczsKIH0KQEAgLTE4NSw2ICsxOTIsOCBAQCBJbml0Q29tcHJlc3NGaWxl SGFuZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykK IAkJSW5pdENvbXByZXNzRmlsZUhhbmRsZU5vbmUoQ0ZILCBjb21wcmVzc2lvbl9zcGVjKTsKIAll bHNlIGlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQ KQogCQlJbml0Q29tcHJlc3NGaWxlSGFuZGxlR3ppcChDRkgsIGNvbXByZXNzaW9uX3NwZWMpOwor CWVsc2UgaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0xa NCkKKwkJSW5pdENvbXByZXNzRmlsZUhhbmRsZUxaNChDRkgsIGNvbXByZXNzaW9uX3NwZWMpOwog CiAJcmV0dXJuIENGSDsKIH0KQEAgLTE5OCw3ICsyMDcsNyBAQCBJbml0Q29tcHJlc3NGaWxlSGFu ZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKICAq IHRocm91Z2hvdXQuIE90aGVyd2lzZSB0aGUgY29tcHJlc3Npb24gd2lsbCBiZSBkZWZlcnJlZCBi eSBpdGVyYXRpdmVseSB0cnlpbmcKICAqIHRvIG9wZW4gdGhlIGZpbGUgYXQgJ3BhdGgnLCBmaXJz dCBhcyBpcywgdGhlbiBieSBhcHBlbmRpbmcga25vd24gY29tcHJlc3Npb24KICAqIHN1ZmZpeGVz LiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcyAncGF0aCcsIHRoaXMgd2lsbCBvcGVuIGVpdGhlciAi Zm9vIiBvcgotICogImZvby5neiIsIHRyeWluZyBpbiB0aGF0IG9yZGVyLgorICogImZvby5neiIg b3IgImZvby5sejQiLCB0cnlpbmcgaW4gdGhhdCBvcmRlci4KICAqCiAgKiBPbiBmYWlsdXJlLCBy ZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCiAgKi8KQEAgLTIzNiw2ICsy NDUsMTcgQEAgSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IGNoYXIgKnBhdGgs IGNvbnN0IGNoYXIgKm1vZGUpCiAJCQlpZiAoZXhpc3RzKQogCQkJCWNvbXByZXNzaW9uX3NwZWMu YWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKIAkJfQorI2VuZGlmCisjaWZkZWYgVVNF X0xaNAorCQlpZiAoIWV4aXN0cykKKwkJeworCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKKwkJ CWZuYW1lID0gcHNwcmludGYoIiVzLmx6NCIsIHBhdGgpOworCQkJZXhpc3RzID0gKHN0YXQoZm5h bWUsICZzdCkgPT0gMCk7CisKKwkJCWlmIChleGlzdHMpCisJCQkJY29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9MWjQ7CisJCX0KICNlbmRpZgogCX0KIApkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jIGIvc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX2x6NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmVlNzRj YzhlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmMK QEAgLTAsMCArMSw2MjYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbXByZXNzX2x6 NC5jCisgKgkgUm91dGluZXMgZm9yIGFyY2hpdmVycyB0byB3cml0ZSBhIExaNCBjb21wcmVzc2Vk IGRhdGEgc3RyZWFtLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisg KiBJREVOVElGSUNBVElPTgorICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2lu Y2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgorCisjaW5jbHVkZSAiY29tcHJlc3NfbHo0LmgiCisK KyNpZmRlZiBVU0VfTFo0CisjaW5jbHVkZSA8bHo0Lmg+CisjaW5jbHVkZSA8bHo0ZnJhbWUuaD4K KworI2RlZmluZSBMWjRfT1VUX1NJWkUJKDQgKiAxMDI0KQorI2RlZmluZSBMWjRfSU5fU0laRQkJ KDE2ICogMTAyNCkKKworLyoKKyAqIExaNEZfSEVBREVSX1NJWkVfTUFYIGZpcnN0IGFwcGVhcmVk IGluIHYxLjcuNSBvZiB0aGUgbGlicmFyeS4KKyAqIFJlZGVmaW5lIGl0IGZvciBpbnN0YWxsYXRp b25zIHdpdGggYSBsZXNzZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBMWjRGX0hFQURFUl9TSVpF X01BWAorI2RlZmluZSBMWjRGX0hFQURFUl9TSVpFX01BWAkzMgorI2VuZGlmCisKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICogQ29tcHJlc3NvciBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKK3R5cGVkZWYgc3RydWN0IExaNENvbXByZXNzb3JTdGF0ZQoreworCWNoYXIJ ICAgKm91dGJ1ZjsKKwlzaXplX3QJCW91dHNpemU7Cit9IExaNENvbXByZXNzb3JTdGF0ZTsKKwor LyogUHJpdmF0ZSByb3V0aW5lcyB0aGF0IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJL08g Ki8KK3N0YXRpYyB2b2lkIFJlYWREYXRhRnJvbUFyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgs IENvbXByZXNzb3JTdGF0ZSAqY3MpOworc3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlTFo0 KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCQkgIGNvbnN0 IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKTsKK3N0YXRpYyB2b2lkIEVuZENvbXByZXNzb3JMWjQo QXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOworCitzdGF0aWMgdm9pZAor UmVhZERhdGFGcm9tQXJjaGl2ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRl ICpjcykKK3sKKwlMWjRfc3RyZWFtRGVjb2RlX3QgbHo0U3RyZWFtRGVjb2RlOworCWNoYXIJICAg KmJ1ZjsKKwljaGFyCSAgICpkZWNidWY7CisJc2l6ZV90CQlidWZsZW47CisJc2l6ZV90CQljbnQ7 CisKKwlidWZsZW4gPSBMWjRfSU5fU0laRTsKKwlidWYgPSBwZ19tYWxsb2MoYnVmbGVuKTsKKwlk ZWNidWYgPSBwZ19tYWxsb2MoYnVmbGVuKTsKKworCUxaNF9zZXRTdHJlYW1EZWNvZGUoJmx6NFN0 cmVhbURlY29kZSwgTlVMTCwgMCk7CisKKwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1 ZiwgJmJ1ZmxlbikpKQorCXsKKwkJaW50CQkJZGVjQnl0ZXMgPSBMWjRfZGVjb21wcmVzc19zYWZl X2NvbnRpbnVlKCZsejRTdHJlYW1EZWNvZGUsCisJCQkJCQkJCQkJCQkJCQlidWYsIGRlY2J1ZiwK KwkJCQkJCQkJCQkJCQkJCWNudCwgYnVmbGVuKTsKKworCQlhaHdyaXRlKGRlY2J1ZiwgMSwgZGVj Qnl0ZXMsIEFIKTsKKwl9CisKKwlwZ19mcmVlKGJ1Zik7CisJcGdfZnJlZShkZWNidWYpOworfQor CitzdGF0aWMgdm9pZAorV3JpdGVEYXRhVG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBD b21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVu KQoreworCUxaNENvbXByZXNzb3JTdGF0ZSAqTFo0Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICop IGNzLT5wcml2YXRlX2RhdGE7CisJc2l6ZV90CQljb21wcmVzc2VkOworCXNpemVfdAkJcmVxdWly ZWRzaXplID0gTFo0X2NvbXByZXNzQm91bmQoZExlbik7CisKKwlpZiAocmVxdWlyZWRzaXplID4g TFo0Y3MtPm91dHNpemUpCisJeworCQlMWjRjcy0+b3V0YnVmID0gcGdfcmVhbGxvYyhMWjRjcy0+ b3V0YnVmLCByZXF1aXJlZHNpemUpOworCQlMWjRjcy0+b3V0c2l6ZSA9IHJlcXVpcmVkc2l6ZTsK Kwl9CisKKwljb21wcmVzc2VkID0gTFo0X2NvbXByZXNzX2RlZmF1bHQoZGF0YSwgTFo0Y3MtPm91 dGJ1ZiwKKwkJCQkJCQkJCSAgZExlbiwgTFo0Y3MtPm91dHNpemUpOworCisJaWYgKGNvbXByZXNz ZWQgPD0gMCkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBMWjQgY29tcHJlc3MgZGF0YSIpOworCisJ Y3MtPndyaXRlRihBSCwgTFo0Y3MtPm91dGJ1ZiwgY29tcHJlc3NlZCk7Cit9CisKK3N0YXRpYyB2 b2lkCitFbmRDb21wcmVzc29yTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUg KmNzKQoreworCUxaNENvbXByZXNzb3JTdGF0ZSAqTFo0Y3M7CisKKwlMWjRjcyA9IChMWjRDb21w cmVzc29yU3RhdGUgKikgY3MtPnByaXZhdGVfZGF0YTsKKwlpZiAoTFo0Y3MpCisJeworCQlwZ19m cmVlKExaNGNzLT5vdXRidWYpOworCQlwZ19mcmVlKExaNGNzKTsKKwkJY3MtPnByaXZhdGVfZGF0 YSA9IE5VTEw7CisJfQorfQorCisKKy8qCisgKiBQdWJsaWMgcm91dGluZXMgdGhhdCBzdXBwb3J0 IExaNCBjb21wcmVzc2VkIGRhdGEgSS9PCisgKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yTFo0KENv bXByZXNzb3JTdGF0ZSAqY3MsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYykKK3sKKwljcy0+cmVhZERhdGEgPSBSZWFkRGF0YUZyb21BcmNoaXZlTFo0Owor CWNzLT53cml0ZURhdGEgPSBXcml0ZURhdGFUb0FyY2hpdmVMWjQ7CisJY3MtPmVuZCA9IEVuZENv bXByZXNzb3JMWjQ7CisKKwljcy0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7 CisKKwkvKiBXaWxsIGJlIGxhenkgaW5pdCdkICovCisJY3MtPnByaXZhdGVfZGF0YSA9IHBnX21h bGxvYzAoc2l6ZW9mKExaNENvbXByZXNzb3JTdGF0ZSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqIENvbXByZXNzIEZpbGUgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisvKgorICogU3RhdGUgbmVlZGVkIGZvciBMWjQgKGRlKWNvbXByZXNzaW9uIHVzaW5n IHRoZSBDb21wcmVzc0ZpbGVIYW5kbGUgQVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBMWjRGaWxl Cit7CisJRklMRQkgICAqZnA7CisKKwlMWjRGX3ByZWZlcmVuY2VzX3QgcHJlZnM7CisKKwlMWjRG X2NvbXByZXNzaW9uQ29udGV4dF90IGN0eDsKKwlMWjRGX2RlY29tcHJlc3Npb25Db250ZXh0X3Qg ZHR4OworCisJYm9vbAkJaW5pdGVkOworCWJvb2wJCWNvbXByZXNzaW5nOworCisJc2l6ZV90CQli dWZsZW47CisJY2hhcgkgICAqYnVmZmVyOworCisJc2l6ZV90CQlvdmVyZmxvd2FsbG9jbGVuOwor CXNpemVfdAkJb3ZlcmZsb3dsZW47CisJY2hhcgkgICAqb3ZlcmZsb3didWY7CisKKwlzaXplX3QJ CWVycmNvZGU7Cit9CUxaNEZpbGU7CisKKy8qCisgKiBMWjQgZXF1aXZhbGVudCB0byBmZW9mKCkg b3IgZ3plb2YoKS4gVGhlIGVuZCBvZiBmaWxlCisgKiBpcyByZWFjaGVkIGlmIHRoZXJlIGlzIG5v IGRlY29tcHJlc3NlZCBvdXRwdXQgaW4gdGhlCisgKiBvdmVyZmxvdyBidWZmZXIgYW5kIHRoZSBl bmQgb2YgdGhlIGZpbGUgaXMgcmVhY2hlZC4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9lb2Yo Q29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAq KSBDRkgtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBmcy0+b3ZlcmZsb3dsZW4gPT0gMCAmJiBm ZW9mKGZzLT5mcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK0xaNEZpbGVfZ2V0X2Vycm9y KENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUg KikgQ0ZILT5wcml2YXRlX2RhdGE7CisJY29uc3QgY2hhciAqZXJybXNnOworCisJaWYgKExaNEZf aXNFcnJvcihmcy0+ZXJyY29kZSkpCisJCWVycm1zZyA9IExaNEZfZ2V0RXJyb3JOYW1lKGZzLT5l cnJjb2RlKTsKKwllbHNlCisJCWVycm1zZyA9IHN0cmVycm9yKGVycm5vKTsKKworCXJldHVybiBl cnJtc2c7Cit9CisKKy8qCisgKiBQcmVwYXJlIGFuIGFscmVhZHkgYWxsb2MnZWQgTFo0RmlsZSBz dHJ1Y3QgZm9yIHN1YnNlcXVlbnQgY2FsbHMuCisgKgorICogSXQgY3JlYXRlcyB0aGUgbmVjZXNz YXJ5IGNvbnRleHRzIGZvciB0aGUgb3BlcmF0aW9ucy4gV2hlbiBjb21wcmVzc2luZywKKyAqIGl0 IGFkZGl0aW9uYWxseSB3cml0ZXMgdGhlIExaNCBoZWFkZXIgaW4gdGhlIG91dHB1dCBzdHJlYW0u CisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfaW5pdChMWjRGaWxlICogZnMsIGludCBzaXplLCBi b29sIGNvbXByZXNzaW5nKQoreworCXNpemVfdAkJc3RhdHVzOworCisJaWYgKGZzLT5pbml0ZWQp CisJCXJldHVybiAwOworCisJZnMtPmNvbXByZXNzaW5nID0gY29tcHJlc3Npbmc7CisJZnMtPmlu aXRlZCA9IHRydWU7CisKKwlpZiAoZnMtPmNvbXByZXNzaW5nKQorCXsKKwkJZnMtPmJ1ZmxlbiA9 IExaNEZfY29tcHJlc3NCb3VuZChMWjRfSU5fU0laRSwgJmZzLT5wcmVmcyk7CisJCWlmIChmcy0+ YnVmbGVuIDwgTFo0Rl9IRUFERVJfU0laRV9NQVgpCisJCQlmcy0+YnVmbGVuID0gTFo0Rl9IRUFE RVJfU0laRV9NQVg7CisKKwkJc3RhdHVzID0gTFo0Rl9jcmVhdGVDb21wcmVzc2lvbkNvbnRleHQo JmZzLT5jdHgsIExaNEZfVkVSU0lPTik7CisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJ eworCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWZzLT5i dWZmZXIgPSBwZ19tYWxsb2MoZnMtPmJ1Zmxlbik7CisJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NC ZWdpbihmcy0+Y3R4LCBmcy0+YnVmZmVyLCBmcy0+YnVmbGVuLAorCQkJCQkJCQkJJmZzLT5wcmVm cyk7CisKKwkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9 IHN0YXR1czsKKwkJCXJldHVybiAxOworCQl9CisKKwkJaWYgKGZ3cml0ZShmcy0+YnVmZmVyLCAx LCBzdGF0dXMsIGZzLT5mcCkgIT0gc3RhdHVzKQorCQl7CisJCQllcnJubyA9IChlcnJubykgPyBl cnJubyA6IEVOT1NQQzsKKwkJCXJldHVybiAxOworCQl9CisJfQorCWVsc2UKKwl7CisJCXN0YXR1 cyA9IExaNEZfY3JlYXRlRGVjb21wcmVzc2lvbkNvbnRleHQoJmZzLT5kdHgsIExaNEZfVkVSU0lP Tik7CisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBz dGF0dXM7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWZzLT5idWZsZW4gPSBzaXplID4gTFo0X09V VF9TSVpFID8gc2l6ZSA6IExaNF9PVVRfU0laRTsKKwkJZnMtPmJ1ZmZlciA9IHBnX21hbGxvYyhm cy0+YnVmbGVuKTsKKworCQlmcy0+b3ZlcmZsb3dhbGxvY2xlbiA9IGZzLT5idWZsZW47CisJCWZz LT5vdmVyZmxvd2J1ZiA9IHBnX21hbGxvYyhmcy0+b3ZlcmZsb3dhbGxvY2xlbik7CisJCWZzLT5v dmVyZmxvd2xlbiA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkIGFscmVh ZHkgZGVjb21wcmVzc2VkIGNvbnRlbnQgZnJvbSB0aGUgb3ZlcmZsb3cgYnVmZmVyIGludG8gJ3B0 cicgdXAgdG8KKyAqICdzaXplJyBieXRlcywgaWYgYXZhaWxhYmxlLiBJZiB0aGUgZW9sX2ZsYWcg aXMgc2V0LCB0aGVuIHN0b3AgYXQgdGhlIGZpcnN0CisgKiBvY2N1cnJlbmNlIG9mIHRoZSBuZXcg bGluZSBjaGFyIHByaW9yIHRvICdzaXplJyBieXRlcy4KKyAqCisgKiBBbnkgdW5yZWFkIGNvbnRl bnQgaW4gdGhlIG92ZXJmbG93IGJ1ZmZlciwgaXMgbW92ZWQgdG8gdGhlIGJlZ2lubmluZy4KKyAq Lworc3RhdGljIGludAorTFo0RmlsZV9yZWFkX292ZXJmbG93KExaNEZpbGUgKiBmcywgdm9pZCAq cHRyLCBpbnQgc2l6ZSwgYm9vbCBlb2xfZmxhZykKK3sKKwljaGFyCSAgICpwOworCWludAkJCXJl YWRsZW4gPSAwOworCisJaWYgKGZzLT5vdmVyZmxvd2xlbiA9PSAwKQorCQlyZXR1cm4gMDsKKwor CWlmIChmcy0+b3ZlcmZsb3dsZW4gPj0gc2l6ZSkKKwkJcmVhZGxlbiA9IHNpemU7CisJZWxzZQor CQlyZWFkbGVuID0gZnMtPm92ZXJmbG93bGVuOworCisJaWYgKGVvbF9mbGFnICYmIChwID0gbWVt Y2hyKGZzLT5vdmVyZmxvd2J1ZiwgJ1xuJywgcmVhZGxlbikpKQorCQkvKiBJbmNsdWRlIHRoZSBs aW5lIHRlcm1pbmF0aW5nIGNoYXIgKi8KKwkJcmVhZGxlbiA9IHAgLSBmcy0+b3ZlcmZsb3didWYg KyAxOworCisJbWVtY3B5KHB0ciwgZnMtPm92ZXJmbG93YnVmLCByZWFkbGVuKTsKKwlmcy0+b3Zl cmZsb3dsZW4gLT0gcmVhZGxlbjsKKworCWlmIChmcy0+b3ZlcmZsb3dsZW4gPiAwKQorCQltZW1t b3ZlKGZzLT5vdmVyZmxvd2J1ZiwgZnMtPm92ZXJmbG93YnVmICsgcmVhZGxlbiwgZnMtPm92ZXJm bG93bGVuKTsKKworCXJldHVybiByZWFkbGVuOworfQorCisvKgorICogVGhlIHdvcmtob3JzZSBm b3IgcmVhZGluZyBkZWNvbXByZXNzZWQgY29udGVudCBvdXQgb2YgYW4gTFo0IGNvbXByZXNzZWQK KyAqIHN0cmVhbS4KKyAqCisgKiBJdCB3aWxsIHJlYWQgdXAgdG8gJ3B0cnNpemUnIGRlY29tcHJl c3NlZCBjb250ZW50LCBvciB1cCB0byB0aGUgbmV3IGxpbmUgY2hhcgorICogaWYgZm91bmQgZmly c3Qgd2hlbiB0aGUgZW9sX2ZsYWcgaXMgc2V0LiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBkZWNv bXByZXNzZWQKKyAqIG91dHB1dCBnZW5lcmF0ZWQgYnkgcmVhZGluZyBhbnkgY29tcHJlc3NlZCBp bnB1dCB2aWEgdGhlIExaNEYgQVBJLCBleGNlZWRzCisgKiAncHRyc2l6ZScuIEFueSBleGNlZWRp bmcgZGVjb21wcmVzc2VkIGNvbnRlbnQgaXMgc3RvcmVkIGF0IGFuIG92ZXJmbG93CisgKiBidWZm ZXIgd2l0aGluIExaNEZpbGUuIE9mIGNvdXJzZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVk LCBpdCB3aWxsIGZpcnN0CisgKiB0cnkgdG8gY29uc3VtZSBhbnkgZGVjb21wcmVzc2VkIGNvbnRl bnQgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBvdmVyZmxvdworICogYnVmZmVyLCBiZWZvcmUgZGVj b21wcmVzc2luZyBuZXcgY29udGVudC4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9yZWFkX2lu dGVybmFsKExaNEZpbGUgKiBmcywgdm9pZCAqcHRyLCBpbnQgcHRyc2l6ZSwgYm9vbCBlb2xfZmxh ZykKK3sKKwlzaXplX3QJCWRzaXplID0gMDsKKwlzaXplX3QJCXJzaXplOworCXNpemVfdAkJc2l6 ZSA9IHB0cnNpemU7CisJYm9vbAkJZW9sX2ZvdW5kID0gZmFsc2U7CisKKwl2b2lkCSAgICpyZWFk YnVmOworCisJLyogTGF6eSBpbml0ICovCisJaWYgKExaNEZpbGVfaW5pdChmcywgc2l6ZSwgZmFs c2UgLyogZGVjb21wcmVzc2luZyAqLyApKQorCQlyZXR1cm4gLTE7CisKKwkvKiBWZXJpZnkgdGhh dCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgaW4gdGhlIG91dGJ1ZiAqLworCWlmIChzaXplID4gZnMt PmJ1ZmxlbikKKwl7CisJCWZzLT5idWZsZW4gPSBzaXplOworCQlmcy0+YnVmZmVyID0gcGdfcmVh bGxvYyhmcy0+YnVmZmVyLCBzaXplKTsKKwl9CisKKwkvKiB1c2UgYWxyZWFkeSBkZWNvbXByZXNz ZWQgY29udGVudCBpZiBhdmFpbGFibGUgKi8KKwlkc2l6ZSA9IExaNEZpbGVfcmVhZF9vdmVyZmxv dyhmcywgcHRyLCBzaXplLCBlb2xfZmxhZyk7CisJaWYgKGRzaXplID09IHNpemUgfHwgKGVvbF9m bGFnICYmIG1lbWNocihwdHIsICdcbicsIGRzaXplKSkpCisJCXJldHVybiBkc2l6ZTsKKworCXJl YWRidWYgPSBwZ19tYWxsb2Moc2l6ZSk7CisKKwlkbworCXsKKwkJY2hhcgkgICAqcnA7CisJCWNo YXIJICAgKnJlbmQ7CisKKwkJcnNpemUgPSBmcmVhZChyZWFkYnVmLCAxLCBzaXplLCBmcy0+ZnAp OworCQlpZiAocnNpemUgPCBzaXplICYmICFmZW9mKGZzLT5mcCkpCisJCQlyZXR1cm4gLTE7CisK KwkJcnAgPSAoY2hhciAqKSByZWFkYnVmOworCQlyZW5kID0gKGNoYXIgKikgcmVhZGJ1ZiArIHJz aXplOworCisJCXdoaWxlIChycCA8IHJlbmQpCisJCXsKKwkJCXNpemVfdAkJc3RhdHVzOworCQkJ c2l6ZV90CQlvdXRsZW4gPSBmcy0+YnVmbGVuOworCQkJc2l6ZV90CQlyZWFkX3JlbWFpbiA9IHJl bmQgLSBycDsKKworCQkJbWVtc2V0KGZzLT5idWZmZXIsIDAsIG91dGxlbik7CisJCQlzdGF0dXMg PSBMWjRGX2RlY29tcHJlc3MoZnMtPmR0eCwgZnMtPmJ1ZmZlciwgJm91dGxlbiwKKwkJCQkJCQkJ CSBycCwgJnJlYWRfcmVtYWluLCBOVUxMKTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkK KwkJCXsKKwkJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisK KwkJCXJwICs9IHJlYWRfcmVtYWluOworCisJCQkvKgorCQkJICogZmlsbCBpbiB3aGF0IHNwYWNl IGlzIGF2YWlsYWJsZSBpbiBwdHIgaWYgdGhlIGVvbCBmbGFnIGlzIHNldCwKKwkJCSAqIGVpdGhl ciBza2lwIGlmIG9uZSBhbHJlYWR5IGZvdW5kIG9yIGZpbGwgdXAgdG8gRU9MIGlmIHByZXNlbnQK KwkJCSAqIGluIHRoZSBvdXRidWYKKwkJCSAqLworCQkJaWYgKG91dGxlbiA+IDAgJiYgZHNpemUg PCBzaXplICYmIGVvbF9mb3VuZCA9PSBmYWxzZSkKKwkJCXsKKwkJCQljaGFyCSAgICpwOworCQkJ CXNpemVfdAkJbGliID0gKCFlb2xfZmxhZykgPyBzaXplIC0gZHNpemUgOiBzaXplIC0gMSAtIGRz aXplOworCQkJCXNpemVfdAkJbGVuID0gb3V0bGVuIDwgbGliID8gb3V0bGVuIDogbGliOworCisJ CQkJaWYgKGVvbF9mbGFnICYmCisJCQkJCShwID0gbWVtY2hyKGZzLT5idWZmZXIsICdcbicsIG91 dGxlbikpICYmCisJCQkJCShzaXplX3QpIChwIC0gZnMtPmJ1ZmZlciArIDEpIDw9IGxlbikKKwkJ CQl7CisJCQkJCWxlbiA9IHAgLSBmcy0+YnVmZmVyICsgMTsKKwkJCQkJZW9sX2ZvdW5kID0gdHJ1 ZTsKKwkJCQl9CisKKwkJCQltZW1jcHkoKGNoYXIgKikgcHRyICsgZHNpemUsIGZzLT5idWZmZXIs IGxlbik7CisJCQkJZHNpemUgKz0gbGVuOworCisJCQkJLyogbW92ZSB3aGF0IGRpZCBub3QgZml0 LCBpZiBhbnksIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZiAqLworCQkJCWlmIChsZW4gPCBv dXRsZW4pCisJCQkJCW1lbW1vdmUoZnMtPmJ1ZmZlciwgZnMtPmJ1ZmZlciArIGxlbiwgb3V0bGVu IC0gbGVuKTsKKwkJCQlvdXRsZW4gLT0gbGVuOworCQkJfQorCisJCQkvKiBpZiB0aGVyZSBpcyBh dmFpbGFibGUgb3V0cHV0LCBzYXZlIGl0ICovCisJCQlpZiAob3V0bGVuID4gMCkKKwkJCXsKKwkJ CQl3aGlsZSAoZnMtPm92ZXJmbG93bGVuICsgb3V0bGVuID4gZnMtPm92ZXJmbG93YWxsb2NsZW4p CisJCQkJeworCQkJCQlmcy0+b3ZlcmZsb3dhbGxvY2xlbiAqPSAyOworCQkJCQlmcy0+b3ZlcmZs b3didWYgPSBwZ19yZWFsbG9jKGZzLT5vdmVyZmxvd2J1ZiwKKwkJCQkJCQkJCQkJCSBmcy0+b3Zl cmZsb3dhbGxvY2xlbik7CisJCQkJfQorCisJCQkJbWVtY3B5KGZzLT5vdmVyZmxvd2J1ZiArIGZz LT5vdmVyZmxvd2xlbiwgZnMtPmJ1ZmZlciwgb3V0bGVuKTsKKwkJCQlmcy0+b3ZlcmZsb3dsZW4g Kz0gb3V0bGVuOworCQkJfQorCQl9CisJfSB3aGlsZSAocnNpemUgPT0gc2l6ZSAmJiBkc2l6ZSA8 IHNpemUgJiYgZW9sX2ZvdW5kID09IDApOworCisJcGdfZnJlZShyZWFkYnVmKTsKKworCXJldHVy biAoaW50KSBkc2l6ZTsKK30KKworLyoKKyAqIENvbXByZXNzIHNpemUgYnl0ZXMgZnJvbSBwdHIg YW5kIHdyaXRlIHRoZW0gdG8gdGhlIHN0cmVhbS4KKyAqLworc3RhdGljIHNpemVfdAorTFo0Rmls ZV93cml0ZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRh OworCXNpemVfdAkJc3RhdHVzOworCWludAkJCXJlbWFpbmluZyA9IHNpemU7CisKKwkvKiBMYXp5 IGluaXQgKi8KKwlpZiAoTFo0RmlsZV9pbml0KGZzLCBzaXplLCB0cnVlKSkKKwkJcmV0dXJuIC0x OworCisJd2hpbGUgKHJlbWFpbmluZyA+IDApCisJeworCQlpbnQJCQljaHVuayA9IHJlbWFpbmlu ZyA8IExaNF9JTl9TSVpFID8gcmVtYWluaW5nIDogTFo0X0lOX1NJWkU7CisKKwkJcmVtYWluaW5n IC09IGNodW5rOworCisJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NVcGRhdGUoZnMtPmN0eCwgZnMt PmJ1ZmZlciwgZnMtPmJ1ZmxlbiwKKwkJCQkJCQkJCSBwdHIsIGNodW5rLCBOVUxMKTsKKwkJaWYg KExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJ CXJldHVybiAtMTsKKwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1ZmZlciwgMSwgc3RhdHVzLCBm cy0+ZnApICE9IHN0YXR1cykKKwkJeworCQkJZXJybm8gPSAoZXJybm8pID8gZXJybm8gOiBFTk9T UEM7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiBzaXplOworfQorCisvKgorICog ZnJlYWQoKSBlcXVpdmFsZW50IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJlc3NlZCBmaWxl cy4KKyAqLworc3RhdGljIHNpemVfdAorTFo0RmlsZV9yZWFkKHZvaWQgKnB0ciwgc2l6ZV90IHNp emUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZp bGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisJaW50CQkJcmV0OworCisJcmV0ID0gTFo0RmlsZV9y ZWFkX2ludGVybmFsKGZzLCBwdHIsIHNpemUsIGZhbHNlKTsKKwlpZiAocmV0ICE9IHNpemUgJiYg IUxaNEZpbGVfZW9mKENGSCkpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0 IGZpbGU6ICVzIiwgTFo0RmlsZV9nZXRfZXJyb3IoQ0ZIKSk7CisKKwlyZXR1cm4gcmV0OworfQor CisvKgorICogZmdldGMoKSBlcXVpdmFsZW50IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJl c3NlZCBmaWxlcy4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9nZXRjKENvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRl X2RhdGE7CisJdW5zaWduZWQgY2hhciBjOworCisJaWYgKExaNEZpbGVfcmVhZF9pbnRlcm5hbChm cywgJmMsIDEsIGZhbHNlKSAhPSAxKQorCXsKKwkJaWYgKCFMWjRGaWxlX2VvZihDRkgpKQorCQkJ cGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBMWjRGaWxlX2dl dF9lcnJvcihDRkgpKTsKKwkJZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20g aW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKKwl9CisKKwlyZXR1cm4gYzsKK30KKworLyoKKyAq IGZnZXRzKCkgZXF1aXZhbGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmls ZXMuCisgKi8KK3N0YXRpYyBjaGFyICoKK0xaNEZpbGVfZ2V0cyhjaGFyICpwdHIsIGludCBzaXpl LCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxl ICopIENGSC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJZHNpemU7CisKKwlkc2l6ZSA9IExaNEZp bGVfcmVhZF9pbnRlcm5hbChmcywgcHRyLCBzaXplLCB0cnVlKTsKKwlpZiAoZHNpemUgPCAwKQor CQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIExaNEZpbGVf Z2V0X2Vycm9yKENGSCkpOworCisJLyogRG9uZSByZWFkaW5nICovCisJaWYgKGRzaXplID09IDAp CisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHB0cjsKK30KKworLyoKKyAqIEZpbmFsaXplIChk ZSljb21wcmVzc2lvbiBvZiBhIHN0cmVhbS4gV2hlbiBjb21wcmVzc2luZyBpdCB3aWxsIHdyaXRl IGFueQorICogcmVtYWluaW5nIGNvbnRlbnQgYW5kL29yIGdlbmVyYXRlZCBmb290ZXIgZnJvbSB0 aGUgTFo0IEFQSS4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9jbG9zZShDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpmcDsKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxl ICopIENGSC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJc3RhdHVzOworCWludAkJCXJldDsKKwor CWZwID0gZnMtPmZwOworCWlmIChmcy0+aW5pdGVkKQorCXsKKwkJaWYgKGZzLT5jb21wcmVzc2lu ZykKKwkJeworCQkJc3RhdHVzID0gTFo0Rl9jb21wcmVzc0VuZChmcy0+Y3R4LCBmcy0+YnVmZmVy LCBmcy0+YnVmbGVuLCBOVUxMKTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCQlw Z19mYXRhbCgiZmFpbGVkIHRvIGVuZCBjb21wcmVzc2lvbjogJXMiLAorCQkJCQkJIExaNEZfZ2V0 RXJyb3JOYW1lKHN0YXR1cykpOworCQkJZWxzZSBpZiAoKHJldCA9IGZ3cml0ZShmcy0+YnVmZmVy LCAxLCBzdGF0dXMsIGZzLT5mcCkpICE9IHN0YXR1cykKKwkJCXsKKwkJCQllcnJubyA9IChlcnJu bykgPyBlcnJubyA6IEVOT1NQQzsKKwkJCQlXUklURV9FUlJPUl9FWElUOworCQkJfQorCisJCQlz dGF0dXMgPSBMWjRGX2ZyZWVDb21wcmVzc2lvbkNvbnRleHQoZnMtPmN0eCk7CisJCQlpZiAoTFo0 Rl9pc0Vycm9yKHN0YXR1cykpCisJCQkJcGdfZmF0YWwoImZhaWxlZCB0byBlbmQgY29tcHJlc3Np b246ICVzIiwKKwkJCQkJCSBMWjRGX2dldEVycm9yTmFtZShzdGF0dXMpKTsKKwkJfQorCQllbHNl CisJCXsKKwkJCXN0YXR1cyA9IExaNEZfZnJlZURlY29tcHJlc3Npb25Db250ZXh0KGZzLT5kdHgp OworCQkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQkJCXBnX2ZhdGFsKCJmYWlsZWQgdG8g ZW5kIGRlY29tcHJlc3Npb246ICVzIiwKKwkJCQkJCSBMWjRGX2dldEVycm9yTmFtZShzdGF0dXMp KTsKKwkJCXBnX2ZyZWUoZnMtPm92ZXJmbG93YnVmKTsKKwkJfQorCisJCXBnX2ZyZWUoZnMtPmJ1 ZmZlcik7CisJfQorCisJcGdfZnJlZShmcyk7CisKKwlyZXR1cm4gZmNsb3NlKGZwKTsKK30KKwor c3RhdGljIGludAorTFo0RmlsZV9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3Qg Y2hhciAqbW9kZSwKKwkJCSBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpm cDsKKwlMWjRGaWxlICAgICpsejRmcCA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOwor CisJaWYgKGZkID49IDApCisJCWZwID0gZmRvcGVuKGZkLCBtb2RlKTsKKwllbHNlCisJCWZwID0g Zm9wZW4ocGF0aCwgbW9kZSk7CisJaWYgKGZwID09IE5VTEwpCisJeworCQlsejRmcC0+ZXJyY29k ZSA9IGVycm5vOworCQlyZXR1cm4gMTsKKwl9CisKKwlsejRmcC0+ZnAgPSBmcDsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50CitMWjRGaWxlX29wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0 aCwgY29uc3QgY2hhciAqbW9kZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJY2hhcgkg ICAqZm5hbWU7CisJaW50CQkJcmV0OworCisJZm5hbWUgPSBwc3ByaW50ZigiJXMubHo0IiwgcGF0 aCk7CisJcmV0ID0gQ0ZILT5vcGVuX2Z1bmMoZm5hbWUsIC0xLCBtb2RlLCBDRkgpOworCXBnX2Zy ZWUoZm5hbWUpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFB1YmxpYyByb3V0aW5lcwor ICovCit2b2lkCitJbml0Q29tcHJlc3NGaWxlSGFuZGxlTFo0KENvbXByZXNzRmlsZUhhbmRsZSAq Q0ZILAorCQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpCit7CisJTFo0RmlsZSAgICAqbHo0ZnA7CisKKwlDRkgtPm9wZW5fZnVuYyA9IExaNEZp bGVfb3BlbjsKKwlDRkgtPm9wZW5fd3JpdGVfZnVuYyA9IExaNEZpbGVfb3Blbl93cml0ZTsKKwlD RkgtPnJlYWRfZnVuYyA9IExaNEZpbGVfcmVhZDsKKwlDRkgtPndyaXRlX2Z1bmMgPSBMWjRGaWxl X3dyaXRlOworCUNGSC0+Z2V0c19mdW5jID0gTFo0RmlsZV9nZXRzOworCUNGSC0+Z2V0Y19mdW5j ID0gTFo0RmlsZV9nZXRjOworCUNGSC0+ZW9mX2Z1bmMgPSBMWjRGaWxlX2VvZjsKKwlDRkgtPmNs b3NlX2Z1bmMgPSBMWjRGaWxlX2Nsb3NlOworCUNGSC0+Z2V0X2Vycm9yX2Z1bmMgPSBMWjRGaWxl X2dldF9lcnJvcjsKKworCUNGSC0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7 CisJbHo0ZnAgPSBwZ19tYWxsb2MwKHNpemVvZigqbHo0ZnApKTsKKwlpZiAoQ0ZILT5jb21wcmVz c2lvbl9zcGVjLmxldmVsID49IDApCisJCWx6NGZwLT5wcmVmcy5jb21wcmVzc2lvbkxldmVsID0g Q0ZILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBsejRm cDsKK30KKyNlbHNlCQkJCQkJCS8qIFVTRV9MWjQgKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yTFo0 KENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qg c3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgIkxaNCIpOworfQorCit2b2lkCitJbml0Q29t cHJlc3NGaWxlSGFuZGxlTFo0KENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILAorCQkJCQkJICBjb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0 YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgIkxa NCIpOworfQorI2VuZGlmCQkJCQkJCS8qIFVTRV9MWjQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19sejQuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40MGRiZTAwZDQ2Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oCkBAIC0wLDAgKzEsMjQg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbXByZXNzX2x6NC5oCisgKgkgTFo0IGlu dGVyZmFjZSB0byBjb21wcmVzc19pby5jIHJvdXRpbmVzCisgKgorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgICBzcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfbHo0LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBf Q09NUFJFU1NfTFo0X0hfCisjZGVmaW5lIF9DT01QUkVTU19MWjRfSF8KKworI2luY2x1ZGUgImNv bXByZXNzX2lvLmgiCisKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc29yTFo0KENvbXByZXNzb3JT dGF0ZSAqY3MsCisJCQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpOworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzRmlsZUhhbmRsZUxaNChDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSCwKKwkJCQkJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKworI2VuZGlmCQkJCQkJCS8qIF9DT01QUkVTU19M WjRfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9i aW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCA4NGU5ZjBkZWZhLi4wZGE0NzZhNGMzIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L21lc29uLmJ1aWxkCkBAIC0zLDYgKzMsNyBAQAogcGdfZHVtcF9jb21tb25fc291cmNlcyA9IGZp bGVzKAogICAnY29tcHJlc3NfZ3ppcC5jJywKICAgJ2NvbXByZXNzX2lvLmMnLAorICAnY29tcHJl c3NfbHo0LmMnLAogICAnY29tcHJlc3Nfbm9uZS5jJywKICAgJ2R1bXB1dGlscy5jJywKICAgJ3Bh cmFsbGVsLmMnLApAQCAtMTgsNyArMTksNyBAQCBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0gZmls ZXMoCiBwZ19kdW1wX2NvbW1vbiA9IHN0YXRpY19saWJyYXJ5KCdsaWJwZ2R1bXBfY29tbW9uJywK ICAgcGdfZHVtcF9jb21tb25fc291cmNlcywKICAgY19wY2g6IHBjaF9wb3N0Z3Jlc19mZV9oLAot ICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcSwgemxpYl0sCisgIGRlcGVuZGVu Y2llczogW2Zyb250ZW5kX2NvZGUsIGxpYnBxLCBsejQsIHpsaWJdLAogICBrd2FyZ3M6IGludGVy bmFsX2xpYl9hcmdzLAogKQogCkBAIC04Niw3ICs4NywxMCBAQCB0ZXN0cyArPSB7CiAgICdzZCc6 IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAogICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxk X2RpcigpLAogICAndGFwJzogewotICAgICdlbnYnOiB7J0daSVBfUFJPR1JBTSc6IGd6aXAucGF0 aCgpfSwKKyAgICAnZW52JzogeworICAgICAgJ0daSVBfUFJPR1JBTSc6IGd6aXAucGF0aCgpLAor ICAgICAgJ0xaNCc6IHByb2dyYW1fbHo0LmZvdW5kKCkgPyBwcm9ncmFtX2x6NC5wYXRoKCkgOiAn JywKKyAgICB9LAogICAgICd0ZXN0cyc6IFsKICAgICAgICd0LzAwMV9iYXNpYy5wbCcsCiAgICAg ICAndC8wMDJfcGdfZHVtcC5wbCcsCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5k ZXggMmJjNTY0OGVkNi4uMDI3ZGVkNGJhZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuYwpAQCAtMjA3NSw3ICsyMDc1LDcgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZl SGFuZGxlICpBSCkKIAogCQkvKgogCQkgKiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGFyY2hpdmUg aXMgYSBkaXJlY3RvcnkuIElmIHNvLCBjaGVjayBpZgotCQkgKiB0aGVyZSdzIGEgInRvYy5kYXQi IChvciAidG9jLmRhdC5neiIpIGZpbGUgaW4gaXQuCisJCSAqIHRoZXJlJ3MgYSAidG9jLmRhdCIg KG9yICJ0b2MuZGF0LntneixsejR9IikgZmlsZSBpbiBpdC4KIAkJICovCiAJCWlmIChzdGF0KEFI LT5mU3BlYywgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCiAJCXsKQEAgLTIwODUs NiArMjA4NSwxMCBAQCBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQog I2lmZGVmIEhBVkVfTElCWgogCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVj LCAidG9jLmRhdC5neiIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OworI2VuZGlmCisjaWZkZWYg VVNFX0xaNAorCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRh dC5sejQiKSkKKwkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKICNlbmRpZgogCQkJcGdfZmF0YWwoImRp cmVjdG9yeSBcIiVzXCIgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgYXJjaGl2ZSAoXCJ0 b2MuZGF0XCIgZG9lcyBub3QgZXhpc3QpIiwKIAkJCQkJIEFILT5mU3BlYyk7CmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9kaXJlY3RvcnkuYwppbmRleCBhMmY4ODk5NWMwLi5jZTJhMDgzOGZhIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCisrKyBiL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKQEAgLTc3OSwxMCArNzc5LDEzIEBAIF9Q cmVwUGFyYWxsZWxSZXN0b3JlKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJCWlmIChzdGF0KGZuYW1l LCAmc3QpID09IDApCiAJCQl0ZS0+ZGF0YUxlbmd0aCA9IHN0LnN0X3NpemU7Ci0JCWVsc2UKKwkJ ZWxzZSBpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9O X05PTkUpCiAJCXsKLQkJCS8qIEl0IG1pZ2h0IGJlIGNvbXByZXNzZWQgKi8KLQkJCXN0cmxjYXQo Zm5hbWUsICIuZ3oiLCBzaXplb2YoZm5hbWUpKTsKKwkJCWlmIChBSC0+Y29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwkJCQlzdHJsY2F0KGZuYW1lLCAi Lmd6Iiwgc2l6ZW9mKGZuYW1lKSk7CisJCQllbHNlIGlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTFo0KQorCQkJCXN0cmxjYXQoZm5hbWUsICIubHo0 Iiwgc2l6ZW9mKGZuYW1lKSk7CisKIAkJCWlmIChzdGF0KGZuYW1lLCAmc3QpID09IDApCiAJCQkJ dGUtPmRhdGFMZW5ndGggPSBzdC5zdF9zaXplOwogCQl9CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA1MjdjNzY1 MWFiLi4wODEwNTMzN2IxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTcxNSwxMyArNzE1LDEyIEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CiAJCQkv KiBmYWxsdGhyb3VnaCAqLwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CisJCQkvKiBmYWxs dGhyb3VnaCAqLworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0xaNDoKIAkJCWJyZWFrOwogCQljYXNl IFBHX0NPTVBSRVNTSU9OX1pTVEQ6CiAJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBp cyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7CiAJCQlicmVhazsKLQkJY2FzZSBQR19DT01Q UkVTU0lPTl9MWjQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0 IHN1cHBvcnRlZCIsICJMWjQiKTsKLQkJCWJyZWFrOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9w Z19kdW1wLnBsCmluZGV4IDc4NDU0OTI4Y2MuLjcyYjE5ZWU2Y2QgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9w Z19kdW1wLnBsCkBAIC0xMzksNiArMTM5LDgwIEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWFy Z3MgICAgPT4gWyAnLWQnLCAiJHRlbXBkaXIvY29tcHJlc3Npb25fZ3ppcF9wbGFpbi5zcWwuZ3oi LCBdLAogCQl9LAogCX0sCisKKwkjIERvIG5vdCB1c2UgLS1uby1zeW5jIHRvIGdpdmUgdGVzdCBj b3ZlcmFnZSBmb3IgZGF0YSBzeW5jLgorCWNvbXByZXNzaW9uX2x6NF9jdXN0b20gPT4geworCQl0 ZXN0X2tleSAgICAgICA9PiAnY29tcHJlc3Npb24nLAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0 JywKKwkJZHVtcF9jbWQgICAgICAgPT4gWworCQkJJ3BnX2R1bXAnLCAgICAgICctLWZvcm1hdD1j dXN0b20nLAorCQkJJy0tY29tcHJlc3M9bHo0JywgIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lv bl9sejRfY3VzdG9tLmR1bXAiLAorCQkJJ3Bvc3RncmVzJywKKwkJXSwKKwkJcmVzdG9yZV9jbWQg PT4gWworCQkJJ3BnX3Jlc3RvcmUnLAorCQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9s ejRfY3VzdG9tLnNxbCIsCisJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5kdW1w IiwKKwkJXSwKKwkJY29tbWFuZF9saWtlID0+IHsKKwkJCWNvbW1hbmQgPT4gWworCQkJCSdwZ19y ZXN0b3JlJywKKwkJCQknLWwnLCAiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5kdW1w IiwKKwkJCV0sCisJCQlleHBlY3RlZCA9PiBxci9Db21wcmVzc2lvbjogbHo0LywKKwkJCW5hbWUg PT4gJ2RhdGEgY29udGVudCBpcyBsejQgY29tcHJlc3NlZCcKKwkJfSwKKwl9LAorCisJIyBEbyBu b3QgdXNlIC0tbm8tc3luYyB0byBnaXZlIHRlc3QgY292ZXJhZ2UgZm9yIGRhdGEgc3luYy4KKwlj b21wcmVzc2lvbl9sejRfZGlyID0+IHsKKwkJdGVzdF9rZXkgICAgICAgPT4gJ2NvbXByZXNzaW9u JywKKwkJY29tcGlsZV9vcHRpb24gPT4gJ2x6NCcsCisJCWR1bXBfY21kICAgICAgID0+IFsKKwkJ CSdwZ19kdW1wJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1qb2JzPTInLAorCQkJ Jy0tZm9ybWF0PWRpcmVjdG9yeScsICAgICAgICAgICAgICAgICAgICctLWNvbXByZXNzPWx6NDox JywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2RpciIsICdwb3N0Z3Jlcycs CisJCV0sCisJCSMgR2l2ZSBjb3ZlcmFnZSBmb3IgbWFudWFsbHkgY29tcHJlc3NlZCBibG9iLnRv YyBmaWxlcyBkdXJpbmcKKwkJIyByZXN0b3JlLgorCQljb21wcmVzc19jbWQgPT4geworCQkJcHJv Z3JhbSA9PiAkRU5WeydMWjQnfSwKKwkJCWFyZ3MgICAgPT4gWworCQkJCScteicsICctZicsICct LXJtJywKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci9ibG9icy50b2MiLAorCQkJ CSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyL2Jsb2JzLnRvYy5sejQiLAorCQkJXSwKKwkJ fSwKKwkJIyBWZXJpZnkgdGhhdCBkYXRhIGZpbGVzIHdlcmUgY29tcHJlc3NlZAorCQlnbG9iX3Bh dHRlcm5zID0+IFsKKwkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyL3RvYy5kYXQiLAor CQkgICAgIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIvKi5kYXQubHo0IiwKKwkJXSwKKwkJ cmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLS1qb2JzPTInLAorCQkJIi0tZmls ZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfZGlyLnNxbCIsCisJCQkiJHRlbXBkaXIvY29tcHJl c3Npb25fbHo0X2RpciIsCisJCV0sCisJfSwKKworCWNvbXByZXNzaW9uX2x6NF9wbGFpbiA9PiB7 CisJCXRlc3Rfa2V5ICAgICAgID0+ICdjb21wcmVzc2lvbicsCisJCWNvbXBpbGVfb3B0aW9uID0+ ICdsejQnLAorCQlkdW1wX2NtZCAgICAgICA9PiBbCisJCQkncGdfZHVtcCcsICctLWZvcm1hdD1w bGFpbicsICctLWNvbXByZXNzPWx6NCcsCisJCQkiLS1maWxlPSR0ZW1wZGlyL2NvbXByZXNzaW9u X2x6NF9wbGFpbi5zcWwubHo0IiwgJ3Bvc3RncmVzJywKKwkJXSwKKwkJIyBEZWNvbXByZXNzIHRo ZSBnZW5lcmF0ZWQgZmlsZSB0byBydW4gdGhyb3VnaCB0aGUgdGVzdHMuCisJCWNvbXByZXNzX2Nt ZCA9PiB7CisJCQlwcm9ncmFtID0+ICRFTlZ7J0xaNCd9LAorCQkJYXJncyAgICA9PiBbCisJCQkJ Jy1kJywgJy1mJywKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X3BsYWluLnNxbC5sejQi LAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRfcGxhaW4uc3FsIiwKKwkJCV0sCisJCX0s CisJfSwKKwogCWNsZWFuID0+IHsKIAkJZHVtcF9jbWQgPT4gWwogCQkJJ3BnX2R1bXAnLApAQCAt NDE3NSwxMSArNDI0OSwxMSBAQCBmb3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wX3J1 bnMpCiAJbXkgJHJ1bl9kYiAgID0gJ3Bvc3RncmVzJzsKIAogCSMgU2tpcCBjb21tYW5kLWxldmVs IHRlc3RzIGZvciBnemlwIGlmIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGl0LgotCWlmICggICBk ZWZpbmVkKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSkKLQkJJiYgJHBnZHVt cF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IGVxICdnemlwJwotCQkmJiAhJHN1cHBvcnRz X2d6aXApCisJaWYgKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0aW9ufSAmJgorCQko JHBnZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IGVxICdnemlwJyAmJiAhJHN1cHBv cnRzX2d6aXApIHx8CisJCSgkcGdkdW1wX3J1bnN7JHJ1bn0tPntjb21waWxlX29wdGlvbn0gZXEg J2x6NCcgJiYgISRzdXBwb3J0c19sejQpKQogCXsKLQkJbm90ZSAiJHJ1bjogc2tpcHBlZCBkdWUg dG8gbm8gZ3ppcCBzdXBwb3J0IjsKKwkJbm90ZSAiJHJ1bjogc2tpcHBlZCBkdWUgdG8gbm8gJHBn ZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IHN1cHBvcnQiOwogCQluZXh0OwogCX0K IApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjayBiL3NyYy90 b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKaW5kZXggZGI0Mjk0NzRhMi4uMmM1MDQyZWI0 MSAxMDA3NTUKLS0tIGEvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjaworKysgYi9z cmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCkBAIC0xNTIsNiArMTUyLDcgQEAgZG8K IAkjIGFzIGZpZWxkIG5hbWVzLCB3aGljaCBpcyB1bmZvcnR1bmF0ZSBidXQgd2Ugd29uJ3QgY2hh bmdlIGl0IG5vdy4KIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5o ICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgg JiYgY29udGludWUKKwl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0Lmgg JiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5o ICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmggJiYg Y29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmggJiYgY29udGludWUKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMWQ1OWI4MjAwMy4u MTI2YjMzYWY2NiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK KysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEzODYsNiArMTM4Niw3 IEBAIExXTG9jawogTFdMb2NrSGFuZGxlCiBMV0xvY2tNb2RlCiBMV0xvY2tQYWRkZWQKK0xaNENv bXByZXNzb3JTdGF0ZQogTFo0Rl9jb21wcmVzc2lvbkNvbnRleHRfdAogTFo0Rl9kZWNvbXByZXNz T3B0aW9uc190CiBMWjRGX2RlY29tcHJlc3Npb25Db250ZXh0X3QKLS0gCjIuMzQuMQoK --b1_mldhg9jehOXL00sI7C0ekpX4sxnwEyBnKWf54SrZAA Content-Type: text/x-patch; name=v28-0002-Introduce-Compress-and-Compressor-API-in-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v28-0002-Introduce-Compress-and-Compressor-API-in-pg_dump.patch RnJvbSA2MDk0Mjc3NzI4YjIxZGY1ZDllNDhkOTU4ZDJhNDZiNjZlOTVmMTAzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFRodSwgMTYgRmViIDIwMjMgMTE6MDA6MjUgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy OCAyLzNdIEludHJvZHVjZSBDb21wcmVzcyBhbmQgQ29tcHJlc3NvciBBUEkgaW4gcGdfZHVtcAoK VGhlIHB1cnBvc2Ugb2YgdGhpcyBBUEkgaXMgdG8gYWxsb3cgZm9yIGVhc2llciBhZGRpdGlvbiBv ZiBuZXcgY29tcHJlc3Npb24KbWV0aG9kcy4gQ29tcHJlc3NGaWxlSGFuZGxlIGlzIHN1YnN0aXR1 dGluZyB0aGUgY2ZwKiBmYW1pbHkgb2YgZnVuY3Rpb25zIHVuZGVyIGEKc3RydWN0IG9mIGZ1bmN0 aW9uIHBvaW50ZXJzIGZvciBmaWxlIG1hbmlwdWxhdGlvbi4gVGhlIGltcGxlbWVudG9yIG9mIGEg bmV3CmNvbXByZXNzaW9uIG1ldGhvZCBpcyBub3cgYWJsZSB0byAic2ltcGx5IiBqdXN0IGFkZCB0 aG9zZSBkZWZpbml0aW9ucy4KCkFkZGl0aW9uYWx5IGN1c3RvbSBjb21wcmVzc2VkIGFyY2hpdmVz IHN0b3JlIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gdGhlaXIKaGVhZGVyIGluc3RlYWQg b2YgdGhlIGNvbXByZXNzaW9uIGxldmVsLiBUaGUgaGVhZGVyIHZlcnNpb24gbnVtYmVyIGlzIGJ1 bXBlZC4KLS0tCiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAyICsK IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmMgICAgICAgfCA0MDEgKysrKysrKysrKysr KysKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmggICAgICAgfCAgMjQgKwogc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgICAgICAgICB8IDc0NCArKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggICAgICAgICB8IDE2NiArKysr Ky0KIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmMgICAgICAgfCAyMDYgKysrKysrKwog c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaCAgICAgICB8ICAyNCArCiBzcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYyAgfCAgOTEgKystLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oICB8ICAgNSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyAg ICB8ICAyNyArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyB8ICA5NCAr Ky0tCiBzcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgIHwgIDEwICstCiBzcmMv aW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaCAgICAgIHwgICA0ICsKIHNyYy90b29scy9wZ2lu Y2x1ZGUvY3BsdXNwbHVzY2hlY2sgICAgfCAgIDIgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgICB8ICAgMiArCiAxNiBmaWxlcyBjaGFuZ2VkLCAxMDUzIGluc2VydGlvbnMo KyksIDc1MSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAv Y29tcHJlc3NfZ3ppcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2d6aXAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19u b25lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5o CgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ19kdW1w L01ha2VmaWxlCmluZGV4IGVmMWVkMGYzZTUuLjAwMTNiYzA4MGMgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKQEAgLTI0 LDcgKzI0LDkgQEAgTERGTEFHU19JTlRFUk5BTCArPSAtTCQodG9wX2J1aWxkZGlyKS9zcmMvZmVf dXRpbHMgLWxwZ2ZldXRpbHMgJChsaWJwcV9wZ3BvcnQpCiAKIE9CSlMgPSBcCiAJJChXSU4zMlJF UykgXAorCWNvbXByZXNzX2d6aXAubyBcCiAJY29tcHJlc3NfaW8ubyBcCisJY29tcHJlc3Nfbm9u ZS5vIFwKIAlkdW1wdXRpbHMubyBcCiAJcGFyYWxsZWwubyBcCiAJcGdfYmFja3VwX2FyY2hpdmVy Lm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuYyBiL3NyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uMjRlNjhmZDAyMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19nemlwLmMKQEAgLTAsMCArMSw0MDEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIGNvbXByZXNzX2d6aXAuYworICoJIFJvdXRpbmVzIGZvciBhcmNoaXZlcnMgdG8gcmVhZCBv ciB3cml0ZSBhIGd6aXAgY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4KKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19nemlwLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lu Y2x1ZGUgInBvc3RncmVzX2ZlLmgiCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJj b21wcmVzc19nemlwLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCisKKyNpZmRlZiBI QVZFX0xJQloKKyNpbmNsdWRlICJ6bGliLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICogQ29tcHJlc3NvciBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit0eXBlZGVm IHN0cnVjdCBHemlwQ29tcHJlc3NvclN0YXRlCit7CisJel9zdHJlYW1wCXpwOworCisJdm9pZAkg ICAqb3V0YnVmOworCXNpemVfdAkJb3V0c2l6ZTsKK30gR3ppcENvbXByZXNzb3JTdGF0ZTsKKwor LyogUHJpdmF0ZSByb3V0aW5lcyB0aGF0IHN1cHBvcnQgZ3ppcCBjb21wcmVzc2VkIGRhdGEgSS9P ICovCitzdGF0aWMgdm9pZAorRGVmbGF0ZUNvbXByZXNzb3JHemlwKEFyY2hpdmVIYW5kbGUgKkFI LCBDb21wcmVzc29yU3RhdGUgKmNzLCBib29sIGZsdXNoKQoreworCUd6aXBDb21wcmVzc29yU3Rh dGUgKmd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7CisJ el9zdHJlYW1wCXpwID0gZ3ppcGNzLT56cDsKKwl2b2lkCSAgICpvdXQgPSBnemlwY3MtPm91dGJ1 ZjsKKwlpbnQJCQlyZXMgPSBaX09LOworCisJd2hpbGUgKGd6aXBjcy0+enAtPmF2YWlsX2luICE9 IDAgfHwgZmx1c2gpCisJeworCQlyZXMgPSBkZWZsYXRlKHpwLCBmbHVzaCA/IFpfRklOSVNIIDog Wl9OT19GTFVTSCk7CisJCWlmIChyZXMgPT0gWl9TVFJFQU1fRVJST1IpCisJCQlwZ19mYXRhbCgi Y291bGQgbm90IGNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisJCWlmICgoZmx1c2ggJiYg KHpwLT5hdmFpbF9vdXQgPCBnemlwY3MtPm91dHNpemUpKQorCQkJfHwgKHpwLT5hdmFpbF9vdXQg PT0gMCkKKwkJCXx8ICh6cC0+YXZhaWxfaW4gIT0gMCkKKwkJCSkKKwkJeworCQkJLyoKKwkJCSAq IEV4dHJhIHBhcmFub2lhOiBhdm9pZCB6ZXJvLWxlbmd0aCBjaHVua3MsIHNpbmNlIGEgemVybyBs ZW5ndGgKKwkJCSAqIGNodW5rIGlzIHRoZSBFT0YgbWFya2VyIGluIHRoZSBjdXN0b20gZm9ybWF0 LiBUaGlzIHNob3VsZCBuZXZlcgorCQkJICogaGFwcGVuIGJ1dC4uLgorCQkJICovCisJCQlpZiAo enAtPmF2YWlsX291dCA8IGd6aXBjcy0+b3V0c2l6ZSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEFu eSB3cml0ZSBmdW5jdGlvbiBzaG91bGQgZG8gaXRzIG93biBlcnJvciBjaGVja2luZyBidXQgdG8K KwkJCQkgKiBtYWtlIHN1cmUgd2UgZG8gYSBjaGVjayBoZXJlIGFzIHdlbGwuLi4KKwkJCQkgKi8K KwkJCQlzaXplX3QJCWxlbiA9IGd6aXBjcy0+b3V0c2l6ZSAtIHpwLT5hdmFpbF9vdXQ7CisKKwkJ CQljcy0+d3JpdGVGKEFILCAoY2hhciAqKSBvdXQsIGxlbik7CisJCQl9CisJCQl6cC0+bmV4dF9v dXQgPSBvdXQ7CisJCQl6cC0+YXZhaWxfb3V0ID0gZ3ppcGNzLT5vdXRzaXplOworCQl9CisKKwkJ aWYgKHJlcyA9PSBaX1NUUkVBTV9FTkQpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lk CitFbmRDb21wcmVzc29yR3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpj cykKK3sKKwlHemlwQ29tcHJlc3NvclN0YXRlICpnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0 ZSAqKSBjcy0+cHJpdmF0ZV9kYXRhOworCXpfc3RyZWFtcAl6cDsKKworCWlmIChnemlwY3MtPnpw KQorCXsKKwkJenAgPSBnemlwY3MtPnpwOworCQl6cC0+bmV4dF9pbiA9IE5VTEw7CisJCXpwLT5h dmFpbF9pbiA9IDA7CisKKwkJLyogRmx1c2ggYW55IHJlbWFpbmluZyBkYXRhIGZyb20gemxpYiBi dWZmZXIgKi8KKwkJRGVmbGF0ZUNvbXByZXNzb3JHemlwKEFILCBjcywgdHJ1ZSk7CisKKwkJaWYg KGRlZmxhdGVFbmQoenApICE9IFpfT0spCisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNv bXByZXNzaW9uIHN0cmVhbTogJXMiLCB6cC0+bXNnKTsKKworCQlwZ19mcmVlKGd6aXBjcy0+b3V0 YnVmKTsKKwkJcGdfZnJlZShnemlwY3MtPnpwKTsKKwl9CisKKwlwZ19mcmVlKGd6aXBjcyk7CisJ Y3MtPnByaXZhdGVfZGF0YSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitXcml0ZURhdGFUb0Fy Y2hpdmVHemlwKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkg ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKK3sKKwlHemlwQ29tcHJlc3NvclN0YXRl ICpnemlwY3MgPSAoR3ppcENvbXByZXNzb3JTdGF0ZSAqKSBjcy0+cHJpdmF0ZV9kYXRhOworCXpf c3RyZWFtcAl6cDsKKworCWlmICghZ3ppcGNzLT56cCkKKwl7CisJCXpwID0gZ3ppcGNzLT56cCA9 ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKKwkJenAtPnphbGxvYyA9 IFpfTlVMTDsKKwkJenAtPnpmcmVlID0gWl9OVUxMOworCQl6cC0+b3BhcXVlID0gWl9OVUxMOwor CisJCS8qCisJCSAqIG91dHNpemUgaXMgdGhlIGJ1ZmZlciBzaXplIHdlIHRlbGwgemxpYiBpdCBj YW4gb3V0cHV0IHRvLiAgV2UKKwkJICogYWN0dWFsbHkgYWxsb2NhdGUgb25lIGV4dHJhIGJ5dGUg YmVjYXVzZSBzb21lIHJvdXRpbmVzIHdhbnQgdG8KKwkJICogYXBwZW5kIGEgdHJhaWxpbmcgemVy byBieXRlIHRvIHRoZSB6bGliIG91dHB1dC4KKwkJICovCisJCWd6aXBjcy0+b3V0YnVmID0gcGdf bWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKKwkJZ3ppcGNzLT5vdXRzaXplID0gWkxJQl9PVVRf U0laRTsKKworCQkvKgorCQkgKiBBIGxldmVsIG9mIHplcm8gc2ltcGx5IGNvcGllcyB0aGUgaW5w dXQgb25lIGJsb2NrIGF0IHRoZSB0aW1lLiBUaGlzCisJCSAqIGlzIHByb2JhYmx5IG5vdCB3aGF0 IHRoZSB1c2VyIHdhbnRlZCB3aGVuIGNhbGxpbmcgdGhpcyBpbnRlcmZhY2UuCisJCSAqLworCQlp ZiAoY3MtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwgPT0gMCkKKwkJCXBnX2ZhdGFsKCJyZXF1ZXN0 ZWQgdG8gY29tcHJlc3MgdGhlIGFyY2hpdmUgeWV0IG5vIGxldmVsIHdhcyBzcGVjaWZpZWQiKTsK KworCQlpZiAoZGVmbGF0ZUluaXQoenAsIGNzLT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKSAhPSBa X09LKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxpYnJh cnk6ICVzIiwgenAtPm1zZyk7CisKKwkJLyogSnVzdCBiZSBwYXJhbm9pZCAtIG1heWJlIEVuZCBp cyBjYWxsZWQgYWZ0ZXIgU3RhcnQsIHdpdGggbm8gV3JpdGUgKi8KKwkJenAtPm5leHRfb3V0ID0g Z3ppcGNzLT5vdXRidWY7CisJCXpwLT5hdmFpbF9vdXQgPSBnemlwY3MtPm91dHNpemU7CisJfQor CisJZ3ppcGNzLT56cC0+bmV4dF9pbiA9ICh2b2lkICopIHVuY29uc3RpZnkodm9pZCAqLCBkYXRh KTsKKwlnemlwY3MtPnpwLT5hdmFpbF9pbiA9IGRMZW47CisJRGVmbGF0ZUNvbXByZXNzb3JHemlw KEFILCBjcywgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2ZUd6 aXAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJel9zdHJlYW1w CXpwOworCWNoYXIJICAgKm91dDsKKwlpbnQJCQlyZXMgPSBaX09LOworCXNpemVfdAkJY250Owor CWNoYXIJICAgKmJ1ZjsKKwlzaXplX3QJCWJ1ZmxlbjsKKworCXpwID0gKHpfc3RyZWFtcCkgcGdf bWFsbG9jKHNpemVvZih6X3N0cmVhbSkpOworCXpwLT56YWxsb2MgPSBaX05VTEw7CisJenAtPnpm cmVlID0gWl9OVUxMOworCXpwLT5vcGFxdWUgPSBaX05VTEw7CisKKwlidWYgPSBwZ19tYWxsb2Mo WkxJQl9JTl9TSVpFKTsKKwlidWZsZW4gPSBaTElCX0lOX1NJWkU7CisKKwlvdXQgPSBwZ19tYWxs b2MoWkxJQl9PVVRfU0laRSArIDEpOworCisJaWYgKGluZmxhdGVJbml0KHpwKSAhPSBaX09LKQor CQlwZ19mYXRhbCgiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJlc3Npb24gbGlicmFyeTogJXMi LAorCQkJCSB6cC0+bXNnKTsKKworCS8qIG5vIG1pbmltYWwgY2h1bmsgc2l6ZSBmb3IgemxpYiAq LworCXdoaWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCisJeworCQl6 cC0+bmV4dF9pbiA9ICh2b2lkICopIGJ1ZjsKKwkJenAtPmF2YWlsX2luID0gY250OworCisJCXdo aWxlICh6cC0+YXZhaWxfaW4gPiAwKQorCQl7CisJCQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBv dXQ7CisJCQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKKworCQkJcmVzID0gaW5mbGF0 ZSh6cCwgMCk7CisJCQlpZiAocmVzICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKKwkJ CQlwZ19mYXRhbCgiY291bGQgbm90IHVuY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKKwor CQkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7CisJCQlhaHdyaXRl KG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQsIEFIKTsKKwkJfQorCX0KKwor CXpwLT5uZXh0X2luID0gTlVMTDsKKwl6cC0+YXZhaWxfaW4gPSAwOworCXdoaWxlIChyZXMgIT0g Wl9TVFJFQU1fRU5EKQorCXsKKwkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OworCQl6cC0+ YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKKwkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7CisJCWlm IChyZXMgIT0gWl9PSyAmJiByZXMgIT0gWl9TVFJFQU1fRU5EKQorCQkJcGdfZmF0YWwoImNvdWxk IG5vdCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisKKwkJb3V0W1pMSUJfT1VUX1NJ WkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7CisJCWFod3JpdGUob3V0LCAxLCBaTElCX09VVF9T SVpFIC0genAtPmF2YWlsX291dCwgQUgpOworCX0KKworCWlmIChpbmZsYXRlRW5kKHpwKSAhPSBa X09LKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVz IiwgenAtPm1zZyk7CisKKwlmcmVlKGJ1Zik7CisJZnJlZShvdXQpOworCWZyZWUoenApOworfQor CisvKiBQdWJsaWMgcm91dGluZXMgdGhhdCBzdXBwb3J0IGd6aXAgY29tcHJlc3NlZCBkYXRhIEkv TyAqLwordm9pZAorSW5pdENvbXByZXNzb3JHemlwKENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJ ICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorewor CUd6aXBDb21wcmVzc29yU3RhdGUgKmd6aXBjczsKKworCWNzLT5yZWFkRGF0YSA9IFJlYWREYXRh RnJvbUFyY2hpdmVHemlwOworCWNzLT53cml0ZURhdGEgPSBXcml0ZURhdGFUb0FyY2hpdmVHemlw OworCWNzLT5lbmQgPSBFbmRDb21wcmVzc29yR3ppcDsKKworCWNzLT5jb21wcmVzc2lvbl9zcGVj ID0gY29tcHJlc3Npb25fc3BlYzsKKworCWd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICop IHBnX21hbGxvYzAoc2l6ZW9mKEd6aXBDb21wcmVzc29yU3RhdGUpKTsKKworCWNzLT5wcml2YXRl X2RhdGEgPSBnemlwY3M7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21w cmVzcyBGaWxlIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIHNp emVfdAorR3ppcF9yZWFkKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOwor CXNpemVfdAkJcmV0OworCisJcmV0ID0gZ3pyZWFkKGd6ZnAsIHB0ciwgc2l6ZSk7CisJaWYgKHJl dCAhPSBzaXplICYmICFnemVvZihnemZwKSkKKwl7CisJCWludAkJCWVycm51bTsKKwkJY29uc3Qg Y2hhciAqZXJybXNnID0gZ3plcnJvcihnemZwLCAmZXJybnVtKTsKKworCQlwZ19mYXRhbCgiY291 bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIGVycm51bSA9PSBaX0VSUk5P ID8gc3RyZXJyb3IoZXJybm8pIDogZXJybXNnKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgc2l6ZV90CitHemlwX3dyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+ cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIGd6d3JpdGUoZ3pmcCwgcHRyLCBzaXplKTsKK30KKwor c3RhdGljIGludAorR3ppcF9nZXRjKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6Rmls ZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldDsKKworCWVy cm5vID0gMDsKKwlyZXQgPSBnemdldGMoZ3pmcCk7CisJaWYgKHJldCA9PSBFT0YpCisJeworCQlp ZiAoIWd6ZW9mKGd6ZnApKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQg ZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQllbHNlCisJCQlwZ19mYXRhbCgiY291bGQg bm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOworCX0KKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBjaGFyICoKK0d6aXBfZ2V0cyhjaGFyICpwdHIsIGludCBzaXplLCBD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgt PnByaXZhdGVfZGF0YTsKKworCXJldHVybiBnemdldHMoZ3pmcCwgcHRyLCBzaXplKTsKK30KKwor c3RhdGljIGludAorR3ppcF9jbG9zZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZp bGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCUNGSC0+cHJpdmF0ZV9k YXRhID0gTlVMTDsKKworCXJldHVybiBnemNsb3NlKGd6ZnApOworfQorCitzdGF0aWMgaW50CitH emlwX2VvZihDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pG aWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBnemVvZihnemZwKTsKK30KKworc3Rh dGljIGNvbnN0IGNoYXIgKgorR3ppcF9nZXRfZXJyb3IoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgp Cit7CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7CisJY29uc3Qg Y2hhciAqZXJybXNnOworCWludAkJCWVycm51bTsKKworCWVycm1zZyA9IGd6ZXJyb3IoZ3pmcCwg JmVycm51bSk7CisJaWYgKGVycm51bSA9PSBaX0VSUk5PKQorCQllcnJtc2cgPSBzdHJlcnJvcihl cnJubyk7CisKKwlyZXR1cm4gZXJybXNnOworfQorCitzdGF0aWMgaW50CitHemlwX29wZW4oY29u c3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnA7CisJY2hhcgkJbW9kZV9jb21wcmVzc2lvblszMl07 CisKKwlpZiAoQ0ZILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsICE9IFpfREVGQVVMVF9DT01QUkVT U0lPTikKKwl7CisJCS8qCisJCSAqIHVzZXIgaGFzIHNwZWNpZmllZCBhIGNvbXByZXNzaW9uIGxl dmVsLCBzbyB0ZWxsIHpsaWIgdG8gdXNlIGl0CisJCSAqLworCQlzbnByaW50Zihtb2RlX2NvbXBy ZXNzaW9uLCBzaXplb2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKKwkJCQkgbW9kZSwgQ0ZI LT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKKwl9CisJZWxzZQorCQlzdHJjcHkobW9kZV9jb21w cmVzc2lvbiwgbW9kZSk7CisKKwlpZiAoZmQgPj0gMCkKKwkJZ3pmcCA9IGd6ZG9wZW4oZHVwKGZk KSwgbW9kZV9jb21wcmVzc2lvbik7CisJZWxzZQorCQlnemZwID0gZ3pvcGVuKHBhdGgsIG1vZGVf Y29tcHJlc3Npb24pOworCisJaWYgKGd6ZnAgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKwlDRkgt PnByaXZhdGVfZGF0YSA9IGd6ZnA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorR3pp cF9vcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIKQoreworCWNoYXIJICAgKmZuYW1lOworCWludAkJCXJldDsKKwlpbnQJ CQlzYXZlX2Vycm5vOworCisJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKKwlyZXQg PSBDRkgtPm9wZW5fZnVuYyhmbmFtZSwgLTEsIG1vZGUsIENGSCk7CisKKwlzYXZlX2Vycm5vID0g ZXJybm87CisJcGdfZnJlZShmbmFtZSk7CisJZXJybm8gPSBzYXZlX2Vycm5vOworCisJcmV0dXJu IHJldDsKK30KKwordm9pZAorSW5pdENvbXByZXNzRmlsZUhhbmRsZUd6aXAoQ29tcHJlc3NGaWxl SGFuZGxlICpDRkgsCisJCQkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMpCit7CisJQ0ZILT5vcGVuX2Z1bmMgPSBHemlwX29wZW47CisJQ0ZILT5v cGVuX3dyaXRlX2Z1bmMgPSBHemlwX29wZW5fd3JpdGU7CisJQ0ZILT5yZWFkX2Z1bmMgPSBHemlw X3JlYWQ7CisJQ0ZILT53cml0ZV9mdW5jID0gR3ppcF93cml0ZTsKKwlDRkgtPmdldHNfZnVuYyA9 IEd6aXBfZ2V0czsKKwlDRkgtPmdldGNfZnVuYyA9IEd6aXBfZ2V0YzsKKwlDRkgtPmNsb3NlX2Z1 bmMgPSBHemlwX2Nsb3NlOworCUNGSC0+ZW9mX2Z1bmMgPSBHemlwX2VvZjsKKwlDRkgtPmdldF9l cnJvcl9mdW5jID0gR3ppcF9nZXRfZXJyb3I7CisKKwlDRkgtPmNvbXByZXNzaW9uX3NwZWMgPSBj b21wcmVzc2lvbl9zcGVjOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBOVUxMOworfQorI2Vsc2UJ CQkJCQkJLyogSEFWRV9MSUJaICovCit2b2lkCitJbml0Q29tcHJlc3Nvckd6aXAoQ29tcHJlc3Nv clN0YXRlICpjcywKKwkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBj b21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKK30KKwordm9pZAorSW5pdENvbXByZXNzRmls ZUhhbmRsZUd6aXAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsCisJCQkJCQkgICBjb25zdCBwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0YWwoInRo aXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsK K30KKyNlbmRpZgkJCQkJCQkvKiBIQVZFX0xJQlogKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19nemlwLmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjIzOTJjNjk3YjQKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5oCkBAIC0wLDAgKzEsMjQg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbXByZXNzX2d6aXAuaAorICoJIEdaSVAg aW50ZXJmYWNlIHRvIGNvbXByZXNzX2lvLmMgcm91dGluZXMKKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19nemlwLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRl ZiBfQ09NUFJFU1NfR1pJUF9IXworI2RlZmluZSBfQ09NUFJFU1NfR1pJUF9IXworCisjaW5jbHVk ZSAiY29tcHJlc3NfaW8uaCIKKworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzb3JHemlwKENvbXBy ZXNzb3JTdGF0ZSAqY3MsCisJCQkJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc2lvbl9zcGVjKTsKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc0ZpbGVIYW5kbGVH emlwKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILAorCQkJCQkJCQkJICAgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKworI2VuZGlmCQkJCQkJCS8qIF9D T01QUkVTU19HWklQX0hfICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf aW8uYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCmluZGV4IGUxNzMzY2U1N2MuLmM1 MDdlZWI3YjMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC05LDQyICs5LDU0IEBACiAgKgogICog VGhpcyBmaWxlIGluY2x1ZGVzIHR3byBBUElzIGZvciBkZWFsaW5nIHdpdGggY29tcHJlc3NlZCBk YXRhLiBUaGUgZmlyc3QKICAqIHByb3ZpZGVzIG1vcmUgZmxleGliaWxpdHksIHVzaW5nIGNhbGxi YWNrcyB0byByZWFkL3dyaXRlIGRhdGEgZnJvbSB0aGUKLSAqIHVuZGVybHlpbmcgc3RyZWFtLiBU aGUgc2Vjb25kIEFQSSBpcyBhIHdyYXBwZXIgYXJvdW5kIGZvcGVuL2d6b3BlbiBhbmQKKyAqIHVu ZGVybHlpbmcgc3RyZWFtLiBUaGUgc2Vjb25kIEFQSSBpcyBhIHdyYXBwZXIgYXJvdW5kIGZvcGVu IGFuZAogICogZnJpZW5kcywgcHJvdmlkaW5nIGFuIGludGVyZmFjZSBzaW1pbGFyIHRvIHRob3Nl LCBidXQgYWJzdHJhY3RzIGF3YXkKLSAqIHRoZSBwb3NzaWJsZSBjb21wcmVzc2lvbi4gQm90aCBB UElzIHVzZSBsaWJ6IGZvciB0aGUgY29tcHJlc3Npb24sIGJ1dAotICogdGhlIHNlY29uZCBBUEkg dXNlcyBnemlwIGhlYWRlcnMsIHNvIHRoZSByZXN1bHRpbmcgZmlsZXMgY2FuIGJlIGVhc2lseQot ICogbWFuaXB1bGF0ZWQgd2l0aCB0aGUgZ3ppcCB1dGlsaXR5LgorICogdGhlIHBvc3NpYmxlIGNv bXByZXNzaW9uLiBUaGUgc2Vjb25kIEFQSSBpcyBhaW1lZCBmb3IgdGhlIHJlc3VsdGluZworICog ZmlsZXMgdG8gYmUgZWFzaWx5IG1hbmlwdWxhdGVkIHdpdGggYW4gZXh0ZXJuYWwgY29tcHJlc3Np b24gdXRpbGl0eQorICogcHJvZ3JhbS4KKyAqCisgKiBUaGlzIGZpbGUgYWxzbyBpbmNsdWRlcyB0 aGUgaW1wbGVtZW50YXRpb24gd2hlbiBjb21wcmVzc2lvbiBpcyBub25lIGZvcgorICogYm90aCBB UEkncy4KICAqCiAgKiBDb21wcmVzc29yIEFQSQogICogLS0tLS0tLS0tLS0tLS0KICAqCiAgKglU aGUgaW50ZXJmYWNlIGZvciB3cml0aW5nIHRvIGFuIGFyY2hpdmUgY29uc2lzdHMgb2YgdGhyZWUg ZnVuY3Rpb25zOgotICoJQWxsb2NhdGVDb21wcmVzc29yLCBXcml0ZURhdGFUb0FyY2hpdmUgYW5k IEVuZENvbXByZXNzb3IuIEZpcnN0IHlvdSBjYWxsCi0gKglBbGxvY2F0ZUNvbXByZXNzb3IsIHRo ZW4gd3JpdGUgYWxsIHRoZSBkYXRhIGJ5IGNhbGxpbmcgV3JpdGVEYXRhVG9BcmNoaXZlCi0gKglh cyBtYW55IHRpbWVzIGFzIG5lZWRlZCwgYW5kIGZpbmFsbHkgRW5kQ29tcHJlc3Nvci4gV3JpdGVE YXRhVG9BcmNoaXZlCi0gKglhbmQgRW5kQ29tcHJlc3NvciB3aWxsIGNhbGwgdGhlIFdyaXRlRnVu YyB0aGF0IHdhcyBwcm92aWRlZCB0bwotICoJQWxsb2NhdGVDb21wcmVzc29yIGZvciBlYWNoIGNo dW5rIG9mIGNvbXByZXNzZWQgZGF0YS4KLSAqCi0gKglUaGUgaW50ZXJmYWNlIGZvciByZWFkaW5n IGFuIGFyY2hpdmUgY29uc2lzdHMgb2YganVzdCBvbmUgZnVuY3Rpb246Ci0gKglSZWFkRGF0YUZy b21BcmNoaXZlLiBSZWFkRGF0YUZyb21BcmNoaXZlIHJlYWRzIHRoZSB3aG9sZSBjb21wcmVzc2Vk IGlucHV0Ci0gKglzdHJlYW0sIGJ5IHJlcGVhdGVkbHkgY2FsbGluZyB0aGUgZ2l2ZW4gUmVhZEZ1 bmMuIFJlYWRGdW5jIHJldHVybnMgdGhlCi0gKgljb21wcmVzc2VkIGRhdGEgY2h1bmsgYXQgYSB0 aW1lLCBhbmQgUmVhZERhdGFGcm9tQXJjaGl2ZSBkZWNvbXByZXNzZXMgaXQKLSAqCWFuZCBwYXNz ZXMgdGhlIGRlY29tcHJlc3NlZCBkYXRhIHRvIGFod3JpdGUoKSwgdW50aWwgUmVhZEZ1bmMgcmV0 dXJucyAwCi0gKgl0byBzaWduYWwgRU9GLgorICoJQWxsb2NhdGVDb21wcmVzc29yLCB3cml0ZURh dGEsIGFuZCBFbmRDb21wcmVzc29yLiBGaXJzdCB5b3UgY2FsbAorICoJQWxsb2NhdGVDb21wcmVz c29yLCB0aGVuIHdyaXRlIGFsbCB0aGUgZGF0YSBieSBjYWxsaW5nIHdyaXRlRGF0YSBhcyBtYW55 CisgKgl0aW1lcyBhcyBuZWVkZWQsIGFuZCBmaW5hbGx5IEVuZENvbXByZXNzb3IuIHdyaXRlRGF0 YSB3aWxsIGNhbGwgdGhlCisgKglXcml0ZUZ1bmMgdGhhdCB3YXMgcHJvdmlkZWQgdG8gQWxsb2Nh dGVDb21wcmVzc29yIGZvciBlYWNoIGNodW5rIG9mCisgKgljb21wcmVzc2VkIGRhdGEuCiAgKgot ICoJVGhlIGludGVyZmFjZSBpcyB0aGUgc2FtZSBmb3IgY29tcHJlc3NlZCBhbmQgdW5jb21wcmVz c2VkIHN0cmVhbXMuCisgKglUaGUgaW50ZXJmYWNlIGZvciByZWFkaW5nIGFuIGFyY2hpdmUgY29u c2lzdHMgb2YgdGhlIHNhbWUgdGhyZWUgZnVuY3Rpb25zOgorICoJQWxsb2NhdGVDb21wcmVzc29y LCByZWFkRGF0YSwgYW5kIEVuZENvbXByZXNzb3IuIEZpcnN0IHlvdSBjYWxsCisgKglBbGxvY2F0 ZUNvbXByZXNzb3IsIHRoZW4gcmVhZCBhbGwgdGhlIGRhdGEgYnkgY2FsbGluZyByZWFkRGF0YSB0 byByZWFkIHRoZQorICoJd2hvbGUgY29tcHJlc3NlZCBzdHJlYW0gd2hpY2ggcmVwZWF0ZWRseSBj YWxscyB0aGUgZ2l2ZW4gUmVhZEZ1bmMuIFJlYWRGdW5jCisgKglyZXR1cm5zIHRoZSBjb21wcmVz c2VkIGRhdGEgb25lIGNodW5rIGF0IGEgdGltZS4gVGhlbiByZWFkRGF0YSBkZWNvbXByZXNzZXMK KyAqCWl0IGFuZCBwYXNzZXMgdGhlIGRlY29tcHJlc3NlZCBkYXRhIHRvIGFod3JpdGUoKSwgdW50 aWwgUmVhZEZ1bmMgcmV0dXJucyAwCisgKgl0byBzaWduYWwgRU9GLiBUaGUgaW50ZXJmYWNlIGlz IHRoZSBzYW1lIGZvciBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQKKyAqCXN0cmVhbXMuCiAg KgogICogQ29tcHJlc3NlZCBzdHJlYW0gQVBJCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg KgotICoJVGhlIGNvbXByZXNzZWQgc3RyZWFtIEFQSSBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBD IHN0YW5kYXJkIGZvcGVuKCkgYW5kCi0gKglsaWJ6J3MgZ3pvcGVuKCkgQVBJcy4gSXQgYWxsb3dz IHlvdSB0byB1c2UgdGhlIHNhbWUgZnVuY3Rpb25zIGZvcgotICoJY29tcHJlc3NlZCBhbmQgdW5j b21wcmVzc2VkIHN0cmVhbXMuIGNmb3Blbl9yZWFkKCkgZmlyc3QgdHJpZXMgdG8gb3BlbgotICoJ dGhlIGZpbGUgd2l0aCBnaXZlbiBuYW1lLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRvIG9w ZW4gdGhlIHNhbWUKLSAqCWZpbGUgd2l0aCB0aGUgLmd6IHN1ZmZpeC4gY2ZvcGVuX3dyaXRlKCkg b3BlbnMgYSBmaWxlIGZvciB3cml0aW5nLCBhbgotICoJZXh0cmEgYXJndW1lbnQgc3BlY2lmaWVz IGlmIHRoZSBmaWxlIHNob3VsZCBiZSBjb21wcmVzc2VkLCBhbmQgYWRkcyB0aGUKLSAqCS5neiBz dWZmaXggdG8gdGhlIGZpbGVuYW1lIGlmIHNvLiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IGhh bmRsZSBib3RoCi0gKgljb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgZmlsZXMuCisgKglUaGUg Y29tcHJlc3NlZCBzdHJlYW0gQVBJIGlzIHByb3ZpZGluZyBhIHNldCBvZiBmdW5jdGlvbiBwb2lu dGVycyBmb3IKKyAqCW9wZW5pbmcsIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBmaW5hbGx5IGNsb3Np bmcgZmlsZXMuIFRoZSBpbXBsZW1lbnRlZAorICoJZnVuY3Rpb24gcG9pbnRlcnMgYXJlIGRvY3Vt ZW50ZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGUgYW5kIGFyZQorICoJY29tbW9u IGZvciBhbGwgc3RyZWFtcy4gSXQgYWxsb3dzIHRoZSBjYWxsZXIgdG8gdXNlIHRoZSBzYW1lIGZ1 bmN0aW9ucyBmb3IKKyAqCWJvdGggY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkIHN0cmVhbXMu CisgKgorICoJVGhlIGludGVyZmFjZSBjb25zaXN0cyBvZiB0aHJlZSBmdW5jdGlvbnMsIEluaXRD b21wcmVzc0ZpbGVIYW5kbGUsCisgKglJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUsIGFu ZCBFbmRDb21wcmVzc0ZpbGVIYW5kbGUuIElmIHRoZQorICoJY29tcHJlc3Npb24gaXMga25vd24s IHRoZW4gc3RhcnQgYnkgY2FsbGluZyBJbml0Q29tcHJlc3NGaWxlSGFuZGxlLAorICoJb3RoZXJ3 aXNlIGRpc2NvdmVyIGl0IGJ5IHVzaW5nIEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZS4g VGhlbiBjYWxsCisgKgl0aGUgZnVuY3Rpb24gcG9pbnRlcnMgYXMgcmVxdWlyZWQgZm9yIHRoZSBy ZWFkL3dyaXRlIG9wZXJhdGlvbnMuIEZpbmFsbHkKKyAqCWNhbGwgRW5kQ29tcHJlc3NGaWxlSGFu ZGxlIHRvIGVuZCB0aGUgc3RyZWFtLgorICoKKyAqCUluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhh bmRsZSB0cmllcyB0byBkZWZmZXIgdGhlIGNvbXByZXNzaW9uIGJ5IHRoZQorICoJZmlsZW5hbWUg c3VmZml4LiBJZiB0aGUgc3VmZml4IGlzIG5vdCB5ZXQga25vd24sIHRoZW4gaXQgdHJpZXMgdG8g c2ltcGx5CisgKglvcGVuIHRoZSBmaWxlLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVzIHRvIG9w ZW4gdGhlIHNhbWUgZmlsZSB3aXRoIHRoZSAuZ3oKKyAqCXN1ZmZpeC4KICAqCiAgKiBJREVOVElG SUNBVElPTgogICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTUzLDEzICs2 NSwxNCBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAorI2luY2x1ZGUgPHN5cy9z dGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJjb21wcmVzc19nemlwLmgi CiAjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKKyNpbmNsdWRlICJjb21wcmVzc19ub25lLmgiCiAj aW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCiAKLSNpZmRlZiBIQVZFX0xJQloKLSNpbmNsdWRl IDx6bGliLmg+Ci0jZW5kaWYKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBHZW5lcmlj IGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05MSwxMTAgKzEwNCwyNSBA QCBzdXBwb3J0c19jb21wcmVzc2lvbihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMpCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi0vKiB0eXBl ZGVmIGFwcGVhcnMgaW4gY29tcHJlc3NfaW8uaCAqLwotc3RydWN0IENvbXByZXNzb3JTdGF0ZQot ewotCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYzsKLQlXcml0ZUZ1 bmMJd3JpdGVGOwotCi0jaWZkZWYgSEFWRV9MSUJaCi0Jel9zdHJlYW1wCXpwOwotCWNoYXIJICAg KnpsaWJPdXQ7Ci0Jc2l6ZV90CQl6bGliT3V0U2l6ZTsKLSNlbmRpZgotfTsKLQotLyogUm91dGlu ZXMgdGhhdCBzdXBwb3J0IHpsaWIgY29tcHJlc3NlZCBkYXRhIEkvTyAqLwotI2lmZGVmIEhBVkVf TElCWgotc3RhdGljIHZvaWQgSW5pdENvbXByZXNzb3JabGliKENvbXByZXNzb3JTdGF0ZSAqY3Ms IGludCBsZXZlbCk7Ci1zdGF0aWMgdm9pZCBEZWZsYXRlQ29tcHJlc3NvclpsaWIoQXJjaGl2ZUhh bmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCQkJCSAgYm9vbCBmbHVzaCk7Ci1z dGF0aWMgdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgUmVh ZEZ1bmMgcmVhZEYpOwotc3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihBcmNoaXZl SGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkJICAgY29uc3QgY2hhciAq ZGF0YSwgc2l6ZV90IGRMZW4pOwotc3RhdGljIHZvaWQgRW5kQ29tcHJlc3NvclpsaWIoQXJjaGl2 ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOwotI2VuZGlmCi0KLS8qIFJvdXRpbmVz IHRoYXQgc3VwcG9ydCB1bmNvbXByZXNzZWQgZGF0YSBJL08gKi8KLXN0YXRpYyB2b2lkIFJlYWRE YXRhRnJvbUFyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRik7Ci1z dGF0aWMgdm9pZCBXcml0ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzLAotCQkJCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZExl bik7Ci0KLS8qIFB1YmxpYyBpbnRlcmZhY2Ugcm91dGluZXMgKi8KLQotLyogQWxsb2NhdGUgYSBu ZXcgY29tcHJlc3NvciAqLworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGNvbXByZXNzb3IuCisgKi8K IENvbXByZXNzb3JTdGF0ZSAqCiBBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAotCQkJCSAgIFdyaXRlRnVuYyB3cml0ZUYp CisJCQkJICAgUmVhZEZ1bmMgcmVhZEYsIFdyaXRlRnVuYyB3cml0ZUYpCiB7CiAJQ29tcHJlc3Nv clN0YXRlICpjczsKIAotI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoY29tcHJlc3Npb25fc3BlYy5h bGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQg ZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKLSNlbmRpZgot CiAJY3MgPSAoQ29tcHJlc3NvclN0YXRlICopIHBnX21hbGxvYzAoc2l6ZW9mKENvbXByZXNzb3JT dGF0ZSkpOworCWNzLT5yZWFkRiA9IHJlYWRGOwogCWNzLT53cml0ZUYgPSB3cml0ZUY7Ci0JY3Mt PmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOwotCi0JLyoKLQkgKiBQZXJmb3Jt IGNvbXByZXNzaW9uIGFsZ29yaXRobSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KLQkgKi8KLSNp ZmRlZiBIQVZFX0xJQloKLQlpZiAoY3MtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBH X0NPTVBSRVNTSU9OX0daSVApCi0JCUluaXRDb21wcmVzc29yWmxpYihjcywgY3MtPmNvbXByZXNz aW9uX3NwZWMubGV2ZWwpOwotI2VuZGlmCi0KLQlyZXR1cm4gY3M7Ci19CiAKLS8qCi0gKiBSZWFk IGFsbCBjb21wcmVzc2VkIGRhdGEgZnJvbSB0aGUgaW5wdXQgc3RyZWFtICh2aWEgcmVhZEYpIGFu ZCBwcmludCBpdAotICogb3V0IHdpdGggYWh3cml0ZSgpLgotICovCi12b2lkCi1SZWFkRGF0YUZy b21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILAotCQkJCQljb25zdCBwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCi0JCQkJCVJlYWRGdW5jIHJlYWRGKQotewogCWlm IChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9OT05FKQotCQlS ZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBSCwgcmVhZEYpOwotCWlmIChjb21wcmVzc2lvbl9zcGVj LmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQotCXsKLSNpZmRlZiBIQVZFX0xJQloK LQkJUmVhZERhdGFGcm9tQXJjaGl2ZVpsaWIoQUgsIHJlYWRGKTsKLSNlbHNlCi0JCXBnX2ZhdGFs KCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlw Iik7Ci0jZW5kaWYKLQl9Ci19CisJCUluaXRDb21wcmVzc29yTm9uZShjcywgY29tcHJlc3Npb25f c3BlYyk7CisJZWxzZSBpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJF U1NJT05fR1pJUCkKKwkJSW5pdENvbXByZXNzb3JHemlwKGNzLCBjb21wcmVzc2lvbl9zcGVjKTsK IAotLyoKLSAqIENvbXByZXNzIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtICh2 aWEgd3JpdGVGKS4KLSAqLwotdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUg KkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAotCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVf dCBkTGVuKQotewotCXN3aXRjaCAoY3MtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQotCXsK LQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJV3JpdGVE YXRhVG9BcmNoaXZlWmxpYihBSCwgY3MsIGRhdGEsIGRMZW4pOwotI2Vsc2UKLQkJCXBnX2ZhdGFs KCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlw Iik7Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlX cml0ZURhdGFUb0FyY2hpdmVOb25lKEFILCBjcywgZGF0YSwgZExlbik7Ci0JCQlicmVhazsKLQkJ Y2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0JCQkvKiBmYWxsdGhyb3VnaCAqLwotCQljYXNlIFBH X0NPTVBSRVNTSU9OX1pTVEQ6Ci0JCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRo b2QiKTsKLQkJCWJyZWFrOwotCX0KKwlyZXR1cm4gY3M7CiB9CiAKIC8qCkBAIC0yMDMsMjMzICsx MzEsMzEgQEAgV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29y U3RhdGUgKmNzLAogdm9pZAogRW5kQ29tcHJlc3NvcihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJl c3NvclN0YXRlICpjcykKIHsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoY3MtPmNvbXByZXNzaW9u X3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JCUVuZENvbXByZXNzb3Ja bGliKEFILCBjcyk7Ci0jZW5kaWYKLQlmcmVlKGNzKTsKKwljcy0+ZW5kKEFILCBjcyk7CisJcGdf ZnJlZShjcyk7CiB9CiAKLS8qIFByaXZhdGUgcm91dGluZXMsIHNwZWNpZmljIHRvIGVhY2ggY29t cHJlc3Npb24gbWV0aG9kLiAqLwotCi0jaWZkZWYgSEFWRV9MSUJaCi0vKgotICogRnVuY3Rpb25z IGZvciB6bGliIGNvbXByZXNzZWQgb3V0cHV0LgotICovCi0KLXN0YXRpYyB2b2lkCi1Jbml0Q29t cHJlc3NvclpsaWIoQ29tcHJlc3NvclN0YXRlICpjcywgaW50IGxldmVsKQotewotCXpfc3RyZWFt cAl6cDsKLQotCXpwID0gY3MtPnpwID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNpemVvZih6X3N0 cmVhbSkpOwotCXpwLT56YWxsb2MgPSBaX05VTEw7Ci0JenAtPnpmcmVlID0gWl9OVUxMOwotCXpw LT5vcGFxdWUgPSBaX05VTEw7Ci0KLQkvKgotCSAqIHpsaWJPdXRTaXplIGlzIHRoZSBidWZmZXIg c2l6ZSB3ZSB0ZWxsIHpsaWIgaXQgY2FuIG91dHB1dCB0by4gIFdlCi0JICogYWN0dWFsbHkgYWxs b2NhdGUgb25lIGV4dHJhIGJ5dGUgYmVjYXVzZSBzb21lIHJvdXRpbmVzIHdhbnQgdG8gYXBwZW5k IGEKLQkgKiB0cmFpbGluZyB6ZXJvIGJ5dGUgdG8gdGhlIHpsaWIgb3V0cHV0LgotCSAqLwotCWNz LT56bGliT3V0ID0gKGNoYXIgKikgcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKLQljcy0+ emxpYk91dFNpemUgPSBaTElCX09VVF9TSVpFOwotCi0JaWYgKGRlZmxhdGVJbml0KHpwLCBsZXZl bCkgIT0gWl9PSykKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9u IGxpYnJhcnk6ICVzIiwKLQkJCQkgenAtPm1zZyk7Ci0KLQkvKiBKdXN0IGJlIHBhcmFub2lkIC0g bWF5YmUgRW5kIGlzIGNhbGxlZCBhZnRlciBTdGFydCwgd2l0aCBubyBXcml0ZSAqLwotCXpwLT5u ZXh0X291dCA9ICh2b2lkICopIGNzLT56bGliT3V0OwotCXpwLT5hdmFpbF9vdXQgPSBjcy0+emxp Yk91dFNpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1FbmRDb21wcmVzc29yWmxpYihBcmNoaXZlSGFu ZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKLXsKLQl6X3N0cmVhbXAJenAgPSBjcy0+enA7 Ci0KLQl6cC0+bmV4dF9pbiA9IE5VTEw7Ci0JenAtPmF2YWlsX2luID0gMDsKLQotCS8qIEZsdXNo IGFueSByZW1haW5pbmcgZGF0YSBmcm9tIHpsaWIgYnVmZmVyICovCi0JRGVmbGF0ZUNvbXByZXNz b3JabGliKEFILCBjcywgdHJ1ZSk7Ci0KLQlpZiAoZGVmbGF0ZUVuZCh6cCkgIT0gWl9PSykKLQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBzdHJlYW06ICVzIiwgenAtPm1z Zyk7Ci0KLQlmcmVlKGNzLT56bGliT3V0KTsKLQlmcmVlKGNzLT56cCk7Ci19Ci0KLXN0YXRpYyB2 b2lkCi1EZWZsYXRlQ29tcHJlc3NvclpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MsIGJvb2wgZmx1c2gpCi17Ci0Jel9zdHJlYW1wCXpwID0gY3MtPnpwOwotCWNoYXIJ ICAgKm91dCA9IGNzLT56bGliT3V0OwotCWludAkJCXJlcyA9IFpfT0s7Ci0KLQl3aGlsZSAoY3Mt PnpwLT5hdmFpbF9pbiAhPSAwIHx8IGZsdXNoKQotCXsKLQkJcmVzID0gZGVmbGF0ZSh6cCwgZmx1 c2ggPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0gpOwotCQlpZiAocmVzID09IFpfU1RSRUFNX0VSUk9S KQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwot CQlpZiAoKGZsdXNoICYmICh6cC0+YXZhaWxfb3V0IDwgY3MtPnpsaWJPdXRTaXplKSkKLQkJCXx8 ICh6cC0+YXZhaWxfb3V0ID09IDApCi0JCQl8fCAoenAtPmF2YWlsX2luICE9IDApCi0JCQkpCi0J CXsKLQkJCS8qCi0JCQkgKiBFeHRyYSBwYXJhbm9pYTogYXZvaWQgemVyby1sZW5ndGggY2h1bmtz LCBzaW5jZSBhIHplcm8gbGVuZ3RoCi0JCQkgKiBjaHVuayBpcyB0aGUgRU9GIG1hcmtlciBpbiB0 aGUgY3VzdG9tIGZvcm1hdC4gVGhpcyBzaG91bGQgbmV2ZXIKLQkJCSAqIGhhcHBlbiBidXQuLi4K LQkJCSAqLwotCQkJaWYgKHpwLT5hdmFpbF9vdXQgPCBjcy0+emxpYk91dFNpemUpCi0JCQl7Ci0J CQkJLyoKLQkJCQkgKiBBbnkgd3JpdGUgZnVuY3Rpb24gc2hvdWxkIGRvIGl0cyBvd24gZXJyb3Ig Y2hlY2tpbmcgYnV0IHRvCi0JCQkJICogbWFrZSBzdXJlIHdlIGRvIGEgY2hlY2sgaGVyZSBhcyB3 ZWxsLi4uCi0JCQkJICovCi0JCQkJc2l6ZV90CQlsZW4gPSBjcy0+emxpYk91dFNpemUgLSB6cC0+ YXZhaWxfb3V0OwotCi0JCQkJY3MtPndyaXRlRihBSCwgb3V0LCBsZW4pOwotCQkJfQotCQkJenAt Pm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQkJenAtPmF2YWlsX291dCA9IGNzLT56bGliT3V0 U2l6ZTsKLQkJfQotCi0JCWlmIChyZXMgPT0gWl9TVFJFQU1fRU5EKQotCQkJYnJlYWs7Ci0JfQot fQotCi1zdGF0aWMgdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpB SCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90 IGRMZW4pCi17Ci0JY3MtPnpwLT5uZXh0X2luID0gKHZvaWQgKikgdW5jb25zdGlmeShjaGFyICos IGRhdGEpOwotCWNzLT56cC0+YXZhaWxfaW4gPSBkTGVuOwotCURlZmxhdGVDb21wcmVzc29yWmxp YihBSCwgY3MsIGZhbHNlKTsKLX0KLQotc3RhdGljIHZvaWQKLVJlYWREYXRhRnJvbUFyY2hpdmVa bGliKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRikKLXsKLQl6X3N0cmVhbXAJenA7 Ci0JY2hhcgkgICAqb3V0OwotCWludAkJCXJlcyA9IFpfT0s7Ci0Jc2l6ZV90CQljbnQ7Ci0JY2hh cgkgICAqYnVmOwotCXNpemVfdAkJYnVmbGVuOwotCi0JenAgPSAoel9zdHJlYW1wKSBwZ19tYWxs b2Moc2l6ZW9mKHpfc3RyZWFtKSk7Ci0JenAtPnphbGxvYyA9IFpfTlVMTDsKLQl6cC0+emZyZWUg PSBaX05VTEw7Ci0JenAtPm9wYXF1ZSA9IFpfTlVMTDsKLQotCWJ1ZiA9IHBnX21hbGxvYyhaTElC X0lOX1NJWkUpOwotCWJ1ZmxlbiA9IFpMSUJfSU5fU0laRTsKLQotCW91dCA9IHBnX21hbGxvYyha TElCX09VVF9TSVpFICsgMSk7Ci0KLQlpZiAoaW5mbGF0ZUluaXQoenApICE9IFpfT0spCi0JCXBn X2ZhdGFsKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsCi0J CQkJIHpwLT5tc2cpOwotCi0JLyogbm8gbWluaW1hbCBjaHVuayBzaXplIGZvciB6bGliICovCi0J d2hpbGUgKChjbnQgPSByZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQotCXsKLQkJenAtPm5leHRf aW4gPSAodm9pZCAqKSBidWY7Ci0JCXpwLT5hdmFpbF9pbiA9IGNudDsKLQotCQl3aGlsZSAoenAt PmF2YWlsX2luID4gMCkKLQkJewotCQkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQkJ enAtPmF2YWlsX291dCA9IFpMSUJfT1VUX1NJWkU7Ci0KLQkJCXJlcyA9IGluZmxhdGUoenAsIDAp OwotCQkJaWYgKHJlcyAhPSBaX09LICYmIHJlcyAhPSBaX1NUUkVBTV9FTkQpCi0JCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7Ci0KLQkJCW91dFta TElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dF0gPSAnXDAnOwotCQkJYWh3cml0ZShvdXQsIDEs IFpMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0LCBBSCk7Ci0JCX0KLQl9Ci0KLQl6cC0+bmV4 dF9pbiA9IE5VTEw7Ci0JenAtPmF2YWlsX2luID0gMDsKLQl3aGlsZSAocmVzICE9IFpfU1RSRUFN X0VORCkKLQl7Ci0JCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKLQkJenAtPmF2YWlsX291 dCA9IFpMSUJfT1VUX1NJWkU7Ci0JCXJlcyA9IGluZmxhdGUoenAsIDApOwotCQlpZiAocmVzICE9 IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdW5j b21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwotCi0JCW91dFtaTElCX09VVF9TSVpFIC0genAt PmF2YWlsX291dF0gPSAnXDAnOwotCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpw LT5hdmFpbF9vdXQsIEFIKTsKLQl9Ci0KLQlpZiAoaW5mbGF0ZUVuZCh6cCkgIT0gWl9PSykKLQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5t c2cpOwotCi0JZnJlZShidWYpOwotCWZyZWUob3V0KTsKLQlmcmVlKHpwKTsKLX0KLSNlbmRpZgkJ CQkJCQkvKiBIQVZFX0xJQlogKi8KLQotCi0vKgotICogRnVuY3Rpb25zIGZvciB1bmNvbXByZXNz ZWQgb3V0cHV0LgotICovCi0KLXN0YXRpYyB2b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlTm9uZShB cmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpCi17Ci0Jc2l6ZV90CQljbnQ7Ci0JY2hh cgkgICAqYnVmOwotCXNpemVfdAkJYnVmbGVuOwotCi0JYnVmID0gcGdfbWFsbG9jKFpMSUJfT1VU X1NJWkUpOwotCWJ1ZmxlbiA9IFpMSUJfT1VUX1NJWkU7Ci0KLQl3aGlsZSAoKGNudCA9IHJlYWRG KEFILCAmYnVmLCAmYnVmbGVuKSkpCi0JewotCQlhaHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7Ci0J fQotCi0JZnJlZShidWYpOwotfQotCi1zdGF0aWMgdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlTm9u ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJICAgY29uc3Qg Y2hhciAqZGF0YSwgc2l6ZV90IGRMZW4pCi17Ci0JY3MtPndyaXRlRihBSCwgZGF0YSwgZExlbik7 Ci19Ci0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDb21wcmVzc2VkIHN0cmVhbSBB UEkKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKIC8qCi0gKiBjZnAgcmVwcmVzZW50 cyBhbiBvcGVuIHN0cmVhbSwgd3JhcHBpbmcgdGhlIHVuZGVybHlpbmcgRklMRSBvciBnekZpbGUK LSAqIHBvaW50ZXIuIFRoaXMgaXMgb3BhcXVlIHRvIHRoZSBjYWxsZXJzLgorICogUHJpdmF0ZSBy b3V0aW5lcwogICovCi1zdHJ1Y3QgY2ZwCitzdGF0aWMgaW50CitoYXNTdWZmaXgoY29uc3QgY2hh ciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKIHsKLQlGSUxFCSAgICp1bmNvbXByZXNz ZWRmcDsKLSNpZmRlZiBIQVZFX0xJQloKLQlnekZpbGUJCWNvbXByZXNzZWRmcDsKLSNlbmRpZgot fTsKKwlpbnQJCQlmaWxlbmFtZWxlbiA9IHN0cmxlbihmaWxlbmFtZSk7CisJaW50CQkJc3VmZml4 bGVuID0gc3RybGVuKHN1ZmZpeCk7CiAKLSNpZmRlZiBIQVZFX0xJQloKLXN0YXRpYyBpbnQJaGFz U3VmZml4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpzdWZmaXgpOwotI2VuZGlm CisJaWYgKGZpbGVuYW1lbGVuIDwgc3VmZml4bGVuKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBt ZW1jbXAoJmZpbGVuYW1lW2ZpbGVuYW1lbGVuIC0gc3VmZml4bGVuXSwKKwkJCQkgIHN1ZmZpeCwK KwkJCQkgIHN1ZmZpeGxlbikgPT0gMDsKK30KIAogLyogZnJlZSgpIHdpdGhvdXQgY2hhbmdpbmcg ZXJybm87IHVzZWZ1bCBpbiBzZXZlcmFsIHBsYWNlcyBiZWxvdyAqLwogc3RhdGljIHZvaWQKQEAg LTQ0MiwzMjQgKzE2OCwxMDIgQEAgZnJlZV9rZWVwX2Vycm5vKHZvaWQgKnApCiB9CiAKIC8qCi0g KiBPcGVuIGEgZmlsZSBmb3IgcmVhZGluZy4gJ3BhdGgnIGlzIHRoZSBmaWxlIHRvIG9wZW4sIGFu ZCAnbW9kZScgc2hvdWxkCi0gKiBiZSBlaXRoZXIgInIiIG9yICJyYiIuCi0gKgotICogSWYgdGhl IGZpbGUgYXQgJ3BhdGgnIGRvZXMgbm90IGV4aXN0LCB3ZSBhcHBlbmQgdGhlICIuZ3oiIHN1ZmZp eCAoaWYgJ3BhdGgnCi0gKiBkb2Vzbid0IGFscmVhZHkgaGF2ZSBpdCkgYW5kIHRyeSBhZ2Fpbi4g U28gaWYgeW91IHBhc3MgImZvbyIgYXMgJ3BhdGgnLAotICogdGhpcyB3aWxsIG9wZW4gZWl0aGVy ICJmb28iIG9yICJmb28uZ3oiLgotICoKLSAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGgg YW4gZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqIFB1YmxpYyBpbnRlcmZhY2UKICAqLwotY2ZwICoK LWNmb3Blbl9yZWFkKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCi17Ci0JY2Zw CQkgICAqZnA7Ci0KLQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMg PSB7MH07Ci0KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoaGFzU3VmZml4KHBhdGgsICIuZ3oiKSkK LQl7Ci0JCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsK LQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0JfQotCWVsc2UK LSNlbmRpZgotCXsKLQkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lP Tl9OT05FOwotCQlmcCA9IGNmb3BlbihwYXRoLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLSNp ZmRlZiBIQVZFX0xJQloKLQkJaWYgKGZwID09IE5VTEwpCi0JCXsKLQkJCWNoYXIJICAgKmZuYW1l OwotCi0JCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOwotCQkJY29tcHJlc3Npb25f c3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwotCQkJZnAgPSBjZm9wZW4oZm5h bWUsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwotCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsK LQkJfQotI2VuZGlmCi0JfQotCXJldHVybiBmcDsKLX0KIAogLyoKLSAqIE9wZW4gYSBmaWxlIGZv ciB3cml0aW5nLiAncGF0aCcgaW5kaWNhdGVzIHRoZSBwYXRoIG5hbWUsIGFuZCAnbW9kZScgbXVz dAotICogYmUgYSBmaWxlbW9kZSBhcyBhY2NlcHRlZCBieSBmb3BlbigpIGFuZCBnem9wZW4oKSB0 aGF0IGluZGljYXRlcyB3cml0aW5nCi0gKiAoInciLCAid2IiLCAiYSIsIG9yICJhYiIpLgotICoK LSAqIElmICdjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobScgaXMgR1pJUCwgYSBnemlwIGNvbXBy ZXNzZWQgc3RyZWFtIGlzIG9wZW5lZCwKLSAqIGFuZCAnY29tcHJlc3Npb25fc3BlYy5sZXZlbCcg dXNlZC4gVGhlICIuZ3oiIHN1ZmZpeCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvCi0gKiAncGF0 aCcgaW4gdGhhdCBjYXNlLgotICoKLSAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4g ZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqIEluaXRpYWxpemUgYSBjb21wcmVzcyBmaWxlIGhhbmRs ZSBmb3IgdGhlIHNwZWNpZmllZCBjb21wcmVzc2lvbiBhbGdvcml0aG0uCiAgKi8KLWNmcCAqCi1j Zm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCSBjb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCitDb21wcmVzc0Zp bGVIYW5kbGUgKgorSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb25zdCBwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiB7Ci0JY2ZwCQkgICAqZnA7Ci0KLQlpZiAoY29t cHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKLQkJZnAgPSBj Zm9wZW4ocGF0aCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0JZWxzZQotCXsKLSNpZmRlZiBI QVZFX0xJQloKLQkJY2hhcgkgICAqZm5hbWU7Ci0KLQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oi LCBwYXRoKTsKLQkJZnAgPSBjZm9wZW4oZm5hbWUsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwot CQlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOwotI2Vsc2UKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQg ZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKLQkJZnAgPSBO VUxMOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0jZW5kaWYKLQl9Ci0JcmV0dXJuIGZw OwotfQotCi0vKgotICogVGhpcyBpcyB0aGUgd29ya2hvcnNlIGZvciBjZm9wZW4oKSBvciBjZmRv cGVuKCkuIEl0IG9wZW5zIGZpbGUgJ3BhdGgnIG9yCi0gKiBhc3NvY2lhdGVzIGEgc3RyZWFtICdm ZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlwdG9yLCBpbiAnbW9kZScuIFRoZQotICogZGVz Y3JpcHRvciBpcyBub3QgZHVwJ2VkIGFuZCBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxp dHkgdG8gZG8gc28uCi0gKiBUaGUgY2FsbGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhlICdjb21wcmVz c19hbGdvcml0aG0nIGlzIHN1cHBvcnRlZCBieSB0aGUKLSAqIGN1cnJlbnQgYnVpbGQuCi0gKgot ICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgot ICovCi1zdGF0aWMgY2ZwICoKLWNmb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpwYXRoLCBpbnQg ZmQsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKQotewotCWNmcAkJICAgKmZwID0gcGdfbWFsbG9jMChzaXplb2YoY2ZwKSk7 Ci0KLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJ UCkKLQl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWlmIChjb21wcmVzc2lvbl9zcGVjLmxldmVsICE9 IFpfREVGQVVMVF9DT01QUkVTU0lPTikKLQkJewotCQkJLyogdXNlciBoYXMgc3BlY2lmaWVkIGEg Y29tcHJlc3Npb24gbGV2ZWwsIHNvIHRlbGwgemxpYiB0byB1c2UgaXQgKi8KLQkJCWNoYXIJCW1v ZGVfY29tcHJlc3Npb25bMzJdOwotCi0JCQlzbnByaW50Zihtb2RlX2NvbXByZXNzaW9uLCBzaXpl b2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKLQkJCQkJIG1vZGUsIGNvbXByZXNzaW9uX3Nw ZWMubGV2ZWwpOwotCQkJaWYgKGZkID49IDApCi0JCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6ZG9w ZW4oZmQsIG1vZGVfY29tcHJlc3Npb24pOwotCQkJZWxzZQotCQkJCWZwLT5jb21wcmVzc2VkZnAg PSBnem9wZW4ocGF0aCwgbW9kZV9jb21wcmVzc2lvbik7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkv KiBkb24ndCBzcGVjaWZ5IGEgbGV2ZWwsIGp1c3QgdXNlIHRoZSB6bGliIGRlZmF1bHQgKi8KLQkJ CWlmIChmZCA+PSAwKQotCQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnemRvcGVuKGZkLCBtb2RlKTsK LQkJCWVsc2UKLQkJCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGUpOwotCQl9 CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAKLQkJaWYgKGZwLT5jb21wcmVzc2VkZnAgPT0g TlVMTCkKLQkJewotCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJCWZwID0gTlVMTDsKLQkJfQot I2Vsc2UKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lv biB3aXRoICVzIiwgImd6aXAiKTsKLSNlbmRpZgotCX0KLQllbHNlCi0JewotCQlpZiAoZmQgPj0g MCkKLQkJCWZwLT51bmNvbXByZXNzZWRmcCA9IGZkb3BlbihmZCwgbW9kZSk7Ci0JCWVsc2UKLQkJ CWZwLT51bmNvbXByZXNzZWRmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCUNGSCA9IHBnX21hbGxv YzAoc2l6ZW9mKENvbXByZXNzRmlsZUhhbmRsZSkpOwogCi0JCWlmIChmcC0+dW5jb21wcmVzc2Vk ZnAgPT0gTlVMTCkKLQkJewotCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJCWZwID0gTlVMTDsK LQkJfQotCX0KKwlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJ T05fTk9ORSkKKwkJSW5pdENvbXByZXNzRmlsZUhhbmRsZU5vbmUoQ0ZILCBjb21wcmVzc2lvbl9z cGVjKTsKKwllbHNlIGlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVT U0lPTl9HWklQKQorCQlJbml0Q29tcHJlc3NGaWxlSGFuZGxlR3ppcChDRkgsIGNvbXByZXNzaW9u X3NwZWMpOwogCi0JcmV0dXJuIGZwOworCXJldHVybiBDRkg7CiB9CiAKIC8qCi0gKiBPcGVucyBm aWxlICdwYXRoJyBpbiAnbW9kZScgYW5kIGNvbXByZXNzaW9uIGFzIGRlZmluZWQgaW4KLSAqIGNv bXByZXNzaW9uX3NwZWMuIFRoZSBjYWxsZXIgbXVzdCB2ZXJpZnkgdGhhdCB0aGUgY29tcHJlc3Np b24KLSAqIGlzIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBidWlsZC4KKyAqIE9wZW4gYSBmaWxl IGZvciByZWFkaW5nLiAncGF0aCcgaXMgdGhlIGZpbGUgdG8gb3BlbiwgYW5kICdtb2RlJyBzaG91 bGQKKyAqIGJlIGVpdGhlciAiciIgb3IgInJiIi4KICAqCi0gKiBPbiBmYWlsdXJlLCByZXR1cm4g TlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCi0gKi8KLWNmcCAqCi1jZm9wZW4oY29u c3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkgICBjb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCi17Ci0JcmV0dXJuIGNmb3Blbl9pbnRlcm5h bChwYXRoLCAtMSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci19Ci0KLS8qCi0gKiBBc3NvY2lh dGVzIGEgc3RyZWFtICdmZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlwdG9yLCBpbiAnbW9k ZScKLSAqIGFuZCBjb21wcmVzc2lvbiBhcyBkZWZpbmVkIGluIGNvbXByZXNzaW9uX3NwZWMuIFRo ZSBjYWxsZXIgbXVzdAotICogdmVyaWZ5IHRoYXQgdGhlIGNvbXByZXNzaW9uIGlzIHN1cHBvcnRl ZCBieSB0aGUgY3VycmVudCBidWlsZC4KKyAqIElmIHRoZSBmaWxlIGF0ICdwYXRoJyBjb250YWlu cyB0aGUgc3VmZml4IG9mIGEgc3VwcG9ydGVkIGNvbXByZXNzaW9uIG1ldGhvZCwKKyAqIGN1cnJl bnRseSB0aGlzIGluY2x1ZGVzIG9ubHkgIi5neiIsIHRoZW4gdGhpcyBjb21wcmVzc2lvbiB3aWxs IGJlIHVzZWQKKyAqIHRocm91Z2hvdXQuIE90aGVyd2lzZSB0aGUgY29tcHJlc3Npb24gd2lsbCBi ZSBkZWZlcnJlZCBieSBpdGVyYXRpdmVseSB0cnlpbmcKKyAqIHRvIG9wZW4gdGhlIGZpbGUgYXQg J3BhdGgnLCBmaXJzdCBhcyBpcywgdGhlbiBieSBhcHBlbmRpbmcga25vd24gY29tcHJlc3Npb24K KyAqIHN1ZmZpeGVzLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcyAncGF0aCcsIHRoaXMgd2lsbCBv cGVuIGVpdGhlciAiZm9vIiBvcgorICogImZvby5neiIsIHRyeWluZyBpbiB0aGF0IG9yZGVyLgog ICoKICAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJu by4KICAqLwotY2ZwICoKLWNmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAotCQljb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCitDb21wcmVzc0Zp bGVIYW5kbGUgKgorSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IGNoYXIgKnBh dGgsIGNvbnN0IGNoYXIgKm1vZGUpCiB7Ci0JcmV0dXJuIGNmb3Blbl9pbnRlcm5hbChOVUxMLCBm ZCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci19CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgg PSBOVUxMOworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIJICAgKmZuYW1lOworCXBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHswfTsKIAotaW50Ci1jZnJlYWQodm9p ZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKLXsKLQlpbnQJCQlyZXQ7CisJY29tcHJlc3Npb25f c3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwogCi0JaWYgKHNpemUgPT0gMCkK LQkJcmV0dXJuIDA7CisJQXNzZXJ0KHN0cmNtcChtb2RlLCBQR19CSU5BUllfUikgPT0gMCk7CiAK LSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQl7Ci0JCXJldCA9IGd6 cmVhZChmcC0+Y29tcHJlc3NlZGZwLCBwdHIsIHNpemUpOwotCQlpZiAocmV0ICE9IHNpemUgJiYg IWd6ZW9mKGZwLT5jb21wcmVzc2VkZnApKQotCQl7Ci0JCQlpbnQJCQllcnJudW07Ci0JCQljb25z dCBjaGFyICplcnJtc2cgPSBnemVycm9yKGZwLT5jb21wcmVzc2VkZnAsICZlcnJudW0pOworCWZu YW1lID0gc3RyZHVwKHBhdGgpOwogCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBp bnB1dCBmaWxlOiAlcyIsCi0JCQkJCSBlcnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9yKGVycm5v KSA6IGVycm1zZyk7Ci0JCX0KLQl9CisJaWYgKGhhc1N1ZmZpeChmbmFtZSwgIi5neiIpKQorCQlj b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAJZWxzZQot I2VuZGlmCiAJewotCQlyZXQgPSBmcmVhZChwdHIsIDEsIHNpemUsIGZwLT51bmNvbXByZXNzZWRm cCk7Ci0JCWlmIChyZXQgIT0gc2l6ZSAmJiAhZmVvZihmcC0+dW5jb21wcmVzc2VkZnApKQotCQkJ UkVBRF9FUlJPUl9FWElUKGZwLT51bmNvbXByZXNzZWRmcCk7Ci0JfQotCXJldHVybiByZXQ7Ci19 Ci0KLWludAotY2Z3cml0ZShjb25zdCB2b2lkICpwdHIsIGludCBzaXplLCBjZnAgKmZwKQotewot I2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCQlyZXR1cm4gZ3p3cml0 ZShmcC0+Y29tcHJlc3NlZGZwLCBwdHIsIHNpemUpOwotCWVsc2UKLSNlbmRpZgotCQlyZXR1cm4g ZndyaXRlKHB0ciwgMSwgc2l6ZSwgZnAtPnVuY29tcHJlc3NlZGZwKTsKLX0KLQotaW50Ci1jZmdl dGMoY2ZwICpmcCkKLXsKLQlpbnQJCQlyZXQ7CisJCWJvb2wJCWV4aXN0czsKIAorCQlleGlzdHMg PSAoc3RhdChwYXRoLCAmc3QpID09IDApOworCQkvKiBhdm9pZCB1bnVzZWQgd2FybmluZyBpZiBp dCBpcyBub3QgYnVpbHQgd2l0aCBjb21wcmVzc2lvbiAqLworCQlpZiAoZXhpc3RzKQorCQkJY29t cHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwogI2lmZGVmIEhB VkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCXsKLQkJcmV0ID0gZ3pnZXRjKGZwLT5j b21wcmVzc2VkZnApOwotCQlpZiAocmV0ID09IEVPRikKKwkJaWYgKCFleGlzdHMpCiAJCXsKLQkJ CWlmICghZ3plb2YoZnAtPmNvbXByZXNzZWRmcCkpCi0JCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBy ZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOwotCQkJZWxzZQotCQkJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7 CisJCQlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOworCQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oi LCBwYXRoKTsKKwkJCWV4aXN0cyA9IChzdGF0KGZuYW1lLCAmc3QpID09IDApOworCisJCQlpZiAo ZXhpc3RzKQorCQkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05f R1pJUDsKIAkJfQotCX0KLQllbHNlCiAjZW5kaWYKLQl7Ci0JCXJldCA9IGZnZXRjKGZwLT51bmNv bXByZXNzZWRmcCk7Ci0JCWlmIChyZXQgPT0gRU9GKQotCQkJUkVBRF9FUlJPUl9FWElUKGZwLT51 bmNvbXByZXNzZWRmcCk7CiAJfQogCi0JcmV0dXJuIHJldDsKLX0KLQotY2hhciAqCi1jZmdldHMo Y2ZwICpmcCwgY2hhciAqYnVmLCBpbnQgbGVuKQotewotI2lmZGVmIEhBVkVfTElCWgotCWlmIChm cC0+Y29tcHJlc3NlZGZwKQotCQlyZXR1cm4gZ3pnZXRzKGZwLT5jb21wcmVzc2VkZnAsIGJ1Ziwg bGVuKTsKLQllbHNlCi0jZW5kaWYKLQkJcmV0dXJuIGZnZXRzKGJ1ZiwgbGVuLCBmcC0+dW5jb21w cmVzc2VkZnApOwotfQotCi1pbnQKLWNmY2xvc2UoY2ZwICpmcCkKLXsKLQlpbnQJCQlyZXN1bHQ7 Ci0KLQlpZiAoZnAgPT0gTlVMTCkKLQl7Ci0JCWVycm5vID0gRUJBREY7Ci0JCXJldHVybiBFT0Y7 Ci0JfQotI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQorCUNGSCA9IElu aXRDb21wcmVzc0ZpbGVIYW5kbGUoY29tcHJlc3Npb25fc3BlYyk7CisJaWYgKENGSC0+b3Blbl9m dW5jKGZuYW1lLCAtMSwgbW9kZSwgQ0ZIKSkKIAl7Ci0JCXJlc3VsdCA9IGd6Y2xvc2UoZnAtPmNv bXByZXNzZWRmcCk7Ci0JCWZwLT5jb21wcmVzc2VkZnAgPSBOVUxMOworCQlmcmVlX2tlZXBfZXJy bm8oQ0ZIKTsKKwkJQ0ZIID0gTlVMTDsKIAl9Ci0JZWxzZQotI2VuZGlmCi0JewotCQlyZXN1bHQg PSBmY2xvc2UoZnAtPnVuY29tcHJlc3NlZGZwKTsKLQkJZnAtPnVuY29tcHJlc3NlZGZwID0gTlVM TDsKLQl9Ci0JZnJlZV9rZWVwX2Vycm5vKGZwKTsKKwlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOwog Ci0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gQ0ZIOwogfQogCisvKgorICogQ2xvc2UgYW4gb3Bl biBmaWxlIGhhbmRsZSBhbmQgcmVsZWFzZSBpdHMgbWVtb3J5LgorICoKKyAqIE9uIGZhaWx1cmUs IHJldHVybnMgYW4gZXJyb3IgdmFsdWUgYW5kIHNldHMgZXJybm8gYXBwcm9wcmlhdGVseS4KKyAq LwogaW50Ci1jZmVvZihjZnAgKmZwKQorRW5kQ29tcHJlc3NGaWxlSGFuZGxlKENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIKQogewotI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZw KQotCQlyZXR1cm4gZ3plb2YoZnAtPmNvbXByZXNzZWRmcCk7Ci0JZWxzZQotI2VuZGlmCi0JCXJl dHVybiBmZW9mKGZwLT51bmNvbXByZXNzZWRmcCk7Ci19CisJaW50CQkJcmV0ID0gMDsKIAotY29u c3QgY2hhciAqCi1nZXRfY2ZwX2Vycm9yKGNmcCAqZnApCi17Ci0jaWZkZWYgSEFWRV9MSUJaCi0J aWYgKGZwLT5jb21wcmVzc2VkZnApCi0JewotCQlpbnQJCQllcnJudW07Ci0JCWNvbnN0IGNoYXIg KmVycm1zZyA9IGd6ZXJyb3IoZnAtPmNvbXByZXNzZWRmcCwgJmVycm51bSk7CisJaWYgKENGSC0+ cHJpdmF0ZV9kYXRhKQorCQlyZXQgPSBDRkgtPmNsb3NlX2Z1bmMoQ0ZIKTsKIAotCQlpZiAoZXJy bnVtICE9IFpfRVJSTk8pCi0JCQlyZXR1cm4gZXJybXNnOwotCX0KLSNlbmRpZgotCXJldHVybiBz dHJlcnJvcihlcnJubyk7Ci19CisJZnJlZV9rZWVwX2Vycm5vKENGSCk7CiAKLSNpZmRlZiBIQVZF X0xJQloKLXN0YXRpYyBpbnQKLWhhc1N1ZmZpeChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qg Y2hhciAqc3VmZml4KQotewotCWludAkJCWZpbGVuYW1lbGVuID0gc3RybGVuKGZpbGVuYW1lKTsK LQlpbnQJCQlzdWZmaXhsZW4gPSBzdHJsZW4oc3VmZml4KTsKLQotCWlmIChmaWxlbmFtZWxlbiA8 IHN1ZmZpeGxlbikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gbWVtY21wKCZmaWxlbmFtZVtmaWxl bmFtZWxlbiAtIHN1ZmZpeGxlbl0sCi0JCQkJICBzdWZmaXgsCi0JCQkJICBzdWZmaXhsZW4pID09 IDA7CisJcmV0dXJuIHJldDsKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvY29tcHJlc3NfaW8uaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oCmluZGV4IDhi ZWIxMDU4ZWMuLmQ0MWM0OTUwMjUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVz c19pby5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oCkBAIC0yMyw1MCArMjMs MTYwIEBACiAKIGV4dGVybiBjaGFyICpzdXBwb3J0c19jb21wcmVzc2lvbihjb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwogCi0vKiBQcm90b3R5cGUgZm9y IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIFdyaXRlRGF0YVRvQXJjaGl2ZSgpICovCisvKgorICogUHJv dG90eXBlIGZvciBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIGluIHdyaXRlRGF0YSgpCisgKi8KIHR5 cGVkZWYgdm9pZCAoKldyaXRlRnVuYykgKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpi dWYsIHNpemVfdCBsZW4pOwogCiAvKgotICogUHJvdG90eXBlIGZvciBjYWxsYmFjayBmdW5jdGlv biB0byBSZWFkRGF0YUZyb21BcmNoaXZlKCkKKyAqIFByb3RvdHlwZSBmb3IgY2FsbGJhY2sgZnVu Y3Rpb24gdXNlZCBpbiByZWFkRGF0YSgpCiAgKgotICogUmVhZERhdGFGcm9tQXJjaGl2ZSB3aWxs IGNhbGwgdGhlIHJlYWQgZnVuY3Rpb24gcmVwZWF0ZWRseSwgdW50aWwgaXQKLSAqIHJldHVybnMg MCB0byBzaWduYWwgRU9GLiBSZWFkRGF0YUZyb21BcmNoaXZlIHBhc3NlcyBhIGJ1ZmZlciB0byBy ZWFkIHRoZQotICogZGF0YSBpbnRvIGluICpidWYsIG9mIGxlbmd0aCAqYnVmbGVuLiBJZiB0aGF0 J3Mgbm90IGJpZyBlbm91Z2ggZm9yIHRoZQotICogY2FsbGJhY2sgZnVuY3Rpb24sIGl0IGNhbiBm cmVlKCkgaXQgYW5kIG1hbGxvYygpIGEgbmV3IG9uZSwgcmV0dXJuaW5nIHRoZQotICogbmV3IGJ1 ZmZlciBhbmQgaXRzIHNpemUgaW4gKmJ1ZiBhbmQgKmJ1Zmxlbi4KKyAqIHJlYWREYXRhIHdpbGwg Y2FsbCB0aGUgcmVhZCBmdW5jdGlvbiByZXBlYXRlZGx5LCB1bnRpbCBpdCByZXR1cm5zIDAgdG8g c2lnbmFsCisgKiBFT0YuIHJlYWREYXRhIHBhc3NlcyBhIGJ1ZmZlciB0byByZWFkIHRoZSBkYXRh IGludG8gaW4gKmJ1Ziwgb2YgbGVuZ3RoCisgKiAqYnVmbGVuLiBJZiB0aGF0J3Mgbm90IGJpZyBl bm91Z2ggZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgaXQgY2FuIGZyZWUoKSBpdAorICogYW5k IG1hbGxvYygpIGEgbmV3IG9uZSwgcmV0dXJuaW5nIHRoZSBuZXcgYnVmZmVyIGFuZCBpdHMgc2l6 ZSBpbiAqYnVmIGFuZAorICogKmJ1Zmxlbi4KICAqCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg Ynl0ZXMgcmVhZCBpbnRvICpidWYsIG9yIDAgb24gRU9GLgogICovCiB0eXBlZGVmIHNpemVfdCAo KlJlYWRGdW5jKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVu KTsKIAotLyogc3RydWN0IGRlZmluaXRpb24gYXBwZWFycyBpbiBjb21wcmVzc19pby5jICovCiB0 eXBlZGVmIHN0cnVjdCBDb21wcmVzc29yU3RhdGUgQ29tcHJlc3NvclN0YXRlOworc3RydWN0IENv bXByZXNzb3JTdGF0ZQoreworCS8qCisJICogUmVhZCBhbGwgY29tcHJlc3NlZCBkYXRhIGZyb20g dGhlIGlucHV0IHN0cmVhbSAodmlhIHJlYWRGKSBhbmQgcHJpbnQgaXQKKwkgKiBvdXQgd2l0aCBh aHdyaXRlKCkuCisJICovCisJdm9pZAkJKCpyZWFkRGF0YSkgKEFyY2hpdmVIYW5kbGUgKkFILCBD b21wcmVzc29yU3RhdGUgKmNzKTsKKworCS8qCisJICogQ29tcHJlc3MgYW5kIHdyaXRlIGRhdGEg dG8gdGhlIG91dHB1dCBzdHJlYW0gKHZpYSB3cml0ZUYpLgorCSAqLworCXZvaWQJCSgqd3JpdGVE YXRhKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJCQkJICBj b25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbik7CisKKwkvKgorCSAqIEVuZCBjb21wcmVzc2lv biBhbmQgZmx1c2ggaW50ZXJuYWwgYnVmZmVycyBpZiBhbnkuCisJICovCisJdm9pZAkJKCplbmQp IChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7CisKKwkvKgorCSAqIENh bGxiYWNrIGZ1bmN0aW9uIHRvIHJlYWQgZnJvbSBhbiBhbHJlYWR5IHByb2Nlc3NlZCBpbnB1dCBz dHJlYW0KKwkgKi8KKwlSZWFkRnVuYwlyZWFkRjsKKworCS8qCisJICogQ2FsbGJhY2sgZnVuY3Rp b24gdG8gd3JpdGUgYW4gYWxyZWFkeSBwcm9jZXNzZWQgY2h1bmsgb2YgZGF0YS4KKwkgKi8KKwlX cml0ZUZ1bmMJd3JpdGVGOworCisJLyoKKwkgKiBDb21wcmVzc2lvbiBzcGVjaWZpY2F0aW9uIGZv ciB0aGlzIHN0YXRlLgorCSAqLworCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Np b25fc3BlYzsKKworCS8qCisJICogUHJpdmF0ZSBkYXRhIHRvIGJlIHVzZWQgYnkgdGhlIGNvbXBy ZXNzb3IuCisJICovCisJdm9pZAkgICAqcHJpdmF0ZV9kYXRhOworfTsKIAogZXh0ZXJuIENvbXBy ZXNzb3JTdGF0ZSAqQWxsb2NhdGVDb21wcmVzc29yKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQkJCQkgICBSZWFkRnVuYyByZWFkRiwKIAkJ CQkJCQkJCQkgICBXcml0ZUZ1bmMgd3JpdGVGKTsKLWV4dGVybiB2b2lkIFJlYWREYXRhRnJvbUFy Y2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsCi0JCQkJCQkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKLQkJCQkJCQkJUmVhZEZ1bmMgcmVhZEYpOwotZXh0 ZXJuIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29y U3RhdGUgKmNzLAotCQkJCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKTsKIGV4 dGVybiB2b2lkIEVuZENvbXByZXNzb3IoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0 ZSAqY3MpOwogCisvKgorICogQ29tcHJlc3MgRmlsZSBIYW5kbGUKKyAqLwordHlwZWRlZiBzdHJ1 Y3QgQ29tcHJlc3NGaWxlSGFuZGxlIENvbXByZXNzRmlsZUhhbmRsZTsKKworc3RydWN0IENvbXBy ZXNzRmlsZUhhbmRsZQoreworCS8qCisJICogT3BlbiBhIGZpbGUgaW4gbW9kZS4KKwkgKgorCSAq IFBhc3MgZWl0aGVyICdwYXRoJyBvciAnZmQnIGRlcGVuZGluZyBvbiB3aGV0aGVyIGEgZmlsZXBh dGggb3IgYSBmaWxlCisJICogZGVzY3JpcHRvciBpcyBhdmFpbGFibGUuICdtb2RlJyBjYW4gYmUg b25lIG9mICdyJywgJ3JiJywgJ3cnLCAnd2InLAorCSAqICdhJywgYW5kICdhYicuIFJlcXVyaXJl cyBhbiBhbHJlYWR5IGluaXRpYWxpemVkIENvbXByZXNzRmlsZUhhbmRsZS4KKwkgKi8KKwlpbnQJ CQkoKm9wZW5fZnVuYykgKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9k ZSwKKwkJCQkJCQkgIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICogT3BlbiBh IGZpbGUgZm9yIHdyaXRpbmcuCisJICoKKwkgKiAnbW9kZScgY2FuIGJlIG9uZSBvZiAndycsICd3 YicsICdhJywgYW5kICdhYicuIFJlcXVyaXJlcyBhbiBhbHJlYWR5CisJICogaW5pdGlhbGl6ZWQg Q29tcHJlc3NGaWxlSGFuZGxlLgorCSAqLworCWludAkJCSgqb3Blbl93cml0ZV9mdW5jKSAoY29u c3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKKwkJCQkJCQkJCUNvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIKTsKIAotdHlwZWRlZiBzdHJ1Y3QgY2ZwIGNmcDsKKwkvKgorCSAqIFJlYWQgJ3Np emUnIGJ5dGVzIG9mIGRhdGEgZnJvbSB0aGUgZmlsZSBhbmQgc3RvcmUgdGhlbSBpbnRvICdwdHIn LgorCSAqLworCXNpemVfdAkJKCpyZWFkX2Z1bmMpICh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CiAKLWV4dGVybiBjZnAgKmNmb3Blbihjb25zdCBjaGFy ICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAotCQkJCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7Ci1leHRlcm4gY2ZwICpjZmRvcGVuKGludCBmZCwg Y29uc3QgY2hhciAqbW9kZSwKLQkJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBj b21wcmVzc2lvbl9zcGVjKTsKLWV4dGVybiBjZnAgKmNmb3Blbl9yZWFkKGNvbnN0IGNoYXIgKnBh dGgsIGNvbnN0IGNoYXIgKm1vZGUpOwotZXh0ZXJuIGNmcCAqY2ZvcGVuX3dyaXRlKGNvbnN0IGNo YXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJCQkgY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKLWV4dGVybiBpbnQJY2ZyZWFkKHZvaWQgKnB0 ciwgaW50IHNpemUsIGNmcCAqZnApOwotZXh0ZXJuIGludAljZndyaXRlKGNvbnN0IHZvaWQgKnB0 ciwgaW50IHNpemUsIGNmcCAqZnApOwotZXh0ZXJuIGludAljZmdldGMoY2ZwICpmcCk7Ci1leHRl cm4gY2hhciAqY2ZnZXRzKGNmcCAqZnAsIGNoYXIgKmJ1ZiwgaW50IGxlbik7Ci1leHRlcm4gaW50 CWNmY2xvc2UoY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNmZW9mKGNmcCAqZnApOwotZXh0ZXJuIGNv bnN0IGNoYXIgKmdldF9jZnBfZXJyb3IoY2ZwICpmcCk7CisJLyoKKwkgKiBXcml0ZSAnc2l6ZScg Ynl0ZXMgb2YgZGF0YSBpbnRvIHRoZSBmaWxlIGZyb20gJ3B0cicuCisJICovCisJc2l6ZV90CQko KndyaXRlX2Z1bmMpIChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAorCQkJCQkJCSAgIHN0 cnVjdCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CiAKKwkvKgorCSAqIFJlYWQgYXQgbW9zdCBz aXplIC0gMSBjaGFyYWN0ZXJzIGZyb20gdGhlIGNvbXByZXNzIGZpbGUgaGFuZGxlIGludG8KKwkg KiAncycuCisJICoKKwkgKiBTdG9wIGlmIGFuIEVPRiBvciBhIG5ld2xpbmUgaXMgZm91bmQgZmly c3QuICdzJyBpcyBhbHdheXMgbnVsbAorCSAqIHRlcm1pbmF0ZWQgYW5kIGNvbnRhaW5zIHRoZSBu ZXdsaW5lIGlmIGl0IHdhcyBmb3VuZC4KKwkgKi8KKwljaGFyCSAgICooKmdldHNfZnVuYykgKGNo YXIgKnMsIGludCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisKKwkvKgorCSAqIFJl YWQgdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gdGhlIGNvbXByZXNzIGZpbGUgaGFuZGxlIGFzICd1 bnNpZ25lZAorCSAqIGNoYXInIGNhc3QgaW50byAnaW50Jy4KKwkgKi8KKwlpbnQJCQkoKmdldGNf ZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICogVGVzdCBpZiBFT0Yg aXMgcmVhY2hlZCBpbiB0aGUgY29tcHJlc3MgZmlsZSBoYW5kbGUuCisJICovCisJaW50CQkJKCpl b2ZfZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICogQ2xvc2UgYW4g b3BlbiBmaWxlIGhhbmRsZS4KKwkgKi8KKwlpbnQJCQkoKmNsb3NlX2Z1bmMpIChDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCk7CisKKwkvKgorCSAqIEdldCBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgdGhh dCBkZXNjcmliZXMgYW4gZXJyb3IgdGhhdCBvY2N1cmVkIGR1cmluZyBhCisJICogY29tcHJlc3Mg ZmlsZSBoYW5kbGUgb3BlcmF0aW9uLgorCSAqLworCWNvbnN0IGNoYXIgKigqZ2V0X2Vycm9yX2Z1 bmMpIChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisKKwkvKgorCSAqIENvbXByZXNzaW9uIHNw ZWNpZmljYXRpb24gZm9yIHRoaXMgZmlsZSBoYW5kbGUuCisJICovCisJcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjOworCisJLyoKKwkgKiBQcml2YXRlIGRhdGEgdG8g YmUgdXNlZCBieSB0aGUgY29tcHJlc3Nvci4KKwkgKi8KKwl2b2lkCSAgICpwcml2YXRlX2RhdGE7 Cit9OworCisvKgorICogSW5pdGlhbGl6ZSBhIGNvbXByZXNzIGZpbGUgaGFuZGxlIHdpdGggdGhl IHJlcXVlc3RlZCBjb21wcmVzc2lvbi4KKyAqLworZXh0ZXJuIENvbXByZXNzRmlsZUhhbmRsZSAq SW5pdENvbXByZXNzRmlsZUhhbmRsZShjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMpOworCisvKgorICogSW5pdGlhbGl6ZSBhIGNvbXByZXNzIGZpbGUgc3Ry ZWFtLiBEZWZmZXIgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobQorICogZnJvbSAncGF0aCcsIGVp dGhlciBieSBleGFtaW5pbmcgaXRzIHN1ZmZpeCBvciBieSBhcHBlbmRpbmcgdGhlIHN1cHBvcnRl ZAorICogc3VmZml4ZXMgaW4gJ3BhdGgnLgorICovCitleHRlcm4gQ29tcHJlc3NGaWxlSGFuZGxl ICpJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJ CQkJCQkJCQkJICBjb25zdCBjaGFyICptb2RlKTsKK2V4dGVybiBpbnQJRW5kQ29tcHJlc3NGaWxl SGFuZGxlKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19u b25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZWNiY2Y0YjA0YQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmMKQEAgLTAs MCArMSwyMDYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbXByZXNzX25vbmUuYwor ICoJIFJvdXRpbmVzIGZvciBhcmNoaXZlcnMgdG8gcmVhZCBvciB3cml0ZSBhbiB1bmNvbXByZXNz ZWQgc3RyZWFtLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJ REVOVElGSUNBVElPTgorICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyNpbmNs dWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNvbXByZXNzX25vbmUuaCIKKyNpbmNsdWRlICJw Z19iYWNrdXBfdXRpbHMuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVz c29yIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFByaXZhdGUg cm91dGluZXMKKyAqLworCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQXJj aGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCit7CisJc2l6ZV90CQljbnQ7CisJ Y2hhcgkgICAqYnVmOworCXNpemVfdAkJYnVmbGVuOworCisJYnVmID0gcGdfbWFsbG9jKFpMSUJf T1VUX1NJWkUpOworCWJ1ZmxlbiA9IFpMSUJfT1VUX1NJWkU7CisKKwl3aGlsZSAoKGNudCA9IGNz LT5yZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQorCXsKKwkJYWh3cml0ZShidWYsIDEsIGNudCwg QUgpOworCX0KKworCWZyZWUoYnVmKTsKK30KKworCitzdGF0aWMgdm9pZAorV3JpdGVEYXRhVG9B cmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJ ICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCit7CisJY3MtPndyaXRlRihBSCwgZGF0 YSwgZExlbik7Cit9CisKK3N0YXRpYyB2b2lkCitFbmRDb21wcmVzc29yTm9uZShBcmNoaXZlSGFu ZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwkvKiBubyBvcCAqLworfQorCisvKgor ICogUHVibGljIGludGVyZmFjZQorICovCisKK3ZvaWQKK0luaXRDb21wcmVzc29yTm9uZShDb21w cmVzc29yU3RhdGUgKmNzLAorCQkJCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24g Y29tcHJlc3Npb25fc3BlYykKK3sKKwljcy0+cmVhZERhdGEgPSBSZWFkRGF0YUZyb21BcmNoaXZl Tm9uZTsKKwljcy0+d3JpdGVEYXRhID0gV3JpdGVEYXRhVG9BcmNoaXZlTm9uZTsKKwljcy0+ZW5k ID0gRW5kQ29tcHJlc3Nvck5vbmU7CisKKwljcy0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXByZXNz aW9uX3NwZWM7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzcyBG aWxlIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFByaXZhdGUg cm91dGluZXMKKyAqLworCitzdGF0aWMgc2l6ZV90CityZWFkX25vbmUodm9pZCAqcHRyLCBzaXpl X3Qgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnAgPSAoRklM RSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QJCXJldDsKKworCWlmIChzaXplID09IDAp CisJCXJldHVybiAwOworCisJcmV0ID0gZnJlYWQocHRyLCAxLCBzaXplLCBmcCk7CisJaWYgKHJl dCAhPSBzaXplICYmICFmZW9mKGZwKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20g aW5wdXQgZmlsZTogJXMiLAorCQkJCSBzdHJlcnJvcihlcnJubykpOworCisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIHNpemVfdAord3JpdGVfbm9uZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBz aXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlyZXR1cm4gZndyaXRlKHB0ciwgMSwg c2l6ZSwgKEZJTEUgKikgQ0ZILT5wcml2YXRlX2RhdGEpOworfQorCitzdGF0aWMgY29uc3QgY2hh ciAqCitnZXRfZXJyb3Jfbm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlyZXR1cm4g c3RyZXJyb3IoZXJybm8pOworfQorCitzdGF0aWMgY2hhciAqCitnZXRzX25vbmUoY2hhciAqcHRy LCBpbnQgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJcmV0dXJuIGZnZXRzKHB0 ciwgc2l6ZSwgKEZJTEUgKikgQ0ZILT5wcml2YXRlX2RhdGEpOworfQorCitzdGF0aWMgaW50Citn ZXRjX25vbmUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnAgPSAoRklM RSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlpbnQJCQlyZXQ7CisKKwlyZXQgPSBmZ2V0YyhmcCk7 CisJaWYgKHJldCA9PSBFT0YpCisJeworCQlpZiAoIWZlb2YoZnApKQorCQkJcGdfZmF0YWwoImNv dWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQll bHNlCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2Yg ZmlsZSIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2Nsb3NlX25vbmUo Q29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnAgPSAoRklMRSAqKSBDRkgt PnByaXZhdGVfZGF0YTsKKwlpbnQJCQlyZXQgPSAwOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBO VUxMOworCisJaWYgKGZwKQorCQlyZXQgPSBmY2xvc2UoZnApOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludAorZW9mX25vbmUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJcmV0 dXJuIGZlb2YoKEZJTEUgKikgQ0ZILT5wcml2YXRlX2RhdGEpOworfQorCitzdGF0aWMgaW50Citv cGVuX25vbmUoY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLCBDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlBc3NlcnQoQ0ZILT5wcml2YXRlX2RhdGEgPT0gTlVM TCk7CisKKwlpZiAoZmQgPj0gMCkKKwkJQ0ZILT5wcml2YXRlX2RhdGEgPSBmZG9wZW4oZHVwKGZk KSwgbW9kZSk7CisJZWxzZQorCQlDRkgtPnByaXZhdGVfZGF0YSA9IGZvcGVuKHBhdGgsIG1vZGUp OworCisJaWYgKENGSC0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJCXJldHVybiAxOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK29wZW5fd3JpdGVfbm9uZShjb25zdCBjaGFyICpwYXRo LCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlBc3NlcnQo Q0ZILT5wcml2YXRlX2RhdGEgPT0gTlVMTCk7CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9IGZvcGVu KHBhdGgsIG1vZGUpOworCWlmIChDRkgtPnByaXZhdGVfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4g MTsKKworCXJldHVybiAwOworfQorCisvKgorICogUHVibGljIGludGVyZmFjZQorICovCisKK3Zv aWQKK0luaXRDb21wcmVzc0ZpbGVIYW5kbGVOb25lKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILAor CQkJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVj KQoreworCUNGSC0+b3Blbl9mdW5jID0gb3Blbl9ub25lOworCUNGSC0+b3Blbl93cml0ZV9mdW5j ID0gb3Blbl93cml0ZV9ub25lOworCUNGSC0+cmVhZF9mdW5jID0gcmVhZF9ub25lOworCUNGSC0+ d3JpdGVfZnVuYyA9IHdyaXRlX25vbmU7CisJQ0ZILT5nZXRzX2Z1bmMgPSBnZXRzX25vbmU7CisJ Q0ZILT5nZXRjX2Z1bmMgPSBnZXRjX25vbmU7CisJQ0ZILT5jbG9zZV9mdW5jID0gY2xvc2Vfbm9u ZTsKKwlDRkgtPmVvZl9mdW5jID0gZW9mX25vbmU7CisJQ0ZILT5nZXRfZXJyb3JfZnVuYyA9IGdl dF9lcnJvcl9ub25lOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBOVUxMOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21w cmVzc19ub25lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTQzZTU5 OTgxOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmgK QEAgLTAsMCArMSwyNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tcHJlc3Nfbm9u ZS5oCisgKgkgVW5jb21wcmVzc2VkIGludGVyZmFjZSB0byBjb21wcmVzc19pby5jIHJvdXRpbmVz CisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FU SU9OCisgKgkgICBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5oCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgX0NPTVBSRVNTX05PTkVfSF8KKyNkZWZpbmUgX0NPTVBS RVNTX05PTkVfSF8KKworI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisKK2V4dGVybiB2b2lkIElu aXRDb21wcmVzc29yTm9uZShDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCSAgIGNvbnN0IHBn X2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CitleHRlcm4gdm9pZCBJ bml0Q29tcHJlc3NGaWxlSGFuZGxlTm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwKKwkJCQkJ CQkJCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7 CisKKyNlbmRpZgkJCQkJCQkvKiBfQ09NUFJFU1NfTk9ORV9IXyAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCmlu ZGV4IGNhNjJmOWEzNzQuLjg0ZTlmMGRlZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9t ZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTEsNyArMSw5 IEBACiAjIENvcHlyaWdodCAoYykgMjAyMi0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAogCiBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0gZmlsZXMoCisgICdjb21wcmVz c19nemlwLmMnLAogICAnY29tcHJlc3NfaW8uYycsCisgICdjb21wcmVzc19ub25lLmMnLAogICAn ZHVtcHV0aWxzLmMnLAogICAncGFyYWxsZWwuYycsCiAgICdwZ19iYWNrdXBfYXJjaGl2ZXIuYycs CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggZTAyY2UyMmRiMi4uMmJjNTY0 OGVkNiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtOTUsOCArOTUsOCBA QCBzdGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9p ZCBkdW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVf dCB0aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBj aGFyICpmaWxlbmFtZSwKIAkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMpOwotc3RhdGljIGNmcCAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpB SCk7Ci1zdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjZnAgKnNh dmVkT3V0cHV0KTsKK3N0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKlNhdmVPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgpOworc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpB SCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1dCk7CiAKIHN0YXRpYyBpbnQJcmVzdG9y ZV90b2NfZW50cnkoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgYm9vbCBpc19wYXJh bGxlbCk7CiBzdGF0aWMgdm9pZCByZXN0b3JlX3RvY19lbnRyaWVzX3ByZWZvcmsoQXJjaGl2ZUhh bmRsZSAqQUgsCkBAIC0yNzIsNyArMjcyLDcgQEAgQ2xvc2VBcmNoaXZlKEFyY2hpdmUgKkFIWCkK IAogCS8qIENsb3NlIHRoZSBvdXRwdXQgKi8KIAllcnJubyA9IDA7Ci0JcmVzID0gY2ZjbG9zZShB SC0+T0YpOworCXJlcyA9IEVuZENvbXByZXNzRmlsZUhhbmRsZShBSC0+T0YpOwogCiAJaWYgKHJl cyAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIG91dHB1dCBmaWxlOiAlbSIpOwpA QCAtMzU0LDcgKzM1NCw3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlSZXN0b3Jl T3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKIAlib29sCQlwYXJhbGxlbF9tb2RlOwog CVRvY0VudHJ5ICAgKnRlOwotCWNmcAkJICAgKnNhdjsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKnNh djsKIAogCUFILT5zdGFnZSA9IFNUQUdFX0lOSVRJQUxJWklORzsKIApAQCAtMTEyOCw3ICsxMTI4 LDcgQEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAlUb2NFbnRyeSAgICp0ZTsKIAlw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc2lvbl9zcGVjID0gezB9OwogCXRl U2VjdGlvbgljdXJTZWN0aW9uOwotCWNmcAkJICAgKnNhdjsKKwlDb21wcmVzc0ZpbGVIYW5kbGUg KnNhdjsKIAljb25zdCBjaGFyICpmbXROYW1lOwogCWNoYXIJCXN0YW1wX3N0cls2NF07CiAKQEAg LTExNDQsOSArMTE0NCwxMCBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCQlzdHJj cHkoc3RhbXBfc3RyLCAiW3Vua25vd25dIik7CiAKIAlhaHByaW50ZihBSCwgIjtcbjsgQXJjaGl2 ZSBjcmVhdGVkIGF0ICVzXG4iLCBzdGFtcF9zdHIpOwotCWFocHJpbnRmKEFILCAiOyAgICAgZGJu YW1lOiAlc1xuOyAgICAgVE9DIEVudHJpZXM6ICVkXG47ICAgICBDb21wcmVzc2lvbjogJWRcbiIs CisJYWhwcmludGYoQUgsICI7ICAgICBkYm5hbWU6ICVzXG47ICAgICBUT0MgRW50cmllczogJWRc bjsgICAgIENvbXByZXNzaW9uOiAlc1xuIiwKIAkJCSBzYW5pdGl6ZV9saW5lKEFILT5hcmNoZGJu YW1lLCBmYWxzZSksCi0JCQkgQUgtPnRvY0NvdW50LCBBSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZl bCk7CisJCQkgQUgtPnRvY0NvdW50LAorCQkJIGdldF9jb21wcmVzc19hbGdvcml0aG1fbmFtZShB SC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pKTsKIAogCXN3aXRjaCAoQUgtPmZvcm1hdCkK IAl7CkBAIC0xNTAzLDYgKzE1MDQsNyBAQCBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVI YW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJICBjb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiB7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpD Rkg7CiAJY29uc3QgY2hhciAqbW9kZTsKIAlpbnQJCQlmbiA9IC0xOwogCkBAIC0xNTI1LDMzICsx NTI3LDMyIEBAIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5h bWUsCiAJZWxzZQogCQltb2RlID0gUEdfQklOQVJZX1c7CiAKLQlpZiAoZm4gPj0gMCkKLQkJQUgt Pk9GID0gY2Zkb3BlbihkdXAoZm4pLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLQllbHNlCi0J CUFILT5PRiA9IGNmb3BlbihmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7CisJQ0ZI ID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb21wcmVzc2lvbl9zcGVjKTsKIAotCWlmICghQUgt Pk9GKQorCWlmIChDRkgtPm9wZW5fZnVuYyhmaWxlbmFtZSwgZm4sIG1vZGUsIENGSCkpCiAJewog CQlpZiAoZmlsZW5hbWUpCiAJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUg XCIlc1wiOiAlbSIsIGZpbGVuYW1lKTsKIAkJZWxzZQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBv cGVuIG91dHB1dCBmaWxlOiAlbSIpOwogCX0KKworCUFILT5PRiA9IENGSDsKIH0KIAotc3RhdGlj IGNmcCAqCitzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICoKIFNhdmVPdXRwdXQoQXJjaGl2ZUhh bmRsZSAqQUgpCiB7Ci0JcmV0dXJuIChjZnAgKikgQUgtPk9GOworCXJldHVybiAoQ29tcHJlc3NG aWxlSGFuZGxlICopIEFILT5PRjsKIH0KIAogc3RhdGljIHZvaWQKLVJlc3RvcmVPdXRwdXQoQXJj aGl2ZUhhbmRsZSAqQUgsIGNmcCAqc2F2ZWRPdXRwdXQpCitSZXN0b3JlT3V0cHV0KEFyY2hpdmVI YW5kbGUgKkFILCBDb21wcmVzc0ZpbGVIYW5kbGUgKnNhdmVkT3V0cHV0KQogewogCWludAkJCXJl czsKIAogCWVycm5vID0gMDsKLQlyZXMgPSBjZmNsb3NlKEFILT5PRik7CisJcmVzID0gRW5kQ29t cHJlc3NGaWxlSGFuZGxlKEFILT5PRik7CiAKIAlpZiAocmVzICE9IDApCiAJCXBnX2ZhdGFsKCJj b3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CkBAIC0xNjkwLDcgKzE2OTEsMTEgQEAg YWh3cml0ZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIEFyY2hp dmVIYW5kbGUgKkFIKQogCWVsc2UgaWYgKFJlc3RvcmluZ1RvREIoQUgpKQogCQlieXRlc193cml0 dGVuID0gRXhlY3V0ZVNxbENvbW1hbmRCdWYoJkFILT5wdWJsaWMsIChjb25zdCBjaGFyICopIHB0 ciwgc2l6ZSAqIG5tZW1iKTsKIAllbHNlCi0JCWJ5dGVzX3dyaXR0ZW4gPSBjZndyaXRlKHB0ciwg c2l6ZSAqIG5tZW1iLCBBSC0+T0YpOworCXsKKwkJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSAo Q29tcHJlc3NGaWxlSGFuZGxlICopIEFILT5PRjsKKworCQlieXRlc193cml0dGVuID0gQ0ZILT53 cml0ZV9mdW5jKHB0ciwgc2l6ZSAqIG5tZW1iLCBDRkgpOworCX0KIAogCWlmIChieXRlc193cml0 dGVuICE9IHNpemUgKiBubWVtYikKIAkJV1JJVEVfRVJST1JfRVhJVDsKQEAgLTIwMzIsNiArMjAz NywxOCBAQCBSZWFkU3RyKEFyY2hpdmVIYW5kbGUgKkFIKQogCXJldHVybiBidWY7CiB9CiAKK3N0 YXRpYyBib29sCitfZmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3Qg Y2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhcgkJYnVmW01BWFBHUEFU SF07CisKKwlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy8lcyIsIGRpciwgZmlsZW5h bWUpID49IE1BWFBHUEFUSCkKKwkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBc IiVzXCIiLCBkaXIpOworCisJcmV0dXJuIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUco c3Quc3RfbW9kZSkpOworfQorCiBzdGF0aWMgaW50CiBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFy Y2hpdmVIYW5kbGUgKkFIKQogewpAQCAtMjA2MiwyNiArMjA3OSwxMiBAQCBfZGlzY292ZXJBcmNo aXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogCQkgKi8KIAkJaWYgKHN0YXQoQUgtPmZTcGVj LCAmc3QpID09IDAgJiYgU19JU0RJUihzdC5zdF9tb2RlKSkKIAkJewotCQkJY2hhcgkJYnVmW01B WFBHUEFUSF07Ci0KLQkJCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzL3RvYy5kYXQi LCBBSC0+ZlNwZWMpID49IE1BWFBHUEFUSCkKLQkJCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUg dG9vIGxvbmc6IFwiJXNcIiIsCi0JCQkJCQkgQUgtPmZTcGVjKTsKLQkJCWlmIChzdGF0KGJ1Ziwg JnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpCi0JCQl7Ci0JCQkJQUgtPmZvcm1hdCA9 IGFyY2hEaXJlY3Rvcnk7CisJCQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwkJCWlmIChf ZmlsZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRvYy5kYXQiKSkKIAkJCQlyZXR1cm4g QUgtPmZvcm1hdDsKLQkJCX0KLQogI2lmZGVmIEhBVkVfTElCWgotCQkJaWYgKHNucHJpbnRmKGJ1 ZiwgTUFYUEdQQVRILCAiJXMvdG9jLmRhdC5neiIsIEFILT5mU3BlYykgPj0gTUFYUEdQQVRIKQot CQkJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwKLQkJCQkJCSBB SC0+ZlNwZWMpOwotCQkJaWYgKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9t b2RlKSkKLQkJCXsKLQkJCQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwkJCWlmIChfZmls ZUV4aXN0c0luRGlyZWN0b3J5KEFILT5mU3BlYywgInRvYy5kYXQuZ3oiKSkKIAkJCQlyZXR1cm4g QUgtPmZvcm1hdDsKLQkJCX0KICNlbmRpZgogCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBcIiVzXCIg ZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgYXJjaGl2ZSAoXCJ0b2MuZGF0XCIgZG9lcyBu b3QgZXhpc3QpIiwKIAkJCQkJIEFILT5mU3BlYyk7CkBAIC0yMTc5LDYgKzIxODIsNyBAQCBfYWxs b2NBSChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJCSBT ZXR1cFdvcmtlclB0clR5cGUgc2V0dXBXb3JrZXJQdHIpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUg7 CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBv dXRfY29tcHJlc3Nfc3BlYyA9IHswfTsKIAogCXBnX2xvZ19kZWJ1ZygiYWxsb2NhdGluZyBBSCBm b3IgJXMsIGZvcm1hdCAlZCIsCkBAIC0yMjM0LDcgKzIyMzgsMTAgQEAgX2FsbG9jQUgoY29uc3Qg Y2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCiAJLyogT3BlbiBzdGRv dXQgd2l0aCBubyBjb21wcmVzc2lvbiBmb3IgQUggb3V0cHV0IGhhbmRsZSAqLwogCW91dF9jb21w cmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7Ci0JQUgtPk9GID0gY2Zk b3BlbihkdXAoZmlsZW5vKHN0ZG91dCkpLCBQR19CSU5BUllfQSwgb3V0X2NvbXByZXNzX3NwZWMp OworCUNGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUob3V0X2NvbXByZXNzX3NwZWMpOworCWlm IChDRkgtPm9wZW5fZnVuYyhOVUxMLCBmaWxlbm8oc3Rkb3V0KSwgUEdfQklOQVJZX0EsIENGSCkp CisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBzdGRvdXQgZm9yIGFwcGVuZGluZzogJW0iKTsK KwlBSC0+T0YgPSBDRkg7CiAKIAkvKgogCSAqIE9uIFdpbmRvd3MsIHdlIG5lZWQgdG8gdXNlIGJp bmFyeSBtb2RlIHRvIHJlYWQvd3JpdGUgbm9uLXRleHQgZmlsZXMsCkBAIC0zNjQ2LDEyICszNjUz LDcgQEAgV3JpdGVIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCUFILT5Xcml0ZUJ5dGVQdHIoQUgs IEFILT5pbnRTaXplKTsKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+b2ZmU2l6ZSk7CiAJQUgt PldyaXRlQnl0ZVB0cihBSCwgQUgtPmZvcm1hdCk7Ci0JLyoKLQkgKiBGb3Igbm93IHRoZSBjb21w cmVzc2lvbiB0eXBlIGlzIGltcGxpZWQgYnkgdGhlIGxldmVsLiAgVGhpcyB3aWxsIG5lZWQKLQkg KiB0byBjaGFuZ2Ugb25jZSBzdXBwb3J0IGZvciBtb3JlIGNvbXByZXNzaW9uIGFsZ29yaXRobXMg aXMgYWRkZWQsCi0JICogcmVxdWlyaW5nIGEgZm9ybWF0IGJ1bXAuCi0JICovCi0JV3JpdGVJbnQo QUgsIEFILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKKwlBSC0+V3JpdGVCeXRlUHRyKEFILCBB SC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pOwogCWNydG0gPSAqbG9jYWx0aW1lKCZBSC0+ Y3JlYXRlRGF0ZSk7CiAJV3JpdGVJbnQoQUgsIGNydG0udG1fc2VjKTsKIAlXcml0ZUludChBSCwg Y3J0bS50bV9taW4pOwpAQCAtMzcyMywxMCArMzcyNSwxMSBAQCBSZWFkSGVhZChBcmNoaXZlSGFu ZGxlICpBSCkKIAkJcGdfZmF0YWwoImV4cGVjdGVkIGZvcm1hdCAoJWQpIGRpZmZlcnMgZnJvbSBm b3JtYXQgZm91bmQgaW4gZmlsZSAoJWQpIiwKIAkJCQkgQUgtPmZvcm1hdCwgZm10KTsKIAotCS8q IEd1ZXNzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgYmFzZWQgb24gdGhlIGxldmVsICovCi0JQUgt PmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQlpZiAo QUgtPnZlcnNpb24gPj0gS19WRVJTXzFfMikKKwlpZiAoQUgtPnZlcnNpb24gPj0gS19WRVJTXzFf MTUpCisJCUFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IEFILT5SZWFkQnl0ZVB0cihB SCk7CisJZWxzZSBpZiAoQUgtPnZlcnNpb24gPj0gS19WRVJTXzFfMikKIAl7CisJCS8qIEd1ZXNz IHRoZSBjb21wcmVzc2lvbiBtZXRob2QgYmFzZWQgb24gdGhlIGxldmVsICovCiAJCWlmIChBSC0+ dmVyc2lvbiA8IEtfVkVSU18xXzQpCiAJCQlBSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCA9IEFI LT5SZWFkQnl0ZVB0cihBSCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu aAppbmRleCA0NzI1ZTQ5NzQ3Li4xOGIzOGMxN2FiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oCkBAIC02NSwxMCArNjUsMTMgQEAKICNkZWZpbmUgS19WRVJTXzFfMTMgTUFLRV9B UkNISVZFX1ZFUlNJT04oMSwgMTMsIDApCS8qIGNoYW5nZSBzZWFyY2hfcGF0aAogCQkJCQkJCQkJ CQkJCSAqIGJlaGF2aW9yICovCiAjZGVmaW5lIEtfVkVSU18xXzE0IE1BS0VfQVJDSElWRV9WRVJT SU9OKDEsIDE0LCAwKQkvKiBhZGQgdGFibGVhbSAqLworI2RlZmluZSBLX1ZFUlNfMV8xNSBNQUtF X0FSQ0hJVkVfVkVSU0lPTigxLCAxNSwgMCkJLyogYWRkCisJCQkJCQkJCQkJCQkJICogY29tcHJl c3Npb25fYWxnb3JpdGhtCisJCQkJCQkJCQkJCQkJICogaW4gaGVhZGVyICovCiAKIC8qIEN1cnJl bnQgYXJjaGl2ZSB2ZXJzaW9uIG51bWJlciAodGhlIGZvcm1hdCB3ZSBjYW4gb3V0cHV0KSAqLwog I2RlZmluZSBLX1ZFUlNfTUFKT1IgMQotI2RlZmluZSBLX1ZFUlNfTUlOT1IgMTQKKyNkZWZpbmUg S19WRVJTX01JTk9SIDE1CiAjZGVmaW5lIEtfVkVSU19SRVYgMAogI2RlZmluZSBLX1ZFUlNfU0VM RiBNQUtFX0FSQ0hJVkVfVkVSU0lPTihLX1ZFUlNfTUFKT1IsIEtfVkVSU19NSU5PUiwgS19WRVJT X1JFVikKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMKaW5kZXggNzUyOTM2N2E3Yi4uYjU3 NmIyOTkyNCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYwor KysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jCkBAIC0yOTgsNyArMjk4LDkg QEAgX1N0YXJ0RGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCV9Xcml0ZUJ5 dGUoQUgsIEJMS19EQVRBKTsJLyogQmxvY2sgdHlwZSAqLwogCVdyaXRlSW50KEFILCB0ZS0+ZHVt cElkKTsJLyogRm9yIHNhbml0eSBjaGVjayAqLwogCi0JY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJl c3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywgX0N1c3RvbVdyaXRlRnVuYyk7CisJY3R4LT5jcyA9 IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQkJIE5VTEws CisJCQkJCQkJCSBfQ3VzdG9tV3JpdGVGdW5jKTsKIH0KIAogLyoKQEAgLTMxNywxNSArMzE5LDE1 IEBAIF9Xcml0ZURhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVf dCBkTGVuKQogCUNvbXByZXNzb3JTdGF0ZSAqY3MgPSBjdHgtPmNzOwogCiAJaWYgKGRMZW4gPiAw KQotCQkvKiBXcml0ZURhdGFUb0FyY2hpdmUoKSBpbnRlcm5hbGx5IHRocm93cyB3cml0ZSBlcnJv cnMgKi8KLQkJV3JpdGVEYXRhVG9BcmNoaXZlKEFILCBjcywgZGF0YSwgZExlbik7CisJCS8qIHdy aXRlRGF0YSgpIGludGVybmFsbHkgdGhyb3dzIHdyaXRlIGVycm9ycyAqLworCQljcy0+d3JpdGVE YXRhKEFILCBjcywgZGF0YSwgZExlbik7CiB9CiAKIC8qCiAgKiBDYWxsZWQgYnkgdGhlIGFyY2hp dmVyIHdoZW4gYSBkdW1wZXIncyAnRGF0YUR1bXBlcicgcm91dGluZSBoYXMKICAqIGZpbmlzaGVk LgogICoKLSAqIE9wdGlvbmFsLgorICogTWFuZGF0b3J5LgogICovCiBzdGF0aWMgdm9pZAogX0Vu ZERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKQEAgLTMzMyw2ICszMzUsOCBA QCBfRW5kRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCWxjbENvbnRleHQg KmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCiAJRW5kQ29tcHJlc3NvcihB SCwgY3R4LT5jcyk7CisJY3R4LT5jcyA9IE5VTEw7CisKIAkvKiBTZW5kIHRoZSBlbmQgbWFya2Vy ICovCiAJV3JpdGVJbnQoQUgsIDApOwogfQpAQCAtMzc3LDcgKzM4MSw5IEBAIF9TdGFydExPKEFy Y2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiAKIAlXcml0ZUludChBSCwg b2lkKTsKIAotCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXByZXNzaW9uX3Nw ZWMsIF9DdXN0b21Xcml0ZUZ1bmMpOworCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgt PmNvbXByZXNzaW9uX3NwZWMsCisJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkgX0N1c3RvbVdyaXRl RnVuYyk7CiB9CiAKIC8qCkBAIC01NjYsNyArNTcyLDEyIEBAIF9QcmludFRvY0RhdGEoQXJjaGl2 ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIHN0YXRpYyB2b2lkCiBfUHJpbnREYXRhKEFyY2hp dmVIYW5kbGUgKkFIKQogewotCVJlYWREYXRhRnJvbUFyY2hpdmUoQUgsIEFILT5jb21wcmVzc2lv bl9zcGVjLCBfQ3VzdG9tUmVhZEZ1bmMpOworCUNvbXByZXNzb3JTdGF0ZSAqY3M7CisKKwljcyA9 IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQlfQ3VzdG9t UmVhZEZ1bmMsIE5VTEwpOworCWNzLT5yZWFkRGF0YShBSCwgY3MpOworCUVuZENvbXByZXNzb3Io QUgsIGNzKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTk3Nyw3ICs5ODgsNyBAQCBfcmVhZEJsb2Nr SGVhZGVyKEFyY2hpdmVIYW5kbGUgKkFILCBpbnQgKnR5cGUsIGludCAqaWQpCiB9CiAKIC8qCi0g KiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgV3JpdGVEYXRhVG9BcmNoaXZlLiBXcml0ZXMgb25lIGJs b2NrIG9mIChjb21wcmVzc2VkKQorICogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHdyaXRlRGF0YS4g V3JpdGVzIG9uZSBibG9jayBvZiAoY29tcHJlc3NlZCkKICAqIGRhdGEgdG8gdGhlIGFyY2hpdmUu CiAgKi8KIHN0YXRpYyB2b2lkCkBAIC05OTIsNyArMTAwMyw3IEBAIF9DdXN0b21Xcml0ZUZ1bmMo QXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIH0KIAogLyoK LSAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBSZWFkRGF0YUZyb21BcmNoaXZlLiBUbyBrZWVwIHRo aW5ncyBzaW1wbGUsIHdlCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgcmVhZERhdGEuIFRvIGtl ZXAgdGhpbmdzIHNpbXBsZSwgd2UKICAqIGFsd2F5cyByZWFkIG9uZSBjb21wcmVzc2VkIGJsb2Nr IGF0IGEgdGltZS4KICAqLwogc3RhdGljIHNpemVfdApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGly ZWN0b3J5LmMKaW5kZXggNjgwMGMzY2NlZS4uYTJmODg5OTVjMCAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2RpcmVjdG9yeS5jCkBAIC01MCw5ICs1MCw4IEBAIHR5cGVkZWYgc3RydWN0CiAJICov CiAJY2hhcgkgICAqZGlyZWN0b3J5OwogCi0JY2ZwCQkgICAqZGF0YUZIOwkJCS8qIGN1cnJlbnRs eSBvcGVuIGRhdGEgZmlsZSAqLwotCi0JY2ZwCQkgICAqTE9zVG9jRkg7CQkvKiBmaWxlIGhhbmRs ZSBmb3IgYmxvYnMudG9jICovCisJQ29tcHJlc3NGaWxlSGFuZGxlICpkYXRhRkg7IC8qIGN1cnJl bnRseSBvcGVuIGRhdGEgZmlsZSAqLworCUNvbXByZXNzRmlsZUhhbmRsZSAqTE9zVG9jRkg7IC8q IGZpbGUgaGFuZGxlIGZvciBibG9icy50b2MgKi8KIAlQYXJhbGxlbFN0YXRlICpwc3RhdGU7CQkv KiBmb3IgcGFyYWxsZWwgYmFja3VwIC8gcmVzdG9yZSAqLwogfSBsY2xDb250ZXh0OwogCkBAIC0x OTgsMTEgKzE5NywxMSBAQCBJbml0QXJjaGl2ZUZtdF9EaXJlY3RvcnkoQXJjaGl2ZUhhbmRsZSAq QUgpCiAJZWxzZQogCXsJCQkJCQkJLyogUmVhZCBNb2RlICovCiAJCWNoYXIJCWZuYW1lW01BWFBH UEFUSF07Ci0JCWNmcAkJICAgKnRvY0ZIOworCQlDb21wcmVzc0ZpbGVIYW5kbGUgKnRvY0ZIOwog CiAJCXNldEZpbGVQYXRoKEFILCBmbmFtZSwgInRvYy5kYXQiKTsKIAotCQl0b2NGSCA9IGNmb3Bl bl9yZWFkKGZuYW1lLCBQR19CSU5BUllfUik7CisJCXRvY0ZIID0gSW5pdERpc2NvdmVyQ29tcHJl c3NGaWxlSGFuZGxlKGZuYW1lLCBQR19CSU5BUllfUik7CiAJCWlmICh0b2NGSCA9PSBOVUxMKQog CQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGlucHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1l KTsKIApAQCAtMjE4LDcgKzIxNyw3IEBAIEluaXRBcmNoaXZlRm10X0RpcmVjdG9yeShBcmNoaXZl SGFuZGxlICpBSCkKIAkJUmVhZFRvYyhBSCk7CiAKIAkJLyogTm90aGluZyBlbHNlIGluIHRoZSBm aWxlLCBzbyBjbG9zZSBpdCBhZ2Fpbi4uLiAqLwotCQlpZiAoY2ZjbG9zZSh0b2NGSCkgIT0gMCkK KwkJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZSh0b2NGSCkgIT0gMCkKIAkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgY2xvc2UgVE9DIGZpbGU6ICVtIik7CiAJCWN0eC0+ZGF0YUZIID0gTlVMTDsKIAl9 CkBAIC0zMjcsOSArMzI2LDkgQEAgX1N0YXJ0RGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50 cnkgKnRlKQogCiAJc2V0RmlsZVBhdGgoQUgsIGZuYW1lLCB0Y3R4LT5maWxlbmFtZSk7CiAKLQlj dHgtPmRhdGFGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZX1csCi0JCQkJCQkJICAg QUgtPmNvbXByZXNzaW9uX3NwZWMpOwotCWlmIChjdHgtPmRhdGFGSCA9PSBOVUxMKQorCWN0eC0+ ZGF0YUZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShBSC0+Y29tcHJlc3Npb25fc3BlYyk7CisK KwlpZiAoY3R4LT5kYXRhRkgtPm9wZW5fd3JpdGVfZnVuYyhmbmFtZSwgUEdfQklOQVJZX1csIGN0 eC0+ZGF0YUZIKSkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNc IjogJW0iLCBmbmFtZSk7CiB9CiAKQEAgLTM0NiwxNSArMzQ1LDE2IEBAIHN0YXRpYyB2b2lkCiBf V3JpdGVEYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExl bikKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsK KwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJZXJybm8gPSAwOwot CWlmIChkTGVuID4gMCAmJiBjZndyaXRlKGRhdGEsIGRMZW4sIGN0eC0+ZGF0YUZIKSAhPSBkTGVu KQorCWlmIChkTGVuID4gMCAmJiBDRkgtPndyaXRlX2Z1bmMoZGF0YSwgZExlbiwgQ0ZIKSAhPSBk TGVuKQogCXsKIAkJLyogaWYgd3JpdGUgZGlkbid0IHNldCBlcnJubywgYXNzdW1lIHByb2JsZW0g aXMgbm8gZGlzayBzcGFjZSAqLwogCQlpZiAoZXJybm8gPT0gMCkKIAkJCWVycm5vID0gRU5PU1BD OwogCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIG91dHB1dCBmaWxlOiAlcyIsCi0JCQkJ IGdldF9jZnBfZXJyb3IoY3R4LT5kYXRhRkgpKTsKKwkJCQkgQ0ZILT5nZXRfZXJyb3JfZnVuYyhD RkgpKTsKIAl9CiB9CiAKQEAgLTM3MCw3ICszNzAsNyBAQCBfRW5kRGF0YShBcmNoaXZlSGFuZGxl ICpBSCwgVG9jRW50cnkgKnRlKQogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFI LT5mb3JtYXREYXRhOwogCiAJLyogQ2xvc2UgdGhlIGZpbGUgKi8KLQlpZiAoY2ZjbG9zZShjdHgt PmRhdGFGSCkgIT0gMCkKKwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+ZGF0YUZIKSAh PSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGRhdGEgZmlsZTogJW0iKTsKIAogCWN0 eC0+ZGF0YUZIID0gTlVMTDsKQEAgLTM4NSwyNiArMzg1LDI1IEBAIF9QcmludEZpbGVEYXRhKEFy Y2hpdmVIYW5kbGUgKkFILCBjaGFyICpmaWxlbmFtZSkKIAlzaXplX3QJCWNudDsKIAljaGFyCSAg ICpidWY7CiAJc2l6ZV90CQlidWZsZW47Ci0JY2ZwCQkgICAqY2ZwOworCUNvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIOwogCiAJaWYgKCFmaWxlbmFtZSkKIAkJcmV0dXJuOwogCi0JY2ZwID0gY2ZvcGVu X3JlYWQoZmlsZW5hbWUsIFBHX0JJTkFSWV9SKTsKLQotCWlmICghY2ZwKQorCUNGSCA9IEluaXRE aXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShmaWxlbmFtZSwgUEdfQklOQVJZX1IpOworCWlmICgh Q0ZIKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gaW5wdXQgZmlsZSBcIiVzXCI6ICVtIiwg ZmlsZW5hbWUpOwogCiAJYnVmID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUpOwogCWJ1ZmxlbiA9 IFpMSUJfT1VUX1NJWkU7CiAKLQl3aGlsZSAoKGNudCA9IGNmcmVhZChidWYsIGJ1ZmxlbiwgY2Zw KSkpCisJd2hpbGUgKChjbnQgPSBDRkgtPnJlYWRfZnVuYyhidWYsIGJ1ZmxlbiwgQ0ZIKSkpCiAJ ewogCQlhaHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7CiAJfQogCiAJZnJlZShidWYpOwotCWlmIChj ZmNsb3NlKGNmcCkgIT0gMCkKKwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKENGSCkgIT0gMCkK IAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBkYXRhIGZpbGUgXCIlc1wiOiAlbSIsIGZpbGVu YW1lKTsKIH0KIApAQCAtNDM1LDYgKzQzNCw3IEBAIF9Mb2FkTE9zKEFyY2hpdmVIYW5kbGUgKkFI KQogewogCU9pZAkJCW9pZDsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+ Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljaGFyCQl0b2NmbmFtZVtN QVhQR1BBVEhdOwogCWNoYXIJCWxpbmVbTUFYUEdQQVRIXTsKIApAQCAtNDQyLDE0ICs0NDIsMTQg QEAgX0xvYWRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAlzZXRGaWxlUGF0aChBSCwgdG9jZm5h bWUsICJibG9icy50b2MiKTsKIAotCWN0eC0+TE9zVG9jRkggPSBjZm9wZW5fcmVhZCh0b2NmbmFt ZSwgUEdfQklOQVJZX1IpOworCUNGSCA9IGN0eC0+TE9zVG9jRkggPSBJbml0RGlzY292ZXJDb21w cmVzc0ZpbGVIYW5kbGUodG9jZm5hbWUsIFBHX0JJTkFSWV9SKTsKIAogCWlmIChjdHgtPkxPc1Rv Y0ZIID09IE5VTEwpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBsYXJnZSBvYmplY3QgVE9D IGZpbGUgXCIlc1wiIGZvciBpbnB1dDogJW0iLAogCQkJCSB0b2NmbmFtZSk7CiAKIAkvKiBSZWFk IHRoZSBMT3MgVE9DIGZpbGUgbGluZS1ieS1saW5lLCBhbmQgcHJvY2VzcyBlYWNoIExPICovCi0J d2hpbGUgKChjZmdldHMoY3R4LT5MT3NUb2NGSCwgbGluZSwgTUFYUEdQQVRIKSkgIT0gTlVMTCkK Kwl3aGlsZSAoKENGSC0+Z2V0c19mdW5jKGxpbmUsIE1BWFBHUEFUSCwgQ0ZIKSkgIT0gTlVMTCkK IAl7CiAJCWNoYXIJCWxvZm5hbWVbTUFYUEdQQVRIICsgMV07CiAJCWNoYXIJCXBhdGhbTUFYUEdQ QVRIXTsKQEAgLTQ2NCwxMSArNDY0LDExIEBAIF9Mb2FkTE9zKEFyY2hpdmVIYW5kbGUgKkFIKQog CQlfUHJpbnRGaWxlRGF0YShBSCwgcGF0aCk7CiAJCUVuZFJlc3RvcmVMTyhBSCwgb2lkKTsKIAl9 Ci0JaWYgKCFjZmVvZihjdHgtPkxPc1RvY0ZIKSkKKwlpZiAoIUNGSC0+ZW9mX2Z1bmMoQ0ZIKSkK IAkJcGdfZmF0YWwoImVycm9yIHJlYWRpbmcgbGFyZ2Ugb2JqZWN0IFRPQyBmaWxlIFwiJXNcIiIs CiAJCQkJIHRvY2ZuYW1lKTsKIAotCWlmIChjZmNsb3NlKGN0eC0+TE9zVG9jRkgpICE9IDApCisJ aWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZShjdHgtPkxPc1RvY0ZIKSAhPSAwKQogCQlwZ19mYXRh bCgiY291bGQgbm90IGNsb3NlIGxhcmdlIG9iamVjdCBUT0MgZmlsZSBcIiVzXCI6ICVtIiwKIAkJ CQkgdG9jZm5hbWUpOwogCkBAIC00ODgsMTUgKzQ4OCwxNiBAQCBfV3JpdGVCeXRlKEFyY2hpdmVI YW5kbGUgKkFILCBjb25zdCBpbnQgaSkKIHsKIAl1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQg Y2hhcikgaTsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0 YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJZXJybm8gPSAw OwotCWlmIChjZndyaXRlKCZjLCAxLCBjdHgtPmRhdGFGSCkgIT0gMSkKKwlpZiAoQ0ZILT53cml0 ZV9mdW5jKCZjLCAxLCBDRkgpICE9IDEpCiAJewogCQkvKiBpZiB3cml0ZSBkaWRuJ3Qgc2V0IGVy cm5vLCBhc3N1bWUgcHJvYmxlbSBpcyBubyBkaXNrIHNwYWNlICovCiAJCWlmIChlcnJubyA9PSAw KQogCQkJZXJybm8gPSBFTk9TUEM7CiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gb3V0 cHV0IGZpbGU6ICVzIiwKLQkJCQkgZ2V0X2NmcF9lcnJvcihjdHgtPmRhdGFGSCkpOworCQkJCSBD RkgtPmdldF9lcnJvcl9mdW5jKENGSCkpOwogCX0KIAogCXJldHVybiAxOwpAQCAtNTEyLDggKzUx Myw5IEBAIHN0YXRpYyBpbnQKIF9SZWFkQnl0ZShBcmNoaXZlSGFuZGxlICpBSCkKIHsKIAlsY2xD b250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCi0JcmV0dXJuIGNmZ2V0YyhjdHgtPmRhdGFG SCk7CisJcmV0dXJuIENGSC0+Z2V0Y19mdW5jKENGSCk7CiB9CiAKIC8qCkBAIC01MjQsMTUgKzUy NiwxNiBAQCBzdGF0aWMgdm9pZAogX1dyaXRlQnVmKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCB2 b2lkICpidWYsIHNpemVfdCBsZW4pCiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQg KikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFG SDsKIAogCWVycm5vID0gMDsKLQlpZiAoY2Z3cml0ZShidWYsIGxlbiwgY3R4LT5kYXRhRkgpICE9 IGxlbikKKwlpZiAoQ0ZILT53cml0ZV9mdW5jKGJ1ZiwgbGVuLCBDRkgpICE9IGxlbikKIAl7CiAJ CS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sg c3BhY2UgKi8KIAkJaWYgKGVycm5vID09IDApCiAJCQllcnJubyA9IEVOT1NQQzsKIAkJcGdfZmF0 YWwoImNvdWxkIG5vdCB3cml0ZSB0byBvdXRwdXQgZmlsZTogJXMiLAotCQkJCSBnZXRfY2ZwX2Vy cm9yKGN0eC0+ZGF0YUZIKSk7CisJCQkJIENGSC0+Z2V0X2Vycm9yX2Z1bmMoQ0ZIKSk7CiAJfQog fQogCkBAIC01NDUsMTIgKzU0OCwxMyBAQCBzdGF0aWMgdm9pZAogX1JlYWRCdWYoQXJjaGl2ZUhh bmRsZSAqQUgsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAo bGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9 IGN0eC0+ZGF0YUZIOwogCiAJLyoKLQkgKiBJZiB0aGVyZSB3YXMgYW4gSS9PIGVycm9yLCB3ZSBh bHJlYWR5IGV4aXRlZCBpbiBjZnJlYWQoKSwgc28gaGVyZSB3ZQorCSAqIElmIHRoZXJlIHdhcyBh biBJL08gZXJyb3IsIHdlIGFscmVhZHkgZXhpdGVkIGluIHJlYWRGKCksIHNvIGhlcmUgd2UKIAkg KiBleGl0IG9uIHNob3J0IHJlYWRzLgogCSAqLwotCWlmIChjZnJlYWQoYnVmLCBsZW4sIGN0eC0+ ZGF0YUZIKSAhPSBsZW4pCisJaWYgKENGSC0+cmVhZF9mdW5jKGJ1ZiwgbGVuLCBDRkgpICE9IGxl bikKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZp bGUiKTsKIH0KIApAQCAtNTczLDcgKzU3Nyw3IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRs ZSAqQUgpCiAKIAlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVXcml0ZSkKIAl7Ci0JCWNmcAkJICAg KnRvY0ZIOworCQlDb21wcmVzc0ZpbGVIYW5kbGUgKnRvY0ZIOwogCQlwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMgPSB7MH07CiAJCWNoYXIJCWZuYW1lW01BWFBHUEFU SF07CiAKQEAgLTU4NCw4ICs1ODgsOCBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFI KQogCiAJCS8qIFRoZSBUT0MgaXMgYWx3YXlzIGNyZWF0ZWQgdW5jb21wcmVzc2VkICovCiAJCWNv bXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQkJdG9jRkgg PSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCBjb21wcmVzc2lvbl9zcGVjKTsKLQkJ aWYgKHRvY0ZIID09IE5VTEwpCisJCXRvY0ZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb21w cmVzc2lvbl9zcGVjKTsKKwkJaWYgKHRvY0ZILT5vcGVuX3dyaXRlX2Z1bmMoZm5hbWUsIFBHX0JJ TkFSWV9XLCB0b2NGSCkpCiAJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUg XCIlc1wiOiAlbSIsIGZuYW1lKTsKIAkJY3R4LT5kYXRhRkggPSB0b2NGSDsKIApAQCAtNTk4LDcg KzYwMiw3IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCVdyaXRlSGVhZChB SCk7CiAJCUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5OwogCQlXcml0ZVRvYyhBSCk7Ci0JCWlm IChjZmNsb3NlKHRvY0ZIKSAhPSAwKQorCQlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKHRvY0ZI KSAhPSAwKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBUT0MgZmlsZTogJW0iKTsKIAkJ V3JpdGVEYXRhQ2h1bmtzKEFILCBjdHgtPnBzdGF0ZSk7CiAKQEAgLTY0OSw4ICs2NTMsOCBAQCBf U3RhcnRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAogCS8qIFRoZSBMTyBU T0MgZmlsZSBpcyBuZXZlciBjb21wcmVzc2VkICovCiAJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0 aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwotCWN0eC0+TE9zVG9jRkggPSBjZm9wZW5fd3JpdGUo Zm5hbWUsICJhYiIsIGNvbXByZXNzaW9uX3NwZWMpOwotCWlmIChjdHgtPkxPc1RvY0ZIID09IE5V TEwpCisJY3R4LT5MT3NUb2NGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29tcHJlc3Npb25f c3BlYyk7CisJaWYgKGN0eC0+TE9zVG9jRkgtPm9wZW5fd3JpdGVfZnVuYyhmbmFtZSwgImFiIiwg Y3R4LT5MT3NUb2NGSCkpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBc IiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBAIC02NjcsOSArNjcxLDggQEAgX1N0YXJ0TE8oQXJj aGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9pZCkKIAogCXNucHJpbnRmKGZuYW1l LCBNQVhQR1BBVEgsICIlcy9ibG9iXyV1LmRhdCIsIGN0eC0+ZGlyZWN0b3J5LCBvaWQpOwogCi0J Y3R4LT5kYXRhRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCBBSC0+Y29tcHJl c3Npb25fc3BlYyk7Ci0KLQlpZiAoY3R4LT5kYXRhRkggPT0gTlVMTCkKKwljdHgtPmRhdGFGSCA9 IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPmNvbXByZXNzaW9uX3NwZWMpOworCWlmIChjdHgt PmRhdGFGSC0+b3Blbl93cml0ZV9mdW5jKGZuYW1lLCBQR19CSU5BUllfVywgY3R4LT5kYXRhRkgp KQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZu YW1lKTsKIH0KIApAQCAtNjgyLDE4ICs2ODUsMTkgQEAgc3RhdGljIHZvaWQKIF9FbmRMTyhBcmNo aXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBPaWQgb2lkKQogewogCWxjbENvbnRleHQgKmN0 eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAq Q0ZIID0gY3R4LT5MT3NUb2NGSDsKIAljaGFyCQlidWZbNTBdOwogCWludAkJCWxlbjsKIAotCS8q IENsb3NlIHRoZSBMTyBkYXRhIGZpbGUgaXRzZWxmICovCi0JaWYgKGNmY2xvc2UoY3R4LT5kYXRh RkgpICE9IDApCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgTE8gZGF0YSBmaWxlOiAlbSIp OworCS8qIENsb3NlIHRoZSBCTE9CIGRhdGEgZmlsZSBpdHNlbGYgKi8KKwlpZiAoRW5kQ29tcHJl c3NGaWxlSGFuZGxlKGN0eC0+ZGF0YUZIKSAhPSAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNs b3NlIGJsb2IgZGF0YSBmaWxlOiAlbSIpOwogCWN0eC0+ZGF0YUZIID0gTlVMTDsKIAogCS8qIHJl Z2lzdGVyIHRoZSBMTyBpbiBibG9icy50b2MgKi8KIAlsZW4gPSBzbnByaW50ZihidWYsIHNpemVv ZihidWYpLCAiJXUgYmxvYl8ldS5kYXRcbiIsIG9pZCwgb2lkKTsKLQlpZiAoY2Z3cml0ZShidWYs IGxlbiwgY3R4LT5MT3NUb2NGSCkgIT0gbGVuKQotCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRl IHRvIExPcyBUT0MgZmlsZSIpOworCWlmIChDRkgtPndyaXRlX2Z1bmMoYnVmLCBsZW4sIENGSCkg IT0gbGVuKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIGJsb2JzIFRPQyBmaWxlIik7 CiB9CiAKIC8qCkBAIC03MDYsOCArNzEwLDggQEAgX0VuZExPcyhBcmNoaXZlSGFuZGxlICpBSCwg VG9jRW50cnkgKnRlKQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5m b3JtYXREYXRhOwogCi0JaWYgKGNmY2xvc2UoY3R4LT5MT3NUb2NGSCkgIT0gMCkKLQkJcGdfZmF0 YWwoImNvdWxkIG5vdCBjbG9zZSBMT3MgVE9DIGZpbGU6ICVtIik7CisJaWYgKEVuZENvbXByZXNz RmlsZUhhbmRsZShjdHgtPkxPc1RvY0ZIKSAhPSAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNs b3NlIGJsb2JzIFRPQyBmaWxlOiAlbSIpOwogCWN0eC0+TE9zVG9jRkggPSBOVUxMOwogfQogCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4vcGdf ZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IGQ5MjI0N2M5MTUuLjc4NDU0OTI4Y2MgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC05NCw3ICs5NCw3IEBAIG15ICVwZ2R1bXBfcnVucyA9 ICgKIAkJCWNvbW1hbmQgPT4gWwogCQkJCSdwZ19yZXN0b3JlJywgJy1sJywgIiR0ZW1wZGlyL2Nv bXByZXNzaW9uX2d6aXBfY3VzdG9tLmR1bXAiLAogCQkJXSwKLQkJCWV4cGVjdGVkID0+IHFyL0Nv bXByZXNzaW9uOiAxLywKKwkJCWV4cGVjdGVkID0+IHFyL0NvbXByZXNzaW9uOiBnemlwLywKIAkJ CW5hbWUgICAgID0+ICdkYXRhIGNvbnRlbnQgaXMgZ3ppcC1jb21wcmVzc2VkJwogCQl9LAogCX0s CkBAIC0yMzksOCArMjM5LDggQEAgbXkgJXBnZHVtcF9ydW5zID0gKAogCQkJY29tbWFuZCA9Pgog CQkJICBbICdwZ19yZXN0b3JlJywgJy1sJywgIiR0ZW1wZGlyL2RlZmF1bHRzX2N1c3RvbV9mb3Jt YXQuZHVtcCIsIF0sCiAJCQlleHBlY3RlZCA9PiAkc3VwcG9ydHNfZ3ppcCA/Ci0JCQlxci9Db21w cmVzc2lvbjogLTEvIDoKLQkJCXFyL0NvbXByZXNzaW9uOiAwLywKKwkJCXFyL0NvbXByZXNzaW9u OiBnemlwLyA6CisJCQlxci9Db21wcmVzc2lvbjogbm9uZS8sCiAJCQluYW1lID0+ICdkYXRhIGNv bnRlbnQgaXMgZ3ppcC1jb21wcmVzc2VkIGJ5IGRlZmF1bHQgaWYgYXZhaWxhYmxlJywKIAkJfSwK IAl9LApAQCAtMjY0LDggKzI2NCw4IEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWNvbW1hbmQg PT4KIAkJCSAgWyAncGdfcmVzdG9yZScsICctbCcsICIkdGVtcGRpci9kZWZhdWx0c19kaXJfZm9y bWF0IiwgXSwKIAkJCWV4cGVjdGVkID0+ICRzdXBwb3J0c19nemlwID8KLQkJCXFyL0NvbXByZXNz aW9uOiAtMS8gOgotCQkJcXIvQ29tcHJlc3Npb246IDAvLAorCQkJcXIvQ29tcHJlc3Npb246IGd6 aXAvIDoKKwkJCXFyL0NvbXByZXNzaW9uOiBub25lLywKIAkJCW5hbWUgPT4gJ2RhdGEgY29udGVu dCBpcyBnemlwLWNvbXByZXNzZWQgYnkgZGVmYXVsdCcsCiAJCX0sCiAJCWdsb2JfcGF0dGVybnMg PT4gWwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbW9uL2NvbXByZXNzaW9uLmggYi9zcmMv aW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaAppbmRleCA5YTQ3MWU0MGFhLi5kNDRlYmIwNmNj IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaAorKysgYi9zcmMv aW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaApAQCAtMTQsNiArMTQsMTAgQEAKICNpZm5kZWYg UEdfQ09NUFJFU1NJT05fSAogI2RlZmluZSBQR19DT01QUkVTU0lPTl9ICiAKKy8qCisgKiBUaGVz ZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBkaXNjLCBmb3IgZXhhbXBsZSBpbiBmaWxlcyBnZW5lcmF0 ZWQgYnkgcGdfZHVtcC4KKyAqIENyZWF0ZSB0aGUgbmVjZXNzYXJ5IGJhY2t3YXJkcyBjb21wYXRp YmlsaXR5IGxheWVycyBpZiB0aGVpciBvcmRlciBjaGFuZ2VzLgorICovCiB0eXBlZGVmIGVudW0g cGdfY29tcHJlc3NfYWxnb3JpdGhtCiB7CiAJUEdfQ09NUFJFU1NJT05fTk9ORSwKZGlmZiAtLWdp dCBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sgYi9zcmMvdG9vbHMvcGdpbmNs dWRlL2NwbHVzcGx1c2NoZWNrCmluZGV4IGU1MmZlOWY1MDkuLmRiNDI5NDc0YTIgMTAwNzU1Ci0t LSBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKKysrIGIvc3JjL3Rvb2xzL3Bn aW5jbHVkZS9jcGx1c3BsdXNjaGVjawpAQCAtMTUwLDcgKzE1MCw5IEBAIGRvCiAKIAkjIHBnX2R1 bXAgaXMgbm90IEMrKy1jbGVhbiBiZWNhdXNlIGl0IHVzZXMgInB1YmxpYyIgYW5kICJuYW1lc3Bh Y2UiCiAJIyBhcyBmaWVsZCBuYW1lcywgd2hpY2ggaXMgdW5mb3J0dW5hdGUgYnV0IHdlIHdvbid0 IGNoYW5nZSBpdCBub3cuCisJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6 aXAuaCAmJiBjb250aW51ZQogCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19p by5oICYmIGNvbnRpbnVlCisJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25v bmUuaCAmJiBjb250aW51ZQogCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5o ICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu aCAmJiBjb250aW51ZQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA0NWZjNTc1OWNlLi4x ZDU5YjgyMDAzIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAor KysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNDI4LDYgKzQyOCw3IEBA IENvbXBpbGVkRXhwclN0YXRlCiBDb21wb3NpdGVJT0RhdGEKIENvbXBvc2l0ZVR5cGVTdG10CiBD b21wb3VuZEFmZml4RmxhZworQ29tcHJlc3NGaWxlSGFuZGxlCiBDb21wcmVzc2lvbkxvY2F0aW9u CiBDb21wcmVzc29yU3RhdGUKIENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdApAQCAtMTAzNCw2ICsx MDM1LDcgQEAgR3VjU3RhY2sKIEd1Y1N0YWNrU3RhdGUKIEd1Y1N0cmluZ0Fzc2lnbkhvb2sKIEd1 Y1N0cmluZ0NoZWNrSG9vaworR3ppcENvbXByZXNzb3JTdGF0ZQogSEFORExFCiBIQVNIQUNUSU9O CiBIQVNIQlVDS0VUCi0tIAoyLjM0LjEKCg== --b1_mldhg9jehOXL00sI7C0ekpX4sxnwEyBnKWf54SrZAA Content-Type: text/x-patch; name=v28-0001-Prepare-pg_dump-internals-for-additional-compres.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v28-0001-Prepare-pg_dump-internals-for-additional-compres.patch RnJvbSAxZGMyNThlN2Q5OTUxNDU4OTRiMjg4ZDMwZWJkODE5ZGU2OTRkZGZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFRodSwgMTYgRmViIDIwMjMgMTA6NDc6NTkgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy OCAxLzNdIFByZXBhcmUgcGdfZHVtcCBpbnRlcm5hbHMgZm9yIGFkZGl0aW9uYWwgY29tcHJlc3Np b24KIG1ldGhvZHMuCgpDb21taXQgIGJmOWFhNDkwZGIgaW50cm9kdWNlZCBjZnAgaW4gY29tcHJl c3NfaW8ue2MsaH0gd2l0aCB0aGUgaW50ZW50IG9mCnVuaWZ5aW5nIGNvbXByZXNzaW9uIHJlbGF0 ZWQgY29kZSBhbmQgYWxsb3cgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYWRkaXRpb25hbAphcmNo aXZlIGZvcm1hdHMuIEhvd2V2ZXIsIHBnX2JhY2t1cF9hcmNoaXZlci5jIHdhcyBub3QgdXNpbmcg dGhhdCBBUEkuIFRoaXMKY29tbWl0IHRlYWNoZXMgcGdfYmFja3VwX2FyY2hpdmVyLmMgYWJvdXQg aXQgYW5kIGlzIHVzaW5nIGl0IHRocm91Z2hvdXQuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2lvLmMgICAgICAgIHwgIDkyICsrKysrKysrKysrKysrKy0tLQogc3JjL2Jpbi9wZ19kdW1w L2NvbXByZXNzX2lvLmggICAgICAgIHwgICA0ICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuYyB8IDEzOCArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCB8ICAyNyArLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwg MTMzIGluc2VydGlvbnMoKyksIDEyOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvY29tcHJlc3NfaW8uYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCmlu ZGV4IDdhMmM4MGJiYzQuLmUxNzMzY2U1N2MgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19pby5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC01Niw2 ICs1NiwzNiBAQAogI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCiAjaW5jbHVkZSAicGdfYmFja3Vw X3V0aWxzLmgiCiAKKyNpZmRlZiBIQVZFX0xJQloKKyNpbmNsdWRlIDx6bGliLmg+CisjZW5kaWYK KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBHZW5lcmljIGZ1bmN0aW9ucworICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworY2hhciAqCitzdXBwb3J0c19jb21wcmVzc2lvbihj b25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJY29u c3QgcGdfY29tcHJlc3NfYWxnb3JpdGhtCWFsZ29yaXRobSA9IGNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtOworCWJvb2wJCQkJCQlzdXBwb3J0ZWQgPSBmYWxzZTsKKworCWlmIChhbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKKwkJc3VwcG9ydGVkID0gdHJ1ZTsKKyNpZmRlZiBIQVZF X0xJQloKKwlpZiAoYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCXN1cHBvcnRl ZCA9IHRydWU7CisjZW5kaWYKKworCWlmICghc3VwcG9ydGVkKQorCQlyZXR1cm4gcHNwcmludGYo InRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwKKwkJCQkJ CWdldF9jb21wcmVzc19hbGdvcml0aG1fbmFtZShhbGdvcml0aG0pKTsKKworCXJldHVybiBOVUxM OworfQorCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ29tcHJlc3NvciBBUEkKICAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDkwLDE2ICs1MjAsMTkgQEAgY2ZvcGVuX3dyaXRl KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiB9CiAKIC8qCi0gKiBPcGVucyBm aWxlICdwYXRoJyBpbiAnbW9kZScuIElmIGNvbXByZXNzaW9uIGlzIEdaSVAsIHRoZSBmaWxlCi0g KiBpcyBvcGVuZWQgd2l0aCBsaWJ6IGd6b3BlbigpLCBvdGhlcndpc2Ugd2l0aCBwbGFpbiBmb3Bl bigpLgorICogVGhpcyBpcyB0aGUgd29ya2hvcnNlIGZvciBjZm9wZW4oKSBvciBjZmRvcGVuKCku IEl0IG9wZW5zIGZpbGUgJ3BhdGgnIG9yCisgKiBhc3NvY2lhdGVzIGEgc3RyZWFtICdmZCcsIGlm ICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlwdG9yLCBpbiAnbW9kZScuIFRoZQorICogZGVzY3JpcHRv ciBpcyBub3QgZHVwJ2VkIGFuZCBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8g ZG8gc28uCisgKiBUaGUgY2FsbGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhlICdjb21wcmVzc19hbGdv cml0aG0nIGlzIHN1cHBvcnRlZCBieSB0aGUKKyAqIGN1cnJlbnQgYnVpbGQuCiAgKgogICogT24g ZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgogICovCi1j ZnAgKgotY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JICAgY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorc3RhdGljIGNm cCAqCitjZm9wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFy ICptb2RlLAorCQkJCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykK IHsKLQljZnAJCSAgICpmcCA9IHBnX21hbGxvYyhzaXplb2YoY2ZwKSk7CisJY2ZwCQkgICAqZnAg PSBwZ19tYWxsb2MwKHNpemVvZihjZnApKTsKIAogCWlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29y aXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQogCXsKQEAgLTUxMSwxNSArNTQ0LDIwIEBAIGNm b3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogCiAJCQlzbnByaW50Ziht b2RlX2NvbXByZXNzaW9uLCBzaXplb2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKIAkJCQkJ IG1vZGUsIGNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOwotCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6 b3BlbihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKKwkJCWlmIChmZCA+PSAwKQorCQkJCWZwLT5j b21wcmVzc2VkZnAgPSBnemRvcGVuKGZkLCBtb2RlX2NvbXByZXNzaW9uKTsKKwkJCWVsc2UKKwkJ CQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGVfY29tcHJlc3Npb24pOwogCQl9 CiAJCWVsc2UKIAkJewogCQkJLyogZG9uJ3Qgc3BlY2lmeSBhIGxldmVsLCBqdXN0IHVzZSB0aGUg emxpYiBkZWZhdWx0ICovCi0JCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGUp OworCQkJaWYgKGZkID49IDApCisJCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6ZG9wZW4oZmQsIG1v ZGUpOworCQkJZWxzZQorCQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwgbW9kZSk7 CiAJCX0KIAotCQlmcC0+dW5jb21wcmVzc2VkZnAgPSBOVUxMOwogCQlpZiAoZnAtPmNvbXByZXNz ZWRmcCA9PSBOVUxMKQogCQl7CiAJCQlmcmVlX2tlZXBfZXJybm8oZnApOwpAQCAtNTMxLDEwICs1 NjksMTEgQEAgY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiAJfQog CWVsc2UKIAl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWZwLT5jb21wcmVzc2VkZnAgPSBOVUxMOwot I2VuZGlmCi0JCWZwLT51bmNvbXByZXNzZWRmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCQlpZiAo ZmQgPj0gMCkKKwkJCWZwLT51bmNvbXByZXNzZWRmcCA9IGZkb3BlbihmZCwgbW9kZSk7CisJCWVs c2UKKwkJCWZwLT51bmNvbXByZXNzZWRmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCiAJCWlmIChm cC0+dW5jb21wcmVzc2VkZnAgPT0gTlVMTCkKIAkJewogCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsK QEAgLTU0NSw2ICs1ODQsMzMgQEAgY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIg Km1vZGUsCiAJcmV0dXJuIGZwOwogfQogCisvKgorICogT3BlbnMgZmlsZSAncGF0aCcgaW4gJ21v ZGUnIGFuZCBjb21wcmVzc2lvbiBhcyBkZWZpbmVkIGluCisgKiBjb21wcmVzc2lvbl9zcGVjLiBU aGUgY2FsbGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhlIGNvbXByZXNzaW9uCisgKiBpcyBzdXBwb3J0 ZWQgYnkgdGhlIGN1cnJlbnQgYnVpbGQuCisgKgorICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwg d2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgorICovCitjZnAgKgorY2ZvcGVuKGNvbnN0IGNo YXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCisJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCXJldHVybiBjZm9wZW5faW50ZXJuYWwocGF0 aCwgLTEsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOworfQorCisvKgorICogQXNzb2NpYXRlcyBh IHN0cmVhbSAnZmQnLCBpZiAnZmQnIGlzIGEgdmFsaWQgZGVzY3JpcHRvciwgaW4gJ21vZGUnCisg KiBhbmQgY29tcHJlc3Npb24gYXMgZGVmaW5lZCBpbiBjb21wcmVzc2lvbl9zcGVjLiBUaGUgY2Fs bGVyIG11c3QKKyAqIHZlcmlmeSB0aGF0IHRoZSBjb21wcmVzc2lvbiBpcyBzdXBwb3J0ZWQgYnkg dGhlIGN1cnJlbnQgYnVpbGQuCisgKgorICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBh biBlcnJvciBjb2RlIGluIGVycm5vLgorICovCitjZnAgKgorY2Zkb3BlbihpbnQgZmQsIGNvbnN0 IGNoYXIgKm1vZGUsCisJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Np b25fc3BlYykKK3sKKwlyZXR1cm4gY2ZvcGVuX2ludGVybmFsKE5VTEwsIGZkLCBtb2RlLCBjb21w cmVzc2lvbl9zcGVjKTsKK30KIAogaW50CiBjZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2Zw ICpmcCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oIGIvc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2lvLmgKaW5kZXggYTQyOWRjNDc4OS4uOGJlYjEwNThlYyAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmgKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2lvLmgKQEAgLTIxLDYgKzIxLDggQEAKICNkZWZpbmUgWkxJQl9PVVRfU0la RQk0MDk2CiAjZGVmaW5lIFpMSUJfSU5fU0laRQk0MDk2CiAKK2V4dGVybiBjaGFyICpzdXBwb3J0 c19jb21wcmVzc2lvbihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpOworCiAvKiBQcm90b3R5cGUgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIFdyaXRlRGF0 YVRvQXJjaGl2ZSgpICovCiB0eXBlZGVmIHZvaWQgKCpXcml0ZUZ1bmMpIChBcmNoaXZlSGFuZGxl ICpBSCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIApAQCAtNTQsNiArNTYsOCBAQCB0 eXBlZGVmIHN0cnVjdCBjZnAgY2ZwOwogCiBleHRlcm4gY2ZwICpjZm9wZW4oY29uc3QgY2hhciAq cGF0aCwgY29uc3QgY2hhciAqbW9kZSwKIAkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOworZXh0ZXJuIGNmcCAqY2Zkb3BlbihpbnQgZmQsIGNv bnN0IGNoYXIgKm1vZGUsCisJCQkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29t cHJlc3Npb25fc3BlYyk7CiBleHRlcm4gY2ZwICpjZm9wZW5fcmVhZChjb25zdCBjaGFyICpwYXRo LCBjb25zdCBjaGFyICptb2RlKTsKIGV4dGVybiBjZnAgKmNmb3Blbl93cml0ZShjb25zdCBjaGFy ICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogCQkJCQkJIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMKaW5kZXggMjY5YmZjZTAxOS4uZTAyY2UyMmRiMiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuYwpAQCAtMzEsNiArMzEsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24v c3RyaW5nLmgiCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKICNpbmNsdWRlICJkdW1wdXRpbHMu aCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJsaWIvc3Ry aW5naW5mby5oIgpAQCAtNDMsMTMgKzQ0LDYgQEAKICNkZWZpbmUgVEVYVF9EVU1QX0hFQURFUiAi LS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgZHVtcFxuLS1cblxuIgogI2RlZmluZSBURVhUX0RV TVBBTExfSEVBREVSICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0t XG5cbiIKIAotLyogc3RhdGUgbmVlZGVkIHRvIHNhdmUvcmVzdG9yZSBhbiBhcmNoaXZlJ3Mgb3V0 cHV0IHRhcmdldCAqLwotdHlwZWRlZiBzdHJ1Y3QgX291dHB1dENvbnRleHQKLXsKLQl2b2lkCSAg ICpPRjsKLQlpbnQJCQlnek91dDsKLX0gT3V0cHV0Q29udGV4dDsKLQogLyoKICAqIFN0YXRlIGZv ciB0cmFja2luZyBUb2NFbnRyeXMgdGhhdCBhcmUgcmVhZHkgdG8gcHJvY2VzcyBkdXJpbmcgYSBw YXJhbGxlbAogICogcmVzdG9yZS4gIChUaGlzIHVzZWQgdG8gYmUgYSBsaXN0LCBhbmQgd2Ugc3Rp bGwgY2FsbCBpdCB0aGF0LCB0aG91Z2ggbm93CkBAIC0xMDEsOCArOTUsOCBAQCBzdGF0aWMgdm9p ZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0 YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0aW0pOwogc3Rh dGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFt ZSwKIAkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3Nw ZWMpOwotc3RhdGljIE91dHB1dENvbnRleHQgU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7 Ci1zdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBPdXRwdXRDb250 ZXh0IHNhdmVkQ29udGV4dCk7CitzdGF0aWMgY2ZwICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUg KkFIKTsKK3N0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNmcCAq c2F2ZWRPdXRwdXQpOwogCiBzdGF0aWMgaW50CXJlc3RvcmVfdG9jX2VudHJ5KEFyY2hpdmVIYW5k bGUgKkFILCBUb2NFbnRyeSAqdGUsIGJvb2wgaXNfcGFyYWxsZWwpOwogc3RhdGljIHZvaWQgcmVz dG9yZV90b2NfZW50cmllc19wcmVmb3JrKEFyY2hpdmVIYW5kbGUgKkFILApAQCAtMjc3LDExICsy NzEsOCBAQCBDbG9zZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCUFILT5DbG9zZVB0cihBSCk7CiAK IAkvKiBDbG9zZSB0aGUgb3V0cHV0ICovCi0JZXJybm8gPSAwOwkJCQkJLyogaW4gY2FzZSBnemNs b3NlKCkgZG9lc24ndCBzZXQgaXQgKi8KLQlpZiAoQUgtPmd6T3V0KQotCQlyZXMgPSBHWkNMT1NF KEFILT5PRik7Ci0JZWxzZSBpZiAoQUgtPk9GICE9IHN0ZG91dCkKLQkJcmVzID0gZmNsb3NlKEFI LT5PRik7CisJZXJybm8gPSAwOworCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKIAogCWlmIChyZXMg IT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKQEAg LTM2Myw3ICszNTQsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJUmVzdG9yZU9w dGlvbnMgKnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CiAJYm9vbAkJcGFyYWxsZWxfbW9kZTsKIAlU b2NFbnRyeSAgICp0ZTsKLQlPdXRwdXRDb250ZXh0IHNhdjsKKwljZnAJCSAgICpzYXY7CiAKIAlB SC0+c3RhZ2UgPSBTVEFHRV9JTklUSUFMSVpJTkc7CiAKQEAgLTM5MSwxNyArMzgyLDIxIEBAIFJl c3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkvKgogCSAqIE1ha2Ugc3VyZSB3ZSB3b24ndCBu ZWVkIChkZSljb21wcmVzc2lvbiB3ZSBoYXZlbid0IGdvdAogCSAqLwotI2lmbmRlZiBIQVZFX0xJ QloKLQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9O X0daSVAgJiYKLQkJQUgtPlByaW50VG9jRGF0YVB0ciAhPSBOVUxMKQorCWlmIChBSC0+UHJpbnRU b2NEYXRhUHRyICE9IE5VTEwpCiAJewogCQlmb3IgKHRlID0gQUgtPnRvYy0+bmV4dDsgdGUgIT0g QUgtPnRvYzsgdGUgPSB0ZS0+bmV4dCkKIAkJewogCQkJaWYgKHRlLT5oYWREdW1wZXIgJiYgKHRl LT5yZXFzICYgUkVRX0RBVEEpICE9IDApCi0JCQkJcGdfZmF0YWwoImNhbm5vdCByZXN0b3JlIGZy b20gY29tcHJlc3NlZCBhcmNoaXZlIChjb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkIGluIHRoaXMg aW5zdGFsbGF0aW9uKSIpOworCQkJeworCQkJCWNoYXIgKmVycm1zZyA9IHN1cHBvcnRzX2NvbXBy ZXNzaW9uKEFILT5jb21wcmVzc2lvbl9zcGVjKTsKKwkJCQlpZiAoZXJybXNnKQorCQkJCQlwZ19m YXRhbCgiY2Fubm90IHJlc3RvcmUgZGF0YSBmcm9tIGNvbXByZXNzZWQgYXJjaGl2ZSAoJXMpIiwK KwkJCQkJCQkgIGVycm1zZyk7CisJCQkJZWxzZQorCQkJCQlicmVhazsKKwkJCX0KIAkJfQogCX0K LSNlbmRpZgogCiAJLyoKIAkgKiBQcmVwYXJlIGluZGV4IGFycmF5cywgc28gd2UgY2FuIGFzc3Vt ZSB3ZSBoYXZlIHRoZW0gdGhyb3VnaG91dCByZXN0b3JlLgpAQCAtMTEzMyw3ICsxMTI4LDcgQEAg UHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAlUb2NFbnRyeSAgICp0ZTsKIAlwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc2lvbl9zcGVjID0gezB9OwogCXRlU2VjdGlv bgljdXJTZWN0aW9uOwotCU91dHB1dENvbnRleHQgc2F2OworCWNmcAkJICAgKnNhdjsKIAljb25z dCBjaGFyICpmbXROYW1lOwogCWNoYXIJCXN0YW1wX3N0cls2NF07CiAKQEAgLTE1MDgsNTggKzE1 MDMsMzIgQEAgc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qg Y2hhciAqZmlsZW5hbWUsCiAJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKQogewotCWludAkJCWZuOworCWNvbnN0IGNoYXIgKm1vZGU7CisJaW50CQkJ Zm4gPSAtMTsKIAogCWlmIChmaWxlbmFtZSkKIAl7CiAJCWlmIChzdHJjbXAoZmlsZW5hbWUsICIt IikgPT0gMCkKIAkJCWZuID0gZmlsZW5vKHN0ZG91dCk7Ci0JCWVsc2UKLQkJCWZuID0gLTE7CiAJ fQogCWVsc2UgaWYgKEFILT5GSCkKIAkJZm4gPSBmaWxlbm8oQUgtPkZIKTsKIAllbHNlIGlmIChB SC0+ZlNwZWMpCiAJewotCQlmbiA9IC0xOwogCQlmaWxlbmFtZSA9IEFILT5mU3BlYzsKIAl9CiAJ ZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQpOwogCi0JLyogSWYgY29tcHJlc3Npb24gZXhwbGlj aXRseSByZXF1ZXN0ZWQsIHVzZSBnem9wZW4gKi8KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoY29t cHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQl7Ci0JCWNo YXIJCWZtb2RlWzE0XTsKKwlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJCW1vZGUg PSBQR19CSU5BUllfQTsKKwllbHNlCisJCW1vZGUgPSBQR19CSU5BUllfVzsKIAotCQkvKiBEb24n dCB1c2UgUEdfQklOQVJZX3ggc2luY2UgdGhpcyBpcyB6bGliICovCi0JCXNwcmludGYoZm1vZGUs ICJ3YiVkIiwgY29tcHJlc3Npb25fc3BlYy5sZXZlbCk7Ci0JCWlmIChmbiA+PSAwKQotCQkJQUgt Pk9GID0gZ3pkb3BlbihkdXAoZm4pLCBmbW9kZSk7Ci0JCWVsc2UKLQkJCUFILT5PRiA9IGd6b3Bl bihmaWxlbmFtZSwgZm1vZGUpOwotCQlBSC0+Z3pPdXQgPSAxOwotCX0KKwlpZiAoZm4gPj0gMCkK KwkJQUgtPk9GID0gY2Zkb3BlbihkdXAoZm4pLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKIAll bHNlCi0jZW5kaWYKLQl7CQkJCQkJCS8qIFVzZSBmb3BlbiAqLwotCQlpZiAoQUgtPm1vZGUgPT0g YXJjaE1vZGVBcHBlbmQpCi0JCXsKLQkJCWlmIChmbiA+PSAwKQotCQkJCUFILT5PRiA9IGZkb3Bl bihkdXAoZm4pLCBQR19CSU5BUllfQSk7Ci0JCQllbHNlCi0JCQkJQUgtPk9GID0gZm9wZW4oZmls ZW5hbWUsIFBHX0JJTkFSWV9BKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWlmIChmbiA+PSAwKQot CQkJCUFILT5PRiA9IGZkb3BlbihkdXAoZm4pLCBQR19CSU5BUllfVyk7Ci0JCQllbHNlCi0JCQkJ QUgtPk9GID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJfQotCQlBSC0+Z3pPdXQg PSAwOwotCX0KKwkJQUgtPk9GID0gY2ZvcGVuKGZpbGVuYW1lLCBtb2RlLCBjb21wcmVzc2lvbl9z cGVjKTsKIAogCWlmICghQUgtPk9GKQogCXsKQEAgLTE1NzAsMzMgKzE1MzksMjQgQEAgU2V0T3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAl9CiB9CiAKLXN0 YXRpYyBPdXRwdXRDb250ZXh0CitzdGF0aWMgY2ZwICoKIFNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRs ZSAqQUgpCiB7Ci0JT3V0cHV0Q29udGV4dCBzYXY7Ci0KLQlzYXYuT0YgPSBBSC0+T0Y7Ci0Jc2F2 Lmd6T3V0ID0gQUgtPmd6T3V0OwotCi0JcmV0dXJuIHNhdjsKKwlyZXR1cm4gKGNmcCAqKSBBSC0+ T0Y7CiB9CiAKIHN0YXRpYyB2b2lkCi1SZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBP dXRwdXRDb250ZXh0IHNhdmVkQ29udGV4dCkKK1Jlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAq QUgsIGNmcCAqc2F2ZWRPdXRwdXQpCiB7CiAJaW50CQkJcmVzOwogCi0JZXJybm8gPSAwOwkJCQkJ LyogaW4gY2FzZSBnemNsb3NlKCkgZG9lc24ndCBzZXQgaXQgKi8KLQlpZiAoQUgtPmd6T3V0KQot CQlyZXMgPSBHWkNMT1NFKEFILT5PRik7Ci0JZWxzZQotCQlyZXMgPSBmY2xvc2UoQUgtPk9GKTsK KwllcnJubyA9IDA7CisJcmVzID0gY2ZjbG9zZShBSC0+T0YpOwogCiAJaWYgKHJlcyAhPSAwKQog CQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIG91dHB1dCBmaWxlOiAlbSIpOwogCi0JQUgtPmd6 T3V0ID0gc2F2ZWRDb250ZXh0Lmd6T3V0OwotCUFILT5PRiA9IHNhdmVkQ29udGV4dC5PRjsKKwlB SC0+T0YgPSBzYXZlZE91dHB1dDsKIH0KIAogCkBAIC0xNzIwLDIyICsxNjgwLDE3IEBAIGFod3Jp dGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCBBcmNoaXZlSGFu ZGxlICpBSCkKIAogCQlieXRlc193cml0dGVuID0gc2l6ZSAqIG5tZW1iOwogCX0KLQllbHNlIGlm IChBSC0+Z3pPdXQpCi0JCWJ5dGVzX3dyaXR0ZW4gPSBHWldSSVRFKHB0ciwgc2l6ZSwgbm1lbWIs IEFILT5PRik7CiAJZWxzZSBpZiAoQUgtPkN1c3RvbU91dFB0cikKIAkJYnl0ZXNfd3JpdHRlbiA9 IEFILT5DdXN0b21PdXRQdHIoQUgsIHB0ciwgc2l6ZSAqIG5tZW1iKTsKIAorCS8qCisJICogSWYg d2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQgaXQncyBkaXJlY3QgdG8gREIsIGFuZCB3ZSdyZSBj b25uZWN0ZWQKKwkgKiB0aGVuIHNlbmQgaXQgdG8gdGhlIERCLgorCSAqLworCWVsc2UgaWYgKFJl c3RvcmluZ1RvREIoQUgpKQorCQlieXRlc193cml0dGVuID0gRXhlY3V0ZVNxbENvbW1hbmRCdWYo JkFILT5wdWJsaWMsIChjb25zdCBjaGFyICopIHB0ciwgc2l6ZSAqIG5tZW1iKTsKIAllbHNlCi0J ewotCQkvKgotCQkgKiBJZiB3ZSdyZSBkb2luZyBhIHJlc3RvcmUsIGFuZCBpdCdzIGRpcmVjdCB0 byBEQiwgYW5kIHdlJ3JlCi0JCSAqIGNvbm5lY3RlZCB0aGVuIHNlbmQgaXQgdG8gdGhlIERCLgot CQkgKi8KLQkJaWYgKFJlc3RvcmluZ1RvREIoQUgpKQotCQkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1 dGVTcWxDb21tYW5kQnVmKCZBSC0+cHVibGljLCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBu bWVtYik7Ci0JCWVsc2UKLQkJCWJ5dGVzX3dyaXR0ZW4gPSBmd3JpdGUocHRyLCBzaXplLCBubWVt YiwgQUgtPk9GKSAqIHNpemU7Ci0JfQorCQlieXRlc193cml0dGVuID0gY2Z3cml0ZShwdHIsIHNp emUgKiBubWVtYiwgQUgtPk9GKTsKIAogCWlmIChieXRlc193cml0dGVuICE9IHNpemUgKiBubWVt YikKIAkJV1JJVEVfRVJST1JfRVhJVDsKQEAgLTIyMjQsNiArMjE3OSw3IEBAIF9hbGxvY0FIKGNv bnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAkJIFNldHVwV29y a2VyUHRyVHlwZSBzZXR1cFdvcmtlclB0cikKIHsKIAlBcmNoaXZlSGFuZGxlICpBSDsKKwlwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc19zcGVjID0gezB9OwogCiAJcGdfbG9n X2RlYnVnKCJhbGxvY2F0aW5nIEFIIGZvciAlcywgZm9ybWF0ICVkIiwKIAkJCQkgRmlsZVNwZWMg PyBGaWxlU3BlYyA6ICIoc3RkaW8pIiwgZm10KTsKQEAgLTIyNzcsOCArMjIzMyw4IEBAIF9hbGxv Y0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAltZW1z ZXQoJihBSC0+c3FscGFyc2UpLCAwLCBzaXplb2YoQUgtPnNxbHBhcnNlKSk7CiAKIAkvKiBPcGVu IHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9uIGZvciBBSCBvdXRwdXQgaGFuZGxlICovCi0JQUgt Pmd6T3V0ID0gMDsKLQlBSC0+T0YgPSBzdGRvdXQ7CisJb3V0X2NvbXByZXNzX3NwZWMuYWxnb3Jp dGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKKwlBSC0+T0YgPSBjZmRvcGVuKGR1cChmaWxlbm8o c3Rkb3V0KSksIFBHX0JJTkFSWV9BLCBvdXRfY29tcHJlc3Nfc3BlYyk7CiAKIAkvKgogCSAqIE9u IFdpbmRvd3MsIHdlIG5lZWQgdG8gdXNlIGJpbmFyeSBtb2RlIHRvIHJlYWQvd3JpdGUgbm9uLXRl eHQgZmlsZXMsCkBAIC0zNzEyLDYgKzM2NjgsNyBAQCBXcml0ZUhlYWQoQXJjaGl2ZUhhbmRsZSAq QUgpCiB2b2lkCiBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIHsKKwljaGFyCSAgICplcnJt c2c7CiAJY2hhcgkJdm1haiwKIAkJCQl2bWluLAogCQkJCXZyZXY7CkBAIC0zNzgxLDEwICszNzM4 LDEzIEBAIFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCWVsc2UKIAkJQUgtPmNvbXByZXNz aW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKIAotI2lmbmRlZiBIQVZF X0xJQloKLQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNT SU9OX0daSVApCi0JCXBnX2xvZ193YXJuaW5nKCJhcmNoaXZlIGlzIGNvbXByZXNzZWQsIGJ1dCB0 aGlzIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIC0tIG5vIGRhdGEg d2lsbCBiZSBhdmFpbGFibGUiKTsKLSNlbmRpZgorCWVycm1zZyA9IHN1cHBvcnRzX2NvbXByZXNz aW9uKEFILT5jb21wcmVzc2lvbl9zcGVjKTsKKwlpZiAoZXJybXNnKQorCXsKKwkJcGdfbG9nX3dh cm5pbmcoImFyY2hpdmUgaXMgY29tcHJlc3NlZCwgYnV0IHRoaXMgaW5zdGFsbGF0aW9uIGRvZXMg bm90IHN1cHBvcnQgY29tcHJlc3Npb24gKCVzKSAtLSBubyBkYXRhIHdpbGwgYmUgYXZhaWxhYmxl IiwKKwkJCQkJCWVycm1zZyk7CisJCXBnX2ZyZWUoZXJybXNnKTsKKwl9CiAKIAlpZiAoQUgtPnZl cnNpb24gPj0gS19WRVJTXzFfNCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgK aW5kZXggZjcyNDQ2ZWQ1Yi4uNDcyNWU0OTc0NyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJj aGl2ZXIuaApAQCAtMzIsMzAgKzMyLDYgQEAKIAogI2RlZmluZSBMT0JCVUZTSVpFIDE2Mzg0CiAK LSNpZmRlZiBIQVZFX0xJQloKLSNpbmNsdWRlIDx6bGliLmg+Ci0jZGVmaW5lIEdaQ0xPU0UoZmgp IGd6Y2xvc2UoZmgpCi0jZGVmaW5lIEdaV1JJVEUocCwgcywgbiwgZmgpIGd6d3JpdGUoZmgsIHAs IChuKSAqIChzKSkKLSNkZWZpbmUgR1pSRUFEKHAsIHMsIG4sIGZoKSBnenJlYWQoZmgsIHAsIChu KSAqIChzKSkKLSNkZWZpbmUgR1pFT0YoZmgpCWd6ZW9mKGZoKQotI2Vsc2UKLSNkZWZpbmUgR1pD TE9TRShmaCkgZmNsb3NlKGZoKQotI2RlZmluZSBHWldSSVRFKHAsIHMsIG4sIGZoKSAoZndyaXRl KHAsIHMsIG4sIGZoKSAqIChzKSkKLSNkZWZpbmUgR1pSRUFEKHAsIHMsIG4sIGZoKSBmcmVhZChw LCBzLCBuLCBmaCkKLSNkZWZpbmUgR1pFT0YoZmgpCWZlb2YoZmgpCi0vKiB0aGlzIGlzIGp1c3Qg dGhlIHJlZGVmaW5pdGlvbiBvZiBhIGxpYnogY29uc3RhbnQgKi8KLSNkZWZpbmUgWl9ERUZBVUxU X0NPTVBSRVNTSU9OICgtMSkKLQotdHlwZWRlZiBzdHJ1Y3QgX3pfc3RyZWFtCi17Ci0Jdm9pZAkg ICAqbmV4dF9pbjsKLQl2b2lkCSAgICpuZXh0X291dDsKLQlzaXplX3QJCWF2YWlsX2luOwotCXNp emVfdAkJYXZhaWxfb3V0OwotfSB6X3N0cmVhbTsKLXR5cGVkZWYgel9zdHJlYW0gKnpfc3RyZWFt cDsKLSNlbmRpZgotCiAvKiBEYXRhIGJsb2NrIHR5cGVzICovCiAjZGVmaW5lIEJMS19EQVRBIDEK ICNkZWZpbmUgQkxLX0JMT0JTIDMKQEAgLTMxOSw4ICsyOTUsNyBAQCBzdHJ1Y3QgX2FyY2hpdmVI YW5kbGUKIAogCWNoYXIJICAgKmZTcGVjOwkJCS8qIEFyY2hpdmUgRmlsZSBTcGVjICovCiAJRklM RQkgICAqRkg7CQkJCS8qIEdlbmVyYWwgcHVycG9zZSBmaWxlIGhhbmRsZSAqLwotCXZvaWQJICAg Kk9GOwotCWludAkJCWd6T3V0OwkJCS8qIE91dHB1dCBmaWxlICovCisJdm9pZAkgICAqT0Y7CQkJ CS8qIE91dHB1dCBmaWxlICovCiAKIAlzdHJ1Y3QgX3RvY0VudHJ5ICp0b2M7CQkvKiBIZWFkZXIg b2YgY2lyY3VsYXIgbGlzdCBvZiBUT0MgZW50cmllcyAqLwogCWludAkJCXRvY0NvdW50OwkJLyog TnVtYmVyIG9mIFRPQyBlbnRyaWVzICovCi0tIAoyLjM0LjEKCg== --b1_mldhg9jehOXL00sI7C0ekpX4sxnwEyBnKWf54SrZAA--