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 1u8rv9-00CrC5-PF for pgsql-committers@arkaria.postgresql.org; Sun, 27 Apr 2025 02:39:08 +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 1u8rv7-008UkW-Vp for pgsql-committers@arkaria.postgresql.org; Sun, 27 Apr 2025 02:39:06 +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.94.2) (envelope-from ) id 1u8rv7-008UkO-Fs for pgsql-committers@lists.postgresql.org; Sun, 27 Apr 2025 02:39:06 +0000 Received: from mail-oo1-xc2b.google.com ([2607:f8b0:4864:20::c2b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u8rv4-0029Pl-2H for pgsql-committers@lists.postgresql.org; Sun, 27 Apr 2025 02:39:04 +0000 Received: by mail-oo1-xc2b.google.com with SMTP id 006d021491bc7-606440d92eeso1939518eaf.2 for ; Sat, 26 Apr 2025 19:39:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1745721542; x=1746326342; 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=ofalZdAg775DISIpX4l/bBijcGKsSjTFhYodh1a8ouo=; b=JGA9S/jYyhcjCZyuFOdL7UapU94jteRMobjd9QBxf8lpbvFqE3mBBC9mqvTbeKZCxQ l0TMmxXeelt4Ux61qUhrUi5YmsG+Ag6HR4irlkR1Rly/5dFc4GPNBjDIg4FdX+kf1cis ljiBEyIfanES6+6KCwlT2l5JaEGMwLYrpNtTxQmTs3g7/SWBVo/574vAKN3XBusHO6nM wvIvMHEtqCYPEH6XBRim6JIcVTn7Svz3pL94cD1SmkkksxyD8r1zjtGiiuGQTUbEYEgf GEWIjPT5QpTle8O4O0XE6JZPLKHFepwxLhqpC5SwXqsu+7Cvhv50irCGF9ImXm8LipCu uxHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745721542; x=1746326342; 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=ofalZdAg775DISIpX4l/bBijcGKsSjTFhYodh1a8ouo=; b=qZEG/AkMRwQffUn0/UHhMc0LdLXEEp2UUcsLICGwkXKVPdpZL0KueSX+Cf180iDHdb NhtkVEtvrZG97nBzu2ENLUBVftgSap82tTMHh27yeclOtzFWPnNYzto8jMfMqwqki37h BxeD1AKLI9hrMlftZ7J69ls8pLuYsHxSPBlgVeyPoPyTOrid57nCqc80/vVJ9kitUpFY cCL64nbR+gyTo1To4y9pBN1TKJqqgmAZ0uWnj/QvjPBOHQw5OHOa40VlpviBaMWTub82 1hPm2gNtZiEBvNBLAH5StmrkZNYO/Y8659+7uy4o30OH7/+aH14XgYHWjDaMw0Dd3CqW ZGIw== X-Gm-Message-State: AOJu0YwsxImhUChSChrPHeUPsLmhW0qQNYPxLEi2gxuAbhCfj4jlXiY4 czBBwjE1Jmok6p1rT8t2rgOE831b6lrLebGM99hre6xD7crPfCDv2sAfYqpgGqlqrlMHPWiHqAe uDksi1HsggteDvN5hTDEI0P2Cy2V6w8xn7Le+ X-Gm-Gg: ASbGncsCkasOLo3JUkSr+S2EMjVhTI0fZoLOLhlT8tPtEUXigrxP+y7C9Gfo4qlVBEn HOdhyLYgk3A+h+ZZNwnPz+QBKJJG5zTCIrxz9dEMOVXDmRrIJ90wRdtKZEroicNtYHBfLDb0HtS 9q0UCFa3uK69c+HKUS76lvag== X-Google-Smtp-Source: AGHT+IEm90RgX5Vu7coxOK5wnwRXv2Q5Xt9nwceCfm93PM9hV5q/Ja5rCkTTzT2wYvuaMBUedDc1n4HKOoyOZPhcLCI= X-Received: by 2002:a05:6820:1b1a:b0:603:f29b:85b4 with SMTP id 006d021491bc7-606527b2a30mr3828579eaf.0.1745721542156; Sat, 26 Apr 2025 19:39:02 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Mark Dilger Date: Sat, 26 Apr 2025 19:38:51 -0700 X-Gm-Features: ATxdqUF3VsSlTaPRNAcADZfnZem3qqK5OD1W41a-BHhANm1GTyTz1b7XIZIO0SY Message-ID: Subject: Re: pgsql: Improve nbtree skip scan primitive scan scheduling. To: Peter Geoghegan , Matthias van de Meent Cc: pgsql-committers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000660dd70633b97895" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000660dd70633b97895 Content-Type: multipart/alternative; boundary="000000000000660dd40633b97893" --000000000000660dd40633b97893 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Peter, Matthias, thanks kindly for the good work on skipscans! While admiring the recent performance improvements, I found a test case which fails after commit 21a152b37f36c9563d1b0b058fe1436baf578b4c. Please find a reproducible test case, attached. Thanks! On Fri, Apr 4, 2025 at 10:58=E2=80=AFAM Peter Geoghegan wrote: > Improve nbtree skip scan primitive scan scheduling. > > Don't allow nbtree scans with skip arrays to end any primitive scan on > its first leaf page without giving some consideration to how many times > the scan's arrays advanced while changing at least one skip array > (though continue not caring about the number of array advancements that > only affected SAOP arrays, even during skip scans with SAOP arrays). > Now when a scan performs more than 3 such array advancements in the > course of reading a single leaf page, it is taken as a signal that the > next page is unlikely to be skippable. We'll therefore continue the > ongoing primitive index scan, at least until we can perform a recheck > against the next page's finaltup. > > Testing has shown that this new heuristic occasionally makes all the > difference with skip scans that were expected to rely on the "passed > first page" heuristic added by commit 9a2e2a28. Without it, there is a > remaining risk that certain kinds of skip scans will never quite manage > to clear the initial hurdle of performing a primitive scan that lasts > beyond its first leaf page (or that such a skip scan will only clear > that initial hurdle when it has already wasted noticeably-many cycles > due to inefficient primitive scan scheduling). > > Follow-up to commits 92fe23d9 and 9a2e2a28. > > Author: Peter Geoghegan > Reviewed-By: Matthias van de Meent > Discussion: > https://postgr.es/m/CAH2-Wz=3DRVdG3zWytFWBsyW7fWH7zveFvTHed5JKEsuTT0RCO_A= @mail.gmail.com > > Branch > ------ > master > > Details > ------- > > https://git.postgresql.org/pg/commitdiff/21a152b37f36c9563d1b0b058fe1436b= af578b4c > > Modified Files > -------------- > src/backend/access/nbtree/nbtsearch.c | 16 +++++++ > src/backend/access/nbtree/nbtutils.c | 90 > +++++++++++++++++++++++------------ > src/include/access/nbtree.h | 3 +- > 3 files changed, 78 insertions(+), 31 deletions(-) > > --=20 =E2=80=94 Mark Dilger EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --000000000000660dd40633b97893 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Peter, Matthias, thanks kindly for the good work on skipsc= ans!

While admiring the recent performance improvements,= I found a test case which fails after commit=C2=A021a152b37f36c9563d1b0b05= 8fe1436baf578b4c.=C2=A0 Please find a reproducible test case, attached.

Thanks!



=
On Fri, Apr 4, 2025 at 10:58=E2=80=AFAM Peter Geoghegan <pg@bowt.ie> wrote:
Improve nbtree skip scan primitive scan scheduling.

Don't allow nbtree scans with skip arrays to end any primitive scan on<= br> its first leaf page without giving some consideration to how many times
the scan's arrays advanced while changing at least one skip array
(though continue not caring about the number of array advancements that
only affected SAOP arrays, even during skip scans with SAOP arrays).
Now when a scan performs more than 3 such array advancements in the
course of reading a single leaf page, it is taken as a signal that the
next page is unlikely to be skippable.=C2=A0 We'll therefore continue t= he
ongoing primitive index scan, at least until we can perform a recheck
against the next page's finaltup.

Testing has shown that this new heuristic occasionally makes all the
difference with skip scans that were expected to rely on the "passed first page" heuristic added by commit 9a2e2a28.=C2=A0 Without it, ther= e is a
remaining risk that certain kinds of skip scans will never quite manage
to clear the initial hurdle of performing a primitive scan that lasts
beyond its first leaf page (or that such a skip scan will only clear
that initial hurdle when it has already wasted noticeably-many cycles
due to inefficient primitive scan scheduling).

Follow-up to commits 92fe23d9 and 9a2e2a28.

Author: Peter Geoghegan <pg@bowt.ie>
Reviewed-By: Matthias van de Meent <boekewurm+postgres@gmail.com>
Discussion: = https://postgr.es/m/CAH2-Wz=3DRVdG3zWytFWBsyW7fWH7zveFvTHed5JKEsuTT0RCO_A@m= ail.gmail.com

Branch
------
master

Details
-------
https://git.postgre= sql.org/pg/commitdiff/21a152b37f36c9563d1b0b058fe1436baf578b4c

Modified Files
--------------
src/backend/access/nbtree/nbtsearch.c | 16 +++++++
src/backend/access/nbtree/nbtutils.c=C2=A0 | 90 +++++++++++++++++++++++----= --------
src/include/access/nbtree.h=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0= 3 +-
3 files changed, 78 insertions(+), 31 deletions(-)



--
=E2=80=94
Mark Dilger
EnterpriseDB:=C2=A0http://www.enterprisedb.com
The Enterprise PostgreSQL Com= pany
--000000000000660dd40633b97893-- --000000000000660dd70633b97895 Content-Type: application/octet-stream; name="v1-0001-Add-test-showing-a-problem-with-btree-index-scans.patch" Content-Disposition: attachment; filename="v1-0001-Add-test-showing-a-problem-with-btree-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9z1e65m0 RnJvbSA4ZTQwMTVlMDFjNDE2NDQ4Nzk1ZjI5MDAzZjVhNjY3ZWY0NTQzN2Q3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJrIERpbGdlciA8bWFyay5kaWxnZXJAZW50ZXJwcmlzZWRi LmNvbT4KRGF0ZTogU2F0LCAyNiBBcHIgMjAyNSAxOToyMToyNyAtMDcwMApTdWJqZWN0OiBbUEFU Q0ggdjFdIEFkZCB0ZXN0IHNob3dpbmcgYSBwcm9ibGVtIHdpdGggYnRyZWUgaW5kZXggc2NhbnMK CldoaWxlIHdvcmtpbmcgd2l0aCBhIG1vcmUgY29tcGxleCBzZXQgb2YgY2hhbmdlcywgSSBkaXNj b3ZlcmVkIGEKcHJvYmxlbSB3aGljaCBtaWdodCBoYXZlIGJlZW4gd2l0aCBidHJlZSwgdGhvdWdo IGl0IGNvdWxkIGhhdmUgYmVlbgp3aXRoIHNvbWUgb2YgbXkgb3duIGNvZGUgY2hhbmdlcy4gIEF0 IHRoYXQgdGltZSwgd2hpbGUgcGxheWluZyB3aXRoCmEgbXVjaCBtb3JlIGNvbXBsZXggcmVncmVz c2lvbiB0ZXN0IChub3QgaW5jbHVkZWQgaGVyZSBvd2luZyB0byB0aGUKaW50ZXJwbGF5IG9mIG15 IGNvZGUgY2hhbmdlcyB3aGljaCBhcmUgbm90IHJlbGV2YW50KSwgSSBjYXVnaHQgYQpzdGFjayB0 cmFjZToKClRSQVA6IGZhaWxlZCBBc3NlcnQoInNrdHJpZ19yZXF1aXJlZCIpLCBGaWxlOiAibmJ0 dXRpbHMuYyIsIExpbmU6IDE4NjEsIFBJRDogNzQzNzcKMCAgIHBvc3RncmVzICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEwMmM0ODVkMCBFeGNlcHRpb25hbENvbmRpdGlvbiAr IDEwOAoxICAgcG9zdGdyZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMTAy N2U2YWU4IF9idF9hZHZhbmNlX2FycmF5X2tleXMgKyAzODI4CjIgICBwb3N0Z3JlcyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxMDI3ZTUyODAgX2J0X2NoZWNrX2NvbXBhcmUg KyAzNzIKMyAgIHBvc3RncmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEw MjdlNGQ2YyBfYnRfY2hlY2trZXlzICsgMjAwCjQgICBwb3N0Z3JlcyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMDAwMDAxMDI3ZTA4YzAgX2J0X3JlYWRwYWdlICsgNzY0CjUgICBwb3N0 Z3JlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxMDI3ZGY5MTQgX2J0X3Jl YWRuZXh0cGFnZSArIDEyNjAKNiAgIHBvc3RncmVzICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4MDAwMDAwMDEwMjdkZmY3MCBfYnRfbmV4dCArIDc2CjcgICBwb3N0Z3JlcyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAweDAwMDAwMDAxMDI3ZGJjNDggYnRnZXRiaXRtYXAgKyAxMzYKOCAg IHBvc3RncmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEwMjdjZDQyMCBp bmRleF9nZXRiaXRtYXAgKyA2NAo5ICAgcG9zdGdyZXMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMHgwMDAwMDAwMTAyOTRkNDgwIE11bHRpRXhlY0JpdG1hcEluZGV4U2NhbiArIDIwNAoxMCAg cG9zdGdyZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMTAyOTRkMGRjIEJp dG1hcEhlYXBOZXh0ICsgMzEyCjExICBwb3N0Z3JlcyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDAwMDAwMDAxMDI5M2NmNDggRXhlY1NjYW4gKyAyMjgKMTIgIHBvc3RncmVzICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEwMjk0OWE0OCBmZXRjaF9pbnB1dF90dXBsZSAr IDExNgoxMyAgcG9zdGdyZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMTAy OTQ3ZjYwIEV4ZWNBZ2cgKyAxMzcyCjE0ICBwb3N0Z3JlcyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDAwMDAwMDAxMDI5MzMwZjAgc3RhbmRhcmRfRXhlY3V0b3JSdW4gKyAzMTIKMTUgIHBv c3RncmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEwMmIxM2RmNCBQb3J0 YWxSdW5TZWxlY3QgKyAyMzYKMTYgIHBvc3RncmVzICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4MDAwMDAwMDEwMmIxM2ExMCBQb3J0YWxSdW4gKyA0OTIKMTcgIHBvc3RncmVzICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEwMmIxMjk1NCBleGVjX3NpbXBsZV9xdWVyeSAr IDEyOTIKMTggIHBvc3RncmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEw MmIwZmI1OCBQb3N0Z3Jlc01haW4gKyAxMzg0CjE5ICBwb3N0Z3JlcyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwMDAwMDAxMDJiMGI3ZmMgQmFja2VuZEluaXRpYWxpemUgKyAwCjIwICBw b3N0Z3JlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxMDJhNjVkOGMgcG9z dG1hc3Rlcl9jaGlsZF9sYXVuY2ggKyAzNzIKMjEgIHBvc3RncmVzICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDAwMDAwMDEwMmE2OWZkYyBTZXJ2ZXJMb29wICsgNDk0OAoyMiAgcG9zdGdy ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMTAyYTY4MzAwIEluaXRQcm9j ZXNzR2xvYmFscyArIDAKMjMgIHBvc3RncmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDAwMDAwMDEwMjk4N2YwYyBoZWxwICsgMAoyNCAgZHlsZCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMDAwMDAwMThlYjE3MTU0IHN0YXJ0ICsgMjQ3NgoyMDI1LTA0LTI2IDE2OjEx OjM1LjE2OCBQRFQgcG9zdG1hc3Rlcls3NDM1Nl0gTE9HOiAgY2xpZW50IGJhY2tlbmQgKFBJRCA3 NDM3Nykgd2FzIHRlcm1pbmF0ZWQgYnkgc2lnbmFsIDY6IEFib3J0IHRyYXA6IDYKCkFmdGVyIHJl bW92aW5nIG15IG93biBjaGFuZ2VzIGFuZCBjb2RlLCBJIGRpZCBub3QgaGFwcGVuIHVwb24gYW55 CnNpbWlsYXIgc3RhY2sgdHJhY2VzLCBidXQgbWFuYWdlZCB0byBpc29sYXRlIGEgc2ltcGxpZmll ZCByZWdyZXNzaW9uCnRlc3QgdGhhdCBjb25zaXN0ZW50bHkgcmVwcm9kdWNlcyB0aGUgYnVnLiAg QSBwYXRjaCBvZiB0aGF0IHRlc3QgaXMKaW5jbHVkZWQgaGVyZS4KLS0tCiBzcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL19idF9za2lwc2Nhbi5vdXQgfCA1MyArKysrKysrKysrKysrKysrKysrKysr CiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgfCAgMiArCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9fYnRfc2tpcHNjYW4uc3FsICAgICAgfCA0MCArKysrKysrKysrKysr KysrCiAzIGZpbGVzIGNoYW5nZWQsIDk1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL19idF9za2lwc2Nhbi5vdXQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9fYnRfc2tpcHNjYW4uc3FsCgpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9fYnRfc2tpcHNjYW4ub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9fYnRfc2tpcHNjYW4ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi4wYTcwYTU1NDE2NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvX2J0X3NraXBzY2FuLm91dApAQCAtMCwwICsxLDUzIEBACitDUkVB VEUgVEFCTEUgdGVzdCAoCisJYWlkCQkJSU5URUdFUiwKKwliaWQJCQlJTlRFR0VSLAorCWFyeQkJ CUZMT0FUNFtdCispOworU0VMRUNUIHNldHNlZWQoMy4wLzEwMjQuMCk7Cisgc2V0c2VlZCAKKy0t LS0tLS0tLQorIAorKDEgcm93KQorCitJTlNFUlQgSU5UTyB0ZXN0IChhaWQsIGJpZCwgYXJ5KQor CShTRUxFQ1QgYWlkLCBOVUxMLCBhcnkgRlJPTSAKKwkJKFNFTEVDVCBhaWQsIGFycmF5X2FnZyhy YW5kb20oKSkgQVMgYXJ5CisJCQlGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIEFTIGFpZCwg Z2VuZXJhdGVfc2VyaWVzKDEsMTApCisJCQlHUk9VUCBCWSBhaWQKKwkJKSBBUyBzcworCSk7CitJ TlNFUlQgSU5UTyB0ZXN0IChhaWQsIGJpZCwgYXJ5KQorCShTRUxFQ1QgYWlkLCBkcmlmdCwgYXJy YXlfYWdnKHJhbmRvbSgpKSBBUyBhcnkKKwkJRlJPTSB0ZXN0LCBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwKSBBUyBkcmlmdCwgZ2VuZXJhdGVfc2VyaWVzKDEsMTApCisJCUdST1VQIEJZIGFpZCwgZHJp ZnQKKwkpOworQ1JFQVRFIElOREVYIHRlc3RfaWR4IE9OIHRlc3QgVVNJTkcgYnRyZWUgKGFpZCwg YmlkLCBhcnkpOworQU5BTFlaRSB0ZXN0OworLS0gc2NhbiB0aGUgdGFibGUsIGlnbm9yaW5nIHRo ZSBpbmRleAorU0VUIGVuYWJsZV9zZXFzY2FuID0gb247CitTRVQgZW5hYmxlX2luZGV4c2NhbiA9 IG9mZjsKK1NFVCBlbmFibGVfYml0bWFwc2NhbiA9IG9mZjsKK1NFVCBlbmFibGVfaW5kZXhvbmx5 c2NhbiA9IG9mZjsKK1NFTEVDVCBDT1VOVCgqKQorCUZST00gdGVzdAorCVdIRVJFIGFpZCA9IEFO WShBUlJBWVsxLDEwLDEwMCwxMDAwXSkKKwkgIEFORCBhcnkgPCAnezAuMSwwLjIsMC4zLDAuNCww LjUsMC42LDAuNywwLjgsMCw5LDEuMH0nOjpmbG9hdDRbXTsKKyBjb3VudCAKKy0tLS0tLS0KKyAg IDQyNAorKDEgcm93KQorCistLSBzY2FuIHRoZSBpbmRleCwgZXhwZWN0aW5nIHRoZSBzYW1lIHJl c3VsdHMgYXMgYWJvdmUKK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsKK1NFVCBlbmFibGVfaW5k ZXhzY2FuID0gb247CitTRVQgZW5hYmxlX2JpdG1hcHNjYW4gPSBvbjsKK1NFVCBlbmFibGVfaW5k ZXhvbmx5c2NhbiA9IG9uOworU0VMRUNUIENPVU5UKCopCisJRlJPTSB0ZXN0CisJV0hFUkUgYWlk ID0gQU5ZKEFSUkFZWzEsMTAsMTAwLDEwMDBdKQorCSAgQU5EIGFyeSA8ICd7MC4xLDAuMiwwLjMs MC40LDAuNSwwLjYsMC43LDAuOCwwLDksMS4wfSc6OmZsb2F0NFtdOworIGNvdW50IAorLS0tLS0t LQorICAgNDI0CisoMSByb3cpCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxs ZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IGE0 MjRiZTJhNmJmLi4wNDNmNDcyYTYwNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJh bGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBA IC0xMSw2ICsxMSw4IEBACiAjIHJlcXVpcmVkIHNldHVwIHN0ZXBzCiB0ZXN0OiB0ZXN0X3NldHVw CiAKK3Rlc3Q6IF9idF9za2lwc2NhbgorCiAjIC0tLS0tLS0tLS0KICMgVGhlIGZpcnN0IGdyb3Vw IG9mIHBhcmFsbGVsIHRlc3RzCiAjIC0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL19idF9za2lwc2Nhbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9fYnRfc2tp cHNjYW4uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NjQxZjEw Yzk0NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL19idF9za2lwc2Nh bi5zcWwKQEAgLTAsMCArMSw0MCBAQAorQ1JFQVRFIFRBQkxFIHRlc3QgKAorCWFpZAkJCUlOVEVH RVIsCisJYmlkCQkJSU5URUdFUiwKKwlhcnkJCQlGTE9BVDRbXQorKTsKK1NFTEVDVCBzZXRzZWVk KDMuMC8xMDI0LjApOworSU5TRVJUIElOVE8gdGVzdCAoYWlkLCBiaWQsIGFyeSkKKwkoU0VMRUNU IGFpZCwgTlVMTCwgYXJ5IEZST00gCisJCShTRUxFQ1QgYWlkLCBhcnJheV9hZ2cocmFuZG9tKCkp IEFTIGFyeQorCQkJRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBBUyBhaWQsIGdlbmVyYXRl X3NlcmllcygxLDEwKQorCQkJR1JPVVAgQlkgYWlkCisJCSkgQVMgc3MKKwkpOworSU5TRVJUIElO VE8gdGVzdCAoYWlkLCBiaWQsIGFyeSkKKwkoU0VMRUNUIGFpZCwgZHJpZnQsIGFycmF5X2FnZyhy YW5kb20oKSkgQVMgYXJ5CisJCUZST00gdGVzdCwgZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgQVMg ZHJpZnQsIGdlbmVyYXRlX3NlcmllcygxLDEwKQorCQlHUk9VUCBCWSBhaWQsIGRyaWZ0CisJKTsK K0NSRUFURSBJTkRFWCB0ZXN0X2lkeCBPTiB0ZXN0IFVTSU5HIGJ0cmVlIChhaWQsIGJpZCwgYXJ5 KTsKK0FOQUxZWkUgdGVzdDsKKworLS0gc2NhbiB0aGUgdGFibGUsIGlnbm9yaW5nIHRoZSBpbmRl eAorU0VUIGVuYWJsZV9zZXFzY2FuID0gb247CitTRVQgZW5hYmxlX2luZGV4c2NhbiA9IG9mZjsK K1NFVCBlbmFibGVfYml0bWFwc2NhbiA9IG9mZjsKK1NFVCBlbmFibGVfaW5kZXhvbmx5c2NhbiA9 IG9mZjsKK1NFTEVDVCBDT1VOVCgqKQorCUZST00gdGVzdAorCVdIRVJFIGFpZCA9IEFOWShBUlJB WVsxLDEwLDEwMCwxMDAwXSkKKwkgIEFORCBhcnkgPCAnezAuMSwwLjIsMC4zLDAuNCwwLjUsMC42 LDAuNywwLjgsMCw5LDEuMH0nOjpmbG9hdDRbXTsKKworLS0gc2NhbiB0aGUgaW5kZXgsIGV4cGVj dGluZyB0aGUgc2FtZSByZXN1bHRzIGFzIGFib3ZlCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7 CitTRVQgZW5hYmxlX2luZGV4c2NhbiA9IG9uOworU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0gb247 CitTRVQgZW5hYmxlX2luZGV4b25seXNjYW4gPSBvbjsKK1NFTEVDVCBDT1VOVCgqKQorCUZST00g dGVzdAorCVdIRVJFIGFpZCA9IEFOWShBUlJBWVsxLDEwLDEwMCwxMDAwXSkKKwkgIEFORCBhcnkg PCAnezAuMSwwLjIsMC4zLDAuNCwwLjUsMC42LDAuNywwLjgsMCw5LDEuMH0nOjpmbG9hdDRbXTsK LS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --000000000000660dd70633b97895--