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 1wZtfu-001Nvk-1T for pgsql-bugs@arkaria.postgresql.org; Wed, 17 Jun 2026 17:03:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wZtft-006w1S-0V for pgsql-bugs@arkaria.postgresql.org; Wed, 17 Jun 2026 17:03:37 +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 1wZtfs-006w1J-22 for pgsql-bugs@lists.postgresql.org; Wed, 17 Jun 2026 17:03:36 +0000 Received: from mail-ua1-x931.google.com ([2607:f8b0:4864:20::931]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wZtfr-00000000prZ-0GcX for pgsql-bugs@lists.postgresql.org; Wed, 17 Jun 2026 17:03:35 +0000 Received: by mail-ua1-x931.google.com with SMTP id a1e0cc1a2514c-9667ea2fc22so1368194241.2 for ; Wed, 17 Jun 2026 10:03:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781715814; cv=none; d=google.com; s=arc-20240605; b=AezxuqadAD6ZCT5ZO5vhYHPxIsFEgoIiG0jadn8hsFh9oMD+hu6KnANq1a6lPqA/PT Eyf8BSBMLxu0puKqyzVOO5OYoNqd7KQ8k5+DPAAl+cRnfE1bfdrD4bwz4ayMgQL/H4s/ dLlbW5XyOG7ww4jfR3HwdbA37DS4zUQ5X8wxc7Med5KR/KiQdWj4HwEmHQQQnQKCUAg9 wKnHa/4vxSNhjDoJhiuZPrhBa01TqR3vzxL9hDRT/gXZG3LbQO/DneCH3HB04zS2xTZE mMdPCbjAEfkX7nLFyakzMtYW9koiwetVzXFs/B+XhTYbZ5+q3fSnuQR2zk7ShradZHJN UYHg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=12IfPe0yC1FbfRiDLXCFAosdkRHLIQXvE0E1GiHo/uo=; fh=YxcWMRJB7Xtt8W1OMtGDI62jDlE9boKruldKa8O5d4M=; b=VS9pYQoR+WO6IP10wm1MVrBaGYa7MoLFLzHMDWGSHtwX2kuj4QPOIO8EbIYUMOXIuW K9bejT/Eze/mg/8Kylf8Djvn2yyABXwHFFSWnNoApVddy3noFvBEDqqXcOkVDU7cZAq9 GAzCRRfVImZwujl/RjJt+8DeUWerDdQfWiPfRBv+MuGoUoCACNp/+MyCJpeeF3AXizFR nOotZZIlMInb5t9PaA3FCxCm5Y6h/nVPJdOy84a5lTPlAz7c1h2LLLC+5GCgiVZDmwvI 0OFkqPvh+qrVCFpevRiGRYhj/39QCe7Zc+2wWMyVFyCYyRXu/SL5HhRbeSumY6XgKJIp ZOIg==; 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=1781715814; x=1782320614; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=12IfPe0yC1FbfRiDLXCFAosdkRHLIQXvE0E1GiHo/uo=; b=LESJlC6to5BGMM69dxHya8KC/c1ZD3pBKLBqO0nK3hnsgqKsSfZ+6r+c6yNAC3kSBi rp9R/tptcQXEPOUGJS06DlQa/Ecyt4X5avDvMkJ4jYrbYB+DhZpgMzTQBffJDkpBCrHk SSr7xjPQ1RF470nMbzubWETJu7iuGUYd30aLRQecJYWbWKOOb9UCenoZTmLuOQ/NHio2 13Q/O9xUIolVawdDB6h2Jdjm83a5yjAnOsJr8k89j/npilxocRPoKX7oOsyjBoXnNAhY /2H0pHAKdilG9tbfRssk0ZnjDg74jN4aXjenSfdu1WRaE/dJd60MlIEtaZvk3Yz4qUYp Olbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781715814; x=1782320614; h=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=12IfPe0yC1FbfRiDLXCFAosdkRHLIQXvE0E1GiHo/uo=; b=OvBrdNmf5Y2d4FGdHZ+0LD2UjeLhPJWIUzvYFxJ8qTZ2Jb8Sl/YWEKdOpA7z2Uozvs VxHVWvT3B9D1Zfg3teM1M/bQ+cCVIaBXRW5XcuBa7daF7q0+D0a93SvmqC3s2uKs9SqL 3cUfywFTaDzVwl1IscOrFa86BdFjQdkQaBeJkAq/EddZWEEWa6cYUbtbnsgqlQUX2MR4 wWcLFg53AkLZhHIipNPndW2X4iap43k3DV3bi6ElloQLUNXch+JB6mNeZRkwdE6LQ7me jgQ8yryDA5fIy911gvgHIfLdCNR08Hc8HpSq0zwzM/C/qaKzxYXK4Qdwlkpy3iVwa0RO C4uQ== X-Forwarded-Encrypted: i=1; AFNElJ8XMxcrAxo1j5ZiUqUzg7zlD/4fSNYCq6Qx3SdhHc2FEZ3mMVJXg3nA12JecAf8ISEjnmvSuRkjetUD@lists.postgresql.org X-Gm-Message-State: AOJu0YxvSrKkC86D4LnPDHnEr7gTHfS6mq7B0PXNpZCMQasO9DIHuvVa vuOBQy70qBiC0sNDaHVy8uXl72LCHyFD0lfDf8SRmWwZxXFFs3uqWXSreMAgUjrI5lRScLrbDnK 4S0BPo0pe/uzK1oDLTiy0iRIAy9qDczGWxmvn X-Gm-Gg: AfdE7ckeXqykzZwu2RrqyvriWSMY+xsM6ufwptklN0MR0jEguYZ4hgZzQaeCSjsVO4W nyiNlpHI1dWqCoqeZLJ5nfzocFGJwYad3edsvBn62f3f6LZLsRUY7HPSDISS6yUCqWbcGR2keG4 ZAO+fWy1bfJo8U3sPiPRKmKT9X95uAyb3uS4dRctMW2rYbKwVmfRWci1WMcjDh0HXTJmQHsFzZ2 XSKmcmuDcvRnXBICpqMYWUdnTWRw/q9LoTC750NQT0L1Hr111VDIkBQhefFPVUv19w9CJpANqFP guPl4YMYmHUKEQVnGF4Eel0ersv/WAmJJ/toWw+umaRPF6arJqJWF4kZ9auTCY6pUvH9zsEJLzs ZuvxBysLT8RpvhKY= X-Received: by 2002:a05:6102:1626:b0:634:92c:bdd0 with SMTP id ada2fe7eead31-7245cec5b37mr2607225137.6.1781715812919; Wed, 17 Jun 2026 10:03:32 -0700 (PDT) MIME-Version: 1.0 References: <19519-fe02d8ff679d834d@postgresql.org> In-Reply-To: <19519-fe02d8ff679d834d@postgresql.org> From: Srinath Reddy Sadipiralla Date: Wed, 17 Jun 2026 22:33:21 +0530 X-Gm-Features: AVVi8CejwIOoX_wiFSybSlG6arONXqF7wI2h4TdfkeYy59wGzMQo3fnhPBimlUY Message-ID: Subject: Re: BUG #19519: REPACK can fail due to missing chunk for toast value To: exclusion@gmail.com, pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000001ed8020654760ad2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001ed8020654760ad2 Content-Type: multipart/alternative; boundary="0000000000001ed8000654760ad0" --0000000000001ed8000654760ad0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Alexander, On Sun, Jun 14, 2026 at 10:37=E2=80=AFPM PG Bug reporting form < noreply@postgresql.org> wrote: > The following bug has been logged on the website: > > The following script: > createdb db1 > createdb db2 > > cat << EOF | psql db1 > SET default_statistics_target =3D 1000; > CREATE TABLE t(i int, t text); > INSERT INTO t SELECT 1, g::text FROM generate_series(1, 50000) g; > ANALYZE t; > EOF > > cat << EOF | psql db2 & > BEGIN; > CREATE TABLE t(i int); > SELECT pg_sleep(3); > EOF > > sleep 1 > > cat << EOF | psql db1 > DROP TABLE t; > VACUUM pg_toast.pg_toast_2619; > REPACK; > EOF > wait > > triggers: > ERROR: missing chunk number 0 for toast value 16393 in pg_toast_2619 > Thanks for the report and clean reproducer , I can also reproduce this. I looked into this. It is not REPACK-specific, it reproduces with plain VACUUM FULL on back branches too, so it predates the REPACK command. AFAIU The root cause is a disagreement about the removal horizon between a table rewrite and an independent vacuum of that table's TOAST relation. A rewrite (cluster_rel -> copy_table_data, copy_heap_data) preserves live and RECENTLY_DEAD tuples, and detoasts a preserved tuple's external values to move them into the new TOAST table.Its removal cutoff comes from GetOldestNonRemovableTransactionId(), i.e. ComputeXidHorizons(), which includes the rewriting backend's own snapshot xmin. The rewrite holds an ordinary MVCC snapshot (taken so index expressions can be evaluated) and deliberately does not set PROC_IN_VACUUM. So The rewrite backend's snapshot xmin is the cluster-wide oldest running xid, which the db2 transaction pins. Since that backend is in db1 and lacks PROC_IN_VACUUM, its own xmin folds into the relation's data/catalog horizon -> OldestXmin sits behind the DROP, so the dead pg_statistic tuple is RECENTLY_DEAD and gets copied. The lazy vacuum of pg_toast_2619 sets PROC_IN_VACUUM, which excludes its own xmin from the horizon, and the db2 transaction, being in another database, does not constrain a non-shared relation's horizon. Its cutoff advances past the DROP and the chunks are removed.The two operations thus disagree about the same tuple, and the rewrite ends up fetching TOAST the lazy vacuum already reclaimed. Attached Fix: The rewrite is simply too conservative,AFAIK it's snapshot is only there to evaluate index expressions against other relations, and it is not a reader of the rewritten relation's historical rows, so its own xmin should not hold back that relation's removal horizon. Excluding it yields exactly the horizon the lazy vacuum uses. We cannot set PROC_IN_VACUUM on the rewrite, that would broadcast "ignore my xmin" to every backend and let other vacuums remove tuples in other relations that the index expressions may need (the documented reason VACUUM FULL does not set it). The exclusion has to be local to the rewrite's own horizon computation, so the patch adds GetOldestNonRemovableTransactionIdForRewrite(): ComputeXidHorizons() gains a flag to skip the calling backend (and to not publish the resulting, more-aggressive horizons into the shared GlobalVisState), and copy_table_data() uses it for OldestXmin. --=20 Thanks :) Srinath Reddy Sadipiralla EDB: https://www.enterprisedb.com/ --0000000000001ed8000654760ad0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Alexander,

On Sun= , Jun 14, 2026 at 10:37=E2=80=AFPM PG Bug reporting form <noreply@postgresql.org> wrote:
=
The following bug has bee= n logged on the website:

The following script:
createdb db1
createdb db2

cat << EOF | psql db1
SET default_statistics_target =3D 1000;
CREATE TABLE t(i int, t text);
INSERT INTO t SELECT 1, g::text FROM generate_series(1, 50000) g;
ANALYZE t;
EOF

cat << EOF | psql db2 &
BEGIN;
CREATE TABLE t(i int);
SELECT pg_sleep(3);
EOF

sleep 1

cat << EOF | psql db1
DROP TABLE t;
VACUUM pg_toast.pg_toast_2619;
REPACK;
EOF
wait

triggers:
ERROR:=C2=A0 missing chunk number 0 for toast value 16393 in pg_toast_2619<= br>

Thanks for the report and clean reproducer , I can= also reproduce this.

I looked into this.=C2=A0 It is not REPACK-spe= cific, it reproduces with
plain VACUUM FULL on back branches too, so it = predates
the REPACK command. AFAIU The root cause is a disagreement abou= t
the removal horizon between a table rewrite and an independent vacuum<= br>of that table's TOAST relation.

A rewrite (cluster_rel -> = copy_table_data, copy_heap_data) preserves live
and RECENTLY_DEAD tuples= , and detoasts a preserved tuple's external
values to move them into= the new TOAST table.Its removal cutoff comes
from GetOldestNonRemovable= TransactionId(), i.e. ComputeXidHorizons(),
which includes the rewriting= backend's own snapshot xmin.
The rewrite holds an ordinary MVCC sna= pshot (taken so index expressions
can be evaluated) and deliberately doe= s not set PROC_IN_VACUUM.=C2=A0 So
The rewrite backend's snapshot xm= in is the cluster-wide oldest
running xid, which the db2 transaction pin= s.=C2=A0 Since that backend is
=C2=A0in db1 and lacks PROC_IN_VACUUM, it= s own xmin folds into the
=C2=A0relation's data/catalog horizon ->= ; OldestXmin sits behind the
=C2=A0DROP, so the dead pg_statistic tuple = is RECENTLY_DEAD and gets
=C2=A0copied.
The lazy vacuum of pg_toast_2= 619 sets PROC_IN_VACUUM, which excludes
=C2=A0its own xmin from the hori= zon, and the db2 transaction, being in another database,
does not constr= ain a non-shared relation's horizon.=C2=A0 Its cutoff advances past the= DROP
=C2=A0and the chunks are removed.The two operations thus disagree = about the same tuple,
and the rewrite ends up fetching TOAST the lazy va= cuum already reclaimed.

Attached Fix:
The rewrite is simply too c= onservative,AFAIK it's snapshot is only there to
evaluate index expr= essions against other relations, and it is not a
reader of the rewritten= relation's historical rows, so its own xmin
should not hold back th= at relation's removal horizon.=C2=A0 Excluding it
yields exactly the= horizon the lazy vacuum uses.
We cannot set PROC_IN_VACUUM on the rewri= te, that would broadcast
"ignore my xmin" to every backend and= let other vacuums remove tuples in
other relations that the index expre= ssions may need (the documented
reason VACUUM FULL does not set it).=C2= =A0 The exclusion has to be local to
the rewrite's own horizon compu= tation, so the patch adds
GetOldestNonRemovableTransactionIdForRewrite()= : ComputeXidHorizons()
gains a flag to skip the calling backend (and to = not publish the
resulting, more-aggressive horizons into the shared Glob= alVisState), and
copy_table_data() uses it for OldestXmin.

--
Thanks :)
Srinath Reddy Sadipiralla
EDB:=C2=A0https://www.enterprisedb.com/
--0000000000001ed8000654760ad0-- --0000000000001ed8020654760ad2 Content-Type: application/octet-stream; name="v1-0001-Fix-missing-chunk-errors-during-heap-rewrites-by-ign.patch" Content-Disposition: attachment; filename="v1-0001-Fix-missing-chunk-errors-during-heap-rewrites-by-ign.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqib2uwa0 RnJvbSBmZGUwZDRjNDc0NWQzNTBlYmY0YjUwZTM2MTY4M2RlNTMyZjJjMjgzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTcmluYXRoIFJlZGR5IFNhZGlwaXJhbGxhIDxzcmluYXRoMjEz M0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTcgSnVuIDIwMjYgMjA6NTg6NDMgKzA1MzAKU3ViamVj dDogW1BBVENIIDEvMV0gRml4ICJtaXNzaW5nIGNodW5rIiBlcnJvcnMgZHVyaW5nIGhlYXAgcmV3 cml0ZXMgYnkKIGlnbm9yaW5nIG93biB4bWluLgoKV2hlbiBwZXJmb3JtaW5nIGEgaGVhcCByZXdy aXRlIChDTFVTVEVSLCBWQUNVVU0gRlVMTCwgUkVQQUNLKSwKdGhlIGJhY2tlbmQgbXVzdCBob2xk IGFuIE1WQ0Mgc25hcHNob3QgdG8gZXZhbHVhdGUKaW5kZXggZXhwcmVzc2lvbnMgYWdhaW5zdCBv dGhlciByZWxhdGlvbnMuIEhvd2V2ZXIsIHRoaXMgYmFja2VuZCBkb2VzCm5vdCB1c2UgdGhpcyBz bmFwc2hvdCB0byByZWFkIHRoZSBoaXN0b3JpY2FsIHJvd3Mgb2YgdGhlIHJlbGF0aW9uCmN1cnJl bnRseSBiZWluZyByZXdyaXR0ZW4uCgpQcmV2aW91c2x5LCB2YWN1dW1fZ2V0X2N1dG9mZnMoKSB1 c2VkIEdldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0aW9uSWQoKSwKd2hpY2ggZm9sZHMgdGhl IGJhY2tlbmQncyBvd24geG1pbiBpbnRvIHRoZSByZWxhdGlvbidzIE9sZGVzdFhtaW4gaG9yaXpv bi4KSWYgdGhpcyB4bWluIGlzIGhlbGQgYmFjayBieSBhIHRyYW5zYWN0aW9uIHRoYXQgY2Fubm90 IGV2ZW4gc2VlIHRoZSB0YXJnZXQKcmVsYXRpb24gKGUuZy4sIGEgdHJhbnNhY3Rpb24gaW4gYW5v dGhlciBkYXRhYmFzZSksIHRoZSByZXdyaXRlJ3MgaG9yaXpvbgpiZWNvbWVzIGFydGlmaWNpYWxs eSBjb25zZXJ2YXRpdmUuCgpUaGlzIGNyZWF0ZXMgYSByYWNlIGNvbmRpdGlvbiB3aXRoIGxhenkg dmFjdXVtLiBMYXp5IHZhY3V1bSBzZXRzIHRoZQpQUk9DX0lOX1ZBQ1VVTSBmbGFnLCBhbGxvd2lu ZyBpdCB0byBleGNsdWRlIGl0cyBvd24geG1pbiBmcm9tIHRoZSBnbG9iYWwKaG9yaXpvbi4gQ29u c2VxdWVudGx5LCBhIGNvbmN1cnJlbnQgb3IgcHJpb3IgbGF6eSB2YWN1dW0gY291bGQgY2FsY3Vs YXRlCmEgbmV3ZXIgaG9yaXpvbiBhbmQgc2FmZWx5IHJlbW92ZSBhIHJlY2VudGx5LWRlYWQgdHVw bGUncyBUT0FTVCBjaHVua3MuCldoZW4gdGhlIGhlYXAgcmV3cml0ZSBsYXRlciBzY2FucyB0aGUg aGVhcCwgaXRzIGFydGlmaWNpYWxseSBvbGRlciBob3Jpem9uCmRpY3RhdGVzIHRoYXQgdGhlIHJl Y2VudGx5LWRlYWQgdHVwbGUgbXVzdCBiZSBwcmVzZXJ2ZWQuIEl0IGF0dGVtcHRzIHRvCmNvcHkg dGhlIHR1cGxlLCBmYWlscyB0byBmaW5kIHRoZSBUT0FTVCBjaHVua3MsIGFuZCByYWlzZXMgYSAi bWlzc2luZwpjaHVuayBudW1iZXIgMCBmb3IgdG9hc3QgdmFsdWUiIGVycm9yLgoKVGhpcyBwYXRj aCBmaXhlcyB0aGUgaXNzdWUgYnkgaW50cm9kdWNpbmcKR2V0T2xkZXN0Tm9uUmVtb3ZhYmxlVHJh bnNhY3Rpb25JZEZvclJld3JpdGUoKS4gVGhpcyBmdW5jdGlvbiBjYWxscwpDb21wdXRlWGlkSG9y aXpvbnMoKSB3aXRoIGEgbmV3IGBleGNsdWRlTXlzZWxmYCBib29sZWFuIHBhcmFtZXRlci4gQnkK ZXhjbHVkaW5nIE15UHJvYyBmcm9tIHRoZSBjYWxjdWxhdGlvbiwgdGhlIHJld3JpdGUgZ2VuZXJh dGVzIHRoZSBleGFjdApzYW1lIGhvcml6b24gdGhhdCBhIGxhenkgdmFjdXVtIHdvdWxkIHVzZS4K CkFsc28sIHdlIHNraXAgY2FsbGluZyBHbG9iYWxWaXNVcGRhdGVBcHBseSgpIHdoZW4gZXhjbHVk ZU15c2VsZiBpcyB0cnVlLgpUaGlzIHByZXZlbnRzIHRoZSBhcnRpZmljaWFsbHkgYWdncmVzc2l2 ZSBsb2NhbCBob3Jpem9uIGZyb20gYmVpbmcgY2FjaGVkCmluIHRoZSBiYWNrZW5kJ3MgbG9jYWwg R2xvYmFsVmlzU3RhdGUuIElmIHRoaXMgZmFrZSBob3Jpem9uIHdlcmUgY2FjaGVkLAppdCB3b3Vs ZCBwb2lzb24gdGhlIGJhY2tlbmQncyBvd24gcHJ1bmluZyBsb2dpYy4gV2hlbiB0aGUgcmV3cml0 ZSBsYXRlcgphY2Nlc3NlcyBvdGhlciByZWxhdGlvbnMgdG8gZXZhbHVhdGUgaW5kZXggZXhwcmVz c2lvbnMsIHRoaXMgcG9pc29uZWQKY2FjaGUgd291bGQgY2F1c2UgdGhlIGJhY2tlbmQgdG8gcGh5 c2ljYWxseSBwcnVuZSB0dXBsZXMgdGhhdCBpdHMgb3duCnNuYXBzaG90IHN0aWxsIHN0cmljdGx5 IHJlcXVpcmVzLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3JlcGFjay5jICAgICAgIHwgMTUg KysrKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyB8IDgwICsrKysrKysr KysrKysrKysrKysrKysrKysrLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oICAg ICB8ICAxICsKIDMgZmlsZXMgY2hhbmdlZCwgODkgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9yZXBhY2suYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3JlcGFjay5jCmluZGV4IGVjMTAwZTNlZWY1Li45M2VjNjdmOGFhZiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcmVwYWNrLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvcmVwYWNrLmMKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2xt Z3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cHJvYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAidXRpbHMv YWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMu aCIKQEAgLTEzODAsNiArMTM4MSwyMCBAQCBjb3B5X3RhYmxlX2RhdGEoUmVsYXRpb24gTmV3SGVh cCwgUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gT2xkSW5kZXgsCiAJbWVtc2V0KCZwYXJhbXMs IDAsIHNpemVvZihWYWN1dW1QYXJhbXMpKTsKIAl2YWN1dW1fZ2V0X2N1dG9mZnMoT2xkSGVhcCwg JnBhcmFtcywgJmN1dG9mZnMpOwogCisJLyoKKwkgKiB2YWN1dW1fZ2V0X2N1dG9mZnMoKSBmb2xk cyBvdXIgb3duIGJhY2tlbmQncyB4bWluIGludG8gT2xkZXN0WG1pbi4gIEZvcgorCSAqIGEgcmV3 cml0ZSB0aGF0IGlzIHRvbyBjb25zZXJ2YXRpdmU6IHRoZSBzbmFwc2hvdCB3ZSBob2xkIGV4aXN0 cyBvbmx5IHRvCisJICogZXZhbHVhdGUgaW5kZXggZXhwcmVzc2lvbnMgYWdhaW5zdCBvdGhlciBy ZWxhdGlvbnMsIG5vdCB0byByZWFkCisJICogT2xkSGVhcCdzIGhpc3RvcmljYWwgcm93cy4gIElm IG91ciB4bWluIGlzIGhlbGQgYmFjayBieSBhIHRyYW5zYWN0aW9uCisJICogdGhhdCBjYW5ub3Qg ZXZlbiBzZWUgT2xkSGVhcCAoZS5nLiBvbmUgaW4gYW5vdGhlciBkYXRhYmFzZSksIHdlIHdvdWxk CisJICogcHJlc2VydmUgYSByZWNlbnRseS1kZWFkIHR1cGxlIHdob3NlIFRPQVNUIGNodW5rcyBh IGNvbmN1cnJlbnQgb3IgcHJpb3IKKwkgKiBsYXp5IHZhY3V1bSB3YXMgZnJlZSB0byByZW1vdmUs IGFuZCB0aGVuIGZhaWwgd2l0aCAibWlzc2luZyBjaHVuayIgd2hpbGUKKwkgKiBjb3B5aW5nIGl0 LiAgUmVjb21wdXRlIE9sZGVzdFhtaW4gaWdub3Jpbmcgb3VyIG93biBiYWNrZW5kIHNvIGl0IG1h dGNoZXMKKwkgKiB0aGUgaG9yaXpvbiBsYXp5IHZhY3V1bSB1c2VzLiAgVGhpcyBjYW4gb25seSBt b3ZlIE9sZGVzdFhtaW4gZm9yd2FyZCwgc28KKwkgKiB0aGUgZnJlZXplIGN1dG9mZnMgZGVyaXZl ZCBhYm92ZSByZW1haW4gdmFsaWQuCisJICovCisJY3V0b2Zmcy5PbGRlc3RYbWluID0gR2V0T2xk ZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZEZvclJld3JpdGUoT2xkSGVhcCk7CisKIAkvKgog CSAqIEZyZWV6ZVhpZCB3aWxsIGJlY29tZSB0aGUgdGFibGUncyBuZXcgcmVsZnJvemVueGlkLCBh bmQgdGhhdCBtdXN0bid0IGdvCiAJICogYmFja3dhcmRzLCBzbyB0YWtlIHRoZSBtYXguCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCmluZGV4IGY1NDBiYjZiMjNmLi5lMmYxZWEwOGU4NCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKKysrIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKQEAgLTE2NzEsNyArMTY3MSw3IEBAIFRy YW5zYWN0aW9uSWRJc0luUHJvZ3Jlc3MoVHJhbnNhY3Rpb25JZCB4aWQpCiAgKiBjb2RlIGRvZXNu J3QgZXhwZWN0IChicmVha2luZyBIT1QpLgogICovCiBzdGF0aWMgdm9pZAotQ29tcHV0ZVhpZEhv cml6b25zKENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaCkKK0NvbXB1dGVYaWRIb3Jpem9ucyhD b21wdXRlWGlkSG9yaXpvbnNSZXN1bHQgKmgsIGJvb2wgZXhjbHVkZU15c2VsZikKIHsKIAlQcm9j QXJyYXlTdHJ1Y3QgKmFycmF5UCA9IHByb2NBcnJheTsKIAlUcmFuc2FjdGlvbklkIGtheG1pbjsK QEAgLTE3NzAsNiArMTc3MCwyMSBAQCBDb21wdXRlWGlkSG9yaXpvbnMoQ29tcHV0ZVhpZEhvcml6 b25zUmVzdWx0ICpoKQogCQlpZiAoc3RhdHVzRmxhZ3MgJiAoUFJPQ19JTl9WQUNVVU0gfCBQUk9D X0lOX0xPR0lDQUxfREVDT0RJTkcpKQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogT3B0aW9u YWxseSBpZ25vcmUgb3VyIG93biBiYWNrZW5kJ3MgeG1pbi4gIEEgaGVhcCByZXdyaXRlIChDTFVT VEVSIC8KKwkJICogVkFDVVVNIEZVTEwgLyBSRVBBQ0spIGhvbGRzIGFuIE1WQ0Mgc25hcHNob3Qg b25seSBzbyB0aGF0IGluZGV4CisJCSAqIGV4cHJlc3Npb25zIGNhbiBiZSBldmFsdWF0ZWQgYWdh aW5zdCBvdGhlciByZWxhdGlvbnM7IGl0IG5ldmVyCisJCSAqIHJlYWRzIHRoZSBoaXN0b3JpY2Fs IHJvd3Mgb2YgdGhlIHJlbGF0aW9uIGJlaW5nIHJld3JpdHRlbiB0aHJvdWdoCisJCSAqIHRoYXQg c25hcHNob3QuICBMZXR0aW5nIG91ciBvd24geG1pbiBob2xkIGJhY2sgdGhhdCByZWxhdGlvbidz CisJCSAqIHJlbW92YWwgaG9yaXpvbiBtYWtlcyB0aGUgcmV3cml0ZSBtb3JlIGNvbnNlcnZhdGl2 ZSB0aGFuIHRoZSBsYXp5CisJCSAqIHZhY3V1bSB0aGF0IG1heSBhbHJlYWR5IGhhdmUgcmVtb3Zl ZCBhIHJlY2VudGx5LWRlYWQgdHVwbGUncyBUT0FTVAorCQkgKiBjaHVua3MsIHdoaWNoIHdvdWxk IHRoZW4gZmFpbCB3aXRoICJtaXNzaW5nIGNodW5rIiB3aGlsZSBjb3B5aW5nIHRoZQorCQkgKiB0 dXBsZS4gIFRoaXMgbWlycm9ycyBob3cgUFJPQ19JTl9WQUNVVU0gZXhjbHVkZXMgYSBsYXp5IHZh Y3V1bSdzIG93bgorCQkgKiB4bWluLiAgU2VlIEdldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0 aW9uSWRGb3JSZXdyaXRlKCkuCisJCSAqLworCQlpZiAoZXhjbHVkZU15c2VsZiAmJiBwcm9jID09 IE15UHJvYykKKwkJCWNvbnRpbnVlOworCiAJCS8qIHNoYXJlZCB0YWJsZXMgbmVlZCB0byB0YWtl IGJhY2tlbmRzIGluIGFsbCBkYXRhYmFzZXMgaW50byBhY2NvdW50ICovCiAJCWgtPnNoYXJlZF9v bGRlc3Rfbm9ucmVtb3ZhYmxlID0KIAkJCVRyYW5zYWN0aW9uSWRPbGRlcihoLT5zaGFyZWRfb2xk ZXN0X25vbnJlbW92YWJsZSwgeG1pbik7CkBAIC0xODk4LDggKzE5MTMsMTUgQEAgQ29tcHV0ZVhp ZEhvcml6b25zKENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaCkKIAkJICAgVHJhbnNhY3Rpb25J ZFByZWNlZGVzT3JFcXVhbHMoaC0+b2xkZXN0X2NvbnNpZGVyZWRfcnVubmluZywKIAkJCQkJCQkJ CQkgaC0+c2xvdF9jYXRhbG9nX3htaW4pKTsKIAotCS8qIHVwZGF0ZSBhcHByb3hpbWF0ZSBob3Jp em9ucyB3aXRoIHRoZSBjb21wdXRlZCBob3Jpem9ucyAqLwotCUdsb2JhbFZpc1VwZGF0ZUFwcGx5 KGgpOworCS8qCisJICogVXBkYXRlIGFwcHJveGltYXRlIGhvcml6b25zIHdpdGggdGhlIGNvbXB1 dGVkIGhvcml6b25zLiAgU2tpcCB0aGlzIHdoZW4KKwkgKiBleGNsdWRpbmcgb3VyIG93biB4bWlu OiB0aGUgcmVzdWx0aW5nIGhvcml6b25zIGFyZSBtb3JlIGFnZ3Jlc3NpdmUgdGhhbgorCSAqIGlz IGdsb2JhbGx5IHNhZmUgYW5kIGFyZSBvbmx5IHZhbGlkIGZvciB0aGUgY2FsbGVyJ3Mgb3duIHJl d3JpdGUgb2YgYQorCSAqIHNpbmdsZSByZWxhdGlvbiwgc28gdGhleSBtdXN0IG5vdCBiZSBwdWJs aXNoZWQgdG8gdGhlIHNoYXJlZAorCSAqIEdsb2JhbFZpc1N0YXRlLgorCSAqLworCWlmICghZXhj bHVkZU15c2VsZikKKwkJR2xvYmFsVmlzVXBkYXRlQXBwbHkoaCk7CiB9CiAKIC8qCkBAIC0xOTQ1 LDcgKzE5NjcsNTEgQEAgR2V0T2xkZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZChSZWxhdGlv biByZWwpCiB7CiAJQ29tcHV0ZVhpZEhvcml6b25zUmVzdWx0IGhvcml6b25zOwogCi0JQ29tcHV0 ZVhpZEhvcml6b25zKCZob3Jpem9ucyk7CisJQ29tcHV0ZVhpZEhvcml6b25zKCZob3Jpem9ucywg ZmFsc2UpOworCisJc3dpdGNoIChHbG9iYWxWaXNIb3Jpem9uS2luZEZvclJlbChyZWwpKQorCXsK KwkJY2FzZSBWSVNIT1JJWk9OX1NIQVJFRDoKKwkJCXJldHVybiBob3Jpem9ucy5zaGFyZWRfb2xk ZXN0X25vbnJlbW92YWJsZTsKKwkJY2FzZSBWSVNIT1JJWk9OX0NBVEFMT0c6CisJCQlyZXR1cm4g aG9yaXpvbnMuY2F0YWxvZ19vbGRlc3Rfbm9ucmVtb3ZhYmxlOworCQljYXNlIFZJU0hPUklaT05f REFUQToKKwkJCXJldHVybiBob3Jpem9ucy5kYXRhX29sZGVzdF9ub25yZW1vdmFibGU7CisJCWNh c2UgVklTSE9SSVpPTl9URU1QOgorCQkJcmV0dXJuIGhvcml6b25zLnRlbXBfb2xkZXN0X25vbnJl bW92YWJsZTsKKwl9CisKKwkvKiBqdXN0IHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MgKi8K KwlyZXR1cm4gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Cit9CisKKy8qCisgKiBHZXRPbGRlc3ROb25S ZW1vdmFibGVUcmFuc2FjdGlvbklkRm9yUmV3cml0ZSAtLSB2YXJpYW50IG9mCisgKgkJR2V0T2xk ZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZCgpIHRoYXQgaWdub3JlcyB0aGUgY2FsbGluZyBi YWNrZW5kJ3MKKyAqCQlvd24geG1pbi4KKyAqCisgKiBBIGhlYXAgcmV3cml0ZSAoQ0xVU1RFUiAv IFZBQ1VVTSBGVUxMIC8gUkVQQUNLKSBtdXN0IHByZXNlcnZlIHJlY2VudGx5LWRlYWQKKyAqIHR1 cGxlcyBvZiB0aGUgcmVsYXRpb24gYmVpbmcgcmV3cml0dGVuIHNvIHRoYXQgb3RoZXIgYmFja2Vu ZHMnIHNuYXBzaG90cworICogc3RpbGwgc2VlIHRoZW0gYWZ0ZXJ3YXJkcy4gIEl0IGlzIG5vdCwg aG93ZXZlciwgYSByZWFkZXIgb2YgdGhhdCByZWxhdGlvbidzCisgKiBoaXN0b3JpY2FsIHJvd3Mg aXRzZWxmOiB0aGUgTVZDQyBzbmFwc2hvdCBpdCBob2xkcyBleGlzdHMgb25seSB0byBldmFsdWF0 ZQorICogaW5kZXggZXhwcmVzc2lvbnMgYWdhaW5zdCAqb3RoZXIqIHJlbGF0aW9ucy4gIEluY2x1 ZGluZyBvdXIgb3duIHhtaW4gaW4gdGhlCisgKiBob3Jpem9uIHRoZXJlZm9yZSBtYWtlcyB0aGUg cmV3cml0ZSBuZWVkbGVzc2x5IGNvbnNlcnZhdGl2ZSwgYW5kIC0tIHdoZW4gb3VyCisgKiB4bWlu IGlzIGhlbGQgYmFjayBieSBhIHRyYW5zYWN0aW9uIHRoYXQgY2Fubm90IGV2ZW4gc2VlIHRoZSBy ZWxhdGlvbiAoZm9yCisgKiBleGFtcGxlIG9uZSBpbiBhbm90aGVyIGRhdGFiYXNlKSAtLSBtb3Jl IGNvbnNlcnZhdGl2ZSB0aGFuIHRoZSBsYXp5IHZhY3V1bQorICogd2hpY2ggYWxyZWFkeSByZW1v dmVkIGEgcmVjZW50bHktZGVhZCB0dXBsZSdzIFRPQVNUIGNodW5rcywgbGVhZGluZyB0bworICog Im1pc3NpbmcgY2h1bmsiIGVycm9ycyB3aGlsZSBjb3B5aW5nIHRoZSB0dXBsZS4gIEV4Y2x1ZGlu ZyBvdXIgb3duIHhtaW4KKyAqIHlpZWxkcyB0aGUgc2FtZSBob3Jpem9uIGEgbGF6eSB2YWN1dW0g d291bGQgdXNlIChQUk9DX0lOX1ZBQ1VVTSBkb2VzIHRoZQorICogZXF1aXZhbGVudCBmb3IgbGF6 eSB2YWN1dW0pLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgbG9jayBvbiByZWwgc3Ry b25nIGVub3VnaCB0aGF0IHRoZSBzZXQgb2YgYmFja2VuZHMKKyAqIHRoYXQgY291bGQgcmVhZCBp dHMgcm93cyBjYW5ub3QgY2hhbmdlIHVuZGVybmVhdGggdXMuCisgKi8KK1RyYW5zYWN0aW9uSWQK K0dldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0aW9uSWRGb3JSZXdyaXRlKFJlbGF0aW9uIHJl bCkKK3sKKwlDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQgaG9yaXpvbnM7CisKKwlDb21wdXRlWGlk SG9yaXpvbnMoJmhvcml6b25zLCB0cnVlKTsKIAogCXN3aXRjaCAoR2xvYmFsVmlzSG9yaXpvbktp bmRGb3JSZWwocmVsKSkKIAl7CkBAIC0xOTc0LDcgKzIwNDAsNyBAQCBHZXRPbGRlc3RUcmFuc2Fj dGlvbklkQ29uc2lkZXJlZFJ1bm5pbmcodm9pZCkKIHsKIAlDb21wdXRlWGlkSG9yaXpvbnNSZXN1 bHQgaG9yaXpvbnM7CiAKLQlDb21wdXRlWGlkSG9yaXpvbnMoJmhvcml6b25zKTsKKwlDb21wdXRl WGlkSG9yaXpvbnMoJmhvcml6b25zLCBmYWxzZSk7CiAKIAlyZXR1cm4gaG9yaXpvbnMub2xkZXN0 X2NvbnNpZGVyZWRfcnVubmluZzsKIH0KQEAgLTE5ODcsNyArMjA1Myw3IEBAIEdldFJlcGxpY2F0 aW9uSG9yaXpvbnMoVHJhbnNhY3Rpb25JZCAqeG1pbiwgVHJhbnNhY3Rpb25JZCAqY2F0YWxvZ194 bWluKQogewogCUNvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCBob3Jpem9uczsKIAotCUNvbXB1dGVY aWRIb3Jpem9ucygmaG9yaXpvbnMpOworCUNvbXB1dGVYaWRIb3Jpem9ucygmaG9yaXpvbnMsIGZh bHNlKTsKIAogCS8qCiAJICogRG9uJ3Qgd2FudCB0byB1c2Ugc2hhcmVkX29sZGVzdF9ub25yZW1v dmFibGUgaGVyZSwgYXMgdGhhdCBjb250YWlucyB0aGUKQEAgLTQyMDYsNyArNDI3Miw3IEBAIEds b2JhbFZpc1VwZGF0ZSh2b2lkKQogCUNvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCBob3Jpem9uczsK IAogCS8qIHVwZGF0ZXMgdGhlIGhvcml6b25zIGFzIGEgc2lkZS1lZmZlY3QgKi8KLQlDb21wdXRl WGlkSG9yaXpvbnMoJmhvcml6b25zKTsKKwlDb21wdXRlWGlkSG9yaXpvbnMoJmhvcml6b25zLCBm YWxzZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJh eS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAppbmRleCBkNzE4YTViNTQyZi4u Y2NmYzMxY2RiNWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaApAQCAtNTEsNiArNTEsNyBAQCBl eHRlcm4gUnVubmluZ1RyYW5zYWN0aW9ucyBHZXRSdW5uaW5nVHJhbnNhY3Rpb25EYXRhKHZvaWQp OwogCiBleHRlcm4gYm9vbCBUcmFuc2FjdGlvbklkSXNJblByb2dyZXNzKFRyYW5zYWN0aW9uSWQg eGlkKTsKIGV4dGVybiBUcmFuc2FjdGlvbklkIEdldE9sZGVzdE5vblJlbW92YWJsZVRyYW5zYWN0 aW9uSWQoUmVsYXRpb24gcmVsKTsKK2V4dGVybiBUcmFuc2FjdGlvbklkIEdldE9sZGVzdE5vblJl bW92YWJsZVRyYW5zYWN0aW9uSWRGb3JSZXdyaXRlKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gVHJh bnNhY3Rpb25JZCBHZXRPbGRlc3RUcmFuc2FjdGlvbklkQ29uc2lkZXJlZFJ1bm5pbmcodm9pZCk7 CiBleHRlcm4gVHJhbnNhY3Rpb25JZCBHZXRPbGRlc3RBY3RpdmVUcmFuc2FjdGlvbklkKGJvb2wg aW5Db21taXRPbmx5LAogCQkJCQkJCQkJCQkJICBib29sIGFsbERicyk7Ci0tIAoyLjQzLjAKCg== --0000000000001ed8020654760ad2--