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 1t3A4Y-00AsCx-G7 for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Oct 2024 08:16:59 +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 1t3A4W-00FPPC-AW for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Oct 2024 08:16:56 +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 1t3A4U-00FPP4-JZ for pgsql-hackers@lists.postgresql.org; Tue, 22 Oct 2024 08:16:56 +0000 Received: from fhigh-a4-smtp.messagingengine.com ([103.168.172.155]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1t3A4R-002Fmf-92 for pgsql-hackers@postgresql.org; Tue, 22 Oct 2024 08:16:53 +0000 Received: from phl-compute-01.internal (phl-compute-01.phl.internal [10.202.2.41]) by mailfhigh.phl.internal (Postfix) with ESMTP id 862AA11400AC for ; Tue, 22 Oct 2024 04:16:49 -0400 (EDT) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-01.internal (MEProxy); Tue, 22 Oct 2024 04:16:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eisentraut.org; h=cc:content-type:content-type:date:date:from:from:in-reply-to :message-id:mime-version:reply-to:subject:subject:to:to; s=fm2; t=1729585009; x=1729671409; bh=zgCmVr1aaFa7aLkk3SLHz9zoSbffA9SG NONdyzIvmzY=; b=FbIgVKVGTG67kemFqQHE0WeJm1oWNhUZXPS6hgWdHQ5uRTvo VaSUo3DcY04wlwW+gos7BAtS9MpvHb5665T+UCjtIdKiHBKZoa382aGU6UAFRmtd QQheXANM7RAzbiNUsidGBnJ+M0MPsvdwBS+ZHwZB7/zwucTYjvbczWoGmKAT1gTB IvPani53LWL2VOWtj7KMg7nd1DoOgzgP8GyX/YlmtJxiiCZV1f6ByKJS6E+PyNjI iQfDfkH4WUyPcWljs5d5k9DjifBs493mEHdrIoopestZn7z91lDD16q989mX+n4f Ev5pa4keuF17NlCWegnwPEWhWnDg2L4+T6K6Ig== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:message-id :mime-version:reply-to:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1729585009; x=1729671409; bh=zgCmVr1aaFa7aLkk3SLHz9zoSbffA9SGNON dyzIvmzY=; b=EubItKnKaQgI9XOnX+U3pt3sN4zkPf/hW4UCH4E/ddwPfU8iodJ n2WawqrprGfqO1OYe0LZGQ+QhkMn4HAgjP+IyGbW8N1jqFgRXl2aaUuO4tlRMhSG 3cV2raWUIDNUHbQZxOXodEHyTvj10Q+juQvAIap4jFQJeWct575WvSlTdR8psETw HTr00ySgb48p7qIGTP9q9pScwe4n0FJWM1d6GeJSq521F6I4f/ptIVHHtSjoqZb5 zViEnOCidgLGhGZhQeklXFeite6YhTAValM7utFMdZYqV+tbQv0+2GrmkSRW0LPK LUfhi4QlXzDfmbbfiJ0pqAsYm23V1of7QRw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrvdeihedgtdduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgg gfhffuvfesmhdtreertddvjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhht uceophgvthgvrhesvghishgvnhhtrhgruhhtrdhorhhgqeenucggtffrrghtthgvrhhnpe ehteekudegtdehtedttefhudekjefgudeiheeiteffuedtteffkeekgfelvdffleenucev lhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvghrse gvihhsvghnthhrrghuthdrohhrghdpnhgspghrtghpthhtohepuddpmhhouggvpehsmhht phhouhhtpdhrtghpthhtohepphhgshhqlhdqhhgrtghkvghrshesphhoshhtghhrvghsqh hlrdhorhhg X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Tue, 22 Oct 2024 04:16:48 -0400 (EDT) Content-Type: multipart/mixed; boundary="------------TNtIf0nwHhn7mncqMFcaQVuH" Message-ID: <899e7b5f-b54a-4e1b-9218-bb23534fc2c4@eisentraut.org> Date: Tue, 22 Oct 2024 10:16:47 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US From: Peter Eisentraut Subject: Support regular expressions with nondeterministic collations To: pgsql-hackers 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. --------------TNtIf0nwHhn7mncqMFcaQVuH Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit This patch allows using regular expression functions and operators with nondeterministic collations. This complements the patches "Support LIKE with nondeterministic collations" and "Support POSITION with nondeterministic collations" but is independent. These three together fix most of the places where nondeterministic collations are currently not allowed. I had to decide here what the semantics should be. The SQL standard doesn't say anything, it just refers to XQuery. XQuery has no knowledge of SQL collations. I also studied the relevant Unicode standard (UTS #18) and it makes no mention of collations. So my conclusion is that regular expressions should pay no attention to collations. That makes it easy. To clarify a bit more: They don't pay attention to the collate part of collations. So if you have an accent-insensitive collation, that doesn't make the regular expression match accent-insensitive. But it does and continues to pay attention to the ctype part of collations. The latter is a PostgreSQL extension. Note that UTS #18 has "retracted" support for tailoring in regular expressions, which supports the idea that regular expressions should be independent of things like language settings. I think this is sensible. Regular expressions are inherently based on sequences of characters, and trying to marry that with nondeterministic collations just doesn't fit. But: We also convert SIMILAR TO patterns to standard regular expressions, and SIMILAR TO is covered in the SQL standard. And the definition there does take the collation into account. But the definition there is pretty much impossible to implement for nondeterministic collations: It basically says, the predicate is true if the string to be matched is equal, using the applicable collation, to any of the strings in the set of strings described by the regular expression. Which is a nice computer-sciency way to define it, but it doesn't work in practice. So I need a way to remember whether a regular expression was originally a SIMILAR TO pattern and then error out if the collation is nondeterministic. I figured out a way to do that: Regular expressions support prefixes like "***X", where X is some character. I added a new prefix "***S". This is not externally visible, it just gets used internally, and it doesn't conflict with real regular expressions. In summary, this patch doesn't change any functionality that currently works. It just removes one error message and lets regular expressions just run, independent of whether the collation is nondeterministic. --------------TNtIf0nwHhn7mncqMFcaQVuH Content-Type: text/plain; charset=UTF-8; name="v1-0001-Support-regular-expressions-with-nondeterministic.patch" Content-Disposition: attachment; filename*0="v1-0001-Support-regular-expressions-with-nondeterministic.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyYzFmNDcxMDVjZGMzYTI2YmI0NzkzY2Q1MjUxNmFjMzBiOGY0ZWM4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogVHVlLCAyMiBPY3QgMjAyNCAwOTozOToyMyArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggdjFdIFN1cHBvcnQgcmVndWxhciBleHByZXNzaW9ucyB3aXRoIG5vbmRldGVy bWluaXN0aWMKIGNvbGxhdGlvbnMKCkZvciBub3JtYWwgcmVndWxhciBleHByZXNzaW9ucywg dGhlIGNvbGxhdGlvbiBkb2Vzbid0IG1hdHRlciwgc28gd2UKY2FuIGp1c3QgYWxsb3cgaXQu CgpCdXQgZm9yIFNJTUlMQVIgVE8sIHdlIGNhbm5vdCBpbXBsZW1lbnQgd2hhdCB0aGUgU1FM IHN0YW5kYXJkCnJlcXVpcmVzLCBzbyB3ZSBjb250aW51ZSB0byBub3QgYWxsb3cgbm9uZGV0 ZXJtaW5pc3RpYyBjb2xsYXRpb25zIHdpdGgKU0lNSUxBUiBUTy4gIEJ1dCBzaW5jZSBTSU1J TEFSIFRPIGdldHMgY29udmVydGVkIHRvIGEgbm9ybWFsIHJlZ3VsYXIKZXhwcmVzc2lvbiwg d2UgbmVlZCB0byByZWNvcmQgc29tZWhvdyB0aGF0IHRoZSByZWd1bGFyIGV4cHJlc3Npb24g d2FzCm9yaWdpbmFsbHkgYSBTSU1JTEFSIFRPLiAgVG8gZG8gdGhhdCwgd2UgcHJlcGVuZCBh IHByZWZpeCAiKioqUyIgd2hpY2gKdGhlIFJFIHBhcnNpbmcgbGF0ZXIgcmVjb2duaXplcyBh bmQgcmVjb3Jkcy4gIEJhc2VkIG9uIHRoYXQsIHdlIGNhbgppc3N1ZSB0aGUgcmVxdWlyZWQg ZXJyb3IgbWVzc2FnZS4KLS0tCiBkb2Mvc3JjL3NnbWwvY2hhcnNldC5zZ21sICAgICAgICAg ICAgICAgICAgICAgfCAgMiArLQogZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCAgICAgICAgICAg ICAgICAgICAgICAgIHwgMjEgKysrKysrKysrKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvcmVn ZXgvcmVnY19sZXguYyAgICAgICAgICAgICAgICAgIHwgIDQgKysrKwogc3JjL2JhY2tlbmQv cmVnZXgvcmVnY19wZ19sb2NhbGUuYyAgICAgICAgICAgIHwgMTQgKysrKysrKystLS0tLQog c3JjL2JhY2tlbmQvcmVnZXgvcmVnY29tcC5jICAgICAgICAgICAgICAgICAgIHwgIDEgKwog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ2V4cC5jICAgICAgICAgICAgICAgIHwgMTEgKysr KysrKysrLQogc3JjL2luY2x1ZGUvcmVnZXgvcmVnZXguaCAgICAgICAgICAgICAgICAgICAg IHwgIDEgKwogc3JjL2luY2x1ZGUvcmVnZXgvcmVnZ3V0cy5oICAgICAgICAgICAgICAgICAg IHwgIDEgKwogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvY29sbGF0ZS5pY3UudXRmOC5vdXQgICAg IHwgMTYgKysrKysrKysrKy0tLS0KIDkgZmlsZXMgY2hhbmdlZCwgNTQgaW5zZXJ0aW9ucygr KSwgMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NoYXJzZXQu c2dtbCBiL2RvYy9zcmMvc2dtbC9jaGFyc2V0LnNnbWwKaW5kZXggMWVmNTMyMmI5MTIuLjZj NjMzNjc4NzkwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY2hhcnNldC5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9jaGFyc2V0LnNnbWwKQEAgLTExOTcsNyArMTE5Nyw3IEBAIDx0aXRs ZT5Ob25kZXRlcm1pbmlzdGljIENvbGxhdGlvbnM8L3RpdGxlPgogICAgICB0byBhIHBlcmZv cm1hbmNlIHBlbmFsdHkuICBOb3RlLCBpbiBwYXJ0aWN1bGFyLCB0aGF0IEItdHJlZSBjYW5u b3QgdXNlCiAgICAgIGRlZHVwbGljYXRpb24gd2l0aCBpbmRleGVzIHRoYXQgdXNlIGEgbm9u ZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb24uICBBbHNvLAogICAgICBjZXJ0YWluIG9wZXJhdGlv bnMgYXJlIG5vdCBwb3NzaWJsZSB3aXRoIG5vbmRldGVybWluaXN0aWMgY29sbGF0aW9ucywK LSAgICAgc3VjaCBhcyBwYXR0ZXJuIG1hdGNoaW5nIG9wZXJhdGlvbnMuICBUaGVyZWZvcmUs IHRoZXkgc2hvdWxkIGJlIHVzZWQKKyAgICAgc3VjaCBhcyBzb21lIHBhdHRlcm4gbWF0Y2hp bmcgb3BlcmF0aW9ucy4gIFRoZXJlZm9yZSwgdGhleSBzaG91bGQgYmUgdXNlZAogICAgICBv bmx5IGluIGNhc2VzIHdoZXJlIHRoZXkgYXJlIHNwZWNpZmljYWxseSB3YW50ZWQuCiAgICAg PC9wYXJhPgogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sIGIvZG9jL3Ny Yy9zZ21sL2Z1bmMuc2dtbAppbmRleCBhZDY2M2M5NGQ3Ny4uODAzYjYwNzlmM2EgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMu c2dtbApAQCAtNTQxMywxMiArNTQxMyw2IEBAIDx0aXRsZT5QYXR0ZXJuIE1hdGNoaW5nPC90 aXRsZT4KICAgICA8L3BhcmE+CiAgICA8L2NhdXRpb24+CiAKLSAgIDxwYXJhPgotICAgIFRo ZSBwYXR0ZXJuIG1hdGNoaW5nIG9wZXJhdG9ycyBvZiBhbGwgdGhyZWUga2luZHMgZG8gbm90 IHN1cHBvcnQKLSAgICBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMuICBJZiByZXF1aXJl ZCwgYXBwbHkgYSBkaWZmZXJlbnQgY29sbGF0aW9uIHRvCi0gICAgdGhlIGV4cHJlc3Npb24g dG8gd29yayBhcm91bmQgdGhpcyBsaW1pdGF0aW9uLgotICAgPC9wYXJhPgotCiAgIDxzZWN0 MiBpZD0iZnVuY3Rpb25zLWxpa2UiPgogICAgPHRpdGxlPjxmdW5jdGlvbj5MSUtFPC9mdW5j dGlvbj48L3RpdGxlPgogCkBAIC01Njg4LDYgKzU2ODIsMTEgQEAgPHRpdGxlPjxmdW5jdGlv bj5TSU1JTEFSIFRPPC9mdW5jdGlvbj4gUmVndWxhciBFeHByZXNzaW9uczwvdGl0bGU+CiA8 L3Byb2dyYW1saXN0aW5nPgogICAgPC9wYXJhPgogCisgICA8cGFyYT4KKyAgICA8ZnVuY3Rp b24+U0lNSUxBUiBUTzwvZnVuY3Rpb24+IGRvZXMgbm90IHN1cHBvcnQgbm9uZGV0ZXJtaW5p c3RpYworICAgIGNvbGxhdGlvbnMuCisgICA8L3BhcmE+CisKICAgIDxwYXJhPgogICAgIFRo ZSA8ZnVuY3Rpb24+c3Vic3RyaW5nPC9mdW5jdGlvbj4gZnVuY3Rpb24gd2l0aCB0aHJlZSBw YXJhbWV0ZXJzCiAgICAgcHJvdmlkZXMgZXh0cmFjdGlvbiBvZiBhIHN1YnN0cmluZyB0aGF0 IG1hdGNoZXMgYW4gU1FMCkBAIC01OTAwLDYgKzU4OTksMTYgQEAgPHRpdGxlPlJlZ3VsYXIg RXhwcmVzc2lvbiBNYXRjaCBPcGVyYXRvcnM8L3RpdGxlPgogPC9wcm9ncmFtbGlzdGluZz4K ICAgICA8L3BhcmE+CiAKKyAgICA8cGFyYT4KKyAgICAgUmVndWxhciBleHByZXNzaW9uIG1h dGNoaW5nIHVzZXMgdGhlIGFwcGxpY2FibGUgY29sbGF0aW9uIGZvciBjaGFyYWN0ZXIKKyAg ICAgY2xhc3NpZmljYXRpb24sIGJ1dCBub3QgZm9yIHN0cmluZyBjb21wYXJpc29uLiAgQSBz aW5nbGUgY2hhcmFjdGVyIGluIGEKKyAgICAgcGF0dGVybiBhbHdheXMgbWF0Y2hlcyBvbmx5 IGV4YWN0bHkgdGhhdCBjaGFyYWN0ZXIsIGluZGVwZW5kZW50IG9mIHRoZQorICAgICBjb2xs YXRpb24gKHVubGVzcyBhIGZsYWcgc3VjaCBhcyBmb3IgY2FzZS1pbnNlbnNpdGl2ZSBtYXRj aGluZyBpcworICAgICBzcGVjaWZpZWQ7IHNlZSBiZWxvdykuICBJdCBpcyBkaWZmZXJlbnQg aW4gdGhpcyByZXNwZWN0IGZyb20KKyAgICAgPGZ1bmN0aW9uPkxJS0U8L2Z1bmN0aW9uPiwg d2hpY2ggdXNlcyB0aGUgY29sbGF0aW9uIHRvIGNvbXBhcmUgbGl0ZXJhbAorICAgICBzdWJz dHJpbmdzIGluIHRoZSBwYXR0ZXJuLiA8IS0tIFhYWCBkaWZmZXJlbnQgcGF0Y2ggLS0+Cisg ICAgPC9wYXJhPgorCiAgICAgPHBhcmE+CiAgICAgIFRoZSA8YWNyb255bT5QT1NJWDwvYWNy b255bT4gcGF0dGVybiBsYW5ndWFnZSBpcyBkZXNjcmliZWQgaW4gbXVjaAogICAgICBncmVh dGVyIGRldGFpbCBiZWxvdy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlZ2V4L3JlZ2Nf bGV4LmMgYi9zcmMvYmFja2VuZC9yZWdleC9yZWdjX2xleC5jCmluZGV4IDkwODdlZjk1YWYz Li5kMzczYmJkMWFhZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVnZXgvcmVnY19sZXgu YworKysgYi9zcmMvYmFja2VuZC9yZWdleC9yZWdjX2xleC5jCkBAIC0xMjIsNiArMTIyLDEw IEBAIHByZWZpeGVzKHN0cnVjdCB2YXJzICp2KQogCQkJCXYtPmNmbGFncyB8PSBSRUdfQURW QU5DRUQ7CiAJCQkJdi0+bm93ICs9IDQ7CiAJCQkJYnJlYWs7CisJCQljYXNlIENIUignUycp OgkJLyogIioqKlMiIHdhcyBhIGNvbnZlcnRlZCBTSU1JTEFSIFRPIHBhdHRlcm4gKi8KKwkJ CQlOT1RFKFJFR19VTk9OUE9TSVggfCBQR19SRUdfU0lNSUxBUl9UTyk7CisJCQkJdi0+bm93 ICs9IDQ7CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgkJCS8qIG90aGVyd2lzZSAqKiogaXMg anVzdCBhbiBlcnJvciAqLwogCQkJCUVSUihSRUdfQkFEUlBUKTsKIAkJCQlyZXR1cm47CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZWdleC9yZWdjX3BnX2xvY2FsZS5jIGIvc3JjL2Jh Y2tlbmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYwppbmRleCBiNzU3ODRiNmNlNS4uOTMzZmI0 ZjY4ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlZ2V4L3JlZ2NfcGdfbG9jYWxlLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYwpAQCAtMjYwLDExICsy NjAsNiBAQCBwZ19zZXRfcmVnZXhfY29sbGF0aW9uKE9pZCBjb2xsYXRpb24pCiAJewogCQls b2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGF0aW9uKTsKIAotCQlp ZiAoIWxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShl cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJIGVycm1zZygi bm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciByZWd1 bGFyIGV4cHJlc3Npb25zIikpKTsKLQogCQlpZiAobG9jYWxlLT5jdHlwZV9pc19jKQogCQl7 CiAJCQkvKgpAQCAtMzAxLDYgKzI5NiwxNSBAQCBwZ19zZXRfcmVnZXhfY29sbGF0aW9uKE9p ZCBjb2xsYXRpb24pCiAJcGdfcmVnZXhfY29sbGF0aW9uID0gY29sbGF0aW9uOwogfQogCit2 b2lkCitwZ19jaGVja19yZWdleF9jb2xsYXRpb24oYm9vbCBpc19zaW1pbGFyX3RvKQorewor CWlmIChpc19zaW1pbGFyX3RvICYmICFwZ19yZWdleF9sb2NhbGUtPmRldGVybWluaXN0aWMp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLAorCQkJCSBlcnJtc2coIm5vbmRldGVybWluaXN0aWMgY29sbGF0aW9ucyBh cmUgbm90IHN1cHBvcnRlZCBmb3IgU0lNSUxBUiBUTyIpKSk7Cit9CisKIHN0YXRpYyBpbnQK IHBnX3djX2lzZGlnaXQocGdfd2NoYXIgYykKIHsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3JlZ2V4L3JlZ2NvbXAuYyBiL3NyYy9iYWNrZW5kL3JlZ2V4L3JlZ2NvbXAuYwppbmRleCA4 YTZjZmIyOTczZC4uMDNiNzgxNDYwNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlZ2V4 L3JlZ2NvbXAuYworKysgYi9zcmMvYmFja2VuZC9yZWdleC9yZWdjb21wLmMKQEAgLTQ1MCw2 ICs0NTAsNyBAQCBwZ19yZWdjb21wKHJlZ2V4X3QgKnJlLAogCiAJLyogcGFyc2luZyAqLwog CWxleHN0YXJ0KHYpOwkJCQkvKiBhbHNvIGhhbmRsZXMgcHJlZml4ZXMgKi8KKwlwZ19jaGVj a19yZWdleF9jb2xsYXRpb24odi0+cmUtPnJlX2luZm8gJiBQR19SRUdfU0lNSUxBUl9UTyk7 CiAJaWYgKCh2LT5jZmxhZ3MgJiBSRUdfTkxTVE9QKSB8fCAodi0+Y2ZsYWdzICYgUkVHX05M QU5DSCkpCiAJewogCQkvKiBhc3NpZ24gbmV3bGluZSBhIHVuaXF1ZSBjb2xvciAqLwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ2V4cC5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3JlZ2V4cC5jCmluZGV4IDBlMjUxOWJmZDU3Li45YWI2YTA3OGViZiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ2V4cC5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9yZWdleHAuYwpAQCAtODQxLDkgKzg0MSwxOCBAQCBzaW1pbGFyX2Vz Y2FwZV9pbnRlcm5hbCh0ZXh0ICpwYXRfdGV4dCwgdGV4dCAqZXNjX3RleHQpCiAJICogYXMg MyBvdXRwdXQgYnl0ZXMgcGVyIGlucHV0IGJ5dGU7IHNpbmNlIHRoZSBpbnB1dCBpcyBhdCBt b3N0IDFHQiB0aGlzCiAJICogY2FuJ3Qgb3ZlcmZsb3cgc2l6ZV90LgogCSAqLwotCXJlc3Vs dCA9ICh0ZXh0ICopIHBhbGxvYyhWQVJIRFJTWiArIDIzICsgMyAqIChzaXplX3QpIHBsZW4p OworCXJlc3VsdCA9ICh0ZXh0ICopIHBhbGxvYyhWQVJIRFJTWiArIDI3ICsgMyAqIChzaXpl X3QpIHBsZW4pOwogCXIgPSBWQVJEQVRBKHJlc3VsdCk7CiAKKwkvKgorCSAqIFByZWZpeCB3 aXRoICIqKipTIiBzbyB0aGF0IHRoZSBjb3JlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb2RlIGNh biB0ZWxsCisJICogdGhhdCB0aGlzIHdhcyBhIFNJTUlMQVIgVE8gcGF0dGVybi4KKwkgKi8K KwkqcisrID0gJyonOworCSpyKysgPSAnKic7CisJKnIrKyA9ICcqJzsKKwkqcisrID0gJ1Mn OworCiAJKnIrKyA9ICdeJzsKIAkqcisrID0gJygnOwogCSpyKysgPSAnPyc7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9yZWdleC9yZWdleC5oIGIvc3JjL2luY2x1ZGUvcmVnZXgvcmVn ZXguaAppbmRleCBmMzRlZTNhODViZC4uMzQxNTQ3YTdmZWYgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3JlZ2V4L3JlZ2V4LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVnZXgvcmVnZXguaApA QCAtMTUxLDYgKzE1MSw3IEBAIHR5cGVkZWYgc3RydWN0CiAjZGVmaW5lICBSRUdfVUVNUFRZ TUFUQ0gJMDA0MDAwCS8qIGNhbiBtYXRjaCBhIHplcm8tbGVuZ3RoIHN0cmluZyAqLwogI2Rl ZmluZSAgUkVHX1VJTVBPU1NJQkxFCTAxMDAwMAkvKiBwcm92YWJseSBjYW5ub3QgbWF0Y2gg YW55dGhpbmcgKi8KICNkZWZpbmUgIFJFR19VU0hPUlRFU1QJCTAyMDAwMAkvKiBoYXMgbm9u LWdyZWVkeSBxdWFudGlmaWVyICovCisjZGVmaW5lICBQR19SRUdfU0lNSUxBUl9UTwkxMDAw MDAJLyogUG9zdGdyZVNRTDogUkUgd2FzIGNvbnZlcnRlZCBmcm9tIFNJTUlMQVIgVE8gKi8K IAlpbnQJCQlyZV9jc2l6ZTsJCS8qIHNpemVvZihjaGFyYWN0ZXIpICovCiAJY2hhcgkgICAq cmVfZW5kcDsJCS8qIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkga2x1ZGdlICovCiAJT2lkCQkJ cmVfY29sbGF0aW9uOwkvKiBDb2xsYXRpb24gdGhhdCBkZWZpbmVzIExDX0NUWVBFIGJlaGF2 aW9yICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZWdleC9yZWdndXRzLmggYi9zcmMv aW5jbHVkZS9yZWdleC9yZWdndXRzLmgKaW5kZXggM2NhMzY0N2UxMTguLmNhOTAzNDA3ZGEy IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZWdleC9yZWdndXRzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvcmVnZXgvcmVnZ3V0cy5oCkBAIC01NDUsNCArNTQ1LDUgQEAgc3RydWN0IGd1dHMK IAogLyogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkIGZyb20g cmVnY29tcC5jIHRvIHJlZ2V4ZWMuYyAqLwogZXh0ZXJuIHZvaWQgcGdfc2V0X3JlZ2V4X2Nv bGxhdGlvbihPaWQgY29sbGF0aW9uKTsKK2V4dGVybiB2b2lkIHBnX2NoZWNrX3JlZ2V4X2Nv bGxhdGlvbihib29sIGlzX3NpbWlsYXJfdG8pOwogZXh0ZXJuIGNvbG9yIHBnX3JlZ19nZXRj b2xvcihzdHJ1Y3QgY29sb3JtYXAgKmNtLCBjaHIgYyk7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUuaWN1LnV0Zjgub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9jb2xsYXRlLmljdS51dGY4Lm91dAppbmRleCBmYWEzNzZlMDYwYy4u NjAxNTc3Y2RlYzMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29s bGF0ZS5pY3UudXRmOC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb2xs YXRlLmljdS51dGY4Lm91dApAQCAtMTUxOCw5ICsxNTE4LDEzIEBAIEVSUk9SOiAgbm9uZGV0 ZXJtaW5pc3RpYyBjb2xsYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBMSUtFCiBTRUxF Q1QgeCBGUk9NIHRlc3QzY2kgV0hFUkUgeCBJTElLRSAnYSUnOwogRVJST1I6ICBub25kZXRl cm1pbmlzdGljIGNvbGxhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIElMSUtFCiBTRUxF Q1QgeCBGUk9NIHRlc3QzY2kgV0hFUkUgeCBTSU1JTEFSIFRPICdhJSc7Ci1FUlJPUjogIG5v bmRldGVybWluaXN0aWMgY29sbGF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgcmVndWxh ciBleHByZXNzaW9ucworRVJST1I6ICBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMgYXJl IG5vdCBzdXBwb3J0ZWQgZm9yIFNJTUlMQVIgVE8KIFNFTEVDVCB4IEZST00gdGVzdDNjaSBX SEVSRSB4IH4gJ2EnOwotRVJST1I6ICBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMgYXJl IG5vdCBzdXBwb3J0ZWQgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAgeCAgCistLS0tLQor IGFiYworKDEgcm93KQorCiBTRUxFQ1QgeCBGUk9NIHRlc3QxY2kgVU5JT04gU0VMRUNUIHgg RlJPTSB0ZXN0MmNpIE9SREVSIEJZIHg7CiAgIHggIAogLS0tLS0KQEAgLTE2MzYsOSArMTY0 MCwxMyBAQCBFUlJPUjogIG5vbmRldGVybWluaXN0aWMgY29sbGF0aW9ucyBhcmUgbm90IHN1 cHBvcnRlZCBmb3IgTElLRQogU0VMRUNUIHggRlJPTSB0ZXN0M2JwY2kgV0hFUkUgeCBJTElL RSAnYSUnOwogRVJST1I6ICBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMgYXJlIG5vdCBz dXBwb3J0ZWQgZm9yIElMSUtFCiBTRUxFQ1QgeCBGUk9NIHRlc3QzYnBjaSBXSEVSRSB4IFNJ TUlMQVIgVE8gJ2ElJzsKLUVSUk9SOiAgbm9uZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zIGFy ZSBub3Qgc3VwcG9ydGVkIGZvciByZWd1bGFyIGV4cHJlc3Npb25zCitFUlJPUjogIG5vbmRl dGVybWluaXN0aWMgY29sbGF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgU0lNSUxBUiBU TwogU0VMRUNUIHggRlJPTSB0ZXN0M2JwY2kgV0hFUkUgeCB+ICdhJzsKLUVSUk9SOiAgbm9u ZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciByZWd1bGFy IGV4cHJlc3Npb25zCisgIHggIAorLS0tLS0KKyBhYmMKKygxIHJvdykKKwogU0VMRUNUIHgg RlJPTSB0ZXN0MWJwY2kgVU5JT04gU0VMRUNUIHggRlJPTSB0ZXN0MmJwY2kgT1JERVIgQlkg eDsKICAgeCAgCiAtLS0tLQoKYmFzZS1jb21taXQ6IGQyYjRiNGMyMjU5ZTIxY2VhZjA1ZTM5 Mzc2OWI2OTcyOGJmYmVlOTkKLS0gCjIuNDcuMAoK --------------TNtIf0nwHhn7mncqMFcaQVuH--