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 1wVxLc-002Iam-3C for pgsql-hackers@arkaria.postgresql.org; Sat, 06 Jun 2026 20:10:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wVxLZ-00GQXs-1l for pgsql-hackers@arkaria.postgresql.org; Sat, 06 Jun 2026 20:10:21 +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 1wVxLY-00GQXj-35 for pgsql-hackers@lists.postgresql.org; Sat, 06 Jun 2026 20:10:21 +0000 Received: from mail-4323.protonmail.ch ([185.70.43.23]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wVxLV-00000001RJv-2wuw for pgsql-hackers@lists.postgresql.org; Sat, 06 Jun 2026 20:10:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=scottray.io; s=protonmail; t=1780776614; x=1781035814; bh=3ooQbl8i7aEGxKQFsFbOX/CvD/hzSg24gY0zOR9yjus=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=MHqmaXWUKmQgm2BddktkOiJIFFKQyMC5Rbw3jHCYskgG6/+cJRl48W93phtnltz7e 8BMy8XT7HSRMSGp0xZ47Pe3CJMB5daVMH9wLD/B0Op9hmoffAZ2DJ32FVFNL6A5Dru 1rLDP/hDdqGyEH2oJsXn0ZRS4MC6FLMelcBa9TGX3RroM8cj3kJvbhxdTwnpawBRWs X0tLo+AgFOJV4l+66di3RU7sjYKz6xBjM1RYFzHWPkJPOtlnEaN1oZRviD2nwiGyhX CtqI17/dRFC1w4hQ/iRVFu/r8HFXP6sXvoNhUgSqPkhGlx0FyDoMC4L7Rhl/D4uVGA B+saHOPKWIi6Q== Date: Sat, 06 Jun 2026 20:10:10 +0000 To: JoongHyuk Shin From: Scott Ray Cc: Fujii Masao , Michael Paquier , pgsql-hackers@lists.postgresql.org Subject: Re: [PATCH] Don't call ereport(ERROR) from recovery target GUC assign hooks Message-ID: <0WrsV1VojwurDot6hdS0norm0nK9QFDk0KSLqBcXK4Xz2b_sMuIdE0zyiXP0p1hTRD7Hwz3C8AQouGyV7yZMhf5joz3zUpQee3l_pWPs4dk=@scottray.io> In-Reply-To: References: Feedback-ID: 189710061:user:proton X-Pm-Message-ID: 61932dfaf8421d9a0306b54424c117ada3cd71d0 MIME-Version: 1.0 Content-Type: multipart/signed; protocol="application/pgp-signature"; micalg=pgp-sha512; boundary="------6ad4ae9ea6b4e4e3cce97e5ea5e6ee6d9dd4d2e47c0c342343dadd2f10a928b3"; charset=utf-8 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------6ad4ae9ea6b4e4e3cce97e5ea5e6ee6d9dd4d2e47c0c342343dadd2f10a928b3 Content-Type: multipart/mixed;boundary=---------------------9eee2ad6f117521b0526ff09c938f8d4 -----------------------9eee2ad6f117521b0526ff09c938f8d4 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain;charset=utf-8 > * Function structure: the recovery_target_* set has been > historically stable, so array + loop abstraction adds limited > value; function size grows ~34% (32 -> 43 lines) for one line of > savings on a hypothetical sixth GUC, while the closest precedent > (archive_command / archive_library in pgarch.c) is a hard-coded literal. > = > * errhint vs errdetail: errhint("At most one of %s can be set.") > reads more like a constraint than an action hint. The closest > precedent, archive_command / archive_library in pgarch.c > (ProcessPgArchInterrupts() / LoadArchiveLibrary()), keeps the > enumeration in errdetail and omits errhint entirely. > = > * TAP regex: the added like() uses [^"]+ for the values, which > passes regardless of the actual value. Using quotemeta on the > expected values would verify the actual content, and anchoring > would also avoid accidentally matching the same tokens inside > errhint. Thanks for taking a look. I attached a v2 that applies your suggestions and uses "set to" instead of "=3D" to match convention. What do you think? Sample output: FATAL: multiple recovery targets specified DETAIL: At most one of "recovery_target", "recovery_target_lsn", "recovery_target_name", "recovery_target_time", "recovery_target_xid" can be set. Currently set: "recovery_target_time" set to "2026-01-01 00:00:00", "recovery_target_xid" set to "700". -- Scott Ray -----------------------9eee2ad6f117521b0526ff09c938f8d4 Content-Type: application/octet-stream; filename="v2-0001-Report-set-parameters-on-recovery_target-conflict.patch"; name="v2-0001-Report-set-parameters-on-recovery_target-conflict.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v2-0001-Report-set-parameters-on-recovery_target-conflict.patch"; name="v2-0001-Report-set-parameters-on-recovery_target-conflict.patch" RnJvbSA5Yjk2ZTBmMzI3ZDdjYTJmNjQ0YjI1OTUxMTc3NmVmNzI4NmVjNzJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTY290dCBSYXkgPHNjb3R0QHNjb3R0cmF5LmlvPgpEYXRlOiBT dW4sIDMxIE1heSAyMDI2IDEzOjEyOjI5IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2Ml0gUmVwb3J0 IHNldCBwYXJhbWV0ZXJzIG9uIHJlY292ZXJ5X3RhcmdldCBjb25mbGljdDsgZXhwYW5kCiB0ZXN0 cwoKdjQgb2YgIkRvbid0IGNhbGwgZXJlcG9ydChFUlJPUikgZnJvbSByZWNvdmVyeSB0YXJnZXQg R1VDIGFzc2lnbgpob29rcyIgcHJvZHVjZXMgYSBGQVRBTCB3aXRoIGFuIGVycmRldGFpbCB0aGF0 IGxpc3RzIGFsbCBmaXZlCnJlY292ZXJ5X3RhcmdldF8qIEdVQ3MgcmVnYXJkbGVzcyBvZiB3aGlj aCB0aGUgb3BlcmF0b3IgYWN0dWFsbHkKc2V0LCBhbmQgZXhlcmNpc2VzIG9ubHkgcmVjb3Zlcnlf dGFyZ2V0X3hpZCBpbiB0aGUgY2xlYXJlZC10aGVuLXNldApkaXJlY3Rpb24uCgpUaGlzIHBhdGNo IGFwcGVuZHMgdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2YgdGhlIEdVQ3MgdGhhdCBhcmUKYWN0dWFs bHkgbm9uLWVtcHR5IGFzIGEgdHJhaWxpbmcgc2VudGVuY2UgaW4gdGhlIGV4aXN0aW5nIGVycmRl dGFpbC4KVGhlICJhdCBtb3N0IG9uZSBvZiBbbGlzdF0iIGVudW1lcmF0aW9uIHN0YXlzIGluIGVy cmRldGFpbCBhbmQgbm8KZXJyaGludCBpcyBlbWl0dGVkLCBtYXRjaGluZyB0aGUgYXJjaGl2ZV9j b21tYW5kIC8gYXJjaGl2ZV9saWJyYXJ5CnByZWNlZGVudCBpbiBwZ2FyY2guYy4KClRoZSBUQVAg dGVzdCBnYWlucyBmb3VyIGNsZWFyZWQtdGhlbi1zZXQgY2FzZXMgY292ZXJpbmcgdGltZSwgbmFt ZSwKbHNuLCBhbmQgdGhlIGJhcmUgcmVjb3ZlcnlfdGFyZ2V0LCBtaXJyb3JpbmcgdGhlIGV4aXN0 aW5nIHhpZCBjYXNlLgpBIG5ldyBsaWtlKCkgYXNzZXJ0aW9uIHZlcmlmaWVzIHRoYXQgdGhlIGVy cmRldGFpbCBuYW1lcyB3aGljaCBHVUNzCmFyZSBzZXQgYW5kIHRoZWlyIHZhbHVlcywgdXNpbmcg cXVvdGVtZXRhIG9uIHRoZSBleHBlY3RlZCB2YWx1ZXMuCgpBcHBsaWVzIGF0b3AgdjQuCgpEaXNj dXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBQ1NkamZQVWE0VXZLakFEZ09FUlhveE5ZbUNn Mm1xcWlxS2tpSms2bVg2RTRxZ1ZGd0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jICAgfCAzNSArKysrKysrKysrKysrKysrLS0KIHNy Yy90ZXN0L3JlY292ZXJ5L3QvMDAzX3JlY292ZXJ5X3RhcmdldHMucGwgfCA0MCArKysrKysrKysr KysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3Zl cnkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCmluZGV4IDEy NTNiZWQxMDU4Li42YWYzNjk2MGRkYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZ3JlY292ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z3JlY292ZXJ5LmMKQEAgLTExNjcsMzEgKzExNjcsNTggQEAgdmFsaWRhdGVSZWNvdmVyeVBhcmFt ZXRlcnModm9pZCkKICAqIGFzc2lnbiBob29rcyBtdXN0IG5ldmVyIGZhaWwuICBNb3ZpbmcgdGhl IGNoZWNrIGhlcmUga2VlcHMgdGhlIGFzc2lnbiBob29rcwogICogY29udHJhY3QtY29tcGxpYW50 LgogICoKLSAqIElmIGEgZnV0dXJlIHBhdGNoIGFkZHMgYSBzaXh0aCByZWNvdmVyeV90YXJnZXRf KiBHVUMsIGJvdGggdGhpcyBsaXN0IGFuZAotICogdGhlIGVycmRldGFpbCBiZWxvdyBtdXN0IGJl IHVwZGF0ZWQuCisgKiBJZiBhIGZ1dHVyZSBwYXRjaCBhZGRzIGEgc2l4dGggcmVjb3ZlcnlfdGFy Z2V0XyogR1VDLCBhZGQgYW5vdGhlcgorICogR2V0Q29uZmlnT3B0aW9uIGJsb2NrIGJlbG93IHRv IGluY2x1ZGUgaXQgaW4gdGhlICJDdXJyZW50bHkgc2V0OiIKKyAqIHN1ZmZpeCwgYW5kIGV4dGVu ZCB0aGUgZml4ZWQgZW51bWVyYXRpb24gaW4gdGhlIGVycmRldGFpbC4KICAqLwogc3RhdGljIHZv aWQKIENoZWNrUmVjb3ZlcnlUYXJnZXRDb25mbGljdHModm9pZCkKIHsKKwlTdHJpbmdJbmZvRGF0 YSBzZXRfdGFyZ2V0czsKIAlpbnQJCQludGFyZ2V0cyA9IDA7CiAJY29uc3QgY2hhciAqdmFsOwog CisJaW5pdFN0cmluZ0luZm8oJnNldF90YXJnZXRzKTsKKwogCS8qIG1pc3Npbmdfb2s9ZmFsc2Ug Z3VhcmFudGVlcyB2YWwgaXMgbm9uLU5VTEwuICovCiAJdmFsID0gR2V0Q29uZmlnT3B0aW9uKCJy ZWNvdmVyeV90YXJnZXQiLCBmYWxzZSwgZmFsc2UpOwogCWlmICh2YWxbMF0gIT0gJ1wwJykKKwl7 CisJCWFwcGVuZFN0cmluZ0luZm8oJnNldF90YXJnZXRzLCAiXCJyZWNvdmVyeV90YXJnZXRcIiBz ZXQgdG8gXCIlc1wiIiwgdmFsKTsKIAkJbnRhcmdldHMrKzsKKwl9CiAJdmFsID0gR2V0Q29uZmln T3B0aW9uKCJyZWNvdmVyeV90YXJnZXRfbHNuIiwgZmFsc2UsIGZhbHNlKTsKIAlpZiAodmFsWzBd ICE9ICdcMCcpCisJeworCQlpZiAobnRhcmdldHMgPiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmc2V0X3RhcmdldHMsICIsICIpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZzZXRfdGFyZ2V0 cywgIlwicmVjb3ZlcnlfdGFyZ2V0X2xzblwiIHNldCB0byBcIiVzXCIiLCB2YWwpOwogCQludGFy Z2V0cysrOworCX0KIAl2YWwgPSBHZXRDb25maWdPcHRpb24oInJlY292ZXJ5X3RhcmdldF9uYW1l IiwgZmFsc2UsIGZhbHNlKTsKIAlpZiAodmFsWzBdICE9ICdcMCcpCisJeworCQlpZiAobnRhcmdl dHMgPiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc2V0X3RhcmdldHMsICIsICIpOwor CQlhcHBlbmRTdHJpbmdJbmZvKCZzZXRfdGFyZ2V0cywgIlwicmVjb3ZlcnlfdGFyZ2V0X25hbWVc IiBzZXQgdG8gXCIlc1wiIiwgdmFsKTsKIAkJbnRhcmdldHMrKzsKKwl9CiAJdmFsID0gR2V0Q29u ZmlnT3B0aW9uKCJyZWNvdmVyeV90YXJnZXRfdGltZSIsIGZhbHNlLCBmYWxzZSk7CiAJaWYgKHZh bFswXSAhPSAnXDAnKQorCXsKKwkJaWYgKG50YXJnZXRzID4gMCkKKwkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJnNldF90YXJnZXRzLCAiLCAiKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmc2V0X3Rh cmdldHMsICJcInJlY292ZXJ5X3RhcmdldF90aW1lXCIgc2V0IHRvIFwiJXNcIiIsIHZhbCk7CiAJ CW50YXJnZXRzKys7CisJfQogCXZhbCA9IEdldENvbmZpZ09wdGlvbigicmVjb3ZlcnlfdGFyZ2V0 X3hpZCIsIGZhbHNlLCBmYWxzZSk7CiAJaWYgKHZhbFswXSAhPSAnXDAnKQorCXsKKwkJaWYgKG50 YXJnZXRzID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnNldF90YXJnZXRzLCAiLCAi KTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmc2V0X3RhcmdldHMsICJcInJlY292ZXJ5X3RhcmdldF94 aWRcIiBzZXQgdG8gXCIlc1wiIiwgdmFsKTsKIAkJbnRhcmdldHMrKzsKKwl9CiAKIAlpZiAobnRh cmdldHMgPiAxKQogCQllcmVwb3J0KEZBVEFMLApAQCAtMTIwMSw3ICsxMjI4LDkgQEAgQ2hlY2tS ZWNvdmVyeVRhcmdldENvbmZsaWN0cyh2b2lkKQogCQkJCQkJICAgIlwicmVjb3ZlcnlfdGFyZ2V0 X2xzblwiLCAiCiAJCQkJCQkgICAiXCJyZWNvdmVyeV90YXJnZXRfbmFtZVwiLCAiCiAJCQkJCQkg ICAiXCJyZWNvdmVyeV90YXJnZXRfdGltZVwiLCAiCi0JCQkJCQkgICAiXCJyZWNvdmVyeV90YXJn ZXRfeGlkXCIgY2FuIGJlIHNldC4iKSkpOworCQkJCQkJICAgIlwicmVjb3ZlcnlfdGFyZ2V0X3hp ZFwiIGNhbiBiZSBzZXQuICIKKwkJCQkJCSAgICJDdXJyZW50bHkgc2V0OiAlcy4iLAorCQkJCQkJ ICAgc2V0X3RhcmdldHMuZGF0YSkpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Y292ZXJ5L3QvMDAzX3JlY292ZXJ5X3RhcmdldHMucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAw M19yZWNvdmVyeV90YXJnZXRzLnBsCmluZGV4IDU5Nzk2NjNiMGFiLi5mMDBhODJkNGU5ZSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMDNfcmVjb3ZlcnlfdGFyZ2V0cy5wbAorKysg Yi9zcmMvdGVzdC9yZWNvdmVyeS90LzAwM19yZWNvdmVyeV90YXJnZXRzLnBsCkBAIC0yODIsNiAr MjgyLDE0IEBAIGxpa2UoCiAJcXIvbXVsdGlwbGUgcmVjb3ZlcnkgdGFyZ2V0cyBzcGVjaWZpZWQv LAogCSdleHBlY3RlZCBlcnJvciBtZXNzYWdlIGxvZ2dlZCB3aXRob3V0IHJlY292ZXJ5LnNpZ25h bCcpOwogCisjIE9yZGVyaW5nIGluIHRoZSBlcnJkZXRhaWwgZm9sbG93cyB0aGUgR2V0Q29uZmln T3B0aW9uIHNlcXVlbmNlIGluCisjIENoZWNrUmVjb3ZlcnlUYXJnZXRDb25mbGljdHM6IHJlY292 ZXJ5X3RhcmdldCwgcmVjb3ZlcnlfdGFyZ2V0X2xzbiwKKyMgcmVjb3ZlcnlfdGFyZ2V0X25hbWUs IHJlY292ZXJ5X3RhcmdldF90aW1lLCByZWNvdmVyeV90YXJnZXRfeGlkLgorbGlrZSgKKwkkbG9n ZmlsZV9ub19zaWduYWwsCisJcXIvQ3VycmVudGx5IHNldDogInJlY292ZXJ5X3RhcmdldF9uYW1l IiBzZXQgdG8gIlxRJHJlY292ZXJ5X25hbWVcRSIsICJyZWNvdmVyeV90YXJnZXRfdGltZSIgc2V0 IHRvICJcUSRyZWNvdmVyeV90aW1lXEUiLywKKwknZXJyZGV0YWlsIG5hbWVzIHdoaWNoIHJlY292 ZXJ5X3RhcmdldF8qIEdVQ3MgYXJlIHNldCBhbmQgdGhlaXIgdmFsdWVzJyk7CisKICMgU2FtZS1H VUMgbGFzdC13aW5zIChvbmUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgR1VDJ3MgdmFsdWUpOiBh c3NpZ25pbmcgYQogIyByZWNvdmVyeV90YXJnZXRfKiBHVUMgYW5kIHRoZW4gYXNzaWduaW5nIHRo ZSBzYW1lIEdVQyB0byBhbiBlbXB0eSBzdHJpbmcKICMgbGVhdmVzIG5vIHRhcmdldCBzZXQgYW5k IHJlY292ZXJ5IHByb2NlZWRzIHRvIHRoZSBlbmQgb2YgV0FMLiAgVGhpcyBpcyB0aGUKQEAgLTM1 OCw2ICszNjYsMzggQEAgaXMoJGNvdW50X3hpZF9jbGVhcl9zZXQsICIyMDAwIiwKIAkncmVjb3Zl cnlfdGFyZ2V0X3hpZCBob25vcmVkIHdoZW4gY2xlYXJlZCB0aGVuIHNldCcpOwogJG5vZGVfeGlk X2NsZWFyX3NldC0+dGVhcmRvd25fbm9kZTsKIAordGVzdF9yZWNvdmVyeV9zdGFuZGJ5X3dpdGhf b3B0aW9ucygKKwkncmVjb3ZlcnlfdGFyZ2V0X3RpbWUgY2xlYXJlZCB0aGVuIHNldCcsCisJJ3N0 YW5kYnlfdGltZV9jbGVhcl9zZXQnLAorCSRub2RlX3ByaW1hcnksCisJIi1jIHJlY292ZXJ5X3Rh cmdldF90aW1lPSAtYyByZWNvdmVyeV90YXJnZXRfdGltZT0kcmVjb3ZlcnlfdGltZV90IiwKKwki MzAwMCIsCisJJGxzbjMpOworCit0ZXN0X3JlY292ZXJ5X3N0YW5kYnlfd2l0aF9vcHRpb25zKAor CSdyZWNvdmVyeV90YXJnZXRfbmFtZSBjbGVhcmVkIHRoZW4gc2V0JywKKwknc3RhbmRieV9uYW1l X2NsZWFyX3NldCcsCisJJG5vZGVfcHJpbWFyeSwKKwkiLWMgcmVjb3ZlcnlfdGFyZ2V0X25hbWU9 IC1jIHJlY292ZXJ5X3RhcmdldF9uYW1lPSRyZWNvdmVyeV9uYW1lIiwKKwkiNDAwMCIsCisJJGxz bjQpOworCit0ZXN0X3JlY292ZXJ5X3N0YW5kYnlfd2l0aF9vcHRpb25zKAorCSdyZWNvdmVyeV90 YXJnZXRfbHNuIGNsZWFyZWQgdGhlbiBzZXQnLAorCSdzdGFuZGJ5X2xzbl9jbGVhcl9zZXQnLAor CSRub2RlX3ByaW1hcnksCisJIi1jIHJlY292ZXJ5X3RhcmdldF9sc249IC1jIHJlY292ZXJ5X3Rh cmdldF9sc249JHJlY292ZXJ5X2xzbiIsCisJIjUwMDAiLAorCSRsc241KTsKKwordGVzdF9yZWNv dmVyeV9zdGFuZGJ5X3dpdGhfb3B0aW9ucygKKwkncmVjb3ZlcnlfdGFyZ2V0IGNsZWFyZWQgdGhl biBzZXQnLAorCSdzdGFuZGJ5X2ltbWVkaWF0ZV9jbGVhcl9zZXQnLAorCSRub2RlX3ByaW1hcnks CisJIi1jIHJlY292ZXJ5X3RhcmdldD0gLWMgcmVjb3ZlcnlfdGFyZ2V0PWltbWVkaWF0ZSIsCisJ IjEwMDAiLAorCSRsc24xKTsKKwogIyBJbnZhbGlkIHJlY292ZXJ5X3RhcmdldF90aW1lbGluZSB0 ZXN0cwogbXkgKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGVfcHJpbWFyeS0+cHNx bCgncG9zdGdyZXMnLAogCSJBTFRFUiBTWVNURU0gU0VUIHJlY292ZXJ5X3RhcmdldF90aW1lbGlu ZSBUTyAnYm9ndXMnIik7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= -----------------------9eee2ad6f117521b0526ff09c938f8d4-- --------6ad4ae9ea6b4e4e3cce97e5ea5e6ee6d9dd4d2e47c0c342343dadd2f10a928b3 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: ProtonMail wrsEARYKAG0FgmokfpIJENJWjBT/u5s7RRQAAAAAABwAIHNhbHRAbm90YXRp b25zLm9wZW5wZ3Bqcy5vcmf+DFTwSf4HSCz9+DkgZW7va0eKkuWTm2ABQcHC 7oZUaRYhBHp15mAbLriqt8a+vNJWjBT/u5s7AAB5FQD/YYi1VVHfBBshB1IM tHSpklMn15mE99xzK47l+HcWwTsBAMkPCOFPJD4iGJr99rV0q4PHaZThujz1 NoGi1c3PPGoG =lK1P -----END PGP SIGNATURE----- --------6ad4ae9ea6b4e4e3cce97e5ea5e6ee6d9dd4d2e47c0c342343dadd2f10a928b3--