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 1rIXA2-009Eik-N6 for pgsql-hackers@arkaria.postgresql.org; Wed, 27 Dec 2023 16:53:39 +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 1rIX9z-007ioI-Ve for pgsql-hackers@arkaria.postgresql.org; Wed, 27 Dec 2023 16:53:35 +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 1rIX9z-007io9-32 for pgsql-hackers@lists.postgresql.org; Wed, 27 Dec 2023 16:53:35 +0000 Received: from mail-vs1-xe31.google.com ([2607:f8b0:4864:20::e31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rIX9r-00CTDI-R9 for pgsql-hackers@lists.postgresql.org; Wed, 27 Dec 2023 16:53:33 +0000 Received: by mail-vs1-xe31.google.com with SMTP id ada2fe7eead31-466f045f8f7so322192137.3 for ; Wed, 27 Dec 2023 08:53:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1703696006; x=1704300806; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=lpzyURqvcbD+qrSWoPYk2H67zWZymXXGCrOKFshiiOA=; b=kFuOWpkK2RgzRF/mpuvYGpyUU9kEhW3VH/wf8UO8Kq6HBBerQPdA/8LkN52KSl4GaI jHaDupE0AroptSJbGEgDjehIXNfBgsOVfhqxYjr7xDqCnWT4edcxk00fOfFadtQSyZh/ sR9jRiyu8PiuGglUtMc/LoLVXKpx5o3Y/bxA/6ABjDGWzsbMiSiTzLnbDI4DjAkstZqi K0o4fa+chvX/UmtBRYTk1KNYA/fXW3qlYnfAEFNmwH658vFJ/gqp6iy59vVUlL8oRebs bAQIVd4FhThLKfqrCtm8pO4RnjMIkgt1WzS0I67u6IY768lzRs/JUq8uCb+EDU2ojRkd 02+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703696006; x=1704300806; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=lpzyURqvcbD+qrSWoPYk2H67zWZymXXGCrOKFshiiOA=; b=HJ3RLmn8CLJJC0Nchl3nfeKg/nqSoK0vud7/MtOy8f5w//q9s74V2NQTlY9Jmyil42 XXCKC95V7RTSMoO+E0D3/wEGBlM4Ji0F04XqqJozXJH7VidJxzAHNYnRaU8FO4Hllc5C vf+XhgmF5J8OC5DE/2Anasn2eSAX93faIzYZMdt1faNS6vFO8lP6z0RBOIFhMrY3eG3m yksEPeSaXmV6hQzgcVQ238yq9/dPGl2X1E1KvTwnZStjUSBkOS/wCw7HQyCLMExgVMNG Nj/W5vv8vM8zYQQmas8dN+uHsV1ElisI5/so17CvPwUC3CssquVzB38p9HP/xUAlYP+U yz5w== X-Gm-Message-State: AOJu0YxBl1zAHwAuY2Gn2bg7xbbZLu1Jvb9DT484gx1wc5xUz/MN6ktq 4ycey4Xj9CPjAwD+WNwIFIJFeop5NNMKr7KHPzM/9DIY8ug= X-Google-Smtp-Source: AGHT+IFfuM0XTMPQ8rBvBBx5XG/V8qXZBooNGWjlJiwgYHTmnoV5H2XaeOaU9g+E/TqmCMFufBSCv6hgmeQr0AHNrxU= X-Received: by 2002:a05:6102:2c1a:b0:467:250:b7c3 with SMTP id ie26-20020a0561022c1a00b004670250b7c3mr2161309vsb.20.1703696006203; Wed, 27 Dec 2023 08:53:26 -0800 (PST) MIME-Version: 1.0 From: jian he Date: Thu, 28 Dec 2023 00:53:13 +0800 Message-ID: Subject: add function argument names to regex* functions. To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000418167060d80a33f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000418167060d80a33f Content-Type: multipart/alternative; boundary="000000000000418165060d80a33d" --000000000000418165060d80a33d Content-Type: text/plain; charset="UTF-8" Hi. similar to [1], add function argument names to the following functions: regexp_like, regexp_match,regexp_matches,regexp_replace, regexp_substr,regexp_split_to_array,regexp_split_to_table,regexp_count so I call these function in a different notation[2], like: SELECT regexp_like(string=>'a'||CHR(10)||'d', pattern=>'a.d', flags:='n'); select regexp_match(string=>'abc',n pattern=>'(B)(c)', flags=>'i'); select regexp_matches(string=>'Programmer', pattern=>'(\w)(.*?\1)', flags=>'ig'); SELECT regexp_replace(source=>'A PostgreSQL function', pattern=>'a|e|i|o|u', replacement=>'X', start=>1, n=>4, flags=>'i'); SELECT regexp_substr(string=>'1234567890', pattern=>'(123)(4(56)(78))', start=>1, n=>1, flags=>'i', subexpr=>4); SELECT regexp_split_to_array(string=>'thE QUick bROWn FOx jUMPs ovEr The lazy dOG', pattern=>'e', flags=>'i'); SELECT foo, length(foo) FROM regexp_split_to_table(string=>'thE QUick bROWn FOx jUMPs ovEr The lazy dOG', pattern=>'e',flags=>'i') AS foo; SELECT regexp_count(string=>'ABCABCABCABC', pattern=>'Abc', start=>1, flags=>'i'); In [3], except the above mentioned function, there is a "substring" function. I want to refactor substring function argument names. it looks like: Schema | Name | Result data type | Argument data types | Type ------------+-----------+------------------+--------------------------------------------+------ pg_catalog | substring | bit | bits bit, "from" integer | func pg_catalog | substring | bit | bits bit, "from" integer, "for" integer | func pg_catalog | substring | bytea | bytes bytea, "from" integer | func pg_catalog | substring | bytea | bytes bytea, "from" integer, "for" integer | func pg_catalog | substring | text | string text, "from" integer | func pg_catalog | substring | text | string text, "from" integer, "for" integer | func pg_catalog | substring | text | string text, pattern text | func pg_catalog | substring | text | text, text, text | func (8 rows) As you can see, the substring function argument names need an explicit double quote, which doesn't look good, so I gave up. [1] https://www.postgresql.org/message-id/flat/877cw3jl8y.fsf@wibble.ilmari.org [2] https://www.postgresql.org/docs/current/sql-syntax-calling-funcs.html#SQL-SYNTAX-CALLING-FUNCS [3] https://www.postgresql.org/docs/current/functions-matching.html --000000000000418165060d80a33d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi.
similar to [1], add function argument names to the following functions:
regexp_like, regexp_match,regexp_matches,regexp_replace,
regexp_substr,regexp_split_to_array,regexp_split_to_table,regexp_count

so I call these function in a different notation[2], like:

SELECT regexp_like(string=3D>'a'||CHR(10)||'d', pattern= =3D>'a.d', flags:=3D'n');
select regexp_match(string=3D>'abc',n pattern=3D>'(B)(c)&= #39;, flags=3D>'i');
select regexp_matches(string=3D>'Programmer', pattern=3D>'= ;(\w)(.*?\1)',
flags=3D>'ig');
SELECT regexp_replace(source=3D>'A PostgreSQL function',
pattern=3D>'a|e|i|o|u', replacement=3D>'X', start=3D&= gt;1, n=3D>4, flags=3D>'i');
SELECT regexp_substr(string=3D>'1234567890',
pattern=3D>'(123)(4(56)(78))', start=3D>1, n=3D>1, flags= =3D>'i', subexpr=3D>4);
SELECT regexp_split_to_array(string=3D>'thE QUick bROWn FOx jUMPs ov= Er
The lazy dOG', pattern=3D>'e', flags=3D>'i');

SELECT foo, length(foo)
FROM regexp_split_to_table(string=3D>'thE QUick bROWn FOx jUMPs ovEr= The
lazy dOG', pattern=3D>'e',flags=3D>'i') AS foo; SELECT regexp_count(string=3D>'ABCABCABCABC', pattern=3D>'= ;Abc', start=3D>1,
flags=3D>'i');

In [3], except the above mentioned function, there is a "substring&quo= t; function.
I want to refactor substring function argument names. it looks like:
=C2=A0 =C2=A0Schema=C2=A0 =C2=A0|=C2=A0 =C2=A0Name=C2=A0 =C2=A0 | Result da= ta type |=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Argument data
types=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| Type
------------+-----------+------------------+-------------------------------= -------------+------
=C2=A0pg_catalog | substring | bit=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 | bits bit, "from" integer
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| func
=C2=A0pg_catalog | substring | bit=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 | bits bit, "from" integer,
"for" integer=C2=A0 =C2=A0 | func
=C2=A0pg_catalog | substring | bytea=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 | bytes bytea, "from"
integer=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | func
=C2=A0pg_catalog | substring | bytea=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 | bytes bytea, "from"
integer, "for" integer | func
=C2=A0pg_catalog | substring | text=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0| string text, "from"
integer=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | func
=C2=A0pg_catalog | substring | text=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0| string text, "from"
integer, "for" integer | func
=C2=A0pg_catalog | substring | text=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0| string text, pattern text
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| func
=C2=A0pg_catalog | substring | text=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0| text, text, text
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| func
(8 rows)

As you can see, the substring function argument names need an explicit
double quote,
which doesn't look good, so I gave up.

[1]https://www= .postgresql.org/message-id/flat/877cw3jl8y.fsf@wibble.ilmari.org
[2]https://www.postgresql.org/docs/current/sql-syntax-calling-funcs.ht= ml#SQL-SYNTAX-CALLING-FUNCS
[3] https://www.postgresql= .org/docs/current/functions-matching.html
--000000000000418165060d80a33d-- --000000000000418167060d80a33f Content-Type: application/x-patch; name="v1-0001-add-function-argument-names-to-regex.*-functions.patch" Content-Disposition: attachment; filename="v1-0001-add-function-argument-names-to-regex.*-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqnzfu7w0 RnJvbSBmODZhYzY1YTc4ODQ3MDYyZDY4YmI3ZTI5OWExZTQ1ZTJhM2Q5NDc3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBwZ2FkZGljdCA8amlhbi51bml2ZXJzYWxpdHlAZ21haWwuY29t PgpEYXRlOiBXZWQsIDI3IERlYyAyMDIzIDE5OjU5OjM0ICswODAwClN1YmplY3Q6IFtQQVRDSCB2 MSAxLzFdIGFkZCBmdW5jdGlvbiBhcmd1bWVudCBuYW1lcyB0byByZWdleC4qIGZ1bmN0aW9ucy4K CiBTcGVjaWZpY2FsbHkgYWRkIGZ1bmN0aW9uIGFyZ3VtZW50IG5hbWVzIHRvIHRoZSBmb2xsb3dp bmcgZnVudGlvbnM6CiByZWdleHBfbGlrZSwgcmVnZXhwX21hdGNoLCByZWdleHBfbWF0Y2hlcywg cmVnZXhwX3JlcGxhY2UsCiByZWdleHBfc3Vic3RyLCByZWdleHBfc3BsaXRfdG9fYXJyYXksCiBy ZWdleHBfc3BsaXRfdG9fdGFibGUsIHJlZ2V4cF9jb3VudC4KCiBTbyB0aGVzZSBmdW5jdGlvbnMg Y2FuIGJlIGVhc2lsZXIgdG8gdW5kZXJzdGFuZCBpbiBwc3FsIHZpYSBcZGYuIGFsc28gbW9yZSBp bXBvcnRhbnQgbWFrZSB0aGVzZSBmdW5jdGlvbnMKIGNhbiBiZSBjYWxsZWQgaW4gZGlmZmVyZW50 IG5vdGFpb25zLgoKLS0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IHwgNzEgKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNTcgaW5zZXJ0 aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggOTA1 MmY1MjYuLmUzOTc3YTU5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTM2MTEsMTA1ICsz NjExLDE0OCBAQAogICBwcm9zcmMgPT4gJ3JlcGxhY2VfdGV4dCcgfSwKIHsgb2lkID0+ICcyMjg0 JywgZGVzY3IgPT4gJ3JlcGxhY2UgdGV4dCB1c2luZyByZWdleHAnLAogICBwcm9uYW1lID0+ICdy ZWdleHBfcmVwbGFjZScsIHByb3JldHR5cGUgPT4gJ3RleHQnLAotICBwcm9hcmd0eXBlcyA9PiAn dGV4dCB0ZXh0IHRleHQnLCBwcm9zcmMgPT4gJ3RleHRyZWdleHJlcGxhY2Vfbm9vcHQnIH0sCisg IHByb2FyZ3R5cGVzID0+ICd0ZXh0IHRleHQgdGV4dCcsCisgIHByb2FyZ25hbWVzID0+ICd7c291 cmNlLCBwYXR0ZXJuLCByZXBsYWNlbWVudH0nLAorICBwcm9zcmMgPT4gJ3RleHRyZWdleHJlcGxh Y2Vfbm9vcHQnIH0sCiB7IG9pZCA9PiAnMjI4NScsIGRlc2NyID0+ICdyZXBsYWNlIHRleHQgdXNp bmcgcmVnZXhwJywKICAgcHJvbmFtZSA9PiAncmVnZXhwX3JlcGxhY2UnLCBwcm9yZXR0eXBlID0+ ICd0ZXh0JywKLSAgcHJvYXJndHlwZXMgPT4gJ3RleHQgdGV4dCB0ZXh0IHRleHQnLCBwcm9zcmMg PT4gJ3RleHRyZWdleHJlcGxhY2UnIH0sCisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHRleHQgdGV4 dCB0ZXh0JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tzb3VyY2UsIHBhdHRlcm4sIHJlcGxhY2VtZW50 LCBmbGFnc30nLAorICBwcm9zcmMgPT4gJ3RleHRyZWdleHJlcGxhY2UnIH0sCiB7IG9pZCA9PiAn NjI1MScsIGRlc2NyID0+ICdyZXBsYWNlIHRleHQgdXNpbmcgcmVnZXhwJywKICAgcHJvbmFtZSA9 PiAncmVnZXhwX3JlcGxhY2UnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKICAgcHJvYXJndHlwZXMg PT4gJ3RleHQgdGV4dCB0ZXh0IGludDQgaW50NCB0ZXh0JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tz b3VyY2UsIHBhdHRlcm4sIHJlcGxhY2VtZW50LCBzdGFydCwgbiwgZmxhZ3N9JywKICAgcHJvc3Jj ID0+ICd0ZXh0cmVnZXhyZXBsYWNlX2V4dGVuZGVkJyB9LAogeyBvaWQgPT4gJzYyNTInLCBkZXNj ciA9PiAncmVwbGFjZSB0ZXh0IHVzaW5nIHJlZ2V4cCcsCiAgIHByb25hbWUgPT4gJ3JlZ2V4cF9y ZXBsYWNlJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCiAgIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHRl eHQgdGV4dCBpbnQ0IGludDQnLAorICBwcm9hcmduYW1lcyA9PiAne3NvdXJjZSwgcGF0dGVybiwg cmVwbGFjZW1lbnQsIHN0YXJ0LCBufScsCiAgIHByb3NyYyA9PiAndGV4dHJlZ2V4cmVwbGFjZV9l eHRlbmRlZF9ub19mbGFncycgfSwKIHsgb2lkID0+ICc2MjUzJywgZGVzY3IgPT4gJ3JlcGxhY2Ug dGV4dCB1c2luZyByZWdleHAnLAogICBwcm9uYW1lID0+ICdyZWdleHBfcmVwbGFjZScsIHByb3Jl dHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAndGV4dCB0ZXh0IHRleHQgaW50NCcs CisgIHByb2FyZ25hbWVzID0+ICd7c291cmNlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCwgc3RhcnR9 JywKICAgcHJvc3JjID0+ICd0ZXh0cmVnZXhyZXBsYWNlX2V4dGVuZGVkX25vX24nIH0sCiB7IG9p ZCA9PiAnMzM5NicsIGRlc2NyID0+ICdmaW5kIGZpcnN0IG1hdGNoIGZvciByZWdleHAnLAogICBw cm9uYW1lID0+ICdyZWdleHBfbWF0Y2gnLCBwcm9yZXR0eXBlID0+ICdfdGV4dCcsIHByb2FyZ3R5 cGVzID0+ICd0ZXh0IHRleHQnLAorICBwcm9hcmduYW1lcyA9PiAne3N0cmluZywgcGF0dGVybn0n LAogICBwcm9zcmMgPT4gJ3JlZ2V4cF9tYXRjaF9ub19mbGFncycgfSwKIHsgb2lkID0+ICczMzk3 JywgZGVzY3IgPT4gJ2ZpbmQgZmlyc3QgbWF0Y2ggZm9yIHJlZ2V4cCcsCiAgIHByb25hbWUgPT4g J3JlZ2V4cF9tYXRjaCcsIHByb3JldHR5cGUgPT4gJ190ZXh0JywKLSAgcHJvYXJndHlwZXMgPT4g J3RleHQgdGV4dCB0ZXh0JywgcHJvc3JjID0+ICdyZWdleHBfbWF0Y2gnIH0sCisgIHByb2FyZ3R5 cGVzID0+ICd0ZXh0IHRleHQgdGV4dCcsCisgIHByb2FyZ25hbWVzID0+ICd7c3RyaW5nLCBwYXR0 ZXJuLCBmbGFnc30nLAorICBwcm9zcmMgPT4gJ3JlZ2V4cF9tYXRjaCcgfSwKIHsgb2lkID0+ICcy NzYzJywgZGVzY3IgPT4gJ2ZpbmQgbWF0Y2goZXMpIGZvciByZWdleHAnLAogICBwcm9uYW1lID0+ ICdyZWdleHBfbWF0Y2hlcycsIHByb3Jvd3MgPT4gJzEnLCBwcm9yZXRzZXQgPT4gJ3QnLAogICBw cm9yZXR0eXBlID0+ICdfdGV4dCcsIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHRleHQnLAorICBwcm9h cmduYW1lcyA9PiAne3N0cmluZywgcGF0dGVybn0nLAogICBwcm9zcmMgPT4gJ3JlZ2V4cF9tYXRj aGVzX25vX2ZsYWdzJyB9LAogeyBvaWQgPT4gJzI3NjQnLCBkZXNjciA9PiAnZmluZCBtYXRjaChl cykgZm9yIHJlZ2V4cCcsCiAgIHByb25hbWUgPT4gJ3JlZ2V4cF9tYXRjaGVzJywgcHJvcm93cyA9 PiAnMTAnLCBwcm9yZXRzZXQgPT4gJ3QnLAogICBwcm9yZXR0eXBlID0+ICdfdGV4dCcsIHByb2Fy Z3R5cGVzID0+ICd0ZXh0IHRleHQgdGV4dCcsCisgIHByb2FyZ25hbWVzID0+ICd7c3RyaW5nLCBw YXR0ZXJuLCBmbGFnc30nLAogICBwcm9zcmMgPT4gJ3JlZ2V4cF9tYXRjaGVzJyB9LAogeyBvaWQg PT4gJzYyNTQnLCBkZXNjciA9PiAnY291bnQgcmVnZXhwIG1hdGNoZXMnLAogICBwcm9uYW1lID0+ ICdyZWdleHBfY291bnQnLCBwcm9yZXR0eXBlID0+ICdpbnQ0JywgcHJvYXJndHlwZXMgPT4gJ3Rl eHQgdGV4dCcsCisgIHByb2FyZ25hbWVzID0+ICd7c3RyaW5nLCBwYXR0ZXJufScsCiAgIHByb3Ny YyA9PiAncmVnZXhwX2NvdW50X25vX3N0YXJ0JyB9LAogeyBvaWQgPT4gJzYyNTUnLCBkZXNjciA9 PiAnY291bnQgcmVnZXhwIG1hdGNoZXMnLAogICBwcm9uYW1lID0+ICdyZWdleHBfY291bnQnLCBw cm9yZXR0eXBlID0+ICdpbnQ0JywKLSAgcHJvYXJndHlwZXMgPT4gJ3RleHQgdGV4dCBpbnQ0Jywg cHJvc3JjID0+ICdyZWdleHBfY291bnRfbm9fZmxhZ3MnIH0sCisgIHByb2FyZ3R5cGVzID0+ICd0 ZXh0IHRleHQgaW50NCcsCisgIHByb2FyZ25hbWVzID0+ICd7c3RyaW5nLCBwYXR0ZXJuLCBzdGFy dH0nLAorICBwcm9zcmMgPT4gJ3JlZ2V4cF9jb3VudF9ub19mbGFncycgfSwKIHsgb2lkID0+ICc2 MjU2JywgZGVzY3IgPT4gJ2NvdW50IHJlZ2V4cCBtYXRjaGVzJywKICAgcHJvbmFtZSA9PiAncmVn ZXhwX2NvdW50JywgcHJvcmV0dHlwZSA9PiAnaW50NCcsCi0gIHByb2FyZ3R5cGVzID0+ICd0ZXh0 IHRleHQgaW50NCB0ZXh0JywgcHJvc3JjID0+ICdyZWdleHBfY291bnQnIH0sCisgIHByb2FyZ3R5 cGVzID0+ICd0ZXh0IHRleHQgaW50NCB0ZXh0JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tzdHJpbmcs IHBhdHRlcm4sIHN0YXJ0LCBmbGFnc30nLAorICBwcm9zcmMgPT4gJ3JlZ2V4cF9jb3VudCcgfSwK IHsgb2lkID0+ICc2MjU3JywgZGVzY3IgPT4gJ3Bvc2l0aW9uIG9mIHJlZ2V4cCBtYXRjaCcsCiAg IHByb25hbWUgPT4gJ3JlZ2V4cF9pbnN0cicsIHByb3JldHR5cGUgPT4gJ2ludDQnLCBwcm9hcmd0 eXBlcyA9PiAndGV4dCB0ZXh0JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tzdHJpbmcsIHBhdHRlcm59 JywKICAgcHJvc3JjID0+ICdyZWdleHBfaW5zdHJfbm9fc3RhcnQnIH0sCiB7IG9pZCA9PiAnNjI1 OCcsIGRlc2NyID0+ICdwb3NpdGlvbiBvZiByZWdleHAgbWF0Y2gnLAogICBwcm9uYW1lID0+ICdy ZWdleHBfaW5zdHInLCBwcm9yZXR0eXBlID0+ICdpbnQ0JywKLSAgcHJvYXJndHlwZXMgPT4gJ3Rl eHQgdGV4dCBpbnQ0JywgcHJvc3JjID0+ICdyZWdleHBfaW5zdHJfbm9fbicgfSwKKyAgcHJvYXJn dHlwZXMgPT4gJ3RleHQgdGV4dCBpbnQ0JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tzdHJpbmcsIHBh dHRlcm4sIHN0YXJ0fScsCisgIHByb3NyYyA9PiAncmVnZXhwX2luc3RyX25vX24nIH0sCiB7IG9p ZCA9PiAnNjI1OScsIGRlc2NyID0+ICdwb3NpdGlvbiBvZiByZWdleHAgbWF0Y2gnLAogICBwcm9u YW1lID0+ICdyZWdleHBfaW5zdHInLCBwcm9yZXR0eXBlID0+ICdpbnQ0JywKLSAgcHJvYXJndHlw ZXMgPT4gJ3RleHQgdGV4dCBpbnQ0IGludDQnLCBwcm9zcmMgPT4gJ3JlZ2V4cF9pbnN0cl9ub19l bmRvcHRpb24nIH0sCisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHRleHQgaW50NCBpbnQ0JywKKyAg cHJvYXJnbmFtZXMgPT4gJ3tzdHJpbmcsIHBhdHRlcm4sIHN0YXJ0LCBufScsCisgIHByb3NyYyA9 PiAncmVnZXhwX2luc3RyX25vX2VuZG9wdGlvbicgfSwKIHsgb2lkID0+ICc2MjYwJywgZGVzY3Ig PT4gJ3Bvc2l0aW9uIG9mIHJlZ2V4cCBtYXRjaCcsCiAgIHByb25hbWUgPT4gJ3JlZ2V4cF9pbnN0 cicsIHByb3JldHR5cGUgPT4gJ2ludDQnLAogICBwcm9hcmd0eXBlcyA9PiAndGV4dCB0ZXh0IGlu dDQgaW50NCBpbnQ0JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tzdHJpbmcsIHBhdHRlcm4sIHN0YXJ0 LCBuLCBlbmRvcHRpb259JywKICAgcHJvc3JjID0+ICdyZWdleHBfaW5zdHJfbm9fZmxhZ3MnIH0s CiB7IG9pZCA9PiAnNjI2MScsIGRlc2NyID0+ICdwb3NpdGlvbiBvZiByZWdleHAgbWF0Y2gnLAog ICBwcm9uYW1lID0+ICdyZWdleHBfaW5zdHInLCBwcm9yZXR0eXBlID0+ICdpbnQ0JywKICAgcHJv YXJndHlwZXMgPT4gJ3RleHQgdGV4dCBpbnQ0IGludDQgaW50NCB0ZXh0JywKKyAgcHJvYXJnbmFt ZXMgPT4gJ3tzdHJpbmcsIHBhdHRlcm4sIHN0YXJ0LCBuLCBlbmRvcHRpb24sIGZsYWdzfScsCiAg IHByb3NyYyA9PiAncmVnZXhwX2luc3RyX25vX3N1YmV4cHInIH0sCiB7IG9pZCA9PiAnNjI2Mics IGRlc2NyID0+ICdwb3NpdGlvbiBvZiByZWdleHAgbWF0Y2gnLAogICBwcm9uYW1lID0+ICdyZWdl eHBfaW5zdHInLCBwcm9yZXR0eXBlID0+ICdpbnQ0JywKICAgcHJvYXJndHlwZXMgPT4gJ3RleHQg dGV4dCBpbnQ0IGludDQgaW50NCB0ZXh0IGludDQnLAorICBwcm9hcmduYW1lcyA9PiAne3N0cmlu ZywgcGF0dGVybiwgc3RhcnQsIG4sIGVuZG9wdGlvbiwgZmxhZ3MsIHN1YmV4cHJ9JywKICAgcHJv c3JjID0+ICdyZWdleHBfaW5zdHInIH0sCiB7IG9pZCA9PiAnNjI2MycsIGRlc2NyID0+ICd0ZXN0 IGZvciByZWdleHAgbWF0Y2gnLAotICBwcm9uYW1lID0+ICdyZWdleHBfbGlrZScsIHByb3JldHR5 cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0eXBlcyA9PiAndGV4dCB0ZXh0JywKKyAgcHJvbmFtZSA9PiAn cmVnZXhwX2xpa2UnLCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAgcHJvYXJndHlwZXMgPT4gJ3Rl eHQgdGV4dCcsCisgIHByb2FyZ25hbWVzID0+ICd7c3RyaW5nLCBwYXR0ZXJufScsCiAgIHByb3Ny YyA9PiAncmVnZXhwX2xpa2Vfbm9fZmxhZ3MnIH0sCiB7IG9pZCA9PiAnNjI2NCcsIGRlc2NyID0+ ICd0ZXN0IGZvciByZWdleHAgbWF0Y2gnLAogICBwcm9uYW1lID0+ICdyZWdleHBfbGlrZScsIHBy b3JldHR5cGUgPT4gJ2Jvb2wnLAotICBwcm9hcmd0eXBlcyA9PiAndGV4dCB0ZXh0IHRleHQnLCBw cm9zcmMgPT4gJ3JlZ2V4cF9saWtlJyB9LAorICBwcm9hcmd0eXBlcyA9PiAndGV4dCB0ZXh0IHRl eHQnLAorICBwcm9hcmduYW1lcyA9PiAne3N0cmluZywgcGF0dGVybixmbGFnc30nLAorICBwcm9z cmMgPT4gJ3JlZ2V4cF9saWtlJyB9LAogeyBvaWQgPT4gJzYyNjUnLCBkZXNjciA9PiAnZXh0cmFj dCBzdWJzdHJpbmcgdGhhdCBtYXRjaGVzIHJlZ2V4cCcsCiAgIHByb25hbWUgPT4gJ3JlZ2V4cF9z dWJzdHInLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywgcHJvYXJndHlwZXMgPT4gJ3RleHQgdGV4dCcs CisgIHByb2FyZ25hbWVzID0+ICd7c3RyaW5nLCBwYXR0ZXJufScsCiAgIHByb3NyYyA9PiAncmVn ZXhwX3N1YnN0cl9ub19zdGFydCcgfSwKIHsgb2lkID0+ICc2MjY2JywgZGVzY3IgPT4gJ2V4dHJh Y3Qgc3Vic3RyaW5nIHRoYXQgbWF0Y2hlcyByZWdleHAnLAogICBwcm9uYW1lID0+ICdyZWdleHBf c3Vic3RyJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCi0gIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHRl eHQgaW50NCcsIHByb3NyYyA9PiAncmVnZXhwX3N1YnN0cl9ub19uJyB9LAorICBwcm9hcmd0eXBl cyA9PiAndGV4dCB0ZXh0IGludDQnLAorICBwcm9hcmduYW1lcyA9PiAne3N0cmluZywgcGF0dGVy biwgc3RhcnR9JywKKyAgcHJvc3JjID0+ICdyZWdleHBfc3Vic3RyX25vX24nIH0sCiB7IG9pZCA9 PiAnNjI2NycsIGRlc2NyID0+ICdleHRyYWN0IHN1YnN0cmluZyB0aGF0IG1hdGNoZXMgcmVnZXhw JywKICAgcHJvbmFtZSA9PiAncmVnZXhwX3N1YnN0cicsIHByb3JldHR5cGUgPT4gJ3RleHQnLAot ICBwcm9hcmd0eXBlcyA9PiAndGV4dCB0ZXh0IGludDQgaW50NCcsIHByb3NyYyA9PiAncmVnZXhw X3N1YnN0cl9ub19mbGFncycgfSwKKyAgcHJvYXJndHlwZXMgPT4gJ3RleHQgdGV4dCBpbnQ0IGlu dDQnLAorICBwcm9hcmduYW1lcyA9PiAne3N0cmluZywgcGF0dGVybiwgc3RhcnQsIG59JywKKyAg cHJvc3JjID0+ICdyZWdleHBfc3Vic3RyX25vX2ZsYWdzJyB9LAogeyBvaWQgPT4gJzYyNjgnLCBk ZXNjciA9PiAnZXh0cmFjdCBzdWJzdHJpbmcgdGhhdCBtYXRjaGVzIHJlZ2V4cCcsCiAgIHByb25h bWUgPT4gJ3JlZ2V4cF9zdWJzdHInLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKICAgcHJvYXJndHlw ZXMgPT4gJ3RleHQgdGV4dCBpbnQ0IGludDQgdGV4dCcsCisgIHByb2FyZ25hbWVzID0+ICd7c3Ry aW5nLCBwYXR0ZXJuLCBzdGFydCwgbiwgZmxhZ3N9JywKICAgcHJvc3JjID0+ICdyZWdleHBfc3Vi c3RyX25vX3N1YmV4cHInIH0sCiB7IG9pZCA9PiAnNjI2OScsIGRlc2NyID0+ICdleHRyYWN0IHN1 YnN0cmluZyB0aGF0IG1hdGNoZXMgcmVnZXhwJywKICAgcHJvbmFtZSA9PiAncmVnZXhwX3N1YnN0 cicsIHByb3JldHR5cGUgPT4gJ3RleHQnLAotICBwcm9hcmd0eXBlcyA9PiAndGV4dCB0ZXh0IGlu dDQgaW50NCB0ZXh0IGludDQnLCBwcm9zcmMgPT4gJ3JlZ2V4cF9zdWJzdHInIH0sCisgIHByb2Fy Z3R5cGVzID0+ICd0ZXh0IHRleHQgaW50NCBpbnQ0IHRleHQgaW50NCcsCisgIHByb2FyZ25hbWVz ID0+ICd7c3RyaW5nLCBwYXR0ZXJuLCBzdGFydCwgbiwgZmxhZ3MsIHN1YmV4cHJ9JywKKyAgcHJv c3JjID0+ICdyZWdleHBfc3Vic3RyJyB9LAogeyBvaWQgPT4gJzIwODgnLCBkZXNjciA9PiAnc3Bs aXQgc3RyaW5nIGJ5IGZpZWxkX3NlcCBhbmQgcmV0dXJuIGZpZWxkX251bScsCiAgIHByb25hbWUg PT4gJ3NwbGl0X3BhcnQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKICAgcHJvYXJndHlwZXMgPT4g J3RleHQgdGV4dCBpbnQ0JywgcHJvc3JjID0+ICdzcGxpdF9wYXJ0JyB9LAogeyBvaWQgPT4gJzI3 NjUnLCBkZXNjciA9PiAnc3BsaXQgc3RyaW5nIGJ5IHBhdHRlcm4nLAogICBwcm9uYW1lID0+ICdy ZWdleHBfc3BsaXRfdG9fdGFibGUnLCBwcm9yb3dzID0+ICcxMDAwJywgcHJvcmV0c2V0ID0+ICd0 JywKICAgcHJvcmV0dHlwZSA9PiAndGV4dCcsIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHRleHQnLAor ICBwcm9hcmduYW1lcyA9PiAne3N0cmluZywgcGF0dGVybn0nLAogICBwcm9zcmMgPT4gJ3JlZ2V4 cF9zcGxpdF90b190YWJsZV9ub19mbGFncycgfSwKIHsgb2lkID0+ICcyNzY2JywgZGVzY3IgPT4g J3NwbGl0IHN0cmluZyBieSBwYXR0ZXJuJywKICAgcHJvbmFtZSA9PiAncmVnZXhwX3NwbGl0X3Rv X3RhYmxlJywgcHJvcm93cyA9PiAnMTAwMCcsIHByb3JldHNldCA9PiAndCcsCiAgIHByb3JldHR5 cGUgPT4gJ3RleHQnLCBwcm9hcmd0eXBlcyA9PiAndGV4dCB0ZXh0IHRleHQnLAorICBwcm9hcmdu YW1lcyA9PiAne3N0cmluZywgcGF0dGVybiwgZmxhZ3N9JywKICAgcHJvc3JjID0+ICdyZWdleHBf c3BsaXRfdG9fdGFibGUnIH0sCiB7IG9pZCA9PiAnMjc2NycsIGRlc2NyID0+ICdzcGxpdCBzdHJp bmcgYnkgcGF0dGVybicsCiAgIHByb25hbWUgPT4gJ3JlZ2V4cF9zcGxpdF90b19hcnJheScsIHBy b3JldHR5cGUgPT4gJ190ZXh0JywKLSAgcHJvYXJndHlwZXMgPT4gJ3RleHQgdGV4dCcsIHByb3Ny YyA9PiAncmVnZXhwX3NwbGl0X3RvX2FycmF5X25vX2ZsYWdzJyB9LAorICBwcm9hcmd0eXBlcyA9 PiAndGV4dCB0ZXh0JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tzdHJpbmcsIHBhdHRlcm59JywKKyAg cHJvc3JjID0+ICdyZWdleHBfc3BsaXRfdG9fYXJyYXlfbm9fZmxhZ3MnIH0sCiB7IG9pZCA9PiAn Mjc2OCcsIGRlc2NyID0+ICdzcGxpdCBzdHJpbmcgYnkgcGF0dGVybicsCiAgIHByb25hbWUgPT4g J3JlZ2V4cF9zcGxpdF90b19hcnJheScsIHByb3JldHR5cGUgPT4gJ190ZXh0JywKLSAgcHJvYXJn dHlwZXMgPT4gJ3RleHQgdGV4dCB0ZXh0JywgcHJvc3JjID0+ICdyZWdleHBfc3BsaXRfdG9fYXJy YXknIH0sCisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHRleHQgdGV4dCcsCisgIHByb2FyZ25hbWVz ID0+ICd7c3RyaW5nLCBwYXR0ZXJuLCBmbGFnc30nLAorICBwcm9zcmMgPT4gJ3JlZ2V4cF9zcGxp dF90b19hcnJheScgfSwKIHsgb2lkID0+ICc5MDMwJywgZGVzY3IgPT4gJ2NvbnZlcnQgaW50NCBu dW1iZXIgdG8gYmluYXJ5JywKICAgcHJvbmFtZSA9PiAndG9fYmluJywgcHJvcmV0dHlwZSA9PiAn dGV4dCcsIHByb2FyZ3R5cGVzID0+ICdpbnQ0JywKICAgcHJvc3JjID0+ICd0b19iaW4zMicgfSwK LS0gCjIuMzQuMQoK --000000000000418167060d80a33f--