From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 23D1DC2BD09 for ; Mon, 24 Jun 2024 08:00:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Zd28wRxKnsP2n7a9AgHSahRlTk5snHAVd/IPHHCwhp4=; b=X3O6twLX4IitZO s0ipqQiR9SA0OQ6+iWqekBq2ZWjOrQFWecAMgkPCQsDUQogTIZ4hW7ZQ7bOyOSGT/4d3ZY9gEWR3f IYo+RDNwR3Rq1HLvjwXN2Gjps6wwwYn4sLCWzHcomd80vIc03oKWJ2e3cWx5iJWMDcXu9IF3zMlFv FsvS/mEc3v7WV9qW3AzVnu8yhzy/zcDyfWmxKPpoN9I+YDJke+5QaKUGNEggrotHNF/4PJF7AII9P xUpCUyZyiSgZaIxJGlcWkgHjl/CBf60qLJhRcY+KIwOUDWDF2v0qSD58VOhSzk2SVXraT+5mnkrVy E59TKzZMBnjcZIaE/jgA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sLed3-0000000FxSi-1V6M; Mon, 24 Jun 2024 08:00:45 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sLecw-0000000FxPE-23Y5; Mon, 24 Jun 2024 08:00:41 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E6825DA7; Mon, 24 Jun 2024 01:00:58 -0700 (PDT) Received: from [10.57.74.104] (unknown [10.57.74.104]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B92E73F6A8; Mon, 24 Jun 2024 01:00:31 -0700 (PDT) Message-ID: Date: Mon, 24 Jun 2024 09:00:29 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH RESEND v2 0/9] Merge arm64/riscv hugetlbfs contpte support Content-Language: en-GB To: Alexandre Ghiti , Alexandre Ghiti Cc: Catalin Marinas , Will Deacon , Mark Rutland , Paul Walmsley , Palmer Dabbelt , Albert Ou , Andrew Morton , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-mm@kvack.org References: <20240508113419.18620-1-alexghiti@rivosinc.com> <6d37f914-d139-48ea-be63-c428ac767cc1@arm.com> <863092ed-2b04-46bb-8d99-5796346cef3a@ghiti.fr> From: Ryan Roberts In-Reply-To: <863092ed-2b04-46bb-8d99-5796346cef3a@ghiti.fr> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240624_010038_663946_05F72DF5 X-CRM114-Status: GOOD ( 46.64 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gMjgvMDUvMjAyNCAwOTowNywgQWxleGFuZHJlIEdoaXRpIHdyb3RlOgo+IEhpIFJ5YW4sCj4g Cj4gT24gMTIvMDUvMjAyNCAxOToyNSwgQWxleGFuZHJlIEdoaXRpIHdyb3RlOgo+PiBIaSBSeWFu LAo+Pgo+PiBPbiBGcmksIE1heSAxMCwgMjAyNCBhdCAzOjQ54oCvUE0gUnlhbiBSb2JlcnRzIDxy eWFuLnJvYmVydHNAYXJtLmNvbT4gd3JvdGU6Cj4+PiBPbiAwOC8wNS8yMDI0IDEyOjM0LCBBbGV4 YW5kcmUgR2hpdGkgd3JvdGU6Cj4+Pj4gVGhpcyBwYXRjaHNldCBpbnRlbmRzIHRvIG1lcmdlIHRo ZSBjb250aWd1b3VzIHB0ZXMgaHVnZXRsYmZzIGltcGxlbWVudGF0aW9uCj4+Pj4gb2YgYXJtNjQg YW5kIHJpc2N2Lgo+Pj4+Cj4+Pj4gQm90aCBhcm02NCBhbmQgcmlzY3Ygc3VwcG9ydCB0aGUgdXNl IG9mIGNvbnRpZ3VvdXMgcHRlcyB0byBtYXAgcGFnZXMgdGhhdAo+Pj4+IGFyZSBsYXJnZXIgdGhh biB0aGUgZGVmYXVsdCBwYWdlIHRhYmxlIHNpemUsIHJlc3BlY3RpdmVseSBjYWxsZWQgY29udHB0 ZQo+Pj4+IGFuZCBzdm5hcG90Lgo+Pj4+Cj4+Pj4gVGhlIHJpc2N2IGltcGxlbWVudGF0aW9uIGRp ZmZlcnMgZnJvbSB0aGUgYXJtNjQncyBpbiB0aGF0IHRoZSBMU0JzIG9mIHRoZQo+Pj4+IHBmbiBv ZiBhIHN2bmFwb3QgcHRlIGFyZSB1c2VkIHRvIHN0b3JlIHRoZSBzaXplIG9mIHRoZSBtYXBwaW5n LCBhbGxvd2luZwo+Pj4+IGZvciBmdXR1cmUgc2l6ZXMgdG8gYmUgYWRkZWQgKGZvciBub3cgb25s eSA2NEtCIGlzIHN1cHBvcnRlZCkuIFRoYXQncyBhbgo+Pj4+IGlzc3VlIGZvciB0aGUgY29yZSBt bSBjb2RlIHdoaWNoIGV4cGVjdHMgdG8gZmluZCB0aGUgKnJlYWwqIHBmbiBhIHB0ZSBwb2ludHMK Pj4+PiB0by4gUGF0Y2ggMSBmaXhlcyB0aGF0IGJ5IGFsd2F5cyByZXR1cm5pbmcgc3ZuYXBvdCBw dGVzIHdpdGggdGhlIHJlYWwgcGZuCj4+Pj4gYW5kIHJlc3RvcmVzIHRoZSBzaXplIG9mIHRoZSBt YXBwaW5nIHdoZW4gaXQgaXMgd3JpdHRlbiB0byBhIHBhZ2UgdGFibGUuCj4+Pj4KPj4+PiBUaGUg Zm9sbG93aW5nIHBhdGNoZXMgYXJlIGp1c3QgbWVyZ2VzIG9mIHRoZSAyIGRpZmZlcmVudCBpbXBs ZW1lbnRhdGlvbnMKPj4+PiB0aGF0IGN1cnJlbnRseSBleGlzdCBpbiBhcm02NCBhbmQgcmlzY3Yg d2hpY2ggYXJlIHZlcnkgc2ltaWxhci4gSXQgcGF2ZXMKPj4+PiB0aGUgd2F5IHRvIHRoZSByZXVz ZSBvZiB0aGUgcmVjZW50IGNvbnRwdGUgVEhQIHdvcmsgYnkgUnlhbiBbMV0gdG8gYXZvaWQKPj4+ PiByZWltcGxlbWVudGluZyB0aGUgc2FtZSBpbiByaXNjdi4KPj4+IEhpIEFsZXhhbmRyZSwKPj4+ Cj4+PiBJJ3ZlIHNraW1tZWQgdGhyb3VnaCB0aGlzIHNlcmllcyBhbmQgdGhlIG9uZSB0aGF0IG1v dmVzIGNvbnRwdGUuIEkgY2FuIHNlZSB0aGVyZQo+Pj4gaXMgZGVmaW5pdGVseSB2YWx1ZSBpbiBz aGFyaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoZSByb3VnaCBzaGFwZSBvZiB0aGluZ3MK Pj4+IHNlZW1zIGFwcHJvcHJpYXRlLiBJIGhhZCBzb21lIG1pbm9yIGNvbmNlcm5zIGFib3V0IG1h a2luZyBpdCBoYXJkZXIgdG8gaW1wbGVtZW50Cj4+PiBwb3RlbnRpYWwgZnV0dXJlIGFybTY0IGVy cmF0YSB3b3JrYXJvdW5kcyBidXQgb24gcmVmbGVjdGlvbiwgbW9zdCBvZiB0aGUKPj4+IG5vdy1z aGFyZWQgY29kZSBpcyByZWFsbHkganVzdCB3cmFwcGluZyB0aGUgcHJpbWl0aXZlcyB0aGF0IGFy ZSBzdGlsbAo+Pj4gYXJjaC1zcGVjaWZpYy4KPj4+Cj4+PiBJJ20gZ29pbmcgdG8gbmVlZCB0byBz cGVuZCBwcm9wZXIgdGltZSByZXZpZXdpbmcgaXQgdG8gZ2l2ZSBkZXRhaWxlZCBmZWVkYmFjaywK Pj4+IGJ1dCBJJ2xsIGJlIG91dCBvbiBwYXRlcm5pdHkgbGVhdmUgZm9yIDMgd2Vla3MgZnJvbSBl bmQgb2YgTW9uZGF5IGF0IHRoZSBsYXRlc3QuCj4+IFRvbyBiYWQsIEkgZXhwZWN0ZWQgdG8gZGlz Y3VzcyB0aGF0IHdpdGggeW91IGF0IExTRi9NTS4uLkJ1dCBjb25ncmF0cyEKPj4gSG9wZSB5b3Vy IHdpZmUgaXMgZmluZSA6KQo+Pgo+Pj4gU28gcmVhbGlzdGljYWxseSBJIHdvbid0IGJlIGFibGUg dG8gZG8gdGhlIGRldGFpbGVkIHJldmlldyB1bnRpbCBhdCBsZWFzdCB0aGUKPj4+IGZpcnN0IHdl ZWsgb2YgSnVuZS4KCkhpIEFsZXhhbmRyZSwKClNvcnJ5IGZvciB0aGUgcmFkaW8gc2lsZW5jZS4g SSdtIGJhY2sgYXQgd29yayBub3cgYW5kIGhhdmUgc29tZSBjeWNsZXMgdG8gcmV2aWV3CnRoaXMu IERpZCB5b3UgZXZlciBwb3N0IGEgbmV3IHZlcnNpb24gYmFzZWQgb24gdGhlIHN1Z2dlc3Rpb25z IGJlbG93PwoKPj4+Cj4+PiBTb21lIGhpZ2ggbGV2ZWwgdGhvdWdodHM6Cj4+Pgo+Pj4gwqAgLSBo dWdlX3B0ZXBfKiBmdW5jdGlvbnMgY291bGQgYmUgd29ya2luZyBvbiBkaWZmZXJlbnQgc2l6ZWQg aHVnZSBwdGVzIC0gYXJtNjQKPj4+IHN1cHBvcnRzIGNvbnRwdGUsIHBtZCwgY29udHBtZCBhbmQg cHVkLiBJcyBrZWVwaW5nIHRoZW0gaW4gY29udHB0ZS5jCj4+PiBhcHByb3ByaWF0ZT8KPj4gSG1t IGluZGVlZCwgSSdsbCBzZWUgd2hhdCBJIGNhbiBkby4KPiAKPiAKPiBTbyBJIHRvb2sgYSBsb29r IGF0IHRoYXQuIEl0IGFtb3VudHMgdG8gZG9pbmcgdGhlIHNhbWUgYXMgd2hhdCB3ZSBkbyBmb3Ig VEhQCj4gY29udHB0ZXMsIGllIGhhdmluZyBib3RoIGNvbnRwdGUtYXdhcmUgYW5kICJub3JtYWwi IEFQSXMuIExldCdzIHRha2UgZm9yIGV4YW1wbGUKPiBodWdlX3B0ZXBfZ2V0KCksIGJlbG93IGlz IHdoYXQgSSBnZXQuIFRvIG1lIGl0J3Mgbm90IHRoYXQgYmFkLCBzbyBJJ2xsIGltcGxlbWVudAo+ IHRoaXMgdW5sZXNzIHRoZXJlIGlzIHN0cm9uZyBvcHBvc2l0aW9uLgoKSSdtIG5vdCBzdXJlIEkn dmUgdW5kZXJzdG9vZCB3aGF0IHlvdSBhcmUgZ29pbmcgaGVyZS4uLiBzZWUgYmVsb3cuCgo+IAo+ IAo+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gv YXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCj4gaW5kZXggZjhlZmJjMTI4NDQ2Li44NjlhOWFh ZTZjNjggMTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKPiAr KysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAo+IEBAIC0xNzE1LDYgKzE3MTUs MTYgQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3lvdW5nX2RpcnR5X3B0ZXMoc3RydWN0Cj4g dm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29u dHB0ZV9jbGVhcl95b3VuZ19kaXJ0eV9wdGVzKHZtYSwgYWRkciwgcHRlcCwgbnIsIGZsYWdzKTsK PiDCoH0KPiAKPiArc3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfZ2V0KHB0ZV90ICpwdGVw KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgIHB0ZV90IG9yaWdfcHRlID0gX19wdGVwX2dldChwdGVw KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGlmICghcHRlX3ByZXNlbnQob3JpZ19wdGUpIHx8ICFw dGVfY29udChvcmlnX3B0ZSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gb3JpZ19wdGU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gY29udHB0ZV9odWdlX3B0 ZXBfZ2V0KHB0ZXApOwoKQSAiaHVnZSBwdGUiIGlzIG5vdCB0aGUgc2FtZSBhcyBhICJjb250IHB0 ZSIuIEEgaHVnZSBwdGUgaXMgYW4gYWJzdHJhY3QgdGhpbmcsCndoaWNoIG1heWJlIG9mIGEgbnVt YmVyIG9mIGRpZmZlcmVudCBzaXplczsgb24gYXJtNjQgd2l0aCA0SyBiYXNlIHBhZ2VzLCA2NEss CjJNLCAzMk0sIDFHIGFyZSBzdXBwb3J0ZWQuIFRoZSA2NEsgc2l6ZSBpcyBpbXBsZW1lbnRlZCB1 c2luZyB0aGUgUFRFX0NPTlQgYml0IGF0ClBURSBsZXZlbC4gMk0gaXMgYSBzaW5nbGUgUE1EIGxl dmVsIGJsb2NrLCAzMk0gdXNlcyBQTURfQ09OVCBhdCBQTUQgbGV2ZWwgYW5kIDFHCmlzIDEgUFVE IGJsb2NrLiBTbyBJJ20gbm90IHN1cmUgaXQgbWFrZXMgc2Vuc2UgdG8gdGllIHRoaXMgdXAgd2l0 aCAiY29udHB0ZV8iCmZ1bmN0aW9ucz8KCj4gK30KPiArCj4gwqAjZWxzZSAvKiBDT05GSUdfQVJN NjRfQ09OVFBURSAqLwo+IAo+IMKgI2RlZmluZSBwdGVwX2dldMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX3B0ZXBfZ2V0Cj4gQEAg LTE3MzYsNiArMTc0Niw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl95b3VuZ19kaXJ0eV9w dGVzKHN0cnVjdAo+IHZtX2FyZWFfc3RydWN0ICp2bWEsCj4gwqAjZGVmaW5lIHB0ZXBfc2V0X2Fj Y2Vzc19mbGFncyBfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncwo+IMKgI2RlZmluZSBjbGVhcl95b3Vu Z19kaXJ0eV9wdGVzIF9fY2xlYXJfeW91bmdfZGlydHlfcHRlcwo+IAo+ICsjZGVmaW5lIGh1Z2Vf cHRlcF9nZXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBfX3B0ZXBfZ2V0CgpJIGRvbid0IHF1aXRlIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGhlcmUuIGh1 Z2UgcHRlcyBhcmUgbmVlZGVkIGZvciBodWdldGxiIHNvCnRoZWlyIGRlZmluaXRpb24gbmVlZHMg dG8gYmUgdGllZCB0byB0aGF0LCBub3QgdG8gQVJNNjRfQ09OVFBURSwgd2hpY2ggaXMgYW4KaW5k ZXBlbmRlbnQgZmVhdHVyZS4KCj4gKwo+IMKgI2VuZGlmIC8qIENPTkZJR19BUk02NF9DT05UUFRF ICovCj4gCj4gwqAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwo+IGRpZmYgLS1naXQgYS9hcmNo L2FybTY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMKPiBp bmRleCAzZjA5YWM3M2NjZTMuLmFhMGVlM2YwMjIyNiAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybTY0 L21tL2h1Z2V0bGJwYWdlLmMKPiArKysgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMKPiBA QCAtMTI3LDI4ICsxMjcsNiBAQCBzdGF0aWMgaW5saW5lIGludCBudW1fY29udGlnX3B0ZXModW5z aWduZWQgbG9uZyBzaXplLAo+IHNpemVfdCAqcGdzaXplKQo+IMKgwqDCoMKgwqDCoMKgIHJldHVy biBjb250aWdfcHRlczsKPiDCoH0KPiAKPiAtcHRlX3QgaHVnZV9wdGVwX2dldChwdGVfdCAqcHRl cCkKPiAtewo+IC3CoMKgwqDCoMKgwqAgaW50IG5jb250aWcsIGk7Cj4gLcKgwqDCoMKgwqDCoCBz aXplX3QgcGdzaXplOwo+IC3CoMKgwqDCoMKgwqAgcHRlX3Qgb3JpZ19wdGUgPSBfX3B0ZXBfZ2V0 KHB0ZXApOwo+IC0KPiAtwqDCoMKgwqDCoMKgIGlmICghcHRlX3ByZXNlbnQob3JpZ19wdGUpIHx8 ICFwdGVfY29udChvcmlnX3B0ZSkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIG9yaWdfcHRlOwo+IC0KPiAtwqDCoMKgwqDCoMKgIG5jb250aWcgPSBudW1fY29udGlnX3B0 ZXMocGFnZV9zaXplKHB0ZV9wYWdlKG9yaWdfcHRlKSksICZwZ3NpemUpOwo+IC3CoMKgwqDCoMKg wqAgZm9yIChpID0gMDsgaSA8IG5jb250aWc7IGkrKywgcHRlcCsrKSB7Cj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcHRlX3QgcHRlID0gX19wdGVwX2dldChwdGVwKTsKPiAtCj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHB0ZV9kaXJ0eShwdGUpKQo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcmlnX3B0ZSA9IHB0ZV9ta2Rp cnR5KG9yaWdfcHRlKTsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHB0 ZV95b3VuZyhwdGUpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBvcmlnX3B0ZSA9IHB0ZV9ta3lvdW5nKG9yaWdfcHRlKTsKPiAtwqDCoMKgwqDCoMKgIH0K PiAtwqDCoMKgwqDCoMKgIHJldHVybiBvcmlnX3B0ZTsKPiAtfQo+IC0KPiDCoC8qCj4gwqAgKiBD aGFuZ2luZyBzb21lIGJpdHMgb2YgY29udGlndW91cyBlbnRyaWVzIHJlcXVpcmVzIHVzIHRvIGZv bGxvdyBhCj4gwqAgKiBCcmVhay1CZWZvcmUtTWFrZSBhcHByb2FjaCwgYnJlYWtpbmcgdGhlIHdo b2xlIGNvbnRpZ3VvdXMgc2V0Cj4gZGlmZiAtLWdpdCBhL21tL2NvbnRwdGUuYyBiL21tL2NvbnRw dGUuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi40ZTc0MmNm MDBiNmYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbW0vY29udHB0ZS5jCj4gQEAgLTAsMCArMSwx NyBAQAo+ICtwdGVfdCBjb250cHRlX2h1Z2VfcHRlcF9nZXQocHRlX3QgKnB0ZXApCj4gK3sKPiAr wqDCoMKgwqDCoMKgwqAgaW50IG5jb250aWcsIGk7Cj4gK8KgwqDCoMKgwqDCoMKgIHNpemVfdCBw Z3NpemU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBuY29udGlnID0gbnVtX2NvbnRpZ19wdGVzKHBh Z2Vfc2l6ZShwdGVfcGFnZShvcmlnX3B0ZSkpLCAmcGdzaXplKTsKPiArwqDCoMKgwqDCoMKgwqAg Zm9yIChpID0gMDsgaSA8IG5jb250aWc7IGkrKywgcHRlcCsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwdGVfdCBwdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApOwo+ICsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChwdGVfZGlydHkocHRlKSkKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcmlnX3B0ZSA9IHB0ZV9t a2RpcnR5KG9yaWdfcHRlKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAocHRlX3lvdW5nKHB0ZSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgb3JpZ19wdGUgPSBwdGVfbWt5b3VuZyhvcmlnX3B0ZSk7Cj4gK8KgwqDCoMKg wqDCoMKgIH0KPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIG9yaWdfcHRlOwo+ICt9CgpJIGd1ZXNz IHlvdXIgb2JzZXJ2YXRpb24gaXMgdGhhdCBjb250cHRlXyBhbmQgaHVnZXB0ZV8gY29kZSBsb29r cyBzaW1pbGFyIHNvIGl0CnNob2xkIGJlIGdyb3VwZWQ/IEkgdGhpbmsgaWYgd2UgY2FuIGdldCBz b21lIGFjdHVhbCByZXVzZSB0aGF0IG1pZ2h0IG1ha2Ugc2Vuc2UsCmJ1dCBhcyBpbXBsZW1lbnRl ZCwgdGhpcyBmdW5jdGlvbiBpcyBjb21wbGV0ZWx5IHNlcGFyYXRlIGZyb20KY29udHB0ZV9wdGVw X2dldCgpLiBJIHdvbmRlciBpZiBpdHMgc2ltcGxlciBqdXN0IHRvIGhhdmUgY29udHB0ZS5jIGZv ciBjb250cHRlXwphbmQgaHVnZXB0ZV8uYyBmb3IgaHVnZXB0ZV8gdGhlbiB0aGV5IGNhbiBiZSBp bmNsdWRlZCBpbiB0aGUgYnVpbGQgaW5kZXBlbmRlbnRseQpiYXNlZCBvbiBhcmNoL2NvcmUgS2Nv bmZpZ3MgKGUuZy4gQ09ORklHX0hVR0VUTEJfUEFHRSB2cyBDT05GSUdfQVJNNjRfQ09OVFBURSku Cgo+IAo+Pgo+Pj4gUGVyaGFwcyBpdCdzIGJldHRlciB0byBrZWVwIGh1Z2VfcHRlIGFuZCBjb250 cHRlIHNlcGFyYXRlPyBBbHNvLCBpdAo+Pj4gb25seSB3b3JrcyBvbiBhcm02NCBiZWNhdXNlIHdl IGNhbiBnZXQgYXdheSB3aXRoIGNhbGxpbmcgdGhlIGxvd2VyLWxldmVsIHB0ZQo+Pj4gZnVuY3Rp b25zIGV2ZW4gd2hlbiB0aGUgaHVnZV9wdGUgaXMgYWN0dWFsbHkgYSBjb250cG1kL3BtZC9wdWQs IGJlY2F1c2UgdGhlCj4+PiBmb3JtYXQgaXMgdGhlIHNhbWUuIFRoYXQgbWlnaHQgcHJlc2VudCBj aGFsbGVuZ2VzIHRvIG90aGVyIGFyY2hlcyBpZiB0aGUgZm9ybWF0Cj4+PiBpcyBkaWZmZXJlbnQ/ Cj4+IFllcywgYnV0IEkgdGhpbmsgdGhhdCBpZiB0aGF0IGhhcHBlbnMsIHdlIGNvdWxkIGdldCBh d2F5IHdpdGggaXQgYnkKPj4gY2hvb3NpbmcgdGhlIHJpZ2h0IGZ1bmN0aW9uIGRlcGVuZGluZyBv biB0aGUgc2l6ZSBvZiB0aGUgbWFwcGluZz8KPj4KPj4+IMKgIC0gSXQgbWlnaHQgYmUgZWFzaWVy IHRvIHJldmlldyBpZiB0aGUgYXJtNjQgc3R1ZmYgaXMgZmlyc3QgbW92ZWQgKHdpdGhvdXQKPj4+ IGNoYW5nZXMpIHRoZW4gbW9kaWZpZWQgdG8gbWFrZSBpdCBzdWl0YWJsZSBmb3IgcmlzY3YsIHRo ZW4gZm9yIHJpc2N2IHRvIGJlCj4+PiBob29rZWQgdXAuIEF0IHRoZSBtb21lbnQgSSdtIHRyeWlu ZyB0byBmb2xsb3cgYWxsIDMgcGFydHMgcGVyLWZ1bmN0aW9uLgo+PiBPaywgbGV0IG1lIGdpdmUg aXQgYSB0cnkgZHVyaW5nIHlvdXIgcGF0ZXJuaXR5IGxlYXZlIQoKUmV2aWV3IHdvdWxkIGNlcnRh aW5seSBiZSBlYXNpZXIgd2l0aCB0aGlzIGFwcHJvYWNoIQoKVGhhbmtzLApSeWFuCgo+Pgo+Pj4g VGhhbmtzLAo+Pj4gUnlhbgo+PiBUaGFua3MsCj4+Cj4+IEFsZXgKPj4KPj4+Cj4+Pj4gVGhpcyBw YXRjaHNldCB3YXMgdGVzdGVkIGJ5IHJ1bm5pbmcgdGhlIGxpYmh1Z2V0bGJmcyB0ZXN0c3VpdGUg d2l0aCA2NEtCCj4+Pj4gYW5kIDJNQiBwYWdlcyBvbiBib3RoIGFyY2hpdGVjdHVyZXMgKG9uIGEg NEtCIGJhc2UgcGFnZSBzaXplIGFybTY0IGtlcm5lbCkuCj4+Pj4KPj4+PiBbMV0KPj4+PiBodHRw czovL2xvcmUua2VybmVsLm9yZy9saW51eC1hcm0ta2VybmVsLzIwMjQwMjE1MTAzMjA1LjI2MDcw MTYtMS1yeWFuLnJvYmVydHNAYXJtLmNvbS8KPj4+Pgo+Pj4+IENoYW5nZXMgaW4gdjI6Cj4+Pj4g wqDCoCAtIFJlYmFzZSBvbiB0b3Agb2YgNi45LXJjMwo+Pj4+Cj4+Pj4gQWxleGFuZHJlIEdoaXRp ICg5KToKPj4+PiDCoMKgIHJpc2N2OiBSZXN0b3JlIHRoZSBwZm4gaW4gYSBOQVBPVCBwdGUgd2hl biBtYW5pcHVsYXRlZCBieSBjb3JlIG1tIGNvZGUKPj4+PiDCoMKgIHJpc2N2OiBTYWZlbHkgcmVt b3ZlIGh1Z2VfcHRlX29mZnNldCgpIHdoZW4gbWFuaXB1bGF0aW5nIE5BUE9UIHB0ZXMKPj4+PiDC oMKgIG1tOiBVc2UgY29tbW9uIGh1Z2VfcHRlcF9nZXQoKSBmdW5jdGlvbiBmb3IgcmlzY3YvYXJt NjQKPj4+PiDCoMKgIG1tOiBVc2UgY29tbW9uIHNldF9odWdlX3B0ZV9hdCgpIGZ1bmN0aW9uIGZv ciByaXNjdi9hcm02NAo+Pj4+IMKgwqAgbW06IFVzZSBjb21tb24gaHVnZV9wdGVfY2xlYXIoKSBm dW5jdGlvbiBmb3IgcmlzY3YvYXJtNjQKPj4+PiDCoMKgIG1tOiBVc2UgY29tbW9uIGh1Z2VfcHRl cF9nZXRfYW5kX2NsZWFyKCkgZnVuY3Rpb24gZm9yIHJpc2N2L2FybTY0Cj4+Pj4gwqDCoCBtbTog VXNlIGNvbW1vbiBodWdlX3B0ZXBfc2V0X2FjY2Vzc19mbGFncygpIGZ1bmN0aW9uIGZvciByaXNj di9hcm02NAo+Pj4+IMKgwqAgbW06IFVzZSBjb21tb24gaHVnZV9wdGVwX3NldF93cnByb3RlY3Qo KSBmdW5jdGlvbiBmb3IgcmlzY3YvYXJtNjQKPj4+PiDCoMKgIG1tOiBVc2UgY29tbW9uIGh1Z2Vf cHRlcF9jbGVhcl9mbHVzaCgpIGZ1bmN0aW9uIGZvciByaXNjdi9hcm02NAo+Pj4+Cj4+Pj4gwqAg YXJjaC9hcm02NC9LY29uZmlnwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDC oCAxICsKPj4+PiDCoCBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaMKgwqDCoCB8wqAg NTYgKysrKystCj4+Pj4gwqAgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jwqDCoMKgwqDCoMKg wqDCoCB8IDI5MSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+Pj4gwqAgYXJjaC9yaXNj di9LY29uZmlnwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPj4+ PiDCoCBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaMKgwqDCoCB8wqDCoCAyICstCj4+ Pj4gwqAgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0LmggfMKgIDExICsrCj4+Pj4g wqAgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmjCoMKgwqAgfCAxNTMgKysrKysrKysr KysrKy0tCj4+Pj4gwqAgYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jwqDCoMKgwqDCoMKgwqDC oCB8IDIyNyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+Pj4gwqAgYXJjaC9yaXNjdi9tbS9wZ3Rh YmxlLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNiArLQo+Pj4+IMKgIG1tL0tjb25m aWfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDC oCAzICsKPj4+PiDCoCBtbS9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPj4+PiDCoCBtbS9jb250cHRlLmPCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMjcyICsrKysrKysrKysrKysr KysrKysrKysrKysrCj4+Pj4gwqAgMTIgZmlsZXMgY2hhbmdlZCwgNDgwIGluc2VydGlvbnMoKyks IDU0NCBkZWxldGlvbnMoLSkKPj4+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgbW0vY29udHB0ZS5j Cj4+Pj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K Pj4gbGludXgtcmlzY3YgbWFpbGluZyBsaXN0Cj4+IGxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVh ZC5vcmcKPj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1yaXNjdgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK