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 1w2iae-000XB0-2c for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 04:33:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2iad-007Ii8-2L for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 04:33:03 +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 1w2iad-007Ii0-0v for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 04:33:03 +0000 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2iaZ-00000000Iag-3pL4 for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 04:33:02 +0000 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-486507134e4so16506965e9.0 for ; Tue, 17 Mar 2026 21:33:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773808380; cv=none; d=google.com; s=arc-20240605; b=Mj75K/1scn3ehgi64Zg4bOz6GaQVxG4WL4GEpA4V3hzY+VgVqrIH9tGvi/yf1bOArN rMlledKBnTJN792X7bpPa4oxpPW68Ipz9Ciju7OeR3z6HpyCn6ki8FdXxTDsGPRPh/8b d7dEcwboOfrtd9jsL6F180YtahlDWx+HMATVCXDkbYBxpujqgEsCE0H1BCjdnvUWvaIv MkzOfg2TgpAHVFiyqzEHS+BU3jclSAXEE1efVP09gBdXiOQuKYbohzDbFLWd8qcc53lY zuvIM936IL1rGJu3BjpKnzSNmYy4lBlp9YmD9rgtdw0eXx8v/21H+xQ3cP+PEwz20Bp9 I1xQ== 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=3wDcreh5aS428Oea6ym5mqTVyyM7IjE63G7T+VhBORA=; fh=EfpEbGzD6igBjQSVhGHY/9ha3AutHwXZSug+ZspPEKw=; b=UH1CKT3P/a286DhuBhOE2YXBoKMHBUIM87/d6Iz1MctTqnvYmxl0p1Oi+EeFaMRXRc nBhDdbyN56OG+028pSoKxPUtRbXO2jVwAWILvotjac9ZLVnuxAtte/EtLPBMhjGCAZik L+GsunraXSvsFB1qTlwVwynyMPa9ybfYfoMYryhpoi6yjg/7bNVV7wBekEmPnMeXaydm 4V2RCYSUkACbjzQxfcyGzmcBpXSvtdaxM7N86SIqLUNzswmzwlT+mkL1ykXdIGD0HTJN rNf8KAUaVoWyfdcAw1ITJiyKK4siWB0YQEI1LBtA9UQvxbzavrc7HpNlGlX+dtj38Lrm QG/g==; 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=20230601; t=1773808380; x=1774413180; 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=3wDcreh5aS428Oea6ym5mqTVyyM7IjE63G7T+VhBORA=; b=F5Z1jqNkVY8fYy4yBIi1DPhLG2/haZ/7ZMASpPWEWpB5/XGVfmSubDFWvVF/Jxf+rc ZWXILrPjDLyUZlVCbnDFoGUgzHCqobx9tn+E2WF2bXy8zn0cl+RdeBm6EA8yNk+zbXjq 4q+rtp2I0RZfxtOxPm042dfl0rwGQK/sUUceZw/VfRBI++2jq8ah8ZmELOUawyECQVY/ RQgjBUfKjPrcqTJiQopn0lRLc0XeMW2AhYtSVmsFKatrMdsNBfO/ZNaYkYDtdP1wcKfi Yajw7amy6X/jZsvkLXX0yUzXN7MinWwmdKeqkyjhcx0/gbClSfU69vy5lrPuAf174gx8 DyEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773808380; x=1774413180; 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=3wDcreh5aS428Oea6ym5mqTVyyM7IjE63G7T+VhBORA=; b=Nl+BcCj1GS/maxEB9t7/US+MKT80wleKCuPJrZZ/2knQSeCDN1asPCEP0hGKv+L3rR fhT6VQDKeOh/IY96H/QovXR63kYgh2tCuInOqNPKgjDLZ6ykaRNa0NGhIdJbeByDaSZ+ iiFnvwtcep1Y1w6hzS7UD/kDS2qHnS+aluFXARkRpygyiyeOrBtUdHKmiiSVOV+/bAf6 rrVRtvqoI9v5TXynoFc46vV+c3W0ZTszRD0jsgUImq888aGPe2DyGvrOTen7WAp90r6K Hifjb1rRHVDdT4NyvL7CjG8NwRd4Yz1Y0lPd7AoPlR4ZnIAcPsx7M0+FjJIvXfuyAwe+ IVGA== X-Forwarded-Encrypted: i=1; AJvYcCVXz3MB+6HIWzKHspi8JPC2lCnpjfutb/5nDlfz51YrY+C/K6pA7bXaRlaelEPILownUyh8QG4OXqKulfZ8@lists.postgresql.org X-Gm-Message-State: AOJu0YwN3qcgqzcSGGn5nMsUKB1Di0GoRp77CqP4PstG5JdhJn1iCUHz DYctlmYobhKY0tkCqf5fu9knGVM8DOIMtqQaJS8opqlYY+bPyTFApFD5xzI8uUb2c2Bn208ovps rq5TdGijr+Vc9oRIiZdwjnx0iTR715LM= X-Gm-Gg: ATEYQzwgciQ2m7gWhFQRyPFq10Ud7nP8DpnBshj7Ah9aOBEw9cawa+WcBLI5Ljfbbfl /wv7GwSkEyETUlzw0FUfvosNbhkZ5lgnh6pK94m9wot51BBC/sfP83k8opHRVpKl9Kw0JP1Itcc fnGZF6C/Ocn8eNPKC1S3fXvCVOyridsHbk++afCLHJBsLiECZItInE9YZAK7X+/4gQ6utFYLYxw v7pY+dlHP9Qi9SvTAvu8FCVqC4LTKe7KoAh5FGPnTJSsjGjMBCCo6wldnvQ+AZDP2A3ZJrKVkc9 yJnNzTI5sSeT7dfljKUmYa+sLKZ7pdqs9qWLeHjwzMlWUttr87p4BcQvY877W62+XvG3cyt+Fpf jbcBhbjxc X-Received: by 2002:a05:600c:8b0a:b0:479:1b0f:dfff with SMTP id 5b1f17b1804b1-486f44221f2mr31360095e9.10.1773808379958; Tue, 17 Mar 2026 21:32:59 -0700 (PDT) MIME-Version: 1.0 References: <52596e08-0902-475b-ad0f-265ec6918f19@gmail.com> <7791ec74-369d-48c7-969c-cf4ad18024f2@tantorlabs.com> <6b3aebb5-f26c-4f50-abd6-e733d452af26@gmail.com> <52f3c637-465d-4f0e-9546-732ecf61ab87@tantorlabs.com> <3fc74079-f429-48c8-ad8c-688b21d4d1c1@gmail.com> <4c761b02-5a60-4076-aa0c-9c6fef06e2c1@tantorlabs.com> <2bdf4a7e-f5b9-4e75-b5a3-1e2608fd3297@tantorlabs.com> <390a46f3-dbc4-4dc1-b49d-5cc61dd36026@tantorlabs.com> <977365f2-2ab7-4008-8d9c-f62ef5271cea@tantorlabs.com> In-Reply-To: <977365f2-2ab7-4008-8d9c-f62ef5271cea@tantorlabs.com> From: David Rowley Date: Wed, 18 Mar 2026 17:32:47 +1300 X-Gm-Features: AaiRm51_2kMPezgO4qW_NEqVipyX6L4pY8rrs5Ob_3N4FTQINn6GYZgOuNqdzII Message-ID: Subject: Re: Reduce planning time for large NOT IN lists containing NULL To: Ilia Evdokimov Cc: Zsolt Parragi , David Geier , PostgreSQL Developers Content-Type: multipart/mixed; boundary="0000000000006333b6064d44f289" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006333b6064d44f289 Content-Type: text/plain; charset="UTF-8" On Tue, 17 Mar 2026 at 23:51, Ilia Evdokimov wrote: > Rebased the v7-patches to fix git apply failure. Thanks. I've pushed 0001. I ended up renaming the new file to planner_est.sql as the function handles width estimate masking too, so I thought just calling it selectivity_est was a bit too restrictive. I went with planner_est. That means 0002 needed rebased. I've done that in the attached. Will look more closely at that one later. David --0000000000006333b6064d44f289 Content-Type: text/plain; charset="US-ASCII"; name="v8-0001-Reduce-planning-time-for-large-NOT-IN-lists-conta.patch" Content-Disposition: attachment; filename="v8-0001-Reduce-planning-time-for-large-NOT-IN-lists-conta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmvjop4o0 RnJvbSBhZTY5OGQyMmI0MGE2NjViNDA0OGY1ZGI2MWIzZjc5MWJlMGQyNDZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJbGlhIEV2ZG9raW1vdiA8aWx5YS5ldmRva2ltb3ZAdGFudG9y bGFicy5ydT4KRGF0ZTogVHVlLCAxNyBNYXIgMjAyNiAxMzo0MDo1NyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjhdIFJlZHVjZSBwbGFubmluZyB0aW1lIGZvciBsYXJnZSBOT1QgSU4gbGlzdHMgY29u dGFpbmluZwogTlVMTAoKRm9yIHggPD4gQUxMICguLi4pLCB0aGUgcHJlc2VuY2Ugb2YgYSBOVUxM IG1ha2VzIHRoZSBzZWxlY3Rpdml0eSAwLjAuCgpUaGUgcGxhbm5lciBjdXJyZW50bHkgc3RpbGwg aXRlcmF0ZXMgb3ZlciBhbGwgZWxlbWVudHMgYW5kIGNvbXB1dGVzCnBlci1lbGVtZW50IHNlbGVj dGl2aXR5LCBldmVuIHRob3VnaCB0aGUgZmluYWwgcmVzdWx0IGlzIGtub3duLgoKQWRkIGFuIGVh cmx5IE5VTEwgY2hlY2sgZm9yIGNvbnN0YW50IGFycmF5cyBhbmQgaW1tZWRpYXRlbHkgcmV0dXJu CjAuMCB1bmRlciBBTEwgc2VtYW50aWNzLgoKVGhpcyByZWR1Y2VzIHBsYW5uaW5nIHRpbWUgZm9y IGxhcmdlIDw+IEFMTCBsaXN0cyB3aXRob3V0CmNoYW5naW5nIHNlbWFudGljcy4KLS0tCiBzcmMv YmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyAgICAgICAgICB8IDE3ICsrKysrKysrKysrKysK IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGxhbm5lcl9lc3Qub3V0IHwgMzAgKysrKysrKysr KysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BsYW5uZXJfZXN0LnNxbCAgICAg IHwgMjIgKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygr KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXggZDRkYTBlOGRlYTkuLjA3M2Q5M2Y0ZjNk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwpAQCAtMjAxOCw2ICsyMDE4LDE1IEBAIHNjYWxh cmFycmF5c2VsKFBsYW5uZXJJbmZvICpyb290LAogCQlpZiAoYXJyYXlpc251bGwpCQkvKiBxdWFs IGNhbid0IHN1Y2NlZWQgaWYgbnVsbCBhcnJheSAqLwogCQkJcmV0dXJuIChTZWxlY3Rpdml0eSkg MC4wOwogCQlhcnJheXZhbCA9IERhdHVtR2V0QXJyYXlUeXBlUChhcnJheWRhdHVtKTsKKworCQkv KgorCQkgKiBGb3IgQUxMIHNlbWFudGljcywgaWYgdGhlIGFycmF5IGNvbnRhaW5zIE5VTEwsIGFz c3VtZSBvcGVyYXRvciBpcworCQkgKiBzdHJpY3QuIFRoZSBTY2FsYXJBcnJheU9wRXhwciBjYW5u b3QgZXZhbHVhdGUgdG8gVFJVRSwgc28gcmV0dXJuCisJCSAqIHplcm8uCisJCSAqLworCQlpZiAo IXVzZU9yICYmIGFycmF5X2NvbnRhaW5zX251bGxzKGFycmF5dmFsKSkKKwkJCXJldHVybiAoU2Vs ZWN0aXZpdHkpIDAuMDsKKwogCQlnZXRfdHlwbGVuYnl2YWxhbGlnbihBUlJfRUxFTVRZUEUoYXJy YXl2YWwpLAogCQkJCQkJCSAmZWxtbGVuLCAmZWxtYnl2YWwsICZlbG1hbGlnbik7CiAJCWRlY29u c3RydWN0X2FycmF5KGFycmF5dmFsLApAQCAtMjExNSw2ICsyMTI0LDE0IEBAIHNjYWxhcmFycmF5 c2VsKFBsYW5uZXJJbmZvICpyb290LAogCQkJTGlzdAkgICAqYXJnczsKIAkJCVNlbGVjdGl2aXR5 IHMyOwogCisJCQkvKgorCQkJICogRm9yIEFMTCBzZW1hbnRpY3MsIGlmIHRoZSBhcnJheSBjb250 YWlucyBOVUxMLCBhc3N1bWUgb3BlcmF0b3IKKwkJCSAqIGlzIHN0cmljdC4gVGhlIFNjYWxhckFy cmF5T3BFeHByIGNhbm5vdCBldmFsdWF0ZSB0byBUUlVFLCBzbworCQkJICogcmV0dXJuIHplcm8u CisJCQkgKi8KKwkJCWlmICghdXNlT3IgJiYgSXNBKGVsZW0sIENvbnN0KSAmJiAoKENvbnN0ICop IGVsZW0pLT5jb25zdGlzbnVsbCkKKwkJCQlyZXR1cm4gKFNlbGVjdGl2aXR5KSAwLjA7CisKIAkJ CS8qCiAJCQkgKiBUaGVvcmV0aWNhbGx5LCBpZiBlbGVtIGlzbid0IG9mIG5vbWluYWxfZWxlbWVu dF90eXBlIHdlIHNob3VsZAogCQkJICogaW5zZXJ0IGEgUmVsYWJlbFR5cGUsIGJ1dCBpdCBzZWVt cyB1bmxpa2VseSB0aGF0IGFueSBvcGVyYXRvcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wbGFubmVyX2VzdC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Bs YW5uZXJfZXN0Lm91dAppbmRleCAzYTQ3MDYxODAwYS4uNzcxODE5NzI4M2IgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGxhbm5lcl9lc3Qub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcGxhbm5lcl9lc3Qub3V0CkBAIC0xODMsNCArMTgzLDM0IEBAIGZh bHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJp ZXMgZyAgKGNvc3Q9Ti4uTiByb3dzPTEwMDAgd2lkdGg9TikKICgxIHJvdykKIAorLS0KKy0tIFRl c3QgPD4gQUxMIHdoZW4gYXJyYXkgaW5pdGlhbGx5IGNvbnRhaW5lZCBOVUxMIGJ1dCBubyBsb25n ZXIgZG9lcworLS0KK0NSRUFURSBGVU5DVElPTiByZXBsYWNlX2VsZW0oYXJyIGludFtdLCBpZHgg aW50LCB2YWwgaW50KQorUkVUVVJOUyBpbnRbXSBBUyAkJAorQkVHSU4KKyAgICAgICAgYXJyW2lk eF0gOj0gdmFsOworICAgICAgICBSRVRVUk4gYXJyOworZW5kOworJCQgbGFuZ3VhZ2UgcGxwZ3Nx bCBJTU1VVEFCTEU7CitTRUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3RzKAorICAgICdTRUxFQ1QgKiBG Uk9NIHRlbmsxIFdIRVJFIHVuaXF1ZTEgPD4gQUxMKEFSUkFZWzEsOTksM10pJywKK2ZhbHNlLCB0 cnVlLCBmYWxzZSwgdHJ1ZSApOworICAgICAgICAgICAgICAgICBleHBsYWluX21hc2tfY29zdHMg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHRlbmsxICAoY29zdD1OLi5OIHJvd3M9OTk5NyB3 aWR0aD1OKQorICAgRmlsdGVyOiAodW5pcXVlMSA8PiBBTEwgKCd7MSw5OSwzfSc6OmludGVnZXJb XSkpCisoMiByb3dzKQorCistLSBzYW1lIGFycmF5LCBjb25zdHJ1Y3RlZCBmcm9tIGFuIGFycmF5 IHdpdGggYSBOVUxMCitTRUxFQ1QgZXhwbGFpbl9tYXNrX2Nvc3RzKAorICAgICdTRUxFQ1QgKiBG Uk9NIHRlbmsxIFdIRVJFIHVuaXF1ZTEgPD4gQUxMKHJlcGxhY2VfZWxlbShBUlJBWVsxLE5VTEws M10sIDIsIDk5KSknLAorZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlICk7CisgICAgICAgICAgICAg ICAgIGV4cGxhaW5fbWFza19jb3N0cyAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gdGVuazEg IChjb3N0PU4uLk4gcm93cz05OTk3IHdpZHRoPU4pCisgICBGaWx0ZXI6ICh1bmlxdWUxIDw+IEFM TCAoJ3sxLDk5LDN9Jzo6aW50ZWdlcltdKSkKKygyIHJvd3MpCisKK0RST1AgRlVOQ1RJT04gcmVw bGFjZV9lbGVtOwogRFJPUCBGVU5DVElPTiBleHBsYWluX21hc2tfY29zdHModGV4dCwgYm9vbCwg Ym9vbCwgYm9vbCwgYm9vbCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wbGFu bmVyX2VzdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wbGFubmVyX2VzdC5zcWwKaW5kZXgg NDdkNWFlNjc5YzcuLjM5MWVjNDJhNmU3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9wbGFubmVyX2VzdC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGxhbm5lcl9lc3Qu c3FsCkBAIC0xMzEsNSArMTMxLDI3IEBAIFNFTEVDVCBleHBsYWluX21hc2tfY29zdHMoJCQKIFNF TEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDI1LjAsIDIuMCwgMC4wKSBnKHMpOyQkLAogZmFs c2UsIHRydWUsIGZhbHNlLCB0cnVlKTsKIAorLS0KKy0tIFRlc3QgPD4gQUxMIHdoZW4gYXJyYXkg aW5pdGlhbGx5IGNvbnRhaW5lZCBOVUxMIGJ1dCBubyBsb25nZXIgZG9lcworLS0KK0NSRUFURSBG VU5DVElPTiByZXBsYWNlX2VsZW0oYXJyIGludFtdLCBpZHggaW50LCB2YWwgaW50KQorUkVUVVJO UyBpbnRbXSBBUyAkJAorQkVHSU4KKyAgICAgICAgYXJyW2lkeF0gOj0gdmFsOworICAgICAgICBS RVRVUk4gYXJyOworZW5kOworJCQgbGFuZ3VhZ2UgcGxwZ3NxbCBJTU1VVEFCTEU7CisKK1NFTEVD VCBleHBsYWluX21hc2tfY29zdHMoCisgICAgJ1NFTEVDVCAqIEZST00gdGVuazEgV0hFUkUgdW5p cXVlMSA8PiBBTEwoQVJSQVlbMSw5OSwzXSknLAorZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlICk7 CisKKy0tIHNhbWUgYXJyYXksIGNvbnN0cnVjdGVkIGZyb20gYW4gYXJyYXkgd2l0aCBhIE5VTEwK K1NFTEVDVCBleHBsYWluX21hc2tfY29zdHMoCisgICAgJ1NFTEVDVCAqIEZST00gdGVuazEgV0hF UkUgdW5pcXVlMSA8PiBBTEwocmVwbGFjZV9lbGVtKEFSUkFZWzEsTlVMTCwzXSwgMiwgOTkpKScs CitmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUgKTsKKworRFJPUCBGVU5DVElPTiByZXBsYWNlX2Vs ZW07CisKIAogRFJPUCBGVU5DVElPTiBleHBsYWluX21hc2tfY29zdHModGV4dCwgYm9vbCwgYm9v bCwgYm9vbCwgYm9vbCk7Ci0tIAoyLjUxLjAKCg== --0000000000006333b6064d44f289--