Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ts1jT-00DNOT-5K for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Mar 2025 15:41:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1ts1jR-001AYP-Io for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Mar 2025 15:41:25 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ts1jR-001AYH-1b for pgsql-hackers@lists.postgresql.org; Tue, 11 Mar 2025 15:41:25 +0000 Received: from mail-qt1-x82e.google.com ([2607:f8b0:4864:20::82e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1ts1jM-002GIO-2J for pgsql-hackers@lists.postgresql.org; Tue, 11 Mar 2025 15:41:24 +0000 Received: by mail-qt1-x82e.google.com with SMTP id d75a77b69052e-47663aeff1bso29170011cf.0 for ; Tue, 11 Mar 2025 08:41:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741707680; x=1742312480; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=cbT2C4A3RyX0PfghHKBfjUULRuMC4vsS5TGX5bvYmQY=; b=cRo/ByL3FNMwLj8VBjDUy51SareLfJ7112b7SYbv/t1AuSRszH2wUHgdTBo6n8Ussy YpxxY3qpgorxPRiKyitpmWFYDBo5tMjZp6uKndVlO1Xk0zkahm0SVAPvPTqn8+kLYsvA rJVd3g2zcsH5/aiYPYZA4ALc+uHVpasgwdjYZckGBMumcQaiSM+kSbQu67dHd+QaRiRD ZpTd5aL3KGg+cWRwXRNmIx/MyutKgC2jHda+shnhESXzop8ablPQcvJu5ko9MBCNodkR ud9vwZwfERQtQzbYQC8N/8tt68Rte3nnhYVnQ9gEXqe60sgRxd+cOK6AKWQDdm0Roqfl gYmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741707680; x=1742312480; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=cbT2C4A3RyX0PfghHKBfjUULRuMC4vsS5TGX5bvYmQY=; b=ApFXJrseVMIKlyxjJ2D3qdfzfKWAl9yrNA3dkTOpvt4ilLo3tpQ4Ssz2BPwG+MAOWN eYXJe3LF67GOiSnMolONCdQkJN3qHwosIha+aHNyX67HYxPqQA2dSgX+AQorWj0PJ61G xcxCeALSnMbfnEVrE0AUSwy5trkK7VxsdBsIthw+N9C0bgURIHFJtNmnpHWogvLAH+0i foKpzd8DVWYDrqWV56uPu3SNGmLwlj3rDP0E03XLLd076nEoHc/fJfSu+8JZ3/QSbuEg ncXlc/x4FMvxrNkB/QYiLBGNj3EOy8zl2A/qrB0I3olK5idq3TOOc4dImVLmB2yRY5ta Nu/g== X-Forwarded-Encrypted: i=1; AJvYcCUiow7/Xs6/J+3CPESFm484vsxvf9o+QAdjdqWQnMok8riy+XCCZdm2FoSB+Zfq3LbKPa6pBzcDnNNsztex@lists.postgresql.org X-Gm-Message-State: AOJu0Yzu9wkEmClPyx8xkR6QAWb2KYxMmolS9JEzjcjtO6djKe1shfMC 6EEYeTFJ/Q0YKJlknQelz2deVvNOFpA9A8TsOwpkjKV9qSXxDZk3dVIuZZBtYbGaQoFiu0OLwR5 aMWB9coFwwh1oYhkkJIc7HzQVMPk= X-Gm-Gg: ASbGncv36sUNk3DuxFGsT+0kRtkJ4dWg1J9czxhfJPKT8GqBKKLXuglaNuwsI74+V/r 3O5nJjb+VYbZb87QQuGCnV9Kt4mS5IddGzLdbxWcx5AGwTwj9mG2GnxwbwTRMrlMm1vdClsc+/y BSYMLj8BqLwumf0zkEaRGbyxa2D2auY6rwVy19smVlIFgyi53vk0ALUkKriE1k X-Google-Smtp-Source: AGHT+IGN21lQw+++psYkEWhzHPqDQy3N++pNeStBqA/ELrboZepL9yvSzNi10gyrDALKqWw7oAiP5btjWOKlZ+oUua4= X-Received: by 2002:ac8:5ad6:0:b0:476:78a8:4347 with SMTP id d75a77b69052e-47699612458mr61432451cf.33.1741707680391; Tue, 11 Mar 2025 08:41:20 -0700 (PDT) MIME-Version: 1.0 References: <202503111442.yrr22bylsycg@alvherre.pgsql> In-Reply-To: <202503111442.yrr22bylsycg@alvherre.pgsql> From: Mahendra Singh Thalor Date: Tue, 11 Mar 2025 21:11:07 +0530 X-Gm-Features: AQ5f1JqTYIj7dNuVhAx-Yi5jNwZTJjlTBaJbu-AjNiUAlqR4zKzgiRlY6fbkIck Message-ID: Subject: Re: Non-text mode for pg_dumpall To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: jian he , Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000097c8a5063012eb42" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000097c8a5063012eb42 Content-Type: multipart/alternative; boundary="00000000000097c8a3063012eb40" --00000000000097c8a3063012eb40 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 11 Mar 2025 at 20:12, =C3=81lvaro Herrera wrote: > > On 2025-Mar-11, Mahendra Singh Thalor wrote: > > > On Wed, 5 Mar 2025 at 20:42, =C3=81lvaro Herrera wrote: > > > > Okay, we should probably fix that, but I think the new map.dat file your > > > patch adds is going to make the problem worse, because it doesn't loo= k > > > like you handled that case in any particular way that would make it not > > > fail. > > > > As Jian also pointed out, we should not allow \n\r in dbnames. I am > > keeping dbanames as single line names only. > > Ehm, did you get consensus on adding such a restriction? > Hi Alvaro, In map.dat file, I tried to fix this issue by adding number of characters in dbname but as per code comments, as of now, we are not supporting \n\r in dbnames so i removed handling. I will do some more study to fix this issue. /* > * Append the given string to the shell command being built in the buffer= , > * with shell-style quoting as needed to create exactly one argument. > * > * Forbid LF or CR characters, which have scant practical use beyond > designing > * security breaches. The Windows command shell is unusable as a conduit > for > * arguments containing LF or CR characters. A future major release shou= ld > * reject those characters in CREATE ROLE and CREATE DATABASE, because us= e > * there eventually leads to errors here. > * > * appendShellString() simply prints an error and dies if LF or CR appear= s. > * appendShellStringNoError() omits those characters from the result, and > * returns false if there were any. > */ > void > appendShellString(PQExpBuffer buf, const char *str) Sorry, in the v22 patches, I missed to use the "git add connectdb.c" file. (Thanks Andrew for reporting this offline) Here, I am attaching updated patches for review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000097c8a3063012eb40 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Tue, 11 Mar 2025 at 20:12, =C3=81lvaro Herrera <alvherre@alvh.no-ip.org> wrot= e:
>
> On 2025-Mar-11, Mahendra Singh Thalor wrote:
>
= > > On Wed, 5 Mar 2025 at 20:42, =C3=81lvaro Herrera <alvherre@alvh.no-ip.org> wrote:
&g= t;
> > > Okay, we should probably fix that, but I think the new= map.dat file your
> > > patch adds is going to make the proble= m worse, because it doesn't look
> > > like you handled tha= t case in any particular way that would make it not
> > > fail.=
> >
> > As Jian also pointed out, we should not allow \n= \r in dbnames. I am
> > keeping dbanames as single line names only= .
>
> Ehm, did you get consensus on adding such a restriction?<= br>>

Hi Alvaro,

In map.dat file, I tried to fi= x this issue by adding number of characters in dbname but as per code comme= nts, as of now, we are not supporting \n\r in dbnames so i removed handling= .
I will do some more study to fix this issue.

/*
=C2=A0* Appe= nd the given string to the shell command being built in the buffer,
=C2= =A0* with shell-style quoting as needed to create exactly one argument.
= =C2=A0*
=C2=A0* Forbid LF or CR characters, which have scant practical u= se beyond designing
=C2=A0* security breaches.=C2=A0 The Windows command= shell is unusable as a conduit for
=C2=A0* arguments containing LF or C= R characters.=C2=A0 A future major release should
=C2=A0* reject those c= haracters in CREATE ROLE and CREATE DATABASE, because use
=C2=A0* there = eventually leads to errors here.
=C2=A0*
=C2=A0* appendShellString() = simply prints an error and dies if LF or CR appears.
=C2=A0* appendShell= StringNoError() omits those characters from the result, and
=C2=A0* retu= rns false if there were any.
=C2=A0*/
void
appendShellString(PQExp= Buffer buf, const char *str)

Sorry, in the v22 patches, I m= issed=C2=A0to=C2=A0use the "git add connectdb.c" file. (Thanks An= drew for reporting this offline)

Here, I am attach= ing updated patches for review and testing.

--
Thanks and= Regards
Mahendra Singh Thalor
EnterpriseDB: http://www.enterprisedb.com
--00000000000097c8a3063012eb40-- --00000000000097c8a5063012eb42 Content-Type: application/octet-stream; name="v23_0001_move-common-code-of-pg_dumpall-and-pg_restore-to-new_file.patch" Content-Disposition: attachment; filename="v23_0001_move-common-code-of-pg_dumpall-and-pg_restore-to-new_file.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m84nrldd0 RnJvbSBmNjFhZjRmY2Y2MTJlMGI4MTE4MjRjNzJkMzVlMWJjZGI2ZWI4YWU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCAxMSBNYXIgMjAyNSAyMDo1NDozMyArMDUzMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBtb3ZlIGNvbW1vbiBjb2RlIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0byBuZXcgdGhl IGZpbGUKCkNvbm5lY3REYXRhYmFzZSBpcyB1c2VkIGJ5IGJvdGggcGdfZHVtcGFsbCwgcGdfcmVz dG9yZQphbmQgcGdfZHVtcCBzbyBtb3ZlIGNvbW1vbiBjb2RlIHRvIG5ldyBmaWxlLgoKbmV3IGZp bGUgbmFtZTogY29ubmVjdGRiLmMKLS0tCiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAg ICAgICAgfCAgIDkgKy0KIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYyAgICAgICAgICB8IDI5 NCArKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIu aCAgICAgICAgICB8ICAyNiArKysKIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAg ICB8ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDIgKy0K IHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyB8ICAgNiArLQogc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9kYi5jICAgICAgIHwgIDc1ICstLS0tLS0KIHNyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBh bGwuYyAgICAgICAgIHwgMjc5ICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDkgZmlsZXMgY2hh bmdlZCwgMzUyIGluc2VydGlvbnMoKyksIDM0MyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmluL3BnX2R1bXAvY29ubmVjdGRiLmgKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvTWFr ZWZpbGUgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggMjMzYWQxNWNhNzUuLmM0ODhh YjRhZWNmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL01ha2VmaWxlCkBAIC00MCw3ICs0MCw4IEBAIE9CSlMgPSBcCiAJcGdfYmFja3Vw X2RpcmVjdG9yeS5vIFwKIAlwZ19iYWNrdXBfbnVsbC5vIFwKIAlwZ19iYWNrdXBfdGFyLm8gXAot CXBnX2JhY2t1cF91dGlscy5vCisJcGdfYmFja3VwX3V0aWxzLm8gXAorCWNvbm5lY3RkYi5vCiAK IGFsbDogcGdfZHVtcCBwZ19yZXN0b3JlIHBnX2R1bXBhbGwKIApAQCAtNTAsOCArNTEsOCBAQCBw Z19kdW1wOiBwZ19kdW1wLm8gY29tbW9uLm8gcGdfZHVtcF9zb3J0Lm8gJChPQkpTKSB8IHN1Ym1h a2UtbGlicHEgc3VibWFrZS1saWJwZwogcGdfcmVzdG9yZTogcGdfcmVzdG9yZS5vICQoT0JKUykg fCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCiAJ JChDQykgJChDRkxBR1MpIHBnX3Jlc3RvcmUubyAkKE9CSlMpICQoTERGTEFHUykgJChMREZMQUdT X0VYKSAkKExJQlMpIC1vICRAJChYKQogCi1wZ19kdW1wYWxsOiBwZ19kdW1wYWxsLm8gZHVtcHV0 aWxzLm8gZmlsdGVyLm8gJChXSU4zMlJFUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdw b3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCi0JJChDQykgJChDRkxBR1MpIHBnX2R1bXBhbGwubyBk dW1wdXRpbHMubyBmaWx0ZXIubyAkKFdJTjMyUkVTKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkg JChMSUJTKSAtbyAkQCQoWCkKK3BnX2R1bXBhbGw6IHBnX2R1bXBhbGwubyBkdW1wdXRpbHMubyBm aWx0ZXIubyBjb25uZWN0ZGIubyBwZ19iYWNrdXBfdXRpbHMubyAkKFdJTjMyUkVTKSB8IHN1Ym1h a2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKKwkkKENDKSAk KENGTEFHUykgcGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vIGNvbm5lY3RkYi5vIHBn X2JhY2t1cF91dGlscy5vICQoV0lOMzJSRVMpICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKExJ QlMpIC1vICRAJChYKQogCiBpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMKIAkkKElOU1RBTExfUFJP R1JBTSkgcGdfZHVtcCQoWCkgJyQoREVTVERJUikkKGJpbmRpciknL3BnX2R1bXAkKFgpCkBAIC03 MSw1ICs3Miw1IEBAIHVuaW5zdGFsbDoKIAlybSAtZiAkKGFkZHByZWZpeCAnJChERVNURElSKSQo YmluZGlyKScvLCBwZ19kdW1wJChYKSBwZ19yZXN0b3JlJChYKSBwZ19kdW1wYWxsJChYKSkKIAog Y2xlYW4gZGlzdGNsZWFuOgotCXJtIC1mIHBnX2R1bXAkKFgpIHBnX3Jlc3RvcmUkKFgpIHBnX2R1 bXBhbGwkKFgpICQoT0JKUykgcGdfZHVtcC5vIGNvbW1vbi5vIHBnX2R1bXBfc29ydC5vIHBnX3Jl c3RvcmUubyBwZ19kdW1wYWxsLm8KKwlybSAtZiBwZ19kdW1wJChYKSBwZ19yZXN0b3JlJChYKSBw Z19kdW1wYWxsJChYKSAkKE9CSlMpIHBnX2R1bXAubyBjb21tb24ubyBwZ19kdW1wX3NvcnQubyBw Z19yZXN0b3JlLm8gcGdfZHVtcGFsbC5vIGNvbm5lY3RkYi5vCiAJcm0gLXJmIHRtcF9jaGVjawpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jIGIvc3JjL2Jpbi9wZ19kdW1w L2Nvbm5lY3RkYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZTFm YmU5OGMyNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYwpA QCAtMCwwICsxLDI5NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29ubmVjdGRiLmMK KyAqICAgIFRoaXMgaXMgYSBjb21tb24gZmlsZSBjb25uZWN0aW9uIHRvIHRoZSBkYXRhYmFzZS4K KyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJ T04KKyAqICAgIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYworICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSAiY29tbW9u L2Nvbm5lY3QuaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2luY2x1ZGUgImNvbW1v bi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb25uZWN0ZGIuaCIKKyNpbmNsdWRlICJkdW1wdXRpbHMu aCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKKworc3RhdGljIGNoYXIgKmNv bnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoqdmFsdWVz KTsKKworLyoKKyAqIENvbm5lY3REYXRhYmFzZQorICoKKyAqIE1ha2UgYSBkYXRhYmFzZSBjb25u ZWN0aW9uIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuICBBbgorICogaW50ZXJhY3RpdmUgcGFz c3dvcmQgcHJvbXB0IGlzIGF1dG9tYXRpY2FsbHkgaXNzdWVkIGlmIHJlcXVpcmVkLgorICoKKyAq IElmIGZhaWxfb25fZXJyb3IgaXMgZmFsc2UsIHdlIHJldHVybiBOVUxMIHdpdGhvdXQgcHJpbnRp bmcgYW55IG1lc3NhZ2UKKyAqIG9uIGZhaWx1cmUsIGJ1dCBwcmVzZXJ2ZSBhbnkgcHJvbXB0ZWQg cGFzc3dvcmQgZm9yIHRoZSBuZXh0IHRyeS4KKyAqCisgKiBPbiBzdWNjZXNzLCB0aGUgJ2Nvbm5z dHInIGlzIHNldCB0byBhIGNvbm5lY3Rpb24gc3RyaW5nIGNvbnRhaW5pbmcKKyAqIHRoZSBvcHRp b25zIHVzZWQgYW5kICdzZXJ2ZXJfdmVyc2lvbicgaXMgc2V0IHRvIHZlcnNpb24gc28gdGhhdCBj YWxsZXIKKyAqIGNhbiB1c2UgdGhlbS4KKyAqLworUEdjb25uICoKK0Nvbm5lY3REYXRhYmFzZShj b25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAorCQkJCWNv bnN0IGNoYXIgKnBnaG9zdCwgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIs CisJCQkJdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IsIGNvbnN0 IGNoYXIgKnByb2duYW1lLAorCQkJCWNvbnN0IGNoYXIgKipjb25uc3RyLCBpbnQgKnNlcnZlcl92 ZXJzaW9uLCBjaGFyICpwYXNzd29yZCwKKwkJCQljaGFyICpvdmVycmlkZV9kYm5hbWUpCit7CisJ UEdjb25uCSAgICpjb25uOworCWJvb2wJCW5ld19wYXNzOworCWNvbnN0IGNoYXIgKnJlbW90ZXZl cnNpb25fc3RyOworCWludAkJCW15X3ZlcnNpb247CisJY29uc3QgY2hhciAqKmtleXdvcmRzID0g TlVMTDsKKwljb25zdCBjaGFyICoqdmFsdWVzID0gTlVMTDsKKwlQUWNvbm5pbmZvT3B0aW9uICpj b25uX29wdHMgPSBOVUxMOworCWludAkJCXNlcnZlcl92ZXJzaW9uX3RlbXA7CisKKwlpZiAocHJv bXB0X3Bhc3N3b3JkID09IFRSSV9ZRVMgJiYgIXBhc3N3b3JkKQorCQlwYXNzd29yZCA9IHNpbXBs ZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7CisKKwkvKgorCSAqIFN0YXJ0IHRoZSBjb25u ZWN0aW9uLiAgTG9vcCB1bnRpbCB3ZSBoYXZlIGEgcGFzc3dvcmQgaWYgcmVxdWVzdGVkIGJ5CisJ ICogYmFja2VuZC4KKwkgKi8KKwlkbworCXsKKwkJaW50CQkJYXJnY291bnQgPSA4OworCQlQUWNv bm5pbmZvT3B0aW9uICpjb25uX29wdDsKKwkJY2hhcgkgICAqZXJyX21zZyA9IE5VTEw7CisJCWlu dAkJCWkgPSAwOworCisJCWZyZWUoa2V5d29yZHMpOworCQlmcmVlKHZhbHVlcyk7CisJCVBRY29u bmluZm9GcmVlKGNvbm5fb3B0cyk7CisKKwkJLyoKKwkJICogTWVyZ2UgdGhlIGNvbm5lY3Rpb24g aW5mbyBpbnB1dHMgZ2l2ZW4gaW4gZm9ybSBvZiBjb25uZWN0aW9uIHN0cmluZworCQkgKiBhbmQg b3RoZXIgb3B0aW9ucy4gIEV4cGxpY2l0bHkgZGlzY2FyZCBhbnkgZGJuYW1lIHZhbHVlIGluIHRo ZQorCQkgKiBjb25uZWN0aW9uIHN0cmluZzsgb3RoZXJ3aXNlLCBQUWNvbm5lY3RkYlBhcmFtcygp IHdvdWxkIGludGVycHJldAorCQkgKiB0aGF0IHZhbHVlIGFzIGJlaW5nIGl0c2VsZiBhIGNvbm5l Y3Rpb24gc3RyaW5nLgorCQkgKi8KKwkJaWYgKGNvbm5lY3Rpb25fc3RyaW5nKQorCQl7CisJCQlj b25uX29wdHMgPSBQUWNvbm5pbmZvUGFyc2UoY29ubmVjdGlvbl9zdHJpbmcsICZlcnJfbXNnKTsK KwkJCWlmIChjb25uX29wdHMgPT0gTlVMTCkKKwkJCQlwZ19mYXRhbCgiJXMiLCBlcnJfbXNnKTsK KworCQkJZm9yIChjb25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVM TDsgY29ubl9vcHQrKykKKwkJCXsKKwkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNv bm5fb3B0LT52YWxbMF0gIT0gJ1wwJyAmJgorCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQs ICJkYm5hbWUiKSAhPSAwKQorCQkJCQlhcmdjb3VudCsrOworCQkJfQorCisJCQlrZXl3b3JkcyA9 IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7CisJCQl2YWx1 ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKKworCQkJ Zm9yIChjb25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29u bl9vcHQrKykKKwkJCXsKKwkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0 LT52YWxbMF0gIT0gJ1wwJyAmJgorCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5h bWUiKSAhPSAwKQorCQkJCXsKKwkJCQkJa2V5d29yZHNbaV0gPSBjb25uX29wdC0+a2V5d29yZDsK KwkJCQkJdmFsdWVzW2ldID0gY29ubl9vcHQtPnZhbDsKKwkJCQkJaSsrOworCQkJCX0KKwkJCX0K KwkJfQorCQllbHNlCisJCXsKKwkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAx KSAqIHNpemVvZigqa2V5d29yZHMpKTsKKwkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50 ICsgMSkgKiBzaXplb2YoKnZhbHVlcykpOworCQl9CisKKwkJaWYgKHBnaG9zdCkKKwkJeworCQkJ a2V5d29yZHNbaV0gPSAiaG9zdCI7CisJCQl2YWx1ZXNbaV0gPSBwZ2hvc3Q7CisJCQlpKys7CisJ CX0KKwkJaWYgKHBncG9ydCkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAicG9ydCI7CisJCQl2YWx1 ZXNbaV0gPSBwZ3BvcnQ7CisJCQlpKys7CisJCX0KKwkJaWYgKHBndXNlcikKKwkJeworCQkJa2V5 d29yZHNbaV0gPSAidXNlciI7CisJCQl2YWx1ZXNbaV0gPSBwZ3VzZXI7CisJCQlpKys7CisJCX0K KwkJaWYgKHBhc3N3b3JkKQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJwYXNzd29yZCI7CisJCQl2 YWx1ZXNbaV0gPSBwYXNzd29yZDsKKwkJCWkrKzsKKwkJfQorCQlpZiAoZGJuYW1lKQorCQl7CisJ CQlrZXl3b3Jkc1tpXSA9ICJkYm5hbWUiOworCQkJdmFsdWVzW2ldID0gZGJuYW1lOworCQkJaSsr OworCQl9CisJCWlmIChvdmVycmlkZV9kYm5hbWUpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gImRi bmFtZSI7CisJCQl2YWx1ZXNbaSsrXSA9IG92ZXJyaWRlX2RibmFtZTsKKwkJfQorCisJCWtleXdv cmRzW2ldID0gImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiOworCQl2YWx1ZXNbaV0gPSBwcm9n bmFtZTsKKwkJaSsrOworCisJCW5ld19wYXNzID0gZmFsc2U7CisJCWNvbm4gPSBQUWNvbm5lY3Rk YlBhcmFtcyhrZXl3b3JkcywgdmFsdWVzLCB0cnVlKTsKKworCQlpZiAoIWNvbm4pCisJCQlwZ19m YXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsKKwor CQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQgJiYKKwkJCVBRY29ubmVjdGlv bk5lZWRzUGFzc3dvcmQoY29ubikgJiYKKwkJCSFwYXNzd29yZCAmJgorCQkJcHJvbXB0X3Bhc3N3 b3JkICE9IFRSSV9OTykKKwkJeworCQkJUFFmaW5pc2goY29ubik7CisJCQlwYXNzd29yZCA9IHNp bXBsZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7CisJCQluZXdfcGFzcyA9IHRydWU7CisJ CX0KKwl9IHdoaWxlIChuZXdfcGFzcyk7CisKKwkvKiBjaGVjayB0byBzZWUgdGhhdCB0aGUgYmFj a2VuZCBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgbWFkZSAqLworCWlmIChQUXN0YXR1cyhj b25uKSA9PSBDT05ORUNUSU9OX0JBRCkKKwl7CisJCWlmIChmYWlsX29uX2Vycm9yKQorCQkJcGdf ZmF0YWwoIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQllbHNlCisJCXsKKwkJCVBRZmlu aXNoKGNvbm4pOworCisJCQlmcmVlKGtleXdvcmRzKTsKKwkJCWZyZWUodmFsdWVzKTsKKwkJCVBR Y29ubmluZm9GcmVlKGNvbm5fb3B0cyk7CisKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJ LyoKKwkgKiBPaywgY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4gSWYgcmVxdWVzdGVkLCByZW1lbWJl ciB0aGUgb3B0aW9ucyB1c2VkLCBpbiB0aGUKKwkgKiBmb3JtIG9mIGEgY29ubmVjdGlvbiBzdHJp bmcuCisJICovCisJaWYgKGNvbm5zdHIpCisJCSpjb25uc3RyID0gY29uc3RydWN0Q29ublN0cihr ZXl3b3JkcywgdmFsdWVzKTsKKworCWZyZWUoa2V5d29yZHMpOworCWZyZWUodmFsdWVzKTsKKwlQ UWNvbm5pbmZvRnJlZShjb25uX29wdHMpOworCisJLyogQ2hlY2sgdmVyc2lvbiAqLworCXJlbW90 ZXZlcnNpb25fc3RyID0gUFFwYXJhbWV0ZXJTdGF0dXMoY29ubiwgInNlcnZlcl92ZXJzaW9uIik7 CisJaWYgKCFyZW1vdGV2ZXJzaW9uX3N0cikKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBnZXQgc2Vy dmVyIHZlcnNpb24iKTsKKworCXNlcnZlcl92ZXJzaW9uX3RlbXAgPSBQUXNlcnZlclZlcnNpb24o Y29ubik7CisJaWYgKHNlcnZlcl92ZXJzaW9uX3RlbXAgPT0gMCkKKwkJcGdfZmF0YWwoImNvdWxk IG5vdCBwYXJzZSBzZXJ2ZXIgdmVyc2lvbiBcIiVzXCIiLAorCQkJCSByZW1vdGV2ZXJzaW9uX3N0 cik7CisKKwkvKiBJZiByZXF1ZXN0ZWQsIHRoZW4gY29weSBzZXJ2ZXIgdmVyc2lvbiB0byBvdXQg dmFyaWFibGUuICovCisJaWYgKHNlcnZlcl92ZXJzaW9uKQorCQkqc2VydmVyX3ZlcnNpb24gPSBz ZXJ2ZXJfdmVyc2lvbl90ZW1wOworCisJbXlfdmVyc2lvbiA9IFBHX1ZFUlNJT05fTlVNOworCisJ LyoKKwkgKiBXZSBhbGxvdyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8g YW55IG1pbm9yIHJlbGVhc2Ugb2YKKwkgKiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFs c28gdmVyc2lvbiBjaGVjayBpbiBwZ19kdW1wLmMuKQorCSAqLworCWlmIChteV92ZXJzaW9uICE9 IHNlcnZlcl92ZXJzaW9uX3RlbXAKKwkJJiYgKHNlcnZlcl92ZXJzaW9uX3RlbXAgPCA5MDIwMCB8 fAorCQkJKHNlcnZlcl92ZXJzaW9uX3RlbXAgLyAxMDApID4gKG15X3ZlcnNpb24gLyAxMDApKSkK Kwl7CisJCXBnX2xvZ19lcnJvcigiYWJvcnRpbmcgYmVjYXVzZSBvZiBzZXJ2ZXIgdmVyc2lvbiBt aXNtYXRjaCIpOworCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJzZXJ2ZXIgdmVyc2lvbjogJXM7ICVz IHZlcnNpb246ICVzIiwKKwkJCQkJCQlyZW1vdGV2ZXJzaW9uX3N0ciwgcHJvZ25hbWUsIFBHX1ZF UlNJT04pOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKKwlQUWNsZWFyKGV4ZWN1dGVRdWVyeShj b25uLCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9QQVRIX1NRTCkpOworCisJcmV0dXJuIGNvbm47Cit9 CisKKy8qCisgKiBjb25zdHJ1Y3RDb25uU3RyCisgKgorICogQ29uc3RydWN0IGEgY29ubmVjdGlv biBzdHJpbmcgZnJvbSB0aGUgZ2l2ZW4ga2V5d29yZC92YWx1ZSBwYWlycy4gSXQgaXMKKyAqIHVz ZWQgdG8gcGFzcyB0aGUgY29ubmVjdGlvbiBvcHRpb25zIHRvIHRoZSBwZ19kdW1wIHN1YnByb2Nl c3MuCisgKgorICogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBleGNsdWRlZDoKKyAqCWRi bmFtZQkJLSB2YXJpZXMgaW4gZWFjaCBwZ19kdW1wIGludm9jYXRpb24KKyAqCXBhc3N3b3JkCS0g aXQncyBub3Qgc2VjdXJlIHRvIHBhc3MgYSBwYXNzd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lCisg KglmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIC0gd2UnbGwgbGV0IHBnX2R1bXAgc2V0IGl0Cisg Ki8KK3N0YXRpYyBjaGFyICoKK2NvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRz LCBjb25zdCBjaGFyICoqdmFsdWVzKQoreworCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7CisJY2hhcgkgICAqY29ubnN0cjsKKwlpbnQJCQlpOworCWJvb2wJCWZpcnN0a2V5 d29yZCA9IHRydWU7CisKKwkvKiBDb25zdHJ1Y3QgYSBuZXcgY29ubmVjdGlvbiBzdHJpbmcgaW4g a2V5PSd2YWx1ZScgZm9ybWF0LiAqLworCWZvciAoaSA9IDA7IGtleXdvcmRzW2ldICE9IE5VTEw7 IGkrKykKKwl7CisJCWlmIChzdHJjbXAoa2V5d29yZHNbaV0sICJkYm5hbWUiKSA9PSAwIHx8CisJ CQlzdHJjbXAoa2V5d29yZHNbaV0sICJwYXNzd29yZCIpID09IDAgfHwKKwkJCXN0cmNtcChrZXl3 b3Jkc1tpXSwgImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiKSA9PSAwKQorCQkJY29udGludWU7 CisKKwkJaWYgKCFmaXJzdGtleXdvcmQpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoYnVmLCAn ICcpOworCQlmaXJzdGtleXdvcmQgPSBmYWxzZTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAi JXM9Iiwga2V5d29yZHNbaV0pOworCQlhcHBlbmRDb25uU3RyVmFsKGJ1ZiwgdmFsdWVzW2ldKTsK Kwl9CisKKwljb25uc3RyID0gcGdfc3RyZHVwKGJ1Zi0+ZGF0YSk7CisJZGVzdHJveVBRRXhwQnVm ZmVyKGJ1Zik7CisJcmV0dXJuIGNvbm5zdHI7Cit9CisKKy8qCisgKiBleGVjdXRlUXVlcnkKKyAq CisgKiBSdW4gYSBxdWVyeSwgcmV0dXJuIHRoZSByZXN1bHRzLCBleGl0IHByb2dyYW0gb24gZmFp bHVyZS4KKyAqLworUEdyZXN1bHQgKgorZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3Qg Y2hhciAqcXVlcnkpCit7CisJUEdyZXN1bHQgICAqcmVzOworCisJcGdfbG9nX2luZm8oImV4ZWN1 dGluZyAlcyIsIHF1ZXJ5KTsKKworCXJlcyA9IFBRZXhlYyhjb25uLCBxdWVyeSk7CisJaWYgKCFy ZXMgfHwKKwkJUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlw Z19sb2dfZXJyb3IoInF1ZXJ5IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJ CXBnX2xvZ19lcnJvcl9kZXRhaWwoIlF1ZXJ5IHdhczogJXMiLCBxdWVyeSk7CisJCVBRZmluaXNo KGNvbm4pOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oIGIvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5l Y3RkYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZTFlN2VmMzNk MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaApAQCAtMCww ICsxLDI2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb25uZWN0ZGIuaAorICogICAg ICBDb21tb24gaGVhZGVyIGZpbGUgZm9yIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGFiYXNlLgorICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgor ICogICAgc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpZm5kZWYgQ09OTkVDVERCX0gKKyNkZWZpbmUgQ09OTkVDVERCX0gKKworI2luY2x1 ZGUgInBnX2JhY2t1cC5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgorCitleHRlcm4g UEdjb25uICpDb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpj b25uZWN0aW9uX3N0cmluZywgY29uc3QgY2hhciAqcGdob3N0LAorCQkJCQkJCSAgIGNvbnN0IGNo YXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAorCQkJCQkJCSAgIHRyaXZhbHVlIHByb21w dF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnBy b2duYW1lLCBjb25zdCBjaGFyICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJfdmVyc2lvbiwKKwkJCQkJ CQkgICBjaGFyICpwYXNzd29yZCwgY2hhciAqb3ZlcnJpZGVfZGJuYW1lKTsKK2V4dGVybiAgUEdy ZXN1bHQgKmV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKKyNl bmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09OTkVDVERCX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5i dWlsZAppbmRleCA2MDNiYTZjZmJmMC4uZDVmODA1ZmI1MTEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAg LTMwLDYgKzMwLDcgQEAgcGdfZHVtcF9zb3VyY2VzID0gZmlsZXMoCiAgICdjb21tb24uYycsCiAg ICdwZ19kdW1wLmMnLAogICAncGdfZHVtcF9zb3J0LmMnLAorICAnY29ubmVjdGRiLmMnLAogKQog CiBpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKQEAgLTQ5LDYgKzUwLDcgQEAgYmluX3Rhcmdl dHMgKz0gcGdfZHVtcAogCiBwZ19kdW1wYWxsX3NvdXJjZXMgPSBmaWxlcygKICAgJ3BnX2R1bXBh bGwuYycsCisgICdjb25uZWN0ZGIuYycsCiApCiAKIGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dz JwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cC5oCmluZGV4IGU3ODNjYzY4ZDg5Li43MzFjYjJkMTlmYiAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXAuaApAQCAtMjkxLDcgKzI5MSw3IEBAIHR5cGVkZWYgdm9pZCAoKlNldHVwV29ya2VyUHRy VHlwZSkgKEFyY2hpdmUgKkFIKTsKICAqIE1haW4gYXJjaGl2ZXIgaW50ZXJmYWNlLgogICovCiAK LWV4dGVybiB2b2lkIENvbm5lY3REYXRhYmFzZShBcmNoaXZlICpBSFgsCitleHRlcm4gdm9pZCBD b25uZWN0RGF0YWJhc2VBaHgoQXJjaGl2ZSAqQUhYLAogCQkJCQkJCWNvbnN0IENvbm5QYXJhbXMg KmNwYXJhbXMsCiAJCQkJCQkJYm9vbCBpc1JlY29ubmVjdCk7CiBleHRlcm4gdm9pZCBEaXNjb25u ZWN0RGF0YWJhc2UoQXJjaGl2ZSAqQUhYKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YwppbmRleCA3NDgwZTEyMmI2MS4uMTJmM2YzOWUzOWIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmMKQEAgLTQxMyw3ICs0MTMsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpB SFgpCiAJCUFIWC0+bWluUmVtb3RlVmVyc2lvbiA9IDA7CiAJCUFIWC0+bWF4UmVtb3RlVmVyc2lv biA9IDk5OTk5OTk7CiAKLQkJQ29ubmVjdERhdGFiYXNlKEFIWCwgJnJvcHQtPmNwYXJhbXMsIGZh bHNlKTsKKwkJQ29ubmVjdERhdGFiYXNlQWh4KEFIWCwgJnJvcHQtPmNwYXJhbXMsIGZhbHNlKTsK IAogCQkvKgogCQkgKiBJZiB3ZSdyZSB0YWxraW5nIHRvIHRoZSBEQiBkaXJlY3RseSwgZG9uJ3Qg c2VuZCBjb21tZW50cyBzaW5jZSB0aGV5CkBAIC00NDMwLDcgKzQ0MzAsNyBAQCByZXN0b3JlX3Rv Y19lbnRyaWVzX3Bvc3Rmb3JrKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqcGVuZGluZ19s aXN0KQogCS8qCiAJICogTm93IHJlY29ubmVjdCB0aGUgc2luZ2xlIHBhcmVudCBjb25uZWN0aW9u LgogCSAqLwotCUNvbm5lY3REYXRhYmFzZSgoQXJjaGl2ZSAqKSBBSCwgJnJvcHQtPmNwYXJhbXMs IHRydWUpOworCUNvbm5lY3REYXRhYmFzZUFoeCgoQXJjaGl2ZSAqKSBBSCwgJnJvcHQtPmNwYXJh bXMsIHRydWUpOwogCiAJLyogcmUtZXN0YWJsaXNoIGZpeGVkIHN0YXRlICovCiAJX2RvU2V0Rml4 ZWRPdXRwdXRTdGF0ZShBSCk7CkBAIC01MDQ3LDcgKzUwNDcsNyBAQCBDbG9uZUFyY2hpdmUoQXJj aGl2ZUhhbmRsZSAqQUgpCiAJICogQ29ubmVjdCBvdXIgbmV3IGNsb25lIG9iamVjdCB0byB0aGUg ZGF0YWJhc2UsIHVzaW5nIHRoZSBzYW1lIGNvbm5lY3Rpb24KIAkgKiBwYXJhbWV0ZXJzIHVzZWQg Zm9yIHRoZSBvcmlnaW5hbCBjb25uZWN0aW9uLgogCSAqLwotCUNvbm5lY3REYXRhYmFzZSgoQXJj aGl2ZSAqKSBjbG9uZSwgJmNsb25lLT5wdWJsaWMucm9wdC0+Y3BhcmFtcywgdHJ1ZSk7CisJQ29u bmVjdERhdGFiYXNlQWh4KChBcmNoaXZlICopIGNsb25lLCAmY2xvbmUtPnB1YmxpYy5yb3B0LT5j cGFyYW1zLCB0cnVlKTsKIAogCS8qIHJlLWVzdGFibGlzaCBmaXhlZCBzdGF0ZSAqLwogCWlmIChB SC0+bW9kZSA9PSBhcmNoTW9kZVJlYWQpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2RiLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RiLmMKaW5kZXggNzFjNTVk MjQ2NmEuLjIyN2RkOTYzOTg0IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2RiLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jCkBAIC0xOSw2ICsxOSw3 IEBACiAKICNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgogI2luY2x1ZGUgImNvbW1vbi9zdHJp bmcuaCIKKyNpbmNsdWRlICJjb25uZWN0ZGIuaCIKICNpbmNsdWRlICJwYXJhbGxlbC5oIgogI2lu Y2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF9kYi5oIgpA QCAtODYsOSArODcsOSBAQCBSZWNvbm5lY3RUb1NlcnZlcihBcmNoaXZlSGFuZGxlICpBSCwgY29u c3QgY2hhciAqZGJuYW1lKQogCSAqIEFyY2hpdmVIYW5kbGUncyBjb25uQ2FuY2VsLCBiZWZvcmUg Y2xvc2luZyBvbGQgY29ubmVjdGlvbi4gIE90aGVyd2lzZQogCSAqIGFuIGlsbC10aW1lZCBTSUdJ TlQgY291bGQgdHJ5IHRvIGFjY2VzcyBhIGRlYWQgY29ubmVjdGlvbi4KIAkgKi8KLQlBSC0+Y29u bmVjdGlvbiA9IE5VTEw7CQkvKiBkb2RnZSBlcnJvciBjaGVjayBpbiBDb25uZWN0RGF0YWJhc2Ug Ki8KKwlBSC0+Y29ubmVjdGlvbiA9IE5VTEw7CQkvKiBkb2RnZSBlcnJvciBjaGVjayBpbiBDb25u ZWN0RGF0YWJhc2VBaHggKi8KIAotCUNvbm5lY3REYXRhYmFzZSgoQXJjaGl2ZSAqKSBBSCwgJnJv cHQtPmNwYXJhbXMsIHRydWUpOworCUNvbm5lY3REYXRhYmFzZUFoeCgoQXJjaGl2ZSAqKSBBSCwg JnJvcHQtPmNwYXJhbXMsIHRydWUpOwogCiAJUFFmaW5pc2gob2xkQ29ubik7CiB9CkBAIC0xMDUs MTQgKzEwNiwxMyBAQCBSZWNvbm5lY3RUb1NlcnZlcihBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qg Y2hhciAqZGJuYW1lKQogICogdXNlcm5hbWUgbmV2ZXIgZG9lcyBjaGFuZ2UsIHNvIG9uZSBzYXZl ZFBhc3N3b3JkIGlzIHN1ZmZpY2llbnQuCiAgKi8KIHZvaWQKLUNvbm5lY3REYXRhYmFzZShBcmNo aXZlICpBSFgsCitDb25uZWN0RGF0YWJhc2VBaHgoQXJjaGl2ZSAqQUhYLAogCQkJCWNvbnN0IENv bm5QYXJhbXMgKmNwYXJhbXMsCiAJCQkJYm9vbCBpc1JlY29ubmVjdCkKIHsKIAlBcmNoaXZlSGFu ZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKIAl0cml2YWx1ZQlwcm9tcHRfcGFzc3dv cmQ7CiAJY2hhcgkgICAqcGFzc3dvcmQ7Ci0JYm9vbAkJbmV3X3Bhc3M7CiAKIAlpZiAoQUgtPmNv bm5lY3Rpb24pCiAJCXBnX2ZhdGFsKCJhbHJlYWR5IGNvbm5lY3RlZCB0byBhIGRhdGFiYXNlIik7 CkBAIC0xMjUsNjkgKzEyNSwxMCBAQCBDb25uZWN0RGF0YWJhc2UoQXJjaGl2ZSAqQUhYLAogCWlm IChwcm9tcHRfcGFzc3dvcmQgPT0gVFJJX1lFUyAmJiBwYXNzd29yZCA9PSBOVUxMKQogCQlwYXNz d29yZCA9IHNpbXBsZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7CiAKLQkvKgotCSAqIFN0 YXJ0IHRoZSBjb25uZWN0aW9uLiAgTG9vcCB1bnRpbCB3ZSBoYXZlIGEgcGFzc3dvcmQgaWYgcmVx dWVzdGVkIGJ5Ci0JICogYmFja2VuZC4KLQkgKi8KLQlkbwotCXsKLQkJY29uc3QgY2hhciAqa2V5 d29yZHNbOF07Ci0JCWNvbnN0IGNoYXIgKnZhbHVlc1s4XTsKLQkJaW50CQkJaSA9IDA7Ci0KLQkJ LyoKLQkJICogSWYgZGJuYW1lIGlzIGEgY29ubnN0cmluZywgaXRzIGVudHJpZXMgY2FuIG92ZXJy aWRlIHRoZSBvdGhlcgotCQkgKiB2YWx1ZXMgb2J0YWluZWQgZnJvbSBjcGFyYW1zOyBidXQgaW4g dHVybiwgb3ZlcnJpZGVfZGJuYW1lIGNhbgotCQkgKiBvdmVycmlkZSB0aGUgZGJuYW1lIGNvbXBv bmVudCBvZiBpdC4KLQkJICovCi0JCWtleXdvcmRzW2ldID0gImhvc3QiOwotCQl2YWx1ZXNbaSsr XSA9IGNwYXJhbXMtPnBnaG9zdDsKLQkJa2V5d29yZHNbaV0gPSAicG9ydCI7Ci0JCXZhbHVlc1tp KytdID0gY3BhcmFtcy0+cGdwb3J0OwotCQlrZXl3b3Jkc1tpXSA9ICJ1c2VyIjsKLQkJdmFsdWVz W2krK10gPSBjcGFyYW1zLT51c2VybmFtZTsKLQkJa2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOwot CQl2YWx1ZXNbaSsrXSA9IHBhc3N3b3JkOwotCQlrZXl3b3Jkc1tpXSA9ICJkYm5hbWUiOwotCQl2 YWx1ZXNbaSsrXSA9IGNwYXJhbXMtPmRibmFtZTsKLQkJaWYgKGNwYXJhbXMtPm92ZXJyaWRlX2Ri bmFtZSkKLQkJewotCQkJa2V5d29yZHNbaV0gPSAiZGJuYW1lIjsKLQkJCXZhbHVlc1tpKytdID0g Y3BhcmFtcy0+b3ZlcnJpZGVfZGJuYW1lOwotCQl9Ci0JCWtleXdvcmRzW2ldID0gImZhbGxiYWNr X2FwcGxpY2F0aW9uX25hbWUiOwotCQl2YWx1ZXNbaSsrXSA9IHByb2duYW1lOwotCQlrZXl3b3Jk c1tpXSA9IE5VTEw7Ci0JCXZhbHVlc1tpKytdID0gTlVMTDsKLQkJQXNzZXJ0KGkgPD0gbGVuZ3Ro b2Yoa2V5d29yZHMpKTsKLQotCQluZXdfcGFzcyA9IGZhbHNlOwotCQlBSC0+Y29ubmVjdGlvbiA9 IFBRY29ubmVjdGRiUGFyYW1zKGtleXdvcmRzLCB2YWx1ZXMsIHRydWUpOwotCi0JCWlmICghQUgt PmNvbm5lY3Rpb24pCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2Ui KTsKLQotCQlpZiAoUFFzdGF0dXMoQUgtPmNvbm5lY3Rpb24pID09IENPTk5FQ1RJT05fQkFEICYm Ci0JCQlQUWNvbm5lY3Rpb25OZWVkc1Bhc3N3b3JkKEFILT5jb25uZWN0aW9uKSAmJgotCQkJcGFz c3dvcmQgPT0gTlVMTCAmJgotCQkJcHJvbXB0X3Bhc3N3b3JkICE9IFRSSV9OTykKLQkJewotCQkJ UFFmaW5pc2goQUgtPmNvbm5lY3Rpb24pOwotCQkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQ YXNzd29yZDogIiwgZmFsc2UpOwotCQkJbmV3X3Bhc3MgPSB0cnVlOwotCQl9Ci0JfSB3aGlsZSAo bmV3X3Bhc3MpOwotCi0JLyogY2hlY2sgdG8gc2VlIHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlv biB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8KLQlpZiAoUFFzdGF0dXMoQUgtPmNvbm5lY3Rpb24p ID09IENPTk5FQ1RJT05fQkFEKQotCXsKLQkJaWYgKGlzUmVjb25uZWN0KQotCQkJcGdfZmF0YWwo InJlY29ubmVjdGlvbiBmYWlsZWQ6ICVzIiwKLQkJCQkJIFBRZXJyb3JNZXNzYWdlKEFILT5jb25u ZWN0aW9uKSk7Ci0JCWVsc2UKLQkJCXBnX2ZhdGFsKCIlcyIsCi0JCQkJCSBQUWVycm9yTWVzc2Fn ZShBSC0+Y29ubmVjdGlvbikpOwotCX0KKwlBSC0+Y29ubmVjdGlvbiA9IENvbm5lY3REYXRhYmFz ZShjcGFyYW1zLT5kYm5hbWUsIE5VTEwsIGNwYXJhbXMtPnBnaG9zdCwKKwkJCWNwYXJhbXMtPnBn cG9ydCwgY3BhcmFtcy0+dXNlcm5hbWUsCisJCQlwcm9tcHRfcGFzc3dvcmQsIHRydWUsCisJCQlw cm9nbmFtZSwgTlVMTCwgTlVMTCwgcGFzc3dvcmQsIGNwYXJhbXMtPm92ZXJyaWRlX2RibmFtZSk7 CiAKIAkvKiBTdGFydCBzdHJpY3Q7IGxhdGVyIHBoYXNlcyBtYXkgb3ZlcnJpZGUgdGhpcy4gKi8K IAlQUWNsZWFyKEV4ZWN1dGVTcWxRdWVyeUZvclNpbmdsZVJvdygoQXJjaGl2ZSAqKSBBSCwKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5jCmluZGV4IGMzNzE1NzA1MDFhLi42YmI1NGMxYTJiNCAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC05 MzQsNyArOTM0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogT3BlbiB0aGUg ZGF0YWJhc2UgdXNpbmcgdGhlIEFyY2hpdmVyLCBzbyBpdCBrbm93cyBhYm91dCBpdC4gRXJyb3Jz IG1lYW4KIAkgKiBkZWF0aC4KIAkgKi8KLQlDb25uZWN0RGF0YWJhc2UoZm91dCwgJmRvcHQuY3Bh cmFtcywgZmFsc2UpOworCUNvbm5lY3REYXRhYmFzZUFoeChmb3V0LCAmZG9wdC5jcGFyYW1zLCBm YWxzZSk7CiAJc2V0dXBfY29ubmVjdGlvbihmb3V0LCBkdW1wZW5jb2RpbmcsIGR1bXBzbmFwc2hv dCwgdXNlX3JvbGUpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w YWxsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCmluZGV4IGUwODY3MjQyNTI2Li5l N2U0OTJhZmEyOCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYworKysg Yi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCkBAIC0yNCwxMSArMjQsMTEgQEAKICNpbmNs dWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcu aCIKICNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29ubmVjdGRiLmgiCiAj aW5jbHVkZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgi CiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKLSNpbmNsdWRl ICJwZ19iYWNrdXAuaCIKIAogLyogdmVyc2lvbiBzdHJpbmcgd2UgZXhwZWN0IGJhY2sgZnJvbSBw Z19kdW1wICovCiAjZGVmaW5lIFBHRFVNUF9WRVJTSU9OU1RSICJwZ19kdW1wIChQb3N0Z3JlU1FM KSAiIFBHX1ZFUlNJT04gIlxuIgpAQCAtNzEsMjEgKzcxLDE1IEBAIHN0YXRpYyB2b2lkIGJ1aWxk U2hTZWNMYWJlbHMoUEdjb25uICpjb25uLAogCQkJCQkJCSBjb25zdCBjaGFyICpjYXRhbG9nX25h bWUsIE9pZCBvYmplY3RJZCwKIAkJCQkJCQkgY29uc3QgY2hhciAqb2JqdHlwZSwgY29uc3QgY2hh ciAqb2JqbmFtZSwKIAkJCQkJCQkgUFFFeHBCdWZmZXIgYnVmZmVyKTsKLXN0YXRpYyBQR2Nvbm4g KmNvbm5lY3REYXRhYmFzZShjb25zdCBjaGFyICpkYm5hbWUsCi0JCQkJCQkJICAgY29uc3QgY2hh ciAqY29ubmVjdGlvbl9zdHJpbmcsIGNvbnN0IGNoYXIgKnBnaG9zdCwKLQkJCQkJCQkgICBjb25z dCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKLQkJCQkJCQkgICB0cml2YWx1ZSBw cm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvcik7Ci1zdGF0aWMgY2hhciAqY29uc3Ry dWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0IGNoYXIgKip2YWx1ZXMpOwot c3RhdGljIFBHcmVzdWx0ICpleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpx dWVyeSk7CiBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNo YXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpj b25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJICAgU2ltcGxlU3RyaW5n TGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hh ciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pOwogCiBzdGF0aWMgY2hhciBw Z19kdW1wX2JpbltNQVhQR1BBVEhdOwotc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lOworY29u c3QgY2hhciAqcHJvZ25hbWU7CiBzdGF0aWMgUFFFeHBCdWZmZXIgcGdkdW1wb3B0czsKLXN0YXRp YyBjaGFyICpjb25uc3RyID0gIiI7CitzdGF0aWMgY29uc3QgY2hhciAqY29ubnN0ciA9ICIiOwog c3RhdGljIGJvb2wgb3V0cHV0X2NsZWFuID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBza2lwX2FjbHMg PSBmYWxzZTsKIHN0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTEyNSw4ICsxMTksNiBA QCBzdGF0aWMgY2hhciAqZmlsZW5hbWUgPSBOVUxMOwogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3Qg ZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIHN0YXRpYyBTaW1wbGVT dHJpbmdMaXN0IGRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMgPSB7TlVMTCwgTlVMTH07CiAKLSNkZWZp bmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQotCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIHsKQEAgLTQ4MywxOSArNDc1LDIyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAkgKi8KIAlpZiAocGdkYikKIAl7Ci0JCWNvbm4gPSBjb25uZWN0RGF0YWJhc2Uo cGdkYiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNlciwKLQkJCQkJCQkgICBwcm9tcHRf cGFzc3dvcmQsIGZhbHNlKTsKKwkJY29ubiA9IENvbm5lY3REYXRhYmFzZShwZ2RiLCBjb25uc3Ry LCBwZ2hvc3QsIHBncG9ydCwgcGd1c2VyLAorCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgZmFs c2UsCisJCQkJCQkJICAgcHJvZ25hbWUsICZjb25uc3RyLCAmc2VydmVyX3ZlcnNpb24sIE5VTEws IE5VTEwpOwogCiAJCWlmICghY29ubikKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0 byBkYXRhYmFzZSBcIiVzXCIiLCBwZ2RiKTsKIAl9CiAJZWxzZQogCXsKLQkJY29ubiA9IGNvbm5l Y3REYXRhYmFzZSgicG9zdGdyZXMiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2VyLAot CQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgZmFsc2UpOworCQljb25uID0gQ29ubmVjdERhdGFi YXNlKCJwb3N0Z3JlcyIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCisJCQkJCQkJ ICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSwKKwkJCQkJCQkgICBwcm9nbmFtZSwgJmNvbm5zdHIs ICZzZXJ2ZXJfdmVyc2lvbiwgTlVMTCwgTlVMTCk7CiAJCWlmICghY29ubikKLQkJCWNvbm4gPSBj b25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3Vz ZXIsCi0JCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgdHJ1ZSk7CisJCQljb25uID0gQ29ubmVj dERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2VyLAor CQkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIHRydWUsCisJCQkJCQkJCSAgIHByb2duYW1lLCAm Y29ubnN0ciwgJnNlcnZlcl92ZXJzaW9uLCBOVUxMLCBOVUxMKTsKIAogCQlpZiAoIWNvbm4pCiAJ CXsKQEAgLTE3MTgsMjU2ICsxNzEzLDYgQEAgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4s IGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCWRlc3Ryb3lQUUV4cEJ1 ZmZlcihzcWwpOwogfQogCi0vKgotICogTWFrZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gd2l0aCB0 aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIEFuCi0gKiBpbnRlcmFjdGl2ZSBwYXNzd29yZCBwcm9tcHQg aXMgYXV0b21hdGljYWxseSBpc3N1ZWQgaWYgcmVxdWlyZWQuCi0gKgotICogSWYgZmFpbF9vbl9l cnJvciBpcyBmYWxzZSwgd2UgcmV0dXJuIE5VTEwgd2l0aG91dCBwcmludGluZyBhbnkgbWVzc2Fn ZQotICogb24gZmFpbHVyZSwgYnV0IHByZXNlcnZlIGFueSBwcm9tcHRlZCBwYXNzd29yZCBmb3Ig dGhlIG5leHQgdHJ5LgotICoKLSAqIE9uIHN1Y2Nlc3MsIHRoZSBnbG9iYWwgdmFyaWFibGUgJ2Nv bm5zdHInIGlzIHNldCB0byBhIGNvbm5lY3Rpb24gc3RyaW5nCi0gKiBjb250YWluaW5nIHRoZSBv cHRpb25zIHVzZWQuCi0gKi8KLXN0YXRpYyBQR2Nvbm4gKgotY29ubmVjdERhdGFiYXNlKGNvbnN0 IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsCi0JCQkJY29uc3Qg Y2hhciAqcGdob3N0LCBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKLQkJ CQl0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvcikKLXsKLQlQR2Nv bm4JICAgKmNvbm47Ci0JYm9vbAkJbmV3X3Bhc3M7Ci0JY29uc3QgY2hhciAqcmVtb3RldmVyc2lv bl9zdHI7Ci0JaW50CQkJbXlfdmVyc2lvbjsKLQljb25zdCBjaGFyICoqa2V5d29yZHMgPSBOVUxM OwotCWNvbnN0IGNoYXIgKip2YWx1ZXMgPSBOVUxMOwotCVBRY29ubmluZm9PcHRpb24gKmNvbm5f b3B0cyA9IE5VTEw7Ci0Jc3RhdGljIGNoYXIgKnBhc3N3b3JkID0gTlVMTDsKLQotCWlmIChwcm9t cHRfcGFzc3dvcmQgPT0gVFJJX1lFUyAmJiAhcGFzc3dvcmQpCi0JCXBhc3N3b3JkID0gc2ltcGxl X3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKLQotCS8qCi0JICogU3RhcnQgdGhlIGNvbm5l Y3Rpb24uICBMb29wIHVudGlsIHdlIGhhdmUgYSBwYXNzd29yZCBpZiByZXF1ZXN0ZWQgYnkKLQkg KiBiYWNrZW5kLgotCSAqLwotCWRvCi0JewotCQlpbnQJCQlhcmdjb3VudCA9IDY7Ci0JCVBRY29u bmluZm9PcHRpb24gKmNvbm5fb3B0OwotCQljaGFyCSAgICplcnJfbXNnID0gTlVMTDsKLQkJaW50 CQkJaSA9IDA7Ci0KLQkJZnJlZShrZXl3b3Jkcyk7Ci0JCWZyZWUodmFsdWVzKTsKLQkJUFFjb25u aW5mb0ZyZWUoY29ubl9vcHRzKTsKLQotCQkvKgotCQkgKiBNZXJnZSB0aGUgY29ubmVjdGlvbiBp bmZvIGlucHV0cyBnaXZlbiBpbiBmb3JtIG9mIGNvbm5lY3Rpb24gc3RyaW5nCi0JCSAqIGFuZCBv dGhlciBvcHRpb25zLiAgRXhwbGljaXRseSBkaXNjYXJkIGFueSBkYm5hbWUgdmFsdWUgaW4gdGhl Ci0JCSAqIGNvbm5lY3Rpb24gc3RyaW5nOyBvdGhlcndpc2UsIFBRY29ubmVjdGRiUGFyYW1zKCkg d291bGQgaW50ZXJwcmV0Ci0JCSAqIHRoYXQgdmFsdWUgYXMgYmVpbmcgaXRzZWxmIGEgY29ubmVj dGlvbiBzdHJpbmcuCi0JCSAqLwotCQlpZiAoY29ubmVjdGlvbl9zdHJpbmcpCi0JCXsKLQkJCWNv bm5fb3B0cyA9IFBRY29ubmluZm9QYXJzZShjb25uZWN0aW9uX3N0cmluZywgJmVycl9tc2cpOwot CQkJaWYgKGNvbm5fb3B0cyA9PSBOVUxMKQotCQkJCXBnX2ZhdGFsKCIlcyIsIGVycl9tc2cpOwot Ci0JCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxM OyBjb25uX29wdCsrKQotCQkJewotCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29u bl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCi0JCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwg ImRibmFtZSIpICE9IDApCi0JCQkJCWFyZ2NvdW50Kys7Ci0JCQl9Ci0KLQkJCWtleXdvcmRzID0g cGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqa2V5d29yZHMpKTsKLQkJCXZhbHVl cyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKnZhbHVlcykpOwotCi0JCQlm b3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25u X29wdCsrKQotCQkJewotCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQt PnZhbFswXSAhPSAnXDAnICYmCi0JCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFt ZSIpICE9IDApCi0JCQkJewotCQkJCQlrZXl3b3Jkc1tpXSA9IGNvbm5fb3B0LT5rZXl3b3JkOwot CQkJCQl2YWx1ZXNbaV0gPSBjb25uX29wdC0+dmFsOwotCQkJCQlpKys7Ci0JCQkJfQotCQkJfQot CQl9Ci0JCWVsc2UKLQkJewotCQkJa2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEp ICogc2l6ZW9mKCprZXl3b3JkcykpOwotCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQg KyAxKSAqIHNpemVvZigqdmFsdWVzKSk7Ci0JCX0KLQotCQlpZiAocGdob3N0KQotCQl7Ci0JCQlr ZXl3b3Jkc1tpXSA9ICJob3N0IjsKLQkJCXZhbHVlc1tpXSA9IHBnaG9zdDsKLQkJCWkrKzsKLQkJ fQotCQlpZiAocGdwb3J0KQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJwb3J0IjsKLQkJCXZhbHVl c1tpXSA9IHBncG9ydDsKLQkJCWkrKzsKLQkJfQotCQlpZiAocGd1c2VyKQotCQl7Ci0JCQlrZXl3 b3Jkc1tpXSA9ICJ1c2VyIjsKLQkJCXZhbHVlc1tpXSA9IHBndXNlcjsKLQkJCWkrKzsKLQkJfQot CQlpZiAocGFzc3dvcmQpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gInBhc3N3b3JkIjsKLQkJCXZh bHVlc1tpXSA9IHBhc3N3b3JkOwotCQkJaSsrOwotCQl9Ci0JCWlmIChkYm5hbWUpCi0JCXsKLQkJ CWtleXdvcmRzW2ldID0gImRibmFtZSI7Ci0JCQl2YWx1ZXNbaV0gPSBkYm5hbWU7Ci0JCQlpKys7 Ci0JCX0KLQkJa2V5d29yZHNbaV0gPSAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSI7Ci0JCXZh bHVlc1tpXSA9IHByb2duYW1lOwotCQlpKys7Ci0KLQkJbmV3X3Bhc3MgPSBmYWxzZTsKLQkJY29u biA9IFBRY29ubmVjdGRiUGFyYW1zKGtleXdvcmRzLCB2YWx1ZXMsIHRydWUpOwotCi0JCWlmICgh Y29ubikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIi LCBkYm5hbWUpOwotCi0JCWlmIChQUXN0YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCAmJgot CQkJUFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZChjb25uKSAmJgotCQkJIXBhc3N3b3JkICYmCi0J CQlwcm9tcHRfcGFzc3dvcmQgIT0gVFJJX05PKQotCQl7Ci0JCQlQUWZpbmlzaChjb25uKTsKLQkJ CXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKLQkJCW5ld19w YXNzID0gdHJ1ZTsKLQkJfQotCX0gd2hpbGUgKG5ld19wYXNzKTsKLQotCS8qIGNoZWNrIHRvIHNl ZSB0aGF0IHRoZSBiYWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBtYWRlICovCi0J aWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEKQotCXsKLQkJaWYgKGZhaWxfb25f ZXJyb3IpCi0JCQlwZ19mYXRhbCgiJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7Ci0JCWVsc2UK LQkJewotCQkJUFFmaW5pc2goY29ubik7Ci0KLQkJCWZyZWUoa2V5d29yZHMpOwotCQkJZnJlZSh2 YWx1ZXMpOwotCQkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKLQotCQkJcmV0dXJuIE5VTEw7 Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIE9rLCBjb25uZWN0ZWQgc3VjY2Vzc2Z1bGx5LiBSZW1lbWJl ciB0aGUgb3B0aW9ucyB1c2VkLCBpbiB0aGUgZm9ybSBvZiBhCi0JICogY29ubmVjdGlvbiBzdHJp bmcuCi0JICovCi0JY29ubnN0ciA9IGNvbnN0cnVjdENvbm5TdHIoa2V5d29yZHMsIHZhbHVlcyk7 Ci0KLQlmcmVlKGtleXdvcmRzKTsKLQlmcmVlKHZhbHVlcyk7Ci0JUFFjb25uaW5mb0ZyZWUoY29u bl9vcHRzKTsKLQotCS8qIENoZWNrIHZlcnNpb24gKi8KLQlyZW1vdGV2ZXJzaW9uX3N0ciA9IFBR cGFyYW1ldGVyU3RhdHVzKGNvbm4sICJzZXJ2ZXJfdmVyc2lvbiIpOwotCWlmICghcmVtb3RldmVy c2lvbl9zdHIpCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgZ2V0IHNlcnZlciB2ZXJzaW9uIik7Ci0J c2VydmVyX3ZlcnNpb24gPSBQUXNlcnZlclZlcnNpb24oY29ubik7Ci0JaWYgKHNlcnZlcl92ZXJz aW9uID09IDApCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2VydmVyIHZlcnNpb24gXCIl c1wiIiwKLQkJCQkgcmVtb3RldmVyc2lvbl9zdHIpOwotCi0JbXlfdmVyc2lvbiA9IFBHX1ZFUlNJ T05fTlVNOwotCi0JLyoKLQkgKiBXZSBhbGxvdyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4y LCBhbmQgdXAgdG8gYW55IG1pbm9yIHJlbGVhc2Ugb2YKLQkgKiBvdXIgb3duIG1ham9yIHZlcnNp b24uICAoU2VlIGFsc28gdmVyc2lvbiBjaGVjayBpbiBwZ19kdW1wLmMuKQotCSAqLwotCWlmICht eV92ZXJzaW9uICE9IHNlcnZlcl92ZXJzaW9uCi0JCSYmIChzZXJ2ZXJfdmVyc2lvbiA8IDkwMjAw IHx8Ci0JCQkoc2VydmVyX3ZlcnNpb24gLyAxMDApID4gKG15X3ZlcnNpb24gLyAxMDApKSkKLQl7 Ci0JCXBnX2xvZ19lcnJvcigiYWJvcnRpbmcgYmVjYXVzZSBvZiBzZXJ2ZXIgdmVyc2lvbiBtaXNt YXRjaCIpOwotCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJzZXJ2ZXIgdmVyc2lvbjogJXM7ICVzIHZl cnNpb246ICVzIiwKLQkJCQkJCQlyZW1vdGV2ZXJzaW9uX3N0ciwgcHJvZ25hbWUsIFBHX1ZFUlNJ T04pOwotCQlleGl0X25pY2VseSgxKTsKLQl9Ci0KLQlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25u LCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9QQVRIX1NRTCkpOwotCi0JcmV0dXJuIGNvbm47Ci19Ci0K LS8qIC0tLS0tLS0tLS0KLSAqIENvbnN0cnVjdCBhIGNvbm5lY3Rpb24gc3RyaW5nIGZyb20gdGhl IGdpdmVuIGtleXdvcmQvdmFsdWUgcGFpcnMuIEl0IGlzCi0gKiB1c2VkIHRvIHBhc3MgdGhlIGNv bm5lY3Rpb24gb3B0aW9ucyB0byB0aGUgcGdfZHVtcCBzdWJwcm9jZXNzLgotICoKLSAqIFRoZSBm b2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgZXhjbHVkZWQ6Ci0gKglkYm5hbWUJCS0gdmFyaWVzIGlu IGVhY2ggcGdfZHVtcCBpbnZvY2F0aW9uCi0gKglwYXNzd29yZAktIGl0J3Mgbm90IHNlY3VyZSB0 byBwYXNzIGEgcGFzc3dvcmQgb24gdGhlIGNvbW1hbmQgbGluZQotICoJZmFsbGJhY2tfYXBwbGlj YXRpb25fbmFtZSAtIHdlJ2xsIGxldCBwZ19kdW1wIHNldCBpdAotICogLS0tLS0tLS0tLQotICov Ci1zdGF0aWMgY2hhciAqCi1jb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3Jkcywg Y29uc3QgY2hhciAqKnZhbHVlcykKLXsKLQlQUUV4cEJ1ZmZlciBidWYgPSBjcmVhdGVQUUV4cEJ1 ZmZlcigpOwotCWNoYXIJICAgKmNvbm5zdHI7Ci0JaW50CQkJaTsKLQlib29sCQlmaXJzdGtleXdv cmQgPSB0cnVlOwotCi0JLyogQ29uc3RydWN0IGEgbmV3IGNvbm5lY3Rpb24gc3RyaW5nIGluIGtl eT0ndmFsdWUnIGZvcm1hdC4gKi8KLQlmb3IgKGkgPSAwOyBrZXl3b3Jkc1tpXSAhPSBOVUxMOyBp KyspCi0JewotCQlpZiAoc3RyY21wKGtleXdvcmRzW2ldLCAiZGJuYW1lIikgPT0gMCB8fAotCQkJ c3RyY21wKGtleXdvcmRzW2ldLCAicGFzc3dvcmQiKSA9PSAwIHx8Ci0JCQlzdHJjbXAoa2V5d29y ZHNbaV0sICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIikgPT0gMCkKLQkJCWNvbnRpbnVlOwot Ci0JCWlmICghZmlyc3RrZXl3b3JkKQotCQkJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKGJ1ZiwgJyAn KTsKLQkJZmlyc3RrZXl3b3JkID0gZmFsc2U7Ci0JCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgIiVz PSIsIGtleXdvcmRzW2ldKTsKLQkJYXBwZW5kQ29ublN0clZhbChidWYsIHZhbHVlc1tpXSk7Ci0J fQotCi0JY29ubnN0ciA9IHBnX3N0cmR1cChidWYtPmRhdGEpOwotCWRlc3Ryb3lQUUV4cEJ1ZmZl cihidWYpOwotCXJldHVybiBjb25uc3RyOwotfQotCi0vKgotICogUnVuIGEgcXVlcnksIHJldHVy biB0aGUgcmVzdWx0cywgZXhpdCBwcm9ncmFtIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBQR3Jl c3VsdCAqCi1leGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKLXsK LQlQR3Jlc3VsdCAgICpyZXM7Ci0KLQlwZ19sb2dfaW5mbygiZXhlY3V0aW5nICVzIiwgcXVlcnkp OwotCi0JcmVzID0gUFFleGVjKGNvbm4sIHF1ZXJ5KTsKLQlpZiAoIXJlcyB8fAotCQlQUXJlc3Vs dFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKLQl7Ci0JCXBnX2xvZ19lcnJvcigicXVl cnkgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKLQkJcGdfbG9nX2Vycm9yX2Rl dGFpbCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKLQkJUFFmaW5pc2goY29ubik7Ci0JCWV4aXRf bmljZWx5KDEpOwotCX0KLQotCXJldHVybiByZXM7Ci19Ci0KIC8qCiAgKiBBcyBhYm92ZSBmb3Ig YSBTUUwgY29tbWFuZCAod2hpY2ggcmV0dXJucyBub3RoaW5nKS4KICAqLwotLSAKMi4zOS4zCgo= --00000000000097c8a5063012eb42 Content-Type: application/octet-stream; name="v23_0002_pg_dumpall-with-non-text_format-11th_march.patch" Content-Disposition: attachment; filename="v23_0002_pg_dumpall-with-non-text_format-11th_march.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m84nrp4z1 RnJvbSBiYzE4NDUxYmU0Mzg2NzcyMzk1OWYyMGY3MTkyMDA3MzQyOTY0MzkzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCAxMSBNYXIgMjAyNSAxOToyOToxNSArMDUzMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBwZ19kdW1wYWxsIHdpdGggZGlyZWN0b3J5fHRhcnxjdXN0b20gZm9ybWF0IGFuZCBy ZXN0b3JlCiBpdCBieSBwZ19yZXN0b3JlCgpuZXcgb3B0aW9uIHRvIHBnX2R1bXBhbGw6Ci1GLCAt LWZvcm1hdD1kfHR8Y3xwICBvdXRwdXQgZmlsZSBmb3JtYXQgKCBwbGFpbiB0ZXh0IChkZWZhdWx0 KSkKCkV4OjEgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVjdG9yeSAtLWZpbGU9ZHVtcERpck5h bWUKRXg6MiAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9dGFyIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDoz IC4vcGdfZHVtcGFsbCAtLWZvcm1hdD1jdXN0b20gLS1maWxlPWR1bXBEaXJOYW1lCkV4OjQgLi9w Z19kdW1wYWxsIC0tZm9ybWF0PXBsYWluIC0tZmlsZT1kdW1wRGlyTmFtZQoKZHVtcHMgYXJlIGFz OgpnbG9iYWwuZGF0IDo6OiBnbG9iYWwgc3FsIGNvbW1hbmRzIGluIHNpbXBsZSBwbGFpbiBmb3Jt YXQKbWFwLmRhdC4gICA6OjogZGJvaWQgZGJuYW1lIC0tLWVudHJpZXMgZm9yIGFsbCBkYXRhYmFz ZXMgaW4gc2ltcGxlIHRleHQgZm9ybQpkYXRhYmFzZXMuIDo6OgogICAgICBzdWJkaXIgICAgIGRi b2lkMSAgLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1hdAogICAgICBz dWJkaXIgICAgIGRib2lkMi4gLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZv cm1hdAogICAgICAgICAgICAgIGV0YwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTk9URToKaWYgbmVlZGVk LCByZXN0b3JlIHNpbmdsZSBkYiBieSBwYXJ0aWN1bGFyIHN1YmRpcgoKRXg6IC4vcGdfcmVzdG9y ZSAtLWZvcm1hdD1kaXJlY3RvcnkgLWQgcG9zdGdyZXMgZHVtcERpck5hbWUvZGF0YWJhc2VzLzUK ICAgLS0gaGVyZSwgNSBpcyB0aGUgZGJvaWQgb2YgcG9zdGdyZXMgZGIKICAgLS0gdG8gZ2V0IGRi b2lkLCByZWZlciBkYm5hbWUgaW4gbWFwLmZpbGUKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm5ldyBvcHRp b25zIHRvIHBnX3Jlc3RvcmU6Ci1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBv bmx5IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXMKLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRF Uk4gICBleGNsdWRlIGRhdGFiYXNlIHdob3NlIG5hbWUgbWF0Y2hlcyBwYXR0ZXJuCgpXaGVuIHdl IGdpdmUgLWcvLS1nbG9iYWxzLW9ubHkgb3B0aW9uLCB0aGVuIG9ubHkgcmVzdG9yZSBnbG9iYWxz LCBubyBkYiByZXN0b3JpbmcuCgpEZXNpZ246CldoZW4gLS1mb3JtYXQ9ZHx0fGMgaXMgc3BlY2lm aWVkIGFuZCB0aGVyZSBpcyBubyB0b2MuZGF0IGluIG1haW4gZGlyZWN0b3J5LCB0aGVuIGNoZWNr CmZvciBnbG9iYWwuZGF0IHRvIHJlc3RvcmUgYWxsIGRhdGFiYXNlcy4gSWYgZ2xvYmFsLmRhdCBm aWxlIGlzIGV4aXN0IGluIGRpcmVjdG9yeSwKdGhlbiBmaXJzdCByZXN0b3JlIGFsbCBnbG9iYWxz IGZyb20gZ2xvYmFsLmRhdCBhbmQgdGhlbiByZXN0b3JlIGFsbCBkYXRhYmFzZXMgb25lIGJ5IG9u ZQpmcm9tIG1hcC5kYXQgbGlzdCAoaWYgZXhpc3QpCgpmb3IgLS1leGNsdWRlLWRhdGFiYXNlPVBB VFRFUk4gZm9yIHBnX3Jlc3RvcmUKCmFzIG9mIG5vdywgU0VMRUNUIDEgV0hFUkUgWFhYIE9QRVJB VE9SKHBnX2NhdGFsb2cufikgJ14oUEFUVEVSTikkJyBDT0xMQVRFIHBnX2NhdGFsb2cuZGVmYXVs dAppZiBubyBkYiBjb25uZWN0aW9uLCB0aGVuIFBBVFRFUk49TkFNRSBtYXRjaGluZyBvbmx5Cgpm b3IgZWFjaCBkYXRhYmFzZSwgd2UgYXJlIGNsZWFuaW5nIG9uX2V4aXRfbmljZWx5X2luZGV4IGxp c3QuCgphdCB0aGUgZW5kIG9mIHJlc3RvcmUsIHdlIGFyZSBnaXZpbmcgd2FybmluZyB3aXRoIHRv dGFsIG51bWJlciBvZiBlcnJvcnMgKGluY2x1ZGluZyBnbG9iYWwuZGF0LAphbmQgZWFjaCBkYXRh YmFzZSBlcnJvcnMpIGFuZCBmb3IgZWFjaCBkYXRhYmFzZSwgd2UgYXJlIHByaW50aW5nIHdhcm5p bmcgd2l0aCBkYm5hbWUgYW5kIHRvdGFsCmVycm9ycy4KCnRocmVhZDoKaHR0cHM6Ly93d3cucG9z dGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0L0NBS1l0TkFwOXZPdHlkWEwzX3BuR0olMkJUZXRa dE4lM0RGWVNuWlNNQ3FYY2VVM21rSFB4UGclNDBtYWlsLmdtYWlsLmNvbSMwNjY0MzNjYjVhZTAw N2NiZTM1ZmVmZGRmNzk2ZDUyZgotLS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21s ICAgICB8ICA4MCArKy0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sICAgICB8ICA0 MSArLQogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAgICAgIHwgICAzICstCiBzcmMv YmluL3BnX2R1bXAvcGFyYWxsZWwuYyAgICAgICAgICAgfCAgMTEgKy0KIHNyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXAuaCAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5jIHwgIDIwICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmggfCAgIDMgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgICAgICB8ICAgMiAr LQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jICAgIHwgIDIyICstCiBzcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmggICAgfCAgIDMgKy0KIHNyYy9iaW4vcGdfZHVtcC9w Z19kdW1wLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwu YyAgICAgICAgIHwgMjgwICsrKysrKystLQogc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyAg ICAgICAgIHwgODQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2Jpbi9wZ19kdW1w L3QvMDAxX2Jhc2ljLnBsICAgICAgIHwgICA5ICsKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0ICAgICB8ICAgMiArCiAxNSBmaWxlcyBjaGFuZ2VkLCAxMjQ4IGluc2VydGlvbnMoKyks IDc5IGRlbGV0aW9ucygtKQogbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBzcmMvYmluL3Bn X2R1bXAvdC8wMDFfYmFzaWMucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1 bXBhbGwuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCmluZGV4IGMyZmE1 YmU5NTE5Li5jMzY4MDJlMDZmZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1w YWxsLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKQEAgLTE2LDcg KzE2LDcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmbmFtZWRpdj4KICAgPHJl Zm5hbWU+cGdfZHVtcGFsbDwvcmVmbmFtZT4KLSAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBhIDxwcm9k dWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBpbnRvIGEg c2NyaXB0IGZpbGU8L3JlZnB1cnBvc2U+CisgIDxyZWZwdXJwb3NlPmV4dHJhY3QgYSA8cHJvZHVj dG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgYmFzZWQgb24g c3BlY2lmaWVkIGR1bXAgZm9ybWF0IDwvcmVmcHVycG9zZT4KICA8L3JlZm5hbWVkaXY+CiAKICA8 cmVmc3lub3BzaXNkaXY+CkBAIC0xMjEsNyArMTIxLDgzIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRh dGlvbgogICAgICAgIDxwYXJhPgogICAgICAgICBTZW5kIG91dHB1dCB0byB0aGUgc3BlY2lmaWVk IGZpbGUuICBJZiB0aGlzIGlzIG9taXR0ZWQsIHRoZQogICAgICAgICBzdGFuZGFyZCBvdXRwdXQg aXMgdXNlZC4KLSAgICAgICA8L3BhcmE+CisgICAgICAgIE5vdGU6IFRoaXMgb3B0aW9uIGNhbiBi ZSBvbWl0dGVkIG9ubHkgd2hlbiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRpb24+IGlzIHBsYWluCisg ICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisK KyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LUYgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgor ICAgICAgPHRlcm0+PG9wdGlvbj4tLWZvcm1hdD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+ CisgICAgICAgPHBhcmE+CisgICAgICAgIFNwZWNpZnkgZm9ybWF0IG9mIGR1bXAgZmlsZXMuICBJ ZiB3ZSB3YW50IHRvIGR1bXAgYWxsIHRoZSBkYXRhYmFzZXMsCisgICAgICAgIHRoZW4gcGFzcyB0 aGlzIGFzIG5vbi1wbGFpbiBzbyB0aGF0IGR1bXAgb2YgYWxsIGRhdGFiYXNlcyBjYW4gYmUgdGFr ZW4KKyAgICAgICAgaW4gc2VwYXJhdGUgc3ViZGlyZWN0b3J5IGluIGFyY2hpdmUgZm9ybWF0Lgor ICAgICAgICBieSBkZWZhdWx0LCB0aGlzIGlzIHBsYWluIGZvcm1hdC4KKworICAgICAgICBJZiBu b24tcGxhaW4gbW9kZSBpcyBwYXNzZWQsIHRoZW4gZ2xvYmFsLmRhdCAoZ2xvYmFsIHNxbCBjb21t YW5kcykgYW5kCisgICAgICAgIG1hcC5kYXQoZGJvaWQgYW5kIGRibmFtZXMgbGlzdCBvZiBhbGwg dGhlIGRhdGFiYXNlcykgZmlsZXMgd2lsbCBiZSBjcmVhdGVkLgorICAgICAgICBBcGFydCBmcm9t IHRoZXNlIGZpbGVzLCBvbmUgc3ViZGlyZWN0b3J5IHdpdGggZGF0YWJhc2VzIG5hbWUgd2lsbCBi ZSBjcmVhdGVkLgorICAgICAgICBVbmRlciB0aGlzIGRhdGFiYXNlcyBzdWJkaXJlY3RvcnksIHRo ZXJlIHdpbGwgYmUgZmlsZXMgd2l0aCBkYm9pZCBuYW1lIGZvciBlYWNoCisgICAgICAgIGRhdGFi YXNlIGFuZCBpZiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRpb24+IGlzIGRpcmVjdG9yeSwgdGhlbiB0 b2MuZGF0IGFuZCBvdGhlcgorICAgICAgICBkdW1wIGZpbGVzIHdpbGwgYmUgdW5kZXIgZGJvaWQg c3ViZGlyZWN0b3J5LgorCisgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgPHZhcmxpc3Rl bnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmQ8L2xpdGVyYWw+PC90ZXJtPgorICAgICAg ICAgPHRlcm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgZGlyZWN0b3J5 LWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFVuZGVy IGRib2lkCisgICAgICAgICAgIHN1YmRpcmVjdG9yeSwgdGhpcyB3aWxsIGNyZWF0ZSBhIGRpcmVj dG9yeSB3aXRoIG9uZSBmaWxlIGZvciBlYWNoIHRhYmxlIGFuZCBsYXJnZQorICAgICAgICAgICBv YmplY3QgYmVpbmcgZHVtcGVkLCBwbHVzIGEgc28tY2FsbGVkIFRhYmxlIG9mIENvbnRlbnRzIGZp bGUgZGVzY3JpYmluZyB0aGUgZHVtcGVkCisgICAgICAgICAgIG9iamVjdHMgaW4gYSBtYWNoaW5l LXJlYWRhYmxlIGZvcm1hdCB0aGF0IHBnX3Jlc3RvcmUgY2FuIHJlYWQuIEEgZGlyZWN0b3J5IGZv cm1hdAorICAgICAgICAgICBhcmNoaXZlIGNhbiBiZSBtYW5pcHVsYXRlZCB3aXRoIHN0YW5kYXJk IFVuaXggdG9vbHM7IGZvciBleGFtcGxlLCBmaWxlcyBpbiBhbgorICAgICAgICAgICB1bmNvbXBy ZXNzZWQgYXJjaGl2ZSBjYW4gYmUgY29tcHJlc3NlZCB3aXRoIHRoZSBnemlwLCBsejQsIG9yIHpz dGQgdG9vbHMuIFRoaXMKKyAgICAgICAgICAgZm9ybWF0IGlzIGNvbXByZXNzZWQgYnkgZGVmYXVs dCB1c2luZyBnemlwIGFuZCBhbHNvIHN1cHBvcnRzIHBhcmFsbGVsIGR1bXBzLgorICAgICAgICAg IDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wPC9saXRl cmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnBsYWluPC9saXRlcmFsPjwvdGVy bT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0 cHV0IGEgcGxhaW4tdGV4dCBTUUwgc2NyaXB0IGZpbGUgKHRoZSBkZWZhdWx0KS4KKyAgICAgICAg ICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4K KworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+YzwvbGl0 ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jdXN0b208L2xpdGVyYWw+PC90 ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBP dXRwdXQgYSBjdXN0b20tZm9ybWF0IGFyY2hpdmUgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdf cmVzdG9yZS4gVG9nZXRoZXIgd2l0aCB0aGUKKyAgICAgICAgICAgZGlyZWN0b3J5IG91dHB1dCBm b3JtYXQsIHRoaXMgaXMgdGhlIG1vc3QgZmxleGlibGUgb3V0cHV0IGZvcm1hdCBpbiB0aGF0IGl0 IGFsbG93cyBtYW51YWwKKyAgICAgICAgICAgc2VsZWN0aW9uIGFuZCByZW9yZGVyaW5nIG9mIGFy Y2hpdmVkIGl0ZW1zIGR1cmluZyByZXN0b3JlLiBUaGlzIGZvcm1hdCBpcyBhbHNvCisgICAgICAg ICAgIGNvbXByZXNzZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8 L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICAgPHZhcmxpc3Rl bnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8L2xpdGVyYWw+PC90ZXJtPgorICAgICAg ICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRl bT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgdGFyLWZvcm1hdCBhcmNo aXZlIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSB0YXIgZm9ybWF0IGlz CisgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgZGlyZWN0b3J5IGZvcm1hdDogZXh0cmFj dGluZyBhIHRhci1mb3JtYXQgYXJjaGl2ZSBwcm9kdWNlcyBhIHZhbGlkCisgICAgICAgICAgIGRp cmVjdG9yeS1mb3JtYXQgYXJjaGl2ZS4gSG93ZXZlciwgdGhlIHRhciBmb3JtYXQgZG9lcyBub3Qg c3VwcG9ydCBjb21wcmVzc2lvbi4gQWxzbywKKyAgICAgICAgICAgd2hlbiB1c2luZyB0YXIgZm9y bWF0IHRoZSByZWxhdGl2ZSBvcmRlciBvZiB0YWJsZSBkYXRhIGl0ZW1zIGNhbm5vdCBiZSBjaGFu Z2VkIGR1cmluZyByZXN0b3JlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0 ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDwvdmFyaWFibGVsaXN0Pgor ICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4K IApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgYi9kb2Mvc3Jj L3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCAxOTllYTMzNDVmMy4uNDZiZGJjMDkyYzMg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCkBAIC0xOCw4ICsxOCw5IEBAIFBvc3RncmVTUUwg ZG9jdW1lbnRhdGlvbgogICA8cmVmbmFtZT5wZ19yZXN0b3JlPC9yZWZuYW1lPgogCiAgIDxyZWZw dXJwb3NlPgotICAgcmVzdG9yZSBhIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFt ZT4gZGF0YWJhc2UgZnJvbSBhbgotICAgYXJjaGl2ZSBmaWxlIGNyZWF0ZWQgYnkgPGFwcGxpY2F0 aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPgorICAgcmVzdG9yZSA8cHJvZHVjdG5hbWU+UG9zdGdy ZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4KKyAgIGFyY2hpdmUgZmlsZSBjcmVh dGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3IKKyAgIDxhcHBsaWNh dGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4KICAgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFt ZWRpdj4KIApAQCAtMzcsOSArMzgsMTAgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgIDx0 aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CiAKICAgPHBhcmE+Ci0gICA8YXBwbGljYXRpb24+cGdf cmVzdG9yZTwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0eSBmb3IgcmVzdG9yaW5nIGEKKyAgIDxh cHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciByZXN0 b3JpbmcKICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2Ug ZnJvbSBhbiBhcmNoaXZlCi0gICBjcmVhdGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAi Lz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAorICAgY3JlYXRlZCBieSA8eHJlZiBsaW5r ZW5kPSJhcHAtcGdkdW1wIi8+IG9yCisgICA8eHJlZiBsaW5rZW5kPSJhcHAtcGctZHVtcGFsbCIv PiBpbiBvbmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CiAgICBmb3JtYXRzLiAgSXQgd2lsbCBpc3N1 ZSB0aGUgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHJlY29uc3RydWN0IHRoZQogICAgZGF0YWJhc2Ug dG8gdGhlIHN0YXRlIGl0IHdhcyBpbiBhdCB0aGUgdGltZSBpdCB3YXMgc2F2ZWQuICBUaGUKICAg IGFyY2hpdmUgZmlsZXMgYWxzbyBhbGxvdyA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGlj YXRpb24+IHRvCkBAIC0xNDAsNiArMTQyLDggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAg ICAgICAgIGNvbW1hbmRzIHRoYXQgbWVudGlvbiB0aGlzIGRhdGFiYXNlLgogICAgICAgICBBY2Nl c3MgcHJpdmlsZWdlcyBmb3IgdGhlIGRhdGFiYXNlIGl0c2VsZiBhcmUgYWxzbyByZXN0b3JlZCwK ICAgICAgICAgdW5sZXNzIDxvcHRpb24+LS1uby1hY2w8L29wdGlvbj4gaXMgc3BlY2lmaWVkLgor ICAgICAgICA8b3B0aW9uPi0tY3JlYXRlPC9vcHRpb24+IGlzIHJlcXVpcmVkIHdoZW4gcmVzdG9y aW5nIG11bHRpcGxlIGRhdGFiYXNlcworICAgICAgICBmcm9tIGR1bXAgb2YgPGFwcGxpY2F0aW9u PnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KICAgICAgICA8L3BhcmE+CiAKICAgICAgICA8cGFy YT4KQEAgLTE2Niw2ICsxNzAsMjUgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8 L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U9PHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRG8gbm90IHJlc3RvcmUgZGF0YWJh c2VzIHdob3NlIG5hbWUgbWF0Y2hlcworICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+LgorICAgICAgICBNdWx0aXBsZSBwYXR0ZXJucyBj YW4gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyBtdWx0aXBsZQorICAgICAgICA8b3B0aW9uPi0tZXhj bHVkZS1kYXRhYmFzZTwvb3B0aW9uPiBzd2l0Y2hlcy4gIFRoZQorICAgICAgICA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+IHBhcmFtZXRlciBpcwor ICAgICAgICBpbnRlcnByZXRlZCBhcyBhIHBhdHRlcm4gYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1 bGVzIHVzZWQgYnkKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPidzIDxs aXRlcmFsPlxkPC9saXRlcmFsPgorICAgICAgICBjb21tYW5kcyAoc2VlIDx4cmVmIGxpbmtlbmQ9 ImFwcC1wc3FsLXBhdHRlcm5zIi8+KSwKKyAgICAgICAgc28gbXVsdGlwbGUgZGF0YWJhc2VzIGNh biBhbHNvIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgd2lsZGNhcmQKKyAgICAgICAgY2hhcmFjdGVy cyBpbiB0aGUgcGF0dGVybi4gIFdoZW4gdXNpbmcgd2lsZGNhcmRzLCBiZSBjYXJlZnVsIHRvCisg ICAgICAgIHF1b3RlIHRoZSBwYXR0ZXJuIGlmIG5lZWRlZCB0byBwcmV2ZW50IHNoZWxsIHdpbGRj YXJkIGV4cGFuc2lvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8 L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlv bj4tZTwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGl0LW9uLWVycm9y PC9vcHRpb24+PC90ZXJtPgpAQCAtMzE1LDYgKzMzOCwxNiBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50 YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJtPgorICAg ICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxs aXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVzdG9yZSBvbmx5IGdsb2JhbCBvYmpl Y3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCisgICAgICAgPC9wYXJh PgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxp c3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48 b3B0aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBs YWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvbWVz b24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXggZDVmODA1ZmI1MTEu LmRjMWVkNDEwODM4IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCkBAIC0xNiw2ICsxNiw3IEBAIHBnX2R1bXBf Y29tbW9uX3NvdXJjZXMgPSBmaWxlcygKICAgJ3BnX2JhY2t1cF9udWxsLmMnLAogICAncGdfYmFj a3VwX3Rhci5jJywKICAgJ3BnX2JhY2t1cF91dGlscy5jJywKKyAgJ2Nvbm5lY3RkYi5jJywKICkK IAogcGdfZHVtcF9jb21tb24gPSBzdGF0aWNfbGlicmFyeSgnbGlicGdkdW1wX2NvbW1vbicsCkBA IC0zMCw3ICszMSw2IEBAIHBnX2R1bXBfc291cmNlcyA9IGZpbGVzKAogICAnY29tbW9uLmMnLAog ICAncGdfZHVtcC5jJywKICAgJ3BnX2R1bXBfc29ydC5jJywKLSAgJ2Nvbm5lY3RkYi5jJywKICkK IAogaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCkBAIC03MCw2ICs3MCw3IEBAIGJpbl90YXJn ZXRzICs9IHBnX2R1bXBhbGwKIAogcGdfcmVzdG9yZV9zb3VyY2VzID0gZmlsZXMoCiAgICdwZ19y ZXN0b3JlLmMnLAorICAnY29ubmVjdGRiLmMnLAogKQogCiBpZiBob3N0X3N5c3RlbSA9PSAnd2lu ZG93cycKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jIGIvc3JjL2Jpbi9w Z19kdW1wL3BhcmFsbGVsLmMKaW5kZXggMDg2YWRjZGM1MDIuLmEzNmQyYTViZjg0IDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGFy YWxsZWwuYwpAQCAtMzI2LDExICszMjYsMTggQEAgZ2V0VGhyZWFkTG9jYWxQUUV4cEJ1ZmZlcih2 b2lkKQogICogcGdfZHVtcCBhbmQgcGdfcmVzdG9yZSBjYWxsIHRoaXMgdG8gcmVnaXN0ZXIgdGhl IGNsZWFudXAgaGFuZGxlcgogICogYXMgc29vbiBhcyB0aGV5J3ZlIGNyZWF0ZWQgdGhlIEFyY2hp dmVIYW5kbGUuCiAgKi8KLXZvaWQKK2ludAogb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUg KkFIWCkKIHsKIAlzaHV0ZG93bl9pbmZvLkFIWCA9IEFIWDsKLQlvbl9leGl0X25pY2VseShhcmNo aXZlX2Nsb3NlX2Nvbm5lY3Rpb24sICZzaHV0ZG93bl9pbmZvKTsKKwlyZXR1cm4gb25fZXhpdF9u aWNlbHkoYXJjaGl2ZV9jbG9zZV9jb25uZWN0aW9uLCAmc2h1dGRvd25faW5mbyk7Cit9CisKK3Zv aWQKK3JlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCwgaW50IGlkeCkK K3sKKwlzaHV0ZG93bl9pbmZvLkFIWCA9IEFIWDsKKwlzZXRfb25fZXhpdF9uaWNlbHlfZW50cnko YXJjaGl2ZV9jbG9zZV9jb25uZWN0aW9uLCAmc2h1dGRvd25faW5mbywgaWR4KTsKIH0KIAogLyoK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXAuaAppbmRleCA3MzFjYjJkMTlmYi4uNDFlZTMwNTg1MGEgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwLmgKQEAgLTMwOSw3ICszMDksNyBAQCBleHRlcm4gdm9pZCBTZXRBcmNoaXZlT3B0aW9ucyhB cmNoaXZlICpBSCwgRHVtcE9wdGlvbnMgKmRvcHQsIFJlc3RvcmVPcHRpb25zICpybwogCiBleHRl cm4gdm9pZCBQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCk7CiAKLWV4 dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBSZXN0 b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEpOwogCiAvKiBPcGVuIGFu IGV4aXN0aW5nIGFyY2hpdmUgKi8KIGV4dGVybiBBcmNoaXZlICpPcGVuQXJjaGl2ZShjb25zdCBj aGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQpOwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9hcmNoaXZlci5jCmluZGV4IDEyZjNmMzllMzliLi5hZDJhNjJhMmM5YyAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtODUsNyArODUsNyBAQCBzdGF0aWMgaW50CVJl c3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcF9sb19idWYo QXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChBcmNoaXZlSGFu ZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsKIHN0YXRpYyB2b2lkIFNldE91 dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJCSAgY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKwkJCWNvbnN0 IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywgYm9vbCBhcHBlbmRf ZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5k bGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENv bXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwogCkBAIC0zMzYsOSArMzM2LDE0IEBAIFBy b2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKQogCQlTdHJpY3ROYW1lc0No ZWNrKHJvcHQpOwogfQogCi0vKiBQdWJsaWMgKi8KKy8qCisgKiBSZXN0b3JlQXJjaGl2ZQorICoK KyAqIElmIGFwcGVuZF9kYXRhIGlzIHNldCwgdGhlbiBhcHBlbmQgZGF0YSBpbnRvIGZpbGUgYXMg d2UgYXJlIHJlc3RvcmluZyBkdW1wCisgKiBvZiBtdWx0aXBsZSBkYXRhYmFzZXMgd2hpY2ggd2Fz IHRha2VuIGJ5IHBnX2R1bXBhbGwuCisgKi8KIHZvaWQKLVJlc3RvcmVBcmNoaXZlKEFyY2hpdmUg KkFIWCkKK1Jlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSkKIHsK IAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKIAlSZXN0b3JlT3B0 aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKQEAgLTQ1NSw3ICs0NjAsNyBAQCBSZXN0b3Jl QXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJICovCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYg KHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBH X0NPTVBSRVNTSU9OX05PTkUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQt PmNvbXByZXNzaW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0 LT5jb21wcmVzc2lvbl9zcGVjLCBhcHBlbmRfZGF0YSk7CiAKIAlhaHByaW50ZihBSCwgIi0tXG4t LSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0tXG5cbiIpOwogCkBAIC0xMjkxLDcgKzEyOTYs NyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCiAJc2F2ID0gU2F2ZU91dHB1dChB SCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1l LCBvdXRfY29tcHJlc3Npb25fc3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUs IG91dF9jb21wcmVzc2lvbl9zcGVjLCBmYWxzZSk7CiAKIAlpZiAoc3RyZnRpbWUoc3RhbXBfc3Ry LCBzaXplb2Yoc3RhbXBfc3RyKSwgUEdEVU1QX1NUUkZUSU1FX0ZNVCwKIAkJCQkgbG9jYWx0aW1l KCZBSC0+Y3JlYXRlRGF0ZSkpID09IDApCkBAIC0xNjcwLDcgKzE2NzUsOCBAQCBhcmNocHJpbnRm KEFyY2hpdmUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4uKQogCiBzdGF0aWMgdm9pZAogU2V0T3V0 cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJICBjb25zdCBw Z19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCisJCSAgY29uc3QgcGdf Y29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAorCQkgIGJvb2wgYXBwZW5k X2RhdGEpCiB7CiAJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJY29uc3QgY2hhciAqbW9kZTsK QEAgLTE2OTAsNyArMTY5Niw3IEBAIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qg Y2hhciAqZmlsZW5hbWUsCiAJZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQpOwogCi0JaWYgKEFI LT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQorCWlmIChhcHBlbmRfZGF0YSB8fCBBSC0+bW9kZSA9 PSBhcmNoTW9kZUFwcGVuZCkKIAkJbW9kZSA9IFBHX0JJTkFSWV9BOwogCWVsc2UKIAkJbW9kZSA9 IFBHX0JJTkFSWV9XOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IGEyMDY0 ZjQ3MWVkLi5hZTQzMzEzMjQzNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApA QCAtMzg1LDcgKzM4NSw4IEBAIHN0cnVjdCBfdG9jRW50cnkKIH07CiAKIGV4dGVybiBpbnQJcGFy YWxsZWxfcmVzdG9yZShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKTsKLWV4dGVybiB2 b2lkIG9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIGludCBvbl9l eGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIHJlcGxhY2Vfb25f ZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCwgaW50IGlkeCk7CiAKIGV4dGVybiB2b2lk IHdhcm5fb3JfZXhpdF9ob3JyaWJseShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZm10 LC4uLikgcGdfYXR0cmlidXRlX3ByaW50ZigyLCAzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMK aW5kZXggYjViYTNiNDZkZDkuLmQ5NGQwZGUyYTVkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX3Rhci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMK QEAgLTgyNiw3ICs4MjYsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlz YXZWZXJib3NlID0gQUgtPnB1YmxpYy52ZXJib3NlOwogCQlBSC0+cHVibGljLnZlcmJvc2UgPSAw OwogCi0JCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUo KEFyY2hpdmUgKikgQUgsIGZhbHNlKTsKIAogCQlTZXRBcmNoaXZlT3B0aW9ucygoQXJjaGl2ZSAq KSBBSCwgc2F2RG9wdCwgc2F2Um9wdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfdXRpbHMuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYwppbmRl eCA3OWFlYzVmNTE1OC4uNTllY2UyOTk5YTggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfdXRpbHMuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMK QEAgLTYxLDE0ICs2MSwyNiBAQCBzZXRfZHVtcF9zZWN0aW9uKGNvbnN0IGNoYXIgKmFyZywgaW50 ICpkdW1wU2VjdGlvbnMpCiAKIAogLyogUmVnaXN0ZXIgYSBjYWxsYmFjayB0byBiZSBydW4gd2hl biBleGl0X25pY2VseSBpcyBpbnZva2VkLiAqLwotdm9pZAoraW50CiBvbl9leGl0X25pY2VseShv bl9leGl0X25pY2VseV9jYWxsYmFjayBmdW5jdGlvbiwgdm9pZCAqYXJnKQogewotCWlmIChvbl9l eGl0X25pY2VseV9pbmRleCA+PSBNQVhfT05fRVhJVF9OSUNFTFkpCi0JCXBnX2ZhdGFsKCJvdXQg b2Ygb25fZXhpdF9uaWNlbHkgc2xvdHMiKTsKLQlvbl9leGl0X25pY2VseV9saXN0W29uX2V4aXRf bmljZWx5X2luZGV4XS5mdW5jdGlvbiA9IGZ1bmN0aW9uOwotCW9uX2V4aXRfbmljZWx5X2xpc3Rb b25fZXhpdF9uaWNlbHlfaW5kZXhdLmFyZyA9IGFyZzsKKwlzZXRfb25fZXhpdF9uaWNlbHlfZW50 cnkoZnVuY3Rpb24sIGFyZywgb25fZXhpdF9uaWNlbHlfaW5kZXgpOwogCW9uX2V4aXRfbmljZWx5 X2luZGV4Kys7CisKKwlyZXR1cm4gKG9uX2V4aXRfbmljZWx5X2luZGV4IC0gMSk7Cit9CisKK3Zv aWQKK3NldF9vbl9leGl0X25pY2VseV9lbnRyeShvbl9leGl0X25pY2VseV9jYWxsYmFjayBmdW5j dGlvbiwgdm9pZCAqYXJnLCBpbnQgaSkKK3sKKwlpZiAoaSA+PSBNQVhfT05fRVhJVF9OSUNFTFkp CisJCXBnX2ZhdGFsKCJvdXQgb2Ygb25fZXhpdF9uaWNlbHkgc2xvdHMiKTsKKworCWlmIChpID4g b25fZXhpdF9uaWNlbHlfaW5kZXgpCisJCXBnX2ZhdGFsKCJubyBlbnRyeSBleGlzdHMgb24gJWQg aW5kZXggaW50byBvbl9leGl0X25pY2VseSBzbG90cyIsIGkpOworCisJb25fZXhpdF9uaWNlbHlf bGlzdFtpXS5mdW5jdGlvbiA9IGZ1bmN0aW9uOworCW9uX2V4aXRfbmljZWx5X2xpc3RbaV0uYXJn ID0gYXJnOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91 dGlscy5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5oCmluZGV4IDM4NTUxOTQ0 NTEzLi41N2YzMTk3ZjEwMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91 dGlscy5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuaApAQCAtMjgsNyAr MjgsOCBAQCB0eXBlZGVmIHZvaWQgKCpvbl9leGl0X25pY2VseV9jYWxsYmFjaykgKGludCBjb2Rl LCB2b2lkICphcmcpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2duYW1lOwogCiBleHRlcm4gdm9p ZCBzZXRfZHVtcF9zZWN0aW9uKGNvbnN0IGNoYXIgKmFyZywgaW50ICpkdW1wU2VjdGlvbnMpOwot ZXh0ZXJuIHZvaWQgb25fZXhpdF9uaWNlbHkob25fZXhpdF9uaWNlbHlfY2FsbGJhY2sgZnVuY3Rp b24sIHZvaWQgKmFyZyk7CitleHRlcm4gaW50IG9uX2V4aXRfbmljZWx5KG9uX2V4aXRfbmljZWx5 X2NhbGxiYWNrIGZ1bmN0aW9uLCB2b2lkICphcmcpOworZXh0ZXJuIHZvaWQgc2V0X29uX2V4aXRf bmljZWx5X2VudHJ5KG9uX2V4aXRfbmljZWx5X2NhbGxiYWNrIGZ1bmN0aW9uLCB2b2lkICphcmcs IGludCBpZHgpOwogZXh0ZXJuIHZvaWQgZXhpdF9uaWNlbHkoaW50IGNvZGUpIHBnX2F0dHJpYnV0 ZV9ub3JldHVybigpOwogCiAvKiBJbiBwZ19kdW1wLCB3ZSBtb2RpZnkgcGdfZmF0YWwgdG8gY2Fs bCBleGl0X25pY2VseSBpbnN0ZWFkIG9mIGV4aXQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDZiYjU0YzFh MmI0Li41YjZkNDM2NGViMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwor KysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0xMTg2LDcgKzExODYsNyBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiByaWdodCBub3cuCiAJICovCiAJaWYgKHBsYWlu VGV4dCkKLQkJUmVzdG9yZUFyY2hpdmUoZm91dCk7CisJCVJlc3RvcmVBcmNoaXZlKGZvdXQsIGZh bHNlKTsKIAogCUNsb3NlQXJjaGl2ZShmb3V0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggZTdl NDkyYWZhMjguLmVlN2M2MmRhMDlkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cGFsbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTE1LDYgKzE1LDcg QEAKIAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgog I2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIApAQCAtNjQsOSArNjUsMTAg QEAgc3RhdGljIHZvaWQgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9p ZCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGRyb3BEQnMoUEdj b25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqdXNlcm5hbWUpOwotc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNv bm4pOworc3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3Jt YXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChjb25zdCBjaGFy ICptc2cpOwotc3RhdGljIGludAlydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBj aGFyICpjcmVhdGVfb3B0cyk7CitzdGF0aWMgaW50CXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5h bWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLAorCQljaGFyICpkYmZpbGUsIEFyY2hpdmVGb3Jt YXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4g KmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAog CQkJCQkJCSBjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpvYmpuYW1lLApAQCAtNzUs NiArNzcsOCBAQCBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQR2Nvbm4gKmNvbm4sIGNvbnN0 IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25u ICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJICAgU2ltcGxlU3Ry aW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3Qg Y2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pOworc3RhdGljIHZvaWQg Y3JlYXRlX29yX29wZW5fZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpOworc3RhdGljIEFyY2hpdmVG b3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7CiAKIHN0YXRpYyBjaGFy IHBnX2R1bXBfYmluW01BWFBHUEFUSF07CiBjb25zdCBjaGFyICpwcm9nbmFtZTsKQEAgLTEwNCw3 ICsxMDgsNyBAQCBzdGF0aWMgaW50CW5vX3N1YnNjcmlwdGlvbnMgPSAwOwogc3RhdGljIGludAlu b190b2FzdF9jb21wcmVzc2lvbiA9IDA7CiBzdGF0aWMgaW50CW5vX3VubG9nZ2VkX3RhYmxlX2Rh dGEgPSAwOwogc3RhdGljIGludAlub19yb2xlX3Bhc3N3b3JkcyA9IDA7Ci1zdGF0aWMgaW50CXNl cnZlcl92ZXJzaW9uOworc3RhdGljIGludCBzZXJ2ZXJfdmVyc2lvbjsKIHN0YXRpYyBpbnQJbG9h ZF92aWFfcGFydGl0aW9uX3Jvb3QgPSAwOwogc3RhdGljIGludAlvbl9jb25mbGljdF9kb19ub3Ro aW5nID0gMDsKIHN0YXRpYyBpbnQJc3RhdGlzdGljc19vbmx5ID0gMDsKQEAgLTE0Myw2ICsxNDcs NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1 bWVudCwgTlVMTCwgJ1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEws ICd4J30sCiAJCXsibm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0 IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxv d2luZyBvcHRpb25zIGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVy CkBAIC0xODgsNiArMTkzLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJ ICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFy ICpkdW1wZW5jb2RpbmcgPSBOVUxMOworCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBh cmNoTnVsbDsKKwljb25zdCBjaGFyICpmb3JtYXROYW1lID0gInAiOwogCXRyaXZhbHVlCXByb21w dF9wYXNzd29yZCA9IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJv b2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOwpAQCAtMjM3LDcgKzI0NCw3IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwog Ci0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpy c1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUgKChj ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4 IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJ ewpAQCAtMjY1LDcgKzI3Miw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNoZWxs U3RyaW5nKHBnZHVtcG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJY2FzZSAnRic6 CisJCQkJZm9ybWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJY2Fz ZSAnZyc6CiAJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTQxNCw2ICs0 MjMsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlleGl0X25pY2VseSgxKTsK IAl9CiAKKwkvKiBHZXQgZm9ybWF0IGZvciBkdW1wLiAqLworCWFyY2hEdW1wRm9ybWF0ID0gcGFy c2VEdW1wRm9ybWF0KGZvcm1hdE5hbWUpOworCisJLyoKKwkgKiBJZiBub24tcGxhaW4gZm9ybWF0 IGlzIHNwZWNpZmllZCB0aGVuIHdlIG11c3QgcHJvdmlkZSB0aGUKKwkgKiBmaWxlIG5hbWUgdG8g Y3JlYXRlIG9uZSBtYWluIGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0g YXJjaE51bGwgJiYKKwkJCSghZmlsZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikgPT0gMCkp CisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbnMgLUYvLS1mb3JtYXQ9ZHxjfHQgcmVxdWlyZXMg b3B0aW9uIC1mLy0tZmlsZSB3aXRoIG5vbi1lbXB0eSBzdHJpbmciKTsKKwkJcGdfbG9nX2Vycm9y X2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1l KTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCiAJLyoKIAkgKiBJZiBwYXNzd29yZCB2YWx1ZXMg YXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVtcCwgc3dpdGNoIHRvIHVzaW5nCiAJICogcGdfcm9s ZXMgd2hpY2ggaXMgZXF1YWxseSB1c2VmdWwsIGp1c3QgbW9yZSBsaWtlbHkgdG8gaGF2ZSB1bnJl c3RyaWN0ZWQKQEAgLTQ2OCw2ICs0OTIsMzMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQogCWlmIChzdGF0aXN0aWNzX29ubHkpCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9w dHMsICIgLS1zdGF0aXN0aWNzLW9ubHkiKTsKIAorCS8qCisJICogT3BlbiB0aGUgb3V0cHV0IGZp bGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0LiAgSWYgcmVxdWlyZWQsCisJICog dGhlbiBjcmVhdGUgbmV3IGRpcmVjdG9yeSBhbmQgZ2xvYmFsLmRhdCBmaWxlLgorCSAqLworCWlm IChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCWNoYXIJdG9jX3BhdGhbTUFYUEdQ QVRIXTsKKworCQkvKiBDcmVhdGUgbmV3IGRpcmVjdG9yeSBvciBhY2NlcHQgdGhlIGVtcHR5IGV4 aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJY3JlYXRlX29yX29wZW5fZGlyKGZpbGVuYW1lKTsKKwor CQlzbnByaW50Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGZpbGVuYW1l KTsKKworCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwgUEdfQklOQVJZX1cpOworCQlpZiAoIU9QRikK KwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBnbG9iYWwuZGF0IGZpbGU6ICVzIiwgc3RyZXJy b3IoZXJybm8pKTsKKwl9CisJZWxzZSBpZiAoZmlsZW5hbWUpCisJeworCQlPUEYgPSBmb3Blbihm aWxlbmFtZSwgUEdfQklOQVJZX1cpOworCQlpZiAoIU9QRikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJIGZpbGVuYW1lKTsKKwl9CisJ ZWxzZQorCQlPUEYgPSBzdGRvdXQ7CisKIAkvKgogCSAqIElmIHRoZXJlIHdhcyBhIGRhdGFiYXNl IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB1c2UgdGhhdCwKIAkgKiBvdGhlcndpc2Ug dHJ5IHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgInBvc3RncmVzIiwgYW5kIGZhaWxpbmcgdGhhdApA QCAtNTA3LDE5ICs1NTgsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhwYW5k X2RibmFtZV9wYXR0ZXJucyhjb25uLCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJCQkJ CSAgICZkYXRhYmFzZV9leGNsdWRlX25hbWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0cHV0 IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZpbGVu YW1lKQotCXsKLQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYgKCFP UEYpCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIs Ci0JCQkJCSBmaWxlbmFtZSk7Ci0JfQotCWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJLyoKIAkg KiBTZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC02MTksNyAr NjU3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0KIAogCWlmICghZ2xvYmFs c19vbmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQotCQlkdW1wRGF0YWJh c2VzKGNvbm4pOworCQlkdW1wRGF0YWJhc2VzKGNvbm4sIGFyY2hEdW1wRm9ybWF0KTsKIAogCVBR ZmluaXNoKGNvbm4pOwogCkBAIC02MzIsNyArNjcwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCQlmY2xvc2UoT1BGKTsKIAogCQkvKiBzeW5jIHRoZSByZXN1bHRpbmcgZmlsZSwg ZXJyb3JzIGFyZSBub3QgZmF0YWwgKi8KLQkJaWYgKGRvc3luYykKKwkJaWYgKGRvc3luYyAmJiAo YXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQogCQkJKHZvaWQpIGZzeW5jX2ZuYW1lKGZpbGVu YW1lLCBmYWxzZSk7CiAJfQogCkBAIC02NDMsMTIgKzY4MSwxNCBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiBzdGF0aWMgdm9pZAogaGVscCh2b2lkKQogewotCXByaW50ZihfKCIlcyBl eHRyYWN0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBpbnRvIGFuIFNRTCBzY3JpcHQg ZmlsZS5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgZXh0cmFjdHMgYSBQb3N0Z3Jl U1FMIGRhdGFiYXNlIGNsdXN0ZXIgYmFzZWQgb24gc3BlY2lmaWVkIGR1bXAgZm9ybWF0LlxuXG4i KSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBb T1BUSU9OXS4uLlxuIiksIHByb2duYW1lKTsKIAogCXByaW50ZihfKCJcbkdlbmVyYWwgb3B0aW9u czpcbiIpKTsKIAlwcmludGYoXygiICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAgIG91dHB1 dCBmaWxlIG5hbWVcbiIpKTsKKwlwcmludGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8cCAgICAg ICAgIG91dHB1dCBmaWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIKKwkJCSAi ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgKGRlZmF1bHQpKVxuIikp OwogCXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgdmVyYm9zZSBtb2Rl XG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgICBvdXRwdXQg dmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1sb2Nr LXdhaXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRpbmcgVElNRU9VVCBmb3IgYSB0 YWJsZSBsb2NrXG4iKSk7CkBAIC0xNTUxLDEwICsxNTkxLDEzIEBAIGV4cGFuZF9kYm5hbWVfcGF0 dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBvZiBkYXRhYmFzZXMuCiAgKi8K IHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKK2R1bXBEYXRhYmFzZXMo UEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBHcmVzdWx0 ICAgKnJlczsKIAlpbnQJCQlpOworCWNoYXIJCWRiX3N1YmRpcltNQVhQR1BBVEhdOworCWNoYXIJ CWRiZmlsZXBhdGhbTUFYUEdQQVRIXTsKKwlGSUxFICAgICAgICptYXBfZmlsZSA9IE5VTEw7CiAK IAkvKgogCSAqIFNraXAgZGF0YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBzaW5jZSB3 ZSdkIGJlIHVuYWJsZSB0byBjb25uZWN0CkBAIC0xNTY4LDcgKzE2MTEsNyBAQCBkdW1wRGF0YWJh c2VzKFBHY29ubiAqY29ubikKIAkgKiBkb2Vzbid0IGhhdmUgc29tZSBmYWlsdXJlIG1vZGUgd2l0 aCAtLWNsZWFuLgogCSAqLwogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLAotCQkJCQkgICAiU0VM RUNUIGRhdG5hbWUgIgorCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUsIG9pZCAiCiAJCQkJCSAgICJG Uk9NIHBnX2RhdGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBkYXRj b25ubGltaXQgIT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3RlbXBsYXRl MScpLCBkYXRuYW1lIik7CkBAIC0xNTc2LDkgKzE2MTksMzMgQEAgZHVtcERhdGFiYXNlcyhQR2Nv bm4gKmNvbm4pCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKIAkJZnByaW50ZihPUEYsICItLVxu LS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKIAorCS8qCisJICogSWYgZGlyZWN0b3J5L3Rhci9jdXN0 b20gZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeQorCSAqIHVu ZGVyIHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRhYmFzZSBkdW1wIGZpbGUgc3ViZGly ZWN0b3J5IHdpbGwKKwkgKiBiZSBjcmVhdGVkIHVuZGVyIHRoZSBzdWJkaXJlY3RvcnkgaW4gYXJj aGl2ZSBtb2RlIGFzIHBlciBzaW5nbGUgZGIgcGdfZHVtcC4KKwkgKi8KKwlpZiAoYXJjaER1bXBG b3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsK KworCQlzbnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVu YW1lKTsKKworCQkvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1l IHVuZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCQlpZiAobWtkaXIoZGJfc3ViZGlyLCAwNzU1KSAh PSAwKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgc3ViZGlyZWN0b3J5IFwiJXNcIjog JW0iLCBkYl9zdWJkaXIpOworCisJCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwg IiVzL21hcC5kYXQiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgbWFwIGZpbGUgKHRvIHN0 b3JlIGRib2lkIGFuZCBkYm5hbWUpICovCisJCW1hcF9maWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0 aCwgUEdfQklOQVJZX1cpOworCQlpZiAoIW1hcF9maWxlKQorCQkJcGdfZmF0YWwoImNvdWxkIG5v dCBvcGVuIG1hcCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCiAJZm9yIChpID0g MDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpkYm5hbWUgPSBQUWdl dHZhbHVlKHJlcywgaSwgMCk7CisJCWNoYXIJICAgKm9pZCA9IFBRZ2V0dmFsdWUocmVzLCBpLCAx KTsKIAkJY29uc3QgY2hhciAqY3JlYXRlX29wdHM7CiAJCWludAkJCXJldDsKIApAQCAtMTU5Myw2 ICsxNjYwLDE4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQkJY29udGludWU7CiAJ CX0KIAorCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vbi1wbGFpbiBkdW1wIGZvcm1hdCwgdGhlbiBh cHBlbmQgZGJvaWQgYW5kIGRibmFtZSB0bworCQkgKiB0aGUgbWFwLmRhdCBmaWxlLgorCQkgKi8K KwkJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQl7CisJCQlzbnByaW50ZihkYmZp bGVwYXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiIiwgZGJfc3ViZGlyLCBvaWQpOworCisJ CQkvKiBQdXQgb25lIGxpbmUgZW50cnkgZm9yIGRib2lkIGFuZCBkYm5hbWUgaW4gbWFwIGZpbGUu ICovCisJCQlmcHJpbnRmKG1hcF9maWxlLCAiJXMgJXNcbiIsIG9pZCwgcGdfc3RyZHVwKGRibmFt ZSkpOworCQl9CisKIAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJu YW1lKTsKIAogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1c blxuIiwgZGJuYW1lKTsKQEAgLTE2MTEsOSArMTY5MCwxNyBAQCBkdW1wRGF0YWJhc2VzKFBHY29u biAqY29ubikKIAkJCQljcmVhdGVfb3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKIAkJCWVsc2UK IAkJCXsKLQkJCQljcmVhdGVfb3B0cyA9ICIiOwogCQkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3Qg ZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KLQkJCQlmcHJpbnRmKE9QRiwgIlxc Y29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNo TnVsbCkKKwkJCQl7CisJCQkJCWNyZWF0ZV9vcHRzID0gIiI7CisJCQkJCWZwcmludGYoT1BGLCAi XFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJ CS8qIER1bXBpbmcgYWxsIGRhdGFiYXNlcyBzbyBhZGQgLS1jcmVhdGUgb3B0aW9uLiAqLworCQkJ CQljcmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7CisJCQkJfQogCQkJfQogCQl9CiAJCWVsc2UKQEAg LTE2MjIsMTkgKzE3MDksMzAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCWlmIChm aWxlbmFtZSkKIAkJCWZjbG9zZShPUEYpOwogCi0JCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNy ZWF0ZV9vcHRzKTsKKwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMsIGRiZmls ZXBhdGgsIGFyY2hEdW1wRm9ybWF0KTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcGdfZmF0YWwoInBn X2R1bXAgZmFpbGVkIG9uIGRhdGFiYXNlIFwiJXNcIiwgZXhpdGluZyIsIGRibmFtZSk7CiAKIAkJ aWYgKGZpbGVuYW1lKQogCQl7Ci0JCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX0Ep OworCQkJY2hhcgl0b2NfcGF0aFtNQVhQR1BBVEhdOworCisJCQlpZiAoYXJjaER1bXBGb3JtYXQg IT0gYXJjaE51bGwpCisJCQkJc25wcmludGYodG9jX3BhdGgsIE1BWFBHUEFUSCwgIiVzL2dsb2Jh bC5kYXQiLCBmaWxlbmFtZSk7CisJCQllbHNlCisJCQkJc25wcmludGYodG9jX3BhdGgsIE1BWFBH UEFUSCwgIiVzIiwgZmlsZW5hbWUpOworCisJCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwgUEdfQklO QVJZX0EpOwogCQkJaWYgKCFPUEYpCiAJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZS1vcGVuIHRo ZSBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCSBmaWxlbmFtZSk7CisJCQkJCQkgdG9j X3BhdGgpOwogCQl9CiAJfQogCisJLyogQ2xvc2UgbWFwIGZpbGUgKi8KKwlpZiAoYXJjaER1bXBG b3JtYXQgIT0gYXJjaE51bGwpCisJCWZjbG9zZShtYXBfZmlsZSk7CisKIAlQUWNsZWFyKHJlcyk7 CiB9CiAKQEAgLTE2NDQsNyArMTc0Miw4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQog ICogUnVuIHBnX2R1bXAgb24gZGJuYW1lLCB3aXRoIHNwZWNpZmllZCBvcHRpb25zLgogICovCiBz dGF0aWMgaW50Ci1ydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVh dGVfb3B0cykKK3J1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0 ZV9vcHRzLCBjaGFyICpkYmZpbGUsCisJCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiB7 CiAJUFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBCdWZmZXJEYXRhIGNtZDsKQEAg LTE2NTMsMTcgKzE3NTIsMzYgQEAgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3Qg Y2hhciAqY3JlYXRlX29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25uc3RyYnVmKTsKIAlpbml0 UFFFeHBCdWZmZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVz ICVzIiwgcGdfZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMp OwotCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVk IHBsYWluLWFwcGVuZCBwZ19kdW1wCi0JICogZm9ybWF0LgorCSAqIElmIHRoaXMgaXMgbm9uLXBs YWluIGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUgYW5kIGR1bXAKKwkgKiBmb3Jt YXQgdG8gdGhlIHBnX2R1bXAgY29tbWFuZCB0byBnZXQgYXJjaGl2ZSBkdW1wLgogCSAqLwotCWlm IChmaWxlbmFtZSkKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJaWYg KGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNt ZCwgIlwiJXNcIiAtZiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBkYmZpbGUsIGNyZWF0 ZV9vcHRzKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERpcmVjdG9yeSkKKwkJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWRpcmVjdG9yeSAiKTsKKwkJZWxz ZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZjbWQsICIgIC0tZm9ybWF0PWN1c3RvbSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3Jt YXQgPT0gYXJjaFRhcikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0 PXRhciAiKTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAi KTsKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1w X2JpbiwKKwkJCQkJCXBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKKworCQkvKgorCQkq IElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5k IHBnX2R1bXAKKwkJKiBmb3JtYXQuCisJCSovCisJCWlmIChmaWxlbmFtZSkKKwkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCQllbHNlCisJCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY21kLCAiIC1GcCAiKTsKKwl9CiAKIAkvKgogCSAqIEFwcGVuZCB0aGUgZGF0YWJhc2Ug bmFtZSB0byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3RlZCBzdGVtIG9mIGNvbm5lY3Rpb24KQEAgLTE4 MDgsMyArMTkyNiw5MSBAQCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFt ZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybikKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwog fQorCisvKgorICogY3JlYXRlX29yX29wZW5fZGlyCisgKgorICogVGhpcyB3aWxsIGNyZWF0ZSBh IG5ldyBkaXJlY3Rvcnkgd2l0aCBnaXZlbiBuYW1lLiAgSWYgdGhlcmUgaXMgYWxyZWFkeSBzYW1l CisgKiBlbXB0eSBkaXJlY3RvcnkgZXhpc3QsIHRoZW4gdXNlIGl0LgorICovCitzdGF0aWMgdm9p ZAorY3JlYXRlX29yX29wZW5fZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisJc3RydWN0IHN0 YXQJCXN0OworCWJvb2wJCQlpc19lbXB0eSA9IGZhbHNlOworCisJLyogd2UgYWNjZXB0IGFuIGVt cHR5IGV4aXN0aW5nIGRpcmVjdG9yeSAqLworCWlmIChzdGF0KGRpcm5hbWUsICZzdCkgPT0gMCAm JiBTX0lTRElSKHN0LnN0X21vZGUpKQorCXsKKwkJRElSCQkqZGlyID0gb3BlbmRpcihkaXJuYW1l KTsKKworCQlpZiAoZGlyKQorCQl7CisJCQlzdHJ1Y3QgZGlyZW50CSpkOworCisJCQlpc19lbXB0 eSA9IHRydWU7CisKKwkJCXdoaWxlIChlcnJubyA9IDAsIChkID0gcmVhZGRpcihkaXIpKSkKKwkJ CXsKKwkJCQlpZiAoc3RyY21wKGQtPmRfbmFtZSwgIi4iKSAhPSAwICYmIHN0cmNtcChkLT5kX25h bWUsICIuLiIpICE9IDApCisJCQkJeworCQkJCQlpc19lbXB0eSA9IGZhbHNlOworCQkJCQlicmVh azsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChlcnJubykKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90 IHJlYWQgZGlyZWN0b3J5IFwiJXNcIjogJW0iLAorCQkJCQkJZGlybmFtZSk7CisKKwkJCWlmIChj bG9zZWRpcihkaXIpKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgZGlyZWN0b3J5IFwi JXNcIjogJW0iLAorCQkJCQkJZGlybmFtZSk7CisJCX0KKworCQlpZighaXNfZW1wdHkpCisJCXsK KwkJCXBnX2xvZ19lcnJvcigiZGlyZWN0b3J5IFwiJXNcIiBleGlzdHMgYnV0IGlzIG5vdCBlbXB0 eSIsIGRpcm5hbWUpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIklmIHlvdSB3YW50IHRvIGR1bXAg ZGF0YSBvbiB0aGlzIGRpcmVjdG9yeSwgZWl0aGVyIHJlbW92ZSBvciBlbXB0eSAiCisJCQkJCQkJ ICAidGhpcyBkaXJlY3RvcnkgXCIlc1wiIG9yIHJ1biAlcyAiCisJCQkJCQkJICAid2l0aCBhbiBh cmd1bWVudCBvdGhlciB0aGFuIFwiJXNcIi4iLAorCQkJCQkJCSAgZGlybmFtZSwgcHJvZ25hbWUs IGRpcm5hbWUpOworCQkJZXhpdF9uaWNlbHkoMSk7CisJCX0KKwl9CisJZWxzZSBpZiAobWtkaXIo ZGlybmFtZSwgMDcwMCkgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rv cnkgXCIlc1wiOiAlbSIsIGRpcm5hbWUpOworfQorCisvKgorICogcGFyc2VEdW1wRm9ybWF0Cisg KgorICogVGhpcyB3aWxsIHZhbGlkYXRlIGR1bXAgZm9ybWF0cy4KKyAqLworc3RhdGljIEFyY2hp dmVGb3JtYXQKK3BhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJQXJjaGl2 ZUZvcm1hdAlhcmNoRHVtcEZvcm1hdDsKKworCWlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImMi KSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3Ry Y2FzZWNtcChmb3JtYXQsICJjdXN0b20iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hD dXN0b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkIikgPT0gMCkKKwkJYXJj aER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9y bWF0LCAiZGlyZWN0b3J5IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5 OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicCIpID09IDApCisJCWFyY2hEdW1w Rm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwbGFp biIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3Ry Y2FzZWNtcChmb3JtYXQsICJ0IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOwor CWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidGFyIikgPT0gMCkKKwkJYXJjaER1bXBG b3JtYXQgPSBhcmNoVGFyOworCWVsc2UKKwkJcGdfZmF0YWwoInVucmVjb2duaXplZCBhcmNoaXZl IGZvcm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9yIFwi dFwiIiwKKwkJCQlmb3JtYXQpOworCisJcmV0dXJuIGFyY2hEdW1wRm9ybWF0OworfQpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19y ZXN0b3JlLmMKaW5kZXggMTNlNGRjNTA3ZTAuLjliODAyZTdhNmJkIDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3Jl LmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0b3JlIGlz IGFuIHV0aWxpdHkgZXh0cmFjdGluZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwotICoJ ZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUgYXJjaGl2 ZXIKKyAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdfZHVtcGFs bCB1c2luZyB0aGUgYXJjaGl2ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19yZXN0b3JlIHdp bGwgcmVhZCB0aGUgYmFja3VwIGFyY2hpdmUgYW5kCkBAIC00MSwzMCArNDEsNzcgQEAKICNpbmNs dWRlICJwb3N0Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMv c3RhdC5oPgogI2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5jbHVkZSA8dGVybWlvcy5oPgogI2Vu ZGlmCiAKKyNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbXByZXNzX2lv LmgiCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbm5lY3RkYi5oIgog I2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3N0 cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25n LmgiCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIu aCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKIAordHlwZWRlZiBzdHJ1Y3QgU2ltcGxl RGF0YWJhc2VPaWRMaXN0Q2VsbAoreworCXN0cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxs CSpuZXh0OworCU9pZAkJCQkJCQkJCWRiX29pZDsKKwljb25zdCBjaGFyCQkJCQkJCSpkYl9uYW1l OworfSBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsOworCit0eXBlZGVmIHN0cnVjdCBTaW1wbGVE YXRhYmFzZU9pZExpc3QKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpoZWFkOworCVNp bXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKnRhaWw7Cit9IFNpbXBsZURhdGFiYXNlT2lkTGlzdDsK Kwogc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpOwogc3RhdGljIHZvaWQg cmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25z ICpvcHRzKTsKK3N0YXRpYyBib29sIElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIg KmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludCByZXN0b3JlT25lRGF0YWJh c2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJ CQkJICBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwgaW50IG51bSk7CitzdGF0aWMg aW50IFJlYWRPbmVTdGF0ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1ZiwgRklMRSAqcGZpbGUpOworc3Rh dGljIGludCByZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVt cGRpcnBhdGgsCisJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5z LCBSZXN0b3JlT3B0aW9ucyAqb3B0cywgaW50IG51bVdvcmtlcnMpOworc3RhdGljIGludCBwcm9j ZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGly cGF0aCwKKwkJCQkJCQkJCQljb25zdCBjaGFyICpvdXRmaWxlKTsKK3N0YXRpYyB2b2lkIGNvcHlf b3JfcHJpbnRfZ2xvYmFsX2ZpbGUoY29uc3QgY2hhciAqb3V0ZmlsZSwgRklMRSAqcGZpbGUpOwor c3RhdGljIGludCBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQlT aW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJU2ltcGxlU3RyaW5nTGlz dCBkYl9leGNsdWRlX3BhdHRlcm5zKTsKK3N0YXRpYyBpbnQgZ2V0X2RibmFtZV9vaWRfbGlzdF9m cm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCSAgU2ltcGxlRGF0 YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworc3RhdGljIHZvaWQgc2ltcGxlX2RiX29p ZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9vaWQsCisJ CQkJCQkJCQkgIGNvbnN0IGNoYXIgKmRibmFtZSk7CitzdGF0aWMgdm9pZCBzaW1wbGVfc3RyaW5n X2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlU3RyaW5nTGlzdCAqbGlzdCk7CitzdGF0aWMgdm9pZCBz aW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0 KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VP aWRMaXN0ICpsaXN0LAorCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxs LAorCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpwcmV2KTsKK3N0YXRpYyB2 b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0 LAorCQlPaWQgZGJfb2lkLCBjb25zdCBjaGFyICpkYm5hbWUpOworc3RhdGljIHNpemVfdCBxdW90 ZV9saXRlcmFsX2ludGVybmFsKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVu KTsKK3N0YXRpYyBjaGFyICpxdW90ZV9saXRlcmFsX2NzdHIoY29uc3QgY2hhciAqcmF3c3RyKTsK K3N0YXRpYyBpbnQgb25fZXhpdF9pbmRleCA9IDA7CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiB7CiAJUmVzdG9yZU9wdGlvbnMgKm9wdHM7CiAJaW50CQkJYzsKLQlpbnQJCQll eGl0X2NvZGU7CiAJaW50CQkJbnVtV29ya2VycyA9IDE7Ci0JQXJjaGl2ZSAgICAqQUg7CiAJY2hh cgkgICAqaW5wdXRGaWxlU3BlYzsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsKIAlib29sCQlz Y2hlbWFfb25seSA9IGZhbHNlOworCWludAkJCW5fZXJyb3JzID0gMDsKKwlib29sCQlnbG9iYWxz X29ubHkgPSBmYWxzZTsKKwlTaW1wbGVTdHJpbmdMaXN0CWRiX2V4Y2x1ZGVfcGF0dGVybnMgPSB7 TlVMTCwgTlVMTH07CiAJc3RhdGljIGludAlkaXNhYmxlX3RyaWdnZXJzID0gMDsKIAlzdGF0aWMg aW50CWVuYWJsZV9yb3dfc2VjdXJpdHkgPSAwOwogCXN0YXRpYyBpbnQJaWZfZXhpc3RzID0gMDsK QEAgLTg2LDYgKzEzMyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7ImNsZWFu IiwgMCwgTlVMTCwgJ2MnfSwKIAkJeyJjcmVhdGUiLCAwLCBOVUxMLCAnQyd9LAogCQl7ImRhdGEt b25seSIsIDAsIE5VTEwsICdhJ30sCisJCXsiZ2xvYmFscy1vbmx5IiwgMCwgTlVMTCwgJ2cnfSwK IAkJeyJkYm5hbWUiLCAxLCBOVUxMLCAnZCd9LAogCQl7ImV4aXQtb24tZXJyb3IiLCAwLCBOVUxM LCAnZSd9LAogCQl7ImV4Y2x1ZGUtc2NoZW1hIiwgMSwgTlVMTCwgJ04nfSwKQEAgLTEzNiw2ICsx ODQsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJuby1zdGF0aXN0aWNzIiwg bm9fYXJndW1lbnQsICZub19zdGF0aXN0aWNzLCAxfSwKIAkJeyJzdGF0aXN0aWNzLW9ubHkiLCBu b19hcmd1bWVudCwgJnN0YXRpc3RpY3Nfb25seSwgMX0sCiAJCXsiZmlsdGVyIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsIDR9LAorCQl7ImV4Y2x1ZGUtZGF0YWJhc2UiLCByZXF1aXJlZF9hcmd1 bWVudCwgTlVMTCwgNn0sCiAKIAkJe05VTEwsIDAsIE5VTEwsIDB9CiAJfTsKQEAgLTE2NCw3ICsy MTMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJfQogCX0KIAotCXdoaWxlICgo YyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6aDpJOmo6bEw6bjpOOk9wOlA6 UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAi YWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAogCQkJCQkJCWNt ZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKQEAgLTE5MSwxMSArMjQwLDE0 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAh PSAwKQogCQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJl YWs7CisJCQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkgZ2xvYmFsLmRhdCBmaWxlIGZy b20gZGlyZWN0b3J5ICovCisJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKKwkJCQlicmVhazsKIAkJ CWNhc2UgJ2gnOgogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5jcGFy YW1zLnBnaG9zdCA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwotCiAJCQljYXNlICdq JzoJCQkvKiBudW1iZXIgb2YgcmVzdG9yZSBqb2JzICovCiAJCQkJaWYgKCFvcHRpb25fcGFyc2Vf aW50KG9wdGFyZywgIi1qLy0tam9icyIsIDEsCiAJCQkJCQkJCQkgIFBHX01BWF9KT0JTLApAQCAt MzEwLDYgKzM2MiwxMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJZXhpdCgx KTsKIAkJCQlvcHRzLT5leGl0X29uX2Vycm9yID0gdHJ1ZTsKIAkJCQlicmVhazsKKwkJCWNhc2Ug NjoKKwkJCQkvKiBsaXN0IG9mIGRhdGFiYXNlcyBwYXR0ZXJucyB0aG9zZSBuZWVkcyB0byBza2lw IHdoaWxlIHJlc3RvcmluZyAqLworCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4 Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7CisJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CiAJCQkJ LyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50ICovCkBAIC0zMzcsNiAr MzkzLDEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlmICghb3B0cy0+Y3BhcmFt cy5kYm5hbWUgJiYgIW9wdHMtPmZpbGVuYW1lICYmICFvcHRzLT50b2NTdW1tYXJ5KQogCQlwZ19m YXRhbCgib25lIG9mIC1kLy0tZGJuYW1lIGFuZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZpZWQi KTsKIAorCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9iYWxzX29u bHkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90 IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seSIpOworCQlwZ19sb2dfZXJy b3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25h bWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkvKiBTaG91bGQgZ2V0IGF0IG1vc3Qgb25l IG9mIC1kIGFuZCAtZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2VkICovCiAJaWYgKG9wdHMtPmNwYXJh bXMuZGJuYW1lKQogCXsKQEAgLTQxNyw2ICs0ODAsMTA4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCQkJCQkgb3B0cy0+Zm9ybWF0TmFtZSk7CiAJfQogCisJLyoKKwkgKiBJZiB0b2Mu ZGF0IGZpbGUgZG9lcyBub3QgcHJlc2VudCBpbiBjdXJyZW50IHBhdGgsIHRoZW4gY2hlY2sgZm9y CisJICogZ2xvYmFsLmRhdC4gIElmIGdsb2JhbC5kYXQgZmlsZSBpcyBwcmVzZW50LCB0aGVuIHJl c3RvcmUgYWxsIHRoZQorCSAqIGRhdGFiYXNlcyBmcm9tIG1hcC5kYXQoaWYgZXhpc3QpIGZpbGUg bGlzdCBhbmQgc2tpcCByZXN0b3JpbmcgZm9yCisJICogLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRl cm5zLgorCSAqLworCWlmIChpbnB1dEZpbGVTcGVjICE9IE5VTEwgJiYgIUlzRmlsZUV4aXN0c0lu RGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZGF0IikgJiYKKwkJCUlzRmlsZUV4aXN0c0lu RGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJnbG9iYWwuZGF0IikpCisJeworCQlQR2Nvbm4gICpj b25uID0gTlVMTDsgLyogQ29ubmVjdGlvbiB0byByZXN0b3JlIGdsb2JhbCBzcWwgY29tbWFuZHMu ICovCisKKwkJLyoKKwkJICogVXNlciBpcyBzdWdnZXN0ZWQgdG8gdXNlIHNpbmdsZSBkYXRhYmFz ZSBkdW1wIGZvciAtLWxpc3Qgb3B0aW9uLgorCQkgKi8KKwkJaWYgKG9wdHMtPnRvY1N1bW1hcnkp CisJCQlwZ19mYXRhbCgib3B0aW9uIC1sLy0tbGlzdCBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3Rv cmluZyBtdWx0aXBsZSBkYXRhYmFzZXMgYnkgYXJjaGl2ZSBvZiBwZ19kdW1wYWxsIik7CisKKwkJ LyoKKwkJICogVG8gcmVzdG9yZSBtdWx0aXBsZSBkYXRhYmFzZXMsIC1DIChjcmVhdGUgZGF0YWJh c2UpIG9wdGlvbiBzaG91bGQgYmUgc3BlY2lmaWVkLgorCQkgKiBFdmVuIHRoZXJlIGlzIHNpbmds ZSBkYXRhYmFzZSBpbiBkdW1wLCByZXBvcnQgZXJyb3IgYmVjYXVzZSBpdCBtaWdodCBiZSBwb3Nz aWJsZQorCQkgKiB0aGF0IGRhdGFiYXNlIGhhc24ndCBjcmVhdGVkIHNvIGJldHRlciB3ZSByZXBv cnQgZXJyb3IuCisJCSAqLworCQlpZiAoIWdsb2JhbHNfb25seSAmJiBvcHRzLT5jcmVhdGVEQiAh PSAxKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIi1DLy0tY3JlYXRlIG9wdGlvbiBzaG91bGQgYmUg c3BlY2lmaWVkIHdoZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcyBieSBhcmNoaXZlIG9m IHBnX2R1bXBhbGwiKTsKKwkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBm b3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCQlwZ19sb2dfZXJyb3JfaGludCgi SWYgZGIgaXMgYWxyZWFkeSBjcmVhdGVkIGFuZCBkdW1wIGhhcyBzaW5nbGUgZGIgZHVtcCwgdGhl biB1c2UgcGFydGljdWxhciBkdW1wIGZpbGUuIik7CisJCQlleGl0X25pY2VseSgxKTsKKwkJfQor CisJCS8qCisJCSAqIENvbm5lY3QgdG8gZGF0YWJhc2UgdG8gZXhlY3V0ZSBnbG9iYWwgc3FsIGNv bW1hbmRzIGZyb20gZ2xvYmFsLmRhdCBmaWxlLgorCQkgKi8KKwkJaWYgKG9wdHMtPmNwYXJhbXMu ZGJuYW1lKQorCQl7CisJCQljb25uID0gQ29ubmVjdERhdGFiYXNlKG9wdHMtPmNwYXJhbXMuZGJu YW1lLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3Bv cnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQlmYWxzZSwgcHJv Z25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJCQlpZiAoIWNvbm4pCisJCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIG9wdHMtPmNwYXJh bXMuZGJuYW1lKTsKKwkJfQorCisJCS8qIElmIGdsb2JhbHMtb25seSwgdGhlbiByZXR1cm4gZnJv bSBoZXJlLiAqLworCQlpZiAoZ2xvYmFsc19vbmx5KQorCQl7CisJCQkvKiBPcGVuIGdsb2JhbC5k YXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQgYWxsIHRoZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAq LworCQkJbl9lcnJvcnMgPSBwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoY29ubiwgaW5wdXRG aWxlU3BlYywKKwkJCQkJb3B0cy0+ZmlsZW5hbWUpOworCisJCQlpZiAoY29ubikKKwkJCQlQUWZp bmlzaChjb25uKTsKKworCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlcyByZXN0b3JpbmcgaXMgc2tp cHBlZCBhcyAtZy8tLWdsb2JhbHMtb25seSBvcHRpb24gaXMgc3BlY2lmaWVkIik7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQkvKiBOb3cgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tIG1hcC5k YXQgZmlsZS4gKi8KKwkJCW5fZXJyb3JzID0gcmVzdG9yZUFsbERhdGFiYXNlcyhjb25uLCBpbnB1 dEZpbGVTcGVjLCBkYl9leGNsdWRlX3BhdHRlcm5zLAorCQkJCQlvcHRzLCBudW1Xb3JrZXJzKTsK KwkJfQorCisJCS8qIEZyZWUgZGIgcGF0dGVybiBsaXN0LiAqLworCQlzaW1wbGVfc3RyaW5nX2Z1 bGxfbGlzdF9kZWxldGUoJmRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCX0KKwllbHNlIC8qIHByb2Nl c3MgaWYgZ2xvYmFsLmRhdCBmaWxlIGRvZXMgbm90IGV4aXN0LiAqLworCXsKKwkJaWYgKGRiX2V4 Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMKQorCQkJcGdfZmF0YWwoIm9wdGlvbiAtLWV4Y2x1 ZGUtZGF0YWJhc2UgY2FuIGJlIHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRh YmFzZXMgYnkgYXJjaGl2ZSBvZiBwZ19kdW1wYWxsIik7CisKKwkJaWYgKGdsb2JhbHNfb25seSkK KwkJCXBnX2ZhdGFsKCJvcHRpb24gLWcvLS1nbG9iYWxzLW9ubHkgY2FuIGJlIHVzZWQgb25seSB3 aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMgYnkgYXJjaGl2ZSBvZiBwZ19kdW1wYWxs Iik7CisKKwkJbl9lcnJvcnMgPSByZXN0b3JlT25lRGF0YWJhc2UoaW5wdXRGaWxlU3BlYywgb3B0 cywgbnVtV29ya2VycywgZmFsc2UsIDApOworCX0KKworCW9uX2V4aXRfaW5kZXggPSAwOyAvKiBS ZXNldCBpbmRleC4gKi8KKworCS8qIERvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVy cm9ycyBkdXJpbmcgcmVzdG9yZS4gKi8KKwlpZiAobl9lcnJvcnMpCisJeworCQlwZ19sb2dfd2Fy bmluZygiZXJyb3JzIGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBuX2Vycm9ycyk7CisJCXJldHVy biAxOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogcmVzdG9yZU9uZURhdGFiYXNlCisg KgorICogVGhpcyB3aWxsIHJlc3RvcmUgb25lIGRhdGFiYXNlIHVzaW5nIHRvYy5kYXQgZmlsZS4K KyAqCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5nIHJlc3RvcmUu CisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVPbmVEYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZp bGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkgICBpbnQgbnVtV29ya2VycywgYm9v bCBhcHBlbmRfZGF0YSwgaW50IG51bSkKK3sKKwlBcmNoaXZlCQkqQUg7CisJaW50CQkJbl9lcnJv cnM7CisKIAlBSCA9IE9wZW5BcmNoaXZlKGlucHV0RmlsZVNwZWMsIG9wdHMtPmZvcm1hdCk7CiAK IAlTZXRBcmNoaXZlT3B0aW9ucyhBSCwgTlVMTCwgb3B0cyk7CkBAIC00MjUsOCArNTkwLDE0IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIFdlIGRvbid0IGhhdmUgYSBjb25uZWN0 aW9uIHlldCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlci4gVGhlIGNvbm5lY3Rpb24KIAkgKiBpcyBp bml0aWFsaXplZCB0byBOVUxMIGFuZCBpZiB3ZSB0ZXJtaW5hdGUgdGhyb3VnaCBleGl0X25pY2Vs eSgpIHdoaWxlCiAJICogaXQncyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxs IGp1c3QgYmUgYSBuby1vcC4KKwkgKiBJZiB3ZSBhcmUgcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFi YXNlcywgdGhlbiBzYXZlIGluZGV4IG9mIGV4aXRfbmljZWx5CisJICogc28gdGhhdCB3ZSBjYW4g dXNlIHNhbWUgc2xvdCBmb3IgYWxsIHRoZSBkYXRhYmFzZXMgYXMgd2UgYWxyZWFkeSBjbG9zZWQK KwkgKiB0aGUgcHJldmlvdXMgYXJjaGl2ZSBieSBDbG9zZUFyY2hpdmUuCiAJICovCi0Jb25fZXhp dF9jbG9zZV9hcmNoaXZlKEFIKTsKKwlpZiAoIWFwcGVuZF9kYXRhIHx8IG51bSA9PSAwKQorCQlv bl9leGl0X2luZGV4ID0gb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwllbHNlCisJCXJlcGxh Y2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFILCBvbl9leGl0X2luZGV4KTsKIAogCS8qIExldCB0 aGUgYXJjaGl2ZXIga25vdyBob3cgbm9pc3kgdG8gYmUgKi8KIAlBSC0+dmVyYm9zZSA9IG9wdHMt PnZlcmJvc2U7CkBAIC00NDYsMjUgKzYxNywyMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAllbHNlCiAJewogCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsKLQkJUmVz dG9yZUFyY2hpdmUoQUgpOworCQlSZXN0b3JlQXJjaGl2ZShBSCwgYXBwZW5kX2RhdGEpOwogCX0K IAotCS8qIGRvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyAqLwotCWlmIChB SC0+bl9lcnJvcnMpCi0JCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiByZXN0b3Jl OiAlZCIsIEFILT5uX2Vycm9ycyk7CisJbl9lcnJvcnMgPSBBSC0+bl9lcnJvcnM7CiAKIAkvKiBB SCBtYXkgYmUgZnJlZWQgaW4gQ2xvc2VBcmNoaXZlPyAqLwotCWV4aXRfY29kZSA9IEFILT5uX2Vy cm9ycyA/IDEgOiAwOwotCiAJQ2xvc2VBcmNoaXZlKEFIKTsKIAotCXJldHVybiBleGl0X2NvZGU7 CisJcmV0dXJuIG5fZXJyb3JzOwogfQogCiBzdGF0aWMgdm9pZAogdXNhZ2UoY29uc3QgY2hhciAq cHJvZ25hbWUpCiB7Ci0JcHJpbnRmKF8oIiVzIHJlc3RvcmVzIGEgUG9zdGdyZVNRTCBkYXRhYmFz ZSBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wLlxuXG4iKSwgcHJvZ25hbWUpOwor CXByaW50ZihfKCIlcyByZXN0b3JlcyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgZnJvbSBhbiBhcmNo aXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC5cbiIKKwkJCQkiSWYgYXJjaGl2ZSBpcyBjcmVhdGVkIGJ5 IHBnX2R1bXBhbGwsIHRoZW4gcmVzdG9yZXMgbXVsdGlwbGUgZGF0YWJhc2VzIGFsc28uIFxuXG4i KSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBb T1BUSU9OXS4uLiBbRklMRV1cbiIpLCBwcm9nbmFtZSk7CiAKQEAgLTQ4Miw2ICs2NTAsNyBAQCB1 c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtYywgLS1jbGVhbiAgICAg ICAgICAgICAgICAgIGNsZWFuIChkcm9wKSBkYXRhYmFzZSBvYmplY3RzIGJlZm9yZSByZWNyZWF0 aW5nXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUMsIC0tY3JlYXRlICAgICAgICAgICAgICAgICBjcmVh dGUgdGhlIHRhcmdldCBkYXRhYmFzZVxuIikpOwogCXByaW50ZihfKCIgIC1lLCAtLWV4aXQtb24t ZXJyb3IgICAgICAgICAgZXhpdCBvbiBlcnJvciwgZGVmYXVsdCBpcyB0byBjb250aW51ZVxuIikp OworCXByaW50ZihfKCIgIC1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5 IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXNcbiIpKTsKIAlwcmludGYoXygiICAtSSwgLS1p bmRleD1OQU1FICAgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgaW5kZXhcbiIpKTsKIAlwcmludGYo XygiICAtaiwgLS1qb2JzPU5VTSAgICAgICAgICAgICAgIHVzZSB0aGlzIG1hbnkgcGFyYWxsZWwg am9icyB0byByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUwsIC0tdXNlLWxpc3Q9RklMRU5B TUUgICAgICB1c2UgdGFibGUgb2YgY29udGVudHMgZnJvbSB0aGlzIGZpbGUgZm9yXG4iCkBAIC00 OTQsNiArNjYzLDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAg LVMsIC0tc3VwZXJ1c2VyPU5BTUUgICAgICAgICBzdXBlcnVzZXIgdXNlciBuYW1lIHRvIHVzZSBm b3IgZGlzYWJsaW5nIHRyaWdnZXJzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXQsIC0tdGFibGU9TkFN RSAgICAgICAgICAgICByZXN0b3JlIG5hbWVkIHJlbGF0aW9uICh0YWJsZSwgdmlldywgZXRjLilc biIpKTsKIAlwcmludGYoXygiICAtVCwgLS10cmlnZ2VyPU5BTUUgICAgICAgICAgIHJlc3RvcmUg bmFtZWQgdHJpZ2dlclxuIikpOworCXByaW50ZihfKCIgIC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRU RVJOICAgZXhjbHVkZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzIHdpdGggcGF0dGVyblxu IikpOwogCXByaW50ZihfKCIgIC14LCAtLW5vLXByaXZpbGVnZXMgICAgICAgICAgc2tpcCByZXN0 b3JhdGlvbiBvZiBhY2Nlc3MgcHJpdmlsZWdlcyAoZ3JhbnQvcmV2b2tlKVxuIikpOwogCXByaW50 ZihfKCIgIC0xLCAtLXNpbmdsZS10cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBhcyBhIHNpbmdsZSB0 cmFuc2FjdGlvblxuIikpOwogCXByaW50ZihfKCIgIC0tZGlzYWJsZS10cmlnZ2VycyAgICAgICAg ICAgZGlzYWJsZSB0cmlnZ2VycyBkdXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVcbiIpKTsKQEAgLTUz MCw4ICs3MDAsOCBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAt LXJvbGU9Uk9MRU5BTUUgICAgICAgICAgZG8gU0VUIFJPTEUgYmVmb3JlIHJlc3RvcmVcbiIpKTsK IAogCXByaW50ZihfKCJcbiIKLQkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAt VCwgYW5kIC0tc2VjdGlvbiBjYW4gYmUgY29tYmluZWQgYW5kIHNwZWNpZmllZFxuIgotCQkJICJt dWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKKwkJCSAiVGhl IG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAtVCwgLS1zZWN0aW9uLCBhbmQgLS1leGNsdWRl LWRhdGFiYXNlIGNhbiBiZSBjb21iaW5lZFxuIgorCQkJICJhbmQgc3BlY2lmaWVkIG11bHRpcGxl IHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3RzLlxuIikpOwogCXByaW50ZihfKCJcbklm IG5vIGlucHV0IGZpbGUgbmFtZSBpcyBzdXBwbGllZCwgdGhlbiBzdGFuZGFyZCBpbnB1dCBpcyB1 c2VkLlxuXG4iKSk7CiAJcHJpbnRmKF8oIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iKSwgUEFDS0FH RV9CVUdSRVBPUlQpOwogCXByaW50ZihfKCIlcyBob21lIHBhZ2U6IDwlcz5cbiIpLCBQQUNLQUdF X05BTUUsIFBBQ0tBR0VfVVJMKTsKQEAgLTYzNiwzICs4MDYsNjQ4IEBAIHJlYWRfcmVzdG9yZV9m aWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cykKIAogCWZp bHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkK KyAqCisgKiBSZXR1cm5zIHRydWUgaWYgZmlsZSBleGlzdCBpbiBjdXJyZW50IGRpcmVjdG9yeS4K KyAqLworc3RhdGljIGJvb2wKK0lzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRp ciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQJCQlzdDsKKwljaGFyCQkJ CWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvJXMi LCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCisJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFt ZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKKworCXJldHVybiAoc3RhdChidWYsICZzdCkgPT0g MCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKK30KKworLyoKKyAqIFJlYWRPbmVTdGF0ZW1lbnQK KyAqCisgKiBUaGlzIHdpbGwgc3RhcnQgcmVhZGluZyBmcm9tIHBhc3NlZCBmaWxlIHBvaW50ZXIg dXNpbmcgZmdldGMgYW5kIHJlYWQgdGlsbAorICogc2VtaWNvbG9uKHNxbCBzdGF0ZW1lbnQgdGVy bWluYXRvciBmb3IgZ2xvYmFsLmRhdCBmaWxlKQorICoKKyAqIEVPRiBpcyByZXR1cm5lZCBpZiBl bmQtb2YtZmlsZSBpbnB1dCBpcyBzZWVuOyB0aW1lIHRvIHNodXQgZG93bi4KKyAqLworCitzdGF0 aWMgaW50CitSZWFkT25lU3RhdGVtZW50KFN0cmluZ0luZm8gaW5CdWYsIEZJTEUgKnBmaWxlKQor eworCWludAkJCWM7IC8qIGNoYXJhY3RlciByZWFkIGZyb20gZ2V0YygpICovCisJaW50CQkJbTsK KworCVN0cmluZ0luZm9EYXRhCXE7CisJaW5pdFN0cmluZ0luZm8oJnEpOworCisJcmVzZXRTdHJp bmdJbmZvKGluQnVmKTsKKworCS8qCisJICogUmVhZCBjaGFyYWN0ZXJzIHVudGlsIEVPRiBvciB0 aGUgYXBwcm9wcmlhdGUgZGVsaW1pdGVyIGlzIHNlZW4uCisJICovCisJd2hpbGUgKChjID0gZmdl dGMocGZpbGUpKSAhPSBFT0YpCisJeworCQlpZiAoYyAhPSAnXCcnICYmIGMgIT0gJyInICYmIGMg IT0gJ1xuJyAmJiBjICE9ICc7JykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYs IChjaGFyKSBjKTsKKwkJCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQkJewor CQkJCWlmIChjICE9ICdcJycgJiYgYyAhPSAnIicgJiYgYyAhPSAnOycgJiYgYyAhPSAnXG4nKQor CQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpIGMpOworCQkJCWVsc2UKKwkJ CQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoYyA9PSAnXCcnIHx8IGMgPT0gJyInKQorCQl7 CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmcSwgKGNoYXIpIGMpOworCQkJbSA9IGM7CisKKwkJ CXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQkJeworCQkJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKCZxLCAoY2hhcikgYyk7CisKKwkJCQlpZihjID09IG0pCisJCQkJeworCQkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGluQnVmLCBxLmRhdGEpOworCQkJCQlyZXNldFN0cmluZ0lu Zm8oJnEpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoYyA9PSAnOycp CisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgJzsnKTsKKwkJCWJy ZWFrOworCQl9CisKKwkJaWYgKGMgPT0gJ1xuJykKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGlu QnVmLCAoY2hhcikgJ1xuJyk7CisJfQorCisJLyogTm8gaW5wdXQgYmVmb3JlIEVPRiBzaWduYWwg bWVhbnMgdGltZSB0byBxdWl0LiAqLworCWlmIChjID09IEVPRiAmJiBpbkJ1Zi0+bGVuID09IDAp CisJCXJldHVybiBFT0Y7CisKKwkvKiBBZGQgJ1wwJyB0byBtYWtlIGl0IGxvb2sgdGhlIHNhbWUg YXMgbWVzc2FnZSBjYXNlLiAqLworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikg J1wwJyk7CisKKwlyZXR1cm4gJ1EnOworfQorCisvKgorICogZ2V0X2RibmFtZXNfbGlzdF90b19y ZXN0b3JlCisgKgorICogVGhpcyB3aWxsIHJlbW92ZSBlbnRyaWVzIGZyb20gZGJuYW1lX29pZF9s aXN0IHRoYXQgcGF0dGVybiBtYXRjaGluZyBhbnkKKyAqIGluIHRoZSBkYl9leGNsdWRlX3BhdHRl cm5zIGxpc3QuICBkYm5hbWVfb2lkX2xpc3QgbWF5YmUgaW5wbGFjZSBtb2RpZmllZC4KKyAqCisg KiByZXR1cm5zLCBudW1iZXIgb2YgZGF0YWJhc2Ugd2lsbCBiZSByZXN0b3JlZC4KKyAqCisgKi8K K3N0YXRpYyBpbnQKK2dldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJ CVNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQlTaW1wbGVTdHJpbmdM aXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpCit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkq ZGJvaWRfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC0+aGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExp c3RDZWxsCSpkYm9pZHByZWNlbGwgPSBOVUxMOworCWludAkJCQkJCQljb3VudF9kYiA9IDA7CisJ UFFFeHBCdWZmZXIgcXVlcnk7CisJUEdyZXN1bHQgICAqcmVzOworCisJLyogUmV0dXJuIDAgaWYg dGhlcmUgaXMgbm8gZGF0YWJhc2UgdG8gcmVzdG9yZS4gKi8KKwlpZiAoZGJvaWRfY2VsbCA9PSBO VUxMKQorCQlyZXR1cm4gMDsKKworCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCWlm ICghY29ubikKKwkJcGdfbG9nX2luZm8oImNvbnNpZGVyaW5nIFBBVFRFUk4gYXMgTkFNRSBmb3Ig LS1leGNsdWRlLWRhdGFiYXNlIG9wdGlvbiBhcyBubyBkYiBjb25uZWN0aW9uIHdoaWxlIGRvaW5n IHBnX3Jlc3RvcmUuIik7CisKKwkvKgorCSAqIFByb2Nlc3Mgb25lIGJ5IG9uZSBhbGwgZGJuYW1l cyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNraXAgcmVzdG9yaW5nLCB0aGVuCisJICogcmVtb3ZlIGRi bmFtZSBmcm9tIGxpc3QuCisJICovCisJd2hpbGUgKGRib2lkX2NlbGwgIT0gTlVMTCkKKwl7CisJ CWJvb2wJCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSBmYWxzZTsKKwkJU2ltcGxlRGF0YWJhc2VPaWRM aXN0Q2VsbAkqbmV4dCA9IGRib2lkX2NlbGwtPm5leHQ7CisKKwkJZm9yIChTaW1wbGVTdHJpbmdM aXN0Q2VsbCAqY2VsbGRiID0gZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkOyBjZWxsZGI7IGNlbGxk YiA9IGNlbGxkYi0+bmV4dCkKKwkJeworCQkJLyoKKwkJCSAqIHRoZSBjb25zdHJ1Y3QgcGF0dGVy biBtYXRjaGluZyBxdWVyeToKKwkJCSAqIFNFTEVDVCAxIFdIRVJFIFhYWCBPUEVSQVRPUihwZ19j YXRhbG9nLn4pICdeKFBBVFRFUk4pJCcgQ09MTEFURQorCQkJICogcGdfY2F0YWxvZy5kZWZhdWx0 CisJCQkgKgorCQkJICogWFhYIHJlcHJlc2VudHMgdGhlIHN0cmluZyBsaXRlcmFsIGRhdGFiYXNl IG5hbWUgZGVyaXZlZCBmcm9tIHRoZQorCQkJICogZGJuYW1lX29pZF9saXN0LCB3aGljaCBpcyBp bml0aWFsbHkgZXh0cmFjdGVkIGZyb20gdGhlIG1hcC5kYXQKKwkJCSAqIGZpbGUgbG9jYXRlZCBp biB0aGUgYmFja3VwIGRpcmVjdG9yeS4gIHRoYXQncyB3aHkgd2UgbmVlZAorCQkJICogcXVvdGVf bGl0ZXJhbF9jc3RyLgorCQkJICoKKwkJCSAqIElmIG5vIGRiIGNvbm5lY3Rpb24sIHRoZW4gY29u c2lkZXIgUEFUVEVSTiBhcyBOQU1FLgorCQkJICovCisJCQlpZiAocGdfc3RyY2FzZWNtcChkYm9p ZF9jZWxsLT5kYl9uYW1lLCBjZWxsZGItPnZhbCkgPT0gMCkKKwkJCSAgIHNraXBfZGJfcmVzdG9y ZSA9IHRydWU7CisJCQllbHNlIGlmIChjb25uKQorCQkJeworCQkJCWludAlkb3RjbnQ7CisKKwkJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIpOworCQkJCXByb2Nlc3NT UUxOYW1lUGF0dGVybihjb25uLCBxdWVyeSwgY2VsbGRiLT52YWwsIGZhbHNlLAorCQkJCQkJCQkJ ICBmYWxzZSwgTlVMTCwgcXVvdGVfbGl0ZXJhbF9jc3RyKGRib2lkX2NlbGwtPmRiX25hbWUpLAor CQkJCQkJCQkJICBOVUxMLCBOVUxMLCBOVUxMLCAmZG90Y250KTsKKworCQkJCWlmIChkb3RjbnQg PiAwKQorCQkJCXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJpbXByb3BlciBxdWFsaWZpZWQgbmFtZSAo dG9vIG1hbnkgZG90dGVkIG5hbWVzKTogJXMiLAorCQkJCQkJCQkgIGNlbGxkYi0+dmFsKTsKKwkJ CQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4aXRfbmljZWx5KDEpOworCQkJCX0KKworCQkJCXJl cyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0YSk7CisKKwkJCQlpZiAoKFBRcmVzdWx0 U3RhdHVzKHJlcykgPT0gUEdSRVNfVFVQTEVTX09LKSAmJiBQUW50dXBsZXMocmVzKSkKKwkJCQl7 CisJCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkJCXBnX2xvZ19pbmZvKCJkYXRhYmFz ZSBcIiVzXCIgaXMgbWF0Y2hpbmcgd2l0aCBleGNsdWRlIHBhdHRlcm46IFwiJXNcIiIsIGRib2lk X2NlbGwtPmRiX25hbWUsIGNlbGxkYi0+dmFsKTsKKwkJCQl9CisKKwkJCQlQUWNsZWFyKHJlcyk7 CisJCQkJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CisJCQl9CisKKwkJCWlmIChza2lwX2RiX3Jl c3RvcmUpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBJbmNyZW1lbnQgY291bnQgaWYgZGF0YWJh c2UgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJCWlmIChza2lwX2RiX3Jlc3RvcmUpCisJCXsK KwkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJvaWRfY2VsbC0+ ZGJfbmFtZSk7CisJCQlzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKGRibmFtZV9vaWRfbGlzdCwg ZGJvaWRfY2VsbCwgZGJvaWRwcmVjZWxsKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWNvdW50X2Ri Kys7CisJCQlkYm9pZHByZWNlbGwgPSBkYm9pZF9jZWxsOworCQl9CisKKwkJLyogUHJvY2VzcyBu ZXh0IGRibmFtZSBmcm9tIGRibmFtZSBsaXN0LiAqLworCQlkYm9pZF9jZWxsID0gbmV4dDsKKwl9 CisKKwlyZXR1cm4gY291bnRfZGI7Cit9CisKKy8qCisgKiBnZXRfZGJuYW1lX29pZF9saXN0X2Zy b21fbWZpbGUKKyAqCisgKiBPcGVuIG1hcC5kYXQgZmlsZSBhbmQgcmVhZCBsaW5lIGJ5IGxpbmUg YW5kIHRoZW4gcHJlcGFyZSBhIGxpc3Qgb2YgZGF0YWJhc2UKKyAqIG5hbWVzIGFuZCBjb3JyZXNw b25kaW5nIGRiX29pZC4KKyAqCisgKiBSZXR1cm5zLCB0b3RhbCBudW1iZXIgb2YgZGF0YWJhc2Ug bmFtZXMgaW4gbWFwLmRhdCBmaWxlLgorICovCitzdGF0aWMgaW50CitnZXRfZGJuYW1lX29pZF9s aXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsIFNpbXBsZURhdGFiYXNlT2lk TGlzdCAqZGJuYW1lX29pZF9saXN0KQoreworCUZJTEUgICAgKnBmaWxlOworCWNoYXIgICAgbWFw X2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCWNoYXIgICAgbGluZVtNQVhQR1BBVEhdOworCWludCAg ICAgY291bnQgPSAwOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBvbmx5IGdsb2JhbC5kYXQgZmls ZSBpbiBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUgYXMgdGhlcmUKKwkgKiBpcyBubyBkYXRh YmFzZSB0byByZXN0b3JlLgorCSAqLworCWlmICghSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkocGdf c3RyZHVwKGR1bXBkaXJwYXRoKSwgIm1hcC5kYXQiKSkKKwl7CisJCXBnX2xvZ19pbmZvKCJkYXRh YmFzZXMgcmVzdG9yaW5nIGlzIHNraXBwZWQgYXMgbWFwLmRhdCBmaWxlIGlzIG5vdCBwcmVzZW50 IGluIFwiJXNcIiIsIGR1bXBkaXJwYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc25wcmludGYo bWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGR1bXBkaXJwYXRoKTsKKwor CS8qIE9wZW4gbWFwLmRhdCBmaWxlLiAqLworCXBmaWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwg UEdfQklOQVJZX1IpOworCisJaWYgKHBmaWxlID09IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgb3BlbiBtYXAuZGF0IGZpbGU6IFwiJXNcIiIsIG1hcF9maWxlX3BhdGgpOworCisJLyogQXBw ZW5kIGFsbCB0aGUgZGJuYW1lIGFuZCBkYl9vaWQgdG8gdGhlIGxpc3QuICovCisJd2hpbGUoKGZn ZXRzKGxpbmUsIE1BWFBHUEFUSCwgcGZpbGUpKSAhPSBOVUxMKQorCXsKKwkJT2lkICAgICAgICAg ZGJfb2lkID0gSW52YWxpZE9pZDsKKwkJY2hhcgkJZGJfb2lkX3N0cltNQVhQR1BBVEggKyAxXSA9 IHsnXDAnfTsKKwkJY2hhciAgICAgICAgZGJuYW1lW01BWFBHUEFUSCArIDFdID0geydcMCd9Owor CisJCS8qIEV4dHJhY3QgZGJvaWQuICovCisJCXNzY2FuZihsaW5lLCAiJXUiICwgJmRiX29pZCk7 CisJCXNzY2FuZihsaW5lLCAiJXMiICwgZGJfb2lkX3N0cik7CisKKwkJLyogTm93IGNvcHkgZGJu YW1lLiAqLworCQlzdHJjcHkoZGJuYW1lLCBsaW5lICsgc3RybGVuKGRiX29pZF9zdHIpICsgMSk7 CisKKwkJLyogUmVtb3ZlIFxuIGZyb20gZGJhbm1lLiAqLworCQlkYm5hbWVbc3RybGVuKGRibmFt ZSkgLSAxXSA9ICdcMCc7CisKKwkJcGdfbG9nX2luZm8oImZvdW5kIGRhdGFiYXNlIFwiJXNcIiAo T0lEOiAldSkgaW4gbWFwLmRhdCBmaWxlIHdoaWxlIHJlc3RvcmluZy4iLCBkYm5hbWUsIGRiX29p ZCk7CisKKwkJLyogUmVwb3J0IGVycm9yIGFuZCBleGl0IGlmIHRoZSBmaWxlIGhhcyBhbnkgY29y cnVwdGVkIGRhdGEuICovCisJCWlmICghT2lkSXNWYWxpZChkYl9vaWQpIHx8IHN0cmxlbihkYm5h bWUpID09IDApCisJCQlwZ19mYXRhbCgiaW52YWxpZCBlbnRyeSBpbiBtYXAuZGF0IGZpbGUgYXQg bGluZSA6ICVkIiwgY291bnQgKyAxKTsKKworCQkvKgorCQkgKiBYWFggOiBiZWZvcmUgYWRkaW5n IGRibmFtZSBpbnRvIGxpc3QsIHdlIGNhbiB2ZXJpZnkgdGhhdCB0aGlzIGRiCisJCSAqIG5lZWRz IHRvIHNraXBwZWQgZm9yIHJlc3RvcmUgb3Igbm90IGJ1dCBhcyBvZiBub3csIHdlIGFyZSBtYWtp bmcKKwkJICogYSBsaXN0IG9mIGFsbCB0aGUgZGF0YWJhc2VzLgorCQkgKi8KKwkJc2ltcGxlX2Ri X29pZF9saXN0X2FwcGVuZChkYm5hbWVfb2lkX2xpc3QsIGRiX29pZCwgZGJuYW1lKTsKKwkJY291 bnQrKzsKKwl9CisKKwkvKiBDbG9zZSBtYXAuZGF0IGZpbGUuICovCisJZmNsb3NlKHBmaWxlKTsK KworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIHJlc3RvcmVBbGxEYXRhYmFzZXMKKyAqCisg KiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMgYXJlIHByZXNlbnQgaW4K KyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGluZy4KKyAqCisgKiBUaGlz IHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFyZSBzcGVjaWZpZWQgd2l0 aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKgorICogcmV0dXJucywgbnVtYmVyIG9m IGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlQWxs RGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCQkJCVNp bXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMs CisJCQkJCWludCBudW1Xb3JrZXJzKQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdAkJCWRibmFt ZV9vaWRfbGlzdCA9IHtOVUxMLCBOVUxMfTsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCQkq ZGJvaWRfY2VsbDsKKwlpbnQJCQkJCQkJCW51bV9kYl9yZXN0b3JlID0gMDsKKwlpbnQJCQkJCQkJ CW51bV90b3RhbF9kYjsKKwlpbnQJCQkJCQkJCW5fZXJyb3JzX3RvdGFsOworCWludAkJCQkJCQkJ Y291bnQgPSAwOworCisJbnVtX3RvdGFsX2RiID0gZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21m aWxlKGR1bXBkaXJwYXRoLCAmZGJuYW1lX29pZF9saXN0KTsKKworCS8qCisJICogSWYgbWFwLmRh dCBoYXMgbm8gZW50cnksIHJldHVybiBmcm9tIGhlcmUgYWZ0ZXIgcHJvY2Vzc2luZworCSAqIGds b2JhbC5kYXQgZmlsZS4KKwkgKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCkK KwkJcmV0dXJuIHByb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhjb25uLCBkdW1wZGlycGF0aCwg b3B0cy0+ZmlsZW5hbWUpOworCisJcGdfbG9nX2luZm8oImZvdW5kIHRvdGFsICVkIGRhdGFiYXNl IG5hbWVzIGluIG1hcC5kYXQgZmlsZSIsIG51bV90b3RhbF9kYik7CisKKwlpZiAoIWNvbm4pCisJ eworCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgZGF0YWJhc2UgXCJwb3N0Z3Jlc1wi ICB0byBkdW1wIGludG8gb3V0IGZpbGUiKTsKKworCQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJw b3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCSAgIG9wdHMtPmNw YXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJ CQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJCS8qIFRy eSB3aXRoIHRlbXBsYXRlMS4gKi8KKwkJaWYgKCFjb25uKQorCQl7CisJCQlwZ19sb2dfaW5mbygi dHJ5aW5nIHRvIGNvbm5lY3QgZGF0YWJhc2UgXCJ0ZW1wbGF0ZTFcIiBhcyBmYWlsZWQgdG8gY29u bmVjdCB0byBkYXRhYmFzZSBcInBvc3RncmVzXCIgdG8gZHVtcCBpbnRvIG91dCBmaWxlIik7CisK KwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIE5VTEwsIG9wdHMtPmNwYXJh bXMucGdob3N0LAorCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFt cy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCSAgIGZhbHNlLCBwcm9nbmFtZSwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCX0KKwl9CisKKwkvKgorCSAqIHByb2Nlc3NpbmcgcGdf cmV0c29yZSAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVSTi9OQU1FIGlmIG5vIGNvbm5lY3Rpb24u CisJICovCisJbnVtX2RiX3Jlc3RvcmUgPSBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoY29u biwgJmRibmFtZV9vaWRfbGlzdCwKKwkJCWRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCisJLyogT3Bl biBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBwZW5kIGFsbCB0aGUgZ2xvYmFsIHNxbCBj b21tYW5kcy4gKi8KKwluX2Vycm9yc190b3RhbCA9IHByb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5k cyhjb25uLCBkdW1wZGlycGF0aCwgb3B0cy0+ZmlsZW5hbWUpOworCisJLyogQ2xvc2UgdGhlIGRi IGNvbm5lY3Rpb24gYXMgd2UgYXJlIGRvbmUgd2l0aCBnbG9iYWxzIGFuZCBwYXR0ZXJucy4gKi8K KwlpZiAoY29ubikKKwkJUFFmaW5pc2goY29ubik7CisKKwkvKiBFeGl0IGlmIG5vIGRiIG5lZWRz IHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChkYm5hbWVfb2lkX2xpc3QuaGVhZCA9PSBOVUxMKQor CXsKKwkJcGdfbG9nX2luZm8oIm5vIGRhdGFiYXNlIG5lZWRzIHRvIHJlc3RvcmUgb3V0IG9mICVk IGRhdGFiYXNlcyIsIG51bV90b3RhbF9kYik7CisJCXJldHVybiBuX2Vycm9yc190b3RhbDsKKwl9 CisKKwlwZ19sb2dfaW5mbygibmVlZHMgdG8gcmVzdG9yZSAlZCBkYXRhYmFzZXMgb3V0IG9mICVk IGRhdGFiYXNlcyIsIG51bV9kYl9yZXN0b3JlLCBudW1fdG90YWxfZGIpOworCisJLyoKKwkgKiBU aWxsIG5vdywgd2UgbWFkZSBhIGxpc3Qgb2YgZGF0YWJhc2VzLCB0aG9zZSBuZWVkcyB0byBiZSBy ZXN0b3JlZAorCSAqIGFmdGVyIHNraXBwaW5nIG5hbWVzIG9mIGV4Y2x1ZGUtZGF0YWJhc2UuICBO b3cgd2UgY2FuIGxhdW5jaCBwYXJhbGxlbAorCSAqIHdvcmtlcnMgdG8gcmVzdG9yZSB0aGVzZSBk YXRhYmFzZXMuCisJICovCisJZGJvaWRfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC5oZWFkOworCisJ d2hpbGUoZGJvaWRfY2VsbCAhPSBOVUxMKQorCXsKKwkJY2hhcgkJc3ViZGlycGF0aFtNQVhQR1BB VEhdOworCQlpbnQJCQluX2Vycm9yczsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHJlc2V0IG92 ZXJyaWRlX2RibmFtZSBzbyB0aGF0IG9iamVjdHMgY2FuIGJlIHJlc3RvcmVkIGludG8KKwkJICog YWxyZWFkeSBjcmVhdGVkIGRhdGFiYXNlLiAodXNlZCB3aXRoIC1kLy0tZGJuYW1lIG9wdGlvbikK KwkJICovCisJCWlmIChvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSkKKwkJeworCQkJcGZy ZWUob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpOworCQkJb3B0cy0+Y3BhcmFtcy5vdmVy cmlkZV9kYm5hbWUgPSBOVUxMOworCQl9CisKKwkJc25wcmludGYoc3ViZGlycGF0aCwgTUFYUEdQ QVRILCAiJXMvZGF0YWJhc2VzLyV1IiwgZHVtcGRpcnBhdGgsIGRib2lkX2NlbGwtPmRiX29pZCk7 CisKKwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm9pZF9jZWxs LT5kYl9uYW1lKTsKKworCQkvKiBSZXN0b3JlIHNpbmdsZSBkYXRhYmFzZS4gKi8KKwkJbl9lcnJv cnMgPSByZXN0b3JlT25lRGF0YWJhc2Uoc3ViZGlycGF0aCwgb3B0cywgbnVtV29ya2VycywgdHJ1 ZSwgY291bnQpOworCisJCS8qIFByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJp bmcgc2luZ2xlIGRhdGFiYXNlIHJlc3RvcmUuICovCisJCWlmIChuX2Vycm9ycykKKwkJeworCQkJ bl9lcnJvcnNfdG90YWwgKz0gbl9lcnJvcnM7CisJCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGln bm9yZWQgb24gZGF0YWJhc2UgXCIlc1wiIHJlc3RvcmU6ICVkIiwgZGJvaWRfY2VsbC0+ZGJfbmFt ZSwgbl9lcnJvcnMpOworCQl9CisKKwkJZGJvaWRfY2VsbCA9IGRib2lkX2NlbGwtPm5leHQ7CisJ CWNvdW50Kys7CisJfQorCisJLyogTG9nIG51bWJlciBvZiBwcm9jZXNzZWQgZGF0YWJhc2VzLiov CisJcGdfbG9nX2luZm8oIm51bWJlciBvZiByZXN0b3JlZCBkYXRhYmFzZXMgYXJlICVkIiwgbnVt X2RiX3Jlc3RvcmUpOworCisJLyogRnJlZSBkYm5hbWUgYW5kIGRib2lkIGxpc3QuICovCisJc2lt cGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKCZkYm5hbWVfb2lkX2xpc3QpOworCisJcmV0dXJu IG5fZXJyb3JzX3RvdGFsOworfQorCisvKgorICogcHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRz CisgKgorICogVGhpcyB3aWxsIG9wZW4gZ2xvYmFsLmRhdCBmaWxlIGFuZCB3aWxsIGV4ZWN1dGUg YWxsIGdsb2JhbCBzcWwgY29tbWFuZHMgb25lCisgKiBieSBvbmUgc3RhdGVtZW50LgorICogU2Vt aWNvbG9uIGlzIGNvbnNpZGVyZWQgYXMgc3RhdGVtZW50IHRlcm1pbmF0b3IuICBJZiBvdXRmaWxl IGlzIHBhc3NlZCwgdGhlbgorICogdGhpcyB3aWxsIGNvcHkgYWxsIHNxbCBjb21tYW5kcyBpbnRv IG91dGZpbGUgcmF0aGVyIHRoZW4gZXhlY3V0aW5nIHRoZW0uCisgKgorICogcmV0dXJucyB0aGUg bnVtYmVyIG9mIGVycm9ycyB3aGlsZSBwcm9jZXNzaW5nIGdsb2JhbC5kYXQKKyAqLworc3RhdGlj IGludAorcHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRzKFBHY29ubiAqY29ubiwgY29uc3QgY2hh ciAqZHVtcGRpcnBhdGgsIGNvbnN0IGNoYXIgKm91dGZpbGUpCit7CisJY2hhciAgICAgICAgICAg IGdsb2JhbF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwlQR3Jlc3VsdAkJKnJlc3VsdDsKKwlTdHJp bmdJbmZvRGF0YQlzcWxzdGF0ZW1lbnQ7CisJRklMRQkJCSpwZmlsZTsKKwlpbnQJCQkJbl9lcnJv cnMgPSAwOworCisJc25wcmludGYoZ2xvYmFsX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xv YmFsLmRhdCIsIGR1bXBkaXJwYXRoKTsKKworCS8qIE9wZW4gZ2xvYmFsLmRhdCBmaWxlLiAqLwor CXBmaWxlID0gZm9wZW4oZ2xvYmFsX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1IpOworCisJaWYgKHBm aWxlID09IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBnbG9iYWwuZGF0IGZpbGU6 IFwiJXNcIiIsIGdsb2JhbF9maWxlX3BhdGgpOworCisJLyoKKwkgKiBJZiBvdXRmaWxlIGlzIGdp dmVuLCB0aGVuIGp1c3QgY29weSBhbGwgZ2xvYmFsLmRhdCBmaWxlIGRhdGEgaW50bworCSAqIG91 dGZpbGUuCisJICovCisJaWYgKG91dGZpbGUpCisJeworCQljb3B5X29yX3ByaW50X2dsb2JhbF9m aWxlKG91dGZpbGUsIHBmaWxlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSW5pdCBzcWxzdGF0 ZW1lbnQgdG8gYXBwZW5kIGNvbW1hbmRzLiAqLworCWluaXRTdHJpbmdJbmZvKCZzcWxzdGF0ZW1l bnQpOworCisJLyogUHJvY2VzcyBmaWxlIHRpbGwgRU9GIGFuZCBleGVjdXRlIHNxbCBzdGF0ZW1l bnRzLiAqLworCXdoaWxlIChSZWFkT25lU3RhdGVtZW50KCZzcWxzdGF0ZW1lbnQsIHBmaWxlKSAh PSBFT0YpCisJeworCQlwZ19sb2dfaW5mbygiZXhlY3V0aW5nIHF1ZXJ5OiAlcyIsIHNxbHN0YXRl bWVudC5kYXRhKTsKKwkJcmVzdWx0ID0gUFFleGVjKGNvbm4sIHNxbHN0YXRlbWVudC5kYXRhKTsK KworCQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkpCisJCXsKKwkJCWNhc2UgUEdSRVNf Q09NTUFORF9PSzoKKwkJCWNhc2UgUEdSRVNfVFVQTEVTX09LOgorCQkJY2FzZSBQR1JFU19FTVBU WV9RVUVSWToKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbl9lcnJvcnMrKzsKKwkJCQlw Z19sb2dfZXJyb3IoImNvdWxkIG5vdCBleGVjdXRlIHF1ZXJ5OiBcIiVzXCIgXG5Db21tYW5kIHdh czogXCIlc1wiIiwgUFFlcnJvck1lc3NhZ2UoY29ubiksIHNxbHN0YXRlbWVudC5kYXRhKTsKKwkJ fQorCQlQUWNsZWFyKHJlc3VsdCk7CisJfQorCisJLyogUHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9y ZWQgZXJyb3JzIGR1cmluZyBnbG9iYWwuZGF0LiAqLworCWlmIChuX2Vycm9ycykKKwkJcGdfbG9n X3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIGdsb2JhbC5kYXQgZmlsZSByZXN0b3JlOiAlZCIs IG5fZXJyb3JzKTsKKworCWZjbG9zZShwZmlsZSk7CisKKwlyZXR1cm4gbl9lcnJvcnM7Cit9CisK Ky8qCisgKiBjb3B5X29yX3ByaW50X2dsb2JhbF9maWxlCisgKgorICogVGhpcyB3aWxsIGNvcHkg Z2xvYmFsLmRhdCBmaWxlIGludG8gb3V0IGZpbGUuICBJZiAiLSIgaXMgdXNlZCBhcyBvdXRmaWxl LAorICogdGhlbiBwcmludCBjb21tYW5kcyB0byB0aGUgc3Rkb3V0LgorICovCitzdGF0aWMgdm9p ZAorY29weV9vcl9wcmludF9nbG9iYWxfZmlsZShjb25zdCBjaGFyICpvdXRmaWxlLCBGSUxFICpw ZmlsZSkKK3sKKwljaGFyCW91dF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwlGSUxFCSpPUEY7CisJ aW50CQljOworCisJLyogIi0iIGlzIHVzZWQgZm9yIHN0ZG91dC4gKi8KKwlpZiAoc3RyY21wKG91 dGZpbGUsICItIikgPT0gMCkKKwkJT1BGID0gc3Rkb3V0OworCWVsc2UKKwl7CisJCXNucHJpbnRm KG91dF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzIiwgb3V0ZmlsZSk7CisJCU9QRiA9IGZvcGVu KG91dF9maWxlX3BhdGgsIFBHX0JJTkFSWV9XKTsKKworCQlpZiAoT1BGID09IE5VTEwpCisJCXsK KwkJCWZjbG9zZShwZmlsZSk7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZTogXCIl c1wiIiwgb3V0ZmlsZSk7CisJCX0KKwl9CisKKwkvKiBBcHBlbmQgZ2xvYmFsLmRhdCBpbnRvIG91 dCBmaWxlIG9yIHByaW50IHRvIHRoZSBzdGRvdXQuICovCisJd2hpbGUgKChjID0gZmdldGMocGZp bGUpKSAhPSBFT0YpCisJCWZwdXRjKGMsIE9QRik7CisKKwlmY2xvc2UocGZpbGUpOworCisJLyog Q2xvc2Ugb3V0IGZpbGUuICovCisJaWYgKHN0cmNtcChvdXRmaWxlLCAiLSIpICE9IDApCisJCWZj bG9zZShPUEYpOworfQorCisvKgorICogc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZAorICoKKyAq IGFwcGVuZHMgYSBub2RlIHRvIHRoZSBsaXN0IGluIHRoZSBlbmQuCisgKi8KK3N0YXRpYyB2b2lk CitzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwg T2lkIGRiX29pZCwKKwkJY29uc3QgY2hhciAqZGJuYW1lKQoreworCVNpbXBsZURhdGFiYXNlT2lk TGlzdENlbGwgKmNlbGw7CisKKwljZWxsID0gcGdfbWFsbG9jX29iamVjdChTaW1wbGVEYXRhYmFz ZU9pZExpc3RDZWxsKTsKKworCWNlbGwtPm5leHQgPSBOVUxMOworCWNlbGwtPmRiX29pZCA9IGRi X29pZDsKKwljZWxsLT5kYl9uYW1lID0gcGdfc3RyZHVwKGRibmFtZSk7CisKKwlpZiAobGlzdC0+ dGFpbCkKKwkJbGlzdC0+dGFpbC0+bmV4dCA9IGNlbGw7CisJZWxzZQorCQlsaXN0LT5oZWFkID0g Y2VsbDsKKwlsaXN0LT50YWlsID0gY2VsbDsKK30KKworLyoKKyAqIHNpbXBsZV9kYl9vaWRfZnVs bF9saXN0X2RlbGV0ZQorICoKKyAqIGRlbGV0ZSBhbGwgY2VsbCBmcm9tIGRibmFtZSBhbmQgZGJv aWQgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9kYl9vaWRfZnVsbF9saXN0X2RlbGV0 ZShTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QpCit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0 Q2VsbAkqY2VsbCA9IGxpc3QtPmhlYWQ7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqbmV4 dGNlbGwgPSBOVUxMOworCisJd2hpbGUgKGNlbGwpCisJeworCQluZXh0Y2VsbCA9IGNlbGwtPm5l eHQ7CisJCXBmcmVlIChjZWxsKTsKKwkJY2VsbCA9IG5leHRjZWxsOworCX0KKworCWxpc3QtPmhl YWQgPSBOVUxMOworCWxpc3QtPnRhaWwgPSBOVUxMOworfQorCisvKgorICogc2ltcGxlX3N0cmlu Z19mdWxsX2xpc3RfZGVsZXRlCisgKgorICogZGVsZXRlIGFsbCBjZWxsIGZyb20gc3RyaW5nIGxp c3QuCisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoU2lt cGxlU3RyaW5nTGlzdCAqbGlzdCkKK3sKKwlTaW1wbGVTdHJpbmdMaXN0Q2VsbAkqY2VsbCA9IGxp c3QtPmhlYWQ7CisJU2ltcGxlU3RyaW5nTGlzdENlbGwgICAgKmNlbGxuZXh0ID0gTlVMTDsKKwor CXdoaWxlIChjZWxsKQorCXsKKwkJY2VsbG5leHQgPSBjZWxsLT5uZXh0OworCQlwZnJlZShjZWxs KTsKKwkJY2VsbCA9IGNlbGxuZXh0OworCX0KKworCWxpc3QtPmhlYWQgPSBOVUxMOworCWxpc3Qt PnRhaWwgPSBOVUxMOworfQorCisvKgorICogc2ltcGxlX2RiX29pZF9saXN0X2RlbGV0ZQorICoK KyAqIGRlbGV0ZSBjZWxsIGZyb20gZGF0YWJhc2UgYW5kIG9pZCBsaXN0LgorICovCitzdGF0aWMg dm9pZAorc2ltcGxlX2RiX29pZF9saXN0X2RlbGV0ZShTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxp c3QsCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKmNlbGwsCisJCVNpbXBsZURhdGFiYXNl T2lkTGlzdENlbGwgKnByZXYpCit7CisJaWYgKHByZXYgPT0gTlVMTCkKKwl7CisJCWxpc3QtPmhl YWQgPSBjZWxsLT5uZXh0OworCQlwZnJlZShjZWxsKTsKKwl9CisJZWxzZQorCXsKKwkJcHJldi0+ bmV4dCA9IGNlbGwtPm5leHQ7CisJCXBmcmVlKGNlbGwpOworCX0KK30KKworLyoKKyAqIHF1b3Rl X2xpdGVyYWxfaW50ZXJuYWwKKyAqLworc3RhdGljIHNpemVfdAorcXVvdGVfbGl0ZXJhbF9pbnRl cm5hbChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbikKK3sKKwljb25zdCBj aGFyICpzOworCWNoYXIJICAgKnNhdmVkc3QgPSBkc3Q7CisKKwlmb3IgKHMgPSBzcmM7IHMgPCBz cmMgKyBsZW47IHMrKykKKwl7CisJCWlmICgqcyA9PSAnXFwnKQorCQl7CisJCQkqZHN0KysgPSBF U0NBUEVfU1RSSU5HX1NZTlRBWDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJKmRzdCsrID0gJ1wn JzsKKwl3aGlsZSAobGVuLS0gPiAwKQorCXsKKwkJaWYgKFNRTF9TVFJfRE9VQkxFKCpzcmMsIHRy dWUpKQorCQkJKmRzdCsrID0gKnNyYzsKKwkJKmRzdCsrID0gKnNyYysrOworCX0KKwkqZHN0Kysg PSAnXCcnOworCisJcmV0dXJuIGRzdCAtIHNhdmVkc3Q7Cit9CisKKy8qCisgKiBxdW90ZV9saXRl cmFsX2NzdHIKKyAqCisgKgkgIHJldHVybnMgYSBwcm9wZXJseSBxdW90ZWQgbGl0ZXJhbAorICog Y29waWVkIGZyb20gc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3F1b3RlLmMKKyAqLworc3RhdGljIGNo YXIgKgorcXVvdGVfbGl0ZXJhbF9jc3RyKGNvbnN0IGNoYXIgKnJhd3N0cikKK3sKKwljaGFyCSAg ICpyZXN1bHQ7CisJaW50CQkJbGVuOworCWludAkJCW5ld2xlbjsKKworCWxlbiA9IHN0cmxlbihy YXdzdHIpOworCisJLyogV2UgbWFrZSBhIHdvcnN0LWNhc2UgcmVzdWx0IGFyZWE7IHdhc3Rpbmcg YSBsaXR0bGUgc3BhY2UgaXMgT0sgKi8KKwlyZXN1bHQgPSBwZ19tYWxsb2MobGVuICogMiArIDMg KyAxKTsKKworCW5ld2xlbiA9IHF1b3RlX2xpdGVyYWxfaW50ZXJuYWwocmVzdWx0LCByYXdzdHIs IGxlbik7CisJcmVzdWx0W25ld2xlbl0gPSAnXDAnOworCisJcmV0dXJuIHJlc3VsdDsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4vcGdfZHVt cC90LzAwMV9iYXNpYy5wbApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDM3 ZDg5M2Q1ZTZhLi4wYmJjZGJlODRhNwotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMu cGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCkBAIC0yMzcsNiArMjM3LDEx IEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAkncGdfcmVzdG9yZTogb3B0aW9ucyAtQ1wvLS1jcmVh dGUgYW5kIC0xXC8tLXNpbmdsZS10cmFuc2FjdGlvbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcicK ICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19yZXN0b3JlJywgJy0tZXhjbHVkZS1k YXRhYmFzZT1mb28nLCAnLS1nbG9iYWxzLW9ubHknLCAnLWQnLCAneHh4JyBdLAorCXFyL1xRcGdf cmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQg dG9nZXRoZXIgd2l0aCAtZ1wvLS1nbG9iYWxzLW9ubHlcRS8sCisJJ3BnX3Jlc3RvcmU6IG9wdGlv biAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWds b2JhbHMtb25seScpOworCiAjIGFsc28gZmFpbHMgZm9yIC1yIGFuZCAtdCwgYnV0IGl0IHNlZW1z IHBvaW50bGVzcyB0byBhZGQgbW9yZSB0ZXN0cyBmb3IgdGhvc2UuCiBjb21tYW5kX2ZhaWxzX2xp a2UoCiAJWyAncGdfZHVtcGFsbCcsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFs cy1vbmx5JyBdLApAQCAtMjQ0LDQgKzI0OSw4IEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAkncGdf ZHVtcGFsbDogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhl ciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5JwogKTsKIAorY29tbWFuZF9mYWlsc19saWtlKAorCVsg J3BnX2R1bXBhbGwnLCAnLS1mb3JtYXQnLCAneCcgXSwKKwlxci9cUXBnX2R1bXBhbGw6IGVycm9y OiB1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQgIngiO1xFLywKKwkncGdfZHVtcGFsbDogdW5y ZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0Jyk7CiBkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKaW5kZXggZGZlMjY5MGJkZDMuLmE5MjJkOTgzNTE0IDEwMDY0NAotLS0gYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdApAQCAtMjY5Nyw2ICsyNjk3LDggQEAgU2h1dGRvd25Nb2RlCiBTaWduVFNW ZWN0b3IKIFNpbXBsZUFjdGlvbkxpc3QKIFNpbXBsZUFjdGlvbkxpc3RDZWxsCitTaW1wbGVEYXRh YmFzZU9pZExpc3QKK1NpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwKIFNpbXBsZUVjb250ZXh0U3Rh Y2tFbnRyeQogU2ltcGxlT2lkTGlzdAogU2ltcGxlT2lkTGlzdENlbGwKLS0gCjIuMzkuMwoK --00000000000097c8a5063012eb42--