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 [IPv6:2a01:7e0:0:424::9])
	by lore.proxmox.com (Postfix) with ESMTPS id D4BEB1FF162
	for <inbox@lore.proxmox.com>; Mon,  7 Apr 2025 17:37:52 +0200 (CEST)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id A1B223534;
	Mon,  7 Apr 2025 17:37:48 +0200 (CEST)
Message-ID: <45ca8fdd-a878-4ca3-879b-b686b0e5e690@proxmox.com>
Date: Mon, 7 Apr 2025 17:37:43 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
From: Hannes Duerr <h.duerr@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
 Stefan Hanreich <s.hanreich@proxmox.com>
References: <20250310085103.30549-1-s.hanreich@proxmox.com>
 <85e475d1-d0de-4811-b158-874069768e48@proxmox.com>
Content-Language: en-US
In-Reply-To: <85e475d1-d0de-4811-b158-874069768e48@proxmox.com>
X-SPAM-LEVEL: Spam detection results:  0
 AWL -0.961 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
 KAM_MAILER                  2 Automated Mailer Tag Left in Email
 SPF_HELO_NONE           0.001 SPF: HELO does not publish an SPF Record
 SPF_PASS               -0.001 SPF: sender matches SPF record
Subject: Re: [pve-devel] [PATCH pve-network v2 1/8] ipam: netbox: factor out
 common api methods and unify error handling
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-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: pve-devel-bounces@lists.proxmox.com
Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com>

UGxlYXNlIGNvbnNpZGVyIHRoaXMKClRlc3RlZC1ieTogSGFubmVzIER1ZXJyIDxoLmR1ZXJyQHBy
b3htb3guY29tPgoKT24gNC83LzI1IDE3OjMyLCBIYW5uZXMgRHVlcnIgd3JvdGU6Cj4gVGVzdGVk
IHRoaXMgc2VyaWVzIGFnYWluc3QgbmV0Ym94IHZlcnNpb24gNC4yLjIgYW5kIGRpZG4ndCBydW4g
aW50byAKPiBhbnkgaXNzdWVzLgo+IENyZWF0ZWQgYW5kIGRlbGV0ZWQgYSBzaW1wbGUgem9uZSB3
aXRoIHR3byB2bmV0cyBhbmQgcmVzcGVjdGl2ZSBzdWJuZXQuCj4gVGhlIHByZWZpeGVzIHdlcmUg
Y3JlYXRlZCBhbmQgZGVsZXRlZCBjb3JyZWN0bHkKPiBBc3NpZ25lZCBhbmQgcmVtb3ZlZCBWTXMg
dG8gdGhlIHZuZXRzIGFuZCB0aGUgaXAgYWRkcmVzc2VzIHdlcmUgCj4gY3JlYXRlZCBhbmQgcmVt
b3ZlZCBjb3JyZWN0bHkuCj4KPiBPbiAzLzEwLzI1IDA5OjUwLCBTdGVmYW4gSGFucmVpY2ggd3Jv
dGU6Cj4+IENyZWF0ZSBhIGhlbHBlciBtZXRob2QgdGhhdCBhYnN0cmFjdHMgdGhlIGNvbW1vbiBj
b2RlIHVzZWQgaW4gbWFraW5nCj4+IG5ldGJveCByZXF1ZXN0cy4gTW92ZSBhbGwgYXBpX3JlcXVl
c3QgaW5jb3ZhdGlvbnMgb3ZlciB0byB1c2luZyB0aGUKPj4gaGVscGVyIG1ldGhvZC4gVGhpcyBz
YXZlcyB1cyBmcm9tIHdyaXRpbmcgbG90cyBvZiByZXBlYXRlZCBjb2RlLgo+Pgo+PiBUaGlzIGFs
c28gdXBkYXRlcyB0aGUgaGVscGVycyBhbmQgaW50cm9kdWNlcyBlcnJvciBjaGVja2luZyB0aGVy
ZS4KPj4gSGVscGVycyBkaWRuJ3QgY2F0Y2ggYW55IGVycm9ycyBhbmQgdGhlIGludm9raW5nIG1l
dGhvZHMgZGlkbid0IGFzCj4+IHdlbGwuIFRoaXMgbWVhbnQgdGhhdCBmdW5jdGlvbnMgd2l0aCAk
bm9lcnIgc2V0IHRvIDEgd291bGQgc3RpbGwgZXJyb3IKPj4gb3V0LiBXZSBub3cgcGFzcyAkbm9l
cnIgdG8gdGhlIGhlbHBlciBmdW5jdGlvbnMgYW5kIHRoZXkgYmVoYXZlIHRoZQo+PiBzYW1lIGFz
IHRoZSBwYXJlbnQgbWV0aG9kcy4gVGhpcyByZXF1aXJlcyBzb21lIGFkZGl0aW9uYWwgY2hlY2tz
IGluCj4+IHRoZSBjYWxsIHNpdGVzIG9mIHRoZSBoZWxwZXJzLgo+Pgo+PiBBbHNvIGNhbm9uaWNh
bGl6ZSBhbGwgVVJMcywgc2luY2UgTmV0Ym94IGRvZXMgdGhhdCBhbmQgaXQgc2F2ZXMgdXMgYQo+
PiByZWRpcmVjdC4KPj4KPj4gU2lnbmVkLW9mZi1ieTogU3RlZmFuIEhhbnJlaWNoIDxzLmhhbnJl
aWNoQHByb3htb3guY29tPgo+PiAtLS0KPj4gQ2hhbmdlcyBmcm9tIHYxIHRvIHYyOgo+PiAqIHJl
bW92ZWQgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNvbWUgcXVlcnkgc3RyaW5ncwo+Pgo+PiDCoCBz
cmMvUFZFL05ldHdvcmsvU0ROL0lwYW1zL05ldGJveFBsdWdpbi5wbSB8IDI0MSArKysrKysrKysr
Ky0tLS0tLS0tLS0tCj4+IMKgIDEgZmlsZSBjaGFuZ2VkLCAxMjYgaW5zZXJ0aW9ucygrKSwgMTE1
IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvc3JjL1BWRS9OZXR3b3JrL1NETi9JcGFt
cy9OZXRib3hQbHVnaW4ucG0gCj4+IGIvc3JjL1BWRS9OZXR3b3JrL1NETi9JcGFtcy9OZXRib3hQ
bHVnaW4ucG0KPj4gaW5kZXggMTgwODliNy4uNTZhMTc4NyAxMDA2NDQKPj4gLS0tIGEvc3JjL1BW
RS9OZXR3b3JrL1NETi9JcGFtcy9OZXRib3hQbHVnaW4ucG0KPj4gKysrIGIvc3JjL1BWRS9OZXR3
b3JrL1NETi9JcGFtcy9OZXRib3hQbHVnaW4ucG0KPj4gQEAgLTI1LDYgKzI1LDIxIEBAIHN1YiBv
cHRpb25zIHsKPj4gwqDCoMKgwqDCoCB9Owo+PiDCoCB9Cj4+IMKgICtzdWIgbmV0Ym94X2FwaV9y
ZXF1ZXN0IHsKPj4gK8KgwqDCoCBteSAoJGNvbmZpZywgJG1ldGhvZCwgJHBhdGgsICRwYXJhbXMp
ID0gQF87Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gUFZFOjpOZXR3b3JrOjpTRE46OmFwaV9yZXF1
ZXN0KAo+PiArwqDCoMKgICRtZXRob2QsCj4+ICvCoMKgwqAgIiRjb25maWctPnt1cmx9JHtwYXRo
fSIsCj4+ICvCoMKgwqAgWwo+PiArwqDCoMKgwqDCoMKgwqAgJ0NvbnRlbnQtVHlwZScgPT4gJ2Fw
cGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnLAo+PiArwqDCoMKgwqDCoMKgwqAgJ0F1dGhv
cml6YXRpb24nID0+ICJ0b2tlbiAkY29uZmlnLT57dG9rZW59Igo+PiArwqDCoMKgIF0sCj4+ICvC
oMKgwqAgJHBhcmFtcywKPj4gK8KgwqDCoCAkY29uZmlnLT57ZmluZ2VycHJpbnR9LAo+PiArwqDC
oMKgICk7Cj4+ICt9Cj4+ICsKPj4gwqAgIyBQbHVnaW4gaW1wbGVtZW50YXRpb24KPj4gwqAgwqAg
c3ViIGFkZF9zdWJuZXQgewo+PiBAQCAtMzIsNjIgKzQ3LDQyIEBAIHN1YiBhZGRfc3VibmV0IHsK
Pj4gwqAgwqDCoMKgwqDCoCBteSAkY2lkciA9ICRzdWJuZXQtPntjaWRyfTsKPj4gwqDCoMKgwqDC
oCBteSAkZ2F0ZXdheSA9ICRzdWJuZXQtPntnYXRld2F5fTsKPj4gLcKgwqDCoCBteSAkdXJsID0g
JHBsdWdpbl9jb25maWctPnt1cmx9Owo+PiAtwqDCoMKgIG15ICR0b2tlbiA9ICRwbHVnaW5fY29u
ZmlnLT57dG9rZW59Owo+PiAtwqDCoMKgIG15ICRmaW5nZXJwcmludCA9ICRwbHVnaW5fY29uZmln
LT57ZmluZ2VycHJpbnR9Owo+PiAtwqDCoMKgIG15ICRoZWFkZXJzID0gWydDb250ZW50LVR5cGUn
ID0+ICdhcHBsaWNhdGlvbi9qc29uOyAKPj4gY2hhcnNldD1VVEYtOCcsICdBdXRob3JpemF0aW9u
JyA9PiAidG9rZW4gJHRva2VuIl07Cj4+IC0KPj4gLcKgwqDCoCBteSAkaW50ZXJuYWxpZCA9IGdl
dF9wcmVmaXhfaWQoJHVybCwgJGNpZHIsICRoZWFkZXJzLCAKPj4gJGZpbmdlcnByaW50KTsKPj4g
wqAgLcKgwqDCoCAjY3JlYXRlIHN1Ym5ldAo+PiAtwqDCoMKgIGlmICghJGludGVybmFsaWQpIHsK
Pj4gLQo+PiAtwqDCoMKgIG15ICRwYXJhbXMgPSB7IHByZWZpeCA9PiAkY2lkciB9Owo+PiArwqDC
oMKgIGlmIChnZXRfcHJlZml4X2lkKCRwbHVnaW5fY29uZmlnLCAkY2lkciwgJG5vZXJyKSkgewo+
PiArwqDCoMKgIHJldHVybiBpZiAkbm9lcnI7Cj4+ICvCoMKgwqAgZGllICJwcmVmaXggJGNpZHIg
YWxyZWFkeSBleGlzdHMgaW4gbmV0Ym94IjsKPj4gK8KgwqDCoCB9Cj4+IMKgIC3CoMKgwqAgZXZh
bCB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBteSAkcmVzdWx0ID0gUFZFOjpOZXR3b3JrOjpTRE46OmFw
aV9yZXF1ZXN0KAo+PiAtwqDCoMKgwqDCoMKgwqAgIlBPU1QiLCAiJHVybC9pcGFtL3ByZWZpeGVz
LyIsICRoZWFkZXJzLCAkcGFyYW1zLCAKPj4gJGZpbmdlcnByaW50ICk7Cj4+IC3CoMKgwqAgfTsK
Pj4gLcKgwqDCoCBpZiAoJEApIHsKPj4gLcKgwqDCoMKgwqDCoMKgIGRpZSAiZXJyb3IgYWRkIHN1
Ym5ldCB0byBpcGFtOiAkQCIgaWYgISRub2VycjsKPj4gLcKgwqDCoCB9Cj4+ICvCoMKgwqAgZXZh
bCB7Cj4+ICvCoMKgwqAgbmV0Ym94X2FwaV9yZXF1ZXN0KCRwbHVnaW5fY29uZmlnLCAiUE9TVCIs
ICIvaXBhbS9wcmVmaXhlcy8iLCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcmVmaXggPT4gJGNpZHIK
Pj4gK8KgwqDCoCB9KTsKPj4gK8KgwqDCoCB9Owo+PiArwqDCoMKgIGlmICgkQCkgewo+PiArwqDC
oMKgIHJldHVybiBpZiAkbm9lcnI7Cj4+ICvCoMKgwqAgZGllICJlcnJvciBhZGRpbmcgc3VibmV0
IHRvIGlwYW06ICRAIjsKPj4gwqDCoMKgwqDCoCB9Cj4+IC0KPj4gwqAgfQo+PiDCoCDCoCBzdWIg
ZGVsX3N1Ym5ldCB7Cj4+IMKgwqDCoMKgwqAgbXkgKCRjbGFzcywgJHBsdWdpbl9jb25maWcsICRz
dWJuZXRpZCwgJHN1Ym5ldCwgJG5vZXJyKSA9IEBfOwo+PiDCoCDCoMKgwqDCoMKgIG15ICRjaWRy
ID0gJHN1Ym5ldC0+e2NpZHJ9Owo+PiAtwqDCoMKgIG15ICR1cmwgPSAkcGx1Z2luX2NvbmZpZy0+
e3VybH07Cj4+IC3CoMKgwqAgbXkgJHRva2VuID0gJHBsdWdpbl9jb25maWctPnt0b2tlbn07Cj4+
IC3CoMKgwqAgbXkgJGdhdGV3YXkgPSAkc3VibmV0LT57Z2F0ZXdheX07Cj4+IC3CoMKgwqAgbXkg
JGZpbmdlcnByaW50ID0gJHBsdWdpbl9jb25maWctPntmaW5nZXJwcmludH07Cj4+IC3CoMKgwqAg
bXkgJGhlYWRlcnMgPSBbJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb247IAo+PiBj
aGFyc2V0PVVURi04JywgJ0F1dGhvcml6YXRpb24nID0+ICJ0b2tlbiAkdG9rZW4iXTsKPj4gwqAg
LcKgwqDCoCBteSAkaW50ZXJuYWxpZCA9IGdldF9wcmVmaXhfaWQoJHVybCwgJGNpZHIsICRoZWFk
ZXJzLCAKPj4gJGZpbmdlcnByaW50KTsKPj4gLcKgwqDCoCByZXR1cm4gaWYgISRpbnRlcm5hbGlk
Owo+PiArwqDCoMKgIG15ICRpbnRlcm5hbGlkID0gZ2V0X3ByZWZpeF9pZCgkcGx1Z2luX2NvbmZp
ZywgJGNpZHIsICRub2Vycik7Cj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJuOyAjZml4bWU6IGNoZWNr
IHRoYXQgcHJlZml4IGlzIGVtcHR5IGV4bHVkaW5nIGdhdGV3YXksIAo+PiBiZWZvcmUgZGVsZXRl
Cj4+IMKgIMKgwqDCoMKgwqAgZXZhbCB7Cj4+IC3CoMKgwqAgUFZFOjpOZXR3b3JrOjpTRE46OmFw
aV9yZXF1ZXN0KAo+PiAtwqDCoMKgwqDCoMKgwqAgIkRFTEVURSIsICIkdXJsL2lwYW0vcHJlZml4
ZXMvJGludGVybmFsaWQvIiwgJGhlYWRlcnMsIAo+PiB1bmRlZiwgJGZpbmdlcnByaW50KTsKPj4g
K8KgwqDCoCBuZXRib3hfYXBpX3JlcXVlc3QoJHBsdWdpbl9jb25maWcsICJERUxFVEUiLCAKPj4g
Ii9pcGFtL3ByZWZpeGVzLyRpbnRlcm5hbGlkLyIpOwo+PiDCoMKgwqDCoMKgIH07Cj4+IC3CoMKg
wqAgaWYgKCRAKSB7Cj4+IC3CoMKgwqAgZGllICJlcnJvciBkZWxldGluZyBzdWJuZXQgZnJvbSBp
cGFtOiAkQCIgaWYgISRub2VycjsKPj4gLcKgwqDCoCB9Cj4+IC0KPj4gK8KgwqDCoCBkaWUgImVy
cm9yIGRlbGV0aW5nIHN1Ym5ldCBmcm9tIGlwYW06ICRAIiBpZiAkQCAmJiAhJG5vZXJyOwo+PiDC
oCB9Cj4+IMKgIMKgIHN1YiBhZGRfaXAgewo+PiDCoMKgwqDCoMKgIG15ICgkY2xhc3MsICRwbHVn
aW5fY29uZmlnLCAkc3VibmV0aWQsICRzdWJuZXQsICRpcCwgJGhvc3RuYW1lLCAKPj4gJG1hYywg
JHZtaWQsICRpc19nYXRld2F5LCAkbm9lcnIpID0gQF87Cj4+IMKgIMKgwqDCoMKgwqAgbXkgJG1h
c2sgPSAkc3VibmV0LT57bWFza307Cj4+IC3CoMKgwqAgbXkgJHVybCA9ICRwbHVnaW5fY29uZmln
LT57dXJsfTsKPj4gLcKgwqDCoCBteSAkdG9rZW4gPSAkcGx1Z2luX2NvbmZpZy0+e3Rva2VufTsK
Pj4gLcKgwqDCoCBteSAkZmluZ2VycHJpbnQgPSAkcGx1Z2luX2NvbmZpZy0+e2ZpbmdlcnByaW50
fTsKPj4gLcKgwqDCoCBteSAkaGVhZGVycyA9IFsnQ29udGVudC1UeXBlJyA9PiAnYXBwbGljYXRp
b24vanNvbjsgCj4+IGNoYXJzZXQ9VVRGLTgnLCAnQXV0aG9yaXphdGlvbicgPT4gInRva2VuICR0
b2tlbiJdOwo+PiDCoCDCoMKgwqDCoMKgIG15ICRkZXNjcmlwdGlvbiA9IHVuZGVmOwo+PiDCoMKg
wqDCoMKgIGlmICgkaXNfZ2F0ZXdheSkgewo+PiBAQCAtOTYsMTggKzkxLDE4IEBAIHN1YiBhZGRf
aXAgewo+PiDCoMKgwqDCoMKgICRkZXNjcmlwdGlvbiA9ICJtYWM6JG1hYyI7Cj4+IMKgwqDCoMKg
wqAgfQo+PiDCoCAtwqDCoMKgIG15ICRwYXJhbXMgPSB7IGFkZHJlc3MgPT4gIiRpcC8kbWFzayIs
IGRuc19uYW1lID0+ICRob3N0bmFtZSwgCj4+IGRlc2NyaXB0aW9uID0+ICRkZXNjcmlwdGlvbiB9
Owo+PiAtCj4+IMKgwqDCoMKgwqAgZXZhbCB7Cj4+IC3CoMKgwqAgUFZFOjpOZXR3b3JrOjpTRE46
OmFwaV9yZXF1ZXN0KAo+PiAtwqDCoMKgwqDCoMKgwqAgIlBPU1QiLCAiJHVybC9pcGFtL2lwLWFk
ZHJlc3Nlcy8iLCAkaGVhZGVycywgJHBhcmFtcywgCj4+ICRmaW5nZXJwcmludCk7Cj4+ICvCoMKg
wqAgbmV0Ym94X2FwaV9yZXF1ZXN0KCRwbHVnaW5fY29uZmlnLCAiUE9TVCIsICIvaXBhbS9pcC1h
ZGRyZXNzZXMvIiwgewo+PiArwqDCoMKgwqDCoMKgwqAgYWRkcmVzcyA9PiAiJGlwLyRtYXNrIiwK
Pj4gK8KgwqDCoMKgwqDCoMKgIGRuc19uYW1lID0+ICRob3N0bmFtZSwKPj4gK8KgwqDCoMKgwqDC
oMKgIGRlc2NyaXB0aW9uID0+ICRkZXNjcmlwdGlvbiwKPj4gK8KgwqDCoCB9KTsKPj4gwqDCoMKg
wqDCoCB9Owo+PiDCoCDCoMKgwqDCoMKgIGlmICgkQCkgewo+PiDCoMKgwqDCoMKgIGlmICgkaXNf
Z2F0ZXdheSkgewo+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKCFpc19pcF9nYXRld2F5KCR1cmwsICRp
cCwgJGhlYWRlcnMsICRmaW5nZXJwcmludCkgJiYgCj4+ICEkbm9lcnIpIHsKPj4gLcKgwqDCoMKg
wqDCoMKgIGRpZSAiZXJyb3IgYWRkIHN1Ym5ldCBpcCB0byBpcGFtOiBpcCAkaXAgYWxyZWFkeSBl
eGlzdDogJEAiOwo+PiAtwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgZGllICJl
cnJvciBhZGQgc3VibmV0IGlwIHRvIGlwYW06IGlwICRpcCBhbHJlYWR5IGV4aXN0OiAkQCIKPj4g
K8KgwqDCoMKgwqDCoMKgIGlmICFpc19pcF9nYXRld2F5KCRwbHVnaW5fY29uZmlnLCAkaXAsICRu
b2Vycik7Cj4+IMKgwqDCoMKgwqAgfSBlbHNpZiAoISRub2Vycikgewo+PiDCoMKgwqDCoMKgwqDC
oMKgwqAgZGllICJlcnJvciBhZGQgc3VibmV0IGlwIHRvIGlwYW06IGlwIGFscmVhZHkgZXhpc3Q6
ICRAIjsKPj4gwqDCoMKgwqDCoCB9Cj4+IEBAIC0xMTgsMTEgKzExMyw2IEBAIHN1YiB1cGRhdGVf
aXAgewo+PiDCoMKgwqDCoMKgIG15ICgkY2xhc3MsICRwbHVnaW5fY29uZmlnLCAkc3VibmV0aWQs
ICRzdWJuZXQsICRpcCwgJGhvc3RuYW1lLCAKPj4gJG1hYywgJHZtaWQsICRpc19nYXRld2F5LCAk
bm9lcnIpID0gQF87Cj4+IMKgIMKgwqDCoMKgwqAgbXkgJG1hc2sgPSAkc3VibmV0LT57bWFza307
Cj4+IC3CoMKgwqAgbXkgJHVybCA9ICRwbHVnaW5fY29uZmlnLT57dXJsfTsKPj4gLcKgwqDCoCBt
eSAkdG9rZW4gPSAkcGx1Z2luX2NvbmZpZy0+e3Rva2VufTsKPj4gLcKgwqDCoCBteSAkc2VjdGlv
biA9ICRwbHVnaW5fY29uZmlnLT57c2VjdGlvbn07Cj4+IC3CoMKgwqAgbXkgJGZpbmdlcnByaW50
ID0gJHBsdWdpbl9jb25maWctPntmaW5nZXJwcmludH07Cj4+IC3CoMKgwqAgbXkgJGhlYWRlcnMg
PSBbJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb247IAo+PiBjaGFyc2V0PVVURi04
JywgJ0F1dGhvcml6YXRpb24nID0+ICJ0b2tlbiAkdG9rZW4iXTsKPj4gwqAgwqDCoMKgwqDCoCBt
eSAkZGVzY3JpcHRpb24gPSB1bmRlZjsKPj4gwqDCoMKgwqDCoCBpZiAoJGlzX2dhdGV3YXkpIHsK
Pj4gQEAgLTEzMSwxNCArMTIxLDIwIEBAIHN1YiB1cGRhdGVfaXAgewo+PiDCoMKgwqDCoMKgICRk
ZXNjcmlwdGlvbiA9ICJtYWM6JG1hYyI7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCAtwqDCoMKgIG15
ICRwYXJhbXMgPSB7IGFkZHJlc3MgPT4gIiRpcC8kbWFzayIsIGRuc19uYW1lID0+ICRob3N0bmFt
ZSwgCj4+IGRlc2NyaXB0aW9uID0+ICRkZXNjcmlwdGlvbiB9Owo+PiArwqDCoMKgIG15ICRpcF9p
ZCA9IGdldF9pcF9pZCgkcGx1Z2luX2NvbmZpZywgJGlwLCAkbm9lcnIpOwo+PiDCoCAtwqDCoMKg
IG15ICRpcF9pZCA9IGdldF9pcF9pZCgkdXJsLCAkaXAsICRoZWFkZXJzLCAkZmluZ2VycHJpbnQp
Owo+PiAtwqDCoMKgIGRpZSAiY2FuJ3QgZmluZCBpcCAkaXAgaW4gaXBhbSIgaWYgISRpcF9pZDsK
Pj4gK8KgwqDCoCAjIGRlZmluZWRuZXNzIGNoZWNrLCBiZWNhdXNlIElEIGNvdWxkIGJlIDAKPj4g
K8KgwqDCoCBpZiAoIWRlZmluZWQoJGlwX2lkKSkgewo+PiArwqDCoMKgIHJldHVybiBpZiAkbm9l
cnI7Cj4+ICvCoMKgwqAgZGllICJjb3VsZCBub3QgZmluZCBpZCBmb3IgaXAgYWRkcmVzcyAkaXAi
Owo+PiArwqDCoMKgIH0KPj4gwqAgwqDCoMKgwqDCoCBldmFsIHsKPj4gLcKgwqDCoCBQVkU6Ok5l
dHdvcms6OlNETjo6YXBpX3JlcXVlc3QoCj4+IC3CoMKgwqDCoMKgwqDCoCAiUEFUQ0giLCAiJHVy
bC9pcGFtL2lwLWFkZHJlc3Nlcy8kaXBfaWQvIiwgJGhlYWRlcnMsIAo+PiAkcGFyYW1zLCAkZmlu
Z2VycHJpbnQpOwo+PiArwqDCoMKgIG5ldGJveF9hcGlfcmVxdWVzdCgkcGx1Z2luX2NvbmZpZywg
IlBBVENIIiwgCj4+ICIvaXBhbS9pcC1hZGRyZXNzZXMvJGlwX2lkLyIsIHsKPj4gK8KgwqDCoMKg
wqDCoMKgIGFkZHJlc3MgPT4gIiRpcC8kbWFzayIsCj4+ICvCoMKgwqDCoMKgwqDCoCBkbnNfbmFt
ZSA9PiAkaG9zdG5hbWUsCj4+ICvCoMKgwqDCoMKgwqDCoCBkZXNjcmlwdGlvbiA9PiAkZGVzY3Jp
cHRpb24sCj4+ICvCoMKgwqAgfSk7Cj4+IMKgwqDCoMKgwqAgfTsKPj4gwqDCoMKgwqDCoCBpZiAo
JEApIHsKPj4gwqDCoMKgwqDCoCBkaWUgImVycm9yIHVwZGF0ZSBpcCAkaXAgOiAkQCIgaWYgISRu
b2VycjsKPj4gQEAgLTE1MCwyMCArMTQ2LDIyIEBAIHN1YiBhZGRfbmV4dF9mcmVlaXAgewo+PiDC
oCDCoMKgwqDCoMKgIG15ICRjaWRyID0gJHN1Ym5ldC0+e2NpZHJ9Owo+PiDCoCAtwqDCoMKgIG15
ICR1cmwgPSAkcGx1Z2luX2NvbmZpZy0+e3VybH07Cj4+IC3CoMKgwqAgbXkgJHRva2VuID0gJHBs
dWdpbl9jb25maWctPnt0b2tlbn07Cj4+IC3CoMKgwqAgbXkgJGZpbmdlcnByaW50ID0gJHBsdWdp
bl9jb25maWctPntmaW5nZXJwcmludH07Cj4+IC3CoMKgwqAgbXkgJGhlYWRlcnMgPSBbJ0NvbnRl
bnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb247IAo+PiBjaGFyc2V0PVVURi04JywgJ0F1dGhv
cml6YXRpb24nID0+ICJ0b2tlbiAkdG9rZW4iXTsKPj4gK8KgwqDCoCBteSAkaW50ZXJuYWxpZCA9
IGdldF9wcmVmaXhfaWQoJHBsdWdpbl9jb25maWcsICRjaWRyLCAkbm9lcnIpOwo+PiDCoCAtwqDC
oMKgIG15ICRpbnRlcm5hbGlkID0gZ2V0X3ByZWZpeF9pZCgkdXJsLCAkY2lkciwgJGhlYWRlcnMs
IAo+PiAkZmluZ2VycHJpbnQpOwo+PiArwqDCoMKgICMgZGVmaW5lZG5lc3MgY2hlY2ssIGJlY2F1
c2UgSUQgY291bGQgYmUgMAo+PiArwqDCoMKgIGlmICghZGVmaW5lZCgkaW50ZXJuYWxpZCkpIHsK
Pj4gK8KgwqDCoCByZXR1cm4gaWYgJG5vZXJyOwo+PiArwqDCoMKgIGRpZSAiY291bGQgbm90IGZp
bmQgaWQgZm9yIHByZWZpeCAkY2lkciI7Cj4+ICvCoMKgwqAgfQo+PiDCoCDCoMKgwqDCoMKgIG15
ICRkZXNjcmlwdGlvbiA9ICJtYWM6JG1hYyIgaWYgJG1hYzsKPj4gwqAgLcKgwqDCoCBteSAkcGFy
YW1zID0geyBkbnNfbmFtZSA9PiAkaG9zdG5hbWUsIGRlc2NyaXB0aW9uID0+IAo+PiAkZGVzY3Jp
cHRpb24gfTsKPj4gLQo+PiDCoMKgwqDCoMKgIGV2YWwgewo+PiAtwqDCoMKgIG15ICRyZXN1bHQg
PSBQVkU6Ok5ldHdvcms6OlNETjo6YXBpX3JlcXVlc3QoCj4+IC3CoMKgwqDCoMKgwqDCoCAiUE9T
VCIsICIkdXJsL2lwYW0vcHJlZml4ZXMvJGludGVybmFsaWQvYXZhaWxhYmxlLWlwcy8iLCAKPj4g
JGhlYWRlcnMsICRwYXJhbXMsICRmaW5nZXJwcmludCk7Cj4+ICvCoMKgwqAgbXkgJHJlc3VsdCA9
IG5ldGJveF9hcGlfcmVxdWVzdCgkcGx1Z2luX2NvbmZpZywgIlBPU1QiLCAKPj4gIi9pcGFtL3By
ZWZpeGVzLyRpbnRlcm5hbGlkL2F2YWlsYWJsZS1pcHMvIiwgewo+PiArwqDCoMKgwqDCoMKgwqAg
ZG5zX25hbWUgPT4gJGhvc3RuYW1lLAo+PiArwqDCoMKgwqDCoMKgwqAgZGVzY3JpcHRpb24gPT4g
JGRlc2NyaXB0aW9uLAo+PiArwqDCoMKgIH0pOwo+PiArCj4+IMKgwqDCoMKgwqAgbXkgKCRpcCwg
dW5kZWYpID0gc3BsaXQoL1wvLywgJHJlc3VsdC0+e2FkZHJlc3N9KTsKPj4gwqDCoMKgwqDCoCBy
ZXR1cm4gJGlwOwo+PiDCoMKgwqDCoMKgIH07Cj4+IEBAIC0xNzYsMTkgKzE3NCwyMiBAQCBzdWIg
YWRkX25leHRfZnJlZWlwIHsKPj4gwqAgc3ViIGFkZF9yYW5nZV9uZXh0X2ZyZWVpcCB7Cj4+IMKg
wqDCoMKgwqAgbXkgKCRjbGFzcywgJHBsdWdpbl9jb25maWcsICRzdWJuZXQsICRyYW5nZSwgJGRh
dGEsICRub2VycikgPSBAXzsKPj4gwqAgLcKgwqDCoCBteSAkdXJsID0gJHBsdWdpbl9jb25maWct
Pnt1cmx9Owo+PiAtwqDCoMKgIG15ICR0b2tlbiA9ICRwbHVnaW5fY29uZmlnLT57dG9rZW59Owo+
PiAtwqDCoMKgIG15ICRoZWFkZXJzID0gWydDb250ZW50LVR5cGUnID0+ICdhcHBsaWNhdGlvbi9q
c29uOyAKPj4gY2hhcnNldD1VVEYtOCcsICdBdXRob3JpemF0aW9uJyA9PiAidG9rZW4gJHRva2Vu
Il07Cj4+IC3CoMKgwqAgbXkgJGZpbmdlcnByaW50ID0gJHBsdWdpbl9jb25maWctPntmaW5nZXJw
cmludH07Cj4+ICvCoMKgwqAgbXkgJGludGVybmFsaWQgPSBnZXRfaXByYW5nZV9pZCgkcGx1Z2lu
X2NvbmZpZywgJHJhbmdlLCAkbm9lcnIpOwo+PiDCoCAtwqDCoMKgIG15ICRpbnRlcm5hbGlkID0g
Z2V0X2lwcmFuZ2VfaWQoJHVybCwgJHJhbmdlLCAkaGVhZGVycywgCj4+ICRmaW5nZXJwcmludCk7
Cj4+IC3CoMKgwqAgbXkgJGRlc2NyaXB0aW9uID0gIm1hYzokZGF0YS0+e21hY30iIGlmICRkYXRh
LT57bWFjfTsKPj4gK8KgwqDCoCAjIGRlZmluZWRuZXNzIGNoZWNrLCBiZWNhdXNlIElEIGNvdWxk
IGJlIDAKPj4gK8KgwqDCoCBpZiAoIWRlZmluZWQoJGludGVybmFsaWQpKSB7Cj4+ICvCoMKgwqAg
cmV0dXJuIGlmICRub2VycjsKPj4gK8KgwqDCoCBkaWUgImNvdWxkIG5vdCBmaW5kIGlkIGZvciBp
cCByYW5nZSAKPj4gJHJhbmdlLT57J3N0YXJ0LWFkZHJlc3MnfTokcmFuZ2UtPnsnZW5kLWFkZHJl
c3MnfSI7Cj4+ICvCoMKgwqAgfQo+PiDCoCAtwqDCoMKgIG15ICRwYXJhbXMgPSB7IGRuc19uYW1l
ID0+ICRkYXRhLT57aG9zdG5hbWV9LCBkZXNjcmlwdGlvbiA9PiAKPj4gJGRlc2NyaXB0aW9uIH07
Cj4+ICvCoMKgwqAgbXkgJGRlc2NyaXB0aW9uID0gIm1hYzokZGF0YS0+e21hY30iIGlmICRkYXRh
LT57bWFjfTsKPj4gwqAgwqDCoMKgwqDCoCBldmFsIHsKPj4gLcKgwqDCoCBteSAkcmVzdWx0ID0g
UFZFOjpOZXR3b3JrOjpTRE46OmFwaV9yZXF1ZXN0KAo+PiAtwqDCoMKgwqDCoMKgwqAgIlBPU1Qi
LCAiJHVybC9pcGFtL2lwLXJhbmdlcy8kaW50ZXJuYWxpZC9hdmFpbGFibGUtaXBzLyIsIAo+PiAk
aGVhZGVycywgJHBhcmFtcywgJGZpbmdlcnByaW50KTsKPj4gK8KgwqDCoCBteSAkcmVzdWx0ID0g
bmV0Ym94X2FwaV9yZXF1ZXN0KCRwbHVnaW5fY29uZmlnLCAiUE9TVCIsIAo+PiAiL2lwYW0vaXAt
cmFuZ2VzLyRpbnRlcm5hbGlkL2F2YWlsYWJsZS1pcHMvIiwgewo+PiArwqDCoMKgwqDCoMKgwqAg
ZG5zX25hbWUgPT4gJGRhdGEtPntob3N0bmFtZX0sCj4+ICvCoMKgwqDCoMKgwqDCoCBkZXNjcmlw
dGlvbiA9PiAkZGVzY3JpcHRpb24sCj4+ICvCoMKgwqAgfSk7Cj4+ICsKPj4gwqDCoMKgwqDCoCBt
eSAoJGlwLCB1bmRlZikgPSBzcGxpdCgvXC8vLCAkcmVzdWx0LT57YWRkcmVzc30pOwo+PiDCoMKg
wqDCoMKgIHByaW50ICJmb3VuZCBpcCBmcmVlICRpcCBpbiByYW5nZSAKPj4gJHJhbmdlLT57J3N0
YXJ0LWFkZHJlc3MnfS0kcmFuZ2UtPnsnZW5kLWFkZHJlc3MnfVxuIiBpZiAkaXA7Cj4+IMKgwqDC
oMKgwqAgcmV0dXJuICRpcDsKPj4gQEAgLTIwNCwxNiArMjA1LDE0IEBAIHN1YiBkZWxfaXAgewo+
PiDCoCDCoMKgwqDCoMKgIHJldHVybiBpZiAhJGlwOwo+PiDCoCAtwqDCoMKgIG15ICR1cmwgPSAk
cGx1Z2luX2NvbmZpZy0+e3VybH07Cj4+IC3CoMKgwqAgbXkgJHRva2VuID0gJHBsdWdpbl9jb25m
aWctPnt0b2tlbn07Cj4+IC3CoMKgwqAgbXkgJGhlYWRlcnMgPSBbJ0NvbnRlbnQtVHlwZScgPT4g
J2FwcGxpY2F0aW9uL2pzb247IAo+PiBjaGFyc2V0PVVURi04JywgJ0F1dGhvcml6YXRpb24nID0+
ICJ0b2tlbiAkdG9rZW4iXTsKPj4gLcKgwqDCoCBteSAkZmluZ2VycHJpbnQgPSAkcGx1Z2luX2Nv
bmZpZy0+e2ZpbmdlcnByaW50fTsKPj4gLQo+PiAtwqDCoMKgIG15ICRpcF9pZCA9IGdldF9pcF9p
ZCgkdXJsLCAkaXAsICRoZWFkZXJzLCAkZmluZ2VycHJpbnQpOwo+PiAtwqDCoMKgIGRpZSAiY2Fu
J3QgZmluZCBpcCAkaXAgaW4gaXBhbSIgaWYgISRpcF9pZDsKPj4gK8KgwqDCoCBteSAkaXBfaWQg
PSBnZXRfaXBfaWQoJHBsdWdpbl9jb25maWcsICRpcCwgJG5vZXJyKTsKPj4gK8KgwqDCoCBpZiAo
IWRlZmluZWQoJGlwX2lkKSkgewo+PiArwqDCoMKgIHdhcm4gImNvdWxkIG5vdCBmaW5kIGlkIGZv
ciBpcCAkaXAiOwo+PiArwqDCoMKgIHJldHVybjsKPj4gK8KgwqDCoCB9Cj4+IMKgIMKgwqDCoMKg
wqAgZXZhbCB7Cj4+IC3CoMKgwqAgUFZFOjpOZXR3b3JrOjpTRE46OmFwaV9yZXF1ZXN0KCJERUxF
VEUiLCAKPj4gIiR1cmwvaXBhbS9pcC1hZGRyZXNzZXMvJGlwX2lkLyIsICRoZWFkZXJzLCB1bmRl
ZiwgJGZpbmdlcnByaW50KTsKPj4gK8KgwqDCoCBuZXRib3hfYXBpX3JlcXVlc3QoJHBsdWdpbl9j
b25maWcsICJERUxFVEUiLCAKPj4gIi9pcGFtL2lwLWFkZHJlc3Nlcy8kaXBfaWQvIik7Cj4+IMKg
wqDCoMKgwqAgfTsKPj4gwqDCoMKgwqDCoCBpZiAoJEApIHsKPj4gwqDCoMKgwqDCoCBkaWUgImVy
cm9yIGRlbGV0ZSBpcCAkaXAgOiAkQCIgaWYgISRub2VycjsKPj4gQEAgLTIyMSwxOCArMjIwLDE0
IEBAIHN1YiBkZWxfaXAgewo+PiDCoCB9Cj4+IMKgIMKgIHN1YiBnZXRfaXBzX2Zyb21fbWFjIHsK
Pj4gLcKgwqDCoCBteSAoJGNsYXNzLCAkcGx1Z2luX2NvbmZpZywgJG1hYywgJHpvbmVpZCkgPSBA
XzsKPj4gLQo+PiAtwqDCoMKgIG15ICR1cmwgPSAkcGx1Z2luX2NvbmZpZy0+e3VybH07Cj4+IC3C
oMKgwqAgbXkgJHRva2VuID0gJHBsdWdpbl9jb25maWctPnt0b2tlbn07Cj4+IC3CoMKgwqAgbXkg
JGhlYWRlcnMgPSBbJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb247IAo+PiBjaGFy
c2V0PVVURi04JywgJ0F1dGhvcml6YXRpb24nID0+ICJ0b2tlbiAkdG9rZW4iXTsKPj4gLcKgwqDC
oCBteSAkZmluZ2VycHJpbnQgPSAkcGx1Z2luX2NvbmZpZy0+e2ZpbmdlcnByaW50fTsKPj4gK8Kg
wqDCoCBteSAoJGNsYXNzLCAkcGx1Z2luX2NvbmZpZywgJG1hYywgJHpvbmVpZCwgJG5vZXJyKSA9
IEBfOwo+PiDCoCDCoMKgwqDCoMKgIG15ICRpcDQgPSB1bmRlZjsKPj4gwqDCoMKgwqDCoCBteSAk
aXA2ID0gdW5kZWY7Cj4+IMKgIC3CoMKgwqAgbXkgJGRhdGEgPSBQVkU6Ok5ldHdvcms6OlNETjo6
YXBpX3JlcXVlc3QoCj4+IC3CoMKgwqAgIkdFVCIsICIkdXJsL2lwYW0vaXAtYWRkcmVzc2VzLz9k
ZXNjcmlwdGlvbl9faWM9JG1hYyIsICRoZWFkZXJzLCAKPj4gdW5kZWYsICRmaW5nZXJwcmludCk7
Cj4+ICvCoMKgwqAgbXkgJGRhdGEgPSBldmFsIHsKPj4gK8KgwqDCoCBuZXRib3hfYXBpX3JlcXVl
c3QoJHBsdWdpbl9jb25maWcsICJHRVQiLCAKPj4gIi9pcGFtL2lwLWFkZHJlc3Nlcy8/ZGVzY3Jp
cHRpb25fX2ljPSRtYWMiKTsKPj4gK8KgwqDCoCB9Owo+PiDCoCDCoMKgwqDCoMKgIGZvciBteSAk
aXAgKEB7JGRhdGEtPntyZXN1bHRzfX0pIHsKPj4gwqDCoMKgwqDCoCBpZiAoJGlwLT57ZmFtaWx5
fS0+e3ZhbHVlfSA9PSA0ICYmICEkaXA0KSB7Cj4+IEBAIC0yNDcsMTggKzI0MiwxMCBAQCBzdWIg
Z2V0X2lwc19mcm9tX21hYyB7Cj4+IMKgwqDCoMKgwqAgcmV0dXJuICgkaXA0LCAkaXA2KTsKPj4g
wqAgfQo+PiDCoCAtCj4+IMKgIHN1YiB2ZXJpZnlfYXBpIHsKPj4gwqDCoMKgwqDCoCBteSAoJGNs
YXNzLCAkcGx1Z2luX2NvbmZpZykgPSBAXzsKPj4gwqAgLcKgwqDCoCBteSAkdXJsID0gJHBsdWdp
bl9jb25maWctPnt1cmx9Owo+PiAtwqDCoMKgIG15ICR0b2tlbiA9ICRwbHVnaW5fY29uZmlnLT57
dG9rZW59Owo+PiAtwqDCoMKgIG15ICRoZWFkZXJzID0gWydDb250ZW50LVR5cGUnID0+ICdhcHBs
aWNhdGlvbi9qc29uOyAKPj4gY2hhcnNldD1VVEYtOCcsICdBdXRob3JpemF0aW9uJyA9PiAidG9r
ZW4gJHRva2VuIl07Cj4+IC3CoMKgwqAgbXkgJGZpbmdlcnByaW50ID0gJHBsdWdpbl9jb25maWct
PntmaW5nZXJwcmludH07Cj4+IC0KPj4gLcKgwqDCoCBldmFsIHsKPj4gLcKgwqDCoCBQVkU6Ok5l
dHdvcms6OlNETjo6YXBpX3JlcXVlc3QoIkdFVCIsICIkdXJsL2lwYW0vYWdncmVnYXRlcy8iLCAK
Pj4gJGhlYWRlcnMsIHVuZGVmLCAkZmluZ2VycHJpbnQpOwo+PiAtwqDCoMKgIH07Cj4+ICvCoMKg
wqAgZXZhbCB7IG5ldGJveF9hcGlfcmVxdWVzdCgkcGx1Z2luX2NvbmZpZywgIkdFVCIsIAo+PiAi
L2lwYW0vYWdncmVnYXRlcy8iKTsgfTsKPj4gwqDCoMKgwqDCoCBpZiAoJEApIHsKPj4gwqDCoMKg
wqDCoCBkaWUgIkNhbid0IGNvbm5lY3QgdG8gbmV0Ym94IGFwaTogJEAiOwo+PiDCoMKgwqDCoMKg
IH0KPj4gQEAgLTI2Niw0NyArMjUzLDcxIEBAIHN1YiB2ZXJpZnlfYXBpIHsKPj4gwqAgwqAgc3Vi
IG9uX3VwZGF0ZV9ob29rIHsKPj4gwqDCoMKgwqDCoCBteSAoJGNsYXNzLCAkcGx1Z2luX2NvbmZp
ZykgPSBAXzsKPj4gLQo+PiAtwqDCoMKgIFBWRTo6TmV0d29yazo6U0ROOjpJcGFtczo6TmV0Ym94
UGx1Z2luOjp2ZXJpZnlfYXBpKCRjbGFzcywgCj4+ICRwbHVnaW5fY29uZmlnKTsKPj4gK8KgwqDC
oCB2ZXJpZnlfYXBpKCRjbGFzcywgJHBsdWdpbl9jb25maWcpOwo+PiDCoCB9Cj4+IMKgIC0jaGVs
cGVycwo+PiAtCj4+ICsjIGhlbHBlcnMKPj4gwqAgc3ViIGdldF9wcmVmaXhfaWQgewo+PiAtwqDC
oMKgIG15ICgkdXJsLCAkY2lkciwgJGhlYWRlcnMsICRmaW5nZXJwcmludCkgPSBAXzsKPj4gLcKg
wqDCoCBteSAkcmVzdWx0ID0gUFZFOjpOZXR3b3JrOjpTRE46OmFwaV9yZXF1ZXN0KAo+PiAtwqDC
oMKgICJHRVQiLCAiJHVybC9pcGFtL3ByZWZpeGVzLz9xPSRjaWRyIiwgJGhlYWRlcnMsIHVuZGVm
LCAKPj4gJGZpbmdlcnByaW50KTsKPj4gK8KgwqDCoCBteSAoJGNvbmZpZywgJGNpZHIsICRub2Vy
cikgPSBAXzsKPj4gKwo+PiArwqDCoMKgICMgd2UgbmVlZCB0byBzdXBwbHkgYW55IElQIGluc2lk
ZSB0aGUgcHJlZml4LCB3aXRob3V0IHN1cHBseWluZyAKPj4gdGhlIG1hc2ssIHNvCj4+ICvCoMKg
wqAgIyBqdXN0IHRha2UgdGhlIG9uZSBmcm9tIHRoZSBjaWRyCj4+ICvCoMKgwqAgbXkgKCRpcCwg
dW5kZWYpID0gc3BsaXQoL1wvLywgJGNpZHIpOwo+PiArCj4+ICvCoMKgwqAgbXkgJHJlc3VsdCA9
IGV2YWwgeyBuZXRib3hfYXBpX3JlcXVlc3QoJGNvbmZpZywgIkdFVCIsIAo+PiAiL2lwYW0vcHJl
Zml4ZXMvP3E9JGlwIikgfTsKPj4gK8KgwqDCoCBpZiAoJEApIHsKPj4gK8KgwqDCoCByZXR1cm4g
aWYgJG5vZXJyOwo+PiArwqDCoMKgIGRpZSAiY291bGQgbm90IG9idGFpbiBJRCBmb3IgcHJlZml4
ICRjaWRyOiAkQCI7Cj4+ICvCoMKgwqAgfQo+PiArCj4+IMKgwqDCoMKgwqAgbXkgJGRhdGEgPSBA
eyRyZXN1bHQtPntyZXN1bHRzfX1bMF07Cj4+IMKgwqDCoMKgwqAgbXkgJGludGVybmFsaWQgPSAk
ZGF0YS0+e2lkfTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gJGludGVybmFsaWQ7Cj4+IMKgIH0KPj4g
wqAgwqAgc3ViIGdldF9pcHJhbmdlX2lkIHsKPj4gLcKgwqDCoCBteSAoJHVybCwgJHJhbmdlLCAk
aGVhZGVycywgJGZpbmdlcnByaW50KSA9IEBfOwo+PiAtwqDCoMKgIG15ICRyZXN1bHQgPSBQVkU6
Ok5ldHdvcms6OlNETjo6YXBpX3JlcXVlc3QoCj4+IC3CoMKgwqAgIkdFVCIsCj4+IC0gCj4+ICIk
dXJsL2lwYW0vaXAtcmFuZ2VzLz9zdGFydF9hZGRyZXNzPSRyYW5nZS0+eydzdGFydC1hZGRyZXNz
J30mZW5kX2FkZHJlc3M9JHJhbmdlLT57J2VuZC1hZGRyZXNzJ30iLAo+PiAtwqDCoMKgICRoZWFk
ZXJzLAo+PiAtwqDCoMKgIHVuZGVmLAo+PiAtwqDCoMKgICRmaW5nZXJwcmludAo+PiAtwqDCoMKg
ICk7Cj4+ICvCoMKgwqAgbXkgKCRjb25maWcsICRyYW5nZSwgJG5vZXJyKSA9IEBfOwo+PiArCj4+
ICvCoMKgwqAgbXkgJHJlc3VsdCA9IGV2YWwgewo+PiArwqDCoMKgIG5ldGJveF9hcGlfcmVxdWVz
dCgKPj4gK8KgwqDCoMKgwqDCoMKgICRjb25maWcsCj4+ICvCoMKgwqDCoMKgwqDCoCAiR0VUIiwK
Pj4gKyAKPj4gIi9pcGFtL2lwLXJhbmdlcy8/c3RhcnRfYWRkcmVzcz0kcmFuZ2UtPnsnc3RhcnQt
YWRkcmVzcyd9JmVuZF9hZGRyZXNzPSRyYW5nZS0+eydlbmQtYWRkcmVzcyd9IiwKPj4gK8KgwqDC
oCApOwo+PiArwqDCoMKgIH07Cj4+ICvCoMKgwqAgaWYgKCRAKSB7Cj4+ICvCoMKgwqAgcmV0dXJu
IGlmICRub2VycjsKPj4gK8KgwqDCoCBkaWUgImNvdWxkIG5vdCBvYnRhaW4gSUQgZm9yIElQIHJh
bmdlIAo+PiAkcmFuZ2UtPnsnc3RhcnQtYWRkcmVzcyd9OiRyYW5nZS0+eydlbmQtYWRkcmVzcyd9
OiAkQCI7Cj4+ICvCoMKgwqAgfQo+PiArCj4+IMKgwqDCoMKgwqAgbXkgJGRhdGEgPSBAeyRyZXN1
bHQtPntyZXN1bHRzfX1bMF07Cj4+IMKgwqDCoMKgwqAgbXkgJGludGVybmFsaWQgPSAkZGF0YS0+
e2lkfTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gJGludGVybmFsaWQ7Cj4+IMKgIH0KPj4gwqAgwqAg
c3ViIGdldF9pcF9pZCB7Cj4+IC3CoMKgwqAgbXkgKCR1cmwsICRpcCwgJGhlYWRlcnMsICRmaW5n
ZXJwcmludCkgPSBAXzsKPj4gLcKgwqDCoCBteSAkcmVzdWx0ID0gUFZFOjpOZXR3b3JrOjpTRE46
OmFwaV9yZXF1ZXN0KAo+PiAtwqDCoMKgICJHRVQiLCAiJHVybC9pcGFtL2lwLWFkZHJlc3Nlcy8/
cT0kaXAiLCAkaGVhZGVycywgdW5kZWYsIAo+PiAkZmluZ2VycHJpbnQpOwo+PiArwqDCoMKgIG15
ICgkY29uZmlnLCAkaXAsICRub2VycikgPSBAXzsKPj4gKwo+PiArwqDCoMKgIG15ICRyZXN1bHQg
PSBldmFsIHsgbmV0Ym94X2FwaV9yZXF1ZXN0KCRjb25maWcsICJHRVQiLCAKPj4gIi9pcGFtL2lw
LWFkZHJlc3Nlcy8/cT0kaXAiKSB9Owo+PiArwqDCoMKgIGlmICgkQCkgewo+PiArwqDCoMKgIHJl
dHVybiBpZiAkbm9lcnI7Cj4+ICvCoMKgwqAgZGllICJjb3VsZCBub3Qgb2J0YWluIElEIGZvciBJ
UCAkaXA6ICRAIjsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gwqDCoMKgwqDCoCBteSAkZGF0YSA9IEB7
JHJlc3VsdC0+e3Jlc3VsdHN9fVswXTsKPj4gwqDCoMKgwqDCoCBteSAkaXBfaWQgPSAkZGF0YS0+
e2lkfTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gJGlwX2lkOwo+PiDCoCB9Cj4+IMKgIMKgIHN1YiBp
c19pcF9nYXRld2F5IHsKPj4gLcKgwqDCoCBteSAoJHVybCwgJGlwLCAkaGVhZGVycywgJGZpbmdl
cnByaW50KSA9IEBfOwo+PiAtwqDCoMKgIG15ICRyZXN1bHQgPSBQVkU6Ok5ldHdvcms6OlNETjo6
YXBpX3JlcXVlc3QoIkdFVCIsIAo+PiAiJHVybC9pcGFtL2lwLWFkZHJlc3Nlcy8/cT0kaXAiLCAk
aGVhZGVycywgdW5kZWYsICRmaW5nZXJwcmludCk7Cj4+ICvCoMKgwqAgbXkgKCRjb25maWcsICRp
cCwgJG5vZXJyKSA9IEBfOwo+PiArCj4+ICvCoMKgwqAgbXkgJHJlc3VsdCA9IGV2YWwgeyBuZXRi
b3hfYXBpX3JlcXVlc3QoJGNvbmZpZywgIkdFVCIsIAo+PiAiL2lwYW0vaXAtYWRkcmVzc2VzLz9x
PSRpcCIpIH07Cj4+ICvCoMKgwqAgaWYgKCRAKSB7Cj4+ICvCoMKgwqAgcmV0dXJuIGlmICRub2Vy
cjsKPj4gK8KgwqDCoCBkaWUgImNvdWxkIG5vdCBvYnRhaW4gaXBhbSBlbnRyeSBmb3IgYWRkcmVz
cyAkaXA6ICRAIjsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gwqDCoMKgwqDCoCBteSAkZGF0YSA9IEB7
JHJlc3VsdC0+e2RhdGF9fVswXTsKPj4gwqDCoMKgwqDCoCBteSAkZGVzY3JpcHRpb24gPSAkZGF0
YS0+e2Rlc2NyaXB0aW9ufTsKPj4gwqDCoMKgwqDCoCBteSAkaXNfZ2F0ZXdheSA9IDEgaWYgJGRl
c2NyaXB0aW9uIGVxICdnYXRld2F5JzsKPgo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KPiBwdmUtZGV2ZWwgbWFpbGluZyBsaXN0Cj4gcHZlLWRldmVs
QGxpc3RzLnByb3htb3guY29tCj4gaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21h
aWxtYW4vbGlzdGluZm8vcHZlLWRldmVsCj4KPgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCnB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxp
c3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFu
L2xpc3RpbmZvL3B2ZS1kZXZlbAo=