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 1pL6bh-0004bL-W9 for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Jan 2023 18:04:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pL6bg-00073E-TQ for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Jan 2023 18:04:16 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pL6bg-00070M-9A for pgsql-hackers@lists.postgresql.org; Thu, 26 Jan 2023 18:04:16 +0000 Received: from mail-40133.protonmail.ch ([185.70.40.133]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pL6bX-0003Gp-70 for pgsql-hackers@lists.postgresql.org; Thu, 26 Jan 2023 18:04:15 +0000 Date: Thu, 26 Jan 2023 18:03:59 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1674756242; x=1675015442; bh=ZwL5ir9GmRz+mSz5pQm5Y7+bQjeXkB/E5UR6UfSyBVw=; 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=Z+DVfk6XZnZvtuc2lnIjLUsLraEEJc7cuPBMzdVS37tUXX0MSLUcG8THrmMihH2Fp O1wgjd1RwaS9GiG5Ggy0/mofRldjOsjIYtYdZzHWHazHGUMqFtQqCtzAo4FP4/azHx vYW1b0oarT8pswvI7hEhZwhoXXnsUEzPfccy/mtqbvLNSdzAu4LyuzcAIJl5As5PPR pKMtxwFC7gE4/4sXi+i01riN4TNXGcSk/Bu/KRQm4G3GeTOH1YNWCIqhFLxuzD7ail ZOBMNoTBlk4h1f/AGtTg4kZLElkHmRIAOdpWR8kwLdEzi/CpZqdyrlsbN6gW1ou6nE w2AENH4Y0e9fQ== To: Michael Paquier From: gkokolatos@pm.me Cc: 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> <20230125014203.GL13860@telsasoft.com> <-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_jyo8WOBl4FLDAOkgiAIpbB7AHDpDBkdzTOH9EXFyQE" 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_jyo8WOBl4FLDAOkgiAIpbB7AHDpDBkdzTOH9EXFyQE Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Thursday, January 26th, 2023 at 12:53 PM, Michael Paquier wrote: >=20 >=20 > On Thu, Jan 26, 2023 at 11:24:47AM +0000, gkokolatos@pm.me wrote: >=20 > > I gave this a little bit of thought. I think that ReadHead should not > > emit a warning, or at least not this warning as it is slightly misleadi= ng. > > It implies that it will automatically turn off data restoration, which = is > > false. Further ahead, the code will fail with a conflicting error messa= ge > > stating that the compression is not available. > >=20 > > Instead, it would be cleaner both for the user and the maintainer to > > move the check in RestoreArchive and make it the sole responsible for > > this logic. >=20 >=20 > - pg_fatal("cannot restore from compressed archive (compression not suppo= rted in this installation)"); > + pg_fatal("cannot restore data from compressed archive (compression not = supported in this installation)"); > Hmm. I don't mind changing this part as you suggest. >=20 > -#ifndef HAVE_LIBZ > - if (AH->compression_spec.algorithm =3D=3D PG_COMPRESSION_GZIP) >=20 > - pg_fatal("archive is compressed, but this installation does not support= compression"); > -#endif > However I think that we'd better keep the warning, as it can offer a > hint when using pg_restore -l not built with compression support if > looking at a dump that has been compressed. Fair enough. Please find v27 attached. Cheers, //Georgios > -- > Michael --b1_jyo8WOBl4FLDAOkgiAIpbB7AHDpDBkdzTOH9EXFyQE Content-Type: text/x-patch; name=v27-0001-Address-regression-in-pg_dump-s-ReadHead.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v27-0001-Address-regression-in-pg_dump-s-ReadHead.patch RnJvbSBkNjhlZjc3OTlmMmNmYjJkOTQ0MDI2NzkxNTdjOGJjZjZiY2E1MjczIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFRodSwgMjYgSmFuIDIwMjMgMTc6NDk6MDYgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NyAxLzRdIEFkZHJlc3MgcmVncmVzc2lvbiBpbiBwZ19kdW1wJ3MgUmVhZEhlYWQKCkNvbW1pdCA1 ZTczYTYwNDggdXBncmFkZWQgdGhlIGNoZWNrIGZvciBzdXBwb3J0ZWQgY29tcHJlc3Npb24gd2hp bGUgcGFyc2luZyBhbgphcmNoaXZlJ3MgaGVhZGVyLCBmcm9tIHdhcm5pbmcgdG8gZmF0YWwuIFBy aW9yIHRvIHRoaXMgY29tbWl0LCBpdCB3YXMgcG9zc2libGUKdG8gcmVzdG9yZSBhIGNvbXByZXNz ZWQgYXJjaGl2ZSdzIHNjaGVtYSBldmVuIHdoZW4gdGhlIGNvbXByZXNzaW9uIHdhcyBub3QKc3Vw cG9ydGVkIGJ5IHRoZSBiaW5hcnkuCgpCZWZvcmUgdGhlIGFib3ZlbWVudGlvbmVkIGNvbW1pdCwg YSB3YXJuaW5nIG1lc3NhZ2Ugd291bGQgYmUgZW1taXRlZDoKCglwZ19sb2dfd2FybmluZygiYXJj aGl2ZSBpcyBjb21wcmVzc2VkLCBidXQgdGhpcyBpbnN0YWxsYXRpb24gZG9lcyBub3Qgc3VwcG9y dCBjb21wcmVzc2lvbiAtLSBubyBkYXRhIHdpbGwgYmUgYXZhaWxhYmxlIik7CgpUaGlzIG1lc3Nh Z2UgaXMgc2xpZ2h0bHkgbWlzcy1sZWFkaW5nLCBhcyBpdCBjYW4gYmUgaW50ZXJwcmV0ZWQgdGhh dCB0aGUgYmluYXJ5CndpbGwgYWN0aXZlbHkgc3dpdGNoIGludG8gc2NoZW1hIG9ubHkgbW9kZSwg d2hpY2ggaXMgbm90IHRoZSBjYXNlLiBJbnN0ZWFkIGEgbmV3CmZhdGFsIG1lc3NhZ2Ugd2lsbCBh cHBlYXIgaW5mb3JtaW5nIHRoYXQgdGhlIGNvbXByZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUuCgpU aGlzIGNvbW1pdCBjaG9vc2VzIHRvIHJlbW92ZSB0aGUgY2hlY2sgaW4gUmVhZEhlYWQgYWx0b2dl dGhlciBpbiBmYXZvdXIgb2YgYQptb3JlIGNvbXByZWhlbnNpdmUgZXJyb3IgbWVzc2FnZSB3aGVu IGNoZWNraW5nIHRoZSBhcmNoaXZlIGZvciBkYXRhLgoKUmVncmVzc2lvbiBzcG90dGVkIGJ5OiBK dXN0aW4gUHJ5emJ5Ci0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIHwg NSArKystLQogMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggYmE1ZTZhY2JiYi4uNGQ5MTE0 Y2RkOCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtMzk4LDcgKzM5OCw3 IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkJZm9yICh0ZSA9IEFILT50b2MtPm5l eHQ7IHRlICE9IEFILT50b2M7IHRlID0gdGUtPm5leHQpCiAJCXsKIAkJCWlmICh0ZS0+aGFkRHVt cGVyICYmICh0ZS0+cmVxcyAmIFJFUV9EQVRBKSAhPSAwKQotCQkJCXBnX2ZhdGFsKCJjYW5ub3Qg cmVzdG9yZSBmcm9tIGNvbXByZXNzZWQgYXJjaGl2ZSAoY29tcHJlc3Npb24gbm90IHN1cHBvcnRl ZCBpbiB0aGlzIGluc3RhbGxhdGlvbikiKTsKKwkJCQlwZ19mYXRhbCgiY2Fubm90IHJlc3RvcmUg ZGF0YSBmcm9tIGNvbXByZXNzZWQgYXJjaGl2ZSAoY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCBp biB0aGlzIGluc3RhbGxhdGlvbikiKTsKIAkJfQogCX0KICNlbmRpZgpAQCAtMzc4NCw5ICszNzg0 LDEwIEBAIFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAjaWZuZGVmIEhBVkVfTElCWgog CWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJ UCkKLQkJcGdfZmF0YWwoImFyY2hpdmUgaXMgY29tcHJlc3NlZCwgYnV0IHRoaXMgaW5zdGFsbGF0 aW9uIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24iKTsKKwkJcGdfbG9nX3dhcm5pbmcoImFy Y2hpdmUgaXMgY29tcHJlc3NlZCwgYnV0IHRoaXMgaW5zdGFsbGF0aW9uIGRvZXMgbm90IHN1cHBv cnQgY29tcHJlc3Npb24iKTsKICNlbmRpZgogCisKIAlpZiAoQUgtPnZlcnNpb24gPj0gS19WRVJT XzFfNCkKIAl7CiAJCXN0cnVjdCB0bQljcnRtOwotLSAKMi4zNC4xCgo= --b1_jyo8WOBl4FLDAOkgiAIpbB7AHDpDBkdzTOH9EXFyQE Content-Type: text/x-patch; name=v27-0004-Add-LZ4-compression-to-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v27-0004-Add-LZ4-compression-to-pg_dump.patch RnJvbSBhNjY3M2RhZGYzZjRlMmYwYWMwODYzMTE4MWZlY2Y5OGE4YWE0OTQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFRodSwgMjYgSmFuIDIwMjMgMTg6MDA6MjMgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NyA0LzRdIEFkZCBMWjQgY29tcHJlc3Npb24gdG8gcGdfZHVtcAoKVGhpcyBpcyBtb3N0bHkgZG9u 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 eCBlNGUwMDhkMmUxLi42NTYzZjY3Njg5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29t 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 ZXggMDIxNzhiZGM1My4uZDM2OGNhY2FiYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuYwpAQCAtMjA3NCw3ICsyMDc0LDcgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZl SGFuZGxlICpBSCkKIAogCQkvKgogCQkgKiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGFyY2hpdmUg aXMgYSBkaXJlY3RvcnkuIElmIHNvLCBjaGVjayBpZgotCQkgKiB0aGVyZSdzIGEgInRvYy5kYXQi IChvciAidG9jLmRhdC5neiIpIGZpbGUgaW4gaXQuCisJCSAqIHRoZXJlJ3MgYSAidG9jLmRhdCIg KG9yICJ0b2MuZGF0LntneixsejR9IikgZmlsZSBpbiBpdC4KIAkJICovCiAJCWlmIChzdGF0KEFI LT5mU3BlYywgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCiAJCXsKQEAgLTIwODQs NiArMjA4NCwxMCBAQCBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQog 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 aXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggN2U2MmM2ZWYzZC4u NjkyYzVjZWIwYiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK KysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEzODMsNiArMTM4Myw3 IEBAIExXTG9jawogTFdMb2NrSGFuZGxlCiBMV0xvY2tNb2RlCiBMV0xvY2tQYWRkZWQKK0xaNENv bXByZXNzb3JTdGF0ZQogTFo0Rl9jb21wcmVzc2lvbkNvbnRleHRfdAogTFo0Rl9kZWNvbXByZXNz T3B0aW9uc190CiBMWjRGX2RlY29tcHJlc3Npb25Db250ZXh0X3QKLS0gCjIuMzQuMQoK --b1_jyo8WOBl4FLDAOkgiAIpbB7AHDpDBkdzTOH9EXFyQE Content-Type: text/x-patch; name=v27-0002-Prepare-pg_dump-internals-for-additional-compres.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v27-0002-Prepare-pg_dump-internals-for-additional-compres.patch RnJvbSAzMTE0MjMwNDIyOTIwMGZjYjE4OWY2ODUyZGFkMjhhODI3MTYwNDQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFRodSwgMjYgSmFuIDIwMjMgMTc6NTg6NTQgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NyAyLzRdIFByZXBhcmUgcGdfZHVtcCBpbnRlcm5hbHMgZm9yIGFkZGl0aW9uYWwgY29tcHJlc3Np b24KIG1ldGhvZHMuCgpDb21taXQgIGJmOWFhNDkwZGIgaW50cm9kdWNlZCBjZnAgaW4gY29tcHJl c3NfaW8ue2MsaH0gd2l0aCB0aGUgaW50ZW50IG9mCnVuaWZ5aW5nIGNvbXByZXNzaW9uIHJlbGF0 ZWQgY29kZSBhbmQgYWxsb3cgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYWRkaXRpb25hbAphcmNo aXZlIGZvcm1hdHMuIEhvd2V2ZXIsIHBnX2JhY2t1cF9hcmNoaXZlci5jIHdhcyBub3QgdXNpbmcg dGhhdCBBUEkuIFRoaXMKY29tbWl0IHRlYWNoZXMgcGdfYmFja3VwX2FyY2hpdmVyLmMgYWJvdXQg aXQgYW5kIGlzIHVzaW5nIGl0IHRocm91Z2hvdXQuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2lvLmMgICAgICAgIHwgIDkyICsrKysrKysrKysrKysrKy0tLQogc3JjL2Jpbi9wZ19kdW1w L2NvbXByZXNzX2lvLmggICAgICAgIHwgICA0ICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuYyB8IDEzOCArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCB8ICAyNyArLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwg MTMyIGluc2VydGlvbnMoKyksIDEyOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmlu 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 LmMKaW5kZXggNGQ5MTE0Y2RkOC4uYTRlNWRmMDgxNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k 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+c3RhZ2UgPSBTVEFHRV9JTklUSUFMSVpJTkc7CiAKQEAgLTM5MSwxNyArMzgyLDIwIEBAIFJl c3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkvKgogCSAqIE1ha2Ugc3VyZSB3ZSB3b24ndCBu ZWVkIChkZSljb21wcmVzc2lvbiB3ZSBoYXZlbid0IGdvdAogCSAqLwotI2lmbmRlZiBIQVZFX0xJ QloKLQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9O X0daSVAgJiYKLQkJQUgtPlByaW50VG9jRGF0YVB0ciAhPSBOVUxMKQorCWlmIChBSC0+UHJpbnRU b2NEYXRhUHRyICE9IE5VTEwpCiAJewogCQlmb3IgKHRlID0gQUgtPnRvYy0+bmV4dDsgdGUgIT0g QUgtPnRvYzsgdGUgPSB0ZS0+bmV4dCkKIAkJewogCQkJaWYgKHRlLT5oYWREdW1wZXIgJiYgKHRl LT5yZXFzICYgUkVRX0RBVEEpICE9IDApCi0JCQkJcGdfZmF0YWwoImNhbm5vdCByZXN0b3JlIGRh dGEgZnJvbSBjb21wcmVzc2VkIGFyY2hpdmUgKGNvbXByZXNzaW9uIG5vdCBzdXBwb3J0ZWQgaW4g dGhpcyBpbnN0YWxsYXRpb24pIik7CisJCQl7CisJCQkJY2hhciAqZXJybXNnID0gc3VwcG9ydHNf Y29tcHJlc3Npb24oQUgtPmNvbXByZXNzaW9uX3NwZWMpOworCQkJCWlmIChlcnJtc2cpCisJCQkJ CXBnX2ZhdGFsKCJjYW5ub3QgcmVzdG9yZSBkYXRhIGZyb20gY29tcHJlc3NlZCBhcmNoaXZlICgl cykiLCBlcnJtc2cpOworCQkJCWVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAl9Ci0jZW5k aWYKIAogCS8qCiAJICogUHJlcGFyZSBpbmRleCBhcnJheXMsIHNvIHdlIGNhbiBhc3N1bWUgd2Ug aGF2ZSB0aGVtIHRocm91Z2hvdXQgcmVzdG9yZS4KQEAgLTExMzMsNyArMTEyNyw3IEBAIFByaW50 VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAJVG9jRW50cnkgICAqdGU7CiAJcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Npb25fc3BlYyA9IHswfTsKIAl0ZVNlY3Rpb24JY3Vy U2VjdGlvbjsKLQlPdXRwdXRDb250ZXh0IHNhdjsKKwljZnAJCSAgICpzYXY7CiAJY29uc3QgY2hh ciAqZm10TmFtZTsKIAljaGFyCQlzdGFtcF9zdHJbNjRdOwogCkBAIC0xNTA4LDU4ICsxNTAyLDMy IEBAIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIg KmZpbGVuYW1lLAogCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Np b25fc3BlYykKIHsKLQlpbnQJCQlmbjsKKwljb25zdCBjaGFyICptb2RlOworCWludAkJCWZuID0g LTE7CiAKIAlpZiAoZmlsZW5hbWUpCiAJewogCQlpZiAoc3RyY21wKGZpbGVuYW1lLCAiLSIpID09 IDApCiAJCQlmbiA9IGZpbGVubyhzdGRvdXQpOwotCQllbHNlCi0JCQlmbiA9IC0xOwogCX0KIAll bHNlIGlmIChBSC0+RkgpCiAJCWZuID0gZmlsZW5vKEFILT5GSCk7CiAJZWxzZSBpZiAoQUgtPmZT cGVjKQogCXsKLQkJZm4gPSAtMTsKIAkJZmlsZW5hbWUgPSBBSC0+ZlNwZWM7CiAJfQogCWVsc2UK IAkJZm4gPSBmaWxlbm8oc3Rkb3V0KTsKIAotCS8qIElmIGNvbXByZXNzaW9uIGV4cGxpY2l0bHkg cmVxdWVzdGVkLCB1c2UgZ3pvcGVuICovCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGNvbXByZXNz aW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JewotCQljaGFyCQlm bW9kZVsxNF07CisJaWYgKEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQorCQltb2RlID0gUEdf QklOQVJZX0E7CisJZWxzZQorCQltb2RlID0gUEdfQklOQVJZX1c7CiAKLQkJLyogRG9uJ3QgdXNl IFBHX0JJTkFSWV94IHNpbmNlIHRoaXMgaXMgemxpYiAqLwotCQlzcHJpbnRmKGZtb2RlLCAid2Il ZCIsIGNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOwotCQlpZiAoZm4gPj0gMCkKLQkJCUFILT5PRiA9 IGd6ZG9wZW4oZHVwKGZuKSwgZm1vZGUpOwotCQllbHNlCi0JCQlBSC0+T0YgPSBnem9wZW4oZmls ZW5hbWUsIGZtb2RlKTsKLQkJQUgtPmd6T3V0ID0gMTsKLQl9CisJaWYgKGZuID49IDApCisJCUFI LT5PRiA9IGNmZG9wZW4oZHVwKGZuKSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7CiAJZWxzZQot I2VuZGlmCi0JewkJCQkJCQkvKiBVc2UgZm9wZW4gKi8KLQkJaWYgKEFILT5tb2RlID09IGFyY2hN b2RlQXBwZW5kKQotCQl7Ci0JCQlpZiAoZm4gPj0gMCkKLQkJCQlBSC0+T0YgPSBmZG9wZW4oZHVw KGZuKSwgUEdfQklOQVJZX0EpOwotCQkJZWxzZQotCQkJCUFILT5PRiA9IGZvcGVuKGZpbGVuYW1l LCBQR19CSU5BUllfQSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlpZiAoZm4gPj0gMCkKLQkJCQlB SC0+T0YgPSBmZG9wZW4oZHVwKGZuKSwgUEdfQklOQVJZX1cpOwotCQkJZWxzZQotCQkJCUFILT5P RiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7Ci0JCX0KLQkJQUgtPmd6T3V0ID0gMDsK LQl9CisJCUFILT5PRiA9IGNmb3BlbihmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7 CiAKIAlpZiAoIUFILT5PRikKIAl7CkBAIC0xNTcwLDMzICsxNTM4LDI0IEBAIFNldE91dHB1dChB cmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJfQogfQogCi1zdGF0aWMg T3V0cHV0Q29udGV4dAorc3RhdGljIGNmcCAqCiBTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFI KQogewotCU91dHB1dENvbnRleHQgc2F2OwotCi0Jc2F2Lk9GID0gQUgtPk9GOwotCXNhdi5nek91 dCA9IEFILT5nek91dDsKLQotCXJldHVybiBzYXY7CisJcmV0dXJuIChjZnAgKikgQUgtPk9GOwog fQogCiBzdGF0aWMgdm9pZAotUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgT3V0cHV0 Q29udGV4dCBzYXZlZENvbnRleHQpCitSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBj ZnAgKnNhdmVkT3V0cHV0KQogewogCWludAkJCXJlczsKIAotCWVycm5vID0gMDsJCQkJCS8qIGlu IGNhc2UgZ3pjbG9zZSgpIGRvZXNuJ3Qgc2V0IGl0ICovCi0JaWYgKEFILT5nek91dCkKLQkJcmVz ID0gR1pDTE9TRShBSC0+T0YpOwotCWVsc2UKLQkJcmVzID0gZmNsb3NlKEFILT5PRik7CisJZXJy bm8gPSAwOworCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKIAogCWlmIChyZXMgIT0gMCkKIAkJcGdf ZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKIAotCUFILT5nek91dCA9 IHNhdmVkQ29udGV4dC5nek91dDsKLQlBSC0+T0YgPSBzYXZlZENvbnRleHQuT0Y7CisJQUgtPk9G ID0gc2F2ZWRPdXRwdXQ7CiB9CiAKIApAQCAtMTcyMCwyMiArMTY3OSwxNyBAQCBhaHdyaXRlKGNv bnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgQXJjaGl2ZUhhbmRsZSAq QUgpCiAKIAkJYnl0ZXNfd3JpdHRlbiA9IHNpemUgKiBubWVtYjsKIAl9Ci0JZWxzZSBpZiAoQUgt Pmd6T3V0KQotCQlieXRlc193cml0dGVuID0gR1pXUklURShwdHIsIHNpemUsIG5tZW1iLCBBSC0+ T0YpOwogCWVsc2UgaWYgKEFILT5DdXN0b21PdXRQdHIpCiAJCWJ5dGVzX3dyaXR0ZW4gPSBBSC0+ Q3VzdG9tT3V0UHRyKEFILCBwdHIsIHNpemUgKiBubWVtYik7CiAKKwkvKgorCSAqIElmIHdlJ3Jl IGRvaW5nIGEgcmVzdG9yZSwgYW5kIGl0J3MgZGlyZWN0IHRvIERCLCBhbmQgd2UncmUgY29ubmVj dGVkCisJICogdGhlbiBzZW5kIGl0IHRvIHRoZSBEQi4KKwkgKi8KKwllbHNlIGlmIChSZXN0b3Jp bmdUb0RCKEFIKSkKKwkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1dGVTcWxDb21tYW5kQnVmKCZBSC0+ cHVibGljLCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBubWVtYik7CiAJZWxzZQotCXsKLQkJ LyoKLQkJICogSWYgd2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQgaXQncyBkaXJlY3QgdG8gREIs IGFuZCB3ZSdyZQotCQkgKiBjb25uZWN0ZWQgdGhlbiBzZW5kIGl0IHRvIHRoZSBEQi4KLQkJICov Ci0JCWlmIChSZXN0b3JpbmdUb0RCKEFIKSkKLQkJCWJ5dGVzX3dyaXR0ZW4gPSBFeGVjdXRlU3Fs Q29tbWFuZEJ1ZigmQUgtPnB1YmxpYywgKGNvbnN0IGNoYXIgKikgcHRyLCBzaXplICogbm1lbWIp OwotCQllbHNlCi0JCQlieXRlc193cml0dGVuID0gZndyaXRlKHB0ciwgc2l6ZSwgbm1lbWIsIEFI LT5PRikgKiBzaXplOwotCX0KKwkJYnl0ZXNfd3JpdHRlbiA9IGNmd3JpdGUocHRyLCBzaXplICog bm1lbWIsIEFILT5PRik7CiAKIAlpZiAoYnl0ZXNfd3JpdHRlbiAhPSBzaXplICogbm1lbWIpCiAJ CVdSSVRFX0VSUk9SX0VYSVQ7CkBAIC0yMjI0LDYgKzIxNzgsNyBAQCBfYWxsb2NBSChjb25zdCBj aGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJCSBTZXR1cFdvcmtlclB0 clR5cGUgc2V0dXBXb3JrZXJQdHIpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUg7CisJcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Nfc3BlYyA9IHswfTsKIAogCXBnX2xvZ19kZWJ1 ZygiYWxsb2NhdGluZyBBSCBmb3IgJXMsIGZvcm1hdCAlZCIsCiAJCQkJIEZpbGVTcGVjID8gRmls ZVNwZWMgOiAiKHN0ZGlvKSIsIGZtdCk7CkBAIC0yMjc3LDggKzIyMzIsOCBAQCBfYWxsb2NBSChj b25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJbWVtc2V0KCYo QUgtPnNxbHBhcnNlKSwgMCwgc2l6ZW9mKEFILT5zcWxwYXJzZSkpOwogCiAJLyogT3BlbiBzdGRv dXQgd2l0aCBubyBjb21wcmVzc2lvbiBmb3IgQUggb3V0cHV0IGhhbmRsZSAqLwotCUFILT5nek91 dCA9IDA7Ci0JQUgtPk9GID0gc3Rkb3V0OworCW91dF9jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9 IFBHX0NPTVBSRVNTSU9OX05PTkU7CisJQUgtPk9GID0gY2Zkb3BlbihkdXAoZmlsZW5vKHN0ZG91 dCkpLCBQR19CSU5BUllfQSwgb3V0X2NvbXByZXNzX3NwZWMpOwogCiAJLyoKIAkgKiBPbiBXaW5k b3dzLCB3ZSBuZWVkIHRvIHVzZSBiaW5hcnkgbW9kZSB0byByZWFkL3dyaXRlIG5vbi10ZXh0IGZp bGVzLApAQCAtMzcxMyw2ICszNjY4LDcgQEAgV3JpdGVIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQog dm9pZAogUmVhZEhlYWQoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7CisJY2hhcgkgICAqZXJybXNnOwog CWNoYXIJCXZtYWosCiAJCQkJdm1pbiwKIAkJCQl2cmV2OwpAQCAtMzc4MiwxMSArMzczOCwxMyBA QCBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNlCiAJCUFILT5jb21wcmVzc2lvbl9z cGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAKLSNpZm5kZWYgSEFWRV9MSUJa Ci0JaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9H WklQKQotCQlwZ19sb2dfd2FybmluZygiYXJjaGl2ZSBpcyBjb21wcmVzc2VkLCBidXQgdGhpcyBp bnN0YWxsYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiIpOwotI2VuZGlmCi0KKwll cnJtc2cgPSBzdXBwb3J0c19jb21wcmVzc2lvbihBSC0+Y29tcHJlc3Npb25fc3BlYyk7CisJaWYg KGVycm1zZykKKwl7CisJCXBnX2xvZ193YXJuaW5nKCJhcmNoaXZlIGlzIGNvbXByZXNzZWQgYnV0 IGRhdGEgY2Fubm90IGJlIHJlc3RvcmVkICglcykiLAorCQkJCQkJZXJybXNnKTsKKwkJcGdfZnJl ZShlcnJtc2cpOworCX0KIAogCWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV80KQogCXsKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAppbmRleCBmNzI0NDZlZDViLi40NzI1ZTQ5NzQ3 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC0zMiwzMCArMzIsNiBAQAog CiAjZGVmaW5lIExPQkJVRlNJWkUgMTYzODQKIAotI2lmZGVmIEhBVkVfTElCWgotI2luY2x1ZGUg PHpsaWIuaD4KLSNkZWZpbmUgR1pDTE9TRShmaCkgZ3pjbG9zZShmaCkKLSNkZWZpbmUgR1pXUklU RShwLCBzLCBuLCBmaCkgZ3p3cml0ZShmaCwgcCwgKG4pICogKHMpKQotI2RlZmluZSBHWlJFQUQo cCwgcywgbiwgZmgpIGd6cmVhZChmaCwgcCwgKG4pICogKHMpKQotI2RlZmluZSBHWkVPRihmaCkJ Z3plb2YoZmgpCi0jZWxzZQotI2RlZmluZSBHWkNMT1NFKGZoKSBmY2xvc2UoZmgpCi0jZGVmaW5l IEdaV1JJVEUocCwgcywgbiwgZmgpIChmd3JpdGUocCwgcywgbiwgZmgpICogKHMpKQotI2RlZmlu ZSBHWlJFQUQocCwgcywgbiwgZmgpIGZyZWFkKHAsIHMsIG4sIGZoKQotI2RlZmluZSBHWkVPRihm aCkJZmVvZihmaCkKLS8qIHRoaXMgaXMganVzdCB0aGUgcmVkZWZpbml0aW9uIG9mIGEgbGlieiBj b25zdGFudCAqLwotI2RlZmluZSBaX0RFRkFVTFRfQ09NUFJFU1NJT04gKC0xKQotCi10eXBlZGVm IHN0cnVjdCBfel9zdHJlYW0KLXsKLQl2b2lkCSAgICpuZXh0X2luOwotCXZvaWQJICAgKm5leHRf b3V0OwotCXNpemVfdAkJYXZhaWxfaW47Ci0Jc2l6ZV90CQlhdmFpbF9vdXQ7Ci19IHpfc3RyZWFt OwotdHlwZWRlZiB6X3N0cmVhbSAqel9zdHJlYW1wOwotI2VuZGlmCi0KIC8qIERhdGEgYmxvY2sg dHlwZXMgKi8KICNkZWZpbmUgQkxLX0RBVEEgMQogI2RlZmluZSBCTEtfQkxPQlMgMwpAQCAtMzE5 LDggKzI5NSw3IEBAIHN0cnVjdCBfYXJjaGl2ZUhhbmRsZQogCiAJY2hhcgkgICAqZlNwZWM7CQkJ LyogQXJjaGl2ZSBGaWxlIFNwZWMgKi8KIAlGSUxFCSAgICpGSDsJCQkJLyogR2VuZXJhbCBwdXJw b3NlIGZpbGUgaGFuZGxlICovCi0Jdm9pZAkgICAqT0Y7Ci0JaW50CQkJZ3pPdXQ7CQkJLyogT3V0 cHV0IGZpbGUgKi8KKwl2b2lkCSAgICpPRjsJCQkJLyogT3V0cHV0IGZpbGUgKi8KIAogCXN0cnVj dCBfdG9jRW50cnkgKnRvYzsJCS8qIEhlYWRlciBvZiBjaXJjdWxhciBsaXN0IG9mIFRPQyBlbnRy aWVzICovCiAJaW50CQkJdG9jQ291bnQ7CQkvKiBOdW1iZXIgb2YgVE9DIGVudHJpZXMgKi8KLS0g CjIuMzQuMQoK --b1_jyo8WOBl4FLDAOkgiAIpbB7AHDpDBkdzTOH9EXFyQE Content-Type: text/x-patch; name=v27-0003-Introduce-Compress-and-Compressor-API-in-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v27-0003-Introduce-Compress-and-Compressor-API-in-pg_dump.patch RnJvbSAwNmM2Mzg1ZDMzOGQ2YjMwMzkwZjRkMTI1YjEwNTkxNDhkNGJhZGQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFRodSwgMjYgSmFuIDIwMjMgMTc6NTk6MzUgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NyAzLzRdIEludHJvZHVjZSBDb21wcmVzcyBhbmQgQ29tcHJlc3NvciBBUEkgaW4gcGdfZHVtcAoK VGhlIHB1cnBvc2Ugb2YgdGhpcyBBUEkgaXMgdG8gYWxsb3cgZm9yIGVhc2llciBhZGRpdGlvbiBv ZiBuZXcgY29tcHJlc3Npb24KbWV0aG9kcy4gQ29tcHJlc3NGaWxlSGFuZGxlIGlzIHN1YnN0aXR1 dGluZyB0aGUgY2ZwKiBmYW1pbHkgb2YgZnVuY3Rpb25zIHVuZGVyIGEKc3RydWN0IG9mIGZ1bmN0 aW9uIHBvaW50ZXJzIGZvciBmaWxlIG1hbmlwdWxhdGlvbi4gVGhlIGltcGxlbWVudG9yIG9mIGEg bmV3CmNvbXByZXNzaW9uIG1ldGhvZCBpcyBub3cgYWJsZSB0byAic2ltcGx5IiBqdXN0IGFkZCB0 aG9zZSBkZWZpbml0aW9ucy4KCkFkZGl0aW9uYWx5IGN1c3RvbSBjb21wcmVzc2VkIGFyY2hpdmVz IHN0b3JlIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gdGhlaXIKaGVhZGVyIGluc3RlYWQg b2YgdGhlIGNvbXByZXNzaW9uIGxldmVsLiBUaGUgaGVhZGVyIHZlcnNpb24gbnVtYmVyIGlzIGJ1 bXBlZC4KLS0tCiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAyICsK IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmMgICAgICAgfCA0MDEgKysrKysrKysrKysr KysKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmggICAgICAgfCAgMjQgKwogc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgICAgICAgICB8IDc0NCArKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggICAgICAgICB8IDE2NiArKysr Ky0KIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmMgICAgICAgfCAyMDYgKysrKysrKwog c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaCAgICAgICB8ICAyNCArCiBzcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYyAgfCAgOTEgKystLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oICB8ICAgNSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyAg ICB8ICAyMyArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyB8ICA5NCAr Ky0tCiBzcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgIHwgIDEwICstCiBzcmMv aW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaCAgICAgIHwgICA0ICsKIHNyYy90b29scy9wZ2lu Y2x1ZGUvY3BsdXNwbHVzY2hlY2sgICAgfCAgIDIgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgICB8ICAgMiArCiAxNiBmaWxlcyBjaGFuZ2VkLCAxMDUxIGluc2VydGlvbnMo KyksIDc0OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAv 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 aW8uYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCmluZGV4IGUxNzMzY2U1N2MuLmU0 ZTAwOGQyZTEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCisrKyBi 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 LQkJcmV0dXJuIDA7CisJQXNzZXJ0KHN0cmNtcChtb2RlLCAiciIpID09IDAgfHwgc3RyY21wKG1v ZGUsICJyYiIpID09IDApOwogCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2Vk ZnApCi0JewotCQlyZXQgPSBnenJlYWQoZnAtPmNvbXByZXNzZWRmcCwgcHRyLCBzaXplKTsKLQkJ aWYgKHJldCAhPSBzaXplICYmICFnemVvZihmcC0+Y29tcHJlc3NlZGZwKSkKLQkJewotCQkJaW50 CQkJZXJybnVtOwotCQkJY29uc3QgY2hhciAqZXJybXNnID0gZ3plcnJvcihmcC0+Y29tcHJlc3Nl ZGZwLCAmZXJybnVtKTsKKwlmbmFtZSA9IHN0cmR1cChwYXRoKTsKIAotCQkJcGdfZmF0YWwoImNv dWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAotCQkJCQkgZXJybnVtID09IFpfRVJS Tk8gPyBzdHJlcnJvcihlcnJubykgOiBlcnJtc2cpOwotCQl9Ci0JfQorCWlmIChoYXNTdWZmaXgo Zm5hbWUsICIuZ3oiKSkKKwkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVT U0lPTl9HWklQOwogCWVsc2UKLSNlbmRpZgogCXsKLQkJcmV0ID0gZnJlYWQocHRyLCAxLCBzaXpl LCBmcC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ICE9IHNpemUgJiYgIWZlb2YoZnAtPnVu Y29tcHJlc3NlZGZwKSkKLQkJCVJFQURfRVJST1JfRVhJVChmcC0+dW5jb21wcmVzc2VkZnApOwot CX0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQKLWNmd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQg c2l6ZSwgY2ZwICpmcCkKLXsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRm cCkKLQkJcmV0dXJuIGd6d3JpdGUoZnAtPmNvbXByZXNzZWRmcCwgcHRyLCBzaXplKTsKLQllbHNl Ci0jZW5kaWYKLQkJcmV0dXJuIGZ3cml0ZShwdHIsIDEsIHNpemUsIGZwLT51bmNvbXByZXNzZWRm cCk7Ci19Ci0KLWludAotY2ZnZXRjKGNmcCAqZnApCi17Ci0JaW50CQkJcmV0OworCQlib29sCQll eGlzdHM7CiAKKwkJZXhpc3RzID0gKHN0YXQocGF0aCwgJnN0KSA9PSAwKTsKKwkJLyogYXZvaWQg dW51c2VkIHdhcm5pbmcgaWYgaXQgaXMgbm90IGJ1aWx0IHdpdGggY29tcHJlc3Npb24gKi8KKwkJ aWYgKGV4aXN0cykKKwkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJ T05fTk9ORTsKICNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQl7Ci0J CXJldCA9IGd6Z2V0YyhmcC0+Y29tcHJlc3NlZGZwKTsKLQkJaWYgKHJldCA9PSBFT0YpCisJCWlm ICghZXhpc3RzKQogCQl7Ci0JCQlpZiAoIWd6ZW9mKGZwLT5jb21wcmVzc2VkZnApKQotCQkJCXBn X2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJy bm8pKTsKLQkJCWVsc2UKLQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBm aWxlOiBlbmQgb2YgZmlsZSIpOworCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKKwkJCWZuYW1l ID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7CisJCQlleGlzdHMgPSAoc3RhdChmbmFtZSwgJnN0 KSA9PSAwKTsKKworCQkJaWYgKGV4aXN0cykKKwkJCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAJCX0KLQl9Ci0JZWxzZQogI2VuZGlmCi0JewotCQly ZXQgPSBmZ2V0YyhmcC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ID09IEVPRikKLQkJCVJF QURfRVJST1JfRVhJVChmcC0+dW5jb21wcmVzc2VkZnApOwogCX0KIAotCXJldHVybiByZXQ7Ci19 Ci0KLWNoYXIgKgotY2ZnZXRzKGNmcCAqZnAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLSNpZmRl ZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6Z2V0cyhmcC0+ Y29tcHJlc3NlZGZwLCBidWYsIGxlbik7Ci0JZWxzZQotI2VuZGlmCi0JCXJldHVybiBmZ2V0cyhi dWYsIGxlbiwgZnAtPnVuY29tcHJlc3NlZGZwKTsKLX0KLQotaW50Ci1jZmNsb3NlKGNmcCAqZnAp Ci17Ci0JaW50CQkJcmVzdWx0OwotCi0JaWYgKGZwID09IE5VTEwpCi0JewotCQllcnJubyA9IEVC QURGOwotCQlyZXR1cm4gRU9GOwotCX0KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXBy ZXNzZWRmcCkKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbXByZXNzaW9uX3NwZWMp OworCWlmIChDRkgtPm9wZW5fZnVuYyhmbmFtZSwgLTEsIG1vZGUsIENGSCkpCiAJewotCQlyZXN1 bHQgPSBnemNsb3NlKGZwLT5jb21wcmVzc2VkZnApOwotCQlmcC0+Y29tcHJlc3NlZGZwID0gTlVM TDsKKwkJZnJlZV9rZWVwX2Vycm5vKENGSCk7CisJCUNGSCA9IE5VTEw7CiAJfQotCWVsc2UKLSNl bmRpZgotCXsKLQkJcmVzdWx0ID0gZmNsb3NlKGZwLT51bmNvbXByZXNzZWRmcCk7Ci0JCWZwLT51 bmNvbXByZXNzZWRmcCA9IE5VTEw7Ci0JfQotCWZyZWVfa2VlcF9lcnJubyhmcCk7CisJZnJlZV9r ZWVwX2Vycm5vKGZuYW1lKTsKIAotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIENGSDsKIH0KIAor LyoKKyAqIENsb3NlIGFuIG9wZW4gZmlsZSBoYW5kbGUgYW5kIHJlbGVhc2UgaXRzIG1lbW9yeS4K KyAqCisgKiBPbiBmYWlsdXJlLCByZXR1cm5zIGFuIGVycm9yIHZhbHVlIGFuZCBzZXRzIGVycm5v IGFwcHJvcHJpYXRlbHkuCisgKi8KIGludAotY2Zlb2YoY2ZwICpmcCkKK0VuZENvbXByZXNzRmls ZUhhbmRsZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKIHsKLSNpZmRlZiBIQVZFX0xJQloKLQlp ZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6ZW9mKGZwLT5jb21wcmVzc2VkZnApOwot CWVsc2UKLSNlbmRpZgotCQlyZXR1cm4gZmVvZihmcC0+dW5jb21wcmVzc2VkZnApOwotfQorCWlu dAkJCXJldCA9IDA7CiAKLWNvbnN0IGNoYXIgKgotZ2V0X2NmcF9lcnJvcihjZnAgKmZwKQotewot I2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCXsKLQkJaW50CQkJZXJy bnVtOwotCQljb25zdCBjaGFyICplcnJtc2cgPSBnemVycm9yKGZwLT5jb21wcmVzc2VkZnAsICZl cnJudW0pOworCWlmIChDRkgtPnByaXZhdGVfZGF0YSkKKwkJcmV0ID0gQ0ZILT5jbG9zZV9mdW5j KENGSCk7CiAKLQkJaWYgKGVycm51bSAhPSBaX0VSUk5PKQotCQkJcmV0dXJuIGVycm1zZzsKLQl9 Ci0jZW5kaWYKLQlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOwotfQorCWZyZWVfa2VlcF9lcnJubyhD RkgpOwogCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgaW50Ci1oYXNTdWZmaXgoY29uc3QgY2hh ciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKLXsKLQlpbnQJCQlmaWxlbmFtZWxlbiA9 IHN0cmxlbihmaWxlbmFtZSk7Ci0JaW50CQkJc3VmZml4bGVuID0gc3RybGVuKHN1ZmZpeCk7Ci0K LQlpZiAoZmlsZW5hbWVsZW4gPCBzdWZmaXhsZW4pCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIG1l bWNtcCgmZmlsZW5hbWVbZmlsZW5hbWVsZW4gLSBzdWZmaXhsZW5dLAotCQkJCSAgc3VmZml4LAot CQkJCSAgc3VmZml4bGVuKSA9PSAwOworCXJldHVybiByZXQ7CiB9Ci0KLSNlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggYi9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uaAppbmRleCA4YmViMTA1OGVjLi44MjgwZDdiMGRjIDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf aW8uaApAQCAtMjMsNTAgKzIzLDE2MCBAQAogCiBleHRlcm4gY2hhciAqc3VwcG9ydHNfY29tcHJl c3Npb24oY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsK IAotLyogUHJvdG90eXBlIGZvciBjYWxsYmFjayBmdW5jdGlvbiB0byBXcml0ZURhdGFUb0FyY2hp dmUoKSAqLworLyoKKyAqIFByb3RvdHlwZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBpbiB3 cml0ZURhdGEoKQorICovCiB0eXBlZGVmIHZvaWQgKCpXcml0ZUZ1bmMpIChBcmNoaXZlSGFuZGxl ICpBSCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIAogLyoKLSAqIFByb3RvdHlwZSBm b3IgY2FsbGJhY2sgZnVuY3Rpb24gdG8gUmVhZERhdGFGcm9tQXJjaGl2ZSgpCisgKiBQcm90b3R5 cGUgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgaW4gcmVhZERhdGEoKQogICoKLSAqIFJlYWRE YXRhRnJvbUFyY2hpdmUgd2lsbCBjYWxsIHRoZSByZWFkIGZ1bmN0aW9uIHJlcGVhdGVkbHksIHVu dGlsIGl0Ci0gKiByZXR1cm5zIDAgdG8gc2lnbmFsIEVPRi4gUmVhZERhdGFGcm9tQXJjaGl2ZSBw YXNzZXMgYSBidWZmZXIgdG8gcmVhZCB0aGUKLSAqIGRhdGEgaW50byBpbiAqYnVmLCBvZiBsZW5n dGggKmJ1Zmxlbi4gSWYgdGhhdCdzIG5vdCBiaWcgZW5vdWdoIGZvciB0aGUKLSAqIGNhbGxiYWNr IGZ1bmN0aW9uLCBpdCBjYW4gZnJlZSgpIGl0IGFuZCBtYWxsb2MoKSBhIG5ldyBvbmUsIHJldHVy bmluZyB0aGUKLSAqIG5ldyBidWZmZXIgYW5kIGl0cyBzaXplIGluICpidWYgYW5kICpidWZsZW4u CisgKiByZWFkRGF0YSB3aWxsIGNhbGwgdGhlIHJlYWQgZnVuY3Rpb24gcmVwZWF0ZWRseSwgdW50 aWwgaXQgcmV0dXJucyAwIHRvIHNpZ25hbAorICogRU9GLiByZWFkRGF0YSBwYXNzZXMgYSBidWZm ZXIgdG8gcmVhZCB0aGUgZGF0YSBpbnRvIGluICpidWYsIG9mIGxlbmd0aAorICogKmJ1Zmxlbi4g SWYgdGhhdCdzIG5vdCBiaWcgZW5vdWdoIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIGl0IGNh biBmcmVlKCkgaXQKKyAqIGFuZCBtYWxsb2MoKSBhIG5ldyBvbmUsIHJldHVybmluZyB0aGUgbmV3 IGJ1ZmZlciBhbmQgaXRzIHNpemUgaW4gKmJ1ZiBhbmQKKyAqICpidWZsZW4uCiAgKgogICogUmV0 dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaW50byAqYnVmLCBvciAwIG9uIEVPRi4KICAq LwogdHlwZWRlZiBzaXplX3QgKCpSZWFkRnVuYykgKEFyY2hpdmVIYW5kbGUgKkFILCBjaGFyICoq YnVmLCBzaXplX3QgKmJ1Zmxlbik7CiAKLS8qIHN0cnVjdCBkZWZpbml0aW9uIGFwcGVhcnMgaW4g Y29tcHJlc3NfaW8uYyAqLwogdHlwZWRlZiBzdHJ1Y3QgQ29tcHJlc3NvclN0YXRlIENvbXByZXNz b3JTdGF0ZTsKK3N0cnVjdCBDb21wcmVzc29yU3RhdGUKK3sKKwkvKgorCSAqIFJlYWQgYWxsIGNv bXByZXNzZWQgZGF0YSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gKHZpYSByZWFkRikgYW5kIHByaW50 IGl0CisJICogb3V0IHdpdGggYWh3cml0ZSgpLgorCSAqLworCXZvaWQJCSgqcmVhZERhdGEpIChB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcyk7CisKKwkvKgorCSAqIENvbXBy ZXNzIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtICh2aWEgd3JpdGVGKS4KKwkg Ki8KKwl2b2lkCQkoKndyaXRlRGF0YSkgKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzLAorCQkJCQkJCSAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pOworCisJLyoK KwkgKiBFbmQgY29tcHJlc3Npb24gYW5kIGZsdXNoIGludGVybmFsIGJ1ZmZlcnMgaWYgYW55Lgor CSAqLworCXZvaWQJCSgqZW5kKSAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAq Y3MpOworCisJLyoKKwkgKiBDYWxsYmFjayBmdW5jdGlvbiB0byByZWFkIGZyb20gYW4gYWxyZWFk eSBwcm9jZXNzZWQgaW5wdXQgc3RyZWFtCisJICovCisJUmVhZEZ1bmMJcmVhZEY7CisKKwkvKgor CSAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHdyaXRlIGFuIGFscmVhZHkgcHJvY2Vzc2VkIGNodW5r IG9mIGRhdGEuCisJICovCisJV3JpdGVGdW5jCXdyaXRlRjsKKworCS8qCisJICogQ29tcHJlc3Np b24gc3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBzdGF0ZS4KKwkgKi8KKwlwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7CisKKwkvKgorCSAqIFByaXZhdGUgZGF0YSB0byBi ZSB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLgorCSAqLworCXZvaWQJICAgKnByaXZhdGVfZGF0YTsK K307CiAKIGV4dGVybiBDb21wcmVzc29yU3RhdGUgKkFsbG9jYXRlQ29tcHJlc3Nvcihjb25zdCBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJCQkJCQkJCQkJICAg UmVhZEZ1bmMgcmVhZEYsCiAJCQkJCQkJCQkJICAgV3JpdGVGdW5jIHdyaXRlRik7Ci1leHRlcm4g dm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILAotCQkJCQkJCQljb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCi0JCQkJCQkJCVJl YWRGdW5jIHJlYWRGKTsKLWV4dGVybiB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFu ZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkgICBjb25zdCB2b2lkICpkYXRh LCBzaXplX3QgZExlbik7CiBleHRlcm4gdm9pZCBFbmRDb21wcmVzc29yKEFyY2hpdmVIYW5kbGUg KkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKIAorLyoKKyAqIENvbXByZXNzIEZpbGUgSGFuZGxl CisgKi8KK3R5cGVkZWYgc3RydWN0IENvbXByZXNzRmlsZUhhbmRsZSBDb21wcmVzc0ZpbGVIYW5k bGU7CisKK3N0cnVjdCBDb21wcmVzc0ZpbGVIYW5kbGUKK3sKKwkvKgorCSAqIE9wZW4gYSBmaWxl IGluIG1vZGUuCisJICoKKwkgKiBQYXNzIGVpdGhlciAncGF0aCcgb3IgJ2ZkJyBkZXBlbmRpbmcg b24gd2hldGhlciBhIGZpbGVwYXRoIG9yIGEgZmlsZQorCSAqIGRlc2NyaXB0b3IgaXMgYXZhaWxh YmxlLiAnbW9kZScgY2FuIGJlIG9uZSBvZiAncicsICdyYicsICd3JywgJ3diJywKKwkgKiAnYScs IGFuZCAnYWInLiBSZXF1cmlyZXMgYW4gYWxyZWFkeSBpbml0aWFsaXplZCBDb21wcmVzc0ZpbGVI YW5kbGUuCisJICovCisJaW50CQkJKCpvcGVuX2Z1bmMpIChjb25zdCBjaGFyICpwYXRoLCBpbnQg ZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkJCQkJICBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7 CisKKwkvKgorCSAqIE9wZW4gYSBmaWxlIGZvciB3cml0aW5nLgorCSAqCisJICogJ21vZGUnIGNh biBiZSBvbmUgb2YgJyd3JywgJ3diJywgJ2EnLCBhbmQgJ2FiJy4gUmVxdXJpcmVzIGFuIGFscmVh ZHkKKwkgKiBpbml0aWFsaXplZCBDb21wcmVzc0ZpbGVIYW5kbGUuCisJICovCisJaW50CQkJKCpv cGVuX3dyaXRlX2Z1bmMpIChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAorCQkJ CQkJCQkJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOwogCi10eXBlZGVmIHN0cnVjdCBjZnAgY2Zw OworCS8qCisJICogUmVhZCAnc2l6ZScgYnl0ZXMgb2YgZGF0YSBmcm9tIHRoZSBmaWxlIGFuZCBz dG9yZSB0aGVtIGludG8gJ3B0cicuCisJICovCisJc2l6ZV90CQkoKnJlYWRfZnVuYykgKHZvaWQg KnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKIAotZXh0ZXJuIGNm cCAqY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJICAgY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKLWV4dGVybiBj ZnAgKmNmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAotCQkJCQljb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotZXh0ZXJuIGNmcCAqY2ZvcGVu X3JlYWQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7Ci1leHRlcm4gY2ZwICpj Zm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCQkJCSBj b25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotZXh0ZXJu IGludAljZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNm d3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNm Z2V0YyhjZnAgKmZwKTsKLWV4dGVybiBjaGFyICpjZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBp bnQgbGVuKTsKLWV4dGVybiBpbnQJY2ZjbG9zZShjZnAgKmZwKTsKLWV4dGVybiBpbnQJY2Zlb2Yo Y2ZwICpmcCk7Ci1leHRlcm4gY29uc3QgY2hhciAqZ2V0X2NmcF9lcnJvcihjZnAgKmZwKTsKKwkv KgorCSAqIFdyaXRlICdzaXplJyBieXRlcyBvZiBkYXRhIGludG8gdGhlIGZpbGUgZnJvbSAncHRy Jy4KKwkgKi8KKwlzaXplX3QJCSgqd3JpdGVfZnVuYykgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90 IHNpemUsCisJCQkJCQkJICAgc3RydWN0IENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKIAorCS8q CisJICogUmVhZCBhdCBtb3N0IHNpemUgLSAxIGNoYXJhY3RlcnMgZnJvbSB0aGUgY29tcHJlc3Mg ZmlsZSBoYW5kbGUgaW50bworCSAqICdzJy4KKwkgKgorCSAqIFN0b3AgaWYgYW4gRU9GIG9yIGEg bmV3bGluZSBpcyBmb3VuZCBmaXJzdC4gJ3MnIGlzIGFsd2F5cyBudWxsCisJICogdGVybWluYXRl ZCBhbmQgY29udGFpbnMgdGhlIG5ld2xpbmUgaWYgaXQgd2FzIGZvdW5kLgorCSAqLworCWNoYXIJ ICAgKigqZ2V0c19mdW5jKSAoY2hhciAqcywgaW50IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAq Q0ZIKTsKKworCS8qCisJICogUmVhZCB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgY29tcHJl c3MgZmlsZSBoYW5kbGUgYXMgJ3Vuc2lnbmVkCisJICogY2hhcicgY2FzdCBpbnRvICdpbnQnLgor CSAqLworCWludAkJCSgqZ2V0Y19mdW5jKSAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOworCisJ LyoKKwkgKiBUZXN0IGlmIEVPRiBpcyByZWFjaGVkIGluIHRoZSBjb21wcmVzcyBmaWxlIGhhbmRs ZS4KKwkgKi8KKwlpbnQJCQkoKmVvZl9mdW5jKSAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOwor CisJLyoKKwkgKiBDbG9zZSBhbiBvcGVuIGZpbGUgaGFuZGxlLgorCSAqLworCWludAkJCSgqY2xv c2VfZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICogR2V0IGEgcG9p bnRlciB0byBhIHN0cmluZyB0aGF0IGRlc2NyaWJlcyBhbiBlcnJvciB0aGF0IG9jY3VyZWQgZHVy aW5nIGEKKwkgKiBjb21wcmVzcyBmaWxlIGhhbmRsZSBvcGVyYXRpb24uCisJICovCisJY29uc3Qg Y2hhciAqKCpnZXRfZXJyb3JfZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8q CisJICogQ29tcHJlc3Npb24gc3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBmaWxlIGhhbmRsZS4KKwkg Ki8KKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7CisKKwkvKgor CSAqIFByaXZhdGUgZGF0YSB0byBiZSB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLgorCSAqLworCXZv aWQJICAgKnByaXZhdGVfZGF0YTsKK307CisKKy8qCisgKiBJbml0aWFsaXplIGEgY29tcHJlc3Mg ZmlsZSBoYW5kbGUgd2l0aCB0aGUgcmVxdWVzdGVkIGNvbXByZXNzaW9uLgorICovCitleHRlcm4g Q29tcHJlc3NGaWxlSGFuZGxlICpJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IHBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CisKKy8qCisgKiBJbml0aWFsaXpl IGEgY29tcHJlc3MgZmlsZSBzdHJlYW0uIERlZmZlciB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGht CisgKiBmcm9tICdwYXRoJywgZWl0aGVyIGJ5IGV4YW1pbmluZyBpdHMgc3VmZml4IG9yIGJ5IGFw cGVuZGluZyB0aGUgc3VwcG9ydGVkCisgKiBzdWZmaXhlcyBpbiAncGF0aCcuCisgKi8KK2V4dGVy biBDb21wcmVzc0ZpbGVIYW5kbGUgKkluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25z dCBjaGFyICpwYXRoLAorCQkJCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1vZGUpOworZXh0ZXJu IGludAlFbmRDb21wcmVzc0ZpbGVIYW5kbGUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOwogI2Vu ZGlmCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5jIGIvc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX25vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi5lY2JjZjRiMDRhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX25vbmUuYwpAQCAtMCwwICsxLDIwNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogY29tcHJlc3Nfbm9uZS5jCisgKgkgUm91dGluZXMgZm9yIGFyY2hpdmVycyB0byByZWFkIG9y IHdyaXRlIGFuIHVuY29tcHJlc3NlZCBzdHJlYW0uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg Q2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgICBzcmMvYmluL3BnX2R1bXAv Y29tcHJlc3Nfbm9uZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJw b3N0Z3Jlc19mZS5oIgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY29tcHJlc3Nf bm9uZS5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgorCisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqIENvbXByZXNzb3IgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworCisvKgorICogUHJpdmF0ZSByb3V0aW5lcworICovCisKK3N0YXRpYyB2b2lkCitSZWFkRGF0 YUZyb21BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykK K3sKKwlzaXplX3QJCWNudDsKKwljaGFyCSAgICpidWY7CisJc2l6ZV90CQlidWZsZW47CisKKwli dWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSk7CisJYnVmbGVuID0gWkxJQl9PVVRfU0laRTsK KworCXdoaWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCisJeworCQlh aHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7CisJfQorCisJZnJlZShidWYpOworfQorCisKK3N0YXRp YyB2b2lkCitXcml0ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVz c29yU3RhdGUgKmNzLAorCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKK3sK Kwljcy0+d3JpdGVGKEFILCBkYXRhLCBkTGVuKTsKK30KKworc3RhdGljIHZvaWQKK0VuZENvbXBy ZXNzb3JOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCS8q IG5vIG9wICovCit9CisKKy8qCisgKiBQdWJsaWMgaW50ZXJmYWNlCisgKi8KKwordm9pZAorSW5p dENvbXByZXNzb3JOb25lKENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJICAgY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCWNzLT5yZWFkRGF0YSA9 IFJlYWREYXRhRnJvbUFyY2hpdmVOb25lOworCWNzLT53cml0ZURhdGEgPSBXcml0ZURhdGFUb0Fy Y2hpdmVOb25lOworCWNzLT5lbmQgPSBFbmRDb21wcmVzc29yTm9uZTsKKworCWNzLT5jb21wcmVz c2lvbl9zcGVjID0gY29tcHJlc3Npb25fc3BlYzsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqIENvbXByZXNzIEZpbGUgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworCisvKgorICogUHJpdmF0ZSByb3V0aW5lcworICovCisKK3N0YXRpYyBzaXplX3QKK3JlYWRf bm9uZSh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sK KwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJcmV0 OworCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBmcmVhZChwdHIsIDEs IHNpemUsIGZwKTsKKwlpZiAocmV0ICE9IHNpemUgJiYgIWZlb2YoZnApKQorCQlwZ19mYXRhbCgi Y291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIHN0cmVycm9yKGVycm5v KSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc2l6ZV90Cit3cml0ZV9ub25lKGNvbnN0 IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCXJl dHVybiBmd3JpdGUocHRyLCAxLCBzaXplLCAoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7Cit9 CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF9lcnJvcl9ub25lKENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIKQoreworCXJldHVybiBzdHJlcnJvcihlcnJubyk7Cit9CisKK3N0YXRpYyBjaGFyICoK K2dldHNfbm9uZShjaGFyICpwdHIsIGludCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkK K3sKKwlyZXR1cm4gZmdldHMocHRyLCBzaXplLCAoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7 Cit9CisKK3N0YXRpYyBpbnQKK2dldGNfbm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sK KwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldDsK KworCXJldCA9IGZnZXRjKGZwKTsKKwlpZiAocmV0ID09IEVPRikKKwl7CisJCWlmICghZmVvZihm cCkpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIHN0 cmVycm9yKGVycm5vKSk7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9t IGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludAorY2xvc2Vfbm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAg ICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldCA9IDA7CisKKwlD RkgtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisKKwlpZiAoZnApCisJCXJldCA9IGZjbG9zZShmcCk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citlb2Zfbm9uZShDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCkKK3sKKwlyZXR1cm4gZmVvZigoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7 Cit9CisKK3N0YXRpYyBpbnQKK29wZW5fbm9uZShjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNv bnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUFzc2VydChDRkgt PnByaXZhdGVfZGF0YSA9PSBOVUxMKTsKKworCWlmIChmZCA+PSAwKQorCQlDRkgtPnByaXZhdGVf ZGF0YSA9IGZkb3BlbihkdXAoZmQpLCBtb2RlKTsKKwllbHNlCisJCUNGSC0+cHJpdmF0ZV9kYXRh ID0gZm9wZW4ocGF0aCwgbW9kZSk7CisKKwlpZiAoQ0ZILT5wcml2YXRlX2RhdGEgPT0gTlVMTCkK KwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorb3Blbl93cml0ZV9u b25lKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIKQoreworCUFzc2VydChDRkgtPnByaXZhdGVfZGF0YSA9PSBOVUxMKTsKKworCUNGSC0+ cHJpdmF0ZV9kYXRhID0gZm9wZW4ocGF0aCwgbW9kZSk7CisJaWYgKENGSC0+cHJpdmF0ZV9kYXRh ID09IE5VTEwpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQdWJsaWMg aW50ZXJmYWNlCisgKi8KKwordm9pZAorSW5pdENvbXByZXNzRmlsZUhhbmRsZU5vbmUoQ29tcHJl c3NGaWxlSGFuZGxlICpDRkgsCisJCQkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJQ0ZILT5vcGVuX2Z1bmMgPSBvcGVuX25vbmU7CisJ Q0ZILT5vcGVuX3dyaXRlX2Z1bmMgPSBvcGVuX3dyaXRlX25vbmU7CisJQ0ZILT5yZWFkX2Z1bmMg PSByZWFkX25vbmU7CisJQ0ZILT53cml0ZV9mdW5jID0gd3JpdGVfbm9uZTsKKwlDRkgtPmdldHNf ZnVuYyA9IGdldHNfbm9uZTsKKwlDRkgtPmdldGNfZnVuYyA9IGdldGNfbm9uZTsKKwlDRkgtPmNs b3NlX2Z1bmMgPSBjbG9zZV9ub25lOworCUNGSC0+ZW9mX2Z1bmMgPSBlb2Zfbm9uZTsKKwlDRkgt PmdldF9lcnJvcl9mdW5jID0gZ2V0X2Vycm9yX25vbmU7CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9 IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5oIGIv c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi4xNDNlNTk5ODE5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX25vbmUuaApAQCAtMCwwICsxLDI0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBjb21wcmVzc19ub25lLmgKKyAqCSBVbmNvbXByZXNzZWQgaW50ZXJmYWNlIHRvIGNv bXByZXNzX2lvLmMgcm91dGluZXMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19u b25lLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBfQ09NUFJFU1NfTk9O RV9IXworI2RlZmluZSBfQ09NUFJFU1NfTk9ORV9IXworCisjaW5jbHVkZSAiY29tcHJlc3NfaW8u aCIKKworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzb3JOb25lKENvbXByZXNzb3JTdGF0ZSAqY3Ms CisJCQkJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjKTsKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc0ZpbGVIYW5kbGVOb25lKENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZILAorCQkJCQkJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc2lvbl9zcGVjKTsKKworI2VuZGlmCQkJCQkJCS8qIF9DT01QUkVTU19OT05FX0hf ICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQKaW5kZXggY2E2MmY5YTM3NC4uODRlOWYwZGVmYSAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNv bi5idWlsZApAQCAtMSw3ICsxLDkgQEAKICMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjMsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAKIHBnX2R1bXBfY29tbW9uX3NvdXJjZXMg PSBmaWxlcygKKyAgJ2NvbXByZXNzX2d6aXAuYycsCiAgICdjb21wcmVzc19pby5jJywKKyAgJ2Nv bXByZXNzX25vbmUuYycsCiAgICdkdW1wdXRpbHMuYycsCiAgICdwYXJhbGxlbC5jJywKICAgJ3Bn X2JhY2t1cF9hcmNoaXZlci5jJywKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRl eCBhNGU1ZGYwODE3Li4wMjE3OGJkYzUzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5jCkBAIC05NSw4ICs5NSw4IEBAIHN0YXRpYyB2b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5k bGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNv bnN0IGNoYXIgKm1zZywgdGltZV90IHRpbSk7CiBzdGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJCQkgIGNvbnN0IHBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7Ci1zdGF0aWMgY2ZwICpTYXZlT3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKLXN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNmcCAqc2F2ZWRPdXRwdXQpOworc3RhdGljIENvbXByZXNzRmlsZUhhbmRs ZSAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7CitzdGF0aWMgdm9pZCBSZXN0b3JlT3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc0ZpbGVIYW5kbGUgKnNhdmVkT3V0cHV0KTsK IAogc3RhdGljIGludAlyZXN0b3JlX3RvY19lbnRyeShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50 cnkgKnRlLCBib29sIGlzX3BhcmFsbGVsKTsKIHN0YXRpYyB2b2lkIHJlc3RvcmVfdG9jX2VudHJp ZXNfcHJlZm9yayhBcmNoaXZlSGFuZGxlICpBSCwKQEAgLTI3Miw3ICsyNzIsNyBAQCBDbG9zZUFy Y2hpdmUoQXJjaGl2ZSAqQUhYKQogCiAJLyogQ2xvc2UgdGhlIG91dHB1dCAqLwogCWVycm5vID0g MDsKLQlyZXMgPSBjZmNsb3NlKEFILT5PRik7CisJcmVzID0gRW5kQ29tcHJlc3NGaWxlSGFuZGxl KEFILT5PRik7CiAKIAlpZiAocmVzICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2Ug b3V0cHV0IGZpbGU6ICVtIik7CkBAIC0zNTQsNyArMzU0LDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJj aGl2ZSAqQUhYKQogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwogCWJv b2wJCXBhcmFsbGVsX21vZGU7CiAJVG9jRW50cnkgICAqdGU7Ci0JY2ZwCQkgICAqc2F2OworCUNv bXByZXNzRmlsZUhhbmRsZSAqc2F2OwogCiAJQUgtPnN0YWdlID0gU1RBR0VfSU5JVElBTElaSU5H OwogCkBAIC0xMTI3LDcgKzExMjcsNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQog CVRvY0VudHJ5ICAgKnRlOwogCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gb3V0X2NvbXByZXNz aW9uX3NwZWMgPSB7MH07CiAJdGVTZWN0aW9uCWN1clNlY3Rpb247Ci0JY2ZwCQkgICAqc2F2Owor CUNvbXByZXNzRmlsZUhhbmRsZSAqc2F2OwogCWNvbnN0IGNoYXIgKmZtdE5hbWU7CiAJY2hhcgkJ c3RhbXBfc3RyWzY0XTsKIApAQCAtMTE0Myw5ICsxMTQzLDEwIEBAIFByaW50VE9DU3VtbWFyeShB cmNoaXZlICpBSFgpCiAJCXN0cmNweShzdGFtcF9zdHIsICJbdW5rbm93bl0iKTsKIAogCWFocHJp bnRmKEFILCAiO1xuOyBBcmNoaXZlIGNyZWF0ZWQgYXQgJXNcbiIsIHN0YW1wX3N0cik7Ci0JYWhw cmludGYoQUgsICI7ICAgICBkYm5hbWU6ICVzXG47ICAgICBUT0MgRW50cmllczogJWRcbjsgICAg IENvbXByZXNzaW9uOiAlZFxuIiwKKwlhaHByaW50ZihBSCwgIjsgICAgIGRibmFtZTogJXNcbjsg ICAgIFRPQyBFbnRyaWVzOiAlZFxuOyAgICAgQ29tcHJlc3Npb246ICVzXG4iLAogCQkJIHNhbml0 aXplX2xpbmUoQUgtPmFyY2hkYm5hbWUsIGZhbHNlKSwKLQkJCSBBSC0+dG9jQ291bnQsIEFILT5j b21wcmVzc2lvbl9zcGVjLmxldmVsKTsKKwkJCSBBSC0+dG9jQ291bnQsCisJCQkgZ2V0X2NvbXBy ZXNzX2FsZ29yaXRobV9uYW1lKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkpOwogCiAJ c3dpdGNoIChBSC0+Zm9ybWF0KQogCXsKQEAgLTE1MDIsNiArMTUwMyw3IEBAIHN0YXRpYyB2b2lk CiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkg IGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKIHsKKwlD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICptb2RlOwogCWludAkJCWZuID0g LTE7CiAKQEAgLTE1MjQsMzMgKzE1MjYsMzIgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFI LCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNlCiAJCW1vZGUgPSBQR19CSU5BUllfVzsKIAot CWlmIChmbiA+PSAwKQotCQlBSC0+T0YgPSBjZmRvcGVuKGR1cChmbiksIG1vZGUsIGNvbXByZXNz aW9uX3NwZWMpOwotCWVsc2UKLQkJQUgtPk9GID0gY2ZvcGVuKGZpbGVuYW1lLCBtb2RlLCBjb21w cmVzc2lvbl9zcGVjKTsKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbXByZXNzaW9u X3NwZWMpOwogCi0JaWYgKCFBSC0+T0YpCisJaWYgKENGSC0+b3Blbl9mdW5jKGZpbGVuYW1lLCBm biwgbW9kZSwgQ0ZIKSkKIAl7CiAJCWlmIChmaWxlbmFtZSkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogCQllbHNlCiAJCQlw Z19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGU6ICVtIik7CiAJfQorCisJQUgtPk9G ID0gQ0ZIOwogfQogCi1zdGF0aWMgY2ZwICoKK3N0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKgog U2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCkKIHsKLQlyZXR1cm4gKGNmcCAqKSBBSC0+T0Y7 CisJcmV0dXJuIChDb21wcmVzc0ZpbGVIYW5kbGUgKikgQUgtPk9GOwogfQogCiBzdGF0aWMgdm9p ZAotUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2ZwICpzYXZlZE91dHB1dCkKK1Jl c3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRP dXRwdXQpCiB7CiAJaW50CQkJcmVzOwogCiAJZXJybm8gPSAwOwotCXJlcyA9IGNmY2xvc2UoQUgt Pk9GKTsKKwlyZXMgPSBFbmRDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPk9GKTsKIAogCWlmIChyZXMg IT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKQEAg LTE2ODksNyArMTY5MCwxMSBAQCBhaHdyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUs IHNpemVfdCBubWVtYiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAJZWxzZSBpZiAoUmVzdG9yaW5nVG9E QihBSCkpCiAJCWJ5dGVzX3dyaXR0ZW4gPSBFeGVjdXRlU3FsQ29tbWFuZEJ1ZigmQUgtPnB1Ymxp YywgKGNvbnN0IGNoYXIgKikgcHRyLCBzaXplICogbm1lbWIpOwogCWVsc2UKLQkJYnl0ZXNfd3Jp dHRlbiA9IGNmd3JpdGUocHRyLCBzaXplICogbm1lbWIsIEFILT5PRik7CisJeworCQlDb21wcmVz c0ZpbGVIYW5kbGUgKkNGSCA9IChDb21wcmVzc0ZpbGVIYW5kbGUgKikgQUgtPk9GOworCisJCWJ5 dGVzX3dyaXR0ZW4gPSBDRkgtPndyaXRlX2Z1bmMocHRyLCBzaXplICogbm1lbWIsIENGSCk7CisJ fQogCiAJaWYgKGJ5dGVzX3dyaXR0ZW4gIT0gc2l6ZSAqIG5tZW1iKQogCQlXUklURV9FUlJPUl9F WElUOwpAQCAtMjAzMSw2ICsyMDM2LDE4IEBAIFJlYWRTdHIoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJ cmV0dXJuIGJ1ZjsKIH0KIAorc3RhdGljIGJvb2wKK19maWxlRXhpc3RzSW5EaXJlY3RvcnkoY29u c3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsK KwljaGFyCQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwg IiVzLyVzIiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0 b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAm c3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKIHN0YXRpYyBpbnQKIF9kaXNj b3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7CkBAIC0yMDYxLDI2ICsyMDc4 LDEyIEBAIF9kaXNjb3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCSAqLwog CQlpZiAoc3RhdChBSC0+ZlNwZWMsICZzdCkgPT0gMCAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQog CQl7Ci0JCQljaGFyCQlidWZbTUFYUEdQQVRIXTsKLQotCQkJaWYgKHNucHJpbnRmKGJ1ZiwgTUFY UEdQQVRILCAiJXMvdG9jLmRhdCIsIEFILT5mU3BlYykgPj0gTUFYUEdQQVRIKQotCQkJCXBnX2Zh dGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwKLQkJCQkJCSBBSC0+ZlNwZWMp OwotCQkJaWYgKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJ CXsKLQkJCQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwkJCUFILT5mb3JtYXQgPSBhcmNo RGlyZWN0b3J5OworCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9j LmRhdCIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OwotCQkJfQotCiAjaWZkZWYgSEFWRV9MSUJa Ci0JCQlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy90b2MuZGF0Lmd6IiwgQUgtPmZT cGVjKSA+PSBNQVhQR1BBVEgpCi0JCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25n OiBcIiVzXCIiLAotCQkJCQkJIEFILT5mU3BlYyk7Ci0JCQlpZiAoc3RhdChidWYsICZzdCkgPT0g MCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKQotCQkJewotCQkJCUFILT5mb3JtYXQgPSBhcmNoRGly ZWN0b3J5OworCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRh dC5neiIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OwotCQkJfQogI2VuZGlmCiAJCQlwZ19mYXRh bCgiZGlyZWN0b3J5IFwiJXNcIiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCBhcmNoaXZl IChcInRvYy5kYXRcIiBkb2VzIG5vdCBleGlzdCkiLAogCQkJCQkgQUgtPmZTcGVjKTsKQEAgLTIx NzgsNiArMjE4MSw3IEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNo aXZlRm9ybWF0IGZtdCwKIAkJIFNldHVwV29ya2VyUHRyVHlwZSBzZXR1cFdvcmtlclB0cikKIHsK IAlBcmNoaXZlSGFuZGxlICpBSDsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAlwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc19zcGVjID0gezB9OwogCiAJcGdfbG9nX2Rl YnVnKCJhbGxvY2F0aW5nIEFIIGZvciAlcywgZm9ybWF0ICVkIiwKQEAgLTIyMzMsNyArMjIzNywx MCBAQCBfYWxsb2NBSChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBm bXQsCiAKIAkvKiBPcGVuIHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9uIGZvciBBSCBvdXRwdXQg aGFuZGxlICovCiAJb3V0X2NvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05f Tk9ORTsKLQlBSC0+T0YgPSBjZmRvcGVuKGR1cChmaWxlbm8oc3Rkb3V0KSksIFBHX0JJTkFSWV9B LCBvdXRfY29tcHJlc3Nfc3BlYyk7CisJQ0ZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShvdXRf Y29tcHJlc3Nfc3BlYyk7CisJaWYgKENGSC0+b3Blbl9mdW5jKE5VTEwsIGZpbGVubyhzdGRvdXQp LCBQR19CSU5BUllfQSwgQ0ZIKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIHN0ZG91dCBm b3IgYXBwZW5kaW5nOiAlbSIpOworCUFILT5PRiA9IENGSDsKIAogCS8qCiAJICogT24gV2luZG93 cywgd2UgbmVlZCB0byB1c2UgYmluYXJ5IG1vZGUgdG8gcmVhZC93cml0ZSBub24tdGV4dCBmaWxl cywKQEAgLTM2NDYsMTIgKzM2NTMsNyBAQCBXcml0ZUhlYWQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJ QUgtPldyaXRlQnl0ZVB0cihBSCwgQUgtPmludFNpemUpOwogCUFILT5Xcml0ZUJ5dGVQdHIoQUgs IEFILT5vZmZTaXplKTsKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+Zm9ybWF0KTsKLQkvKgot CSAqIEZvciBub3cgdGhlIGNvbXByZXNzaW9uIHR5cGUgaXMgaW1wbGllZCBieSB0aGUgbGV2ZWwu ICBUaGlzIHdpbGwgbmVlZAotCSAqIHRvIGNoYW5nZSBvbmNlIHN1cHBvcnQgZm9yIG1vcmUgY29t cHJlc3Npb24gYWxnb3JpdGhtcyBpcyBhZGRlZCwKLQkgKiByZXF1aXJpbmcgYSBmb3JtYXQgYnVt cC4KLQkgKi8KLQlXcml0ZUludChBSCwgQUgtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOworCUFI LT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSk7CiAJY3J0 bSA9ICpsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKTsKIAlXcml0ZUludChBSCwgY3J0bS50bV9z ZWMpOwogCVdyaXRlSW50KEFILCBjcnRtLnRtX21pbik7CkBAIC0zNzIzLDEwICszNzI1LDExIEBA IFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlwZ19mYXRhbCgiZXhwZWN0ZWQgZm9ybWF0 ICglZCkgZGlmZmVycyBmcm9tIGZvcm1hdCBmb3VuZCBpbiBmaWxlICglZCkiLAogCQkJCSBBSC0+ Zm9ybWF0LCBmbXQpOwogCi0JLyogR3Vlc3MgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBv biB0aGUgbGV2ZWwgKi8KLQlBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01Q UkVTU0lPTl9OT05FOwotCWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV8yKQorCWlmIChBSC0+ dmVyc2lvbiA+PSBLX1ZFUlNfMV8xNSkKKwkJQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGht ID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsKKwllbHNlIGlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNf MV8yKQogCXsKKwkJLyogR3Vlc3MgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBvbiB0aGUg bGV2ZWwgKi8KIAkJaWYgKEFILT52ZXJzaW9uIDwgS19WRVJTXzFfNCkKIAkJCUFILT5jb21wcmVz c2lvbl9zcGVjLmxldmVsID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsKIAkJZWxzZQpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IDQ3MjVlNDk3NDcuLjE4YjM4YzE3YWIgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAorKysgYi9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTY1LDEwICs2NSwxMyBAQAogI2RlZmlu ZSBLX1ZFUlNfMV8xMyBNQUtFX0FSQ0hJVkVfVkVSU0lPTigxLCAxMywgMCkJLyogY2hhbmdlIHNl YXJjaF9wYXRoCiAJCQkJCQkJCQkJCQkJICogYmVoYXZpb3IgKi8KICNkZWZpbmUgS19WRVJTXzFf MTQgTUFLRV9BUkNISVZFX1ZFUlNJT04oMSwgMTQsIDApCS8qIGFkZCB0YWJsZWFtICovCisjZGVm aW5lIEtfVkVSU18xXzE1IE1BS0VfQVJDSElWRV9WRVJTSU9OKDEsIDE1LCAwKQkvKiBhZGQKKwkJ CQkJCQkJCQkJCQkgKiBjb21wcmVzc2lvbl9hbGdvcml0aG0KKwkJCQkJCQkJCQkJCQkgKiBpbiBo ZWFkZXIgKi8KIAogLyogQ3VycmVudCBhcmNoaXZlIHZlcnNpb24gbnVtYmVyICh0aGUgZm9ybWF0 IHdlIGNhbiBvdXRwdXQpICovCiAjZGVmaW5lIEtfVkVSU19NQUpPUiAxCi0jZGVmaW5lIEtfVkVS U19NSU5PUiAxNAorI2RlZmluZSBLX1ZFUlNfTUlOT1IgMTUKICNkZWZpbmUgS19WRVJTX1JFViAw CiAjZGVmaW5lIEtfVkVSU19TRUxGIE1BS0VfQVJDSElWRV9WRVJTSU9OKEtfVkVSU19NQUpPUiwg S19WRVJTX01JTk9SLCBLX1ZFUlNfUkVWKQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2N1c3RvbS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYwpp bmRleCBkMWU1NDY0NGE5Li41MTJhYjA0M2FmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2N1c3RvbS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9t LmMKQEAgLTI5OCw3ICsyOTgsOSBAQCBfU3RhcnREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NF bnRyeSAqdGUpCiAJX1dyaXRlQnl0ZShBSCwgQkxLX0RBVEEpOwkvKiBCbG9jayB0eXBlICovCiAJ V3JpdGVJbnQoQUgsIHRlLT5kdW1wSWQpOwkvKiBGb3Igc2FuaXR5IGNoZWNrICovCiAKLQljdHgt PmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9zcGVjLCBfQ3VzdG9tV3Jp dGVGdW5jKTsKKwljdHgtPmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9z cGVjLAorCQkJCQkJCQkgTlVMTCwKKwkJCQkJCQkJIF9DdXN0b21Xcml0ZUZ1bmMpOwogfQogCiAv KgpAQCAtMzE3LDE1ICszMTksMTUgQEAgX1dyaXRlRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgY29u c3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCiAJQ29tcHJlc3NvclN0YXRlICpjcyA9IGN0eC0+ Y3M7CiAKIAlpZiAoZExlbiA+IDApCi0JCS8qIFdyaXRlRGF0YVRvQXJjaGl2ZSgpIGludGVybmFs bHkgdGhyb3dzIHdyaXRlIGVycm9ycyAqLwotCQlXcml0ZURhdGFUb0FyY2hpdmUoQUgsIGNzLCBk YXRhLCBkTGVuKTsKKwkJLyogd3JpdGVEYXRhKCkgaW50ZXJuYWxseSB0aHJvd3Mgd3JpdGUgZXJy b3JzICovCisJCWNzLT53cml0ZURhdGEoQUgsIGNzLCBkYXRhLCBkTGVuKTsKIH0KIAogLyoKICAq IENhbGxlZCBieSB0aGUgYXJjaGl2ZXIgd2hlbiBhIGR1bXBlcidzICdEYXRhRHVtcGVyJyByb3V0 aW5lIGhhcwogICogZmluaXNoZWQuCiAgKgotICogT3B0aW9uYWwuCisgKiBNYW5kYXRvcnkuCiAg Ki8KIHN0YXRpYyB2b2lkCiBfRW5kRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRl KQpAQCAtMzMzLDYgKzMzNSw4IEBAIF9FbmREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRy eSAqdGUpCiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7 CiAKIAlFbmRDb21wcmVzc29yKEFILCBjdHgtPmNzKTsKKwljdHgtPmNzID0gTlVMTDsKKwogCS8q IFNlbmQgdGhlIGVuZCBtYXJrZXIgKi8KIAlXcml0ZUludChBSCwgMCk7CiB9CkBAIC0zNzcsNyAr MzgxLDkgQEAgX1N0YXJ0TE8oQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9p ZCkKIAogCVdyaXRlSW50KEFILCBvaWQpOwogCi0JY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3Nv cihBSC0+Y29tcHJlc3Npb25fc3BlYywgX0N1c3RvbVdyaXRlRnVuYyk7CisJY3R4LT5jcyA9IEFs bG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQkJIE5VTEwsCisJ CQkJCQkJCSBfQ3VzdG9tV3JpdGVGdW5jKTsKIH0KIAogLyoKQEAgLTU2Niw3ICs1NzIsMTIgQEAg X1ByaW50VG9jRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogc3RhdGljIHZv aWQKIF9QcmludERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7Ci0JUmVhZERhdGFGcm9tQXJjaGl2 ZShBSCwgQUgtPmNvbXByZXNzaW9uX3NwZWMsIF9DdXN0b21SZWFkRnVuYyk7CisJQ29tcHJlc3Nv clN0YXRlICpjczsKKworCWNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9z cGVjLAorCQkJCQkJCV9DdXN0b21SZWFkRnVuYywgTlVMTCk7CisJY3MtPnJlYWREYXRhKEFILCBj cyk7CisJRW5kQ29tcHJlc3NvcihBSCwgY3MpOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKaW5kZXggNjgwMGMzY2NlZS4uYTJmODg5OTVjMCAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYworKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCkBAIC01MCw5ICs1MCw4IEBAIHR5cGVk ZWYgc3RydWN0CiAJICovCiAJY2hhcgkgICAqZGlyZWN0b3J5OwogCi0JY2ZwCQkgICAqZGF0YUZI OwkJCS8qIGN1cnJlbnRseSBvcGVuIGRhdGEgZmlsZSAqLwotCi0JY2ZwCQkgICAqTE9zVG9jRkg7 CQkvKiBmaWxlIGhhbmRsZSBmb3IgYmxvYnMudG9jICovCisJQ29tcHJlc3NGaWxlSGFuZGxlICpk YXRhRkg7IC8qIGN1cnJlbnRseSBvcGVuIGRhdGEgZmlsZSAqLworCUNvbXByZXNzRmlsZUhhbmRs ZSAqTE9zVG9jRkg7IC8qIGZpbGUgaGFuZGxlIGZvciBibG9icy50b2MgKi8KIAlQYXJhbGxlbFN0 YXRlICpwc3RhdGU7CQkvKiBmb3IgcGFyYWxsZWwgYmFja3VwIC8gcmVzdG9yZSAqLwogfSBsY2xD b250ZXh0OwogCkBAIC0xOTgsMTEgKzE5NywxMSBAQCBJbml0QXJjaGl2ZUZtdF9EaXJlY3Rvcnko QXJjaGl2ZUhhbmRsZSAqQUgpCiAJZWxzZQogCXsJCQkJCQkJLyogUmVhZCBNb2RlICovCiAJCWNo YXIJCWZuYW1lW01BWFBHUEFUSF07Ci0JCWNmcAkJICAgKnRvY0ZIOworCQlDb21wcmVzc0ZpbGVI YW5kbGUgKnRvY0ZIOwogCiAJCXNldEZpbGVQYXRoKEFILCBmbmFtZSwgInRvYy5kYXQiKTsKIAot CQl0b2NGSCA9IGNmb3Blbl9yZWFkKGZuYW1lLCBQR19CSU5BUllfUik7CisJCXRvY0ZIID0gSW5p dERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGZuYW1lLCBQR19CSU5BUllfUik7CiAJCWlmICh0 b2NGSCA9PSBOVUxMKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGlucHV0IGZpbGUgXCIl c1wiOiAlbSIsIGZuYW1lKTsKIApAQCAtMjE4LDcgKzIxNyw3IEBAIEluaXRBcmNoaXZlRm10X0Rp cmVjdG9yeShBcmNoaXZlSGFuZGxlICpBSCkKIAkJUmVhZFRvYyhBSCk7CiAKIAkJLyogTm90aGlu ZyBlbHNlIGluIHRoZSBmaWxlLCBzbyBjbG9zZSBpdCBhZ2Fpbi4uLiAqLwotCQlpZiAoY2ZjbG9z ZSh0b2NGSCkgIT0gMCkKKwkJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZSh0b2NGSCkgIT0gMCkK IAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgVE9DIGZpbGU6ICVtIik7CiAJCWN0eC0+ZGF0 YUZIID0gTlVMTDsKIAl9CkBAIC0zMjcsOSArMzI2LDkgQEAgX1N0YXJ0RGF0YShBcmNoaXZlSGFu ZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCiAJc2V0RmlsZVBhdGgoQUgsIGZuYW1lLCB0Y3R4LT5m aWxlbmFtZSk7CiAKLQljdHgtPmRhdGFGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgUEdfQklOQVJZ X1csCi0JCQkJCQkJICAgQUgtPmNvbXByZXNzaW9uX3NwZWMpOwotCWlmIChjdHgtPmRhdGFGSCA9 PSBOVUxMKQorCWN0eC0+ZGF0YUZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShBSC0+Y29tcHJl c3Npb25fc3BlYyk7CisKKwlpZiAoY3R4LT5kYXRhRkgtPm9wZW5fd3JpdGVfZnVuYyhmbmFtZSwg UEdfQklOQVJZX1csIGN0eC0+ZGF0YUZIKSkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91 dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiB9CiAKQEAgLTM0NiwxNSArMzQ1LDE2IEBA IHN0YXRpYyB2b2lkCiBfV3JpdGVEYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCB2b2lkICpk YXRhLCBzaXplX3QgZExlbikKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBB SC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwog CiAJZXJybm8gPSAwOwotCWlmIChkTGVuID4gMCAmJiBjZndyaXRlKGRhdGEsIGRMZW4sIGN0eC0+ ZGF0YUZIKSAhPSBkTGVuKQorCWlmIChkTGVuID4gMCAmJiBDRkgtPndyaXRlX2Z1bmMoZGF0YSwg ZExlbiwgQ0ZIKSAhPSBkTGVuKQogCXsKIAkJLyogaWYgd3JpdGUgZGlkbid0IHNldCBlcnJubywg YXNzdW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwogCQlpZiAoZXJybm8gPT0gMCkKIAkJ CWVycm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIG91dHB1dCBm aWxlOiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3IoY3R4LT5kYXRhRkgpKTsKKwkJCQkgQ0ZILT5n ZXRfZXJyb3JfZnVuYyhDRkgpKTsKIAl9CiB9CiAKQEAgLTM3MCw3ICszNzAsNyBAQCBfRW5kRGF0 YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCWxjbENvbnRleHQgKmN0eCA9IChs Y2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCiAJLyogQ2xvc2UgdGhlIGZpbGUgKi8KLQlp ZiAoY2ZjbG9zZShjdHgtPmRhdGFGSCkgIT0gMCkKKwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxl KGN0eC0+ZGF0YUZIKSAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGRhdGEgZmls ZTogJW0iKTsKIAogCWN0eC0+ZGF0YUZIID0gTlVMTDsKQEAgLTM4NSwyNiArMzg1LDI1IEBAIF9Q cmludEZpbGVEYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBjaGFyICpmaWxlbmFtZSkKIAlzaXplX3QJ CWNudDsKIAljaGFyCSAgICpidWY7CiAJc2l6ZV90CQlidWZsZW47Ci0JY2ZwCQkgICAqY2ZwOwor CUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCiAJaWYgKCFmaWxlbmFtZSkKIAkJcmV0dXJuOwog Ci0JY2ZwID0gY2ZvcGVuX3JlYWQoZmlsZW5hbWUsIFBHX0JJTkFSWV9SKTsKLQotCWlmICghY2Zw KQorCUNGSCA9IEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShmaWxlbmFtZSwgUEdfQklO QVJZX1IpOworCWlmICghQ0ZIKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gaW5wdXQgZmls ZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogCiAJYnVmID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJ WkUpOwogCWJ1ZmxlbiA9IFpMSUJfT1VUX1NJWkU7CiAKLQl3aGlsZSAoKGNudCA9IGNmcmVhZChi dWYsIGJ1ZmxlbiwgY2ZwKSkpCisJd2hpbGUgKChjbnQgPSBDRkgtPnJlYWRfZnVuYyhidWYsIGJ1 ZmxlbiwgQ0ZIKSkpCiAJewogCQlhaHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7CiAJfQogCiAJZnJl ZShidWYpOwotCWlmIChjZmNsb3NlKGNmcCkgIT0gMCkKKwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFu ZGxlKENGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBkYXRhIGZpbGUgXCIl c1wiOiAlbSIsIGZpbGVuYW1lKTsKIH0KIApAQCAtNDM1LDYgKzQzNCw3IEBAIF9Mb2FkTE9zKEFy Y2hpdmVIYW5kbGUgKkFIKQogewogCU9pZAkJCW9pZDsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNs Q29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAlj aGFyCQl0b2NmbmFtZVtNQVhQR1BBVEhdOwogCWNoYXIJCWxpbmVbTUFYUEdQQVRIXTsKIApAQCAt NDQyLDE0ICs0NDIsMTQgQEAgX0xvYWRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAlzZXRGaWxl UGF0aChBSCwgdG9jZm5hbWUsICJibG9icy50b2MiKTsKIAotCWN0eC0+TE9zVG9jRkggPSBjZm9w ZW5fcmVhZCh0b2NmbmFtZSwgUEdfQklOQVJZX1IpOworCUNGSCA9IGN0eC0+TE9zVG9jRkggPSBJ bml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUodG9jZm5hbWUsIFBHX0JJTkFSWV9SKTsKIAog CWlmIChjdHgtPkxPc1RvY0ZIID09IE5VTEwpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBs YXJnZSBvYmplY3QgVE9DIGZpbGUgXCIlc1wiIGZvciBpbnB1dDogJW0iLAogCQkJCSB0b2NmbmFt ZSk7CiAKIAkvKiBSZWFkIHRoZSBMT3MgVE9DIGZpbGUgbGluZS1ieS1saW5lLCBhbmQgcHJvY2Vz cyBlYWNoIExPICovCi0Jd2hpbGUgKChjZmdldHMoY3R4LT5MT3NUb2NGSCwgbGluZSwgTUFYUEdQ QVRIKSkgIT0gTlVMTCkKKwl3aGlsZSAoKENGSC0+Z2V0c19mdW5jKGxpbmUsIE1BWFBHUEFUSCwg Q0ZIKSkgIT0gTlVMTCkKIAl7CiAJCWNoYXIJCWxvZm5hbWVbTUFYUEdQQVRIICsgMV07CiAJCWNo YXIJCXBhdGhbTUFYUEdQQVRIXTsKQEAgLTQ2NCwxMSArNDY0LDExIEBAIF9Mb2FkTE9zKEFyY2hp dmVIYW5kbGUgKkFIKQogCQlfUHJpbnRGaWxlRGF0YShBSCwgcGF0aCk7CiAJCUVuZFJlc3RvcmVM TyhBSCwgb2lkKTsKIAl9Ci0JaWYgKCFjZmVvZihjdHgtPkxPc1RvY0ZIKSkKKwlpZiAoIUNGSC0+ ZW9mX2Z1bmMoQ0ZIKSkKIAkJcGdfZmF0YWwoImVycm9yIHJlYWRpbmcgbGFyZ2Ugb2JqZWN0IFRP QyBmaWxlIFwiJXNcIiIsCiAJCQkJIHRvY2ZuYW1lKTsKIAotCWlmIChjZmNsb3NlKGN0eC0+TE9z VG9jRkgpICE9IDApCisJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZShjdHgtPkxPc1RvY0ZIKSAh PSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGxhcmdlIG9iamVjdCBUT0MgZmlsZSBc IiVzXCI6ICVtIiwKIAkJCQkgdG9jZm5hbWUpOwogCkBAIC00ODgsMTUgKzQ4OCwxNiBAQCBfV3Jp dGVCeXRlKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBpbnQgaSkKIHsKIAl1bnNpZ25lZCBjaGFy IGMgPSAodW5zaWduZWQgY2hhcikgaTsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAq KSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZI OwogCiAJZXJybm8gPSAwOwotCWlmIChjZndyaXRlKCZjLCAxLCBjdHgtPmRhdGFGSCkgIT0gMSkK KwlpZiAoQ0ZILT53cml0ZV9mdW5jKCZjLCAxLCBDRkgpICE9IDEpCiAJewogCQkvKiBpZiB3cml0 ZSBkaWRuJ3Qgc2V0IGVycm5vLCBhc3N1bWUgcHJvYmxlbSBpcyBubyBkaXNrIHNwYWNlICovCiAJ CWlmIChlcnJubyA9PSAwKQogCQkJZXJybm8gPSBFTk9TUEM7CiAJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgd3JpdGUgdG8gb3V0cHV0IGZpbGU6ICVzIiwKLQkJCQkgZ2V0X2NmcF9lcnJvcihjdHgtPmRh dGFGSCkpOworCQkJCSBDRkgtPmdldF9lcnJvcl9mdW5jKENGSCkpOwogCX0KIAogCXJldHVybiAx OwpAQCAtNTEyLDggKzUxMyw5IEBAIHN0YXRpYyBpbnQKIF9SZWFkQnl0ZShBcmNoaXZlSGFuZGxl ICpBSCkKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0 YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCi0JcmV0dXJuIGNm Z2V0YyhjdHgtPmRhdGFGSCk7CisJcmV0dXJuIENGSC0+Z2V0Y19mdW5jKENGSCk7CiB9CiAKIC8q CkBAIC01MjQsMTUgKzUyNiwxNiBAQCBzdGF0aWMgdm9pZAogX1dyaXRlQnVmKEFyY2hpdmVIYW5k bGUgKkFILCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiB7CiAJbGNsQ29udGV4dCAqY3R4 ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpD RkggPSBjdHgtPmRhdGFGSDsKIAogCWVycm5vID0gMDsKLQlpZiAoY2Z3cml0ZShidWYsIGxlbiwg Y3R4LT5kYXRhRkgpICE9IGxlbikKKwlpZiAoQ0ZILT53cml0ZV9mdW5jKGJ1ZiwgbGVuLCBDRkgp ICE9IGxlbikKIAl7CiAJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9i bGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KIAkJaWYgKGVycm5vID09IDApCiAJCQllcnJubyA9IEVO T1NQQzsKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBvdXRwdXQgZmlsZTogJXMiLAot CQkJCSBnZXRfY2ZwX2Vycm9yKGN0eC0+ZGF0YUZIKSk7CisJCQkJIENGSC0+Z2V0X2Vycm9yX2Z1 bmMoQ0ZIKSk7CiAJfQogfQogCkBAIC01NDUsMTIgKzU0OCwxMyBAQCBzdGF0aWMgdm9pZAogX1Jl YWRCdWYoQXJjaGl2ZUhhbmRsZSAqQUgsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlsY2xD b250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJLyoKLQkgKiBJZiB0aGVyZSB3YXMgYW4g SS9PIGVycm9yLCB3ZSBhbHJlYWR5IGV4aXRlZCBpbiBjZnJlYWQoKSwgc28gaGVyZSB3ZQorCSAq IElmIHRoZXJlIHdhcyBhbiBJL08gZXJyb3IsIHdlIGFscmVhZHkgZXhpdGVkIGluIHJlYWRGKCks IHNvIGhlcmUgd2UKIAkgKiBleGl0IG9uIHNob3J0IHJlYWRzLgogCSAqLwotCWlmIChjZnJlYWQo YnVmLCBsZW4sIGN0eC0+ZGF0YUZIKSAhPSBsZW4pCisJaWYgKENGSC0+cmVhZF9mdW5jKGJ1Ziwg bGVuLCBDRkgpICE9IGxlbikKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQg ZmlsZTogZW5kIG9mIGZpbGUiKTsKIH0KIApAQCAtNTczLDcgKzU3Nyw3IEBAIF9DbG9zZUFyY2hp dmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVXcml0ZSkK IAl7Ci0JCWNmcAkJICAgKnRvY0ZIOworCQlDb21wcmVzc0ZpbGVIYW5kbGUgKnRvY0ZIOwogCQlw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMgPSB7MH07CiAJCWNoYXIJ CWZuYW1lW01BWFBHUEFUSF07CiAKQEAgLTU4NCw4ICs1ODgsOCBAQCBfQ2xvc2VBcmNoaXZlKEFy Y2hpdmVIYW5kbGUgKkFIKQogCiAJCS8qIFRoZSBUT0MgaXMgYWx3YXlzIGNyZWF0ZWQgdW5jb21w cmVzc2VkICovCiAJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05f Tk9ORTsKLQkJdG9jRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLCBjb21wcmVz c2lvbl9zcGVjKTsKLQkJaWYgKHRvY0ZIID09IE5VTEwpCisJCXRvY0ZIID0gSW5pdENvbXByZXNz RmlsZUhhbmRsZShjb21wcmVzc2lvbl9zcGVjKTsKKwkJaWYgKHRvY0ZILT5vcGVuX3dyaXRlX2Z1 bmMoZm5hbWUsIFBHX0JJTkFSWV9XLCB0b2NGSCkpCiAJCQlwZ19mYXRhbCgiY291bGQgbm90IG9w ZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIAkJY3R4LT5kYXRhRkggPSB0b2NG SDsKIApAQCAtNTk4LDcgKzYwMiw3IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgp CiAJCVdyaXRlSGVhZChBSCk7CiAJCUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5OwogCQlXcml0 ZVRvYyhBSCk7Ci0JCWlmIChjZmNsb3NlKHRvY0ZIKSAhPSAwKQorCQlpZiAoRW5kQ29tcHJlc3NG aWxlSGFuZGxlKHRvY0ZIKSAhPSAwKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBUT0Mg ZmlsZTogJW0iKTsKIAkJV3JpdGVEYXRhQ2h1bmtzKEFILCBjdHgtPnBzdGF0ZSk7CiAKQEAgLTY0 OSw4ICs2NTMsOCBAQCBfU3RhcnRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkK IAogCS8qIFRoZSBMTyBUT0MgZmlsZSBpcyBuZXZlciBjb21wcmVzc2VkICovCiAJY29tcHJlc3Np b25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwotCWN0eC0+TE9zVG9jRkgg PSBjZm9wZW5fd3JpdGUoZm5hbWUsICJhYiIsIGNvbXByZXNzaW9uX3NwZWMpOwotCWlmIChjdHgt PkxPc1RvY0ZIID09IE5VTEwpCisJY3R4LT5MT3NUb2NGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5k bGUoY29tcHJlc3Npb25fc3BlYyk7CisJaWYgKGN0eC0+TE9zVG9jRkgtPm9wZW5fd3JpdGVfZnVu YyhmbmFtZSwgImFiIiwgY3R4LT5MT3NUb2NGSCkpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3Bl biBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBAIC02NjcsOSArNjcxLDgg QEAgX1N0YXJ0TE8oQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9pZCkKIAog CXNucHJpbnRmKGZuYW1lLCBNQVhQR1BBVEgsICIlcy9ibG9iXyV1LmRhdCIsIGN0eC0+ZGlyZWN0 b3J5LCBvaWQpOwogCi0JY3R4LT5kYXRhRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFS WV9XLCBBSC0+Y29tcHJlc3Npb25fc3BlYyk7Ci0KLQlpZiAoY3R4LT5kYXRhRkggPT0gTlVMTCkK KwljdHgtPmRhdGFGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPmNvbXByZXNzaW9uX3Nw ZWMpOworCWlmIChjdHgtPmRhdGFGSC0+b3Blbl93cml0ZV9mdW5jKGZuYW1lLCBQR19CSU5BUllf VywgY3R4LT5kYXRhRkgpKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUg XCIlc1wiOiAlbSIsIGZuYW1lKTsKIH0KIApAQCAtNjgyLDE4ICs2ODUsMTkgQEAgc3RhdGljIHZv aWQKIF9FbmRMTyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBPaWQgb2lkKQogewog CWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXBy ZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5MT3NUb2NGSDsKIAljaGFyCQlidWZbNTBdOwogCWlu dAkJCWxlbjsKIAotCS8qIENsb3NlIHRoZSBMTyBkYXRhIGZpbGUgaXRzZWxmICovCi0JaWYgKGNm Y2xvc2UoY3R4LT5kYXRhRkgpICE9IDApCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgTE8g ZGF0YSBmaWxlOiAlbSIpOworCS8qIENsb3NlIHRoZSBCTE9CIGRhdGEgZmlsZSBpdHNlbGYgKi8K KwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+ZGF0YUZIKSAhPSAwKQorCQlwZ19mYXRh bCgiY291bGQgbm90IGNsb3NlIGJsb2IgZGF0YSBmaWxlOiAlbSIpOwogCWN0eC0+ZGF0YUZIID0g TlVMTDsKIAogCS8qIHJlZ2lzdGVyIHRoZSBMTyBpbiBibG9icy50b2MgKi8KIAlsZW4gPSBzbnBy aW50ZihidWYsIHNpemVvZihidWYpLCAiJXUgYmxvYl8ldS5kYXRcbiIsIG9pZCwgb2lkKTsKLQlp ZiAoY2Z3cml0ZShidWYsIGxlbiwgY3R4LT5MT3NUb2NGSCkgIT0gbGVuKQotCQlwZ19mYXRhbCgi Y291bGQgbm90IHdyaXRlIHRvIExPcyBUT0MgZmlsZSIpOworCWlmIChDRkgtPndyaXRlX2Z1bmMo YnVmLCBsZW4sIENGSCkgIT0gbGVuKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIGJs b2JzIFRPQyBmaWxlIik7CiB9CiAKIC8qCkBAIC03MDYsOCArNzEwLDggQEAgX0VuZExPcyhBcmNo aXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xD b250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCi0JaWYgKGNmY2xvc2UoY3R4LT5MT3NUb2NGSCkg IT0gMCkKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBMT3MgVE9DIGZpbGU6ICVtIik7CisJ aWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZShjdHgtPkxPc1RvY0ZIKSAhPSAwKQorCQlwZ19mYXRh bCgiY291bGQgbm90IGNsb3NlIGJsb2JzIFRPQyBmaWxlOiAlbSIpOwogCWN0eC0+TE9zVG9jRkgg PSBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5w bCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IGQ5MjI0N2M5MTUuLjc4 NDU0OTI4Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCisr KyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC05NCw3ICs5NCw3IEBAIG15 ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWNvbW1hbmQgPT4gWwogCQkJCSdwZ19yZXN0b3JlJywgJy1s JywgIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfY3VzdG9tLmR1bXAiLAogCQkJXSwKLQkJCWV4 cGVjdGVkID0+IHFyL0NvbXByZXNzaW9uOiAxLywKKwkJCWV4cGVjdGVkID0+IHFyL0NvbXByZXNz aW9uOiBnemlwLywKIAkJCW5hbWUgICAgID0+ICdkYXRhIGNvbnRlbnQgaXMgZ3ppcC1jb21wcmVz c2VkJwogCQl9LAogCX0sCkBAIC0yMzksOCArMjM5LDggQEAgbXkgJXBnZHVtcF9ydW5zID0gKAog CQkJY29tbWFuZCA9PgogCQkJICBbICdwZ19yZXN0b3JlJywgJy1sJywgIiR0ZW1wZGlyL2RlZmF1 bHRzX2N1c3RvbV9mb3JtYXQuZHVtcCIsIF0sCiAJCQlleHBlY3RlZCA9PiAkc3VwcG9ydHNfZ3pp cCA/Ci0JCQlxci9Db21wcmVzc2lvbjogLTEvIDoKLQkJCXFyL0NvbXByZXNzaW9uOiAwLywKKwkJ CXFyL0NvbXByZXNzaW9uOiBnemlwLyA6CisJCQlxci9Db21wcmVzc2lvbjogbm9uZS8sCiAJCQlu YW1lID0+ICdkYXRhIGNvbnRlbnQgaXMgZ3ppcC1jb21wcmVzc2VkIGJ5IGRlZmF1bHQgaWYgYXZh aWxhYmxlJywKIAkJfSwKIAl9LApAQCAtMjY0LDggKzI2NCw4IEBAIG15ICVwZ2R1bXBfcnVucyA9 ICgKIAkJCWNvbW1hbmQgPT4KIAkJCSAgWyAncGdfcmVzdG9yZScsICctbCcsICIkdGVtcGRpci9k ZWZhdWx0c19kaXJfZm9ybWF0IiwgXSwKIAkJCWV4cGVjdGVkID0+ICRzdXBwb3J0c19nemlwID8K LQkJCXFyL0NvbXByZXNzaW9uOiAtMS8gOgotCQkJcXIvQ29tcHJlc3Npb246IDAvLAorCQkJcXIv Q29tcHJlc3Npb246IGd6aXAvIDoKKwkJCXFyL0NvbXByZXNzaW9uOiBub25lLywKIAkJCW5hbWUg PT4gJ2RhdGEgY29udGVudCBpcyBnemlwLWNvbXByZXNzZWQgYnkgZGVmYXVsdCcsCiAJCX0sCiAJ CWdsb2JfcGF0dGVybnMgPT4gWwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbW9uL2NvbXBy ZXNzaW9uLmggYi9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaAppbmRleCA5YTQ3MWU0 MGFhLi5kNDRlYmIwNmNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Np b24uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaApAQCAtMTQsNiArMTQs MTAgQEAKICNpZm5kZWYgUEdfQ09NUFJFU1NJT05fSAogI2RlZmluZSBQR19DT01QUkVTU0lPTl9I CiAKKy8qCisgKiBUaGVzZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBkaXNjLCBmb3IgZXhhbXBsZSBp biBmaWxlcyBnZW5lcmF0ZWQgYnkgcGdfZHVtcC4KKyAqIENyZWF0ZSB0aGUgbmVjZXNzYXJ5IGJh Y2t3YXJkcyBjb21wYXRpYmlsaXR5IGxheWVycyBpZiB0aGVpciBvcmRlciBjaGFuZ2VzLgorICov CiB0eXBlZGVmIGVudW0gcGdfY29tcHJlc3NfYWxnb3JpdGhtCiB7CiAJUEdfQ09NUFJFU1NJT05f Tk9ORSwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sgYi9z cmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCmluZGV4IGU1MmZlOWY1MDkuLmRiNDI5 NDc0YTIgMTAwNzU1Ci0tLSBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKKysr IGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjawpAQCAtMTUwLDcgKzE1MCw5IEBA IGRvCiAKIAkjIHBnX2R1bXAgaXMgbm90IEMrKy1jbGVhbiBiZWNhdXNlIGl0IHVzZXMgInB1Ymxp YyIgYW5kICJuYW1lc3BhY2UiCiAJIyBhcyBmaWVsZCBuYW1lcywgd2hpY2ggaXMgdW5mb3J0dW5h dGUgYnV0IHdlIHdvbid0IGNoYW5nZSBpdCBub3cuCisJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2d6aXAuaCAmJiBjb250aW51ZQogCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19pby5oICYmIGNvbnRpbnVlCisJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX25vbmUuaCAmJiBjb250aW51ZQogCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdf ZHVtcC9wYXJhbGxlbC5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuaCAmJiBjb250aW51ZQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCA1MTQ4NGNhN2UyLi43ZTYyYzZlZjNkIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAt NDI4LDYgKzQyOCw3IEBAIENvbXBpbGVkRXhwclN0YXRlCiBDb21wb3NpdGVJT0RhdGEKIENvbXBv c2l0ZVR5cGVTdG10CiBDb21wb3VuZEFmZml4RmxhZworQ29tcHJlc3NGaWxlSGFuZGxlCiBDb21w cmVzc2lvbkxvY2F0aW9uCiBDb21wcmVzc29yU3RhdGUKIENvbXB1dGVYaWRIb3Jpem9uc1Jlc3Vs dApAQCAtMTAzNCw2ICsxMDM1LDcgQEAgR3VjU3RhY2sKIEd1Y1N0YWNrU3RhdGUKIEd1Y1N0cmlu Z0Fzc2lnbkhvb2sKIEd1Y1N0cmluZ0NoZWNrSG9vaworR3ppcENvbXByZXNzb3JTdGF0ZQogSEFO RExFCiBIQVNIQUNUSU9OCiBIQVNIQlVDS0VUCi0tIAoyLjM0LjEKCg== --b1_jyo8WOBl4FLDAOkgiAIpbB7AHDpDBkdzTOH9EXFyQE--