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 1pKhqT-0007Mb-Eu for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Jan 2023 15:37:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pKhqR-0003Z8-KH for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Jan 2023 15:37:51 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pKhqQ-0003YO-JV for pgsql-hackers@lists.postgresql.org; Wed, 25 Jan 2023 15:37:51 +0000 Received: from mail-4316.protonmail.ch ([185.70.43.16]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pKhq2-0003Bh-5R for pgsql-hackers@lists.postgresql.org; Wed, 25 Jan 2023 15:37:49 +0000 Date: Wed, 25 Jan 2023 15:37:12 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1674661038; x=1674920238; bh=kBNSz/KVZ5G5sKUcVQBaoWoij61rGZW4LVkQDTnNmLg=; 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=EczEr9yTYGqH9IQzerD6ZwVtOSSyxz/s+fr15po1obY2xOlcv2lUVEMn1kPfdv8Pv c0xtCZ2cQ63vNPFnvIzuJxvqV4LCGDYj1w7bEmxs7ZhymYXUSfcwkzQ3WaRh3Gzg+s ZX3bTg/Cqcken+U8Zs00RaYKjChH7XAgt7fnKq9b2NyRJQP/eQ6cfuyefDbhX30FXm fGeP6+ApVEwnz4eopN5WhIbi9daTwaMNT6f84NiitVOxdHbxb5jwkciYdrt/4GoE0h mqoG2E55zArF5jaUfb0R+wggHp+G5lSDpFNhHYo9jlu6V5pv1mdsWmGPW5MyV8zbq2 69sZgP3KGQcrg== To: Justin Pryzby From: gkokolatos@pm.me Cc: Tomas Vondra , Michael Paquier , pgsql-hackers@lists.postgresql.org, Rachel Heaton Subject: Re: Add LZ4 compression in pg_dump Message-ID: <-myGeDiZ-ePDRyi18026Iu2HTTfmwfjWaJn4OWJ2F3oglZUfJTOQ7FARPW7gYxE4vK3b0HpwYoiHR45nfOWReRvvJZfCBfJzPP5iJyn4muk=@pm.me> In-Reply-To: <20230125014203.GL13860@telsasoft.com> References: <6ab89d42-0345-b96e-02d4-68e171cdbe03@enterprisedb.com> <7zu6GYFi72jByVk2SEe_nd8r1DHhwA35vSntAE9sAfiMX9Lfk6bwimkwmu7GDgYaEvL27SE4qF1uK4_LHWQM4H-SXOwkMAI-GV8PKGmED_E=@pm.me> <20230123180014.GX13860@telsasoft.com> <20230125014203.GL13860@telsasoft.com> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_5qditUewD7dQGtjj6KugnW5ZocxiJwQdw5EMVJVpXc" 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_5qditUewD7dQGtjj6KugnW5ZocxiJwQdw5EMVJVpXc Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Wednesday, January 25th, 2023 at 2:42 AM, Justin Pryzby wrote: >=20 >=20 > On Tue, Jan 24, 2023 at 03:56:20PM +0000, gkokolatos@pm.me wrote: >=20 > > On Monday, January 23rd, 2023 at 7:00 PM, Justin Pryzby pryzby@telsasof= t.com wrote: > >=20 > > > On Mon, Jan 23, 2023 at 05:31:55PM +0000, gkokolatos@pm.me wrote: > > >=20 > > > > Please find attached v23 which reintroduces the split. > > > >=20 > > > > 0001 is reworked to have a reduced footprint than before. Also in a= n attempt > > > > to facilitate the readability, 0002 splits the API's and the uncomp= ressed > > > > implementation in separate files. > > >=20 > > > Thanks for updating the patch. Could you address the review comments = I > > > sent here ? > > > https://www.postgresql.org/message-id/20230108194524.GA27637%40telsas= oft.com > >=20 > > Please find v24 attached. >=20 >=20 > Thanks for updating the patch. >=20 > In 001, RestoreArchive() does: >=20 > > -#ifndef HAVE_LIBZ > > - if (AH->compression_spec.algorithm =3D=3D PG_COMPRESSION_GZIP && > > - AH->PrintTocDataPtr !=3D NULL) > > + supports_compression =3D false; > > + if (AH->compression_spec.algorithm =3D=3D PG_COMPRESSION_NONE || > > + AH->compression_spec.algorithm =3D=3D PG_COMPRESSION_GZIP) > > + supports_compression =3D true; > > + > > + if (AH->PrintTocDataPtr !=3D NULL) > > { > > for (te =3D AH->toc->next; te !=3D AH->toc; te =3D te->next) > > { > > if (te->hadDumper && (te->reqs & REQ_DATA) !=3D 0) > > - pg_fatal("cannot restore from compressed archive (compression not sup= ported in this installation)"); > > + { > > +#ifndef HAVE_LIBZ > > + if (AH->compression_spec.algorithm =3D=3D PG_COMPRESSION_GZIP) > > + supports_compression =3D false; > > +#endif > > + if (supports_compression =3D=3D false) > > + pg_fatal("cannot restore from compressed archive (compression not sup= ported in this installation)"); > > + } > > } > > } > > -#endif >=20 >=20 > This first checks if the algorithm is implemented, and then checks if > the algorithm is supported by the current build - that confused me for a > bit. It seems unnecessary to check for unimplemented algorithms before > looping. That also requires referencing both GZIP and LZ4 in two > places. I am not certain that it is unnecessary, at least not in the way that is described. The idea is that new compression methods can be added, without changing the archive's version number. It is very possible that it is requested to restore an archive compressed with a method not implemented in the current binary. The first check takes care of that and sets supports_compression only for the supported versions. It is possible to enter the loop with supports_compression already set to false, for example because the archive was compressed with ZSTD, triggering the fatal error. Of course, one can throw the error before entering the loop, yet I think that it does not help the readability of the code. IMHO it is easier to follow if the error is thrown once during that check. >=20 > I think it could be written to avoid the need to change for added > compression algorithms: >=20 > + if (te->hadDumper && (te->reqs & REQ_DATA) !=3D 0) >=20 > + { > + /* Check if the compression algorithm is supported */ > + pg_compress_specification spec; > + parse_compress_specification(AH->compression_spec.algorithm, NULL, &spe= c); >=20 > + if (spec->parse_error !=3D NULL) >=20 > + pg_fatal(spec->parse_error); >=20 > + } I am not certain how that would work in the example with ZSTD above. If I am not wrong, parse_compress_specification() will not throw an error if the codebase supports ZSTD, yet this specific pg_dump binary will not support it because ZSTD is not implemented. parse_compress_specification() is not aware of that and should not be aware of it, should it? >=20 > Or maybe add a new function to compression.c to indicate whether a given > algorithm is supported. I am not certain how this would help, as compression.c is supposed to be used by multiple binaries while this is a pg_dump specific detail. > That would also indicate which compression library isn't supported. If anything, I can suggest to throw an error much earlier, i.e. in ReadHead= (), and remove altogether this check. On the other hand, I like the belts and suspenders approach because there are no more checks after this point. > Other than that, I think 001 is ready. Thank you. > 002/003 use these names, which I think are too similar - initially I > didn't even realize there were two separate functions (each with a > second stub function to handle the case of unsupported compression): >=20 > +extern void InitCompressorGzip(CompressorState *cs, const pg_compress_sp= ecification compression_spec); > +extern void InitCompressGzip(CompressFileHandle *CFH, const pg_compress_= specification compression_spec); >=20 > +extern void InitCompressorLZ4(CompressorState *cs, const pg_compress_spe= cification compression_spec); > +extern void InitCompressLZ4(CompressFileHandle *CFH, const pg_compress_s= pecification compression_spec); Fair enough. Names are now updated. >=20 > typo: > s/not build with/not built with/ Thank you. >=20 > Should AllocateCompressor() set cs->compression_spec, rather than doing > it in each compressor ? I think that compression_spec should be owned by each compressor. With that in mind, it makes more sense to set it within each compressor. This is not a hill I am willing to die on though. Please find v25 attached. >=20 > Thanks for considering. >=20 > -- > Justin --b1_5qditUewD7dQGtjj6KugnW5ZocxiJwQdw5EMVJVpXc Content-Type: text/x-patch; name=v25-0001-Prepare-pg_dump-internals-for-additional-compres.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v25-0001-Prepare-pg_dump-internals-for-additional-compres.patch RnJvbSA1Y2YxMjhiYzQ5ZDQ3YTFlNWE3NjNkZDc3YTIyNDVjYjdlNTY4MGU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFdlZCwgMjUgSmFuIDIwMjMgMTQ6NDM6MjMgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NSAxLzNdIFByZXBhcmUgcGdfZHVtcCBpbnRlcm5hbHMgZm9yIGFkZGl0aW9uYWwgY29tcHJlc3Np b24KIG1ldGhvZHMuCgpDb21taXQgIGJmOWFhNDkwZGIgaW50cm9kdWNlZCBjZnAgaW4gY29tcHJl c3NfaW8ue2MsaH0gd2l0aCB0aGUgaW50ZW50IG9mCnVuaWZ5aW5nIGNvbXByZXNzaW9uIHJlbGF0 ZWQgY29kZSBhbmQgYWxsb3cgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYWRkaXRpb25hbAphcmNo aXZlIGZvcm1hdHMuIEhvd2V2ZXIsIHBnX2JhY2t1cF9hcmNoaXZlci5jIHdhcyBub3QgdXNpbmcg dGhhdCBBUEkuIFRoaXMKY29tbWl0IHRlYWNoZXMgcGdfYmFja3VwX2FyY2hpdmVyLmMgYWJvdXQg aXQgYW5kIGlzIHVzaW5nIGl0IHRocm91Z2hvdXQuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2lvLmMgICAgICAgIHwgIDY2ICsrKysrKysrKysrLS0tCiBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uaCAgICAgICAgfCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5jIHwgMTMyICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5oIHwgIDI3ICstLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxMDMg aW5zZXJ0aW9ucygrKSwgMTI0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19pby5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKaW5kZXgg N2EyYzgwYmJjNC4uZWYwMzM5MTRiYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2lvLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTU2LDYgKzU2 LDEwIEBACiAjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRp bHMuaCIKIAorI2lmZGVmIEhBVkVfTElCWgorI2luY2x1ZGUgPHpsaWIuaD4KKyNlbmRpZgorCiAv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENvbXByZXNzb3IgQVBJCiAgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KQEAgLTQ5MCwxNiArNDk0LDE5IEBAIGNmb3Blbl93cml0ZShjb25zdCBjaGFy ICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogfQogCiAvKgotICogT3BlbnMgZmlsZSAncGF0aCcg aW4gJ21vZGUnLiBJZiBjb21wcmVzc2lvbiBpcyBHWklQLCB0aGUgZmlsZQotICogaXMgb3BlbmVk IHdpdGggbGlieiBnem9wZW4oKSwgb3RoZXJ3aXNlIHdpdGggcGxhaW4gZm9wZW4oKS4KKyAqIFRo aXMgaXMgdGhlIHdvcmtob3JzZSBmb3IgY2ZvcGVuKCkgb3IgY2Zkb3BlbigpLiBJdCBvcGVucyBm aWxlICdwYXRoJyBvcgorICogYXNzb2NpYXRlcyBhIHN0cmVhbSAnZmQnLCBpZiAnZmQnIGlzIGEg dmFsaWQgZGVzY3JpcHRvciwgaW4gJ21vZGUnLiBUaGUKKyAqIGRlc2NyaXB0b3IgaXMgbm90IGR1 cCdlZCBhbmQgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGRvIHNvLgorICog VGhlIGNhbGxlciBtdXN0IHZlcmlmeSB0aGF0IHRoZSAnY29tcHJlc3NfYWxnb3JpdGhtJyBpcyBz dXBwb3J0ZWQgYnkgdGhlCisgKiBjdXJyZW50IGJ1aWxkLgogICoKICAqIE9uIGZhaWx1cmUsIHJl dHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KICAqLwotY2ZwICoKLWNmb3Bl bihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAotCSAgIGNvbnN0IHBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3N0YXRpYyBjZnAgKgorY2ZvcGVu X2ludGVybmFsKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKKwkJ CQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiB7Ci0JY2ZwCQkg ICAqZnAgPSBwZ19tYWxsb2Moc2l6ZW9mKGNmcCkpOworCWNmcAkJICAgKmZwID0gcGdfbWFsbG9j MChzaXplb2YoY2ZwKSk7CiAKIAlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdf Q09NUFJFU1NJT05fR1pJUCkKIAl7CkBAIC01MTEsMTUgKzUxOCwyMCBAQCBjZm9wZW4oY29uc3Qg Y2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKIAogCQkJc25wcmludGYobW9kZV9jb21wcmVz c2lvbiwgc2l6ZW9mKG1vZGVfY29tcHJlc3Npb24pLCAiJXMlZCIsCiAJCQkJCSBtb2RlLCBjb21w cmVzc2lvbl9zcGVjLmxldmVsKTsKLQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwg bW9kZV9jb21wcmVzc2lvbik7CisJCQlpZiAoZmQgPj0gMCkKKwkJCQlmcC0+Y29tcHJlc3NlZGZw ID0gZ3pkb3BlbihmZCwgbW9kZV9jb21wcmVzc2lvbik7CisJCQllbHNlCisJCQkJZnAtPmNvbXBy ZXNzZWRmcCA9IGd6b3BlbihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKIAkJfQogCQllbHNlCiAJ CXsKIAkJCS8qIGRvbid0IHNwZWNpZnkgYSBsZXZlbCwganVzdCB1c2UgdGhlIHpsaWIgZGVmYXVs dCAqLwotCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6b3BlbihwYXRoLCBtb2RlKTsKKwkJCWlmIChm ZCA+PSAwKQorCQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnemRvcGVuKGZkLCBtb2RlKTsKKwkJCWVs c2UKKwkJCQlmcC0+Y29tcHJlc3NlZGZwID0gZ3pvcGVuKHBhdGgsIG1vZGUpOwogCQl9CiAKLQkJ ZnAtPnVuY29tcHJlc3NlZGZwID0gTlVMTDsKIAkJaWYgKGZwLT5jb21wcmVzc2VkZnAgPT0gTlVM TCkKIAkJewogCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKQEAgLTUzMSwxMCArNTQzLDExIEBAIGNm b3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogCX0KIAllbHNlCiAJewot I2lmZGVmIEhBVkVfTElCWgotCQlmcC0+Y29tcHJlc3NlZGZwID0gTlVMTDsKLSNlbmRpZgotCQlm cC0+dW5jb21wcmVzc2VkZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsKKwkJaWYgKGZkID49IDApCisJ CQlmcC0+dW5jb21wcmVzc2VkZnAgPSBmZG9wZW4oZmQsIG1vZGUpOworCQllbHNlCisJCQlmcC0+ dW5jb21wcmVzc2VkZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsKKwogCQlpZiAoZnAtPnVuY29tcHJl c3NlZGZwID09IE5VTEwpCiAJCXsKIAkJCWZyZWVfa2VlcF9lcnJubyhmcCk7CkBAIC01NDUsNiAr NTU4LDMzIEBAIGNmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogCXJl dHVybiBmcDsKIH0KIAorLyoKKyAqIE9wZW5zIGZpbGUgJ3BhdGgnIGluICdtb2RlJyBhbmQgY29t cHJlc3Npb24gYXMgZGVmaW5lZCBpbgorICogY29tcHJlc3Npb25fc3BlYy4gVGhlIGNhbGxlciBt dXN0IHZlcmlmeSB0aGF0IHRoZSBjb21wcmVzc2lvbgorICogaXMgc3VwcG9ydGVkIGJ5IHRoZSBj dXJyZW50IGJ1aWxkLgorICoKKyAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJy b3IgY29kZSBpbiBlcnJuby4KKyAqLworY2ZwICoKK2Nmb3Blbihjb25zdCBjaGFyICpwYXRoLCBj b25zdCBjaGFyICptb2RlLAorCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29t cHJlc3Npb25fc3BlYykKK3sKKwlyZXR1cm4gY2ZvcGVuX2ludGVybmFsKHBhdGgsIC0xLCBtb2Rl LCBjb21wcmVzc2lvbl9zcGVjKTsKK30KKworLyoKKyAqIEFzc29jaWF0ZXMgYSBzdHJlYW0gJ2Zk JywgaWYgJ2ZkJyBpcyBhIHZhbGlkIGRlc2NyaXB0b3IsIGluICdtb2RlJworICogYW5kIGNvbXBy ZXNzaW9uIGFzIGRlZmluZWQgaW4gY29tcHJlc3Npb25fc3BlYy4gVGhlIGNhbGxlciBtdXN0Cisg KiB2ZXJpZnkgdGhhdCB0aGUgY29tcHJlc3Npb24gaXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50 IGJ1aWxkLgorICoKKyAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29k ZSBpbiBlcnJuby4KKyAqLworY2ZwICoKK2NmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2Rl LAorCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7 CisJcmV0dXJuIGNmb3Blbl9pbnRlcm5hbChOVUxMLCBmZCwgbW9kZSwgY29tcHJlc3Npb25fc3Bl Yyk7Cit9CiAKIGludAogY2ZyZWFkKHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAqZnApCmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaCBiL3NyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19pby5oCmluZGV4IGE0MjlkYzQ3ODkuLmE2Y2RmNTg4ZGQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVz c19pby5oCkBAIC01NCw2ICs1NCw4IEBAIHR5cGVkZWYgc3RydWN0IGNmcCBjZnA7CiAKIGV4dGVy biBjZnAgKmNmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogCQkJCSAg IGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CitleHRl cm4gY2ZwICpjZmRvcGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKKwkJCQkJY29uc3QgcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKIGV4dGVybiBjZnAgKmNm b3Blbl9yZWFkKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpOwogZXh0ZXJuIGNm cCAqY2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCiAJCQkJ CQkgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCBiYTVlNmFjYmJiLi41ZjUyZWE0MGU4 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC0zMSw2ICszMSw3IEBACiAj ZW5kaWYKIAogI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb21wcmVzc19p by5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191 dGlscy5oIgogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCkBAIC00MywxMyArNDQsNiBAQAog I2RlZmluZSBURVhUX0RVTVBfSEVBREVSICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBkdW1w XG4tLVxuXG4iCiAjZGVmaW5lIFRFWFRfRFVNUEFMTF9IRUFERVIgIi0tXG4tLSBQb3N0Z3JlU1FM IGRhdGFiYXNlIGNsdXN0ZXIgZHVtcFxuLS1cblxuIgogCi0vKiBzdGF0ZSBuZWVkZWQgdG8gc2F2 ZS9yZXN0b3JlIGFuIGFyY2hpdmUncyBvdXRwdXQgdGFyZ2V0ICovCi10eXBlZGVmIHN0cnVjdCBf b3V0cHV0Q29udGV4dAotewotCXZvaWQJICAgKk9GOwotCWludAkJCWd6T3V0OwotfSBPdXRwdXRD b250ZXh0OwotCiAvKgogICogU3RhdGUgZm9yIHRyYWNraW5nIFRvY0VudHJ5cyB0aGF0IGFyZSBy ZWFkeSB0byBwcm9jZXNzIGR1cmluZyBhIHBhcmFsbGVsCiAgKiByZXN0b3JlLiAgKFRoaXMgdXNl ZCB0byBiZSBhIGxpc3QsIGFuZCB3ZSBzdGlsbCBjYWxsIGl0IHRoYXQsIHRob3VnaCBub3cKQEAg LTEwMSw4ICs5NSw4IEBAIHN0YXRpYyB2b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFI KTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNo YXIgKm1zZywgdGltZV90IHRpbSk7CiBzdGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRs ZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7Ci1zdGF0aWMgT3V0cHV0Q29udGV4dCBTYXZl T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKLXN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJj aGl2ZUhhbmRsZSAqQUgsIE91dHB1dENvbnRleHQgc2F2ZWRDb250ZXh0KTsKK3N0YXRpYyBjZnAg KlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOworc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1 dChBcmNoaXZlSGFuZGxlICpBSCwgY2ZwICpzYXZlZE91dHB1dCk7CiAKIHN0YXRpYyBpbnQJcmVz dG9yZV90b2NfZW50cnkoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgYm9vbCBpc19w YXJhbGxlbCk7CiBzdGF0aWMgdm9pZCByZXN0b3JlX3RvY19lbnRyaWVzX3ByZWZvcmsoQXJjaGl2 ZUhhbmRsZSAqQUgsCkBAIC0yNzcsMTEgKzI3MSw4IEBAIENsb3NlQXJjaGl2ZShBcmNoaXZlICpB SFgpCiAJQUgtPkNsb3NlUHRyKEFIKTsKIAogCS8qIENsb3NlIHRoZSBvdXRwdXQgKi8KLQllcnJu byA9IDA7CQkJCQkvKiBpbiBjYXNlIGd6Y2xvc2UoKSBkb2Vzbid0IHNldCBpdCAqLwotCWlmIChB SC0+Z3pPdXQpCi0JCXJlcyA9IEdaQ0xPU0UoQUgtPk9GKTsKLQllbHNlIGlmIChBSC0+T0YgIT0g c3Rkb3V0KQotCQlyZXMgPSBmY2xvc2UoQUgtPk9GKTsKKwllcnJubyA9IDA7CisJcmVzID0gY2Zj bG9zZShBSC0+T0YpOwogCiAJaWYgKHJlcyAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNs b3NlIG91dHB1dCBmaWxlOiAlbSIpOwpAQCAtMzYyLDggKzM1Myw5IEBAIFJlc3RvcmVBcmNoaXZl KEFyY2hpdmUgKkFIWCkKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFI WDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKIAlib29sCQlwYXJh bGxlbF9tb2RlOworCWJvb2wJCXN1cHBvcnRzX2NvbXByZXNzaW9uOwogCVRvY0VudHJ5ICAgKnRl OwotCU91dHB1dENvbnRleHQgc2F2OworCWNmcAkJICAgKnNhdjsKIAogCUFILT5zdGFnZSA9IFNU QUdFX0lOSVRJQUxJWklORzsKIApAQCAtMzkxLDE3ICszODMsMjYgQEAgUmVzdG9yZUFyY2hpdmUo QXJjaGl2ZSAqQUhYKQogCS8qCiAJICogTWFrZSBzdXJlIHdlIHdvbid0IG5lZWQgKGRlKWNvbXBy ZXNzaW9uIHdlIGhhdmVuJ3QgZ290CiAJICovCi0jaWZuZGVmIEhBVkVfTElCWgotCWlmIChBSC0+ Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCAmJgotCQlB SC0+UHJpbnRUb2NEYXRhUHRyICE9IE5VTEwpCisJc3VwcG9ydHNfY29tcHJlc3Npb24gPSBmYWxz ZTsKKwlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9O X05PTkUgfHwKKwkJQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNT SU9OX0daSVApCisJCXN1cHBvcnRzX2NvbXByZXNzaW9uID0gdHJ1ZTsKKworCWlmIChBSC0+UHJp bnRUb2NEYXRhUHRyICE9IE5VTEwpCiAJewogCQlmb3IgKHRlID0gQUgtPnRvYy0+bmV4dDsgdGUg IT0gQUgtPnRvYzsgdGUgPSB0ZS0+bmV4dCkKIAkJewogCQkJaWYgKHRlLT5oYWREdW1wZXIgJiYg KHRlLT5yZXFzICYgUkVRX0RBVEEpICE9IDApCi0JCQkJcGdfZmF0YWwoImNhbm5vdCByZXN0b3Jl IGZyb20gY29tcHJlc3NlZCBhcmNoaXZlIChjb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkIGluIHRo aXMgaW5zdGFsbGF0aW9uKSIpOworCQkJeworI2lmbmRlZiBIQVZFX0xJQloKKwkJCQlpZiAoQUgt PmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCQkJ CXN1cHBvcnRzX2NvbXByZXNzaW9uID0gZmFsc2U7CisjZW5kaWYKKwkJCQlpZiAoc3VwcG9ydHNf Y29tcHJlc3Npb24gPT0gZmFsc2UpCisJCQkJCXBnX2ZhdGFsKCJjYW5ub3QgcmVzdG9yZSBmcm9t IGNvbXByZXNzZWQgYXJjaGl2ZSAoY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCBpbiB0aGlzIGlu c3RhbGxhdGlvbikiKTsKKwkJCX0KIAkJfQogCX0KLSNlbmRpZgogCiAJLyoKIAkgKiBQcmVwYXJl IGluZGV4IGFycmF5cywgc28gd2UgY2FuIGFzc3VtZSB3ZSBoYXZlIHRoZW0gdGhyb3VnaG91dCBy ZXN0b3JlLgpAQCAtMTEzMyw3ICsxMTM0LDcgQEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFI WCkKIAlUb2NFbnRyeSAgICp0ZTsKIAlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21w cmVzc2lvbl9zcGVjID0gezB9OwogCXRlU2VjdGlvbgljdXJTZWN0aW9uOwotCU91dHB1dENvbnRl eHQgc2F2OworCWNmcAkJICAgKnNhdjsKIAljb25zdCBjaGFyICpmbXROYW1lOwogCWNoYXIJCXN0 YW1wX3N0cls2NF07CiAKQEAgLTE1MDgsNTggKzE1MDksMzIgQEAgc3RhdGljIHZvaWQKIFNldE91 dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCSAgY29uc3Qg cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogewotCWludAkJCWZu OworCWNvbnN0IGNoYXIgKm1vZGU7CisJaW50CQkJZm4gPSAtMTsKIAogCWlmIChmaWxlbmFtZSkK IAl7CiAJCWlmIChzdHJjbXAoZmlsZW5hbWUsICItIikgPT0gMCkKIAkJCWZuID0gZmlsZW5vKHN0 ZG91dCk7Ci0JCWVsc2UKLQkJCWZuID0gLTE7CiAJfQogCWVsc2UgaWYgKEFILT5GSCkKIAkJZm4g PSBmaWxlbm8oQUgtPkZIKTsKIAllbHNlIGlmIChBSC0+ZlNwZWMpCiAJewotCQlmbiA9IC0xOwog CQlmaWxlbmFtZSA9IEFILT5mU3BlYzsKIAl9CiAJZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQp OwogCi0JLyogSWYgY29tcHJlc3Npb24gZXhwbGljaXRseSByZXF1ZXN0ZWQsIHVzZSBnem9wZW4g Ki8KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0g UEdfQ09NUFJFU1NJT05fR1pJUCkKLQl7Ci0JCWNoYXIJCWZtb2RlWzE0XTsKKwlpZiAoQUgtPm1v ZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJCW1vZGUgPSBQR19CSU5BUllfQTsKKwllbHNlCisJCW1v ZGUgPSBQR19CSU5BUllfVzsKIAotCQkvKiBEb24ndCB1c2UgUEdfQklOQVJZX3ggc2luY2UgdGhp cyBpcyB6bGliICovCi0JCXNwcmludGYoZm1vZGUsICJ3YiVkIiwgY29tcHJlc3Npb25fc3BlYy5s ZXZlbCk7Ci0JCWlmIChmbiA+PSAwKQotCQkJQUgtPk9GID0gZ3pkb3BlbihkdXAoZm4pLCBmbW9k ZSk7Ci0JCWVsc2UKLQkJCUFILT5PRiA9IGd6b3BlbihmaWxlbmFtZSwgZm1vZGUpOwotCQlBSC0+ Z3pPdXQgPSAxOwotCX0KKwlpZiAoZm4gPj0gMCkKKwkJQUgtPk9GID0gY2Zkb3BlbihkdXAoZm4p LCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKIAllbHNlCi0jZW5kaWYKLQl7CQkJCQkJCS8qIFVz ZSBmb3BlbiAqLwotCQlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCi0JCXsKLQkJCWlm IChmbiA+PSAwKQotCQkJCUFILT5PRiA9IGZkb3BlbihkdXAoZm4pLCBQR19CSU5BUllfQSk7Ci0J CQllbHNlCi0JCQkJQUgtPk9GID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9BKTsKLQkJfQot CQllbHNlCi0JCXsKLQkJCWlmIChmbiA+PSAwKQotCQkJCUFILT5PRiA9IGZkb3BlbihkdXAoZm4p LCBQR19CSU5BUllfVyk7Ci0JCQllbHNlCi0JCQkJQUgtPk9GID0gZm9wZW4oZmlsZW5hbWUsIFBH X0JJTkFSWV9XKTsKLQkJfQotCQlBSC0+Z3pPdXQgPSAwOwotCX0KKwkJQUgtPk9GID0gY2ZvcGVu KGZpbGVuYW1lLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKIAogCWlmICghQUgtPk9GKQogCXsK QEAgLTE1NzAsMzMgKzE1NDUsMjQgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25z dCBjaGFyICpmaWxlbmFtZSwKIAl9CiB9CiAKLXN0YXRpYyBPdXRwdXRDb250ZXh0CitzdGF0aWMg Y2ZwICoKIFNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7Ci0JT3V0cHV0Q29udGV4dCBz YXY7Ci0KLQlzYXYuT0YgPSBBSC0+T0Y7Ci0Jc2F2Lmd6T3V0ID0gQUgtPmd6T3V0OwotCi0JcmV0 dXJuIHNhdjsKKwlyZXR1cm4gKGNmcCAqKSBBSC0+T0Y7CiB9CiAKIHN0YXRpYyB2b2lkCi1SZXN0 b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBPdXRwdXRDb250ZXh0IHNhdmVkQ29udGV4dCkK K1Jlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNmcCAqc2F2ZWRPdXRwdXQpCiB7CiAJ aW50CQkJcmVzOwogCi0JZXJybm8gPSAwOwkJCQkJLyogaW4gY2FzZSBnemNsb3NlKCkgZG9lc24n dCBzZXQgaXQgKi8KLQlpZiAoQUgtPmd6T3V0KQotCQlyZXMgPSBHWkNMT1NFKEFILT5PRik7Ci0J ZWxzZQotCQlyZXMgPSBmY2xvc2UoQUgtPk9GKTsKKwllcnJubyA9IDA7CisJcmVzID0gY2ZjbG9z ZShBSC0+T0YpOwogCiAJaWYgKHJlcyAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3Nl IG91dHB1dCBmaWxlOiAlbSIpOwogCi0JQUgtPmd6T3V0ID0gc2F2ZWRDb250ZXh0Lmd6T3V0Owot CUFILT5PRiA9IHNhdmVkQ29udGV4dC5PRjsKKwlBSC0+T0YgPSBzYXZlZE91dHB1dDsKIH0KIAog CkBAIC0xNzIwLDIyICsxNjg2LDE3IEBAIGFod3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qg c2l6ZSwgc2l6ZV90IG5tZW1iLCBBcmNoaXZlSGFuZGxlICpBSCkKIAogCQlieXRlc193cml0dGVu ID0gc2l6ZSAqIG5tZW1iOwogCX0KLQllbHNlIGlmIChBSC0+Z3pPdXQpCi0JCWJ5dGVzX3dyaXR0 ZW4gPSBHWldSSVRFKHB0ciwgc2l6ZSwgbm1lbWIsIEFILT5PRik7CiAJZWxzZSBpZiAoQUgtPkN1 c3RvbU91dFB0cikKIAkJYnl0ZXNfd3JpdHRlbiA9IEFILT5DdXN0b21PdXRQdHIoQUgsIHB0ciwg c2l6ZSAqIG5tZW1iKTsKIAorCS8qCisJICogSWYgd2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQg aXQncyBkaXJlY3QgdG8gREIsIGFuZCB3ZSdyZSBjb25uZWN0ZWQKKwkgKiB0aGVuIHNlbmQgaXQg dG8gdGhlIERCLgorCSAqLworCWVsc2UgaWYgKFJlc3RvcmluZ1RvREIoQUgpKQorCQlieXRlc193 cml0dGVuID0gRXhlY3V0ZVNxbENvbW1hbmRCdWYoJkFILT5wdWJsaWMsIChjb25zdCBjaGFyICop IHB0ciwgc2l6ZSAqIG5tZW1iKTsKIAllbHNlCi0JewotCQkvKgotCQkgKiBJZiB3ZSdyZSBkb2lu ZyBhIHJlc3RvcmUsIGFuZCBpdCdzIGRpcmVjdCB0byBEQiwgYW5kIHdlJ3JlCi0JCSAqIGNvbm5l Y3RlZCB0aGVuIHNlbmQgaXQgdG8gdGhlIERCLgotCQkgKi8KLQkJaWYgKFJlc3RvcmluZ1RvREIo QUgpKQotCQkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1dGVTcWxDb21tYW5kQnVmKCZBSC0+cHVibGlj LCAoY29uc3QgY2hhciAqKSBwdHIsIHNpemUgKiBubWVtYik7Ci0JCWVsc2UKLQkJCWJ5dGVzX3dy aXR0ZW4gPSBmd3JpdGUocHRyLCBzaXplLCBubWVtYiwgQUgtPk9GKSAqIHNpemU7Ci0JfQorCQli eXRlc193cml0dGVuID0gY2Z3cml0ZShwdHIsIHNpemUgKiBubWVtYiwgQUgtPk9GKTsKIAogCWlm IChieXRlc193cml0dGVuICE9IHNpemUgKiBubWVtYikKIAkJV1JJVEVfRVJST1JfRVhJVDsKQEAg LTIyMjQsNiArMjE4NSw3IEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBB cmNoaXZlRm9ybWF0IGZtdCwKIAkJIFNldHVwV29ya2VyUHRyVHlwZSBzZXR1cFdvcmtlclB0cikK IHsKIAlBcmNoaXZlSGFuZGxlICpBSDsKKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIG91dF9j b21wcmVzc19zcGVjID0gezB9OwogCiAJcGdfbG9nX2RlYnVnKCJhbGxvY2F0aW5nIEFIIGZvciAl cywgZm9ybWF0ICVkIiwKIAkJCQkgRmlsZVNwZWMgPyBGaWxlU3BlYyA6ICIoc3RkaW8pIiwgZm10 KTsKQEAgLTIyNzcsOCArMjIzOSw4IEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBj b25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAltZW1zZXQoJihBSC0+c3FscGFyc2UpLCAwLCBzaXpl b2YoQUgtPnNxbHBhcnNlKSk7CiAKIAkvKiBPcGVuIHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9u IGZvciBBSCBvdXRwdXQgaGFuZGxlICovCi0JQUgtPmd6T3V0ID0gMDsKLQlBSC0+T0YgPSBzdGRv dXQ7CisJb3V0X2NvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsK KwlBSC0+T0YgPSBjZmRvcGVuKGR1cChmaWxlbm8oc3Rkb3V0KSksIFBHX0JJTkFSWV9BLCBvdXRf Y29tcHJlc3Nfc3BlYyk7CiAKIAkvKgogCSAqIE9uIFdpbmRvd3MsIHdlIG5lZWQgdG8gdXNlIGJp bmFyeSBtb2RlIHRvIHJlYWQvd3JpdGUgbm9uLXRleHQgZmlsZXMsCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2FyY2hpdmVyLmgKaW5kZXggZjcyNDQ2ZWQ1Yi4uNDcyNWU0OTc0NyAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAtMzIsMzAgKzMyLDYgQEAKIAogI2RlZmluZSBMT0JC VUZTSVpFIDE2Mzg0CiAKLSNpZmRlZiBIQVZFX0xJQloKLSNpbmNsdWRlIDx6bGliLmg+Ci0jZGVm aW5lIEdaQ0xPU0UoZmgpIGd6Y2xvc2UoZmgpCi0jZGVmaW5lIEdaV1JJVEUocCwgcywgbiwgZmgp IGd6d3JpdGUoZmgsIHAsIChuKSAqIChzKSkKLSNkZWZpbmUgR1pSRUFEKHAsIHMsIG4sIGZoKSBn enJlYWQoZmgsIHAsIChuKSAqIChzKSkKLSNkZWZpbmUgR1pFT0YoZmgpCWd6ZW9mKGZoKQotI2Vs c2UKLSNkZWZpbmUgR1pDTE9TRShmaCkgZmNsb3NlKGZoKQotI2RlZmluZSBHWldSSVRFKHAsIHMs IG4sIGZoKSAoZndyaXRlKHAsIHMsIG4sIGZoKSAqIChzKSkKLSNkZWZpbmUgR1pSRUFEKHAsIHMs IG4sIGZoKSBmcmVhZChwLCBzLCBuLCBmaCkKLSNkZWZpbmUgR1pFT0YoZmgpCWZlb2YoZmgpCi0v KiB0aGlzIGlzIGp1c3QgdGhlIHJlZGVmaW5pdGlvbiBvZiBhIGxpYnogY29uc3RhbnQgKi8KLSNk ZWZpbmUgWl9ERUZBVUxUX0NPTVBSRVNTSU9OICgtMSkKLQotdHlwZWRlZiBzdHJ1Y3QgX3pfc3Ry ZWFtCi17Ci0Jdm9pZAkgICAqbmV4dF9pbjsKLQl2b2lkCSAgICpuZXh0X291dDsKLQlzaXplX3QJ CWF2YWlsX2luOwotCXNpemVfdAkJYXZhaWxfb3V0OwotfSB6X3N0cmVhbTsKLXR5cGVkZWYgel9z dHJlYW0gKnpfc3RyZWFtcDsKLSNlbmRpZgotCiAvKiBEYXRhIGJsb2NrIHR5cGVzICovCiAjZGVm aW5lIEJMS19EQVRBIDEKICNkZWZpbmUgQkxLX0JMT0JTIDMKQEAgLTMxOSw4ICsyOTUsNyBAQCBz dHJ1Y3QgX2FyY2hpdmVIYW5kbGUKIAogCWNoYXIJICAgKmZTcGVjOwkJCS8qIEFyY2hpdmUgRmls ZSBTcGVjICovCiAJRklMRQkgICAqRkg7CQkJCS8qIEdlbmVyYWwgcHVycG9zZSBmaWxlIGhhbmRs ZSAqLwotCXZvaWQJICAgKk9GOwotCWludAkJCWd6T3V0OwkJCS8qIE91dHB1dCBmaWxlICovCisJ dm9pZAkgICAqT0Y7CQkJCS8qIE91dHB1dCBmaWxlICovCiAKIAlzdHJ1Y3QgX3RvY0VudHJ5ICp0 b2M7CQkvKiBIZWFkZXIgb2YgY2lyY3VsYXIgbGlzdCBvZiBUT0MgZW50cmllcyAqLwogCWludAkJ CXRvY0NvdW50OwkJLyogTnVtYmVyIG9mIFRPQyBlbnRyaWVzICovCi0tIAoyLjM0LjEKCg== --b1_5qditUewD7dQGtjj6KugnW5ZocxiJwQdw5EMVJVpXc Content-Type: text/x-patch; name=v25-0002-Introduce-Compress-and-Compressor-API-in-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v25-0002-Introduce-Compress-and-Compressor-API-in-pg_dump.patch RnJvbSA4YWE0NTJkMzI3YzE4NGNmNTQ3OTc0MzBlNGQ5MTJhYzk1NmVjMTg3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFdlZCwgMjUgSmFuIDIwMjMgMTQ6NDU6NTAgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NSAyLzNdIEludHJvZHVjZSBDb21wcmVzcyBhbmQgQ29tcHJlc3NvciBBUEkgaW4gcGdfZHVtcAoK VGhlIHB1cnBvc2Ugb2YgdGhpcyBBUEkgaXMgdG8gYWxsb3cgZm9yIGVhc2llciBhZGRpdGlvbiBv ZiBuZXcgY29tcHJlc3Npb24KbWV0aG9kcy4gQ29tcHJlc3NGaWxlSGFuZGxlIGlzIHN1YnN0aXR1 dGluZyB0aGUgY2ZwKiBmYW1pbHkgb2YgZnVuY3Rpb25zIHVuZGVyIGEKc3RydWN0IG9mIGZ1bmN0 aW9uIHBvaW50ZXJzIGZvciBmaWxlIG1hbmlwdWxhdGlvbi4gVGhlIGltcGxlbWVudG9yIG9mIGEg bmV3CmNvbXByZXNzaW9uIG1ldGhvZCBpcyBub3cgYWJsZSB0byAic2ltcGx5IiBqdXN0IGFkZCB0 aG9zZSBkZWZpbml0aW9ucy4KCkFkZGl0aW9uYWx5IGN1c3RvbSBjb21wcmVzc2VkIGFyY2hpdmVz IHN0b3JlIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gdGhlaXIKaGVhZGVyIGluc3RlYWQg b2YgdGhlIGNvbXByZXNzaW9uIGxldmVsLiBUaGUgaGVhZGVyIHZlcnNpb24gbnVtYmVyIGlzIGJ1 bXBlZC4KLS0tCiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAyICsK IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmMgICAgICAgfCA0MDEgKysrKysrKysrKysr KysKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmggICAgICAgfCAgMjQgKwogc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgICAgICAgICB8IDc0NiArKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggICAgICAgICB8IDE2NiArKysr Ky0KIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmMgICAgICAgfCAyMDYgKysrKysrKwog c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaCAgICAgICB8ICAyNCArCiBzcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYyAgfCAxMDIgKystLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oICB8ICAgNSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYyAg ICB8ICAyMyArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyB8ICA5NCAr Ky0tCiBzcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgIHwgIDEwICstCiBzcmMv aW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24uaCAgICAgIHwgICA0ICsKIHNyYy90b29scy9wZ2lu Y2x1ZGUvY3BsdXNwbHVzY2hlY2sgICAgfCAgIDIgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgICB8ICAgMiArCiAxNiBmaWxlcyBjaGFuZ2VkLCAxMDYxIGluc2VydGlvbnMo KyksIDc1MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAv 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 aW8uYyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCmluZGV4IGVmMDMzOTE0YmEuLmY0 N2JhNWU2MTUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCisrKyBi 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 dXJucyAwCi0gKgl0byBzaWduYWwgRU9GLgotICoKLSAqCVRoZSBpbnRlcmZhY2UgaXMgdGhlIHNh bWUgZm9yIGNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBzdHJlYW1zLgorICoJQWxsb2NhdGVD b21wcmVzc29yLCB3cml0ZURhdGEsIGFuZCBFbmRDb21wcmVzc29yLiBGaXJzdCB5b3UgY2FsbAor ICoJQWxsb2NhdGVDb21wcmVzc29yLCB0aGVuIHdyaXRlIGFsbCB0aGUgZGF0YSBieSBjYWxsaW5n IHdyaXRlRGF0YSBhcyBtYW55CisgKgl0aW1lcyBhcyBuZWVkZWQsIGFuZCBmaW5hbGx5IEVuZENv bXByZXNzb3IuIHdyaXRlRGF0YSB3aWxsIGNhbGwgdGhlCisgKglXcml0ZUZ1bmMgdGhhdCB3YXMg cHJvdmlkZWQgdG8gQWxsb2NhdGVDb21wcmVzc29yIGZvciBlYWNoIGNodW5rIG9mCisgKgljb21w cmVzc2VkIGRhdGEuCisgKgorICoJVGhlIGludGVyZmFjZSBmb3IgcmVhZGluZyBhbiBhcmNoaXZl IGNvbnNpc3RzIG9mIHRoZSBzYW1lIHRocmVlIGZ1bmN0aW9uczoKKyAqCUFsbG9jYXRlQ29tcHJl c3NvciwgcmVhZERhdGEsIGFuZCBFbmRDb21wcmVzc29yLiBGaXJzdCB5b3UgY2FsbAorICoJQWxs b2NhdGVDb21wcmVzc29yLCB0aGVuIHJlYWQgYWxsIHRoZSBkYXRhIGJ5IGNhbGxpbmcgcmVhZERh dGEgdG8gcmVhZCB0aGUKKyAqCXdob2xlIGNvbXByZXNzZWQgc3RyZWFtIHdoaWNoIHJlcGVhdGVk bHkgY2FsbHMgdGhlIGdpdmVuIFJlYWRGdW5jLiBSZWFkRnVuYworICoJcmV0dXJucyB0aGUgY29t cHJlc3NlZCBkYXRhIG9uZSBjaHVuayBhdCBhIHRpbWUuIFRoZW4gcmVhZERhdGEgZGVjb21wcmVz c2VzCisgKglpdCBhbmQgcGFzc2VzIHRoZSBkZWNvbXByZXNzZWQgZGF0YSB0byBhaHdyaXRlKCks IHVudGlsIFJlYWRGdW5jIHJldHVybnMgMAorICoJdG8gc2lnbmFsIEVPRi4gVGhlIGludGVyZmFj ZSBpcyB0aGUgc2FtZSBmb3IgY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkCisgKglzdHJlYW1z LgogICoKICAqIENvbXByZXNzZWQgc3RyZWFtIEFQSQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICoKLSAqCVRoZSBjb21wcmVzc2VkIHN0cmVhbSBBUEkgaXMgYSB3cmFwcGVyIGFyb3VuZCB0 aGUgQyBzdGFuZGFyZCBmb3BlbigpIGFuZAotICoJbGlieidzIGd6b3BlbigpIEFQSXMuIEl0IGFs bG93cyB5b3UgdG8gdXNlIHRoZSBzYW1lIGZ1bmN0aW9ucyBmb3IKLSAqCWNvbXByZXNzZWQgYW5k IHVuY29tcHJlc3NlZCBzdHJlYW1zLiBjZm9wZW5fcmVhZCgpIGZpcnN0IHRyaWVzIHRvIG9wZW4K LSAqCXRoZSBmaWxlIHdpdGggZ2l2ZW4gbmFtZSwgYW5kIGlmIGl0IGZhaWxzLCBpdCB0cmllcyB0 byBvcGVuIHRoZSBzYW1lCi0gKglmaWxlIHdpdGggdGhlIC5neiBzdWZmaXguIGNmb3Blbl93cml0 ZSgpIG9wZW5zIGEgZmlsZSBmb3Igd3JpdGluZywgYW4KLSAqCWV4dHJhIGFyZ3VtZW50IHNwZWNp ZmllcyBpZiB0aGUgZmlsZSBzaG91bGQgYmUgY29tcHJlc3NlZCwgYW5kIGFkZHMgdGhlCi0gKgku Z3ogc3VmZml4IHRvIHRoZSBmaWxlbmFtZSBpZiBzby4gVGhpcyBhbGxvd3MgeW91IHRvIGVhc2ls eSBoYW5kbGUgYm90aAotICoJY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkIGZpbGVzLgorICoJ VGhlIGNvbXByZXNzZWQgc3RyZWFtIEFQSSBpcyBwcm92aWRpbmcgYSBzZXQgb2YgZnVuY3Rpb24g cG9pbnRlcnMgZm9yCisgKglvcGVuaW5nLCByZWFkaW5nLCB3cml0aW5nLCBhbmQgZmluYWxseSBj bG9zaW5nIGZpbGVzLiBUaGUgaW1wbGVtZW50ZWQKKyAqCWZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBk b2N1bWVudGVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGhlYWRlciBmaWxlIGFuZCBhcmUKKyAqCWNv bW1vbiBmb3IgYWxsIHN0cmVhbXMuIEl0IGFsbG93cyB0aGUgY2FsbGVyIHRvIHVzZSB0aGUgc2Ft ZSBmdW5jdGlvbnMgZm9yCisgKglib3RoIGNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBzdHJl YW1zLgorICoKKyAqCVRoZSBpbnRlcmZhY2UgY29uc2lzdHMgb2YgdGhyZWUgZnVuY3Rpb25zLCBJ bml0Q29tcHJlc3NGaWxlSGFuZGxlLAorICoJSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxl LCBhbmQgRW5kQ29tcHJlc3NGaWxlSGFuZGxlLiBJZiB0aGUKKyAqCWNvbXByZXNzaW9uIGlzIGtu b3duLCB0aGVuIHN0YXJ0IGJ5IGNhbGxpbmcgSW5pdENvbXByZXNzRmlsZUhhbmRsZSwKKyAqCW90 aGVyd2lzZSBkaXNjb3ZlciBpdCBieSB1c2luZyBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5k bGUuIFRoZW4gY2FsbAorICoJdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGFzIHJlcXVpcmVkIGZvciB0 aGUgcmVhZC93cml0ZSBvcGVyYXRpb25zLiBGaW5hbGx5CisgKgljYWxsIEVuZENvbXByZXNzRmls ZUhhbmRsZSB0byBlbmQgdGhlIHN0cmVhbS4KKyAqCisgKglJbml0RGlzY292ZXJDb21wcmVzc0Zp bGVIYW5kbGUgdHJpZXMgdG8gZGVmZmVyIHRoZSBjb21wcmVzc2lvbiBieSB0aGUKKyAqCWZpbGVu YW1lIHN1ZmZpeC4gSWYgdGhlIHN1ZmZpeCBpcyBub3QgeWV0IGtub3duLCB0aGVuIGl0IHRyaWVz IHRvIHNpbXBseQorICoJb3BlbiB0aGUgZmlsZSwgYW5kIGlmIGl0IGZhaWxzLCBpdCB0cmllcyB0 byBvcGVuIHRoZSBzYW1lIGZpbGUgd2l0aCB0aGUgLmd6CisgKglzdWZmaXguCiAgKgogICogSURF TlRJRklDQVRJT04KICAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5jCkBAIC01Mywx MjIgKzY1LDM4IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSA8 c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNvbXByZXNzX2d6 aXAuaCIKICNpbmNsdWRlICJjb21wcmVzc19pby5oIgorI2luY2x1ZGUgImNvbXByZXNzX25vbmUu aCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKIAotI2lmZGVmIEhBVkVfTElCWgotI2lu Y2x1ZGUgPHpsaWIuaD4KLSNlbmRpZgotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENv bXByZXNzb3IgQVBJCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi0vKiB0eXBlZGVm IGFwcGVhcnMgaW4gY29tcHJlc3NfaW8uaCAqLwotc3RydWN0IENvbXByZXNzb3JTdGF0ZQotewot CXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYzsKLQlXcml0ZUZ1bmMJ d3JpdGVGOwotCi0jaWZkZWYgSEFWRV9MSUJaCi0Jel9zdHJlYW1wCXpwOwotCWNoYXIJICAgKnps aWJPdXQ7Ci0Jc2l6ZV90CQl6bGliT3V0U2l6ZTsKLSNlbmRpZgotfTsKLQotLyogUm91dGluZXMg dGhhdCBzdXBwb3J0IHpsaWIgY29tcHJlc3NlZCBkYXRhIEkvTyAqLwotI2lmZGVmIEhBVkVfTElC Wgotc3RhdGljIHZvaWQgSW5pdENvbXByZXNzb3JabGliKENvbXByZXNzb3JTdGF0ZSAqY3MsIGlu dCBsZXZlbCk7Ci1zdGF0aWMgdm9pZCBEZWZsYXRlQ29tcHJlc3NvclpsaWIoQXJjaGl2ZUhhbmRs ZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCQkJCSAgYm9vbCBmbHVzaCk7Ci1zdGF0 aWMgdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1 bmMgcmVhZEYpOwotc3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihBcmNoaXZlSGFu ZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkJICAgY29uc3QgY2hhciAqZGF0 YSwgc2l6ZV90IGRMZW4pOwotc3RhdGljIHZvaWQgRW5kQ29tcHJlc3NvclpsaWIoQXJjaGl2ZUhh bmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOwotI2VuZGlmCi0KLS8qIFJvdXRpbmVzIHRo YXQgc3VwcG9ydCB1bmNvbXByZXNzZWQgZGF0YSBJL08gKi8KLXN0YXRpYyB2b2lkIFJlYWREYXRh RnJvbUFyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRik7Ci1zdGF0 aWMgdm9pZCBXcml0ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVz c29yU3RhdGUgKmNzLAotCQkJCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZExlbik7 Ci0KLS8qIFB1YmxpYyBpbnRlcmZhY2Ugcm91dGluZXMgKi8KLQotLyogQWxsb2NhdGUgYSBuZXcg Y29tcHJlc3NvciAqLworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGNvbXByZXNzb3IuCisgKi8KIENv bXByZXNzb3JTdGF0ZSAqCiBBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAotCQkJCSAgIFdyaXRlRnVuYyB3cml0ZUYpCisJ CQkJICAgUmVhZEZ1bmMgcmVhZEYsIFdyaXRlRnVuYyB3cml0ZUYpCiB7CiAJQ29tcHJlc3NvclN0 YXRlICpjczsKIAotI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdv cml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9l cyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKLSNlbmRpZgotCiAJ Y3MgPSAoQ29tcHJlc3NvclN0YXRlICopIHBnX21hbGxvYzAoc2l6ZW9mKENvbXByZXNzb3JTdGF0 ZSkpOworCWNzLT5yZWFkRiA9IHJlYWRGOwogCWNzLT53cml0ZUYgPSB3cml0ZUY7Ci0JY3MtPmNv bXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOwotCi0JLyoKLQkgKiBQZXJmb3JtIGNv bXByZXNzaW9uIGFsZ29yaXRobSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KLQkgKi8KLSNpZmRl ZiBIQVZFX0xJQloKLQlpZiAoY3MtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NP TVBSRVNTSU9OX0daSVApCi0JCUluaXRDb21wcmVzc29yWmxpYihjcywgY3MtPmNvbXByZXNzaW9u X3NwZWMubGV2ZWwpOwotI2VuZGlmCi0KLQlyZXR1cm4gY3M7Ci19CiAKLS8qCi0gKiBSZWFkIGFs bCBjb21wcmVzc2VkIGRhdGEgZnJvbSB0aGUgaW5wdXQgc3RyZWFtICh2aWEgcmVhZEYpIGFuZCBw cmludCBpdAotICogb3V0IHdpdGggYWh3cml0ZSgpLgotICovCi12b2lkCi1SZWFkRGF0YUZyb21B cmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILAotCQkJCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCi0JCQkJCVJlYWRGdW5jIHJlYWRGKQotewogCWlmIChj b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9OT05FKQotCQlSZWFk RGF0YUZyb21BcmNoaXZlTm9uZShBSCwgcmVhZEYpOwotCWlmIChjb21wcmVzc2lvbl9zcGVjLmFs Z29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQotCXsKLSNpZmRlZiBIQVZFX0xJQloKLQkJ UmVhZERhdGFGcm9tQXJjaGl2ZVpsaWIoQUgsIHJlYWRGKTsKLSNlbHNlCi0JCXBnX2ZhdGFsKCJ0 aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7 Ci0jZW5kaWYKLQl9Ci19CisJCUluaXRDb21wcmVzc29yTm9uZShjcywgY29tcHJlc3Npb25fc3Bl Yyk7CisJZWxzZSBpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJ T05fR1pJUCkKKwkJSW5pdENvbXByZXNzb3JHemlwKGNzLCBjb21wcmVzc2lvbl9zcGVjKTsKIAot LyoKLSAqIENvbXByZXNzIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3RyZWFtICh2aWEg d3JpdGVGKS4KLSAqLwotdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFI LCBDb21wcmVzc29yU3RhdGUgKmNzLAotCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBk TGVuKQotewotCXN3aXRjaCAoY3MtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQotCXsKLQkJ Y2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgotCQkJV3JpdGVEYXRh VG9BcmNoaXZlWmxpYihBSCwgY3MsIGRhdGEsIGRMZW4pOwotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJ0 aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7 Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlXcml0 ZURhdGFUb0FyY2hpdmVOb25lKEFILCBjcywgZGF0YSwgZExlbik7Ci0JCQlicmVhazsKLQkJY2Fz ZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0JCQkvKiBmYWxsdGhyb3VnaCAqLwotCQljYXNlIFBHX0NP TVBSRVNTSU9OX1pTVEQ6Ci0JCQlwZ19mYXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2Qi KTsKLQkJCWJyZWFrOwotCX0KKwlyZXR1cm4gY3M7CiB9CiAKIC8qCkBAIC0xNzcsMjMzICsxMDUs MzEgQEAgV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzLAogdm9pZAogRW5kQ29tcHJlc3NvcihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3Nv clN0YXRlICpjcykKIHsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoY3MtPmNvbXByZXNzaW9uX3Nw ZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JCUVuZENvbXByZXNzb3JabGli KEFILCBjcyk7Ci0jZW5kaWYKLQlmcmVlKGNzKTsKKwljcy0+ZW5kKEFILCBjcyk7CisJcGdfZnJl ZShjcyk7CiB9CiAKLS8qIFByaXZhdGUgcm91dGluZXMsIHNwZWNpZmljIHRvIGVhY2ggY29tcHJl c3Npb24gbWV0aG9kLiAqLwotCi0jaWZkZWYgSEFWRV9MSUJaCi0vKgotICogRnVuY3Rpb25zIGZv ciB6bGliIGNvbXByZXNzZWQgb3V0cHV0LgotICovCi0KLXN0YXRpYyB2b2lkCi1Jbml0Q29tcHJl c3NvclpsaWIoQ29tcHJlc3NvclN0YXRlICpjcywgaW50IGxldmVsKQotewotCXpfc3RyZWFtcAl6 cDsKLQotCXpwID0gY3MtPnpwID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNpemVvZih6X3N0cmVh bSkpOwotCXpwLT56YWxsb2MgPSBaX05VTEw7Ci0JenAtPnpmcmVlID0gWl9OVUxMOwotCXpwLT5v cGFxdWUgPSBaX05VTEw7Ci0KLQkvKgotCSAqIHpsaWJPdXRTaXplIGlzIHRoZSBidWZmZXIgc2l6 ZSB3ZSB0ZWxsIHpsaWIgaXQgY2FuIG91dHB1dCB0by4gIFdlCi0JICogYWN0dWFsbHkgYWxsb2Nh dGUgb25lIGV4dHJhIGJ5dGUgYmVjYXVzZSBzb21lIHJvdXRpbmVzIHdhbnQgdG8gYXBwZW5kIGEK LQkgKiB0cmFpbGluZyB6ZXJvIGJ5dGUgdG8gdGhlIHpsaWIgb3V0cHV0LgotCSAqLwotCWNzLT56 bGliT3V0ID0gKGNoYXIgKikgcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKLQljcy0+emxp Yk91dFNpemUgPSBaTElCX09VVF9TSVpFOwotCi0JaWYgKGRlZmxhdGVJbml0KHpwLCBsZXZlbCkg IT0gWl9PSykKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxp YnJhcnk6ICVzIiwKLQkJCQkgenAtPm1zZyk7Ci0KLQkvKiBKdXN0IGJlIHBhcmFub2lkIC0gbWF5 YmUgRW5kIGlzIGNhbGxlZCBhZnRlciBTdGFydCwgd2l0aCBubyBXcml0ZSAqLwotCXpwLT5uZXh0 X291dCA9ICh2b2lkICopIGNzLT56bGliT3V0OwotCXpwLT5hdmFpbF9vdXQgPSBjcy0+emxpYk91 dFNpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1FbmRDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxl ICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKLXsKLQl6X3N0cmVhbXAJenAgPSBjcy0+enA7Ci0K LQl6cC0+bmV4dF9pbiA9IE5VTEw7Ci0JenAtPmF2YWlsX2luID0gMDsKLQotCS8qIEZsdXNoIGFu eSByZW1haW5pbmcgZGF0YSBmcm9tIHpsaWIgYnVmZmVyICovCi0JRGVmbGF0ZUNvbXByZXNzb3Ja bGliKEFILCBjcywgdHJ1ZSk7Ci0KLQlpZiAoZGVmbGF0ZUVuZCh6cCkgIT0gWl9PSykKLQkJcGdf ZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBzdHJlYW06ICVzIiwgenAtPm1zZyk7 Ci0KLQlmcmVlKGNzLT56bGliT3V0KTsKLQlmcmVlKGNzLT56cCk7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1EZWZsYXRlQ29tcHJlc3NvclpsaWIoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0 ZSAqY3MsIGJvb2wgZmx1c2gpCi17Ci0Jel9zdHJlYW1wCXpwID0gY3MtPnpwOwotCWNoYXIJICAg Km91dCA9IGNzLT56bGliT3V0OwotCWludAkJCXJlcyA9IFpfT0s7Ci0KLQl3aGlsZSAoY3MtPnpw LT5hdmFpbF9pbiAhPSAwIHx8IGZsdXNoKQotCXsKLQkJcmVzID0gZGVmbGF0ZSh6cCwgZmx1c2gg PyBaX0ZJTklTSCA6IFpfTk9fRkxVU0gpOwotCQlpZiAocmVzID09IFpfU1RSRUFNX0VSUk9SKQot CQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwotCQlp ZiAoKGZsdXNoICYmICh6cC0+YXZhaWxfb3V0IDwgY3MtPnpsaWJPdXRTaXplKSkKLQkJCXx8ICh6 cC0+YXZhaWxfb3V0ID09IDApCi0JCQl8fCAoenAtPmF2YWlsX2luICE9IDApCi0JCQkpCi0JCXsK LQkJCS8qCi0JCQkgKiBFeHRyYSBwYXJhbm9pYTogYXZvaWQgemVyby1sZW5ndGggY2h1bmtzLCBz aW5jZSBhIHplcm8gbGVuZ3RoCi0JCQkgKiBjaHVuayBpcyB0aGUgRU9GIG1hcmtlciBpbiB0aGUg Y3VzdG9tIGZvcm1hdC4gVGhpcyBzaG91bGQgbmV2ZXIKLQkJCSAqIGhhcHBlbiBidXQuLi4KLQkJ CSAqLwotCQkJaWYgKHpwLT5hdmFpbF9vdXQgPCBjcy0+emxpYk91dFNpemUpCi0JCQl7Ci0JCQkJ LyoKLQkJCQkgKiBBbnkgd3JpdGUgZnVuY3Rpb24gc2hvdWxkIGRvIGl0cyBvd24gZXJyb3IgY2hl Y2tpbmcgYnV0IHRvCi0JCQkJICogbWFrZSBzdXJlIHdlIGRvIGEgY2hlY2sgaGVyZSBhcyB3ZWxs Li4uCi0JCQkJICovCi0JCQkJc2l6ZV90CQlsZW4gPSBjcy0+emxpYk91dFNpemUgLSB6cC0+YXZh aWxfb3V0OwotCi0JCQkJY3MtPndyaXRlRihBSCwgb3V0LCBsZW4pOwotCQkJfQotCQkJenAtPm5l eHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQkJenAtPmF2YWlsX291dCA9IGNzLT56bGliT3V0U2l6 ZTsKLQkJfQotCi0JCWlmIChyZXMgPT0gWl9TVFJFQU1fRU5EKQotCQkJYnJlYWs7Ci0JfQotfQot Ci1zdGF0aWMgdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpBSCwg Q29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRM ZW4pCi17Ci0JY3MtPnpwLT5uZXh0X2luID0gKHZvaWQgKikgdW5jb25zdGlmeShjaGFyICosIGRh dGEpOwotCWNzLT56cC0+YXZhaWxfaW4gPSBkTGVuOwotCURlZmxhdGVDb21wcmVzc29yWmxpYihB SCwgY3MsIGZhbHNlKTsKLX0KLQotc3RhdGljIHZvaWQKLVJlYWREYXRhRnJvbUFyY2hpdmVabGli KEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRikKLXsKLQl6X3N0cmVhbXAJenA7Ci0J Y2hhcgkgICAqb3V0OwotCWludAkJCXJlcyA9IFpfT0s7Ci0Jc2l6ZV90CQljbnQ7Ci0JY2hhcgkg ICAqYnVmOwotCXNpemVfdAkJYnVmbGVuOwotCi0JenAgPSAoel9zdHJlYW1wKSBwZ19tYWxsb2Mo c2l6ZW9mKHpfc3RyZWFtKSk7Ci0JenAtPnphbGxvYyA9IFpfTlVMTDsKLQl6cC0+emZyZWUgPSBa X05VTEw7Ci0JenAtPm9wYXF1ZSA9IFpfTlVMTDsKLQotCWJ1ZiA9IHBnX21hbGxvYyhaTElCX0lO X1NJWkUpOwotCWJ1ZmxlbiA9IFpMSUJfSU5fU0laRTsKLQotCW91dCA9IHBnX21hbGxvYyhaTElC X09VVF9TSVpFICsgMSk7Ci0KLQlpZiAoaW5mbGF0ZUluaXQoenApICE9IFpfT0spCi0JCXBnX2Zh dGFsKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsCi0JCQkJ IHpwLT5tc2cpOwotCi0JLyogbm8gbWluaW1hbCBjaHVuayBzaXplIGZvciB6bGliICovCi0Jd2hp bGUgKChjbnQgPSByZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQotCXsKLQkJenAtPm5leHRfaW4g PSAodm9pZCAqKSBidWY7Ci0JCXpwLT5hdmFpbF9pbiA9IGNudDsKLQotCQl3aGlsZSAoenAtPmF2 YWlsX2luID4gMCkKLQkJewotCQkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQkJenAt PmF2YWlsX291dCA9IFpMSUJfT1VUX1NJWkU7Ci0KLQkJCXJlcyA9IGluZmxhdGUoenAsIDApOwot CQkJaWYgKHJlcyAhPSBaX09LICYmIHJlcyAhPSBaX1NUUkVBTV9FTkQpCi0JCQkJcGdfZmF0YWwo ImNvdWxkIG5vdCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7Ci0KLQkJCW91dFtaTElC X09VVF9TSVpFIC0genAtPmF2YWlsX291dF0gPSAnXDAnOwotCQkJYWh3cml0ZShvdXQsIDEsIFpM SUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0LCBBSCk7Ci0JCX0KLQl9Ci0KLQl6cC0+bmV4dF9p biA9IE5VTEw7Ci0JenAtPmF2YWlsX2luID0gMDsKLQl3aGlsZSAocmVzICE9IFpfU1RSRUFNX0VO RCkKLQl7Ci0JCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKLQkJenAtPmF2YWlsX291dCA9 IFpMSUJfT1VUX1NJWkU7Ci0JCXJlcyA9IGluZmxhdGUoenAsIDApOwotCQlpZiAocmVzICE9IFpf T0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdW5jb21w cmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwotCi0JCW91dFtaTElCX09VVF9TSVpFIC0genAtPmF2 YWlsX291dF0gPSAnXDAnOwotCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpwLT5h dmFpbF9vdXQsIEFIKTsKLQl9Ci0KLQlpZiAoaW5mbGF0ZUVuZCh6cCkgIT0gWl9PSykKLQkJcGdf ZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsIHpwLT5tc2cp OwotCi0JZnJlZShidWYpOwotCWZyZWUob3V0KTsKLQlmcmVlKHpwKTsKLX0KLSNlbmRpZgkJCQkJ CQkvKiBIQVZFX0xJQlogKi8KLQotCi0vKgotICogRnVuY3Rpb25zIGZvciB1bmNvbXByZXNzZWQg b3V0cHV0LgotICovCi0KLXN0YXRpYyB2b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBcmNo aXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpCi17Ci0Jc2l6ZV90CQljbnQ7Ci0JY2hhcgkg ICAqYnVmOwotCXNpemVfdAkJYnVmbGVuOwotCi0JYnVmID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJ WkUpOwotCWJ1ZmxlbiA9IFpMSUJfT1VUX1NJWkU7Ci0KLQl3aGlsZSAoKGNudCA9IHJlYWRGKEFI LCAmYnVmLCAmYnVmbGVuKSkpCi0JewotCQlhaHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7Ci0JfQot Ci0JZnJlZShidWYpOwotfQotCi1zdGF0aWMgdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlTm9uZShB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJICAgY29uc3QgY2hh ciAqZGF0YSwgc2l6ZV90IGRMZW4pCi17Ci0JY3MtPndyaXRlRihBSCwgZGF0YSwgZExlbik7Ci19 Ci0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDb21wcmVzc2VkIHN0cmVhbSBBUEkK ICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKIC8qCi0gKiBjZnAgcmVwcmVzZW50cyBh biBvcGVuIHN0cmVhbSwgd3JhcHBpbmcgdGhlIHVuZGVybHlpbmcgRklMRSBvciBnekZpbGUKLSAq IHBvaW50ZXIuIFRoaXMgaXMgb3BhcXVlIHRvIHRoZSBjYWxsZXJzLgorICogUHJpdmF0ZSByb3V0 aW5lcwogICovCi1zdHJ1Y3QgY2ZwCitzdGF0aWMgaW50CitoYXNTdWZmaXgoY29uc3QgY2hhciAq ZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKIHsKLQlGSUxFCSAgICp1bmNvbXByZXNzZWRm cDsKLSNpZmRlZiBIQVZFX0xJQloKLQlnekZpbGUJCWNvbXByZXNzZWRmcDsKLSNlbmRpZgotfTsK KwlpbnQJCQlmaWxlbmFtZWxlbiA9IHN0cmxlbihmaWxlbmFtZSk7CisJaW50CQkJc3VmZml4bGVu ID0gc3RybGVuKHN1ZmZpeCk7CiAKLSNpZmRlZiBIQVZFX0xJQloKLXN0YXRpYyBpbnQJaGFzU3Vm Zml4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpzdWZmaXgpOwotI2VuZGlmCisJ aWYgKGZpbGVuYW1lbGVuIDwgc3VmZml4bGVuKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBtZW1j bXAoJmZpbGVuYW1lW2ZpbGVuYW1lbGVuIC0gc3VmZml4bGVuXSwKKwkJCQkgIHN1ZmZpeCwKKwkJ CQkgIHN1ZmZpeGxlbikgPT0gMDsKK30KIAogLyogZnJlZSgpIHdpdGhvdXQgY2hhbmdpbmcgZXJy bm87IHVzZWZ1bCBpbiBzZXZlcmFsIHBsYWNlcyBiZWxvdyAqLwogc3RhdGljIHZvaWQKQEAgLTQx NiwzMjQgKzE0MiwxMDIgQEAgZnJlZV9rZWVwX2Vycm5vKHZvaWQgKnApCiB9CiAKIC8qCi0gKiBP cGVuIGEgZmlsZSBmb3IgcmVhZGluZy4gJ3BhdGgnIGlzIHRoZSBmaWxlIHRvIG9wZW4sIGFuZCAn bW9kZScgc2hvdWxkCi0gKiBiZSBlaXRoZXIgInIiIG9yICJyYiIuCi0gKgotICogSWYgdGhlIGZp bGUgYXQgJ3BhdGgnIGRvZXMgbm90IGV4aXN0LCB3ZSBhcHBlbmQgdGhlICIuZ3oiIHN1ZmZpeCAo aWYgJ3BhdGgnCi0gKiBkb2Vzbid0IGFscmVhZHkgaGF2ZSBpdCkgYW5kIHRyeSBhZ2Fpbi4gU28g aWYgeW91IHBhc3MgImZvbyIgYXMgJ3BhdGgnLAotICogdGhpcyB3aWxsIG9wZW4gZWl0aGVyICJm b28iIG9yICJmb28uZ3oiLgotICoKLSAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4g ZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqIFB1YmxpYyBpbnRlcmZhY2UKICAqLwotY2ZwICoKLWNm b3Blbl9yZWFkKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCi17Ci0JY2ZwCQkg ICAqZnA7Ci0KLQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMgPSB7 MH07Ci0KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoaGFzU3VmZml4KHBhdGgsICIuZ3oiKSkKLQl7 Ci0JCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKLQkJ ZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0JfQotCWVsc2UKLSNl bmRpZgotCXsKLQkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9O T05FOwotCQlmcCA9IGNmb3BlbihwYXRoLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLSNpZmRl ZiBIQVZFX0xJQloKLQkJaWYgKGZwID09IE5VTEwpCi0JCXsKLQkJCWNoYXIJICAgKmZuYW1lOwot Ci0JCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOwotCQkJY29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwotCQkJZnAgPSBjZm9wZW4oZm5hbWUs IG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwotCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKLQkJ fQotI2VuZGlmCi0JfQotCXJldHVybiBmcDsKLX0KIAogLyoKLSAqIE9wZW4gYSBmaWxlIGZvciB3 cml0aW5nLiAncGF0aCcgaW5kaWNhdGVzIHRoZSBwYXRoIG5hbWUsIGFuZCAnbW9kZScgbXVzdAot ICogYmUgYSBmaWxlbW9kZSBhcyBhY2NlcHRlZCBieSBmb3BlbigpIGFuZCBnem9wZW4oKSB0aGF0 IGluZGljYXRlcyB3cml0aW5nCi0gKiAoInciLCAid2IiLCAiYSIsIG9yICJhYiIpLgotICoKLSAq IElmICdjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobScgaXMgR1pJUCwgYSBnemlwIGNvbXByZXNz ZWQgc3RyZWFtIGlzIG9wZW5lZCwKLSAqIGFuZCAnY29tcHJlc3Npb25fc3BlYy5sZXZlbCcgdXNl ZC4gVGhlICIuZ3oiIHN1ZmZpeCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvCi0gKiAncGF0aCcg aW4gdGhhdCBjYXNlLgotICoKLSAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJy b3IgY29kZSBpbiBlcnJuby4KLSAqLwotY2ZwICoKLWNmb3Blbl93cml0ZShjb25zdCBjaGFyICpw YXRoLCBjb25zdCBjaGFyICptb2RlLAotCQkJIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYykKLXsKLQljZnAJCSAgICpmcDsKLQotCWlmIChjb21wcmVzc2lv bl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9OT05FKQotCQlmcCA9IGNmb3Blbihw YXRoLCBtb2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLQllbHNlCi0JewotI2lmZGVmIEhBVkVfTElC WgotCQljaGFyCSAgICpmbmFtZTsKLQotCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgp OwotCQlmcCA9IGNmb3BlbihmbmFtZSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0JCWZyZWVf a2VlcF9lcnJubyhmbmFtZSk7Ci0jZWxzZQotCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5v dCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3ppcCIpOwotCQlmcCA9IE5VTEw7CQkJ CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KLSNlbmRpZgotCX0KLQlyZXR1cm4gZnA7Ci19Ci0K LS8qCi0gKiBUaGlzIGlzIHRoZSB3b3JraG9yc2UgZm9yIGNmb3BlbigpIG9yIGNmZG9wZW4oKS4g SXQgb3BlbnMgZmlsZSAncGF0aCcgb3IKLSAqIGFzc29jaWF0ZXMgYSBzdHJlYW0gJ2ZkJywgaWYg J2ZkJyBpcyBhIHZhbGlkIGRlc2NyaXB0b3IsIGluICdtb2RlJy4gVGhlCi0gKiBkZXNjcmlwdG9y IGlzIG5vdCBkdXAnZWQgYW5kIGl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBk byBzby4KLSAqIFRoZSBjYWxsZXIgbXVzdCB2ZXJpZnkgdGhhdCB0aGUgJ2NvbXByZXNzX2FsZ29y aXRobScgaXMgc3VwcG9ydGVkIGJ5IHRoZQotICogY3VycmVudCBidWlsZC4KLSAqCi0gKiBPbiBm YWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCisgKiBJbml0 aWFsaXplIGEgY29tcHJlc3MgZmlsZSBoYW5kbGUgZm9yIHRoZSBzcGVjaWZpZWQgY29tcHJlc3Np b24gYWxnb3JpdGhtLgogICovCi1zdGF0aWMgY2ZwICoKLWNmb3Blbl9pbnRlcm5hbChjb25zdCBj aGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorQ29tcHJlc3NGaWxlSGFuZGxlICoKK0luaXRD b21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKQogewotCWNmcAkJICAgKmZwID0gcGdfbWFsbG9jMChzaXplb2YoY2ZwKSk7CisJ Q29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAKLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0 aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWlmIChj b21wcmVzc2lvbl9zcGVjLmxldmVsICE9IFpfREVGQVVMVF9DT01QUkVTU0lPTikKLQkJewotCQkJ LyogdXNlciBoYXMgc3BlY2lmaWVkIGEgY29tcHJlc3Npb24gbGV2ZWwsIHNvIHRlbGwgemxpYiB0 byB1c2UgaXQgKi8KLQkJCWNoYXIJCW1vZGVfY29tcHJlc3Npb25bMzJdOwotCi0JCQlzbnByaW50 Zihtb2RlX2NvbXByZXNzaW9uLCBzaXplb2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVkIiwKLQkJ CQkJIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOwotCQkJaWYgKGZkID49IDApCi0JCQkJ ZnAtPmNvbXByZXNzZWRmcCA9IGd6ZG9wZW4oZmQsIG1vZGVfY29tcHJlc3Npb24pOwotCQkJZWxz ZQotCQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwgbW9kZV9jb21wcmVzc2lvbik7 Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBkb24ndCBzcGVjaWZ5IGEgbGV2ZWwsIGp1c3QgdXNl IHRoZSB6bGliIGRlZmF1bHQgKi8KLQkJCWlmIChmZCA+PSAwKQotCQkJCWZwLT5jb21wcmVzc2Vk ZnAgPSBnemRvcGVuKGZkLCBtb2RlKTsKLQkJCWVsc2UKLQkJCQlmcC0+Y29tcHJlc3NlZGZwID0g Z3pvcGVuKHBhdGgsIG1vZGUpOwotCQl9Ci0KLQkJaWYgKGZwLT5jb21wcmVzc2VkZnAgPT0gTlVM TCkKLQkJewotCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJCWZwID0gTlVMTDsKLQkJfQotI2Vs c2UKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3 aXRoICVzIiwgImd6aXAiKTsKLSNlbmRpZgotCX0KLQllbHNlCi0JewotCQlpZiAoZmQgPj0gMCkK LQkJCWZwLT51bmNvbXByZXNzZWRmcCA9IGZkb3BlbihmZCwgbW9kZSk7Ci0JCWVsc2UKLQkJCWZw LT51bmNvbXByZXNzZWRmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCUNGSCA9IHBnX21hbGxvYzAo c2l6ZW9mKENvbXByZXNzRmlsZUhhbmRsZSkpOwogCi0JCWlmIChmcC0+dW5jb21wcmVzc2VkZnAg PT0gTlVMTCkKLQkJewotCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJCWZwID0gTlVMTDsKLQkJ fQotCX0KKwlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05f Tk9ORSkKKwkJSW5pdENvbXByZXNzRmlsZUhhbmRsZU5vbmUoQ0ZILCBjb21wcmVzc2lvbl9zcGVj KTsKKwllbHNlIGlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lP Tl9HWklQKQorCQlJbml0Q29tcHJlc3NGaWxlSGFuZGxlR3ppcChDRkgsIGNvbXByZXNzaW9uX3Nw ZWMpOwogCi0JcmV0dXJuIGZwOworCXJldHVybiBDRkg7CiB9CiAKIC8qCi0gKiBPcGVucyBmaWxl ICdwYXRoJyBpbiAnbW9kZScgYW5kIGNvbXByZXNzaW9uIGFzIGRlZmluZWQgaW4KLSAqIGNvbXBy ZXNzaW9uX3NwZWMuIFRoZSBjYWxsZXIgbXVzdCB2ZXJpZnkgdGhhdCB0aGUgY29tcHJlc3Npb24K LSAqIGlzIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBidWlsZC4KKyAqIE9wZW4gYSBmaWxlIGZv ciByZWFkaW5nLiAncGF0aCcgaXMgdGhlIGZpbGUgdG8gb3BlbiwgYW5kICdtb2RlJyBzaG91bGQK KyAqIGJlIGVpdGhlciAiciIgb3IgInJiIi4KICAqCi0gKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVM TCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJybm8uCi0gKi8KLWNmcCAqCi1jZm9wZW4oY29uc3Qg Y2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCi17Ci0JcmV0dXJuIGNmb3Blbl9pbnRlcm5hbChw YXRoLCAtMSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci19Ci0KLS8qCi0gKiBBc3NvY2lhdGVz IGEgc3RyZWFtICdmZCcsIGlmICdmZCcgaXMgYSB2YWxpZCBkZXNjcmlwdG9yLCBpbiAnbW9kZScK LSAqIGFuZCBjb21wcmVzc2lvbiBhcyBkZWZpbmVkIGluIGNvbXByZXNzaW9uX3NwZWMuIFRoZSBj YWxsZXIgbXVzdAotICogdmVyaWZ5IHRoYXQgdGhlIGNvbXByZXNzaW9uIGlzIHN1cHBvcnRlZCBi eSB0aGUgY3VycmVudCBidWlsZC4KKyAqIElmIHRoZSBmaWxlIGF0ICdwYXRoJyBjb250YWlucyB0 aGUgc3VmZml4IG9mIGEgc3VwcG9ydGVkIGNvbXByZXNzaW9uIG1ldGhvZCwKKyAqIGN1cnJlbnRs eSB0aGlzIGluY2x1ZGVzIG9ubHkgIi5neiIsIHRoZW4gdGhpcyBjb21wcmVzc2lvbiB3aWxsIGJl IHVzZWQKKyAqIHRocm91Z2hvdXQuIE90aGVyd2lzZSB0aGUgY29tcHJlc3Npb24gd2lsbCBiZSBk ZWZlcnJlZCBieSBpdGVyYXRpdmVseSB0cnlpbmcKKyAqIHRvIG9wZW4gdGhlIGZpbGUgYXQgJ3Bh dGgnLCBmaXJzdCBhcyBpcywgdGhlbiBieSBhcHBlbmRpbmcga25vd24gY29tcHJlc3Npb24KKyAq IHN1ZmZpeGVzLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcyAncGF0aCcsIHRoaXMgd2lsbCBvcGVu IGVpdGhlciAiZm9vIiBvcgorICogImZvby5neiIsIHRyeWluZyBpbiB0aGF0IG9yZGVyLgogICoK ICAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4K ICAqLwotY2ZwICoKLWNmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlLAotCQljb25zdCBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCitDb21wcmVzc0ZpbGVI YW5kbGUgKgorSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IGNoYXIgKnBhdGgs IGNvbnN0IGNoYXIgKm1vZGUpCiB7Ci0JcmV0dXJuIGNmb3Blbl9pbnRlcm5hbChOVUxMLCBmZCwg bW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci19CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBO VUxMOworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIJICAgKmZuYW1lOworCXBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHswfTsKIAotaW50Ci1jZnJlYWQodm9pZCAq cHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKLXsKLQlpbnQJCQlyZXQ7CisJY29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwogCi0JaWYgKHNpemUgPT0gMCkKLQkJ cmV0dXJuIDA7CisJQXNzZXJ0KHN0cmNtcChtb2RlLCAiciIpID09IDAgfHwgc3RyY21wKG1vZGUs ICJyYiIpID09IDApOwogCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2VkZnAp Ci0JewotCQlyZXQgPSBnenJlYWQoZnAtPmNvbXByZXNzZWRmcCwgcHRyLCBzaXplKTsKLQkJaWYg KHJldCAhPSBzaXplICYmICFnemVvZihmcC0+Y29tcHJlc3NlZGZwKSkKLQkJewotCQkJaW50CQkJ ZXJybnVtOwotCQkJY29uc3QgY2hhciAqZXJybXNnID0gZ3plcnJvcihmcC0+Y29tcHJlc3NlZGZw LCAmZXJybnVtKTsKKwlmbmFtZSA9IHN0cmR1cChwYXRoKTsKIAotCQkJcGdfZmF0YWwoImNvdWxk IG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAotCQkJCQkgZXJybnVtID09IFpfRVJSTk8g PyBzdHJlcnJvcihlcnJubykgOiBlcnJtc2cpOwotCQl9Ci0JfQorCWlmIChoYXNTdWZmaXgoZm5h bWUsICIuZ3oiKSkKKwkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lP Tl9HWklQOwogCWVsc2UKLSNlbmRpZgogCXsKLQkJcmV0ID0gZnJlYWQocHRyLCAxLCBzaXplLCBm cC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ICE9IHNpemUgJiYgIWZlb2YoZnAtPnVuY29t cHJlc3NlZGZwKSkKLQkJCVJFQURfRVJST1JfRVhJVChmcC0+dW5jb21wcmVzc2VkZnApOwotCX0K LQlyZXR1cm4gcmV0OwotfQotCi1pbnQKLWNmd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQgc2l6 ZSwgY2ZwICpmcCkKLXsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkK LQkJcmV0dXJuIGd6d3JpdGUoZnAtPmNvbXByZXNzZWRmcCwgcHRyLCBzaXplKTsKLQllbHNlCi0j ZW5kaWYKLQkJcmV0dXJuIGZ3cml0ZShwdHIsIDEsIHNpemUsIGZwLT51bmNvbXByZXNzZWRmcCk7 Ci19Ci0KLWludAotY2ZnZXRjKGNmcCAqZnApCi17Ci0JaW50CQkJcmV0OworCQlib29sCQlleGlz dHM7CiAKKwkJZXhpc3RzID0gKHN0YXQocGF0aCwgJnN0KSA9PSAwKTsKKwkJLyogYXZvaWQgdW51 c2VkIHdhcm5pbmcgaWYgaXQgaXMgbm90IGJ1aWx0IHdpdGggY29tcHJlc3Npb24gKi8KKwkJaWYg KGV4aXN0cykKKwkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05f Tk9ORTsKICNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQl7Ci0JCXJl dCA9IGd6Z2V0YyhmcC0+Y29tcHJlc3NlZGZwKTsKLQkJaWYgKHJldCA9PSBFT0YpCisJCWlmICgh ZXhpc3RzKQogCQl7Ci0JCQlpZiAoIWd6ZW9mKGZwLT5jb21wcmVzc2VkZnApKQotCQkJCXBnX2Zh dGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8p KTsKLQkJCWVsc2UKLQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxl OiBlbmQgb2YgZmlsZSIpOworCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsKKwkJCWZuYW1lID0g cHNwcmludGYoIiVzLmd6IiwgcGF0aCk7CisJCQlleGlzdHMgPSAoc3RhdChmbmFtZSwgJnN0KSA9 PSAwKTsKKworCQkJaWYgKGV4aXN0cykKKwkJCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9 IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAJCX0KLQl9Ci0JZWxzZQogI2VuZGlmCi0JewotCQlyZXQg PSBmZ2V0YyhmcC0+dW5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ID09IEVPRikKLQkJCVJFQURf RVJST1JfRVhJVChmcC0+dW5jb21wcmVzc2VkZnApOwogCX0KIAotCXJldHVybiByZXQ7Ci19Ci0K LWNoYXIgKgotY2ZnZXRzKGNmcCAqZnAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLSNpZmRlZiBI QVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6Z2V0cyhmcC0+Y29t cHJlc3NlZGZwLCBidWYsIGxlbik7Ci0JZWxzZQotI2VuZGlmCi0JCXJldHVybiBmZ2V0cyhidWYs IGxlbiwgZnAtPnVuY29tcHJlc3NlZGZwKTsKLX0KLQotaW50Ci1jZmNsb3NlKGNmcCAqZnApCi17 Ci0JaW50CQkJcmVzdWx0OwotCi0JaWYgKGZwID09IE5VTEwpCi0JewotCQllcnJubyA9IEVCQURG OwotCQlyZXR1cm4gRU9GOwotCX0KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNz ZWRmcCkKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbXByZXNzaW9uX3NwZWMpOwor CWlmIChDRkgtPm9wZW5fZnVuYyhmbmFtZSwgLTEsIG1vZGUsIENGSCkpCiAJewotCQlyZXN1bHQg PSBnemNsb3NlKGZwLT5jb21wcmVzc2VkZnApOwotCQlmcC0+Y29tcHJlc3NlZGZwID0gTlVMTDsK KwkJZnJlZV9rZWVwX2Vycm5vKENGSCk7CisJCUNGSCA9IE5VTEw7CiAJfQotCWVsc2UKLSNlbmRp ZgotCXsKLQkJcmVzdWx0ID0gZmNsb3NlKGZwLT51bmNvbXByZXNzZWRmcCk7Ci0JCWZwLT51bmNv bXByZXNzZWRmcCA9IE5VTEw7Ci0JfQotCWZyZWVfa2VlcF9lcnJubyhmcCk7CisJZnJlZV9rZWVw X2Vycm5vKGZuYW1lKTsKIAotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIENGSDsKIH0KIAorLyoK KyAqIENsb3NlIGFuIG9wZW4gZmlsZSBoYW5kbGUgYW5kIHJlbGVhc2UgaXRzIG1lbW9yeS4KKyAq CisgKiBPbiBmYWlsdXJlLCByZXR1cm5zIGFuIGVycm9yIHZhbHVlIGFuZCBzZXRzIGVycm5vIGFw cHJvcHJpYXRlbHkuCisgKi8KIGludAotY2Zlb2YoY2ZwICpmcCkKK0VuZENvbXByZXNzRmlsZUhh bmRsZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKIHsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAo ZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6ZW9mKGZwLT5jb21wcmVzc2VkZnApOwotCWVs c2UKLSNlbmRpZgotCQlyZXR1cm4gZmVvZihmcC0+dW5jb21wcmVzc2VkZnApOwotfQorCWludAkJ CXJldCA9IDA7CiAKLWNvbnN0IGNoYXIgKgotZ2V0X2NmcF9lcnJvcihjZnAgKmZwKQotewotI2lm ZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCXsKLQkJaW50CQkJZXJybnVt OwotCQljb25zdCBjaGFyICplcnJtc2cgPSBnemVycm9yKGZwLT5jb21wcmVzc2VkZnAsICZlcnJu dW0pOworCWlmIChDRkgtPnByaXZhdGVfZGF0YSkKKwkJcmV0ID0gQ0ZILT5jbG9zZV9mdW5jKENG SCk7CiAKLQkJaWYgKGVycm51bSAhPSBaX0VSUk5PKQotCQkJcmV0dXJuIGVycm1zZzsKLQl9Ci0j ZW5kaWYKLQlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOwotfQorCWZyZWVfa2VlcF9lcnJubyhDRkgp OwogCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgaW50Ci1oYXNTdWZmaXgoY29uc3QgY2hhciAq ZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKLXsKLQlpbnQJCQlmaWxlbmFtZWxlbiA9IHN0 cmxlbihmaWxlbmFtZSk7Ci0JaW50CQkJc3VmZml4bGVuID0gc3RybGVuKHN1ZmZpeCk7Ci0KLQlp ZiAoZmlsZW5hbWVsZW4gPCBzdWZmaXhsZW4pCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIG1lbWNt cCgmZmlsZW5hbWVbZmlsZW5hbWVsZW4gLSBzdWZmaXhsZW5dLAotCQkJCSAgc3VmZml4LAotCQkJ CSAgc3VmZml4bGVuKSA9PSAwOworCXJldHVybiByZXQ7CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJl c3NfaW8uaAppbmRleCBhNmNkZjU4OGRkLi5hN2E0ZmVjMDM2IDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2R1bXAvY29tcHJlc3NfaW8uaAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8u aApAQCAtMjEsNTAgKzIxLDE2MCBAQAogI2RlZmluZSBaTElCX09VVF9TSVpFCTQwOTYKICNkZWZp bmUgWkxJQl9JTl9TSVpFCTQwOTYKIAotLyogUHJvdG90eXBlIGZvciBjYWxsYmFjayBmdW5jdGlv biB0byBXcml0ZURhdGFUb0FyY2hpdmUoKSAqLworLyoKKyAqIFByb3RvdHlwZSBmb3IgY2FsbGJh Y2sgZnVuY3Rpb24gdXNlZCBpbiB3cml0ZURhdGEoKQorICovCiB0eXBlZGVmIHZvaWQgKCpXcml0 ZUZ1bmMpIChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsK IAogLyoKLSAqIFByb3RvdHlwZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb24gdG8gUmVhZERhdGFGcm9t QXJjaGl2ZSgpCisgKiBQcm90b3R5cGUgZm9yIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgaW4gcmVh ZERhdGEoKQogICoKLSAqIFJlYWREYXRhRnJvbUFyY2hpdmUgd2lsbCBjYWxsIHRoZSByZWFkIGZ1 bmN0aW9uIHJlcGVhdGVkbHksIHVudGlsIGl0Ci0gKiByZXR1cm5zIDAgdG8gc2lnbmFsIEVPRi4g UmVhZERhdGFGcm9tQXJjaGl2ZSBwYXNzZXMgYSBidWZmZXIgdG8gcmVhZCB0aGUKLSAqIGRhdGEg aW50byBpbiAqYnVmLCBvZiBsZW5ndGggKmJ1Zmxlbi4gSWYgdGhhdCdzIG5vdCBiaWcgZW5vdWdo IGZvciB0aGUKLSAqIGNhbGxiYWNrIGZ1bmN0aW9uLCBpdCBjYW4gZnJlZSgpIGl0IGFuZCBtYWxs b2MoKSBhIG5ldyBvbmUsIHJldHVybmluZyB0aGUKLSAqIG5ldyBidWZmZXIgYW5kIGl0cyBzaXpl IGluICpidWYgYW5kICpidWZsZW4uCisgKiByZWFkRGF0YSB3aWxsIGNhbGwgdGhlIHJlYWQgZnVu Y3Rpb24gcmVwZWF0ZWRseSwgdW50aWwgaXQgcmV0dXJucyAwIHRvIHNpZ25hbAorICogRU9GLiBy ZWFkRGF0YSBwYXNzZXMgYSBidWZmZXIgdG8gcmVhZCB0aGUgZGF0YSBpbnRvIGluICpidWYsIG9m IGxlbmd0aAorICogKmJ1Zmxlbi4gSWYgdGhhdCdzIG5vdCBiaWcgZW5vdWdoIGZvciB0aGUgY2Fs bGJhY2sgZnVuY3Rpb24sIGl0IGNhbiBmcmVlKCkgaXQKKyAqIGFuZCBtYWxsb2MoKSBhIG5ldyBv bmUsIHJldHVybmluZyB0aGUgbmV3IGJ1ZmZlciBhbmQgaXRzIHNpemUgaW4gKmJ1ZiBhbmQKKyAq ICpidWZsZW4uCiAgKgogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaW50byAq YnVmLCBvciAwIG9uIEVPRi4KICAqLwogdHlwZWRlZiBzaXplX3QgKCpSZWFkRnVuYykgKEFyY2hp dmVIYW5kbGUgKkFILCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7CiAKLS8qIHN0cnVjdCBk ZWZpbml0aW9uIGFwcGVhcnMgaW4gY29tcHJlc3NfaW8uYyAqLwogdHlwZWRlZiBzdHJ1Y3QgQ29t cHJlc3NvclN0YXRlIENvbXByZXNzb3JTdGF0ZTsKK3N0cnVjdCBDb21wcmVzc29yU3RhdGUKK3sK KwkvKgorCSAqIFJlYWQgYWxsIGNvbXByZXNzZWQgZGF0YSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0g KHZpYSByZWFkRikgYW5kIHByaW50IGl0CisJICogb3V0IHdpdGggYWh3cml0ZSgpLgorCSAqLwor CXZvaWQJCSgqcmVhZERhdGEpIChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpj cyk7CisKKwkvKgorCSAqIENvbXByZXNzIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgc3Ry ZWFtICh2aWEgd3JpdGVGKS4KKwkgKi8KKwl2b2lkCQkoKndyaXRlRGF0YSkgKEFyY2hpdmVIYW5k bGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCSAgY29uc3Qgdm9pZCAqZGF0YSwg c2l6ZV90IGRMZW4pOworCisJLyoKKwkgKiBFbmQgY29tcHJlc3Npb24gYW5kIGZsdXNoIGludGVy bmFsIGJ1ZmZlcnMgaWYgYW55LgorCSAqLworCXZvaWQJCSgqZW5kKSAoQXJjaGl2ZUhhbmRsZSAq QUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOworCisJLyoKKwkgKiBDYWxsYmFjayBmdW5jdGlvbiB0 byByZWFkIGZyb20gYW4gYWxyZWFkeSBwcm9jZXNzZWQgaW5wdXQgc3RyZWFtCisJICovCisJUmVh ZEZ1bmMJcmVhZEY7CisKKwkvKgorCSAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHdyaXRlIGFuIGFs cmVhZHkgcHJvY2Vzc2VkIGNodW5rIG9mIGRhdGEuCisJICovCisJV3JpdGVGdW5jCXdyaXRlRjsK KworCS8qCisJICogQ29tcHJlc3Npb24gc3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBzdGF0ZS4KKwkg Ki8KKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7CisKKwkvKgor CSAqIFByaXZhdGUgZGF0YSB0byBiZSB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLgorCSAqLworCXZv aWQJICAgKnByaXZhdGVfZGF0YTsKK307CiAKIGV4dGVybiBDb21wcmVzc29yU3RhdGUgKkFsbG9j YXRlQ29tcHJlc3Nvcihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMsCisJCQkJCQkJCQkJICAgUmVhZEZ1bmMgcmVhZEYsCiAJCQkJCQkJCQkJICAgV3JpdGVG dW5jIHdyaXRlRik7Ci1leHRlcm4gdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5k bGUgKkFILAotCQkJCQkJCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMsCi0JCQkJCQkJCVJlYWRGdW5jIHJlYWRGKTsKLWV4dGVybiB2b2lkIFdyaXRlRGF0 YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJ CQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbik7CiBleHRlcm4gdm9pZCBFbmRDb21w cmVzc29yKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKIAorLyoKKyAq IENvbXByZXNzIEZpbGUgSGFuZGxlCisgKi8KK3R5cGVkZWYgc3RydWN0IENvbXByZXNzRmlsZUhh bmRsZSBDb21wcmVzc0ZpbGVIYW5kbGU7CisKK3N0cnVjdCBDb21wcmVzc0ZpbGVIYW5kbGUKK3sK KwkvKgorCSAqIE9wZW4gYSBmaWxlIGluIG1vZGUuCisJICoKKwkgKiBQYXNzIGVpdGhlciAncGF0 aCcgb3IgJ2ZkJyBkZXBlbmRpbmcgb24gd2hldGhlciBhIGZpbGVwYXRoIG9yIGEgZmlsZQorCSAq IGRlc2NyaXB0b3IgaXMgYXZhaWxhYmxlLiAnbW9kZScgY2FuIGJlIG9uZSBvZiAncicsICdyYics ICd3JywgJ3diJywKKwkgKiAnYScsIGFuZCAnYWInLiBSZXF1cmlyZXMgYW4gYWxyZWFkeSBpbml0 aWFsaXplZCBDb21wcmVzc0ZpbGVIYW5kbGUuCisJICovCisJaW50CQkJKCpvcGVuX2Z1bmMpIChj b25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkJCQkJICBDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisKKwkvKgorCSAqIE9wZW4gYSBmaWxlIGZvciB3cml0aW5n LgorCSAqCisJICogJ21vZGUnIGNhbiBiZSBvbmUgb2YgJyd3JywgJ3diJywgJ2EnLCBhbmQgJ2Fi Jy4gUmVxdXJpcmVzIGFuIGFscmVhZHkKKwkgKiBpbml0aWFsaXplZCBDb21wcmVzc0ZpbGVIYW5k bGUuCisJICovCisJaW50CQkJKCpvcGVuX3dyaXRlX2Z1bmMpIChjb25zdCBjaGFyICpwYXRoLCBj b25zdCBjaGFyICptb2RlLAorCQkJCQkJCQkJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOwogCi10 eXBlZGVmIHN0cnVjdCBjZnAgY2ZwOworCS8qCisJICogUmVhZCAnc2l6ZScgYnl0ZXMgb2YgZGF0 YSBmcm9tIHRoZSBmaWxlIGFuZCBzdG9yZSB0aGVtIGludG8gJ3B0cicuCisJICovCisJc2l6ZV90 CQkoKnJlYWRfZnVuYykgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIKTsKIAotZXh0ZXJuIGNmcCAqY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNo YXIgKm1vZGUsCi0JCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKTsKLWV4dGVybiBjZnAgKmNmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2Rl LAotCQkJCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMp OwotZXh0ZXJuIGNmcCAqY2ZvcGVuX3JlYWQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAq bW9kZSk7Ci1leHRlcm4gY2ZwICpjZm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3Qg Y2hhciAqbW9kZSwKLQkJCQkJCSBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpOwotZXh0ZXJuIGludAljZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2Zw ICpmcCk7Ci1leHRlcm4gaW50CWNmd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2Zw ICpmcCk7Ci1leHRlcm4gaW50CWNmZ2V0YyhjZnAgKmZwKTsKLWV4dGVybiBjaGFyICpjZmdldHMo Y2ZwICpmcCwgY2hhciAqYnVmLCBpbnQgbGVuKTsKLWV4dGVybiBpbnQJY2ZjbG9zZShjZnAgKmZw KTsKLWV4dGVybiBpbnQJY2Zlb2YoY2ZwICpmcCk7Ci1leHRlcm4gY29uc3QgY2hhciAqZ2V0X2Nm cF9lcnJvcihjZnAgKmZwKTsKKwkvKgorCSAqIFdyaXRlICdzaXplJyBieXRlcyBvZiBkYXRhIGlu dG8gdGhlIGZpbGUgZnJvbSAncHRyJy4KKwkgKi8KKwlzaXplX3QJCSgqd3JpdGVfZnVuYykgKGNv bnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCisJCQkJCQkJICAgc3RydWN0IENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIKTsKIAorCS8qCisJICogUmVhZCBhdCBtb3N0IHNpemUgLSAxIGNoYXJhY3Rl cnMgZnJvbSB0aGUgY29tcHJlc3MgZmlsZSBoYW5kbGUgaW50bworCSAqICdzJy4KKwkgKgorCSAq IFN0b3AgaWYgYW4gRU9GIG9yIGEgbmV3bGluZSBpcyBmb3VuZCBmaXJzdC4gJ3MnIGlzIGFsd2F5 cyBudWxsCisJICogdGVybWluYXRlZCBhbmQgY29udGFpbnMgdGhlIG5ld2xpbmUgaWYgaXQgd2Fz IGZvdW5kLgorCSAqLworCWNoYXIJICAgKigqZ2V0c19mdW5jKSAoY2hhciAqcywgaW50IHNpemUs IENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICogUmVhZCB0aGUgbmV4dCBjaGFy YWN0ZXIgZnJvbSB0aGUgY29tcHJlc3MgZmlsZSBoYW5kbGUgYXMgJ3Vuc2lnbmVkCisJICogY2hh cicgY2FzdCBpbnRvICdpbnQnLgorCSAqLworCWludAkJCSgqZ2V0Y19mdW5jKSAoQ29tcHJlc3NG aWxlSGFuZGxlICpDRkgpOworCisJLyoKKwkgKiBUZXN0IGlmIEVPRiBpcyByZWFjaGVkIGluIHRo ZSBjb21wcmVzcyBmaWxlIGhhbmRsZS4KKwkgKi8KKwlpbnQJCQkoKmVvZl9mdW5jKSAoQ29tcHJl c3NGaWxlSGFuZGxlICpDRkgpOworCisJLyoKKwkgKiBDbG9zZSBhbiBvcGVuIGZpbGUgaGFuZGxl LgorCSAqLworCWludAkJCSgqY2xvc2VfZnVuYykgKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsK KworCS8qCisJICogR2V0IGEgcG9pbnRlciB0byBhIHN0cmluZyB0aGF0IGRlc2NyaWJlcyBhbiBl cnJvciB0aGF0IG9jY3VyZWQgZHVyaW5nIGEKKwkgKiBjb21wcmVzcyBmaWxlIGhhbmRsZSBvcGVy YXRpb24uCisJICovCisJY29uc3QgY2hhciAqKCpnZXRfZXJyb3JfZnVuYykgKENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIKTsKKworCS8qCisJICogQ29tcHJlc3Npb24gc3BlY2lmaWNhdGlvbiBmb3Ig dGhpcyBmaWxlIGhhbmRsZS4KKwkgKi8KKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWM7CisKKwkvKgorCSAqIFByaXZhdGUgZGF0YSB0byBiZSB1c2VkIGJ5IHRoZSBj b21wcmVzc29yLgorCSAqLworCXZvaWQJICAgKnByaXZhdGVfZGF0YTsKK307CisKKy8qCisgKiBJ bml0aWFsaXplIGEgY29tcHJlc3MgZmlsZSBoYW5kbGUgd2l0aCB0aGUgcmVxdWVzdGVkIGNvbXBy ZXNzaW9uLgorICovCitleHRlcm4gQ29tcHJlc3NGaWxlSGFuZGxlICpJbml0Q29tcHJlc3NGaWxl SGFuZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7 CisKKy8qCisgKiBJbml0aWFsaXplIGEgY29tcHJlc3MgZmlsZSBzdHJlYW0uIERlZmZlciB0aGUg Y29tcHJlc3Npb24gYWxnb3JpdGhtCisgKiBmcm9tICdwYXRoJywgZWl0aGVyIGJ5IGV4YW1pbmlu ZyBpdHMgc3VmZml4IG9yIGJ5IGFwcGVuZGluZyB0aGUgc3VwcG9ydGVkCisgKiBzdWZmaXhlcyBp biAncGF0aCcuCisgKi8KK2V4dGVybiBDb21wcmVzc0ZpbGVIYW5kbGUgKkluaXREaXNjb3ZlckNv bXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFyICpwYXRoLAorCQkJCQkJCQkJCQkJCQkgIGNvbnN0 IGNoYXIgKm1vZGUpOworZXh0ZXJuIGludAlFbmRDb21wcmVzc0ZpbGVIYW5kbGUoQ29tcHJlc3NG aWxlSGFuZGxlICpDRkgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3Nfbm9uZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lY2JjZjRiMDRhCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuYwpAQCAtMCwwICsxLDIwNiBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tcHJlc3Nfbm9uZS5jCisgKgkgUm91dGluZXMgZm9y IGFyY2hpdmVycyB0byByZWFkIG9yIHdyaXRlIGFuIHVuY29tcHJlc3NlZCBzdHJlYW0uCisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMg b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgICBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nfbm9uZS5jCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2luY2x1ZGUgPHVuaXN0ZC5oPgor CisjaW5jbHVkZSAiY29tcHJlc3Nfbm9uZS5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5o IgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNzb3IgQVBJCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogUHJpdmF0ZSByb3V0aW5lcworICovCisK K3N0YXRpYyB2b2lkCitSZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBcmNoaXZlSGFuZGxlICpBSCwg Q29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlzaXplX3QJCWNudDsKKwljaGFyCSAgICpidWY7CisJ c2l6ZV90CQlidWZsZW47CisKKwlidWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSk7CisJYnVm bGVuID0gWkxJQl9PVVRfU0laRTsKKworCXdoaWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVm LCAmYnVmbGVuKSkpCisJeworCQlhaHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7CisJfQorCisJZnJl ZShidWYpOworfQorCisKK3N0YXRpYyB2b2lkCitXcml0ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hp dmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkgICBjb25zdCB2b2lkICpk YXRhLCBzaXplX3QgZExlbikKK3sKKwljcy0+d3JpdGVGKEFILCBkYXRhLCBkTGVuKTsKK30KKwor c3RhdGljIHZvaWQKK0VuZENvbXByZXNzb3JOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVz c29yU3RhdGUgKmNzKQoreworCS8qIG5vIG9wICovCit9CisKKy8qCisgKiBQdWJsaWMgaW50ZXJm YWNlCisgKi8KKwordm9pZAorSW5pdENvbXByZXNzb3JOb25lKENvbXByZXNzb3JTdGF0ZSAqY3Ms CisJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVj KQoreworCWNzLT5yZWFkRGF0YSA9IFJlYWREYXRhRnJvbUFyY2hpdmVOb25lOworCWNzLT53cml0 ZURhdGEgPSBXcml0ZURhdGFUb0FyY2hpdmVOb25lOworCWNzLT5lbmQgPSBFbmRDb21wcmVzc29y Tm9uZTsKKworCWNzLT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJlc3Npb25fc3BlYzsKK30KKwor CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNzIEZpbGUgQVBJCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogUHJpdmF0ZSByb3V0aW5lcworICovCisK K3N0YXRpYyBzaXplX3QKK3JlYWRfbm9uZSh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVz c0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0 ZV9kYXRhOworCXNpemVfdAkJcmV0OworCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIDA7CisK KwlyZXQgPSBmcmVhZChwdHIsIDEsIHNpemUsIGZwKTsKKwlpZiAocmV0ICE9IHNpemUgJiYgIWZl b2YoZnApKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIs CisJCQkJIHN0cmVycm9yKGVycm5vKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc2l6 ZV90Cit3cml0ZV9ub25lKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIKQoreworCXJldHVybiBmd3JpdGUocHRyLCAxLCBzaXplLCAoRklMRSAqKSBD RkgtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF9lcnJvcl9u b25lKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCXJldHVybiBzdHJlcnJvcihlcnJubyk7 Cit9CisKK3N0YXRpYyBjaGFyICoKK2dldHNfbm9uZShjaGFyICpwdHIsIGludCBzaXplLCBDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlyZXR1cm4gZmdldHMocHRyLCBzaXplLCAoRklMRSAq KSBDRkgtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK2dldGNfbm9uZShDb21wcmVz c0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0 ZV9kYXRhOworCWludAkJCXJldDsKKworCXJldCA9IGZnZXRjKGZwKTsKKwlpZiAocmV0ID09IEVP RikKKwl7CisJCWlmICghZmVvZihmcCkpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJv bSBpbnB1dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWVsc2UKKwkJCXBnX2ZhdGFs KCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CisJfQorCisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorY2xvc2Vfbm9uZShDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCkKK3sKKwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhOwor CWludAkJCXJldCA9IDA7CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisKKwlpZiAoZnAp CisJCXJldCA9IGZjbG9zZShmcCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citl b2Zfbm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlyZXR1cm4gZmVvZigoRklMRSAq KSBDRkgtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK29wZW5fbm9uZShjb25zdCBj aGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRsZSAq Q0ZIKQoreworCUFzc2VydChDRkgtPnByaXZhdGVfZGF0YSA9PSBOVUxMKTsKKworCWlmIChmZCA+ PSAwKQorCQlDRkgtPnByaXZhdGVfZGF0YSA9IGZkb3BlbihkdXAoZmQpLCBtb2RlKTsKKwllbHNl CisJCUNGSC0+cHJpdmF0ZV9kYXRhID0gZm9wZW4ocGF0aCwgbW9kZSk7CisKKwlpZiAoQ0ZILT5w cml2YXRlX2RhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludAorb3Blbl93cml0ZV9ub25lKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1v ZGUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUFzc2VydChDRkgtPnByaXZhdGVfZGF0 YSA9PSBOVUxMKTsKKworCUNGSC0+cHJpdmF0ZV9kYXRhID0gZm9wZW4ocGF0aCwgbW9kZSk7CisJ aWYgKENGSC0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7 Cit9CisKKy8qCisgKiBQdWJsaWMgaW50ZXJmYWNlCisgKi8KKwordm9pZAorSW5pdENvbXByZXNz RmlsZUhhbmRsZU5vbmUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsCisJCQkJCQkgICBjb25zdCBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJQ0ZILT5vcGVu X2Z1bmMgPSBvcGVuX25vbmU7CisJQ0ZILT5vcGVuX3dyaXRlX2Z1bmMgPSBvcGVuX3dyaXRlX25v bmU7CisJQ0ZILT5yZWFkX2Z1bmMgPSByZWFkX25vbmU7CisJQ0ZILT53cml0ZV9mdW5jID0gd3Jp dGVfbm9uZTsKKwlDRkgtPmdldHNfZnVuYyA9IGdldHNfbm9uZTsKKwlDRkgtPmdldGNfZnVuYyA9 IGdldGNfbm9uZTsKKwlDRkgtPmNsb3NlX2Z1bmMgPSBjbG9zZV9ub25lOworCUNGSC0+ZW9mX2Z1 bmMgPSBlb2Zfbm9uZTsKKwlDRkgtPmdldF9lcnJvcl9mdW5jID0gZ2V0X2Vycm9yX25vbmU7CisK KwlDRkgtPnByaXZhdGVfZGF0YSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvY29tcHJlc3Nfbm9uZS5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xNDNlNTk5ODE5Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaApAQCAtMCwwICsxLDI0IEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19ub25lLmgKKyAqCSBVbmNvbXBy ZXNzZWQgaW50ZXJmYWNlIHRvIGNvbXByZXNzX2lvLmMgcm91dGluZXMKKyAqCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5p dmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9i aW4vcGdfZHVtcC9jb21wcmVzc19ub25lLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2lmbmRlZiBfQ09NUFJFU1NfTk9ORV9IXworI2RlZmluZSBfQ09NUFJFU1NfTk9ORV9IXworCisj aW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKKworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzb3JOb25l KENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc0ZpbGVI YW5kbGVOb25lKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILAorCQkJCQkJCQkJICAgY29uc3QgcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKworI2VuZGlmCQkJCQkJ CS8qIF9DT01QUkVTU19OT05FX0hfICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVz b24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXggY2E2MmY5YTM3NC4u ODRlOWYwZGVmYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApAQCAtMSw3ICsxLDkgQEAKICMgQ29weXJpZ2h0 IChjKSAyMDIyLTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAKIHBn X2R1bXBfY29tbW9uX3NvdXJjZXMgPSBmaWxlcygKKyAgJ2NvbXByZXNzX2d6aXAuYycsCiAgICdj b21wcmVzc19pby5jJywKKyAgJ2NvbXByZXNzX25vbmUuYycsCiAgICdkdW1wdXRpbHMuYycsCiAg ICdwYXJhbGxlbC5jJywKICAgJ3BnX2JhY2t1cF9hcmNoaXZlci5jJywKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYwppbmRleCA1ZjUyZWE0MGU4Li4wNGNmODg3NTI2IDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC05NSw4ICs5NSw4IEBAIHN0YXRpYyB2b2lkIGR1 bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAo QXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKm1zZywgdGltZV90IHRpbSk7CiBzdGF0aWMg dm9pZCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAog CQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7 Ci1zdGF0aWMgY2ZwICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKLXN0YXRpYyB2b2lk IFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNmcCAqc2F2ZWRPdXRwdXQpOworc3Rh dGljIENvbXByZXNzRmlsZUhhbmRsZSAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7Citz dGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc0ZpbGVI YW5kbGUgKnNhdmVkT3V0cHV0KTsKIAogc3RhdGljIGludAlyZXN0b3JlX3RvY19lbnRyeShBcmNo aXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBib29sIGlzX3BhcmFsbGVsKTsKIHN0YXRpYyB2 b2lkIHJlc3RvcmVfdG9jX2VudHJpZXNfcHJlZm9yayhBcmNoaXZlSGFuZGxlICpBSCwKQEAgLTI3 Miw3ICsyNzIsNyBAQCBDbG9zZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCiAJLyogQ2xvc2UgdGhl IG91dHB1dCAqLwogCWVycm5vID0gMDsKLQlyZXMgPSBjZmNsb3NlKEFILT5PRik7CisJcmVzID0g RW5kQ29tcHJlc3NGaWxlSGFuZGxlKEFILT5PRik7CiAKIAlpZiAocmVzICE9IDApCiAJCXBnX2Zh dGFsKCJjb3VsZCBub3QgY2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CkBAIC0zNTUsNyArMzU1LDcg QEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCWJvb2wJCXBhcmFsbGVsX21vZGU7CiAJ Ym9vbAkJc3VwcG9ydHNfY29tcHJlc3Npb247CiAJVG9jRW50cnkgICAqdGU7Ci0JY2ZwCQkgICAq c2F2OworCUNvbXByZXNzRmlsZUhhbmRsZSAqc2F2OwogCiAJQUgtPnN0YWdlID0gU1RBR0VfSU5J VElBTElaSU5HOwogCkBAIC0xMTM0LDcgKzExMzQsNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2 ZSAqQUhYKQogCVRvY0VudHJ5ICAgKnRlOwogCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gb3V0 X2NvbXByZXNzaW9uX3NwZWMgPSB7MH07CiAJdGVTZWN0aW9uCWN1clNlY3Rpb247Ci0JY2ZwCQkg ICAqc2F2OworCUNvbXByZXNzRmlsZUhhbmRsZSAqc2F2OwogCWNvbnN0IGNoYXIgKmZtdE5hbWU7 CiAJY2hhcgkJc3RhbXBfc3RyWzY0XTsKIApAQCAtMTE1MCw5ICsxMTUwLDEwIEBAIFByaW50VE9D U3VtbWFyeShBcmNoaXZlICpBSFgpCiAJCXN0cmNweShzdGFtcF9zdHIsICJbdW5rbm93bl0iKTsK IAogCWFocHJpbnRmKEFILCAiO1xuOyBBcmNoaXZlIGNyZWF0ZWQgYXQgJXNcbiIsIHN0YW1wX3N0 cik7Ci0JYWhwcmludGYoQUgsICI7ICAgICBkYm5hbWU6ICVzXG47ICAgICBUT0MgRW50cmllczog JWRcbjsgICAgIENvbXByZXNzaW9uOiAlZFxuIiwKKwlhaHByaW50ZihBSCwgIjsgICAgIGRibmFt ZTogJXNcbjsgICAgIFRPQyBFbnRyaWVzOiAlZFxuOyAgICAgQ29tcHJlc3Npb246ICVzXG4iLAog CQkJIHNhbml0aXplX2xpbmUoQUgtPmFyY2hkYm5hbWUsIGZhbHNlKSwKLQkJCSBBSC0+dG9jQ291 bnQsIEFILT5jb21wcmVzc2lvbl9zcGVjLmxldmVsKTsKKwkJCSBBSC0+dG9jQ291bnQsCisJCQkg Z2V0X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSkpOwogCiAJc3dpdGNoIChBSC0+Zm9ybWF0KQogCXsKQEAgLTE1MDksNiArMTUxMCw3IEBAIHN0 YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVu YW1lLAogCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3Bl YykKIHsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICptb2RlOwogCWlu dAkJCWZuID0gLTE7CiAKQEAgLTE1MzEsMzMgKzE1MzMsMzIgQEAgU2V0T3V0cHV0KEFyY2hpdmVI YW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNlCiAJCW1vZGUgPSBQR19CSU5B UllfVzsKIAotCWlmIChmbiA+PSAwKQotCQlBSC0+T0YgPSBjZmRvcGVuKGR1cChmbiksIG1vZGUs IGNvbXByZXNzaW9uX3NwZWMpOwotCWVsc2UKLQkJQUgtPk9GID0gY2ZvcGVuKGZpbGVuYW1lLCBt b2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKKwlDRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNv bXByZXNzaW9uX3NwZWMpOwogCi0JaWYgKCFBSC0+T0YpCisJaWYgKENGSC0+b3Blbl9mdW5jKGZp bGVuYW1lLCBmbiwgbW9kZSwgQ0ZIKSkKIAl7CiAJCWlmIChmaWxlbmFtZSkKIAkJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogCQll bHNlCiAJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGU6ICVtIik7CiAJfQor CisJQUgtPk9GID0gQ0ZIOwogfQogCi1zdGF0aWMgY2ZwICoKK3N0YXRpYyBDb21wcmVzc0ZpbGVI YW5kbGUgKgogU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCkKIHsKLQlyZXR1cm4gKGNmcCAq KSBBSC0+T0Y7CisJcmV0dXJuIChDb21wcmVzc0ZpbGVIYW5kbGUgKikgQUgtPk9GOwogfQogCiBz dGF0aWMgdm9pZAotUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2ZwICpzYXZlZE91 dHB1dCkKK1Jlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRs ZSAqc2F2ZWRPdXRwdXQpCiB7CiAJaW50CQkJcmVzOwogCiAJZXJybm8gPSAwOwotCXJlcyA9IGNm Y2xvc2UoQUgtPk9GKTsKKwlyZXMgPSBFbmRDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPk9GKTsKIAog CWlmIChyZXMgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTog JW0iKTsKQEAgLTE2OTYsNyArMTY5NywxMSBAQCBhaHdyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6 ZV90IHNpemUsIHNpemVfdCBubWVtYiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAJZWxzZSBpZiAoUmVz dG9yaW5nVG9EQihBSCkpCiAJCWJ5dGVzX3dyaXR0ZW4gPSBFeGVjdXRlU3FsQ29tbWFuZEJ1Zigm QUgtPnB1YmxpYywgKGNvbnN0IGNoYXIgKikgcHRyLCBzaXplICogbm1lbWIpOwogCWVsc2UKLQkJ Ynl0ZXNfd3JpdHRlbiA9IGNmd3JpdGUocHRyLCBzaXplICogbm1lbWIsIEFILT5PRik7CisJewor CQlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IChDb21wcmVzc0ZpbGVIYW5kbGUgKikgQUgtPk9G OworCisJCWJ5dGVzX3dyaXR0ZW4gPSBDRkgtPndyaXRlX2Z1bmMocHRyLCBzaXplICogbm1lbWIs IENGSCk7CisJfQogCiAJaWYgKGJ5dGVzX3dyaXR0ZW4gIT0gc2l6ZSAqIG5tZW1iKQogCQlXUklU RV9FUlJPUl9FWElUOwpAQCAtMjAzOCw2ICsyMDQzLDE4IEBAIFJlYWRTdHIoQXJjaGl2ZUhhbmRs ZSAqQUgpCiAJcmV0dXJuIGJ1ZjsKIH0KIAorc3RhdGljIGJvb2wKK19maWxlRXhpc3RzSW5EaXJl Y3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qg c3RhdCBzdDsKKwljaGFyCQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1B WFBHUEFUSCwgIiVzLyVzIiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRh bCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0 YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKIHN0YXRpYyBp bnQKIF9kaXNjb3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7CkBAIC0yMDY4 LDI2ICsyMDg1LDEyIEBAIF9kaXNjb3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgp CiAJCSAqLwogCQlpZiAoc3RhdChBSC0+ZlNwZWMsICZzdCkgPT0gMCAmJiBTX0lTRElSKHN0LnN0 X21vZGUpKQogCQl7Ci0JCQljaGFyCQlidWZbTUFYUEdQQVRIXTsKLQotCQkJaWYgKHNucHJpbnRm KGJ1ZiwgTUFYUEdQQVRILCAiJXMvdG9jLmRhdCIsIEFILT5mU3BlYykgPj0gTUFYUEdQQVRIKQot CQkJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwKLQkJCQkJCSBB SC0+ZlNwZWMpOwotCQkJaWYgKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9t b2RlKSkKLQkJCXsKLQkJCQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwkJCUFILT5mb3Jt YXQgPSBhcmNoRGlyZWN0b3J5OworCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZT cGVjLCAidG9jLmRhdCIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OwotCQkJfQotCiAjaWZkZWYg SEFWRV9MSUJaCi0JCQlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy90b2MuZGF0Lmd6 IiwgQUgtPmZTcGVjKSA+PSBNQVhQR1BBVEgpCi0JCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1l IHRvbyBsb25nOiBcIiVzXCIiLAotCQkJCQkJIEFILT5mU3BlYyk7Ci0JCQlpZiAoc3RhdChidWYs ICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKQotCQkJewotCQkJCUFILT5mb3JtYXQg PSBhcmNoRGlyZWN0b3J5OworCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVj LCAidG9jLmRhdC5neiIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OwotCQkJfQogI2VuZGlmCiAJ CQlwZ19mYXRhbCgiZGlyZWN0b3J5IFwiJXNcIiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxp ZCBhcmNoaXZlIChcInRvYy5kYXRcIiBkb2VzIG5vdCBleGlzdCkiLAogCQkJCQkgQUgtPmZTcGVj KTsKQEAgLTIxODUsNiArMjE4OCw3IEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBj b25zdCBBcmNoaXZlRm9ybWF0IGZtdCwKIAkJIFNldHVwV29ya2VyUHRyVHlwZSBzZXR1cFdvcmtl clB0cikKIHsKIAlBcmNoaXZlSGFuZGxlICpBSDsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsK IAlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc19zcGVjID0gezB9OwogCiAJ cGdfbG9nX2RlYnVnKCJhbGxvY2F0aW5nIEFIIGZvciAlcywgZm9ybWF0ICVkIiwKQEAgLTIyNDAs NyArMjI0NCwxMCBAQCBfYWxsb2NBSChjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2 ZUZvcm1hdCBmbXQsCiAKIAkvKiBPcGVuIHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9uIGZvciBB SCBvdXRwdXQgaGFuZGxlICovCiAJb3V0X2NvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09N UFJFU1NJT05fTk9ORTsKLQlBSC0+T0YgPSBjZmRvcGVuKGR1cChmaWxlbm8oc3Rkb3V0KSksIFBH X0JJTkFSWV9BLCBvdXRfY29tcHJlc3Nfc3BlYyk7CisJQ0ZIID0gSW5pdENvbXByZXNzRmlsZUhh bmRsZShvdXRfY29tcHJlc3Nfc3BlYyk7CisJaWYgKENGSC0+b3Blbl9mdW5jKE5VTEwsIGZpbGVu byhzdGRvdXQpLCBQR19CSU5BUllfQSwgQ0ZIKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVu IHN0ZG91dCBmb3IgYXBwZW5kaW5nOiAlbSIpOworCUFILT5PRiA9IENGSDsKIAogCS8qCiAJICog T24gV2luZG93cywgd2UgbmVlZCB0byB1c2UgYmluYXJ5IG1vZGUgdG8gcmVhZC93cml0ZSBub24t dGV4dCBmaWxlcywKQEAgLTM2NTMsMTIgKzM2NjAsNyBAQCBXcml0ZUhlYWQoQXJjaGl2ZUhhbmRs ZSAqQUgpCiAJQUgtPldyaXRlQnl0ZVB0cihBSCwgQUgtPmludFNpemUpOwogCUFILT5Xcml0ZUJ5 dGVQdHIoQUgsIEFILT5vZmZTaXplKTsKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+Zm9ybWF0 KTsKLQkvKgotCSAqIEZvciBub3cgdGhlIGNvbXByZXNzaW9uIHR5cGUgaXMgaW1wbGllZCBieSB0 aGUgbGV2ZWwuICBUaGlzIHdpbGwgbmVlZAotCSAqIHRvIGNoYW5nZSBvbmNlIHN1cHBvcnQgZm9y IG1vcmUgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBpcyBhZGRlZCwKLQkgKiByZXF1aXJpbmcgYSBm b3JtYXQgYnVtcC4KLQkgKi8KLQlXcml0ZUludChBSCwgQUgtPmNvbXByZXNzaW9uX3NwZWMubGV2 ZWwpOworCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSk7CiAJY3J0bSA9ICpsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKTsKIAlXcml0ZUludChBSCwg Y3J0bS50bV9zZWMpOwogCVdyaXRlSW50KEFILCBjcnRtLnRtX21pbik7CkBAIC0zNzI5LDEwICsz NzMxLDExIEBAIFJlYWRIZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlwZ19mYXRhbCgiZXhwZWN0 ZWQgZm9ybWF0ICglZCkgZGlmZmVycyBmcm9tIGZvcm1hdCBmb3VuZCBpbiBmaWxlICglZCkiLAog CQkJCSBBSC0+Zm9ybWF0LCBmbXQpOwogCi0JLyogR3Vlc3MgdGhlIGNvbXByZXNzaW9uIG1ldGhv ZCBiYXNlZCBvbiB0aGUgbGV2ZWwgKi8KLQlBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0g PSBQR19DT01QUkVTU0lPTl9OT05FOwotCWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV8yKQor CWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV8xNSkKKwkJQUgtPmNvbXByZXNzaW9uX3NwZWMu YWxnb3JpdGhtID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsKKwllbHNlIGlmIChBSC0+dmVyc2lvbiA+ PSBLX1ZFUlNfMV8yKQogCXsKKwkJLyogR3Vlc3MgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNl ZCBvbiB0aGUgbGV2ZWwgKi8KIAkJaWYgKEFILT52ZXJzaW9uIDwgS19WRVJTXzFfNCkKIAkJCUFI LT5jb21wcmVzc2lvbl9zcGVjLmxldmVsID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsKIAkJZWxzZQpA QCAtMzc0NCwxMCArMzc0NywxNyBAQCBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNl CiAJCUFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7 CiAKKwlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9O X05PTkUpCisJeworCQlib29sCQl1bnN1cHBvcnRlZCA9IGZhbHNlOworCiAjaWZuZGVmIEhBVkVf TElCWgotCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJ T05fR1pJUCkKLQkJcGdfZmF0YWwoImFyY2hpdmUgaXMgY29tcHJlc3NlZCwgYnV0IHRoaXMgaW5z dGFsbGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24iKTsKKwkJaWYgKEFILT5jb21w cmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQorCQkJdW5zdXBw b3J0ZWQgPSB0cnVlOwogI2VuZGlmCisJCWlmICh1bnN1cHBvcnRlZCkKKwkJCXBnX2ZhdGFsKCJh cmNoaXZlIGlzIGNvbXByZXNzZWQsIGJ1dCB0aGlzIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBw b3J0IGNvbXByZXNzaW9uIik7CisJfQogCiAJaWYgKEFILT52ZXJzaW9uID49IEtfVkVSU18xXzQp CiAJewpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IDQ3MjVlNDk3NDcuLjE4 YjM4YzE3YWIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu aAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTY1LDEwICs2 NSwxMyBAQAogI2RlZmluZSBLX1ZFUlNfMV8xMyBNQUtFX0FSQ0hJVkVfVkVSU0lPTigxLCAxMywg MCkJLyogY2hhbmdlIHNlYXJjaF9wYXRoCiAJCQkJCQkJCQkJCQkJICogYmVoYXZpb3IgKi8KICNk ZWZpbmUgS19WRVJTXzFfMTQgTUFLRV9BUkNISVZFX1ZFUlNJT04oMSwgMTQsIDApCS8qIGFkZCB0 YWJsZWFtICovCisjZGVmaW5lIEtfVkVSU18xXzE1IE1BS0VfQVJDSElWRV9WRVJTSU9OKDEsIDE1 LCAwKQkvKiBhZGQKKwkJCQkJCQkJCQkJCQkgKiBjb21wcmVzc2lvbl9hbGdvcml0aG0KKwkJCQkJ CQkJCQkJCQkgKiBpbiBoZWFkZXIgKi8KIAogLyogQ3VycmVudCBhcmNoaXZlIHZlcnNpb24gbnVt YmVyICh0aGUgZm9ybWF0IHdlIGNhbiBvdXRwdXQpICovCiAjZGVmaW5lIEtfVkVSU19NQUpPUiAx Ci0jZGVmaW5lIEtfVkVSU19NSU5PUiAxNAorI2RlZmluZSBLX1ZFUlNfTUlOT1IgMTUKICNkZWZp bmUgS19WRVJTX1JFViAwCiAjZGVmaW5lIEtfVkVSU19TRUxGIE1BS0VfQVJDSElWRV9WRVJTSU9O KEtfVkVSU19NQUpPUiwgS19WRVJTX01JTk9SLCBLX1ZFUlNfUkVWKQogCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9jdXN0b20uYwppbmRleCBkMWU1NDY0NGE5Li41MTJhYjA0M2FmIDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfY3VzdG9tLmMKQEAgLTI5OCw3ICsyOTgsOSBAQCBfU3RhcnREYXRhKEFyY2hpdmVI YW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiAJX1dyaXRlQnl0ZShBSCwgQkxLX0RBVEEpOwkvKiBC bG9jayB0eXBlICovCiAJV3JpdGVJbnQoQUgsIHRlLT5kdW1wSWQpOwkvKiBGb3Igc2FuaXR5IGNo ZWNrICovCiAKLQljdHgtPmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9z cGVjLCBfQ3VzdG9tV3JpdGVGdW5jKTsKKwljdHgtPmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFI LT5jb21wcmVzc2lvbl9zcGVjLAorCQkJCQkJCQkgTlVMTCwKKwkJCQkJCQkJIF9DdXN0b21Xcml0 ZUZ1bmMpOwogfQogCiAvKgpAQCAtMzE3LDE1ICszMTksMTUgQEAgX1dyaXRlRGF0YShBcmNoaXZl SGFuZGxlICpBSCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRMZW4pCiAJQ29tcHJlc3NvclN0 YXRlICpjcyA9IGN0eC0+Y3M7CiAKIAlpZiAoZExlbiA+IDApCi0JCS8qIFdyaXRlRGF0YVRvQXJj aGl2ZSgpIGludGVybmFsbHkgdGhyb3dzIHdyaXRlIGVycm9ycyAqLwotCQlXcml0ZURhdGFUb0Fy Y2hpdmUoQUgsIGNzLCBkYXRhLCBkTGVuKTsKKwkJLyogd3JpdGVEYXRhKCkgaW50ZXJuYWxseSB0 aHJvd3Mgd3JpdGUgZXJyb3JzICovCisJCWNzLT53cml0ZURhdGEoQUgsIGNzLCBkYXRhLCBkTGVu KTsKIH0KIAogLyoKICAqIENhbGxlZCBieSB0aGUgYXJjaGl2ZXIgd2hlbiBhIGR1bXBlcidzICdE YXRhRHVtcGVyJyByb3V0aW5lIGhhcwogICogZmluaXNoZWQuCiAgKgotICogT3B0aW9uYWwuCisg KiBNYW5kYXRvcnkuCiAgKi8KIHN0YXRpYyB2b2lkCiBfRW5kRGF0YShBcmNoaXZlSGFuZGxlICpB SCwgVG9jRW50cnkgKnRlKQpAQCAtMzMzLDYgKzMzNSw4IEBAIF9FbmREYXRhKEFyY2hpdmVIYW5k bGUgKkFILCBUb2NFbnRyeSAqdGUpCiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikg QUgtPmZvcm1hdERhdGE7CiAKIAlFbmRDb21wcmVzc29yKEFILCBjdHgtPmNzKTsKKwljdHgtPmNz ID0gTlVMTDsKKwogCS8qIFNlbmQgdGhlIGVuZCBtYXJrZXIgKi8KIAlXcml0ZUludChBSCwgMCk7 CiB9CkBAIC0zNzcsNyArMzgxLDkgQEAgX1N0YXJ0TE8oQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0Vu dHJ5ICp0ZSwgT2lkIG9pZCkKIAogCVdyaXRlSW50KEFILCBvaWQpOwogCi0JY3R4LT5jcyA9IEFs bG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywgX0N1c3RvbVdyaXRlRnVuYyk7 CisJY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywKKwkJ CQkJCQkJIE5VTEwsCisJCQkJCQkJCSBfQ3VzdG9tV3JpdGVGdW5jKTsKIH0KIAogLyoKQEAgLTU2 Niw3ICs1NzIsMTIgQEAgX1ByaW50VG9jRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkg KnRlKQogc3RhdGljIHZvaWQKIF9QcmludERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7Ci0JUmVh ZERhdGFGcm9tQXJjaGl2ZShBSCwgQUgtPmNvbXByZXNzaW9uX3NwZWMsIF9DdXN0b21SZWFkRnVu Yyk7CisJQ29tcHJlc3NvclN0YXRlICpjczsKKworCWNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFI LT5jb21wcmVzc2lvbl9zcGVjLAorCQkJCQkJCV9DdXN0b21SZWFkRnVuYywgTlVMTCk7CisJY3Mt PnJlYWREYXRhKEFILCBjcyk7CisJRW5kQ29tcHJlc3NvcihBSCwgY3MpOwogfQogCiBzdGF0aWMg dm9pZApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKaW5kZXggNjgwMGMzY2NlZS4u YTJmODg5OTVjMCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3Rv cnkuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCkBAIC01MCw5 ICs1MCw4IEBAIHR5cGVkZWYgc3RydWN0CiAJICovCiAJY2hhcgkgICAqZGlyZWN0b3J5OwogCi0J Y2ZwCQkgICAqZGF0YUZIOwkJCS8qIGN1cnJlbnRseSBvcGVuIGRhdGEgZmlsZSAqLwotCi0JY2Zw CQkgICAqTE9zVG9jRkg7CQkvKiBmaWxlIGhhbmRsZSBmb3IgYmxvYnMudG9jICovCisJQ29tcHJl c3NGaWxlSGFuZGxlICpkYXRhRkg7IC8qIGN1cnJlbnRseSBvcGVuIGRhdGEgZmlsZSAqLworCUNv bXByZXNzRmlsZUhhbmRsZSAqTE9zVG9jRkg7IC8qIGZpbGUgaGFuZGxlIGZvciBibG9icy50b2Mg Ki8KIAlQYXJhbGxlbFN0YXRlICpwc3RhdGU7CQkvKiBmb3IgcGFyYWxsZWwgYmFja3VwIC8gcmVz dG9yZSAqLwogfSBsY2xDb250ZXh0OwogCkBAIC0xOTgsMTEgKzE5NywxMSBAQCBJbml0QXJjaGl2 ZUZtdF9EaXJlY3RvcnkoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJZWxzZQogCXsJCQkJCQkJLyogUmVh ZCBNb2RlICovCiAJCWNoYXIJCWZuYW1lW01BWFBHUEFUSF07Ci0JCWNmcAkJICAgKnRvY0ZIOwor CQlDb21wcmVzc0ZpbGVIYW5kbGUgKnRvY0ZIOwogCiAJCXNldEZpbGVQYXRoKEFILCBmbmFtZSwg InRvYy5kYXQiKTsKIAotCQl0b2NGSCA9IGNmb3Blbl9yZWFkKGZuYW1lLCBQR19CSU5BUllfUik7 CisJCXRvY0ZIID0gSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGZuYW1lLCBQR19CSU5B UllfUik7CiAJCWlmICh0b2NGSCA9PSBOVUxMKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVu IGlucHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIApAQCAtMjE4LDcgKzIxNyw3IEBAIElu aXRBcmNoaXZlRm10X0RpcmVjdG9yeShBcmNoaXZlSGFuZGxlICpBSCkKIAkJUmVhZFRvYyhBSCk7 CiAKIAkJLyogTm90aGluZyBlbHNlIGluIHRoZSBmaWxlLCBzbyBjbG9zZSBpdCBhZ2Fpbi4uLiAq LwotCQlpZiAoY2ZjbG9zZSh0b2NGSCkgIT0gMCkKKwkJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRs ZSh0b2NGSCkgIT0gMCkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgVE9DIGZpbGU6ICVt Iik7CiAJCWN0eC0+ZGF0YUZIID0gTlVMTDsKIAl9CkBAIC0zMjcsOSArMzI2LDkgQEAgX1N0YXJ0 RGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCiAJc2V0RmlsZVBhdGgoQUgs IGZuYW1lLCB0Y3R4LT5maWxlbmFtZSk7CiAKLQljdHgtPmRhdGFGSCA9IGNmb3Blbl93cml0ZShm bmFtZSwgUEdfQklOQVJZX1csCi0JCQkJCQkJICAgQUgtPmNvbXByZXNzaW9uX3NwZWMpOwotCWlm IChjdHgtPmRhdGFGSCA9PSBOVUxMKQorCWN0eC0+ZGF0YUZIID0gSW5pdENvbXByZXNzRmlsZUhh bmRsZShBSC0+Y29tcHJlc3Npb25fc3BlYyk7CisKKwlpZiAoY3R4LT5kYXRhRkgtPm9wZW5fd3Jp dGVfZnVuYyhmbmFtZSwgUEdfQklOQVJZX1csIGN0eC0+ZGF0YUZIKSkKIAkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiB9CiAKQEAgLTM0 NiwxNSArMzQ1LDE2IEBAIHN0YXRpYyB2b2lkCiBfV3JpdGVEYXRhKEFyY2hpdmVIYW5kbGUgKkFI LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAo bGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9 IGN0eC0+ZGF0YUZIOwogCiAJZXJybm8gPSAwOwotCWlmIChkTGVuID4gMCAmJiBjZndyaXRlKGRh dGEsIGRMZW4sIGN0eC0+ZGF0YUZIKSAhPSBkTGVuKQorCWlmIChkTGVuID4gMCAmJiBDRkgtPndy aXRlX2Z1bmMoZGF0YSwgZExlbiwgQ0ZIKSAhPSBkTGVuKQogCXsKIAkJLyogaWYgd3JpdGUgZGlk bid0IHNldCBlcnJubywgYXNzdW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwogCQlpZiAo ZXJybm8gPT0gMCkKIAkJCWVycm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgiY291bGQgbm90IHdy aXRlIHRvIG91dHB1dCBmaWxlOiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3IoY3R4LT5kYXRhRkgp KTsKKwkJCQkgQ0ZILT5nZXRfZXJyb3JfZnVuYyhDRkgpKTsKIAl9CiB9CiAKQEAgLTM3MCw3ICsz NzAsNyBAQCBfRW5kRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCWxjbENv bnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCiAJLyogQ2xvc2Ug dGhlIGZpbGUgKi8KLQlpZiAoY2ZjbG9zZShjdHgtPmRhdGFGSCkgIT0gMCkKKwlpZiAoRW5kQ29t cHJlc3NGaWxlSGFuZGxlKGN0eC0+ZGF0YUZIKSAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90 IGNsb3NlIGRhdGEgZmlsZTogJW0iKTsKIAogCWN0eC0+ZGF0YUZIID0gTlVMTDsKQEAgLTM4NSwy NiArMzg1LDI1IEBAIF9QcmludEZpbGVEYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBjaGFyICpmaWxl bmFtZSkKIAlzaXplX3QJCWNudDsKIAljaGFyCSAgICpidWY7CiAJc2l6ZV90CQlidWZsZW47Ci0J Y2ZwCQkgICAqY2ZwOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCiAJaWYgKCFmaWxlbmFt ZSkKIAkJcmV0dXJuOwogCi0JY2ZwID0gY2ZvcGVuX3JlYWQoZmlsZW5hbWUsIFBHX0JJTkFSWV9S KTsKLQotCWlmICghY2ZwKQorCUNGSCA9IEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShm aWxlbmFtZSwgUEdfQklOQVJZX1IpOworCWlmICghQ0ZIKQogCQlwZ19mYXRhbCgiY291bGQgbm90 IG9wZW4gaW5wdXQgZmlsZSBcIiVzXCI6ICVtIiwgZmlsZW5hbWUpOwogCiAJYnVmID0gcGdfbWFs bG9jKFpMSUJfT1VUX1NJWkUpOwogCWJ1ZmxlbiA9IFpMSUJfT1VUX1NJWkU7CiAKLQl3aGlsZSAo KGNudCA9IGNmcmVhZChidWYsIGJ1ZmxlbiwgY2ZwKSkpCisJd2hpbGUgKChjbnQgPSBDRkgtPnJl YWRfZnVuYyhidWYsIGJ1ZmxlbiwgQ0ZIKSkpCiAJewogCQlhaHdyaXRlKGJ1ZiwgMSwgY250LCBB SCk7CiAJfQogCiAJZnJlZShidWYpOwotCWlmIChjZmNsb3NlKGNmcCkgIT0gMCkKKwlpZiAoRW5k Q29tcHJlc3NGaWxlSGFuZGxlKENGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9z ZSBkYXRhIGZpbGUgXCIlc1wiOiAlbSIsIGZpbGVuYW1lKTsKIH0KIApAQCAtNDM1LDYgKzQzNCw3 IEBAIF9Mb2FkTE9zKEFyY2hpdmVIYW5kbGUgKkFIKQogewogCU9pZAkJCW9pZDsKIAlsY2xDb250 ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSDsKIAljaGFyCQl0b2NmbmFtZVtNQVhQR1BBVEhdOwogCWNoYXIJCWxpbmVbTUFY UEdQQVRIXTsKIApAQCAtNDQyLDE0ICs0NDIsMTQgQEAgX0xvYWRMT3MoQXJjaGl2ZUhhbmRsZSAq QUgpCiAKIAlzZXRGaWxlUGF0aChBSCwgdG9jZm5hbWUsICJibG9icy50b2MiKTsKIAotCWN0eC0+ TE9zVG9jRkggPSBjZm9wZW5fcmVhZCh0b2NmbmFtZSwgUEdfQklOQVJZX1IpOworCUNGSCA9IGN0 eC0+TE9zVG9jRkggPSBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUodG9jZm5hbWUsIFBH X0JJTkFSWV9SKTsKIAogCWlmIChjdHgtPkxPc1RvY0ZIID09IE5VTEwpCiAJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgb3BlbiBsYXJnZSBvYmplY3QgVE9DIGZpbGUgXCIlc1wiIGZvciBpbnB1dDogJW0i LAogCQkJCSB0b2NmbmFtZSk7CiAKIAkvKiBSZWFkIHRoZSBMT3MgVE9DIGZpbGUgbGluZS1ieS1s aW5lLCBhbmQgcHJvY2VzcyBlYWNoIExPICovCi0Jd2hpbGUgKChjZmdldHMoY3R4LT5MT3NUb2NG SCwgbGluZSwgTUFYUEdQQVRIKSkgIT0gTlVMTCkKKwl3aGlsZSAoKENGSC0+Z2V0c19mdW5jKGxp bmUsIE1BWFBHUEFUSCwgQ0ZIKSkgIT0gTlVMTCkKIAl7CiAJCWNoYXIJCWxvZm5hbWVbTUFYUEdQ QVRIICsgMV07CiAJCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKQEAgLTQ2NCwxMSArNDY0LDExIEBA IF9Mb2FkTE9zKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlfUHJpbnRGaWxlRGF0YShBSCwgcGF0aCk7 CiAJCUVuZFJlc3RvcmVMTyhBSCwgb2lkKTsKIAl9Ci0JaWYgKCFjZmVvZihjdHgtPkxPc1RvY0ZI KSkKKwlpZiAoIUNGSC0+ZW9mX2Z1bmMoQ0ZIKSkKIAkJcGdfZmF0YWwoImVycm9yIHJlYWRpbmcg bGFyZ2Ugb2JqZWN0IFRPQyBmaWxlIFwiJXNcIiIsCiAJCQkJIHRvY2ZuYW1lKTsKIAotCWlmIChj ZmNsb3NlKGN0eC0+TE9zVG9jRkgpICE9IDApCisJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZShj dHgtPkxPc1RvY0ZIKSAhPSAwKQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGxhcmdlIG9i amVjdCBUT0MgZmlsZSBcIiVzXCI6ICVtIiwKIAkJCQkgdG9jZm5hbWUpOwogCkBAIC00ODgsMTUg KzQ4OCwxNiBAQCBfV3JpdGVCeXRlKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBpbnQgaSkKIHsK IAl1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikgaTsKIAlsY2xDb250ZXh0ICpjdHgg PSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNG SCA9IGN0eC0+ZGF0YUZIOwogCiAJZXJybm8gPSAwOwotCWlmIChjZndyaXRlKCZjLCAxLCBjdHgt PmRhdGFGSCkgIT0gMSkKKwlpZiAoQ0ZILT53cml0ZV9mdW5jKCZjLCAxLCBDRkgpICE9IDEpCiAJ ewogCQkvKiBpZiB3cml0ZSBkaWRuJ3Qgc2V0IGVycm5vLCBhc3N1bWUgcHJvYmxlbSBpcyBubyBk aXNrIHNwYWNlICovCiAJCWlmIChlcnJubyA9PSAwKQogCQkJZXJybm8gPSBFTk9TUEM7CiAJCXBn X2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gb3V0cHV0IGZpbGU6ICVzIiwKLQkJCQkgZ2V0X2Nm cF9lcnJvcihjdHgtPmRhdGFGSCkpOworCQkJCSBDRkgtPmdldF9lcnJvcl9mdW5jKENGSCkpOwog CX0KIAogCXJldHVybiAxOwpAQCAtNTEyLDggKzUxMyw5IEBAIHN0YXRpYyBpbnQKIF9SZWFkQnl0 ZShBcmNoaXZlSGFuZGxlICpBSCkKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAq KSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZI OwogCi0JcmV0dXJuIGNmZ2V0YyhjdHgtPmRhdGFGSCk7CisJcmV0dXJuIENGSC0+Z2V0Y19mdW5j KENGSCk7CiB9CiAKIC8qCkBAIC01MjQsMTUgKzUyNiwxNiBAQCBzdGF0aWMgdm9pZAogX1dyaXRl QnVmKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiB7CiAJ bGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJl c3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAogCWVycm5vID0gMDsKLQlpZiAoY2Z3 cml0ZShidWYsIGxlbiwgY3R4LT5kYXRhRkgpICE9IGxlbikKKwlpZiAoQ0ZILT53cml0ZV9mdW5j KGJ1ZiwgbGVuLCBDRkgpICE9IGxlbikKIAl7CiAJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJy bm8sIGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KIAkJaWYgKGVycm5vID09IDAp CiAJCQllcnJubyA9IEVOT1NQQzsKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBvdXRw dXQgZmlsZTogJXMiLAotCQkJCSBnZXRfY2ZwX2Vycm9yKGN0eC0+ZGF0YUZIKSk7CisJCQkJIENG SC0+Z2V0X2Vycm9yX2Z1bmMoQ0ZIKSk7CiAJfQogfQogCkBAIC01NDUsMTIgKzU0OCwxMyBAQCBz dGF0aWMgdm9pZAogX1JlYWRCdWYoQXJjaGl2ZUhhbmRsZSAqQUgsIHZvaWQgKmJ1Ziwgc2l6ZV90 IGxlbikKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0 YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IGN0eC0+ZGF0YUZIOwogCiAJLyoKLQkgKiBJ ZiB0aGVyZSB3YXMgYW4gSS9PIGVycm9yLCB3ZSBhbHJlYWR5IGV4aXRlZCBpbiBjZnJlYWQoKSwg c28gaGVyZSB3ZQorCSAqIElmIHRoZXJlIHdhcyBhbiBJL08gZXJyb3IsIHdlIGFscmVhZHkgZXhp dGVkIGluIHJlYWRGKCksIHNvIGhlcmUgd2UKIAkgKiBleGl0IG9uIHNob3J0IHJlYWRzLgogCSAq LwotCWlmIChjZnJlYWQoYnVmLCBsZW4sIGN0eC0+ZGF0YUZIKSAhPSBsZW4pCisJaWYgKENGSC0+ cmVhZF9mdW5jKGJ1ZiwgbGVuLCBDRkgpICE9IGxlbikKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBy ZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKIH0KIApAQCAtNTczLDcgKzU3Nyw3 IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAlpZiAoQUgtPm1vZGUgPT0g YXJjaE1vZGVXcml0ZSkKIAl7Ci0JCWNmcAkJICAgKnRvY0ZIOworCQlDb21wcmVzc0ZpbGVIYW5k bGUgKnRvY0ZIOwogCQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMg PSB7MH07CiAJCWNoYXIJCWZuYW1lW01BWFBHUEFUSF07CiAKQEAgLTU4NCw4ICs1ODgsOCBAQCBf Q2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJCS8qIFRoZSBUT0MgaXMgYWx3YXlz IGNyZWF0ZWQgdW5jb21wcmVzc2VkICovCiAJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0g UEdfQ09NUFJFU1NJT05fTk9ORTsKLQkJdG9jRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJ TkFSWV9XLCBjb21wcmVzc2lvbl9zcGVjKTsKLQkJaWYgKHRvY0ZIID09IE5VTEwpCisJCXRvY0ZI ID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb21wcmVzc2lvbl9zcGVjKTsKKwkJaWYgKHRvY0ZI LT5vcGVuX3dyaXRlX2Z1bmMoZm5hbWUsIFBHX0JJTkFSWV9XLCB0b2NGSCkpCiAJCQlwZ19mYXRh bCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIAkJY3R4 LT5kYXRhRkggPSB0b2NGSDsKIApAQCAtNTk4LDcgKzYwMiw3IEBAIF9DbG9zZUFyY2hpdmUoQXJj aGl2ZUhhbmRsZSAqQUgpCiAJCVdyaXRlSGVhZChBSCk7CiAJCUFILT5mb3JtYXQgPSBhcmNoRGly ZWN0b3J5OwogCQlXcml0ZVRvYyhBSCk7Ci0JCWlmIChjZmNsb3NlKHRvY0ZIKSAhPSAwKQorCQlp ZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKHRvY0ZIKSAhPSAwKQogCQkJcGdfZmF0YWwoImNvdWxk IG5vdCBjbG9zZSBUT0MgZmlsZTogJW0iKTsKIAkJV3JpdGVEYXRhQ2h1bmtzKEFILCBjdHgtPnBz dGF0ZSk7CiAKQEAgLTY0OSw4ICs2NTMsOCBAQCBfU3RhcnRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgs IFRvY0VudHJ5ICp0ZSkKIAogCS8qIFRoZSBMTyBUT0MgZmlsZSBpcyBuZXZlciBjb21wcmVzc2Vk ICovCiAJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwot CWN0eC0+TE9zVG9jRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsICJhYiIsIGNvbXByZXNzaW9uX3Nw ZWMpOwotCWlmIChjdHgtPkxPc1RvY0ZIID09IE5VTEwpCisJY3R4LT5MT3NUb2NGSCA9IEluaXRD b21wcmVzc0ZpbGVIYW5kbGUoY29tcHJlc3Npb25fc3BlYyk7CisJaWYgKGN0eC0+TE9zVG9jRkgt Pm9wZW5fd3JpdGVfZnVuYyhmbmFtZSwgImFiIiwgY3R4LT5MT3NUb2NGSCkpCiAJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBA IC02NjcsOSArNjcxLDggQEAgX1N0YXJ0TE8oQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0 ZSwgT2lkIG9pZCkKIAogCXNucHJpbnRmKGZuYW1lLCBNQVhQR1BBVEgsICIlcy9ibG9iXyV1LmRh dCIsIGN0eC0+ZGlyZWN0b3J5LCBvaWQpOwogCi0JY3R4LT5kYXRhRkggPSBjZm9wZW5fd3JpdGUo Zm5hbWUsIFBHX0JJTkFSWV9XLCBBSC0+Y29tcHJlc3Npb25fc3BlYyk7Ci0KLQlpZiAoY3R4LT5k YXRhRkggPT0gTlVMTCkKKwljdHgtPmRhdGFGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoQUgt PmNvbXByZXNzaW9uX3NwZWMpOworCWlmIChjdHgtPmRhdGFGSC0+b3Blbl93cml0ZV9mdW5jKGZu YW1lLCBQR19CSU5BUllfVywgY3R4LT5kYXRhRkgpKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9w ZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIH0KIApAQCAtNjgyLDE4ICs2ODUs MTkgQEAgc3RhdGljIHZvaWQKIF9FbmRMTyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRl LCBPaWQgb2lkKQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3Jt YXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5MT3NUb2NGSDsKIAljaGFy CQlidWZbNTBdOwogCWludAkJCWxlbjsKIAotCS8qIENsb3NlIHRoZSBMTyBkYXRhIGZpbGUgaXRz ZWxmICovCi0JaWYgKGNmY2xvc2UoY3R4LT5kYXRhRkgpICE9IDApCi0JCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgY2xvc2UgTE8gZGF0YSBmaWxlOiAlbSIpOworCS8qIENsb3NlIHRoZSBCTE9CIGRhdGEg ZmlsZSBpdHNlbGYgKi8KKwlpZiAoRW5kQ29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+ZGF0YUZIKSAh PSAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGJsb2IgZGF0YSBmaWxlOiAlbSIpOwog CWN0eC0+ZGF0YUZIID0gTlVMTDsKIAogCS8qIHJlZ2lzdGVyIHRoZSBMTyBpbiBibG9icy50b2Mg Ki8KIAlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXUgYmxvYl8ldS5kYXRcbiIs IG9pZCwgb2lkKTsKLQlpZiAoY2Z3cml0ZShidWYsIGxlbiwgY3R4LT5MT3NUb2NGSCkgIT0gbGVu KQotCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIExPcyBUT0MgZmlsZSIpOworCWlmIChD RkgtPndyaXRlX2Z1bmMoYnVmLCBsZW4sIENGSCkgIT0gbGVuKQorCQlwZ19mYXRhbCgiY291bGQg bm90IHdyaXRlIHRvIGJsb2JzIFRPQyBmaWxlIik7CiB9CiAKIC8qCkBAIC03MDYsOCArNzEwLDgg QEAgX0VuZExPcyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogewogCWxjbENvbnRl eHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCi0JaWYgKGNmY2xvc2Uo Y3R4LT5MT3NUb2NGSCkgIT0gMCkKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBMT3MgVE9D IGZpbGU6ICVtIik7CisJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZShjdHgtPkxPc1RvY0ZIKSAh PSAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGJsb2JzIFRPQyBmaWxlOiAlbSIpOwog CWN0eC0+TE9zVG9jRkggPSBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv dC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4 IGQ5MjI0N2M5MTUuLjc4NDU0OTI4Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAw Ml9wZ19kdW1wLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC05 NCw3ICs5NCw3IEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWNvbW1hbmQgPT4gWwogCQkJCSdw Z19yZXN0b3JlJywgJy1sJywgIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfY3VzdG9tLmR1bXAi LAogCQkJXSwKLQkJCWV4cGVjdGVkID0+IHFyL0NvbXByZXNzaW9uOiAxLywKKwkJCWV4cGVjdGVk ID0+IHFyL0NvbXByZXNzaW9uOiBnemlwLywKIAkJCW5hbWUgICAgID0+ICdkYXRhIGNvbnRlbnQg aXMgZ3ppcC1jb21wcmVzc2VkJwogCQl9LAogCX0sCkBAIC0yMzksOCArMjM5LDggQEAgbXkgJXBn ZHVtcF9ydW5zID0gKAogCQkJY29tbWFuZCA9PgogCQkJICBbICdwZ19yZXN0b3JlJywgJy1sJywg IiR0ZW1wZGlyL2RlZmF1bHRzX2N1c3RvbV9mb3JtYXQuZHVtcCIsIF0sCiAJCQlleHBlY3RlZCA9 PiAkc3VwcG9ydHNfZ3ppcCA/Ci0JCQlxci9Db21wcmVzc2lvbjogLTEvIDoKLQkJCXFyL0NvbXBy ZXNzaW9uOiAwLywKKwkJCXFyL0NvbXByZXNzaW9uOiBnemlwLyA6CisJCQlxci9Db21wcmVzc2lv bjogbm9uZS8sCiAJCQluYW1lID0+ICdkYXRhIGNvbnRlbnQgaXMgZ3ppcC1jb21wcmVzc2VkIGJ5 IGRlZmF1bHQgaWYgYXZhaWxhYmxlJywKIAkJfSwKIAl9LApAQCAtMjY0LDggKzI2NCw4IEBAIG15 ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWNvbW1hbmQgPT4KIAkJCSAgWyAncGdfcmVzdG9yZScsICct bCcsICIkdGVtcGRpci9kZWZhdWx0c19kaXJfZm9ybWF0IiwgXSwKIAkJCWV4cGVjdGVkID0+ICRz dXBwb3J0c19nemlwID8KLQkJCXFyL0NvbXByZXNzaW9uOiAtMS8gOgotCQkJcXIvQ29tcHJlc3Np b246IDAvLAorCQkJcXIvQ29tcHJlc3Npb246IGd6aXAvIDoKKwkJCXFyL0NvbXByZXNzaW9uOiBu b25lLywKIAkJCW5hbWUgPT4gJ2RhdGEgY29udGVudCBpcyBnemlwLWNvbXByZXNzZWQgYnkgZGVm YXVsdCcsCiAJCX0sCiAJCWdsb2JfcGF0dGVybnMgPT4gWwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY29tbW9uL2NvbXByZXNzaW9uLmggYi9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24u aAppbmRleCA5YTQ3MWU0MGFhLi5kNDRlYmIwNmNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j b21tb24vY29tcHJlc3Npb24uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tb24vY29tcHJlc3Npb24u aApAQCAtMTQsNiArMTQsMTAgQEAKICNpZm5kZWYgUEdfQ09NUFJFU1NJT05fSAogI2RlZmluZSBQ R19DT01QUkVTU0lPTl9ICiAKKy8qCisgKiBUaGVzZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBkaXNj LCBmb3IgZXhhbXBsZSBpbiBmaWxlcyBnZW5lcmF0ZWQgYnkgcGdfZHVtcC4KKyAqIENyZWF0ZSB0 aGUgbmVjZXNzYXJ5IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGxheWVycyBpZiB0aGVpciBvcmRl ciBjaGFuZ2VzLgorICovCiB0eXBlZGVmIGVudW0gcGdfY29tcHJlc3NfYWxnb3JpdGhtCiB7CiAJ UEdfQ09NUFJFU1NJT05fTk9ORSwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3Bs dXNwbHVzY2hlY2sgYi9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCmluZGV4IGU1 MmZlOWY1MDkuLmRiNDI5NDc0YTIgMTAwNzU1Ci0tLSBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3Bs dXNwbHVzY2hlY2sKKysrIGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjawpAQCAt MTUwLDcgKzE1MCw5IEBAIGRvCiAKIAkjIHBnX2R1bXAgaXMgbm90IEMrKy1jbGVhbiBiZWNhdXNl IGl0IHVzZXMgInB1YmxpYyIgYW5kICJuYW1lc3BhY2UiCiAJIyBhcyBmaWVsZCBuYW1lcywgd2hp Y2ggaXMgdW5mb3J0dW5hdGUgYnV0IHdlIHdvbid0IGNoYW5nZSBpdCBub3cuCisJdGVzdCAiJGYi ID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaCAmJiBjb250aW51ZQogCXRlc3QgIiRm IiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oICYmIGNvbnRpbnVlCisJdGVzdCAiJGYi ID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaCAmJiBjb250aW51ZQogCXRlc3QgIiRm IiA9IHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0g c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oICYmIGNvbnRpbnVlCiAJdGVzdCAi JGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAmJiBjb250aW51ZQpkaWZmIC0tZ2l0IGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAppbmRleCA1MTQ4NGNhN2UyLi43ZTYyYzZlZjNkIDEwMDY0NAotLS0gYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdApAQCAtNDI4LDYgKzQyOCw3IEBAIENvbXBpbGVkRXhwclN0YXRlCiBDb21wb3Np dGVJT0RhdGEKIENvbXBvc2l0ZVR5cGVTdG10CiBDb21wb3VuZEFmZml4RmxhZworQ29tcHJlc3NG aWxlSGFuZGxlCiBDb21wcmVzc2lvbkxvY2F0aW9uCiBDb21wcmVzc29yU3RhdGUKIENvbXB1dGVY aWRIb3Jpem9uc1Jlc3VsdApAQCAtMTAzNCw2ICsxMDM1LDcgQEAgR3VjU3RhY2sKIEd1Y1N0YWNr U3RhdGUKIEd1Y1N0cmluZ0Fzc2lnbkhvb2sKIEd1Y1N0cmluZ0NoZWNrSG9vaworR3ppcENvbXBy ZXNzb3JTdGF0ZQogSEFORExFCiBIQVNIQUNUSU9OCiBIQVNIQlVDS0VUCi0tIAoyLjM0LjEKCg== --b1_5qditUewD7dQGtjj6KugnW5ZocxiJwQdw5EMVJVpXc Content-Type: text/x-patch; name=v25-0003-Add-LZ4-compression-to-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v25-0003-Add-LZ4-compression-to-pg_dump.patch RnJvbSBhMjQwNDQwYTllYzczZDBlMTU2YWE2OGMxZWMzYjdlYjQ3NmE0Zjk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFdlZCwgMjUgSmFuIDIwMjMgMTQ6NDY6MDcgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy NSAzLzNdIEFkZCBMWjQgY29tcHJlc3Npb24gdG8gcGdfZHVtcAoKVGhpcyBpcyBtb3N0bHkgZG9u ZSB3aXRoaW4gcGdfZHVtcCdzIGNvbXByZXNzaW9uIHN0cmVhbWluZyBhbmQgZmlsZSBBUElzLgpJ dCBpcyBjb25maW5lZCB3aXRoaW4gdGhlIG5ld2x5IGludHJvZHVjZWQgY29tcHJlc3NfbHo0Lntj LGh9IGZpbGVzLgoKVGhlIGZpcnN0IG9uZSwgaXMgYWltZWQgYXQgaW5saW5lZCB1c2UgY2FzZXMg YW5kIHRodXMgc2ltcGxlCmx6NC5oIGNhbGxzIGNhbiBiZSB1c2VkIGRpcmVjdGx5LiBUaGUgc2Vj b25kIG9uZSBpcyBnZW5lcmF0aW5nIG91dHB1dCwgb3IgaXMKcGFyc2luZyBpbnB1dCwgd2hpY2gg Y2FuIGJlIHJlYWQvZ2VuZXJhdGVkIHZpYSB0aGUgbHo0IHV0aWxpdHkuCgpXaGVyZXZlciB0aGUg TFo0RiBhcGkgZG9lcyBub3QgaW1wbGVtZW50IGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBjb3JyZXNw b25kaW5nCnRvIGZyZWFkKCksIGZ3cml0ZSgpLCBmZ2V0cygpLCBmZ2V0YygpLCBmZW9mKCksIGFu ZCBmY2xvc2UoKS4gV2hlcmUgdGhlCmZ1bmN0aW9uYWxpdHkgd2FzIG1pc3NpbmcgZnJvbSB0aGUg b2ZmaWNpYWwgQVBJLCBpdCBoYXMgYmVlbiBpbXBsZW1lbnRlZApsb2NhbHkuCi0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwgICAgICAgICB8ICAxMyArLQogc3JjL2Jpbi9wZ19kdW1w L01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf aW8uYyAgICAgICAgIHwgIDIwICstCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmMgICAg ICAgIHwgNjI2ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfbHo0LmggICAgICAgIHwgIDI0ICsKIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAg ICAgICAgICAgfCAgIDggKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyAg fCAgMTcgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMgfCAgIDkgKy0K IHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iaW4v cGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICAgfCAgODIgKysrLQogc3JjL3Rvb2xzL3BnaW5j bHVkZS9jcGx1c3BsdXNjaGVjayAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgIHwgICAxICsKIDEyIGZpbGVzIGNoYW5nZWQsIDc4NiBpbnNlcnRpb25zKCsp LCAyMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29t 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 eCBmNDdiYTVlNjE1Li41NWRiNjNhYzdhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtNTYsNyAr NTYsNyBAQAogICoJSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlIHRyaWVzIHRvIGRlZmZl ciB0aGUgY29tcHJlc3Npb24gYnkgdGhlCiAgKglmaWxlbmFtZSBzdWZmaXguIElmIHRoZSBzdWZm aXggaXMgbm90IHlldCBrbm93biwgdGhlbiBpdCB0cmllcyB0byBzaW1wbHkKICAqCW9wZW4gdGhl IGZpbGUsIGFuZCBpZiBpdCBmYWlscywgaXQgdHJpZXMgdG8gb3BlbiB0aGUgc2FtZSBmaWxlIHdp dGggdGhlIC5negotICoJc3VmZml4LgorICoJc3VmZml4LCBhbmQgdGhlbiBhZ2FpbiB3aXRoIHRo ZSAubHo0IHN1ZmZpeC4KICAqCiAgKiBJREVOVElGSUNBVElPTgogICoJICAgc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2lvLmMKQEAgLTcwLDYgKzcwLDcgQEAKIAogI2luY2x1ZGUgImNvbXByZXNz X2d6aXAuaCIKICNpbmNsdWRlICJjb21wcmVzc19pby5oIgorI2luY2x1ZGUgImNvbXByZXNzX2x6 NC5oIgogI2luY2x1ZGUgImNvbXByZXNzX25vbmUuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRp bHMuaCIKIApAQCAtOTUsNiArOTYsOCBAQCBBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAogCQlJbml0Q29tcHJlc3Nvck5v bmUoY3MsIGNvbXByZXNzaW9uX3NwZWMpOwogCWVsc2UgaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCiAJCUluaXRDb21wcmVzc29yR3ppcChjcywg Y29tcHJlc3Npb25fc3BlYyk7CisJZWxzZSBpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fTFo0KQorCQlJbml0Q29tcHJlc3NvckxaNChjcywgY29tcHJlc3Np b25fc3BlYyk7CiAKIAlyZXR1cm4gY3M7CiB9CkBAIC0xNTksNiArMTYyLDggQEAgSW5pdENvbXBy ZXNzRmlsZUhhbmRsZShjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpCiAJCUluaXRDb21wcmVzc0ZpbGVIYW5kbGVOb25lKENGSCwgY29tcHJlc3Npb25fc3Bl Yyk7CiAJZWxzZSBpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJ T05fR1pJUCkKIAkJSW5pdENvbXByZXNzRmlsZUhhbmRsZUd6aXAoQ0ZILCBjb21wcmVzc2lvbl9z cGVjKTsKKwllbHNlIGlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVT U0lPTl9MWjQpCisJCUluaXRDb21wcmVzc0ZpbGVIYW5kbGVMWjQoQ0ZILCBjb21wcmVzc2lvbl9z cGVjKTsKIAogCXJldHVybiBDRkg7CiB9CkBAIC0xNzIsNyArMTc3LDcgQEAgSW5pdENvbXByZXNz RmlsZUhhbmRsZShjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3Nw ZWMpCiAgKiB0aHJvdWdob3V0LiBPdGhlcndpc2UgdGhlIGNvbXByZXNzaW9uIHdpbGwgYmUgZGVm ZXJyZWQgYnkgaXRlcmF0aXZlbHkgdHJ5aW5nCiAgKiB0byBvcGVuIHRoZSBmaWxlIGF0ICdwYXRo JywgZmlyc3QgYXMgaXMsIHRoZW4gYnkgYXBwZW5kaW5nIGtub3duIGNvbXByZXNzaW9uCiAgKiBz dWZmaXhlcy4gU28gaWYgeW91IHBhc3MgImZvbyIgYXMgJ3BhdGgnLCB0aGlzIHdpbGwgb3BlbiBl aXRoZXIgImZvbyIgb3IKLSAqICJmb28uZ3oiLCB0cnlpbmcgaW4gdGhhdCBvcmRlci4KKyAqICJm b28uZ3oiIG9yICJmb28ubHo0IiwgdHJ5aW5nIGluIHRoYXQgb3JkZXIuCiAgKgogICogT24gZmFp bHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgogICovCkBAIC0y MTAsNiArMjE1LDE3IEBAIEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFy ICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogCQkJaWYgKGV4aXN0cykKIAkJCQljb21wcmVzc2lv bl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAJCX0KKyNlbmRpZgorI2lm ZGVmIFVTRV9MWjQKKwkJaWYgKCFleGlzdHMpCisJCXsKKwkJCWZyZWVfa2VlcF9lcnJubyhmbmFt ZSk7CisJCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5sejQiLCBwYXRoKTsKKwkJCWV4aXN0cyA9IChz dGF0KGZuYW1lLCAmc3QpID09IDApOworCisJCQlpZiAoZXhpc3RzKQorCQkJCWNvbXByZXNzaW9u X3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTFo0OworCQl9CiAjZW5kaWYKIAl9CiAK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuYyBiL3NyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19sejQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5lZTc0Y2M4ZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2x6NC5jCkBAIC0wLDAgKzEsNjI2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21w cmVzc19sejQuYworICoJIFJvdXRpbmVzIGZvciBhcmNoaXZlcnMgdG8gd3JpdGUgYSBMWjQgY29t cHJlc3NlZCBkYXRhIHN0cmVhbS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19s ejQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXNfZmUu aCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKKworI2luY2x1ZGUgImNvbXByZXNzX2x6 NC5oIgorCisjaWZkZWYgVVNFX0xaNAorI2luY2x1ZGUgPGx6NC5oPgorI2luY2x1ZGUgPGx6NGZy YW1lLmg+CisKKyNkZWZpbmUgTFo0X09VVF9TSVpFCSg0ICogMTAyNCkKKyNkZWZpbmUgTFo0X0lO X1NJWkUJCSgxNiAqIDEwMjQpCisKKy8qCisgKiBMWjRGX0hFQURFUl9TSVpFX01BWCBmaXJzdCBh cHBlYXJlZCBpbiB2MS43LjUgb2YgdGhlIGxpYnJhcnkuCisgKiBSZWRlZmluZSBpdCBmb3IgaW5z dGFsbGF0aW9ucyB3aXRoIGEgbGVzc2VyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgTFo0Rl9IRUFE RVJfU0laRV9NQVgKKyNkZWZpbmUgTFo0Rl9IRUFERVJfU0laRV9NQVgJMzIKKyNlbmRpZgorCisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNzb3IgQVBJCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworCit0eXBlZGVmIHN0cnVjdCBMWjRDb21wcmVzc29yU3RhdGUKK3sK KwljaGFyCSAgICpvdXRidWY7CisJc2l6ZV90CQlvdXRzaXplOworfSBMWjRDb21wcmVzc29yU3Rh dGU7CisKKy8qIFByaXZhdGUgcm91dGluZXMgdGhhdCBzdXBwb3J0IExaNCBjb21wcmVzc2VkIGRh dGEgSS9PICovCitzdGF0aWMgdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlTFo0KEFyY2hpdmVIYW5k bGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKK3N0YXRpYyB2b2lkIFdyaXRlRGF0YVRvQXJj aGl2ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJCQkJ ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbik7CitzdGF0aWMgdm9pZCBFbmRDb21wcmVz c29yTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKKworc3RhdGlj IHZvaWQKK1JlYWREYXRhRnJvbUFyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNz b3JTdGF0ZSAqY3MpCit7CisJTFo0X3N0cmVhbURlY29kZV90IGx6NFN0cmVhbURlY29kZTsKKwlj aGFyCSAgICpidWY7CisJY2hhcgkgICAqZGVjYnVmOworCXNpemVfdAkJYnVmbGVuOworCXNpemVf dAkJY250OworCisJYnVmbGVuID0gTFo0X0lOX1NJWkU7CisJYnVmID0gcGdfbWFsbG9jKGJ1Zmxl bik7CisJZGVjYnVmID0gcGdfbWFsbG9jKGJ1Zmxlbik7CisKKwlMWjRfc2V0U3RyZWFtRGVjb2Rl KCZsejRTdHJlYW1EZWNvZGUsIE5VTEwsIDApOworCisJd2hpbGUgKChjbnQgPSBjcy0+cmVhZEYo QUgsICZidWYsICZidWZsZW4pKSkKKwl7CisJCWludAkJCWRlY0J5dGVzID0gTFo0X2RlY29tcHJl c3Nfc2FmZV9jb250aW51ZSgmbHo0U3RyZWFtRGVjb2RlLAorCQkJCQkJCQkJCQkJCQkJYnVmLCBk ZWNidWYsCisJCQkJCQkJCQkJCQkJCQljbnQsIGJ1Zmxlbik7CisKKwkJYWh3cml0ZShkZWNidWYs IDEsIGRlY0J5dGVzLCBBSCk7CisJfQorCisJcGdfZnJlZShidWYpOworCXBnX2ZyZWUoZGVjYnVm KTsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlRGF0YVRvQXJjaGl2ZUxaNChBcmNoaXZlSGFuZGxl ICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXpl X3QgZExlbikKK3sKKwlMWjRDb21wcmVzc29yU3RhdGUgKkxaNGNzID0gKExaNENvbXByZXNzb3JT dGF0ZSAqKSBjcy0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJY29tcHJlc3NlZDsKKwlzaXplX3QJ CXJlcXVpcmVkc2l6ZSA9IExaNF9jb21wcmVzc0JvdW5kKGRMZW4pOworCisJaWYgKHJlcXVpcmVk c2l6ZSA+IExaNGNzLT5vdXRzaXplKQorCXsKKwkJTFo0Y3MtPm91dGJ1ZiA9IHBnX3JlYWxsb2Mo TFo0Y3MtPm91dGJ1ZiwgcmVxdWlyZWRzaXplKTsKKwkJTFo0Y3MtPm91dHNpemUgPSByZXF1aXJl ZHNpemU7CisJfQorCisJY29tcHJlc3NlZCA9IExaNF9jb21wcmVzc19kZWZhdWx0KGRhdGEsIExa NGNzLT5vdXRidWYsCisJCQkJCQkJCQkgIGRMZW4sIExaNGNzLT5vdXRzaXplKTsKKworCWlmIChj b21wcmVzc2VkIDw9IDApCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gTFo0IGNvbXByZXNzIGRhdGEi KTsKKworCWNzLT53cml0ZUYoQUgsIExaNGNzLT5vdXRidWYsIGNvbXByZXNzZWQpOworfQorCitz dGF0aWMgdm9pZAorRW5kQ29tcHJlc3NvckxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3Nv clN0YXRlICpjcykKK3sKKwlMWjRDb21wcmVzc29yU3RhdGUgKkxaNGNzOworCisJTFo0Y3MgPSAo TFo0Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7CisJaWYgKExaNGNzKQorCXsK KwkJcGdfZnJlZShMWjRjcy0+b3V0YnVmKTsKKwkJcGdfZnJlZShMWjRjcyk7CisJCWNzLT5wcml2 YXRlX2RhdGEgPSBOVUxMOworCX0KK30KKworCisvKgorICogUHVibGljIHJvdXRpbmVzIHRoYXQg c3VwcG9ydCBMWjQgY29tcHJlc3NlZCBkYXRhIEkvTworICovCit2b2lkCitJbml0Q29tcHJlc3Nv ckxaNChDb21wcmVzc29yU3RhdGUgKmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9u IGNvbXByZXNzaW9uX3NwZWMpCit7CisJY3MtPnJlYWREYXRhID0gUmVhZERhdGFGcm9tQXJjaGl2 ZUxaNDsKKwljcy0+d3JpdGVEYXRhID0gV3JpdGVEYXRhVG9BcmNoaXZlTFo0OworCWNzLT5lbmQg PSBFbmRDb21wcmVzc29yTFo0OworCisJY3MtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lv bl9zcGVjOworCisJLyogV2lsbCBiZSBsYXp5IGluaXQnZCAqLworCWNzLT5wcml2YXRlX2RhdGEg PSBwZ19tYWxsb2MwKHNpemVvZihMWjRDb21wcmVzc29yU3RhdGUpKTsKK30KKworLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzcyBGaWxlIEFQSQorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKworLyoKKyAqIFN0YXRlIG5lZWRlZCBmb3IgTFo0IChkZSljb21wcmVzc2lv biB1c2luZyB0aGUgQ29tcHJlc3NGaWxlSGFuZGxlIEFQSS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg TFo0RmlsZQoreworCUZJTEUJICAgKmZwOworCisJTFo0Rl9wcmVmZXJlbmNlc190IHByZWZzOwor CisJTFo0Rl9jb21wcmVzc2lvbkNvbnRleHRfdCBjdHg7CisJTFo0Rl9kZWNvbXByZXNzaW9uQ29u dGV4dF90IGR0eDsKKworCWJvb2wJCWluaXRlZDsKKwlib29sCQljb21wcmVzc2luZzsKKworCXNp emVfdAkJYnVmbGVuOworCWNoYXIJICAgKmJ1ZmZlcjsKKworCXNpemVfdAkJb3ZlcmZsb3dhbGxv Y2xlbjsKKwlzaXplX3QJCW92ZXJmbG93bGVuOworCWNoYXIJICAgKm92ZXJmbG93YnVmOworCisJ c2l6ZV90CQllcnJjb2RlOworfQlMWjRGaWxlOworCisvKgorICogTFo0IGVxdWl2YWxlbnQgdG8g ZmVvZigpIG9yIGd6ZW9mKCkuIFRoZSBlbmQgb2YgZmlsZQorICogaXMgcmVhY2hlZCBpZiB0aGVy ZSBpcyBubyBkZWNvbXByZXNzZWQgb3V0cHV0IGluIHRoZQorICogb3ZlcmZsb3cgYnVmZmVyIGFu ZCB0aGUgZW5kIG9mIHRoZSBmaWxlIGlzIHJlYWNoZWQuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZp bGVfZW9mKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExa NEZpbGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gZnMtPm92ZXJmbG93bGVuID09 IDAgJiYgZmVvZihmcy0+ZnApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitMWjRGaWxlX2dl dF9lcnJvcihDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChM WjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWNvbnN0IGNoYXIgKmVycm1zZzsKKworCWlm IChMWjRGX2lzRXJyb3IoZnMtPmVycmNvZGUpKQorCQllcnJtc2cgPSBMWjRGX2dldEVycm9yTmFt ZShmcy0+ZXJyY29kZSk7CisJZWxzZQorCQllcnJtc2cgPSBzdHJlcnJvcihlcnJubyk7CisKKwly ZXR1cm4gZXJybXNnOworfQorCisvKgorICogUHJlcGFyZSBhbiBhbHJlYWR5IGFsbG9jJ2VkIExa NEZpbGUgc3RydWN0IGZvciBzdWJzZXF1ZW50IGNhbGxzLgorICoKKyAqIEl0IGNyZWF0ZXMgdGhl IG5lY2Vzc2FyeSBjb250ZXh0cyBmb3IgdGhlIG9wZXJhdGlvbnMuIFdoZW4gY29tcHJlc3Npbmcs CisgKiBpdCBhZGRpdGlvbmFsbHkgd3JpdGVzIHRoZSBMWjQgaGVhZGVyIGluIHRoZSBvdXRwdXQg c3RyZWFtLgorICovCitzdGF0aWMgaW50CitMWjRGaWxlX2luaXQoTFo0RmlsZSAqIGZzLCBpbnQg c2l6ZSwgYm9vbCBjb21wcmVzc2luZykKK3sKKwlzaXplX3QJCXN0YXR1czsKKworCWlmIChmcy0+ aW5pdGVkKQorCQlyZXR1cm4gMDsKKworCWZzLT5jb21wcmVzc2luZyA9IGNvbXByZXNzaW5nOwor CWZzLT5pbml0ZWQgPSB0cnVlOworCisJaWYgKGZzLT5jb21wcmVzc2luZykKKwl7CisJCWZzLT5i dWZsZW4gPSBMWjRGX2NvbXByZXNzQm91bmQoTFo0X0lOX1NJWkUsICZmcy0+cHJlZnMpOworCQlp ZiAoZnMtPmJ1ZmxlbiA8IExaNEZfSEVBREVSX1NJWkVfTUFYKQorCQkJZnMtPmJ1ZmxlbiA9IExa NEZfSEVBREVSX1NJWkVfTUFYOworCisJCXN0YXR1cyA9IExaNEZfY3JlYXRlQ29tcHJlc3Npb25D b250ZXh0KCZmcy0+Y3R4LCBMWjRGX1ZFUlNJT04pOworCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1 cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJcmV0dXJuIDE7CisJCX0KKwor CQlmcy0+YnVmZmVyID0gcGdfbWFsbG9jKGZzLT5idWZsZW4pOworCQlzdGF0dXMgPSBMWjRGX2Nv bXByZXNzQmVnaW4oZnMtPmN0eCwgZnMtPmJ1ZmZlciwgZnMtPmJ1ZmxlbiwKKwkJCQkJCQkJCSZm cy0+cHJlZnMpOworCisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVy cmNvZGUgPSBzdGF0dXM7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWlmIChmd3JpdGUoZnMtPmJ1 ZmZlciwgMSwgc3RhdHVzLCBmcy0+ZnApICE9IHN0YXR1cykKKwkJeworCQkJZXJybm8gPSAoZXJy bm8pID8gZXJybm8gOiBFTk9TUEM7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwllbHNlCisJewor CQlzdGF0dXMgPSBMWjRGX2NyZWF0ZURlY29tcHJlc3Npb25Db250ZXh0KCZmcy0+ZHR4LCBMWjRG X1ZFUlNJT04pOworCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJj b2RlID0gc3RhdHVzOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlmcy0+YnVmbGVuID0gc2l6ZSA+ IExaNF9PVVRfU0laRSA/IHNpemUgOiBMWjRfT1VUX1NJWkU7CisJCWZzLT5idWZmZXIgPSBwZ19t YWxsb2MoZnMtPmJ1Zmxlbik7CisKKwkJZnMtPm92ZXJmbG93YWxsb2NsZW4gPSBmcy0+YnVmbGVu OworCQlmcy0+b3ZlcmZsb3didWYgPSBwZ19tYWxsb2MoZnMtPm92ZXJmbG93YWxsb2NsZW4pOwor CQlmcy0+b3ZlcmZsb3dsZW4gPSAwOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogUmVh ZCBhbHJlYWR5IGRlY29tcHJlc3NlZCBjb250ZW50IGZyb20gdGhlIG92ZXJmbG93IGJ1ZmZlciBp bnRvICdwdHInIHVwIHRvCisgKiAnc2l6ZScgYnl0ZXMsIGlmIGF2YWlsYWJsZS4gSWYgdGhlIGVv bF9mbGFnIGlzIHNldCwgdGhlbiBzdG9wIGF0IHRoZSBmaXJzdAorICogb2NjdXJyZW5jZSBvZiB0 aGUgbmV3IGxpbmUgY2hhciBwcmlvciB0byAnc2l6ZScgYnl0ZXMuCisgKgorICogQW55IHVucmVh ZCBjb250ZW50IGluIHRoZSBvdmVyZmxvdyBidWZmZXIsIGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5p bmcuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfcmVhZF9vdmVyZmxvdyhMWjRGaWxlICogZnMs IHZvaWQgKnB0ciwgaW50IHNpemUsIGJvb2wgZW9sX2ZsYWcpCit7CisJY2hhcgkgICAqcDsKKwlp bnQJCQlyZWFkbGVuID0gMDsKKworCWlmIChmcy0+b3ZlcmZsb3dsZW4gPT0gMCkKKwkJcmV0dXJu IDA7CisKKwlpZiAoZnMtPm92ZXJmbG93bGVuID49IHNpemUpCisJCXJlYWRsZW4gPSBzaXplOwor CWVsc2UKKwkJcmVhZGxlbiA9IGZzLT5vdmVyZmxvd2xlbjsKKworCWlmIChlb2xfZmxhZyAmJiAo cCA9IG1lbWNocihmcy0+b3ZlcmZsb3didWYsICdcbicsIHJlYWRsZW4pKSkKKwkJLyogSW5jbHVk ZSB0aGUgbGluZSB0ZXJtaW5hdGluZyBjaGFyICovCisJCXJlYWRsZW4gPSBwIC0gZnMtPm92ZXJm bG93YnVmICsgMTsKKworCW1lbWNweShwdHIsIGZzLT5vdmVyZmxvd2J1ZiwgcmVhZGxlbik7CisJ ZnMtPm92ZXJmbG93bGVuIC09IHJlYWRsZW47CisKKwlpZiAoZnMtPm92ZXJmbG93bGVuID4gMCkK KwkJbWVtbW92ZShmcy0+b3ZlcmZsb3didWYsIGZzLT5vdmVyZmxvd2J1ZiArIHJlYWRsZW4sIGZz LT5vdmVyZmxvd2xlbik7CisKKwlyZXR1cm4gcmVhZGxlbjsKK30KKworLyoKKyAqIFRoZSB3b3Jr aG9yc2UgZm9yIHJlYWRpbmcgZGVjb21wcmVzc2VkIGNvbnRlbnQgb3V0IG9mIGFuIExaNCBjb21w cmVzc2VkCisgKiBzdHJlYW0uCisgKgorICogSXQgd2lsbCByZWFkIHVwIHRvICdwdHJzaXplJyBk ZWNvbXByZXNzZWQgY29udGVudCwgb3IgdXAgdG8gdGhlIG5ldyBsaW5lIGNoYXIKKyAqIGlmIGZv dW5kIGZpcnN0IHdoZW4gdGhlIGVvbF9mbGFnIGlzIHNldC4gSXQgaXMgcG9zc2libGUgdGhhdCB0 aGUgZGVjb21wcmVzc2VkCisgKiBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHJlYWRpbmcgYW55IGNvbXBy ZXNzZWQgaW5wdXQgdmlhIHRoZSBMWjRGIEFQSSwgZXhjZWVkcworICogJ3B0cnNpemUnLiBBbnkg ZXhjZWVkaW5nIGRlY29tcHJlc3NlZCBjb250ZW50IGlzIHN0b3JlZCBhdCBhbiBvdmVyZmxvdwor ICogYnVmZmVyIHdpdGhpbiBMWjRGaWxlLiBPZiBjb3Vyc2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlz IGNhbGxlZCwgaXQgd2lsbCBmaXJzdAorICogdHJ5IHRvIGNvbnN1bWUgYW55IGRlY29tcHJlc3Nl ZCBjb250ZW50IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgb3ZlcmZsb3cKKyAqIGJ1ZmZlciwgYmVm b3JlIGRlY29tcHJlc3NpbmcgbmV3IGNvbnRlbnQuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVf cmVhZF9pbnRlcm5hbChMWjRGaWxlICogZnMsIHZvaWQgKnB0ciwgaW50IHB0cnNpemUsIGJvb2wg ZW9sX2ZsYWcpCit7CisJc2l6ZV90CQlkc2l6ZSA9IDA7CisJc2l6ZV90CQlyc2l6ZTsKKwlzaXpl X3QJCXNpemUgPSBwdHJzaXplOworCWJvb2wJCWVvbF9mb3VuZCA9IGZhbHNlOworCisJdm9pZAkg ICAqcmVhZGJ1ZjsKKworCS8qIExhenkgaW5pdCAqLworCWlmIChMWjRGaWxlX2luaXQoZnMsIHNp emUsIGZhbHNlIC8qIGRlY29tcHJlc3NpbmcgKi8gKSkKKwkJcmV0dXJuIC0xOworCisJLyogVmVy aWZ5IHRoYXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGluIHRoZSBvdXRidWYgKi8KKwlpZiAoc2l6 ZSA+IGZzLT5idWZsZW4pCisJeworCQlmcy0+YnVmbGVuID0gc2l6ZTsKKwkJZnMtPmJ1ZmZlciA9 IHBnX3JlYWxsb2MoZnMtPmJ1ZmZlciwgc2l6ZSk7CisJfQorCisJLyogdXNlIGFscmVhZHkgZGVj b21wcmVzc2VkIGNvbnRlbnQgaWYgYXZhaWxhYmxlICovCisJZHNpemUgPSBMWjRGaWxlX3JlYWRf b3ZlcmZsb3coZnMsIHB0ciwgc2l6ZSwgZW9sX2ZsYWcpOworCWlmIChkc2l6ZSA9PSBzaXplIHx8 IChlb2xfZmxhZyAmJiBtZW1jaHIocHRyLCAnXG4nLCBkc2l6ZSkpKQorCQlyZXR1cm4gZHNpemU7 CisKKwlyZWFkYnVmID0gcGdfbWFsbG9jKHNpemUpOworCisJZG8KKwl7CisJCWNoYXIJICAgKnJw OworCQljaGFyCSAgICpyZW5kOworCisJCXJzaXplID0gZnJlYWQocmVhZGJ1ZiwgMSwgc2l6ZSwg ZnMtPmZwKTsKKwkJaWYgKHJzaXplIDwgc2l6ZSAmJiAhZmVvZihmcy0+ZnApKQorCQkJcmV0dXJu IC0xOworCisJCXJwID0gKGNoYXIgKikgcmVhZGJ1ZjsKKwkJcmVuZCA9IChjaGFyICopIHJlYWRi dWYgKyByc2l6ZTsKKworCQl3aGlsZSAocnAgPCByZW5kKQorCQl7CisJCQlzaXplX3QJCXN0YXR1 czsKKwkJCXNpemVfdAkJb3V0bGVuID0gZnMtPmJ1ZmxlbjsKKwkJCXNpemVfdAkJcmVhZF9yZW1h aW4gPSByZW5kIC0gcnA7CisKKwkJCW1lbXNldChmcy0+YnVmZmVyLCAwLCBvdXRsZW4pOworCQkJ c3RhdHVzID0gTFo0Rl9kZWNvbXByZXNzKGZzLT5kdHgsIGZzLT5idWZmZXIsICZvdXRsZW4sCisJ CQkJCQkJCQkgcnAsICZyZWFkX3JlbWFpbiwgTlVMTCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0 YXR1cykpCisJCQl7CisJCQkJZnMtPmVycmNvZGUgPSBzdGF0dXM7CisJCQkJcmV0dXJuIC0xOwor CQkJfQorCisJCQlycCArPSByZWFkX3JlbWFpbjsKKworCQkJLyoKKwkJCSAqIGZpbGwgaW4gd2hh dCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gcHRyIGlmIHRoZSBlb2wgZmxhZyBpcyBzZXQsCisJCQkg KiBlaXRoZXIgc2tpcCBpZiBvbmUgYWxyZWFkeSBmb3VuZCBvciBmaWxsIHVwIHRvIEVPTCBpZiBw cmVzZW50CisJCQkgKiBpbiB0aGUgb3V0YnVmCisJCQkgKi8KKwkJCWlmIChvdXRsZW4gPiAwICYm IGRzaXplIDwgc2l6ZSAmJiBlb2xfZm91bmQgPT0gZmFsc2UpCisJCQl7CisJCQkJY2hhcgkgICAq cDsKKwkJCQlzaXplX3QJCWxpYiA9ICghZW9sX2ZsYWcpID8gc2l6ZSAtIGRzaXplIDogc2l6ZSAt IDEgLSBkc2l6ZTsKKwkJCQlzaXplX3QJCWxlbiA9IG91dGxlbiA8IGxpYiA/IG91dGxlbiA6IGxp YjsKKworCQkJCWlmIChlb2xfZmxhZyAmJgorCQkJCQkocCA9IG1lbWNocihmcy0+YnVmZmVyLCAn XG4nLCBvdXRsZW4pKSAmJgorCQkJCQkoc2l6ZV90KSAocCAtIGZzLT5idWZmZXIgKyAxKSA8PSBs ZW4pCisJCQkJeworCQkJCQlsZW4gPSBwIC0gZnMtPmJ1ZmZlciArIDE7CisJCQkJCWVvbF9mb3Vu ZCA9IHRydWU7CisJCQkJfQorCisJCQkJbWVtY3B5KChjaGFyICopIHB0ciArIGRzaXplLCBmcy0+ YnVmZmVyLCBsZW4pOworCQkJCWRzaXplICs9IGxlbjsKKworCQkJCS8qIG1vdmUgd2hhdCBkaWQg bm90IGZpdCwgaWYgYW55LCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWYgKi8KKwkJCQlpZiAo bGVuIDwgb3V0bGVuKQorCQkJCQltZW1tb3ZlKGZzLT5idWZmZXIsIGZzLT5idWZmZXIgKyBsZW4s IG91dGxlbiAtIGxlbik7CisJCQkJb3V0bGVuIC09IGxlbjsKKwkJCX0KKworCQkJLyogaWYgdGhl cmUgaXMgYXZhaWxhYmxlIG91dHB1dCwgc2F2ZSBpdCAqLworCQkJaWYgKG91dGxlbiA+IDApCisJ CQl7CisJCQkJd2hpbGUgKGZzLT5vdmVyZmxvd2xlbiArIG91dGxlbiA+IGZzLT5vdmVyZmxvd2Fs bG9jbGVuKQorCQkJCXsKKwkJCQkJZnMtPm92ZXJmbG93YWxsb2NsZW4gKj0gMjsKKwkJCQkJZnMt Pm92ZXJmbG93YnVmID0gcGdfcmVhbGxvYyhmcy0+b3ZlcmZsb3didWYsCisJCQkJCQkJCQkJCQkg ZnMtPm92ZXJmbG93YWxsb2NsZW4pOworCQkJCX0KKworCQkJCW1lbWNweShmcy0+b3ZlcmZsb3di dWYgKyBmcy0+b3ZlcmZsb3dsZW4sIGZzLT5idWZmZXIsIG91dGxlbik7CisJCQkJZnMtPm92ZXJm bG93bGVuICs9IG91dGxlbjsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKHJzaXplID09IHNpemUgJiYg ZHNpemUgPCBzaXplICYmIGVvbF9mb3VuZCA9PSAwKTsKKworCXBnX2ZyZWUocmVhZGJ1Zik7CisK KwlyZXR1cm4gKGludCkgZHNpemU7Cit9CisKKy8qCisgKiBDb21wcmVzcyBzaXplIGJ5dGVzIGZy b20gcHRyIGFuZCB3cml0ZSB0aGVtIHRvIHRoZSBzdHJlYW0uCisgKi8KK3N0YXRpYyBzaXplX3QK K0xaNEZpbGVfd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgQ29tcHJlc3NGaWxl SGFuZGxlICpDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZh dGVfZGF0YTsKKwlzaXplX3QJCXN0YXR1czsKKwlpbnQJCQlyZW1haW5pbmcgPSBzaXplOworCisJ LyogTGF6eSBpbml0ICovCisJaWYgKExaNEZpbGVfaW5pdChmcywgc2l6ZSwgdHJ1ZSkpCisJCXJl dHVybiAtMTsKKworCXdoaWxlIChyZW1haW5pbmcgPiAwKQorCXsKKwkJaW50CQkJY2h1bmsgPSBy ZW1haW5pbmcgPCBMWjRfSU5fU0laRSA/IHJlbWFpbmluZyA6IExaNF9JTl9TSVpFOworCisJCXJl bWFpbmluZyAtPSBjaHVuazsKKworCQlzdGF0dXMgPSBMWjRGX2NvbXByZXNzVXBkYXRlKGZzLT5j dHgsIGZzLT5idWZmZXIsIGZzLT5idWZsZW4sCisJCQkJCQkJCQkgcHRyLCBjaHVuaywgTlVMTCk7 CisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0 dXM7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoZndyaXRlKGZzLT5idWZmZXIsIDEsIHN0 YXR1cywgZnMtPmZwKSAhPSBzdGF0dXMpCisJCXsKKwkJCWVycm5vID0gKGVycm5vKSA/IGVycm5v IDogRU5PU1BDOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKwor LyoKKyAqIGZyZWFkKCkgZXF1aXZhbGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNz ZWQgZmlsZXMuCisgKi8KK3N0YXRpYyBzaXplX3QKK0xaNEZpbGVfcmVhZCh2b2lkICpwdHIsIHNp emVfdCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9 IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldDsKKworCXJldCA9IExa NEZpbGVfcmVhZF9pbnRlcm5hbChmcywgcHRyLCBzaXplLCBmYWxzZSk7CisJaWYgKHJldCAhPSBz aXplICYmICFMWjRGaWxlX2VvZihDRkgpKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJv bSBpbnB1dCBmaWxlOiAlcyIsIExaNEZpbGVfZ2V0X2Vycm9yKENGSCkpOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIGZnZXRjKCkgZXF1aXZhbGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0 IGNvbXByZXNzZWQgZmlsZXMuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfZ2V0YyhDb21wcmVz c0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+ cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGNoYXIgYzsKKworCWlmIChMWjRGaWxlX3JlYWRfaW50 ZXJuYWwoZnMsICZjLCAxLCBmYWxzZSkgIT0gMSkKKwl7CisJCWlmICghTFo0RmlsZV9lb2YoQ0ZI KSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgTFo0 RmlsZV9nZXRfZXJyb3IoQ0ZIKSk7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVh ZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CisJfQorCisJcmV0dXJuIGM7Cit9CisK Ky8qCisgKiBmZ2V0cygpIGVxdWl2YWxlbnQgaW1wbGVtZW50YXRpb24gZm9yIExaNCBjb21wcmVz c2VkIGZpbGVzLgorICovCitzdGF0aWMgY2hhciAqCitMWjRGaWxlX2dldHMoY2hhciAqcHRyLCBp bnQgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAo TFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QJCWRzaXplOworCisJZHNpemUg PSBMWjRGaWxlX3JlYWRfaW50ZXJuYWwoZnMsIHB0ciwgc2l6ZSwgdHJ1ZSk7CisJaWYgKGRzaXpl IDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBM WjRGaWxlX2dldF9lcnJvcihDRkgpKTsKKworCS8qIERvbmUgcmVhZGluZyAqLworCWlmIChkc2l6 ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBwdHI7Cit9CisKKy8qCisgKiBGaW5h bGl6ZSAoZGUpY29tcHJlc3Npb24gb2YgYSBzdHJlYW0uIFdoZW4gY29tcHJlc3NpbmcgaXQgd2ls bCB3cml0ZSBhbnkKKyAqIHJlbWFpbmluZyBjb250ZW50IGFuZC9vciBnZW5lcmF0ZWQgZm9vdGVy IGZyb20gdGhlIExaNCBBUEkuCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZpbGVfY2xvc2UoQ29tcHJl c3NGaWxlSGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnA7CisJTFo0RmlsZSAgICAqZnMgPSAo TFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QJCXN0YXR1czsKKwlpbnQJCQly ZXQ7CisKKwlmcCA9IGZzLT5mcDsKKwlpZiAoZnMtPmluaXRlZCkKKwl7CisJCWlmIChmcy0+Y29t cHJlc3NpbmcpCisJCXsKKwkJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NFbmQoZnMtPmN0eCwgZnMt PmJ1ZmZlciwgZnMtPmJ1ZmxlbiwgTlVMTCk7CisJCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykp CisJCQkJcGdfZmF0YWwoImZhaWxlZCB0byBlbmQgY29tcHJlc3Npb246ICVzIiwKKwkJCQkJCSBM WjRGX2dldEVycm9yTmFtZShzdGF0dXMpKTsKKwkJCWVsc2UgaWYgKChyZXQgPSBmd3JpdGUoZnMt PmJ1ZmZlciwgMSwgc3RhdHVzLCBmcy0+ZnApKSAhPSBzdGF0dXMpCisJCQl7CisJCQkJZXJybm8g PSAoZXJybm8pID8gZXJybm8gOiBFTk9TUEM7CisJCQkJV1JJVEVfRVJST1JfRVhJVDsKKwkJCX0K KworCQkJc3RhdHVzID0gTFo0Rl9mcmVlQ29tcHJlc3Npb25Db250ZXh0KGZzLT5jdHgpOworCQkJ aWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQkJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gZW5kIGNv bXByZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9nZXRFcnJvck5hbWUoc3RhdHVzKSk7CisJCX0K KwkJZWxzZQorCQl7CisJCQlzdGF0dXMgPSBMWjRGX2ZyZWVEZWNvbXByZXNzaW9uQ29udGV4dChm cy0+ZHR4KTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCQlwZ19mYXRhbCgiZmFp bGVkIHRvIGVuZCBkZWNvbXByZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9nZXRFcnJvck5hbWUo c3RhdHVzKSk7CisJCQlwZ19mcmVlKGZzLT5vdmVyZmxvd2J1Zik7CisJCX0KKworCQlwZ19mcmVl KGZzLT5idWZmZXIpOworCX0KKworCXBnX2ZyZWUoZnMpOworCisJcmV0dXJuIGZjbG9zZShmcCk7 Cit9CisKK3N0YXRpYyBpbnQKK0xaNEZpbGVfb3Blbihjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQs IGNvbnN0IGNoYXIgKm1vZGUsCisJCQkgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJRklM RQkgICAqZnA7CisJTFo0RmlsZSAgICAqbHo0ZnAgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVf ZGF0YTsKKworCWlmIChmZCA+PSAwKQorCQlmcCA9IGZkb3BlbihmZCwgbW9kZSk7CisJZWxzZQor CQlmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCWlmIChmcCA9PSBOVUxMKQorCXsKKwkJbHo0ZnAt PmVycmNvZGUgPSBlcnJubzsKKwkJcmV0dXJuIDE7CisJfQorCisJbHo0ZnAtPmZwID0gZnA7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorTFo0RmlsZV9vcGVuX3dyaXRlKGNvbnN0IGNo YXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQorewor CWNoYXIJICAgKmZuYW1lOworCWludAkJCXJldDsKKworCWZuYW1lID0gcHNwcmludGYoIiVzLmx6 NCIsIHBhdGgpOworCXJldCA9IENGSC0+b3Blbl9mdW5jKGZuYW1lLCAtMSwgbW9kZSwgQ0ZIKTsK KwlwZ19mcmVlKGZuYW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQdWJsaWMgcm91 dGluZXMKKyAqLwordm9pZAorSW5pdENvbXByZXNzRmlsZUhhbmRsZUxaNChDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCwKKwkJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKQoreworCUxaNEZpbGUgICAgKmx6NGZwOworCisJQ0ZILT5vcGVuX2Z1bmMg PSBMWjRGaWxlX29wZW47CisJQ0ZILT5vcGVuX3dyaXRlX2Z1bmMgPSBMWjRGaWxlX29wZW5fd3Jp dGU7CisJQ0ZILT5yZWFkX2Z1bmMgPSBMWjRGaWxlX3JlYWQ7CisJQ0ZILT53cml0ZV9mdW5jID0g TFo0RmlsZV93cml0ZTsKKwlDRkgtPmdldHNfZnVuYyA9IExaNEZpbGVfZ2V0czsKKwlDRkgtPmdl dGNfZnVuYyA9IExaNEZpbGVfZ2V0YzsKKwlDRkgtPmVvZl9mdW5jID0gTFo0RmlsZV9lb2Y7CisJ Q0ZILT5jbG9zZV9mdW5jID0gTFo0RmlsZV9jbG9zZTsKKwlDRkgtPmdldF9lcnJvcl9mdW5jID0g TFo0RmlsZV9nZXRfZXJyb3I7CisKKwlDRkgtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lv bl9zcGVjOworCWx6NGZwID0gcGdfbWFsbG9jMChzaXplb2YoKmx6NGZwKSk7CisJaWYgKENGSC0+ Y29tcHJlc3Npb25fc3BlYy5sZXZlbCA+PSAwKQorCQlsejRmcC0+cHJlZnMuY29tcHJlc3Npb25M ZXZlbCA9IENGSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbDsKKworCUNGSC0+cHJpdmF0ZV9kYXRh ID0gbHo0ZnA7Cit9CisjZWxzZQkJCQkJCQkvKiBVU0VfTFo0ICovCit2b2lkCitJbml0Q29tcHJl c3NvckxaNChDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRv ZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJMWjQiKTsKK30KKwordm9pZAor SW5pdENvbXByZXNzRmlsZUhhbmRsZUxaNChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwKKwkJCQkJ CSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorewor CXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAl cyIsICJMWjQiKTsKK30KKyNlbmRpZgkJCQkJCQkvKiBVU0VfTFo0ICovCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf bHo0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDBkYmUwMGQ0Ngot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaApAQCAtMCww ICsxLDI0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19sejQuaAorICoJ IExaNCBpbnRlcmZhY2UgdG8gY29tcHJlc3NfaW8uYyByb3V0aW5lcworICoKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2 ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICAgc3JjL2Jp bi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp Zm5kZWYgX0NPTVBSRVNTX0xaNF9IXworI2RlZmluZSBfQ09NUFJFU1NfTFo0X0hfCisKKyNpbmNs dWRlICJjb21wcmVzc19pby5oIgorCitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3NvckxaNChDb21w cmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc2lvbl9zcGVjKTsKK2V4dGVybiB2b2lkIEluaXRDb21wcmVzc0ZpbGVIYW5kbGVM WjQoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsCisJCQkJCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CisKKyNlbmRpZgkJCQkJCQkvKiBfQ09N UFJFU1NfTFo0X0hfICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQg Yi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXggODRlOWYwZGVmYS4uMGRhNDc2YTRj MyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9tZXNvbi5idWlsZApAQCAtMyw2ICszLDcgQEAKIHBnX2R1bXBfY29tbW9uX3NvdXJj ZXMgPSBmaWxlcygKICAgJ2NvbXByZXNzX2d6aXAuYycsCiAgICdjb21wcmVzc19pby5jJywKKyAg J2NvbXByZXNzX2x6NC5jJywKICAgJ2NvbXByZXNzX25vbmUuYycsCiAgICdkdW1wdXRpbHMuYycs CiAgICdwYXJhbGxlbC5jJywKQEAgLTE4LDcgKzE5LDcgQEAgcGdfZHVtcF9jb21tb25fc291cmNl cyA9IGZpbGVzKAogcGdfZHVtcF9jb21tb24gPSBzdGF0aWNfbGlicmFyeSgnbGlicGdkdW1wX2Nv bW1vbicsCiAgIHBnX2R1bXBfY29tbW9uX3NvdXJjZXMsCiAgIGNfcGNoOiBwY2hfcG9zdGdyZXNf ZmVfaCwKLSAgZGVwZW5kZW5jaWVzOiBbZnJvbnRlbmRfY29kZSwgbGlicHEsIHpsaWJdLAorICBk ZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcSwgbHo0LCB6bGliXSwKICAga3dhcmdz OiBpbnRlcm5hbF9saWJfYXJncywKICkKIApAQCAtODYsNyArODcsMTAgQEAgdGVzdHMgKz0gewog ICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKICAgJ2JkJzogbWVzb24uY3VycmVu dF9idWlsZF9kaXIoKSwKICAgJ3RhcCc6IHsKLSAgICAnZW52JzogeydHWklQX1BST0dSQU0nOiBn emlwLnBhdGgoKX0sCisgICAgJ2Vudic6IHsKKyAgICAgICdHWklQX1BST0dSQU0nOiBnemlwLnBh dGgoKSwKKyAgICAgICdMWjQnOiBwcm9ncmFtX2x6NC5mb3VuZCgpID8gcHJvZ3JhbV9sejQucGF0 aCgpIDogJycsCisgICAgfSwKICAgICAndGVzdHMnOiBbCiAgICAgICAndC8wMDFfYmFzaWMucGwn LAogICAgICAgJ3QvMDAyX3BnX2R1bXAucGwnLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5jCmluZGV4IDA0Y2Y4ODc1MjYuLjUyYzlhNGE2MzQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmMKQEAgLTM4NSw3ICszODUsOCBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpB SFgpCiAJICovCiAJc3VwcG9ydHNfY29tcHJlc3Npb24gPSBmYWxzZTsKIAlpZiAoQUgtPmNvbXBy ZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX05PTkUgfHwKLQkJQUgtPmNv bXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCUFILT5j b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQIHx8CisJCUFI LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9MWjQpCiAJCXN1 cHBvcnRzX2NvbXByZXNzaW9uID0gdHJ1ZTsKIAogCWlmIChBSC0+UHJpbnRUb2NEYXRhUHRyICE9 IE5VTEwpCkBAIC0zOTcsNiArMzk4LDEwIEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkK ICNpZm5kZWYgSEFWRV9MSUJaCiAJCQkJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQogCQkJCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9IGZh bHNlOworI2VuZGlmCisjaWZuZGVmIFVTRV9MWjQKKwkJCQlpZiAoQUgtPmNvbXByZXNzaW9uX3Nw ZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0xaNCkKKwkJCQkJc3VwcG9ydHNfY29tcHJl c3Npb24gPSBmYWxzZTsKICNlbmRpZgogCQkJCWlmIChzdXBwb3J0c19jb21wcmVzc2lvbiA9PSBm YWxzZSkKIAkJCQkJcGdfZmF0YWwoImNhbm5vdCByZXN0b3JlIGZyb20gY29tcHJlc3NlZCBhcmNo aXZlIChjb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkIGluIHRoaXMgaW5zdGFsbGF0aW9uKSIpOwpA QCAtMjA4MSw3ICsyMDg2LDcgQEAgX2Rpc2NvdmVyQXJjaGl2ZUZvcm1hdChBcmNoaXZlSGFuZGxl ICpBSCkKIAogCQkvKgogCQkgKiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGFyY2hpdmUgaXMgYSBk aXJlY3RvcnkuIElmIHNvLCBjaGVjayBpZgotCQkgKiB0aGVyZSdzIGEgInRvYy5kYXQiIChvciAi dG9jLmRhdC5neiIpIGZpbGUgaW4gaXQuCisJCSAqIHRoZXJlJ3MgYSAidG9jLmRhdCIgKG9yICJ0 b2MuZGF0LntneixsejR9IikgZmlsZSBpbiBpdC4KIAkJICovCiAJCWlmIChzdGF0KEFILT5mU3Bl YywgJnN0KSA9PSAwICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCiAJCXsKQEAgLTIwOTEsNiArMjA5 NiwxMCBAQCBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogI2lmZGVm IEhBVkVfTElCWgogCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9j LmRhdC5neiIpKQogCQkJCXJldHVybiBBSC0+Zm9ybWF0OworI2VuZGlmCisjaWZkZWYgVVNFX0xa NAorCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRhdC5sejQi KSkKKwkJCQlyZXR1cm4gQUgtPmZvcm1hdDsKICNlbmRpZgogCQkJcGdfZmF0YWwoImRpcmVjdG9y eSBcIiVzXCIgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgYXJjaGl2ZSAoXCJ0b2MuZGF0 XCIgZG9lcyBub3QgZXhpc3QpIiwKIAkJCQkJIEFILT5mU3BlYyk7CkBAIC0zNzU0LDYgKzM3NjMs MTAgQEAgUmVhZEhlYWQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAjaWZuZGVmIEhBVkVfTElCWgogCQlp ZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVAp CiAJCQl1bnN1cHBvcnRlZCA9IHRydWU7CisjZW5kaWYKKyNpZm5kZWYgVVNFX0xaNAorCQlpZiAo QUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0xaNCkKKwkJ CXVuc3VwcG9ydGVkID0gdHJ1ZTsKICNlbmRpZgogCQlpZiAodW5zdXBwb3J0ZWQpCiAJCQlwZ19m YXRhbCgiYXJjaGl2ZSBpcyBjb21wcmVzc2VkLCBidXQgdGhpcyBpbnN0YWxsYXRpb24gZG9lcyBu b3Qgc3VwcG9ydCBjb21wcmVzc2lvbiIpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9kaXJlY3RvcnkuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5 LmMKaW5kZXggYTJmODg5OTVjMC4uY2UyYTA4MzhmYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2RpcmVjdG9yeS5jCkBAIC03NzksMTAgKzc3OSwxMyBAQCBfUHJlcFBhcmFsbGVsUmVzdG9yZShB cmNoaXZlSGFuZGxlICpBSCkKIAogCQlpZiAoc3RhdChmbmFtZSwgJnN0KSA9PSAwKQogCQkJdGUt PmRhdGFMZW5ndGggPSBzdC5zdF9zaXplOwotCQllbHNlCisJCWVsc2UgaWYgKEFILT5jb21wcmVz c2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9OT05FKQogCQl7Ci0JCQkvKiBJ dCBtaWdodCBiZSBjb21wcmVzc2VkICovCi0JCQlzdHJsY2F0KGZuYW1lLCAiLmd6Iiwgc2l6ZW9m KGZuYW1lKSk7CisJCQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NP TVBSRVNTSU9OX0daSVApCisJCQkJc3RybGNhdChmbmFtZSwgIi5neiIsIHNpemVvZihmbmFtZSkp OworCQkJZWxzZSBpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBS RVNTSU9OX0xaNCkKKwkJCQlzdHJsY2F0KGZuYW1lLCAiLmx6NCIsIHNpemVvZihmbmFtZSkpOwor CiAJCQlpZiAoc3RhdChmbmFtZSwgJnN0KSA9PSAwKQogCQkJCXRlLT5kYXRhTGVuZ3RoID0gc3Qu c3Rfc2l6ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggNTI3Yzc2NTFhYi4uMDgxMDUzMzdiMSAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5jCkBAIC03MTUsMTMgKzcxNSwxMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgogCQkJLyogZmFsbHRocm91Z2ggKi8KIAkJ Y2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgorCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSBQ R19DT01QUkVTU0lPTl9MWjQ6CiAJCQlicmVhazsKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1RE OgogCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQi LCAiWlNURCIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgotCQkJcGdf ZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7 Ci0JCQlicmVhazsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAy X3BnX2R1bXAucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbAppbmRleCA3ODQ1 NDkyOGNjLi43MmIxOWVlNmNkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdf ZHVtcC5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbApAQCAtMTM5LDYg KzEzOSw4MCBAQCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJCQlhcmdzICAgID0+IFsgJy1kJywgIiR0 ZW1wZGlyL2NvbXByZXNzaW9uX2d6aXBfcGxhaW4uc3FsLmd6IiwgXSwKIAkJfSwKIAl9LAorCisJ IyBEbyBub3QgdXNlIC0tbm8tc3luYyB0byBnaXZlIHRlc3QgY292ZXJhZ2UgZm9yIGRhdGEgc3lu Yy4KKwljb21wcmVzc2lvbl9sejRfY3VzdG9tID0+IHsKKwkJdGVzdF9rZXkgICAgICAgPT4gJ2Nv bXByZXNzaW9uJywKKwkJY29tcGlsZV9vcHRpb24gPT4gJ2x6NCcsCisJCWR1bXBfY21kICAgICAg ID0+IFsKKwkJCSdwZ19kdW1wJywgICAgICAnLS1mb3JtYXQ9Y3VzdG9tJywKKwkJCSctLWNvbXBy ZXNzPWx6NCcsICItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5kdW1wIiwK KwkJCSdwb3N0Z3JlcycsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3Jl JywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5zcWwiLAorCQkJ IiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9jdXN0b20uZHVtcCIsCisJCV0sCisJCWNvbW1hbmRf bGlrZSA9PiB7CisJCQljb21tYW5kID0+IFsKKwkJCQkncGdfcmVzdG9yZScsCisJCQkJJy1sJywg IiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9jdXN0b20uZHVtcCIsCisJCQldLAorCQkJZXhwZWN0 ZWQgPT4gcXIvQ29tcHJlc3Npb246IGx6NC8sCisJCQluYW1lID0+ICdkYXRhIGNvbnRlbnQgaXMg bHo0IGNvbXByZXNzZWQnCisJCX0sCisJfSwKKworCSMgRG8gbm90IHVzZSAtLW5vLXN5bmMgdG8g Z2l2ZSB0ZXN0IGNvdmVyYWdlIGZvciBkYXRhIHN5bmMuCisJY29tcHJlc3Npb25fbHo0X2RpciA9 PiB7CisJCXRlc3Rfa2V5ICAgICAgID0+ICdjb21wcmVzc2lvbicsCisJCWNvbXBpbGVfb3B0aW9u ID0+ICdsejQnLAorCQlkdW1wX2NtZCAgICAgICA9PiBbCisJCQkncGdfZHVtcCcsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJy0tam9icz0yJywKKwkJCSctLWZvcm1hdD1kaXJlY3Rvcnkn LCAgICAgICAgICAgICAgICAgICAnLS1jb21wcmVzcz1sejQ6MScsCisJCQkiLS1maWxlPSR0ZW1w ZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIiLCAncG9zdGdyZXMnLAorCQldLAorCQkjIEdpdmUgY292 ZXJhZ2UgZm9yIG1hbnVhbGx5IGNvbXByZXNzZWQgYmxvYi50b2MgZmlsZXMgZHVyaW5nCisJCSMg cmVzdG9yZS4KKwkJY29tcHJlc3NfY21kID0+IHsKKwkJCXByb2dyYW0gPT4gJEVOVnsnTFo0J30s CisJCQlhcmdzICAgID0+IFsKKwkJCQknLXonLCAnLWYnLCAnLS1ybScsCisJCQkJIiR0ZW1wZGly L2NvbXByZXNzaW9uX2x6NF9kaXIvYmxvYnMudG9jIiwKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Np b25fbHo0X2Rpci9ibG9icy50b2MubHo0IiwKKwkJCV0sCisJCX0sCisJCSMgVmVyaWZ5IHRoYXQg ZGF0YSBmaWxlcyB3ZXJlIGNvbXByZXNzZWQKKwkJZ2xvYl9wYXR0ZXJucyA9PiBbCisJCQkiJHRl bXBkaXIvY29tcHJlc3Npb25fbHo0X2Rpci90b2MuZGF0IiwKKwkJICAgICIkdGVtcGRpci9jb21w cmVzc2lvbl9sejRfZGlyLyouZGF0Lmx6NCIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJ CSdwZ19yZXN0b3JlJywgJy0tam9icz0yJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Np b25fbHo0X2Rpci5zcWwiLAorCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIiLAorCQld LAorCX0sCisKKwljb21wcmVzc2lvbl9sejRfcGxhaW4gPT4geworCQl0ZXN0X2tleSAgICAgICA9 PiAnY29tcHJlc3Npb24nLAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQg ICAgICAgPT4gWworCQkJJ3BnX2R1bXAnLCAnLS1mb3JtYXQ9cGxhaW4nLCAnLS1jb21wcmVzcz1s ejQnLAorCQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfcGxhaW4uc3FsLmx6NCIs ICdwb3N0Z3JlcycsCisJCV0sCisJCSMgRGVjb21wcmVzcyB0aGUgZ2VuZXJhdGVkIGZpbGUgdG8g cnVuIHRocm91Z2ggdGhlIHRlc3RzLgorCQljb21wcmVzc19jbWQgPT4geworCQkJcHJvZ3JhbSA9 PiAkRU5WeydMWjQnfSwKKwkJCWFyZ3MgICAgPT4gWworCQkJCSctZCcsICctZicsCisJCQkJIiR0 ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9wbGFpbi5zcWwubHo0IiwKKwkJCQkiJHRlbXBkaXIvY29t cHJlc3Npb25fbHo0X3BsYWluLnNxbCIsCisJCQldLAorCQl9LAorCX0sCisKIAljbGVhbiA9PiB7 CiAJCWR1bXBfY21kID0+IFsKIAkJCSdwZ19kdW1wJywKQEAgLTQxNzUsMTEgKzQyNDksMTEgQEAg Zm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBnZHVtcF9ydW5zKQogCW15ICRydW5fZGIgICA9 ICdwb3N0Z3Jlcyc7CiAKIAkjIFNraXAgY29tbWFuZC1sZXZlbCB0ZXN0cyBmb3IgZ3ppcCBpZiB0 aGVyZSBpcyBubyBzdXBwb3J0IGZvciBpdC4KLQlpZiAoICAgZGVmaW5lZCgkcGdkdW1wX3J1bnN7 JHJ1bn0tPntjb21waWxlX29wdGlvbn0pCi0JCSYmICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBp bGVfb3B0aW9ufSBlcSAnZ3ppcCcKLQkJJiYgISRzdXBwb3J0c19nemlwKQorCWlmICgkcGdkdW1w X3J1bnN7JHJ1bn0tPntjb21waWxlX29wdGlvbn0gJiYKKwkJKCRwZ2R1bXBfcnVuc3skcnVufS0+ e2NvbXBpbGVfb3B0aW9ufSBlcSAnZ3ppcCcgJiYgISRzdXBwb3J0c19nemlwKSB8fAorCQkoJHBn ZHVtcF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IGVxICdsejQnICYmICEkc3VwcG9ydHNf bHo0KSkKIAl7Ci0JCW5vdGUgIiRydW46IHNraXBwZWQgZHVlIHRvIG5vIGd6aXAgc3VwcG9ydCI7 CisJCW5vdGUgIiRydW46IHNraXBwZWQgZHVlIHRvIG5vICRwZ2R1bXBfcnVuc3skcnVufS0+e2Nv bXBpbGVfb3B0aW9ufSBzdXBwb3J0IjsKIAkJbmV4dDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy90 b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sgYi9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVz cGx1c2NoZWNrCmluZGV4IGRiNDI5NDc0YTIuLjJjNTA0MmViNDEgMTAwNzU1Ci0tLSBhL3NyYy90 b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKKysrIGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9j cGx1c3BsdXNjaGVjawpAQCAtMTUyLDYgKzE1Miw3IEBAIGRvCiAJIyBhcyBmaWVsZCBuYW1lcywg d2hpY2ggaXMgdW5mb3J0dW5hdGUgYnV0IHdlIHdvbid0IGNoYW5nZSBpdCBub3cuCiAJdGVzdCAi JGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaCAmJiBjb250aW51ZQogCXRlc3Qg IiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oICYmIGNvbnRpbnVlCisJdGVzdCAi JGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oICYmIGNvbnRpbnVlCiAJdGVzdCAi JGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX25vbmUuaCAmJiBjb250aW51ZQogCXRlc3Qg IiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYi ID0gc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oICYmIGNvbnRpbnVlCmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDdlNjJjNmVmM2QuLjY5MmM1Y2ViMGIgMTAwNjQ0Ci0t LSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMzgzLDYgKzEzODMsNyBAQCBMV0xvY2sKIExXTG9ja0hh bmRsZQogTFdMb2NrTW9kZQogTFdMb2NrUGFkZGVkCitMWjRDb21wcmVzc29yU3RhdGUKIExaNEZf Y29tcHJlc3Npb25Db250ZXh0X3QKIExaNEZfZGVjb21wcmVzc09wdGlvbnNfdAogTFo0Rl9kZWNv bXByZXNzaW9uQ29udGV4dF90Ci0tIAoyLjM0LjEKCg== --b1_5qditUewD7dQGtjj6KugnW5ZocxiJwQdw5EMVJVpXc--