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.96) (envelope-from ) id 1wRaYj-002Uh1-2m for pgsql-hackers@arkaria.postgresql.org; Mon, 25 May 2026 19:01:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wRaYh-001vfH-2U for pgsql-hackers@arkaria.postgresql.org; Mon, 25 May 2026 19:01:52 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wRaYh-001vf9-0l for pgsql-hackers@lists.postgresql.org; Mon, 25 May 2026 19:01:52 +0000 Received: from mail-vs1-xe33.google.com ([2607:f8b0:4864:20::e33]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wRaYg-00000000k73-158Q for pgsql-hackers@lists.postgresql.org; Mon, 25 May 2026 19:01:51 +0000 Received: by mail-vs1-xe33.google.com with SMTP id ada2fe7eead31-6314adf187fso3117611137.0 for ; Mon, 25 May 2026 12:01:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779735709; cv=none; d=google.com; s=arc-20240605; b=E17sto9Yr8QBvIdOVCptRgzEch8yTgZ/Net6ndoJnzmhIDTu281tVNEuDFYW9k3WXh 2vSq+ZF+4H38yYXx2A02khY2MqEhuSiaVCljna+dIc6Djp8UcbAmlMcSvH6oaF4Zk1T2 j/WfTEp5Ol4BHx1m/bKqkIX/tNtN9wH+nZi1AbHOBLw64kTeCFNBEaJBwxj0/7j5eKdc Oc4tFcstyc8daRIWzeNJOueA4ffp9OwMTgbn5MANzVJwhx99uYSy5PEahbaFiOssPTDn wHebyXKYMx1cO2CfUgBv272QK0UMMHT0OYgp9jhfisffL9ztFQwRhaxOgc1tYNM+8hcc 8VZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=wfGDX4IYcHrbiM9lfz/q2EjFAZdj7q9M5OoDfOHVSPQ=; fh=6eQeXUi+JW41WuEIfisVNRCDN4dzRdWF/OhDKPaLCAk=; b=RuV6+274msDOxSBvATXnD+mi8mOHXl9RUK3QJCmY/u/AGQSJusXVYBOy+R1UuyVS2z 4Y7rN6ucNMIO+IHg3xWUPr5Jc+V417HB1BPjF+rA/gV610TCAPmmDIvIiNjNXlcM/pr7 juN99MFAwbs3pXE6JQfLjChHCg8FPdzOz0TSeyICh80qKI4SbeHcLs3vX0JCxnz5jX7y Z5XPVPduinAdXk1RuIsZAngA7/DMt3DpcAaYRoWYwSSgHlEdhGU07IKpmtYb66VguG+R 2Q3LqilcVhVMSOi3vVY+iGVTOYFyoPFPXO5EKIEsoqyBazrbbzfWhfX0eiJk2fryrKKv anZQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779735709; x=1780340509; 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=wfGDX4IYcHrbiM9lfz/q2EjFAZdj7q9M5OoDfOHVSPQ=; b=ovYbJt2rCN3ZDb7w9dpCHGrX62bI+zv8pUTrC62Cp/GKcrjvXsc6d3M0xJkE+U31yT CLgag4UYygXE/YRUsBsI4elxygsGyrdFO1283+MEoE7hJs3fcBNCwY1MXFqd6aMq+iqS r5xOcV0qhSsWyKcA1PCXv0b1P7+36FdOBb/Eh1dfLKkby7lcRu9OOvydfXKXM1RjIINn ho3kRAN9hNS3ERHdrgOI6zs6avDybvvWTpl6X5AunNI73USDNm8+X0MV5egdaIq99+Dd +sHHdPKKq2TkX+5AnA0hqF5nliIG1Es8c8hmJTztreexkSbqTK3gZWexO4F6/Py8hrYk C9UQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779735709; x=1780340509; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=wfGDX4IYcHrbiM9lfz/q2EjFAZdj7q9M5OoDfOHVSPQ=; b=YG5ZhHmzvHeHOhO4oGczuA7zAU1pkNwq04q2F0NRBcXAjSMMAP06hB5s3Hb4kHnrOn JlIXkMHgeM4wT56v7lgScXnZ+XwQVSqVQlVHqh17d/5TM9p/2s1b+/VJthYnIcPFIWvO uIZpEbND8cWDjcT21uYYnUOxefbYT80vRDRt4zcprMlp35UespafMyjQtMc8R4AO9qeP kSWCYjdKHhE7f3vdIe7QYFGQ64MecUEigYXAGWQJvaNFxoqUcO5mGAdg7AwcToEXxPl6 ETPlG/sm5IwRAVQatmE7PL0iRSwtlgR4UNe/k2PpxjFbHcCF28TbKS9zIoWF2z71EXJN dzEw== X-Forwarded-Encrypted: i=1; AFNElJ/DnZPt0EdWNAkae+oEYLOofRmKGEhPdWRBv1Ykki3Ix3icEhXH6KKZBx8Z2xxYJvThZkgSL0aYPNV+PVH/@lists.postgresql.org X-Gm-Message-State: AOJu0YyxzsvH7Sr7WZu5qyQSa5RSEqBpetJq+35fvWq9o9+OWsI2m4uR DKCJAIwTBJUnaTOXThFfHXp/vNBNGp5RdwUN8aS/rOR4Yi+d+nAhPpL0GVLJYvBIAdNlGkHrBEK wYE4JNriRB1w1PY+J095tTsqtzRn7+8Q= X-Gm-Gg: Acq92OHvasXC/Pp5kWO+Mdl9S0JCSGVwwmF0O3rA70Y7JohdSJqTDMIHIhK260JR4/M dTN7ZMXrzdpb2jjrxR9MFF7HHhNDz2xweGfjZzWw7Gmna6tVXymLpD9yMj44VUkDJvG8ReOHffY p8R9Elg2WYQCwj+YGPT+MGConr0fU+nC0O7kTB60hfTWnJ44Dk8o9VfagRcy8sJxYIQqxYv19yC 5gM72v6u82nt9yxONTLmkZLTgMYEtMv/c6HFhVJZFmSdTRh2XBi7HZ0Un/fRetZrnO9k7WyNWtS v8dlLYU= X-Received: by 2002:a05:6102:2c13:b0:62f:4553:7a28 with SMTP id ada2fe7eead31-67c8dbf6c45mr6734395137.21.1779735709143; Mon, 25 May 2026 12:01:49 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: SATYANARAYANA NARLAPURAM Date: Mon, 25 May 2026 12:01:37 -0700 X-Gm-Features: AVHnY4LGqNSm8pPM4G5Blq4wBOEcVcGgsePsPHUHAL-Msjqcp62zBSG7ZSTsdA4 Message-ID: Subject: Re: [PATCH] Release replication slot on error in SQL-callable slot functions To: shveta malik Cc: vignesh C , Fujii Masao , PostgreSQL Hackers , shveta malik Content-Type: multipart/mixed; boundary="000000000000bd35a30652a90249" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000bd35a30652a90249 Content-Type: multipart/alternative; boundary="000000000000bd35a30652a90247" --000000000000bd35a30652a90247 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Mon, May 25, 2026 at 2:58=E2=80=AFAM shveta malik wrote: > On Mon, May 25, 2026 at 12:42=E2=80=AFPM SATYANARAYANA NARLAPURAM > wrote: > > > > Hi > > > > On Fri, May 22, 2026 at 2:16=E2=80=AFAM shveta malik > wrote: > >> > >> Thanks for reporting the issue. I could reproduce the same issue with > >> all these as well: > >> > >> pg_logical_slot_peek_changes > >> pg_logical_slot_get_binary_changes > >> pg_logical_slot_peek_binary_changes > > > > > > Please find the attached v2 patch that addressed these three cases as > well. > > > > Thank You for addressuing these cases. A few comments: > > 1) > > +-- Test 2: session remains usable after the error (MyReplicationSlot > cleared) > > It shoudl be part of 'Test 1' itself and thus should not be named as 'Tes= t > 2' > > 2) > -------- > +-- Test 4: copy_replication_slot with max_replication_slots exceeded. > +-- We reduce max_replication_slots artificially by filling all remaining > slots. > +-- Instead, trigger an error by copying to an already-existing name. > +DO $$ > +BEGIN > + PERFORM pg_copy_logical_replication_slot('regression_slot_t3', > 'regression_slot_t3'); > +EXCEPTION WHEN OTHERS THEN > + RAISE NOTICE 'caught: %', SQLERRM; > +END; > +$$; > +-- The original slot must still exist and be usable > +SELECT count(*) =3D 1 AS orig_slot_ok FROM pg_replication_slots > + WHERE slot_name =3D 'regression_slot_t3'; > ----------- > > I don't think we can hit the Assert with above test (at-least I could > not). Since creation of slot itself will fail as the slot with > same-name already exists, MyReplicationSlot will never be set and thus > Assert will not be hit. A better testcase will be below which fails > during LoadOutputPlugin() after slot-creation and MyReplicationSlot is > set already. > > SELECT pg_create_logical_replication_slot('src_slot', 'test_decoding'); > > DO $$ > BEGIN > PERFORM pg_copy_logical_replication_slot('src_slot', 'dst_slot', > false, 'nonexistent_plugin'); > EXCEPTION WHEN others THEN > RAISE NOTICE 'caught: %', SQLERRM; > END $$; > > SELECT count(*) FROM pg_logical_slot_get_changes('src_slot', NULL, NULL); > > 3) > So overall these are the problematic APIs: > > pg_create_logical_replication_slot > pg_replication_slot_advance > pg_copy_logical_replication_slot > pg_logical_slot_peek_binary_changes > pg_logical_slot_peek_changes > pg_logical_slot_get_changes > pg_logical_slot_get_binary_changes > > First 3 are are mutually exclusive fixes fow which we have added > testcases. Last 4 are addressed by fixing common function > pg_logical_slot_get_changes_guts(). I think we should add a test case > for at-least any one of these APIs to cover > pg_logical_slot_get_changes_guts(). > Thanks for reviewing. Please review the attached v3 patch. Thanks, Satya --000000000000bd35a30652a90247 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

On Mon, May 25, = 2026 at 2:58=E2=80=AFAM shveta malik <shveta.malik@gmail.com> wrote:
On Mon, May 25, 2026 at 12:42=E2=80=AFPM SATY= ANARAYANA NARLAPURAM
<satyanar= lapuram@gmail.com> wrote:
>
> Hi
>
> On Fri, May 22, 2026 at 2:16=E2=80=AFAM shveta malik <shveta.malik@gmail.com&g= t; wrote:
>>
>> Thanks for reporting the issue. I could reproduce the same issue w= ith
>> all these as well:
>>
>> pg_logical_slot_peek_changes
>> pg_logical_slot_get_binary_changes
>> pg_logical_slot_peek_binary_changes
>
>
> Please find the attached v2 patch that addressed these three cases as = well.
>

Thank You for addressuing these cases. A few comments:

1)

+-- Test 2: session remains usable after the error (MyReplicationSlot clear= ed)

It shoudl be part of 'Test 1' itself and thus should not be named a= s 'Test 2'

2)
--------
+-- Test 4: copy_replication_slot with max_replication_slots exceeded.
+-- We reduce max_replication_slots artificially by filling all remaining s= lots.
+-- Instead, trigger an error by copying to an already-existing name.
+DO $$
+BEGIN
+=C2=A0 =C2=A0 PERFORM pg_copy_logical_replication_slot('regression_slo= t_t3',
'regression_slot_t3');
+EXCEPTION WHEN OTHERS THEN
+=C2=A0 =C2=A0 RAISE NOTICE 'caught: %', SQLERRM;
+END;
+$$;
+-- The original slot must still exist and be usable
+SELECT count(*) =3D 1 AS orig_slot_ok FROM pg_replication_slots
+=C2=A0 =C2=A0 WHERE slot_name =3D 'regression_slot_t3';
-----------

I don't think we can hit the Assert with above test (at-least I could not). Since creation of slot itself will fail as the slot with
same-name already exists, MyReplicationSlot will never be set and thus
Assert will not be hit.=C2=A0 A better testcase will be below which fails during LoadOutputPlugin() after slot-creation and MyReplicationSlot is
set already.

SELECT pg_create_logical_replication_slot('src_slot', 'test_dec= oding');

DO $$
BEGIN
PERFORM pg_copy_logical_replication_slot('src_slot', 'dst_slot&= #39;,
false, 'nonexistent_plugin');
EXCEPTION WHEN others THEN
RAISE NOTICE 'caught: %', SQLERRM;
END $$;

SELECT count(*) FROM pg_logical_slot_get_changes('src_slot', NULL, = NULL);

3)
So overall these are the problematic APIs:

pg_create_logical_replication_slot
pg_replication_slot_advance
pg_copy_logical_replication_slot
pg_logical_slot_peek_binary_changes
pg_logical_slot_peek_changes
pg_logical_slot_get_changes
pg_logical_slot_get_binary_changes

First 3 are are mutually exclusive fixes fow which we have added
testcases. Last 4 are addressed by fixing common function
pg_logical_slot_get_changes_guts(). I think we should add a test case
for at-least any one of these APIs to cover
pg_logical_slot_get_changes_guts().

Tha= nks for reviewing. Please review the attached v3 patch.

Thanks,
Satya=C2=A0
--000000000000bd35a30652a90247-- --000000000000bd35a30652a90249 Content-Type: application/octet-stream; name="v3-0001-Release-replication-slot-on-error-in-slot-SQL-functions.patch" Content-Disposition: attachment; filename="v3-0001-Release-replication-slot-on-error-in-slot-SQL-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mplkoja50 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9zbG90Lm91dCBiL2Nv bnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9zbG90Lm91dAppbmRleCA3ZGUwM2M3OWY2Zi4u OTYyYTQyNzdiNzUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9z bG90Lm91dAorKysgYi9jb250cmliL3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQvc2xvdC5vdXQKQEAg LTQ2NiwzICs0NjYsMTIyIEBAIFNFTEVDVCBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJ3BoeXNp Y2FsX3Nsb3QnKTsKICAKICgxIHJvdykKIAorLS0KKy0tIFRlc3QgdGhhdCByZXBsaWNhdGlvbiBz bG90cyBhcmUgcHJvcGVybHkgcmVsZWFzZWQgb3IgZHJvcHBlZCBvbiBlcnJvciwKKy0tIGV2ZW4g d2hlbiB0aGUgZXJyb3IgaXMgY2F1Z2h0IGJ5IGEgUEwvcGdTUUwgRVhDRVBUSU9OIGhhbmRsZXIg KHdoaWNoCistLSBkb2Vzbid0IHRlcm1pbmF0ZSB0aGUgc2Vzc2lvbikuCistLQorLS0gcGdfY3Jl YXRlX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdDogZXJyb3IgZHVyaW5nIHNsb3QgY3JlYXRpb24g c2hvdWxkCistLSBkcm9wIHRoZSBzbG90LgorRE8gJCQKK0JFR0lOCisgICAgUEVSRk9STSBwZ19j cmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCdyZWdyZXNzaW9uX3Nsb3RfZXJyb3InLCAn bm9uZXhpc3RlbnRfcGx1Z2luX3h5eicsIHRydWUpOworRVhDRVBUSU9OIFdIRU4gT1RIRVJTIFRI RU4KKyAgICBSQUlTRSBOT1RJQ0UgJ2NhdWdodDogJScsIFNRTEVSUk07CitFTkQ7CiskJDsKK05P VElDRTogIGNhdWdodDogY291bGQgbm90IGFjY2VzcyBmaWxlICJub25leGlzdGVudF9wbHVnaW5f eHl6IjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorU0VMRUNUIGNvdW50KCopID0gMCBBUyBz bG90X3dhc19kcm9wcGVkIEZST00gcGdfcmVwbGljYXRpb25fc2xvdHMKKyAgICBXSEVSRSBzbG90 X25hbWUgPSAncmVncmVzc2lvbl9zbG90X2Vycm9yJzsKKyBzbG90X3dhc19kcm9wcGVkIAorLS0t LS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgJ2luaXQnIEZST00gcGdfY3Jl YXRlX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdCgncmVncmVzc2lvbl9zbG90X3QzJywgJ3Rlc3Rf ZGVjb2RpbmcnLCB0cnVlKTsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyBpbml0CisoMSByb3cp CisKK1NFTEVDVCBjb3VudCgqKSA9IDEgQVMgc2xvdF9leGlzdHMgRlJPTSBwZ19yZXBsaWNhdGlv bl9zbG90cworICAgIFdIRVJFIHNsb3RfbmFtZSA9ICdyZWdyZXNzaW9uX3Nsb3RfdDMnOworIHNs b3RfZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gcGdfcmVwbGljYXRp b25fc2xvdF9hZHZhbmNlOiBlcnJvciBhZnRlciBhY3F1aXJpbmcgdGhlIHNsb3Qgc2hvdWxkCist LSByZWxlYXNlIGl0IHNvIHRoZSBzZXNzaW9uIHN0YXlzIHVzYWJsZS4KK1NFTEVDVCBzbG90X25h bWUgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UoJ3JlZ3Jlc3Npb25fc2xvdF90Mycs IHBnX2N1cnJlbnRfd2FsX2xzbigpKTsKKyAgICAgc2xvdF9uYW1lICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLQorIHJlZ3Jlc3Npb25fc2xvdF90MworKDEgcm93KQorCitETyAkJAorQkVHSU4K KyAgICBQRVJGT1JNIHBnX3JlcGxpY2F0aW9uX3Nsb3RfYWR2YW5jZSgncmVncmVzc2lvbl9zbG90 X3QzJywgJzAvMScpOworRVhDRVBUSU9OIFdIRU4gT1RIRVJTIFRIRU4KKyAgICBSQUlTRSBOT1RJ Q0UgJ2NhdWdodCBleHBlY3RlZCBlcnJvcic7CitFTkQ7CiskJDsKK05PVElDRTogIGNhdWdodCBl eHBlY3RlZCBlcnJvcgorLS0gdGhlIHNlc3Npb24gaXMgc3RpbGwgaGVhbHRoeQorU0VMRUNUIHNs b3RfbmFtZSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RfYWR2YW5jZSgncmVncmVzc2lvbl9zbG90 X3QzJywgcGdfY3VycmVudF93YWxfbHNuKCkpOworICAgICBzbG90X25hbWUgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tCisgcmVncmVzc2lvbl9zbG90X3QzCisoMSByb3cpCisKKy0tIHBnX2Nv cHlfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90OiBlcnJvciBhZnRlciBjcmVhdGluZyB0aGUgZGVz dGluYXRpb24KKy0tIHNsb3Qgc2hvdWxkIGRyb3AgaXQuCitETyAkJAorQkVHSU4KKyAgICBQRVJG T1JNIHBnX2NvcHlfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCdyZWdyZXNzaW9uX3Nsb3RfdDMn LCAncmVncmVzc2lvbl9zbG90X2RzdCcsIGZhbHNlLCAnbm9uZXhpc3RlbnRfcGx1Z2luX3h5eicp OworRVhDRVBUSU9OIFdIRU4gT1RIRVJTIFRIRU4KKyAgICBSQUlTRSBOT1RJQ0UgJ2NhdWdodDog JScsIFNRTEVSUk07CitFTkQ7CiskJDsKK05PVElDRTogIGNhdWdodDogY291bGQgbm90IGFjY2Vz cyBmaWxlICJub25leGlzdGVudF9wbHVnaW5feHl6IjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9y eQorLS0gdGhlIGRlc3RpbmF0aW9uIHNsb3QgbXVzdCBub3QgZXhpc3QgKGl0IHdhcyBkcm9wcGVk IG9uIGVycm9yKQorU0VMRUNUIGNvdW50KCopID0gMCBBUyBkc3Rfc2xvdF9kcm9wcGVkIEZST00g cGdfcmVwbGljYXRpb25fc2xvdHMKKyAgICBXSEVSRSBzbG90X25hbWUgPSAncmVncmVzc2lvbl9z bG90X2RzdCc7CisgZHN0X3Nsb3RfZHJvcHBlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygx IHJvdykKKworLS0gdGhlIHNlc3Npb24gaXMgc3RpbGwgdXNhYmxlCitTRUxFQ1QgY291bnQoKikg Pj0gMCBBUyBjaGFuZ2VzX29rIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdy ZXNzaW9uX3Nsb3RfdDMnLCBOVUxMLCBOVUxMKTsKKyBjaGFuZ2VzX29rIAorLS0tLS0tLS0tLS0t CisgdAorKDEgcm93KQorCistLSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXM6IGVycm9yIGFm dGVyIGFjcXVpcmluZyB0aGUgc2xvdCBzaG91bGQKKy0tIHJlbGVhc2UgaXQuCitTRUxFQ1QgJ2lu aXQnIEZST00gcGdfY3JlYXRlX3BoeXNpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoJ3JlZ3Jlc3Npb25f c2xvdF9waHknLCB0cnVlKTsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyBpbml0CisoMSByb3cp CisKK0RPICQkCitCRUdJTgorICAgIFBFUkZPUk0gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2Vz KCdyZWdyZXNzaW9uX3Nsb3RfcGh5JywgTlVMTCwgTlVMTCk7CitFWENFUFRJT04gV0hFTiBPVEhF UlMgVEhFTgorICAgIFJBSVNFIE5PVElDRSAnY2F1Z2h0OiAlJywgU1FMRVJSTTsKK0VORDsKKyQk OworTk9USUNFOiAgY2F1Z2h0OiBjYW5ub3QgdXNlIHBoeXNpY2FsIHJlcGxpY2F0aW9uIHNsb3Qg Zm9yIGxvZ2ljYWwgZGVjb2RpbmcKKy0tIHRoZSBzZXNzaW9uIGlzIHN0aWxsIHVzYWJsZQorU0VM RUNUIHNsb3RfbmFtZSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RfYWR2YW5jZSgncmVncmVzc2lv bl9zbG90X3QzJywgcGdfY3VycmVudF93YWxfbHNuKCkpOworICAgICBzbG90X25hbWUgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tCisgcmVncmVzc2lvbl9zbG90X3QzCisoMSByb3cpCisKK1NF TEVDVCBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJ3JlZ3Jlc3Npb25fc2xvdF9waHknKTsKKyBw Z19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCistLSBjbGVhbnVwCitTRUxFQ1QgcGdfZHJvcF9yZXBsaWNhdGlvbl9zbG90KCdy ZWdyZXNzaW9uX3Nsb3RfdDMnKTsKKyBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9jb250cmliL3Rl c3RfZGVjb2Rpbmcvc3FsL3Nsb3Quc3FsIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL3NxbC9zbG90 LnNxbAppbmRleCA1ODBlM2FlM2JlZi4uMWIzMjdmNTE4YWEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv dGVzdF9kZWNvZGluZy9zcWwvc2xvdC5zcWwKKysrIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL3Nx bC9zbG90LnNxbApAQCAtMTkwLDMgKzE5MCw3MCBAQCBTRUxFQ1QgcGdfZHJvcF9yZXBsaWNhdGlv bl9zbG90KCdmYWlsb3Zlcl90cnVlX3Nsb3QnKTsKIFNFTEVDVCBwZ19kcm9wX3JlcGxpY2F0aW9u X3Nsb3QoJ2ZhaWxvdmVyX2ZhbHNlX3Nsb3QnKTsKIFNFTEVDVCBwZ19kcm9wX3JlcGxpY2F0aW9u X3Nsb3QoJ2ZhaWxvdmVyX2RlZmF1bHRfc2xvdCcpOwogU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRp b25fc2xvdCgncGh5c2ljYWxfc2xvdCcpOworCistLQorLS0gVGVzdCB0aGF0IHJlcGxpY2F0aW9u IHNsb3RzIGFyZSBwcm9wZXJseSByZWxlYXNlZCBvciBkcm9wcGVkIG9uIGVycm9yLAorLS0gZXZl biB3aGVuIHRoZSBlcnJvciBpcyBjYXVnaHQgYnkgYSBQTC9wZ1NRTCBFWENFUFRJT04gaGFuZGxl ciAod2hpY2gKKy0tIGRvZXNuJ3QgdGVybWluYXRlIHRoZSBzZXNzaW9uKS4KKy0tCisKKy0tIHBn X2NyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3Q6IGVycm9yIGR1cmluZyBzbG90IGNyZWF0 aW9uIHNob3VsZAorLS0gZHJvcCB0aGUgc2xvdC4KK0RPICQkCitCRUdJTgorICAgIFBFUkZPUk0g cGdfY3JlYXRlX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdCgncmVncmVzc2lvbl9zbG90X2Vycm9y JywgJ25vbmV4aXN0ZW50X3BsdWdpbl94eXonLCB0cnVlKTsKK0VYQ0VQVElPTiBXSEVOIE9USEVS UyBUSEVOCisgICAgUkFJU0UgTk9USUNFICdjYXVnaHQ6ICUnLCBTUUxFUlJNOworRU5EOworJCQ7 CitTRUxFQ1QgY291bnQoKikgPSAwIEFTIHNsb3Rfd2FzX2Ryb3BwZWQgRlJPTSBwZ19yZXBsaWNh dGlvbl9zbG90cworICAgIFdIRVJFIHNsb3RfbmFtZSA9ICdyZWdyZXNzaW9uX3Nsb3RfZXJyb3In OworCitTRUxFQ1QgJ2luaXQnIEZST00gcGdfY3JlYXRlX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xv dCgncmVncmVzc2lvbl9zbG90X3QzJywgJ3Rlc3RfZGVjb2RpbmcnLCB0cnVlKTsKK1NFTEVDVCBj b3VudCgqKSA9IDEgQVMgc2xvdF9leGlzdHMgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cworICAg IFdIRVJFIHNsb3RfbmFtZSA9ICdyZWdyZXNzaW9uX3Nsb3RfdDMnOworCistLSBwZ19yZXBsaWNh dGlvbl9zbG90X2FkdmFuY2U6IGVycm9yIGFmdGVyIGFjcXVpcmluZyB0aGUgc2xvdCBzaG91bGQK Ky0tIHJlbGVhc2UgaXQgc28gdGhlIHNlc3Npb24gc3RheXMgdXNhYmxlLgorU0VMRUNUIHNsb3Rf bmFtZSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RfYWR2YW5jZSgncmVncmVzc2lvbl9zbG90X3Qz JywgcGdfY3VycmVudF93YWxfbHNuKCkpOworRE8gJCQKK0JFR0lOCisgICAgUEVSRk9STSBwZ19y ZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UoJ3JlZ3Jlc3Npb25fc2xvdF90MycsICcwLzEnKTsKK0VY Q0VQVElPTiBXSEVOIE9USEVSUyBUSEVOCisgICAgUkFJU0UgTk9USUNFICdjYXVnaHQgZXhwZWN0 ZWQgZXJyb3InOworRU5EOworJCQ7CistLSB0aGUgc2Vzc2lvbiBpcyBzdGlsbCBoZWFsdGh5CitT RUxFQ1Qgc2xvdF9uYW1lIEZST00gcGdfcmVwbGljYXRpb25fc2xvdF9hZHZhbmNlKCdyZWdyZXNz aW9uX3Nsb3RfdDMnLCBwZ19jdXJyZW50X3dhbF9sc24oKSk7CisKKy0tIHBnX2NvcHlfbG9naWNh bF9yZXBsaWNhdGlvbl9zbG90OiBlcnJvciBhZnRlciBjcmVhdGluZyB0aGUgZGVzdGluYXRpb24K Ky0tIHNsb3Qgc2hvdWxkIGRyb3AgaXQuCitETyAkJAorQkVHSU4KKyAgICBQRVJGT1JNIHBnX2Nv cHlfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCdyZWdyZXNzaW9uX3Nsb3RfdDMnLCAncmVncmVz c2lvbl9zbG90X2RzdCcsIGZhbHNlLCAnbm9uZXhpc3RlbnRfcGx1Z2luX3h5eicpOworRVhDRVBU SU9OIFdIRU4gT1RIRVJTIFRIRU4KKyAgICBSQUlTRSBOT1RJQ0UgJ2NhdWdodDogJScsIFNRTEVS Uk07CitFTkQ7CiskJDsKKy0tIHRoZSBkZXN0aW5hdGlvbiBzbG90IG11c3Qgbm90IGV4aXN0IChp dCB3YXMgZHJvcHBlZCBvbiBlcnJvcikKK1NFTEVDVCBjb3VudCgqKSA9IDAgQVMgZHN0X3Nsb3Rf ZHJvcHBlZCBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RzCisgICAgV0hFUkUgc2xvdF9uYW1lID0g J3JlZ3Jlc3Npb25fc2xvdF9kc3QnOworLS0gdGhlIHNlc3Npb24gaXMgc3RpbGwgdXNhYmxlCitT RUxFQ1QgY291bnQoKikgPj0gMCBBUyBjaGFuZ2VzX29rIEZST00gcGdfbG9naWNhbF9zbG90X2dl dF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3RfdDMnLCBOVUxMLCBOVUxMKTsKKworLS0gcGdfbG9n aWNhbF9zbG90X2dldF9jaGFuZ2VzOiBlcnJvciBhZnRlciBhY3F1aXJpbmcgdGhlIHNsb3Qgc2hv dWxkCistLSByZWxlYXNlIGl0LgorU0VMRUNUICdpbml0JyBGUk9NIHBnX2NyZWF0ZV9waHlzaWNh bF9yZXBsaWNhdGlvbl9zbG90KCdyZWdyZXNzaW9uX3Nsb3RfcGh5JywgdHJ1ZSk7CitETyAkJAor QkVHSU4KKyAgICBQRVJGT1JNIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygncmVncmVzc2lv bl9zbG90X3BoeScsIE5VTEwsIE5VTEwpOworRVhDRVBUSU9OIFdIRU4gT1RIRVJTIFRIRU4KKyAg ICBSQUlTRSBOT1RJQ0UgJ2NhdWdodDogJScsIFNRTEVSUk07CitFTkQ7CiskJDsKKy0tIHRoZSBz ZXNzaW9uIGlzIHN0aWxsIHVzYWJsZQorU0VMRUNUIHNsb3RfbmFtZSBGUk9NIHBnX3JlcGxpY2F0 aW9uX3Nsb3RfYWR2YW5jZSgncmVncmVzc2lvbl9zbG90X3QzJywgcGdfY3VycmVudF93YWxfbHNu KCkpOworU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgncmVncmVzc2lvbl9zbG90X3Bo eScpOworCistLSBjbGVhbnVwCitTRUxFQ1QgcGdfZHJvcF9yZXBsaWNhdGlvbl9zbG90KCdyZWdy ZXNzaW9uX3Nsb3RfdDMnKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbG9naWNhbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xv Z2ljYWxmdW5jcy5jCmluZGV4IDcxZmJhZjcyMjY5Li5hYTU2ZTkwYmZhYiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsZnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5jCkBAIC0xOTcsMTAgKzE5 NywxMCBAQCBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXNfZ3V0cyhGdW5jdGlvbkNhbGxJbmZv IGZjaW5mbywgYm9vbCBjb25maXJtLCBib29sIGJpbgogCWVsc2UKIAkJZW5kX29mX3dhbCA9IEdl dFhMb2dSZXBsYXlSZWNQdHIoTlVMTCk7CiAKLQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVT dHIoKm5hbWUpLCB0cnVlLCB0cnVlKTsKLQogCVBHX1RSWSgpOwogCXsKKwkJUmVwbGljYXRpb25T bG90QWNxdWlyZShOYW1lU3RyKCpuYW1lKSwgdHJ1ZSwgdHJ1ZSk7CisKIAkJLyogcmVzdGFydCBh dCBzbG90J3MgY29uZmlybWVkX2ZsdXNoICovCiAJCWN0eCA9IENyZWF0ZURlY29kaW5nQ29udGV4 dChJbnZhbGlkWExvZ1JlY1B0ciwKIAkJCQkJCQkJCW9wdGlvbnMsCkBAIC0zMjAsNiArMzIwLDkg QEAgcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzX2d1dHMoRnVuY3Rpb25DYWxsSW5mbyBmY2lu Zm8sIGJvb2wgY29uZmlybSwgYm9vbCBiaW4KIAkJLyogY2xlYXIgYWxsIHRpbWV0cmF2ZWwgZW50 cmllcyAqLwogCQlJbnZhbGlkYXRlU3lzdGVtQ2FjaGVzKCk7CiAKKwkJaWYgKE15UmVwbGljYXRp b25TbG90ICE9IE5VTEwpCisJCQlSZXBsaWNhdGlvblNsb3RSZWxlYXNlKCk7CisKIAkJUEdfUkVf VEhST1coKTsKIAl9CiAJUEdfRU5EX1RSWSgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vc2xvdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90ZnVuY3Mu YwppbmRleCAxNmZiZDM4MzczNS4uYWNjNjQzYWM3NDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Nsb3RmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Ns b3RmdW5jcy5jCkBAIC0xNDgsMzggKzE0OCw1NSBAQCBjcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlv bl9zbG90KGNoYXIgKm5hbWUsIGNoYXIgKnBsdWdpbiwKIAkJCQkJCSAgdGVtcG9yYXJ5ID8gUlNf VEVNUE9SQVJZIDogUlNfRVBIRU1FUkFMLCB0d29fcGhhc2UsCiAJCQkJCQkgIGZhbHNlLCBmYWls b3ZlciwgZmFsc2UpOwogCi0JLyoKLQkgKiBFbnN1cmUgdGhlIGxvZ2ljYWwgZGVjb2RpbmcgaXMg ZW5hYmxlZCBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBsb2dpY2FsCi0JICogZGVjb2RpbmcgY29u dGV4dC4KLQkgKi8KLQlFbnN1cmVMb2dpY2FsRGVjb2RpbmdFbmFibGVkKCk7Ci0JQXNzZXJ0KElz TG9naWNhbERlY29kaW5nRW5hYmxlZCgpKTsKKwlQR19UUlkoKTsKKwl7CisJCS8qCisJCSAqIEVu c3VyZSB0aGUgbG9naWNhbCBkZWNvZGluZyBpcyBlbmFibGVkIGJlZm9yZSBpbml0aWFsaXppbmcg dGhlIGxvZ2ljYWwKKwkJICogZGVjb2RpbmcgY29udGV4dC4KKwkJICovCisJCUVuc3VyZUxvZ2lj YWxEZWNvZGluZ0VuYWJsZWQoKTsKKwkJQXNzZXJ0KElzTG9naWNhbERlY29kaW5nRW5hYmxlZCgp KTsKIAotCS8qCi0JICogQ3JlYXRlIGxvZ2ljYWwgZGVjb2RpbmcgY29udGV4dCB0byBmaW5kIHN0 YXJ0IHBvaW50IG9yLCBpZiB3ZSBkb24ndAotCSAqIG5lZWQgaXQsIHRvIDEpIGJ1bXAgc2xvdCdz IHJlc3RhcnRfbHNuIGFuZCB4bWluIDIpIGNoZWNrIHBsdWdpbiBzYW5pdHkuCi0JICoKLQkgKiBO b3RlOiB3aGVuICFmaW5kX3N0YXJ0cG9pbnQgdGhpcyBpcyBzdGlsbCBpbXBvcnRhbnQsIGJlY2F1 c2UgaXQncyBhdAotCSAqIHRoaXMgcG9pbnQgdGhhdCB0aGUgb3V0cHV0IHBsdWdpbiBpcyB2YWxp ZGF0ZWQuCi0JICovCi0JY3R4ID0gQ3JlYXRlSW5pdERlY29kaW5nQ29udGV4dChwbHVnaW4sIE5J TCwKLQkJCQkJCQkJCWZhbHNlLAkvKiBqdXN0IGNhdGFsb2dzIGlzIE9LICovCi0JCQkJCQkJCQlm YWxzZSwJLyogbm90IHJlcGFjayAqLwotCQkJCQkJCQkJcmVzdGFydF9sc24sCi0JCQkJCQkJCQlY TF9ST1VUSU5FKC5wYWdlX3JlYWQgPSByZWFkX2xvY2FsX3hsb2dfcGFnZSwKLQkJCQkJCQkJCQkJ ICAgLnNlZ21lbnRfb3BlbiA9IHdhbF9zZWdtZW50X29wZW4sCi0JCQkJCQkJCQkJCSAgIC5zZWdt ZW50X2Nsb3NlID0gd2FsX3NlZ21lbnRfY2xvc2UpLAotCQkJCQkJCQkJTlVMTCwgTlVMTCwgTlVM TCk7CisJCS8qCisJCSAqIENyZWF0ZSBsb2dpY2FsIGRlY29kaW5nIGNvbnRleHQgdG8gZmluZCBz dGFydCBwb2ludCBvciwgaWYgd2UgZG9uJ3QKKwkJICogbmVlZCBpdCwgdG8gMSkgYnVtcCBzbG90 J3MgcmVzdGFydF9sc24gYW5kIHhtaW4gMikgY2hlY2sgcGx1Z2luIHNhbml0eS4KKwkJICoKKwkJ ICogTm90ZTogd2hlbiAhZmluZF9zdGFydHBvaW50IHRoaXMgaXMgc3RpbGwgaW1wb3J0YW50LCBi ZWNhdXNlIGl0J3MgYXQKKwkJICogdGhpcyBwb2ludCB0aGF0IHRoZSBvdXRwdXQgcGx1Z2luIGlz IHZhbGlkYXRlZC4KKwkJICovCisJCWN0eCA9IENyZWF0ZUluaXREZWNvZGluZ0NvbnRleHQocGx1 Z2luLCBOSUwsCisJCQkJCQkJCQkJZmFsc2UsCS8qIGp1c3QgY2F0YWxvZ3MgaXMgT0sgKi8KKwkJ CQkJCQkJCQlmYWxzZSwJLyogbm90IHJlcGFjayAqLworCQkJCQkJCQkJCXJlc3RhcnRfbHNuLAor CQkJCQkJCQkJCVhMX1JPVVRJTkUoLnBhZ2VfcmVhZCA9IHJlYWRfbG9jYWxfeGxvZ19wYWdlLAor CQkJCQkJCQkJCQkJICAgLnNlZ21lbnRfb3BlbiA9IHdhbF9zZWdtZW50X29wZW4sCisJCQkJCQkJ CQkJCQkgICAuc2VnbWVudF9jbG9zZSA9IHdhbF9zZWdtZW50X2Nsb3NlKSwKKwkJCQkJCQkJCQlO VUxMLCBOVUxMLCBOVUxMKTsKIAotCS8qCi0JICogSWYgY2FsbGVyIG5lZWRzIHVzIHRvIGRldGVy bWluZSB0aGUgZGVjb2Rpbmcgc3RhcnQgcG9pbnQsIGRvIHNvIG5vdy4KLQkgKiBUaGlzIG1pZ2h0 IHRha2UgYSB3aGlsZS4KLQkgKi8KLQlpZiAoZmluZF9zdGFydHBvaW50KQotCQlEZWNvZGluZ0Nv bnRleHRGaW5kU3RhcnRwb2ludChjdHgpOworCQkvKgorCQkgKiBJZiBjYWxsZXIgbmVlZHMgdXMg dG8gZGV0ZXJtaW5lIHRoZSBkZWNvZGluZyBzdGFydCBwb2ludCwgZG8gc28gbm93LgorCQkgKiBU aGlzIG1pZ2h0IHRha2UgYSB3aGlsZS4KKwkJICovCisJCWlmIChmaW5kX3N0YXJ0cG9pbnQpCisJ CQlEZWNvZGluZ0NvbnRleHRGaW5kU3RhcnRwb2ludChjdHgpOwogCi0JLyogZG9uJ3QgbmVlZCB0 aGUgZGVjb2RpbmcgY29udGV4dCBhbnltb3JlICovCi0JRnJlZURlY29kaW5nQ29udGV4dChjdHgp OworCQkvKiBkb24ndCBuZWVkIHRoZSBkZWNvZGluZyBjb250ZXh0IGFueW1vcmUgKi8KKwkJRnJl ZURlY29kaW5nQ29udGV4dChjdHgpOworCX0KKwlQR19DQVRDSCgpOworCXsKKwkJLyoKKwkJICog RHJvcCB0aGUgc2xvdCBvbiBlcnJvci4gIFJlcGxpY2F0aW9uU2xvdFJlbGVhc2UoKSBvbmx5IGRy b3BzCisJCSAqIFJTX0VQSEVNRVJBTCBzbG90cywgc28gZm9yIFJTX1RFTVBPUkFSWSBzbG90cyB3 ZSBtdXN0IGV4cGxpY2l0bHkKKwkJICogY2FsbCBSZXBsaWNhdGlvblNsb3REcm9wQWNxdWlyZWQo KSB0byBhdm9pZCBsZWF2aW5nIHRoZSBzbG90CisJCSAqIGJlaGluZCAoZS5nLiB3aGVuIHRoZSBl cnJvciBpcyBjYXVnaHQgYnkgYSBQTC9wZ1NRTCBFWENFUFRJT04KKwkJICogaGFuZGxlciB0aGF0 IGRvZXNuJ3QgdGVybWluYXRlIHRoZSBzZXNzaW9uKS4KKwkJICovCisJCWlmIChNeVJlcGxpY2F0 aW9uU2xvdCAhPSBOVUxMKQorCQkJUmVwbGljYXRpb25TbG90RHJvcEFjcXVpcmVkKCk7CisJCVBH X1JFX1RIUk9XKCk7CisJfQorCVBHX0VORF9UUlkoKTsKIH0KIAogLyoKQEAgLTU2Niw0OSArNTgz LDU4IEBAIHBnX3JlcGxpY2F0aW9uX3Nsb3RfYWR2YW5jZShQR19GVU5DVElPTl9BUkdTKQogCWVs c2UKIAkJbW92ZXRvID0gTWluKG1vdmV0bywgR2V0WExvZ1JlcGxheVJlY1B0cihOVUxMKSk7CiAK LQkvKiBBY3F1aXJlIHRoZSBzbG90IHNvIHdlICJvd24iIGl0ICovCi0JUmVwbGljYXRpb25TbG90 QWNxdWlyZShOYW1lU3RyKCpzbG90bmFtZSksIHRydWUsIHRydWUpOwotCi0JLyogQSBzbG90IHdo b3NlIHJlc3RhcnRfbHNuIGhhcyBuZXZlciBiZWVuIHJlc2VydmVkIGNhbm5vdCBiZSBhZHZhbmNl ZCAqLwotCWlmICghWExvZ1JlY1B0cklzVmFsaWQoTXlSZXBsaWNhdGlvblNsb3QtPmRhdGEucmVz dGFydF9sc24pKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNU X05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAotCQkJCSBlcnJtc2coInJlcGxpY2F0aW9uIHNs b3QgXCIlc1wiIGNhbm5vdCBiZSBhZHZhbmNlZCIsCi0JCQkJCQlOYW1lU3RyKCpzbG90bmFtZSkp LAotCQkJCSBlcnJkZXRhaWwoIlRoaXMgc2xvdCBoYXMgbmV2ZXIgcHJldmlvdXNseSByZXNlcnZl ZCBXQUwsIG9yIGl0IGhhcyBiZWVuIGludmFsaWRhdGVkLiIpKSk7CisJUEdfVFJZKCk7CisJewor CQkvKiBBY3F1aXJlIHRoZSBzbG90IHNvIHdlICJvd24iIGl0ICovCisJCVJlcGxpY2F0aW9uU2xv dEFjcXVpcmUoTmFtZVN0cigqc2xvdG5hbWUpLCB0cnVlLCB0cnVlKTsKKwkJLyogQSBzbG90IHdo b3NlIHJlc3RhcnRfbHNuIGhhcyBuZXZlciBiZWVuIHJlc2VydmVkIGNhbm5vdCBiZSBhZHZhbmNl ZCAqLworCQlpZiAoIVhMb2dSZWNQdHJJc1ZhbGlkKE15UmVwbGljYXRpb25TbG90LT5kYXRhLnJl c3RhcnRfbHNuKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JK RUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJyZXBsaWNhdGlv biBzbG90IFwiJXNcIiBjYW5ub3QgYmUgYWR2YW5jZWQiLAorCQkJCQkJCU5hbWVTdHIoKnNsb3Ru YW1lKSksCisJCQkJCSBlcnJkZXRhaWwoIlRoaXMgc2xvdCBoYXMgbmV2ZXIgcHJldmlvdXNseSBy ZXNlcnZlZCBXQUwsIG9yIGl0IGhhcyBiZWVuIGludmFsaWRhdGVkLiIpKSk7CiAKLQkvKgotCSAq IENoZWNrIGlmIHRoZSBzbG90IGlzIG5vdCBtb3ZpbmcgYmFja3dhcmRzLiAgUGh5c2ljYWwgc2xv dHMgcmVseSBzaW1wbHkKLQkgKiBvbiByZXN0YXJ0X2xzbiBhcyBhIG1pbmltdW0gcG9pbnQsIHdo aWxlIGxvZ2ljYWwgc2xvdHMgaGF2ZSBjb25maXJtZWQKLQkgKiBjb25zdW1wdGlvbiB1cCB0byBj b25maXJtZWRfZmx1c2gsIG1lYW5pbmcgdGhhdCBpbiBib3RoIGNhc2VzIGRhdGEKLQkgKiBvbGRl ciB0aGFuIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlLgotCSAqLwotCWlmIChPaWRJc1Zh bGlkKE15UmVwbGljYXRpb25TbG90LT5kYXRhLmRhdGFiYXNlKSkKLQkJbWlubHNuID0gTXlSZXBs aWNhdGlvblNsb3QtPmRhdGEuY29uZmlybWVkX2ZsdXNoOwotCWVsc2UKLQkJbWlubHNuID0gTXlS ZXBsaWNhdGlvblNsb3QtPmRhdGEucmVzdGFydF9sc247CisJCS8qCisJCSAqIENoZWNrIGlmIHRo ZSBzbG90IGlzIG5vdCBtb3ZpbmcgYmFja3dhcmRzLiAgUGh5c2ljYWwgc2xvdHMgcmVseSBzaW1w bHkKKwkJICogb24gcmVzdGFydF9sc24gYXMgYSBtaW5pbXVtIHBvaW50LCB3aGlsZSBsb2dpY2Fs IHNsb3RzIGhhdmUgY29uZmlybWVkCisJCSAqIGNvbnN1bXB0aW9uIHVwIHRvIGNvbmZpcm1lZF9m bHVzaCwgbWVhbmluZyB0aGF0IGluIGJvdGggY2FzZXMgZGF0YQorCQkgKiBvbGRlciB0aGFuIHRo YXQgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlLgorCQkgKi8KKwkJaWYgKE9pZElzVmFsaWQoTXlS ZXBsaWNhdGlvblNsb3QtPmRhdGEuZGF0YWJhc2UpKQorCQkJbWlubHNuID0gTXlSZXBsaWNhdGlv blNsb3QtPmRhdGEuY29uZmlybWVkX2ZsdXNoOworCQllbHNlCisJCQltaW5sc24gPSBNeVJlcGxp Y2F0aW9uU2xvdC0+ZGF0YS5yZXN0YXJ0X2xzbjsKIAotCWlmIChtb3ZldG8gPCBtaW5sc24pCi0J CWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJF UVVJU0lURV9TVEFURSksCi0JCQkJIGVycm1zZygiY2Fubm90IGFkdmFuY2UgcmVwbGljYXRpb24g c2xvdCB0byAlWC8lMDhYLCBtaW5pbXVtIGlzICVYLyUwOFgiLAotCQkJCQkJTFNOX0ZPUk1BVF9B UkdTKG1vdmV0byksIExTTl9GT1JNQVRfQVJHUyhtaW5sc24pKSkpOworCQlpZiAobW92ZXRvIDwg bWlubHNuKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1Rf Tk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImNhbm5vdCBhZHZhbmNl IHJlcGxpY2F0aW9uIHNsb3QgdG8gJVgvJTA4WCwgbWluaW11bSBpcyAlWC8lMDhYIiwKKwkJCQkJ CQlMU05fRk9STUFUX0FSR1MobW92ZXRvKSwgTFNOX0ZPUk1BVF9BUkdTKG1pbmxzbikpKSk7CiAK LQkvKiBEbyB0aGUgYWN0dWFsIHNsb3QgdXBkYXRlLCBkZXBlbmRpbmcgb24gdGhlIHNsb3QgdHlw ZSAqLwotCWlmIChPaWRJc1ZhbGlkKE15UmVwbGljYXRpb25TbG90LT5kYXRhLmRhdGFiYXNlKSkK LQkJZW5kbHNuID0gcGdfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UobW92ZXRvKTsK LQllbHNlCi0JCWVuZGxzbiA9IHBnX3BoeXNpY2FsX3JlcGxpY2F0aW9uX3Nsb3RfYWR2YW5jZSht b3ZldG8pOworCQkvKiBEbyB0aGUgYWN0dWFsIHNsb3QgdXBkYXRlLCBkZXBlbmRpbmcgb24gdGhl IHNsb3QgdHlwZSAqLworCQlpZiAoT2lkSXNWYWxpZChNeVJlcGxpY2F0aW9uU2xvdC0+ZGF0YS5k YXRhYmFzZSkpCisJCQllbmRsc24gPSBwZ19sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3RfYWR2YW5j ZShtb3ZldG8pOworCQllbHNlCisJCQllbmRsc24gPSBwZ19waHlzaWNhbF9yZXBsaWNhdGlvbl9z bG90X2FkdmFuY2UobW92ZXRvKTsKIAotCXZhbHVlc1swXSA9IE5hbWVHZXREYXR1bSgmTXlSZXBs aWNhdGlvblNsb3QtPmRhdGEubmFtZSk7Ci0JbnVsbHNbMF0gPSBmYWxzZTsKKwkJdmFsdWVzWzBd ID0gTmFtZUdldERhdHVtKCZNeVJlcGxpY2F0aW9uU2xvdC0+ZGF0YS5uYW1lKTsKKwkJbnVsbHNb MF0gPSBmYWxzZTsKIAotCS8qCi0JICogUmVjb21wdXRlIHRoZSBtaW5pbXVtIExTTiBhbmQgeG1p biBhY3Jvc3MgYWxsIHNsb3RzIHRvIGFkanVzdCB3aXRoIHRoZQotCSAqIGFkdmFuY2luZyBwb3Rl bnRpYWxseSBkb25lLgotCSAqLwotCVJlcGxpY2F0aW9uU2xvdHNDb21wdXRlUmVxdWlyZWRYbWlu KGZhbHNlKTsKLQlSZXBsaWNhdGlvblNsb3RzQ29tcHV0ZVJlcXVpcmVkTFNOKCk7CisJCS8qCisJ CSAqIFJlY29tcHV0ZSB0aGUgbWluaW11bSBMU04gYW5kIHhtaW4gYWNyb3NzIGFsbCBzbG90cyB0 byBhZGp1c3Qgd2l0aCB0aGUKKwkJICogYWR2YW5jaW5nIHBvdGVudGlhbGx5IGRvbmUuCisJCSAq LworCQlSZXBsaWNhdGlvblNsb3RzQ29tcHV0ZVJlcXVpcmVkWG1pbihmYWxzZSk7CisJCVJlcGxp Y2F0aW9uU2xvdHNDb21wdXRlUmVxdWlyZWRMU04oKTsKKwl9CisJUEdfQ0FUQ0goKTsKKwl7CisJ CWlmIChNeVJlcGxpY2F0aW9uU2xvdCAhPSBOVUxMKQorCQkJUmVwbGljYXRpb25TbG90UmVsZWFz ZSgpOworCQlQR19SRV9USFJPVygpOworCX0KKwlQR19FTkRfVFJZKCk7CiAKIAlSZXBsaWNhdGlv blNsb3RSZWxlYXNlKCk7CiAKQEAgLTc2Myw3ICs3ODksMTMgQEAgY29weV9yZXBsaWNhdGlvbl9z bG90KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIGxvZ2ljYWxfc2xvdCkKIAkvKgogCSAq IFVwZGF0ZSB0aGUgZGVzdGluYXRpb24gc2xvdCB0byBjdXJyZW50IHZhbHVlcyBvZiB0aGUgc291 cmNlIHNsb3Q7CiAJICogcmVjaGVjayB0aGF0IHRoZSBzb3VyY2Ugc2xvdCBpcyBzdGlsbCB0aGUg b25lIHdlIHNhdyBwcmV2aW91c2x5LgorCSAqCisJICogVXNlIFBHX1RSWSB0byBlbnN1cmUgd2Ug ZHJvcCB0aGUgZGVzdGluYXRpb24gc2xvdCBpZiBhbnkgdmFsaWRhdGlvbgorCSAqIGVycm9yIG9j Y3Vycy4gIFdpdGhvdXQgdGhpcywgYW4gZXJyb3IgY2F1Z2h0IGJ5IGEgUEwvcGdTUUwgRVhDRVBU SU9OCisJICogaGFuZGxlciB3b3VsZCBsZWF2ZSBNeVJlcGxpY2F0aW9uU2xvdCBzZXQsIGNyYXNo aW5nIG9uIHRoZSBuZXh0IHNsb3QKKwkgKiBvcGVyYXRpb24uCiAJICovCisJUEdfVFJZKCk7CiAJ ewogCQlUcmFuc2FjdGlvbklkIGNvcHlfZWZmZWN0aXZlX3htaW47CiAJCVRyYW5zYWN0aW9uSWQg Y29weV9lZmZlY3RpdmVfY2F0YWxvZ194bWluOwpAQCAtNzk3LDkgKzgyOSw2IEBAIGNvcHlfcmVw bGljYXRpb25fc2xvdChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCBsb2dpY2FsX3Nsb3Qp CiAJCSAqIG9yIHRoZSByZXN0YXJ0X2xzbiBlaXRoZXIgaXMgaW52YWxpZCBvciBoYXMgZ29uZSBi YWNrd2FyZC4gKFRoZQogCQkgKiByZXN0YXJ0X2xzbiBjb3VsZCBnbyBiYWNrd2FyZHMgaWYgdGhl IHNvdXJjZSBzbG90IGlzIGRyb3BwZWQgYW5kCiAJCSAqIGNvcGllZCBmcm9tIGFuIG9sZGVyIHNs b3QgZHVyaW5nIGluc3RhbGxhdGlvbi4pCi0JCSAqCi0JCSAqIFNpbmNlIGVycm9yaW5nIG91dCB3 aWxsIHJlbGVhc2UgYW5kIGRyb3AgdGhlIGRlc3RpbmF0aW9uIHNsb3Qgd2UKLQkJICogZG9uJ3Qg bmVlZCB0byByZWxlYXNlIGl0IGhlcmUuCiAJCSAqLwogCQlpZiAoY29weV9yZXN0YXJ0X2xzbiA8 IHNyY19yZXN0YXJ0X2xzbiB8fAogCQkJc3JjX2lzbG9naWNhbCAhPSBjb3B5X2lzbG9naWNhbCB8 fApAQCAtODU3LDYgKzg4NiwxOCBAQCBjb3B5X3JlcGxpY2F0aW9uX3Nsb3QoRnVuY3Rpb25DYWxs SW5mbyBmY2luZm8sIGJvb2wgbG9naWNhbF9zbG90KQogCQl9CiAjZW5kaWYKIAl9CisJUEdfQ0FU Q0goKTsKKwl7CisJCS8qCisJCSAqIERyb3AgdGhlIG5ld2x5LWNyZWF0ZWQgZGVzdGluYXRpb24g c2xvdCBvbiBlcnJvci4gU2FtZSBhcyBpbgorCQkgKiBjcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlv bl9zbG90KCk6IHVzZSBSZXBsaWNhdGlvblNsb3REcm9wQWNxdWlyZWQoKQorCQkgKiB0byBoYW5k bGUgYm90aCBSU19FUEhFTUVSQUwgYW5kIFJTX1RFTVBPUkFSWSBzbG90cy4KKwkJICovCisJCWlm IChNeVJlcGxpY2F0aW9uU2xvdCAhPSBOVUxMKQorCQkJUmVwbGljYXRpb25TbG90RHJvcEFjcXVp cmVkKCk7CisJCVBHX1JFX1RIUk9XKCk7CisJfQorCVBHX0VORF9UUlkoKTsKIAogCS8qIHRhcmdl dCBzbG90IGZ1bGx5IGNyZWF0ZWQsIG1hcmsgYXMgcGVyc2lzdGVudCBpZiBuZWVkZWQgKi8KIAlp ZiAobG9naWNhbF9zbG90ICYmICF0ZW1wb3JhcnkpCg== --000000000000bd35a30652a90249--