From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 311C01FF15E for ; Mon, 10 Nov 2025 09:49:31 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 14BABFD59; Mon, 10 Nov 2025 09:50:14 +0100 (CET) Message-ID: <6c92cd2f-73ed-4e1a-8407-7782e9135f42@proxmox.com> Date: Mon, 10 Nov 2025 09:49:37 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: pve-devel@lists.proxmox.com References: <20251030132844.188242-1-n.frey@proxmox.com> <20251030132844.188242-2-n.frey@proxmox.com> <1762506095.ibwi5rdpt3.astroid@yuna.none> From: Nicolas Frey Content-Language: en-US In-Reply-To: <1762506095.ibwi5rdpt3.astroid@yuna.none> X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1762764555216 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.394 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_ASCII_DIVIDERS 0.8 Email that uses ascii formatting dividers and possible spam tricks KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_SHORT 0.001 Use of a URL Shortener for very short URL 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 Subject: Re: [pve-devel] [PATCH v6 1/4] add proxmox-pgp subcrate, move POM verifier code to it X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" T24gMTEvNy8yNSAxMToxNCBBTSwgRmFiaWFuIEdyw7xuYmljaGxlciB3cm90ZToKPiBPbiBPY3Rv YmVyIDMwLCAyMDI1IDI6MjggcG0sIE5pY29sYXMgRnJleSB3cm90ZToKPj4gQWRkIG5ldyBtaWNy by1jcmF0ZSBgcHJveG1veC1wZ3BgIGZvciB1c2UgaW4gYHByb3htb3gtYXB0YCB0byB2ZXJpZnkK Pj4gcmVwb3NpdG9yeSBzaWduYXR1cmVzLiBDb2RlIGlzIGRlcml2ZWQgZnJvbSBgcHJveG1veC1v ZmZsaW5lLW1pcnJvcmAsCj4+IHJlbW92aW5nIGRpcmVjdCBgc3RkZXJyYCBvdXRwdXQgaW4gZmF2 b3Igb2YgYWRkZWQgY29udGV4dCB0byB0aGUKPj4gcmV0dXJuZWQgYGFueWhvdzo6RXJyb3JgLgo+ Pgo+PiBJZiB0aGlzIHBhdGNoIGlzIGFwcGxpZWQsIHRoZW4gYHByb3htb3gtb2ZmbGluZS1taXJy b3JgIHNob3VsZCB1c2UKPj4gdGhlIGBwcm94bW94LXBncGAgY3JhdGUuCj4+Cj4+IEZvciB0aGUg b3JpZ2luYWwgZGV2ZWxvcG1lbnQgaGlzdG9yeSwgc2VlIGNvbW1pdHMgcmVsYXRlZCB0byBbMF0u Cj4+Cj4+IFswXSBodHRwczovL2dpdC5wcm94bW94LmNvbS8/cD1wcm94bW94LW9mZmxpbmUtbWly cm9yLmdpdDthPWJsb2I7Zj1zcmMvaGVscGVycy92ZXJpZmllci5ycztoPTE1MTk1YTZlYzM0MTNh ZDNjMDE2ZmZmYzM4ZjllZWUzY2VmYzY4Mjc7aGI9Y2Q1NmZhYgo+Pgo+PiBTdWdnZXN0ZWQtYnk6 IFRob21hcyBMYW1wcmVjaHQgPHQubGFtcHJlY2hAcHJveG1veC5jb20+Cj4+IFNpZ25lZC1vZmYt Ynk6IE5pY29sYXMgRnJleSA8bi5mcmV5QHByb3htb3guY29tPgo+PiAtLS0KPj4gIENhcmdvLnRv bWwgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKPj4gIHByb3htb3gtcGdwL0NhcmdvLnRv bWwgICAgICAgICAgIHwgIDE3ICsrKwo+PiAgcHJveG1veC1wZ3AvZGViaWFuL2NoYW5nZWxvZyAg ICAgfCAgIDUgKwo+PiAgcHJveG1veC1wZ3AvZGViaWFuL2NvbnRyb2wgICAgICAgfCAgNDAgKysr KysrKwo+PiAgcHJveG1veC1wZ3AvZGViaWFuL2NvcHlyaWdodCAgICAgfCAgMTggKysrCj4+ICBw cm94bW94LXBncC9kZWJpYW4vZGViY2FyZ28udG9tbCB8ICAgNyArKwo+PiAgcHJveG1veC1wZ3Av c3JjL2xpYi5ycyAgICAgICAgICAgfCAgIDUgKwo+PiAgcHJveG1veC1wZ3Avc3JjL3ZlcmlmaWVy LnJzICAgICAgfCAxOTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiAgOCBmaWxl cyBjaGFuZ2VkLCAyODggaW5zZXJ0aW9ucygrKQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHByb3ht b3gtcGdwL0NhcmdvLnRvbWwKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LXBncC9kZWJp YW4vY2hhbmdlbG9nCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcHJveG1veC1wZ3AvZGViaWFuL2Nv bnRyb2wKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LXBncC9kZWJpYW4vY29weXJpZ2h0 Cj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcHJveG1veC1wZ3AvZGViaWFuL2RlYmNhcmdvLnRvbWwK Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBwcm94bW94LXBncC9zcmMvbGliLnJzCj4+ICBjcmVhdGUg bW9kZSAxMDA2NDQgcHJveG1veC1wZ3Avc3JjL3ZlcmlmaWVyLnJzCj4+Cj4+IGRpZmYgLS1naXQg YS9DYXJnby50b21sIGIvQ2FyZ28udG9tbAo+PiBpbmRleCA4MDkxYmY3MC4uN2QzNWM5ZmQgMTAw NjQ0Cj4+IC0tLSBhL0NhcmdvLnRvbWwKPj4gKysrIGIvQ2FyZ28udG9tbAo+PiBAQCAtMjgsNiAr MjgsNyBAQCBtZW1iZXJzID0gWwo+PiAgICAgICJwcm94bW94LW5ldHdvcmstdHlwZXMiLAo+PiAg ICAgICJwcm94bW94LW5vdGlmeSIsCj4+ICAgICAgInByb3htb3gtb3BlbmlkIiwKPj4gKyAgICAi cHJveG1veC1wZ3AiLAo+PiAgICAgICJwcm94bW94LXByb2R1Y3QtY29uZmlnIiwKPj4gICAgICAi cHJveG1veC1yZXNvdXJjZS1zY2hlZHVsaW5nIiwKPj4gICAgICAicHJveG1veC1yZXN0LXNlcnZl ciIsCj4+IEBAIC0xNTQsNiArMTU1LDcgQEAgcHJveG1veC1sYW5nID0geyB2ZXJzaW9uID0gIjEu NSIsIHBhdGggPSAicHJveG1veC1sYW5nIiB9Cj4+ICBwcm94bW94LWxvZyA9IHsgdmVyc2lvbiA9 ICIxLjAuMCIsIHBhdGggPSAicHJveG1veC1sb2ciIH0KPj4gIHByb3htb3gtbG9naW4gPSB7IHZl cnNpb24gPSAiMS4wLjAiLCBwYXRoID0gInByb3htb3gtbG9naW4iIH0KPj4gIHByb3htb3gtbmV0 d29yay10eXBlcyA9IHsgdmVyc2lvbiA9ICIwLjEuMCIsIHBhdGggPSAicHJveG1veC1uZXR3b3Jr LXR5cGVzIiB9Cj4+ICtwcm94bW94LXBncCA9IHsgdmVyc2lvbiA9ICIxLjAuMCIsIHBhdGggPSAi cHJveG1veC1wZ3AiIH0KPj4gIHByb3htb3gtcHJvZHVjdC1jb25maWcgPSB7IHZlcnNpb24gPSAi MS4wLjAiLCBwYXRoID0gInByb3htb3gtcHJvZHVjdC1jb25maWciIH0KPj4gIHByb3htb3gtY29u ZmlnLWRpZ2VzdCA9IHsgdmVyc2lvbiA9ICIxLjAuMCIsIHBhdGggPSAicHJveG1veC1jb25maWct ZGlnZXN0IiB9Cj4+ICBwcm94bW94LXJlc3Qtc2VydmVyID0geyB2ZXJzaW9uID0gIjEuMC4wIiwg cGF0aCA9ICJwcm94bW94LXJlc3Qtc2VydmVyIiB9Cj4+IGRpZmYgLS1naXQgYS9wcm94bW94LXBn cC9DYXJnby50b21sIGIvcHJveG1veC1wZ3AvQ2FyZ28udG9tbAo+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+PiBpbmRleCAwMDAwMDAwMC4uNjZjYWM0NDQKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysg Yi9wcm94bW94LXBncC9DYXJnby50b21sCj4+IEBAIC0wLDAgKzEsMTcgQEAKPj4gK1twYWNrYWdl XQo+PiArbmFtZSA9ICJwcm94bW94LXBncCIKPj4gK3ZlcnNpb24gPSAiMS4wLjAiCj4gCj4gYSBi aXQgdG9ybiBoZXJlLCBidXQgSSBndWVzcyB0aGUgY3VycmVudCBpbnRlcmZhY2UgaXMgc21hbGwg ZW5vdWdoIHRoYXQKPiB3ZSBjYW4gZXh0ZW5kIHdpdGhvdXQgYnJlYWthZ2UgOykKPiAKPj4gK2F1 dGhvcnMud29ya3NwYWNlID0gdHJ1ZQo+PiArZWRpdGlvbi53b3Jrc3BhY2UgPSB0cnVlCj4+ICts aWNlbnNlLndvcmtzcGFjZSA9IHRydWUKPj4gK3JlcG9zaXRvcnkud29ya3NwYWNlID0gdHJ1ZQo+ PiArZXhjbHVkZS53b3Jrc3BhY2UgPSB0cnVlCj4+ICtkZXNjcmlwdGlvbiA9ICJQcm94bW94IHdy YXBwZXIgZm9yIHZlcmlmeWluZyBwZ3Agc2lnbmF0dXJlcyB1c2luZyBzZXF1b2lhLW9wZW5wZ3Ai Cj4+ICsKPj4gK1tkZXBlbmRlbmNpZXNdCj4+ICthbnlob3cud29ya3NwYWNlID0gdHJ1ZQo+PiAr c2VyZGUud29ya3NwYWNlID0gdHJ1ZQo+IAo+IG1pc3Npbmcgc29tZSBmZWF0dXJlcyBoZXJlCj4g Cj4+ICtzZXF1b2lhLW9wZW5wZ3AgPSAiMiIKPj4gKwo+PiArcHJveG1veC1hcGktbWFjcm8ud29y a3NwYWNlID0gdHJ1ZQo+PiArcHJveG1veC1zY2hlbWEud29ya3NwYWNlID0gdHJ1ZQo+IAo+IGFu ZCBoZXJlCj4gCj4gY2FyZ28gaXMgYSBiaXQgYW5ub3lpbmcgaGVyZSAtIGlmIHlvdSBidWlsZCB0 aGUgd2hvbGUgd29ya3NwYWNlIGluIG9uZQo+IGdvLCBmZWF0dXJlcyBlbmFibGVkIGJ5IG90aGVy IGNyYXRlcyBpbiB0aGUgd29ya3NwYWNlIHRoYXQgc2hhcmUKPiBkZXBlbmRlbmNpZXMgd2lsbCBo aWRlIGlzc3VlcyBoZXJlLiBzbyB5b3UgbmVlZCB0byBkbyBhIHN0YW5kYWxvbmUKPiBgY2FyZ28g Y2hlY2svdGVzdC9idWlsZCAtcCBmb29gLCBwb3NzaWJseSB3aXRoIGFuZCB3aXRob3V0IGZlYXR1 cmVzIG9mCj4gZm9vIGVuYWJsZWQuIGRvaW5nIGEgZmluYWwgYG1ha2UgZm9vLWRlYmAgYmVmb3Jl IHBhdGNoIHN1Ym1pc3Npb24gYWxzbwo+IGRvZXNuJ3QgaHVydCA7KQoKVGhhbmtzLCBJJ2xsIGtl ZXAgdGhpcyBpbiBtaW5kIGZvciB0aGUgZnV0dXJlISBXaWxsIGZpeCBpbiBuZXh0IHJldmlzaW9u Cgo+IAo+IGlmIHlvdSBnZXQgc3R1Y2sgd2l0aCBzdWNoIGRldGFpbHMsIGZlZWwgZnJlZSB0byBw aW5nIG1lIQo+IAo+PiBkaWZmIC0tZ2l0IGEvcHJveG1veC1wZ3AvZGViaWFuL2NoYW5nZWxvZyBi L3Byb3htb3gtcGdwL2RlYmlhbi9jaGFuZ2Vsb2cKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4g aW5kZXggMDAwMDAwMDAuLjNhNWE5NDdjCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvcHJveG1v eC1wZ3AvZGViaWFuL2NoYW5nZWxvZwo+PiBAQCAtMCwwICsxLDUgQEAKPj4gK3J1c3QtcHJveG1v eC1wZ3AgKDEuMC4wLTEpIHN0YWJsZTsgdXJnZW5jeT1tZWRpdW0KPj4gKwo+PiArICAqIGluaXRp YWwgc3BsaXQgb3V0IG9mIHByb3htb3ggb2ZmbGluZSBtaXJyb3IuCj4+ICsKPj4gKyAtLSBQcm94 bW94IFN1cHBvcnQgVGVhbSA8c3VwcG9ydEBwcm94bW94LmNvbT4gIFdlZCwgMjIgT2N0IDIwMjUg MTQ6MDY6NTIgKzAyMDAKPj4gZGlmZiAtLWdpdCBhL3Byb3htb3gtcGdwL2RlYmlhbi9jb250cm9s IGIvcHJveG1veC1wZ3AvZGViaWFuL2NvbnRyb2wKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4g aW5kZXggMDAwMDAwMDAuLjIzNDEyYmFiCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvcHJveG1v eC1wZ3AvZGViaWFuL2NvbnRyb2wKPj4gQEAgLTAsMCArMSw0MCBAQAo+PiArU291cmNlOiBydXN0 LXByb3htb3gtcGdwCj4+ICtTZWN0aW9uOiBydXN0Cj4+ICtQcmlvcml0eTogb3B0aW9uYWwKPj4g K0J1aWxkLURlcGVuZHM6IGRlYmhlbHBlci1jb21wYXQgKD0gMTMpLAo+PiArIGRoLXNlcXVlbmNl LWNhcmdvCj4+ICtCdWlsZC1EZXBlbmRzLUFyY2g6IGNhcmdvOm5hdGl2ZSA8IW5vY2hlY2s+LAo+ PiArIHJ1c3RjOm5hdGl2ZSA8IW5vY2hlY2s+LAo+PiArIGxpYnN0ZC1ydXN0LWRldiA8IW5vY2hl Y2s+LAo+PiArIGxpYnJ1c3QtYW55aG93LTErZGVmYXVsdC1kZXYgPCFub2NoZWNrPiwKPj4gKyBs aWJydXN0LXByb3htb3gtYXBpLW1hY3JvLTErZGVmYXVsdC1kZXYgKD49IDEuNC4xLX5+KSA8IW5v Y2hlY2s+LAo+PiArIGxpYnJ1c3QtcHJveG1veC1zY2hlbWEtNStkZWZhdWx0LWRldiA8IW5vY2hl Y2s+LAo+PiArIGxpYnJ1c3Qtc2VxdW9pYS1vcGVucGdwLTIrZGVmYXVsdC1kZXYgPCFub2NoZWNr PiwKPj4gKyBsaWJydXN0LXNlcmRlLTErZGVmYXVsdC1kZXYgPCFub2NoZWNrPgo+PiArTWFpbnRh aW5lcjogUHJveG1veCBTdXBwb3J0IFRlYW0gPHN1cHBvcnRAcHJveG1veC5jb20+Cj4+ICtTdGFu ZGFyZHMtVmVyc2lvbjogNC43LjIKPj4gK1Zjcy1HaXQ6IGdpdDovL2dpdC5wcm94bW94LmNvbS9n aXQvcHJveG1veC5naXQKPj4gK1Zjcy1Ccm93c2VyOiBodHRwczovL2dpdC5wcm94bW94LmNvbS8/ cD1wcm94bW94LmdpdAo+PiArSG9tZXBhZ2U6IGh0dHBzOi8vZ2l0LnByb3htb3guY29tLz9wPXBy b3htb3guZ2l0Cj4+ICtYLUNhcmdvLUNyYXRlOiBwcm94bW94LXBncAo+PiArCj4+ICtQYWNrYWdl OiBsaWJydXN0LXByb3htb3gtcGdwLWRldgo+PiArQXJjaGl0ZWN0dXJlOiBhbnkKPj4gK011bHRp LUFyY2g6IHNhbWUKPj4gK0RlcGVuZHM6Cj4+ICsgJHttaXNjOkRlcGVuZHN9LAo+PiArIGxpYnJ1 c3QtYW55aG93LTErZGVmYXVsdC1kZXYsCj4+ICsgbGlicnVzdC1wcm94bW94LWFwaS1tYWNyby0x K2RlZmF1bHQtZGV2ICg+PSAxLjQuMS1+fiksCj4+ICsgbGlicnVzdC1wcm94bW94LXNjaGVtYS01 K2RlZmF1bHQtZGV2LAo+PiArIGxpYnJ1c3Qtc2VxdW9pYS1vcGVucGdwLTIrZGVmYXVsdC1kZXYs Cj4+ICsgbGlicnVzdC1zZXJkZS0xK2RlZmF1bHQtZGV2Cj4+ICtQcm92aWRlczoKPj4gKyBsaWJy dXN0LXByb3htb3gtcGdwK2RlZmF1bHQtZGV2ICg9ICR7YmluYXJ5OlZlcnNpb259KSwKPj4gKyBs aWJydXN0LXByb3htb3gtcGdwLTEtZGV2ICg9ICR7YmluYXJ5OlZlcnNpb259KSwKPj4gKyBsaWJy dXN0LXByb3htb3gtcGdwLTErZGVmYXVsdC1kZXYgKD0gJHtiaW5hcnk6VmVyc2lvbn0pLAo+PiAr IGxpYnJ1c3QtcHJveG1veC1wZ3AtMS4wLWRldiAoPSAke2JpbmFyeTpWZXJzaW9ufSksCj4+ICsg bGlicnVzdC1wcm94bW94LXBncC0xLjArZGVmYXVsdC1kZXYgKD0gJHtiaW5hcnk6VmVyc2lvbn0p LAo+PiArIGxpYnJ1c3QtcHJveG1veC1wZ3AtMS4wLjAtZGV2ICg9ICR7YmluYXJ5OlZlcnNpb259 KSwKPj4gKyBsaWJydXN0LXByb3htb3gtcGdwLTEuMC4wK2RlZmF1bHQtZGV2ICg9ICR7YmluYXJ5 OlZlcnNpb259KQo+PiArRGVzY3JpcHRpb246IFByb3htb3ggd3JhcHBlciBmb3IgdmVyaWZ5aW5n IHBncCBzaWduYXR1cmVzIHVzaW5nIHNlcXVvaWEtb3BlbnBncCAtIFJ1c3Qgc291cmNlIGNvZGUK Pj4gKyBTb3VyY2UgY29kZSBmb3IgRGViaWFuaXplZCBSdXN0IGNyYXRlICJwcm94bW94LXBncCIK Pj4gZGlmZiAtLWdpdCBhL3Byb3htb3gtcGdwL2RlYmlhbi9jb3B5cmlnaHQgYi9wcm94bW94LXBn cC9kZWJpYW4vY29weXJpZ2h0Cj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAw MDAwLi5kNmUzYzMwNAo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL3Byb3htb3gtcGdwL2RlYmlh bi9jb3B5cmlnaHQKPj4gQEAgLTAsMCArMSwxOCBAQAo+PiArRm9ybWF0OiBodHRwczovL3d3dy5k ZWJpYW4ub3JnL2RvYy9wYWNrYWdpbmctbWFudWFscy9jb3B5cmlnaHQtZm9ybWF0LzEuMC8KPj4g Kwo+PiArRmlsZXM6Cj4+ICsgKgo+PiArQ29weXJpZ2h0OiAyMDI1IFByb3htb3ggU2VydmVyIFNv bHV0aW9ucyBHbWJIIDxzdXBwb3J0QHByb3htb3guY29tPgo+PiArTGljZW5zZTogQUdQTC0zLjAt b3ItbGF0ZXIKPj4gKyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgo+PiArIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZQo+PiArIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Cj4+ICsgbGF0ZXIgdmVyc2lvbi4KPj4gKyAuCj4+ ICsgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCj4+ICsgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKPj4gKyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlCj4+ICsgZGV0YWlscy4KPj4gKyAuCj4+ICsgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFsb25nCj4+ICsgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCj4+IGRpZmYgLS1naXQgYS9wcm94bW94LXBncC9kZWJpYW4vZGVi Y2FyZ28udG9tbCBiL3Byb3htb3gtcGdwL2RlYmlhbi9kZWJjYXJnby50b21sCj4+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwLi5iNzg2NGNkYgo+PiAtLS0gL2Rldi9udWxs Cj4+ICsrKyBiL3Byb3htb3gtcGdwL2RlYmlhbi9kZWJjYXJnby50b21sCj4+IEBAIC0wLDAgKzEs NyBAQAo+PiArb3ZlcmxheSA9ICIuIgo+PiArY3JhdGVfc3JjX3BhdGggPSAiLi4iCj4+ICttYWlu dGFpbmVyID0gIlByb3htb3ggU3VwcG9ydCBUZWFtIDxzdXBwb3J0QHByb3htb3guY29tPiIKPj4g Kwo+PiArW3NvdXJjZV0KPj4gK3Zjc19naXQgPSAiZ2l0Oi8vZ2l0LnByb3htb3guY29tL2dpdC9w cm94bW94LmdpdCIKPj4gK3Zjc19icm93c2VyID0gImh0dHBzOi8vZ2l0LnByb3htb3guY29tLz9w PXByb3htb3guZ2l0Igo+PiBkaWZmIC0tZ2l0IGEvcHJveG1veC1wZ3Avc3JjL2xpYi5ycyBiL3By b3htb3gtcGdwL3NyYy9saWIucnMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAw MDAwMDAuLjA4YTg3M2ZkCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvcHJveG1veC1wZ3Avc3Jj L2xpYi5ycwo+PiBAQCAtMCwwICsxLDUgQEAKPj4gKyMhW2NmZ19hdHRyKGRvY3NycywgZmVhdHVy ZShkb2NfY2ZnLCBkb2NfYXV0b19jZmcpKV0KPj4gKwo+PiArbW9kIHZlcmlmaWVyOwo+PiArCj4+ ICtwdWIgdXNlIHZlcmlmaWVyOjp7dmVyaWZ5X3NpZ25hdHVyZSwgV2Vha0NyeXB0b0NvbmZpZywg V2Vha0NyeXB0b0NvbmZpZ1VwZGF0ZXJ9Owo+PiBkaWZmIC0tZ2l0IGEvcHJveG1veC1wZ3Avc3Jj L3ZlcmlmaWVyLnJzIGIvcHJveG1veC1wZ3Avc3JjL3ZlcmlmaWVyLnJzCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwLi5jMmVhZGJjNQo+PiAtLS0gL2Rldi9udWxsCj4+ ICsrKyBiL3Byb3htb3gtcGdwL3NyYy92ZXJpZmllci5ycwo+PiBAQCAtMCwwICsxLDE5NCBAQAo+ PiArdXNlIHN0ZDo6aW87Cj4+ICsKPj4gK3VzZSBhbnlob3c6OntiYWlsLCBmb3JtYXRfZXJyLCBF cnJvcn07Cj4+ICt1c2Ugc2VxdW9pYV9vcGVucGdwOjpjZXJ0OjpDZXJ0UGFyc2VyOwo+PiArdXNl IHNlcXVvaWFfb3BlbnBncDo6cGFyc2U6OnN0cmVhbTo6ewo+PiArICAgIERldGFjaGVkVmVyaWZp ZXJCdWlsZGVyLCBNZXNzYWdlTGF5ZXIsIE1lc3NhZ2VTdHJ1Y3R1cmUsIFZlcmlmaWNhdGlvbkVy cm9yLCBWZXJpZmljYXRpb25IZWxwZXIsCj4+ICsgICAgVmVyaWZpZXJCdWlsZGVyLAo+PiArfTsK Pj4gK3VzZSBzZXF1b2lhX29wZW5wZ3A6OnBhcnNlOjp7UGFja2V0UGFyc2VyLCBQYWNrZXRQYXJz ZXJSZXN1bHQsIFBhcnNlfTsKPj4gK3VzZSBzZXF1b2lhX29wZW5wZ3A6OnBvbGljeTo6U3RhbmRh cmRQb2xpY3k7Cj4+ICt1c2Ugc2VxdW9pYV9vcGVucGdwOjp0eXBlczo6SGFzaEFsZ29yaXRobTsK Pj4gK3VzZSBzZXF1b2lhX29wZW5wZ3A6OntDZXJ0LCBLZXlIYW5kbGV9Owo+PiArdXNlIHNlcmRl Ojp7RGVzZXJpYWxpemUsIFNlcmlhbGl6ZX07Cj4+ICsKPj4gK3VzZSBwcm94bW94X2FwaV9tYWNy bzo6YXBpOwo+PiArdXNlIHByb3htb3hfc2NoZW1hOjpVcGRhdGVyOwo+PiArCj4+ICsjW2FwaSgK Pj4gKyAgICBwcm9wZXJ0aWVzOiB7Cj4+ICsgICAgICAgICJhbGxvdy1zaGExIjogewo+PiArICAg ICAgICAgICAgdHlwZTogYm9vbCwKPj4gKyAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLAo+PiAr ICAgICAgICAgICAgb3B0aW9uYWw6IHRydWUsCj4+ICsgICAgICAgIH0sCj4+ICsgICAgICAgICJt aW4tZHNhLWtleS1zaXplIjogewo+PiArICAgICAgICAgICAgdHlwZTogdTY0LAo+PiArICAgICAg ICAgICAgb3B0aW9uYWw6IHRydWUsCj4+ICsgICAgICAgIH0sCj4+ICsgICAgICAgICJtaW4tcnNh LWtleS1zaXplIjogewo+PiArICAgICAgICAgICAgdHlwZTogdTY0LAo+PiArICAgICAgICAgICAg b3B0aW9uYWw6IHRydWUsCj4+ICsgICAgICAgIH0sCj4+ICsgICAgfSwKPj4gKyldCj4+ICsjW2Rl cml2ZShEZWZhdWx0LCBTZXJpYWxpemUsIERlc2VyaWFsaXplLCBVcGRhdGVyLCBDbG9uZSwgRGVi dWcpXQo+PiArI1tzZXJkZShyZW5hbWVfYWxsID0gImtlYmFiLWNhc2UiKV0KPj4gKy8vLyBXZWFr IENyeXB0b2dyYXBoeSBDb25maWd1cmF0aW9uCj4+ICtwdWIgc3RydWN0IFdlYWtDcnlwdG9Db25m aWcgewo+PiArICAgIC8vLyBXaGV0aGVyIHRvIGFsbG93IFNIQS0xIGJhc2VkIHNpZ25hdHVyZXMK Pj4gKyAgICAjW3NlcmRlKGRlZmF1bHQpXQo+PiArICAgIHB1YiBhbGxvd19zaGExOiBib29sLAo+ PiArICAgIC8vLyBXaGV0aGVyIHRvIGxvd2VyIHRoZSBrZXkgc2l6ZSBjdXRvZmYgZm9yIERTQS1i YXNlZCBzaWduYXR1cmVzCj4+ICsgICAgI1tzZXJkZShkZWZhdWx0KV0KPj4gKyAgICBwdWIgbWlu X2RzYV9rZXlfc2l6ZTogT3B0aW9uPHU2ND4sCj4+ICsgICAgLy8vIFdoZXRoZXIgdG8gbG93ZXIg dGhlIGtleSBzaXplIGN1dG9mZiBmb3IgUlNBLWJhc2VkIHNpZ25hdHVyZXMKPj4gKyAgICAjW3Nl cmRlKGRlZmF1bHQpXQo+PiArICAgIHB1YiBtaW5fcnNhX2tleV9zaXplOiBPcHRpb248dTY0PiwK Pj4gK30KPj4gKwo+PiArc3RydWN0IENlcnRXcmFwcGVyPCdhPiB7Cj4+ICsgICAgY2VydDogJidh IENlcnQsCj4+ICt9Cj4+ICsKPj4gK2ltcGwgVmVyaWZpY2F0aW9uSGVscGVyIGZvciBDZXJ0V3Jh cHBlcjwnXz4gewo+PiArICAgIGZuIGdldF9jZXJ0cygmbXV0IHNlbGYsIF9pZHM6ICZbS2V5SGFu ZGxlXSkgLT4gc2VxdW9pYV9vcGVucGdwOjpSZXN1bHQ8VmVjPENlcnQ+PiB7Cj4+ICsgICAgICAg IC8vIFJldHVybiBwdWJsaWMga2V5cyBmb3Igc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBoZXJlLgo+ PiArICAgICAgICBPayh2ZWMhW3NlbGYuY2VydC5jbG9uZSgpXSkKPj4gKyAgICB9Cj4+ICsKPj4g KyAgICBmbiBjaGVjaygmbXV0IHNlbGYsIHN0cnVjdHVyZTogTWVzc2FnZVN0cnVjdHVyZSkgLT4g c2VxdW9pYV9vcGVucGdwOjpSZXN1bHQ8KCk+IHsKPj4gKyAgICAgICAgLy8gSW4gdGhpcyBmdW5j dGlvbiwgd2UgaW1wbGVtZW50IG91ciBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHBvbGljeS4KPj4g Kwo+PiArICAgICAgICAvLyB3ZSBkb24ndCB3YW50IGNvbXByZXNzaW9uIGFuZC9vciBlbmNyeXB0 aW9uCj4+ICsgICAgICAgIGxldCBsYXllcnM6IFZlYzxfPiA9IHN0cnVjdHVyZS5pdGVyKCkuY29s bGVjdCgpOwo+PiArICAgICAgICBpZiBsYXllcnMubGVuKCkgPiAxIHx8IGxheWVycy5pc19lbXB0 eSgpIHsKPj4gKyAgICAgICAgICAgIGJhaWwhKAo+PiArICAgICAgICAgICAgICAgICJVbmV4cGVj dGVkIEdQRyBtZXNzYWdlIHN0cnVjdHVyZSAtIGV4cGVjdGVkIHBsYWluIHNpZ25lZCBkYXRhLCBn b3Qge30gbGF5ZXJzISIsCj4+ICsgICAgICAgICAgICAgICAgbGF5ZXJzLmxlbigpCj4+ICsgICAg ICAgICAgICApOwo+PiArICAgICAgICB9Cj4+ICsgICAgICAgIGxldCBsYXllciA9ICZsYXllcnNb MF07Cj4+ICsgICAgICAgIGxldCBtdXQgZXJyb3JzID0gVmVjOjpuZXcoKTsKPj4gKwo+PiArICAg ICAgICBsZXQgTWVzc2FnZUxheWVyOjpTaWduYXR1cmVHcm91cCB7IHJlc3VsdHMgfSA9IGxheWVy IGVsc2Ugewo+PiArICAgICAgICAgICAgYmFpbCEoIlVuZXhwZWN0ZWQgbWVzc2FnZSBzdHJ1Y3R1 cmUiKQo+PiArICAgICAgICB9Owo+PiArCj4+ICsgICAgICAgIGZvciByZXN1bHQgaW4gcmVzdWx0 cyB7Cj4+ICsgICAgICAgICAgICBpZiBsZXQgRXJyKGUpID0gcmVzdWx0IHsKPj4gKyAgICAgICAg ICAgICAgICBlcnJvcnMucHVzaChlKTsKPj4gKyAgICAgICAgICAgIH0gZWxzZSB7Cj4+ICsgICAg ICAgICAgICAgICAgLy8gZ29vZCBzaWduYXR1cmUsIGVhcmx5IHJldHVybgo+PiArICAgICAgICAg ICAgICAgIHJldHVybiBPaygoKSk7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgIH0KPj4g Kwo+PiArICAgICAgICBsZXQgbXV0IGNvbnRleHQgPSBTdHJpbmc6Om5ldygpOwo+PiArICAgICAg ICBsZXQgZXJybGVuID0gZXJyb3JzLmxlbigpOwo+PiArCj4+ICsgICAgICAgIGlmIGVycmxlbiA+ IDEgewo+PiArICAgICAgICAgICAgY29udGV4dC5wdXNoX3N0cigmZm9ybWF0ISgiXG5FbmNvdW50 ZXJlZCB7ZXJybGVufSBlcnJvcnM6IikpOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAg Zm9yIChuLCBlcnIpIGluIGVycm9ycy5pdGVyKCkuZW51bWVyYXRlKCkgewo+PiArICAgICAgICAg ICAgaWYgZXJybGVuID4gMSB7Cj4+ICsgICAgICAgICAgICAgICAgY29udGV4dC5wdXNoX3N0cigm Zm9ybWF0ISgiXG5TaWduYXR1cmUgI3tufToge2Vycn0iKSk7Cj4+ICsgICAgICAgICAgICB9IGVs c2Ugewo+PiArICAgICAgICAgICAgICAgIGNvbnRleHQucHVzaF9zdHIoJmZvcm1hdCEoIlxue2Vy cn0iKSk7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICBtYXRjaCBlcnIgewo+PiAr ICAgICAgICAgICAgICAgIFZlcmlmaWNhdGlvbkVycm9yOjpNYWxmb3JtZWRTaWduYXR1cmUgeyBl cnJvciwgLi4gfQo+PiArICAgICAgICAgICAgICAgIHwgVmVyaWZpY2F0aW9uRXJyb3I6OlVuYm91 bmRLZXkgeyBlcnJvciwgLi4gfQo+PiArICAgICAgICAgICAgICAgIHwgVmVyaWZpY2F0aW9uRXJy b3I6OkJhZEtleSB7IGVycm9yLCAuLiB9Cj4+ICsgICAgICAgICAgICAgICAgfCBWZXJpZmljYXRp b25FcnJvcjo6QmFkU2lnbmF0dXJlIHsgZXJyb3IsIC4uIH0gPT4gewo+PiArICAgICAgICAgICAg ICAgICAgICBsZXQgbXV0IGNhdXNlID0gZXJyb3IuY2hhaW4oKTsKPj4gKyAgICAgICAgICAgICAg ICAgICAgaWYgY2F1c2UubGVuKCkgPiAxIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNh dXNlLm5leHQoKTsgLy8gYWxyZWFkeSBpbmNsdWRlZCBpbiBgZXJyYCBhYm92ZQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgY29udGV4dC5wdXNoX3N0cigiQ2F1c2VkIGJ5OiIpOwo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgZm9yIChuLCBlKSBpbiBjYXVzZS5lbnVtZXJhdGUoKSB7Cj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5wdXNoX3N0cigmZm9ybWF0ISgi XHR7bn06IHtlfSIpKTsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICAg ICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgICAgICBW ZXJpZmljYXRpb25FcnJvcjo6TWlzc2luZ0tleSB7IC4uIH0KPj4gKyAgICAgICAgICAgICAgICB8 IFZlcmlmaWNhdGlvbkVycm9yOjpVbmtub3duU2lnbmF0dXJlIHsgLi4gfSA9PiB7fSAvLyBkb2Vz bid0IGNvbnRhaW4gYSBjYXVzZQo+PiArICAgICAgICAgICAgICAgIF8gPT4ge30gLy8gd2UgYWxy ZWFkeSBwcmludCB0aGUgZXJyb3IgYWJvdmUgaW4gZnVsbAo+PiArICAgICAgICAgICAgfTsKPj4g KyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIEVycihhbnlob3c6OmFueWhvdyEoIk5vIHZhbGlk IHNpZ25hdHVyZSBmb3VuZC4iKS5jb250ZXh0KGNvbnRleHQpKQo+PiArICAgIH0KPj4gK30KPj4g Kwo+PiArLy8vIFZlcmlmaWVzIEdQRy1zaWduZWQgYG1zZ2Agd2FzIHNpZ25lZCBieSBga2V5YCwg cmV0dXJuaW5nIHRoZSB2ZXJpZmllZCBkYXRhIHdpdGhvdXQgc2lnbmF0dXJlLgo+PiArcHViIGZu IHZlcmlmeV9zaWduYXR1cmUoCj4+ICsgICAgbXNnOiAmW3U4XSwKPj4gKyAgICBrZXk6ICZbdThd LAo+PiArICAgIGRldGFjaGVkX3NpZzogT3B0aW9uPCZbdThdPiwKPj4gKyAgICB3ZWFrX2NyeXB0 bzogJldlYWtDcnlwdG9Db25maWcsCj4+ICspIC0+IFJlc3VsdDxWZWM8dTg+LCBFcnJvcj4gewo+ PiArICAgIGxldCBtdXQgcG9saWN5ID0gU3RhbmRhcmRQb2xpY3k6Om5ldygpOwo+PiArICAgIGlm IHdlYWtfY3J5cHRvLmFsbG93X3NoYTEgewo+PiArICAgICAgICBwb2xpY3kuYWNjZXB0X2hhc2go SGFzaEFsZ29yaXRobTo6U0hBMSk7Cj4+ICsgICAgfQo+PiArICAgIGlmIGxldCBTb21lKG1pbl9k c2EpID0gd2Vha19jcnlwdG8ubWluX2RzYV9rZXlfc2l6ZSB7Cj4+ICsgICAgICAgIGlmIG1pbl9k c2EgPD0gMTAyNCB7Cj4+ICsgICAgICAgICAgICBwb2xpY3kuYWNjZXB0X2FzeW1tZXRyaWNfYWxn byhzZXF1b2lhX29wZW5wZ3A6OnBvbGljeTo6QXN5bW1ldHJpY0FsZ29yaXRobTo6RFNBMTAyNCk7 Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9Cj4+ICsgICAgaWYgbGV0IFNvbWUobWluX3JzYSkgPSB3 ZWFrX2NyeXB0by5taW5fcnNhX2tleV9zaXplIHsKPj4gKyAgICAgICAgaWYgbWluX3JzYSA8PSAx MDI0IHsKPj4gKyAgICAgICAgICAgIHBvbGljeS5hY2NlcHRfYXN5bW1ldHJpY19hbGdvKHNlcXVv aWFfb3BlbnBncDo6cG9saWN5OjpBc3ltbWV0cmljQWxnb3JpdGhtOjpSU0ExMDI0KTsKPj4gKyAg ICAgICAgfQo+PiArICAgIH0KPj4gKwo+PiArICAgIGxldCB2ZXJpZmllciA9IHxjZXJ0fCB7Cj4+ ICsgICAgICAgIGxldCBoZWxwZXIgPSBDZXJ0V3JhcHBlciB7IGNlcnQ6ICZjZXJ0IH07Cj4+ICsK Pj4gKyAgICAgICAgaWYgbGV0IFNvbWUoc2lnKSA9IGRldGFjaGVkX3NpZyB7Cj4+ICsgICAgICAg ICAgICBsZXQgbXV0IHZlcmlmaWVyID0KPj4gKyAgICAgICAgICAgICAgICBEZXRhY2hlZFZlcmlm aWVyQnVpbGRlcjo6ZnJvbV9ieXRlcyhzaWcpPy53aXRoX3BvbGljeSgmcG9saWN5LCBOb25lLCBo ZWxwZXIpPzsKPj4gKyAgICAgICAgICAgIHZlcmlmaWVyLnZlcmlmeV9ieXRlcyhtc2cpPzsKPj4g KyAgICAgICAgICAgIE9rKG1zZy50b192ZWMoKSkKPj4gKyAgICAgICAgfSBlbHNlIHsKPj4gKyAg ICAgICAgICAgIGxldCBtdXQgdmVyaWZpZWQgPSBWZWM6Om5ldygpOwo+PiArICAgICAgICAgICAg bGV0IG11dCB2ZXJpZmllciA9Cj4+ICsgICAgICAgICAgICAgICAgVmVyaWZpZXJCdWlsZGVyOjpm cm9tX2J5dGVzKG1zZyk/LndpdGhfcG9saWN5KCZwb2xpY3ksIE5vbmUsIGhlbHBlcik/Owo+PiAr ICAgICAgICAgICAgbGV0IF9ieXRlcyA9IGlvOjpjb3B5KCZtdXQgdmVyaWZpZXIsICZtdXQgdmVy aWZpZWQpPzsKPj4gKyAgICAgICAgICAgIGlmICF2ZXJpZmllci5tZXNzYWdlX3Byb2Nlc3NlZCgp IHsKPj4gKyAgICAgICAgICAgICAgICBiYWlsISgiRmFpbGVkIHRvIHZlcmlmeSBtZXNzYWdlISIp Owo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgT2sodmVyaWZpZWQpCj4+ICsgICAg ICAgIH0KPj4gKyAgICB9Owo+PiArCj4+ICsgICAgbGV0IG11dCBwYWNrZXRfcGFyc2VyID0gUGFj a2V0UGFyc2VyOjpmcm9tX2J5dGVzKGtleSk/Owo+PiArCj4+ICsgICAgLy8gcGFyc2UgYWxsIHBh Y2tldHMgdG8gc2VlIHdoZXRoZXIgdGhpcyBpcyBhIHNpbXBsZSBjZXJ0aWZpY2F0ZSBvciBhIGtl eXJpbmcKPj4gKyAgICB3aGlsZSBsZXQgUGFja2V0UGFyc2VyUmVzdWx0OjpTb21lKHBwKSA9IHBh Y2tldF9wYXJzZXIgewo+PiArICAgICAgICBwYWNrZXRfcGFyc2VyID0gcHAucmVjdXJzZSgpPy4x Owo+PiArICAgIH0KPj4gKwo+PiArICAgIGlmIGxldCBQYWNrZXRQYXJzZXJSZXN1bHQ6OkVPRihl b2YpID0gcGFja2V0X3BhcnNlciB7Cj4+ICsgICAgICAgIC8vIHZlcmlmeSBhZ2FpbnN0IGEgc2lu Z2xlIGNlcnRpZmljYXRlCj4+ICsgICAgICAgIGlmIGVvZi5pc19jZXJ0KCkuaXNfb2soKSB7Cj4+ ICsgICAgICAgICAgICBsZXQgY2VydCA9IENlcnQ6OmZyb21fYnl0ZXMoa2V5KT87Cj4+ICsgICAg ICAgICAgICByZXR1cm4gdmVyaWZpZXIoY2VydCk7Cj4+ICsgICAgICAgIC8vIHZlcmlmeSBhZ2Fp bnN0IGEga2V5cmluZwo+PiArICAgICAgICB9IGVsc2UgaWYgZW9mLmlzX2tleXJpbmcoKS5pc19v aygpIHsKPj4gKyAgICAgICAgICAgIGxldCBwYWNrZXRfcGFyc2VyID0gUGFja2V0UGFyc2VyOjpm cm9tX2J5dGVzKGtleSk/Owo+PiArCj4+ICsgICAgICAgICAgICByZXR1cm4gQ2VydFBhcnNlcjo6 ZnJvbShwYWNrZXRfcGFyc2VyKQo+PiArICAgICAgICAgICAgICAgIC8vIGZsYXR0ZW4gaGVyZSBh cyB3ZSBpZ25vcmUgcGFja2V0cyB0aGF0IGFyZW4ndCBhIGNlcnRpZmljYXRlCj4+ICsgICAgICAg ICAgICAgICAgLmZsYXR0ZW4oKQo+PiArICAgICAgICAgICAgICAgIC8vIGtlZXAgdHJ5aW5nIHRv IHZlcmlmeSB0aGUgbWVzc2FnZSB1bnRpbCB0aGUgZmlyc3QgY2VydGlmaWNhdGUgdGhhdCBzdWNj ZWVkcwo+PiArICAgICAgICAgICAgICAgIC5maW5kX21hcCh8Y3wgdmVyaWZpZXIoYykub2soKSkK Pj4gKyAgICAgICAgICAgICAgICAvLyBpZiBubyBjZXJ0aWZpY2F0ZSB2ZXJpZmllZCB0aGUgbWVz c2FnZSwgYWJvcnQKPj4gKyAgICAgICAgICAgICAgICAub2tfb3JfZWxzZSh8fCBmb3JtYXRfZXJy ISgiTm8ga2V5IGluIGtleXJpbmcgY291bGQgdmVyaWZ5IHRoZSBtZXNzYWdlISIpKTsKPj4gKyAg ICAgICAgfQo+PiArICAgIH0KPj4gKwo+PiArICAgIC8vIG5laXRoZXIgYSBrZXlyaW5nIG5vciBh IGNlcnRpZmljYXRlIHdhcyBkZXRlY3QsIHNvIHdlIGFib3J0IGhlcmUKPj4gKyAgICBiYWlsISgi J2tleS1wYXRoJyBjb250YWlucyBuZWl0aGVyIGEga2V5cmluZyBub3IgYSBjZXJ0aWZpY2F0ZSwg YWJvcnRpbmchIik7Cj4+ICt9Cj4+IC0tIAo+PiAyLjQ3LjMKPj4KPj4KPj4gX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4gcHZlLWRldmVsIG1haWxpbmcg bGlzdAo+PiBwdmUtZGV2ZWxAbGlzdHMucHJveG1veC5jb20KPj4gaHR0cHM6Ly9saXN0cy5wcm94 bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcHZlLWRldmVsCj4+Cj4+Cj4+Cj4gCj4g Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBwdmUt ZGV2ZWwgbWFpbGluZyBsaXN0Cj4gcHZlLWRldmVsQGxpc3RzLnByb3htb3guY29tCj4gaHR0cHM6 Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcHZlLWRldmVsCj4g Cj4gCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnB2 ZS1kZXZlbCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8v bGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3B2ZS1kZXZlbAo=