From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <pdm-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 392D71FF168
	for <inbox@lore.proxmox.com>; Tue,  4 Feb 2025 10:56:04 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 0D8121109B;
	Tue,  4 Feb 2025 10:56:04 +0100 (CET)
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
To: pdm-devel@lists.proxmox.com
Date: Tue,  4 Feb 2025 10:55:51 +0100
Message-Id: <20250204095554.39501-5-w.bumiller@proxmox.com>
X-Mailer: git-send-email 2.39.5
In-Reply-To: <20250204095554.39501-1-w.bumiller@proxmox.com>
References: <20250204095554.39501-1-w.bumiller@proxmox.com>
MIME-Version: 1.0
X-SPAM-LEVEL: Spam detection results:  0
 AWL 0.084 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: [pdm-devel] [PATCH datacenter-manager 4/7] server: cache pve node
 reachability and names
X-BeenThere: pdm-devel@lists.proxmox.com
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Proxmox Datacenter Manager development discussion
 <pdm-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pdm-devel>, 
 <mailto:pdm-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pdm-devel/>
List-Post: <mailto:pdm-devel@lists.proxmox.com>
List-Help: <mailto:pdm-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel>, 
 <mailto:pdm-devel-request@lists.proxmox.com?subject=subscribe>
Reply-To: Proxmox Datacenter Manager development discussion
 <pdm-devel@lists.proxmox.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: pdm-devel-bounces@lists.proxmox.com
Sender: "pdm-devel" <pdm-devel-bounces@lists.proxmox.com>

QWRkIGEgYHJlbW90ZV9jYWNoZWAgbW9kdWxlIHRvIGFjY2VzcyB0aGUgY2FjaGUgd2hpY2ggbWFw
cwoocmVtb3RlLGhvc3QpIHRvIGEgc3RydWN0IGhvbGRpbmcgdGhlIG5vZGUgbmFtZSBhbmQgYSAi
cmVhY2hhYmxlIgpib29sZWFuLiBUaGlzIGNhbiBlIHVzZWQgdG8gY29ubmVjdCB0byBzcGVjaWZp
YyBub2RlcyBvciBza2lwIG5vZGVzCmtub3duIHRvIGJlIGN1cnJlbnRseSB1bnJlYWNoYWJsZSAo
YWx0aG91Z2ggdGhlIGxhdHRlciBwYXJ0IGlzIG5vdApjdXJyZW50bHkgaW1wbGVtZW50ZWQpLgoK
VGhlIENsaWVudEZhY3RvcnkgdHJhaXQgZ2FpbnMgaGVscGVycyB0byBjb25uZWN0IHRvIHNwZWNp
ZmljIG5vZGVzLgoKVGhlIHVucHJpdmlsZWdlZCBBUEkgZ2V0cyBhIGB0YXNrc2Agc3VibW9kdWxl
IHdpdGggYSB0YXNrIHdoaWNoCmZpbGxzIHRoZSBub2RlIGNhY2hlIGFuZCB3YXRjaGVzIHRoZSBy
ZW1vdGUgY29uZmlnIGZvciB1cGRhdGVzICh2aWEKdGhlIGNvbmZpZyB2ZXJzaW9uIGNhY2hlKS4K
ClNpZ25lZC1vZmYtYnk6IFdvbGZnYW5nIEJ1bWlsbGVyIDx3LmJ1bWlsbGVyQHByb3htb3guY29t
PgotLS0KIGxpYi9wZG0tY29uZmlnL3NyYy9jb25maWdfdmVyc2lvbl9jYWNoZS5ycyAgICB8ICAz
MyArLQogLi4uL21haW4ucnN9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAz
ICsKIC4uLi9iaW4vcHJveG1veC1kYXRhY2VudGVyLWFwaS90YXNrcy9tb2QucnMgICB8ICAgMSAr
CiAuLi4vdGFza3MvcmVtb3RlX25vZGVfbWFwcGluZy5ycyAgICAgICAgICAgICAgfCAyMjYgKysr
KysrKysrKysrKysKIHNlcnZlci9zcmMvY29ubmVjdGlvbi5ycyAgICAgICAgICAgICAgICAgICAg
ICB8ICAzMiArKwogc2VydmVyL3NyYy9saWIucnMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAxICsKIHNlcnZlci9zcmMvcmVtb3RlX2NhY2hlL21vZC5ycyAgICAgICAgICAgICAgICB8
IDI4NSArKysrKysrKysrKysrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgNTgwIGluc2VydGlvbnMo
KyksIDEgZGVsZXRpb24oLSkKIHJlbmFtZSBzZXJ2ZXIvc3JjL2Jpbi97cHJveG1veC1kYXRhY2Vu
dGVyLWFwaS5ycyA9PiBwcm94bW94LWRhdGFjZW50ZXItYXBpL21haW4ucnN9ICg5OSUpCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc2VydmVyL3NyYy9iaW4vcHJveG1veC1kYXRhY2VudGVyLWFwaS90YXNr
cy9tb2QucnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzZXJ2ZXIvc3JjL2Jpbi9wcm94bW94LWRhdGFj
ZW50ZXItYXBpL3Rhc2tzL3JlbW90ZV9ub2RlX21hcHBpbmcucnMKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzZXJ2ZXIvc3JjL3JlbW90ZV9jYWNoZS9tb2QucnMKCmRpZmYgLS1naXQgYS9saWIvcGRtLWNv
bmZpZy9zcmMvY29uZmlnX3ZlcnNpb25fY2FjaGUucnMgYi9saWIvcGRtLWNvbmZpZy9zcmMvY29u
ZmlnX3ZlcnNpb25fY2FjaGUucnMKaW5kZXggYjRhNDdhOC4uNWM0YjYxYSAxMDA2NDQKLS0tIGEv
bGliL3BkbS1jb25maWcvc3JjL2NvbmZpZ192ZXJzaW9uX2NhY2hlLnJzCisrKyBiL2xpYi9wZG0t
Y29uZmlnL3NyYy9jb25maWdfdmVyc2lvbl9jYWNoZS5ycwpAQCAtMjUsNiArMjUsOCBAQCBzdHJ1
Y3QgQ29uZmlnVmVyc2lvbkNhY2hlRGF0YUlubmVyIHsKICAgICB1c2VyX2NhY2hlX2dlbmVyYXRp
b246IEF0b21pY1VzaXplLAogICAgIC8vIFRyYWZmaWMgY29udHJvbCAodHJhZmZpYy1jb250cm9s
LmNmZykgZ2VuZXJhdGlvbi92ZXJzaW9uLgogICAgIHRyYWZmaWNfY29udHJvbF9nZW5lcmF0aW9u
OiBBdG9taWNVc2l6ZSwKKyAgICAvLyBUcmFja3MgdXBkYXRlcyB0byB0aGUgcmVtb3RlL2hvc3Ru
YW1lL25vZGVuYW1lIG1hcHBpbmcgY2FjaGUuCisgICAgcmVtb3RlX21hcHBpbmdfY2FjaGU6IEF0
b21pY1VzaXplLAogICAgIC8vIEFkZCBmdXJ0aGVyIGF0b21pY3MgaGVyZQogfQogCkBAIC04MSwx
MSArODMsMjMgQEAgcHViIHN0cnVjdCBDb25maWdWZXJzaW9uQ2FjaGUgewogc3RhdGljIElOU1RB
TkNFOiBPbmNlQ2VsbDxBcmM8Q29uZmlnVmVyc2lvbkNhY2hlPj4gPSBPbmNlQ2VsbDo6bmV3KCk7
CiAKIGltcGwgQ29uZmlnVmVyc2lvbkNhY2hlIHsKLSAgICAvLy8gT3BlbiB0aGUgbWVtb3J5IGJh
c2VkIGNvbW11bmljYXRpb24gY2hhbm5lbCBzaW5nbGV0b24uCisgICAgLy8vIE9wZW4gdGhlIG1l
bW9yeSBiYWNrZWQgdmVyc2lvbiBjYWNoZS4KICAgICBwdWIgZm4gbmV3KCkgLT4gUmVzdWx0PEFy
YzxTZWxmPiwgRXJyb3I+IHsKICAgICAgICAgSU5TVEFOQ0UuZ2V0X29yX3RyeV9pbml0KFNlbGY6
Om9wZW4pLmNsb25lZCgpCiAgICAgfQogCisgICAgLy8vIENvbnZlbmllbmNlIG1ldGhvZCB0byBj
YWxsIFtgQ29uZmlnVmVyc2lvbkNhY2hlOjpuZXdgXSB3aGlsZSB0dXJuaW5nIHRoZSBlcnJvciBp
bnRvIGEgbG9nCisgICAgLy8vIG1lc3NhZ2UuCisgICAgcHViIGZuIG5ld19sb2dfZXJyb3IoKSAt
PiBPcHRpb248QXJjPFNlbGY+PiB7CisgICAgICAgIG1hdGNoIFNlbGY6Om5ldygpIHsKKyAgICAg
ICAgICAgIE9rKHRoaXMpID0+IFNvbWUodGhpcyksCisgICAgICAgICAgICBFcnIoZXJyKSA9PiB7
CisgICAgICAgICAgICAgICAgbG9nOjplcnJvciEoImZhaWxlZCB0byBvcGVuIGNvbmZpZyB2ZXJz
aW9uIGNhY2hlIC0ge2Vycjo/fSIpOworICAgICAgICAgICAgICAgIE5vbmUKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIEFjdHVhbCB3b3JrIG9mIGBuZXdgOgogICAg
IGZuIG9wZW4oKSAtPiBSZXN1bHQ8QXJjPFNlbGY+LCBFcnJvcj4gewogICAgICAgICBsZXQgdXNl
ciA9IGNyYXRlOjphcGlfdXNlcigpPzsKQEAgLTE0MSw0ICsxNTUsMjEgQEAgaW1wbCBDb25maWdW
ZXJzaW9uQ2FjaGUgewogICAgICAgICAgICAgLnRyYWZmaWNfY29udHJvbF9nZW5lcmF0aW9uCiAg
ICAgICAgICAgICAuZmV0Y2hfYWRkKDEsIE9yZGVyaW5nOjpBY3FSZWwpOwogICAgIH0KKworICAg
IC8vLyBSZXR1cm4gdGhlIGN1cnJlbnQgcmVtb3RlIG1hcHBpbmcgY2FjaGUgZ2VuZXJhdGlvbi4K
KyAgICBwdWIgZm4gcmVtb3RlX21hcHBpbmdfY2FjaGUoJnNlbGYpIC0+IHVzaXplIHsKKyAgICAg
ICAgc2VsZi5zaG1lbQorICAgICAgICAgICAgLmRhdGEoKQorICAgICAgICAgICAgLnJlbW90ZV9t
YXBwaW5nX2NhY2hlCisgICAgICAgICAgICAubG9hZChPcmRlcmluZzo6UmVsYXhlZCkKKyAgICB9
CisKKyAgICAvLy8gSW5jcmVhc2UgdGhlIHJlbW90ZSBtYXBwaW5nIGNhY2hlIG51bWJlci4KKyAg
ICBwdWIgZm4gaW5jcmVhc2VfcmVtb3RlX21hcHBpbmdfY2FjaGUoJnNlbGYpIC0+IHVzaXplIHsK
KyAgICAgICAgc2VsZi5zaG1lbQorICAgICAgICAgICAgLmRhdGEoKQorICAgICAgICAgICAgLnJl
bW90ZV9tYXBwaW5nX2NhY2hlCisgICAgICAgICAgICAuZmV0Y2hfYWRkKDEsIE9yZGVyaW5nOjpS
ZWxheGVkKQorICAgICAgICAgICAgKyAxCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvc2VydmVyL3Ny
Yy9iaW4vcHJveG1veC1kYXRhY2VudGVyLWFwaS5ycyBiL3NlcnZlci9zcmMvYmluL3Byb3htb3gt
ZGF0YWNlbnRlci1hcGkvbWFpbi5ycwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBz
ZXJ2ZXIvc3JjL2Jpbi9wcm94bW94LWRhdGFjZW50ZXItYXBpLnJzCnJlbmFtZSB0byBzZXJ2ZXIv
c3JjL2Jpbi9wcm94bW94LWRhdGFjZW50ZXItYXBpL21haW4ucnMKaW5kZXggYTc5MDk0ZC4uMjU4
NTJjOCAxMDA2NDQKLS0tIGEvc2VydmVyL3NyYy9iaW4vcHJveG1veC1kYXRhY2VudGVyLWFwaS5y
cworKysgYi9zZXJ2ZXIvc3JjL2Jpbi9wcm94bW94LWRhdGFjZW50ZXItYXBpL21haW4ucnMKQEAg
LTMxLDYgKzMxLDggQEAgdXNlIHNlcnZlcjo6bWV0cmljX2NvbGxlY3Rpb247CiB1c2Ugc2VydmVy
OjpyZXNvdXJjZV9jYWNoZTsKIHVzZSBzZXJ2ZXI6OnRhc2tfdXRpbHM7CiAKK21vZCB0YXNrczsK
KwogcHViIGNvbnN0IFBST1hNT1hfQkFDS1VQX1RDUF9LRUVQQUxJVkVfVElNRTogdTMyID0gNSAq
IDYwOwogCiBjb25zdCBQRE1fTElTVEVOX0FERFI6IFNvY2tldEFkZHIgPSBTb2NrZXRBZGRyOjpu
ZXcoCkBAIC0yODcsNiArMjg5LDcgQEAgYXN5bmMgZm4gcnVuKGRlYnVnOiBib29sKSAtPiBSZXN1
bHQ8KCksIEVycm9yPiB7CiAKICAgICBzdGFydF90YXNrX3NjaGVkdWxlcigpOwogICAgIG1ldHJp
Y19jb2xsZWN0aW9uOjpzdGFydF90YXNrKCk7CisgICAgdGFza3M6OnJlbW90ZV9ub2RlX21hcHBp
bmc6OnN0YXJ0X3Rhc2soKTsKICAgICByZXNvdXJjZV9jYWNoZTo6c3RhcnRfdGFzaygpOwogCiAg
ICAgc2VydmVyLmF3YWl0PzsKZGlmZiAtLWdpdCBhL3NlcnZlci9zcmMvYmluL3Byb3htb3gtZGF0
YWNlbnRlci1hcGkvdGFza3MvbW9kLnJzIGIvc2VydmVyL3NyYy9iaW4vcHJveG1veC1kYXRhY2Vu
dGVyLWFwaS90YXNrcy9tb2QucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZTZlYWQ4OAotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZlci9zcmMvYmluL3Byb3htb3gtZGF0YWNl
bnRlci1hcGkvdGFza3MvbW9kLnJzCkBAIC0wLDAgKzEgQEAKK3B1YiBtb2QgcmVtb3RlX25vZGVf
bWFwcGluZzsKZGlmZiAtLWdpdCBhL3NlcnZlci9zcmMvYmluL3Byb3htb3gtZGF0YWNlbnRlci1h
cGkvdGFza3MvcmVtb3RlX25vZGVfbWFwcGluZy5ycyBiL3NlcnZlci9zcmMvYmluL3Byb3htb3gt
ZGF0YWNlbnRlci1hcGkvdGFza3MvcmVtb3RlX25vZGVfbWFwcGluZy5ycwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTEyMzY1Ci0tLSAvZGV2L251bGwKKysrIGIvc2VydmVy
L3NyYy9iaW4vcHJveG1veC1kYXRhY2VudGVyLWFwaS90YXNrcy9yZW1vdGVfbm9kZV9tYXBwaW5n
LnJzCkBAIC0wLDAgKzEsMjI2IEBACisvLyEgUFZFIHJlbW90ZXMgaGF2ZSBtdWx0aXBsZSBub2Rl
cyB3aGljaCBoYXZlIG5hbWVzIHdlIGNhbm5vdCBuZWNlc3NhcmlseSBpbmZlciBmcm9tIHRoZQor
Ly8hICJob3N0bmFtZSIgZmllbGQsIHNpbmNlIHRoYXQgbWlnaHQgYmUgYSBkaWZmZXJlbnQgYWRk
cmVzcywgcG90ZW50aWFsbHkgd2l0aCBhIHBvcnQuCisvLyEKKy8vISBXZSBhbHNvIGRvIG5vdCB3
YW50IHVzZXJzIHRvIGhhdmUgdG8gbWFpbnRhaW4gdGhlIFBETSBob3N0L25vZGUtbmFtZSBjb21i
aW5hdGlvbnMgKGluIGNhc2UgdGhleQorLy8hIHJlbmFtZSBvciByZWluc3RhbGwgbm9kZXMpLiBS
ZW5hbWluZyB3b3VsZCBicmVhayB0aGUgUERNIGNvbmZpZywgcmVpbnN0YWxsaW5nIHdvdWxkIGJy
ZWFrIGVnLiBhCisvLyEgIm1hY2hpbmUtaWQiIGJhc2VkIG1hcHBpbmcuCisvLyEKKy8vISBXZSBh
bHNvIGNhbm5vdCByZWx5IGluIHRoZSBUTFMgZmluZ2VycHJpbnRzLCBiZWNhdXNlIGEgd2hvbGUg
Y2x1c3RlciBjb3VsZCBwb3RlbnRpYWxseSB1c2UgYQorLy8hIHNpbmdsZSB3aWxkY2FyZCBjZXJ0
aWZpY2F0ZS4KKy8vIQorLy8hIEluc3RlYWQsIHdlIG1haW50YWluIGEgY2FjaGVkIG1hcHBpbmcg
b2YgYGFkZHJlc3Mg4oaUIG5hbWVgIGluIGAvdmFyYCwgd2hpY2ggZ2V0cyBwb2xsZWQKKy8vISBy
ZWd1bGFybHkuCisvLyEgRm9yIFBWRSB3ZSBjYW4gcXVlcnkgYW4gYWRkcmVzcycgYC9jbHVzdGVy
L3N0YXR1c2AgYW5kIGxvb2sgZm9yIGFuIGVudHJ5IG1hcmtlZCBhcyBgbG9jYWw6MWAuCisvLyEg
TGF0ZXIgdGhpcyBtaWdodCBiZSBjaGFuZ2VkIHRvIGxvb2tpbmcgZm9yIHRoZSBub2RlIG5hbWUg
aW4gdGhlIHJlc3VsdCBvZgorLy8hIGAvbm9kZXMvbG9jYWxob3N0L3N0YXR1c2AgLSBvbmNlIHRo
aXMgaXMgaW1wbGVtZW50ZWQgYW5kIHJvbGxlZCBvdXQgbG9uZyBlbm91Z2ggaW4gUFZFLgorCit1
c2Ugc3RkOjpmdXR1cmU6OkZ1dHVyZTsKK3VzZSBzdGQ6OnBpbjo6cGluOworCit1c2UgYW55aG93
Ojp7YmFpbCwgRXJyb3J9OwordXNlIHRva2lvOjp0YXNrOjpKb2luSGFuZGxlOworCit1c2UgcHJv
eG1veF9jb25maWdfZGlnZXN0OjpDb25maWdEaWdlc3Q7Cit1c2UgcHJveG1veF9zZWN0aW9uX2Nv
bmZpZzo6dHlwZWQ6OlNlY3Rpb25Db25maWdEYXRhOworCit1c2UgcGRtX2FwaV90eXBlczo6cmVt
b3Rlczo6e1JlbW90ZSwgUmVtb3RlVHlwZX07CisKK3VzZSBzZXJ2ZXI6OnJlbW90ZV9jYWNoZTo6
e3NlbGYsIFJlbW90ZU1hcHBpbmdDYWNoZX07Cit1c2Ugc2VydmVyOjp0YXNrX3V0aWxzOworCitj
b25zdCBDT05GSUdfUE9MTF9JTlRFUlZBTDogdTY0ID0gNjA7CisKK2ZuIHNwYXduX2Fib3J0ZWRf
b25fc2h1dGRvd248Rj4oZnV0dXJlOiBGKSAtPiBKb2luSGFuZGxlPCgpPgord2hlcmUKKyAgICBG
OiBGdXR1cmUgKyBTZW5kICsgJ3N0YXRpYywKK3sKKyAgICB0b2tpbzo6c3Bhd24oYXN5bmMgbW92
ZSB7CisgICAgICAgIC8vIFRPRE86IFRoZSB3cmFwcGluZyBpbiBhIHNlbGVjdChzaHV0ZG93bl9m
dXR1cmUsIGZ1dCkgc2hvdWxkIHByb2JhYmx5IGJlIGEgaGVscGVyIGluCisgICAgICAgIC8vIGBw
cm94bW94X2RhZW1vbmAuCisgICAgICAgIGxldCBmdXR1cmUgPSBwaW4hKGZ1dHVyZSk7CisgICAg
ICAgIGxldCBhYm9ydF9mdXR1cmUgPSBwaW4hKHByb3htb3hfZGFlbW9uOjpzaHV0ZG93bl9mdXR1
cmUoKSk7CisgICAgICAgIGZ1dHVyZXM6OmZ1dHVyZTo6c2VsZWN0KGZ1dHVyZSwgYWJvcnRfZnV0
dXJlKS5hd2FpdDsKKyAgICB9KQorfQorCitwdWIgZm4gc3RhcnRfdGFzaygpIHsKKyAgICBzcGF3
bl9hYm9ydGVkX29uX3NodXRkb3duKENhY2hpbmdUYXNrOjpkZWZhdWx0KCkucnVuKCkpOworfQor
Cithc3luYyBmbiBwb2xsX2ludGVydmFsKCkgeworICAgIGxldCBkZWxheV90YXJnZXQgPSB0YXNr
X3V0aWxzOjpuZXh0X2FsaWduZWRfaW5zdGFudChDT05GSUdfUE9MTF9JTlRFUlZBTCk7CisgICAg
dG9raW86OnRpbWU6OnNsZWVwX3VudGlsKHRva2lvOjp0aW1lOjpJbnN0YW50Ojpmcm9tX3N0ZChk
ZWxheV90YXJnZXQpKS5hd2FpdDsKK30KKworI1tkZXJpdmUoRGVmYXVsdCldCitzdHJ1Y3QgQ2Fj
aGluZ1Rhc2sgeworICAgIGN1cnJlbnRfbmFtZV90YXNrOiBPcHRpb248Sm9pbkhhbmRsZTwoKT4+
LAorICAgIGxhc3RfY29uZmlnX2RpZ2VzdDogT3B0aW9uPENvbmZpZ0RpZ2VzdD4sCit9CisKK2lt
cGwgQ2FjaGluZ1Rhc2sgeworICAgIC8vLyBUaGUgY2FjaGluZyB0YXNrJ3MgbWFpbiBlbnRyeSBw
b2ludC4KKyAgICBhc3luYyBmbiBydW4obXV0IHNlbGYpIHsKKyAgICAgICAgbG9vcCB7CisgICAg
ICAgICAgICBzZWxmLnJ1bl9vbmNlKCkuYXdhaXQ7CisgICAgICAgICAgICBwb2xsX2ludGVydmFs
KCkuYXdhaXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gQSBzaW5nbGUgaXRlcmF0aW9u
IG9mIHRoZSBjYWNoaW5nIHRhc2suCisgICAgYXN5bmMgZm4gcnVuX29uY2UoJm11dCBzZWxmKSB7
CisgICAgICAgIGxldCAoY29uZmlnLCBkaWdlc3QpID0gbWF0Y2ggcGRtX2NvbmZpZzo6cmVtb3Rl
czo6Y29uZmlnKCkgeworICAgICAgICAgICAgT2soY2QpID0+IGNkLAorICAgICAgICAgICAgRXJy
KGVycikgPT4geworICAgICAgICAgICAgICAgIGxvZzo6ZXJyb3IhKCJmYWlsZWQgdG8gbG9hZCBy
ZW1vdGUgY29uZmlnLCBub3QgdXBkYXRpbmcgY2FjaGUgLSB7ZXJyOj99Iik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGlmIHNl
bGYKKyAgICAgICAgICAgIC5sYXN0X2NvbmZpZ19kaWdlc3QKKyAgICAgICAgICAgIC5hc19yZWYo
KQorICAgICAgICAgICAgLmlzX25vbmVfb3IofGR8IGRpZ2VzdCAhPSAqZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgdHJhY2luZzo6ZGVidWchKCJuZXcgY29uZmlnIC0gdXBkYXRpbmcgcmVtb3Rl
IG5vZGUgbmFtZSBjYWNoZSIpOworICAgICAgICAgICAgc2VsZi5sYXN0X2NvbmZpZ19kaWdlc3Qg
PSBTb21lKGRpZ2VzdCk7CisKKyAgICAgICAgICAgIC8vIHRoZSBjb25maWcgZ290IHVwZGF0ZWQg
LSBhYm9ydCB0aGUgY3VycmVudCBuYW1lLWZldGNoaW5nIHRhc2ssIHdlJ2xsCisgICAgICAgICAg
ICAvLyBzcGF3biBhIG5ldyBvbmUKKyAgICAgICAgICAgIGlmIGxldCBTb21lKG5hbWVfdGFzaykg
PSBzZWxmLmN1cnJlbnRfbmFtZV90YXNrLnRha2UoKSB7CisgICAgICAgICAgICAgICAgdHJhY2lu
Zzo6ZGVidWchKCJhYm9ydGluZyBxdWVyeSB0YXNrIik7CisgICAgICAgICAgICAgICAgbmFtZV90
YXNrLmFib3J0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIGxldCBFcnIoZXJy
KSA9IHNlbGYuY29uZmlnX3VwZGF0ZSgmY29uZmlnKSB7CisgICAgICAgICAgICAgICAgbG9nOjpl
cnJvciEoImVycm9yIHVwZGF0aW5nIHJlbW90ZSBub2RlIGNhY2hlOiB7ZXJyOj99Iik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvL30gZWxzZSB7CisgICAgICAgICAgICAvLyAgICB0cmFj
aW5nOjpkZWJ1ZyEoIm5vIGNoYW5nZSB0byB0aGUgY29uZmlnIik7CisgICAgICAgIH0KKworICAg
ICAgICBpZiBzZWxmCisgICAgICAgICAgICAuY3VycmVudF9uYW1lX3Rhc2sKKyAgICAgICAgICAg
IC5hc19yZWYoKQorICAgICAgICAgICAgLmlzX25vbmVfb3IofHRhc2t8IHRhc2suaXNfZmluaXNo
ZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbG9nOjpkZWJ1ZyEoIm5hbWUgdGFzayBmaW5p
c2hlZCwgc3RhcnRpbmcgcmVhY2hhYmlsaXR5IHF1ZXJ5IHRhc2siKTsKKyAgICAgICAgICAgIHNl
bGYuY3VycmVudF9uYW1lX3Rhc2sgPQorICAgICAgICAgICAgICAgIFNvbWUoc3Bhd25fYWJvcnRl
ZF9vbl9zaHV0ZG93bihTZWxmOjpxdWVyeV9ub2RlX25hbWVzKGNvbmZpZykpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vLyBJZiB0aGUgYHJlbW90ZXMuY2ZnYCB3YXMgdXBkYXRlZCB3ZSBu
ZWVkIHRvIGdvIG92ZXIgYWxsIHRoZSByZW1vdGVzIGFuZCBzZWUgaWYgdGhlcmUgaXMgYW55Cisg
ICAgLy8vIGluZm9ybWF0aW9uIHdlIG5lZWQgdG8gdXBkYXRlLgorICAgIGZuIGNvbmZpZ191cGRh
dGUoJm11dCBzZWxmLCBjb25maWc6ICZTZWN0aW9uQ29uZmlnRGF0YTxSZW1vdGU+KSAtPiBSZXN1
bHQ8KCksIEVycm9yPiB7CisgICAgICAgIGxldCBtdXQgY2FjaGUgPSBSZW1vdGVNYXBwaW5nQ2Fj
aGU6OndyaXRlKCk/OworCisgICAgICAgIC8vIHBydW5lIHJlbW90ZXMgd2hpY2ggd2VyZSByZW1v
dmVkOgorICAgICAgICBjYWNoZQorICAgICAgICAgICAgLnJlbW90ZXMKKyAgICAgICAgICAgIC5y
ZXRhaW4ofG5hbWUsIF9lbnRyeXwgY29uZmlnLmNvbnRhaW5zX2tleShuYW1lKSk7CisKKyAgICAg
ICAgLy8gbm93IHVwZGF0ZSB0aGUgZXhpc3RpbmcgcmVtb3RlczoKKyAgICAgICAgZm9yIChuYW1l
LCByZW1vdGUpIGluIGNvbmZpZyB7CisgICAgICAgICAgICBzZWxmLnBydW5lX3JlbW90ZV9ub2Rl
cygmbXV0IGNhY2hlLCBuYW1lLCByZW1vdGUpOworICAgICAgICB9CisKKyAgICAgICAgY2FjaGUu
c2F2ZSgpPzsKKworICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICBmbiBwcnVuZV9yZW1vdGVf
bm9kZXMoJm11dCBzZWxmLCBjYWNoZTogJm11dCBSZW1vdGVNYXBwaW5nQ2FjaGUsIG5hbWU6ICZz
dHIsIHJlbW90ZTogJlJlbW90ZSkgeworICAgICAgICBsZXQgZW50cnkgPSBjYWNoZQorICAgICAg
ICAgICAgLnJlbW90ZXMKKyAgICAgICAgICAgIC5lbnRyeShuYW1lLnRvX3N0cmluZygpKQorICAg
ICAgICAgICAgLm9yX2luc2VydF93aXRoKHx8IHJlbW90ZV9jYWNoZTo6UmVtb3RlTWFwcGluZzo6
bmV3KHJlbW90ZS50eSkpOworCisgICAgICAgIC8vIGlmIHRoZSBlbnRyeSBjaGFuZ2VkIHR5cGUs
IGNsZWFyIGl0CisgICAgICAgIGlmIGVudHJ5LnR5ICE9IHJlbW90ZS50eSB7CisgICAgICAgICAg
ICAqZW50cnkgPSByZW1vdGVfY2FjaGU6OlJlbW90ZU1hcHBpbmc6Om5ldyhyZW1vdGUudHkpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gT25seSBQVkUgZW50cmllcyBjdXJyZW50bHkgaGF2ZSBh
IG5vZGUgY2FjaGUsIHNvIHNraXAgbm9uLVBWRSByZW1vdGVzOgorICAgICAgICBpZiByZW1vdGUu
dHkgIT0gUmVtb3RlVHlwZTo6UHZlIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIHBydW5lIG5vZGVzIHdoaWNoIHdlcmUgcmVtb3ZlZDoKKyAgICAgICAgZW50
cnkuaG9zdHMucmV0YWluKHxob3N0bmFtZSwgaW5mb3wgeworICAgICAgICAgICAgbGV0IHJldGFp
biA9IHJlbW90ZS5ub2Rlcy5pdGVyKCkuYW55KHxub2RlfCBub2RlLmhvc3RuYW1lID09ICpob3N0
bmFtZSk7CisgICAgICAgICAgICBpZiAhcmV0YWluIHsKKyAgICAgICAgICAgICAgICBpZiBsZXQg
U29tZShub2RlX25hbWUpID0gaW5mby5ub2RlX25hbWUoKSB7CisgICAgICAgICAgICAgICAgICAg
IGVudHJ5Lm5vZGVfdG9faG9zdC5yZW1vdmUobm9kZV9uYW1lKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXRhaW4KKyAgICAgICAgfSk7CisKKyAgICAg
ICAgLy8gbWFrZSBzdXJlIGN1cnJlbnRseSBrbm93biBob3N0bmFtZXMgZXhpc3QgaW4gdGhlIGNh
Y2hlIGF0IGxlYXN0IGVtcHR5OgorICAgICAgICBmb3Igbm9kZSBpbiAmcmVtb3RlLm5vZGVzIHsK
KyAgICAgICAgICAgIGlmICFlbnRyeS5ob3N0cy5jb250YWluc19rZXkoJm5vZGUuaG9zdG5hbWUp
IHsKKyAgICAgICAgICAgICAgICBlbnRyeS5ob3N0cy5pbnNlcnQoCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUuaG9zdG5hbWUuY2xvbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVtb3RlX2Nh
Y2hlOjpIb3N0SW5mbzo6bmV3KG5vZGUuaG9zdG5hbWUuY2xvbmUoKSksCisgICAgICAgICAgICAg
ICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGFzeW5jIGZuIHF1
ZXJ5X25vZGVfbmFtZXMoY29uZmlnOiBTZWN0aW9uQ29uZmlnRGF0YTxSZW1vdGU+KSB7CisgICAg
ICAgIGZvciAoX25hbWUsIHJlbW90ZSkgaW4gJmNvbmZpZyB7CisgICAgICAgICAgICBpZiBsZXQg
RXJyKGVycikgPSBTZWxmOjpxdWVyeV9ub2RlX25hbWVzX2Zvcl9yZW1vdGUocmVtb3RlKS5hd2Fp
dCB7CisgICAgICAgICAgICAgICAgbG9nOjplcnJvciEoImVycm9yIHVwZGF0aW5nIG5vZGUgbmFt
ZSBjYWNoZSAtIHtlcnI6P30iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGFzeW5jIGZuIHF1ZXJ5X25vZGVfbmFtZXNfZm9yX3JlbW90ZShyZW1vdGU6ICZSZW1vdGUp
IC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgLy8gT25seSBQVkUgZW50cmllcyBjdXJy
ZW50bHkgaGF2ZSBhIG5vZGUgY2FjaGUsIHNvIHNraXAgbm9uLVBWRSByZW1vdGVzOgorICAgICAg
ICBpZiByZW1vdGUudHkgIT0gUmVtb3RlVHlwZTo6UHZlIHsKKyAgICAgICAgICAgIHJldHVybiBP
aygoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBub3cgYWRkIG5ldyBub2RlcworICAgICAg
ICBmb3Igbm9kZSBpbiAmcmVtb3RlLm5vZGVzIHsKKyAgICAgICAgICAgIHRyYWNpbmc6OmRlYnVn
ISgicXVlcnlpbmcgcmVtb3RlIHs6P30gbm9kZSB7Oj99IiwgcmVtb3RlLmlkLCBub2RlLmhvc3Ru
YW1lKTsKKworICAgICAgICAgICAgLy8gaWYgdGhlIGhvc3QgaXMgbmV3LCB3ZSBuZWVkIHRvIHF1
ZXJ5IGl0cyBuYW1lCisgICAgICAgICAgICBsZXQgcXVlcnlfcmVzdWx0ID0gbWF0Y2ggcXVlcnlf
bm9kZV9uYW1lKHJlbW90ZSwgJm5vZGUuaG9zdG5hbWUpLmF3YWl0IHsKKyAgICAgICAgICAgICAg
ICBPayhub2RlX25hbWUpID0+IFNvbWUobm9kZV9uYW1lKSwKKyAgICAgICAgICAgICAgICBFcnIo
ZXJyKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGxvZzo6ZXJyb3IhKAorICAgICAgICAgICAg
ICAgICAgICAgICAgImZhaWxlZCB0byBxdWVyeSBpbmZvIGZvciByZW1vdGUgJ3t9JyBub2RlICd7
fScgLSB7ZXJyOj99IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZS5pZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUuaG9zdG5hbWUKKyAgICAgICAgICAgICAgICAgICAgKTsK
KyAgICAgICAgICAgICAgICAgICAgTm9uZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgICAgIGxldCBtdXQgY2FjaGUgPSBSZW1vdGVNYXBwaW5nQ2FjaGU6Ondy
aXRlKCk/OworICAgICAgICAgICAgaWYgbGV0IFNvbWUoaW5mbykgPSBjYWNoZS5pbmZvX2J5X2hv
c3RuYW1lX211dCgmcmVtb3RlLmlkLCAmbm9kZS5ob3N0bmFtZSkgeworICAgICAgICAgICAgICAg
IGluZm8ucmVhY2hhYmxlID0gcXVlcnlfcmVzdWx0LmlzX3NvbWUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIGxldCBTb21lKG5vZGVfbmFtZSkgPSBxdWVyeV9yZXN1bHQgeworICAg
ICAgICAgICAgICAgIGNhY2hlLnNldF9ub2RlX25hbWUoJnJlbW90ZS5pZCwgJm5vZGUuaG9zdG5h
bWUsIFNvbWUobm9kZV9uYW1lKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWNoZS5z
YXZlKCk/OworICAgICAgICB9CisKKyAgICAgICAgT2soKCkpCisgICAgfQorfQorCisvLy8gQ2Fs
bHMgYC9jbHVzdGVyL3N0YXR1c2AgZGlyZWN0bHkgb24gYSBzcGVjaWZpYyBub2RlIHRvIGZpbmQg
aXRzIG5hbWUuCithc3luYyBmbiBxdWVyeV9ub2RlX25hbWUocmVtb3RlOiAmUmVtb3RlLCBob3N0
bmFtZTogJnN0cikgLT4gUmVzdWx0PFN0cmluZywgRXJyb3I+IHsKKyAgICBsZXQgY2xpZW50ID0g
c2VydmVyOjpjb25uZWN0aW9uOjptYWtlX3B2ZV9jbGllbnRfd2l0aF9lbmRwb2ludChyZW1vdGUs
IFNvbWUoaG9zdG5hbWUpKT87CisgICAgbGV0IG5vZGVfc3RhdHVzX2xpc3QgPSBjbGllbnQuY2x1
c3Rlcl9zdGF0dXMoKS5hd2FpdD87CisgICAgZm9yIG5vZGUgaW4gbm9kZV9zdGF0dXNfbGlzdCB7
CisgICAgICAgIGlmIG5vZGUubG9jYWwgPT0gU29tZSh0cnVlKSB7CisgICAgICAgICAgICByZXR1
cm4gT2sobm9kZS5uYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBiYWlsISgiZmFpbGVkIHRv
IGNvbm5lY3QgdG8gbm9kZSB7aG9zdG5hbWV9Iik7Cit9CmRpZmYgLS1naXQgYS9zZXJ2ZXIvc3Jj
L2Nvbm5lY3Rpb24ucnMgYi9zZXJ2ZXIvc3JjL2Nvbm5lY3Rpb24ucnMKaW5kZXggYWVlYTA4OS4u
MjRlMmU0NCAxMDA2NDQKLS0tIGEvc2VydmVyL3NyYy9jb25uZWN0aW9uLnJzCisrKyBiL3NlcnZl
ci9zcmMvY29ubmVjdGlvbi5ycwpAQCAtMjE0LDYgKzIxNCwxOSBAQCBwdWIgdHJhaXQgQ2xpZW50
RmFjdG9yeSB7CiAgICAgICAgIHRhcmdldF9lbmRwb2ludDogT3B0aW9uPCZzdHI+LAogICAgICkg
LT4gUmVzdWx0PEFyYzxQdmVDbGllbnQ+LCBFcnJvcj47CiAKKyAgICAvLy8gQ3JlYXRlIGEgbmV3
IEFQSSBjbGllbnQgZm9yIFBWRSByZW1vdGVzLCBidXQgd2l0aCBhIHNwZWNpZmljIGVuZHBvaW50
LgorICAgIC8vLworICAgIC8vLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRo
ZSBgbm9kZWAgcGFyYW1ldGVyIGFuZCBmb3J3YXJkcyB0bworICAgIC8vLyBgbWFrZV9wdmVfY2xp
ZW50KClgLgorICAgIGZuIG1ha2VfcHZlX2NsaWVudF93aXRoX25vZGUoCisgICAgICAgICZzZWxm
LAorICAgICAgICByZW1vdGU6ICZSZW1vdGUsCisgICAgICAgIG5vZGU6ICZzdHIsCisgICAgKSAt
PiBSZXN1bHQ8QXJjPFB2ZUNsaWVudD4sIEVycm9yPiB7CisgICAgICAgIGxldCBfID0gbm9kZTsK
KyAgICAgICAgc2VsZi5tYWtlX3B2ZV9jbGllbnQocmVtb3RlKQorICAgIH0KKwogICAgIC8vLyBD
cmVhdGUgYSBuZXcgQVBJIGNsaWVudCBmb3IgUFZFIHJlbW90ZXMuCiAgICAgLy8vCiAgICAgLy8v
IEluIGNhc2UgdGhlIHJlbW90ZSBoYXMgYSB1c2VyIGNvbmZpZ3VyZWQgKGluc3RlYWQgb2YgYW4g
QVBJIHRva2VuKSwgaXQgd2lsbCBjb25uZWN0IGFuZCBnZXQKQEAgLTM0Myw2ICszNTYsMjAgQEAg
aW1wbCBDbGllbnRGYWN0b3J5IGZvciBEZWZhdWx0Q2xpZW50RmFjdG9yeSB7CiAgICAgICAgIE9r
KEFyYzo6bmV3KFB2ZUNsaWVudEltcGwoY2xpZW50KSkpCiAgICAgfQogCisgICAgZm4gbWFrZV9w
dmVfY2xpZW50X3dpdGhfbm9kZSgKKyAgICAgICAgJnNlbGYsCisgICAgICAgIHJlbW90ZTogJlJl
bW90ZSwKKyAgICAgICAgbm9kZTogJnN0ciwKKyAgICApIC0+IFJlc3VsdDxBcmM8UHZlQ2xpZW50
PiwgRXJyb3I+IHsKKyAgICAgICAgbGV0IGNhY2hlID0gY3JhdGU6OnJlbW90ZV9jYWNoZTo6UmVt
b3RlTWFwcGluZ0NhY2hlOjpnZXQoKTsKKyAgICAgICAgbWF0Y2ggY2FjaGUuaW5mb19ieV9ub2Rl
X25hbWUoJnJlbW90ZS5pZCwgbm9kZSkgeworICAgICAgICAgICAgU29tZShpbmZvKSBpZiBpbmZv
LnJlYWNoYWJsZSA9PiB7CisgICAgICAgICAgICAgICAgc2VsZi5tYWtlX3B2ZV9jbGllbnRfd2l0
aF9lbmRwb2ludChyZW1vdGUsIFNvbWUoJmluZm8uaG9zdG5hbWUpKQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgXyA9PiBzZWxmLm1ha2VfcHZlX2NsaWVudChyZW1vdGUpLAorICAgICAgICB9
CisgICAgfQorCiAgICAgYXN5bmMgZm4gbWFrZV9wdmVfY2xpZW50X2FuZF9sb2dpbigmc2VsZiwg
cmVtb3RlOiAmUmVtb3RlKSAtPiBSZXN1bHQ8QXJjPFB2ZUNsaWVudD4sIEVycm9yPiB7CiAgICAg
ICAgIGxldCBjbGllbnQgPSBjb25uZWN0X29yX2xvZ2luKHJlbW90ZSwgTm9uZSkuYXdhaXQ/Owog
ICAgICAgICBPayhBcmM6Om5ldyhQdmVDbGllbnRJbXBsKGNsaWVudCkpKQpAQCAtMzc3LDYgKzQw
NCwxMSBAQCBwdWIgZm4gbWFrZV9wdmVfY2xpZW50X3dpdGhfZW5kcG9pbnQoCiAgICAgaW5zdGFu
Y2UoKS5tYWtlX3B2ZV9jbGllbnRfd2l0aF9lbmRwb2ludChyZW1vdGUsIHRhcmdldF9lbmRwb2lu
dCkKIH0KIAorLy8vIENyZWF0ZSBhIG5ldyBBUEkgY2xpZW50IGZvciBQVkUgcmVtb3RlcyBhbmQg
dHJ5IHRvIG1ha2UgaXQgY29ubmVjdCB0byBhIHNwZWNpZmljICpub2RlKi4KK3B1YiBmbiBtYWtl
X3B2ZV9jbGllbnRfd2l0aF9ub2RlKHJlbW90ZTogJlJlbW90ZSwgbm9kZTogJnN0cikgLT4gUmVz
dWx0PEFyYzxQdmVDbGllbnQ+LCBFcnJvcj4geworICAgIGluc3RhbmNlKCkubWFrZV9wdmVfY2xp
ZW50X3dpdGhfbm9kZShyZW1vdGUsIG5vZGUpCit9CisKIC8vLyBDcmVhdGUgYSBuZXcgQVBJIGNs
aWVudCBmb3IgUEJTIHJlbW90ZXMKIHB1YiBmbiBtYWtlX3Bic19jbGllbnQocmVtb3RlOiAmUmVt
b3RlKSAtPiBSZXN1bHQ8Qm94PFBic0NsaWVudD4sIEVycm9yPiB7CiAgICAgaW5zdGFuY2UoKS5t
YWtlX3Bic19jbGllbnQocmVtb3RlKQpkaWZmIC0tZ2l0IGEvc2VydmVyL3NyYy9saWIucnMgYi9z
ZXJ2ZXIvc3JjL2xpYi5ycwppbmRleCAxMmRjOTEyLi5kY2IyNGYwIDEwMDY0NAotLS0gYS9zZXJ2
ZXIvc3JjL2xpYi5ycworKysgYi9zZXJ2ZXIvc3JjL2xpYi5ycwpAQCAtNiw2ICs2LDcgQEAgcHVi
IG1vZCBhdXRoOwogcHViIG1vZCBjb250ZXh0OwogcHViIG1vZCBlbnY7CiBwdWIgbW9kIG1ldHJp
Y19jb2xsZWN0aW9uOworcHViIG1vZCByZW1vdGVfY2FjaGU7CiBwdWIgbW9kIHJlc291cmNlX2Nh
Y2hlOwogcHViIG1vZCB0YXNrX2NhY2hlOwogcHViIG1vZCB0YXNrX3V0aWxzOwpkaWZmIC0tZ2l0
IGEvc2VydmVyL3NyYy9yZW1vdGVfY2FjaGUvbW9kLnJzIGIvc2VydmVyL3NyYy9yZW1vdGVfY2Fj
aGUvbW9kLnJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZTc5ZjEKLS0t
IC9kZXYvbnVsbAorKysgYi9zZXJ2ZXIvc3JjL3JlbW90ZV9jYWNoZS9tb2QucnMKQEAgLTAsMCAr
MSwyODUgQEAKKy8vISBUaGlzIGN1cnJlbnRseSBvbmx5IG1hdHRlcnMgZm9yIFBWRSByZW1vdGVz
LgorLy8hCisvLyEgUFZFIHJlbW90ZXMgaGF2ZSBtdWx0aXBsZSBub2RlcyB3aGljaCBoYXZlIG5h
bWVzIHdlIGNhbm5vdCBuZWNlc3NhcmlseSBpbmZlciBmcm9tIHRoZQorLy8hICJob3N0bmFtZSIg
ZmllbGQsIHNpbmNlIHRoYXQgbWlnaHQgYmUgYSBkaWZmZXJlbnQgYWRkcmVzcywgcG90ZW50aWFs
bHkgd2l0aCBhIHBvcnQuCisvLyEKKy8vISBXZSBhbHNvIGRvIG5vdCB3YW50IHVzZXJzIHRvIGhh
dmUgdG8gbWFpbnRhaW4gdGhlIFBETSBob3N0L25vZGUtbmFtZSBjb21iaW5hdGlvbnMgKGluIGNh
c2UgdGhleQorLy8hIHJlbmFtZSBvciByZWluc3RhbGwgbm9kZXMpLiBSZW5hbWluZyB3b3VsZCBi
cmVhayB0aGUgUERNIGNvbmZpZywgcmVpbnN0YWxsaW5nIHdvdWxkIGJyZWFrIGVnLiBhCisvLyEg
Im1hY2hpbmUtaWQiIGJhc2VkIG1hcHBpbmcuCisvLyEKKy8vISBXZSBhbHNvIGNhbm5vdCByZWx5
IGluIHRoZSBUTFMgZmluZ2VycHJpbnRzLCBiZWNhdXNlIGEgd2hvbGUgY2x1c3RlciBjb3VsZCBw
b3RlbnRpYWxseSB1c2UgYQorLy8hIHNpbmdsZSB3aWxkY2FyZCBjZXJ0aWZpY2F0ZS4KKy8vIQor
Ly8hIEluc3RlYWQsIHdlIG1haW50YWluIGEgY2FjaGVkIG1hcHBpbmcgb2YgYGFkZHJlc3Mg4oaU
IG5hbWVgIGluIGAvdmFyYCwgd2hpY2ggZ2V0cyBwb2xsZWQKKy8vISByZWd1bGFybHkuCisvLyEg
Rm9yIFBWRSB3ZSBjYW4gcXVlcnkgYW4gYWRkcmVzcycgYC9jbHVzdGVyL3N0YXR1c2AgYW5kIGxv
b2sgZm9yIGFuIGVudHJ5IG1hcmtlZCBhcyBgbG9jYWw6MWAuCisvLyEgTGF0ZXIgdGhpcyBtaWdo
dCBiZSBjaGFuZ2VkIHRvIGxvb2tpbmcgZm9yIHRoZSBub2RlIG5hbWUgaW4gdGhlIHJlc3VsdCBv
ZgorLy8hIGAvbm9kZXMvbG9jYWxob3N0L3N0YXR1c2AgLSBvbmNlIHRoaXMgaXMgaW1wbGVtZW50
ZWQgYW5kIHJvbGxlZCBvdXQgbG9uZyBlbm91Z2ggaW4gUFZFLgorCit1c2Ugc3RkOjpjb2xsZWN0
aW9uczo6SGFzaE1hcDsKK3VzZSBzdGQ6OnN5bmM6OntBcmMsIE11dGV4fTsKKwordXNlIGFueWhv
dzo6e0NvbnRleHQgYXMgXywgRXJyb3J9OwordXNlIHNlcmRlOjp7RGVzZXJpYWxpemUsIFNlcmlh
bGl6ZX07CisKK3VzZSBwcm94bW94X3Byb2R1Y3RfY29uZmlnOjpyZXBsYWNlX2NvbmZpZzsKK3Vz
ZSBwcm94bW94X3Byb2R1Y3RfY29uZmlnOjp7b3Blbl9hcGlfbG9ja2ZpbGUsIEFwaUxvY2tHdWFy
ZH07CisKK3VzZSBwZG1fYXBpX3R5cGVzOjpyZW1vdGVzOjpSZW1vdGVUeXBlOwordXNlIHBkbV9j
b25maWc6OkNvbmZpZ1ZlcnNpb25DYWNoZTsKKworY29uc3QgQ0FDSEVfRklMRU5BTUU6ICZzdHIg
PSBjb25jYXQhKAorICAgIHBkbV9idWlsZGNmZzo6UERNX0NBQ0hFX0RJUl9NISgpLAorICAgICIv
cmVtb3RlLW1hcHBpbmctY2FjaGUuanNvbiIKKyk7CisKK2NvbnN0IExPQ0tfRklMRTogJnN0ciA9
IGNvbmNhdCEoCisgICAgcGRtX2J1aWxkY2ZnOjpQRE1fQ0FDSEVfRElSX00hKCksCisgICAgIi8u
cmVtb3RlLW1hcHBpbmctY2FjaGUuanNvbi5sb2NrIgorKTsKKworc3RhdGljIENVUlJFTlRfQ0FD
SEU6IE11dGV4PE9wdGlvbjxDYWNoZVN0YXRlPj4gPSBNdXRleDo6bmV3KE5vbmUpOworCisjW2Rl
cml2ZShDbG9uZSldCitzdHJ1Y3QgQ2FjaGVTdGF0ZSB7CisgICAgY2FjaGU6IEFyYzxSZW1vdGVN
YXBwaW5nQ2FjaGU+LAorICAgIGdlbmVyYXRpb246IHVzaXplLAorfQorCitpbXBsIENhY2hlU3Rh
dGUgeworICAgIGZuIGdldCgpIC0+IFNlbGYgeworICAgICAgICBsZXQgbXV0IGNhY2hlID0gQ1VS
UkVOVF9DQUNIRS5sb2NrKCkudW53cmFwKCk7CisKKyAgICAgICAgbGV0IHZlcnNpb25fY2FjaGUg
PSBDb25maWdWZXJzaW9uQ2FjaGU6Om5ld19sb2dfZXJyb3IoKTsKKworICAgICAgICBpZiBsZXQg
U29tZShjYWNoZSkgPSBjYWNoZS5jbG9uZSgpIHsKKyAgICAgICAgICAgIGlmIGxldCBTb21lKHZl
cnNpb25fY2FjaGUpID0gdmVyc2lvbl9jYWNoZS5hc19kZXJlZigpIHsKKyAgICAgICAgICAgICAg
ICBpZiBjYWNoZS5nZW5lcmF0aW9uID09IHZlcnNpb25fY2FjaGUucmVtb3RlX21hcHBpbmdfY2Fj
aGUoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgLy8gb3V0ZGF0ZWQsIGZhbGwgYmFjayB0byByZWxvYWRpbmcK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIG91dGRhdGVkLCBvciB3ZSBmYWlsZWQgdG8g
cXVlcnkgdGhlIHZlcnNpb24gY2FjaGUsIGZhbGwgdGhyb3VnaCB0byB0aGUgbG9hZAorICAgICAg
ICB9CisKKyAgICAgICAgLy8gd2UgaGF2ZSBubyB2YWxpZCBjYWNoZSB5ZXQ6CisgICAgICAgIGxl
dCBnZW5lcmF0aW9uID0gdmVyc2lvbl9jYWNoZS5tYXAofGN8IGMucmVtb3RlX21hcHBpbmdfY2Fj
aGUoKSkudW53cmFwX29yKDApOworCisgICAgICAgIGxldCBkYXRhID0gQXJjOjpuZXcoUmVtb3Rl
TWFwcGluZ0NhY2hlOjpsb2FkKCkpOworICAgICAgICBsZXQgdGhpcyA9IENhY2hlU3RhdGUgewor
ICAgICAgICAgICAgY2FjaGU6IEFyYzo6Y2xvbmUoJmRhdGEpLAorICAgICAgICAgICAgZ2VuZXJh
dGlvbiwKKyAgICAgICAgfTsKKyAgICAgICAgKmNhY2hlID0gU29tZSh0aGlzLmNsb25lKCkpOwor
ICAgICAgICB0aGlzCisgICAgfQorCisgICAgZm4gdXBkYXRlKGNhY2hlOiBSZW1vdGVNYXBwaW5n
Q2FjaGUpIHsKKyAgICAgICAgbGV0IG11dCBjdXJyZW50X2NhY2hlID0gQ1VSUkVOVF9DQUNIRS5s
b2NrKCkudW53cmFwKCk7CisgICAgICAgIGxldCBnZW5lcmF0aW9uID0gbWF0Y2ggcGRtX2NvbmZp
Zzo6Q29uZmlnVmVyc2lvbkNhY2hlOjpuZXdfbG9nX2Vycm9yKCkgeworICAgICAgICAgICAgU29t
ZSh2ZXJzaW9uX2NhY2hlKSA9PiB2ZXJzaW9uX2NhY2hlLmluY3JlYXNlX3JlbW90ZV9tYXBwaW5n
X2NhY2hlKCksCisgICAgICAgICAgICBOb25lID0+IDAsCisgICAgICAgIH07CisgICAgICAgICpj
dXJyZW50X2NhY2hlID0gU29tZShDYWNoZVN0YXRlIHsKKyAgICAgICAgICAgIGdlbmVyYXRpb24s
CisgICAgICAgICAgICBjYWNoZTogQXJjOjpuZXcoY2FjaGUpLAorICAgICAgICB9KTsKKyAgICB9
Cit9CisKK3B1YiBzdHJ1Y3QgV3JpdGVSZW1vdGVNYXBwaW5nQ2FjaGUgeworICAgIHB1YiBkYXRh
OiBSZW1vdGVNYXBwaW5nQ2FjaGUsCisgICAgX2xvY2s6IEFwaUxvY2tHdWFyZCwKK30KKworaW1w
bCBzdGQ6Om9wczo6RGVyZWYgZm9yIFdyaXRlUmVtb3RlTWFwcGluZ0NhY2hlIHsKKyAgICB0eXBl
IFRhcmdldCA9IFJlbW90ZU1hcHBpbmdDYWNoZTsKKworICAgIGZuIGRlcmVmKCZzZWxmKSAtPiAm
U2VsZjo6VGFyZ2V0IHsKKyAgICAgICAgJnNlbGYuZGF0YQorICAgIH0KK30KKworaW1wbCBzdGQ6
Om9wczo6RGVyZWZNdXQgZm9yIFdyaXRlUmVtb3RlTWFwcGluZ0NhY2hlIHsKKyAgICBmbiBkZXJl
Zl9tdXQoJm11dCBzZWxmKSAtPiAmbXV0IFNlbGY6OlRhcmdldCB7CisgICAgICAgICZtdXQgc2Vs
Zi5kYXRhCisgICAgfQorfQorCitpbXBsIFdyaXRlUmVtb3RlTWFwcGluZ0NhY2hlIHsKKyAgICBm
biBuZXcobG9jazogQXBpTG9ja0d1YXJkLCBkYXRhOiBSZW1vdGVNYXBwaW5nQ2FjaGUpIC0+IFNl
bGYgeworICAgICAgICBTZWxmIHsgX2xvY2s6IGxvY2ssIGRhdGEgfQorICAgIH0KKworICAgIHB1
YiBmbiBzYXZlKHNlbGYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgc2VsZi5kYXRh
LnNhdmUoKT87CisgICAgICAgIENhY2hlU3RhdGU6OnVwZGF0ZShzZWxmLmRhdGEpOworICAgICAg
ICBPaygoKSkKKyAgICB9Cit9CisKKy8vLyBGaWxlIGZvcm1hdCBmb3IgYC92YXIvY2FjaGUvcHJv
eG1veC1kYXRhY2VudGVyLW1hbmFnZXIvcmVtb3RlLW1hcHBpbmctY2FjaGUuanNvbmAKKyNbZGVy
aXZlKENsb25lLCBEZWZhdWx0LCBEZXNlcmlhbGl6ZSwgU2VyaWFsaXplKV0KK3B1YiBzdHJ1Y3Qg
UmVtb3RlTWFwcGluZ0NhY2hlIHsKKyAgICAvLy8gVGhpcyBtYXBzIGEgcmVtb3RlIG5hbWUgdG8g
aXRzIG1hcHBpbmcuCisgICAgcHViIHJlbW90ZXM6IEhhc2hNYXA8U3RyaW5nLCBSZW1vdGVNYXBw
aW5nPiwKK30KKworaW1wbCBSZW1vdGVNYXBwaW5nQ2FjaGUgeworICAgIC8vLyBHZXQgcmVhZCBv
bmx5IGFjY2VzcyB0byB0aGUgY3VycmVudCBjYWNoZS4KKyAgICBwdWIgZm4gZ2V0KCkgLT4gQXJj
PFNlbGY+IHsKKyAgICAgICAgQXJjOjpjbG9uZSgmQ2FjaGVTdGF0ZTo6Z2V0KCkuY2FjaGUpCisg
ICAgfQorCisgICAgLy8vICpMb2NrKiB0aGUgY2FjaGUgbG9jayBmaWxlIGFuZCBnZXQgbXV0YWJs
ZSBhY2Nlc3MgdG8gdGhlIGN1cnJlbnQgY29udGVudHMuCisgICAgcHViIGZuIHdyaXRlKCkgLT4g
UmVzdWx0PFdyaXRlUmVtb3RlTWFwcGluZ0NhY2hlLCBFcnJvcj4geworICAgICAgICBsZXQgd3Jp
dGVfbG9jayA9IG9wZW5fYXBpX2xvY2tmaWxlKExPQ0tfRklMRSwgTm9uZSwgdHJ1ZSk/OworCisg
ICAgICAgIE9rKFdyaXRlUmVtb3RlTWFwcGluZ0NhY2hlOjpuZXcoCisgICAgICAgICAgICB3cml0
ZV9sb2NrLAorICAgICAgICAgICAgU2VsZjo6Y2xvbmUoJlNlbGY6OmdldCgpKSwKKyAgICAgICAg
KSkKKyAgICB9CisKKyAgICAvLy8gTG9hZCB0aGUgY3VycmVudCByZW1vdGUgbWFwcGluZyBjYWNo
ZS4gVGhpcyBhbHdheXMgc3VjY2VlZHMgYW5kIG1heSByZXR1cm4gYW4gZW1wdHkgY2FjaGUuCisg
ICAgZm4gbG9hZCgpIC0+IFNlbGYgeworICAgICAgICBmbiBkb19sb2FkKCkgLT4gUmVzdWx0PE9w
dGlvbjxSZW1vdGVNYXBwaW5nQ2FjaGU+LCBFcnJvcj4geworICAgICAgICAgICAgT2socHJveG1v
eF9zeXM6OmZzOjpmaWxlX3JlYWRfb3B0aW9uYWxfc3RyaW5nKENBQ0hFX0ZJTEVOQU1FKT8KKyAg
ICAgICAgICAgICAgICAubWFwKHxjb250ZW50fCBzZXJkZV9qc29uOjpmcm9tX3N0cigmY29udGVu
dCkpCisgICAgICAgICAgICAgICAgLnRyYW5zcG9zZSgpPykKKyAgICAgICAgfQorCisgICAgICAg
IG1hdGNoIGRvX2xvYWQoKSB7CisgICAgICAgICAgICBPayhTb21lKGRhdGEpKSA9PiByZXR1cm4g
ZGF0YSwKKyAgICAgICAgICAgIE9rKE5vbmUpID0+ICgpLAorICAgICAgICAgICAgRXJyKGVycikg
PT4geworICAgICAgICAgICAgICAgIGxvZzo6ZXJyb3IhKCJjb3JydXB0ZWQgcmVtb3RlLW1hcHBp
bmctY2FjaGUuanNvbiBmaWxlLCBkaXNjYXJkaW5nIC0ge2Vycjo/fSIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgU2VsZjo6ZGVmYXVsdCgpCisgICAgfQorCisgICAgLy8v
IFNhdmUgdGhlIGN1cnJlbnQgcmVtb3RlIG1hcHBpbmcgY2FjaGUuIFRoaXMgc2hvdWxkIG9ubHkg
YmUgZG9uZSBieSB0aGUgcmVtb3RlIG1hcHBpbmcgdGFzay4KKyAgICBmbiBzYXZlKCZzZWxmKSAt
PiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIGxldCByYXcgPSBzZXJkZV9qc29uOjp0b192
ZWMoc2VsZikuY29udGV4dCgiZmFpbGVkIHRvIHNlcmlhbGl6ZSByZW1vdGUgbWFwcGluZyBjYWNo
ZSIpPzsKKyAgICAgICAgcmVwbGFjZV9jb25maWcoQ0FDSEVfRklMRU5BTUUsICZyYXcpCisgICAg
fQorCisgICAgLy8vIEF0dGVtcHQgdG8gcmV0cmlldmUgdGhlIGhvc3QgbmFtZSBmcm9tIGEgbm9k
ZSBuYW1lLgorICAgIHB1YiBmbiBub2RlX25hbWVfdG9faG9zdG5hbWUoJnNlbGYsIHJlbW90ZTog
JnN0ciwgbm9kZV9uYW1lOiAmc3RyKSAtPiBPcHRpb248JnN0cj4geworICAgICAgICBTb21lKHNl
bGYucmVtb3Rlcy5nZXQocmVtb3RlKT8ubm9kZV90b19ob3N0LmdldChub2RlX25hbWUpPykKKyAg
ICB9CisKKyAgICAvLy8gQXR0ZW1wdCB0byBnZXQgdGhlIG5vZGUgaW5mbyBmb3IgYSBub2RlIG5h
bWUuCisgICAgcHViIGZuIGluZm9fYnlfbm9kZV9uYW1lKCZzZWxmLCByZW1vdGVfbmFtZTogJnN0
ciwgbm9kZV9uYW1lOiAmc3RyKSAtPiBPcHRpb248Jkhvc3RJbmZvPiB7CisgICAgICAgIGxldCBy
ZW1vdGUgPSBzZWxmLnJlbW90ZXMuZ2V0KHJlbW90ZV9uYW1lKT87CisgICAgICAgIGxldCBob3N0
ID0gcmVtb3RlLm5vZGVfdG9faG9zdC5nZXQobm9kZV9uYW1lKT87CisgICAgICAgIHJlbW90ZS5o
b3N0cy5nZXQoaG9zdCkKKyAgICB9CisKKyAgICBwdWIgZm4gaW5mb19ieV9ub2RlX25hbWVfbXV0
KAorICAgICAgICAmbXV0IHNlbGYsCisgICAgICAgIHJlbW90ZV9uYW1lOiAmc3RyLAorICAgICAg
ICBub2RlX25hbWU6ICZzdHIsCisgICAgKSAtPiBPcHRpb248Jm11dCBIb3N0SW5mbz4geworICAg
ICAgICBsZXQgcmVtb3RlID0gc2VsZi5yZW1vdGVzLmdldF9tdXQocmVtb3RlX25hbWUpPzsKKyAg
ICAgICAgbGV0IGhvc3QgPSByZW1vdGUubm9kZV90b19ob3N0LmdldChub2RlX25hbWUpPzsKKyAg
ICAgICAgcmVtb3RlLmhvc3RzLmdldF9tdXQoaG9zdCkKKyAgICB9CisKKyAgICAvLy8gQXR0ZW1w
dCB0byByZXRyaWV2ZSB0aGUgbm9kZSBuYW1lIGZyb20gYSBob3N0IG5hbWUuCisgICAgcHViIGZu
IGluZm9fYnlfaG9zdG5hbWUoJnNlbGYsIHJlbW90ZTogJnN0ciwgaG9zdG5hbWU6ICZzdHIpIC0+
IE9wdGlvbjwmSG9zdEluZm8+IHsKKyAgICAgICAgc2VsZi5yZW1vdGVzLmdldChyZW1vdGUpPy5o
b3N0cy5nZXQoaG9zdG5hbWUpCisgICAgfQorCisgICAgcHViIGZuIGluZm9fYnlfaG9zdG5hbWVf
bXV0KCZtdXQgc2VsZiwgcmVtb3RlOiAmc3RyLCBob3N0bmFtZTogJnN0cikgLT4gT3B0aW9uPCZt
dXQgSG9zdEluZm8+IHsKKyAgICAgICAgc2VsZi5yZW1vdGVzLmdldF9tdXQocmVtb3RlKT8uaG9z
dHMuZ2V0X211dChob3N0bmFtZSkKKyAgICB9CisKKyAgICAvLy8gTWFyayBhIGhvc3QgYXMgcmVh
Y2hhYmxlLgorICAgIHB1YiBmbiBtYXJrX2hvc3RfcmVhY2hhYmxlKCZtdXQgc2VsZiwgcmVtb3Rl
X25hbWU6ICZzdHIsIGhvc3RuYW1lOiAmc3RyLCByZWFjaGFibGU6IGJvb2wpIHsKKyAgICAgICAg
aWYgbGV0IFNvbWUoaW5mbykgPSBzZWxmLmluZm9fYnlfaG9zdG5hbWVfbXV0KHJlbW90ZV9uYW1l
LCBob3N0bmFtZSkgeworICAgICAgICAgICAgaW5mby5yZWFjaGFibGUgPSByZWFjaGFibGU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gTWFyayBhIGhvc3QgYXMgcmVhY2hhYmxlLgorICAg
IHB1YiBmbiBtYXJrX25vZGVfcmVhY2hhYmxlKCZtdXQgc2VsZiwgcmVtb3RlX25hbWU6ICZzdHIs
IG5vZGVfbmFtZTogJnN0ciwgcmVhY2hhYmxlOiBib29sKSB7CisgICAgICAgIGlmIGxldCBTb21l
KGluZm8pID0gc2VsZi5pbmZvX2J5X25vZGVfbmFtZV9tdXQocmVtb3RlX25hbWUsIG5vZGVfbmFt
ZSkgeworICAgICAgICAgICAgaW5mby5yZWFjaGFibGUgPSByZWFjaGFibGU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLy8gVXBkYXRlIHRoZSBub2RlIG5hbWUgZm9yIGEgaG9zdCwgaWYgdGhl
IHJlbW90ZSBhbmQgaG9zdCBleGlzdCAob3RoZXJ3aXNlIHRoaXMgZG9lcworICAgIC8vLyBub3Ro
aW5nKS4KKyAgICBwdWIgZm4gc2V0X25vZGVfbmFtZSgmbXV0IHNlbGYsIHJlbW90ZV9uYW1lOiAm
c3RyLCBob3N0bmFtZTogJnN0ciwgbm9kZV9uYW1lOiBPcHRpb248U3RyaW5nPikgeworICAgICAg
ICBpZiBsZXQgU29tZShyZW1vdGUpID0gc2VsZi5yZW1vdGVzLmdldF9tdXQocmVtb3RlX25hbWUp
IHsKKyAgICAgICAgICAgIHJlbW90ZS5zZXRfbm9kZV9uYW1lKGhvc3RuYW1lLCBub2RlX25hbWUp
OworICAgICAgICB9CisgICAgfQorfQorCisvLy8gQW4gZW50cnkgZm9yIGEgcmVtb3RlIGluIGEg
W2BSZW1vdGVNYXBwaW5nQ2FjaGVgXS4KKyNbZGVyaXZlKENsb25lLCBEZXNlcmlhbGl6ZSwgU2Vy
aWFsaXplKV0KK3B1YiBzdHJ1Y3QgUmVtb3RlTWFwcGluZyB7CisgICAgLy8vIFRoZSByZW1vdGUg
dHlwZS4KKyAgICBwdWIgdHk6IFJlbW90ZVR5cGUsCisKKyAgICAvLy8gTWFwcyBhIGBob3N0bmFt
ZWAgdG8gaW5mb3JtYXRpb24gd2Uga2VlcCBhYm91dCBpdC4KKyAgICBwdWIgaG9zdHM6IEhhc2hN
YXA8U3RyaW5nLCBIb3N0SW5mbz4sCisKKyAgICAvLy8gTWFwcyBhIG5vZGUgbmFtZSB0byBhIGhv
c3RuYW1lLCBmb3Igd2hlcmUgd2UgaGF2ZSB0aGF0IGluZm8uCisgICAgcHViIG5vZGVfdG9faG9z
dDogSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4sCit9CisKK2ltcGwgUmVtb3RlTWFwcGluZyB7Cisg
ICAgcHViIGZuIG5ldyh0eTogUmVtb3RlVHlwZSkgLT4gU2VsZiB7CisgICAgICAgIFNlbGYgewor
ICAgICAgICAgICAgdHksCisgICAgICAgICAgICBob3N0czogSGFzaE1hcDo6bmV3KCksCisgICAg
ICAgICAgICBub2RlX3RvX2hvc3Q6IEhhc2hNYXA6Om5ldygpLAorICAgICAgICB9CisgICAgfQor
CisgICAgLy8vIFVwZGF0ZSB0aGUgbm9kZSBuYW1lIGZvciBhIGhvc3QsIGlmIHRoZSBob3N0IGV4
aXN0cyAob3RoZXJ3aXNlIHRoaXMgZG9lcyBub3RoaW5nKS4KKyAgICBwdWIgZm4gc2V0X25vZGVf
bmFtZSgmbXV0IHNlbGYsIGhvc3RuYW1lOiAmc3RyLCBub2RlX25hbWU6IE9wdGlvbjxTdHJpbmc+
KSB7CisgICAgICAgIGlmIGxldCBTb21lKGluZm8pID0gc2VsZi5ob3N0cy5nZXRfbXV0KGhvc3Ru
YW1lKSB7CisgICAgICAgICAgICBpZiBsZXQgU29tZShvbGQpID0gaW5mby5ub2RlX25hbWUudGFr
ZSgpIHsKKyAgICAgICAgICAgICAgICBzZWxmLm5vZGVfdG9faG9zdC5yZW1vdmUoJm9sZCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpbmZvLm5vZGVfbmFtZSA9IG5vZGVfbmFtZTsKKyAg
ICAgICAgICAgIGlmIGxldCBTb21lKG5ldykgPSAmaW5mby5ub2RlX25hbWUgeworICAgICAgICAg
ICAgICAgIHNlbGYubm9kZV90b19ob3N0Lmluc2VydChuZXcuY2xvbmUoKSwgaG9zdG5hbWUudG9f
c3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisvLy8gQWxs
IHRoZSBkYXRhIHdlIGtlZXAgY2FjaGVkIGZvciBub2RlcyBmb3VuZCBpbiBbYFJlbW90ZU1hcHBp
bmdgXS4KKyNbZGVyaXZlKENsb25lLCBEZXNlcmlhbGl6ZSwgU2VyaWFsaXplKV0KK3B1YiBzdHJ1
Y3QgSG9zdEluZm8geworICAgIC8vLyBUaGlzIGlzIHRoZSBob3N0IG5hbWUgYXNzb2NpYXRlZCB3
aXRoIHRoaXMgbm9kZS4KKyAgICBwdWIgaG9zdG5hbWU6IFN0cmluZywKKworICAgIC8vLyBUaGlz
IGlzIHRoZSBjbHVzdGVyIHNpZGUgbm9kZSBuYW1lLCBpZiB3ZSBrbm93IGl0LgorICAgIG5vZGVf
bmFtZTogT3B0aW9uPFN0cmluZz4sCisKKyAgICAvLy8gVGhpcyBtZWFucyB3ZSB3ZXJlIGFibGUg
dG8gcmVhY2ggdGhlIG5vZGUuCisgICAgLy8vIFdoZW4gYSBjbGllbnQgZmFpbHMgdG8gY29ubmVj
dCBpdCBtYXkgdXBkYXRlIHRoaXMgdG8gbWFyayBpdCBhcyB1bnJlYWNoYWJsZS4KKyAgICBwdWIg
cmVhY2hhYmxlOiBib29sLAorfQorCitpbXBsIEhvc3RJbmZvIHsKKyAgICBwdWIgZm4gbmV3KGhv
c3RuYW1lOiBTdHJpbmcpIC0+IFNlbGYgeworICAgICAgICBTZWxmIHsKKyAgICAgICAgICAgIGhv
c3RuYW1lLAorICAgICAgICAgICAgbm9kZV9uYW1lOiBOb25lLAorICAgICAgICAgICAgcmVhY2hh
YmxlOiB0cnVlLAorICAgICAgICB9CisgICAgfQorCisgICAgcHViIGZuIG5vZGVfbmFtZSgmc2Vs
ZikgLT4gT3B0aW9uPCZzdHI+IHsKKyAgICAgICAgc2VsZi5ub2RlX25hbWUuYXNfZGVyZWYoKQor
ICAgIH0KK30KLS0gCjIuMzkuNQoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpwZG0tZGV2ZWwgbWFpbGluZyBsaXN0CnBkbS1kZXZlbEBsaXN0cy5wcm94
bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5m
by9wZG0tZGV2ZWwK