From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <pve-devel-bounces@lists.proxmox.com>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68])
	by lore.proxmox.com (Postfix) with ESMTPS id 2383A1FF16F
	for <inbox@lore.proxmox.com>; Thu, 13 Mar 2025 16:17:58 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 1EBAD1CD14;
	Thu, 13 Mar 2025 16:17:50 +0100 (CET)
From: Alexander Zeidler <a.zeidler@proxmox.com>
To: pve-devel@lists.proxmox.com
Date: Thu, 13 Mar 2025 16:17:34 +0100
Message-Id: <20250313151734.258337-1-a.zeidler@proxmox.com>
X-Mailer: git-send-email 2.39.5
MIME-Version: 1.0
X-SPAM-LEVEL: Spam detection results:  0
 AWL 0.087 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DMARC_MISSING             0.1 Missing DMARC policy
 KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment
 SPF_HELO_NONE           0.001 SPF: HELO does not publish an SPF Record
 SPF_PASS               -0.001 SPF: sender matches SPF record
Subject: [pve-devel] [RFC proxmox] fix #6143: notify: allow overriding
 notification templates
X-BeenThere: pve-devel@lists.proxmox.com
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/>
List-Post: <mailto:pve-devel@lists.proxmox.com>
List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe>
Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: pve-devel-bounces@lists.proxmox.com
Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com>

UHJldmlvdXNseSwgbm90aWZpY2F0aW9uIHRlbXBsYXRlcyBjb3VsZCBiZSBtb2RpZmllZCBieSB0
aGUgdXNlciwgYnV0CnRoZXNlIHdlcmUgb3ZlcndyaXR0ZW4gYWdhaW4gd2l0aCBpbnN0YWxsaW5n
IG5ld2VyIHBhY2thZ2UgdmVyc2lvbnMgb2YKcHZlLW1hbmFnZXIgYW5kIHByb3htb3gtYmFja3Vw
LgoKTm93IG92ZXJyaWRlIHRlbXBsYXRlcyBjYW4gYmUgY3JlYXRlZCBjbHVzdGVyLXdpZGUgaW4g
dGhlIHBhdGgK4oCcL2V0Yy97cHZlLHByb3htb3gtYmFja3VwfS9ub3RpZmljYXRpb24tdGVtcGxh
dGVzL3tuYW1lc3BhY2V94oCdLCB3aGljaAphcmUgdXNlZCB3aXRoIHByaW9yaXR5LiBUaGUgZm9s
ZGVyIHN0cnVjdHVyZSBoYXMgdG8gYmUgY3JlYXRlZCBhbmQKcG9wdWxhdGVkIG1hbnVhbGx5IChl
LmcuIC9ldGMvcHZlL25vdGlmaWNhdGlvbi10ZW1wbGF0ZXMvZGVmYXVsdC8pLgoKSWYgb3ZlcnJp
ZGUgdGVtcGxhdGVzIGFyZSBub3QgZXhpc3Rpbmcgb3IgdGhlaXIgcmVuZGVyaW5nIGZhaWxzLCB0
aGUKdmVuZG9yIHRlbXBsYXRlcyBpbgoiL3Vzci9zaGFyZS97cHZlLW1hbmFnZXIscHJveG1veC1i
YWNrdXB9L3RlbXBsYXRlcy9kZWZhdWx0LyIgYXJlIHVzZWQuCgpTZXF1ZW5jZTogW292ZXJyaWRl
IGh0bWwgLT4gdmVuZG9yIGh0bWwgLT5dIG92ZXJyaWRlIHR4dCAtPiB2ZW5kb3IgdHh0CgpBbiBl
cnJvciBpcyBvbmx5IHJldHVybmVkIGlmIG5vbmUgb2YgdGhlIHRlbXBsYXRlIGNhbmRpZGF0ZXMg
Y291bGQgYmUKdXNlZC4gVXNpbmcgYW4gb3ZlcnJpZGUgdGVtcGxhdGUgZ2V0cyBub3QgbG9nZ2Vk
LgoKU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIFplaWRsZXIgPGEuemVpZGxlckBwcm94bW94LmNv
bT4KLS0tCgpRdWVzdGlvbnM6Ci0gSXMgdGhlcmUgYW55dGhpbmcgYWdhaW5zdCB0aGUgY2hvc2Vu
IG92ZXJyaWRlIHBhdGg/CgpVcGNvbWluZyAoZnJvbSBidWd6aWxsYSByZXBvcnQpOgotIEx1a2Fz
IFdhZ25lcjogRXhpc3RpbmcgdGVtcGxhdGVzL3ZhcmlhYmxlcy9oZWxwZXJzIGhhdmUgYmVlbgog
IHJldmlld2VkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgYXJlIE9LIHRvIGJlIHB1YmxpYyBBUEkK
LSBUaGUgc3RlcHMgbmVlZGVkIHRvIG92ZXJyaWRlIHRoZSB0ZW1wbGF0ZSBhcmUgYWRkZWQgdG8g
dGhlCiAgbm90aWZpY2F0aW9uIGRvY3MKLSBUZW1wbGF0ZSB2YXJpYWJsZXMgYW5kIGhlbHBlcnMg
YXJlIGRvY3VtZW50ZWQKCgogcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvbW9kLnJzICB8ICAg
MyArLQogcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvcGJzLnJzICB8ICAgOSArKy0KIHByb3ht
b3gtbm90aWZ5L3NyYy9jb250ZXh0L3B2ZS5ycyAgfCAgMTAgKystCiBwcm94bW94LW5vdGlmeS9z
cmMvY29udGV4dC90ZXN0LnJzIHwgICAxICsKIHByb3htb3gtbm90aWZ5L3NyYy9yZW5kZXJlci9t
b2QucnMgfCAxMjQgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIDUgZmlsZXMgY2hhbmdl
ZCwgOTkgaW5zZXJ0aW9ucygrKSwgNDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvcHJveG1v
eC1ub3RpZnkvc3JjL2NvbnRleHQvbW9kLnJzIGIvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQv
bW9kLnJzCmluZGV4IGMwYTVhMTNiLi5jNDY0OWQ5MSAxMDA2NDQKLS0tIGEvcHJveG1veC1ub3Rp
Znkvc3JjL2NvbnRleHQvbW9kLnJzCisrKyBiL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L21v
ZC5ycwpAQCAtMjQsMTEgKzI0LDEyIEBAIHB1YiB0cmFpdCBDb250ZXh0OiBTZW5kICsgU3luYyAr
IERlYnVnIHsKICAgICBmbiBodHRwX3Byb3h5X2NvbmZpZygmc2VsZikgLT4gT3B0aW9uPFN0cmlu
Zz47CiAgICAgLy8vIFJldHVybiBkZWZhdWx0IGNvbmZpZyBmb3IgYnVpbHQtaW4gdGFyZ2V0cy9t
YXRjaGVycy4KICAgICBmbiBkZWZhdWx0X2NvbmZpZygmc2VsZikgLT4gJidzdGF0aWMgc3RyOwot
ICAgIC8vLyBMb29rdXAgYSB0ZW1wbGF0ZSBpbiBhIGNlcnRhaW4gKG9wdGlvbmFsKSBuYW1lc3Bh
Y2UKKyAgICAvLy8gTG9va3VwIGEgdGVtcGxhdGUgKG9yIGl0cyBvdmVycmlkZSkgaW4gYSBjZXJ0
YWluIChvcHRpb25hbCkgbmFtZXNwYWNlCiAgICAgZm4gbG9va3VwX3RlbXBsYXRlKAogICAgICAg
ICAmc2VsZiwKICAgICAgICAgZmlsZW5hbWU6ICZzdHIsCiAgICAgICAgIG5hbWVzcGFjZTogT3B0
aW9uPCZzdHI+LAorICAgICAgICB1c2Vfb3ZlcnJpZGU6IGJvb2wsCiAgICAgKSAtPiBSZXN1bHQ8
T3B0aW9uPFN0cmluZz4sIEVycm9yPjsKIH0KIApkaWZmIC0tZ2l0IGEvcHJveG1veC1ub3RpZnkv
c3JjL2NvbnRleHQvcGJzLnJzIGIvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvcGJzLnJzCmlu
ZGV4IGU4MTA2YzU3Li5kYTRkOWJhMCAxMDA2NDQKLS0tIGEvcHJveG1veC1ub3RpZnkvc3JjL2Nv
bnRleHQvcGJzLnJzCisrKyBiL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Bicy5ycwpAQCAt
MTA5LDggKzEwOSwxNSBAQCBpbXBsIENvbnRleHQgZm9yIFBCU0NvbnRleHQgewogICAgICAgICAm
c2VsZiwKICAgICAgICAgZmlsZW5hbWU6ICZzdHIsCiAgICAgICAgIG5hbWVzcGFjZTogT3B0aW9u
PCZzdHI+LAorICAgICAgICB1c2Vfb3ZlcnJpZGU6IGJvb2wsCiAgICAgKSAtPiBSZXN1bHQ8T3B0
aW9uPFN0cmluZz4sIEVycm9yPiB7Ci0gICAgICAgIGxldCBwYXRoID0gUGF0aDo6bmV3KCIvdXNy
L3NoYXJlL3Byb3htb3gtYmFja3VwL3RlbXBsYXRlcyIpCisgICAgICAgIGxldCBwYXRoID0gaWYg
dXNlX292ZXJyaWRlIHsKKyAgICAgICAgICAgICIvZXRjL3Byb3htb3gtYmFja3VwL25vdGlmaWNh
dGlvbi10ZW1wbGF0ZXMiCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAiL3Vzci9zaGFy
ZS9wcm94bW94LWJhY2t1cC90ZW1wbGF0ZXMiCisgICAgICAgIH07CisKKyAgICAgICAgbGV0IHBh
dGggPSBQYXRoOjpuZXcoJnBhdGgpCiAgICAgICAgICAgICAuam9pbihuYW1lc3BhY2UudW53cmFw
X29yKCJkZWZhdWx0IikpCiAgICAgICAgICAgICAuam9pbihmaWxlbmFtZSk7CiAKZGlmZiAtLWdp
dCBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3B2ZS5ycyBiL3Byb3htb3gtbm90aWZ5L3Ny
Yy9jb250ZXh0L3B2ZS5ycwppbmRleCBkNDlhYjI3Yy4uMDViMWI1YjcgMTAwNjQ0Ci0tLSBhL3By
b3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3B2ZS5ycworKysgYi9wcm94bW94LW5vdGlmeS9zcmMv
Y29udGV4dC9wdmUucnMKQEAgLTU4LDEwICs1OCwxOCBAQCBpbXBsIENvbnRleHQgZm9yIFBWRUNv
bnRleHQgewogICAgICAgICAmc2VsZiwKICAgICAgICAgZmlsZW5hbWU6ICZzdHIsCiAgICAgICAg
IG5hbWVzcGFjZTogT3B0aW9uPCZzdHI+LAorICAgICAgICB1c2Vfb3ZlcnJpZGU6IGJvb2wsCiAg
ICAgKSAtPiBSZXN1bHQ8T3B0aW9uPFN0cmluZz4sIEVycm9yPiB7Ci0gICAgICAgIGxldCBwYXRo
ID0gUGF0aDo6bmV3KCIvdXNyL3NoYXJlL3B2ZS1tYW5hZ2VyL3RlbXBsYXRlcyIpCisgICAgICAg
IGxldCBwYXRoID0gaWYgdXNlX292ZXJyaWRlIHsKKyAgICAgICAgICAgICIvZXRjL3B2ZS9ub3Rp
ZmljYXRpb24tdGVtcGxhdGVzIgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIi91c3Iv
c2hhcmUvcHZlLW1hbmFnZXIvdGVtcGxhdGVzIgorICAgICAgICB9OworCisgICAgICAgIGxldCBw
YXRoID0gUGF0aDo6bmV3KCZwYXRoKQogICAgICAgICAgICAgLmpvaW4obmFtZXNwYWNlLnVud3Jh
cF9vcigiZGVmYXVsdCIpKQogICAgICAgICAgICAgLmpvaW4oZmlsZW5hbWUpOworCiAgICAgICAg
IGxldCB0ZW1wbGF0ZV9zdHJpbmcgPSBwcm94bW94X3N5czo6ZnM6OmZpbGVfcmVhZF9vcHRpb25h
bF9zdHJpbmcocGF0aCkKICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IEVycm9yOjpHZW5lcmlj
KGZvcm1hdCEoImNvdWxkIG5vdCBsb2FkIHRlbXBsYXRlOiB7ZXJyfSIpKSk/OwogICAgICAgICBP
ayh0ZW1wbGF0ZV9zdHJpbmcpCmRpZmYgLS1naXQgYS9wcm94bW94LW5vdGlmeS9zcmMvY29udGV4
dC90ZXN0LnJzIGIvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvdGVzdC5ycwppbmRleCA1ZGYy
NWQwNS4uNmVmZDg0YzUgMTAwNjQ0Ci0tLSBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Rl
c3QucnMKKysrIGIvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvdGVzdC5ycwpAQCAtMjksNiAr
MjksNyBAQCBpbXBsIENvbnRleHQgZm9yIFRlc3RDb250ZXh0IHsKICAgICAgICAgJnNlbGYsCiAg
ICAgICAgIF9maWxlbmFtZTogJnN0ciwKICAgICAgICAgX25hbWVzcGFjZTogT3B0aW9uPCZzdHI+
LAorICAgICAgICBfdXNlX292ZXJyaWRlOiBib29sLAogICAgICkgLT4gUmVzdWx0PE9wdGlvbjxT
dHJpbmc+LCBFcnJvcj4gewogICAgICAgICBPayhTb21lKFN0cmluZzo6bmV3KCkpKQogICAgIH0K
ZGlmZiAtLWdpdCBhL3Byb3htb3gtbm90aWZ5L3NyYy9yZW5kZXJlci9tb2QucnMgYi9wcm94bW94
LW5vdGlmeS9zcmMvcmVuZGVyZXIvbW9kLnJzCmluZGV4IGUwNThlYTIyLi5hYzUxOWJlZSAxMDA2
NDQKLS0tIGEvcHJveG1veC1ub3RpZnkvc3JjL3JlbmRlcmVyL21vZC5ycworKysgYi9wcm94bW94
LW5vdGlmeS9zcmMvcmVuZGVyZXIvbW9kLnJzCkBAIC0xOTEsNyArMTkxLDcgQEAgaW1wbCBWYWx1
ZVJlbmRlckZ1bmN0aW9uIHsKIH0KIAogLy8vIEF2YWlsYWJsZSB0ZW1wbGF0ZSB0eXBlcwotI1tk
ZXJpdmUoQ29weSwgQ2xvbmUpXQorI1tkZXJpdmUoQ29weSwgQ2xvbmUsIFBhcnRpYWxFcSldCiBw
dWIgZW51bSBUZW1wbGF0ZVR5cGUgewogICAgIC8vLyBIVE1MIGJvZHkgdGVtcGxhdGUKICAgICBI
dG1sQm9keSwKQEAgLTI1MCw3MCArMjUwLDEwNCBAQCBpbXBsIEJsb2NrUmVuZGVyRnVuY3Rpb25z
IHsKIH0KIAogZm4gcmVuZGVyX3RlbXBsYXRlX2ltcGwoCi0gICAgdGVtcGxhdGU6ICZzdHIsCiAg
ICAgZGF0YTogJlZhbHVlLAogICAgIHJlbmRlcmVyOiBUZW1wbGF0ZVR5cGUsCi0pIC0+IFJlc3Vs
dDxTdHJpbmcsIEVycm9yPiB7Ci0gICAgbGV0IG11dCBoYW5kbGViYXJzID0gSGFuZGxlYmFyczo6
bmV3KCk7Ci0gICAgaGFuZGxlYmFycy5yZWdpc3Rlcl9lc2NhcGVfZm4ocmVuZGVyZXIuZXNjYXBl
X2ZuKCkpOworICAgIGZpbGVuYW1lOiAmc3RyLAorICAgIHVzZV9vdmVycmlkZTogYm9vbCwKKyAg
ICBodG1sX2ZhbGxiYWNrOiBib29sLAorKSAtPiBSZXN1bHQ8T3B0aW9uPFN0cmluZz4sIEVycm9y
PiB7CisgICAgbGV0IHRlbXBsYXRlX3N0cmluZyA9IGNvbnRleHQ6OmNvbnRleHQoKS5sb29rdXBf
dGVtcGxhdGUoJmZpbGVuYW1lLCBOb25lLCB1c2Vfb3ZlcnJpZGUpPzsKKworICAgIGlmIGxldCBT
b21lKHRlbXBsYXRlX3N0cmluZykgPSB0ZW1wbGF0ZV9zdHJpbmcgeworICAgICAgICBsZXQgbXV0
IGhhbmRsZWJhcnMgPSBIYW5kbGViYXJzOjpuZXcoKTsKKyAgICAgICAgaGFuZGxlYmFycy5yZWdp
c3Rlcl9lc2NhcGVfZm4ocmVuZGVyZXIuZXNjYXBlX2ZuKCkpOworCisgICAgICAgIGxldCBibG9j
a19yZW5kZXJfZm5zID0gcmVuZGVyZXIuYmxvY2tfcmVuZGVyX2ZucygpOworICAgICAgICBibG9j
a19yZW5kZXJfZm5zLnJlZ2lzdGVyX2hlbHBlcnMoJm11dCBoYW5kbGViYXJzKTsKIAotICAgIGxl
dCBibG9ja19yZW5kZXJfZm5zID0gcmVuZGVyZXIuYmxvY2tfcmVuZGVyX2ZucygpOwotICAgIGJs
b2NrX3JlbmRlcl9mbnMucmVnaXN0ZXJfaGVscGVycygmbXV0IGhhbmRsZWJhcnMpOworICAgICAg
ICBWYWx1ZVJlbmRlckZ1bmN0aW9uOjpyZWdpc3Rlcl9oZWxwZXJzKCZtdXQgaGFuZGxlYmFycyk7
CisKKyAgICAgICAgaGFuZGxlYmFycy5yZWdpc3Rlcl9oZWxwZXIoCisgICAgICAgICAgICAicmVs
YXRpdmUtcGVyY2VudGFnZSIsCisgICAgICAgICAgICBCb3g6Om5ldyhoYW5kbGViYXJzX3JlbGF0
aXZlX3BlcmNlbnRhZ2VfaGVscGVyKSwKKyAgICAgICAgKTsKIAotICAgIFZhbHVlUmVuZGVyRnVu
Y3Rpb246OnJlZ2lzdGVyX2hlbHBlcnMoJm11dCBoYW5kbGViYXJzKTsKKyAgICAgICAgbGV0IHJl
bmRlcmVkX3RlbXBsYXRlID0gaGFuZGxlYmFycworICAgICAgICAgICAgLnJlbmRlcl90ZW1wbGF0
ZSgmdGVtcGxhdGVfc3RyaW5nLCBkYXRhKQorICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgRXJy
b3I6OlJlbmRlckVycm9yKGVyci5pbnRvKCkpKT87CiAKLSAgICBoYW5kbGViYXJzLnJlZ2lzdGVy
X2hlbHBlcigKLSAgICAgICAgInJlbGF0aXZlLXBlcmNlbnRhZ2UiLAotICAgICAgICBCb3g6Om5l
dyhoYW5kbGViYXJzX3JlbGF0aXZlX3BlcmNlbnRhZ2VfaGVscGVyKSwKLSAgICApOworICAgICAg
ICBsZXQgbXV0IHJlbmRlcmVkX3RlbXBsYXRlID0gcmVuZGVyZXIucG9zdHByb2Nlc3MocmVuZGVy
ZWRfdGVtcGxhdGUpOwogCi0gICAgbGV0IHJlbmRlcmVkX3RlbXBsYXRlID0gaGFuZGxlYmFycwot
ICAgICAgICAucmVuZGVyX3RlbXBsYXRlKHRlbXBsYXRlLCBkYXRhKQotICAgICAgICAubWFwX2Vy
cih8ZXJyfCBFcnJvcjo6UmVuZGVyRXJyb3IoZXJyLmludG8oKSkpPzsKKyAgICAgICAgaWYgaHRt
bF9mYWxsYmFjayB7CisgICAgICAgICAgICByZW5kZXJlZF90ZW1wbGF0ZSA9IGZvcm1hdCEoCisg
ICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxwcmU+e308L3ByZT48L2JvZHk+PC9odG1sPiIs
CisgICAgICAgICAgICAgICAgaGFuZGxlYmFyczo6aHRtbF9lc2NhcGUoJnJlbmRlcmVkX3RlbXBs
YXRlKQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQogCi0gICAgT2socmVuZGVyZWRfdGVtcGxh
dGUpCisgICAgICAgIE9rKFNvbWUocmVuZGVyZWRfdGVtcGxhdGUpKQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIE9rKE5vbmUpCisgICAgfQogfQogCiAvLy8gUmVuZGVyIGEgdGVtcGxhdGUgc3RyaW5n
LgogLy8vCi0vLy8gVGhlIG91dHB1dCBmb3JtYXQgY2FuIGJlIGNob3NlbiB2aWEgdGhlIGByZW5k
ZXJlcmAgcGFyYW1ldGVyIChzZWUgW1RlbXBsYXRlVHlwZV0KLS8vLyBmb3IgYXZhaWxhYmxlIG9w
dGlvbnMpLgorLy8vIFRoZSBvdXRwdXQgZm9ybWF0IGNhbiBiZSBjaG9zZW4gdmlhIHRoZSBgdHlg
IHBhcmFtZXRlciAoc2VlIFtUZW1wbGF0ZVR5cGVdCisvLy8gZm9yIGF2YWlsYWJsZSBvcHRpb25z
KS4gVXNlIGFuIG92ZXJyaWRlIHRlbXBsYXRlIGlmIGV4aXN0aW5nIGFuZCByZW5kZXJhYmxlLAor
Ly8vIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gb3JpZ2luYWwgdGVtcGxhdGUuIElmIFtUZW1wbGF0
ZVR5cGVdIGlzIGBIdG1sQm9keWAgYnV0IG5vCisvLy8gSFRNTCB0ZW1wbGF0ZSBjb3VsZCBiZSB1
c2VkLCBmYWxsIGJhY2sgdG8gcGxhaW50ZXh0IHRlbXBsYXRlcyBhbmQgYWRkIHRoZSB0YWdzCisv
Ly8gYDxodG1sPjxib2R5PjxwcmU+YC4KIHB1YiBmbiByZW5kZXJfdGVtcGxhdGUoCiAgICAgbXV0
IHR5OiBUZW1wbGF0ZVR5cGUsCiAgICAgdGVtcGxhdGU6ICZzdHIsCiAgICAgZGF0YTogJlZhbHVl
LAogKSAtPiBSZXN1bHQ8U3RyaW5nLCBFcnJvcj4gewotICAgIGxldCBmaWxlbmFtZSA9IGZvcm1h
dCEoInt0ZW1wbGF0ZX0te3N1ZmZpeH0iLCBzdWZmaXggPSB0eS5maWxlX3N1ZmZpeCgpKTsKLQot
ICAgIGxldCB0ZW1wbGF0ZV9zdHJpbmcgPSBjb250ZXh0Ojpjb250ZXh0KCkubG9va3VwX3RlbXBs
YXRlKCZmaWxlbmFtZSwgTm9uZSk/OwotCi0gICAgbGV0ICh0ZW1wbGF0ZV9zdHJpbmcsIGZhbGxi
YWNrKSA9IG1hdGNoICh0ZW1wbGF0ZV9zdHJpbmcsIHR5KSB7Ci0gICAgICAgIChOb25lLCBUZW1w
bGF0ZVR5cGU6Okh0bWxCb2R5KSA9PiB7Ci0gICAgICAgICAgICB0eSA9IFRlbXBsYXRlVHlwZTo6
UGxhaW50ZXh0Qm9keTsKLSAgICAgICAgICAgIGxldCBwbGFpbnRleHRfZmlsZW5hbWUgPSBmb3Jt
YXQhKCJ7dGVtcGxhdGV9LXtzdWZmaXh9Iiwgc3VmZml4ID0gdHkuZmlsZV9zdWZmaXgoKSk7Ci0g
ICAgICAgICAgICAoCi0gICAgICAgICAgICAgICAgY29udGV4dDo6Y29udGV4dCgpLmxvb2t1cF90
ZW1wbGF0ZSgmcGxhaW50ZXh0X2ZpbGVuYW1lLCBOb25lKT8sCi0gICAgICAgICAgICAgICAgdHJ1
ZSwKLSAgICAgICAgICAgICkKKyAgICBsZXQgbXV0IHVzZV9vdmVycmlkZSA9IHRydWU7CisgICAg
bGV0IG11dCBodG1sX2ZhbGxiYWNrID0gZmFsc2U7CisKKyAgICBsb29wIHsKKyAgICAgICAgbGV0
IGZpbGVuYW1lID0gZm9ybWF0ISgie3RlbXBsYXRlfS17c3VmZml4fSIsIHN1ZmZpeCA9IHR5LmZp
bGVfc3VmZml4KCkpOworICAgICAgICBsZXQgcmVzdWx0ID0gcmVuZGVyX3RlbXBsYXRlX2ltcGwo
ZGF0YSwgdHksICZmaWxlbmFtZSwgdXNlX292ZXJyaWRlLCBodG1sX2ZhbGxiYWNrKTsKKworICAg
ICAgICBtYXRjaCByZXN1bHQgeworICAgICAgICAgICAgT2soU29tZShzKSkgPT4geworICAgICAg
ICAgICAgICAgIHJldHVybiBPayhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE9rKE5v
bmUpID0+IHt9CisgICAgICAgICAgICBFcnIoZXJyKSA9PiB7CisgICAgICAgICAgICAgICAgbGV0
IHNvdXJjZSA9IGlmIHVzZV9vdmVycmlkZSB7ICJvdmVycmlkZSIgfSBlbHNlIHsgInZlbmRvciIg
fTsKKyAgICAgICAgICAgICAgICB0cmFjaW5nOjplcnJvciEoImZhaWxlZCB0byByZW5kZXIge3Nv
dXJjZX0gdGVtcGxhdGUgJ3tmaWxlbmFtZX0nOiB7ZXJyfSIpOworICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgICh0ZW1wbGF0ZV9zdHJpbmcsIF8pID0+ICh0ZW1wbGF0ZV9zdHJpbmcs
IGZhbHNlKSwKLSAgICB9OwotCi0gICAgbGV0IHRlbXBsYXRlX3N0cmluZyA9IHRlbXBsYXRlX3N0
cmluZy5va19vcihFcnJvcjo6R2VuZXJpYyhmb3JtYXQhKAotICAgICAgICAiY291bGQgbm90IGxv
YWQgdGVtcGxhdGUgJ3t0ZW1wbGF0ZX0nIgotICAgICkpKT87CiAKLSAgICBsZXQgbXV0IHJlbmRl
cmVkID0gcmVuZGVyX3RlbXBsYXRlX2ltcGwoJnRlbXBsYXRlX3N0cmluZywgZGF0YSwgdHkpPzsK
LSAgICByZW5kZXJlZCA9IHR5LnBvc3Rwcm9jZXNzKHJlbmRlcmVkKTsKLQotICAgIGlmIGZhbGxi
YWNrIHsKLSAgICAgICAgcmVuZGVyZWQgPSBmb3JtYXQhKAotICAgICAgICAgICAgIjxodG1sPjxi
b2R5PjxwcmU+e308L3ByZT48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICBoYW5kbGViYXJz
OjpodG1sX2VzY2FwZSgmcmVuZGVyZWQpCi0gICAgICAgICk7CisgICAgICAgIG1hdGNoICh0eSwg
dXNlX292ZXJyaWRlKSB7CisgICAgICAgICAgICAoVGVtcGxhdGVUeXBlOjpIdG1sQm9keSwgdHJ1
ZSkgPT4geworICAgICAgICAgICAgICAgIHVzZV9vdmVycmlkZSA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgKFRlbXBsYXRlVHlwZTo6SHRtbEJvZHksIGZhbHNlKSA9PiB7Cisg
ICAgICAgICAgICAgICAgdHkgPSBUZW1wbGF0ZVR5cGU6OlBsYWludGV4dEJvZHk7CisgICAgICAg
ICAgICAgICAgdXNlX292ZXJyaWRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBodG1sX2ZhbGxi
YWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIChUZW1wbGF0ZVR5cGU6OlBs
YWludGV4dEJvZHksIHRydWUpID0+IHsKKyAgICAgICAgICAgICAgICB1c2Vfb3ZlcnJpZGUgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIChUZW1wbGF0ZVR5cGU6OlBsYWludGV4
dEJvZHksIGZhbHNlKSA9PiB7CisgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGVycm9yLCBubyBv
dGhlciBvcHRpb25zCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAoVGVtcGxhdGVUeXBlOjpTdWJqZWN0LCB0cnVlKSA9PiB7CisgICAgICAgICAgICAg
ICAgdXNlX292ZXJyaWRlID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAoVGVt
cGxhdGVUeXBlOjpTdWJqZWN0LCBmYWxzZSkgPT4gYnJlYWssCisgICAgICAgIH0KICAgICB9CiAK
LSAgICBPayhyZW5kZXJlZCkKKyAgICBFcnIoRXJyb3I6OkdlbmVyaWMoCisgICAgICAgICJmYWls
ZWQgdG8gcmVuZGVyIG5vdGlmaWNhdGlvbiB0ZW1wbGF0ZSwgYWxsIHRlbXBsYXRlIGNhbmRpZGF0
ZXMgYXJlIGVycm9uZW91cyBvciBtaXNzaW5nIgorICAgICAgICAgICAgLmludG8oKSwKKyAgICAp
KQogfQogCiAjW2NmZyh0ZXN0KV0KLS0gCjIuMzkuNQoKCgpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpwdmUtZGV2ZWwgbWFpbGluZyBsaXN0CnB2ZS1kZXZl
bEBsaXN0cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFp
bG1hbi9saXN0aW5mby9wdmUtZGV2ZWwK