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 2130A1FF16F for ; Tue, 8 Jul 2025 08:41:28 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A1EA2F624; Tue, 8 Jul 2025 08:42:10 +0200 (CEST) Message-ID: Date: Tue, 8 Jul 2025 08:41:35 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Beta To: Adam Kalisz , pve-devel@lists.proxmox.com References: <20250707081451.696685-1-d.csapak@proxmox.com> Content-Language: en-US From: Dominik Csapak In-Reply-To: X-SPAM-LEVEL: Spam detection results: 0 AWL 0.021 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. [restore.rs, proxmox.com] Subject: Re: [pve-devel] [RFC PATCH proxmox-backup-qemu] restore: make chunk loading more parallel 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" T24gNy83LzI1IDIxOjQ5LCBBZGFtIEthbGlzeiB3cm90ZToKPiBIaSBEb21pbmlrLAo+IAo+IHNl ZW1zIGxpa2UgYSBtb3JlIGVsZWdhbnQgc29sdXRpb24uIEluIG15IHRlc3Rpbmcgb24gdGhlIFJ5 emVuIHN5c3RlbToKClRoYW5rcyBmb3IgdGVzdGluZyEKCj4gCj4gcHJvZ3Jlc3MgMTAwJSAocmVh ZCA1MzYyNDE3NjY0MCBieXRlcywgemVyb2VzID0gNSUgKDI3NzY2MjkyNDggYnl0ZXMpLCBkdXJh dGlvbiA1MiBzZWMpCj4gcHJvZ3Jlc3MgOTYlIChyZWFkIDUzNjI4MzcwOTQ0IGJ5dGVzLCB6ZXJv ZXMgPSA1JSAoMjc3NjYyOTI0OCBieXRlcyksIGR1cmF0aW9uIDUyIHNlYykKPiBwcm9ncmVzcyA5 NyUgKHJlYWQgNTM2NDUxNDgxNjAgYnl0ZXMsIHplcm9lcyA9IDUlICgyNzc2NjI5MjQ4IGJ5dGVz KSwgZHVyYXRpb24gNTIgc2VjKQo+IHByb2dyZXNzIDk2JSAocmVhZCA1MzY1NzczMTA3MiBieXRl cywgemVyb2VzID0gNSUgKDI3NzY2MjkyNDggYnl0ZXMpLCBkdXJhdGlvbiA1MiBzZWMpCj4gcHJv Z3Jlc3MgOTclIChyZWFkIDUzNjY2MTE5NjgwIGJ5dGVzLCB6ZXJvZXMgPSA1JSAoMjc3NjYyOTI0 OCBieXRlcyksIGR1cmF0aW9uIDUyIHNlYykKPiBwcm9ncmVzcyA5NiUgKHJlYWQgNTM2Nzg3MDI1 OTIgYnl0ZXMsIHplcm9lcyA9IDUlICgyNzc2NjI5MjQ4IGJ5dGVzKSwgZHVyYXRpb24gNTIgc2Vj KQo+IHByb2dyZXNzIDk3JSAocmVhZCA1MzY4Mjg5Njg5NiBieXRlcywgemVyb2VzID0gNSUgKDI3 NzY2MjkyNDggYnl0ZXMpLCBkdXJhdGlvbiA1MiBzZWMpCj4gcmVzdG9yZSBpbWFnZSBjb21wbGV0 ZSAoYnl0ZXM9NTM2ODcwOTEyMDAsIGR1cmF0aW9uPTUyLjM1cywgc3BlZWQ9OTc3Ljk0TUIvcykK PiAKPiBBcyB5b3UgY2FuIHNlZSB0aGUgc3BlZWQgaXMgbXVjaCBiZXR0ZXIgdGhhbiB0aGUgb3Jp Z2luYWwgc3RpbGwgYnV0Cj4gbG93ZXIgdGhhbiBteSBzb2x1dGlvbiBhbmQgYWxzbyB0aGUgcHJv Z3Jlc3MgcmVwb3J0aW5nIGlzIHNob3dpbmcgdGhlCj4gbGFjayBvZiBwcm9wZXIgb3JkZXJpbmcu CgphaCB5ZXMsIGkgY2FuIHNlZSB3aHkgdGhlIG9yZGVyaW5nIGlzIHdyb25nLCBpJ2xsIGZpeCB0 aGF0IHVwIGluIG15IG5leHQgcGF0Y2gsCmZvciBtb3JlIGluZm8gc2VlIGJlbG93LgoKPiAKPiBU aGlzIGlzIHdpdGggOCBmdXR1cmVzOgo+IAo+IHByb2dyZXNzIDk3JSAocmVhZCA1MjA3NjQ3ODQ2 NCBieXRlcywgemVyb2VzID0gMiUgKDExOTk1NzA5NDQgYnl0ZXMpLCBkdXJhdGlvbiA1NyBzZWMp Cj4gcHJvZ3Jlc3MgOTYlIChyZWFkIDUyMDgwNjcyNzY4IGJ5dGVzLCB6ZXJvZXMgPSAyJSAoMTE5 OTU3MDk0NCBieXRlcyksIGR1cmF0aW9uIDU3IHNlYykKPiBwcm9ncmVzcyA5NyUgKHJlYWQgNTIw ODQ4NjcwNzIgYnl0ZXMsIHplcm9lcyA9IDIlICgxMjAzNzY1MjQ4IGJ5dGVzKSwgZHVyYXRpb24g NTcgc2VjKQo+IHByb2dyZXNzIDk4JSAocmVhZCA1MjU4Mzk4OTI0OCBieXRlcywgemVyb2VzID0g MyUgKDE3MDI4ODc0MjQgYnl0ZXMpLCBkdXJhdGlvbiA1NyBzZWMpCj4gcHJvZ3Jlc3MgOTklIChy ZWFkIDUzMTIwODYwMTYwIGJ5dGVzLCB6ZXJvZXMgPSA0JSAoMjIzOTc1ODMzNiBieXRlcyksIGR1 cmF0aW9uIDU3IHNlYykKPiBwcm9ncmVzcyAxMDAlIChyZWFkIDUzNjU3NzMxMDcyIGJ5dGVzLCB6 ZXJvZXMgPSA1JSAoMjc3NjYyOTI0OCBieXRlcyksIGR1cmF0aW9uIDU3IHNlYykKPiBwcm9ncmVz cyA5NyUgKHJlYWQgNTM2NjE5MjUzNzYgYnl0ZXMsIHplcm9lcyA9IDUlICgyNzc2NjI5MjQ4IGJ5 dGVzKSwgZHVyYXRpb24gNTcgc2VjKQo+IHJlc3RvcmUgaW1hZ2UgY29tcGxldGUgKGJ5dGVzPTUz Njg3MDkxMjAwLCBkdXJhdGlvbj01Ny4yOXMsIHNwZWVkPTg5My42Nk1CL3MpCj4gCj4gV2l0aCAz MiBmdXR1cmVzIEkgaGF2ZSBnb3QgOTg0IE1CL3Mgc28gdGhhdCdzIHRoZSBsaW1pdCBJIGd1ZXNz Lgo+IAo+IFRoZSBkbyBoYXZlIGNoZWNrc3VtIGFjY2VsZXJhdGlvbiB1c2luZyBTSEEgTkkuCj4g Cj4gV2hhdCBJIGhhdmUgbm90aWNlZCB0aGF0IGluIG15IHNvbHV0aW9uIHRoZSB6ZXJvIGNodW5r cyBzZWVtIHRvIGdldAo+IHdyaXR0ZW4gdmVyeSBlYXJseSB3aGlsZSB0aGUgcmVzdG9yZSBwcm9j ZXNzIGlzIGZldGNoaW5nIG90aGVyIGNodW5rcywKPiB3aGljaCBzcGVlZHMgdXAgaW1hZ2VzIHdp dGggbW9zdGx5IHplcm9lcyBncmVhdGx5Lgo+IAo+IFRoaXMgc2hvd3Mgb24gdGhlIFhlb24gc3lz dGVtIHdoZXJlIEkgcmVzdG9yZSAzIGRyaXZlczoKPiAKPiBwcm9ncmVzcyA4MCUgKHJlYWQgMTA3 MTY0NDY3MjAgYnl0ZXMsIHplcm9lcyA9IDY5JSAoNzQxNTUyOTQ3MiBieXRlcyksIGR1cmF0aW9u IDEwIHNlYykKPiBwcm9ncmVzcyA3OSUgKHJlYWQgMTA3MjA2NDEwMjQgYnl0ZXMsIHplcm9lcyA9 IDY5JSAoNzQxNTUyOTQ3MiBieXRlcyksIGR1cmF0aW9uIDEwIHNlYykKPiBwcm9ncmVzcyA4MCUg KHJlYWQgMTA3Mzc0MTgyNDAgYnl0ZXMsIHplcm9lcyA9IDY5JSAoNzQxNTUyOTQ3MiBieXRlcyks IGR1cmF0aW9uIDEwIHNlYykKPiByZXN0b3JlIGltYWdlIGNvbXBsZXRlIChieXRlcz0xMDczNzQx ODI0MCwgZHVyYXRpb249MTAuMThzLCBzcGVlZD0xMDA2LjMxTUIvcykKPiAtLT4gdGhpcyBjYW4g YmUgNXggZmFzdGVyIHdpdGggbXkgc29sdXRpb24sIGFzIGl0IGNvbnRhaW5zIGxhcmdlbHkgemVy byBibG9ja3MKPiAKPiBwcm9ncmVzcyA5OSUgKHJlYWQgMTA2MjkyMDUxOTY4IGJ5dGVzLCB6ZXJv ZXMgPSAxJSAoMTYwNjQxODQzMiBieXRlcyksIGR1cmF0aW9uIDMxNCBzZWMpCj4gcHJvZ3Jlc3Mg OTglIChyZWFkIDEwNjI5NjI0NjI3MiBieXRlcywgemVyb2VzID0gMSUgKDE2MDY0MTg0MzIgYnl0 ZXMpLCBkdXJhdGlvbiAzMTQgc2VjKQo+IHByb2dyZXNzIDk5JSAocmVhZCAxMDYzMDQ2MzQ4ODAg Ynl0ZXMsIHplcm9lcyA9IDElICgxNjA2NDE4NDMyIGJ5dGVzKSwgZHVyYXRpb24gMzE0IHNlYykK PiBwcm9ncmVzcyAxMDAlIChyZWFkIDEwNzM3NDE4MjQwMCBieXRlcywgemVyb2VzID0gMSUgKDIx MzkwOTUwNDAgYnl0ZXMpLCBkdXJhdGlvbiAzMTYgc2VjKQo+IHJlc3RvcmUgaW1hZ2UgY29tcGxl dGUgKGJ5dGVzPTEwNzM3NDE4MjQwMCwgZHVyYXRpb249MzE2LjM1cywgc3BlZWQ9MzIzLjcwTUIv cykKPiAtLT4gaGVyZSBJIHdvdWxkIGRvIH4xIEdCcHMgd2l0aCBteSBzb2x1dGlvbgo+IAo+IFRo ZSBvdGhlciBpbWFnZSBpcyBzaW1pbGFybHkgc2xvdy4KPiAKPiBUaGlzIHN5c3RlbSBkb2VzIG5v dCBoYXZlIGNoZWNrc3VtIGFjY2VsZXJhdGlvbiB1c2luZyBTSEEgTkksIG1heWJlCj4gdGhhdCBj b3VsZCBleHBsYWluIHRoZSBsYXJnZSBkaWZmZXJlbmNlIGluIHNwZWVkIGJldHdlZW4gdGhlIHNv bHV0aW9ucz8KPiBJcyB0aGUgc2hhMjU2IGNhbGN1bGF0aW9uIGEgYm90dGxlbmVjayB3aGVuIGZl dGNoaW5nIGNodW5rcz8KPiAKPiBXaXRoIHRoZSBmdXR1cmVzIHNvbHV0aW9uLCBtcHN0YXQgc2hv d3Mgb25seSAxLTIgY29yZXMgYXJlIGJ1c3kgb24KPiB0aGVzZSAyIHNvY2tldHMgc3lzdGVtcy4g VGhlIHNwZWVkIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgc2luZ2xlCj4gdGhyZWFkZWQgc29sdXRp b24gdGhhdCB3YXMgdGhlcmUgYmVmb3JlIGJ1dCBJIGNvbmZpcm1lZCBtdWx0aXBsZSB0aW1lcwo+ IHRoYXQgSSBhbSB1c2luZyB0aGUgbmV3IHZlcnNpb24gKGFuZCB0aGUgb3V0cHV0IG9mIHByb2dy ZXNzIHNob3dzIHRoYXQKPiBhcyB3ZWxsLCB3aGljaCBpcyB3aHkgSSBpbmNsdWRlZCBpdCkuCgpB aCB0aGUgc3BlZWQgaW5jcmVhc2UgaXMgYXMgbXVjaCBhcyBpIGhvcGVkIGJ1dCB1bmRlcnN0YW5k YWJseSBzaW5jZSBJIG5vdwpsZWFybmVkIHRoYXQgJ2J1ZmZlcl91bm9yZGVyZWQnIGRvZXMgbm90 IHJlYWxseSBiZWhhdmUgbGlrZSBpIHRob3VnaHQgaXQgd291bGQKKGRvY3VtZW50YXRpb24gaXMg YWxzbyByYXRoZXIgc3BhcnNlKTogSXQgZG9lcyBub3QgYnVmZmVyIHRoZSByZXN1bHQKb2YgdGhl IGZ1dHVyZXMgaW4gdGhlIGJhY2tncm91bmQsIGJ1dCBzZWVtaW5nbHkgb25seSBwdWxsIHRoZW0g d2hpbGUgd2UncmUgYXdhaXRpbmcKc28gaXQgb25seSBkb2VzIHdvcmsgd2hlbiB3ZSB3YWl0IGZv ciBhIG5ldyBjaHVuaywgd2hpY2ggaXMgc2xpZ2h0bHkgYmV0dGVyCnRoYW4gc2luZ2xlIHRocmVh ZGVkLCBidXQgbm90IGJ5IG11Y2ggKGFzIHNlZW4gaW4geW91ciBiZW5jaG1hcmtzKQoKSSdsbCBz ZW5kIGEgbmV3IHZlcnNpb24gb2YgbXkgcGF0Y2ggd2l0aCB0aGF0IGZpeGVkLCBieSBzdGFydGlu ZyBiYWNrZ3JvdW5kCnRva2lvIHRhc2tzIGluIHRoZSBmdXR1cmUgaXRzZWxmLCBzbyB0aGV5ICB3 aWxsIHJ1biB0byBjb21wbGV0aW9uIGV2ZW4gd2hlbgp3ZSdyZSBzdGlsbCB3cml0aW5nLCB0aGF0 IHNob3VsZCBnaXZlIGJldHRlciBpbXByb3ZlbWVudHMuCgooSSdsbCBhbHNvIHVwZGF0ZSBteSBi ZW5jaG1hcmsgZGF0YSkKClRoYW5rcwpEb21pbmlrCgo+IAo+IEJlc3QgcmVnYXJkcwo+IEFkYW0K PiAKPiBPbiBNb24sIDIwMjUtMDctMDcgYXQgMTA6MTQgKzAyMDAsIERvbWluaWsgQ3NhcGFrIHdy b3RlOgo+PiBieSB1c2luZyBhc3luYyBmdXR1cmVzIHRvIGxvYWQgY2h1bmtzIGFuZCBzdHJlYW06 OmJ1ZmZlcl91bm9yZGVyZWQgdG8KPj4gYnVmZmVyIHVwIHRvIDE2IG9mIHRoZW0sIGRlcGVuZGlu ZyBvbiB3cml0ZS9sb2FkIHNwZWVkLgo+Pgo+PiBXaXRoIHRoaXMsIHdlIGRvbid0IG5lZWQgdG8g aW5jcmVhc2UgdGhlIG51bWJlciBvZiB0aHJlYWRzIGluIHRoZQo+PiBydW50aW1lIHRvIHRyaWdn ZXIgcGFyYWxsZWwgcmVhZHMgYW5kIG5ldHdvcmsgdHJhZmZpYyB0byB1cy4gVGhpcyB3YXkKPj4g aXQncyBvbmx5IGxpbWl0ZWQgYnkgQ1BVIGlmIGRlY29kaW5nIGFuZC9vciBkZWNyeXB0aW5nIGlz IHRoZSBib3R0bGUKPj4gbmVjay4KPj4KPj4gSSBtZWFzdXJlZCByZXN0b3JpbmcgYSBWTSBiYWNr dXAgd2l0aCBhYm91dCAzMEdpQiBkYXRhIGFuZCBmYXN0Cj4+IHN0b3JhZ2UKPj4gb3ZlciBhIGxv Y2FsIG5ldHdvcmsgbGluayAoZnJvbSBQQlMgVk0gdG8gdGhlIGhvc3QpLgo+PiBMZXQgaXQgZG8g bXVsdGlwbGUgcnVucywgYnV0IHRoZSB2YXJpYW5jZSB3YXMgbm90IHRoYXQgYmlnLCBzbyBoZXJl J3MKPj4gc29tZSByZXByZXNlbnRhdGl2ZSBsb2cgb3V0cHV0IHdpdGggdmFyaW91cyBNQVhfQlVG RkVSRURfRlVUVVJFUwo+PiB2YWx1ZXMuCj4+Cj4+IG5vIE1BWF9CVUZGRVJFRF9GVVRVUkVTOiBk dXJhdGlvbj00My4xOHMsIHNwZWVkPTc1OC44Mk1CL3MKPj4gNDrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkdXJhdGlvbj0zOC42MXMsIHNwZWVkPTg0OC43N01C L3MKPj4gODrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkdXJh dGlvbj0zMy43OXMsIHNwZWVkPTk2OS44NU1CL3MKPj4gMTY6wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGR1cmF0aW9uPTMxLjQ1cywgc3BlZWQ9MTA0Mi4wNk1CL3MK Pj4KPj4gbm90ZSB0aGF0IGluY3JlYXNpbmcgdGhlIG51bWJlciBoYXMgYSBkaW1pbmlzaGluZyBy ZXR1cm5zIGFmdGVyIDEwLTEyCj4+IG9uCj4+IG15IHN5c3RlbSwgYnV0IEkgZ3Vlc3MgaXQgZGVw ZW5kcyBvbiB0aGUgZXhhY3QgY29uZmlndXJhdGlvbi4gKEZvcgo+PiBtb3JlCj4+IHRoYW4gMTYg SSBkaWQgbm90IHNlZSBhbnkgaW1wcm92ZW1lbnQsIGJ1dCB0aGlzIGlzIHByb2JhYmx5IGp1c3Qg bXkKPj4gc2V0dXApLgo+Pgo+PiBJIHNhdyBhbiBpbmNyZWFzZSBpbiBDUFUgdXNhZ2UgKGZyb20g fjc1JSB0byB+MTAwJSBvZiBvbmUgY29yZSksCj4+IHdoaWNoCj4+IGFyZSB2ZXJ5IGxpa2VseSB0 aGUgYWRkaXRpb25hbCBjaHVua3MgdG8gYmUgZGVjb2RlZC4KPj4KPj4gSW4gZ2VuZXJhbCBJJ2Qg bGlrZSB0byBsaW1pdCB0aGUgYnVmZmVyaW5nIHNvbWVob3csIGJ1dCBJIGRvbid0IHRoaW5rCj4+ IHRoZXJlIGlzIGEgZ29vZCBhdXRvbWF0aWMgbWV0cmljIHdlIGNhbiB1c2UsIGFuZCBnaXZpbmcg dGhlIGFkbWluIGEKPj4ga25vYgo+PiB0aGF0IGlzIGhhcmQgdG8gZXhwbGFpbiB3aGF0IHRoZSBh Y3R1YWwgcmFtaWZpY2F0aW9ucyBhYm91dCBpdCBhcmUgaXMKPj4gYWxzbyBub3QgZ29vZCwgc28g SSBzZXR0bGVkIGZvciBhIHZhbHVlIHRoYXQgc2hvd2VkIGltcHJvdmVtZW50IGJ1dAo+PiBkb2Vz Cj4+IG5vdCBzZWVtIHRvbyBoaWdoLgo+Pgo+PiBJbiBhbnkgY2FzZSwgaWYgdGhlIHRhcmdldCBh bmQvb3Igc291cmNlIHN0b3JhZ2UgaXMgdG9vIHNsb3csIHRoZXJlCj4+IHdpbGwKPj4gYmUgYmFj ay9mb3J3YXJkIHByZXNzdXJlLCBhbmQgdGhpcyBjaGFuZ2Ugc2hvdWxkIG9ubHkgbWF0dGVyIGZv cgo+PiBzdG9yYWdlCj4+IHN5c3RlbXMgd2hlcmUgSU8gZGVwdGggcGxheXMgYSByb2xlLgo+Pgo+ PiBUaGlzIHBhdGNoIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlIHBhdGNoIGZyb20gQWRhbSBLYWxp c3pbMF0sIGJ1dAo+PiByZW1vdmVzCj4+IHRoZSBuZWVkIHRvIGluY3JlYXNlIHRoZSBibG9ja2lu ZyB0aHJlYWRzIGFuZCB1c2VzIHRoZSAoYWN0dWFsbHkKPj4gYWx3YXlzCj4+IHVzZWQpIHVuZGVy bHlpbmcgYXN5bmMgaW1wbGVtZW50YXRpb24gZm9yIHJlYWRpbmcgcmVtb3RlIGNodW5rcy4KPj4K Pj4gMDoKPj4gaHR0cHM6Ly9sb3JlLnByb3htb3guY29tL3B2ZS1kZXZlbC9tYWlsbWFuLjcxOS4x NzUxMDUyNzk0LjM5NS5wdmUtZGV2ZWxAbGlzdHMucHJveG1veC5jb20vCj4+Cj4+IFNpZ25lZC1v ZmYtYnk6IERvbWluaWsgQ3NhcGFrIDxkLmNzYXBha0Bwcm94bW94LmNvbT4KPj4gQmFzZWQtb24t cGF0Y2gtYnk6IEFkYW0gS2FsaXN6IDxhZGFtLmthbGlzekBub3RudWxsbWFrZXJzLmNvbT4KPj4g LS0tCj4+IEBBZGFtIGNvdWxkIHlvdSBwbGVhc2UgdGVzdCB0aGlzIHBhdGNoIHRvbyB0byBzZWUg aWYgeW91IHN0aWxsIHNlZQo+PiB0aGUKPj4gaW1wcm92ZW1lbnRzIHlvdSBzYXcgaW4geW91ciB2 ZXJzaW9uPwo+Pgo+PiBBbHNvIEkgc2VudCBpdCBhcyBSRkMgdG8gZGlzY3VzcyBob3cgd2UgZGVj aWRlIGhvdyBtYW55IGNodW5rcyB3ZQo+PiB3YW50Cj4+IHRvIGJ1ZmZlci90aHJlYWRzIHdlIHdh bnQgdG8gYWxsb2NhdGUuIFRoaXMgaXMgYSBub24tdHJpdmlhbCB0b3BpYywKPj4gYW5kCj4+IGFz IGkgd3JvdGUgd2UgZG9uJ3QgaGF2ZSBhIHJlYWwgbWV0cmljIHRvIGRlY2lkZSB1cGZyb250LCBi dXQgZ2l2aW5nCj4+IHRoZQo+PiBhZG1pbiBrbm9icyB0aGF0IGFyZSBjb21wbGljYXRlZCBpcyBh bHNvIG5vdCB0aGUgYmVzdCBzb2x1dGlvbi4KPj4KPj4gTXkgaW5zdGluY3Qgd291bGQgYmUgdG8g c2ltcGx5IGluY3JlYXNlIHRvIDE2IChhcyBJIGhhdmUgZG9uZSBoZXJlKQo+PiBhbmQKPj4gbWF5 YmUgZXhwb3NlIHRoaXMgbnVtYmVyIGluIC9ldGMvdnpkdW1wLmNvbmYgb3IKPj4gL2V0Yy9wdmUv ZGF0YWNlbnRlci5jZmcKPj4KPj4gQWxzbyBJIHRyaWVkIHRvIG1ha2UgdGhlIHdyaXRlcyBtdWx0 aS10aHJlYWRlZCB0b28sIGJ1dCBteQo+PiBRRU1VLWtub3dsZWRnZSBpcyBub3QgdmVyeSBkZWVw IGZvciB0aGlzIGtpbmQgb2YgdGhpbmcsIGFuZCBJIHdhbnRlZAo+PiB0bwo+PiBnZXQgdGhpcyB2 ZXJzaW9uIG91dCB0aGVyZSBzb29uLiAoSW5jcmVhc2luZyB0aGUgd3JpdGUgdGhyZWFkcyBjYW4K Pj4gc3RpbGwKPj4gYmUgZG9uZSBhZnRlcndhcmRzIGlmIHRoaXMgY2hhbmdlIGlzIGVub3VnaCBm b3Igbm93KQo+Pgo+PiBJIGRldmVsb3BlZCB0aGlzIHBhdGNoIG9uIHRvcCBvZiB0aGUgJ3N0YWJs ZS1ib29rd29ybScgYnJhbmNoLCBidXQgaXQKPj4gc2hvdWxkIGFwcGx5IGNsZWFubHkgb24gbWFz dGVyIGFzIHdlbGwuCj4+Cj4+ICDCoHNyYy9yZXN0b3JlLnJzIHwgNTcgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCj4+IC0tCj4+ICDCoDEgZmlsZSBjaGFu Z2VkLCA0MiBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBh L3NyYy9yZXN0b3JlLnJzIGIvc3JjL3Jlc3RvcmUucnMKPj4gaW5kZXggNWE1YTM5OC4uNzQxYjNl MSAxMDA2NDQKPj4gLS0tIGEvc3JjL3Jlc3RvcmUucnMKPj4gKysrIGIvc3JjL3Jlc3RvcmUucnMK Pj4gQEAgLTIsNiArMiw3IEBAIHVzZSBzdGQ6OmNvbnZlcnQ6OlRyeUludG87Cj4+ICDCoHVzZSBz dGQ6OnN5bmM6OntBcmMsIE11dGV4fTsKPj4gICAKPj4gIMKgdXNlIGFueWhvdzo6e2JhaWwsIGZv cm1hdF9lcnIsIEVycm9yfTsKPj4gK3VzZSBmdXR1cmVzOjpTdHJlYW1FeHQ7Cj4+ICDCoHVzZSBv bmNlX2NlbGw6OnN5bmM6Ok9uY2VDZWxsOwo+PiAgwqB1c2UgdG9raW86OnJ1bnRpbWU6OlJ1bnRp bWU7Cj4+ICAgCj4+IEBAIC0xMyw3ICsxNCw3IEBAIHVzZQo+PiBwYnNfZGF0YXN0b3JlOjpjYWNo ZWRfY2h1bmtfcmVhZGVyOjpDYWNoZWRDaHVua1JlYWRlcjsKPj4gIMKgdXNlIHBic19kYXRhc3Rv cmU6OmRhdGFfYmxvYjo6RGF0YUNodW5rQnVpbGRlcjsKPj4gIMKgdXNlIHBic19kYXRhc3RvcmU6 OmZpeGVkX2luZGV4OjpGaXhlZEluZGV4UmVhZGVyOwo+PiAgwqB1c2UgcGJzX2RhdGFzdG9yZTo6 aW5kZXg6OkluZGV4RmlsZTsKPj4gLXVzZSBwYnNfZGF0YXN0b3JlOjpyZWFkX2NodW5rOjpSZWFk Q2h1bms7Cj4+ICt1c2UgcGJzX2RhdGFzdG9yZTo6cmVhZF9jaHVuazo6QXN5bmNSZWFkQ2h1bms7 Cj4+ICDCoHVzZSBwYnNfZGF0YXN0b3JlOjpCYWNrdXBNYW5pZmVzdDsKPj4gIMKgdXNlIHBic19r ZXlfY29uZmlnOjpsb2FkX2FuZF9kZWNyeXB0X2tleTsKPj4gIMKgdXNlIHBic190b29sczo6Y3J5 cHRfY29uZmlnOjpDcnlwdENvbmZpZzsKPj4gQEAgLTI5LDYgKzMwLDkgQEAgc3RydWN0IEltYWdl QWNjZXNzSW5mbyB7Cj4+ICDCoMKgwqDCoCBhcmNoaXZlX3NpemU6IHU2NCwKPj4gIMKgfQo+PiAg IAo+PiArLy8gdXNlIGF0IG1heCAxNiBidWZmZXJlZCBmdXR1cmVzIHRvIG1ha2UgbG9hZGluZyBv ZiBjaHVua3MgbW9yZQo+PiBjb25jdXJyZW50Cj4+ICtjb25zdCBNQVhfQlVGRkVSRURfRlVUVVJF UzogdXNpemUgPSAxNjsKPj4gKwo+PiAgwqBwdWIoY3JhdGUpIHN0cnVjdCBSZXN0b3JlVGFzayB7 Cj4+ICDCoMKgwqDCoCBzZXR1cDogQmFja3VwU2V0dXAsCj4+ICDCoMKgwqDCoCBydW50aW1lOiBB cmM8UnVudGltZT4sCj4+IEBAIC0xNjUsMjQgKzE2OSw0NyBAQCBpbXBsIFJlc3RvcmVUYXNrIHsK Pj4gICAKPj4gIMKgwqDCoMKgwqDCoMKgwqAgbGV0IHN0YXJ0X3RpbWUgPSBzdGQ6OnRpbWU6Oklu c3RhbnQ6Om5vdygpOwo+PiAgIAo+PiAtwqDCoMKgwqDCoMKgwqAgZm9yIHBvcyBpbiAwLi5pbmRl eC5pbmRleF9jb3VudCgpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGxldCByZWFkX3F1ZXVlID0gKDAu LmluZGV4LmluZGV4X2NvdW50KCkpLm1hcCh8cG9zfCB7Cj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbGV0IGRpZ2VzdCA9IGluZGV4LmluZGV4X2RpZ2VzdChwb3MpLnVud3JhcCgpOwo+PiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxldCBvZmZzZXQgPSAocG9zICogaW5kZXguY2h1bmtf c2l6ZSkgYXMgdTY0Owo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiBkaWdlc3QgPT0gJnpl cm9fY2h1bmtfZGlnZXN0IHsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQg cmVzID0gd3JpdGVfemVyb19jYWxsYmFjayhvZmZzZXQsCj4+IGluZGV4LmNodW5rX3NpemUgYXMg dTY0KTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiByZXMgPCAwIHsKPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhaWwhKCJ3cml0ZV96ZXJv X2NhbGxiYWNrIGZhaWxlZCAoe30pIiwgcmVzKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg bGV0IGNodW5rX3JlYWRlciA9IGNodW5rX3JlYWRlci5jbG9uZSgpOwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBhc3luYyBtb3ZlIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBsZXQgY2h1bmsgPSBpZiBkaWdlc3QgPT0gJnplcm9fY2h1bmtfZGlnZXN0IHsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5vbmUKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgbGV0IHJhd19kYXRhID0KPj4gQXN5bmNSZWFkQ2h1bms6OnJlYWRfY2h1bmso JmNodW5rX3JlYWRlciwgZGlnZXN0KS5hd2FpdD87Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBTb21lKHJhd19kYXRhKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIH07Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBPazo6 PF8sIEVycm9yPigoY2h1bmssIHBvcywgb2Zmc2V0KSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgfSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8vIHRo aXMgYnVmZmVycyBmdXR1cmVzIGFuZCBwcmUtZmV0Y2hlcyBzb21lIGNodW5rcyBmb3IgdXMKPj4g K8KgwqDCoMKgwqDCoMKgIGxldCBtdXQgc3RyZWFtID0KPj4gZnV0dXJlczo6c3RyZWFtOjppdGVy KHJlYWRfcXVldWUpLmJ1ZmZlcl91bm9yZGVyZWQoTUFYX0JVRkZFUkVEX0ZVVFVSCj4+IEVTKTsK Pj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgd2hpbGUgbGV0IFNvbWUocmVzKSA9IHN0cmVhbS5uZXh0 KCkuYXdhaXQgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgcmVzID0gcmVzPzsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGV0IHBvcyA9IG1hdGNoIHJlcyB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKE5vbmUsIHBvcywgb2Zmc2V0KSA9PiB7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgcmVzID0gd3JpdGVfemVyb19j YWxsYmFjayhvZmZzZXQsCj4+IGluZGV4LmNodW5rX3NpemUgYXMgdTY0KTsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIHJlcyA8IDAgewo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYWlsISgid3JpdGVfemVyb19j YWxsYmFjayBmYWlsZWQgKHt9KSIsCj4+IHJlcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBieXRlcyArPSBpbmRleC5jaHVua19zaXplOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgemVyb2VzICs9IGluZGV4LmNodW5rX3NpemU7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwb3MKPj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBieXRl cyArPSBpbmRleC5jaHVua19zaXplOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHplcm9lcyArPSBpbmRleC5jaHVua19zaXplOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9 IGVsc2Ugewo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxldCByYXdfZGF0YSA9 IFJlYWRDaHVuazo6cmVhZF9jaHVuaygmY2h1bmtfcmVhZGVyLAo+PiBkaWdlc3QpPzsKPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgcmVzID0gd3JpdGVfZGF0YV9jYWxsYmFj ayhvZmZzZXQsICZyYXdfZGF0YSk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgcmVzIDwgMCB7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi YWlsISgid3JpdGVfZGF0YV9jYWxsYmFjayBmYWlsZWQgKHt9KSIsIHJlcyk7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKFNvbWUocmF3X2RhdGEpLCBwb3MsIG9mZnNldCkgPT4g ewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGV0IHJlcyA9IHdy aXRlX2RhdGFfY2FsbGJhY2sob2Zmc2V0LAo+PiAmcmF3X2RhdGEpOwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgcmVzIDwgMCB7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhaWwhKCJ3cml0ZV9kYXRhX2NhbGxi YWNrIGZhaWxlZCAoe30pIiwKPj4gcmVzKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGJ5dGVzICs9IHJhd19kYXRhLmxlbigpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcG9zCj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnl0ZXMgKz0gcmF3X2RhdGEubGVuKCk7 Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fTsKPj4gKwo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIHZlcmJvc2Ugewo+PiAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGV0IG5leHRfcGVyID0gKChwb3MgKyAxKSAq IDEwMCkgLwo+PiBpbmRleC5pbmRleF9jb3VudCgpOwo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgcGVyICE9IG5leHRfcGVyIHsKPiAKCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcHZlLWRldmVsIG1haWxpbmcgbGlzdApwdmUt ZGV2ZWxAbGlzdHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmlu L21haWxtYW4vbGlzdGluZm8vcHZlLWRldmVsCg==