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 E56431FF178 for ; Mon, 1 Dec 2025 13:42:24 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id E7D811B9CC; Mon, 1 Dec 2025 13:42:48 +0100 (CET) Message-ID: Date: Mon, 1 Dec 2025 13:42:14 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Beta To: =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= , pdm-devel@lists.proxmox.com References: <20251201113917.518311-1-f.gruenbichler@proxmox.com> <20251201113917.518311-4-f.gruenbichler@proxmox.com> Content-Language: en-US From: Dominik Csapak In-Reply-To: <20251201113917.518311-4-f.gruenbichler@proxmox.com> X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1764592891770 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.030 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: Re: [pdm-devel] [RFC datacenter-manager 3/3] api: add subscription endpoints X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Datacenter Manager development discussion Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" c29tZSBjb21tZW50cyBpbmxpbmUKCnJlc3QgTEdUTQoKT24gMTIvMS8yNSAxMjozOCBQTSwgRmFi aWFuIEdyw7xuYmljaGxlciB3cm90ZToKPiBmb3IgdGhlIFBETSBzeXN0ZW0gaXRzZWxmLCBieSBw cm94eSBvZiBob3cgbWFueSBvZiB0aGUgcmVtb3RlIG5vZGVzIGhhdmUgdmFsaWQKPiBzdWJzY3Jp cHRpb25zIGFib3ZlIGEgY2VydGFpbiBsZXZlbC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBGYWJpYW4g R3LDvG5iaWNobGVyIDxmLmdydWVuYmljaGxlckBwcm94bW94LmNvbT4KPiAtLS0KPiB0aGUgdGhy ZXNob2xkcyBoZXJlIGFyZSByYXRoZXIgYXJiaXRyYXJ5IG9mIGNvdXJzZSwgYXMgaXMgdGhlIHJl ZnJlc2gKPiBpbnRlcnZhbCBmb3IgY2FjaGVkIHN1YnNjcmlwdGlvbiBpbmZvcm1hdGlvbi4uCj4g Cj4gICBzZXJ2ZXIvc3JjL2FwaS9ub2Rlcy9tb2QucnMgICAgICAgICAgfCAgIDIgKwo+ICAgc2Vy dmVyL3NyYy9hcGkvbm9kZXMvc3Vic2NyaXB0aW9uLnJzIHwgMTkxICsrKysrKysrKysrKysrKysr KysrKysrKysrKwo+ICAgc2VydmVyL3NyYy9hcGkvcmVzb3VyY2VzLnJzICAgICAgICAgIHwgICAy ICstCj4gICAzIGZpbGVzIGNoYW5nZWQsIDE5NCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p Cj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgc2VydmVyL3NyYy9hcGkvbm9kZXMvc3Vic2NyaXB0aW9u LnJzCj4gCj4gZGlmZiAtLWdpdCBhL3NlcnZlci9zcmMvYXBpL25vZGVzL21vZC5ycyBiL3NlcnZl ci9zcmMvYXBpL25vZGVzL21vZC5ycwo+IGluZGV4IGEwZmUxNGEuLjNhNzk1ZDYgMTAwNjQ0Cj4g LS0tIGEvc2VydmVyL3NyYy9hcGkvbm9kZXMvbW9kLnJzCj4gKysrIGIvc2VydmVyL3NyYy9hcGkv bm9kZXMvbW9kLnJzCj4gQEAgLTExLDYgKzExLDcgQEAgcHViIG1vZCBqb3VybmFsOwo+ICAgcHVi IG1vZCBuZXR3b3JrOwo+ICAgcHViIG1vZCBycmRkYXRhOwo+ICAgcHViIG1vZCBzdGF0dXM7Cj4g K3B1YiBtb2Qgc3Vic2NyaXB0aW9uOwo+ICAgcHViIG1vZCBzeXNsb2c7Cj4gICBwdWIgbW9kIHRh c2tzOwo+ICAgcHViIG1vZCB0ZXJtcHJveHk7Cj4gQEAgLTQ1LDYgKzQ2LDcgQEAgcHViIGNvbnN0 IFNVQkRJUlM6IFN1YmRpck1hcCA9ICZzb3J0ZWQhKFsKPiAgICAgICAoImpvdXJuYWwiLCAmam91 cm5hbDo6Uk9VVEVSKSwKPiAgICAgICAoIm5ldHdvcmsiLCAmbmV0d29yazo6Uk9VVEVSKSwKPiAg ICAgICAoInJyZGF0YSIsICZycmRkYXRhOjpST1VURVIpLAo+ICsgICAgKCJzdWJzY3JpcHRpb24i LCAmc3Vic2NyaXB0aW9uOjpST1VURVIpLAo+ICAgICAgICgic3RhdHVzIiwgJnN0YXR1czo6Uk9V VEVSKSwKPiAgICAgICAoInN5c2xvZyIsICZzeXNsb2c6OlJPVVRFUiksCj4gICAgICAgKCJ0YXNr cyIsICZ0YXNrczo6Uk9VVEVSKSwKPiBkaWZmIC0tZ2l0IGEvc2VydmVyL3NyYy9hcGkvbm9kZXMv c3Vic2NyaXB0aW9uLnJzIGIvc2VydmVyL3NyYy9hcGkvbm9kZXMvc3Vic2NyaXB0aW9uLnJzCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4zNDNhMmM4Cj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL3NlcnZlci9zcmMvYXBpL25vZGVzL3N1YnNjcmlwdGlvbi5ycwo+IEBAIC0w LDAgKzEsMTkxIEBACj4gK3VzZSBzdGQ6OmNvbGxlY3Rpb25zOjpIYXNoTWFwOwo+ICsKPiArdXNl IGFueWhvdzo6e2JhaWwsIEVycm9yfTsKPiArCj4gK3VzZSBwcm94bW94X3JvdXRlcjo6e1Blcm1p c3Npb24sIFJvdXRlcn07Cj4gK3VzZSBwcm94bW94X3NjaGVtYTo6YXBpOwo+ICt1c2UgcHJveG1v eF9zY2hlbWE6OmFwaV90eXBlczo6Tk9ERV9TQ0hFTUE7Cj4gK3VzZSBwcm94bW94X3N1YnNjcmlw dGlvbjo6ZmlsZXM6OnVwZGF0ZV9hcHRfYXV0aDsKPiArdXNlIHByb3htb3hfc3Vic2NyaXB0aW9u Ojp7U3Vic2NyaXB0aW9uSW5mbywgU3Vic2NyaXB0aW9uU3RhdHVzfTsKPiArdXNlIHByb3htb3hf c3lzOjpmczo6Q3JlYXRlT3B0aW9uczsKPiArCj4gK3VzZSBwZG1fYXBpX3R5cGVzOjpyZW1vdGVz OjpSZW1vdGVUeXBlOwo+ICt1c2UgcGRtX2FwaV90eXBlczo6c3Vic2NyaXB0aW9uOjp7Cj4gKyAg ICBOb2RlU3Vic2NyaXB0aW9uSW5mbywgU3Vic2NyaXB0aW9uTGV2ZWwsIFN1YnNjcmlwdGlvblN0 YXRpc3RpY3MsCj4gK307Cj4gK3VzZSBwZG1fYXBpX3R5cGVzOjpQUklWX1NZU19NT0RJRlk7Cj4g Kwo+ICt1c2UgY3JhdGU6OmFwaTo6cmVzb3VyY2VzOjpnZXRfc3Vic2NyaXB0aW9uX2luZm9fZm9y X3JlbW90ZTsKPiArCj4gK2NvbnN0IFBST0RVQ1RfVVJMOiAmc3RyID0gImh0dHBzOi8vd3d3LnBy b3htb3guY29tL2VuL3Byb3htb3gtZGF0YWNlbnRlci1tYWFuZ2VyL3ByaWNpbmciOwoKdHlwbzoK CnMvbWFhbmdlci9tYW5hZ2VyLwoKPiArY29uc3QgQVBUX0FVVEhfRk46ICZzdHIgPSAiL2V0Yy9h cHQvYXV0aC5jb25mLmQvcGRtLmNvbmYiOwo+ICtjb25zdCBBUFRfQVVUSF9VUkw6ICZzdHIgPSAi ZW50ZXJwcmlzZS5wcm94bW94LmNvbS9kZWJpYW4vcGRtIjsKPiArCj4gKy8vIG1pbmltdW0gcmF0 aW8gb2Ygbm9kZXMgd2l0aCBhY3RpdmUgc3Vic2NyaXB0aW9ucwo+ICtjb25zdCBTVUJTQ1JJUFRJ T05fVEhSRVNIT0xEOiBmNjQgPSAwLjk7Cj4gKy8vIG1heCByYXRpbyBvZiBub2RlcyB3aXRoIGNv bW11bml0eSBzdWJzY3JpcHRpb25zLCBhbW9uZyBub2RlcyB3aXRoIHN1YnNjcmlwdGlvbnMKPiAr Y29uc3QgQ09NTVVOSVRZX1RIUkVTSE9MRDogZjY0ID0gMC40Owo+ICsKPiArZm4gYXB0X2F1dGhf ZmlsZV9vcHRzKCkgLT4gQ3JlYXRlT3B0aW9ucyB7Cj4gKyAgICBsZXQgbW9kZSA9IG5peDo6c3lz OjpzdGF0OjpNb2RlOjpmcm9tX2JpdHNfdHJ1bmNhdGUoMG8wNjAwKTsKPiArICAgIENyZWF0ZU9w dGlvbnM6Om5ldygpLnBlcm0obW9kZSkub3duZXIobml4Ojp1bmlzdGQ6OlJPT1QpCj4gK30KPiAr Cj4gK2FzeW5jIGZuIGdldF9hbGxfc3Vic2NyaXB0aW9uX2luZm9zKAo+ICspIC0+IFJlc3VsdDxI YXNoTWFwPFN0cmluZywgKFJlbW90ZVR5cGUsIEhhc2hNYXA8U3RyaW5nLCBPcHRpb248Tm9kZVN1 YnNjcmlwdGlvbkluZm8+Pik+LCBFcnJvcj4gewo+ICsgICAgbGV0IChyZW1vdGVzX2NvbmZpZywg X2RpZ2VzdCkgPSBwZG1fY29uZmlnOjpyZW1vdGVzOjpjb25maWcoKT87Cj4gKwo+ICsgICAgbGV0 IG11dCBzdWJzY3JpcHRpb25faW5mbyA9IEhhc2hNYXA6Om5ldygpOwo+ICsgICAgZm9yIChyZW1v dGVfbmFtZSwgcmVtb3RlKSBpbiByZW1vdGVzX2NvbmZpZy5pdGVyKCkgewo+ICsgICAgICAgIG1h dGNoIGdldF9zdWJzY3JpcHRpb25faW5mb19mb3JfcmVtb3RlKHJlbW90ZSwgMjQgKiA2MCAqIDYw KS5hd2FpdCB7Cj4gKyAgICAgICAgICAgIE9rKGluZm8pID0+IHsKPiArICAgICAgICAgICAgICAg IHN1YnNjcmlwdGlvbl9pbmZvLmluc2VydChyZW1vdGVfbmFtZS50b19zdHJpbmcoKSwgKHJlbW90 ZS50eSwgaW5mbykpOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIEVycihlcnIpID0+ IHsKPiArICAgICAgICAgICAgICAgIGxvZzo6ZGVidWchKCJGYWlsZWQgdG8gZ2V0IHN1YnNjcmlw dGlvbiBpbmZvIGZvciByZW1vdGUge3JlbW90ZV9uYW1lfSAtIHtlcnJ9Iik7Cj4gKyAgICAgICAg ICAgICAgICBzdWJzY3JpcHRpb25faW5mby5pbnNlcnQocmVtb3RlX25hbWUudG9fc3RyaW5nKCks IChyZW1vdGUudHksIEhhc2hNYXA6Om5ldygpKSk7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAg ICB9Cj4gKyAgICB9Cj4gKyAgICBPayhzdWJzY3JpcHRpb25faW5mbykKPiArfQo+ICsKPiArZm4g Y291bnRfc3Vic2NyaXB0aW9ucygKPiArICAgIHN1YnNjcmlwdGlvbl9pbmZvczogJkhhc2hNYXA8 Cj4gKyAgICAgICAgU3RyaW5nLAo+ICsgICAgICAgIChSZW1vdGVUeXBlLCBIYXNoTWFwPFN0cmlu ZywgT3B0aW9uPE5vZGVTdWJzY3JpcHRpb25JbmZvPj4pLAo+ICsgICAgPiwKPiArKSAtPiBTdWJz Y3JpcHRpb25TdGF0aXN0aWNzIHsKPiArICAgIGxldCBtdXQgc3RhdHMgPSBTdWJzY3JpcHRpb25T dGF0aXN0aWNzOjpkZWZhdWx0KCk7Cj4gKyAgICBmb3IgKF9yZW1vdGUsIChfcmVtb3RlX3R5cGUs IHJlbW90ZV9pbmZvcykpIGluIHN1YnNjcmlwdGlvbl9pbmZvcy5pdGVyKCkgewo+ICsgICAgICAg IGlmIHJlbW90ZV9pbmZvcy5pc19lbXB0eSgpIHsKPiArICAgICAgICAgICAgLy8gY291bnQgcmVt b3RlcyB3aXRob3V0IGluZm8gYXMgYXQgbGVhc3Qgb25lIG5vZGUKPiArICAgICAgICAgICAgc3Rh dHMudG90YWxfbm9kZXMgKz0gMTsKPiArICAgICAgICAgICAgY29udGludWU7Cgp0aGlzIHdvdWxk IGNvdW50IGFuIHVucmVhY2hhYmxlIHJlbW90ZSBhcyBvbmUgbm90IHN1YnNjcmliZWQgbm9kZSwg b3I/Cgo+ICsgICAgICAgIH0KPiArICAgICAgICBmb3IgKF9ub2RlLCBub2RlX2luZm8pIGluIHJl bW90ZV9pbmZvcy5pdGVyKCkgewo+ICsgICAgICAgICAgICBzdGF0cy50b3RhbF9ub2RlcyArPSAx Owo+ICsgICAgICAgICAgICBpZiBsZXQgU29tZShpbmZvKSA9IG5vZGVfaW5mbyB7Cj4gKyAgICAg ICAgICAgICAgICBpZiBpbmZvLnN0YXR1cyA9PSBTdWJzY3JpcHRpb25TdGF0dXM6OkFjdGl2ZSB7 Cj4gKyAgICAgICAgICAgICAgICAgICAgc3RhdHMuYWN0aXZlX3N1YnNjcmlwdGlvbnMgKz0gMTsK PiArICAgICAgICAgICAgICAgICAgICBpZiBpbmZvLmxldmVsID09IFN1YnNjcmlwdGlvbkxldmVs OjpDb21tdW5pdHkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICBzdGF0cy5jb21tdW5pdHkg Kz0gMTsKPiArICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAg ICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBzdGF0cwo+ICt9Cj4gKwo+ ICtmbiBjaGVja19jb3VudHMoc3RhdHM6IFN1YnNjcmlwdGlvblN0YXRpc3RpY3MpIC0+IFJlc3Vs dDwoKSwgRXJyb3I+IHsKPiArICAgIGxldCBzdWJzY3JpYmVkX3JhdGlvID0gc3RhdHMuYWN0aXZl X3N1YnNjcmlwdGlvbnMgYXMgZjY0IC8gc3RhdHMudG90YWxfbm9kZXMgYXMgZjY0Owo+ICsgICAg bGV0IGNvbW11bml0eV9yYXRpbyA9IHN0YXRzLmNvbW11bml0eSBhcyBmNjQgLyBzdGF0cy5hY3Rp dmVfc3Vic2NyaXB0aW9ucyBhcyBmNjQ7Cj4gKwo+ICsgICAgaWYgc3Vic2NyaWJlZF9yYXRpbyA+ IFNVQlNDUklQVElPTl9USFJFU0hPTEQgewo+ICsgICAgICAgIGlmIGNvbW11bml0eV9yYXRpbyA8 IENPTU1VTklUWV9USFJFU0hPTEQgewo+ICsgICAgICAgICAgICByZXR1cm4gT2soKCkpOwo+ICsg ICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgIGJhaWwhKCJUb28gbWFueSByZW1vdGUgbm9k ZXMgd2l0aCBjb21tdW5pdHkgbGV2ZWwgc3Vic2NyaXB0aW9uISIpOwo+ICsgICAgICAgIH0KPiAr ICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgYmFpbCEoIlRvbyBtYW55IHJlbW90ZSBub2RlcyB3aXRo b3V0IGFjdGl2ZSBzdWJzY3JpcHRpb24hIik7Cj4gKyAgICB9Cj4gK30KPiArCj4gKyNbYXBpKAo+ ICsgICAgYWNjZXNzOiB7IHBlcm1pc3Npb246ICZQZXJtaXNzaW9uOjpBbnlib2R5LCB9LAo+ICsg ICAgaW5wdXQ6IHsKPiArICAgICAgICBwcm9wZXJ0aWVzOiB7Cj4gKyAgICAgICAgICAgIG5vZGU6 IHsKPiArICAgICAgICAgICAgICAgIHNjaGVtYTogTk9ERV9TQ0hFTUEsCj4gKyAgICAgICAgICAg IH0sCj4gKyAgICAgICAgfSwKPiArICAgIH0sCj4gKyAgICByZXR1cm5zOiB7Cj4gKyAgICAgICAg dHlwZTogU3Vic2NyaXB0aW9uSW5mbywKPiArICAgIH0KPiArKV0KPiArLy8vIFJldHVybiBzdWJz Y3JpcHRpb24gc3RhdHVzCj4gK3B1YiBhc3luYyBmbiBnZXRfc3Vic2NyaXB0aW9uKCkgLT4gUmVz dWx0PFN1YnNjcmlwdGlvbkluZm8sIEVycm9yPiB7Cj4gKyAgICBsZXQgaW5mb3MgPSBnZXRfYWxs X3N1YnNjcmlwdGlvbl9pbmZvcygpLmF3YWl0PzsKPiArCj4gKyAgICBsZXQgc3RhdHMgPSBjb3Vu dF9zdWJzY3JpcHRpb25zKCZpbmZvcyk7Cj4gKwo+ICsgICAgaWYgbGV0IEVycihlcnIpID0gY2hl Y2tfY291bnRzKHN0YXRzKSB7Cj4gKyAgICAgICAgT2soU3Vic2NyaXB0aW9uSW5mbyB7Cj4gKyAg ICAgICAgICAgIHN0YXR1czogU3Vic2NyaXB0aW9uU3RhdHVzOjpJbnZhbGlkLAo+ICsgICAgICAg ICAgICBtZXNzYWdlOiBTb21lKGZvcm1hdCEoIntlcnJ9IikpLAo+ICsgICAgICAgICAgICBzZXJ2 ZXJpZDogTm9uZSwKPiArICAgICAgICAgICAgdXJsOiBTb21lKFBST0RVQ1RfVVJMLmludG8oKSks Cj4gKyAgICAgICAgICAgIC4uRGVmYXVsdDo6ZGVmYXVsdCgpCj4gKyAgICAgICAgfSkKPiArICAg IH0gZWxzZSB7Cj4gKyAgICAgICAgT2soU3Vic2NyaXB0aW9uSW5mbyB7Cj4gKyAgICAgICAgICAg IHN0YXR1czogU3Vic2NyaXB0aW9uU3RhdHVzOjpBY3RpdmUsCj4gKyAgICAgICAgICAgIHVybDog U29tZShQUk9EVUNUX1VSTC5pbnRvKCkpLAo+ICsgICAgICAgICAgICAuLkRlZmF1bHQ6OmRlZmF1 bHQoKQo+ICsgICAgICAgIH0pCj4gKyAgICB9Cj4gK30KPiArCj4gKyNbYXBpKAo+ICsgICAgaW5w dXQ6IHsKPiArICAgICAgICBwcm9wZXJ0aWVzOiB7Cj4gKyAgICAgICAgICAgIG5vZGU6IHsKPiAr ICAgICAgICAgICAgICAgIHNjaGVtYTogTk9ERV9TQ0hFTUEsCj4gKyAgICAgICAgICAgIH0sCj4g KyAgICAgICAgfSwKPiArICAgIH0sCj4gKyAgICBwcm90ZWN0ZWQ6IHRydWUsCj4gKyAgICBhY2Nl c3M6IHsKPiArICAgICAgICBwZXJtaXNzaW9uOiAmUGVybWlzc2lvbjo6UHJpdmlsZWdlKCZbInN5 c3RlbSJdLCBQUklWX1NZU19NT0RJRlksIGZhbHNlKSwKPiArICAgIH0sCj4gKyldCj4gKy8vLyBV cGRhdGUgc3Vic2NyaXB0aW9uIGluZm9ybWF0aW9uCj4gK3B1YiBhc3luYyBmbiBjaGVja19zdWJz Y3JpcHRpb24oKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7Cj4gKyAgICBsZXQgaW5mb3MgPSBnZXRf YWxsX3N1YnNjcmlwdGlvbl9pbmZvcygpLmF3YWl0PzsKPiArICAgIGxldCBzdGF0cyA9IGNvdW50 X3N1YnNjcmlwdGlvbnMoJmluZm9zKTsKPiArCj4gKyAgICBpZiBsZXQgRXJyKGVycikgPSBjaGVj a19jb3VudHMoc3RhdHMpIHsKPiArICAgICAgICB1cGRhdGVfYXB0X2F1dGgoQVBUX0FVVEhfRk4s IGFwdF9hdXRoX2ZpbGVfb3B0cygpLCBBUFRfQVVUSF9VUkwsIE5vbmUsIE5vbmUpPzsKPiArICAg ICAgICByZXR1cm4gRXJyKGVycik7Cj4gKyAgICB9Cj4gKwo+ICsgICAgbGV0IG11dCBmb3VuZCA9 IGZhbHNlOwo+ICsgICAgJ291dGVyOiBmb3IgKHJlbW90ZSwgKHJlbW90ZV90eXBlLCByZW1vdGVf aW5mbykpIGluIGluZm9zLml0ZXIoKSB7Cj4gKyAgICAgICAgaWYgKnJlbW90ZV90eXBlICE9IFJl bW90ZVR5cGU6OlB2ZSB7Cj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgIH0KPiAr ICAgICAgICBmb3IgKG5vZGUsIG5vZGVfaW5mbykgaW4gcmVtb3RlX2luZm8uaXRlcigpIHsKPiAr ICAgICAgICAgICAgaWYgbGV0IFNvbWUoaW5mbykgPSBub2RlX2luZm8gewo+ICsgICAgICAgICAg ICAgICAgaWYgaW5mby5zdGF0dXMgPT0gU3Vic2NyaXB0aW9uU3RhdHVzOjpBY3RpdmUKPiArICAg ICAgICAgICAgICAgICAgICAmJiBpbmZvLmtleS5pc19zb21lKCkKPiArICAgICAgICAgICAgICAg ICAgICAmJiBpbmZvLnNlcnZlcmlkLmlzX3NvbWUoKQo+ICsgICAgICAgICAgICAgICAgewo+ICsg ICAgICAgICAgICAgICAgICAgIGxvZzo6aW5mbyEoIlVzaW5nIHN1YnNjcmlwdGlvbiBvZiBub2Rl ICd7bm9kZX0nIG9mIHJlbW90ZSAne3JlbW90ZX0nIGZvciBlbnRlcnByaXNlIHJlcG9zaXRvcnkg YWNjZXNzIik7Cj4gKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlX2FwdF9hdXRoKAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICBBUFRfQVVUSF9GTiwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgYXB0X2F1dGhfZmlsZV9vcHRzKCksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIEFQVF9B VVRIX1VSTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5rZXkuY2xvbmUoKSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5zZXJ2ZXJpZC5jbG9uZSgpLAo+ICsgICAgICAg ICAgICAgICAgICAgICk/Owo+ICsgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKPiAr ICAgICAgICAgICAgICAgICAgICBicmVhayAnb3V0ZXI7Cj4gKyAgICAgICAgICAgICAgICB9Cj4g KyAgICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgIWZvdW5k IHsKPiArICAgICAgICBsb2c6Ondhcm4hKCJObyB2YWxpZCBzdWJzY3JpcHRpb24gZm91bmQgZm9y IGNvbmZpZ3VyaW5nIGVudGVycHJpc2UgcmVwb3NpdG9yeSBhY2Nlc3MuLiIpOwo+ICsgICAgICAg IHVwZGF0ZV9hcHRfYXV0aChBUFRfQVVUSF9GTiwgYXB0X2F1dGhfZmlsZV9vcHRzKCksIEFQVF9B VVRIX1VSTCwgTm9uZSwgTm9uZSk/Owo+ICsgICAgfQo+ICsKPiArICAgIE9rKCgpKQo+ICt9Cj4g Kwo+ICtwdWIgY29uc3QgUk9VVEVSOiBSb3V0ZXIgPSBSb3V0ZXI6Om5ldygpCj4gKyAgICAuZ2V0 KCZBUElfTUVUSE9EX0dFVF9TVUJTQ1JJUFRJT04pCj4gKyAgICAucG9zdCgmQVBJX01FVEhPRF9D SEVDS19TVUJTQ1JJUFRJT04pOwo+IGRpZmYgLS1naXQgYS9zZXJ2ZXIvc3JjL2FwaS9yZXNvdXJj ZXMucnMgYi9zZXJ2ZXIvc3JjL2FwaS9yZXNvdXJjZXMucnMKPiBpbmRleCA0YmVhYTU0Li5hZGFi MDIxIDEwMDY0NAo+IC0tLSBhL3NlcnZlci9zcmMvYXBpL3Jlc291cmNlcy5ycwo+ICsrKyBiL3Nl cnZlci9zcmMvYXBpL3Jlc291cmNlcy5ycwo+IEBAIC03NjcsNyArNzY3LDcgQEAgc3RhdGljIFNV QlNDUklQVElPTl9DQUNIRTogTGF6eUxvY2s8UndMb2NrPEhhc2hNYXA8U3RyaW5nLCBDYWNoZWRT dWJzY3JpcHRpb25TdGEKPiAgIC8vLwo+ICAgLy8vIElmIHJlY2VudCBlbm91Z2ggY2FjaGVkIGRh dGEgaXMgYXZhaWxhYmxlLCBpdCBpcyByZXR1cm5lZAo+ICAgLy8vIGluc3RlYWQgb2YgY2FsbGlu ZyBvdXQgdG8gdGhlIHJlbW90ZS4KPiAtYXN5bmMgZm4gZ2V0X3N1YnNjcmlwdGlvbl9pbmZvX2Zv cl9yZW1vdGUoCj4gK3B1YiBhc3luYyBmbiBnZXRfc3Vic2NyaXB0aW9uX2luZm9fZm9yX3JlbW90 ZSgKPiAgICAgICByZW1vdGU6ICZSZW1vdGUsCj4gICAgICAgbWF4X2FnZTogdTY0LAo+ICAgKSAt PiBSZXN1bHQ8SGFzaE1hcDxTdHJpbmcsIE9wdGlvbjxOb2RlU3Vic2NyaXB0aW9uSW5mbz4+LCBF cnJvcj4gewoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpwZG0tZGV2ZWwgbWFpbGluZyBsaXN0CnBkbS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQpodHRw czovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wZG0tZGV2ZWwK