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 706311FF15C
	for <inbox@lore.proxmox.com>; Wed,  5 Feb 2025 12:33:53 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id DF7699418;
	Wed,  5 Feb 2025 12:33:50 +0100 (CET)
Date: Wed, 5 Feb 2025 12:33:13 +0100
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
To: Max Carrara <m.carrara@proxmox.com>
Message-ID: <srewo6wdk5cppn2oh2tuca4wx5bolz4nftdfg26j66vkfe2ioi@r7wembifatp4>
References: <20250130145124.317745-1-m.carrara@proxmox.com>
 <20250130145124.317745-3-m.carrara@proxmox.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <20250130145124.317745-3-m.carrara@proxmox.com>
X-SPAM-LEVEL: Spam detection results:  0
 AWL 0.083 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
 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to
 Validity was blocked. See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more
 information.
 RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to
 Validity was blocked. See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more
 information.
 RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to
 Validity was blocked. See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more
 information.
 SPF_HELO_NONE           0.001 SPF: HELO does not publish an SPF Record
 SPF_PASS               -0.001 SPF: sender matches SPF record
 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See
 http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more
 information. [perl.org, storage.pm]
Subject: Re: [pve-devel] [RFC v1 pve-storage 2/6] rework plugin loading and
 registration mechanism
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>
Cc: 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>

T24gVGh1LCBKYW4gMzAsIDIwMjUgYXQgMDM6NTE6MjBQTSArMDEwMCwgTWF4IENhcnJhcmEgd3Jv
dGU6Cj4gVGhpcyBjb21taXQgY2hhbmdlcyBob3cgcGx1Z2lucywgYm90aCBpbmJ1aWx0IGFuZCBj
dXN0b20sIGFyZSBsb2FkZWQKPiBhbmQgcmVnaXN0ZXJlZCBieSB0aGUgYFBWRTo6U3RvcmFnZWAg
bW9kdWxlIGZyb20gdGhlIGdyb3VuZCB1cC4KPiAKPiBUaGlzIGlzIGRvbmUgZm9yIG1haW5seSB0
d28gcmVhc29uczoKPiAKPiAgMS4gVW5pZnlpbmcgdGhlIHBsdWdpbiBsb2FkaW5nIG1lY2hhbmlz
bSBzbyB0aGF0IGluYnVpbHQgYW5kIGN1c3RvbQo+ICAgICBwbHVnaW5zIGFyZSBzdWJqZWN0ZWQg
dG8gKGFsbW9zdCkgdGhlIHNhbWUgY2hlY2tzLgo+IAo+ICAyLiBNYWtpbmcgaXQgcG9zc2libGUg
dG8gZWFzaWx5IGV4dGVuZCB0aGUgbG9hZGluZyAvIHJlZ2lzdGVyaW5nCj4gICAgIG1lY2hhbmlz
bSBmb3IgYWRkaXRpb25hbCBjb21waWxlLXRpbWUgKEJFR0lOIHBoYXNlIFsxXSkgY2hlY2tzLgo+
IAo+IFRoZSBuZXcgcGx1Z2luIHJlZ2lzdHJhdGlvbiBtZWNoYW5pc20gZXNzZW50aWFsbHkgY29u
c2lzdHMgb2YgZm91cgo+IHN0YWdlczoKPiAKPiAgMS4gTG9hZCBwbHVnaW5zIGludG8gdGhlIFBl
cmwgaW50ZXJwcmV0ZXIKPiAgMi4gUGVyZm9ybSBwcmUtcmVnaXN0cmF0aW9uIGNoZWNrcwo+ICAz
LiBSZWdpc3RyYXRpb24KPiAgNC4gUGVyZm9ybSBwb3N0LXJlZ2lzdHJhdGlvbiBjaGVja3MKPiAK
PiBFYWNoIHN0YWdlIHdpbGwgcGVyZm9ybSBpdHMgc3BlY2lmaWMgYWN0aW9ucyBvbiBpbmJ1aWx0
IHBsdWdpbnMgZmlyc3QKPiBhbmQgb24gY3VzdG9tIHBsdWdpbnMgYWZ0ZXJ3YXJkcy4KPiAKPiBJ
biBnZW5lcmFsLCBzaG91bGQgYSBzdGFnZSBmYWlsIGZvciBhbiBpbmJ1aWx0IHBsdWdpbiwgYW4g
ZXhjZXB0aW9uIGlzCj4gdGhyb3duLiBGb3IgY3VzdG9tIHBsdWdpbnMgYSB3YXJuaW5nIGlzIGVt
aXR0ZWQgaW5zdGVhZCBhbmQgdGhlIHBsdWdpbgo+IHdvbid0IGJlIGNvbnNpZGVyZWQgaW4gdGhl
IHN1YnNlcXVlbnQgc3RhZ2UocykuCj4gCj4gVGhlIG5ldyByZWdpc3RyYXRpb24gbWVjaGFuaXNt
IGlzIGVxdWl2YWxlbnQgdG8gdGhlIG9sZCBvbmUsIHdpdGggYQo+IGZldyBtaW5vciwgYnV0IG5v
dGFibGUgZXhjZXB0aW9uczoKPiAKPiAgMS4gU3RhZ2UgMS4gd2lsbCBhbHNvIHZlcmlmeSB3aGV0
aGVyIGVhY2ggcGx1Z2luIChpbmJ1aWx0IG9yIGN1c3RvbSkKPiAgICAgaXMgaW5zdGFsbGVkIGlu
c2lkZSBgL3Vzci9zaGFyZS9wZXJsNS9gIGFuZCBub3QgYW55d2hlcmUgZWxzZSBpbgo+ICAgICBv
cmRlciB0byBndWFyYW50ZWUgdGhhdCB0aGVyZSBhcmUgbm8gY29uZmxpY3RzIHdoaWxlIGxvYWRp
bmcuCgpBbmQgYWxzbyBicmVha3MgdGVzdGluZyBjaGFuZ2VzIHdpdGggYHBlcmwgLUlgL1BFUkxM
SUIgZW52IHZhcnMuCgo+IAo+ICAgICBFeGFtcGxlOiBBIHBhcnRpY3VsYXJseSBpbXBlcnRpbmVu
dCBjdXN0b20gcGx1Z2luICptYXkqIGluc3RhbGwKPiAgICAgaXRzZWxmIHRvIGFub3RoZXIgcGF0
aCBpbiBgQElOQ2AsIHN1Y2ggYXMKPiAgICAgYC91c3IvbG9jYWwvbGliL3g4Nl82NC1saW51eC1n
bnUvcGVybC81LjM2LjBgIGUuZy4sIGFuZCBtYXNrCj4gICAgIGFub3RoZXIgaW5idWlsdCBvciBj
dXN0b20gcGx1Z2luIGJ5IGhhdmluZyB0aGUgZXhhY3Qgc2FtZQo+ICAgICBuYW1lc3BhY2UuCj4g
Cj4gICAgIFdoaWxlIHVubGlrZWx5LCB0aGlzIGlzIG5vdyBndWFyZGVkIGFnYWluc3QuCj4gCj4g
IDIuIFRoZSBuZXcgcmVnaXN0cmF0aW9uIG1hY2hpbmVyeSBhbHNvIGNoZWNrcyB3aGV0aGVyIGlu
YnVpbHQKPiAgICAgcGx1Z2lucyBkZXJpdmUgZnJvbSBgUFZFOjpTdG9yYWdlOjpQbHVnaW5gLgoK
VGhhdCdzIG5vdCBuZXc/Cgo+IAo+ICAzLiBJbmJ1aWx0IHBsdWdpbnMgYXJlIG5vIGxvbmdlciBp
bXBvcnRlZCB1c2luZyBgdXNlYCwgdGhlIHNhbWUgbG9naWMKPiAgICAgdXNpbmcgYHJlcXVpcmVg
IGlzIG5vdyB1c2VkIGZvciBib3RoIGluYnVpbHQgYW5kIGN1c3RvbSBwbHVnaW5zLgoKQXMgbWVu
dGlvbmVkIGluIHRoZSBjb3ZlciBsZXR0ZXIsIHRoaXMgc2VlbXMgdG8gdHJpcCB1cCB5b3VyIHBv
aW50IDEuCgo+IAo+ICA0LiBUaGUgcmVnaXN0cmF0aW9uIG5vdyBoYXBwZW5zIGluc2lkZSB0aGUg
YGltcG9ydCgpYCBzdWJyb3V0aW5lLAo+ICAgICB3aGljaCBtYWtlcyBpdCBtb3JlIHByZWRpY3Rh
YmxlIHdoZW4gcGx1Z2lucyBhcmUgYWN0dWFsbHkgbG9hZGVkLgo+IAo+ICAgICBUaGlzIG1lYW5z
IHRoYXQgcGx1Z2lucyBmcm9tIGhlcmUgb24gb3V0IGFyZSBvbmx5IHJlZ2lzdGVyZWQgd2hlbgo+
ICAgICBydW5uaW5nIGB1c2UgUFZFOjpTdG9yYWdlO2AgYW5kIG5vdCB3aGVuIHVzaW5nIGByZXF1
aXJlCj4gICAgIFBWRTo6U3RvcmFnZTtgLiBUaGUgZGlmZmVyZW5jZSBoZXJlIGlzIHNvbWV3aGF0
IHN1YnRsZTsgdG8KPiAgICAgZWxhYm9yYXRlLCB0aGUgc3RhdGVtZW50IGB1c2UgUFZFOjpTdG9y
YWdlO2AgaXMgZXF1aXZhbGVudCB0byB0aGUKPiAgICAgZm9sbG93aW5nIFsyXToKPiAKPiAgICAg
ICAgIEJFR0lOIHsKPiAgICAgICAgICAgICByZXF1aXJlICJQVkUvU3RvcmFnZS5wbSI7Cj4gICAg
ICAgICAgICAgJ1BWRTo6U3RvcmFnZSctPmltcG9ydCgpOwo+ICAgICAgICAgfQo+IAo+ICAgICBC
ZWNhdXNlIGBQVkU6OlN0b3JhZ2VgIGlzbid0IGltcG9ydGVkIHVzaW5nIGEgcGxhaW4gYHJlcXVp
cmVgCj4gICAgIGFueXdoZXJlIGluIG91ciBjb2RlLCB0aGlzIGNoYW5nZSBpcyBzYWZlIHRvIG1h
a2UuCj4gCj4gWzFdOiBodHRwczovL3Blcmxkb2MucGVybC5vcmcvcGVybG1vZCNCRUdJTiUyQy1V
TklUQ0hFQ0slMkMtQ0hFQ0slMkMtSU5JVC1hbmQtRU5ECj4gWzJdOiBodHRwczovL3Blcmxkb2Mu
cGVybC5vcmcvZnVuY3Rpb25zL3VzZQo+IAo+IFNpZ25lZC1vZmYtYnk6IE1heCBDYXJyYXJhIDxt
LmNhcnJhcmFAcHJveG1veC5jb20+Cj4gLS0tCj4gIHNyYy9QVkUvU3RvcmFnZS5wbSB8IDU1OSAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KPiAgMSBmaWxlIGNo
YW5nZWQsIDQ4OSBpbnNlcnRpb25zKCspLCA3MCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0
IGEvc3JjL1BWRS9TdG9yYWdlLnBtIGIvc3JjL1BWRS9TdG9yYWdlLnBtCj4gaW5kZXggZGY0ZDYy
Zi4uMGM4YmE2NCAxMDA3NTUKPiAtLS0gYS9zcmMvUFZFL1N0b3JhZ2UucG0KPiArKysgYi9zcmMv
UFZFL1N0b3JhZ2UucG0KPiBAQCAtMTAsNiArMTAsOCBAQCB1c2UgSU86OlNvY2tldDo6SVA7Cj4g
IHVzZSBJUEM6Ok9wZW4zOwo+ICB1c2UgRmlsZTo6QmFzZW5hbWU7Cj4gIHVzZSBGaWxlOjpQYXRo
Owo+ICt1c2UgRmlsZTo6U3BlYzsKPiArdXNlIENhcnA7Cj4gIHVzZSBDd2QgJ2Fic19wYXRoJzsK
PiAgdXNlIFNvY2tldDsKPiAgdXNlIFRpbWU6OkxvY2FsIHF3KHRpbWVsb2NhbCk7Cj4gQEAgLTI3
LDgyICsyOSwxMiBAQCB1c2UgUFZFOjpSRVNURW52aXJvbm1lbnQgcXcobG9nX3dhcm4pOwo+ICB1
c2UgUFZFOjpTdG9yYWdlOjpWZXJzaW9uOwo+ICAKPiAgdXNlIFBWRTo6U3RvcmFnZTo6UGx1Z2lu
Owo+IC11c2UgUFZFOjpTdG9yYWdlOjpEaXJQbHVnaW47Cj4gLXVzZSBQVkU6OlN0b3JhZ2U6OkxW
TVBsdWdpbjsKPiAtdXNlIFBWRTo6U3RvcmFnZTo6THZtVGhpblBsdWdpbjsKPiAtdXNlIFBWRTo6
U3RvcmFnZTo6TkZTUGx1Z2luOwo+IC11c2UgUFZFOjpTdG9yYWdlOjpDSUZTUGx1Z2luOwo+IC11
c2UgUFZFOjpTdG9yYWdlOjpJU0NTSVBsdWdpbjsKPiAtdXNlIFBWRTo6U3RvcmFnZTo6UkJEUGx1
Z2luOwo+IC11c2UgUFZFOjpTdG9yYWdlOjpDZXBoRlNQbHVnaW47Cj4gLXVzZSBQVkU6OlN0b3Jh
Z2U6OklTQ1NJRGlyZWN0UGx1Z2luOwo+IC11c2UgUFZFOjpTdG9yYWdlOjpHbHVzdGVyZnNQbHVn
aW47Cj4gLXVzZSBQVkU6OlN0b3JhZ2U6OlpGU1Bvb2xQbHVnaW47Cj4gLXVzZSBQVkU6OlN0b3Jh
Z2U6OlpGU1BsdWdpbjsKPiAtdXNlIFBWRTo6U3RvcmFnZTo6UEJTUGx1Z2luOwo+IC11c2UgUFZF
OjpTdG9yYWdlOjpCVFJGU1BsdWdpbjsKPiAtdXNlIFBWRTo6U3RvcmFnZTo6RVNYaVBsdWdpbjsK
PiAgCj4gIHVzZSBjb25zdGFudCBBUElWRVIgPT4gUFZFOjpTdG9yYWdlOjpWZXJzaW9uOjpBUElW
RVI7Cj4gIHVzZSBjb25zdGFudCBBUElBR0UgPT4gUFZFOjpTdG9yYWdlOjpWZXJzaW9uOjpBUElB
R0U7Cj4gIAo+ICBvdXIgJEtOT1dOX0VYUE9SVF9GT1JNQVRTID0gWydyYXcrc2l6ZScsICd0YXIr
c2l6ZScsICdxY293MitzaXplJywgJ3ZtZGsrc2l6ZScsICd6ZnMnLCAnYnRyZnMnXTsKPiAgCj4g
LSMgbG9hZCBzdGFuZGFyZCBwbHVnaW5zCj4gLVBWRTo6U3RvcmFnZTo6RGlyUGx1Z2luLT5yZWdp
c3RlcigpOwo+IC1QVkU6OlN0b3JhZ2U6OkxWTVBsdWdpbi0+cmVnaXN0ZXIoKTsKPiAtUFZFOjpT
dG9yYWdlOjpMdm1UaGluUGx1Z2luLT5yZWdpc3RlcigpOwo+IC1QVkU6OlN0b3JhZ2U6Ok5GU1Bs
dWdpbi0+cmVnaXN0ZXIoKTsKPiAtUFZFOjpTdG9yYWdlOjpDSUZTUGx1Z2luLT5yZWdpc3Rlcigp
Owo+IC1QVkU6OlN0b3JhZ2U6OklTQ1NJUGx1Z2luLT5yZWdpc3RlcigpOwo+IC1QVkU6OlN0b3Jh
Z2U6OlJCRFBsdWdpbi0+cmVnaXN0ZXIoKTsKPiAtUFZFOjpTdG9yYWdlOjpDZXBoRlNQbHVnaW4t
PnJlZ2lzdGVyKCk7Cj4gLVBWRTo6U3RvcmFnZTo6SVNDU0lEaXJlY3RQbHVnaW4tPnJlZ2lzdGVy
KCk7Cj4gLVBWRTo6U3RvcmFnZTo6R2x1c3RlcmZzUGx1Z2luLT5yZWdpc3RlcigpOwo+IC1QVkU6
OlN0b3JhZ2U6OlpGU1Bvb2xQbHVnaW4tPnJlZ2lzdGVyKCk7Cj4gLVBWRTo6U3RvcmFnZTo6WkZT
UGx1Z2luLT5yZWdpc3RlcigpOwo+IC1QVkU6OlN0b3JhZ2U6OlBCU1BsdWdpbi0+cmVnaXN0ZXIo
KTsKPiAtUFZFOjpTdG9yYWdlOjpCVFJGU1BsdWdpbi0+cmVnaXN0ZXIoKTsKPiAtUFZFOjpTdG9y
YWdlOjpFU1hpUGx1Z2luLT5yZWdpc3RlcigpOwo+IC0KPiAtIyBsb2FkIHRoaXJkLXBhcnR5IHBs
dWdpbnMKPiAtaWYgKCAtZCAnL3Vzci9zaGFyZS9wZXJsNS9QVkUvU3RvcmFnZS9DdXN0b20nICkg
ewo+IC0gICAgZGlyX2dsb2JfZm9yZWFjaCgnL3Vzci9zaGFyZS9wZXJsNS9QVkUvU3RvcmFnZS9D
dXN0b20nLCAnLipcLnBtJCcsIHN1YiB7Cj4gLQlteSAoJGZpbGUpID0gQF87Cj4gLQlteSAkbW9k
bmFtZSA9ICdQVkU6OlN0b3JhZ2U6OkN1c3RvbTo6JyAuICRmaWxlOwo+IC0JJG1vZG5hbWUgPX4g
cyFcLnBtJCEhOwo+IC0JJGZpbGUgPSAnUFZFL1N0b3JhZ2UvQ3VzdG9tLycgLiAkZmlsZTsKPiAt
Cj4gLQlldmFsIHsKPiAtCSAgICByZXF1aXJlICRmaWxlOwo+IC0KPiAtCSAgICAjIENoZWNrIHBl
cmwgaW50ZXJmYWNlOgo+IC0JICAgIGRpZSAibm90IGRlcml2ZWQgZnJvbSBQVkU6OlN0b3JhZ2U6
OlBsdWdpblxuIiBpZiAhJG1vZG5hbWUtPmlzYSgnUFZFOjpTdG9yYWdlOjpQbHVnaW4nKTsKPiAt
CSAgICBkaWUgImRvZXMgbm90IHByb3ZpZGUgYW4gYXBpKCkgbWV0aG9kXG4iIGlmICEkbW9kbmFt
ZS0+Y2FuKCdhcGknKTsKPiAtCSAgICAjIENoZWNrIHN0b3JhZ2UgQVBJIHZlcnNpb24gYW5kIHRo
YXQgZmlsZSBpcyByZWFsbHkgc3RvcmFnZSBwbHVnaW4uCj4gLQkgICAgbXkgJHZlcnNpb24gPSAk
bW9kbmFtZS0+YXBpKCk7Cj4gLQkgICAgZGllICJpbXBsZW1lbnRzIGFuIEFQSSB2ZXJzaW9uIG5l
d2VyIHRoYW4gY3VycmVudCAoJHZlcnNpb24gPiAiIC4gQVBJVkVSIC4gIilcbiIKPiAtCQlpZiAk
dmVyc2lvbiA+IEFQSVZFUjsKPiAtCSAgICBteSAkbWluX3ZlcnNpb24gPSAoQVBJVkVSIC0gQVBJ
QUdFKTsKPiAtCSAgICBkaWUgIkFQSSB2ZXJzaW9uIHRvbyBvbGQsIHBsZWFzZSB1cGRhdGUgdGhl
IHBsdWdpbiAoJHZlcnNpb24gPCAkbWluX3ZlcnNpb24pXG4iCj4gLQkJaWYgJHZlcnNpb24gPCAk
bWluX3ZlcnNpb247Cj4gLQkgICAgIyBhbGwgT0ssIGRvIGltcG9ydCBhbmQgcmVnaXN0ZXIgKGku
ZS4sICJ1c2UiKQo+IC0JICAgIGltcG9ydCAkZmlsZTsKPiAtCSAgICAkbW9kbmFtZS0+cmVnaXN0
ZXIoKTsKPiAtCj4gLQkgICAgIyBJZiB3ZSBnb3QgdGhpcyBmYXIgYW5kIHRoZSBBUEkgdmVyc2lv
biBpcyBub3QgdGhlIHNhbWUsIG1ha2Ugc29tZSBub2lzZToKPiAtCSAgICB3YXJuICJQbHVnaW4g
XCIkbW9kbmFtZVwiIGlzIGltcGxlbWVudGluZyBhbiBvbGRlciBzdG9yYWdlIEFQSSwgYW4gdXBn
cmFkZSBpcyByZWNvbW1lbmRlZFxuIgo+IC0JCWlmICR2ZXJzaW9uICE9IEFQSVZFUjsKPiAtCX07
Cj4gLQlpZiAoJEApIHsKPiAtCSAgICB3YXJuICJFcnJvciBsb2FkaW5nIHN0b3JhZ2UgcGx1Z2lu
IFwiJG1vZG5hbWVcIjogJEAiOwo+IC0JfQo+IC0gICAgfSk7Cj4gLX0KCl4gVGhlIGFib3ZlIHdh
cyBzbyBtdWNoIHNob3J0ZXIuLi4gKGFuZCB3b3JrZWQgOlApCgo+IC0KPiAtIyBpbml0aWFsaXpl
IGFsbCBwbHVnaW5zCj4gLVBWRTo6U3RvcmFnZTo6UGx1Z2luLT5pbml0KCk7Cj4gLQo+ICAjIHRo
ZSBmb2xsb3dpbmcgUkVzIGluZGljYXRlIHRoZSBudW1iZXIgb3IgY2FwdHVyZSBncm91cHMgdmlh
IHRoZSB0cmFpbGluZyBkaWdpdAo+ICAjIENBVVRJT04gZG9uJ3QgZm9yZ2V0IHRvIHVwZGF0ZSB0
aGUgZGlnaXRzIGFjY29yZGluZ2x5IGFmdGVyIG1lc3Npbmcgd2l0aCB0aGUgY2FwdHVyZSBncm91
cHMKPiAgCj4gQEAgLTEyNCw2ICs1Niw0OTMgQEAgb3VyICRPVkFfQ09OVEVOVF9SRV8xID0gcXIv
JHtTQUZFX0NIQVJfV0lUSF9XSElURVNQQUNFX0NMQVNTX1JFfStcLihxY293MnxyYXd8dm0KPiAg
IyBGSVhNRSByZW1vdmUgd2l0aCBQVkUgOS4wLCBhZGQgdmVyc2lvbmVkIGJyZWFrcyBmb3IgcHZl
LW1hbmFnZXIKPiAgb3VyICR2enRtcGxfZXh0ZW5zaW9uX3JlID0gJFZaVE1QTF9FWFRfUkVfMTsK
PiAgCj4gKyMgUFZFOjpTdG9yYWdlIHBsdWdpbiByZWdpc3RyYXRpb24gbWFjaGluZXJ5Cj4gKwo+
ICtteSAkcGx1Z2luX3JlZ2lzdGVyX3N0YXRlID0gewo+ICsgICAgaW5kZXggPT4ge30sCgpeIEEg
Y29tbWVudCBleHBsYWluaW5nIHRoZSBjb250ZW50cyB0aGVyZSBtaWdodCBiZSB1c2VmdWwuCgo+
ICsgICAgcGx1Z2luc19pbml0aWFsaXNlZCA9PiAwLAo+ICt9Owo+ICsKPiArPWhlYWQzIGdldF9z
dGFuZGFyZF9wbHVnaW5fbmFtZXMoKQo+ICsKPiArUmV0dXJucyBhbiBhcnJheSBvciBhIHJlZmVy
ZW5jZSB0byBhbiBhcnJheSBvZiB0aGUgbW9kdWxlIG5hbWVzIG9mIG91ciBpbmJ1aWx0Cj4gK3N0
b3JhZ2UgcGx1Z2lucywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsZXIuCj4g
Kwo+ICsgICAgIyBib3RoIHZhbGlkCj4gKyAgICBteSAkc3RhbmRhcmRfcGx1Z2lucyA9IGdldF9z
dGFuZGFyZF9wbHVnaW5fbmFtZXMoKTsKPiArICAgIG15IEBzdGFuZGFyZF9wbHVnaW5zID0gZ2V0
X3N0YW5kYXJkX3BsdWdpbl9uYW1lcygpOwoKTW9yZSBQT0QgY2x1dHRlciBmb3Igc29tZXRoaW5n
IHVubmVjZXNzYXJ5IPCfmKwuCgo+ICsKPiArPWN1dAo+ICsKPiArbXkgc3ViIGdldF9zdGFuZGFy
ZF9wbHVnaW5fbmFtZXMgOiBwcm90b3R5cGUoKSB7CgpUaGlzIHNob3VsZCBub3QgYmUgYSBzdWIu
Cgo+ICsgICAgbXkgQHN0YW5kYXJkX3BsdWdpbnMgPSBxdygKPiArCVBWRTo6U3RvcmFnZTo6RGly
UGx1Z2luCj4gKwlQVkU6OlN0b3JhZ2U6OkxWTVBsdWdpbgo+ICsJUFZFOjpTdG9yYWdlOjpMdm1U
aGluUGx1Z2luCj4gKwlQVkU6OlN0b3JhZ2U6Ok5GU1BsdWdpbgo+ICsJUFZFOjpTdG9yYWdlOjpD
SUZTUGx1Z2luCj4gKwlQVkU6OlN0b3JhZ2U6OklTQ1NJUGx1Z2luCj4gKwlQVkU6OlN0b3JhZ2U6
OlJCRFBsdWdpbgo+ICsJUFZFOjpTdG9yYWdlOjpDZXBoRlNQbHVnaW4KPiArCVBWRTo6U3RvcmFn
ZTo6SVNDU0lEaXJlY3RQbHVnaW4KPiArCVBWRTo6U3RvcmFnZTo6R2x1c3RlcmZzUGx1Z2luCj4g
KwlQVkU6OlN0b3JhZ2U6OlpGU1Bvb2xQbHVnaW4KPiArCVBWRTo6U3RvcmFnZTo6WkZTUGx1Z2lu
Cj4gKwlQVkU6OlN0b3JhZ2U6OlBCU1BsdWdpbgo+ICsJUFZFOjpTdG9yYWdlOjpCVFJGU1BsdWdp
bgo+ICsJUFZFOjpTdG9yYWdlOjpFU1hpUGx1Z2luCj4gKyAgICApOwo+ICsKPiArICAgIHJldHVy
biBAc3RhbmRhcmRfcGx1Z2lucyBpZiB3YW50YXJyYXk7Cj4gKyAgICByZXR1cm4gXEBzdGFuZGFy
ZF9wbHVnaW5zOwo+ICt9Cj4gKwo+ICs9aGVhZDMgZ2V0X2N1c3RvbV9wbHVnaW5fbmFtZXMoKQo+
ICsKPiArUmV0dXJucyBhbiBhcnJheSBvciBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBvZiB0aGUg
bW9kdWxlIG5hbWVzIG9mIGN1c3RvbQo+ICtzdG9yYWdlIHBsdWdpbnMgaW5zaWRlIEM8L3Vzci9z
aGFyZS9wZXJsNS9QVkUvU3RvcmFnZS9DdXN0b20+LCBkZXBlbmRpbmcgb24gdGhlCj4gK2NvbnRl
eHQgb2YgdGhlIGNhbGxlci4KPiArCj4gKyAgICAjIGJvdGggdmFsaWQKPiArICAgIG15ICRjdXN0
b21fcGx1Z2lucyA9IGdldF9jdXN0b21fcGx1Z2luX25hbWVzKCk7Cj4gKyAgICBteSBAY3VzdG9t
X3BsdWdpbnMgPSBnZXRfY3VzdG9tX3BsdWdpbl9uYW1lcygpOwoK8J+YrAoKYW5kIHN0aWxsIG5v
dCBjb252aW5jZWQgcHJpdmF0ZSBvbmVzaG90IHN1YnMgc2hvdWxkIHVzZSBQT0QuCgo+ICsKPiAr
PWN1dAo+ICsKPiArbXkgc3ViIGdldF9jdXN0b21fcGx1Z2luX25hbWVzIDogcHJvdG90eXBlKCkg
ewo+ICsgICAgbXkgQGN1c3RvbV9wbHVnaW5zID0gKCk7Cj4gKwo+ICsgICAgaWYgKCAtZCAnL3Vz
ci9zaGFyZS9wZXJsNS9QVkUvU3RvcmFnZS9DdXN0b20nICkgewo+ICsJZGlyX2dsb2JfZm9yZWFj
aCgnL3Vzci9zaGFyZS9wZXJsNS9QVkUvU3RvcmFnZS9DdXN0b20nLCAnLipcLnBtJCcsIHN1YiB7
Cj4gKwkgICAgbXkgKCRmaWxlKSA9IEBfOwo+ICsKPiArCSAgICBteSAkbW9kbmFtZSA9ICdQVkU6
OlN0b3JhZ2U6OkN1c3RvbTo6JyAuICRmaWxlOwo+ICsJICAgICRtb2RuYW1lID1+IHMhXC5wbSQh
ITsKPiArCj4gKwkgICAgcHVzaChAY3VzdG9tX3BsdWdpbnMsICRtb2RuYW1lKTsKPiArCX0pOwo+
ICsgICAgfQo+ICsKPiArICAgIHJldHVybiBAY3VzdG9tX3BsdWdpbnMgaWYgd2FudGFycmF5Owo+
ICsgICAgcmV0dXJuIFxAY3VzdG9tX3BsdWdpbnM7Cj4gK30KPiArCj4gKz1oZWFkMyBnZXRfaW5k
ZXhlZF9wbHVnaW5zKCVwYXJhbXMpCj4gKwo+ICtSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgY3Vy
cmVudGx5IGluZGV4ZWQgc3RvcmFnZSBwbHVnaW5zLCBvcHRpb25hbGx5IGFsbG93aW5nCj4gK2Nl
cnRhaW4gZmlsdGVycyBmbGFncyB0byBiZSBwYXNzZWQuIFJldHVybnMgYW4gYXJyYXkgb3IgYSBy
ZWZlcmVuY2UgdG8gYW4gYXJyYXkKPiArZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBj
YWxsZXIuCj4gKwo+ICsgICAgbXkgQGFsbF9wbHVnaW5zID0gZ2V0X2luZGV4ZWRfcGx1Z2lucygp
Owo+ICsKPiArICAgIG15ICRzdGFuZGFyZF9wbHVnaW5zID0gZ2V0X2luZGV4ZWRfcGx1Z2lucyhp
c19jdXN0b20gPT4gMCk7Cj4gKyAgICBteSBAY3VzdG9tX3BsdWdpbnMgPSBnZXRfaW5kZXhlZF9w
bHVnaW5zKGlzX2N1c3RvbSA9PiAxKTsKPiArCj4gKyAgICBteSBAcmVnaXN0ZXJlZF9jdXN0b21f
cGx1Z2lucyA9IGdldF9pbmRleGVkX3BsdWdpbnMoaXNfY3VzdG9tID0+IDEsIGlzX3JlZ2lzdGVy
ZWQgPT4gMSk7Cj4gKwo+ICtUaGUgZm9sbG93aW5nIGtleS12YWx1ZSBwYWlycyBtYXkgb3B0aW9u
YWxseSBiZSBwYXNzZWQgYW5kIHdpbGwgY2F1c2UgdGhpcwo+ICtzdWJyb3V0aW5lIHRvIGZpbHRl
ciBvdXQgYW55IHBsdWdpbiBuYW1lcyBmb3Igd2hpY2ggdGhleSBkb24ndCBhcHBseToKPiArCj4g
Kz1vdmVyCj4gKwo+ICs9aXRlbSAqIEM8PCBpc19jdXN0b20gPT4gWzB8MV0gPj4KPiArCj4gK1do
ZXRoZXIgdG8gb25seSByZXR1cm4gbmFtZXMgb2YgY3VzdG9tIHBsdWdpbiBuYW1lcyBvciBpbmJ1
aWx0IG9uZXMuCj4gKwo+ICs9aXRlbSAqIEM8PCBpc19jaGVja2VkID0+IFswfDFdPj4KPiArCj4g
K1doZXRoZXIgdG8gb25seSByZXR1cm4gcGx1Z2lucyB0aGF0IHBhc3NlZCBvciBoYXZlbid0IHBh
c3NlZCB0aGUKPiArcHJlLXJlZ2lzdHJhdGlvbiBjaGVjay4KPiArCj4gKz1pdGVtICogQzw8IGlz
X3JlZ2lzdGVyZWQgPT4gWzB8MV0gPj4KPiArCj4gK1doZXRoZXIgdG8gb25seSByZXR1cm4gcGx1
Z2lucyB0aGF0IHdlcmUgb3Igd2VyZW4ndCByZWdpc3RlcmVkLgo+ICsKPiArPWJhY2sKPiArCj4g
Kz1jdXQKPiArCj4gK215IHN1YiBnZXRfaW5kZXhlZF9wbHVnaW5zIDogcHJvdG90eXBlKDslKSB7
Cj4gKyAgICBteSAoJXBhcmFtcykgPSBAXzsKPiArCj4gKyAgICBteSAkcGx1Z2luX2luZGV4ID0g
JHBsdWdpbl9yZWdpc3Rlcl9zdGF0ZS0+e2luZGV4fTsKPiArCj4gKyAgICBteSAkdGVzdF9pbmRl
eF9mb3JfZmxhZyA9IHN1YiB7Cj4gKwlteSAoJHBsdWdpbl9uYW1lLCAkZmxhZykgPSBAXzsKPiAr
Cj4gKwlyZXR1cm4gMCBpZiAhZGVmaW5lZCgkcGx1Z2luX2luZGV4LT57JF99KTsKPiArCXJldHVy
biAwIGlmICFkZWZpbmVkKCRwbHVnaW5faW5kZXgtPnskX30tPnskZmxhZ30pOwo+ICsKPiArCXJl
dHVybiAkcGx1Z2luX2luZGV4LT57JF99LT57JGZsYWd9ID09ICRwYXJhbXN7JGZsYWd9Owo+ICsg
ICAgfTsKPiArCj4gKyAgICBteSBAcGx1Z2lucyA9IGtleXMgJHBsdWdpbl9pbmRleC0+JSo7Cj4g
Kwo+ICsgICAgQHBsdWdpbnMgPSBncmVwIHsgJHRlc3RfaW5kZXhfZm9yX2ZsYWctPigkXywgJ2lz
X2N1c3RvbScpIH0gQHBsdWdpbnMKPiArCWlmIGRlZmluZWQoJHBhcmFtc3tpc19jdXN0b219KTsK
Cl4gVGhlIGhlbHBlci1jbG9zdXJlIGNvdWxkIGRvIHRoZSBlbnRpcmUgYGdyZXBgIHN0YXRlbWVu
dCB0byBtYWtlIHRoaXMKanVzdCBiZQoKICAgICRncmVwX2Zvcl9mbGFncy0+KCRmbGFnKSBmb3Ig
KHF3KGlzX2NoZWNrZWQgLi4uKSk7CgphdCB3aGljaCBwb2ludCB3ZSBjb3VsZCBkcm9wIHRoZSBj
bG9zdXJlIGFuZCBqdXN0IGRvCgogICAgZm9yIG15ICRmbGFnIChxdyhpc19jdXN0b20gaXNfY2hl
Y2tlZCBpc19yZWdpc3RlcmVkKSB7CiAgICAgICAgIyBjb250ZW50cyBvZiBoZWxwZXIgc3ViCiAg
ICB9CgpJTU8gbW9yZSByZWFkYWJsZS4KCj4gKwo+ICsgICAgQHBsdWdpbnMgPSBncmVwIHsgJHRl
c3RfaW5kZXhfZm9yX2ZsYWctPigkXywgJ2lzX2NoZWNrZWQnKSB9IEBwbHVnaW5zCj4gKwlpZiBk
ZWZpbmVkKCRwYXJhbXN7aXNfY2hlY2tlZH0pOwo+ICsKPiArICAgIEBwbHVnaW5zID0gZ3JlcCB7
ICR0ZXN0X2luZGV4X2Zvcl9mbGFnLT4oJF8sICdpc19yZWdpc3RlcmVkJykgfSBAcGx1Z2lucwo+
ICsJaWYgZGVmaW5lZCgkcGFyYW1ze2lzX3JlZ2lzdGVyZWR9KTsKPiArCj4gKyAgICByZXR1cm4g
QHBsdWdpbnMgaWYgd2FudGFycmF5Owo+ICsgICAgcmV0dXJuIEBwbHVnaW5zOwoKXiBubwoKPiAr
fQo+ICsKPiArPWhlYWQzIGRvX3RyeV9sb2FkX3BsdWdpbiglcGFyYW1zKQo+ICsKPiArQWN0dWFs
IGxvYWRpbmcgbWVjaGFuaXNtIHVzZWQgaW5zaWRlIEM8TDw8IHRyeV9sb2FkX3BsdWdpbnMoKXwv
InRyeV9sb2FkX3BsdWdpbnMoKSIgPj4+Lgo+ICtBdHRlbXB0cyB0byBsb2FkIHRoZSBwbHVnaW4g
cHJvdmlkZWQgdmlhIHRoZSBDPG5hbWU+IGtleS4gT3B0aW9uYWxseSwgQzw8IGlzX2N1c3RvbSA9
PiAxID4+Cj4gK21heSBiZSBwYXNzZWQgaWYgYSBjdXN0b20gcGx1Z2luIGlzIGJlaW5nIGxvYWRl
ZC4KPiArCj4gKyAgICBkb190cnlfbG9hZF9wbHVnaW4obmFtZSA9PiAnUFZFOjpTdG9yYWdlOjpE
aXJQbHVnaW4nKTsKPiArCj4gKyAgICBkb190cnlfbG9hZF9wbHVnaW4obmFtZSA9PiAnUFZFOjpT
dG9yYWdlOjpDdXN0b206OkZvb1BsdWdpbicsIGlzX2N1c3RvbSA9PiAxKTsKPiArCj4gK1RoZSBn
aXZlbiBwbHVnaW4gaXMgbG9hZGVkIGR5bmFtaWNhbGx5IHZpYSBQZXJsJ3MgQzxyZXF1aXJlPiBh
bmQgdGhlbiBhZGRlZCB0bwo+ICt0aGUgcGx1Z2luIGluZGV4IGZvciBmdXJ0aGVyIG9wZXJhdGlv
bnMsIHN1Y2ggYXMgcHJlLSBhbmQgcG9zdC1yZWdpc3RyYXRpb24KPiArY2hlY2tzIGFzIHdlbGwg
YXMgdGhlIGFjdHVhbCByZWdpc3RyYXRpb24gaXRzZWxmLgo+ICsKPiArVGhpcyBzdWJyb3V0aW5l
IHBlcmZvcm1zIGFkZGl0aW9uYWwgc2FuaXR5IGNoZWNrcyBhbmQgd2lsbCByYWlzZSBhbiBleGNl
cHRpb24gaWYKPiArdGhlIHBsdWdpbiBkb2Vzbid0IGV4aXN0IGluIEM8L3Vzci9zaGFyZS9wZXJs
NS8+IG9yIGlmIHRoZSBwbHVnaW4gd2FzIGFscmVhZHkgbG9hZGVkLgo+ICsKPiArPWN1dAo+ICsK
PiArbXkgc3ViIGRvX3RyeV9sb2FkX3BsdWdpbiA6IHByb3RvdHlwZSglKSB7Cj4gKyAgICBteSAo
JXBhcmFtcykgPSBAXzsKPiArCj4gKyAgICBteSAkcGx1Z2luX25hbWUgPSAkcGFyYW1ze25hbWV9
Owo+ICsgICAgbXkgJGlzX2N1c3RvbSA9ICRwYXJhbXN7aXNfY3VzdG9tfTsKPiArCj4gKyAgICBj
cm9hayAibm8gcGx1Z2luIG5hbWUgcHJvdmlkZWQgLSBtdXN0IGJlIGZ1bGx5IHF1YWxpZmllZCBu
YW1lc3BhY2UsIGUuZy4gRm9vOjpCYXI6OkJheiIKPiArCWlmICFkZWZpbmVkKCRwbHVnaW5fbmFt
ZSk7Cj4gKwo+ICsgICAgbXkgJGJhc2VfcGF0aCA9ICcvdXNyL3NoYXJlL3Blcmw1Lyc7Cj4gKwo+
ICsgICAgbXkgJHBsdWdpbl9maWxlcGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcihzcGxpdCgnOjon
LCAkcGx1Z2luX25hbWUpKSAuICcucG0nOwo+ICsgICAgbXkgKCRfdm9sdW1lLCAkcGx1Z2luX2Rp
ciwgJHBsdWdpbl9maWxlbmFtZSkgPSBGaWxlOjpTcGVjLT5zcGxpdHBhdGgoJHBsdWdpbl9maWxl
cGF0aCk7Cj4gKwo+ICsgICAgbXkgJHBsdWdpbl9maWxlcGF0aF9hYnMgPSBGaWxlOjpTcGVjLT5j
YXRmaWxlKCRiYXNlX3BhdGgsICRwbHVnaW5fZGlyLCAkcGx1Z2luX2ZpbGVuYW1lKTsKPiArCj4g
KyAgICBjcm9hayAicGx1Z2luICckcGx1Z2luX25hbWUnIGRvZXMgbm90IGV4aXN0IGF0IHBhdGgg
JyRwbHVnaW5fZmlsZXBhdGhfYWJzJyIKPiArCWlmICghIC1lICRwbHVnaW5fZmlsZXBhdGhfYWJz
KTsKPiArCj4gKyAgICBldmFsIHsKPiArCXJlcXVpcmUgJHBsdWdpbl9maWxlcGF0aDsKPiArICAg
IH07Cj4gKyAgICBjcm9hayAiRmFpbGVkIHRvIGxvYWQgcGx1Z2luICckcGx1Z2luX25hbWUnIC0g
JEAiIGlmICRAOwo+ICsKPiArICAgIG15ICRwbHVnaW5faW5kZXggPSAkcGx1Z2luX3JlZ2lzdGVy
X3N0YXRlLT57aW5kZXh9Owo+ICsKPiArICAgIGNvbmZlc3MgIlBsdWdpbiAnJHBsdWdpbl9uYW1l
JyBpcyBhbHJlYWR5IGxvYWRlZCIgaWYgZXhpc3RzKCRwbHVnaW5faW5kZXgtPnskcGx1Z2luX25h
bWV9KTsKPiArCj4gKyAgICAkcGx1Z2luX2luZGV4LT57JHBsdWdpbl9uYW1lfSA9IHsKPiArCWFi
c29sdXRlX3BhdGggPT4gJHBsdWdpbl9maWxlcGF0aF9hYnMsCj4gKwlpc19jdXN0b20gPT4gJGlz
X2N1c3RvbSB8fCAwLAo+ICsJaXNfY2hlY2tlZCA9PiAwLAo+ICsJaXNfcmVnaXN0ZXJlZCA9PiAw
LAo+ICsgICAgfTsKPiArCj4gKyAgICByZXR1cm47Cj4gK30KPiArCj4gKz1oZWFkMyB0cnlfbG9h
ZF9wbHVnaW5zKCkKPiArCj4gK0F0dGVtcHRzIHRvIGxvYWQgYWxsIGF2YWlsYWJsZSBwbHVnaW5z
LCB3aXRoIGluYnVpbHQgKCJzdGFuZGFyZCIpIHBsdWdpbnMgYmVpbmcKPiArbG9hZGVkIGZpcnN0
IGFuZCBjdXN0b20gcGx1Z2lucyBsb2FkZWQgYWZ0ZXJ3YXJkcy4KPiArCj4gK0FsbCBzdGFuZGFy
ZCBwbHVnaW5zIG11c3Qgc3VjY2Vzc2Z1bGx5IGxvYWQsIG90aGVyd2lzZSBhbiBleGNlcHRpb24g
aXMgdGhyb3duLgo+ICtJZiBhIGN1c3RvbSBwbHVnaW4gZmFpbHMgdG8gbG9hZCwgYSB3YXJuaW5n
IGlzIGVtaXR0ZWQgaW5zdGVhZC4KPiArCj4gKz1jdXQKPiArCj4gK215IHN1YiB0cnlfbG9hZF9w
bHVnaW5zIDogcHJvdG90eXBlKCkgewo+ICsgICAgbXkgQGVycnMgPSAoKTsKPiArCj4gKyAgICBm
b3IgbXkgJHBsdWdpbiAoZ2V0X3N0YW5kYXJkX3BsdWdpbl9uYW1lcygpKSB7Cj4gKwlldmFsIHsK
PiArCSAgICBkb190cnlfbG9hZF9wbHVnaW4obmFtZSA9PiAkcGx1Z2luKTsKPiArCX07Cj4gKwo+
ICsJcHVzaChAZXJycywgJEApIGlmICRAOwo+ICsgICAgfQo+ICsKPiArICAgIGNvbmZlc3MoIkVu
Y291bnRlcmVkIHVuZXhwZWN0ZWQgZXJyb3Iocykgd2hpbGUgbG9hZGluZyBwbHVnaW5zOlxuIiwg
am9pbigiXG4iLCBAZXJycyksICJcblxuLi4uICIpCj4gKwlpZiBzY2FsYXIoQGVycnMpOwo+ICsK
PiArICAgIGZvciBteSAkcGx1Z2luIChnZXRfY3VzdG9tX3BsdWdpbl9uYW1lcygpKSB7Cj4gKwll
dmFsIHsKPiArCSAgICBkb190cnlfbG9hZF9wbHVnaW4obmFtZSA9PiAkcGx1Z2luLCBpc19jdXN0
b20gPT4gMSk7Cj4gKwl9Owo+ICsKPiArCXdhcm4gIkVycm9yIGxvYWRpbmcgc3RvcmFnZSBwbHVn
aW4gXCIkcGx1Z2luXCIgLSAkQCIgaWYgJEA7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuOwo+
ICt9Cj4gKwo+ICs9aGVhZDMgZG9fcHJlX3JlZ2lzdGVyX2NoZWNrX3BsdWdpbiglcGFyYW1zKQo+
ICsKPiArVXNlZCB3aXRoaW4gQzxMPDwgcHJlX3JlZ2lzdGVyX2NoZWNrX3BsdWdpbnMoKXwvInBy
ZV9yZWdpc3Rlcl9jaGVja19wbHVnaW5zKCkiID4+Pgo+ICt0byBwZXJmb3JtIHRoZSBhY3R1YWwg
cHJlLXJlZ2lzdHJhdGlvbiBjaGVja3MgZm9yIHRoZSBwbHVnaW4gZ2l2ZW4gYnkgdGhlIEM8bmFt
ZT4KPiAra2V5Lgo+ICsKPiArICAgIGRvX3ByZV9yZWdpc3Rlcl9jaGVja19wbHVnaW4obmFtZSA9
PiAnUFZFOjpTdG9yYWdlOjpEaXJQbHVnaW4nKTsKPiArCj4gK1RoaXMgY2hlY2tzIHdoZXRoZXIg
dGhlIHBsdWdpbiBpcyBkZXJpdmVkIGZyb20gQzxMPFBWRTo6U3RvcmFnZTo6UGx1Z2luPj4uIElm
IHRoZQo+ICtwbHVnaW4gaXMgYSBjdXN0b20gcGx1Z2luLCBpdHMgQVBJIGNvbmZvcm1hbmNlIGlz
IGFsc28gdmVyaWZpZWQ6Cj4gKwo+ICs9b3Zlcgo+ICsKPiArPWl0ZW0gKiBUaGUgcGx1Z2luIG11
c3QgcHJvdmlkZSBhbiBDPGFwaSgpPiBtZXRob2QgcmV0dXJuaW5nIGl0cyBBUEkgdmVyc2lvbgo+
ICsKPiArPWl0ZW0gKiBJdHMgQVBJIHZlcnNpb24gbXVzdCBub3QgYmUgbmV3ZXIgdGhhbiB0aGUg
Y3VycmVudCBzdG9yYWdlIEFQSSB2ZXJzaW9uCj4gKwo+ICs9aXRlbSAqIEl0cyBBUEkgdmVyc2lv
biBtdXN0IG5vdCBiZSBvbGRlciB0aGFuIHRoZSBzdG9yYWdlIEFQSSBhZ2UgYWxsb3dzCj4gKwo+
ICs9YmFjawo+ICsKPiArPWN1dAo+ICsKPiArbXkgc3ViIGRvX3ByZV9yZWdpc3Rlcl9jaGVja19w
bHVnaW4gOiBwcm90b3R5cGUoJSkgewo+ICsgICAgbXkgKCVwYXJhbXMpID0gQF87Cj4gKwo+ICsg
ICAgbXkgJHBsdWdpbl9uYW1lID0gJHBhcmFtc3tuYW1lfTsKPiArCj4gKyAgICBteSAkcGx1Z2lu
X2luZGV4ID0gJHBsdWdpbl9yZWdpc3Rlcl9zdGF0ZS0+e2luZGV4fTsKPiArCj4gKyAgICBjcm9h
ayAiUGx1Z2luICckcGx1Z2luX25hbWUnIGRvZXMgbm90IGV4aXN0IGluIGluZGV4Igo+ICsJaWYg
IWRlZmluZWQoJHBsdWdpbl9pbmRleC0+eyRwbHVnaW5fbmFtZX0pOwo+ICsKPiArICAgIG15ICRp
c19jdXN0b20gPSAkcGx1Z2luX2luZGV4LT57JHBsdWdpbl9uYW1lfS0+e2lzX2N1c3RvbX07Cj4g
Kwo+ICsgICAgbXkgJGNoZWNrX2Rlcml2ZXNfYmFzZSA9IHN1YiB7Cj4gKwkjIHNvIHRoYXQgd2Ug
bWF5IGNhbGwgbWV0aG9kcyBvbiAkcGx1Z2luX25hbWUKPiArCW5vIHN0cmljdCAncmVmcyc7ICMj
IG5vIGNyaXRpYwo+ICsKPiArCWRpZSAibm90IGRlcml2ZWQgZnJvbSBQVkU6OlN0b3JhZ2U6OlBs
dWdpblxuIgo+ICsJICAgIGlmICEkcGx1Z2luX25hbWUtPmlzYSgnUFZFOjpTdG9yYWdlOjpQbHVn
aW4nKTsKPiArICAgIH07Cj4gKwo+ICsgICAgbXkgJGNoZWNrX3BsdWdpbl9hcGkgPSBzdWIgewo+
ICsJIyBzbyB0aGF0IHdlIG1heSBjYWxsIG1ldGhvZHMgb24gJHBsdWdpbl9uYW1lCj4gKwlubyBz
dHJpY3QgJ3JlZnMnOyAjIyBubyBjcml0aWMKPiArCj4gKwlkaWUgImRvZXMgbm90IHByb3ZpZGUg
YW4gJ2FwaSgpJyBtZXRob2RcbiIKPiArCSAgICBpZiAhJHBsdWdpbl9uYW1lLT5jYW4oJ2FwaScp
Owo+ICsKPiArCW15ICR2ZXJzaW9uID0gJHBsdWdpbl9uYW1lLT5hcGkoKTsKPiArCW15ICRtaW5f
dmVyc2lvbiA9IChBUElWRVIgLSBBUElBR0UpOwo+ICsKPiArCWRpZSAiaW1wbGVtZW50cyBhbiBB
UEkgdmVyc2lvbiBuZXdlciB0aGFuIGN1cnJlbnQgKCR2ZXJzaW9uID4gQHtbQVBJVkVSXX0pXG4i
Cj4gKwkgICAgaWYgJHZlcnNpb24gPiBBUElWRVI7Cj4gKwo+ICsJZGllICJBUEkgdmVyc2lvbiB0
b28gb2xkLCBwbGVhc2UgdXBkYXRlIHRoZSBwbHVnaW4gKCR2ZXJzaW9uIDwgJG1pbl92ZXJzaW9u
KVxuIgo+ICsJICAgIGlmICR2ZXJzaW9uIDwgJG1pbl92ZXJzaW9uOwo+ICsgICAgfTsKPiArCj4g
KyAgICBldmFsIHsKPiArCSRjaGVja19kZXJpdmVzX2Jhc2UtPigpOwo+ICsJJGNoZWNrX3BsdWdp
bl9hcGktPigpIGlmICRpc19jdXN0b207Cj4gKyAgICB9Owo+ICsKPiArICAgIGNyb2FrICJQcmUt
cmVnaXN0cmF0aW9uIGNoZWNrIGZhaWxlZCBmb3IgcGx1Z2luICckcGx1Z2luX25hbWUnIC0gJEAi
IGlmICRAOwo+ICsKPiArICAgICRwbHVnaW5faW5kZXgtPnskcGx1Z2luX25hbWV9LT57aXNfY2hl
Y2tlZH0gPSAxOwo+ICsKPiArICAgIHJldHVybjsKPiArfQo+ICsKPiArPWhlYWQzIHByZV9yZWdp
c3Rlcl9jaGVja19wbHVnaW5zKCkKPiArCj4gK1BlcmZvcm1zIHZhcmlvdXMgcHJlLXJlZ2lzdHJh
dGlvbiBjaGVja3MgZm9yIGFsbCBwbHVnaW5zLgo+ICsKPiArU3RhbmRhcmQgcGx1Z2lucyBtdXN0
IGFsd2F5cyBwYXNzIGFsbCBjaGVja3MuIElmIGEgY3VzdG9tIHBsdWdpbiBmYWlscyBhIGNoZWNr
LAo+ICthIHdhcm5pbmcgaXMgZW1pdHRlZCBpbnN0ZWFkIGFuZCBpdCB3aWxsIG5vdCBiZSByZWdp
c3RlcmVkIGxhdGVyIG9uLgo+ICsKPiArRm9yIG1vcmUgZGV0YWlscyBvbiB3aGljaCBjaGVja3Mg
YXJlIHBlcmZvcm1lZCwgc2VlCj4gK0M8TDw8IGRvX3ByZV9yZWdpc3Rlcl9jaGVja19wbHVnaW4o
KXwvImRvX3ByZV9yZWdpc3Rlcl9jaGVja19wbHVnaW4oJXBhcmFtcykiID4+Pi4KPiArCj4gKz1j
dXQKPiArCj4gK215IHN1YiBwcmVfcmVnaXN0ZXJfY2hlY2tfcGx1Z2lucyA6IHByb3RvdHlwZSgp
IHsKPiArICAgIG15IEBlcnJzID0gKCk7Cj4gKwo+ICsgICAgbXkgQHN0YW5kYXJkX3BsdWdpbnMg
PSBnZXRfaW5kZXhlZF9wbHVnaW5zKGlzX2N1c3RvbSA9PiAwKTsKPiArICAgIGZvciBteSAkcGx1
Z2luIChAc3RhbmRhcmRfcGx1Z2lucykgewo+ICsJZXZhbCB7Cj4gKwkgICAgZG9fcHJlX3JlZ2lz
dGVyX2NoZWNrX3BsdWdpbihuYW1lID0+ICRwbHVnaW4pOwo+ICsJfTsKPiArCj4gKwlwdXNoKEBl
cnJzLCAkQCkgaWYgJEA7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHNjYWxhcihAZXJycykpIHsK
PiArCW15ICRlcnJfbXNnID0gIkVuY291bnRlcmVkIHVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgcGVy
Zm9ybWluZyIKPiArCSAgICAuICIgcHJlLXJlZ2lzdHJhdGlvbiBjaGVjayBmb3IgaW5idWlsdCBw
bHVnaW5zOlxuIjsKPiArCj4gKwljb25mZXNzKCRlcnJfbXNnLCBqb2luKCJcbiIsIEBlcnJzKSwg
IlxuXG4uLi4gIik7Cj4gKyAgICB9Cj4gKwo+ICsgICAgbXkgQGN1c3RvbV9wbHVnaW5zID0gZ2V0
X2luZGV4ZWRfcGx1Z2lucyhpc19jdXN0b20gPT4gMSk7Cj4gKyAgICBmb3IgbXkgJHBsdWdpbiAo
QGN1c3RvbV9wbHVnaW5zKSB7Cj4gKwlldmFsIHsKPiArCSAgICBkb19wcmVfcmVnaXN0ZXJfY2hl
Y2tfcGx1Z2luKG5hbWUgPT4gJHBsdWdpbik7Cj4gKwl9Owo+ICsKPiArCWlmICgkQCkgewo+ICsJ
ICAgIHdhcm4gIkVuY291bnRlcmVkIHVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgcGVyZm9ybWluZyBw
cmUtcmVnaXN0cmF0aW9uIgo+ICsJCS4gIiBjaGVjayBmb3IgY3VzdG9tIHBsdWdpbiBcIiRwbHVn
aW5cIjpcbiRAXG4iOwo+ICsJICAgIHdhcm4gIlBsdWdpbiB3aWxsIG5vdCBiZSByZWdpc3RlcmVk
LlxuIjsKPiArCX0KPiArICAgIH0KPiArCj4gKyAgICByZXR1cm47Cj4gK30KPiArCj4gKz1oZWFk
MyB0cnlfcmVnaXN0ZXJfcGx1Z2lucygpCj4gKwo+ICtBdHRlbXB0cyB0byByZWdpc3RlciBhbGwg
cGx1Z2lucyBvZiB0aGUgcGx1Z2luIGluZGV4IGZvciB3aGljaCB0aGUKPiArTDxwcmUtcmVnaXN0
cmF0aW9uIGNoZWNrfC8icHJlX3JlZ2lzdGVyX2NoZWNrX3BsdWdpbnMoKSI+IHdhcyBzdWNjZXNz
ZnVsLCB3aXRoCj4gK3N0YW5kYXJkIHBsdWdpbnMgYmVpbmcgcmVnaXN0ZXJlZCBmaXJzdCBhbmQg
Y3VzdG9tIHBsdWdpbnMgYWZ0ZXJ3YXJkcy4KPiArCj4gK0luIGRldGFpbCwgZm9yIGVhY2ggcGx1
Z2luLCB0aGUgQzxpbXBvcnQoKT4gc3Vicm91dGluZSBpcyBmaXJzdCBydW4sIGZvbGxvd2VkCj4g
K2J5IEM8TDw8IHJlZ2lzdGVyKCl8UFZFOjpTZWN0aW9uQ29uZmlnL3JlZ2lzdGVyID4+Pi4KPiAr
Cj4gK0ZvciBhbGwgc3RhbmRhcmQgcGx1Z2lucyBib3RoIGludm9jYXRpb25zIG11c3Qgc3VjY2Vl
ZCwgb3RoZXJ3aXNlIGFuIGV4Y2VwdGlvbgo+ICtpcyB0aHJvd24uIElmIGEgY2FsbCB0byBlaXRo
ZXIgc3Vicm91dGluZSBmYWlscyBmb3IgYSBjdXN0b20gcGx1Z2luLCBhIHdhcm5pbmcKPiAraXMg
ZW1pdHRlZCBpbnN0ZWFkIGFuZCB0aGUgY3VzdG9tIHBsdWdpbiByZW1haW5zIHVucmVnaXN0ZXJl
ZC4KPiArCj4gKz1jdXQKPiArCj4gK215IHN1YiB0cnlfcmVnaXN0ZXJfcGx1Z2lucyA6IHByb3Rv
dHlwZSgpIHsKPiArICAgIG15IEBlcnJzID0gKCk7Cj4gKwo+ICsgICAgbXkgJHBsdWdpbl9pbmRl
eCA9ICRwbHVnaW5fcmVnaXN0ZXJfc3RhdGUtPntpbmRleH07Cj4gKwo+ICsgICAgbXkgJHRyeV9p
bXBvcnQgPSBzdWIgewo+ICsJbXkgKCRwbHVnaW5fbmFtZSkgPSBAXzsKPiArCj4gKwkjIHNvIHRo
YXQgd2UgbWF5IGNhbGwgbWV0aG9kcyBvbiAkcGx1Z2luX25hbWUKPiArCW5vIHN0cmljdCAncmVm
cyc7ICMjIG5vIGNyaXRpYwo+ICsJJHBsdWdpbl9uYW1lLT5pbXBvcnQoKTsKClRoaXMgbmVlZHMg
dG8gaGFwcGVuIGluIGB0cnlfbG9hZF9wbHVnaW5zYCBvcgpgcHJlX3JlZ2lzdGVyX2NoZWNrX3Bs
dWdpbnNgLCBvdGhlcndpc2UgYC0+aXNhKClgIHdvbid0IHdvcmsuCgo+ICsgICAgfTsKPiArCj4g
KyAgICBteSAkdHJ5X3JlZ2lzdGVyID0gc3ViIHsKPiArCW15ICgkcGx1Z2luX25hbWUpID0gQF87
Cj4gKwo+ICsJIyBzbyB0aGF0IHdlIG1heSBjYWxsIG1ldGhvZHMgb24gJHBsdWdpbl9uYW1lCj4g
KwlubyBzdHJpY3QgJ3JlZnMnOyAjIyBubyBjcml0aWMKPiArCSRwbHVnaW5fbmFtZS0+cmVnaXN0
ZXIoKTsKPiArCj4gKwkkcGx1Z2luX2luZGV4LT57JHBsdWdpbl9uYW1lfS0+e2lzX3JlZ2lzdGVy
ZWR9ID0gMTsKPiArICAgIH07Cj4gKwo+ICsgICAgbXkgQHN0YW5kYXJkX3BsdWdpbnMgPSBnZXRf
aW5kZXhlZF9wbHVnaW5zKGlzX2N1c3RvbSA9PiAwLCBpc19jaGVja2VkID0+IDEpOwo+ICsgICAg
Zm9yIG15ICRwbHVnaW4gKEBzdGFuZGFyZF9wbHVnaW5zKSB7Cj4gKwlldmFsIHsKPiArCSAgICAk
dHJ5X2ltcG9ydC0+KCRwbHVnaW4pOwo+ICsJfTsKPiArCj4gKwlpZiAoJEApIHsKPiArCSAgICBw
dXNoKEBlcnJzLCAiRW5jb3VudGVyZWQgdW5leHBlY3RlZCBlcnJvciB3aGlsZSBydW5uaW5nICck
cGx1Z2luXC0+aW1wb3J0KCknIC0gJEAiKTsKPiArCSAgICBuZXh0Owo+ICsJfQo+ICsKPiArCWV2
YWwgewo+ICsJICAgICR0cnlfcmVnaXN0ZXItPigkcGx1Z2luKTsKPiArCX07Cj4gKwo+ICsJaWYg
KCRAKSB7Cj4gKwkgICAgcHVzaChAZXJycywgIkVuY291bnRlcmVkIHVuZXhwZWN0ZWQgZXJyb3Ig
d2hpbGUgcnVubmluZyAnJHBsdWdpblwtPnJlZ2lzdGVyKCknIC0gJEAiKTsKPiArCSAgICBuZXh0
Owo+ICsJfQo+ICsgICAgfQo+ICsKPiArICAgIGNvbmZlc3Mgam9pbigiXG5cbiIsIEBlcnJzLCAi
XG5cbi4uLiAiKSBpZiBzY2FsYXIoQGVycnMpOwo+ICsKPiArICAgIG15IEBjdXN0b21fcGx1Z2lu
cyA9IGdldF9pbmRleGVkX3BsdWdpbnMoaXNfY3VzdG9tID0+IDEsIGlzX2NoZWNrZWQgPT4gMSk7
Cj4gKyAgICBmb3IgbXkgJHBsdWdpbiAoQGN1c3RvbV9wbHVnaW5zKSB7Cj4gKwlldmFsIHsKPiAr
CSAgICAkdHJ5X2ltcG9ydC0+KCRwbHVnaW4pOwo+ICsJfTsKPiArCj4gKwlpZiAoJEApIHsKPiAr
CSAgICBjYXJwICJGYWlsZWQgdG8gcnVuICdpbXBvcnQnIG9uIGN1c3RvbSBwbHVnaW4gJyRwbHVn
aW4nIC0gJEAiOwo+ICsJICAgIGNhcnAgIlBsZWFzZSBjaGVjayBpZiB0aGUgcGx1Z2luIGlzIGlu
c3RhbGxlZCBjb3JyZWN0bHkuIjsKPiArCSAgICBjYXJwICJDb250aW51aW5nIHRvIHJlZ2lzdGVy
IHJlbWFpbmluZyBjdXN0b20gcGx1Z2lucyAoaWYgYW55KS4iOwo+ICsKPiArCSAgICBuZXh0Owo+
ICsJfQo+ICsKPiArCWV2YWwgewo+ICsJICAgICR0cnlfcmVnaXN0ZXItPigkcGx1Z2luKTsKPiAr
CX07Cj4gKwo+ICsJaWYgKCRAKSB7Cj4gKwkgICAgY2FycCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGN1
c3RvbSBwbHVnaW4gJyRwbHVnaW4nIC0gJEAiOwo+ICsJICAgIGNhcnAgIlBsZWFzZSB2ZXJpZnkg
d2hldGhlciB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZCBjb3JyZWN0bHkuIjsKPiArCSAgICBjYXJw
ICJDb250aW51aW5nIHRvIHJlZ2lzdGVyIHJlbWFpbmluZyBjdXN0b20gcGx1Z2lucyAoaWYgYW55
KS4iOwo+ICsKPiArCSAgICBuZXh0Owo+ICsJfQo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybjsK
PiArfQo+ICsKPiArPWhlYWQzIHBvc3RfcmVnaXN0ZXJfY2hlY2tfcGx1Z2lucygpCj4gKwo+ICtV
c2VkIHRvIHBlcmZvcm0gdmFyaW91cyBjaGVja3Mgb24gZWFjaCBwbHVnaW4gYWZ0ZXIgdGhlIHBs
dWdpbnMnIHJlZ2lzdHJhdGlvbi4KPiArCj4gK1RoaXMgc3Vicm91dGluZSBjdXJyZW50bHkgb25s
eSBlbWl0cyBhIHdhcm5pbmcgaWYgYSBjdXN0b20gcGx1Z2luJ3MgQVBJIHZlcnNpb24KPiAraXMg
b2xkZXIgdGhhbiB0aGUgY3VycmVudCBvbmUuCj4gKwo+ICs9Y3V0Cj4gKwo+ICtteSBzdWIgcG9z
dF9yZWdpc3Rlcl9jaGVja19wbHVnaW5zIDogcHJvdG90eXBlKCkgewo+ICsgICAgbXkgQGN1c3Rv
bV9wbHVnaW5zID0gZ2V0X2luZGV4ZWRfcGx1Z2lucyhpc19jdXN0b20gPT4gMSwgaXNfcmVnaXN0
ZXJlZCA9PiAxKTsKPiArICAgIGZvciBteSAkcGx1Z2luIChAY3VzdG9tX3BsdWdpbnMpIHsKPiAr
CSMgc28gdGhhdCB3ZSBtYXkgY2FsbCBtZXRob2RzIG9uICRwbHVnaW4KPiArCW5vIHN0cmljdCAn
cmVmcyc7ICMjIG5vIGNyaXRpYwo+ICsKPiArCW15ICR2ZXJzaW9uID0gJHBsdWdpbi0+YXBpKCk7
Cj4gKwl3YXJuICJQbHVnaW4gXCIkcGx1Z2luXCIgaXMgaW1wbGVtZW50aW5nIGFuIG9sZGVyIHN0
b3JhZ2UgQVBJLCBhbiB1cGdyYWRlIGlzIHJlY29tbWVuZGVkXG4iCj4gKwkgICAgaWYgJHZlcnNp
b24gIT0gQVBJVkVSOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybjsKPiArfQo+ICsKPiArIyBO
T1RFOiBUaGlzIGlzICpub3QqIGxpa2UgRXhwb3J0ZXIncyBpbXBvcnQgKHRoYXQgeW91IGdldCB3
aXRoIGUuZy4gYHVzZSBwYXJlbnQgcXcoRXhwb3J0ZXIpO2ApCj4gKyMgd2hpY2ggc3VwcG9ydHMg
QEVYUE9SVF9PSyBldGMuCj4gKyMKPiArIyBJZiB0aGVyZSBpcyBldmVyIGEgbmVlZCB0byBzdXBw
b3J0IGV4cG9ydGluZyBzdWJyb3V0aW5lcyAodmlhIGBFeHBvcnRlcmApLAo+ICsjIHNlZSB0aGUg
Zm9sbG93aW5nOiBodHRwczovL3Blcmxkb2MucGVybC5vcmcvRXhwb3J0ZXIjRXhwb3J0aW5nLVdp
dGhvdXQtVXNpbmctRXhwb3J0ZXIncy1pbXBvcnQtTWV0aG9kCj4gKyMgQmV3YXJlIHRoYXQgdGhp
cyByZXF1aXJlcyB5b3UgdG8gcmVtb3ZlIGFueSBrZXlzIHRoYXQgb3VnaHQgbm90IGJlIHBhc3Nl
ZAo+ICsjIHRvIGV4cG9ydGVyIGZyb20gQF8uCj4gKwo+ICtzdWIgaW1wb3J0IHsKPiArICAgIG15
ICgkcGFja2FnZSwgJXBhcmFtcykgPSBAXzsKPiArCj4gKyAgICAjIHRoaXMgc3ViIG1heSBiZSBj
YWxsZWQgbW9yZSB0aGFuIG9uY2UsIHNvIGF2b2lkIHJlZ2lzdGVyaW5nIHBsdWdpbnMgYWdhaW4K
PiArICAgIGlmICgkcGx1Z2luX3JlZ2lzdGVyX3N0YXRlLT57cGx1Z2luc19pbml0aWFsaXNlZH0g
PT0gMSkgewo+ICsJcmV0dXJuOwo+ICsgICAgfQo+ICsKPiArICAgIHRyeV9sb2FkX3BsdWdpbnMo
KTsKPiArICAgIHByZV9yZWdpc3Rlcl9jaGVja19wbHVnaW5zKCk7Cj4gKyAgICB0cnlfcmVnaXN0
ZXJfcGx1Z2lucygpOwo+ICsgICAgcG9zdF9yZWdpc3Rlcl9jaGVja19wbHVnaW5zKCk7Cj4gKwo+
ICsgICAgUFZFOjpTdG9yYWdlOjpQbHVnaW4tPmluaXQoKTsKPiArICAgICRwbHVnaW5fcmVnaXN0
ZXJfc3RhdGUtPntwbHVnaW5zX2luaXRpYWxpc2VkfSA9IDE7Cj4gKwo+ICsgICAgcmV0dXJuOwo+
ICt9Cj4gKwo+ICAjICBQVkU6OlN0b3JhZ2UgdXRpbGl0eSBmdW5jdGlvbnMKPiAgCj4gIHN1YiBj
b25maWcgewo+IC0tIAo+IDIuMzkuNQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCnB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3RzLnBy
b3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3Rp
bmZvL3B2ZS1kZXZlbAo=