From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pbs-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id BFC8C1FF16E for <inbox@lore.proxmox.com>; Mon, 17 Mar 2025 16:43:25 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D244B7D2E; Mon, 17 Mar 2025 16:43:15 +0100 (CET) Message-ID: <3536d161-85b1-4367-bf8f-609ff3ddde0d@proxmox.com> Date: Mon, 17 Mar 2025 16:43:11 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com>, =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com> References: <20250310111634.162156-1-c.ebner@proxmox.com> <20250310111634.162156-5-c.ebner@proxmox.com> <1742220037.vm4jzkcn3x.astroid@yuna.none> Content-Language: en-US, de-DE From: Christian Ebner <c.ebner@proxmox.com> In-Reply-To: <1742220037.vm4jzkcn3x.astroid@yuna.none> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.369 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 SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pbs-devel] [PATCH v2 proxmox-backup 4/4] fix #5331: garbage collection: avoid multiple chunk atime updates X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion <pbs-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pbs-devel/> List-Post: <mailto:pbs-devel@lists.proxmox.com> List-Help: <mailto:pbs-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" <pbs-devel-bounces@lists.proxmox.com> T24gMy8xNy8yNSAxNTo1NSwgRmFiaWFuIEdyw7xuYmljaGxlciB3cm90ZToKPiBPbiBNYXJjaCAx MCwgMjAyNSAxMjoxNiBwbSwgQ2hyaXN0aWFuIEVibmVyIHdyb3RlOgo+PiBSZWR1Y2UgdGhlIG51 bWJlciBvZiBhdGltZSB1cGRhdGVzIG9uIHRoZSBzYW1lIGNodW5rIGJ5IGxvZ2ljYWxseQo+PiBp dGVyYXRpbmcgb3ZlciBpbWFnZSBpbmRleCBmaWxlcywgZm9sbG93aW5nIHRoZSBpbmNyZW1lbnRh bCBiYWNrdXAKPj4gbG9naWMuIEJ5IGluc2VydGluZyBwYXRocyBmb3IgZW5jb3VudGVyZWQgaW1h Z2VzIGR1cmluZwo+PiBgbGlzdF9pbWFnZXNgIHVzaW5nIHRoZSBHcm91cGVkSW1hZ2VMaXN0IHN0 cnVjdHVyZSwgdGhlIGl0ZXJhdGlvbgo+PiBoYXBwZW5zIG5vdyBmb3IgdGhlIHNhbWUgaW1hZ2Ug ZmlsZW5hbWVzIGluIHRoZSBzYW1lIGltYWdlIG5hbWVzcGFjZQo+PiBhbmQgZ3JvdXAgaW4gYSBv cmRlciBiYXNlZCBvbiB0aGUgc25hcHNob3QgdGltZXN0YW1wLiBGb3IgZWFjaCBpbWFnZSwKPj4g a2VlcCB0cmFjayBvZiB0aGUgZW5jb3VudGVyZWQgY2h1bmsgZGlnZXN0cywgYW5kIHJlbWVtYmVy IHRoZXNlIGFzCj4+IHNlZW4gZm9yIHRoZSBuZXh0IHNuYXBzaG90LiBDaHVua3Mgd2hpY2ggaGF2 ZSBiZWVuIGVuY291bnRlcmVkIGluIHRoZQo+PiBwcmV2aW91cyBpbWFnZSBpbmRleCwgYnV0IGFy ZSBub3QgcHJlc2VudCBhbnltb3JlIGFyZSByZW1vdmVkIGZyb20KPj4gdGhlIGxpc3QgYWZ0ZXIg ZWFjaCBpbWFnZSwgaW4gb3JkZXIgdG8gcmVkdWNlIG1lbW9yeSBmb290cHJpbnQuCj4+Cj4+IEZp eGVzOiBodHRwczovL2J1Z3ppbGxhLnByb3htb3guY29tL3Nob3dfYnVnLmNnaT9pZD01MzMxCj4+ IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBFYm5lciA8Yy5lYm5lckBwcm94bW94LmNvbT4KPiAK PiB0ZWNobmljYWxseSB0aGlzIGNvdWxkIGJlIHNwbGl0IGludG8gdHdvIHBhcnRzIC0gb25lIGZv ciB0aGUgaXRlcmF0aW5nCj4gY2hhbmdlLCBvbmUgZm9yIHRoZSBwZXJmb3JtYW5jZSBvcHRpbWl6 YXRpb24/IHdpdGggdGhlIGxhdHRlciBwYXJ0IG1heWJlCj4gYmVpbmcgY29tYmluZWQgd2l0aCBw YXRjaCMzIGFuZCB0aGUgb3JkZXIgc3dpdGNoZWQgYXJvdW5kPyA7KQoKT2theSwgd2lsbCByZW9y Z2FuaXplIHRoZSBwYXRjaGVzIGFjY29yZGluZ2x5LgoKPiAKPj4gLS0tCj4+IGNoYW5nZXMgc2lu Y2UgdmVyc2lvbiAxOgo+PiAtIFVzZSBwcmUtZXhpc3RpbmcgZGF0YXN0b3JlIGl0ZXJhdG9yIGhl bHBlcnMsIGZvbGxvd2luZyB0aGUgbG9naWMgb3RoZXIKPj4gICAgZGF0YXN0b3JlIG9wZXJhdGlv bnMgdGFrZS4KPj4gLSBDaHVua3MgYXJlIG5vdyByZW1lbWJlcmVkIGZvciBhbGwgYXJjaGl2ZXMg cGVyIHNuYXBzaG90LCBub3QganVzdCBhCj4+ICAgIHNpbmdsZSBhcmNoaXZlIHBlciBzbmFwc2hv dCBhcyBwcmV2aW91c2x5LCB0aGlzIG1pbWljcyBtb3JlIGNsb3NlbHkKPj4gICAgdGhlIGJhY2t1 cCBiZWhhdmlvdXIuCj4+Cj4+ICAgcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzIHwgMTE3 ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQo+PiAgIDEgZmlsZSBjaGFuZ2VkLCA4 NCBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL3Bicy1k YXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycyBiL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5y cwo+PiBpbmRleCBmZGJiMzNhOTguLmE4MDM0M2Q5YiAxMDA2NDQKPj4gLS0tIGEvcGJzLWRhdGFz dG9yZS9zcmMvZGF0YXN0b3JlLnJzCj4+ICsrKyBiL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9y ZS5ycwo+PiBAQCAtMjUsNyArMjUsNyBAQCB1c2UgcGJzX2FwaV90eXBlczo6ewo+PiAgICAgICBN YWludGVuYW5jZU1vZGUsIE1haW50ZW5hbmNlVHlwZSwgT3BlcmF0aW9uLCBVUElELAo+PiAgIH07 Cj4+ICAgCj4+IC11c2UgY3JhdGU6OmJhY2t1cF9pbmZvOjp7QmFja3VwRGlyLCBCYWNrdXBHcm91 cH07Cj4+ICt1c2UgY3JhdGU6OmJhY2t1cF9pbmZvOjp7QmFja3VwRGlyLCBCYWNrdXBHcm91cCwg QmFja3VwSW5mb307Cj4+ICAgdXNlIGNyYXRlOjpjaHVua19zdG9yZTo6Q2h1bmtTdG9yZTsKPj4g ICB1c2UgY3JhdGU6OmR5bmFtaWNfaW5kZXg6OntEeW5hbWljSW5kZXhSZWFkZXIsIER5bmFtaWNJ bmRleFdyaXRlcn07Cj4+ICAgdXNlIGNyYXRlOjpmaXhlZF9pbmRleDo6e0ZpeGVkSW5kZXhSZWFk ZXIsIEZpeGVkSW5kZXhXcml0ZXJ9Owo+PiBAQCAtOTcwLDEwICs5NzAsMTAgQEAgaW1wbCBEYXRh U3RvcmUgewo+PiAgICAgICAgICAgTGlzdEdyb3Vwczo6bmV3KEFyYzo6Y2xvbmUoc2VsZiksIG5z KT8uY29sbGVjdCgpCj4+ICAgICAgIH0KPj4gICAKPj4gLSAgICBmbiBsaXN0X2ltYWdlcygmc2Vs ZikgLT4gUmVzdWx0PFZlYzxQYXRoQnVmPiwgRXJyb3I+IHsKPj4gKyAgICBmbiBsaXN0X2ltYWdl cygmc2VsZikgLT4gUmVzdWx0PEhhc2hTZXQ8UGF0aEJ1Zj4sIEVycm9yPiB7Cj4+ICAgICAgICAg ICBsZXQgYmFzZSA9IHNlbGYuYmFzZV9wYXRoKCk7Cj4+ICAgCj4+IC0gICAgICAgIGxldCBtdXQg bGlzdCA9IHZlYyFbXTsKPj4gKyAgICAgICAgbGV0IG11dCBsaXN0ID0gSGFzaFNldDo6bmV3KCk7 Cj4+ICAgCj4+ICAgICAgICAgICB1c2Ugd2Fsa2Rpcjo6V2Fsa0RpcjsKPj4gICAKPj4gQEAgLTEw MjEsNyArMTAyMSw3IEBAIGltcGwgRGF0YVN0b3JlIHsKPj4gICAgICAgICAgICAgICAgICAgaWYg YXJjaGl2ZV90eXBlID09IEFyY2hpdmVUeXBlOjpGaXhlZEluZGV4Cj4+ICAgICAgICAgICAgICAg ICAgICAgICB8fCBhcmNoaXZlX3R5cGUgPT0gQXJjaGl2ZVR5cGU6OkR5bmFtaWNJbmRleAo+PiAg ICAgICAgICAgICAgICAgICB7Cj4+IC0gICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaChwYXRo KTsKPj4gKyAgICAgICAgICAgICAgICAgICAgbGlzdC5pbnNlcnQocGF0aCk7Cj4+ICAgICAgICAg ICAgICAgICAgIH0KPj4gICAgICAgICAgICAgICB9Cj4+ICAgICAgICAgICB9Cj4+IEBAIC0xMDcx LDYgKzEwNzEsNyBAQCBpbXBsIERhdGFTdG9yZSB7Cj4+ICAgICAgICAgICAmc2VsZiwKPj4gICAg ICAgICAgIGluZGV4OiBCb3g8ZHluIEluZGV4RmlsZT4sCj4+ICAgICAgICAgICBmaWxlX25hbWU6 ICZQYXRoLCAvLyBvbmx5IHVzZWQgZm9yIGVycm9yIHJlcG9ydGluZwo+PiArICAgICAgICB0b3Vj aGVkX2NodW5rczogJm11dCBUb3VjaGVkQ2h1bmtzLAo+PiAgICAgICAgICAgc3RhdHVzOiAmbXV0 IEdhcmJhZ2VDb2xsZWN0aW9uU3RhdHVzLAo+PiAgICAgICAgICAgd29ya2VyOiAmZHluIFdvcmtl clRhc2tDb250ZXh0LAo+PiAgICAgICApIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPj4gQEAgLTEw ODEsNiArMTA4MiwxMiBAQCBpbXBsIERhdGFTdG9yZSB7Cj4+ICAgICAgICAgICAgICAgd29ya2Vy LmNoZWNrX2Fib3J0KCk/Owo+PiAgICAgICAgICAgICAgIHdvcmtlci5mYWlsX29uX3NodXRkb3du KCk/Owo+PiAgICAgICAgICAgICAgIGxldCBkaWdlc3QgPSBpbmRleC5pbmRleF9kaWdlc3QocG9z KS51bndyYXAoKTsKPj4gKwo+PiArICAgICAgICAgICAgLy8gQXZvaWQgbXVsdGlwbGUgZXhwZW5z aXZlIGF0aW1lIHVwZGF0ZXMgYnkgdXRpbWVuc2F0Cj4+ICsgICAgICAgICAgICBpZiB0b3VjaGVk X2NodW5rcy5pbnNlcnQoKmRpZ2VzdCkgewo+PiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ PiArICAgICAgICAgICAgfQo+PiArCj4+ICAgICAgICAgICAgICAgaWYgIXNlbGYuaW5uZXIuY2h1 bmtfc3RvcmUuY29uZF90b3VjaF9jaHVuayhkaWdlc3QsIGZhbHNlKT8gewo+PiAgICAgICAgICAg ICAgICAgICBsZXQgaGV4ID0gaGV4OjplbmNvZGUoZGlnZXN0KTsKPj4gICAgICAgICAgICAgICAg ICAgd2FybiEoCj4+IEBAIC0xMTA3LDQzICsxMTE0LDg3IEBAIGltcGwgRGF0YVN0b3JlIHsKPj4g ICAgICAgICAgIHN0YXR1czogJm11dCBHYXJiYWdlQ29sbGVjdGlvblN0YXR1cywKPj4gICAgICAg ICAgIHdvcmtlcjogJmR5biBXb3JrZXJUYXNrQ29udGV4dCwKPj4gICAgICAgKSAtPiBSZXN1bHQ8 KCksIEVycm9yPiB7Cj4+IC0gICAgICAgIGxldCBpbWFnZV9saXN0ID0gc2VsZi5saXN0X2ltYWdl cygpPzsKPj4gLSAgICAgICAgbGV0IGltYWdlX2NvdW50ID0gaW1hZ2VfbGlzdC5sZW4oKTsKPj4g LQo+PiArICAgICAgICAvLyBJdGVyYXRlIHR3aWNlIG92ZXIgdGhlIGRhdGFzdG9yZSB0byBmZXRj aCBpbWFnZXMsIGV2ZW4gaWYgdGhpcyBjb21lcyB3aXRoIGFuIGFkZGl0aW9uYWwKPj4gKyAgICAg ICAgLy8gcnVudGltZSBjb3N0Ogo+PiArICAgICAgICAvLyAtIEZpcnN0IGl0ZXJhdGlvbiB0byBm aW5kIGFsbCBpbmRleCBmaWxlcywgbm8gbWF0dGVyIGlmIHRoZXkgYXJlIGluIGEgbG9jYXRpb24g ZXhwZWN0ZWQKPj4gKyAgICAgICAgLy8gICBieSB0aGUgZGF0YXN0b3JlJ3MgaGllcmFyY2h5Cj4+ ICsgICAgICAgIC8vIC0gSXRlcmF0ZSB1c2luZyB0aGUgZGF0YXN0b3JlJ3MgaGVscGVycywgc28g dGhlIG5hbWVzcGFjZXMsIGdyb3VwcyBhbmQgc25hcHNob3RzIGFyZQo+PiArICAgICAgICAvLyAg IGxvb2tlZCB1cCBnaXZlbiB0aGUgZXhwZWN0ZWQgaGllcmFyY2h5IGFuZCBpdGVyYXRvciBsb2dp Ywo+PiArICAgICAgICAvLwo+PiArICAgICAgICAvLyBCeSB0aGlzIGl0IGlzIGFzc3VyZWQgdGhh dCBhbGwgaW5kZXggZmlsZXMgYXJlIHVzZWQsIGV2ZW4gaWYgdGhleSB3b3VsZCBub3QgaGF2ZSBi ZWVuCj4+ICsgICAgICAgIC8vIHNlZW4gYnkgdGhlIHJlZ3VsYXIgbG9naWMgYW5kIHRoZSB1c2Vy IGlzIGluZm9ybWVkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gcnVuIGFib3V0Cj4+ICsgICAg ICAgIC8vIHRoZSBkZXRlY3RlZCBpbmRleCBmaWxlcyBub3QgZm9sbG93aW5nIHRoZSBpdGVyYXRv cnMgbG9naWMuCj4+ICsKPj4gKyAgICAgICAgbGV0IG11dCB1bnByb2Nlc3NlZF9pbWFnZV9saXN0 ID0gc2VsZi5saXN0X2ltYWdlcygpPzsKPj4gKyAgICAgICAgbGV0IGltYWdlX2NvdW50ID0gdW5w cm9jZXNzZWRfaW1hZ2VfbGlzdC5sZW4oKTsKPj4gKwo+PiArICAgICAgICAvLyBPcHRpbWl6ZSBm b3IgYXZvaWRpbmcgdXBkYXRlcyBvZiBjaHVua3MgYXRpbWUgaW4gc2FtZSBncm91cCBmb3IgY29u c2VjdXRpdmUKPj4gKyAgICAgICAgLy8gc25hcHNob3RzIG11bHRpcGxlIHRpbWVzLgo+PiArICAg ICAgICBsZXQgbXV0IHRvdWNoZWRfY2h1bmtzID0gVG91Y2hlZENodW5rczo6bmV3KCk7Cj4+ICsg ICAgICAgIGxldCBtdXQgcHJvY2Vzc2VkX2ltYWdlcyA9IDA7Cj4+ICAgICAgICAgICBsZXQgbXV0 IGxhc3RfcGVyY2VudGFnZTogdXNpemUgPSAwOwo+PiAgIAo+PiAtICAgICAgICBsZXQgbXV0IHN0 cmFuZ2VfcGF0aHNfY291bnQ6IHU2NCA9IDA7Cj4+IC0KPj4gLSAgICAgICAgZm9yIChpLCBpbWcp IGluIGltYWdlX2xpc3QuaW50b19pdGVyKCkuZW51bWVyYXRlKCkgewo+PiAtICAgICAgICAgICAg d29ya2VyLmNoZWNrX2Fib3J0KCk/Owo+PiAtICAgICAgICAgICAgd29ya2VyLmZhaWxfb25fc2h1 dGRvd24oKT87Cj4+IC0KPj4gLSAgICAgICAgICAgIGlmIGxldCBTb21lKGJhY2t1cF9kaXJfcGF0 aCkgPSBpbWcucGFyZW50KCkgewo+PiAtICAgICAgICAgICAgICAgIGxldCBiYWNrdXBfZGlyX3Bh dGggPSBiYWNrdXBfZGlyX3BhdGguc3RyaXBfcHJlZml4KHNlbGYuYmFzZV9wYXRoKCkpPzsKPj4g LSAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShiYWNrdXBfZGlyX3N0cikgPSBiYWNrdXBfZGly X3BhdGgudG9fc3RyKCkgewo+PiAtICAgICAgICAgICAgICAgICAgICBpZiBwYnNfYXBpX3R5cGVz OjpwYXJzZV9uc19hbmRfc25hcHNob3QoYmFja3VwX2Rpcl9zdHIpLmlzX2VycigpIHsKPj4gLSAg ICAgICAgICAgICAgICAgICAgICAgIHN0cmFuZ2VfcGF0aHNfY291bnQgKz0gMTsKPj4gKyAgICAg ICAgbGV0IGFyY19zZWxmID0gQXJjOjpuZXcoc2VsZi5jbG9uZSgpKTsKPj4gKyAgICAgICAgZm9y IG5hbWVzcGFjZSBpbiBhcmNfc2VsZgo+PiArICAgICAgICAgICAgLnJlY3Vyc2l2ZV9pdGVyX2Jh Y2t1cF9ucyhCYWNrdXBOYW1lc3BhY2U6OnJvb3QoKSkKPj4gKyAgICAgICAgICAgIC5jb250ZXh0 KCJjcmVhdGluZyBuYW1lc3BhY2UgaXRlcmF0b3IgZmFpbGVkIik/Cj4+ICsgICAgICAgIHsKPj4g KyAgICAgICAgICAgIGxldCBuYW1lc3BhY2UgPSBuYW1lc3BhY2UuY29udGV4dCgiaXRlcmF0aW5n IG5hbWVzcGFjZXMgZmFpbGVkIik/Owo+PiArICAgICAgICAgICAgZm9yIGdyb3VwIGluIGFyY19z ZWxmLml0ZXJfYmFja3VwX2dyb3VwcyhuYW1lc3BhY2UpPyB7Cj4+ICsgICAgICAgICAgICAgICAg bGV0IGdyb3VwID0gZ3JvdXAuY29udGV4dCgiaXRlcmF0aW5nIGJhY2t1cCBncm91cHMgZmFpbGVk Iik/Owo+PiArICAgICAgICAgICAgICAgIGxldCBtdXQgc25hcHNob3RzID0gZ3JvdXAubGlzdF9i YWNrdXBzKCkuY29udGV4dCgibGlzdGluZyBzbmFwc2hvdHMgZmFpbGVkIik/Owo+PiArICAgICAg ICAgICAgICAgIC8vIFNvcnQgYnkgc25hcHNob3QgdGltZXN0YW1wIHRvIGl0ZXJhdGUgb3ZlciBj b25zZWN1dGl2ZSBzbmFwc2hvdHMgZm9yIGVhY2ggaW1hZ2UuCj4+ICsgICAgICAgICAgICAgICAg QmFja3VwSW5mbzo6c29ydF9saXN0KCZtdXQgc25hcHNob3RzLCB0cnVlKTsKPj4gKyAgICAgICAg ICAgICAgICBmb3Igc25hcHNob3QgaW4gc25hcHNob3RzIHsKPj4gKyAgICAgICAgICAgICAgICAg ICAgZm9yIGZpbGUgaW4gc25hcHNob3QuZmlsZXMgewo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgd29ya2VyLmNoZWNrX2Fib3J0KCk/Owo+PiArICAgICAgICAgICAgICAgICAgICAgICAgd29y a2VyLmZhaWxfb25fc2h1dGRvd24oKT87Cj4+ICsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg IGxldCBtdXQgcGF0aCA9IHNuYXBzaG90LmJhY2t1cF9kaXIuZnVsbF9wYXRoKCk7Cj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICBwYXRoLnB1c2goZmlsZSk7Cj4+ICsKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIGxldCBpbmRleCA9IG1hdGNoIHNlbGYub3Blbl9pbmRleF9yZWFkZXIoJnBh dGgpPyB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZShpbmRleCkgPT4gaW5k ZXgsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiBjb250aW51ZSwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgIH07Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBz ZWxmLmluZGV4X21hcmtfdXNlZF9jaHVua3MoCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5kZXgsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhdGgsCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJm11dCB0b3VjaGVkX2NodW5rcywKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdGF0dXMsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd29ya2VyLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgKT87Cj4+ICsKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgIHVucHJvY2Vzc2VkX2ltYWdlX2xpc3QucmVtb3ZlKCZwYXRoKTsK Pj4gKwo+PiArICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBlcmNlbnRhZ2UgPSAocHJvY2Vz c2VkX2ltYWdlcyArIDEpICogMTAwIC8gaW1hZ2VfY291bnQ7Cj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICBpZiBwZXJjZW50YWdlID4gbGFzdF9wZXJjZW50YWdlIHsKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbmZvISgKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIm1hcmtlZCB7cGVyY2VudGFnZX0lICh7fSBvZiB7aW1hZ2VfY291bnR9IGluZGV4IGZpbGVz KSIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZF9pbWFnZXMg KyAxLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGFzdF9wZXJjZW50YWdlID0gcGVyY2VudGFnZTsKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZF9p bWFnZXMgKz0gMTsKPj4gICAgICAgICAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgICAg ICAgICAgdG91Y2hlZF9jaHVua3MucmVzZXQoKTsKPj4gICAgICAgICAgICAgICAgICAgfQo+PiAg ICAgICAgICAgICAgIH0KPj4gLQo+PiAtICAgICAgICAgICAgaWYgbGV0IFNvbWUoaW5kZXgpID0g c2VsZi5vcGVuX2luZGV4X3JlYWRlcigmaW1nKT8gewo+PiAtICAgICAgICAgICAgICAgIHNlbGYu aW5kZXhfbWFya191c2VkX2NodW5rcyhpbmRleCwgJmltZywgc3RhdHVzLCB3b3JrZXIpPzsKPj4g LSAgICAgICAgICAgIH0KPj4gLQo+PiAtICAgICAgICAgICAgbGV0IHBlcmNlbnRhZ2UgPSAoaSAr IDEpICogMTAwIC8gaW1hZ2VfY291bnQ7Cj4+IC0gICAgICAgICAgICBpZiBwZXJjZW50YWdlID4g bGFzdF9wZXJjZW50YWdlIHsKPj4gLSAgICAgICAgICAgICAgICBpbmZvISgKPj4gLSAgICAgICAg ICAgICAgICAgICAgIm1hcmtlZCB7cGVyY2VudGFnZX0lICh7fSBvZiB7aW1hZ2VfY291bnR9IGlu ZGV4IGZpbGVzKSIsCj4+IC0gICAgICAgICAgICAgICAgICAgIGkgKyAxLAo+PiAtICAgICAgICAg ICAgICAgICk7Cj4+IC0gICAgICAgICAgICAgICAgbGFzdF9wZXJjZW50YWdlID0gcGVyY2VudGFn ZTsKPj4gLSAgICAgICAgICAgIH0KPj4gICAgICAgICAgIH0KPj4gICAKPj4gKyAgICAgICAgbGV0 IHN0cmFuZ2VfcGF0aHNfY291bnQgPSB1bnByb2Nlc3NlZF9pbWFnZV9saXN0LmxlbigpOwo+PiAg ICAgICAgICAgaWYgc3RyYW5nZV9wYXRoc19jb3VudCA+IDAgewo+PiAtICAgICAgICAgICAgaW5m byEoCj4+IC0gICAgICAgICAgICAgICAgImZvdW5kIChhbmQgbWFya2VkKSB7c3RyYW5nZV9wYXRo c19jb3VudH0gaW5kZXggZmlsZXMgb3V0c2lkZSBvZiBleHBlY3RlZCBkaXJlY3Rvcnkgc2NoZW1l Igo+PiArICAgICAgICAgICAgd2FybiEoImZvdW5kIHtzdHJhbmdlX3BhdGhzX2NvdW50fSBpbmRl eCBmaWxlcyBvdXRzaWRlIG9mIGV4cGVjdGVkIGRpcmVjdG9yeSBzY2hlbWUiKTsKPj4gKyAgICAg ICAgfQo+PiArICAgICAgICBmb3IgcGF0aCBpbiB1bnByb2Nlc3NlZF9pbWFnZV9saXN0IHsKPj4g KyAgICAgICAgICAgIGxldCBpbmRleCA9IG1hdGNoIHNlbGYub3Blbl9pbmRleF9yZWFkZXIoJnBh dGgpPyB7Cj4+ICsgICAgICAgICAgICAgICAgU29tZShpbmRleCkgPT4gaW5kZXgsCj4+ICsgICAg ICAgICAgICAgICAgTm9uZSA9PiBjb250aW51ZSwKPj4gKyAgICAgICAgICAgIH07Cj4+ICsgICAg ICAgICAgICBzZWxmLmluZGV4X21hcmtfdXNlZF9jaHVua3MoaW5kZXgsICZwYXRoLCAmbXV0IHRv dWNoZWRfY2h1bmtzLCBzdGF0dXMsIHdvcmtlcik/Owo+PiArICAgICAgICAgICAgd2FybiEoCj4+ ICsgICAgICAgICAgICAgICAgIk1hcmtlZCBjaHVua3MgZm9yIHVuZXhwZWN0ZWQgaW5kZXggZmls ZSBhdCAne30nIiwKPj4gKyAgICAgICAgICAgICAgICBwYXRoLnRvX3N0cmluZ19sb3NzeSgpCj4+ ICAgICAgICAgICAgICAgKTsKPj4gICAgICAgICAgIH0KPj4gICAKPj4gLS0gCj4+IDIuMzkuNQo+ Pgo+Pgo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+PiBwYnMtZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IHBicy1kZXZlbEBsaXN0cy5wcm94bW94LmNv bQo+PiBodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9w YnMtZGV2ZWwKPj4KPj4KPj4KPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+IHBicy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBwYnMtZGV2ZWxAbGlz dHMucHJveG1veC5jb20KPiBodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1h bi9saXN0aW5mby9wYnMtZGV2ZWwKPiAKPiAKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KcGJzLWRldmVsIG1haWxpbmcgbGlzdApwYnMtZGV2ZWxAbGlz dHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4v bGlzdGluZm8vcGJzLWRldmVsCg==