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 1wQrrs-001w1w-2Y for pgsql-hackers@arkaria.postgresql.org; Sat, 23 May 2026 19:18:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wQrrp-00GAZv-2u for pgsql-hackers@arkaria.postgresql.org; Sat, 23 May 2026 19:18:38 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wQrrp-00GAZm-1r for pgsql-hackers@lists.postgresql.org; Sat, 23 May 2026 19:18:38 +0000 Received: from mail-ed1-x532.google.com ([2a00:1450:4864:20::532]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wQrro-000000015V7-0sLJ for pgsql-hackers@postgresql.org; Sat, 23 May 2026 19:18:37 +0000 Received: by mail-ed1-x532.google.com with SMTP id 4fb4d7f45d1cf-672645dbfeaso10517339a12.0 for ; Sat, 23 May 2026 12:18:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779563915; cv=none; d=google.com; s=arc-20240605; b=RfUwp9vLnl/axWZKMmKv1tT2ItF01fB1wNWuSUpCjULhJxrVABdvvgaiNgYpDQ6vZp SCTkc1UDA7BYyGO8LVyzI9UAapBCuHSuAG8JJmETKid9uvuL1mDXiHLM6FBXzRw1mbwj k9J2jir4sZAyNNlcL2XQN2niSq3aaZokcn3XXWBC7US2MFKE5XBic3sqvsaJDcBaxV8l /EkK4bLhMM5FNwUefaB5wqpOtFpiQmjJXDORHzIqVbYye4ut978IcBufrhPMyKYzN3uS ndR+DL/29rTObxh0pKnhcux+BnUzUT5dBIYl3ub9KY6jyZ6+g6RRCHZrxneMPchO31ZQ hAWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=mtRg7i5niTLrzX28XsLW02ahiBJXvqINSzUtZrndRWU=; fh=33OU7BWuulPFH378PdKTnpeW+jw3IP20DTmpLDeQ3pE=; b=gY3jq6f8NCDM61Y9sVLKnQAtuCfh6EnWJl0O4cyFk6whF1kUESArH+OjZeBelT1oB+ jsxoidJISeFipPFu0f98XXCfeQ4zGz72Q3TTwWrwh3zbn8Icwla/vT/brc3GD/C2uKc+ qgJZooHR4gghjKmyIDo4fqyfjMw4zr15i6uq+YsUiUttokyzalHmsVpHrY6L8dttETsi v2LUM/h2hl6neiTQGBrK+ibYEe0XRxi6KOjOL9CHO7a9+ipcnEbbWfuoW+v05neQP0M2 YRhHlMuJWSxN9oAWYrdAk9gN2t7eZwiBTftc3jZYaUoA6KrYsGZeP6O51DJtbQdJNIO9 zzWA==; darn=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=20251104; t=1779563915; x=1780168715; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=mtRg7i5niTLrzX28XsLW02ahiBJXvqINSzUtZrndRWU=; b=eaHWXwdY29rFvoRpsqN5b4TAw4bN7uoeo/O6YltNWmaGihiEP04SZEBNfv7Dl570Co UaOtleopXORGvwRbu7ZZ3xANxlqC7QyKlxZ5jcuL3ewNjBYao/BGZmrJIXc94/ixH+SK AzptbdVhx8A7Dmo9E5i3WHrEWIPHNWlE18TlPp0+3hEiyeJT1fuATw/dmR+xYkdzAOI4 VROw+XVrq1uF7OIKCfUMNnBMYOe+cvMmYdSdXRH+aJUkz7+7Lp6oQF27TTpKxde2ITpl 52euKNRxTxAhKxMFJ5dzEBPV+zp3UCvQ5HywrBDWrYzeabKTwj8DpffMR6A/ZQVcD6gv YTaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779563915; x=1780168715; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=mtRg7i5niTLrzX28XsLW02ahiBJXvqINSzUtZrndRWU=; b=U2oAWyOJiHY9PvaKczKV80DwxVBDZ9lBX6P4ltzaVa2oNgZ5pXbTVqY6RSXr7NSPXV He51j6hDWt4O6AjVRbc4U9eGwdZ5K5ao+TeaJEWDq0G8j7G9h2koNBXpzzL6nro9OE6N dlzSbxPT4Y4MhfKD+Bc12GO33TAcNuoo79N8QeA+ORKdF2LdWJGsQLmuy7PVCrmaT3M4 vcV4Ro6cVKdSWlvFkcxX32HlaweMjacI4Crdhos0A4HZXS1RvRc5naI602+6R3a5Kahk n9YtJTz2xd4hYAYqMg/RsBqbAnYN8YHGDpLlvJKnvnUs4Gb7wvMHEF+qtUzdGkNEEEvh bQhA== X-Gm-Message-State: AOJu0YxV4Vomgy3DTz7WlabmSfbbfm8j9Ef0ASlIvB1U86pgS5j21ABk +jdgSgb6URhNV1gQBNgC0c5+vjhw7bJjLvifpdSAPCIDlHHKDayvJoMSDqI/J+naDirDq+/0Hg9 rEtm0E+wuzshj94xHnYAOZH962AeQlj2DqB8AB0c= X-Gm-Gg: Acq92OFtHFHW0s75godkhUp2ayf0ZopTnpMYyuUquiGo15bhBabwmfIxqQDMkNTCkuR ZgiAP4kC+f2iLaPljmxjksyJhkMJnqevDJnfJQKv4NhsuW9+Ur8VIT4T9BZBTJ8hAppntelt9o5 Z0NMIWEscZy86mIrII7TuEA7mWYzNw66UOh9XSnM07VSj0MleLk3Azc4VeTUxlLNGkLRW9DLNSW KijNvgTUit5Fb8jNUFkT96EMgJ8U+C5L2gNynHMHlEJMbkKYereCNgQwpiwWVRzV2ZHQIZTMaOD Sr0nwa8= X-Received: by 2002:a05:6402:3719:b0:687:285d:44a8 with SMTP id 4fb4d7f45d1cf-6889c453fa1mr4335330a12.14.1779563914545; Sat, 23 May 2026 12:18:34 -0700 (PDT) MIME-Version: 1.0 From: Aaryan Parik Date: Sun, 24 May 2026 00:48:22 +0530 X-Gm-Features: AVHnY4I4PeCCy9cmYSPPkOAcwEZycfenpHaVoCSjjmffiVGyFMFACZ3_jPvdaJE Message-ID: Subject: [PATCH] psql: Display SQLSTATE macro name in verbose error reports To: pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="000000000000fb83160652810290" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fb83160652810290 Content-Type: multipart/alternative; boundary="000000000000fb8314065281028e" --000000000000fb8314065281028e Content-Type: text/plain; charset="UTF-8" Hi hackers, Currently, when psql displays verbose error messages (\set VERBOSITY verbose or \errverbose), it prints the 5-character SQLSTATE code. However, developers often have to manually look up the corresponding C macro name (e.g. ERRCODE_SYNTAX_ERROR) in the source code when writing C extensions or dealing with internal backend code. Attached is a small patch that improves the verbose error output in psql by appending the symbolic SQLSTATE macro name to the end of the error report. *Changes included in this patch:* *1. Created a small Perl script in src/bin/psql to parse src/backend/utils/errcodes.txt and generate a C header (sqlstate_names.h) containing a mapping of SQLSTATE codes to their macro names.2. Hooked the generation of this header into the psql Makefile and meson.build.3. Updated psql's error reporting (ExecQueryAndProcessResults and exec_command_errverbose) to perform a lookup and append the macro name if VERBOSITY is verbose.* Example output: ERROR: 42601: syntax error at or near "FRO" LINE 1: SELECT * FRO; ^ LOCATION: scanner_yyerror, scan.l:1220 SQLSTATE name: ERRCODE_SYNTAX_ERROR I believe this will be a handy quality-of-life improvement for developers. Looking forward to any feedback Best regards, Aaryan Parik --000000000000fb8314065281028e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi hackers,

Currently, when psql displays verbose e= rror messages (\set VERBOSITY verbose or \errverbose), it prints the 5-char= acter SQLSTATE code. However, developers often have to manually look up the= corresponding C macro name (e.g. ERRCODE_SYNTAX_ERROR) in the source code = when writing C extensions or dealing with internal backend code.

Att= ached is a small patch that improves the verbose error output in psql by ap= pending the symbolic SQLSTATE macro name to the end of the error report.
Changes included in this patch:
1. Created a small Perl s= cript in src/bin/psql to parse src/backend/utils/errcodes.txt and generate = a C header (sqlstate_names.h) containing a mapping of SQLSTATE codes to the= ir macro names.
2. Hooked the generation of this header into the psql Ma= kefile and meson.build.
3. Updated psql's error reporting (ExecQuery= AndProcessResults and exec_command_errverbose) to perform a lookup and appe= nd the macro name if VERBOSITY is verbose.

Example output:
ER= ROR: =C2=A042601: syntax error at or near "FRO"
LINE 1: SELECT= * FRO;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0^<= br>LOCATION: =C2=A0scanner_yyerror, scan.l:1220
SQLSTATE name: ERRCODE_S= YNTAX_ERROR

I believe this will be a handy quality-of-life improveme= nt for developers. Looking forward to any feedback

Best regards,
= Aaryan Parik
--000000000000fb8314065281028e-- --000000000000fb83160652810290 Content-Type: application/octet-stream; name="psql-sqlstate-macro-name.patch" Content-Disposition: attachment; filename="psql-sqlstate-macro-name.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpiqd6ts0 RnJvbSA0MDk4YzZkMWEyN2Y2MDAyN2I5ZTRhZmE1ZDNhY2U5OGNkOTY5NzEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBYXJ5YW4gUGFyaWsgPGFhcnlhbnBhcmlrMTI0QGdtYWlsLmNv bT4KRGF0ZTogU2F0LCAyMyBNYXkgMjAyNiAxOToxMDo1NyArMDAwMApTdWJqZWN0OiBbUEFUQ0hd IHBzcWw6IERpc3BsYXkgU1FMU1RBVEUgbWFjcm8gbmFtZSBpbiB2ZXJib3NlIGVycm9yIHJlcG9y dHMKCi0tLQogc3JjL2Jpbi9wc3FsL01ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAgNyArKy0K IHNyYy9iaW4vcHNxbC9jb21tYW5kLmMgICAgICAgICAgICAgICAgIHwgIDkgKysrKwogc3JjL2Jp bi9wc3FsL2NvbW1vbi5jICAgICAgICAgICAgICAgICAgfCAyOCArKysrKysrKysrCiBzcmMvYmlu L3BzcWwvZ2VuZXJhdGUtZXJyY29kZS1uYW1lcy5wbCB8IDcxICsrKysrKysrKysrKysrKysrKysr KysrKysrCiBzcmMvYmluL3BzcWwvbWVzb24uYnVpbGQgICAgICAgICAgICAgICB8IDExICsrKysK IDUgZmlsZXMgY2hhbmdlZCwgMTI1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BzcWwvZ2VuZXJhdGUtZXJyY29kZS1uYW1lcy5wbAoKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9NYWtlZmlsZSBiL3NyYy9iaW4vcHNxbC9NYWtlZmlsZQpp bmRleCBiZTAwMzI2Li4zYjY2ZWMxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvTWFrZWZpbGUK KysrIGIvc3JjL2Jpbi9wc3FsL01ha2VmaWxlCkBAIC02NCw2ICs2NCwxMSBAQCBwc3Fsc2NhbnNs YXNoLmM6IEZMRVhfTk9fQkFDS1VQPXllcwogdGFiLWNvbXBsZXRlLmM6IGdlbl90YWJjb21wbGV0 ZS5wbCB0YWItY29tcGxldGUuaW4uYwogCSQoUEVSTCkgJF4gLS1vdXRmaWxlICRACiAKK2NvbW1v bi5vIGNvbW1hbmQubzogc3Fsc3RhdGVfbmFtZXMuaAorCitzcWxzdGF0ZV9uYW1lcy5oOiBnZW5l cmF0ZS1lcnJjb2RlLW5hbWVzLnBsICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvdXRpbHMvZXJy Y29kZXMudHh0CisJJChQRVJMKSAkXiAkQAorCiBpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMKIAkk KElOU1RBTExfUFJPR1JBTSkgcHNxbCQoWCkgJyQoREVTVERJUikkKGJpbmRpcikvcHNxbCQoWCkn CiAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9wc3FscmMuc2FtcGxlICckKERFU1RESVIpJChk YXRhZGlyKS9wc3FscmMuc2FtcGxlJwpAQCAtNzcsNyArODIsNyBAQCB1bmluc3RhbGw6CiBjbGVh biBkaXN0Y2xlYW46CiAJcm0gLWYgcHNxbCQoWCkgJChPQkpTKSBsZXguYmFja3VwCiAJcm0gLXJm IHRtcF9jaGVjawotCXJtIC1mIHNxbF9oZWxwLmggc3FsX2hlbHAuYyBwc3Fsc2NhbnNsYXNoLmMg dGFiLWNvbXBsZXRlLmMKKwlybSAtZiBzcWxfaGVscC5oIHNxbF9oZWxwLmMgcHNxbHNjYW5zbGFz aC5jIHRhYi1jb21wbGV0ZS5jIHNxbHN0YXRlX25hbWVzLmgKIAogY2hlY2s6CiAJJChwcm92ZV9j aGVjaykKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMgYi9zcmMvYmluL3BzcWwv Y29tbWFuZC5jCmluZGV4IDAxYjhmMTEuLjdkMjczMWIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNx bC9jb21tYW5kLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYwpAQCAtMjgsNiArMjgsNyBA QAogI2luY2x1ZGUgImNvbW1hbmQuaCIKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJj b21tb24vbG9nZ2luZy5oIgorI2luY2x1ZGUgInNxbHN0YXRlX25hbWVzLmgiCiAjaW5jbHVkZSAi Y29tbW9uL3N0cmluZy5oIgogI2luY2x1ZGUgImNvcHkuaCIKICNpbmNsdWRlICJkZXNjcmliZS5o IgpAQCAtMTY1Niw2ICsxNjU3LDE0IEBAIGV4ZWNfY29tbWFuZF9lcnJ2ZXJib3NlKFBzcWxTY2Fu U3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKQogCQkJewogCQkJCXBnX2xvZ19l cnJvcigiJXMiLCBtc2cpOwogCQkJCVBRZnJlZW1lbShtc2cpOworCisJCQkJY29uc3QgY2hhciAq c3Fsc3RhdGUgPSBQUXJlc3VsdEVycm9yRmllbGQocHNldC5sYXN0X2Vycm9yX3Jlc3VsdCwgUEdf RElBR19TUUxTVEFURSk7CisJCQkJaWYgKHNxbHN0YXRlKQorCQkJCXsKKwkJCQkJY29uc3QgY2hh ciAqc3ltID0gZ2V0X3NxbHN0YXRlX3N5bWJvbGljX25hbWUoc3Fsc3RhdGUpOworCQkJCQlpZiAo c3ltKQorCQkJCQkJcGdfbG9nX2Vycm9yKCJTUUxTVEFURSBuYW1lOiAlc1xuIiwgc3ltKTsKKwkJ CQl9CiAJCQl9CiAJCQllbHNlCiAJCQkJcHV0cyhfKCJvdXQgb2YgbWVtb3J5IikpOwpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCmluZGV4 IDFhNGUyZWEuLjRhNTRhMDggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9jb21tb24uYworKysg Yi9zcmMvYmluL3BzcWwvY29tbW9uLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb21t YW5kLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIK KyNpbmNsdWRlICJzcWxzdGF0ZV9uYW1lcy5oIgogI2luY2x1ZGUgImNvcHkuaCIKICNpbmNsdWRl ICJjcm9zc3RhYnZpZXcuaCIKICNpbmNsdWRlICJmZV91dGlscy9jYW5jZWwuaCIKQEAgLTQ1NCw4 ICs0NTUsMjEgQEAgQWNjZXB0UmVzdWx0KGNvbnN0IFBHcmVzdWx0ICpyZXN1bHQsIGJvb2wgc2hv d19lcnJvcikKIAkJY29uc3QgY2hhciAqZXJyb3IgPSBQUWVycm9yTWVzc2FnZShwc2V0LmRiKTsK IAogCQlpZiAoc3RybGVuKGVycm9yKSkKKwkJewogCQkJcGdfbG9nX2luZm8oIiVzIiwgZXJyb3Ip OwogCisJCQlpZiAocHNldC52ZXJib3NpdHkgPT0gUFFFUlJPUlNfVkVSQk9TRSkKKwkJCXsKKwkJ CQljb25zdCBjaGFyICpzcWxzdGF0ZSA9IFBRcmVzdWx0RXJyb3JGaWVsZChyZXN1bHQsIFBHX0RJ QUdfU1FMU1RBVEUpOworCQkJCWlmIChzcWxzdGF0ZSkKKwkJCQl7CisJCQkJCWNvbnN0IGNoYXIg KnN5bSA9IGdldF9zcWxzdGF0ZV9zeW1ib2xpY19uYW1lKHNxbHN0YXRlKTsKKwkJCQkJaWYgKHN5 bSkKKwkJCQkJCXBnX2xvZ19pbmZvKCJTUUxTVEFURSBuYW1lOiAlc1xuIiwgc3ltKTsKKwkJCQl9 CisJCQl9CisJCX0KKwogCQlDaGVja0Nvbm5lY3Rpb24oKTsKIAl9CiAKQEAgLTE3ODQsOCArMTc5 OCwyMiBAQCBFeGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwKIAkJ CWNvbnN0IGNoYXIgKmVycm9yID0gUFFyZXN1bHRFcnJvck1lc3NhZ2UocmVzdWx0KTsKIAogCQkJ aWYgKHN0cmxlbihlcnJvcikpCisJCQl7CiAJCQkJcGdfbG9nX2luZm8oIiVzIiwgZXJyb3IpOwog CisJCQkJaWYgKHBzZXQudmVyYm9zaXR5ID09IFBRRVJST1JTX1ZFUkJPU0UpCisJCQkJeworCQkJ CQljb25zdCBjaGFyICpzcWxzdGF0ZSA9IFBRcmVzdWx0RXJyb3JGaWVsZChyZXN1bHQsIFBHX0RJ QUdfU1FMU1RBVEUpOworCQkJCQlpZiAoc3Fsc3RhdGUpCisJCQkJCXsKKwkJCQkJCWNvbnN0IGNo YXIgKnN5bSA9IGdldF9zcWxzdGF0ZV9zeW1ib2xpY19uYW1lKHNxbHN0YXRlKTsKKwkJCQkJCWlm IChzeW0pCisJCQkJCQkJcGdfbG9nX2luZm8oIlNRTFNUQVRFIG5hbWU6ICVzXG4iLCBzeW0pOwor CQkJCQl9CisJCQkJfQorCQkJfQorCisKIAkJCUNoZWNrQ29ubmVjdGlvbigpOwogCQkJaWYgKCFp c193YXRjaCkKIAkJCQlTZXRSZXN1bHRWYXJpYWJsZXMocmVzdWx0LCBmYWxzZSk7CmRpZmYgLS1n aXQgYS9zcmMvYmluL3BzcWwvZ2VuZXJhdGUtZXJyY29kZS1uYW1lcy5wbCBiL3NyYy9iaW4vcHNx bC9nZW5lcmF0ZS1lcnJjb2RlLW5hbWVzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjgwZDUwODcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BzcWwvZ2VuZXJhdGUt ZXJyY29kZS1uYW1lcy5wbApAQCAtMCwwICsxLDcxIEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMg R2VuZXJhdGUgdGhlIHNxbHN0YXRlX25hbWVzLmggaGVhZGVyIGZyb20gZXJyY29kZXMudHh0Cisj IFRoaXMgbWFwcyB0aGUgNS1jaGFyYWN0ZXIgU1FMU1RBVEUgY29kZSB0byBpdHMgc3ltYm9saWMg bWFjcm8gbmFtZSBmb3IgcHNxbCdzIHZlcmJvc2UgZXJyb3IgcmVwb3J0cy4KKwordXNlIHN0cmlj dDsKK3VzZSB3YXJuaW5nczsKKworbXkgJGluZmlsZSA9IHNoaWZ0OworbXkgJG91dGZpbGUgPSBz aGlmdDsKKworb3BlbiBteSAkaW4sICc8JywgJGluZmlsZSBvciBkaWUgIkNvdWxkIG5vdCBvcGVu ICRpbmZpbGU6ICQhIjsKK29wZW4gbXkgJG91dCwgJz4nLCAkb3V0ZmlsZSBvciBkaWUgIkNvdWxk IG5vdCBvcGVuICRvdXRmaWxlOiAkISI7CisKK3ByaW50ICRvdXQgIi8qIGF1dG9nZW5lcmF0ZWQg ZnJvbSBzcmMvYmFja2VuZC91dGlscy9lcnJjb2Rlcy50eHQsIGRvIG5vdCBlZGl0ICovXG4iOwor cHJpbnQgJG91dCAiLyogVGhpcyBmaWxlIG1hcHMgU1FMU1RBVEUgY29kZXMgdG8gdGhlaXIgc3lt Ym9saWMgbmFtZXMuICovXG5cbiI7CisKK3ByaW50ICRvdXQgInN0YXRpYyBjb25zdCBjaGFyICpc biI7CitwcmludCAkb3V0ICJnZXRfc3Fsc3RhdGVfc3ltYm9saWNfbmFtZShjb25zdCBjaGFyICpz cWxzdGF0ZSlcbiI7CitwcmludCAkb3V0ICJ7XG4iOworcHJpbnQgJG91dCAiICAgIGlmIChzcWxz dGF0ZSA9PSBOVUxMKVxuIjsKK3ByaW50ICRvdXQgIiAgICAgICAgcmV0dXJuIE5VTEw7XG5cbiI7 CisKK215ICVzcWxzdGF0ZXM7CisKK3doaWxlICg8JGluPikgeworICAgIGNob21wOworICAgIHMv Iy4qLy87ICMgUmVtb3ZlIGNvbW1lbnRzCisgICAgbmV4dCBpZiAvXlxzKiQvOyAjIFNraXAgZW1w dHkgbGluZXMKKyAgICBuZXh0IGlmIC9eU2VjdGlvbjovOyAjIFNraXAgc2VjdGlvbiBoZWFkZXJz CisKKyAgICBpZiAoL14oW15cc117NX0pXHMrW0VXU11ccysoW15cc10rKS8pIHsKKyAgICAgICAg bXkgJHNxbHN0YXRlID0gJDE7CisgICAgICAgIG15ICRtYWNyb19uYW1lID0gJDI7CisgICAgICAg ICRzcWxzdGF0ZXN7JHNxbHN0YXRlfSA9ICRtYWNyb19uYW1lOworICAgIH0KK30KKworIyBXZSB1 c2UgYSBzaW1wbGUgaWYtZWxzZSBjaGFpbi4gU2luY2UgdGhlcmUgYXJlIGFyb3VuZCAyMDAtMzAw IGNvZGVzLCBhIHN3aXRjaCBzdGF0ZW1lbnQKKyMgYmFzZWQgb24gc3RyaW5ncyBpc24ndCBuYXRp dmVseSBzdXBwb3J0ZWQgaW4gQywgYnV0IGEgc2VyaWVzIG9mIGlmLXN0cmNtcCBpcyBmYXN0IGVu b3VnaAorIyBmb3IgZXJyb3IgcmVwb3J0aW5nLCBvciB3ZSBjYW4gdXNlIGEgc21hbGwgc3RhdGlj IGFycmF5IGFuZCBiaW5hcnkgc2VhcmNoIGl0LgorIyBBIHN0YXRpYyBhcnJheSBhbmQgYmluYXJ5 IHNlYXJjaCBpcyBjbGVhbmVyIGFuZCBzY2FsZXMgYmV0dGVyLgorCitwcmludCAkb3V0ICIgICAg c3RhdGljIGNvbnN0IHN0cnVjdCB7XG4iOworcHJpbnQgJG91dCAiICAgICAgICBjb25zdCBjaGFy IHNxbHN0YXRlWzZdO1xuIjsKK3ByaW50ICRvdXQgIiAgICAgICAgY29uc3QgY2hhciAqbWFjcm9f bmFtZTtcbiI7CitwcmludCAkb3V0ICIgICAgfSBlcnJjb2Rlc1tdID0ge1xuIjsKKworZm9yZWFj aCBteSAkc3Fsc3RhdGUgKHNvcnQga2V5cyAlc3Fsc3RhdGVzKSB7CisgICAgcHJpbnQgJG91dCAi ICAgICAgICB7XCIkc3Fsc3RhdGVcIiwgXCIkc3Fsc3RhdGVzeyRzcWxzdGF0ZX1cIn0sXG4iOwor fQorCitwcmludCAkb3V0ICIgICAgfTtcblxuIjsKK3ByaW50ICRvdXQgIiAgICBpbnQgbG93ID0g MDtcbiI7CitwcmludCAkb3V0ICIgICAgaW50IGhpZ2ggPSAoc2l6ZW9mKGVycmNvZGVzKSAvIHNp emVvZihlcnJjb2Rlc1swXSkpIC0gMTtcblxuIjsKK3ByaW50ICRvdXQgIiAgICB3aGlsZSAobG93 IDw9IGhpZ2gpIHtcbiI7CitwcmludCAkb3V0ICIgICAgICAgIGludCBtaWQgPSBsb3cgKyAoaGln aCAtIGxvdykgLyAyO1xuIjsKK3ByaW50ICRvdXQgIiAgICAgICAgaW50IGNtcCA9IHN0cmNtcChl cnJjb2Rlc1ttaWRdLnNxbHN0YXRlLCBzcWxzdGF0ZSk7XG4iOworcHJpbnQgJG91dCAiICAgICAg ICBpZiAoY21wID09IDApXG4iOworcHJpbnQgJG91dCAiICAgICAgICAgICAgcmV0dXJuIGVycmNv ZGVzW21pZF0ubWFjcm9fbmFtZTtcbiI7CitwcmludCAkb3V0ICIgICAgICAgIGVsc2UgaWYgKGNt cCA8IDApXG4iOworcHJpbnQgJG91dCAiICAgICAgICAgICAgbG93ID0gbWlkICsgMTtcbiI7Citw cmludCAkb3V0ICIgICAgICAgIGVsc2VcbiI7CitwcmludCAkb3V0ICIgICAgICAgICAgICBoaWdo ID0gbWlkIC0gMTtcbiI7CitwcmludCAkb3V0ICIgICAgfVxuXG4iOworCitwcmludCAkb3V0ICIg ICAgcmV0dXJuIE5VTEw7XG4iOworcHJpbnQgJG91dCAifVxuIjsKKworY2xvc2UgJGluOworY2xv c2UgJG91dDsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9tZXNvbi5idWlsZCBiL3NyYy9iaW4v cHNxbC9tZXNvbi5idWlsZAppbmRleCA5MjJiMjg0Li44YTExZGU3IDEwMDY0NAotLS0gYS9zcmMv YmluL3BzcWwvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wc3FsL21lc29uLmJ1aWxkCkBAIC0z NCw2ICszNCwxNyBAQCB0YWJjb21wbGV0ZSA9IGN1c3RvbV90YXJnZXQoJ3RhYmNvbXBsZXRlJywK IGdlbmVyYXRlZF9zb3VyY2VzICs9IHRhYmNvbXBsZXRlCiBwc3FsX3NvdXJjZXMgKz0gdGFiY29t cGxldGUKIAorc3Fsc3RhdGVfbmFtZXMgPSBjdXN0b21fdGFyZ2V0KCdzcWxzdGF0ZV9uYW1lcycs CisgIGlucHV0OiAnQFNPVVJDRV9ST09UQC9zcmMvYmFja2VuZC91dGlscy9lcnJjb2Rlcy50eHQn LAorICBvdXRwdXQ6ICdzcWxzdGF0ZV9uYW1lcy5oJywKKyAgY29tbWFuZDogWworICAgIHBlcmws IGZpbGVzKCdnZW5lcmF0ZS1lcnJjb2RlLW5hbWVzLnBsJyksICdASU5QVVRAJywgJ0BPVVRQVVRA JywKKyAgXSwKKykKK2dlbmVyYXRlZF9zb3VyY2VzICs9IHNxbHN0YXRlX25hbWVzCitwc3FsX3Nv dXJjZXMgKz0gc3Fsc3RhdGVfbmFtZXMKKworCiBzcWxfaGVscCA9IGN1c3RvbV90YXJnZXQoJ3Bz cWxfaGVscCcsCiAgIG91dHB1dDogWydzcWxfaGVscC5jJywgJ3NxbF9oZWxwLmgnXSwKICAgZGVw ZmlsZTogJ3NxbF9oZWxwLmRlcCcsCi0tIAoyLjUzLjAKCg== --000000000000fb83160652810290--