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 1w5qrQ-003h0g-2C for pgsql-bugs@arkaria.postgresql.org; Thu, 26 Mar 2026 19:59:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5qrP-0059NR-0J for pgsql-bugs@arkaria.postgresql.org; Thu, 26 Mar 2026 19:59:19 +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 1w5qrO-0059NH-1u for pgsql-bugs@lists.postgresql.org; Thu, 26 Mar 2026 19:59:19 +0000 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w5qrM-00000001C7H-3Wtk for pgsql-bugs@lists.postgresql.org; Thu, 26 Mar 2026 19:59:18 +0000 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-486fba7ce4cso14599645e9.3 for ; Thu, 26 Mar 2026 12:59:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774555155; x=1775159955; 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=7o+/dv3Q7sRhmC1O9v5vVtkjqoFHaHk/ol5y5HM8XFo=; b=gZ3CrkRc/qJ1QBI9bsLmEFTUUOJ4wuODSmYfUtdFfOBndFdjfNLHoAgoRCaln4+ct2 RJ9Bsmd6EjrnyfgdXwFLx9o7ygruxna2ysu5x3GFfcv0uejwJtQDJJ5TDP3gerVf16os 8RmkDrDfNe2MhsM1OaCMYSFZHNnh93cTfYeoVxq98a6ku+yazFacYfj6+GGegeZhekyC nCTCp9vMN4PMj7pDUB66HCjqmoQIHASlZ2QNATi6KrQoCgOq+k2FV6/NIvTBrTYMMI9q 1GN+BM7J/xox7pyiGP7RUKw3eXcbXmzNqHBzhzx38eo2P8umhmBVt9l+/SQlhI2ODX4H v4VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774555155; x=1775159955; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=7o+/dv3Q7sRhmC1O9v5vVtkjqoFHaHk/ol5y5HM8XFo=; b=eG0zuz/4On8Nf4MUSRH3y7bKxX3RR8ENgYhNuTmSg2BS1DsukRLx5HsR7SCDeUGBO5 X+Wggz+Ca6V7ugQ0OALaDYSxrKNDWbbKNzpKR6sGXZWnj2g+4vjyvHwh6/UgvCAA/EiW WmcKpquONZk9D1478FigfIeBjjpyhblTxxs2Xwj8GZ7KarhmEzdtoHuwZnHk512EmfBk Sn5073LNRZtPtx1kpBRzyZCp0ou/uzZnxNE8oOOkS7plFGVzrcvJiufZSej+QrwCtMG7 8VtqL46BWu5PLkWjbu6sFZXLPNI1Pe6ypOxGqdh1PRaNVx0ictrj3Wa9qAOXeFFG/VLf LAXw== X-Forwarded-Encrypted: i=1; AJvYcCVzCkoDGpOvhKA9YOQET4p98VNEEgogpKA1d0wbSoCeqkemsie+zfpopvxEDk6t9VwbbMHXCdvD14nW@lists.postgresql.org X-Gm-Message-State: AOJu0YxVloDgXCc3jsG07JbMXT1nx81JPzY2UJmG7+5x+WrcOWRKB7QX L1YzRkNpZcnEvj0Uz1M/YyypXeSAQCikzM1p25IsIKKqIXpmf1GwIWop X-Gm-Gg: ATEYQzyTP83F2lHAkzU/c21ay6h8k33RX0OGOcvh8qDP/7PMTv6N2EC9DEk/lFkrLC+ x23T+ZjHdDv1E2QMI4EWWD/dLAfM+zvgJ+Or3//ET9b9ivtgzUXvsZucr+0nzHkdJo7YUDPnX5J 9KTqDWsSshKViFSlBeLvhnXibSzZ1RN1DPDLGHp2wGswol34okKAmFTiXsmUtQK/DlZeN8C1D9g vppphNbWUZSD9IQ1mDhvi4j2Vzasz+83YT7BhgmkavLI16wyzatQvCeNBz8jXhLlMXeCpBkSogw F3+rtsc9nsXIujHxHjfwz1FPbUjtUg99gMqeKf7whF0PLVNFuoS3uCbVaan3ymxDAc+XSyAu3Lk rrrSLmTxMze9e7m4NMfMpI9kJ65mxHZ0rV7QPvga5JJegwaAAzJYlkc8bQC6HmrAgUM6r4xr9pp gJoseCG4QFxOKYYYCtI+Y2LKAveJjlkgdLKE10fwYV3iP0PglTfLmx6ISLaJrZw22vdHu9X2Qvh A== X-Received: by 2002:a05:600c:4744:b0:485:2a4b:7bc3 with SMTP id 5b1f17b1804b1-48727d5d6femr21455e9.4.1774555155370; Thu, 26 Mar 2026 12:59:15 -0700 (PDT) Received: from [192.168.0.86] (84.123.225.106.dyn.user.ono.com. [84.123.225.106]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48722cb0d83sm46763015e9.13.2026.03.26.12.59.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 26 Mar 2026 12:59:14 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------WrYEhs0WqzrgAbY29kE8WTCc" Message-ID: Date: Thu, 26 Mar 2026 20:59:13 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: BUG #19435: Error: "No relation entry for relid 2" Triggered by Complex Join with Self-Referencing Tables To: Alexander Korotkov Cc: Kirill Reshke , Tender Wang , Fujii Masao , ammmkilo@163.com, pgsql-bugs@lists.postgresql.org References: <19435-3cc1a87f291129f1@postgresql.org> <5a039d60-d13b-4cf0-a807-9c7269f06831@gmail.com> Content-Language: en-US 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. --------------WrYEhs0WqzrgAbY29kE8WTCc Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 20/3/26 15:02, Alexander Korotkov wrote: > OK. I've pushed this. Let's go back to > restrict_infos_logically_equal(). I'm still not convinced that we > need to check if required_relids is singleton. Why we can ignore > outer_relids for singleton, but can't do if, for instance, two > relations involved? Let's continue. In the attachment, the Tender's proposal that I changed a little and added some tests. As you can see in the tests, the SINGLETON limitation keeps duplicates of clauses like 'a.x + b.y = c'. This example shows the main flaw of this approach. Introducing the restrict_infos_logically_equal(), we do a little more job than just the equal() routine could because of the context where we call this function and on which clauses. But skipping all other RestrictInfo fields except required_relids seems excessive. - see the example with security_level difference - ignoring its value, we potentially might remove the clause with enforced security level in favour of an unsecured one. That's more, further some new optimisations might introduce more fields into RestrictInfo that should be checked to correctly decide on the equality, and we may forget to arrange this specific place. So, formally it works, and making the following replacement, we close the singleton issue: - if (bms_membership(a->required_relids) == BMS_SINGLETON && - a->security_level == b->security_level) + if (bms_equal(a->required_relids, b->required_relids) && + a->security_level == b->security_level && + a->is_pushed_down == b->is_pushed_down) but I'm unsure, in general, that this approach is conservative enough. Maybe we shouldn’t change this logic and invent one more optimisation ‘deduplication’ stage later, before the selectivity estimation stage. -- regards, Andrei Lepikhov, pgEdge --------------WrYEhs0WqzrgAbY29kE8WTCc Content-Type: text/plain; charset=UTF-8; name="0001-Improve-RestrictInfo-deduplication-after-self-join-e.patch" Content-Disposition: attachment; filename*0="0001-Improve-RestrictInfo-deduplication-after-self-join-e.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwMWI5ZGM4YjcyOGJlZjQ5MTA0ZmUxNjUyODQxNzcwZWRkYjBjNDVjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmVpIFYuIExlcGlraG92IiA8bGVwaWhvdkBn bWFpbC5jb20+CkRhdGU6IFRodSwgMjYgTWFyIDIwMjYgMTI6MTU6MDEgKzAxMDAKU3ViamVj dDogW1BBVENIXSBJbXByb3ZlIFJlc3RyaWN0SW5mbyBkZWR1cGxpY2F0aW9uIGFmdGVyIHNl bGYtam9pbgogZWxpbWluYXRpb24KCkFmdGVyIHNlbGYtam9pbiBlbGltaW5hdGlvbiByZXdy aXRlcyB2YXJub3MsIHR3byBSZXN0cmljdEluZm9zIGNhbgplbmQgdXAgd2l0aCBpZGVudGlj YWwgY2xhdXNlcyBidXQgZGlmZmVyZW50IG1ldGFkYXRhIChvdXRlcl9yZWxpZHMsCnJpbmZv X3NlcmlhbCkuICBUaGUgcHJldmlvdXMgcmVzdHJpY3RfaW5mb3NfbG9naWNhbGx5X2VxdWFs KCkKY29tcGFyZWQgZnVsbCBSZXN0cmljdEluZm8gc3RydWN0cywgbWlzc2luZyB0aGVzZSBk dXBsaWNhdGVzIGFuZApsZWF2aW5nIHJlZHVuZGFudCBmaWx0ZXIgY29uZGl0aW9ucyBpbiB0 aGUgcGxhbi4KCkZvciBiYXNlIHJlc3RyaWN0aW9ucyAoc2luZ2xldG9uIHJlcXVpcmVkX3Jl bGlkcyksIGNvbXBhcmUgb25seSB0aGUKY2xhdXNlIGV4cHJlc3Npb24sIHdoaWNoIGlzIHN1 ZmZpY2llbnQgc2luY2UgdGhlc2UgYXJlIHB1c2hlZC1kb3duCmZpbHRlcnMgdGhhdCBkb24n dCBjYXJyeSBqb2luLXNlbWFudGljIG1lYW5pbmcuICBSZXRhaW4gdGhlIGZ1bGwKc3RydWN0 IGNvbXBhcmlzb24gZm9yIGpvaW4gY2xhdXNlcyAobm9uLXNpbmdsZXRvbiByZXF1aXJlZF9y ZWxpZHMpCnRvIGF2b2lkIGluY29ycmVjdGx5IG1lcmdpbmcgY2xhdXNlcyBhdCBkaWZmZXJl bnQgam9pbiBsZXZlbHMuCgpBbHNvIGNoZWNrIHNlY3VyaXR5X2xldmVsIHRvIHByZXZlbnQg bWVyZ2luZyBhbiBSTFMgcG9saWN5IHF1YWwgd2l0aCBhCnVzZXItd3JpdHRlbiBPTiBjbGF1 c2UgdGhhdCBoYXBwZW4gdG8gbG9vayBpZGVudGljYWwgYWZ0ZXIgU0pFLgoKQXV0aG9yOiBU ZW5kZXIgV2FuZyA8dG5kcndhbmdAZ21haWwuY29tPgpBdXRob3I6IEFsZXhhbmRlciBLb3Jv dGtvdiA8YWVrb3JvdGtvdkBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBBbmRyZWkgTGVwaWto b3YgPGxlcGlob3ZAZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jl c3FsLm9yZy9tZXNzYWdlLWlkLzE5NDM1LTNjYzFhODdmMjkxMTI5ZjElNDBwb3N0Z3Jlc3Fs Lm9yZwotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jIHwg MTYgKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQgICAgICAgIHwg NzggKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4u c3FsICAgICAgICAgICAgIHwgNDggKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg MTM5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9hbmFseXplam9pbnMuYwppbmRleCAxMmU5ZWQwZDBjNy4uZWQzNWM1MWEz OGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lu cy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jCkBA IC0xNjM1LDkgKzE2MzUsMTkgQEAgcmVzdHJpY3RfaW5mb3NfbG9naWNhbGx5X2VxdWFsKFJl c3RyaWN0SW5mbyAqYSwgUmVzdHJpY3RJbmZvICpiKQogCWludAkJCXNhdmVkX3JpbmZvX3Nl cmlhbCA9IGEtPnJpbmZvX3NlcmlhbDsKIAlib29sCQlyZXN1bHQ7CiAKLQlhLT5yaW5mb19z ZXJpYWwgPSBiLT5yaW5mb19zZXJpYWw7Ci0JcmVzdWx0ID0gZXF1YWwoYSwgYik7Ci0JYS0+ cmluZm9fc2VyaWFsID0gc2F2ZWRfcmluZm9fc2VyaWFsOworCWlmIChibXNfbWVtYmVyc2hp cChhLT5yZXF1aXJlZF9yZWxpZHMpID09IEJNU19TSU5HTEVUT04gJiYKKwkJYS0+c2VjdXJp dHlfbGV2ZWwgPT0gYi0+c2VjdXJpdHlfbGV2ZWwpCisJeworCQlBc3NlcnQoYS0+aXNfcHVz aGVkX2Rvd24gJiYgYi0+aXNfcHVzaGVkX2Rvd24pOworCisJCXJlc3VsdCA9IGVxdWFsKGEt PmNsYXVzZSwgYi0+Y2xhdXNlKTsKKwl9CisJZWxzZQorCXsKKwkJYS0+cmluZm9fc2VyaWFs ID0gYi0+cmluZm9fc2VyaWFsOworCQlyZXN1bHQgPSBlcXVhbChhLCBiKTsKKwkJYS0+cmlu Zm9fc2VyaWFsID0gc2F2ZWRfcmluZm9fc2VyaWFsOworCX0KIAogCXJldHVybiByZXN1bHQ7 CiB9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dAppbmRleCA4NDg3MmM2ZjA0ZS4u ODg3NjZlNWU2MjYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9p bi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dApAQCAtODEw OCw2ICs4MTA4LDg0IEBAIFNFTEVDVCAxIEFTIGMxIEZST00gc2wgc2wxIExFRlQgSk9JTiAo c2wgQVMgc2wyIE5BVFVSQUwgSk9JTiBzbCBBUyBzbDMpCiAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gc2wgc2w0CiAoNyByb3dzKQogCistLSBTSkU6IGFmdGVyIHNlbGYtam9pbiByZW1v dmFsIG1lcmdlcyBzbDcgYW5kIHNsNiwgdGhlIEpPSU4KKy0tIHByb2R1Y2VzIGEgcHVzaGVk LWRvd24gKGJvb2xfY29sIElTIE5PVCBOVUxMKSB0aGF0IGR1cGxpY2F0ZXMgdGhlIE9OCist LSBjbGF1c2UuICBWZXJpZnkgdGhhdCBjbGF1c2UgZGVkdXBsaWNhdGlvbiByZW1vdmVzIHRo ZSBkdXBsaWNhdGUsIGxlYXZpbmcKKy0tIGEgc2luZ2xlIEZpbHRlciBjb25kaXRpb24uCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgMSBGUk9NCisgIHNsIEFTIHNsNSBMRUZUIEpP SU4gKHNsIEFTIHNsNiBOQVRVUkFMIEpPSU4gc2wgQVMgc2w3KQorICAgIE9OIHNsNi5ib29s X2NvbCBJUyBOT1QgTlVMTAorICBMRUZUIEpPSU4gc2wgQVMgc2w4CisgICAgT04gc2w2LmJv b2xfY29sOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBTZXEgU2NhbiBv biBzbCBzbDUKKyAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgIEpvaW4g RmlsdGVyOiBzbDcuYm9vbF9jb2wKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzbCBzbDcK KyAgICAgICAgICAgICAgIEZpbHRlcjogKChib29sX2NvbCBJUyBOT1QgTlVMTCkgQU5EIChh IElTIE5PVCBOVUxMKSBBTkQgKGIgSVMgTk9UIE5VTEwpIEFORCAoYyBJUyBOT1QgTlVMTCkp CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2wgc2w4CisoNyByb3dzKQorCistLSBTSkU6 IG11bHRpLXJlbGF0aW9uIGNsYXVzZSBkZWR1cGxpY2F0aW9uIGFmdGVyIHNlbGYtam9pbiBy ZW1vdmFsLgorLS0gQWZ0ZXIgU0pFIHJlbW92ZXMgc2w0LCBib3RoIE9OIGNsYXVzZXMgY29s bGFwc2UgdG8gdGhlIHNhbWUgZXhwcmVzc2lvbgorLS0gYnV0IHdpdGggbm9uLXNpbmdsZXRv biByZXF1aXJlZF9yZWxpZHMgKHJlZmVyZW5jaW5nIHNsMiBhbmQgdGhlIGtlcHQgcmVsKS4K K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAxIEZST00KKyAgc2wgc2wxIExFRlQgSk9J TiBzbCBzbDIKKyAgICBMRUZUIEpPSU4gKHNsIEFTIHNsNCBOQVRVUkFMIEpPSU4gc2wgQVMg c2wzKQorICAgICAgT04gKHNsNC5iICsgc2wyLmIpIElTIE5PVCBOVUxMCisgICAgT04gKHNs My5iICsgc2wyLmIpIElTIE5PVCBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4K KyAgIC0+ICBTZXEgU2NhbiBvbiBzbCBzbDEKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAg ICAgSm9pbiBGaWx0ZXI6ICgoKHNsMy5iICsgc2wyLmIpIElTIE5PVCBOVUxMKSBBTkQgKChz bDMuYiArIHNsMi5iKSBJUyBOT1QgTlVMTCkpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g c2wgc2wyCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2wgc2wzCisgICAgICAgICAgICAg ICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVMTCkgQU5EIChiIElTIE5PVCBOVUxMKSBBTkQgKGMg SVMgTk9UIE5VTEwpIEFORCAoYm9vbF9jb2wgSVMgTk9UIE5VTEwpKQorKDcgcm93cykKKwor LS0gU0pFOiBjbGF1c2UgZGVkdXBsaWNhdGlvbiBtdXN0IG5vdCBtZXJnZSBjbGF1c2VzIHdp dGggZGlmZmVyZW50CistLSBzZWN1cml0eV9sZXZlbCB2YWx1ZXMuIEFuIFJMUyBwb2xpY3kg cXVhbCBhbmQgYQorLS0gdXNlci13cml0dGVuIE9OIGNsYXVzZSBtYXkgbG9vayBpZGVudGlj YWwgYWZ0ZXIgU0pFCistLSByZXdyaXRlcyB2YXJub3MsIGJ1dCByZW1vdmluZyB0aGUgUkxT IHF1YWwgd291bGQgYnJlYWsgdGhlIHNlY3VyaXR5CistLSBiYXJyaWVyIGd1YXJhbnRlZS4K K0FMVEVSIFRBQkxFIHNsIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CitBTFRFUiBUQUJM RSBzbCBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFk7CitDUkVBVEUgUE9MSUNZIHNsX3BvbGlj eSBPTiBzbCBVU0lORyAoYm9vbF9jb2wgSVMgTk9UIE5VTEwpOworQ1JFQVRFIFJPTEUgcmVn cmVzc19zamVfdXNlciBMT0dJTjsKK0dSQU5UIFNFTEVDVCBPTiBzbCBUTyByZWdyZXNzX3Nq ZV91c2VyOworU0VUIFJPTEUgcmVncmVzc19zamVfdXNlcjsKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCAxIEZST00KKyAgc2wgc2wxIExFRlQgSk9JTiAoCisgICAgKHNsIEFTIHNs MiBOQVRVUkFMIEpPSU4gc2wgQVMgc2wzKQorICAgIExFRlQgSk9JTiBzbCBzbDQKKyAgICBP TiBzbDIuYm9vbF9jb2wgSVMgTk9UIE5VTEwKKyAgKSBPTiBzbDIuYm9vbF9jb2wgSVMgTk9U IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgLT4gIFNlcSBTY2FuIG9u IHNsIHNsMQorICAgICAgICAgRmlsdGVyOiAoYm9vbF9jb2wgSVMgTk9UIE5VTEwpCisgICAt PiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAgICBKb2luIEZpbHRlcjogKHNsMy5i b29sX2NvbCBJUyBOT1QgTlVMTCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzbCBzbDMK KyAgICAgICAgICAgICAgIEZpbHRlcjogKChib29sX2NvbCBJUyBOT1QgTlVMTCkgQU5EIChi b29sX2NvbCBJUyBOT1QgTlVMTCkgQU5EIChhIElTIE5PVCBOVUxMKSBBTkQgKGIgSVMgTk9U IE5VTEwpIEFORCAoYyBJUyBOT1QgTlVMTCkpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g c2wgc2w0CisgICAgICAgICAgICAgICBGaWx0ZXI6IChib29sX2NvbCBJUyBOT1QgTlVMTCkK Kyg5IHJvd3MpCisKK1JFU0VUIFJPTEU7CitEUk9QIFBPTElDWSBzbF9wb2xpY3kgT04gc2w7 CitBTFRFUiBUQUJMRSBzbCBESVNBQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsKK0FMVEVSIFRB QkxFIHNsIE5PIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsKK1JFVk9LRSBTRUxFQ1QgT04g c2wgRlJPTSByZWdyZXNzX3NqZV91c2VyOworRFJPUCBST0xFIHJlZ3Jlc3Nfc2plX3VzZXI7 CiAtLSBDaGVjayBvcHRpbWl6YXRpb24gZGlzYWJsaW5nIGlmIGl0IHdpbGwgdmlvbGF0ZSBz cGVjaWFsIGpvaW4gY29uZGl0aW9ucy4KIC0tIFR3byBpZGVudGljYWwgam9pbmVkIHJlbGF0 aW9ucyBzYXRpc2ZpZXMgc2VsZiBqb2luIHJlbW92YWwgY29uZGl0aW9ucyBidXQKIC0tIHN0 YXkgaW4gZGlmZmVyZW50IHNwZWNpYWwgam9pbiBpbmZvcy4KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5z cWwKaW5kZXggMzBiNDc5ZGRhN2MuLjg2NGQ5NTY5NGY5IDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9qb2luLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2lu LnNxbApAQCAtMzE2Miw2ICszMTYyLDU0IEBAIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVD VCAxIEFTIGMxIEZST00gc2wgc2wxIExFRlQgSk9JTiAoc2wgQVMgc2wyIE5BVFVSQUwgSk9J TiBzbCBBUyBzbDMpCiAgIE9OIHNsMi5ib29sX2NvbCBMRUZUIEpPSU4gc2wgQVMgc2w0IE9O IHNsMi5ib29sX2NvbDsKIAorLS0gU0pFOiBhZnRlciBzZWxmLWpvaW4gcmVtb3ZhbCBtZXJn ZXMgc2w3IGFuZCBzbDYsIHRoZSBKT0lOCistLSBwcm9kdWNlcyBhIHB1c2hlZC1kb3duIChi b29sX2NvbCBJUyBOT1QgTlVMTCkgdGhhdCBkdXBsaWNhdGVzIHRoZSBPTgorLS0gY2xhdXNl LiAgVmVyaWZ5IHRoYXQgY2xhdXNlIGRlZHVwbGljYXRpb24gcmVtb3ZlcyB0aGUgZHVwbGlj YXRlLCBsZWF2aW5nCistLSBhIHNpbmdsZSBGaWx0ZXIgY29uZGl0aW9uLgorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIDEgRlJPTQorICBzbCBBUyBzbDUgTEVGVCBKT0lOIChzbCBB UyBzbDYgTkFUVVJBTCBKT0lOIHNsIEFTIHNsNykKKyAgICBPTiBzbDYuYm9vbF9jb2wgSVMg Tk9UIE5VTEwKKyAgTEVGVCBKT0lOIHNsIEFTIHNsOAorICAgIE9OIHNsNi5ib29sX2NvbDsK KworLS0gU0pFOiBtdWx0aS1yZWxhdGlvbiBjbGF1c2UgZGVkdXBsaWNhdGlvbiBhZnRlciBz ZWxmLWpvaW4gcmVtb3ZhbC4KKy0tIEFmdGVyIFNKRSByZW1vdmVzIHNsNCwgYm90aCBPTiBj bGF1c2VzIGNvbGxhcHNlIHRvIHRoZSBzYW1lIGV4cHJlc3Npb24KKy0tIGJ1dCB3aXRoIG5v bi1zaW5nbGV0b24gcmVxdWlyZWRfcmVsaWRzIChyZWZlcmVuY2luZyBzbDIgYW5kIHRoZSBr ZXB0IHJlbCkuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgMSBGUk9NCisgIHNsIHNs MSBMRUZUIEpPSU4gc2wgc2wyCisgICAgTEVGVCBKT0lOIChzbCBBUyBzbDQgTkFUVVJBTCBK T0lOIHNsIEFTIHNsMykKKyAgICAgIE9OIChzbDQuYiArIHNsMi5iKSBJUyBOT1QgTlVMTAor ICAgIE9OIChzbDMuYiArIHNsMi5iKSBJUyBOT1QgTlVMTDsKKworLS0gU0pFOiBjbGF1c2Ug ZGVkdXBsaWNhdGlvbiBtdXN0IG5vdCBtZXJnZSBjbGF1c2VzIHdpdGggZGlmZmVyZW50Cist LSBzZWN1cml0eV9sZXZlbCB2YWx1ZXMuIEFuIFJMUyBwb2xpY3kgcXVhbCBhbmQgYQorLS0g dXNlci13cml0dGVuIE9OIGNsYXVzZSBtYXkgbG9vayBpZGVudGljYWwgYWZ0ZXIgU0pFCist LSByZXdyaXRlcyB2YXJub3MsIGJ1dCByZW1vdmluZyB0aGUgUkxTIHF1YWwgd291bGQgYnJl YWsgdGhlIHNlY3VyaXR5CistLSBiYXJyaWVyIGd1YXJhbnRlZS4KK0FMVEVSIFRBQkxFIHNs IEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CitBTFRFUiBUQUJMRSBzbCBGT1JDRSBST1cg TEVWRUwgU0VDVVJJVFk7CitDUkVBVEUgUE9MSUNZIHNsX3BvbGljeSBPTiBzbCBVU0lORyAo Ym9vbF9jb2wgSVMgTk9UIE5VTEwpOworQ1JFQVRFIFJPTEUgcmVncmVzc19zamVfdXNlciBM T0dJTjsKK0dSQU5UIFNFTEVDVCBPTiBzbCBUTyByZWdyZXNzX3NqZV91c2VyOworU0VUIFJP TEUgcmVncmVzc19zamVfdXNlcjsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIDEg RlJPTQorICBzbCBzbDEgTEVGVCBKT0lOICgKKyAgICAoc2wgQVMgc2wyIE5BVFVSQUwgSk9J TiBzbCBBUyBzbDMpCisgICAgTEVGVCBKT0lOIHNsIHNsNAorICAgIE9OIHNsMi5ib29sX2Nv bCBJUyBOT1QgTlVMTAorICApIE9OIHNsMi5ib29sX2NvbCBJUyBOT1QgTlVMTDsKKworUkVT RVQgUk9MRTsKK0RST1AgUE9MSUNZIHNsX3BvbGljeSBPTiBzbDsKK0FMVEVSIFRBQkxFIHNs IERJU0FCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOworQUxURVIgVEFCTEUgc2wgTk8gRk9SQ0Ug Uk9XIExFVkVMIFNFQ1VSSVRZOworUkVWT0tFIFNFTEVDVCBPTiBzbCBGUk9NIHJlZ3Jlc3Nf c2plX3VzZXI7CitEUk9QIFJPTEUgcmVncmVzc19zamVfdXNlcjsKKwogLS0gQ2hlY2sgb3B0 aW1pemF0aW9uIGRpc2FibGluZyBpZiBpdCB3aWxsIHZpb2xhdGUgc3BlY2lhbCBqb2luIGNv bmRpdGlvbnMuCiAtLSBUd28gaWRlbnRpY2FsIGpvaW5lZCByZWxhdGlvbnMgc2F0aXNmaWVz IHNlbGYgam9pbiByZW1vdmFsIGNvbmRpdGlvbnMgYnV0CiAtLSBzdGF5IGluIGRpZmZlcmVu dCBzcGVjaWFsIGpvaW4gaW5mb3MuCi0tIAoyLjUxLjAKCg== --------------WrYEhs0WqzrgAbY29kE8WTCc--