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 1tweky-00GN8h-6v for pgsql-hackers@arkaria.postgresql.org; Mon, 24 Mar 2025 10:10: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 1twekw-000IlJ-VN for pgsql-hackers@arkaria.postgresql.org; Mon, 24 Mar 2025 10:10: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 1twekw-000IlB-D2 for pgsql-hackers@lists.postgresql.org; Mon, 24 Mar 2025 10:10:06 +0000 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tweku-000pmy-1Q for pgsql-hackers@lists.postgresql.org; Mon, 24 Mar 2025 10:10:05 +0000 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-43ce71582e9so27217675e9.1 for ; Mon, 24 Mar 2025 03:10:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742811003; x=1743415803; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=rHWWWFk6U5qahX+iMOmBVW/fE5Yj1l9y2iEVhbjod0w=; b=bu66n+ia2EM63Jd/TvRxx6ehgNMtpCyvUfMb2goerNeobOcciDlj3qmHnIQakwNi02 UbzAcDEXUS6J2KVoAaBrGl8xLS9dCdDHw+6SkTIS6aB028owjOpa28/LyFsI6Whbf8g+ /cuY0dYn7VDbjghqHOVI26VOxl3m6rRndyduYt78wOCwz+/JC2kHn4ABdKWQ8MFXcLUV hEfztqRZM27Qht7cZ4o57szEd+DUWXEoUIALTR4d+W/30hKrNk8uy1qLUTIFjgq/uKKy LFuM/bvJ6fmVr+zYLcA8Tkb1cTTBUl6bY3qbWBZoikFRimiVCe1jTJkj/c74k/fk8XMO W6Gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742811003; x=1743415803; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=rHWWWFk6U5qahX+iMOmBVW/fE5Yj1l9y2iEVhbjod0w=; b=chwpeaiyduUr1yLfoUkfC1Kz7YjcLcABsuQtHG64YEfQztnwSD9q8kE8ZX7FEOEawU g//zqhpyctWy/p4ChivpqTT5ptwENxt0GH6DXRyl/PuqBMb3FECmflRUc9+T3cCaPXgv Ijc2nNyb0Hi6Pgp5gqeEPfTBU4NyWvIepMUoMLw6jcfdvXd5VCVs4kFkU0j2TLKoD05+ TyCLxnXUNlzl5LTa4os5y68PmJbx3LzQFMYQwKgZU2exoNEaFW1AVq+vS92L39EUViiG oh7o6OdEvXfLYJWipi55tvHc34MmYZtTIxmJ1ewD8f9GwOhWi2Swzm7vWSXWHmxpBj9p nPWg== X-Forwarded-Encrypted: i=1; AJvYcCUJ3ZWSPhXDkm0eeEVWNz7L//8tRCx+/8yVaAgEV1w4M4KSGSh/8/QkqGkXfzXHPROjfcGlLOJR6OC+supW@lists.postgresql.org X-Gm-Message-State: AOJu0YwQ/aX+4O0wwdxwRVomiog8UzGMcB7nuFxVeHxN5QvsWY8P7mba W0nleQBYvcrAR5SN0LMtbBwsl78Jz2lvyCxduJArImyumGUfBiqS X-Gm-Gg: ASbGnctqW0/wAK/K4NuDa8c/gJ5EohnyKrd2CxST72P/taeqJYdhB5Q6F9lPbXLhg1L fbTmHL2E47aeJcpSCZC1leFghrA1kXCOWXXZf/HtarztiIAHfzGgTfFf8CTbXkk8x6pzg+eFTJF EVsqSK071JFt61dKEN4LfpVav62gkPQw6Qx8f71HqVHrFuFzjQlm8Wp0Eum5XO9GtibeF0v4w3k HvTSk+NPNQK67gGyn3YhHHpxCW2ZjsdHcY1rvXxtMHYFuSpKbC8rSqRbq9Hj0Ezccj67zfbr58B 9Ik5N+vqu3hWKAUu2JW5rXSfxYDWTHXfPITG7zknPX6fmzlvJy6paWlih8Te7yasDGzSDwdz3lq Bq0I= X-Google-Smtp-Source: AGHT+IEU66O7vtoAbpPSZim9LH19jaqmPNN52oRC9M0zLawVaKeRnJurZvH3UeATDKkZ5h2RJY0erw== X-Received: by 2002:a05:600c:b88:b0:43d:683:8caa with SMTP id 5b1f17b1804b1-43d509f643cmr120517565e9.15.1742811002426; Mon, 24 Mar 2025 03:10:02 -0700 (PDT) Received: from [192.168.0.89] (84.123.232.230.dyn.user.ono.com. [84.123.232.230]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-39abdaf0c0bsm6011184f8f.63.2025.03.24.03.10.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 24 Mar 2025 03:10:01 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------Qny2FFpZzYz0fh7R3UNMzgh0" Message-ID: <3ac7c436-81e1-4191-9caf-b0dd70b51511@gmail.com> Date: Mon, 24 Mar 2025 11:10:00 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC, WIP: OR-clause support for indexes To: Alexander Korotkov Cc: Alexander Lakhin , pgsql-hackers@lists.postgresql.org, Pavel Borisov , "a.rybakina" References: <567ED6CA.2040504@sigaev.ru> <3b717020-14d9-425f-8c60-ce336b5a23b3@postgrespro.ru> <43db6a40-5c5f-4909-ad62-3060b297e686@postgrespro.ru> <41ba3d47-2a48-476c-88d4-6ebd889a7af2@gmail.com> <036d64e6-4d47-485c-b047-6664d452b3e8@postgrespro.ru> <1a4f1631-86c1-4185-a520-03b24a389449@postgrespro.ru> Content-Language: en-AU From: Andrei Lepikhov In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------Qny2FFpZzYz0fh7R3UNMzgh0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, Playing with the feature, I found a slightly irritating permutation - even if this code doesn't group any clauses, it may permute positions of the quals. See: DROP TABLE IF EXISTS main_tbl; CREATE TABLE main_tbl(id bigint, hundred int, thousand int); CREATE INDEX mt_hundred_ix ON main_tbl(hundred); CREATE INDEX mt_thousand_ix ON main_tbl(thousand); VACUUM (ANALYZE) main_tbl; SET enable_seqscan = off; EXPLAIN (COSTS OFF) SELECT m.id, m.hundred, m.thousand FROM main_tbl m WHERE (m.hundred < 2 OR m.thousand < 3); Bitmap Heap Scan on public.main_tbl m Output: id, hundred, thousand Recheck Cond: ((m.thousand < 3) OR (m.hundred < 2)) -> BitmapOr -> Bitmap Index Scan on mt_thousand_ix Index Cond: (m.thousand < 3) -> Bitmap Index Scan on mt_hundred_ix Index Cond: (m.hundred < 2) Conditions on the columns "thousand" and "hundred" changed their places according to the initial positions defined in the user's SQL. It isn't okay. I see that users often use the trick of "OR order" to avoid unnecessary calculations - most frequently, Subplan evaluations. So, it makes sense to fix. In the attachment, I have included a quick fix for this issue. Although many tests returned to their initial (pre-18) state, I added some tests specifically related to this issue to make it clearer. -- regards, Andrei Lepikhov --------------Qny2FFpZzYz0fh7R3UNMzgh0 Content-Type: text/x-patch; charset=UTF-8; name="clause-permutation-fix.diff" Content-Disposition: attachment; filename="clause-permutation-fix.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IGE0M2NhMTZkNjgu LjdkOGVmMGM5MGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2lu ZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpA QCAtMTI1NCw2ICsxMjU0LDcgQEAgZ3JvdXBfc2ltaWxhcl9vcl9hcmdzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsIFJlc3RyaWN0SW5mbyAqcmluZm8pCiAJTGlzdENl bGwgICAqbGM7CiAJTGlzdENlbGwgICAqbGMyOwogCUxpc3QJICAgKm9yYXJnczsKKwlib29s CQlncm91cGluZ19oYXBwZW5lZCA9IGZhbHNlOwogCUxpc3QJICAgKnJlc3VsdCA9IE5JTDsK IAlJbmRleAkJcmVsaWQgPSByZWwtPnJlbGlkOwogCkBAIC0xNDY1LDEzICsxNDY2LDE4IEBA IGdyb3VwX3NpbWlsYXJfb3JfYXJncyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsLCBSZXN0cmljdEluZm8gKnJpbmZvKQogCQkJCQkJCQkJCQkJICAgcmluZm8tPmluY29t cGF0aWJsZV9yZWxpZHMsCiAJCQkJCQkJCQkJCQkgICByaW5mby0+b3V0ZXJfcmVsaWRzKTsK IAkJCQlyZXN1bHQgPSBsYXBwZW5kKHJlc3VsdCwgc3VicmluZm8pOworCQkJCWdyb3VwaW5n X2hhcHBlbmVkID0gdHJ1ZTsKIAkJCX0KIAogCQkJZ3JvdXBfc3RhcnQgPSBpOwogCQl9CiAJ fQogCXBmcmVlKG1hdGNoZXMpOwotCXJldHVybiByZXN1bHQ7CisKKwlpZiAoZ3JvdXBpbmdf aGFwcGVuZWQpCisJCXJldHVybiByZXN1bHQ7CisJZWxzZQorCQlyZXR1cm4gb3JhcmdzOwog fQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVf aW5kZXgub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0 CmluZGV4IGJkNWYwMDJjZjIuLmM2Zjg0YmRhNjQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKQEAgLTMyNDgsNiArMzI0OCwzNyBAQCBTRUxF Q1QgIGIucmVsbmFtZSwKICgyIHJvd3MpCiAKIERST1AgVEFCTEUgY29uY3VyX3RlbXBfdGFi XzEsIGNvbmN1cl90ZW1wX3RhYl8yLCByZWluZGV4X3RlbXBfYmVmb3JlOworLS0gTm8gT1It Y2xhdXNlIGdyb3VwaW5ncyBzaG91bGQgaGFwcGVuIC0gbm8gY2xhdXNlIHBlcm11dGF0aW9u cyBpbgorLS0gdGhlIGZpbHRlcmluZyBjb25kaXRpb25zIHdlIHNob3VsZCBzZWUgaW4gdGhl IEVYUExBSU4uCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHRlbmsxIFdI RVJFIHVuaXF1ZTEgPCAxIE9SIGh1bmRyZWQgPCAyOworICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5r MQorICAgUmVjaGVjayBDb25kOiAoKHVuaXF1ZTEgPCAxKSBPUiAoaHVuZHJlZCA8IDIpKQor ICAgLT4gIEJpdG1hcE9yCisgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVu azFfdW5pcXVlMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPCAxKQor ICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX2h1bmRyZWQKKyAgICAg ICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkIDwgMikKKyg3IHJvd3MpCisKKy0tIE9S IGNsYXVzZXMgb24gdGhlICd1bmlxdWUnIGNvbHVtbiBpcyBncm91cGVkLiBTbywgY2xhdXNl IHBlcm11dGF0aW9uIGhhcHBlbmVkCistLSBXZSBzZWUgaXQgaW4gdGhlICdSZWNoZWNrIENv bmQnIGFuZCBvcmRlciBvZiBCaXRtYXBPciBzdWJwYXRoczogaW5kZXggc2NhbiBvbgorLS0g dGhlICdodW5kcmVkJyBjb2x1bW4gb2NjdXBpZXMgdGhlIGZpcnN0IHBvc2l0aW9uLgorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSB0ZW5rMSBXSEVSRSB1bmlxdWUxIDwg MSBPUiB1bmlxdWUxIDwgMyBPUiBodW5kcmVkIDwgMjsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMQorICAgUmVjaGVjayBD b25kOiAoKGh1bmRyZWQgPCAyKSBPUiAoKHVuaXF1ZTEgPCAxKSBPUiAodW5pcXVlMSA8IDMp KSkKKyAgIC0+ICBCaXRtYXBPcgorICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9u IHRlbmsxX2h1bmRyZWQKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkIDwg MikKKyAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUxCisg ICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMSA8IEFOWSAoJ3sxLDN9Jzo6aW50 ZWdlcltdKSkKKyg3IHJvd3MpCisKIC0tIENoZWNrIGJpdG1hcCBzY2FuIGNhbiBjb25zaWRl ciBzaW1pbGFyIE9SIGFyZ3VtZW50cyBzZXBhcmF0ZWx5IHdpdGhvdXQKIC0tIGdyb3VwaW5n IHRoZW0gaW50byBTQU9QLgogQ1JFQVRFIFRBQkxFIGJpdG1hcF9zcGxpdF9vciAoYSBpbnQg Tk9UIE5VTEwsIGIgaW50IE5PVCBOVUxMLCBjIGludCBOT1QgTlVMTCk7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9qb2luLm91dAppbmRleCBhNTdiYjE4YzI0Li5hOTUwMTUzZDc2IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKQEAgLTQzMzMsMjAgKzQzMzMsMjAgQEAg c2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVuazEgYiBvbgogIE5lc3RlZCBMb29wCiAg ICBKb2luIEZpbHRlcjogKCgoYS51bmlxdWUxID0gMSkgQU5EIChiLnVuaXF1ZTEgPSAyKSkg T1IgKChhLnVuaXF1ZTIgPSAzKSBBTkQgKGIuaHVuZHJlZCA9IDQpKSkKICAgIC0+ICBCaXRt YXAgSGVhcCBTY2FuIG9uIHRlbmsxIGIKLSAgICAgICAgIFJlY2hlY2sgQ29uZDogKChodW5k cmVkID0gNCkgT1IgKHVuaXF1ZTEgPSAyKSkKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKCh1 bmlxdWUxID0gMikgT1IgKGh1bmRyZWQgPSA0KSkKICAgICAgICAgIC0+ICBCaXRtYXBPcgot ICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX2h1bmRyZWQK LSAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0gNCkKICAgICAg ICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUxCiAgICAg ICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMSA9IDIpCisgICAgICAgICAg ICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVuZHJlZAorICAgICAgICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0KQogICAgLT4gIE1hdGVyaWFs aXplCiAgICAgICAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMSBhCi0gICAgICAg ICAgICAgICBSZWNoZWNrIENvbmQ6ICgodW5pcXVlMiA9IDMpIE9SICh1bmlxdWUxID0gMSkp CisgICAgICAgICAgICAgICBSZWNoZWNrIENvbmQ6ICgodW5pcXVlMSA9IDEpIE9SICh1bmlx dWUyID0gMykpCiAgICAgICAgICAgICAgICAtPiAgQml0bWFwT3IKLSAgICAgICAgICAgICAg ICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUyCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IDMpCiAgICAgICAg ICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPSAxKQor ICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX3Vu aXF1ZTIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUy ID0gMykKICgxNyByb3dzKQogCiBleHBsYWluIChjb3N0cyBvZmYpCkBAIC00MzYwLDEyICs0 MzYwLDEyIEBAIHNlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24KICAgICAg ICAgIEZpbHRlcjogKCh1bmlxdWUxID0gMikgT1IgKHRlbiA9IDQpKQogICAgLT4gIE1hdGVy aWFsaXplCiAgICAgICAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMSBhCi0gICAg ICAgICAgICAgICBSZWNoZWNrIENvbmQ6ICgodW5pcXVlMiA9IDMpIE9SICh1bmlxdWUxID0g MSkpCisgICAgICAgICAgICAgICBSZWNoZWNrIENvbmQ6ICgodW5pcXVlMSA9IDEpIE9SICh1 bmlxdWUyID0gMykpCiAgICAgICAgICAgICAgICAtPiAgQml0bWFwT3IKLSAgICAgICAgICAg ICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUyCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMiA9IDMpCiAgICAg ICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVl MQogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVuaXF1ZTEgPSAx KQorICAgICAgICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsx X3VuaXF1ZTIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlx dWUyID0gMykKICgxMiByb3dzKQogCiBleHBsYWluIChjb3N0cyBvZmYpCkBAIC00Mzc3LDEy ICs0Mzc3LDEyIEBAIHNlbGVjdCAqIGZyb20gdGVuazEgYSBqb2luIHRlbmsxIGIgb24KICBO ZXN0ZWQgTG9vcAogICAgSm9pbiBGaWx0ZXI6ICgoKGEudW5pcXVlMSA9IDEpIEFORCAoYi51 bmlxdWUxID0gMikpIE9SICgoKGEudW5pcXVlMiA9IDMpIE9SIChhLnVuaXF1ZTIgPSA3KSkg QU5EIChiLmh1bmRyZWQgPSA0KSkpCiAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5r MSBiCi0gICAgICAgICBSZWNoZWNrIENvbmQ6ICgoaHVuZHJlZCA9IDQpIE9SICh1bmlxdWUx ID0gMikpCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgodW5pcXVlMSA9IDIpIE9SIChodW5k cmVkID0gNCkpCiAgICAgICAgICAtPiAgQml0bWFwT3IKLSAgICAgICAgICAgICAgIC0+ICBC aXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV9odW5kcmVkCi0gICAgICAgICAgICAgICAgICAg ICBJbmRleCBDb25kOiAoaHVuZHJlZCA9IDQpCiAgICAgICAgICAgICAgICAtPiAgQml0bWFw IEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMQogICAgICAgICAgICAgICAgICAgICAgSW5k ZXggQ29uZDogKHVuaXF1ZTEgPSAyKQorICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRl eCBTY2FuIG9uIHRlbmsxX2h1bmRyZWQKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENv bmQ6IChodW5kcmVkID0gNCkKICAgIC0+ICBNYXRlcmlhbGl6ZQogICAgICAgICAgLT4gIEJp dG1hcCBIZWFwIFNjYW4gb24gdGVuazEgYQogICAgICAgICAgICAgICAgUmVjaGVjayBDb25k OiAoKCh1bmlxdWUyID0gMykgT1IgKHVuaXF1ZTIgPSA3KSkgT1IgKHVuaXF1ZTEgPSAxKSkK QEAgLTQ0MDMsMTIgKzQ0MDMsMTIgQEAgc2VsZWN0ICogZnJvbSB0ZW5rMSBhIGpvaW4gdGVu azEgYiBvbgogIE5lc3RlZCBMb29wCiAgICBKb2luIEZpbHRlcjogKCgoYS51bmlxdWUxID0g MSkgQU5EIChiLnVuaXF1ZTEgPSAyKSkgT1IgKCgoYS51bmlxdWUyID0gMykgT1IgKGEudW5p cXVlMiA9IDcpKSBBTkQgKGIuaHVuZHJlZCA9IDQpKSkKICAgIC0+ICBCaXRtYXAgSGVhcCBT Y2FuIG9uIHRlbmsxIGIKLSAgICAgICAgIFJlY2hlY2sgQ29uZDogKChodW5kcmVkID0gNCkg T1IgKHVuaXF1ZTEgPSAyKSkKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKCh1bmlxdWUxID0g MikgT1IgKGh1bmRyZWQgPSA0KSkKICAgICAgICAgIC0+ICBCaXRtYXBPcgotICAgICAgICAg ICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHRlbmsxX2h1bmRyZWQKLSAgICAgICAg ICAgICAgICAgICAgIEluZGV4IENvbmQ6IChodW5kcmVkID0gNCkKICAgICAgICAgICAgICAg IC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0ZW5rMV91bmlxdWUxCiAgICAgICAgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMSA9IDIpCisgICAgICAgICAgICAgICAtPiAg Qml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfaHVuZHJlZAorICAgICAgICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKGh1bmRyZWQgPSA0KQogICAgLT4gIE1hdGVyaWFsaXplCiAgICAg ICAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0ZW5rMSBhCiAgICAgICAgICAgICAgICBS ZWNoZWNrIENvbmQ6ICgoKHVuaXF1ZTIgPSAzKSBPUiAodW5pcXVlMiA9IDcpKSBPUiAodW5p cXVlMSA9IDEpKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0 aXRpb25fam9pbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9q b2luLm91dAppbmRleCA5MzhjZWRkNzlhLi42MTAxYzhjN2NmIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dApAQCAtMjU2OCwyNCArMjU2 OCwyNCBAQCB3aGVyZSBub3QgZXhpc3RzIChzZWxlY3QgMSBmcm9tIHBydHgyCiAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHJ0eDFfMQogICAgICAgICAgICAgICAgRmlsdGVyOiAoKGEg PCAyMCkgQU5EIChjID0gOTEpKQogICAgICAgICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24g cHJ0eDJfMQotICAgICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoKGMgPSA5OSkgT1IgKGIg PSAocHJ0eDFfMS5iICsgMSkpKQorICAgICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoKGIg PSAocHJ0eDFfMS5iICsgMSkpIE9SIChjID0gOTkpKQogICAgICAgICAgICAgICAgRmlsdGVy OiAoYSA9IHBydHgxXzEuYSkKICAgICAgICAgICAgICAgIC0+ICBCaXRtYXBPcgotICAgICAg ICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHBydHgyXzFfY19pZHgK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChjID0gOTkpCiAgICAg ICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gcHJ0eDJfMV9iX2lk eAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGIgPSAocHJ0eDFf MS5iICsgMSkpCisgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4g b24gcHJ0eDJfMV9jX2lkeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKGMgPSA5OSkKICAgIC0+ICBOZXN0ZWQgTG9vcCBBbnRpIEpvaW4KICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwcnR4MV8yCiAgICAgICAgICAgICAgICBGaWx0ZXI6ICgoYSA8IDIw KSBBTkQgKGMgPSA5MSkpCiAgICAgICAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiBwcnR4 Ml8yCi0gICAgICAgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoYyA9IDk5KSBPUiAoYiA9IChw cnR4MV8yLmIgKyAxKSkpCisgICAgICAgICAgICAgICBSZWNoZWNrIENvbmQ6ICgoYiA9IChw cnR4MV8yLmIgKyAxKSkgT1IgKGMgPSA5OSkpCiAgICAgICAgICAgICAgICBGaWx0ZXI6IChh ID0gcHJ0eDFfMi5hKQogICAgICAgICAgICAgICAgLT4gIEJpdG1hcE9yCi0gICAgICAgICAg ICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gcHJ0eDJfMl9jX2lkeAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGMgPSA5OSkKICAgICAgICAg ICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBwcnR4Ml8yX2JfaWR4CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYiA9IChwcnR4MV8yLmIg KyAxKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBw cnR4Ml8yX2NfaWR4CisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAo YyA9IDk5KQogKDIzIHJvd3MpCiAKIHNlbGVjdCAqIGZyb20gcHJ0eDEKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCmluZGV4IGJlNTcwZGEwOGEuLjUxZTAzMDI5NGUg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbApAQCAtMTM1NSw2ICsx MzU1LDE3IEBAIFNFTEVDVCAgYi5yZWxuYW1lLAogICBPUkRFUiBCWSAxOwogRFJPUCBUQUJM RSBjb25jdXJfdGVtcF90YWJfMSwgY29uY3VyX3RlbXBfdGFiXzIsIHJlaW5kZXhfdGVtcF9i ZWZvcmU7CiAKKy0tIE5vIE9SLWNsYXVzZSBncm91cGluZ3Mgc2hvdWxkIGhhcHBlbiAtIG5v IGNsYXVzZSBwZXJtdXRhdGlvbnMgaW4KKy0tIHRoZSBmaWx0ZXJpbmcgY29uZGl0aW9ucyB3 ZSBzaG91bGQgc2VlIGluIHRoZSBFWFBMQUlOLgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTSB0ZW5rMSBXSEVSRSB1bmlxdWUxIDwgMSBPUiBodW5kcmVkIDwgMjsKKwor LS0gT1IgY2xhdXNlcyBvbiB0aGUgJ3VuaXF1ZScgY29sdW1uIGlzIGdyb3VwZWQuIFNvLCBj bGF1c2UgcGVybXV0YXRpb24gaGFwcGVuZWQKKy0tIFdlIHNlZSBpdCBpbiB0aGUgJ1JlY2hl Y2sgQ29uZCcgYW5kIG9yZGVyIG9mIEJpdG1hcE9yIHN1YnBhdGhzOiBpbmRleCBzY2FuIG9u CistLSB0aGUgJ2h1bmRyZWQnIGNvbHVtbiBvY2N1cGllcyB0aGUgZmlyc3QgcG9zaXRpb24u CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHRlbmsxIFdIRVJFIHVuaXF1 ZTEgPCAxIE9SIHVuaXF1ZTEgPCAzIE9SIGh1bmRyZWQgPCAyOworCiAtLSBDaGVjayBiaXRt YXAgc2NhbiBjYW4gY29uc2lkZXIgc2ltaWxhciBPUiBhcmd1bWVudHMgc2VwYXJhdGVseSB3 aXRob3V0CiAtLSBncm91cGluZyB0aGVtIGludG8gU0FPUC4KIENSRUFURSBUQUJMRSBiaXRt YXBfc3BsaXRfb3IgKGEgaW50IE5PVCBOVUxMLCBiIGludCBOT1QgTlVMTCwgYyBpbnQgTk9U IE5VTEwpOwo= --------------Qny2FFpZzYz0fh7R3UNMzgh0--