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 1wPZK7-000qWN-3D for pgsql-hackers@arkaria.postgresql.org; Wed, 20 May 2026 05:18:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wPZK5-006Gds-3A for pgsql-hackers@arkaria.postgresql.org; Wed, 20 May 2026 05:18:26 +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 1wPZK5-006Gdi-1r for pgsql-hackers@lists.postgresql.org; Wed, 20 May 2026 05:18:26 +0000 Received: from mail-ed1-x52b.google.com ([2a00:1450:4864:20::52b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wPZK3-00000000RBJ-1LWP for pgsql-hackers@lists.postgresql.org; Wed, 20 May 2026 05:18:25 +0000 Received: by mail-ed1-x52b.google.com with SMTP id 4fb4d7f45d1cf-67cac5ece75so9282641a12.2 for ; Tue, 19 May 2026 22:18:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779254301; cv=none; d=google.com; s=arc-20240605; b=JBtf7m1u5OFFv3KA+KGdgbLabfP834X1FI9ubbd5ApP+lowLfOFmqV0CUTa4QvGXth U187N4yg9AOnvR062ebSYuORlPYTCYaqvhL8Mh0I8VraEjSGbn3CYAOE6YTeNKV1uU7m zOwLrZAdgRc/2Vbs+lZ27itVNNCQ3cYUkyLUnuBKYzY3BMafdHp0jvB+ltx0m6owoYcg t9DMZATVSdpo0zgbBJ7/aPbh4wom+yWxiYvL+BvfSe5cTTyuDAtlVPE5lkLTJk3ZZQUM Afis20nMiikMbt53ayJXY8hmDwusn07Nr4i7zLq5lhJeVM0nVbzgHl4gM6HEE7vmQlOM cUOw== 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=mJN+SfDiqoKd1SaokU+rWkAQS8QoV5d+A/UGapwSt14=; fh=ZltOXGmzR+62NPdHIsC5yIQZnHNxpKAMM1599eEM7Qs=; b=hcB7/2RDQFDl8sxNO80gIjBcG0HOc03pPqavXbHSZOUTZ4Pn8mZzab/7v6mTl9JT4b 47LAbnTej5NAxexjs7tis+7R6T/L4ylafIxvCBgn0yADQTH9UEq/N99b/QzB+8t9cx+f Rc5ch+aLDPv/fgAYXIi0WxBY8nulvTeEGleGrLL7CDK9DZwfyTnpU7K0w0AR5cddQKUZ RC5Z03ujX3u0GvoJ0paT28T8bXIi7m+NOig2Bm6f3yEScEQdRB6sCxUJZYjMz4yhHmi0 cfzXwo6+VAtFclAEdC6CCc5jLL7Am2QewlII1RsAdpJLEDPFGws72cDh0UlAwiFJuaH3 uIcw==; 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=1779254301; x=1779859101; 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=mJN+SfDiqoKd1SaokU+rWkAQS8QoV5d+A/UGapwSt14=; b=AEc6VuMI1kbOIZmuYBkWcDafUdVvYgc/3Jn2BkSm36WvyG6uoJXNS+MwwToFH4Ccj6 yhbQvpHhdEsRvaYizUiRICWHK5AUDv6Jre+7zS4oqRZxoOl2q71V2msbtei72El1GOjU f0Ql6JN1ZYlR/F37pGZhPI4KBNFsDv9hG2wuiHmQOPg777M1zq03SAfYKyedpVLWNEEN k3+F+4q1xsIuarReggPp2jVCr0NwhDnG/H11ihNw0Gv2SjnIx/Nw3tSUhp4TFckF6Y7x OjuJ6AycrC125M2QrlaWVqFK3VcTXbly4ucPR8oqsFQbZ6xz5vEOXdw0Fr7zqTF5peGq w0Tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779254301; x=1779859101; 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=mJN+SfDiqoKd1SaokU+rWkAQS8QoV5d+A/UGapwSt14=; b=tBUcRuiwkqAQDz8Gcc2iPVYCazcX2p8dKlsfTpgVTF9KrORcKzwfMDrkeYtxgqmKaj aeNYWocyQTT/p4YzGLFBu4mvTqmwCJgc72j+zbRGasAbHAYbiBDvb/GjkCDZeIL+17YI Q/npEEvRJfMk6BwUTgCKmnFA9xCV3hLPi+bJt0tPF5eqvjt5x7nU2bo3R8DjcuK+krZR m9bDx3GDZ+IJQTXLjz4JisEgi+aUK3+y0By1kzwRxf87wxNFpHvckN0KqkH7Acs44x+o 2seTkT8Ph/dyxUFmBztapblg1l2h4uEQh49mhU4vNcutl60Vn9VK6OWGfTzyeb5jHFi4 SVFA== X-Forwarded-Encrypted: i=1; AFNElJ+3S7ySF/gdoO8ShXwgjaNfa14Ds6MAggVd/ZrsbFwmh4J1MYKJ8ldNixMlmQ+fLqYkkJN/TnKJSeBktZfT@lists.postgresql.org X-Gm-Message-State: AOJu0YwZdJjx9Q6caENRgAOAo0DWbqfLGBFMVoJVlwGy0be+7VZDMr1O /kvEDKzXy+YFFJixm3dvklCR1wwtwfxIHaxeNyoQhfvf8OULXus+LybuatIU/SdKyRFstELjv+N BqctHNRsO97JQvI0l0XsIRYf9hIlJFRw= X-Gm-Gg: Acq92OGJm+t5bdqtb+LL22ecc3mcRUotRNIBoFQEF7T+aAKz8m4rb5aFgib2lv8CfO4 FNsaVePgrhTTwB/Y64XvyWQhgCNucf3JecAukiuDb4hZ02cZX5xz0UmcbW3tGBFTM1wiIxAaFnb 6rogaa/SGnsmF+DZVXFGpGs1WuhNRcoWoYmcGXRbTqp0QmaRLJ9qPNZmt5bXTnOZ5P4Rnb7wwYn IhvmENe4kvQi5JkcfgEs4JEGsazV2FTa+eG8Krm6b6RGmi2D4/sqXBgjxiaO0XxodVqjALrQBpE gjYPHwa8EopR+hUmWBI99mZGYsJuA3bSFPT7iic1rv9QZR0hNolKzrtHj5zSbQbQOvCo9wZ1DrK xHpXVun1c X-Received: by 2002:a05:6402:4150:b0:67e:153e:51cb with SMTP id 4fb4d7f45d1cf-683bcd9e33amr11165723a12.16.1779254301274; Tue, 19 May 2026 22:18:21 -0700 (PDT) MIME-Version: 1.0 References: <63f6abc9-c0ae-465d-a4e6-667eca6ea008@gmail.com> In-Reply-To: From: Xuneng Zhou Date: Tue, 19 May 2026 22:18:07 -0700 X-Gm-Features: AVHnY4KVcxx5evyo6ntfvA9qsFu3OFYT5Kf2RHqevpR4m_Gou8aobz5vhyg_6Ns Message-ID: Subject: Re: Implement waiting for wal lsn replay: reloaded To: Alexander Lakhin Cc: Alexander Korotkov , Heikki Linnakangas , Peter Eisentraut , Andres Freund , Thomas Munro , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Chao Li , pgsql-hackers , Michael Paquier , jian he , Tomas Vondra , Yura Sokolov Content-Type: multipart/mixed; boundary="00000000000097e938065238ecbc" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000097e938065238ecbc Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, May 19, 2026 at 8:30=E2=80=AFPM Xuneng Zhou = wrote: > > Hi, > > On Tue, May 19, 2026 at 1:00=E2=80=AFPM Alexander Lakhin wrote: > > > > Hello Alexander and Xuneng, > > > > 06.04.2026 22:49, Alexander Korotkov wrote: > > > > Thank you, I've pushed your version of patchset. I made two minor > > corrections for patch #2: mention default mode value in the header > > comment, and fallback to polling on has_wal_read_bug sparc64+ext4 bug. > > > > > > I discovered a new test failure, that is apparently caused by new > > wait_for_catchup() implementation [1]: > > [06:20:23.110](1.069s) not ok 8 - check that the slot state changes to = "extended" > > [06:20:23.110](0.001s) # Failed test 'check that the slot state chang= es to "extended"' > > # at /Users/ec2-user/bf/goldfish/HEAD/pgsql/src/test/recovery/t/019_r= eplslot_limit.pl line 140. > > [06:20:23.111](0.000s) # got: 'unreserved' > > # expected: 'extended' > > [06:20:23.231](0.120s) not ok 9 - check that the slot state changes to = "unreserved" > > [06:20:23.231](0.000s) # Failed test 'check that the slot state chang= es to "unreserved"' > > # at /Users/ec2-user/bf/goldfish/HEAD/pgsql/src/test/recovery/t/019_r= eplslot_limit.pl line 152. > > [06:20:23.231](0.000s) # got: 'lost|' > > # expected: 'unreserved|t' > > > > I've managed to reproduce such failures with: > > diff --git a/src/backend/replication/walreceiver.c b/src/backend/replic= ation/walreceiver.c > > index 07eac07b9ce..493ce92674e 100644 > > --- a/src/backend/replication/walreceiver.c > > +++ b/src/backend/replication/walreceiver.c > > @@ -1143,2 +1143,3 @@ XLogWalRcvSendReply(bool force, bool requestReply= , bool checkApply) > > > > +pg_usleep(10000); > > /* Get current timestamp. */ > > diff --git a/src/backend/replication/walsender.c b/src/backend/replicat= ion/walsender.c > > index 04aa770d981..19cda3a6b51 100644 > > --- a/src/backend/replication/walsender.c > > +++ b/src/backend/replication/walsender.c > > @@ -2521,2 +2521,3 @@ ProcessStandbyReplyMessage(void) > > > > +pg_usleep(100000); > > /* the caller already consumed the msgtype byte */ > > > > Concretely, a loop: > > for i in {1..100}; do echo "ITERATION $i"; PROVE_TESTS=3D"t/019*" make = -s check -C src/test/recovery/ || break; done > > failed for me on iterations 2, 1, 7: > > ITERATION 7 > > # +++ tap check in src/test/recovery +++ > > t/019_replslot_limit.pl .. 8/? > > # Failed test 'check that the slot state changes to "extended"' > > # at t/019_replslot_limit.pl line 140. > > # got: 'unreserved' > > # expected: 'extended' > > t/019_replslot_limit.pl .. 26/? # Looks like you failed 1 test of 26. > > t/019_replslot_limit.pl .. Dubious, test returned 1 (wstat 256, 0x100) > > Failed 1/26 subtests > > > > With "WAIT FOR LSN" in wait_for_catchup() disabled, 100 iterations > > passed. > > > > Having extra logging added, I could see the key difference. > > Failed run: > > 2026-05-19 22:01:37.968 EEST client backend[3632148] 019_replslot_limit= .pl LOG: !!!GetWALAvailability| targetLSN: 0/016C0000, targetSeg: 22, olde= stSlotSeg: 23, oldestSegMaxWalSize: 24, oldestSeg: 22 > > 2026-05-19 22:01:37.968 EEST client backend[3632148] 019_replslot_limit= .pl STATEMENT: SELECT wal_status FROM pg_replication_slots WHERE slot_name= =3D 'rep1' > > vs > > Successful run: > > 2026-05-19 22:04:18.102 EEST client backend[3633761] 019_replslot_limit= .pl LOG: !!!GetWALAvailability| targetLSN: 0/01700000, targetSeg: 23, olde= stSlotSeg: 23, oldestSegMaxWalSize: 24, oldestSeg: 23 > > 2026-05-19 22:04:18.102 EEST client backend[3633761] 019_replslot_limit= .pl STATEMENT: SELECT wal_status FROM pg_replication_slots WHERE slot_name= =3D 'rep1' > > > > That is, with WAIT FOR LSN, primary in this test may advance > > slot->data.restart_lsn to the expected position after wait_for_catchup(= ) > > returns. > > > > [1] https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=3Dgoldfish&= dt=3D2026-05-13%2006%3A15%3A03 > > Thanks for reporting this issue. > > I think this is related to the semantic change made earlier: > wait_for_catchup() now returns once the standby itself has reached the > target LSN, rather than waiting until the primary observes that > position via pg_stat_replication. > > As a result, the primary may not yet have processed the standby > feedback needed to advance the slot's restart_lsn when > wait_for_catchup() returns. > > Actually, I was aware of this semantic change and previously thought > it might be harmless. But this failure appears to disprove that. I'll > prepare a patch to fix this shortly. After some consideration, 019_replslot_limit.pl appears to the better place to place the fix rather than by restoring the old primary-side polling barrier in wait_for_catchup(). The new wait_for_catchup() behavior is closer to its natural semantics: for replay/write/flush modes, it waits until the standby itself has reached the requested LSN. The old implementation used pg_stat_replication on the primary, which also implied that the primary had received and processed standby feedback. That was a useful side effect for this test, but it is not required by most callers. 019_replslot_limit.pl is different because it checks primary-side slot state. For a physical slot, restart_lsn advances only after the primary's walsender processes standby feedback. So the test needs an extra condition beyond ordinary standby catchup. The patch makes that dependency explicit: wait for the standby to replay the target LSN, then wait for the slot's restart_lsn on the primary to pass the same LSN. This keeps wait_for_catchup() focused on standby catchup while making the slot-specific synchronization visible in the test that needs it. --=20 Regards, Xuneng Zhou HighGo Software Co., Ltd. --00000000000097e938065238ecbc Content-Type: application/octet-stream; name="0001-Stabilize-replslot-limit-test-after-standby-catchup.patch" Content-Disposition: attachment; filename="0001-Stabilize-replslot-limit-test-after-standby-catchup.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpdlziw60 RnJvbSA0MWViNDgwYTVjNTJjM2ViY2VlNDQ4OGUzOGJlZjViOGFlZDU5ZmY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBYdW5lbmcgWmhvdSA8eHVuZW5nemhvdUBnbWFpbC5jb20+CkRh dGU6IFR1ZSwgMTkgTWF5IDIwMjYgMjI6MTE6MDQgLTA3MDAKU3ViamVjdDogW1BBVENIXSBTdGFi aWxpemUgcmVwbHNsb3QgbGltaXQgdGVzdCBhZnRlciBzdGFuZGJ5IGNhdGNodXAKCjAxOV9yZXBs c2xvdF9saW1pdC5wbCBjaGVja3MgcHJpbWFyeS1zaWRlIFdBTCBhdmFpbGFiaWxpdHkgZm9yIGEK cGh5c2ljYWwgcmVwbGljYXRpb24gc2xvdCBhZnRlciBzdG9wcGluZyBhbmQgcmVzdGFydGluZyBh IHN0YW5kYnkuCndhaXRfZm9yX2NhdGNodXAoKSBub3cgd2FpdHMgZm9yIHRoZSBzdGFuZGJ5IHRv IHJlYWNoIHRoZSB0YXJnZXQgTFNOCmxvY2FsbHksIHNvIGl0IGNhbiByZXR1cm4gYmVmb3JlIHRo ZSBwcmltYXJ5IGhhcyBwcm9jZXNzZWQgc3RhbmRieQpmZWVkYmFjayBhbmQgYWR2YW5jZWQgdGhl IHNsb3QncyByZXN0YXJ0X2xzbi4KCk1ha2UgdGhlIHRlc3Qgd2FpdCBleHBsaWNpdGx5IGZvciB0 aGF0IHNsb3QgYWR2YW5jZW1lbnQgYmVmb3JlIHN0b3BwaW5nCnRoZSBzdGFuZGJ5LgotLS0KIHNy Yy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsIHwgMjMgKysrKysrKysrKysr KysrKystLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0 LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGltaXQucGwKaW5kZXggN2Iy NTNlNjRkOWMuLjBjNDNhY2RmOGE3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS90LzAx OV9yZXBsc2xvdF9saW1pdC5wbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOV9yZXBsc2xv dF9saW1pdC5wbApAQCAtMTIsNiArMTIsMTYgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXI7CiB1c2UgVGVzdDo6TW9yZTsKIHVzZSBUaW1lOjpIaVJlcyBxdyh1c2xlZXApOwogCitzdWIg d2FpdF9mb3Jfc3RhbmRieV9hbmRfc2xvdF9jYXRjaHVwCit7CisJbXkgKCRwcmltYXJ5LCAkc3Rh bmRieSwgJHNsb3RfbmFtZSkgPSBAXzsKKworCW15ICR0YXJnZXRfbHNuID0gJHByaW1hcnktPmxz bignd3JpdGUnKTsKKworCSRwcmltYXJ5LT53YWl0X2Zvcl9jYXRjaHVwKCRzdGFuZGJ5LCAncmVw bGF5JywgJHRhcmdldF9sc24pOworCSRwcmltYXJ5LT53YWl0X2Zvcl9zbG90X2NhdGNodXAoJHNs b3RfbmFtZSwgJ3Jlc3RhcnQnLCAkdGFyZ2V0X2xzbik7Cit9CisKICMgSW5pdGlhbGl6ZSBwcmlt YXJ5IG5vZGUsIHNldHRpbmcgd2FsLXNlZ3NpemUgdG8gMU1CCiBteSAkbm9kZV9wcmltYXJ5ID0g UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwcmltYXJ5Jyk7CiAkbm9kZV9wcmltYXJ5 LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gMSwgZXh0cmEgPT4gWyctLXdhbC1zZWdzaXplPTEn XSk7CkBAIC00NCw4ICs1NCw5IEBAICRub2RlX3N0YW5kYnktPmFwcGVuZF9jb25mKCdwb3N0Z3Jl c3FsLmNvbmYnLCAicHJpbWFyeV9zbG90X25hbWUgPSAncmVwMSciKTsKIAogJG5vZGVfc3RhbmRi eS0+c3RhcnQ7CiAKLSMgV2FpdCB1bnRpbCBzdGFuZGJ5IGhhcyByZXBsYXllZCBlbm91Z2ggZGF0 YQotJG5vZGVfcHJpbWFyeS0+d2FpdF9mb3JfY2F0Y2h1cCgkbm9kZV9zdGFuZGJ5KTsKKyMgV2Fp dCB1bnRpbCB0aGUgc3RhbmRieSBoYXMgcmVwbGF5ZWQgZW5vdWdoIGRhdGEsIGFuZCB0aGUgcHJp bWFyeSBoYXMKKyMgcHJvY2Vzc2VkIGZlZWRiYWNrIGFkdmFuY2luZyB0aGUgc2xvdCdzIHJlc3Rh cnRfbHNuLgord2FpdF9mb3Jfc3RhbmRieV9hbmRfc2xvdF9jYXRjaHVwKCRub2RlX3ByaW1hcnks ICRub2RlX3N0YW5kYnksICdyZXAxJyk7CiAKICMgU3RvcCBzdGFuZGJ5CiAkbm9kZV9zdGFuZGJ5 LT5zdG9wOwpAQCAtNzksNyArOTAsNyBAQCBpcygkcmVzdWx0LCAicmVzZXJ2ZWR8dCIsICdjaGVj ayB0aGF0IHNsb3QgaXMgd29ya2luZycpOwogIyBUaGUgc3RhbmRieSBjYW4gcmVjb25uZWN0IHRv IHByaW1hcnkKICRub2RlX3N0YW5kYnktPnN0YXJ0OwogCi0kbm9kZV9wcmltYXJ5LT53YWl0X2Zv cl9jYXRjaHVwKCRub2RlX3N0YW5kYnkpOword2FpdF9mb3Jfc3RhbmRieV9hbmRfc2xvdF9jYXRj aHVwKCRub2RlX3ByaW1hcnksICRub2RlX3N0YW5kYnksICdyZXAxJyk7CiAKICRub2RlX3N0YW5k YnktPnN0b3A7CiAKQEAgLTEwOSw3ICsxMjAsNyBAQCBpcygkcmVzdWx0LCAicmVzZXJ2ZWQiLAog CiAjIFRoZSBzdGFuZGJ5IGNhbiByZWNvbm5lY3QgdG8gcHJpbWFyeQogJG5vZGVfc3RhbmRieS0+ c3RhcnQ7Ci0kbm9kZV9wcmltYXJ5LT53YWl0X2Zvcl9jYXRjaHVwKCRub2RlX3N0YW5kYnkpOwor d2FpdF9mb3Jfc3RhbmRieV9hbmRfc2xvdF9jYXRjaHVwKCRub2RlX3ByaW1hcnksICRub2RlX3N0 YW5kYnksICdyZXAxJyk7CiAkbm9kZV9zdGFuZGJ5LT5zdG9wOwogCiAjIHdhbF9rZWVwX3NpemUg b3ZlcnJpZGVzIG1heF9zbG90X3dhbF9rZWVwX3NpemUKQEAgLTEyOCw3ICsxMzksNyBAQCAkcmVz dWx0ID0gJG5vZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAKICMgVGhlIHN0YW5k YnkgY2FuIHJlY29ubmVjdCB0byBwcmltYXJ5CiAkbm9kZV9zdGFuZGJ5LT5zdGFydDsKLSRub2Rl X3ByaW1hcnktPndhaXRfZm9yX2NhdGNodXAoJG5vZGVfc3RhbmRieSk7Cit3YWl0X2Zvcl9zdGFu ZGJ5X2FuZF9zbG90X2NhdGNodXAoJG5vZGVfcHJpbWFyeSwgJG5vZGVfc3RhbmRieSwgJ3JlcDEn KTsKICRub2RlX3N0YW5kYnktPnN0b3A7CiAKICMgQWR2YW5jZSBXQUwgYWdhaW4gd2l0aG91dCBj aGVja3BvaW50LCByZWR1Y2luZyByZW1haW4gYnkgNiBNQi4KQEAgLTE1NSw3ICsxNjYsNyBAQCBp cygkcmVzdWx0LCAidW5yZXNlcnZlZHx0IiwKICMgVGhlIHN0YW5kYnkgc3RpbGwgY2FuIGNvbm5l Y3QgdG8gcHJpbWFyeSBiZWZvcmUgYSBjaGVja3BvaW50CiAkbm9kZV9zdGFuZGJ5LT5zdGFydDsK IAotJG5vZGVfcHJpbWFyeS0+d2FpdF9mb3JfY2F0Y2h1cCgkbm9kZV9zdGFuZGJ5KTsKK3dhaXRf Zm9yX3N0YW5kYnlfYW5kX3Nsb3RfY2F0Y2h1cCgkbm9kZV9wcmltYXJ5LCAkbm9kZV9zdGFuZGJ5 LCAncmVwMScpOwogCiAkbm9kZV9zdGFuZGJ5LT5zdG9wOwogCi0tIAoyLjUwLjEgKEFwcGxlIEdp dC0xNTUpCgo= --00000000000097e938065238ecbc--