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 1qQvrG-0000lo-SX for pgsql-hackers@arkaria.postgresql.org; Tue, 01 Aug 2023 20:20:43 +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 1qQvi8-00A9VV-9M for pgsql-hackers@arkaria.postgresql.org; Tue, 01 Aug 2023 20:11:17 +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 1qQvi7-00A9VM-Ry for pgsql-hackers@lists.postgresql.org; Tue, 01 Aug 2023 20:11:17 +0000 Received: from smtp-fw-9106.amazon.com ([207.171.188.206]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qQvi6-000GYS-BI for pgsql-hackers@postgresql.org; Tue, 01 Aug 2023 20:11:16 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1690920674; x=1722456674; h=from:to:cc:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version:subject; bh=Kidc+4b1qFWUi6G9a8ImMAL/GtBOkH3BHvmENIHGdTg=; b=X3mPtvjXdiD8+SWsElnK8zWrTMMFzsV+sDe83A9oZ0+RR9DFoO7ChKPa Y4Fna7vrGjC21SMn1rwkVxHaRGf+ycXS9gWq5aNrtKDp/3GCApqsWX/Vc Mff+8ZG5BTz17gnx/njwtmazdgFmS2f/PtA+laVL5a6a/p8NTFJgUuzCz 4=; X-IronPort-AV: E=Sophos;i="6.01,248,1684800000"; d="scan'208";a="663254364" Subject: Re: POC, WIP: OR-clause support for indexes Thread-Topic: POC, WIP: OR-clause support for indexes Received: from pdx4-co-svc-p1-lb2-vlan3.amazon.com (HELO email-inbound-relay-iad-1e-m6i4x-7dc0ecf1.us-east-1.amazon.com) ([10.25.36.214]) by smtp-border-fw-9106.sea19.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Aug 2023 20:11:12 +0000 Received: from EX19MTAUEB002.ant.amazon.com (iad12-ws-svc-p26-lb9-vlan2.iad.amazon.com [10.40.163.34]) by email-inbound-relay-iad-1e-m6i4x-7dc0ecf1.us-east-1.amazon.com (Postfix) with ESMTPS id D63B380E25; Tue, 1 Aug 2023 20:11:08 +0000 (UTC) Received: from EX19D009UEB004.ant.amazon.com (10.252.135.31) by EX19MTAUEB002.ant.amazon.com (10.252.135.47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.30; Tue, 1 Aug 2023 20:11:08 +0000 Received: from EX19D009UEB003.ant.amazon.com (10.252.135.64) by EX19D009UEB004.ant.amazon.com (10.252.135.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.30; Tue, 1 Aug 2023 20:11:07 +0000 Received: from EX19D009UEB003.ant.amazon.com ([fe80::71d7:3fda:6f13:645a]) by EX19D009UEB003.ant.amazon.com ([fe80::71d7:3fda:6f13:645a%3]) with mapi id 15.02.1118.030; Tue, 1 Aug 2023 20:11:07 +0000 From: "Finnerty, Jim" To: Peter Geoghegan , Alena Rybakina CC: Marcos Pegoraro , Alena Rybakina , Andrey Lepikhov , "pgsql-hackers@postgresql.org" , "teodor@sigaev.ru" , Ranier Vilela , Tomas Vondra Thread-Index: AQHZv1KJxCN5oHqvQ0q8IlQab8ebP6/MosgAgARORACAAysmgIABxbgA///E/4A= Date: Tue, 1 Aug 2023 20:11:07 +0000 Message-ID: <4002251A-F36D-4148-A258-548C982397E2@amazon.com> References: <567ED6CA.2040504@sigaev.ru> <05838ca5-1c78-af81-34c1-19cae2516b61@postgrespro.ru> <919bfbcb-f812-758d-d687-71f89f0d9a68@postgrespro.ru> <7829312a-eb6b-b9ba-9719-71c9bc410884@yandex.ru> <9ea35f18-419d-efb7-b7c8-2e641a61f020@yandex.ru> <08f5ff34-1497-2123-8701-461a299035c9@yandex.ru> <8d714510-af73-a908-99c8-fc14536f2669@yandex.ru> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.106.178.21] Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk UGV0ZXIsIEknbSB2ZXJ5IGdsYWQgdG8gaGVhciB0aGF0IHlvdSdyZSByZXNlYXJjaGluZyB0aGlz IQ0KDQpXaWxsIHRoaXMgaW5jbHVkZSBza2lwLXNjYW4gb3B0aW1pemF0aW9ucyBmb3IgT1Igb3Ig SU4gcHJlZGljYXRlcywgb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcyBpbiBh IGxlYWRpbmcgbm9uLWNvbnN0YW50IGluZGV4IGNvbHVtbihzKSBpcyBzdWZmaWNpZW50bHkgc21h bGw/IGUuZy4gc3VwcG9zZSB0aGVyZSBpcyBhbiBPUkRFUiBCWSBiLCBhbmQgV0hFUkUgY2xhdXNl IHByZWRpY2F0ZXMgKGEgPSAxIEFORCBiID0gNSkgT1IgKGMgPiAxMiBBTkQgYiBCRVRXRUVOIDEw MCBBTkQgMjAwKS4gIFRoZW4gYSBzaW5nbGUgaW5kZXggc2NhbiBvbiBhbiBpbmRleCB3aXRoIGxl YWRpbmcgY29sdW1uIGIgY291bGQgdmlzaXQgYiA9IDUsIGFuZCB0aGVuIHRoZSByYW5nZSBiIGZy b20gMTAwOjIwMCwgYW5kIGRlbGl2ZXIgdGhlIHJvd3MgaW4gdGhlIG9yZGVyIHJlcXVlc3RlZC4g IE9yIGlmIHRoZSBwcmVkaWNhdGUgaXMgKGEgPSAxIEFORCBiID0gNSkgT1IgKGMgTElLRSAnWFla JyBBTkQgYiA8IDEyKSwgdGhlbiB5b3UgY2FuIHNjYW4ganVzdCBiIDwgMTIuICBPciBpZiB0aGUg aW5kZXggaXMgZGVmaW5lZCBvbiAoYSwgYikgYW5kIHlvdSBrbm93IHRoYXQgYiA9IDEwMCwgYW5k IHRoYXQgdGhlcmUgYXJlIG9ubHkgNCBkaXN0aW5jdCB2YWx1ZXMgb2YgY29sdW1uIGEsIHRoZW4g eW91IGNvdWxkIHNraXAgZWFjaCBkaXN0aW5jdCB2YWx1ZSBvZiBhIHdoZXJlIGIgPSAxMDAsIGFu ZCBzbyBvbi4gIA0KDQpJZiB5b3UgaGF2ZSBhbiBPUkRFUiBCWSBjbGF1c2UgYW5kIGEgbG93ZXIg YW5kIHVwcGVyIGJvdW5kIG9uIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIE9SREVSIEJZIGxpc3Qs IHlvdSBoYXZlIGEgcG90ZW50aWFsIHRvIHJlZHVjZSBzZWFyY2ggZWZmb3J0IHZlcnN1cyBhIGZ1 bGwgaW5kZXggc2NhbiwgZXZlbiB3aGVuIHRoYXQgdXBwZXIgYW5kIGxvd2VyIGJvdW5kIG5lZWRz IHRvIGJlIGRlcml2ZWQgZnJvbSBhIGNvbXBsZXggcHJlZGljYXRlLg0KDQpPZiBjb3Vyc2UsIGlm IHlvdSBoYXZlIGFuIElOIGxpc3QgeW91IGNhbiBlaXRoZXIgc2tpcCB0byB0aGUgZGlzdGluY3Qg dmFsdWVzIGxpc3RlZCBvciBzY2FuIHRoZSBlbnRpcmUgaW5kZXgsIGRlcGVuZGluZyBvbiBlc3Rp bWF0ZWQgY29zdC4NCg0KICAgIC9KaW0gRg0KDQrvu79PbiA4LzEvMjMsIDM6NDMgUE0sICJQZXRl ciBHZW9naGVnYW4iIDxwZ0Bib3d0LmllIDxtYWlsdG86cGdAYm93dC5pZT4+IHdyb3RlOg0KDQoN CkNBVVRJT046IFRoaXMgZW1haWwgb3JpZ2luYXRlZCBmcm9tIG91dHNpZGUgb2YgdGhlIG9yZ2Fu aXphdGlvbi4gRG8gbm90IGNsaWNrIGxpbmtzIG9yIG9wZW4gYXR0YWNobWVudHMgdW5sZXNzIHlv dSBjYW4gY29uZmlybSB0aGUgc2VuZGVyIGFuZCBrbm93IHRoZSBjb250ZW50IGlzIHNhZmUuDQoN Cg0KDQoNCg0KDQpPbiBNb24sIEp1bCAzMSwgMjAyMyBhdCA5OjM4IEFNIEFsZW5hIFJ5YmFraW5h IDxsZW5hLnJpYmFja2luYUB5YW5kZXgucnUgPG1haWx0bzpsZW5hLnJpYmFja2luYUB5YW5kZXgu cnU+PiB3cm90ZToNCj4gSSBub3RpY2VkIG9ubHkgb25lIHRoaW5nIHRoZXJlOiB3aGVuIHdlIGhh dmUgdW5zb3J0ZWQgYXJyYXkgdmFsdWVzIGluDQo+IFNPQVAsIHRoZSBxdWVyeSB0YWtlcyBsb25n ZXIgdGhhbg0KPiB3aGVuIGl0IGhhcyBhIHNvcnRlZCBhcnJheS4gSSdsbCBkb3VibGUtY2hlY2sg aXQganVzdCBpbiBjYXNlIGFuZCB3cml0ZQ0KPiBhYm91dCB0aGUgcmVzdWx0cyBsYXRlci4NCg0K DQpJIHdvdWxkIGV4cGVjdCB0aGUgQi1UcmVlIHByZXByb2Nlc3NpbmcgYnkgX2J0X3ByZXByb2Nl c3NfYXJyYXlfa2V5cygpDQp0byBiZSB2ZXJ5IHNsaWdodGx5IGZhc3RlciB3aGVuIHRoZSBxdWVy eSBpcyB3cml0dGVuIHdpdGggcHJlc29ydGVkLA0KZHVwbGljYXRlLWZyZWUgY29uc3RhbnRzLiBT b3J0aW5nIGlzIGZhc3RlciB3aGVuIHlvdSBkb24ndCByZWFsbHkgaGF2ZQ0KdG8gc29ydC4gSG93 ZXZlciwgSSB3b3VsZCBub3QgZXhwZWN0IHRoZSBlZmZlY3QgdG8gYmUgc2lnbmlmaWNhbnQNCmVu b3VnaCB0byBtYXR0ZXIsIGV4Y2VwdCBwZXJoYXBzIGluIHZlcnkgZXh0cmVtZSBjYXNlcy4NCkFs dGhvdWdoLi4uc29tZSBvZiB0aGUgY2FzZXMgeW91IGNhcmUgYWJvdXQgYXJlIHZlcnkgZXh0cmVt ZSBjYXNlcy4NCg0KDQo+IEkgYW0gYWxzbyB0ZXN0aW5nIHNvbWUgZXhwZXJpZW5jZSB3aXRoIG11 bHRpLWNvbHVtbiBpbmRleGVzIHVzaW5nIFNBT1BzLg0KDQoNCkhhdmUgeW91IHRob3VnaHQgYWJv dXQgYSBzaW1pbGFyIHRyYW5zZm9ybWF0aW9uIGZvciB3aGVuIHRoZSByb3cNCmNvbnN0cnVjdG9y IHN5bnRheCBoYXBwZW5zIHRvIGhhdmUgYmVlbiB1c2VkPw0KDQoNCkNvbnNpZGVyIGEgcXVlcnkg bGlrZSB0aGUgZm9sbG93aW5nLCBhZ2FpbnN0IGEgdGFibGUgd2l0aCBhIGNvbXBvc2l0ZQ0KaW5k ZXggb24gKGEsIGIpOg0KDQoNCnNlbGVjdCAqIGZyb20gbXVsdGlfdGVzdCB3aGVyZSAoIGEsIGIg KSBpbiAoKCAxLCAxICksICggMiwgMSApKTsNCg0KDQpUaGlzIHF1ZXJ5IHdpbGwgZ2V0IGEgQml0 bWFwT3IgYmFzZWQgcGxhbiB0aGF0J3Mgc2ltaWxhciB0byB0aGUgcGxhbnMNCnRoYXQgT1ItYmFz ZWQgcXVlcmllcyBhZmZlY3RlZCBieSB5b3VyIHRyYW5zZm9ybWF0aW9uIHBhdGNoIGdldCB0b2Rh eSwNCm9uIEhFQUQuIEhvd2V2ZXIsIHRoaXMgZXF1aXZhbGVudCBzcGVsbGluZyBoYXMgdGhlIHBv dGVudGlhbCB0byBiZQ0Kc2lnbmlmaWNhbnRseSBmYXN0ZXI6DQoNCg0Kc2VsZWN0ICogZnJvbSBt dWx0aV90ZXN0IHdoZXJlIGEgPSBhbnkoJ3sxLDJ9JykgYW5kIGIgPSAxOw0KDQoNCihPZiBjb3Vy c2UsIHRoaXMgaXMgbW9yZSBsaWtlbHkgdG8gYmUgdHJ1ZSB3aXRoIG15IG5idHJlZSBTQU9QIHBh dGNoIGluIHBsYWNlLikNCg0KDQpOb3RlIHRoYXQgd2UgY3VycmVudGx5IHdvbid0IHVzZSBSb3dD b21wYXJlRXhwciBpbiBtYW55IHNpbXBsZSBjYXNlcw0Kd2hlcmUgdGhlIHJvdyBjb25zdHJ1Y3Rv ciBzeW50YXggaGFzIGJlZW4gdXNlZC4gRm9yIGV4YW1wbGUsIGEgcXVlcnkNCmxpa2UgdGhpczoN Cg0KDQpzZWxlY3QgKiBmcm9tIG11bHRpX3Rlc3Qgd2hlcmUgKCBhLCBiICkgPSAoKCAyLCAxICkp Ow0KDQoNClRoaXMgY2FzZSBhbHJlYWR5IGludm9sdmVzIGEgdHJhbnNmb3JtYXRpb24gdGhhdCBp cyByb3VnaGx5IGNvbXBhcmFibGUNCnRvIHRoZSBvbmUgeW91J3JlIHdvcmtpbmcgb24gbm93LiBX ZSdsbCByZW1vdmUgdGhlIFJvd0NvbXBhcmVFeHByDQpkdXJpbmcgcGFyc2luZy4gSXQnbGwgYmUg YXMgaWYgbXkgZXhhbXBsZSByb3cgY29uc3RydWN0b3IgZXF1YWxpdHkNCnF1ZXJ5IHdhcyB3cml0 dGVuIHRoaXMgd2F5IGluc3RlYWQ6DQoNCg0Kc2VsZWN0ICogZnJvbSBtdWx0aV90ZXN0IHdoZXJl IGEgPSAyIGFuZCBiID0gMTsNCg0KDQpUaGlzIGNhbiBiZSBzdXJwcmlzaW5nbHkgaW1wb3J0YW50 LCB3aGVuIGNvbWJpbmVkIHdpdGggb3RoZXIgdGhpbmdzLA0KaW4gbW9yZSByZWFsaXN0aWMgZXhh bXBsZXMuDQoNCg0KVGhlIG5idHJlZSBjb2RlIGhhcyBzcGVjaWFsIGtub3dsZWRnZSBvZiBSb3dD b21wYXJlRXhwciB0aGF0IG1ha2VzIHRoZQ0KcnVsZXMgZm9yIGNvbXBhcmluZyBpbmRleCB0dXBs ZXMgZGlmZmVyZW50IHRvIHRob3NlIGZyb20gb3RoZXIga2luZHMNCm9mIGluZGV4IHNjYW5zLiBI b3dldmVyLCBkdWUgdG8gdGhlIFJvd0NvbXBhcmVFeHByIHRyYW5zZm9ybWF0aW9uDQpwcm9jZXNz IEkganVzdCBkZXNjcmliZWQsIHdlIGRvbid0IG5lZWQgdG8gcmVseSBvbiB0aGF0IHNwZWNpYWxp emVkDQpuYnRyZWUgY29kZSB3aGVuIHRoZSByb3cgY29uc3RydWN0b3Igc3ludGF4IGlzIHVzZWQg d2l0aCBhIHNpbXBsZQ0KZXF1YWxpdHkgY2xhdXNlIC0tIHdoaWNoIGlzIHdoYXQgbWFrZXMgdGhl IG5vcm1hbGl6YXRpb24gcHJvY2VzcyBoYXZlDQpyZWFsIHZhbHVlLiBJZiB0aGUgbmJ0cmVlIGNv ZGUgY2Fubm90IHNlZSBSb3dDb21wYXJlRXhwciBpbmRleCBxdWFscw0KdGhlbiBpdCBjYW5ub3Qg aGF2ZSB0aGlzIHByb2JsZW0gaW4gdGhlIGZpcnN0IHBsYWNlLiBJbiBnZW5lcmFsIGl0IGlzDQp1 c2VmdWwgdG8gIm5vcm1hbGl6ZSB0byBjb25qdW5jdGl2ZSBub3JtYWwgZm9ybSIgd2hlbiBpdCBt aWdodCBhbGxvdw0Kc2NhbiBrZXkgcHJlcHJvY2Vzc2luZyBpbiB0aGUgbmJ0cmVlIGNvZGUgdG8g Y29tZSB1cCB3aXRoIGEgbXVjaA0KZmFzdGVyIGFwcHJvYWNoIHRvIGV4ZWN1dGluZyB0aGUgc2Nh bi4NCg0KDQpJdCdzIGVhc2llciB0byB1bmRlcnN0YW5kIHdoYXQgSSBtZWFuIGJ5IHNob3dpbmcg YSBzaW1wbGUgZXhhbXBsZS4gVGhlDQpuYnRyZWUgcHJlcHJvY2Vzc2luZyBjb2RlIGlzIHNtYXJ0 IGVub3VnaCB0byByZWNvZ25pemUgdGhhdCB0aGUNCmZvbGxvd2luZyBxdWVyeSBkb2Vzbid0IHJl YWxseSBuZWVkIHRvIGRvIGFueSB3b3JrLCBkdWUgdG8gaGF2aW5nDQpxdWFscyB0aGF0IGl0IHJl Y29nbml6ZXMgYXMgY29udHJhZGljdG9yeSAoaXQgY2FuIHNldCBzby0+cXVhbF9va2F5IHRvDQpm YWxzZSBmb3IgdW5zYXRpc2ZpYWJsZSBxdWFscyk6DQoNCg0Kc2VsZWN0ICogZnJvbSBtdWx0aV90 ZXN0IHdoZXJlICggYSwgYiApID0gKCggMiwgMSApKSBhbmQgYSA9IC0xOw0KDQoNCkhvd2V2ZXIs IGl0IGlzIG5vdCBzbWFydCBlbm91Z2ggdG8gcGVyZm9ybSB0aGUgc2FtZSB0cmljayBpZiB3ZSBj aGFuZ2UNCm9uZSBzbWFsbCBkZXRhaWwgd2l0aCB0aGUgcXVlcnk6DQoNCg0Kc2VsZWN0ICogZnJv bSBtdWx0aV90ZXN0IHdoZXJlICggYSwgYiApID49ICgoIDIsIDEgKSkgYW5kIGEgPSAtMTsNCg0K DQpJZGVhbGx5LCB0aGUgb3B0aW1pemVyIHdvdWxkIGNhbm9uaWNhbGl6ZS9ub3JtYWxpemUgZXZl cnl0aGluZyBpbiBhDQp3YXkgdGhhdCBtYWRlIGFsbCBvZiB0aGUgbmJ0cmVlIHByZXByb2Nlc3Np bmcgb3B0aW1pemF0aW9ucyB3b3JrIGp1c3QNCmFzIHdlbGwsIHdpdGhvdXQgaW50cm9kdWNpbmcg YW55IG5ldyBzcGVjaWFsIGNhc2VzLiBPYnZpb3VzbHksIHRoZXJlDQppcyBubyByZWFzb24gd2h5 IHdlIGNhbid0IHBlcmZvcm0gdGhlIHNhbWUgdHJpY2sgd2l0aCB0aGUgc2Vjb25kDQp2YXJpYW50 LiAoTm90ZSBhbHNvIHRoYXQgdGhlIG5idHJlZSBwcmVwcm9jZXNzaW5nIGNvZGUgY2FuIGJlIHNt YXJ0DQphYm91dCByZWR1bmRhbnQgcXVhbHMsIG5vdCBqdXN0IGNvbnRyYWRpY3RvcnkgcXVhbHMs IHNvIGl0IG1hdHRlcnMNCm1vcmUgdGhhbiBpdCBtYXkgYXBwZWFyIGZyb20gdGhpcyBzaW1wbGUs IHVucmVhbGlzdGljIGV4YW1wbGUgb2YNCm1pbmUuKQ0KDQoNCldoaWxlIHRoZXNlIHNpbWlsYXIg Um93Q29tcGFyZUV4cHIgdHJhbnNmb3JtYXRpb25zIGFyZSBhdCBsZWFzdA0Kc29tZXdoYXQgaW1w b3J0YW50LCB0aGF0J3Mgbm90IHJlYWxseSB3aHkgSSBicmluZyB0aGVtIHVwIG5vdy4gSSBhbQ0K cG9pbnRpbmcgdGhlbSBvdXQgbm93IGJlY2F1c2UgSSB0aGluayB0aGF0IGl0IG1pZ2h0IGhlbHAg eW91IHRvDQpkZXZlbG9wIGEgbW9yZSBjb21wbGV0ZSBtZW50YWwgbW9kZWwgb2YgdGhlc2UgdHJh bnNmb3JtYXRpb25zLg0KSWRlYWxseSwgeW91ciBpbml0aWFsIGFwcHJvYWNoIHdpbGwgZ2VuZXJh bGl6ZSB0byBvdGhlciBzaXR1YXRpb25zDQpsYXRlciBvbi4gU28gaXQncyB3b3J0aCBjb25zaWRl cmluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcw0KZXhpc3RpbmcgUm93Q29tcGFyZUV4 cHIgdHJhbnNmb3JtYXRpb24sIGFuZCB0aGUgb25lIHRoYXQgeW91J3JlDQp3b3JraW5nIG9uIGN1 cnJlbnRseS4gUGx1cyBvdGhlciwgZnV0dXJlIHRyYW5zZm9ybWF0aW9ucy4NCg0KDQpUaGlzIGV4 YW1wbGUgbWlnaHQgYWxzbyBnaXZlIHlvdSBzb21lIGFwcHJlY2lhdGlvbiBvZiB3aHkgbXkgU0FP UA0KcGF0Y2ggaXMgY29uZnVzZWQgYWJvdXQgd2hlbiB3ZSBuZWVkIHRvIGRvIG5vcm1hbGl6YXRp b24vc2FmZXR5DQpjaGVja3MuIFNvbWUgdGhpbmdzIHNlZW0gbmVjZXNzYXJ5IHdoZW4gZ2VuZXJh dGluZyBpbmRleCBwYXRocyBpbiB0aGUNCm9wdGltaXplci4gT3RoZXIgdGhpbmdzIHNlZW0gbmVj ZXNzYXJ5IGR1cmluZyBwcmVwcm9jZXNzaW5nLCBpbiB0aGUNCm5idHJlZSBjb2RlLCBhdCB0aGUg c3RhcnQgb2YgdGhlIGluZGV4IHNjYW4uIFVuZm9ydHVuYXRlbHksIGl0J3Mgbm90DQpvYnZpb3Vz IHRvIG1lIHdoZXJlIHRoZSByaWdodCBwbGFjZSBpcyB0byBkZWFsIHdpdGggZWFjaCBhc3BlY3Qg b2YNCnNldHRpbmcgdXAgbXVsdGktY29sdW1uIFNBT1AgaW5kZXggcXVhbHMuIE15IG1lbnRhbCBt b2RlbCBpcyB2ZXJ5DQppbmNvbXBsZXRlLg0KDQoNCi0tDQpQZXRlciBHZW9naGVnYW4NCg0KDQoN Cg0KDQoNCg0K