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 1pHRCY-0005VM-D3 for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Jan 2023 15:15:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pHRCX-0000jR-Aq for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Jan 2023 15:15:09 +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 1pHRCW-0000jF-D8 for pgsql-hackers@lists.postgresql.org; Mon, 16 Jan 2023 15:15:08 +0000 Received: from mail-40134.protonmail.ch ([185.70.40.134]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pHRCM-0000PQ-W1 for pgsql-hackers@lists.postgresql.org; Mon, 16 Jan 2023 15:15:07 +0000 Date: Mon, 16 Jan 2023 15:14:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1673882093; x=1674141293; bh=3YIZ84NC2AVl55tuSqzto0ogRmoo/9skreaOkBvDv7A=; 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=O2WqeK0TJ6R9fHYoL/HIkbP0LFSmHQcJ22WZFRkts115gfvKbXHoLo9UkRaiME7ns t+LMpDwW6EeqYt+Zf0fVYn8TOak2w/TKDvGDh/2A39dtsHf3IAcHOCU5DOqqxTSn23 OqJB0iHGmgxBYfqn9lGyqxBPF+4hO5xBiuh80LgenvtryLvIKjcrYBb9Zzm7wEgDCB uo+iXgu6FOmUoR/xk6kDsOybKVJLGRb3svaOCMR4iCo0/fNXX4ueTI3sm9UHZMctNA qIi/RK2aVpg6H8ViNIS8sx9tl+lCf84kN8/BFCXuGXoV6x0Ch7oX9xW0O1gxuX+dp9 0mCEnQZUB8Nxw== To: Michael Paquier From: gkokolatos@pm.me Cc: Justin Pryzby , pgsql-hackers@lists.postgresql.org, Rachel Heaton Subject: Re: Add LZ4 compression in pg_dump Message-ID: In-Reply-To: References: <20221220152610.GG1153@telsasoft.com> <20221222170859.GO1153@telsasoft.com> <20230108194524.GA27637@telsasoft.com> <20230114214308.GC9837@telsasoft.com> <20230116015625.GH9837@telsasoft.com> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_hAgeT0CwQJ3z6UK6simdJIGH97uJztQ45k0HaIBc8" 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_hAgeT0CwQJ3z6UK6simdJIGH97uJztQ45k0HaIBc8 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi, I admit I am completely at lost as to what is expected from me anymore. I had posted v19-0001 for a committer's consideration and v19-000{2,3} for = completeness. Please find a rebased v20 attached. Also please let me know if I should silently step away from it and let othe= r people lead it. I would be glad to comply either way. Cheers, //Georgios ------- Original Message ------- On Monday, January 16th, 2023 at 3:54 AM, Michael Paquier wrote: > > > On Sun, Jan 15, 2023 at 07:56:25PM -0600, Justin Pryzby wrote: > > > On Mon, Jan 16, 2023 at 10:28:50AM +0900, Michael Paquier wrote: > > > > > The functions changed by 0001 are cfopen_write, > > > AllocateCompressor() and ReadDataFromArchive(). Why is it a good idea > > > to change these interfaces which basically exist to handle inputs? > > > > I changed to pass pg_compress_specification as a pointer, since that's > > the usual convention for structs, as followed by the existing uses of > > pg_compress_specification. > > > Okay, but what do we gain here? It seems to me that this introduces > the risk that a careless change in one of the internal routines if > they change slight;ly compress_spec, hence impacting any of their > callers? Or is that fixing an actual bug (except if I am missing your > point, that does not seem to be the case)? > > > > Is there some benefit in changing compression_spec within the > > > internals of these routines before going back one layer down to their > > > callers? Changing the compression_spec on-the-fly in these internal > > > paths could be risky, actually, no? > > > > I think what you're saying is that if the spec is passed as a pointer, > > then the called functions shouldn't set spec->algorithm=3Dsomething. > > > Yes. HEAD makes sure of that, 0001 would not prevent that. So I am a > bit confused in seeing how this is a benefit. > -- > Michael --b1_hAgeT0CwQJ3z6UK6simdJIGH97uJztQ45k0HaIBc8 Content-Type: text/x-patch; name=v20-0001-Prepare-pg_dump-internals-for-additional-compres.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v20-0001-Prepare-pg_dump-internals-for-additional-compres.patch RnJvbSAzNDhhMzA2YjQ3MTQ4NzkwYzYwMmIyYzIwOGZmMzM0NWJlZmE4ZWI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMTQ6NTY6MzEgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy MCAxLzNdIFByZXBhcmUgcGdfZHVtcCBpbnRlcm5hbHMgZm9yIGFkZGl0aW9uYWwgY29tcHJlc3Np b24KIG1ldGhvZHMuCgpDb21taXQgIGJmOWFhNDkwZGIgaW50cm9kdWNlZCBjZnAgaW4gY29tcHJl c3NfaW8ue2MsaH0gd2l0aCB0aGUgaW50ZW50IG9mCnVuaWZ5aW5nIGNvbXByZXNzaW9uIHJlbGF0 ZWQgY29kZSBhbmQgYWxsb3cgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYWRkaXRpb25hbAphcmNo aXZlIGZvcm1hdHMuIEhvd2V2ZXIsIHBnX2JhY2t1cF9hcmNoaXZlci5jIHdhcyBub3QgdXNpbmcg dGhhdCBBUEkuIFRoaXMKY29tbWl0IHRlYWNoZXMgcGdfYmFja3VwX2FyY2hpdmVyLmMgYWJvdXQg aXQgYW5kIGlzIHVzaW5nIGl0IHRocm91Z2hvdXQuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2lvLmMgICAgICAgIHwgMzg5ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLQogc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIHwgMTI4ICsrKy0tLS0tLQogc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIHwgIDI3ICstCiAzIGZpbGVzIGNoYW5nZWQsIDMx OCBpbnNlcnRpb25zKCspLCAyMjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwppbmRl eCA3YTJjODBiYmM0Li4xZGI5NzNiNmEyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtNTYsNiAr NTYsMTAgQEAKICNpbmNsdWRlICJjb21wcmVzc19pby5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91 dGlscy5oIgogCisjaWZkZWYgSEFWRV9MSUJaCisjaW5jbHVkZSA8emxpYi5oPgorI2VuZGlmCisK IC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ29tcHJlc3NvciBBUEkKICAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpAQCAtMTI4LDE1ICsxMzIsMjQgQEAgUmVhZERhdGFGcm9tQXJjaGl2ZShB cmNoaXZlSGFuZGxlICpBSCwKIAkJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBj b21wcmVzc2lvbl9zcGVjLAogCQkJCQlSZWFkRnVuYyByZWFkRikKIHsKLQlpZiAoY29tcHJlc3Np b25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKLQkJUmVhZERhdGFGcm9t QXJjaGl2ZU5vbmUoQUgsIHJlYWRGKTsKLQlpZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0g PT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKKwlzd2l0Y2ggKGNvbXByZXNzaW9uX3NwZWMuYWxnb3Jp dGhtKQogCXsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJUmVhZERhdGFGcm9tQXJj aGl2ZU5vbmUoQUgsIHJlYWRGKTsKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0da SVA6CiAjaWZkZWYgSEFWRV9MSUJaCi0JCVJlYWREYXRhRnJvbUFyY2hpdmVabGliKEFILCByZWFk Rik7CisJCQlSZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBSCwgcmVhZEYpOwogI2Vsc2UKLQkJcGdf ZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwg Imd6aXAiKTsKKwkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJl c3Npb24gd2l0aCAlcyIsICJnemlwIik7CiAjZW5kaWYKKwkJCWJyZWFrOworCQljYXNlIFBHX0NP TVBSRVNTSU9OX0xaNDoKKwkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5 ZXQgc3VwcG9ydGVkIiwgIkxaNCIpOworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05f WlNURDoKKwkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9y dGVkIiwgIlpTVEQiKTsKKwkJCWJyZWFrOwogCX0KIH0KIApAQCAtMTQ5LDYgKzE2Miw5IEBAIFdy aXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywK IHsKIAlzd2l0Y2ggKGNzLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKIAl7CisJCWNhc2Ug UEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCVdyaXRlRGF0YVRvQXJjaGl2ZU5vbmUoQUgsIGNzLCBk YXRhLCBkTGVuKTsKKwkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CiAjaWZk ZWYgSEFWRV9MSUJaCiAJCQlXcml0ZURhdGFUb0FyY2hpdmVabGliKEFILCBjcywgZGF0YSwgZExl bik7CkBAIC0xNTYsMTMgKzE3MiwxMSBAQCBXcml0ZURhdGFUb0FyY2hpdmUoQXJjaGl2ZUhhbmRs ZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCiAJCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2Vz IG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3ppcCIpOwogI2VuZGlmCiAJCQli cmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJV3JpdGVEYXRhVG9BcmNoaXZl Tm9uZShBSCwgY3MsIGRhdGEsIGRMZW4pOwotCQkJYnJlYWs7CiAJCWNhc2UgUEdfQ09NUFJFU1NJ T05fTFo0OgotCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3 aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIkxaNCIpOworCQkJYnJlYWs7CiAJCWNhc2Ug UEdfQ09NUFJFU1NJT05fWlNURDoKLQkJCXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1l dGhvZCIpOworCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBw b3J0ZWQiLCAiWlNURCIpOwogCQkJYnJlYWs7CiAJfQogfQpAQCAtMTczLDEwICsxODcsMjYgQEAg V3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNz LAogdm9pZAogRW5kQ29tcHJlc3NvcihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRl ICpjcykKIHsKKwlzd2l0Y2ggKGNzLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKKwl7CisJ CWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNT SU9OX0daSVA6CiAjaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGNzLT5jb21wcmVzc2lvbl9zcGVjLmFs Z29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQotCQlFbmRDb21wcmVzc29yWmxpYihBSCwg Y3MpOworCQkJRW5kQ29tcHJlc3NvclpsaWIoQUgsIGNzKTsKKyNlbHNlCisJCQlwZ19mYXRhbCgi dGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAorCQkJCQki Z3ppcCIpOwogI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6CisJ CQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJM WjQiKTsKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6CisJCQlwZ19mYXRh bCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7CisJ CQlicmVhazsKKwl9CisKIAlmcmVlKGNzKTsKIH0KIApAQCAtMzkxLDEwICs0MjEsOCBAQCBXcml0 ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNz LAogICovCiBzdHJ1Y3QgY2ZwCiB7Ci0JRklMRQkgICAqdW5jb21wcmVzc2VkZnA7Ci0jaWZkZWYg SEFWRV9MSUJaCi0JZ3pGaWxlCQljb21wcmVzc2VkZnA7Ci0jZW5kaWYKKwlwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7CisJdm9pZAkgICAqZnA7CiB9OwogCiAjaWZk ZWYgSEFWRV9MSUJaCkBAIC00OTAsMTI3ICs1MTgsMjAyIEBAIGNmb3Blbl93cml0ZShjb25zdCBj aGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAogfQogCiAvKgotICogT3BlbnMgZmlsZSAncGF0 aCcgaW4gJ21vZGUnLiBJZiBjb21wcmVzc2lvbiBpcyBHWklQLCB0aGUgZmlsZQotICogaXMgb3Bl bmVkIHdpdGggbGlieiBnem9wZW4oKSwgb3RoZXJ3aXNlIHdpdGggcGxhaW4gZm9wZW4oKS4KKyAq IFRoaXMgaXMgdGhlIHdvcmtob3JzZSBmb3IgY2ZvcGVuKCkgb3IgY2Zkb3BlbigpLiBJdCBvcGVu cyBmaWxlICdwYXRoJyBvcgorICogYXNzb2NpYXRlcyBhIHN0cmVhbSAnZmQnLCBpZiAnZmQnIGlz IGEgdmFsaWQgZGVzY3JpcHRvciwgaW4gJ21vZGUnLiBUaGUKKyAqIGRlc2NyaXB0b3IgaXMgbm90 IGR1cCdlZCBhbmQgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGRvIHNvLgor ICogVGhlIGNhbGxlciBtdXN0IHZlcmlmeSB0aGF0IHRoZSAnY29tcHJlc3NfYWxnb3JpdGhtJyBp cyBzdXBwb3J0ZWQgYnkgdGhlCisgKiBjdXJyZW50IGJ1aWxkLgogICoKICAqIE9uIGZhaWx1cmUs IHJldHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KICAqLwotY2ZwICoKLWNm b3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAotCSAgIGNvbnN0IHBnX2Nv bXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3N0YXRpYyBjZnAgKgorY2Zv cGVuX2ludGVybmFsKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwK KwkJCQlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiB7CiAJY2Zw CQkgICAqZnAgPSBwZ19tYWxsb2Moc2l6ZW9mKGNmcCkpOwogCi0JaWYgKGNvbXByZXNzaW9uX3Nw ZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCisJZnAtPmNvbXByZXNzaW9uX3Nw ZWMgPSBjb21wcmVzc2lvbl9zcGVjOworCisJc3dpdGNoIChjb21wcmVzc2lvbl9zcGVjLmFsZ29y aXRobSkKIAl7Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCWlmIChjb21wcmVzc2lvbl9zcGVjLmxldmVs ICE9IFpfREVGQVVMVF9DT01QUkVTU0lPTikKLQkJewotCQkJLyogdXNlciBoYXMgc3BlY2lmaWVk IGEgY29tcHJlc3Npb24gbGV2ZWwsIHNvIHRlbGwgemxpYiB0byB1c2UgaXQgKi8KLQkJCWNoYXIJ CW1vZGVfY29tcHJlc3Npb25bMzJdOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CisJCQlp ZiAoZmQgPj0gMCkKKwkJCQlmcC0+ZnAgPSBmZG9wZW4oZmQsIG1vZGUpOworCQkJZWxzZQorCQkJ CWZwLT5mcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCQkJaWYgKGZwLT5mcCA9PSBOVUxMKQorCQkJ eworCQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7CisJCQkJZnAgPSBOVUxMOworCQkJfQogCi0JCQlz bnByaW50Zihtb2RlX2NvbXByZXNzaW9uLCBzaXplb2YobW9kZV9jb21wcmVzc2lvbiksICIlcyVk IiwKLQkJCQkJIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOwotCQkJZnAtPmNvbXByZXNz ZWRmcCA9IGd6b3BlbihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKLQkJfQotCQllbHNlCi0JCXsK LQkJCS8qIGRvbid0IHNwZWNpZnkgYSBsZXZlbCwganVzdCB1c2UgdGhlIHpsaWIgZGVmYXVsdCAq LwotCQkJZnAtPmNvbXByZXNzZWRmcCA9IGd6b3BlbihwYXRoLCBtb2RlKTsKLQkJfQorCQkJYnJl YWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKyNpZmRlZiBIQVZFX0xJQloKKwkJCWlm IChjb21wcmVzc2lvbl9zcGVjLmxldmVsICE9IFpfREVGQVVMVF9DT01QUkVTU0lPTikKKwkJCXsK KwkJCQkvKgorCQkJCSAqIHVzZXIgaGFzIHNwZWNpZmllZCBhIGNvbXByZXNzaW9uIGxldmVsLCBz byB0ZWxsIHpsaWIgdG8gdXNlCisJCQkJICogaXQKKwkJCQkgKi8KKwkJCQljaGFyCQltb2RlX2Nv bXByZXNzaW9uWzMyXTsKKworCQkJCXNucHJpbnRmKG1vZGVfY29tcHJlc3Npb24sIHNpemVvZiht b2RlX2NvbXByZXNzaW9uKSwgIiVzJWQiLAorCQkJCQkJIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMu bGV2ZWwpOworCQkJCWlmIChmZCA+PSAwKQorCQkJCQlmcC0+ZnAgPSBnemRvcGVuKGZkLCBtb2Rl X2NvbXByZXNzaW9uKTsKKwkJCQllbHNlCisJCQkJCWZwLT5mcCA9IGd6b3BlbihwYXRoLCBtb2Rl X2NvbXByZXNzaW9uKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBkb24ndCBzcGVjaWZ5 IGEgbGV2ZWwsIGp1c3QgdXNlIHRoZSB6bGliIGRlZmF1bHQgKi8KKwkJCQlpZiAoZmQgPj0gMCkK KwkJCQkJZnAtPmZwID0gZ3pkb3BlbihmZCwgbW9kZSk7CisJCQkJZWxzZQorCQkJCQlmcC0+ZnAg PSBnem9wZW4ocGF0aCwgbW9kZSk7CisJCQl9CiAKLQkJZnAtPnVuY29tcHJlc3NlZGZwID0gTlVM TDsKLQkJaWYgKGZwLT5jb21wcmVzc2VkZnAgPT0gTlVMTCkKLQkJewotCQkJZnJlZV9rZWVwX2Vy cm5vKGZwKTsKLQkJCWZwID0gTlVMTDsKLQkJfQorCQkJaWYgKGZwLT5mcCA9PSBOVUxMKQorCQkJ eworCQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7CisJCQkJZnAgPSBOVUxMOworCQkJfQogI2Vsc2UK LQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRo ICVzIiwgImd6aXAiKTsKLSNlbmRpZgotCX0KLQllbHNlCi0JewotI2lmZGVmIEhBVkVfTElCWgot CQlmcC0+Y29tcHJlc3NlZGZwID0gTlVMTDsKKwkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMg bm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7CiAjZW5kaWYKLQkJZnAt PnVuY29tcHJlc3NlZGZwID0gZm9wZW4ocGF0aCwgbW9kZSk7Ci0JCWlmIChmcC0+dW5jb21wcmVz c2VkZnAgPT0gTlVMTCkKLQkJewotCQkJZnJlZV9rZWVwX2Vycm5vKGZwKTsKLQkJCWZwID0gTlVM TDsKLQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgorCQkJcGdfZmF0 YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7CisJ CQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgorCQkJcGdfZmF0YWwoImNvbXBy ZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOworCQkJYnJlYWs7 CiAJfQogCiAJcmV0dXJuIGZwOwogfQogCitjZnAgKgorY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgs IGNvbnN0IGNoYXIgKm1vZGUsCisJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBj b21wcmVzc2lvbl9zcGVjKQoreworCXJldHVybiBjZm9wZW5faW50ZXJuYWwocGF0aCwgLTEsIG1v ZGUsIGNvbXByZXNzaW9uX3NwZWMpOworfQorCitjZnAgKgorY2Zkb3BlbihpbnQgZmQsIGNvbnN0 IGNoYXIgKm1vZGUsCisJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Np b25fc3BlYykKK3sKKwlyZXR1cm4gY2ZvcGVuX2ludGVybmFsKE5VTEwsIGZkLCBtb2RlLCBjb21w cmVzc2lvbl9zcGVjKTsKK30KIAogaW50CiBjZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2Zw ICpmcCkKIHsKLQlpbnQJCQlyZXQ7CisJaW50CQkJcmV0ID0gMDsKIAogCWlmIChzaXplID09IDAp CiAJCXJldHVybiAwOwogCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2VkZnAp CisJc3dpdGNoIChmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCiAJewotCQlyZXQgPSBn enJlYWQoZnAtPmNvbXByZXNzZWRmcCwgcHRyLCBzaXplKTsKLQkJaWYgKHJldCAhPSBzaXplICYm ICFnemVvZihmcC0+Y29tcHJlc3NlZGZwKSkKLQkJewotCQkJaW50CQkJZXJybnVtOwotCQkJY29u c3QgY2hhciAqZXJybXNnID0gZ3plcnJvcihmcC0+Y29tcHJlc3NlZGZwLCAmZXJybnVtKTsKKwkJ Y2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJcmV0ID0gZnJlYWQocHRyLCAxLCBzaXplLCAo RklMRSAqKSBmcC0+ZnApOworCQkJaWYgKHJldCAhPSBzaXplICYmICFmZW9mKChGSUxFICopIGZw LT5mcCkpCisJCQkJUkVBRF9FUlJPUl9FWElUKChGSUxFICopIGZwLT5mcCk7CiAKLQkJCXBnX2Zh dGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwKLQkJCQkJIGVycm51bSA9 PSBaX0VSUk5PID8gc3RyZXJyb3IoZXJybm8pIDogZXJybXNnKTsKLQkJfQotCX0KLQllbHNlCisJ CQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgorI2lmZGVmIEhBVkVfTElCWgor CQkJcmV0ID0gZ3pyZWFkKChnekZpbGUpIGZwLT5mcCwgcHRyLCBzaXplKTsKKwkJCWlmIChyZXQg IT0gc2l6ZSAmJiAhZ3plb2YoKGd6RmlsZSkgZnAtPmZwKSkKKwkJCXsKKwkJCQlpbnQJCQllcnJu dW07CisJCQkJY29uc3QgY2hhciAqZXJybXNnID0gZ3plcnJvcigoZ3pGaWxlKSBmcC0+ZnAsICZl cnJudW0pOworCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTog JXMiLAorCQkJCQkJIGVycm51bSA9PSBaX0VSUk5PID8gc3RyZXJyb3IoZXJybm8pIDogZXJybXNn KTsKKwkJCX0KKyNlbHNlCisJCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0 IGNvbXByZXNzaW9uIHdpdGggJXMiLAorCQkJCQkiZ3ppcCIpOwogI2VuZGlmCi0JewotCQlyZXQg PSBmcmVhZChwdHIsIDEsIHNpemUsIGZwLT51bmNvbXByZXNzZWRmcCk7Ci0JCWlmIChyZXQgIT0g c2l6ZSAmJiAhZmVvZihmcC0+dW5jb21wcmVzc2VkZnApKQotCQkJUkVBRF9FUlJPUl9FWElUKGZw LT51bmNvbXByZXNzZWRmcCk7CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6 CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIs ICJMWjQiKTsKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6CisJCQlwZ19m YXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7 CisJCQlicmVhazsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQKIGNmd3JpdGUoY29uc3Qg dm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCkKIHsKKwlpbnQJCQlyZXQgPSAwOworCisJc3dp dGNoIChmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCisJeworCQljYXNlIFBHX0NPTVBS RVNTSU9OX05PTkU6CisJCQlyZXQgPSBmd3JpdGUocHRyLCAxLCBzaXplLCAoRklMRSAqKSBmcC0+ ZnApOworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKICNpZmRlZiBIQVZF X0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6d3JpdGUoZnAtPmNvbXBy ZXNzZWRmcCwgcHRyLCBzaXplKTsKLQllbHNlCisJCQlyZXQgPSBnendyaXRlKChnekZpbGUpIGZw LT5mcCwgcHRyLCBzaXplKTsKKyNlbHNlCisJCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5v dCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAorCQkJCQkiZ3ppcCIpOwogI2VuZGlmCi0J CXJldHVybiBmd3JpdGUocHRyLCAxLCBzaXplLCBmcC0+dW5jb21wcmVzc2VkZnApOworCQkJYnJl YWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgorCQkJcGdfZmF0YWwoImNvbXByZXNzaW9u IHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7CisJCQlicmVhazsKKwkJY2Fz ZSBQR19DT01QUkVTU0lPTl9aU1REOgorCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMg aXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJu IHJldDsKIH0KIAogaW50CiBjZmdldGMoY2ZwICpmcCkKIHsKLQlpbnQJCQlyZXQ7CisJaW50CQkJ cmV0ID0gMDsKIAotI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQorCXN3 aXRjaCAoZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQogCXsKLQkJcmV0ID0gZ3pnZXRj KGZwLT5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0ID09IEVPRikKLQkJewotCQkJaWYgKCFnemVv ZihmcC0+Y29tcHJlc3NlZGZwKSkKLQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBp bnB1dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0JCQllbHNlCi0JCQkJcGdfZmF0YWwo ImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKLQkJfQotCX0K LQllbHNlCisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCXJldCA9IGZnZXRjKChGSUxF ICopIGZwLT5mcCk7CisJCQlpZiAocmV0ID09IEVPRikKKwkJCQlSRUFEX0VSUk9SX0VYSVQoKEZJ TEUgKikgZnAtPmZwKTsKKworCQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoK KyNpZmRlZiBIQVZFX0xJQloKKwkJCXJldCA9IGd6Z2V0YygoZ3pGaWxlKSBmcC0+ZnApOworCQkJ aWYgKHJldCA9PSBFT0YpCisJCQl7CisJCQkJaWYgKCFnemVvZigoZ3pGaWxlKSBmcC0+ZnApKQor CQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIHN0cmVy cm9yKGVycm5vKSk7CisJCQkJZWxzZQorCQkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJv bSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOworCQkJfQorI2Vsc2UKKwkJCXBnX2ZhdGFsKCJ0 aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsCisJCQkJCSJn emlwIik7CiAjZW5kaWYKLQl7Ci0JCXJldCA9IGZnZXRjKGZwLT51bmNvbXByZXNzZWRmcCk7Ci0J CWlmIChyZXQgPT0gRU9GKQotCQkJUkVBRF9FUlJPUl9FWElUKGZwLT51bmNvbXByZXNzZWRmcCk7 CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6CisJCQlwZ19mYXRhbCgiY29t cHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKKwkJCWJyZWFr OworCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24g d2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7CisJCQlicmVhazsKIAl9CiAK IAlyZXR1cm4gcmV0OwpAQCAtNjE5LDY1ICs3MjIsMTE5IEBAIGNmZ2V0YyhjZnAgKmZwKQogY2hh ciAqCiBjZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBpbnQgbGVuKQogeworCWNoYXIJICAgKnJl dCA9IE5VTEw7CisKKwlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKKwl7 CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCXJldCA9IGZnZXRzKGJ1ZiwgbGVuLCAo RklMRSAqKSBmcC0+ZnApOworCisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQ OgogI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCQlyZXR1cm4gZ3pn ZXRzKGZwLT5jb21wcmVzc2VkZnAsIGJ1ZiwgbGVuKTsKLQllbHNlCisJCQlyZXQgPSBnemdldHMo KGd6RmlsZSkgZnAtPmZwLCBidWYsIGxlbik7CisjZWxzZQorCQkJcGdfZmF0YWwoInRoaXMgYnVp bGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwKKwkJCQkJImd6aXAiKTsK ICNlbmRpZgotCQlyZXR1cm4gZmdldHMoYnVmLCBsZW4sIGZwLT51bmNvbXByZXNzZWRmcCk7CisJ CQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6CisJCQlwZ19mYXRhbCgiY29tcHJl c3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKKwkJCWJyZWFrOwor CQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0 aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7CisJCQlicmVhazsKKwl9CisKKwly ZXR1cm4gcmV0OwogfQogCiBpbnQKIGNmY2xvc2UoY2ZwICpmcCkKIHsKLQlpbnQJCQlyZXN1bHQ7 CisJaW50CQkJcmV0ID0gMDsKIAogCWlmIChmcCA9PSBOVUxMKQogCXsKIAkJZXJybm8gPSBFQkFE RjsKIAkJcmV0dXJuIEVPRjsKIAl9Ci0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVz c2VkZnApCisKKwlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKIAl7Ci0J CXJlc3VsdCA9IGd6Y2xvc2UoZnAtPmNvbXByZXNzZWRmcCk7Ci0JCWZwLT5jb21wcmVzc2VkZnAg PSBOVUxMOwotCX0KLQllbHNlCisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKKwkJCXJldCA9 IGZjbG9zZSgoRklMRSAqKSBmcC0+ZnApOworCQkJZnAtPmZwID0gTlVMTDsKKworCQkJYnJlYWs7 CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKyNpZmRlZiBIQVZFX0xJQloKKwkJCXJldCA9 IGd6Y2xvc2UoKGd6RmlsZSkgZnAtPmZwKTsKKwkJCWZwLT5mcCA9IE5VTEw7CisjZWxzZQorCQkJ cGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVz IiwKKwkJCQkJImd6aXAiKTsKICNlbmRpZgotCXsKLQkJcmVzdWx0ID0gZmNsb3NlKGZwLT51bmNv bXByZXNzZWRmcCk7Ci0JCWZwLT51bmNvbXByZXNzZWRmcCA9IE5VTEw7CisJCQlicmVhazsKKwkJ Y2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAl cyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKKwkJCWJyZWFrOworCQljYXNlIFBHX0NP TVBSRVNTSU9OX1pTVEQ6CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3Qg eWV0IHN1cHBvcnRlZCIsICJaU1REIik7CisJCQlicmVhazsKIAl9CisKIAlmcmVlX2tlZXBfZXJy bm8oZnApOwogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQKIGNmZW9m KGNmcCAqZnApCiB7CisJaW50CQkJcmV0ID0gMDsKKworCXN3aXRjaCAoZnAtPmNvbXByZXNzaW9u X3NwZWMuYWxnb3JpdGhtKQorCXsKKwkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgorCQkJcmV0 ID0gZmVvZigoRklMRSAqKSBmcC0+ZnApOworCisJCQlicmVhazsKKwkJY2FzZSBQR19DT01QUkVT U0lPTl9HWklQOgogI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCQly ZXR1cm4gZ3plb2YoZnAtPmNvbXByZXNzZWRmcCk7Ci0JZWxzZQorCQkJcmV0ID0gZ3plb2YoKGd6 RmlsZSkgZnAtPmZwKTsKKyNlbHNlCisJCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBz dXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAorCQkJCQkiZ3ppcCIpOwogI2VuZGlmCi0JCXJl dHVybiBmZW9mKGZwLT51bmNvbXByZXNzZWRmcCk7CisJCQlicmVhazsKKwkJY2FzZSBQR19DT01Q UkVTU0lPTl9MWjQ6CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0 IHN1cHBvcnRlZCIsICJMWjQiKTsKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pT VEQ6CisJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRl ZCIsICJaU1REIik7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBjb25zdCBj aGFyICoKIGdldF9jZnBfZXJyb3IoY2ZwICpmcCkKIHsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAo ZnAtPmNvbXByZXNzZWRmcCkKKwlpZiAoZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09 IFBHX0NPTVBSRVNTSU9OX0daSVApCiAJeworI2lmZGVmIEhBVkVfTElCWgogCQlpbnQJCQllcnJu dW07Ci0JCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZnAtPmNvbXByZXNzZWRmcCwgJmVy cm51bSk7CisJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoKGd6RmlsZSkgZnAtPmZwLCAm ZXJybnVtKTsKIAogCQlpZiAoZXJybnVtICE9IFpfRVJSTk8pCiAJCQlyZXR1cm4gZXJybXNnOwot CX0KKyNlbHNlCisJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJl c3Npb24gd2l0aCAlcyIsICJnemlwIik7CiAjZW5kaWYKKwl9CisKIAlyZXR1cm4gc3RyZXJyb3Io ZXJybm8pOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggN2Y3YTBm MWNlNy4uZmI5NDMxN2FkOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAt MzEsNiArMzEsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5j bHVkZSAiY29tcHJlc3NfaW8uaCIKICNpbmNsdWRlICJkdW1wdXRpbHMuaCIKICNpbmNsdWRlICJm ZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgpAQCAt NDMsMTMgKzQ0LDYgQEAKICNkZWZpbmUgVEVYVF9EVU1QX0hFQURFUiAiLS1cbi0tIFBvc3RncmVT UUwgZGF0YWJhc2UgZHVtcFxuLS1cblxuIgogI2RlZmluZSBURVhUX0RVTVBBTExfSEVBREVSICIt LVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIKIAotLyogc3Rh dGUgbmVlZGVkIHRvIHNhdmUvcmVzdG9yZSBhbiBhcmNoaXZlJ3Mgb3V0cHV0IHRhcmdldCAqLwot dHlwZWRlZiBzdHJ1Y3QgX291dHB1dENvbnRleHQKLXsKLQl2b2lkCSAgICpPRjsKLQlpbnQJCQln ek91dDsKLX0gT3V0cHV0Q29udGV4dDsKLQogLyoKICAqIFN0YXRlIGZvciB0cmFja2luZyBUb2NF bnRyeXMgdGhhdCBhcmUgcmVhZHkgdG8gcHJvY2VzcyBkdXJpbmcgYSBwYXJhbGxlbAogICogcmVz dG9yZS4gIChUaGlzIHVzZWQgdG8gYmUgYSBsaXN0LCBhbmQgd2Ugc3RpbGwgY2FsbCBpdCB0aGF0 LCB0aG91Z2ggbm93CkBAIC0xMDEsOCArOTUsOCBAQCBzdGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihB cmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0YW1wKEFyY2hpdmVIYW5k bGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkJICBjb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotc3RhdGljIE91 dHB1dENvbnRleHQgU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7Ci1zdGF0aWMgdm9pZCBS ZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBPdXRwdXRDb250ZXh0IHNhdmVkQ29udGV4 dCk7CitzdGF0aWMgY2ZwICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKK3N0YXRpYyB2 b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNmcCAqc2F2ZWRPdXRwdXQpOwog CiBzdGF0aWMgaW50CXJlc3RvcmVfdG9jX2VudHJ5KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRy eSAqdGUsIGJvb2wgaXNfcGFyYWxsZWwpOwogc3RhdGljIHZvaWQgcmVzdG9yZV90b2NfZW50cmll c19wcmVmb3JrKEFyY2hpdmVIYW5kbGUgKkFILApAQCAtMjc3LDExICsyNzEsOCBAQCBDbG9zZUFy Y2hpdmUoQXJjaGl2ZSAqQUhYKQogCUFILT5DbG9zZVB0cihBSCk7CiAKIAkvKiBDbG9zZSB0aGUg b3V0cHV0ICovCi0JZXJybm8gPSAwOwkJCQkJLyogaW4gY2FzZSBnemNsb3NlKCkgZG9lc24ndCBz ZXQgaXQgKi8KLQlpZiAoQUgtPmd6T3V0KQotCQlyZXMgPSBHWkNMT1NFKEFILT5PRik7Ci0JZWxz ZSBpZiAoQUgtPk9GICE9IHN0ZG91dCkKLQkJcmVzID0gZmNsb3NlKEFILT5PRik7CisJZXJybm8g PSAwOworCXJlcyA9IGNmY2xvc2UoQUgtPk9GKTsKIAogCWlmIChyZXMgIT0gMCkKIAkJcGdfZmF0 YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKQEAgLTM2Miw4ICszNTMsOSBA QCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJQXJjaGl2ZUhhbmRsZSAqQUggPSAoQXJj aGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBBSC0+cHVibGljLnJv cHQ7CiAJYm9vbAkJcGFyYWxsZWxfbW9kZTsKKwlib29sCQlzdXBwb3J0c19jb21wcmVzc2lvbjsK IAlUb2NFbnRyeSAgICp0ZTsKLQlPdXRwdXRDb250ZXh0IHNhdjsKKwljZnAJCSAgICpzYXY7CiAK IAlBSC0+c3RhZ2UgPSBTVEFHRV9JTklUSUFMSVpJTkc7CiAKQEAgLTM5MSwxNyArMzgzLDI0IEBA IFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkvKgogCSAqIE1ha2Ugc3VyZSB3ZSB3b24n dCBuZWVkIChkZSljb21wcmVzc2lvbiB3ZSBoYXZlbid0IGdvdAogCSAqLwotI2lmbmRlZiBIQVZF X0xJQloKLQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNT SU9OX0daSVAgJiYKKwlzdXBwb3J0c19jb21wcmVzc2lvbiA9IHRydWU7CisJaWYgKEFILT5jb21w cmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9OT05FICYmCisJCUFILT5j b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQICYmCiAJCUFI LT5QcmludFRvY0RhdGFQdHIgIT0gTlVMTCkKIAl7CiAJCWZvciAodGUgPSBBSC0+dG9jLT5uZXh0 OyB0ZSAhPSBBSC0+dG9jOyB0ZSA9IHRlLT5uZXh0KQogCQl7CiAJCQlpZiAodGUtPmhhZER1bXBl ciAmJiAodGUtPnJlcXMgJiBSRVFfREFUQSkgIT0gMCkKLQkJCQlwZ19mYXRhbCgiY2Fubm90IHJl c3RvcmUgZnJvbSBjb21wcmVzc2VkIGFyY2hpdmUgKGNvbXByZXNzaW9uIG5vdCBzdXBwb3J0ZWQg aW4gdGhpcyBpbnN0YWxsYXRpb24pIik7CisJCQl7CisjaWZuZGVmIEhBVkVfTElCWgorCQkJCWlm IChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkK KwkJCQkJc3VwcG9ydHNfY29tcHJlc3Npb24gPSBmYWxzZTsKKyNlbmRpZgorCQkJCWlmIChzdXBw b3J0c19jb21wcmVzc2lvbiA9PSBmYWxzZSkKKwkJCQkJcGdfZmF0YWwoImNhbm5vdCByZXN0b3Jl IGZyb20gY29tcHJlc3NlZCBhcmNoaXZlIChjb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkIGluIHRo aXMgaW5zdGFsbGF0aW9uKSIpOworCQkJfQogCQl9CiAJfQotI2VuZGlmCiAKIAkvKgogCSAqIFBy ZXBhcmUgaW5kZXggYXJyYXlzLCBzbyB3ZSBjYW4gYXNzdW1lIHdlIGhhdmUgdGhlbSB0aHJvdWdo b3V0IHJlc3RvcmUuCkBAIC0xMTI4LDcgKzExMjcsNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2 ZSAqQUhYKQogCVRvY0VudHJ5ICAgKnRlOwogCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gb3V0 X2NvbXByZXNzaW9uX3NwZWMgPSB7MH07CiAJdGVTZWN0aW9uCWN1clNlY3Rpb247Ci0JT3V0cHV0 Q29udGV4dCBzYXY7CisJY2ZwCQkgICAqc2F2OwogCWNvbnN0IGNoYXIgKmZtdE5hbWU7CiAJY2hh cgkJc3RhbXBfc3RyWzY0XTsKIApAQCAtMTUwMyw1OCArMTUwMiwzMiBAQCBzdGF0aWMgdm9pZAog U2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJICBj b25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiB7Ci0JaW50 CQkJZm47CisJY29uc3QgY2hhciAqbW9kZTsKKwlpbnQJCQlmbiA9IC0xOwogCiAJaWYgKGZpbGVu YW1lKQogCXsKIAkJaWYgKHN0cmNtcChmaWxlbmFtZSwgIi0iKSA9PSAwKQogCQkJZm4gPSBmaWxl bm8oc3Rkb3V0KTsKLQkJZWxzZQotCQkJZm4gPSAtMTsKIAl9CiAJZWxzZSBpZiAoQUgtPkZIKQog CQlmbiA9IGZpbGVubyhBSC0+RkgpOwogCWVsc2UgaWYgKEFILT5mU3BlYykKIAl7Ci0JCWZuID0g LTE7CiAJCWZpbGVuYW1lID0gQUgtPmZTcGVjOwogCX0KIAllbHNlCiAJCWZuID0gZmlsZW5vKHN0 ZG91dCk7CiAKLQkvKiBJZiBjb21wcmVzc2lvbiBleHBsaWNpdGx5IHJlcXVlc3RlZCwgdXNlIGd6 b3BlbiAqLwotI2lmZGVmIEhBVkVfTElCWgotCWlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQotCXsKLQkJY2hhcgkJZm1vZGVbMTRdOworCWlmIChB SC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKKwkJbW9kZSA9IFBHX0JJTkFSWV9BOworCWVsc2UK KwkJbW9kZSA9IFBHX0JJTkFSWV9XOwogCi0JCS8qIERvbid0IHVzZSBQR19CSU5BUllfeCBzaW5j ZSB0aGlzIGlzIHpsaWIgKi8KLQkJc3ByaW50ZihmbW9kZSwgIndiJWQiLCBjb21wcmVzc2lvbl9z cGVjLmxldmVsKTsKLQkJaWYgKGZuID49IDApCi0JCQlBSC0+T0YgPSBnemRvcGVuKGR1cChmbiks IGZtb2RlKTsKLQkJZWxzZQotCQkJQUgtPk9GID0gZ3pvcGVuKGZpbGVuYW1lLCBmbW9kZSk7Ci0J CUFILT5nek91dCA9IDE7Ci0JfQorCWlmIChmbiA+PSAwKQorCQlBSC0+T0YgPSBjZmRvcGVuKGR1 cChmbiksIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwogCWVsc2UKLSNlbmRpZgotCXsJCQkJCQkJ LyogVXNlIGZvcGVuICovCi0JCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKLQkJewot CQkJaWYgKGZuID49IDApCi0JCQkJQUgtPk9GID0gZmRvcGVuKGR1cChmbiksIFBHX0JJTkFSWV9B KTsKLQkJCWVsc2UKLQkJCQlBSC0+T0YgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX0EpOwot CQl9Ci0JCWVsc2UKLQkJewotCQkJaWYgKGZuID49IDApCi0JCQkJQUgtPk9GID0gZmRvcGVuKGR1 cChmbiksIFBHX0JJTkFSWV9XKTsKLQkJCWVsc2UKLQkJCQlBSC0+T0YgPSBmb3BlbihmaWxlbmFt ZSwgUEdfQklOQVJZX1cpOwotCQl9Ci0JCUFILT5nek91dCA9IDA7Ci0JfQorCQlBSC0+T0YgPSBj Zm9wZW4oZmlsZW5hbWUsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwogCiAJaWYgKCFBSC0+T0Yp CiAJewpAQCAtMTU2NSwzMyArMTUzOCwyNCBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgs IGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCX0KIH0KIAotc3RhdGljIE91dHB1dENvbnRleHQKK3N0 YXRpYyBjZnAgKgogU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCkKIHsKLQlPdXRwdXRDb250 ZXh0IHNhdjsKLQotCXNhdi5PRiA9IEFILT5PRjsKLQlzYXYuZ3pPdXQgPSBBSC0+Z3pPdXQ7Ci0K LQlyZXR1cm4gc2F2OworCXJldHVybiAoY2ZwICopIEFILT5PRjsKIH0KIAogc3RhdGljIHZvaWQK LVJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIE91dHB1dENvbnRleHQgc2F2ZWRDb250 ZXh0KQorUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY2ZwICpzYXZlZE91dHB1dCkK IHsKIAlpbnQJCQlyZXM7CiAKLQllcnJubyA9IDA7CQkJCQkvKiBpbiBjYXNlIGd6Y2xvc2UoKSBk b2Vzbid0IHNldCBpdCAqLwotCWlmIChBSC0+Z3pPdXQpCi0JCXJlcyA9IEdaQ0xPU0UoQUgtPk9G KTsKLQllbHNlCi0JCXJlcyA9IGZjbG9zZShBSC0+T0YpOworCWVycm5vID0gMDsKKwlyZXMgPSBj ZmNsb3NlKEFILT5PRik7CiAKIAlpZiAocmVzICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg Y2xvc2Ugb3V0cHV0IGZpbGU6ICVtIik7CiAKLQlBSC0+Z3pPdXQgPSBzYXZlZENvbnRleHQuZ3pP dXQ7Ci0JQUgtPk9GID0gc2F2ZWRDb250ZXh0Lk9GOworCUFILT5PRiA9IHNhdmVkT3V0cHV0Owog fQogCiAKQEAgLTE3MTUsMjIgKzE2NzksMTcgQEAgYWh3cml0ZShjb25zdCB2b2lkICpwdHIsIHNp emVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJCWJ5dGVzX3dy aXR0ZW4gPSBzaXplICogbm1lbWI7CiAJfQotCWVsc2UgaWYgKEFILT5nek91dCkKLQkJYnl0ZXNf d3JpdHRlbiA9IEdaV1JJVEUocHRyLCBzaXplLCBubWVtYiwgQUgtPk9GKTsKIAllbHNlIGlmIChB SC0+Q3VzdG9tT3V0UHRyKQogCQlieXRlc193cml0dGVuID0gQUgtPkN1c3RvbU91dFB0cihBSCwg cHRyLCBzaXplICogbm1lbWIpOwogCisJLyoKKwkgKiBJZiB3ZSdyZSBkb2luZyBhIHJlc3RvcmUs IGFuZCBpdCdzIGRpcmVjdCB0byBEQiwgYW5kIHdlJ3JlIGNvbm5lY3RlZAorCSAqIHRoZW4gc2Vu ZCBpdCB0byB0aGUgREIuCisJICovCisJZWxzZSBpZiAoUmVzdG9yaW5nVG9EQihBSCkpCisJCWJ5 dGVzX3dyaXR0ZW4gPSBFeGVjdXRlU3FsQ29tbWFuZEJ1ZigmQUgtPnB1YmxpYywgKGNvbnN0IGNo YXIgKikgcHRyLCBzaXplICogbm1lbWIpOwogCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIElmIHdlJ3Jl IGRvaW5nIGEgcmVzdG9yZSwgYW5kIGl0J3MgZGlyZWN0IHRvIERCLCBhbmQgd2UncmUKLQkJICog Y29ubmVjdGVkIHRoZW4gc2VuZCBpdCB0byB0aGUgREIuCi0JCSAqLwotCQlpZiAoUmVzdG9yaW5n VG9EQihBSCkpCi0JCQlieXRlc193cml0dGVuID0gRXhlY3V0ZVNxbENvbW1hbmRCdWYoJkFILT5w dWJsaWMsIChjb25zdCBjaGFyICopIHB0ciwgc2l6ZSAqIG5tZW1iKTsKLQkJZWxzZQotCQkJYnl0 ZXNfd3JpdHRlbiA9IGZ3cml0ZShwdHIsIHNpemUsIG5tZW1iLCBBSC0+T0YpICogc2l6ZTsKLQl9 CisJCWJ5dGVzX3dyaXR0ZW4gPSBjZndyaXRlKHB0ciwgc2l6ZSAqIG5tZW1iLCBBSC0+T0YpOwog CiAJaWYgKGJ5dGVzX3dyaXR0ZW4gIT0gc2l6ZSAqIG5tZW1iKQogCQlXUklURV9FUlJPUl9FWElU OwpAQCAtMjIxOSw2ICsyMTc4LDcgQEAgX2FsbG9jQUgoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNv bnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCQkgU2V0dXBXb3JrZXJQdHJUeXBlIHNldHVwV29ya2Vy UHRyKQogewogCUFyY2hpdmVIYW5kbGUgKkFIOworCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24g b3V0X2NvbXByZXNzX3NwZWMgPSB7MH07CiAKIAlwZ19sb2dfZGVidWcoImFsbG9jYXRpbmcgQUgg Zm9yICVzLCBmb3JtYXQgJWQiLAogCQkJCSBGaWxlU3BlYyA/IEZpbGVTcGVjIDogIihzdGRpbyki LCBmbXQpOwpAQCAtMjI3Miw4ICsyMjMyLDggQEAgX2FsbG9jQUgoY29uc3QgY2hhciAqRmlsZVNw ZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCW1lbXNldCgmKEFILT5zcWxwYXJzZSksIDAs IHNpemVvZihBSC0+c3FscGFyc2UpKTsKIAogCS8qIE9wZW4gc3Rkb3V0IHdpdGggbm8gY29tcHJl c3Npb24gZm9yIEFIIG91dHB1dCBoYW5kbGUgKi8KLQlBSC0+Z3pPdXQgPSAwOwotCUFILT5PRiA9 IHN0ZG91dDsKKwlvdXRfY29tcHJlc3Nfc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9O T05FOworCUFILT5PRiA9IGNmZG9wZW4oZHVwKGZpbGVubyhzdGRvdXQpKSwgUEdfQklOQVJZX0Es IG91dF9jb21wcmVzc19zcGVjKTsKIAogCS8qCiAJICogT24gV2luZG93cywgd2UgbmVlZCB0byB1 c2UgYmluYXJ5IG1vZGUgdG8gcmVhZC93cml0ZSBub24tdGV4dCBmaWxlcywKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCBiL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuaAppbmRleCBmNzI0NDZlZDViLi40NzI1ZTQ5NzQ3IDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC0zMiwzMCArMzIsNiBAQAogCiAjZGVmaW5l IExPQkJVRlNJWkUgMTYzODQKIAotI2lmZGVmIEhBVkVfTElCWgotI2luY2x1ZGUgPHpsaWIuaD4K LSNkZWZpbmUgR1pDTE9TRShmaCkgZ3pjbG9zZShmaCkKLSNkZWZpbmUgR1pXUklURShwLCBzLCBu LCBmaCkgZ3p3cml0ZShmaCwgcCwgKG4pICogKHMpKQotI2RlZmluZSBHWlJFQUQocCwgcywgbiwg ZmgpIGd6cmVhZChmaCwgcCwgKG4pICogKHMpKQotI2RlZmluZSBHWkVPRihmaCkJZ3plb2YoZmgp Ci0jZWxzZQotI2RlZmluZSBHWkNMT1NFKGZoKSBmY2xvc2UoZmgpCi0jZGVmaW5lIEdaV1JJVEUo cCwgcywgbiwgZmgpIChmd3JpdGUocCwgcywgbiwgZmgpICogKHMpKQotI2RlZmluZSBHWlJFQUQo cCwgcywgbiwgZmgpIGZyZWFkKHAsIHMsIG4sIGZoKQotI2RlZmluZSBHWkVPRihmaCkJZmVvZihm aCkKLS8qIHRoaXMgaXMganVzdCB0aGUgcmVkZWZpbml0aW9uIG9mIGEgbGlieiBjb25zdGFudCAq LwotI2RlZmluZSBaX0RFRkFVTFRfQ09NUFJFU1NJT04gKC0xKQotCi10eXBlZGVmIHN0cnVjdCBf el9zdHJlYW0KLXsKLQl2b2lkCSAgICpuZXh0X2luOwotCXZvaWQJICAgKm5leHRfb3V0OwotCXNp emVfdAkJYXZhaWxfaW47Ci0Jc2l6ZV90CQlhdmFpbF9vdXQ7Ci19IHpfc3RyZWFtOwotdHlwZWRl ZiB6X3N0cmVhbSAqel9zdHJlYW1wOwotI2VuZGlmCi0KIC8qIERhdGEgYmxvY2sgdHlwZXMgKi8K ICNkZWZpbmUgQkxLX0RBVEEgMQogI2RlZmluZSBCTEtfQkxPQlMgMwpAQCAtMzE5LDggKzI5NSw3 IEBAIHN0cnVjdCBfYXJjaGl2ZUhhbmRsZQogCiAJY2hhcgkgICAqZlNwZWM7CQkJLyogQXJjaGl2 ZSBGaWxlIFNwZWMgKi8KIAlGSUxFCSAgICpGSDsJCQkJLyogR2VuZXJhbCBwdXJwb3NlIGZpbGUg aGFuZGxlICovCi0Jdm9pZAkgICAqT0Y7Ci0JaW50CQkJZ3pPdXQ7CQkJLyogT3V0cHV0IGZpbGUg Ki8KKwl2b2lkCSAgICpPRjsJCQkJLyogT3V0cHV0IGZpbGUgKi8KIAogCXN0cnVjdCBfdG9jRW50 cnkgKnRvYzsJCS8qIEhlYWRlciBvZiBjaXJjdWxhciBsaXN0IG9mIFRPQyBlbnRyaWVzICovCiAJ aW50CQkJdG9jQ291bnQ7CQkvKiBOdW1iZXIgb2YgVE9DIGVudHJpZXMgKi8KLS0gCjIuMzQuMQoK --b1_hAgeT0CwQJ3z6UK6simdJIGH97uJztQ45k0HaIBc8 Content-Type: text/x-patch; name=v20-0003-THIS-IS-WIP-PATCH-PRESENTED-HERE-FOR-COMPLETENES.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v20-0003-THIS-IS-WIP-PATCH-PRESENTED-HERE-FOR-COMPLETENES.patch RnJvbSAzYzdlNWI4ZWJlM2M0ZDA2M2Y4ZDI4MWE0YzlkODU0ZmVmNjU3OGIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMTU6MDE6MDUgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy MCAzLzNdIFRISVMgSVMgV0lQIFBBVENIIFBSRVNFTlRFRCBIRVJFIEZPUiBDT01QTEVURU5FU1M6 CiBMWjQgY29tcHJlc3Npb24KClBsZWFzZSBiZSBhd2FyZSB0aGF0IGNvbW1lbnRzLCByZWZlcmVu Y2VzLCBuYW1pbmcsIGV0YywgYXJlIG5vdCBzY3J1dGluaXplZC4KVGhvc2Ugd2lsbCBiZSBhZGRy ZXNzZWQgb25jZSAwMDAxIG9mIHRoZSBzZXJpZXMgaXMgZ2V0dGluZyBjbG9zZXIgdG8gYQpjb21t aXRhYmxlIHN0YXRlLiBIb3dldmVyIHRoZSBwYXRjaCBzaG91bGQgYXBwbHkgY2xlYW5seSBhbmQg dGhlIHRlc3RzIHNob3VsZApiZSBwYXNzaW5nLgoKV2l0aGluIGNvbXByZXNzX2x6NC57YyxofSB0 aGUgc3RyZWFtaW5nIEFQSSBhbmQgYSBmaWxlIEFQSSBjb21wcmVzc2lvbiBpcwppbXBsZW1lbnRl ZC4uIFRoZSBmaXJzdCBvbmUsIGlzIGFpbWVkIGF0IGlubGluZWQgdXNlIGNhc2VzIGFuZCB0aHVz IHNpbXBsZQpsejQuaCBjYWxscyBjYW4gYmUgdXNlZCBkaXJlY3RseS4gVGhlIHNlY29uZCBvbmUg aXMgZ2VuZXJhdGluZyBvdXRwdXQsIG9yIGlzCnBhcnNpbmcgaW5wdXQsIHdoaWNoIGNhbiBiZSBy ZWFkL2dlbmVyYXRlZCB2aWEgdGhlIGx6NCB1dGlsaXR5LgoKV2hlcmV2ZXIgdGhlIExaNEYgYXBp IGRvZXMgbm90IGltcGxlbWVudCBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkgY29ycmVzcG9uZGluZwp0 byBmcmVhZCgpLCBmd3JpdGUoKSwgZmdldHMoKSwgZmdldGMoKSwgZmVvZigpLCBhbmQgZmNsb3Nl KCksIGl0IGhhcyBiZWVuCmltcGxlbWVudGVkIGxvY2FseS4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVm L3BnX2R1bXAuc2dtbCAgICAgICAgfCAgMTMgKy0KIHNyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSAg ICAgICAgICAgICB8ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYyAgICAgICAg fCAgMTEgKy0KIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuYyAgICAgICB8IDYxOCArKysr KysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19sejQuaCAg ICAgICB8ICAyMiArCiBzcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDgg Ky0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyB8ICAxNCArLQogc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmluL3BnX2R1bXAv dC8wMDJfcGdfZHVtcC5wbCAgICAgfCAgODIgKysrLQogc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1 c3BsdXNjaGVjayAgIHwgICAxICsKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAg ICB8ICAgMSArCiAxMSBmaWxlcyBjaGFuZ2VkLCA3NTYgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oCgpkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVm L3BnX2R1bXAuc2dtbAppbmRleCAyYzkzOGNkN2UxLi40OWQyMTg5MDVmIDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1 bXAuc2dtbApAQCAtMzMwLDkgKzMzMCwxMCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAg ICAgICAgICAgbWFjaGluZS1yZWFkYWJsZSBmb3JtYXQgdGhhdCA8YXBwbGljYXRpb24+cGdfcmVz dG9yZTwvYXBwbGljYXRpb24+CiAgICAgICAgICAgIGNhbiByZWFkLiBBIGRpcmVjdG9yeSBmb3Jt YXQgYXJjaGl2ZSBjYW4gYmUgbWFuaXB1bGF0ZWQgd2l0aAogICAgICAgICAgICBzdGFuZGFyZCBV bml4IHRvb2xzOyBmb3IgZXhhbXBsZSwgZmlsZXMgaW4gYW4gdW5jb21wcmVzc2VkIGFyY2hpdmUK LSAgICAgICAgICAgY2FuIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUgPGFwcGxpY2F0aW9uPmd6aXA8 L2FwcGxpY2F0aW9uPiB0b29sLgotICAgICAgICAgICBUaGlzIGZvcm1hdCBpcyBjb21wcmVzc2Vk IGJ5IGRlZmF1bHQgYW5kIGFsc28gc3VwcG9ydHMgcGFyYWxsZWwKLSAgICAgICAgICAgZHVtcHMu CisgICAgICAgICAgIGNhbiBiZSBjb21wcmVzc2VkIHdpdGggdGhlIDxhcHBsaWNhdGlvbj5nemlw PC9hcHBsaWNhdGlvbj4gb3IKKyAgICAgICAgICAgPGFwcGxpY2F0aW9uPmx6NDwvYXBwbGljYXRp b24+dG9vbC4KKyAgICAgICAgICAgVGhpcyBmb3JtYXQgaXMgY29tcHJlc3NlZCBieSBkZWZhdWx0 IHVzaW5nIDxsaXRlcmFsPmd6aXA8L2xpdGVyYWw+CisgICAgICAgICAgIGFuZCBhbHNvIHN1cHBv cnRzIHBhcmFsbGVsIGR1bXBzLgogICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0 ZW0+CiAgICAgICAgIDwvdmFybGlzdGVudHJ5PgpAQCAtNjU0LDcgKzY1NSw3IEBAIFBvc3RncmVT UUwgZG9jdW1lbnRhdGlvbgogICAgICAgIDxwYXJhPgogICAgICAgICBTcGVjaWZ5IHRoZSBjb21w cmVzc2lvbiBtZXRob2QgYW5kL29yIHRoZSBjb21wcmVzc2lvbiBsZXZlbCB0byB1c2UuCiAgICAg ICAgIFRoZSBjb21wcmVzc2lvbiBtZXRob2QgY2FuIGJlIHNldCB0byA8bGl0ZXJhbD5nemlwPC9s aXRlcmFsPiBvcgotICAgICAgICA8bGl0ZXJhbD5ub25lPC9saXRlcmFsPiBmb3Igbm8gY29tcHJl c3Npb24uCisgICAgICAgIDxsaXRlcmFsPmx6NDwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+bm9uZTwv bGl0ZXJhbD4gZm9yIG5vIGNvbXByZXNzaW9uLgogICAgICAgICBBIGNvbXByZXNzaW9uIGRldGFp bCBzdHJpbmcgY2FuIG9wdGlvbmFsbHkgYmUgc3BlY2lmaWVkLiAgSWYgdGhlCiAgICAgICAgIGRl dGFpbCBzdHJpbmcgaXMgYW4gaW50ZWdlciwgaXQgc3BlY2lmaWVzIHRoZSBjb21wcmVzc2lvbiBs ZXZlbC4KICAgICAgICAgT3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYSBjb21tYS1zZXBhcmF0ZWQg bGlzdCBvZiBpdGVtcywgZWFjaCBvZiB0aGUKQEAgLTY3NSw4ICs2NzYsOCBAQCBQb3N0Z3JlU1FM IGRvY3VtZW50YXRpb24KICAgICAgICAgaW5kaXZpZHVhbCB0YWJsZS1kYXRhIHNlZ21lbnRzLCBh bmQgdGhlIGRlZmF1bHQgaXMgdG8gY29tcHJlc3MgdXNpbmcKICAgICAgICAgPGxpdGVyYWw+Z3pp cDwvbGl0ZXJhbD4gYXQgYSBtb2RlcmF0ZSBsZXZlbC4gRm9yIHBsYWluIHRleHQgb3V0cHV0LAog ICAgICAgICBzZXR0aW5nIGEgbm9uemVybyBjb21wcmVzc2lvbiBsZXZlbCBjYXVzZXMgdGhlIGVu dGlyZSBvdXRwdXQgZmlsZSB0byBiZSBjb21wcmVzc2VkLAotICAgICAgICBhcyB0aG91Z2ggaXQg aGFkIGJlZW4gZmVkIHRocm91Z2ggPGFwcGxpY2F0aW9uPmd6aXA8L2FwcGxpY2F0aW9uPjsgYnV0 IHRoZSBkZWZhdWx0Ci0gICAgICAgIGlzIG5vdCB0byBjb21wcmVzcy4KKyAgICAgICAgYXMgdGhv dWdoIGl0IGhhZCBiZWVuIGZlZCB0aHJvdWdoIDxhcHBsaWNhdGlvbj5nemlwPC9hcHBsaWNhdGlv bj4gb3IKKyAgICAgICAgPGFwcGxpY2F0aW9uPmx6NDwvYXBwbGljYXRpb24+OyBidXQgdGhlIGRl ZmF1bHQgaXMgbm90IHRvIGNvbXByZXNzLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4K ICAgICAgICAgVGhlIHRhciBhcmNoaXZlIGZvcm1hdCBjdXJyZW50bHkgZG9lcyBub3Qgc3VwcG9y dCBjb21wcmVzc2lvbiBhdCBhbGwuCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZp bGUgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggN2ExOWY1ZDYxNy4uYTE0MDEzNzdh YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9NYWtlZmlsZQpAQCAtMTcsNiArMTcsNyBAQCB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLgog aW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCiBleHBvcnQgR1pJ UF9QUk9HUkFNPSQoR1pJUCkKK2V4cG9ydCBMWjQKIGV4cG9ydCB3aXRoX2ljdQogCiBvdmVycmlk ZSBDUFBGTEFHUyA6PSAtSSQobGlicHFfc3JjZGlyKSAkKENQUEZMQUdTKQpAQCAtMjUsNiArMjYs NyBAQCBMREZMQUdTX0lOVEVSTkFMICs9IC1MJCh0b3BfYnVpbGRkaXIpL3NyYy9mZV91dGlscyAt bHBnZmV1dGlscyAkKGxpYnBxX3BncG9ydCkKIE9CSlMgPSBcCiAJJChXSU4zMlJFUykgXAogCWNv bXByZXNzX2d6aXAubyBcCisJY29tcHJlc3NfbHo0Lm8gXAogCWNvbXByZXNzX2lvLm8gXAogCWR1 bXB1dGlscy5vIFwKIAlwYXJhbGxlbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19pby5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKaW5kZXggNzI3NDAz OWU4Ny4uNDNiZDRjMWEyYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lv LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTYwLDYgKzYwLDcgQEAK IAogI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCiAjaW5jbHVkZSAiY29tcHJlc3NfZ3ppcC5oIgor I2luY2x1ZGUgImNvbXByZXNzX2x6NC5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgog CiAjaWZkZWYgSEFWRV9MSUJaCkBAIC0xMzYsNyArMTM3LDcgQEAgQWxsb2NhdGVDb21wcmVzc29y KGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKIAkJCUlu aXRDb21wcmVzc29yR3ppcChjcywgY29tcHJlc3Npb25fc3BlYyk7CiAJCQlicmVhazsKIAkJY2Fz ZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBp cyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKKwkJCUluaXRDb21wcmVzc29yTFo0KGNzLCBj b21wcmVzc2lvbl9zcGVjKTsKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6 CiAJCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIs ICJaU1REIik7CkBAIC0zMjYsNyArMzI3LDcgQEAgSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiAJCQlJbml0Q29t cHJlc3NHemlwKENGSCwgY29tcHJlc3Npb25fc3BlYyk7CiAJCQlicmVhazsKIAkJY2FzZSBQR19D T01QUkVTU0lPTl9MWjQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3Qg eWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKKwkJCUluaXRDb21wcmVzc0xaNChDRkgsIGNvbXByZXNz aW9uX3NwZWMpOwogCQkJYnJlYWs7CiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fWlNURDoKIAkJCXBn X2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIlpTVEQi KTsKQEAgLTM0MCwxMiArMzQxLDEyIEBAIEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogICogT3BlbiBhIGZpbGUg Zm9yIHJlYWRpbmcuICdwYXRoJyBpcyB0aGUgZmlsZSB0byBvcGVuLCBhbmQgJ21vZGUnIHNob3Vs ZAogICogYmUgZWl0aGVyICJyIiBvciAicmIiLgogICoKLSAqIElmIHRoZSBmaWxlIGF0ICdwYXRo JyBkb2VzIG5vdCBleGlzdCwgd2UgYXBwZW5kIHRoZSAiey5neiwubHo0fSIgc3VmZml4IChpCisg KiBJZiB0aGUgZmlsZSBhdCAncGF0aCcgZG9lcyBub3QgZXhpc3QsIHdlIGFwcGVuZCB0aGUgIi5n eiIgc3VmZml4IChpZgogICogJ3BhdGgnIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIGl0KSBhbmQgdHJ5 IGFnYWluLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcwotICogJ3BhdGgnLCB0aGlzIHdpbGwgb3Bl biBlaXRoZXIgImZvbyIgb3IgImZvby5neiIgb3IgImZvby5sejQiLCB0cnlpbmcgaW4gdGhhdAot ICogb3JkZXIuCisgKiAncGF0aCcsIHRoaXMgd2lsbCBvcGVuIGVpdGhlciAiZm9vIiBvciAiZm9v Lmd6IiwgdHJ5aW5nIGluIHRoYXQgb3JkZXIuCiAgKgogICogT24gZmFpbHVyZSwgcmV0dXJuIE5V TEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgorICoKICAqLwogQ29tcHJlc3NGaWxlSGFu ZGxlICoKIEluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFyICpwYXRoLCBj b25zdCBjaGFyICptb2RlKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6 NC5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmM5N2UxNjE4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmlu L3BnX2R1bXAvY29tcHJlc3NfbHo0LmMKQEAgLTAsMCArMSw2MTggQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIGNvbXByZXNzX2x6NC5jCisgKgkgUm91dGluZXMgZm9yIGFyY2hpdmVycyB0 byB3cml0ZSBhbiB1bmNvbXByZXNzZWQgb3IgY29tcHJlc3NlZCBkYXRhCisgKgkgc3RyZWFtLgor ICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdl bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElP TgorICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2luY2x1ZGUgInBnX2JhY2t1 cF91dGlscy5oIgorCisjaW5jbHVkZSAiY29tcHJlc3NfbHo0LmgiCisKKyNpZmRlZiBVU0VfTFo0 CisjaW5jbHVkZSA8bHo0Lmg+CisjaW5jbHVkZSA8bHo0ZnJhbWUuaD4KKworI2RlZmluZSBMWjRf T1VUX1NJWkUJKDQgKiAxMDI0KQorI2RlZmluZSBMWjRfSU5fU0laRQkJKDE2ICogMTAyNCkKKwor LyoKKyAqIExaNEZfSEVBREVSX1NJWkVfTUFYIGZpcnN0IGFwcGVhcmVkIGluIHYxLjcuNSBvZiB0 aGUgbGlicmFyeS4KKyAqIFJlZGVmaW5lIGl0IGZvciBpbnN0YWxsYXRpb25zIHdpdGggYSBsZXNz ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBMWjRGX0hFQURFUl9TSVpFX01BWAorI2RlZmluZSBM WjRGX0hFQURFUl9TSVpFX01BWAkzMgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICogQ29tcHJlc3NvciBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3R5 cGVkZWYgc3RydWN0IExaNENvbXByZXNzb3JTdGF0ZQoreworCWNoYXIJICAgKm91dGJ1ZjsKKwlz aXplX3QJCW91dHNpemU7Cit9IExaNENvbXByZXNzb3JTdGF0ZTsKKworLyogUHJpdmF0ZSByb3V0 aW5lcyB0aGF0IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3N0YXRpYyB2b2lk IFJlYWREYXRhRnJvbUFyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0 ZSAqY3MpOworc3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUg KkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNp emVfdCBkTGVuKTsKK3N0YXRpYyB2b2lkIEVuZENvbXByZXNzb3JMWjQoQXJjaGl2ZUhhbmRsZSAq QUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpOworCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJj aGl2ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlMWjRf c3RyZWFtRGVjb2RlX3QgbHo0U3RyZWFtRGVjb2RlOworCWNoYXIJICAgKmJ1ZjsKKwljaGFyCSAg ICpkZWNidWY7CisJc2l6ZV90CQlidWZsZW47CisJc2l6ZV90CQljbnQ7CisKKwlidWZsZW4gPSBM WjRfSU5fU0laRTsKKwlidWYgPSBwZ19tYWxsb2MoYnVmbGVuKTsKKwlkZWNidWYgPSBwZ19tYWxs b2MoYnVmbGVuKTsKKworCUxaNF9zZXRTdHJlYW1EZWNvZGUoJmx6NFN0cmVhbURlY29kZSwgTlVM TCwgMCk7CisKKwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQor CXsKKwkJaW50CQkJZGVjQnl0ZXMgPSBMWjRfZGVjb21wcmVzc19zYWZlX2NvbnRpbnVlKCZsejRT dHJlYW1EZWNvZGUsCisJCQkJCQkJCQkJCQkJCQlidWYsIGRlY2J1ZiwKKwkJCQkJCQkJCQkJCQkJ CWNudCwgYnVmbGVuKTsKKworCQlhaHdyaXRlKGRlY2J1ZiwgMSwgZGVjQnl0ZXMsIEFIKTsKKwl9 CisKKwlwZ19mcmVlKGJ1Zik7CisJcGdfZnJlZShkZWNidWYpOworfQorCitzdGF0aWMgdm9pZAor V3JpdGVEYXRhVG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUg KmNzLAorCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQoreworCUxaNENvbXBy ZXNzb3JTdGF0ZSAqTFo0Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2Rh dGE7CisJc2l6ZV90CQljb21wcmVzc2VkOworCXNpemVfdAkJcmVxdWlyZWRzaXplID0gTFo0X2Nv bXByZXNzQm91bmQoZExlbik7CisKKwlpZiAocmVxdWlyZWRzaXplID4gTFo0Y3MtPm91dHNpemUp CisJeworCQlMWjRjcy0+b3V0YnVmID0gcGdfcmVhbGxvYyhMWjRjcy0+b3V0YnVmLCByZXF1aXJl ZHNpemUpOworCQlMWjRjcy0+b3V0c2l6ZSA9IHJlcXVpcmVkc2l6ZTsKKwl9CisKKwljb21wcmVz c2VkID0gTFo0X2NvbXByZXNzX2RlZmF1bHQoZGF0YSwgTFo0Y3MtPm91dGJ1ZiwKKwkJCQkJCQkJ CSAgZExlbiwgTFo0Y3MtPm91dHNpemUpOworCisJaWYgKGNvbXByZXNzZWQgPD0gMCkKKwkJcGdf ZmF0YWwoImZhaWxlZCB0byBMWjQgY29tcHJlc3MgZGF0YSIpOworCisJY3MtPndyaXRlRihBSCwg TFo0Y3MtPm91dGJ1ZiwgY29tcHJlc3NlZCk7Cit9CisKK3N0YXRpYyB2b2lkCitFbmRDb21wcmVz c29yTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCUxaNENv bXByZXNzb3JTdGF0ZSAqTFo0Y3M7CisKKwlMWjRjcyA9IChMWjRDb21wcmVzc29yU3RhdGUgKikg Y3MtPnByaXZhdGVfZGF0YTsKKwlpZiAoTFo0Y3MpCisJeworCQlwZ19mcmVlKExaNGNzLT5vdXRi dWYpOworCQlwZ19mcmVlKExaNGNzKTsKKwkJY3MtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJfQor fQorCisKKy8qIFB1YmxpYyByb3V0aW5lcyB0aGF0IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0 YSBJL08gKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yTFo0KENvbXByZXNzb3JTdGF0ZSAqY3MsIGNv bnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwljcy0+ cmVhZERhdGEgPSBSZWFkRGF0YUZyb21BcmNoaXZlTFo0OworCWNzLT53cml0ZURhdGEgPSBXcml0 ZURhdGFUb0FyY2hpdmVMWjQ7CisJY3MtPmVuZCA9IEVuZENvbXByZXNzb3JMWjQ7CisKKwljcy0+ Y29tcHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7CisKKwkvKiBXaWxsIGJlIGxhenkg aW5pdCdkICovCisJY3MtPnByaXZhdGVfZGF0YSA9IHBnX21hbGxvYzAoc2l6ZW9mKExaNENvbXBy ZXNzb3JTdGF0ZSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNz IEZpbGUgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogU3RhdGUg bmVlZGVkIGZvciBMWjQgKGRlKWNvbXByZXNzaW9uIHVzaW5nIHRoZSBDb21wcmVzc0ZpbGVIYW5k bGUgQVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBMWjRGaWxlCit7CisJRklMRQkgICAqZnA7CisK KwlMWjRGX3ByZWZlcmVuY2VzX3QgcHJlZnM7CisKKwlMWjRGX2NvbXByZXNzaW9uQ29udGV4dF90 IGN0eDsKKwlMWjRGX2RlY29tcHJlc3Npb25Db250ZXh0X3QgZHR4OworCisJYm9vbAkJaW5pdGVk OworCWJvb2wJCWNvbXByZXNzaW5nOworCisJc2l6ZV90CQlidWZsZW47CisJY2hhcgkgICAqYnVm ZmVyOworCisJc2l6ZV90CQlvdmVyZmxvd2FsbG9jbGVuOworCXNpemVfdAkJb3ZlcmZsb3dsZW47 CisJY2hhcgkgICAqb3ZlcmZsb3didWY7CisKKwlzaXplX3QJCWVycmNvZGU7Cit9CQkJTFo0Rmls ZTsKKworLyoKKyAqIExaNCBlcXVpdmFsZW50IHRvIGZlb2YoKSBvciBnemVvZigpLiBUaGUgZW5k IG9mIGZpbGUKKyAqIGlzIHJlYWNoZWQgaWYgdGhlcmUgaXMgbm8gZGVjb21wcmVzc2VkIG91dHB1 dCBpbiB0aGUKKyAqIG92ZXJmbG93IGJ1ZmZlciBhbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSBpcyBy ZWFjaGVkLgorICovCitzdGF0aWMgaW50CitMWjRGaWxlX2VvZihDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRh OworCisJcmV0dXJuIGZzLT5vdmVyZmxvd2xlbiA9PSAwICYmIGZlb2YoZnMtPmZwKTsKK30KKwor c3RhdGljIGNvbnN0IGNoYXIgKgorTFo0RmlsZV9nZXRfZXJyb3IoQ29tcHJlc3NGaWxlSGFuZGxl ICpDRkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0 YTsKKwljb25zdCBjaGFyICplcnJtc2c7CisKKwlpZiAoTFo0Rl9pc0Vycm9yKGZzLT5lcnJjb2Rl KSkKKwkJZXJybXNnID0gTFo0Rl9nZXRFcnJvck5hbWUoZnMtPmVycmNvZGUpOworCWVsc2UKKwkJ ZXJybXNnID0gc3RyZXJyb3IoZXJybm8pOworCisJcmV0dXJuIGVycm1zZzsKK30KKworLyoKKyAq IFByZXBhcmUgYW4gYWxyZWFkeSBhbGxvYydlZCBMWjRGaWxlIHN0cnVjdCBmb3Igc3Vic2VxdWVu dCBjYWxscy4KKyAqCisgKiBJdCBjcmVhdGVzIHRoZSBuZXNzYXJ5IGNvbnRleHRzIGZvciB0aGUg b3BlcmF0aW9ucy4gV2hlbiBjb21wcmVzc2luZywKKyAqIGl0IGFkZGl0aW9uYWxseSB3cml0ZXMg dGhlIExaNCBoZWFkZXIgaW4gdGhlIG91dHB1dCBzdHJlYW0uCisgKi8KK3N0YXRpYyBpbnQKK0xa NEZpbGVfaW5pdChMWjRGaWxlICogZnMsIGludCBzaXplLCBib29sIGNvbXByZXNzaW5nKQorewor CXNpemVfdAkJc3RhdHVzOworCisJaWYgKGZzLT5pbml0ZWQpCisJCXJldHVybiAwOworCisJZnMt PmNvbXByZXNzaW5nID0gY29tcHJlc3Npbmc7CisJZnMtPmluaXRlZCA9IHRydWU7CisKKwlpZiAo ZnMtPmNvbXByZXNzaW5nKQorCXsKKwkJZnMtPmJ1ZmxlbiA9IExaNEZfY29tcHJlc3NCb3VuZChM WjRfSU5fU0laRSwgJmZzLT5wcmVmcyk7CisJCWlmIChmcy0+YnVmbGVuIDwgTFo0Rl9IRUFERVJf U0laRV9NQVgpCisJCQlmcy0+YnVmbGVuID0gTFo0Rl9IRUFERVJfU0laRV9NQVg7CisKKwkJc3Rh dHVzID0gTFo0Rl9jcmVhdGVDb21wcmVzc2lvbkNvbnRleHQoJmZzLT5jdHgsIExaNEZfVkVSU0lP Tik7CisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBz dGF0dXM7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWZzLT5idWZmZXIgPSBwZ19tYWxsb2MoZnMt PmJ1Zmxlbik7CisJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NCZWdpbihmcy0+Y3R4LCBmcy0+YnVm ZmVyLCBmcy0+YnVmbGVuLAorCQkJCQkJCQkJJmZzLT5wcmVmcyk7CisKKwkJaWYgKExaNEZfaXNF cnJvcihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJCXJldHVybiAx OworCQl9CisKKwkJaWYgKGZ3cml0ZShmcy0+YnVmZmVyLCAxLCBzdGF0dXMsIGZzLT5mcCkgIT0g c3RhdHVzKQorCQl7CisJCQllcnJubyA9IGVycm5vID8gOiBFTk9TUEM7CisJCQlyZXR1cm4gMTsK KwkJfQorCX0KKwllbHNlCisJeworCQlzdGF0dXMgPSBMWjRGX2NyZWF0ZURlY29tcHJlc3Npb25D b250ZXh0KCZmcy0+ZHR4LCBMWjRGX1ZFUlNJT04pOworCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1 cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJcmV0dXJuIDE7CisJCX0KKwor CQlmcy0+YnVmbGVuID0gc2l6ZSA+IExaNF9PVVRfU0laRSA/IHNpemUgOiBMWjRfT1VUX1NJWkU7 CisJCWZzLT5idWZmZXIgPSBwZ19tYWxsb2MoZnMtPmJ1Zmxlbik7CisKKwkJZnMtPm92ZXJmbG93 YWxsb2NsZW4gPSBmcy0+YnVmbGVuOworCQlmcy0+b3ZlcmZsb3didWYgPSBwZ19tYWxsb2MoZnMt Pm92ZXJmbG93YWxsb2NsZW4pOworCQlmcy0+b3ZlcmZsb3dsZW4gPSAwOworCX0KKworCXJldHVy biAwOworfQorCisvKgorICogUmVhZCBhbHJlYWR5IGRlY29tcHJlc3NlZCBjb250ZW50IGZyb20g dGhlIG92ZXJmbG93IGJ1ZmZlciBpbnRvICdwdHInIHVwIHRvCisgKiAnc2l6ZScgYnl0ZXMsIGlm IGF2YWlsYWJsZS4gSWYgdGhlIGVvbF9mbGFnIGlzIHNldCwgdGhlbiBzdG9wIGF0IHRoZSBmaXJz dAorICogb2NjdXJhbmNlIG9mIHRoZSBuZXcgbGluZSBjaGFyIHByaW9yIHRvICdzaXplJyBieXRl cy4KKyAqCisgKiBBbnkgdW5yZWFkIGNvbnRlbnQgaW4gdGhlIG92ZXJmbG93IGJ1ZmZlciwgaXMg bW92ZWQgdG8gdGhlIGJlZ2lubmluZy4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9yZWFkX292 ZXJmbG93KExaNEZpbGUgKiBmcywgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgYm9vbCBlb2xfZmxhZykK K3sKKwljaGFyCSAgICpwOworCWludAkJCXJlYWRsZW4gPSAwOworCisJaWYgKGZzLT5vdmVyZmxv d2xlbiA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChmcy0+b3ZlcmZsb3dsZW4gPj0gc2l6ZSkK KwkJcmVhZGxlbiA9IHNpemU7CisJZWxzZQorCQlyZWFkbGVuID0gZnMtPm92ZXJmbG93bGVuOwor CisJaWYgKGVvbF9mbGFnICYmIChwID0gbWVtY2hyKGZzLT5vdmVyZmxvd2J1ZiwgJ1xuJywgcmVh ZGxlbikpKQorCQkvKiBJbmNsdWRlIHRoZSBsaW5lIHRlcm1pbmF0aW5nIGNoYXIgKi8KKwkJcmVh ZGxlbiA9IHAgLSBmcy0+b3ZlcmZsb3didWYgKyAxOworCisJbWVtY3B5KHB0ciwgZnMtPm92ZXJm bG93YnVmLCByZWFkbGVuKTsKKwlmcy0+b3ZlcmZsb3dsZW4gLT0gcmVhZGxlbjsKKworCWlmIChm cy0+b3ZlcmZsb3dsZW4gPiAwKQorCQltZW1tb3ZlKGZzLT5vdmVyZmxvd2J1ZiwgZnMtPm92ZXJm bG93YnVmICsgcmVhZGxlbiwgZnMtPm92ZXJmbG93bGVuKTsKKworCXJldHVybiByZWFkbGVuOwor fQorCisvKgorICogVGhlIHdvcmtob3JzZSBmb3IgcmVhZGluZyBkZWNvbXByZXNzZWQgY29udGVu dCBvdXQgb2YgYW4gTFo0IGNvbXByZXNzZWQKKyAqIHN0cmVhbS4KKyAqCisgKiBJdCB3aWxsIHJl YWQgdXAgdG8gJ3B0cnNpemUnIGRlY29tcHJlc3NlZCBjb250ZW50LCBvciB1cCB0byB0aGUgbmV3 IGxpbmUgY2hhcgorICogaWYgZm91bmQgZmlyc3Qgd2hlbiB0aGUgZW9sX2ZsYWcgaXMgc2V0LiBJ dCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBkZWNvbXByZXNzZWQKKyAqIG91dHB1dCBnZW5lcmF0ZWQg YnkgcmVhZGluZyBhbnkgY29tcHJlc3NlZCBpbnB1dCB2aWEgdGhlIExaNEYgQVBJLCBleGNlZWRz CisgKiAncHRyc2l6ZScuIEFueSBleGNlZWRpbmcgZGVjb21wcmVzc2VkIGNvbnRlbnQgaXMgc3Rv cmVkIGF0IGFuIG92ZXJmbG93CisgKiBidWZmZXIgd2l0aGluIExaNEZpbGUuIE9mIGNvdXJzZSwg d2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLCBpdCB3aWxsIGZpcnN0CisgKiB0cnkgdG8gY29u c3VtZSBhbnkgZGVjb21wcmVzc2VkIGNvbnRlbnQgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBvdmVy ZmxvdworICogYnVmZmVyLCBiZWZvcmUgZGVjb21wcmVzc2luZyBuZXcgY29udGVudC4KKyAqLwor c3RhdGljIGludAorTFo0RmlsZV9yZWFkX2ludGVybmFsKExaNEZpbGUgKiBmcywgdm9pZCAqcHRy LCBpbnQgcHRyc2l6ZSwgYm9vbCBlb2xfZmxhZykKK3sKKwlzaXplX3QJCWRzaXplID0gMDsKKwlz aXplX3QJCXJzaXplOworCXNpemVfdAkJc2l6ZSA9IHB0cnNpemU7CisJYm9vbAkJZW9sX2ZvdW5k ID0gZmFsc2U7CisKKwl2b2lkCSAgICpyZWFkYnVmOworCisJLyogTGF6eSBpbml0ICovCisJaWYg KCFmcy0+aW5pdGVkICYmIExaNEZpbGVfaW5pdChmcywgc2l6ZSwgZmFsc2UgLyogZGVjb21wcmVz c2luZyAqLyApKQorCQlyZXR1cm4gLTE7CisKKwkvKiBWZXJmaXkgdGhhdCB0aGVyZSBpcyBlbm91 Z2ggc3BhY2UgaW4gdGhlIG91dGJ1ZiAqLworCWlmIChzaXplID4gZnMtPmJ1ZmxlbikKKwl7CisJ CWZzLT5idWZsZW4gPSBzaXplOworCQlmcy0+YnVmZmVyID0gcGdfcmVhbGxvYyhmcy0+YnVmZmVy LCBzaXplKTsKKwl9CisKKwkvKiB1c2UgYWxyZWFkeSBkZWNvbXByZXNzZWQgY29udGVudCBpZiBh dmFpbGFibGUgKi8KKwlkc2l6ZSA9IExaNEZpbGVfcmVhZF9vdmVyZmxvdyhmcywgcHRyLCBzaXpl LCBlb2xfZmxhZyk7CisJaWYgKGRzaXplID09IHNpemUgfHwgKGVvbF9mbGFnICYmIG1lbWNocihw dHIsICdcbicsIGRzaXplKSkpCisJCXJldHVybiBkc2l6ZTsKKworCXJlYWRidWYgPSBwZ19tYWxs b2Moc2l6ZSk7CisKKwlkbworCXsKKwkJY2hhcgkgICAqcnA7CisJCWNoYXIJICAgKnJlbmQ7CisK KwkJcnNpemUgPSBmcmVhZChyZWFkYnVmLCAxLCBzaXplLCBmcy0+ZnApOworCQlpZiAocnNpemUg PCBzaXplICYmICFmZW9mKGZzLT5mcCkpCisJCQlyZXR1cm4gLTE7CisKKwkJcnAgPSAoY2hhciAq KSByZWFkYnVmOworCQlyZW5kID0gKGNoYXIgKikgcmVhZGJ1ZiArIHJzaXplOworCisJCXdoaWxl IChycCA8IHJlbmQpCisJCXsKKwkJCXNpemVfdAkJc3RhdHVzOworCQkJc2l6ZV90CQlvdXRsZW4g PSBmcy0+YnVmbGVuOworCQkJc2l6ZV90CQlyZWFkX3JlbWFpbiA9IHJlbmQgLSBycDsKKworCQkJ bWVtc2V0KGZzLT5idWZmZXIsIDAsIG91dGxlbik7CisJCQlzdGF0dXMgPSBMWjRGX2RlY29tcHJl c3MoZnMtPmR0eCwgZnMtPmJ1ZmZlciwgJm91dGxlbiwKKwkJCQkJCQkJCSBycCwgJnJlYWRfcmVt YWluLCBOVUxMKTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCXsKKwkJCQlmcy0+ ZXJyY29kZSA9IHN0YXR1czsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCXJwICs9IHJlYWRf cmVtYWluOworCisJCQkvKgorCQkJICogZmlsbCBpbiB3aGF0IHNwYWNlIGlzIGF2YWlsYWJsZSBp biBwdHIgaWYgdGhlIGVvbCBmbGFnIGlzIHNldCwKKwkJCSAqIGVpdGhlciBza2lwIGlmIG9uZSBh bHJlYWR5IGZvdW5kIG9yIGZpbGwgdXAgdG8gRU9MIGlmIHByZXNlbnQKKwkJCSAqIGluIHRoZSBv dXRidWYKKwkJCSAqLworCQkJaWYgKG91dGxlbiA+IDAgJiYgZHNpemUgPCBzaXplICYmIGVvbF9m b3VuZCA9PSBmYWxzZSkKKwkJCXsKKwkJCQljaGFyCSAgICpwOworCQkJCXNpemVfdAkJbGliID0g KGVvbF9mbGFnID09IDApID8gc2l6ZSAtIGRzaXplIDogc2l6ZSAtIDEgLSBkc2l6ZTsKKwkJCQlz aXplX3QJCWxlbiA9IG91dGxlbiA8IGxpYiA/IG91dGxlbiA6IGxpYjsKKworCQkJCWlmIChlb2xf ZmxhZyA9PSB0cnVlICYmCisJCQkJCShwID0gbWVtY2hyKGZzLT5idWZmZXIsICdcbicsIG91dGxl bikpICYmCisJCQkJCShzaXplX3QpIChwIC0gZnMtPmJ1ZmZlciArIDEpIDw9IGxlbikKKwkJCQl7 CisJCQkJCWxlbiA9IHAgLSBmcy0+YnVmZmVyICsgMTsKKwkJCQkJZW9sX2ZvdW5kID0gdHJ1ZTsK KwkJCQl9CisKKwkJCQltZW1jcHkoKGNoYXIgKikgcHRyICsgZHNpemUsIGZzLT5idWZmZXIsIGxl bik7CisJCQkJZHNpemUgKz0gbGVuOworCisJCQkJLyogbW92ZSB3aGF0IGRpZCBub3QgZml0LCBp ZiBhbnksIGF0IHRoZSBiZWdpbmluZyBvZiB0aGUgYnVmICovCisJCQkJaWYgKGxlbiA8IG91dGxl bikKKwkJCQkJbWVtbW92ZShmcy0+YnVmZmVyLCBmcy0+YnVmZmVyICsgbGVuLCBvdXRsZW4gLSBs ZW4pOworCQkJCW91dGxlbiAtPSBsZW47CisJCQl9CisKKwkJCS8qIGlmIHRoZXJlIGlzIGF2YWls YWJsZSBvdXRwdXQsIHNhdmUgaXQgKi8KKwkJCWlmIChvdXRsZW4gPiAwKQorCQkJeworCQkJCXdo aWxlIChmcy0+b3ZlcmZsb3dsZW4gKyBvdXRsZW4gPiBmcy0+b3ZlcmZsb3dhbGxvY2xlbikKKwkJ CQl7CisJCQkJCWZzLT5vdmVyZmxvd2FsbG9jbGVuICo9IDI7CisJCQkJCWZzLT5vdmVyZmxvd2J1 ZiA9IHBnX3JlYWxsb2MoZnMtPm92ZXJmbG93YnVmLAorCQkJCQkJCQkJCQkJIGZzLT5vdmVyZmxv d2FsbG9jbGVuKTsKKwkJCQl9CisKKwkJCQltZW1jcHkoZnMtPm92ZXJmbG93YnVmICsgZnMtPm92 ZXJmbG93bGVuLCBmcy0+YnVmZmVyLCBvdXRsZW4pOworCQkJCWZzLT5vdmVyZmxvd2xlbiArPSBv dXRsZW47CisJCQl9CisJCX0KKwl9IHdoaWxlIChyc2l6ZSA9PSBzaXplICYmIGRzaXplIDwgc2l6 ZSAmJiBlb2xfZm91bmQgPT0gMCk7CisKKwlwZ19mcmVlKHJlYWRidWYpOworCisJcmV0dXJuIChp bnQpIGRzaXplOworfQorCisvKgorICogQ29tcHJlc3Mgc2l6ZSBieXRlcyBmcm9tIHB0ciBhbmQg d3JpdGUgdGhlbSB0byB0aGUgc3RyZWFtLgorICovCitzdGF0aWMgc2l6ZV90CitMWjRGaWxlX3dy aXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI KQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisJ c2l6ZV90CQlzdGF0dXM7CisJaW50CQkJcmVtYWluaW5nID0gc2l6ZTsKKworCWlmICghZnMtPmlu aXRlZCAmJiBMWjRGaWxlX2luaXQoZnMsIHNpemUsIHRydWUpKQorCQlyZXR1cm4gLTE7CisKKwl3 aGlsZSAocmVtYWluaW5nID4gMCkKKwl7CisJCWludAkJCWNodW5rID0gcmVtYWluaW5nIDwgTFo0 X0lOX1NJWkUgPyByZW1haW5pbmcgOiBMWjRfSU5fU0laRTsKKworCQlyZW1haW5pbmcgLT0gY2h1 bms7CisKKwkJc3RhdHVzID0gTFo0Rl9jb21wcmVzc1VwZGF0ZShmcy0+Y3R4LCBmcy0+YnVmZmVy LCBmcy0+YnVmbGVuLAorCQkJCQkJCQkJIHB0ciwgY2h1bmssIE5VTEwpOworCQlpZiAoTFo0Rl9p c0Vycm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJcmV0dXJu IC0xOworCQl9CisKKwkJaWYgKGZ3cml0ZShmcy0+YnVmZmVyLCAxLCBzdGF0dXMsIGZzLT5mcCkg IT0gc3RhdHVzKQorCQl7CisJCQllcnJubyA9IGVycm5vID8gOiBFTk9TUEM7CisJCQlyZXR1cm4g MTsKKwkJfQorCX0KKworCXJldHVybiBzaXplOworfQorCisvKgorICogZnJlYWQoKSBlcXVpdmFs ZW50IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJlc3NlZCBmaWxlcy4KKyAqLworc3RhdGlj IHNpemVfdAorTFo0RmlsZV9yZWFkKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2 YXRlX2RhdGE7CisJaW50CQkJcmV0OworCisJcmV0ID0gTFo0RmlsZV9yZWFkX2ludGVybmFsKGZz LCBwdHIsIHNpemUsIGZhbHNlKTsKKwlpZiAocmV0ICE9IHNpemUgJiYgIUxaNEZpbGVfZW9mKENG SCkpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgTFo0 RmlsZV9nZXRfZXJyb3IoQ0ZIKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZmdldGMo KSBlcXVpdmFsZW50IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJlc3NlZCBmaWxlcy4KKyAq Lworc3RhdGljIGludAorTFo0RmlsZV9nZXRjKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQorewor CUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisJdW5zaWdu ZWQgY2hhciBjOworCisJaWYgKExaNEZpbGVfcmVhZF9pbnRlcm5hbChmcywgJmMsIDEsIGZhbHNl KSAhPSAxKQorCXsKKwkJaWYgKCFMWjRGaWxlX2VvZihDRkgpKQorCQkJcGdfZmF0YWwoImNvdWxk IG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBMWjRGaWxlX2dldF9lcnJvcihDRkgpKTsK KwkJZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5k IG9mIGZpbGUiKTsKKwl9CisKKwlyZXR1cm4gYzsKK30KKworLyoKKyAqIGZnZXRzKCkgZXF1aXZh bGVudCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmlsZXMuCisgKi8KK3N0YXRp YyBjaGFyICoKK0xaNEZpbGVfZ2V0cyhjaGFyICpwdHIsIGludCBzaXplLCBDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0 ZV9kYXRhOworCXNpemVfdAkJZHNpemU7CisKKwlkc2l6ZSA9IExaNEZpbGVfcmVhZF9pbnRlcm5h bChmcywgcHRyLCBzaXplLCB0cnVlKTsKKwlpZiAoZHNpemUgPCAwKQorCQlwZ19mYXRhbCgiY291 bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIExaNEZpbGVfZ2V0X2Vycm9yKENGSCkp OworCisJLyogRG9uZSByZWFkaW5nICovCisJaWYgKGRzaXplID09IDApCisJCXJldHVybiBOVUxM OworCisJcmV0dXJuIHB0cjsKK30KKworLyoKKyAqIEZpbmFsaXplIChkZSljb21wcmVzc2lvbiBv ZiBhIHN0cmVhbS4gV2hlbiBjb21wcmVzc2luZyBpdCB3aWxsIHdyaXRlIGFueQorICogcmVtYWlu aW5nIGNvbnRlbnQgYW5kL29yIGdlbmVyYXRlZCBmb290ZXIgZnJvbSB0aGUgTFo0IEFQSS4KKyAq Lworc3RhdGljIGludAorTFo0RmlsZV9jbG9zZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sK KwlGSUxFCSAgICpmcDsKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0 ZV9kYXRhOworCXNpemVfdAkJc3RhdHVzOworCWludAkJCXJldDsKKworCWZwID0gZnMtPmZwOwor CWlmIChmcy0+aW5pdGVkKQorCXsKKwkJaWYgKGZzLT5jb21wcmVzc2luZykKKwkJeworCQkJc3Rh dHVzID0gTFo0Rl9jb21wcmVzc0VuZChmcy0+Y3R4LCBmcy0+YnVmZmVyLCBmcy0+YnVmbGVuLCBO VUxMKTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCQlwZ19mYXRhbCgiZmFpbGVk IHRvIGVuZCBjb21wcmVzc2lvbjogJXMiLAorCQkJCQkJIExaNEZfZ2V0RXJyb3JOYW1lKHN0YXR1 cykpOworCQkJZWxzZSBpZiAoKHJldCA9IGZ3cml0ZShmcy0+YnVmZmVyLCAxLCBzdGF0dXMsIGZz LT5mcCkpICE9IHN0YXR1cykKKwkJCXsKKwkJCQllcnJubyA9IGVycm5vID8gOiBFTk9TUEM7CisJ CQkJV1JJVEVfRVJST1JfRVhJVDsKKwkJCX0KKworCQkJc3RhdHVzID0gTFo0Rl9mcmVlQ29tcHJl c3Npb25Db250ZXh0KGZzLT5jdHgpOworCQkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQkJ CXBnX2ZhdGFsKCJmYWlsZWQgdG8gZW5kIGNvbXByZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9n ZXRFcnJvck5hbWUoc3RhdHVzKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlzdGF0dXMgPSBMWjRG X2ZyZWVEZWNvbXByZXNzaW9uQ29udGV4dChmcy0+ZHR4KTsKKwkJCWlmIChMWjRGX2lzRXJyb3Io c3RhdHVzKSkKKwkJCQlwZ19mYXRhbCgiZmFpbGVkIHRvIGVuZCBkZWNvbXByZXNzaW9uOiAlcyIs CisJCQkJCQkgTFo0Rl9nZXRFcnJvck5hbWUoc3RhdHVzKSk7CisJCQlwZ19mcmVlKGZzLT5vdmVy Zmxvd2J1Zik7CisJCX0KKworCQlwZ19mcmVlKGZzLT5idWZmZXIpOworCX0KKworCXBnX2ZyZWUo ZnMpOworCisJcmV0dXJuIGZjbG9zZShmcCk7Cit9CisKK3N0YXRpYyBpbnQKK0xaNEZpbGVfb3Bl bihjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkgQ29tcHJl c3NGaWxlSGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnA7CisJTFo0RmlsZSAgICAqbHo0ZnAg PSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCWlmIChmZCA+PSAwKQorCQlmcCA9 IGZkb3BlbihmZCwgbW9kZSk7CisJZWxzZQorCQlmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCWlm IChmcCA9PSBOVUxMKQorCXsKKwkJbHo0ZnAtPmVycmNvZGUgPSBlcnJubzsKKwkJcmV0dXJuIDE7 CisJfQorCisJbHo0ZnAtPmZwID0gZnA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAor TFo0RmlsZV9vcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWNoYXIJICAgKmZuYW1lOworCWludAkJCXJldDsK KworCWZuYW1lID0gcHNwcmludGYoIiVzLmx6NCIsIHBhdGgpOworCXJldCA9IENGSC0+b3Blbl9m dW5jKGZuYW1lLCAtMSwgbW9kZSwgQ0ZIKTsKKwlwZ19mcmVlKGZuYW1lKTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3ZvaWQKK0luaXRDb21wcmVzc0xaNChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwg Y29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCUxa NEZpbGUgICAgKmx6NGZwOworCisJQ0ZILT5vcGVuX2Z1bmMgPSBMWjRGaWxlX29wZW47CisJQ0ZI LT5vcGVuX3dyaXRlX2Z1bmMgPSBMWjRGaWxlX29wZW5fd3JpdGU7CisJQ0ZILT5yZWFkX2Z1bmMg PSBMWjRGaWxlX3JlYWQ7CisJQ0ZILT53cml0ZV9mdW5jID0gTFo0RmlsZV93cml0ZTsKKwlDRkgt PmdldHNfZnVuYyA9IExaNEZpbGVfZ2V0czsKKwlDRkgtPmdldGNfZnVuYyA9IExaNEZpbGVfZ2V0 YzsKKwlDRkgtPmVvZl9mdW5jID0gTFo0RmlsZV9lb2Y7CisJQ0ZILT5jbG9zZV9mdW5jID0gTFo0 RmlsZV9jbG9zZTsKKwlDRkgtPmdldF9lcnJvcl9mdW5jID0gTFo0RmlsZV9nZXRfZXJyb3I7CisK KwlDRkgtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOworCWx6NGZwID0gcGdf bWFsbG9jMChzaXplb2YoKmx6NGZwKSk7CisJaWYgKENGSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZl bCA+PSAwKQorCQlsejRmcC0+cHJlZnMuY29tcHJlc3Npb25MZXZlbCA9IENGSC0+Y29tcHJlc3Np b25fc3BlYy5sZXZlbDsKKworCUNGSC0+cHJpdmF0ZV9kYXRhID0gbHo0ZnA7Cit9CisjZWxzZQkJ CQkJCQkvKiBVU0VfTFo0ICovCit2b2lkCitJbml0Q29tcHJlc3NvckxaNChDb21wcmVzc29yU3Rh dGUgKmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMp Cit7CisJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3 aXRoICVzIiwgIkxaNCIpOworfQorCit2b2lkCitJbml0Q29tcHJlc3NMWjQoQ29tcHJlc3NGaWxl SGFuZGxlICpDRkgsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYykKK3sKKwlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNz aW9uIHdpdGggJXMiLCAiTFo0Iik7Cit9CisjZW5kaWYJCQkJCQkJLyogVVNFX0xaNCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oIGIvc3JjL2Jpbi9wZ19kdW1w L2NvbXByZXNzX2x6NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjc0 NTk1ZGIxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0 LmgKQEAgLTAsMCArMSwyMiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tcHJlc3Nf bHo0LmgKKyAqCSBJbnRlcmZhY2UgdG8gY29tcHJlc3NfaW8uYyByb3V0aW5lcworICoKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRo ZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICAg c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKyNpZm5kZWYgX0NPTVBSRVNTX0xaNF9IXworI2RlZmluZSBfQ09NUFJFU1NfTFo0X0hfCisK KyNpbmNsdWRlICJjb21wcmVzc19pby5oIgorCitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3Nvckxa NChDb21wcmVzc29yU3RhdGUgKmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMpOworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzTFo0KENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZILCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9u X3NwZWMpOworCisjZW5kaWYJCQkJCQkJLyogX0NPTVBSRVNTX0xaNF9IXyAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1 aWxkCmluZGV4IGFhMmM5MTgyOWMuLjQ3M2Q0MGQ0NTYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTMs NiArMyw3IEBACiBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0gZmlsZXMoCiAgICdjb21wcmVzc19p by5jJywKICAgJ2NvbXByZXNzX2d6aXAuYycsCisgICdjb21wcmVzc19sejQuYycsCiAgICdkdW1w dXRpbHMuYycsCiAgICdwYXJhbGxlbC5jJywKICAgJ3BnX2JhY2t1cF9hcmNoaXZlci5jJywKQEAg LTE3LDcgKzE4LDcgQEAgcGdfZHVtcF9jb21tb25fc291cmNlcyA9IGZpbGVzKAogcGdfZHVtcF9j b21tb24gPSBzdGF0aWNfbGlicmFyeSgnbGlicGdkdW1wX2NvbW1vbicsCiAgIHBnX2R1bXBfY29t bW9uX3NvdXJjZXMsCiAgIGNfcGNoOiBwY2hfcG9zdGdyZXNfZmVfaCwKLSAgZGVwZW5kZW5jaWVz OiBbZnJvbnRlbmRfY29kZSwgbGlicHEsIHpsaWJdLAorICBkZXBlbmRlbmNpZXM6IFtmcm9udGVu ZF9jb2RlLCBsaWJwcSwgbHo0LCB6bGliXSwKICAga3dhcmdzOiBpbnRlcm5hbF9saWJfYXJncywK ICkKIApAQCAtODUsNyArODYsMTAgQEAgdGVzdHMgKz0gewogICAnc2QnOiBtZXNvbi5jdXJyZW50 X3NvdXJjZV9kaXIoKSwKICAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKICAgJ3Rh cCc6IHsKLSAgICAnZW52JzogeydHWklQX1BST0dSQU0nOiBnemlwLnBhdGgoKX0sCisgICAgJ2Vu dic6IHsKKyAgICAgICdHWklQX1BST0dSQU0nOiBnemlwLnBhdGgoKSwKKyAgICAgICdMWjQnOiBw cm9ncmFtX2x6NC5mb3VuZCgpID8gcHJvZ3JhbV9sejQucGF0aCgpIDogJycsCisgICAgfSwKICAg ICAndGVzdHMnOiBbCiAgICAgICAndC8wMDFfYmFzaWMucGwnLAogICAgICAgJ3QvMDAyX3BnX2R1 bXAucGwnLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5j IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDFmMjA3YzZmNGQu LjExOWI3ZjI1NTMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTM5NSw2 ICszOTUsMTAgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogI2lmbmRlZiBIQVZFX0xJ QloKIAkJCQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNT SU9OX0daSVApCiAJCQkJCXN1cHBvcnRzX2NvbXByZXNzaW9uID0gZmFsc2U7CisjZW5kaWYKKyNp Zm5kZWYgVVNFX0xaNAorCQkJCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0g UEdfQ09NUFJFU1NJT05fTFo0KQorCQkJCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9IGZhbHNlOwog I2VuZGlmCiAJCQkJaWYgKHN1cHBvcnRzX2NvbXByZXNzaW9uID09IGZhbHNlKQogCQkJCQlwZ19m YXRhbCgiY2Fubm90IHJlc3RvcmUgZnJvbSBjb21wcmVzc2VkIGFyY2hpdmUgKGNvbXByZXNzaW9u IG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBpbnN0YWxsYXRpb24pIik7CkBAIC0yMDc0LDcgKzIwNzgs NyBAQCBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJCS8qCiAJ CSAqIENoZWNrIGlmIHRoZSBzcGVjaWZpZWQgYXJjaGl2ZSBpcyBhIGRpcmVjdG9yeS4gSWYgc28s IGNoZWNrIGlmCi0JCSAqIHRoZXJlJ3MgYSAidG9jLmRhdCIgKG9yICJ0b2MuZGF0Lmd6IikgZmls ZSBpbiBpdC4KKwkJICogdGhlcmUncyBhICJ0b2MuZGF0IiAob3IgInRvYy5kYXQue2d6LGx6NH0i KSBmaWxlIGluIGl0LgogCQkgKi8KIAkJaWYgKHN0YXQoQUgtPmZTcGVjLCAmc3QpID09IDAgJiYg U19JU0RJUihzdC5zdF9tb2RlKSkKIAkJewpAQCAtMjA4NCw2ICsyMDg4LDEwIEBAIF9kaXNjb3Zl ckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAjaWZkZWYgSEFWRV9MSUJaCiAJCQlp ZiAoX2ZpbGVFeGlzdHNJbkRpcmVjdG9yeShBSC0+ZlNwZWMsICJ0b2MuZGF0Lmd6IikpCiAJCQkJ cmV0dXJuIEFILT5mb3JtYXQ7CisjZW5kaWYKKyNpZmRlZiBVU0VfTFo0CisJCQlpZiAoX2ZpbGVF eGlzdHNJbkRpcmVjdG9yeShBSC0+ZlNwZWMsICJ0b2MuZGF0Lmx6NCIpKQorCQkJCXJldHVybiBB SC0+Zm9ybWF0OwogI2VuZGlmCiAJCQlwZ19mYXRhbCgiZGlyZWN0b3J5IFwiJXNcIiBkb2VzIG5v dCBhcHBlYXIgdG8gYmUgYSB2YWxpZCBhcmNoaXZlIChcInRvYy5kYXRcIiBkb2VzIG5vdCBleGlz dCkiLAogCQkJCQkgQUgtPmZTcGVjKTsKQEAgLTM3NDcsNiArMzc1NSwxMCBAQCBSZWFkSGVhZChB cmNoaXZlSGFuZGxlICpBSCkKICNpZm5kZWYgSEFWRV9MSUJaCiAJCWlmIChBSC0+Y29tcHJlc3Np b25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJCXVuc3VwcG9ydGVk ID0gdHJ1ZTsKKyNlbmRpZgorI2lmbmRlZiBVU0VfTFo0CisJCWlmIChBSC0+Y29tcHJlc3Npb25f c3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTFo0KQorCQkJdW5zdXBwb3J0ZWQgPSB0 cnVlOwogI2VuZGlmCiAJCWlmICh1bnN1cHBvcnRlZCkKIAkJCXBnX2ZhdGFsKCJhcmNoaXZlIGlz IGNvbXByZXNzZWQsIGJ1dCB0aGlzIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbXBy ZXNzaW9uIik7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCAyYzBhOTY5OTcyLi5mMzkyNzYwZTA2IDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmMKQEAgLTcxNSwxMyArNzE1LDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CQljYXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CiAJCQkvKiBmYWxsdGhyb3VnaCAqLwogCQljYXNl IFBHX0NPTVBSRVNTSU9OX0daSVA6CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIFBHX0NP TVBSRVNTSU9OX0xaNDoKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6CiAJ CQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJa U1REIik7CiAJCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0JCQlwZ19mYXRh bCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKLQkJ CWJyZWFrOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdf ZHVtcC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IGYzYmE5MjYz MjEuLmY0OTdlYzYwNDAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1w LnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC0xMzksNiArMTM5 LDgwIEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWFyZ3MgICAgPT4gWyAnLWQnLCAiJHRlbXBk aXIvY29tcHJlc3Npb25fZ3ppcF9wbGFpbi5zcWwuZ3oiLCBdLAogCQl9LAogCX0sCisKKwkjIERv IG5vdCB1c2UgLS1uby1zeW5jIHRvIGdpdmUgdGVzdCBjb3ZlcmFnZSBmb3IgZGF0YSBzeW5jLgor CWNvbXByZXNzaW9uX2x6NF9jdXN0b20gPT4geworCQl0ZXN0X2tleSAgICAgICA9PiAnY29tcHJl c3Npb24nLAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQgICAgICAgPT4g WworCQkJJ3BnX2R1bXAnLCAgICAgICctLWZvcm1hdD1jdXN0b20nLAorCQkJJy0tY29tcHJlc3M9 bHo0JywgIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfY3VzdG9tLmR1bXAiLAorCQkJ J3Bvc3RncmVzJywKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLAor CQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfY3VzdG9tLnNxbCIsCisJCQkiJHRl bXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5kdW1wIiwKKwkJXSwKKwkJY29tbWFuZF9saWtl ID0+IHsKKwkJCWNvbW1hbmQgPT4gWworCQkJCSdwZ19yZXN0b3JlJywKKwkJCQknLWwnLCAiJHRl bXBkaXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5kdW1wIiwKKwkJCV0sCisJCQlleHBlY3RlZCA9 PiBxci9Db21wcmVzc2lvbjogbHo0LywKKwkJCW5hbWUgPT4gJ2RhdGEgY29udGVudCBpcyBsejQg Y29tcHJlc3NlZCcKKwkJfSwKKwl9LAorCisJIyBEbyBub3QgdXNlIC0tbm8tc3luYyB0byBnaXZl IHRlc3QgY292ZXJhZ2UgZm9yIGRhdGEgc3luYy4KKwljb21wcmVzc2lvbl9sejRfZGlyID0+IHsK KwkJdGVzdF9rZXkgICAgICAgPT4gJ2NvbXByZXNzaW9uJywKKwkJY29tcGlsZV9vcHRpb24gPT4g J2x6NCcsCisJCWR1bXBfY21kICAgICAgID0+IFsKKwkJCSdwZ19kdW1wJywgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnLS1qb2JzPTInLAorCQkJJy0tZm9ybWF0PWRpcmVjdG9yeScsICAg ICAgICAgICAgICAgICAgICctLWNvbXByZXNzPWx6NDoxJywKKwkJCSItLWZpbGU9JHRlbXBkaXIv Y29tcHJlc3Npb25fbHo0X2RpciIsICdwb3N0Z3JlcycsCisJCV0sCisJCSMgR2l2ZSBjb3ZlcmFn ZSBmb3IgbWFudWFsbHkgY29tcHJlc3NlZCBibG9iLnRvYyBmaWxlcyBkdXJpbmcKKwkJIyByZXN0 b3JlLgorCQljb21wcmVzc19jbWQgPT4geworCQkJcHJvZ3JhbSA9PiAkRU5WeydMWjQnfSwKKwkJ CWFyZ3MgICAgPT4gWworCQkJCScteicsICctZicsICctLXJtJywKKwkJCQkiJHRlbXBkaXIvY29t cHJlc3Npb25fbHo0X2Rpci9ibG9icy50b2MiLAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9s ejRfZGlyL2Jsb2JzLnRvYy5sejQiLAorCQkJXSwKKwkJfSwKKwkJIyBWZXJpZnkgdGhhdCBkYXRh IGZpbGVzIHdoZXJlIGNvbXByZXNzZWQKKwkJZ2xvYl9wYXR0ZXJucyA9PiBbCisJCQkiJHRlbXBk aXIvY29tcHJlc3Npb25fbHo0X2Rpci90b2MuZGF0IiwKKwkJICAgICIkdGVtcGRpci9jb21wcmVz c2lvbl9sejRfZGlyLyouZGF0Lmx6NCIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdw Z19yZXN0b3JlJywgJy0tam9icz0yJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25f bHo0X2Rpci5zcWwiLAorCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIiLAorCQldLAor CX0sCisKKwljb21wcmVzc2lvbl9sejRfcGxhaW4gPT4geworCQl0ZXN0X2tleSAgICAgICA9PiAn Y29tcHJlc3Npb24nLAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQgICAg ICAgPT4gWworCQkJJ3BnX2R1bXAnLCAnLS1mb3JtYXQ9cGxhaW4nLCAnLS1jb21wcmVzcz1sejQn LAorCQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfcGxhaW4uc3FsLmx6NCIsICdw b3N0Z3JlcycsCisJCV0sCisJCSMgRGVjb21wcmVzcyB0aGUgZ2VuZXJhdGVkIGZpbGUgdG8gcnVu IHRocm91Z2ggdGhlIHRlc3RzLgorCQljb21wcmVzc19jbWQgPT4geworCQkJcHJvZ3JhbSA9PiAk RU5WeydMWjQnfSwKKwkJCWFyZ3MgICAgPT4gWworCQkJCSctZCcsICctZicsCisJCQkJIiR0ZW1w ZGlyL2NvbXByZXNzaW9uX2x6NF9wbGFpbi5zcWwubHo0IiwKKwkJCQkiJHRlbXBkaXIvY29tcHJl c3Npb25fbHo0X3BsYWluLnNxbCIsCisJCQldLAorCQl9LAorCX0sCisKIAljbGVhbiA9PiB7CiAJ CWR1bXBfY21kID0+IFsKIAkJCSdwZ19kdW1wJywKQEAgLTQxNzUsMTEgKzQyNDksMTEgQEAgZm9y ZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBnZHVtcF9ydW5zKQogCW15ICRydW5fZGIgICA9ICdw b3N0Z3Jlcyc7CiAKIAkjIFNraXAgY29tbWFuZC1sZXZlbCB0ZXN0cyBmb3IgZ3ppcCBpZiB0aGVy ZSBpcyBubyBzdXBwb3J0IGZvciBpdC4KLQlpZiAoICAgZGVmaW5lZCgkcGdkdW1wX3J1bnN7JHJ1 bn0tPntjb21waWxlX29wdGlvbn0pCi0JCSYmICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVf b3B0aW9ufSBlcSAnZ3ppcCcKLQkJJiYgISRzdXBwb3J0c19nemlwKQorCWlmICgkcGdkdW1wX3J1 bnN7JHJ1bn0tPntjb21waWxlX29wdGlvbn0gJiYKKwkJKCRwZ2R1bXBfcnVuc3skcnVufS0+e2Nv bXBpbGVfb3B0aW9ufSBlcSAnZ3ppcCcgJiYgISRzdXBwb3J0c19nemlwKSB8fAorCQkoJHBnZHVt cF9ydW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IGVxICdsejQnICYmICEkc3VwcG9ydHNfbHo0 KSkKIAl7Ci0JCW5vdGUgIiRydW46IHNraXBwZWQgZHVlIHRvIG5vIGd6aXAgc3VwcG9ydCI7CisJ CW5vdGUgIiRydW46IHNraXBwZWQgZHVlIHRvIG5vICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBp bGVfb3B0aW9ufSBzdXBwb3J0IjsKIAkJbmV4dDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy90b29s cy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sgYi9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1 c2NoZWNrCmluZGV4IGRhOGU0ODYxZjQuLjFmN2Y4MTdlNGQgMTAwNzU1Ci0tLSBhL3NyYy90b29s cy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKKysrIGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1 c3BsdXNjaGVjawpAQCAtMTUyLDYgKzE1Miw3IEBAIGRvCiAJIyBhcyBmaWVsZCBuYW1lcywgd2hp Y2ggaXMgdW5mb3J0dW5hdGUgYnV0IHdlIHdvbid0IGNoYW5nZSBpdCBub3cuCiAJdGVzdCAiJGYi ID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaCAmJiBjb250aW51ZQogCXRlc3QgIiRm IiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oICYmIGNvbnRpbnVlCisJdGVzdCAiJGYi ID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYi ID0gc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmggJiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBz cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggJiYgY29udGludWUKIAl0ZXN0ICIk ZiIgPSBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oICYmIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CmluZGV4IDg0MDE5MWQ2ODAuLjIzMjIyOGQ0MjcgMTAwNjQ0Ci0tLSBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CkBAIC0xMzgxLDYgKzEzODEsNyBAQCBMV0xvY2sKIExXTG9ja0hhbmRsZQogTFdM b2NrTW9kZQogTFdMb2NrUGFkZGVkCitMWjRDb21wcmVzc29yU3RhdGUKIExaNEZfY29tcHJlc3Np b25Db250ZXh0X3QKIExaNEZfZGVjb21wcmVzc09wdGlvbnNfdAogTFo0Rl9kZWNvbXByZXNzaW9u Q29udGV4dF90Ci0tIAoyLjM0LjEKCg== --b1_hAgeT0CwQJ3z6UK6simdJIGH97uJztQ45k0HaIBc8 Content-Type: text/x-patch; name=v20-0002-THIS-IS-WIP-PATCH-PRESENTED-HERE-FOR-COMPLETENES.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v20-0002-THIS-IS-WIP-PATCH-PRESENTED-HERE-FOR-COMPLETENES.patch RnJvbSA3YzI3YWNkMWZhYWY0YTY0MGExZDBiYTc5ODlkZWMzOWM4NTM2NjBmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IE1vbiwgMTYgSmFuIDIwMjMgMTQ6NTk6NDEgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy MCAyLzNdIFRISVMgSVMgV0lQIFBBVENIIFBSRVNFTlRFRCBIRVJFIEZPUiBDT01QTEVURU5FU1M6 CiBDb21wcmVzc29yIEFQSQoKUGxlYXNlIGJlIGF3YXJlIHRoYXQgY29tbWVudHMsIHJlZmVyZW5j ZXMsIG5hbWluZywgZXRjLCBhcmUgbm90IHNjcnV0aW5pemVkLgpUaG9zZSB3aWxsIGJlIGFkZHJl c3NlZCBvbmNlIDAwMDEgb2YgdGhlIHNlcmllcyBpcyBnZXR0aW5nIGNsb3NlciB0byBhCmNvbW1p dGFibGUgc3RhdGUuIEhvd2V2ZXIgdGhlIHBhdGNoIHNob3VsZCBhcHBseSBjbGVhbmx5IGFuZCB0 aGUgdGVzdHMgc2hvdWxkCmJlIHBhc3NpbmcuCgpUaGUgcHVycG9zZSBvZiB0aGlzIEFQSSBpcyB0 byBhbGxvdyBmb3IgZWFzaWVyIGFkZGl0aW9uIG9mIG5ldyBjb21wcmVzc2lvbgptZXRob2RzLiBD b21wcmVzc0ZpbGVIYW5kbGUgaXMgc3Vic3RpdHV0aW5nIHRoZSBjZnAqIGZhbWlseSBvZiBmdW5j dGlvbnMgdW5kZXIgYQpzdHJ1Y3Qgb2YgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIG9wZW5pbmcsIHdy aXRpbmcsIGV0Yy4gVGhlIGltcGxlbWVudG9yIG9mIGEgbmV3CmNvbXByZXNzaW9uIG1ldGhvZCBp cyBub3cgYWJsZSB0byAic2ltcGx5IiBqdXN0IGFkZCB0aG9zZSBkZWZpbml0aW9ucy4KCkN1c3Rv bSBjb21wcmVzc2VkIGFyY2hpdmVzIG5vdyBuZWVkIHRvIHN0b3JlIHRoZSBjb21wcmVzc2lvbiBh bGdvcml0aG0gaW4gdGhlaXIKaGVhZGVyLiBUaGlzIHJlcXVpcmVzIGEgYnVtcCBpbiB0aGUgdmVy c2lvbiBudW1iZXIuIFRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbgppcyBubyBsb25nZXIgc3RvcmVk IGluIHRoZSBkdW1wIGFzIGl0IGlzIGlycmVsZXZhbnQuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL01h a2VmaWxlICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3pp cC5jICAgICAgIHwgNDA1ICsrKysrKysrKysrKwogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6 aXAuaCAgICAgICB8ICAyMiArCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYyAgICAgICAg IHwgOTE0ICsrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmluL3BnX2R1bXAvY29tcHJl c3NfaW8uaCAgICAgICAgIHwgIDY4ICstCiBzcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgICAg ICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyAgfCAx MDIgKy0tCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggIHwgICA1ICstCiBz cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jICAgIHwgIDIzICstCiBzcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jIHwgIDk0ICstLQogc3JjL2Jpbi9wZ19kdW1wL3Qv MDAyX3BnX2R1bXAucGwgICAgICB8ICAxMCArLQogc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3Bs dXNjaGVjayAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAg IHwgICAyICsKIDEzIGZpbGVzIGNoYW5nZWQsIDg1MSBpbnNlcnRpb25zKCspLCA3OTcgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmgKCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgYi9zcmMvYmluL3BnX2R1bXAvTWFr ZWZpbGUKaW5kZXggZWYxZWQwZjNlNS4uN2ExOWY1ZDYxNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQpAQCAtMjQsNiAr MjQsNyBAQCBMREZMQUdTX0lOVEVSTkFMICs9IC1MJCh0b3BfYnVpbGRkaXIpL3NyYy9mZV91dGls cyAtbHBnZmV1dGlscyAkKGxpYnBxX3BncG9ydCkKIAogT0JKUyA9IFwKIAkkKFdJTjMyUkVTKSBc CisJY29tcHJlc3NfZ3ppcC5vIFwKIAljb21wcmVzc19pby5vIFwKIAlkdW1wdXRpbHMubyBcCiAJ cGFyYWxsZWwubyBcCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5j IGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi42MGZiOTVkN2I3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2d6aXAuYwpAQCAtMCwwICsxLDQwNSBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogY29tcHJlc3NfZ3ppcC5jCisgKgkgUm91dGluZXMgZm9yIGFyY2hpdmVycyB0 byB3cml0ZSBhbiB1bmNvbXByZXNzZWQgb3IgY29tcHJlc3NlZCBkYXRhCisgKgkgc3RyZWFtLgor ICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdl bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElP TgorICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuYworICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyNpbmNsdWRlIDx1bmlzdGQu aD4KKworI2luY2x1ZGUgImNvbXByZXNzX2d6aXAuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfdXRp bHMuaCIKKworI2lmZGVmIEhBVkVfTElCWgorI2luY2x1ZGUgInpsaWIuaCIKKworLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzc29yIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KK3R5cGVkZWYgc3RydWN0IEd6aXBDb21wcmVzc29yU3RhdGUKK3sKKwl6X3N0cmVh bXAJenA7CisKKwl2b2lkCSAgICpvdXRidWY7CisJc2l6ZV90CQlvdXRzaXplOworfSBHemlwQ29t cHJlc3NvclN0YXRlOworCisvKiBQcml2YXRlIHJvdXRpbmVzIHRoYXQgc3VwcG9ydCBnemlwIGNv bXByZXNzZWQgZGF0YSBJL08gKi8KK3N0YXRpYyB2b2lkCitEZWZsYXRlQ29tcHJlc3Nvckd6aXAo QXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsIGJvb2wgZmx1c2gpCit7CisJ R3ppcENvbXByZXNzb3JTdGF0ZSAqZ3ppcGNzID0gKEd6aXBDb21wcmVzc29yU3RhdGUgKikgY3Mt PnByaXZhdGVfZGF0YTsKKwl6X3N0cmVhbXAJenAgPSBnemlwY3MtPnpwOworCXZvaWQJICAgKm91 dCA9IGd6aXBjcy0+b3V0YnVmOworCWludAkJCXJlcyA9IFpfT0s7CisKKwl3aGlsZSAoZ3ppcGNz LT56cC0+YXZhaWxfaW4gIT0gMCB8fCBmbHVzaCkKKwl7CisJCXJlcyA9IGRlZmxhdGUoenAsIGZs dXNoID8gWl9GSU5JU0ggOiBaX05PX0ZMVVNIKTsKKwkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FUlJP UikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsK KwkJaWYgKChmbHVzaCAmJiAoenAtPmF2YWlsX291dCA8IGd6aXBjcy0+b3V0c2l6ZSkpCisJCQl8 fCAoenAtPmF2YWlsX291dCA9PSAwKQorCQkJfHwgKHpwLT5hdmFpbF9pbiAhPSAwKQorCQkJKQor CQl7CisJCQkvKgorCQkJICogRXh0cmEgcGFyYW5vaWE6IGF2b2lkIHplcm8tbGVuZ3RoIGNodW5r cywgc2luY2UgYSB6ZXJvIGxlbmd0aAorCQkJICogY2h1bmsgaXMgdGhlIEVPRiBtYXJrZXIgaW4g dGhlIGN1c3RvbSBmb3JtYXQuIFRoaXMgc2hvdWxkIG5ldmVyCisJCQkgKiBoYXBwZW4gYnV0Li4u CisJCQkgKi8KKwkJCWlmICh6cC0+YXZhaWxfb3V0IDwgZ3ppcGNzLT5vdXRzaXplKQorCQkJewor CQkJCS8qCisJCQkJICogQW55IHdyaXRlIGZ1bmN0aW9uIHNob3VsZCBkbyBpdHMgb3duIGVycm9y IGNoZWNraW5nIGJ1dCB0bworCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkbyBhIGNoZWNrIGhlcmUgYXMg d2VsbC4uLgorCQkJCSAqLworCQkJCXNpemVfdAkJbGVuID0gZ3ppcGNzLT5vdXRzaXplIC0genAt PmF2YWlsX291dDsKKworCQkJCWNzLT53cml0ZUYoQUgsIChjaGFyICopIG91dCwgbGVuKTsKKwkJ CX0KKwkJCXpwLT5uZXh0X291dCA9IG91dDsKKwkJCXpwLT5hdmFpbF9vdXQgPSBnemlwY3MtPm91 dHNpemU7CisJCX0KKworCQlpZiAocmVzID09IFpfU1RSRUFNX0VORCkKKwkJCWJyZWFrOworCX0K K30KKworc3RhdGljIHZvaWQKK0VuZENvbXByZXNzb3JHemlwKEFyY2hpdmVIYW5kbGUgKkFILCBD b21wcmVzc29yU3RhdGUgKmNzKQoreworCUd6aXBDb21wcmVzc29yU3RhdGUgKmd6aXBjcyA9IChH emlwQ29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7CisJel9zdHJlYW1wCXpwOwor CisJaWYgKGd6aXBjcy0+enApCisJeworCQl6cCA9IGd6aXBjcy0+enA7CisJCXpwLT5uZXh0X2lu ID0gTlVMTDsKKwkJenAtPmF2YWlsX2luID0gMDsKKworCQkvKiBGbHVzaCBhbnkgcmVtYWluaW5n IGRhdGEgZnJvbSB6bGliIGJ1ZmZlciAqLworCQlEZWZsYXRlQ29tcHJlc3Nvckd6aXAoQUgsIGNz LCB0cnVlKTsKKworCQlpZiAoZGVmbGF0ZUVuZCh6cCkgIT0gWl9PSykKKwkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgY2xvc2UgY29tcHJlc3Npb24gc3RyZWFtOiAlcyIsIHpwLT5tc2cpOworCisJCXBn X2ZyZWUoZ3ppcGNzLT5vdXRidWYpOworCQlwZ19mcmVlKGd6aXBjcy0+enApOworCX0KKworCXBn X2ZyZWUoZ3ppcGNzKTsKKwljcy0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKK30KKworc3RhdGljIHZv aWQKK1dyaXRlRGF0YVRvQXJjaGl2ZUd6aXAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JT dGF0ZSAqY3MsCisJCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQoreworCUd6 aXBDb21wcmVzc29yU3RhdGUgKmd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIGNzLT5w cml2YXRlX2RhdGE7CisJel9zdHJlYW1wCXpwOworCisJaWYgKCFnemlwY3MtPnpwKQorCXsKKwkJ enAgPSBnemlwY3MtPnpwID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNpemVvZih6X3N0cmVhbSkp OworCQl6cC0+emFsbG9jID0gWl9OVUxMOworCQl6cC0+emZyZWUgPSBaX05VTEw7CisJCXpwLT5v cGFxdWUgPSBaX05VTEw7CisKKwkJLyoKKwkJICogb3V0c2l6ZSBpcyB0aGUgYnVmZmVyIHNpemUg d2UgdGVsbCB6bGliIGl0IGNhbiBvdXRwdXQgdG8uICBXZQorCQkgKiBhY3R1YWxseSBhbGxvY2F0 ZSBvbmUgZXh0cmEgYnl0ZSBiZWNhdXNlIHNvbWUgcm91dGluZXMgd2FudCB0bworCQkgKiBhcHBl bmQgYSB0cmFpbGluZyB6ZXJvIGJ5dGUgdG8gdGhlIHpsaWIgb3V0cHV0LgorCQkgKi8KKwkJZ3pp cGNzLT5vdXRidWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSArIDEpOworCQlnemlwY3MtPm91 dHNpemUgPSBaTElCX09VVF9TSVpFOworCisJCS8qCisJCSAqIEEgbGV2ZWwgb2YgemVybyBzaW1w bHkgY29waWVzIHRoZSBpbnB1dCBvbmUgYmxvY2sgYXQgdGhlIHRpbWUuICBUaGlzCisJCSAqIGlz IHByb2JhYmx5IG5vdCB3aGF0IHRoZSB1c2VyIHdhbnRlZCB3aGVuIGNhbGxpbmcgdGhpcyBpbnRl cmZhY2UuCisJCSAqLworCQlpZiAoY3MtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwgPT0gMCkKKwkJ CXBnX2ZhdGFsKCJyZXF1ZXN0ZWQgdG8gY29tcHJlc3MgdGhlIGFyY2hpdmUgeWV0IG5vIGxldmVs IHdhcyBzcGVjaWZpZWQiKTsKKworCQlpZiAoZGVmbGF0ZUluaXQoenAsIGNzLT5jb21wcmVzc2lv bl9zcGVjLmxldmVsKSAhPSBaX09LKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXpl IGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwgenAtPm1zZyk7CisKKwkJLyogSnVzdCBiZSBwYXJh bm9pZCAtIG1heWJlIEVuZCBpcyBjYWxsZWQgYWZ0ZXIgU3RhcnQsIHdpdGggbm8gV3JpdGUgKi8K KwkJenAtPm5leHRfb3V0ID0gZ3ppcGNzLT5vdXRidWY7CisJCXpwLT5hdmFpbF9vdXQgPSBnemlw Y3MtPm91dHNpemU7CisJfQorCisJZ3ppcGNzLT56cC0+bmV4dF9pbiA9ICh2b2lkICopIHVuY29u c3RpZnkodm9pZCAqLCBkYXRhKTsKKwlnemlwY3MtPnpwLT5hdmFpbF9pbiA9IGRMZW47CisJRGVm bGF0ZUNvbXByZXNzb3JHemlwKEFILCBjcywgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZAorUmVh ZERhdGFGcm9tQXJjaGl2ZUd6aXAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAq Y3MpCit7CisJel9zdHJlYW1wCXpwOworCWNoYXIJICAgKm91dDsKKwlpbnQJCQlyZXMgPSBaX09L OworCXNpemVfdAkJY250OworCWNoYXIJICAgKmJ1ZjsKKwlzaXplX3QJCWJ1ZmxlbjsKKworCXpw ID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNpemVvZih6X3N0cmVhbSkpOworCXpwLT56YWxsb2Mg PSBaX05VTEw7CisJenAtPnpmcmVlID0gWl9OVUxMOworCXpwLT5vcGFxdWUgPSBaX05VTEw7CisK KwlidWYgPSBwZ19tYWxsb2MoWkxJQl9JTl9TSVpFKTsKKwlidWZsZW4gPSBaTElCX0lOX1NJWkU7 CisKKwlvdXQgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0laRSArIDEpOworCisJaWYgKGluZmxhdGVJ bml0KHpwKSAhPSBaX09LKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJl c3Npb24gbGlicmFyeTogJXMiLAorCQkJCSB6cC0+bXNnKTsKKworCS8qIG5vIG1pbmltYWwgY2h1 bmsgc2l6ZSBmb3IgemxpYiAqLworCXdoaWxlICgoY250ID0gY3MtPnJlYWRGKEFILCAmYnVmLCAm YnVmbGVuKSkpCisJeworCQl6cC0+bmV4dF9pbiA9ICh2b2lkICopIGJ1ZjsKKwkJenAtPmF2YWls X2luID0gY250OworCisJCXdoaWxlICh6cC0+YXZhaWxfaW4gPiAwKQorCQl7CisJCQl6cC0+bmV4 dF9vdXQgPSAodm9pZCAqKSBvdXQ7CisJCQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsK KworCQkJcmVzID0gaW5mbGF0ZSh6cCwgMCk7CisJCQlpZiAocmVzICE9IFpfT0sgJiYgcmVzICE9 IFpfU1RSRUFNX0VORCkKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHVuY29tcHJlc3MgZGF0YTog JXMiLCB6cC0+bXNnKTsKKworCQkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9 ICdcMCc7CisJCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQs IEFIKTsKKwkJfQorCX0KKworCXpwLT5uZXh0X2luID0gTlVMTDsKKwl6cC0+YXZhaWxfaW4gPSAw OworCXdoaWxlIChyZXMgIT0gWl9TVFJFQU1fRU5EKQorCXsKKwkJenAtPm5leHRfb3V0ID0gKHZv aWQgKikgb3V0OworCQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKKwkJcmVzID0gaW5m bGF0ZSh6cCwgMCk7CisJCWlmIChyZXMgIT0gWl9PSyAmJiByZXMgIT0gWl9TVFJFQU1fRU5EKQor CQkJcGdfZmF0YWwoImNvdWxkIG5vdCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CisK KwkJb3V0W1pMSUJfT1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7CisJCWFod3JpdGUo b3V0LCAxLCBaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dCwgQUgpOworCX0KKworCWlmIChp bmZsYXRlRW5kKHpwKSAhPSBaX09LKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXBy ZXNzaW9uIGxpYnJhcnk6ICVzIiwgenAtPm1zZyk7CisKKwlmcmVlKGJ1Zik7CisJZnJlZShvdXQp OworCWZyZWUoenApOworfQorCisvKiBQdWJsaWMgcm91dGluZXMgdGhhdCBzdXBwb3J0IGd6aXAg Y29tcHJlc3NlZCBkYXRhIEkvTyAqLwordm9pZAorSW5pdENvbXByZXNzb3JHemlwKENvbXByZXNz b3JTdGF0ZSAqY3MsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYykKK3sKKwlHemlwQ29tcHJlc3NvclN0YXRlICpnemlwY3M7CisKKwljcy0+cmVhZERhdGEg PSBSZWFkRGF0YUZyb21BcmNoaXZlR3ppcDsKKwljcy0+d3JpdGVEYXRhID0gV3JpdGVEYXRhVG9B cmNoaXZlR3ppcDsKKwljcy0+ZW5kID0gRW5kQ29tcHJlc3Nvckd6aXA7CisKKwljcy0+Y29tcHJl c3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7CisKKwlnemlwY3MgPSAoR3ppcENvbXByZXNz b3JTdGF0ZSAqKSBwZ19tYWxsb2MwKHNpemVvZihHemlwQ29tcHJlc3NvclN0YXRlKSk7CisKKwlj cy0+cHJpdmF0ZV9kYXRhID0gZ3ppcGNzOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICogQ29tcHJlc3MgRmlsZSBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisK K3N0YXRpYyBzaXplX3QKK0d6aXBfcmVhZCh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVz c0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZh dGVfZGF0YTsKKwlzaXplX3QJCXJldDsKKworCXJldCA9IGd6cmVhZChnemZwLCBwdHIsIHNpemUp OworCWlmIChyZXQgIT0gc2l6ZSAmJiAhZ3plb2YoZ3pmcCkpCisJeworCQlpbnQJCQllcnJudW07 CisJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoZ3pmcCwgJmVycm51bSk7CisKKwkJcGdf ZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLAorCQkJCSBlcnJudW0g PT0gWl9FUlJOTyA/IHN0cmVycm9yKGVycm5vKSA6IGVycm1zZyk7CisJfQorCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHNpemVfdAorR3ppcF93cml0ZShjb25zdCB2b2lkICpwdHIsIHNpemVf dCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pG aWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBnendyaXRlKGd6ZnAsIHB0ciwgc2l6 ZSk7Cit9CisKK3N0YXRpYyBpbnQKK0d6aXBfZ2V0YyhDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkK K3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlpbnQJCQly ZXQ7CisKKwllcnJubyA9IDA7CisJcmV0ID0gZ3pnZXRjKGd6ZnApOworCWlmIChyZXQgPT0gRU9G KQorCXsKKwkJaWYgKCFnemVvZihnemZwKSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBm cm9tIGlucHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZWxzZQorCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKKwl9CisK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY2hhciAqCitHemlwX2dldHMoY2hhciAqcHRyLCBp bnQgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZwID0gKGd6 RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gZ3pnZXRzKGd6ZnAsIHB0ciwgc2l6 ZSk7Cit9CisKK3N0YXRpYyBpbnQKK0d6aXBfY2xvc2UoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgp Cit7CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7CisJaW50CQkJ c2F2ZV9lcnJubzsKKwlpbnQJCQlyZXQ7CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisK KwlyZXQgPSBnemNsb3NlKGd6ZnApOworCisJc2F2ZV9lcnJubyA9IGVycm5vOworCWVycm5vID0g c2F2ZV9lcnJubzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK0d6aXBfZW9mKENv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+ cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIGd6ZW9mKGd6ZnApOworfQorCitzdGF0aWMgY29uc3Qg Y2hhciAqCitHemlwX2dldF9lcnJvcihDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZp bGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKwljb25zdCBjaGFyICplcnJt c2c7CisJaW50CQkJZXJybnVtOworCisJZXJybXNnID0gZ3plcnJvcihnemZwLCAmZXJybnVtKTsK KwlpZiAoZXJybnVtID09IFpfRVJSTk8pCisJCWVycm1zZyA9IHN0cmVycm9yKGVycm5vKTsKKwor CXJldHVybiBlcnJtc2c7Cit9CisKK3N0YXRpYyBpbnQKK0d6aXBfb3Blbihjb25zdCBjaGFyICpw YXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQor eworCWd6RmlsZQkJZ3pmcDsKKwljaGFyCQltb2RlX2NvbXByZXNzaW9uWzMyXTsKKworCWlmIChD RkgtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwgIT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKQorCXsK KwkJLyoKKwkJICogdXNlciBoYXMgc3BlY2lmaWVkIGEgY29tcHJlc3Npb24gbGV2ZWwsIHNvIHRl bGwgemxpYiB0byB1c2UgaXQKKwkJICovCisJCXNucHJpbnRmKG1vZGVfY29tcHJlc3Npb24sIHNp emVvZihtb2RlX2NvbXByZXNzaW9uKSwgIiVzJWQiLAorCQkJCSBtb2RlLCBDRkgtPmNvbXByZXNz aW9uX3NwZWMubGV2ZWwpOworCX0KKwllbHNlCisJCXN0cmNweShtb2RlX2NvbXByZXNzaW9uLCBt b2RlKTsKKworCWlmIChmZCA+PSAwKQorCQlnemZwID0gZ3pkb3BlbihkdXAoZmQpLCBtb2RlX2Nv bXByZXNzaW9uKTsKKwllbHNlCisJCWd6ZnAgPSBnem9wZW4ocGF0aCwgbW9kZV9jb21wcmVzc2lv bik7CisKKwlpZiAoZ3pmcCA9PSBOVUxMKQorCQlyZXR1cm4gMTsKKworCUNGSC0+cHJpdmF0ZV9k YXRhID0gZ3pmcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitHemlwX29wZW5fd3Jp dGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgQ29tcHJlc3NGaWxlSGFuZGxl ICpDRkgpCit7CisJY2hhcgkgICAqZm5hbWU7CisJaW50CQkJcmV0OworCWludAkJCXNhdmVfZXJy bm87CisKKwlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOworCXJldCA9IENGSC0+b3Bl bl9mdW5jKGZuYW1lLCAtMSwgbW9kZSwgQ0ZIKTsKKworCXNhdmVfZXJybm8gPSBlcnJubzsKKwlw Z19mcmVlKGZuYW1lKTsKKwllcnJubyA9IHNhdmVfZXJybm87CisKKwlyZXR1cm4gcmV0OworfQor Cit2b2lkCitJbml0Q29tcHJlc3NHemlwKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILCBjb25zdCBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7CisJQ0ZILT5vcGVu X2Z1bmMgPSBHemlwX29wZW47CisJQ0ZILT5vcGVuX3dyaXRlX2Z1bmMgPSBHemlwX29wZW5fd3Jp dGU7CisJQ0ZILT5yZWFkX2Z1bmMgPSBHemlwX3JlYWQ7CisJQ0ZILT53cml0ZV9mdW5jID0gR3pp cF93cml0ZTsKKwlDRkgtPmdldHNfZnVuYyA9IEd6aXBfZ2V0czsKKwlDRkgtPmdldGNfZnVuYyA9 IEd6aXBfZ2V0YzsKKwlDRkgtPmNsb3NlX2Z1bmMgPSBHemlwX2Nsb3NlOworCUNGSC0+ZW9mX2Z1 bmMgPSBHemlwX2VvZjsKKwlDRkgtPmdldF9lcnJvcl9mdW5jID0gR3ppcF9nZXRfZXJyb3I7CisK KwlDRkgtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOworCisJQ0ZILT5wcml2 YXRlX2RhdGEgPSBOVUxMOworfQorI2Vsc2UJCQkJCQkJLyogSEFWRV9MSUJaICovCit2b2lkCitJ bml0Q29tcHJlc3Nvckd6aXAoQ29tcHJlc3NvclN0YXRlICpjcywgY29uc3QgcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxk IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Cit9CisKK3Zv aWQKK0luaXRDb21wcmVzc0d6aXAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsIGNvbnN0IHBnX2Nv bXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlwZ19mYXRhbCgidGhp cyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3ppcCIpOwor fQorI2VuZGlmCQkJCQkJCS8qIEhBVkVfTElCWiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2d6aXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNmRmZDBlYjA0ZAotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmgKQEAgLTAsMCArMSwyMiBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tcHJlc3NfZ3ppcC5oCisgKgkgSW50ZXJm YWNlIHRvIGNvbXByZXNzX2lvLmMgcm91dGluZXMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgIHNyYy9iaW4vcGdfZHVtcC9j b21wcmVzc19nemlwLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBfQ09N UFJFU1NfR1pJUF9IXworI2RlZmluZSBfQ09NUFJFU1NfR1pJUF9IXworCisjaW5jbHVkZSAiY29t cHJlc3NfaW8uaCIKKworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzb3JHemlwKENvbXByZXNzb3JT dGF0ZSAqY3MsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3Bl Yyk7CitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3NHemlwKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI LCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOworCisj ZW5kaWYJCQkJCQkJLyogX0NPTVBSRVNTX0daSVBfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19pby5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKaW5k ZXggMWRiOTczYjZhMi4uNzI3NDAzOWU4NyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX2lvLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTksNDIg KzksNDQgQEAKICAqCiAgKiBUaGlzIGZpbGUgaW5jbHVkZXMgdHdvIEFQSXMgZm9yIGRlYWxpbmcg d2l0aCBjb21wcmVzc2VkIGRhdGEuIFRoZSBmaXJzdAogICogcHJvdmlkZXMgbW9yZSBmbGV4aWJp bGl0eSwgdXNpbmcgY2FsbGJhY2tzIHRvIHJlYWQvd3JpdGUgZGF0YSBmcm9tIHRoZQotICogdW5k ZXJseWluZyBzdHJlYW0uIFRoZSBzZWNvbmQgQVBJIGlzIGEgd3JhcHBlciBhcm91bmQgZm9wZW4v Z3pvcGVuIGFuZAorICogdW5kZXJseWluZyBzdHJlYW0uIFRoZSBzZWNvbmQgQVBJIGlzIGEgd3Jh cHBlciBhcm91bmQgZm9wZW4gYW5kCiAgKiBmcmllbmRzLCBwcm92aWRpbmcgYW4gaW50ZXJmYWNl IHNpbWlsYXIgdG8gdGhvc2UsIGJ1dCBhYnN0cmFjdHMgYXdheQotICogdGhlIHBvc3NpYmxlIGNv bXByZXNzaW9uLiBCb3RoIEFQSXMgdXNlIGxpYnogZm9yIHRoZSBjb21wcmVzc2lvbiwgYnV0Ci0g KiB0aGUgc2Vjb25kIEFQSSB1c2VzIGd6aXAgaGVhZGVycywgc28gdGhlIHJlc3VsdGluZyBmaWxl cyBjYW4gYmUgZWFzaWx5Ci0gKiBtYW5pcHVsYXRlZCB3aXRoIHRoZSBnemlwIHV0aWxpdHkuCisg KiB0aGUgcG9zc2libGUgY29tcHJlc3Npb24uIFRoZSBzZWNvbmQgQVBJIGlzIGFpbWVkIGZvciB0 aGUgcmVzdWx0aW5nCisgKiBmaWxlcyBjYW4gYmUgZWFzaWx5IG1hbmlwdWxhdGVkIHdpdGggYW4g ZXh0ZXJuYWwgY29tcHJlc3Npb24gdXRpbGl0eQorICogcHJvZ3JhbS4KICAqCiAgKiBDb21wcmVz c29yIEFQSQogICogLS0tLS0tLS0tLS0tLS0KICAqCiAgKglUaGUgaW50ZXJmYWNlIGZvciB3cml0 aW5nIHRvIGFuIGFyY2hpdmUgY29uc2lzdHMgb2YgdGhyZWUgZnVuY3Rpb25zOgotICoJQWxsb2Nh dGVDb21wcmVzc29yLCBXcml0ZURhdGFUb0FyY2hpdmUgYW5kIEVuZENvbXByZXNzb3IuIEZpcnN0 IHlvdSBjYWxsCi0gKglBbGxvY2F0ZUNvbXByZXNzb3IsIHRoZW4gd3JpdGUgYWxsIHRoZSBkYXRh IGJ5IGNhbGxpbmcgV3JpdGVEYXRhVG9BcmNoaXZlCi0gKglhcyBtYW55IHRpbWVzIGFzIG5lZWRl ZCwgYW5kIGZpbmFsbHkgRW5kQ29tcHJlc3Nvci4gV3JpdGVEYXRhVG9BcmNoaXZlCi0gKglhbmQg RW5kQ29tcHJlc3NvciB3aWxsIGNhbGwgdGhlIFdyaXRlRnVuYyB0aGF0IHdhcyBwcm92aWRlZCB0 bwotICoJQWxsb2NhdGVDb21wcmVzc29yIGZvciBlYWNoIGNodW5rIG9mIGNvbXByZXNzZWQgZGF0 YS4KKyAqCUFsbG9jYXRlQ29tcHJlc3Nvciwgd3JpdGVEYXRhLCBhbmQgRW5kQ29tcHJlc3Nvci4g Rmlyc3QgeW91IGNhbGwKKyAqCUFsbG9jYXRlQ29tcHJlc3NvciwgdGhlbiB3cml0ZSBhbGwgdGhl IGRhdGEgYnkgY2FsbGluZyB3cml0ZURhdGEgYXMgbWFueQorICoJdGltZXMgYXMgbmVlZGVkLCBh bmQgZmluYWxseSBFbmRDb21wcmVzc29yLiB3cml0ZURhdGEgd2lsbCBjYWxsIHRoZQorICoJV3Jp dGVGdW5jIHRoYXQgd2FzIHByb3ZpZGVkIHRvIEFsbG9jYXRlQ29tcHJlc3NvciBmb3IgZWFjaCBj aHVuayBvZgorICoJY29tcHJlc3NlZCBkYXRhLgogICoKLSAqCVRoZSBpbnRlcmZhY2UgZm9yIHJl YWRpbmcgYW4gYXJjaGl2ZSBjb25zaXN0cyBvZiBqdXN0IG9uZSBmdW5jdGlvbjoKLSAqCVJlYWRE YXRhRnJvbUFyY2hpdmUuIFJlYWREYXRhRnJvbUFyY2hpdmUgcmVhZHMgdGhlIHdob2xlIGNvbXBy ZXNzZWQgaW5wdXQKLSAqCXN0cmVhbSwgYnkgcmVwZWF0ZWRseSBjYWxsaW5nIHRoZSBnaXZlbiBS ZWFkRnVuYy4gUmVhZEZ1bmMgcmV0dXJucyB0aGUKLSAqCWNvbXByZXNzZWQgZGF0YSBjaHVuayBh dCBhIHRpbWUsIGFuZCBSZWFkRGF0YUZyb21BcmNoaXZlIGRlY29tcHJlc3NlcyBpdAotICoJYW5k IHBhc3NlcyB0aGUgZGVjb21wcmVzc2VkIGRhdGEgdG8gYWh3cml0ZSgpLCB1bnRpbCBSZWFkRnVu YyByZXR1cm5zIDAKLSAqCXRvIHNpZ25hbCBFT0YuCi0gKgotICoJVGhlIGludGVyZmFjZSBpcyB0 aGUgc2FtZSBmb3IgY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2VkIHN0cmVhbXMuCisgKglUaGUg aW50ZXJmYWNlIGZvciByZWFkaW5nIGFuIGFyY2hpdmUgY29uc2lzdHMgb2YgdGhlIHNhbWUgdGhy ZWUgZnVuY3Rpb25zOgorICoJQWxsb2NhdGVDb21wcmVzc29yLCByZWFkRGF0YSwgYW5kIEVuZENv bXByZXNzb3IuIEZpcnN0IHlvdSBjYWxsCisgKglBbGxvY2F0ZUNvbXByZXNzb3IsIHRoZW4gcmVh ZCBhbGwgdGhlIGRhdGEgYnkgY2FsbGluZyByZWFkRGF0YSB0byByZWFkIHRoZQorICoJd2hvbGUg Y29tcHJlc3NlZCBzdHJlYW0gd2hpY2ggcmVwZWF0ZWRseSBjYWxscyB0aGUgZ2l2ZW4gUmVhZEZ1 bmMuIFJlYWRGdW5jCisgKglyZXR1cm5zIHRoZSBjb21wcmVzc2VkIGRhdGEgY2h1bmsgYXQgYSB0 aW1lLCBhbmQgcmVhZERhdGEgIGRlY29tcHJlc3NlcyBpdAorICoJYW5kIHBhc3NlcyB0aGUgZGVj b21wcmVzc2VkIGRhdGEgdG8gYWh3cml0ZSgpLCB1bnRpbCBSZWFkRnVuYyByZXR1cm5zIDAgdG8K KyAqCXNpZ25hbCBFT0YuIFRoZSBpbnRlcmZhY2UgaXMgdGhlIHNhbWUgZm9yIGNvbXByZXNzZWQg YW5kIHVuY29tcHJlc3NlZAorICoJc3RyZWFtcy4KICAqCiAgKiBDb21wcmVzc2VkIHN0cmVhbSBB UEkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKglUaGUgY29tcHJlc3NlZCBzdHJl YW0gQVBJIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIEMgc3RhbmRhcmQgZm9wZW4oKSBhbmQKLSAq CWxpYnoncyBnem9wZW4oKSBBUElzLiBJdCBhbGxvd3MgeW91IHRvIHVzZSB0aGUgc2FtZSBmdW5j dGlvbnMgZm9yCi0gKgljb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgc3RyZWFtcy4gY2ZvcGVu X3JlYWQoKSBmaXJzdCB0cmllcyB0byBvcGVuCi0gKgl0aGUgZmlsZSB3aXRoIGdpdmVuIG5hbWUs IGFuZCBpZiBpdCBmYWlscywgaXQgdHJpZXMgdG8gb3BlbiB0aGUgc2FtZQotICoJZmlsZSB3aXRo IHRoZSAuZ3ogc3VmZml4LiBjZm9wZW5fd3JpdGUoKSBvcGVucyBhIGZpbGUgZm9yIHdyaXRpbmcs IGFuCi0gKglleHRyYSBhcmd1bWVudCBzcGVjaWZpZXMgaWYgdGhlIGZpbGUgc2hvdWxkIGJlIGNv bXByZXNzZWQsIGFuZCBhZGRzIHRoZQotICoJLmd6IHN1ZmZpeCB0byB0aGUgZmlsZW5hbWUgaWYg c28uIFRoaXMgYWxsb3dzIHlvdSB0byBlYXNpbHkgaGFuZGxlIGJvdGgKLSAqCWNvbXByZXNzZWQg YW5kIHVuY29tcHJlc3NlZCBmaWxlcy4KKyAqCWxpYnoncyBnem9wZW4oKSBBUElzIGFuZCBjdXN0 b20gTFo0IGNhbGxzIHdoaWNoIHByb3ZpZGUgc2ltaWxhcgorICoJZnVuY3Rpb25hbGl0eS4gSXQg YWxsb3dzIHlvdSB0byB1c2UgdGhlIHNhbWUgZnVuY3Rpb25zIGZvciBjb21wcmVzc2VkIGFuZAor ICoJdW5jb21wcmVzc2VkIHN0cmVhbXMuIGNmb3Blbl9yZWFkKCkgZmlyc3QgdHJpZXMgdG8gb3Bl biB0aGUgZmlsZSB3aXRoIGdpdmVuCisgKgluYW1lLCBhbmQgaWYgaXQgZmFpbHMsIGl0IHRyaWVz IHRvIG9wZW4gdGhlIHNhbWUgZmlsZSB3aXRoIHRoZSAuZ3ogc3VmZml4LAorICoJZmFpbGluZyB0 aGF0IGl0IHRyaWVzIHRvIG9wZW4gdGhlIHNhbWUgZmlsZSB3aXRoIHRoZSAubHo0IHN1ZmZpeC4K KyAqCWNmb3Blbl93cml0ZSgpIG9wZW5zIGEgZmlsZSBmb3Igd3JpdGluZywgYW4gZXh0cmEgYXJn dW1lbnQgc3BlY2lmaWVzIHRoZQorICoJbWV0aG9kIHRvIHVzZSBzaG91bGQgdGhlIGZpbGUgYmUg Y29tcHJlc3NlZCwgYW5kIGFkZHMgdGhlIGFwcHJvcHJpYXRlCisgKglzdWZmaXgsIC5neiBvciAu bHo0LCB0byB0aGUgZmlsZW5hbWUgaWYgc28uIFRoaXMgYWxsb3dzIHlvdSB0byBlYXNpbHkgaGFu ZGxlCisgKglib3RoIGNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBmaWxlcy4KICAqCiAgKiBJ REVOVElGSUNBVElPTgogICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMKQEAgLTUz LDcgKzU1LDExIEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSA8 c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKwogI2luY2x1ZGUgImNvbXByZXNzX2lv LmgiCisjaW5jbHVkZSAiY29tcHJlc3NfZ3ppcC5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91dGls cy5oIgogCiAjaWZkZWYgSEFWRV9MSUJaCkBAIC02NSw4NCArNzEsNjkgQEAKICAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogICovCiAKLS8qIHR5cGVkZWYgYXBwZWFycyBpbiBjb21wcmVzc19pby5o ICovCi1zdHJ1Y3QgQ29tcHJlc3NvclN0YXRlCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJj aGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MpCiB7Ci0JcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjOwotCVdyaXRlRnVuYwl3cml0 ZUY7CisJc2l6ZV90CQljbnQ7CisJY2hhcgkgICAqYnVmOworCXNpemVfdAkJYnVmbGVuOwogCi0j aWZkZWYgSEFWRV9MSUJaCi0Jel9zdHJlYW1wCXpwOwotCWNoYXIJICAgKnpsaWJPdXQ7Ci0Jc2l6 ZV90CQl6bGliT3V0U2l6ZTsKLSNlbmRpZgotfTsKKwlidWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRf U0laRSk7CisJYnVmbGVuID0gWkxJQl9PVVRfU0laRTsKKworCXdoaWxlICgoY250ID0gY3MtPnJl YWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCisJeworCQlhaHdyaXRlKGJ1ZiwgMSwgY250LCBBSCk7 CisJfQorCisJZnJlZShidWYpOworfQogCi0vKiBSb3V0aW5lcyB0aGF0IHN1cHBvcnQgemxpYiBj b21wcmVzc2VkIGRhdGEgSS9PICovCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgdm9pZCBJbml0 Q29tcHJlc3NvclpsaWIoQ29tcHJlc3NvclN0YXRlICpjcywgaW50IGxldmVsKTsKLXN0YXRpYyB2 b2lkIERlZmxhdGVDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0 YXRlICpjcywKLQkJCQkJCQkJICBib29sIGZsdXNoKTsKLXN0YXRpYyB2b2lkIFJlYWREYXRhRnJv bUFyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRik7Ci1zdGF0aWMg dm9pZCBXcml0ZURhdGFUb0FyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29y U3RhdGUgKmNzLAotCQkJCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZExlbik7Ci1z dGF0aWMgdm9pZCBFbmRDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3Nv clN0YXRlICpjcyk7Ci0jZW5kaWYKIAotLyogUm91dGluZXMgdGhhdCBzdXBwb3J0IHVuY29tcHJl c3NlZCBkYXRhIEkvTyAqLwotc3RhdGljIHZvaWQgUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmUoQXJj aGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5jIHJlYWRGKTsKLXN0YXRpYyB2b2lkIFdyaXRlRGF0YVRv QXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCi0JCQkJ CQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVuKTsKK3N0YXRpYyB2b2lkCitXcml0 ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNz LAorCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKK3sKKwljcy0+d3JpdGVG KEFILCBkYXRhLCBkTGVuKTsKK30KKworc3RhdGljIHZvaWQKK0VuZENvbXByZXNzb3JOb25lKEFy Y2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCS8qIG5vIG9wICovCit9 CisKK3N0YXRpYyB2b2lkCitJbml0Q29tcHJlc3Nvck5vbmUoQ29tcHJlc3NvclN0YXRlICpjcywK KwkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMp Cit7CisJY3MtPnJlYWREYXRhID0gUmVhZERhdGFGcm9tQXJjaGl2ZU5vbmU7CisJY3MtPndyaXRl RGF0YSA9IFdyaXRlRGF0YVRvQXJjaGl2ZU5vbmU7CisJY3MtPmVuZCA9IEVuZENvbXByZXNzb3JO b25lOworCisJY3MtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOworfQogCiAv KiBQdWJsaWMgaW50ZXJmYWNlIHJvdXRpbmVzICovCiAKIC8qIEFsbG9jYXRlIGEgbmV3IGNvbXBy ZXNzb3IgKi8KIENvbXByZXNzb3JTdGF0ZSAqCiBBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAotCQkJCSAgIFdyaXRlRnVu YyB3cml0ZUYpCisJCQkJICAgUmVhZEZ1bmMgcmVhZEYsIFdyaXRlRnVuYyB3cml0ZUYpCiB7CiAJ Q29tcHJlc3NvclN0YXRlICpjczsKIAotI2lmbmRlZiBIQVZFX0xJQloKLQlpZiAoY29tcHJlc3Np b25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQkJcGdfZmF0YWwoInRo aXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsK LSNlbmRpZgotCiAJY3MgPSAoQ29tcHJlc3NvclN0YXRlICopIHBnX21hbGxvYzAoc2l6ZW9mKENv bXByZXNzb3JTdGF0ZSkpOworCWNzLT5yZWFkRiA9IHJlYWRGOwogCWNzLT53cml0ZUYgPSB3cml0 ZUY7Ci0JY3MtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOwogCi0JLyoKLQkg KiBQZXJmb3JtIGNvbXByZXNzaW9uIGFsZ29yaXRobSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4K LQkgKi8KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoY3MtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3Jp dGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVApCi0JCUluaXRDb21wcmVzc29yWmxpYihjcywgY3Mt PmNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOwotI2VuZGlmCi0KLQlyZXR1cm4gY3M7Ci19Ci0KLS8q Ci0gKiBSZWFkIGFsbCBjb21wcmVzc2VkIGRhdGEgZnJvbSB0aGUgaW5wdXQgc3RyZWFtICh2aWEg cmVhZEYpIGFuZCBwcmludCBpdAotICogb3V0IHdpdGggYWh3cml0ZSgpLgotICovCi12b2lkCi1S ZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILAotCQkJCQljb25zdCBwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCi0JCQkJCVJlYWRGdW5jIHJlYWRG KQotewogCXN3aXRjaCAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCiAJewogCQljYXNlIFBH X0NPTVBSRVNTSU9OX05PTkU6Ci0JCQlSZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBSCwgcmVhZEYp OworCQkJSW5pdENvbXByZXNzb3JOb25lKGNzLCBjb21wcmVzc2lvbl9zcGVjKTsKIAkJCWJyZWFr OwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlSZWFk RGF0YUZyb21BcmNoaXZlWmxpYihBSCwgcmVhZEYpOwotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJ0aGlz IGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Ci0j ZW5kaWYKKwkJCUluaXRDb21wcmVzc29yR3ppcChjcywgY29tcHJlc3Npb25fc3BlYyk7CiAJCQli cmVhazsKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6CiAJCQlwZ19mYXRhbCgiY29tcHJlc3Np b24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKQEAgLTE1MSwzNCArMTQy LDggQEAgUmVhZERhdGFGcm9tQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwKIAkJCXBnX2ZhdGFs KCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIlpTVEQiKTsKIAkJ CWJyZWFrOwogCX0KLX0KIAotLyoKLSAqIENvbXByZXNzIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBv dXRwdXQgc3RyZWFtICh2aWEgd3JpdGVGKS4KLSAqLwotdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZl KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAotCQkJCSAgIGNvbnN0IHZv aWQgKmRhdGEsIHNpemVfdCBkTGVuKQotewotCXN3aXRjaCAoY3MtPmNvbXByZXNzaW9uX3NwZWMu YWxnb3JpdGhtKQotCXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJV3JpdGVEYXRh VG9BcmNoaXZlTm9uZShBSCwgY3MsIGRhdGEsIGRMZW4pOwotCQkJYnJlYWs7Ci0JCWNhc2UgUEdf Q09NUFJFU1NJT05fR1pJUDoKLSNpZmRlZiBIQVZFX0xJQloKLQkJCVdyaXRlRGF0YVRvQXJjaGl2 ZVpsaWIoQUgsIGNzLCBkYXRhLCBkTGVuKTsKLSNlbHNlCi0JCQlwZ19mYXRhbCgidGhpcyBidWls ZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3ppcCIpOwotI2VuZGlm Ci0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0JCQlwZ19mYXRhbCgiY29t cHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKLQkJCWJyZWFr OwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24g d2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7Ci0JCQlicmVhazsKLQl9CisJ cmV0dXJuIGNzOwogfQogCiAvKgpAQCAtMTg3LDQwMSArMTUyLDE3OCBAQCBXcml0ZURhdGFUb0Fy Y2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCiB2b2lkCiBFbmRD b21wcmVzc29yKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQogewotCXN3 aXRjaCAoY3MtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQotCXsKLQkJY2FzZSBQR19DT01Q UkVTU0lPTl9OT05FOgotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKLSNp ZmRlZiBIQVZFX0xJQloKLQkJCUVuZENvbXByZXNzb3JabGliKEFILCBjcyk7Ci0jZWxzZQotCQkJ cGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVz IiwKLQkJCQkJImd6aXAiKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJ T05fTFo0OgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBw b3J0ZWQiLCAiTFo0Iik7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgot CQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAi WlNURCIpOwotCQkJYnJlYWs7Ci0JfQotCi0JZnJlZShjcyk7CisJY3MtPmVuZChBSCwgY3MpOwor CXBnX2ZyZWUoY3MpOwogfQogCi0vKiBQcml2YXRlIHJvdXRpbmVzLCBzcGVjaWZpYyB0byBlYWNo IGNvbXByZXNzaW9uIG1ldGhvZC4gKi8KLQotI2lmZGVmIEhBVkVfTElCWgotLyoKLSAqIEZ1bmN0 aW9ucyBmb3IgemxpYiBjb21wcmVzc2VkIG91dHB1dC4KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICogQ29tcHJlc3NlZCBzdHJlYW0gQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAq LwogCi1zdGF0aWMgdm9pZAotSW5pdENvbXByZXNzb3JabGliKENvbXByZXNzb3JTdGF0ZSAqY3Ms IGludCBsZXZlbCkKK3N0YXRpYyBpbnQKK2hhc1N1ZmZpeChjb25zdCBjaGFyICpmaWxlbmFtZSwg Y29uc3QgY2hhciAqc3VmZml4KQogewotCXpfc3RyZWFtcAl6cDsKLQotCXpwID0gY3MtPnpwID0g KHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNpemVvZih6X3N0cmVhbSkpOwotCXpwLT56YWxsb2MgPSBa X05VTEw7Ci0JenAtPnpmcmVlID0gWl9OVUxMOwotCXpwLT5vcGFxdWUgPSBaX05VTEw7Ci0KLQkv KgotCSAqIHpsaWJPdXRTaXplIGlzIHRoZSBidWZmZXIgc2l6ZSB3ZSB0ZWxsIHpsaWIgaXQgY2Fu IG91dHB1dCB0by4gIFdlCi0JICogYWN0dWFsbHkgYWxsb2NhdGUgb25lIGV4dHJhIGJ5dGUgYmVj YXVzZSBzb21lIHJvdXRpbmVzIHdhbnQgdG8gYXBwZW5kIGEKLQkgKiB0cmFpbGluZyB6ZXJvIGJ5 dGUgdG8gdGhlIHpsaWIgb3V0cHV0LgotCSAqLwotCWNzLT56bGliT3V0ID0gKGNoYXIgKikgcGdf bWFsbG9jKFpMSUJfT1VUX1NJWkUgKyAxKTsKLQljcy0+emxpYk91dFNpemUgPSBaTElCX09VVF9T SVpFOwotCi0JaWYgKGRlZmxhdGVJbml0KHpwLCBsZXZlbCkgIT0gWl9PSykKLQkJcGdfZmF0YWwo ImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwKLQkJCQkgenAt Pm1zZyk7Ci0KLQkvKiBKdXN0IGJlIHBhcmFub2lkIC0gbWF5YmUgRW5kIGlzIGNhbGxlZCBhZnRl ciBTdGFydCwgd2l0aCBubyBXcml0ZSAqLwotCXpwLT5uZXh0X291dCA9ICh2b2lkICopIGNzLT56 bGliT3V0OwotCXpwLT5hdmFpbF9vdXQgPSBjcy0+emxpYk91dFNpemU7CisJaW50CQkJZmlsZW5h bWVsZW4gPSBzdHJsZW4oZmlsZW5hbWUpOworCWludAkJCXN1ZmZpeGxlbiA9IHN0cmxlbihzdWZm aXgpOworCisJaWYgKGZpbGVuYW1lbGVuIDwgc3VmZml4bGVuKQorCQlyZXR1cm4gMDsKKworCXJl dHVybiBtZW1jbXAoJmZpbGVuYW1lW2ZpbGVuYW1lbGVuIC0gc3VmZml4bGVuXSwKKwkJCQkgIHN1 ZmZpeCwKKwkJCQkgIHN1ZmZpeGxlbikgPT0gMDsKIH0KIAorLyogZnJlZSgpIHdpdGhvdXQgY2hh bmdpbmcgZXJybm87IHVzZWZ1bCBpbiBzZXZlcmFsIHBsYWNlcyBiZWxvdyAqLwogc3RhdGljIHZv aWQKLUVuZENvbXByZXNzb3JabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUg KmNzKQorZnJlZV9rZWVwX2Vycm5vKHZvaWQgKnApCiB7Ci0Jel9zdHJlYW1wCXpwID0gY3MtPnpw OwotCi0JenAtPm5leHRfaW4gPSBOVUxMOwotCXpwLT5hdmFpbF9pbiA9IDA7Ci0KLQkvKiBGbHVz aCBhbnkgcmVtYWluaW5nIGRhdGEgZnJvbSB6bGliIGJ1ZmZlciAqLwotCURlZmxhdGVDb21wcmVz c29yWmxpYihBSCwgY3MsIHRydWUpOwotCi0JaWYgKGRlZmxhdGVFbmQoenApICE9IFpfT0spCi0J CXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgY29tcHJlc3Npb24gc3RyZWFtOiAlcyIsIHpwLT5t c2cpOworCWludAkJCXNhdmVfZXJybm8gPSBlcnJubzsKIAotCWZyZWUoY3MtPnpsaWJPdXQpOwot CWZyZWUoY3MtPnpwKTsKKwlmcmVlKHApOworCWVycm5vID0gc2F2ZV9lcnJubzsKIH0KIAotc3Rh dGljIHZvaWQKLURlZmxhdGVDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJl c3NvclN0YXRlICpjcywgYm9vbCBmbHVzaCkKKy8qCisgKiBDb21wcmVzc2lvbiBOb25lIGltcGxl bWVudGF0aW9uCisgKi8KK3N0YXRpYyBzaXplX3QKK3JlYWRfbm9uZSh2b2lkICpwdHIsIHNpemVf dCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKIHsKLQl6X3N0cmVhbXAJenAgPSBjcy0+ enA7Ci0JY2hhcgkgICAqb3V0ID0gY3MtPnpsaWJPdXQ7Ci0JaW50CQkJcmVzID0gWl9PSzsKKwlG SUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdAkJcmV0Owog Ci0Jd2hpbGUgKGNzLT56cC0+YXZhaWxfaW4gIT0gMCB8fCBmbHVzaCkKLQl7Ci0JCXJlcyA9IGRl ZmxhdGUoenAsIGZsdXNoID8gWl9GSU5JU0ggOiBaX05PX0ZMVVNIKTsKLQkJaWYgKHJlcyA9PSBa X1NUUkVBTV9FUlJPUikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29tcHJlc3MgZGF0YTogJXMi LCB6cC0+bXNnKTsKLQkJaWYgKChmbHVzaCAmJiAoenAtPmF2YWlsX291dCA8IGNzLT56bGliT3V0 U2l6ZSkpCi0JCQl8fCAoenAtPmF2YWlsX291dCA9PSAwKQotCQkJfHwgKHpwLT5hdmFpbF9pbiAh PSAwKQotCQkJKQotCQl7Ci0JCQkvKgotCQkJICogRXh0cmEgcGFyYW5vaWE6IGF2b2lkIHplcm8t bGVuZ3RoIGNodW5rcywgc2luY2UgYSB6ZXJvIGxlbmd0aAotCQkJICogY2h1bmsgaXMgdGhlIEVP RiBtYXJrZXIgaW4gdGhlIGN1c3RvbSBmb3JtYXQuIFRoaXMgc2hvdWxkIG5ldmVyCi0JCQkgKiBo YXBwZW4gYnV0Li4uCi0JCQkgKi8KLQkJCWlmICh6cC0+YXZhaWxfb3V0IDwgY3MtPnpsaWJPdXRT aXplKQotCQkJewotCQkJCS8qCi0JCQkJICogQW55IHdyaXRlIGZ1bmN0aW9uIHNob3VsZCBkbyBp dHMgb3duIGVycm9yIGNoZWNraW5nIGJ1dCB0bwotCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkbyBhIGNo ZWNrIGhlcmUgYXMgd2VsbC4uLgotCQkJCSAqLwotCQkJCXNpemVfdAkJbGVuID0gY3MtPnpsaWJP dXRTaXplIC0genAtPmF2YWlsX291dDsKLQotCQkJCWNzLT53cml0ZUYoQUgsIG91dCwgbGVuKTsK LQkJCX0KLQkJCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKLQkJCXpwLT5hdmFpbF9vdXQg PSBjcy0+emxpYk91dFNpemU7Ci0JCX0KKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gMDsKIAot CQlpZiAocmVzID09IFpfU1RSRUFNX0VORCkKLQkJCWJyZWFrOwotCX0KKwlyZXQgPSBmcmVhZChw dHIsIDEsIHNpemUsIGZwKTsKKwlpZiAocmV0ICE9IHNpemUgJiYgIWZlb2YoZnApKQorCQlwZ19m YXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIHN0cmVycm9y KGVycm5vKSk7CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZAotV3JpdGVEYXRhVG9B cmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJ ICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRMZW4pCitzdGF0aWMgc2l6ZV90Cit3cml0ZV9u b25lKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI KQogewotCWNzLT56cC0+bmV4dF9pbiA9ICh2b2lkICopIHVuY29uc3RpZnkoY2hhciAqLCBkYXRh KTsKLQljcy0+enAtPmF2YWlsX2luID0gZExlbjsKLQlEZWZsYXRlQ29tcHJlc3NvclpsaWIoQUgs IGNzLCBmYWxzZSk7CisJcmV0dXJuIGZ3cml0ZShwdHIsIDEsIHNpemUsIChGSUxFICopIENGSC0+ cHJpdmF0ZV9kYXRhKTsKIH0KIAotc3RhdGljIHZvaWQKLVJlYWREYXRhRnJvbUFyY2hpdmVabGli KEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRikKK3N0YXRpYyBjb25zdCBjaGFyICoK K2dldF9lcnJvcl9ub25lKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQogewotCXpfc3RyZWFtcAl6 cDsKLQljaGFyCSAgICpvdXQ7Ci0JaW50CQkJcmVzID0gWl9PSzsKLQlzaXplX3QJCWNudDsKLQlj aGFyCSAgICpidWY7Ci0Jc2l6ZV90CQlidWZsZW47Ci0KLQl6cCA9ICh6X3N0cmVhbXApIHBnX21h bGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKLQl6cC0+emFsbG9jID0gWl9OVUxMOwotCXpwLT56ZnJl ZSA9IFpfTlVMTDsKLQl6cC0+b3BhcXVlID0gWl9OVUxMOwotCi0JYnVmID0gcGdfbWFsbG9jKFpM SUJfSU5fU0laRSk7Ci0JYnVmbGVuID0gWkxJQl9JTl9TSVpFOwotCi0Jb3V0ID0gcGdfbWFsbG9j KFpMSUJfT1VUX1NJWkUgKyAxKTsKLQotCWlmIChpbmZsYXRlSW5pdCh6cCkgIT0gWl9PSykKLQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwK LQkJCQkgenAtPm1zZyk7Ci0KLQkvKiBubyBtaW5pbWFsIGNodW5rIHNpemUgZm9yIHpsaWIgKi8K LQl3aGlsZSAoKGNudCA9IHJlYWRGKEFILCAmYnVmLCAmYnVmbGVuKSkpCi0JewotCQl6cC0+bmV4 dF9pbiA9ICh2b2lkICopIGJ1ZjsKLQkJenAtPmF2YWlsX2luID0gY250OwotCi0JCXdoaWxlICh6 cC0+YXZhaWxfaW4gPiAwKQotCQl7Ci0JCQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBvdXQ7Ci0J CQl6cC0+YXZhaWxfb3V0ID0gWkxJQl9PVVRfU0laRTsKKwlyZXR1cm4gc3RyZXJyb3IoZXJybm8p OworfQogCi0JCQlyZXMgPSBpbmZsYXRlKHpwLCAwKTsKLQkJCWlmIChyZXMgIT0gWl9PSyAmJiBy ZXMgIT0gWl9TVFJFQU1fRU5EKQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdW5jb21wcmVzcyBk YXRhOiAlcyIsIHpwLT5tc2cpOworc3RhdGljIGNoYXIgKgorZ2V0c19ub25lKGNoYXIgKnB0ciwg aW50IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCXJldHVybiBmZ2V0cyhwdHIs IHNpemUsIChGSUxFICopIENGSC0+cHJpdmF0ZV9kYXRhKTsKK30KIAotCQkJb3V0W1pMSUJfT1VU X1NJWkUgLSB6cC0+YXZhaWxfb3V0XSA9ICdcMCc7Ci0JCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9P VVRfU0laRSAtIHpwLT5hdmFpbF9vdXQsIEFIKTsKLQkJfQotCX0KK3N0YXRpYyBpbnQKK2dldGNf bm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpmcCA9IChGSUxFICop IENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldDsKIAotCXpwLT5uZXh0X2luID0gTlVMTDsK LQl6cC0+YXZhaWxfaW4gPSAwOwotCXdoaWxlIChyZXMgIT0gWl9TVFJFQU1fRU5EKQorCXJldCA9 IGZnZXRjKGZwKTsKKwlpZiAocmV0ID09IEVPRikKIAl7Ci0JCXpwLT5uZXh0X291dCA9ICh2b2lk ICopIG91dDsKLQkJenAtPmF2YWlsX291dCA9IFpMSUJfT1VUX1NJWkU7Ci0JCXJlcyA9IGluZmxh dGUoenAsIDApOwotCQlpZiAocmVzICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKLQkJ CXBnX2ZhdGFsKCJjb3VsZCBub3QgdW5jb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwotCi0J CW91dFtaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dF0gPSAnXDAnOwotCQlhaHdyaXRlKG91 dCwgMSwgWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXQsIEFIKTsKKwkJaWYgKCFmZW9mKGZw KSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgc3Ry ZXJyb3IoZXJybm8pKTsKKwkJZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20g aW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKIAl9CiAKLQlpZiAoaW5mbGF0ZUVuZCh6cCkgIT0g Wl9PSykKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAl cyIsIHpwLT5tc2cpOwotCi0JZnJlZShidWYpOwotCWZyZWUob3V0KTsKLQlmcmVlKHpwKTsKKwly ZXR1cm4gcmV0OwogfQotI2VuZGlmCQkJCQkJCS8qIEhBVkVfTElCWiAqLwotCiAKLS8qCi0gKiBG dW5jdGlvbnMgZm9yIHVuY29tcHJlc3NlZCBvdXRwdXQuCi0gKi8KLQotc3RhdGljIHZvaWQKLVJl YWREYXRhRnJvbUFyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRikK K3N0YXRpYyBpbnQKK2Nsb3NlX25vbmUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCiB7Ci0Jc2l6 ZV90CQljbnQ7Ci0JY2hhcgkgICAqYnVmOwotCXNpemVfdAkJYnVmbGVuOworCUZJTEUJICAgKmZw ID0gKEZJTEUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisJaW50CQkJcmV0ID0gMDsKIAotCWJ1ZiA9 IHBnX21hbGxvYyhaTElCX09VVF9TSVpFKTsKLQlidWZsZW4gPSBaTElCX09VVF9TSVpFOworCUNG SC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAotCXdoaWxlICgoY250ID0gcmVhZEYoQUgsICZidWYs ICZidWZsZW4pKSkKLQl7Ci0JCWFod3JpdGUoYnVmLCAxLCBjbnQsIEFIKTsKLQl9CisJaWYgKGZw KQorCQlyZXQgPSBmY2xvc2UoZnApOwogCi0JZnJlZShidWYpOworCXJldHVybiByZXQ7CiB9CiAK LXN0YXRpYyB2b2lkCi1Xcml0ZURhdGFUb0FyY2hpdmVOb25lKEFyY2hpdmVIYW5kbGUgKkFILCBD b21wcmVzc29yU3RhdGUgKmNzLAotCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZExl bikKKworc3RhdGljIGludAorZW9mX25vbmUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCiB7Ci0J Y3MtPndyaXRlRihBSCwgZGF0YSwgZExlbik7CisJcmV0dXJuIGZlb2YoKEZJTEUgKikgQ0ZILT5w cml2YXRlX2RhdGEpOwogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29tcHJl c3NlZCBzdHJlYW0gQVBJCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0vKgotICog Y2ZwIHJlcHJlc2VudHMgYW4gb3BlbiBzdHJlYW0sIHdyYXBwaW5nIHRoZSB1bmRlcmx5aW5nIEZJ TEUgb3IgZ3pGaWxlCi0gKiBwb2ludGVyLiBUaGlzIGlzIG9wYXF1ZSB0byB0aGUgY2FsbGVycy4K LSAqLwotc3RydWN0IGNmcAorc3RhdGljIGludAorb3Blbl9ub25lKGNvbnN0IGNoYXIgKnBhdGgs IGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCiB7Ci0J cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjOwotCXZvaWQJICAgKmZw OwotfTsKKwlBc3NlcnQoQ0ZILT5wcml2YXRlX2RhdGEgPT0gTlVMTCk7CiAKLSNpZmRlZiBIQVZF X0xJQloKLXN0YXRpYyBpbnQJaGFzU3VmZml4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBj aGFyICpzdWZmaXgpOwotI2VuZGlmCisJaWYgKGZkID49IDApCisJCUNGSC0+cHJpdmF0ZV9kYXRh ID0gZmRvcGVuKGR1cChmZCksIG1vZGUpOworCWVsc2UKKwkJQ0ZILT5wcml2YXRlX2RhdGEgPSBm b3BlbihwYXRoLCBtb2RlKTsKIAotLyogZnJlZSgpIHdpdGhvdXQgY2hhbmdpbmcgZXJybm87IHVz ZWZ1bCBpbiBzZXZlcmFsIHBsYWNlcyBiZWxvdyAqLwotc3RhdGljIHZvaWQKLWZyZWVfa2VlcF9l cnJubyh2b2lkICpwKQotewotCWludAkJCXNhdmVfZXJybm8gPSBlcnJubzsKKwlpZiAoQ0ZILT5w cml2YXRlX2RhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CiAKLQlmcmVlKHApOwotCWVycm5vID0g c2F2ZV9lcnJubzsKKwlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIE9wZW4gYSBmaWxlIGZvciByZWFk aW5nLiAncGF0aCcgaXMgdGhlIGZpbGUgdG8gb3BlbiwgYW5kICdtb2RlJyBzaG91bGQKLSAqIGJl IGVpdGhlciAiciIgb3IgInJiIi4KLSAqCi0gKiBJZiB0aGUgZmlsZSBhdCAncGF0aCcgZG9lcyBu b3QgZXhpc3QsIHdlIGFwcGVuZCB0aGUgIi5neiIgc3VmZml4IChpZiAncGF0aCcKLSAqIGRvZXNu J3QgYWxyZWFkeSBoYXZlIGl0KSBhbmQgdHJ5IGFnYWluLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBh cyAncGF0aCcsCi0gKiB0aGlzIHdpbGwgb3BlbiBlaXRoZXIgImZvbyIgb3IgImZvby5neiIuCi0g KgotICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5v LgotICovCi1jZnAgKgotY2ZvcGVuX3JlYWQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAq bW9kZSkKK3N0YXRpYyBpbnQKK29wZW5fd3JpdGVfbm9uZShjb25zdCBjaGFyICpwYXRoLCBjb25z dCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKIHsKLQljZnAJCSAgICpmcDsK LQotCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHswfTsKKwlB c3NlcnQoQ0ZILT5wcml2YXRlX2RhdGEgPT0gTlVMTCk7CiAKLSNpZmRlZiBIQVZFX0xJQloKLQlp ZiAoaGFzU3VmZml4KHBhdGgsICIuZ3oiKSkKLQl7Ci0JCWNvbXByZXNzaW9uX3NwZWMuYWxnb3Jp dGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKLQkJZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29t cHJlc3Npb25fc3BlYyk7Ci0JfQotCWVsc2UKLSNlbmRpZgotCXsKLQkJY29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwotCQlmcCA9IGNmb3BlbihwYXRoLCBt b2RlLCBjb21wcmVzc2lvbl9zcGVjKTsKLSNpZmRlZiBIQVZFX0xJQloKLQkJaWYgKGZwID09IE5V TEwpCi0JCXsKLQkJCWNoYXIJICAgKmZuYW1lOworCUNGSC0+cHJpdmF0ZV9kYXRhID0gZm9wZW4o cGF0aCwgbW9kZSk7CisJaWYgKENGSC0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJCXJldHVybiAx OwogCi0JCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOwotCQkJY29tcHJlc3Npb25f c3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwotCQkJZnAgPSBjZm9wZW4oZm5h bWUsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwotCQkJZnJlZV9rZWVwX2Vycm5vKGZuYW1lKTsK LQkJfQotI2VuZGlmCi0JfQotCXJldHVybiBmcDsKKwlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIE9w ZW4gYSBmaWxlIGZvciB3cml0aW5nLiAncGF0aCcgaW5kaWNhdGVzIHRoZSBwYXRoIG5hbWUsIGFu ZCAnbW9kZScgbXVzdAotICogYmUgYSBmaWxlbW9kZSBhcyBhY2NlcHRlZCBieSBmb3BlbigpIGFu ZCBnem9wZW4oKSB0aGF0IGluZGljYXRlcyB3cml0aW5nCi0gKiAoInciLCAid2IiLCAiYSIsIG9y ICJhYiIpLgotICoKLSAqIElmICdjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobScgaXMgR1pJUCwg YSBnemlwIGNvbXByZXNzZWQgc3RyZWFtIGlzIG9wZW5lZCwKLSAqIGFuZCAnY29tcHJlc3Npb25f c3BlYy5sZXZlbCcgdXNlZC4gVGhlICIuZ3oiIHN1ZmZpeCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVk IHRvCi0gKiAncGF0aCcgaW4gdGhhdCBjYXNlLgotICoKLSAqIE9uIGZhaWx1cmUsIHJldHVybiBO VUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KLSAqLwotY2ZwICoKLWNmb3Blbl93cml0 ZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLAotCQkJIGNvbnN0IHBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3N0YXRpYyB2b2lkCitJbml0Q29t cHJlc3NOb25lKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZILAorCQkJCSBjb25zdCBwZ19jb21wcmVz c19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCiB7Ci0JY2ZwCQkgICAqZnA7Ci0KLQlp ZiAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTk9ORSkKLQkJ ZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0JZWxzZQotCXsKLSNp ZmRlZiBIQVZFX0xJQloKLQkJY2hhcgkgICAqZm5hbWU7Ci0KLQkJZm5hbWUgPSBwc3ByaW50Zigi JXMuZ3oiLCBwYXRoKTsKLQkJZnAgPSBjZm9wZW4oZm5hbWUsIG1vZGUsIGNvbXByZXNzaW9uX3Nw ZWMpOwotCQlmcmVlX2tlZXBfZXJybm8oZm5hbWUpOwotI2Vsc2UKLQkJcGdfZmF0YWwoInRoaXMg YnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKLQkJ ZnAgPSBOVUxMOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0jZW5kaWYKLQl9Ci0JcmV0 dXJuIGZwOworCUNGSC0+b3Blbl9mdW5jID0gb3Blbl9ub25lOworCUNGSC0+b3Blbl93cml0ZV9m dW5jID0gb3Blbl93cml0ZV9ub25lOworCUNGSC0+cmVhZF9mdW5jID0gcmVhZF9ub25lOworCUNG SC0+d3JpdGVfZnVuYyA9IHdyaXRlX25vbmU7CisJQ0ZILT5nZXRzX2Z1bmMgPSBnZXRzX25vbmU7 CisJQ0ZILT5nZXRjX2Z1bmMgPSBnZXRjX25vbmU7CisJQ0ZILT5jbG9zZV9mdW5jID0gY2xvc2Vf bm9uZTsKKwlDRkgtPmVvZl9mdW5jID0gZW9mX25vbmU7CisJQ0ZILT5nZXRfZXJyb3JfZnVuYyA9 IGdldF9lcnJvcl9ub25lOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBOVUxMOwogfQogCiAvKgot ICogVGhpcyBpcyB0aGUgd29ya2hvcnNlIGZvciBjZm9wZW4oKSBvciBjZmRvcGVuKCkuIEl0IG9w ZW5zIGZpbGUgJ3BhdGgnIG9yCi0gKiBhc3NvY2lhdGVzIGEgc3RyZWFtICdmZCcsIGlmICdmZCcg aXMgYSB2YWxpZCBkZXNjcmlwdG9yLCBpbiAnbW9kZScuIFRoZQotICogZGVzY3JpcHRvciBpcyBu b3QgZHVwJ2VkIGFuZCBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZG8gc28u Ci0gKiBUaGUgY2FsbGVyIG11c3QgdmVyaWZ5IHRoYXQgdGhlICdjb21wcmVzc19hbGdvcml0aG0n IGlzIHN1cHBvcnRlZCBieSB0aGUKLSAqIGN1cnJlbnQgYnVpbGQuCi0gKgotICogT24gZmFpbHVy ZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGluIGVycm5vLgorICogUHVibGljIGlu dGVyZmFjZQogICovCi1zdGF0aWMgY2ZwICoKLWNmb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpw YXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc2lvbl9zcGVjKQorQ29tcHJlc3NGaWxlSGFuZGxlICoKK0luaXRDb21wcmVz c0ZpbGVIYW5kbGUoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjKQogewotCWNmcAkJICAgKmZwID0gcGdfbWFsbG9jKHNpemVvZihjZnApKTsKKwlDb21wcmVz c0ZpbGVIYW5kbGUgKkNGSDsKIAotCWZwLT5jb21wcmVzc2lvbl9zcGVjID0gY29tcHJlc3Npb25f c3BlYzsKKwlDRkggPSBwZ19tYWxsb2MwKHNpemVvZihDb21wcmVzc0ZpbGVIYW5kbGUpKTsKIAog CXN3aXRjaCAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCiAJewogCQljYXNlIFBHX0NPTVBS RVNTSU9OX05PTkU6Ci0JCQlpZiAoZmQgPj0gMCkKLQkJCQlmcC0+ZnAgPSBmZG9wZW4oZmQsIG1v ZGUpOwotCQkJZWxzZQotCQkJCWZwLT5mcCA9IGZvcGVuKHBhdGgsIG1vZGUpOwotCQkJaWYgKGZw LT5mcCA9PSBOVUxMKQotCQkJewotCQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0JCQkJZnAgPSBO VUxMOwotCQkJfQotCisJCQlJbml0Q29tcHJlc3NOb25lKENGSCwgY29tcHJlc3Npb25fc3BlYyk7 CiAJCQlicmVhazsKIAkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElC WgotCQkJaWYgKGNvbXByZXNzaW9uX3NwZWMubGV2ZWwgIT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9O KQotCQkJewotCQkJCS8qCi0JCQkJICogdXNlciBoYXMgc3BlY2lmaWVkIGEgY29tcHJlc3Npb24g bGV2ZWwsIHNvIHRlbGwgemxpYiB0byB1c2UKLQkJCQkgKiBpdAotCQkJCSAqLwotCQkJCWNoYXIJ CW1vZGVfY29tcHJlc3Npb25bMzJdOwotCi0JCQkJc25wcmludGYobW9kZV9jb21wcmVzc2lvbiwg c2l6ZW9mKG1vZGVfY29tcHJlc3Npb24pLCAiJXMlZCIsCi0JCQkJCQkgbW9kZSwgY29tcHJlc3Np b25fc3BlYy5sZXZlbCk7Ci0JCQkJaWYgKGZkID49IDApCi0JCQkJCWZwLT5mcCA9IGd6ZG9wZW4o ZmQsIG1vZGVfY29tcHJlc3Npb24pOwotCQkJCWVsc2UKLQkJCQkJZnAtPmZwID0gZ3pvcGVuKHBh dGgsIG1vZGVfY29tcHJlc3Npb24pOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIGRvbid0 IHNwZWNpZnkgYSBsZXZlbCwganVzdCB1c2UgdGhlIHpsaWIgZGVmYXVsdCAqLwotCQkJCWlmIChm ZCA+PSAwKQotCQkJCQlmcC0+ZnAgPSBnemRvcGVuKGZkLCBtb2RlKTsKLQkJCQllbHNlCi0JCQkJ CWZwLT5mcCA9IGd6b3BlbihwYXRoLCBtb2RlKTsKLQkJCX0KLQotCQkJaWYgKGZwLT5mcCA9PSBO VUxMKQotCQkJewotCQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0JCQkJZnAgPSBOVUxMOwotCQkJ fQotI2Vsc2UKLQkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJl c3Npb24gd2l0aCAlcyIsICJnemlwIik7Ci0jZW5kaWYKKwkJCUluaXRDb21wcmVzc0d6aXAoQ0ZI LCBjb21wcmVzc2lvbl9zcGVjKTsKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0xa NDoKIAkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVk IiwgIkxaNCIpOwpAQCAtNTkxLDI2NiArMzMzLDg4IEBAIGNmb3Blbl9pbnRlcm5hbChjb25zdCBj aGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCiAJCQlicmVhazsKIAl9CiAKLQly ZXR1cm4gZnA7CisJcmV0dXJuIENGSDsKIH0KIAotY2ZwICoKLWNmb3Blbihjb25zdCBjaGFyICpw YXRoLCBjb25zdCBjaGFyICptb2RlLAotCSAgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYykKKy8qCisgKiBPcGVuIGEgZmlsZSBmb3IgcmVhZGluZy4gJ3Bh dGgnIGlzIHRoZSBmaWxlIHRvIG9wZW4sIGFuZCAnbW9kZScgc2hvdWxkCisgKiBiZSBlaXRoZXIg InIiIG9yICJyYiIuCisgKgorICogSWYgdGhlIGZpbGUgYXQgJ3BhdGgnIGRvZXMgbm90IGV4aXN0 LCB3ZSBhcHBlbmQgdGhlICJ7Lmd6LC5sejR9IiBzdWZmaXggKGkKKyAqICdwYXRoJyBkb2Vzbid0 IGFscmVhZHkgaGF2ZSBpdCkgYW5kIHRyeSBhZ2Fpbi4gU28gaWYgeW91IHBhc3MgImZvbyIgYXMK KyAqICdwYXRoJywgdGhpcyB3aWxsIG9wZW4gZWl0aGVyICJmb28iIG9yICJmb28uZ3oiIG9yICJm b28ubHo0IiwgdHJ5aW5nIGluIHRoYXQKKyAqIG9yZGVyLgorICoKKyAqIE9uIGZhaWx1cmUsIHJl dHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqLworQ29tcHJlc3NGaWxl SGFuZGxlICoKK0luaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFyICpwYXRo LCBjb25zdCBjaGFyICptb2RlKQogewotCXJldHVybiBjZm9wZW5faW50ZXJuYWwocGF0aCwgLTEs IG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwotfQorCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0g TlVMTDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyCSAgICpmbmFtZTsKKwlwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMgPSB7MH07CiAKLWNmcCAqCi1jZmRvcGVuKGlu dCBmZCwgY29uc3QgY2hhciAqbW9kZSwKLQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc2lvbl9zcGVjKQotewotCXJldHVybiBjZm9wZW5faW50ZXJuYWwoTlVMTCwgZmQs IG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOwotfQorCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGht ID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKIAotaW50Ci1jZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6 ZSwgY2ZwICpmcCkKLXsKLQlpbnQJCQlyZXQgPSAwOworCUFzc2VydChzdHJjbXAobW9kZSwgInIi KSA9PSAwIHx8IHN0cmNtcChtb2RlLCAicmIiKSA9PSAwKTsKIAotCWlmIChzaXplID09IDApCi0J CXJldHVybiAwOworCWZuYW1lID0gc3RyZHVwKHBhdGgpOwogCi0Jc3dpdGNoIChmcC0+Y29tcHJl c3Npb25fc3BlYy5hbGdvcml0aG0pCisJaWYgKGhhc1N1ZmZpeChmbmFtZSwgIi5neiIpKQorCQlj b21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CisJZWxzZQog CXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgotCQkJcmV0ID0gZnJlYWQocHRyLCAxLCBz aXplLCAoRklMRSAqKSBmcC0+ZnApOwotCQkJaWYgKHJldCAhPSBzaXplICYmICFmZW9mKChGSUxF ICopIGZwLT5mcCkpCi0JCQkJUkVBRF9FUlJPUl9FWElUKChGSUxFICopIGZwLT5mcCk7CisJCWJv b2wJCWV4aXN0czsKIAotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fR1pJUDoKKwkJ ZXhpc3RzID0gKHN0YXQocGF0aCwgJnN0KSA9PSAwKTsKKwkJLyogYXZvaWQgdW51c2VkIHdhcm5p bmcgaWYgaXQgaXMgbm90IGJ1aWxkIHdpdGggY29tcHJlc3Npb24gKi8KKwkJaWYgKGV4aXN0cykK KwkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKICNp ZmRlZiBIQVZFX0xJQloKLQkJCXJldCA9IGd6cmVhZCgoZ3pGaWxlKSBmcC0+ZnAsIHB0ciwgc2l6 ZSk7Ci0JCQlpZiAocmV0ICE9IHNpemUgJiYgIWd6ZW9mKChnekZpbGUpIGZwLT5mcCkpCi0JCQl7 Ci0JCQkJaW50CQkJZXJybnVtOwotCQkJCWNvbnN0IGNoYXIgKmVycm1zZyA9IGd6ZXJyb3IoKGd6 RmlsZSkgZnAtPmZwLCAmZXJybnVtKTsKLQotCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBm cm9tIGlucHV0IGZpbGU6ICVzIiwKLQkJCQkJCSBlcnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9y KGVycm5vKSA6IGVycm1zZyk7Ci0JCQl9Ci0jZWxzZQotCQkJcGdfZmF0YWwoInRoaXMgYnVpbGQg ZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwKLQkJCQkJImd6aXAiKTsKLSNl bmRpZgotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgotCQkJcGdfZmF0YWwo ImNvbXByZXNzaW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7Ci0JCQli cmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9aU1REOgotCQkJcGdfZmF0YWwoImNvbXByZXNz aW9uIHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOwotCQkJYnJlYWs7Ci0J fQotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50Ci1jZndyaXRlKGNvbnN0IHZvaWQgKnB0ciwgaW50 IHNpemUsIGNmcCAqZnApCi17Ci0JaW50CQkJcmV0ID0gMDsKLQotCXN3aXRjaCAoZnAtPmNvbXBy ZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQotCXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgot CQkJcmV0ID0gZndyaXRlKHB0ciwgMSwgc2l6ZSwgKEZJTEUgKikgZnAtPmZwKTsKLQkJCWJyZWFr OwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlyZXQg PSBnendyaXRlKChnekZpbGUpIGZwLT5mcCwgcHRyLCBzaXplKTsKLSNlbHNlCi0JCQlwZ19mYXRh bCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLAotCQkJ CQkiZ3ppcCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6 Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIs ICJMWjQiKTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6Ci0JCQlwZ19m YXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1REIik7 Ci0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQKLWNmZ2V0YyhjZnAgKmZw KQotewotCWludAkJCXJldCA9IDA7Ci0KLQlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFs Z29yaXRobSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZnZXRj KChGSUxFICopIGZwLT5mcCk7Ci0JCQlpZiAocmV0ID09IEVPRikKLQkJCQlSRUFEX0VSUk9SX0VY SVQoKEZJTEUgKikgZnAtPmZwKTsKKwkJaWYgKCFleGlzdHMpCisJCXsKKwkJCWZyZWVfa2VlcF9l cnJubyhmbmFtZSk7CisJCQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOworCQkJZXhp c3RzID0gKHN0YXQoZm5hbWUsICZzdCkgPT0gMCk7CiAKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NP TVBSRVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlyZXQgPSBnemdldGMoKGd6Rmls ZSkgZnAtPmZwKTsKLQkJCWlmIChyZXQgPT0gRU9GKQotCQkJewotCQkJCWlmICghZ3plb2YoKGd6 RmlsZSkgZnAtPmZwKSkKLQkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQg ZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOwotCQkJCWVsc2UKLQkJCQkJcGdfZmF0YWwoImNv dWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsKLQkJCX0KLSNlbHNl Ci0JCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdp dGggJXMiLAotCQkJCQkiZ3ppcCIpOworCQkJaWYgKGV4aXN0cykKKwkJCQljb21wcmVzc2lvbl9z cGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CisJCX0KICNlbmRpZgotCQkJYnJl YWs7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9u IHdpdGggJXMgaXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiTFo0Iik7Ci0JCQlicmVhazsKLQkJY2Fz ZSBQR19DT01QUkVTU0lPTl9aU1REOgotCQkJcGdfZmF0YWwoImNvbXByZXNzaW9uIHdpdGggJXMg aXMgbm90IHlldCBzdXBwb3J0ZWQiLCAiWlNURCIpOwotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJu IHJldDsKLX0KLQotY2hhciAqCi1jZmdldHMoY2ZwICpmcCwgY2hhciAqYnVmLCBpbnQgbGVuKQot ewotCWNoYXIJICAgKnJldCA9IE5VTEw7Ci0KLQlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVj LmFsZ29yaXRobSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZn ZXRzKGJ1ZiwgbGVuLCAoRklMRSAqKSBmcC0+ZnApOworI2lmZGVmIFVTRV9MWjQKKwkJaWYgKCFl eGlzdHMpCisJCXsKKwkJCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7CisJCQlmbmFtZSA9IHBzcHJp bnRmKCIlcy5sejQiLCBwYXRoKTsKKwkJCWV4aXN0cyA9IChzdGF0KGZuYW1lLCAmc3QpID09IDAp OwogCi0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVf TElCWgotCQkJcmV0ID0gZ3pnZXRzKChnekZpbGUpIGZwLT5mcCwgYnVmLCBsZW4pOwotI2Vsc2UK LQkJCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0 aCAlcyIsCi0JCQkJCSJnemlwIik7CisJCQlpZiAoZXhpc3RzKQorCQkJCWNvbXByZXNzaW9uX3Nw ZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTFo0OworCQl9CiAjZW5kaWYKLQkJCWJyZWFr OwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0xaNDoKLQkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3 aXRoICVzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIiwgIkxaNCIpOwotCQkJYnJlYWs7Ci0JCWNhc2Ug UEdfQ09NUFJFU1NJT05fWlNURDoKLQkJCXBnX2ZhdGFsKCJjb21wcmVzc2lvbiB3aXRoICVzIGlz IG5vdCB5ZXQgc3VwcG9ydGVkIiwgIlpTVEQiKTsKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBy ZXQ7Ci19Ci0KLWludAotY2ZjbG9zZShjZnAgKmZwKQotewotCWludAkJCXJldCA9IDA7Ci0KLQlp ZiAoZnAgPT0gTlVMTCkKLQl7Ci0JCWVycm5vID0gRUJBREY7Ci0JCXJldHVybiBFT0Y7CiAJfQog Ci0Jc3dpdGNoIChmcC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCisJQ0ZIID0gSW5pdENv bXByZXNzRmlsZUhhbmRsZShjb21wcmVzc2lvbl9zcGVjKTsKKwlpZiAoQ0ZILT5vcGVuX2Z1bmMo Zm5hbWUsIC0xLCBtb2RlLCBDRkgpKQogCXsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9OT05FOgot CQkJcmV0ID0gZmNsb3NlKChGSUxFICopIGZwLT5mcCk7Ci0JCQlmcC0+ZnAgPSBOVUxMOwotCi0J CQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQOgotI2lmZGVmIEhBVkVfTElCWgot CQkJcmV0ID0gZ3pjbG9zZSgoZ3pGaWxlKSBmcC0+ZnApOwotCQkJZnAtPmZwID0gTlVMTDsKLSNl bHNlCi0JCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9u IHdpdGggJXMiLAotCQkJCQkiZ3ppcCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJY2FzZSBQR19D T01QUkVTU0lPTl9MWjQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3Qg eWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9O X1pTVEQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBv cnRlZCIsICJaU1REIik7Ci0JCQlicmVhazsKKwkJZnJlZV9rZWVwX2Vycm5vKENGSCk7CisJCUNG SCA9IE5VTEw7CiAJfQorCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7CiAKLQlmcmVlX2tlZXBfZXJy bm8oZnApOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gQ0ZIOwogfQogCiBpbnQKLWNmZW9mKGNm cCAqZnApCitEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxlKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZI KQogewogCWludAkJCXJldCA9IDA7CiAKLQlzd2l0Y2ggKGZwLT5jb21wcmVzc2lvbl9zcGVjLmFs Z29yaXRobSkKLQl7Ci0JCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJCXJldCA9IGZlb2Yo KEZJTEUgKikgZnAtPmZwKTsKKwlpZiAoQ0ZILT5wcml2YXRlX2RhdGEpCisJCXJldCA9IENGSC0+ Y2xvc2VfZnVuYyhDRkgpOwogCi0JCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9HWklQ OgotI2lmZGVmIEhBVkVfTElCWgotCQkJcmV0ID0gZ3plb2YoKGd6RmlsZSkgZnAtPmZwKTsKLSNl bHNlCi0JCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9u IHdpdGggJXMiLAotCQkJCQkiZ3ppcCIpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJY2FzZSBQR19D T01QUkVTU0lPTl9MWjQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3Qg eWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9O X1pTVEQ6Ci0JCQlwZ19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBv cnRlZCIsICJaU1REIik7Ci0JCQlicmVhazsKLQl9CisJZnJlZV9rZWVwX2Vycm5vKENGSCk7CiAK IAlyZXR1cm4gcmV0OwogfQotCi1jb25zdCBjaGFyICoKLWdldF9jZnBfZXJyb3IoY2ZwICpmcCkK LXsKLQlpZiAoZnAtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9O X0daSVApCi0JewotI2lmZGVmIEhBVkVfTElCWgotCQlpbnQJCQllcnJudW07Ci0JCWNvbnN0IGNo YXIgKmVycm1zZyA9IGd6ZXJyb3IoKGd6RmlsZSkgZnAtPmZwLCAmZXJybnVtKTsKLQotCQlpZiAo ZXJybnVtICE9IFpfRVJSTk8pCi0JCQlyZXR1cm4gZXJybXNnOwotI2Vsc2UKLQkJcGdfZmF0YWwo InRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAi KTsKLSNlbmRpZgotCX0KLQotCXJldHVybiBzdHJlcnJvcihlcnJubyk7Ci19Ci0KLSNpZmRlZiBI QVZFX0xJQloKLXN0YXRpYyBpbnQKLWhhc1N1ZmZpeChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29u c3QgY2hhciAqc3VmZml4KQotewotCWludAkJCWZpbGVuYW1lbGVuID0gc3RybGVuKGZpbGVuYW1l KTsKLQlpbnQJCQlzdWZmaXhsZW4gPSBzdHJsZW4oc3VmZml4KTsKLQotCWlmIChmaWxlbmFtZWxl biA8IHN1ZmZpeGxlbikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gbWVtY21wKCZmaWxlbmFtZVtm aWxlbmFtZWxlbiAtIHN1ZmZpeGxlbl0sCi0JCQkJICBzdWZmaXgsCi0JCQkJICBzdWZmaXhsZW4p ID09IDA7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2lvLmggYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAppbmRleCBhNDI5ZGM0Nzg5Li40 YjRhMDBjMDEwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaAorKysg Yi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaApAQCAtMzcsMzIgKzM3LDYyIEBAIHR5cGVk ZWYgdm9pZCAoKldyaXRlRnVuYykgKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpidWYs IHNpemVfdCBsZW4pOwogICovCiB0eXBlZGVmIHNpemVfdCAoKlJlYWRGdW5jKSAoQXJjaGl2ZUhh bmRsZSAqQUgsIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKIAotLyogc3RydWN0IGRlZmlu aXRpb24gYXBwZWFycyBpbiBjb21wcmVzc19pby5jICovCiB0eXBlZGVmIHN0cnVjdCBDb21wcmVz c29yU3RhdGUgQ29tcHJlc3NvclN0YXRlOworc3RydWN0IENvbXByZXNzb3JTdGF0ZQoreworCS8q CisJICogUmVhZCBhbGwgY29tcHJlc3NlZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbSAodmlh IHJlYWRGKSBhbmQgcHJpbnQgaXQKKwkgKiBvdXQgd2l0aCBhaHdyaXRlKCkuCisJICovCisJdm9p ZAkJKCpyZWFkRGF0YSkgKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsK KworCS8qCisJICogQ29tcHJlc3MgYW5kIHdyaXRlIGRhdGEgdG8gdGhlIG91dHB1dCBzdHJlYW0g KHZpYSB3cml0ZUYpLgorCSAqLworCXZvaWQJCSgqd3JpdGVEYXRhKSAoQXJjaGl2ZUhhbmRsZSAq QUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJCQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXpl X3QgZExlbik7CisJdm9pZAkJKCplbmQpIChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0 YXRlICpjcyk7CisKKwlSZWFkRnVuYwlyZWFkRjsKKwlXcml0ZUZ1bmMJd3JpdGVGOworCisJcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjOworCXZvaWQJICAgKnByaXZh dGVfZGF0YTsKK307CiAKIGV4dGVybiBDb21wcmVzc29yU3RhdGUgKkFsbG9jYXRlQ29tcHJlc3Nv cihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJCQkJ CQkJCQkJICAgUmVhZEZ1bmMgcmVhZEYsCiAJCQkJCQkJCQkJICAgV3JpdGVGdW5jIHdyaXRlRik7 Ci1leHRlcm4gdm9pZCBSZWFkRGF0YUZyb21BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILAotCQkJ CQkJCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCi0J CQkJCQkJCVJlYWRGdW5jIHJlYWRGKTsKLWV4dGVybiB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZShB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKLQkJCQkJCQkgICBjb25zdCB2 b2lkICpkYXRhLCBzaXplX3QgZExlbik7CiBleHRlcm4gdm9pZCBFbmRDb21wcmVzc29yKEFyY2hp dmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKIAorLyoKKyAqIENvbXByZXNzIEZp bGUgSGFuZGxlCisgKi8KK3R5cGVkZWYgc3RydWN0IENvbXByZXNzRmlsZUhhbmRsZSBDb21wcmVz c0ZpbGVIYW5kbGU7CisKK3N0cnVjdCBDb21wcmVzc0ZpbGVIYW5kbGUKK3sKKwlpbnQJCQkoKm9w ZW5fZnVuYykgKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwKKwkJ CQkJCQkgIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKwlpbnQJCQkoKm9wZW5fd3JpdGVfZnVu YykgKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkJCQkJCQlDb21wcmVz c0ZpbGVIYW5kbGUgKmN4dCk7CisJc2l6ZV90CQkoKnJlYWRfZnVuYykgKHZvaWQgKnB0ciwgc2l6 ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKwlzaXplX3QJCSgqd3JpdGVfZnVu YykgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCisJCQkJCQkJICAgc3RydWN0IENvbXBy ZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKwljaGFyCSAgICooKmdldHNfZnVuYykgKGNoYXIgKnMsIGlu dCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisJaW50CQkJKCpnZXRjX2Z1bmMpIChD b21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisJaW50CQkJKCplb2ZfZnVuYykgKENvbXByZXNzRmls ZUhhbmRsZSAqQ0ZIKTsKKwlpbnQJCQkoKmNsb3NlX2Z1bmMpIChDb21wcmVzc0ZpbGVIYW5kbGUg KkNGSCk7CisJY29uc3QgY2hhciAqKCpnZXRfZXJyb3JfZnVuYykgKENvbXByZXNzRmlsZUhhbmRs ZSAqQ0ZIKTsKKworCXBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYzsK Kwl2b2lkCSAgICpwcml2YXRlX2RhdGE7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBjZnAgY2ZwOwor ZXh0ZXJuIENvbXByZXNzRmlsZUhhbmRsZSAqSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb25zdCBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwogCi1leHRlcm4gY2Zw ICpjZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwKLQkJCQkgICBjb25z dCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotZXh0ZXJuIGNm cCAqY2ZvcGVuX3JlYWQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7Ci1leHRl cm4gY2ZwICpjZm9wZW5fd3JpdGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwK LQkJCQkJCSBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMp OwotZXh0ZXJuIGludAljZnJlYWQodm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7Ci1leHRl cm4gaW50CWNmd3JpdGUoY29uc3Qgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgY2ZwICpmcCk7Ci1leHRl cm4gaW50CWNmZ2V0YyhjZnAgKmZwKTsKLWV4dGVybiBjaGFyICpjZmdldHMoY2ZwICpmcCwgY2hh ciAqYnVmLCBpbnQgbGVuKTsKLWV4dGVybiBpbnQJY2ZjbG9zZShjZnAgKmZwKTsKLWV4dGVybiBp bnQJY2Zlb2YoY2ZwICpmcCk7Ci1leHRlcm4gY29uc3QgY2hhciAqZ2V0X2NmcF9lcnJvcihjZnAg KmZwKTsKK2V4dGVybiBDb21wcmVzc0ZpbGVIYW5kbGUgKkluaXREaXNjb3ZlckNvbXByZXNzRmls ZUhhbmRsZShjb25zdCBjaGFyICpwYXRoLAorCQkJCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1v ZGUpOwogCitleHRlcm4gaW50CURlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUoQ29tcHJlc3NGaWxl SGFuZGxlICpDRkgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24u YnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXggY2E2MmY5YTM3NC4uYWEy YzkxODI5YyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApAQCAtMiw2ICsyLDcgQEAKIAogcGdfZHVtcF9jb21t b25fc291cmNlcyA9IGZpbGVzKAogICAnY29tcHJlc3NfaW8uYycsCisgICdjb21wcmVzc19nemlw LmMnLAogICAnZHVtcHV0aWxzLmMnLAogICAncGFyYWxsZWwuYycsCiAgICdwZ19iYWNrdXBfYXJj aGl2ZXIuYycsCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggZmI5NDMxN2Fk OS4uMWYyMDdjNmY0ZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtOTUs OCArOTUsOCBAQCBzdGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBz dGF0aWMgdm9pZCBkdW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpt c2csIHRpbWVfdCB0aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFI LCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOwotc3RhdGljIGNmcCAqU2F2ZU91dHB1dChBcmNoaXZl SGFuZGxlICpBSCk7Ci1zdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFI LCBjZnAgKnNhdmVkT3V0cHV0KTsKK3N0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKlNhdmVPdXRw dXQoQXJjaGl2ZUhhbmRsZSAqQUgpOworc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZl SGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1dCk7CiAKIHN0YXRpYyBp bnQJcmVzdG9yZV90b2NfZW50cnkoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgYm9v bCBpc19wYXJhbGxlbCk7CiBzdGF0aWMgdm9pZCByZXN0b3JlX3RvY19lbnRyaWVzX3ByZWZvcmso QXJjaGl2ZUhhbmRsZSAqQUgsCkBAIC0yNzIsNyArMjcyLDcgQEAgQ2xvc2VBcmNoaXZlKEFyY2hp dmUgKkFIWCkKIAogCS8qIENsb3NlIHRoZSBvdXRwdXQgKi8KIAllcnJubyA9IDA7Ci0JcmVzID0g Y2ZjbG9zZShBSC0+T0YpOworCXJlcyA9IERlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPk9G KTsKIAogCWlmIChyZXMgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQg ZmlsZTogJW0iKTsKQEAgLTM1NSw3ICszNTUsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpB SFgpCiAJYm9vbAkJcGFyYWxsZWxfbW9kZTsKIAlib29sCQlzdXBwb3J0c19jb21wcmVzc2lvbjsK IAlUb2NFbnRyeSAgICp0ZTsKLQljZnAJCSAgICpzYXY7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpz YXY7CiAKIAlBSC0+c3RhZ2UgPSBTVEFHRV9JTklUSUFMSVpJTkc7CiAKQEAgLTExMjcsNyArMTEy Nyw3IEBAIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAJVG9jRW50cnkgICAqdGU7CiAJ cGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBvdXRfY29tcHJlc3Npb25fc3BlYyA9IHswfTsKIAl0 ZVNlY3Rpb24JY3VyU2VjdGlvbjsKLQljZnAJCSAgICpzYXY7CisJQ29tcHJlc3NGaWxlSGFuZGxl ICpzYXY7CiAJY29uc3QgY2hhciAqZm10TmFtZTsKIAljaGFyCQlzdGFtcF9zdHJbNjRdOwogCkBA IC0xMTQzLDkgKzExNDMsMTAgQEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAkJc3Ry Y3B5KHN0YW1wX3N0ciwgIlt1bmtub3duXSIpOwogCiAJYWhwcmludGYoQUgsICI7XG47IEFyY2hp dmUgY3JlYXRlZCBhdCAlc1xuIiwgc3RhbXBfc3RyKTsKLQlhaHByaW50ZihBSCwgIjsgICAgIGRi bmFtZTogJXNcbjsgICAgIFRPQyBFbnRyaWVzOiAlZFxuOyAgICAgQ29tcHJlc3Npb246ICVkXG4i LAorCWFocHJpbnRmKEFILCAiOyAgICAgZGJuYW1lOiAlc1xuOyAgICAgVE9DIEVudHJpZXM6ICVk XG47ICAgICBDb21wcmVzc2lvbjogJXNcbiIsCiAJCQkgc2FuaXRpemVfbGluZShBSC0+YXJjaGRi bmFtZSwgZmFsc2UpLAotCQkJIEFILT50b2NDb3VudCwgQUgtPmNvbXByZXNzaW9uX3NwZWMubGV2 ZWwpOworCQkJIEFILT50b2NDb3VudCwKKwkJCSBnZXRfY29tcHJlc3NfYWxnb3JpdGhtX25hbWUo QUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKSk7CiAKIAlzd2l0Y2ggKEFILT5mb3JtYXQp CiAJewpAQCAtMTUwMiw2ICsxNTAzLDcgQEAgc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZl SGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCSAgY29uc3QgcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogeworCUNvbXByZXNzRmlsZUhhbmRsZSAq Q0ZIOwogCWNvbnN0IGNoYXIgKm1vZGU7CiAJaW50CQkJZm4gPSAtMTsKIApAQCAtMTUyNCwzMyAr MTUyNiwzMiBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVu YW1lLAogCWVsc2UKIAkJbW9kZSA9IFBHX0JJTkFSWV9XOwogCi0JaWYgKGZuID49IDApCi0JCUFI LT5PRiA9IGNmZG9wZW4oZHVwKGZuKSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0JZWxzZQot CQlBSC0+T0YgPSBjZm9wZW4oZmlsZW5hbWUsIG1vZGUsIGNvbXByZXNzaW9uX3NwZWMpOworCUNG SCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29tcHJlc3Npb25fc3BlYyk7CiAKLQlpZiAoIUFI LT5PRikKKwlpZiAoQ0ZILT5vcGVuX2Z1bmMoZmlsZW5hbWUsIGZuLCBtb2RlLCBDRkgpKQogCXsK IAkJaWYgKGZpbGVuYW1lKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxl IFwiJXNcIjogJW0iLCBmaWxlbmFtZSk7CiAJCWVsc2UKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg b3BlbiBvdXRwdXQgZmlsZTogJW0iKTsKIAl9CisKKwlBSC0+T0YgPSBDRkg7CiB9CiAKLXN0YXRp YyBjZnAgKgorc3RhdGljIENvbXByZXNzRmlsZUhhbmRsZSAqCiBTYXZlT3V0cHV0KEFyY2hpdmVI YW5kbGUgKkFIKQogewotCXJldHVybiAoY2ZwICopIEFILT5PRjsKKwlyZXR1cm4gKENvbXByZXNz RmlsZUhhbmRsZSAqKSBBSC0+T0Y7CiB9CiAKIHN0YXRpYyB2b2lkCi1SZXN0b3JlT3V0cHV0KEFy Y2hpdmVIYW5kbGUgKkFILCBjZnAgKnNhdmVkT3V0cHV0KQorUmVzdG9yZU91dHB1dChBcmNoaXZl SGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1dCkKIHsKIAlpbnQJCQly ZXM7CiAKIAllcnJubyA9IDA7Ci0JcmVzID0gY2ZjbG9zZShBSC0+T0YpOworCXJlcyA9IERlc3Ry b3lDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPk9GKTsKIAogCWlmIChyZXMgIT0gMCkKIAkJcGdfZmF0 YWwoImNvdWxkIG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKQEAgLTE2ODksNyArMTY5MCwx MSBAQCBhaHdyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwg QXJjaGl2ZUhhbmRsZSAqQUgpCiAJZWxzZSBpZiAoUmVzdG9yaW5nVG9EQihBSCkpCiAJCWJ5dGVz X3dyaXR0ZW4gPSBFeGVjdXRlU3FsQ29tbWFuZEJ1ZigmQUgtPnB1YmxpYywgKGNvbnN0IGNoYXIg KikgcHRyLCBzaXplICogbm1lbWIpOwogCWVsc2UKLQkJYnl0ZXNfd3JpdHRlbiA9IGNmd3JpdGUo cHRyLCBzaXplICogbm1lbWIsIEFILT5PRik7CisJeworCQlDb21wcmVzc0ZpbGVIYW5kbGUgKkNG SCA9IChDb21wcmVzc0ZpbGVIYW5kbGUgKikgQUgtPk9GOworCisJCWJ5dGVzX3dyaXR0ZW4gPSBD RkgtPndyaXRlX2Z1bmMocHRyLCBzaXplICogbm1lbWIsIENGSCk7CisJfQogCiAJaWYgKGJ5dGVz X3dyaXR0ZW4gIT0gc2l6ZSAqIG5tZW1iKQogCQlXUklURV9FUlJPUl9FWElUOwpAQCAtMjAzMSw2 ICsyMDM2LDE4IEBAIFJlYWRTdHIoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJcmV0dXJuIGJ1ZjsKIH0K IAorc3RhdGljIGJvb2wKK19maWxlRXhpc3RzSW5EaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBj b25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyCQlidWZbTUFY UEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzLyVzIiwgZGlyLCBm aWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxv bmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19J U1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKIHN0YXRpYyBpbnQKIF9kaXNjb3ZlckFyY2hpdmVGb3Jt YXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7CkBAIC0yMDYxLDI2ICsyMDc4LDEyIEBAIF9kaXNjb3Zl ckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCSAqLwogCQlpZiAoc3RhdChBSC0+ ZlNwZWMsICZzdCkgPT0gMCAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQogCQl7Ci0JCQljaGFyCQli dWZbTUFYUEdQQVRIXTsKLQotCQkJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvdG9j LmRhdCIsIEFILT5mU3BlYykgPj0gTUFYUEdQQVRIKQotCQkJCXBnX2ZhdGFsKCJkaXJlY3Rvcnkg bmFtZSB0b28gbG9uZzogXCIlc1wiIiwKLQkJCQkJCSBBSC0+ZlNwZWMpOwotCQkJaWYgKHN0YXQo YnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJCXsKLQkJCQlBSC0+Zm9y bWF0ID0gYXJjaERpcmVjdG9yeTsKKwkJCUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCQkJ aWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRhdCIpKQogCQkJCXJl dHVybiBBSC0+Zm9ybWF0OwotCQkJfQotCiAjaWZkZWYgSEFWRV9MSUJaCi0JCQlpZiAoc25wcmlu dGYoYnVmLCBNQVhQR1BBVEgsICIlcy90b2MuZGF0Lmd6IiwgQUgtPmZTcGVjKSA+PSBNQVhQR1BB VEgpCi0JCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLAotCQkJ CQkJIEFILT5mU3BlYyk7Ci0JCQlpZiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0 LnN0X21vZGUpKQotCQkJewotCQkJCUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCQkJaWYg KF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRhdC5neiIpKQogCQkJCXJl dHVybiBBSC0+Zm9ybWF0OwotCQkJfQogI2VuZGlmCiAJCQlwZ19mYXRhbCgiZGlyZWN0b3J5IFwi JXNcIiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCBhcmNoaXZlIChcInRvYy5kYXRcIiBk b2VzIG5vdCBleGlzdCkiLAogCQkJCQkgQUgtPmZTcGVjKTsKQEAgLTIxNzgsNiArMjE4MSw3IEBA IF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCwK IAkJIFNldHVwV29ya2VyUHRyVHlwZSBzZXR1cFdvcmtlclB0cikKIHsKIAlBcmNoaXZlSGFuZGxl ICpBSDsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAlwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIG91dF9jb21wcmVzc19zcGVjID0gezB9OwogCiAJcGdfbG9nX2RlYnVnKCJhbGxvY2F0aW5n IEFIIGZvciAlcywgZm9ybWF0ICVkIiwKQEAgLTIyMzMsNyArMjIzNywxMCBAQCBfYWxsb2NBSChj b25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAKIAkvKiBPcGVu IHN0ZG91dCB3aXRoIG5vIGNvbXByZXNzaW9uIGZvciBBSCBvdXRwdXQgaGFuZGxlICovCiAJb3V0 X2NvbXByZXNzX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQlBSC0+T0Yg PSBjZmRvcGVuKGR1cChmaWxlbm8oc3Rkb3V0KSksIFBHX0JJTkFSWV9BLCBvdXRfY29tcHJlc3Nf c3BlYyk7CisJQ0ZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShvdXRfY29tcHJlc3Nfc3BlYyk7 CisJaWYgKENGSC0+b3Blbl9mdW5jKE5VTEwsIGZpbGVubyhzdGRvdXQpLCBQR19CSU5BUllfQSwg Q0ZIKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIHN0ZG91dCBmb3IgYXBwZW5kaW5nOiAl bSIpOworCUFILT5PRiA9IENGSDsKIAogCS8qCiAJICogT24gV2luZG93cywgd2UgbmVlZCB0byB1 c2UgYmluYXJ5IG1vZGUgdG8gcmVhZC93cml0ZSBub24tdGV4dCBmaWxlcywKQEAgLTM2NDYsMTIg KzM2NTMsNyBAQCBXcml0ZUhlYWQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJQUgtPldyaXRlQnl0ZVB0 cihBSCwgQUgtPmludFNpemUpOwogCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5vZmZTaXplKTsK IAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+Zm9ybWF0KTsKLQkvKgotCSAqIEZvciBub3cgdGhl IGNvbXByZXNzaW9uIHR5cGUgaXMgaW1wbGllZCBieSB0aGUgbGV2ZWwuICBUaGlzIHdpbGwgbmVl ZAotCSAqIHRvIGNoYW5nZSBvbmNlIHN1cHBvcnQgZm9yIG1vcmUgY29tcHJlc3Npb24gYWxnb3Jp dGhtcyBpcyBhZGRlZCwKLQkgKiByZXF1aXJpbmcgYSBmb3JtYXQgYnVtcC4KLQkgKi8KLQlXcml0 ZUludChBSCwgQUgtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOworCUFILT5Xcml0ZUJ5dGVQdHIo QUgsIEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSk7CiAJY3J0bSA9ICpsb2NhbHRpbWUo JkFILT5jcmVhdGVEYXRlKTsKIAlXcml0ZUludChBSCwgY3J0bS50bV9zZWMpOwogCVdyaXRlSW50 KEFILCBjcnRtLnRtX21pbik7CkBAIC0zNzIyLDEwICszNzI0LDExIEBAIFJlYWRIZWFkKEFyY2hp dmVIYW5kbGUgKkFIKQogCQlwZ19mYXRhbCgiZXhwZWN0ZWQgZm9ybWF0ICglZCkgZGlmZmVycyBm cm9tIGZvcm1hdCBmb3VuZCBpbiBmaWxlICglZCkiLAogCQkJCSBBSC0+Zm9ybWF0LCBmbXQpOwog Ci0JLyogR3Vlc3MgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBvbiB0aGUgbGV2ZWwgKi8K LQlBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9OT05FOwot CWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV8yKQorCWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZF UlNfMV8xNSkKKwkJQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gQUgtPlJlYWRCeXRl UHRyKEFIKTsKKwllbHNlIGlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV8yKQogCXsKKwkJLyog R3Vlc3MgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBvbiB0aGUgbGV2ZWwgKi8KIAkJaWYg KEFILT52ZXJzaW9uIDwgS19WRVJTXzFfNCkKIAkJCUFILT5jb21wcmVzc2lvbl9zcGVjLmxldmVs ID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsKIAkJZWxzZQpAQCAtMzczNywxMCArMzc0MCwxNyBAQCBS ZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNlCiAJCUFILT5jb21wcmVzc2lvbl9zcGVj LmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAKKwlpZiAoQUgtPmNvbXByZXNzaW9u X3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCisJeworCQlib29sCQl1bnN1 cHBvcnRlZCA9IGZhbHNlOworCiAjaWZuZGVmIEhBVkVfTElCWgotCWlmIChBSC0+Y29tcHJlc3Np b25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQkJcGdfZmF0YWwoImFy Y2hpdmUgaXMgY29tcHJlc3NlZCwgYnV0IHRoaXMgaW5zdGFsbGF0aW9uIGRvZXMgbm90IHN1cHBv cnQgY29tcHJlc3Npb24iKTsKKwkJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9 PSBQR19DT01QUkVTU0lPTl9HWklQKQorCQkJdW5zdXBwb3J0ZWQgPSB0cnVlOwogI2VuZGlmCisJ CWlmICh1bnN1cHBvcnRlZCkKKwkJCXBnX2ZhdGFsKCJhcmNoaXZlIGlzIGNvbXByZXNzZWQsIGJ1 dCB0aGlzIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIik7CisJfQog CiAJaWYgKEFILT52ZXJzaW9uID49IEtfVkVSU18xXzQpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5oCmluZGV4IDQ3MjVlNDk3NDcuLjE4YjM4YzE3YWIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAorKysgYi9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTY1LDEwICs2NSwxMyBAQAogI2RlZmluZSBLX1ZFUlNf MV8xMyBNQUtFX0FSQ0hJVkVfVkVSU0lPTigxLCAxMywgMCkJLyogY2hhbmdlIHNlYXJjaF9wYXRo CiAJCQkJCQkJCQkJCQkJICogYmVoYXZpb3IgKi8KICNkZWZpbmUgS19WRVJTXzFfMTQgTUFLRV9B UkNISVZFX1ZFUlNJT04oMSwgMTQsIDApCS8qIGFkZCB0YWJsZWFtICovCisjZGVmaW5lIEtfVkVS U18xXzE1IE1BS0VfQVJDSElWRV9WRVJTSU9OKDEsIDE1LCAwKQkvKiBhZGQKKwkJCQkJCQkJCQkJ CQkgKiBjb21wcmVzc2lvbl9hbGdvcml0aG0KKwkJCQkJCQkJCQkJCQkgKiBpbiBoZWFkZXIgKi8K IAogLyogQ3VycmVudCBhcmNoaXZlIHZlcnNpb24gbnVtYmVyICh0aGUgZm9ybWF0IHdlIGNhbiBv dXRwdXQpICovCiAjZGVmaW5lIEtfVkVSU19NQUpPUiAxCi0jZGVmaW5lIEtfVkVSU19NSU5PUiAx NAorI2RlZmluZSBLX1ZFUlNfTUlOT1IgMTUKICNkZWZpbmUgS19WRVJTX1JFViAwCiAjZGVmaW5l IEtfVkVSU19TRUxGIE1BS0VfQVJDSElWRV9WRVJTSU9OKEtfVkVSU19NQUpPUiwgS19WRVJTX01J Tk9SLCBLX1ZFUlNfUkVWKQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2N1c3RvbS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9jdXN0b20uYwppbmRleCBkMWU1 NDY0NGE5Li41MTJhYjA0M2FmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2N1c3RvbS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMKQEAgLTI5 OCw3ICsyOTgsOSBAQCBfU3RhcnREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUp CiAJX1dyaXRlQnl0ZShBSCwgQkxLX0RBVEEpOwkvKiBCbG9jayB0eXBlICovCiAJV3JpdGVJbnQo QUgsIHRlLT5kdW1wSWQpOwkvKiBGb3Igc2FuaXR5IGNoZWNrICovCiAKLQljdHgtPmNzID0gQWxs b2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9zcGVjLCBfQ3VzdG9tV3JpdGVGdW5jKTsK KwljdHgtPmNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9zcGVjLAorCQkJ CQkJCQkgTlVMTCwKKwkJCQkJCQkJIF9DdXN0b21Xcml0ZUZ1bmMpOwogfQogCiAvKgpAQCAtMzE3 LDE1ICszMTksMTUgQEAgX1dyaXRlRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qgdm9pZCAq ZGF0YSwgc2l6ZV90IGRMZW4pCiAJQ29tcHJlc3NvclN0YXRlICpjcyA9IGN0eC0+Y3M7CiAKIAlp ZiAoZExlbiA+IDApCi0JCS8qIFdyaXRlRGF0YVRvQXJjaGl2ZSgpIGludGVybmFsbHkgdGhyb3dz IHdyaXRlIGVycm9ycyAqLwotCQlXcml0ZURhdGFUb0FyY2hpdmUoQUgsIGNzLCBkYXRhLCBkTGVu KTsKKwkJLyogd3JpdGVEYXRhKCkgaW50ZXJuYWxseSB0aHJvd3Mgd3JpdGUgZXJyb3JzICovCisJ CWNzLT53cml0ZURhdGEoQUgsIGNzLCBkYXRhLCBkTGVuKTsKIH0KIAogLyoKICAqIENhbGxlZCBi eSB0aGUgYXJjaGl2ZXIgd2hlbiBhIGR1bXBlcidzICdEYXRhRHVtcGVyJyByb3V0aW5lIGhhcwog ICogZmluaXNoZWQuCiAgKgotICogT3B0aW9uYWwuCisgKiBNYW5kYXRvcnkuCiAgKi8KIHN0YXRp YyB2b2lkCiBfRW5kRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQpAQCAtMzMz LDYgKzMzNSw4IEBAIF9FbmREYXRhKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiAJ bGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CiAKIAlFbmRD b21wcmVzc29yKEFILCBjdHgtPmNzKTsKKwljdHgtPmNzID0gTlVMTDsKKwogCS8qIFNlbmQgdGhl IGVuZCBtYXJrZXIgKi8KIAlXcml0ZUludChBSCwgMCk7CiB9CkBAIC0zNzcsNyArMzgxLDkgQEAg X1N0YXJ0TE8oQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9pZCkKIAogCVdy aXRlSW50KEFILCBvaWQpOwogCi0JY3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29t cHJlc3Npb25fc3BlYywgX0N1c3RvbVdyaXRlRnVuYyk7CisJY3R4LT5jcyA9IEFsbG9jYXRlQ29t cHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCSBf Q3VzdG9tV3JpdGVGdW5jKTsKIH0KIAogLyoKQEAgLTU2Niw3ICs1NzIsMTIgQEAgX1ByaW50VG9j RGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogc3RhdGljIHZvaWQKIF9Qcmlu dERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7Ci0JUmVhZERhdGFGcm9tQXJjaGl2ZShBSCwgQUgt PmNvbXByZXNzaW9uX3NwZWMsIF9DdXN0b21SZWFkRnVuYyk7CisJQ29tcHJlc3NvclN0YXRlICpj czsKKworCWNzID0gQWxsb2NhdGVDb21wcmVzc29yKEFILT5jb21wcmVzc2lvbl9zcGVjLAorCQkJ CQkJCV9DdXN0b21SZWFkRnVuYywgTlVMTCk7CisJY3MtPnJlYWREYXRhKEFILCBjcyk7CisJRW5k Q29tcHJlc3NvcihBSCwgY3MpOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfZGlyZWN0b3J5LmMKaW5kZXggNjgwMGMzY2NlZS4uZTJjNmU2ZWNkMCAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kaXJlY3RvcnkuYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2RpcmVjdG9yeS5jCkBAIC01MCw5ICs1MCw4IEBAIHR5cGVkZWYgc3RydWN0 CiAJICovCiAJY2hhcgkgICAqZGlyZWN0b3J5OwogCi0JY2ZwCQkgICAqZGF0YUZIOwkJCS8qIGN1 cnJlbnRseSBvcGVuIGRhdGEgZmlsZSAqLwotCi0JY2ZwCQkgICAqTE9zVG9jRkg7CQkvKiBmaWxl IGhhbmRsZSBmb3IgYmxvYnMudG9jICovCisJQ29tcHJlc3NGaWxlSGFuZGxlICpkYXRhRkg7IC8q IGN1cnJlbnRseSBvcGVuIGRhdGEgZmlsZSAqLworCUNvbXByZXNzRmlsZUhhbmRsZSAqTE9zVG9j Rkg7IC8qIGZpbGUgaGFuZGxlIGZvciBibG9icy50b2MgKi8KIAlQYXJhbGxlbFN0YXRlICpwc3Rh dGU7CQkvKiBmb3IgcGFyYWxsZWwgYmFja3VwIC8gcmVzdG9yZSAqLwogfSBsY2xDb250ZXh0Owog CkBAIC0xOTgsMTEgKzE5NywxMSBAQCBJbml0QXJjaGl2ZUZtdF9EaXJlY3RvcnkoQXJjaGl2ZUhh bmRsZSAqQUgpCiAJZWxzZQogCXsJCQkJCQkJLyogUmVhZCBNb2RlICovCiAJCWNoYXIJCWZuYW1l W01BWFBHUEFUSF07Ci0JCWNmcAkJICAgKnRvY0ZIOworCQlDb21wcmVzc0ZpbGVIYW5kbGUgKnRv Y0ZIOwogCiAJCXNldEZpbGVQYXRoKEFILCBmbmFtZSwgInRvYy5kYXQiKTsKIAotCQl0b2NGSCA9 IGNmb3Blbl9yZWFkKGZuYW1lLCBQR19CSU5BUllfUik7CisJCXRvY0ZIID0gSW5pdERpc2NvdmVy Q29tcHJlc3NGaWxlSGFuZGxlKGZuYW1lLCBQR19CSU5BUllfUik7CiAJCWlmICh0b2NGSCA9PSBO VUxMKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGlucHV0IGZpbGUgXCIlc1wiOiAlbSIs IGZuYW1lKTsKIApAQCAtMjE4LDcgKzIxNyw3IEBAIEluaXRBcmNoaXZlRm10X0RpcmVjdG9yeShB cmNoaXZlSGFuZGxlICpBSCkKIAkJUmVhZFRvYyhBSCk7CiAKIAkJLyogTm90aGluZyBlbHNlIGlu IHRoZSBmaWxlLCBzbyBjbG9zZSBpdCBhZ2Fpbi4uLiAqLwotCQlpZiAoY2ZjbG9zZSh0b2NGSCkg IT0gMCkKKwkJaWYgKERlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUodG9jRkgpICE9IDApCiAJCQlw Z19mYXRhbCgiY291bGQgbm90IGNsb3NlIFRPQyBmaWxlOiAlbSIpOwogCQljdHgtPmRhdGFGSCA9 IE5VTEw7CiAJfQpAQCAtMzI3LDkgKzMyNiw5IEBAIF9TdGFydERhdGEoQXJjaGl2ZUhhbmRsZSAq QUgsIFRvY0VudHJ5ICp0ZSkKIAogCXNldEZpbGVQYXRoKEFILCBmbmFtZSwgdGN0eC0+ZmlsZW5h bWUpOwogCi0JY3R4LT5kYXRhRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLAot CQkJCQkJCSAgIEFILT5jb21wcmVzc2lvbl9zcGVjKTsKLQlpZiAoY3R4LT5kYXRhRkggPT0gTlVM TCkKKwljdHgtPmRhdGFGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPmNvbXByZXNzaW9u X3NwZWMpOworCisJaWYgKGN0eC0+ZGF0YUZILT5vcGVuX3dyaXRlX2Z1bmMoZm5hbWUsIFBHX0JJ TkFSWV9XLCBjdHgtPmRhdGFGSCkpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQg ZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBAIC0zNDYsMTUgKzM0NSwxNiBAQCBzdGF0 aWMgdm9pZAogX1dyaXRlRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qgdm9pZCAqZGF0YSwg c2l6ZV90IGRMZW4pCiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZv cm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAogCWVy cm5vID0gMDsKLQlpZiAoZExlbiA+IDAgJiYgY2Z3cml0ZShkYXRhLCBkTGVuLCBjdHgtPmRhdGFG SCkgIT0gZExlbikKKwlpZiAoZExlbiA+IDAgJiYgQ0ZILT53cml0ZV9mdW5jKGRhdGEsIGRMZW4s IENGSCkgIT0gZExlbikKIAl7CiAJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3Vt ZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KIAkJaWYgKGVycm5vID09IDApCiAJCQllcnJu byA9IEVOT1NQQzsKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBvdXRwdXQgZmlsZTog JXMiLAotCQkJCSBnZXRfY2ZwX2Vycm9yKGN0eC0+ZGF0YUZIKSk7CisJCQkJIENGSC0+Z2V0X2Vy cm9yX2Z1bmMoQ0ZIKSk7CiAJfQogfQogCkBAIC0zNzAsNyArMzcwLDcgQEAgX0VuZERhdGEoQXJj aGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29u dGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKIAogCS8qIENsb3NlIHRoZSBmaWxlICovCi0JaWYgKGNm Y2xvc2UoY3R4LT5kYXRhRkgpICE9IDApCisJaWYgKERlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUo Y3R4LT5kYXRhRkgpICE9IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgZGF0YSBmaWxl OiAlbSIpOwogCiAJY3R4LT5kYXRhRkggPSBOVUxMOwpAQCAtMzg1LDI2ICszODUsMjUgQEAgX1By aW50RmlsZURhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIGNoYXIgKmZpbGVuYW1lKQogCXNpemVfdAkJ Y250OwogCWNoYXIJICAgKmJ1ZjsKIAlzaXplX3QJCWJ1ZmxlbjsKLQljZnAJCSAgICpjZnA7CisJ Q29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAKIAlpZiAoIWZpbGVuYW1lKQogCQlyZXR1cm47CiAK LQljZnAgPSBjZm9wZW5fcmVhZChmaWxlbmFtZSwgUEdfQklOQVJZX1IpOwotCi0JaWYgKCFjZnAp CisJQ0ZIID0gSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlKGZpbGVuYW1lLCBQR19CSU5B UllfUik7CisJaWYgKCFDRkgpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBpbnB1dCBmaWxl IFwiJXNcIjogJW0iLCBmaWxlbmFtZSk7CiAKIAlidWYgPSBwZ19tYWxsb2MoWkxJQl9PVVRfU0la RSk7CiAJYnVmbGVuID0gWkxJQl9PVVRfU0laRTsKIAotCXdoaWxlICgoY250ID0gY2ZyZWFkKGJ1 ZiwgYnVmbGVuLCBjZnApKSkKKwl3aGlsZSAoKGNudCA9IENGSC0+cmVhZF9mdW5jKGJ1ZiwgYnVm bGVuLCBDRkgpKSkKIAl7CiAJCWFod3JpdGUoYnVmLCAxLCBjbnQsIEFIKTsKIAl9CiAKIAlmcmVl KGJ1Zik7Ci0JaWYgKGNmY2xvc2UoY2ZwKSAhPSAwKQorCWlmIChEZXN0cm95Q29tcHJlc3NGaWxl SGFuZGxlKENGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBkYXRhIGZpbGUg XCIlc1wiOiAlbSIsIGZpbGVuYW1lKTsKIH0KIApAQCAtNDM1LDYgKzQzNCw3IEBAIF9Mb2FkTE9z KEFyY2hpdmVIYW5kbGUgKkFIKQogewogCU9pZAkJCW9pZDsKIAlsY2xDb250ZXh0ICpjdHggPSAo bGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsK IAljaGFyCQl0b2NmbmFtZVtNQVhQR1BBVEhdOwogCWNoYXIJCWxpbmVbTUFYUEdQQVRIXTsKIApA QCAtNDQyLDE0ICs0NDIsMTQgQEAgX0xvYWRMT3MoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAlzZXRG aWxlUGF0aChBSCwgdG9jZm5hbWUsICJibG9icy50b2MiKTsKIAotCWN0eC0+TE9zVG9jRkggPSBj Zm9wZW5fcmVhZCh0b2NmbmFtZSwgUEdfQklOQVJZX1IpOworCUNGSCA9IGN0eC0+TE9zVG9jRkgg PSBJbml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUodG9jZm5hbWUsIFBHX0JJTkFSWV9SKTsK IAogCWlmIChjdHgtPkxPc1RvY0ZIID09IE5VTEwpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3Bl biBsYXJnZSBvYmplY3QgVE9DIGZpbGUgXCIlc1wiIGZvciBpbnB1dDogJW0iLAogCQkJCSB0b2Nm bmFtZSk7CiAKIAkvKiBSZWFkIHRoZSBMT3MgVE9DIGZpbGUgbGluZS1ieS1saW5lLCBhbmQgcHJv Y2VzcyBlYWNoIExPICovCi0Jd2hpbGUgKChjZmdldHMoY3R4LT5MT3NUb2NGSCwgbGluZSwgTUFY UEdQQVRIKSkgIT0gTlVMTCkKKwl3aGlsZSAoKENGSC0+Z2V0c19mdW5jKGxpbmUsIE1BWFBHUEFU SCwgQ0ZIKSkgIT0gTlVMTCkKIAl7CiAJCWNoYXIJCWxvZm5hbWVbTUFYUEdQQVRIICsgMV07CiAJ CWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKQEAgLTQ2NCwxMSArNDY0LDExIEBAIF9Mb2FkTE9zKEFy Y2hpdmVIYW5kbGUgKkFIKQogCQlfUHJpbnRGaWxlRGF0YShBSCwgcGF0aCk7CiAJCUVuZFJlc3Rv cmVMTyhBSCwgb2lkKTsKIAl9Ci0JaWYgKCFjZmVvZihjdHgtPkxPc1RvY0ZIKSkKKwlpZiAoIUNG SC0+ZW9mX2Z1bmMoQ0ZIKSkKIAkJcGdfZmF0YWwoImVycm9yIHJlYWRpbmcgbGFyZ2Ugb2JqZWN0 IFRPQyBmaWxlIFwiJXNcIiIsCiAJCQkJIHRvY2ZuYW1lKTsKIAotCWlmIChjZmNsb3NlKGN0eC0+ TE9zVG9jRkgpICE9IDApCisJaWYgKERlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5MT3NU b2NGSCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBsYXJnZSBvYmplY3QgVE9D IGZpbGUgXCIlc1wiOiAlbSIsCiAJCQkJIHRvY2ZuYW1lKTsKIApAQCAtNDg4LDE1ICs0ODgsMTYg QEAgX1dyaXRlQnl0ZShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgaW50IGkpCiB7CiAJdW5zaWdu ZWQgY2hhciBjID0gKHVuc2lnbmVkIGNoYXIpIGk7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENv bnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgt PmRhdGFGSDsKIAogCWVycm5vID0gMDsKLQlpZiAoY2Z3cml0ZSgmYywgMSwgY3R4LT5kYXRhRkgp ICE9IDEpCisJaWYgKENGSC0+d3JpdGVfZnVuYygmYywgMSwgQ0ZIKSAhPSAxKQogCXsKIAkJLyog aWYgd3JpdGUgZGlkbid0IHNldCBlcnJubywgYXNzdW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFj ZSAqLwogCQlpZiAoZXJybm8gPT0gMCkKIAkJCWVycm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgi Y291bGQgbm90IHdyaXRlIHRvIG91dHB1dCBmaWxlOiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3Io Y3R4LT5kYXRhRkgpKTsKKwkJCQkgQ0ZILT5nZXRfZXJyb3JfZnVuYyhDRkgpKTsKIAl9CiAKIAly ZXR1cm4gMTsKQEAgLTUxMiw4ICs1MTMsOSBAQCBzdGF0aWMgaW50CiBfUmVhZEJ5dGUoQXJjaGl2 ZUhhbmRsZSAqQUgpCiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZv cm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAotCXJl dHVybiBjZmdldGMoY3R4LT5kYXRhRkgpOworCXJldHVybiBDRkgtPmdldGNfZnVuYyhDRkgpOwog fQogCiAvKgpAQCAtNTI0LDE1ICs1MjYsMTYgQEAgc3RhdGljIHZvaWQKIF9Xcml0ZUJ1ZihBcmNo aXZlSGFuZGxlICpBSCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQogewogCWxjbENvbnRl eHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIID0gY3R4LT5kYXRhRkg7CiAKIAllcnJubyA9IDA7Ci0JaWYgKGNmd3JpdGUoYnVm LCBsZW4sIGN0eC0+ZGF0YUZIKSAhPSBsZW4pCisJaWYgKENGSC0+d3JpdGVfZnVuYyhidWYsIGxl biwgQ0ZIKSAhPSBsZW4pCiAJewogCQkvKiBpZiB3cml0ZSBkaWRuJ3Qgc2V0IGVycm5vLCBhc3N1 bWUgcHJvYmxlbSBpcyBubyBkaXNrIHNwYWNlICovCiAJCWlmIChlcnJubyA9PSAwKQogCQkJZXJy bm8gPSBFTk9TUEM7CiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gb3V0cHV0IGZpbGU6 ICVzIiwKLQkJCQkgZ2V0X2NmcF9lcnJvcihjdHgtPmRhdGFGSCkpOworCQkJCSBDRkgtPmdldF9l cnJvcl9mdW5jKENGSCkpOwogCX0KIH0KIApAQCAtNTQ1LDEyICs1NDgsMTMgQEAgc3RhdGljIHZv aWQKIF9SZWFkQnVmKEFyY2hpdmVIYW5kbGUgKkFILCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiB7 CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29t cHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAogCS8qCi0JICogSWYgdGhlcmUg d2FzIGFuIEkvTyBlcnJvciwgd2UgYWxyZWFkeSBleGl0ZWQgaW4gY2ZyZWFkKCksIHNvIGhlcmUg d2UKKwkgKiBJZiB0aGVyZSB3YXMgYW4gSS9PIGVycm9yLCB3ZSBhbHJlYWR5IGV4aXRlZCBpbiBy ZWFkRigpLCBzbyBoZXJlIHdlCiAJICogZXhpdCBvbiBzaG9ydCByZWFkcy4KIAkgKi8KLQlpZiAo Y2ZyZWFkKGJ1ZiwgbGVuLCBjdHgtPmRhdGFGSCkgIT0gbGVuKQorCWlmIChDRkgtPnJlYWRfZnVu YyhidWYsIGxlbiwgQ0ZIKSAhPSBsZW4pCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9t IGlucHV0IGZpbGU6IGVuZCBvZiBmaWxlIik7CiB9CiAKQEAgLTU3Myw3ICs1NzcsNyBAQCBfQ2xv c2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJaWYgKEFILT5tb2RlID09IGFyY2hNb2Rl V3JpdGUpCiAJewotCQljZnAJCSAgICp0b2NGSDsKKwkJQ29tcHJlc3NGaWxlSGFuZGxlICp0b2NG SDsKIAkJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjID0gezB9Owog CQljaGFyCQlmbmFtZVtNQVhQR1BBVEhdOwogCkBAIC01ODQsOCArNTg4LDggQEAgX0Nsb3NlQXJj aGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAogCQkvKiBUaGUgVE9DIGlzIGFsd2F5cyBjcmVhdGVk IHVuY29tcHJlc3NlZCAqLwogCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBS RVNTSU9OX05PTkU7Ci0JCXRvY0ZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywg Y29tcHJlc3Npb25fc3BlYyk7Ci0JCWlmICh0b2NGSCA9PSBOVUxMKQorCQl0b2NGSCA9IEluaXRD b21wcmVzc0ZpbGVIYW5kbGUoY29tcHJlc3Npb25fc3BlYyk7CisJCWlmICh0b2NGSC0+b3Blbl93 cml0ZV9mdW5jKGZuYW1lLCBQR19CSU5BUllfVywgdG9jRkgpKQogCQkJcGdfZmF0YWwoImNvdWxk IG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiAJCWN0eC0+ZGF0YUZI ID0gdG9jRkg7CiAKQEAgLTU5OCw3ICs2MDIsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5k bGUgKkFIKQogCQlXcml0ZUhlYWQoQUgpOwogCQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsK IAkJV3JpdGVUb2MoQUgpOwotCQlpZiAoY2ZjbG9zZSh0b2NGSCkgIT0gMCkKKwkJaWYgKERlc3Ry b3lDb21wcmVzc0ZpbGVIYW5kbGUodG9jRkgpICE9IDApCiAJCQlwZ19mYXRhbCgiY291bGQgbm90 IGNsb3NlIFRPQyBmaWxlOiAlbSIpOwogCQlXcml0ZURhdGFDaHVua3MoQUgsIGN0eC0+cHN0YXRl KTsKIApAQCAtNjQ5LDggKzY1Myw4IEBAIF9TdGFydExPcyhBcmNoaXZlSGFuZGxlICpBSCwgVG9j RW50cnkgKnRlKQogCiAJLyogVGhlIExPIFRPQyBmaWxlIGlzIG5ldmVyIGNvbXByZXNzZWQgKi8K IAljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7Ci0JY3R4 LT5MT3NUb2NGSCA9IGNmb3Blbl93cml0ZShmbmFtZSwgImFiIiwgY29tcHJlc3Npb25fc3BlYyk7 Ci0JaWYgKGN0eC0+TE9zVG9jRkggPT0gTlVMTCkKKwljdHgtPkxPc1RvY0ZIID0gSW5pdENvbXBy ZXNzRmlsZUhhbmRsZShjb21wcmVzc2lvbl9zcGVjKTsKKwlpZiAoY3R4LT5MT3NUb2NGSC0+b3Bl bl93cml0ZV9mdW5jKGZuYW1lLCAiYWIiLCBjdHgtPkxPc1RvY0ZIKSkKIAkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiB9CiAKQEAgLTY2 Nyw5ICs2NzEsOCBAQCBfU3RhcnRMTyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlLCBP aWQgb2lkKQogCiAJc25wcmludGYoZm5hbWUsIE1BWFBHUEFUSCwgIiVzL2Jsb2JfJXUuZGF0Iiwg Y3R4LT5kaXJlY3RvcnksIG9pZCk7CiAKLQljdHgtPmRhdGFGSCA9IGNmb3Blbl93cml0ZShmbmFt ZSwgUEdfQklOQVJZX1csIEFILT5jb21wcmVzc2lvbl9zcGVjKTsKLQotCWlmIChjdHgtPmRhdGFG SCA9PSBOVUxMKQorCWN0eC0+ZGF0YUZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShBSC0+Y29t cHJlc3Npb25fc3BlYyk7CisJaWYgKGN0eC0+ZGF0YUZILT5vcGVuX3dyaXRlX2Z1bmMoZm5hbWUs IFBHX0JJTkFSWV9XLCBjdHgtPmRhdGFGSCkpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBv dXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBAIC02ODIsMTggKzY4NSwxOSBA QCBzdGF0aWMgdm9pZAogX0VuZExPKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIE9p ZCBvaWQpCiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERh dGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPkxPc1RvY0ZIOwogCWNoYXIJCWJ1 Zls1MF07CiAJaW50CQkJbGVuOwogCi0JLyogQ2xvc2UgdGhlIExPIGRhdGEgZmlsZSBpdHNlbGYg Ki8KLQlpZiAoY2ZjbG9zZShjdHgtPmRhdGFGSCkgIT0gMCkKLQkJcGdfZmF0YWwoImNvdWxkIG5v dCBjbG9zZSBMTyBkYXRhIGZpbGU6ICVtIik7CisJLyogQ2xvc2UgdGhlIEJMT0IgZGF0YSBmaWxl IGl0c2VsZiAqLworCWlmIChEZXN0cm95Q29tcHJlc3NGaWxlSGFuZGxlKGN0eC0+ZGF0YUZIKSAh PSAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGJsb2IgZGF0YSBmaWxlOiAlbSIpOwog CWN0eC0+ZGF0YUZIID0gTlVMTDsKIAogCS8qIHJlZ2lzdGVyIHRoZSBMTyBpbiBibG9icy50b2Mg Ki8KIAlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXUgYmxvYl8ldS5kYXRcbiIs IG9pZCwgb2lkKTsKLQlpZiAoY2Z3cml0ZShidWYsIGxlbiwgY3R4LT5MT3NUb2NGSCkgIT0gbGVu KQotCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRvIExPcyBUT0MgZmlsZSIpOworCWlmIChD RkgtPndyaXRlX2Z1bmMoYnVmLCBsZW4sIENGSCkgIT0gbGVuKQorCQlwZ19mYXRhbCgiY291bGQg bm90IHdyaXRlIHRvIGJsb2JzIFRPQyBmaWxlIik7CiB9CiAKIC8qCkBAIC03MDYsOCArNzEwLDgg QEAgX0VuZExPcyhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogewogCWxjbENvbnRl eHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCi0JaWYgKGNmY2xvc2Uo Y3R4LT5MT3NUb2NGSCkgIT0gMCkKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBMT3MgVE9D IGZpbGU6ICVtIik7CisJaWYgKERlc3Ryb3lDb21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5MT3NUb2NG SCkgIT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBibG9icyBUT0MgZmlsZTogJW0i KTsKIAljdHgtPkxPc1RvY0ZIID0gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3QvMDAyX3BnX2R1bXAucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbApp bmRleCAyZWVlZjJhNDc4Li5mM2JhOTI2MzIxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv dC8wMDJfcGdfZHVtcC5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbApA QCAtOTQsNyArOTQsNyBAQCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJCQljb21tYW5kID0+IFsKIAkJ CQkncGdfcmVzdG9yZScsICctbCcsICIkdGVtcGRpci9jb21wcmVzc2lvbl9nemlwX2N1c3RvbS5k dW1wIiwKIAkJCV0sCi0JCQlleHBlY3RlZCA9PiBxci9Db21wcmVzc2lvbjogMS8sCisJCQlleHBl Y3RlZCA9PiBxci9Db21wcmVzc2lvbjogZ3ppcC8sCiAJCQluYW1lICAgICA9PiAnZGF0YSBjb250 ZW50IGlzIGd6aXAtY29tcHJlc3NlZCcKIAkJfSwKIAl9LApAQCAtMjM5LDggKzIzOSw4IEBAIG15 ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWNvbW1hbmQgPT4KIAkJCSAgWyAncGdfcmVzdG9yZScsICct bCcsICIkdGVtcGRpci9kZWZhdWx0c19jdXN0b21fZm9ybWF0LmR1bXAiLCBdLAogCQkJZXhwZWN0 ZWQgPT4gJHN1cHBvcnRzX2d6aXAgPwotCQkJcXIvQ29tcHJlc3Npb246IC0xLyA6Ci0JCQlxci9D b21wcmVzc2lvbjogMC8sCisJCQlxci9Db21wcmVzc2lvbjogZ3ppcC8gOgorCQkJcXIvQ29tcHJl c3Npb246IG5vbmUvLAogCQkJbmFtZSA9PiAnZGF0YSBjb250ZW50IGlzIGd6aXAtY29tcHJlc3Nl ZCBieSBkZWZhdWx0IGlmIGF2YWlsYWJsZScsCiAJCX0sCiAJfSwKQEAgLTI2NCw4ICsyNjQsOCBA QCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJCQljb21tYW5kID0+CiAJCQkgIFsgJ3BnX3Jlc3RvcmUn LCAnLWwnLCAiJHRlbXBkaXIvZGVmYXVsdHNfZGlyX2Zvcm1hdCIsIF0sCiAJCQlleHBlY3RlZCA9 PiAkc3VwcG9ydHNfZ3ppcCA/Ci0JCQlxci9Db21wcmVzc2lvbjogLTEvIDoKLQkJCXFyL0NvbXBy ZXNzaW9uOiAwLywKKwkJCXFyL0NvbXByZXNzaW9uOiBnemlwLyA6CisJCQlxci9Db21wcmVzc2lv bjogbm9uZS8sCiAJCQluYW1lID0+ICdkYXRhIGNvbnRlbnQgaXMgZ3ppcC1jb21wcmVzc2VkIGJ5 IGRlZmF1bHQnLAogCQl9LAogCQlnbG9iX3BhdHRlcm5zID0+IFsKZGlmZiAtLWdpdCBhL3NyYy90 b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sgYi9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVz cGx1c2NoZWNrCmluZGV4IGU1MmZlOWY1MDkuLmRhOGU0ODYxZjQgMTAwNzU1Ci0tLSBhL3NyYy90 b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKKysrIGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9j cGx1c3BsdXNjaGVjawpAQCAtMTUwLDYgKzE1MCw3IEBAIGRvCiAKIAkjIHBnX2R1bXAgaXMgbm90 IEMrKy1jbGVhbiBiZWNhdXNlIGl0IHVzZXMgInB1YmxpYyIgYW5kICJuYW1lc3BhY2UiCiAJIyBh cyBmaWVsZCBuYW1lcywgd2hpY2ggaXMgdW5mb3J0dW5hdGUgYnV0IHdlIHdvbid0IGNoYW5nZSBp dCBub3cuCisJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaCAmJiBj b250aW51ZQogCXRlc3QgIiRmIiA9IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oICYmIGNv bnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmggJiYgY29udGlu dWUKIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggJiYg Y29udGludWUKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMjNiYWZlYzVmNy4uODQwMTkx ZDY4MCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQyOCw2ICs0MjgsNyBAQCBDb21w aWxlZEV4cHJTdGF0ZQogQ29tcG9zaXRlSU9EYXRhCiBDb21wb3NpdGVUeXBlU3RtdAogQ29tcG91 bmRBZmZpeEZsYWcKK0NvbXByZXNzRmlsZUhhbmRsZQogQ29tcHJlc3Npb25Mb2NhdGlvbgogQ29t cHJlc3NvclN0YXRlCiBDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQKQEAgLTEwMzQsNiArMTAzNSw3 IEBAIEd1Y1N0YWNrCiBHdWNTdGFja1N0YXRlCiBHdWNTdHJpbmdBc3NpZ25Ib29rCiBHdWNTdHJp bmdDaGVja0hvb2sKK0d6aXBDb21wcmVzc29yU3RhdGUKIEhBTkRMRQogSEFTSEFDVElPTgogSEFT SEJVQ0tFVAotLSAKMi4zNC4xCgo= --b1_hAgeT0CwQJ3z6UK6simdJIGH97uJztQ45k0HaIBc8--