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 99846C197A0 for ; Thu, 16 Nov 2023 19:01:33 +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=3be0pIXjxgCpHbuf8Pa7IhlnUWWhcA1nazEZNxuAE3E=; b=Gn9HvrFVMiifxf 4t8rxke0cKgI5dqaSalmRfooOlu8YxHFZBpj0MqSy4a/AlvcPNMq3IKwoLkv0sDJMhrzJ3jrZKpaa tXnZ9Ab0hZ+Qnk5yj6G97lHPp0Ubq44fbzmth6Yh5dytmpwCojY0Ut5SiFmHif/Xfhc40WZjmd95U 7t2R9L9tbPlktW/dWPsTl6G9S1mSHKghm07TNUCvpCyZoagabFJABzaA3viDV+QSjapYsfEWBF+xx J57h4g1TDB0qdawm+1DfWYO4INGRL/3J3Sv9buQXYenOqbK9+y/nFY7z7NlyxyUWgXuheDASlb7Zb DuLiYfl2RIQ7apVAhM5w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r3hbe-004PWH-2F; Thu, 16 Nov 2023 19:00:50 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r3gdJ-004EKe-17 for linux-arm-kernel@lists.infradead.org; Thu, 16 Nov 2023 17:58:31 +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 160551595; Thu, 16 Nov 2023 09:59:11 -0800 (PST) Received: from [10.1.35.163] (XHFQ2J9959.cambridge.arm.com [10.1.35.163]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D5D793F6C4; Thu, 16 Nov 2023 09:58:21 -0800 (PST) Message-ID: <41ce627e-5045-414c-a07c-0bce3b425caa@arm.com> Date: Thu, 16 Nov 2023 17:58:20 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 01/14] mm: Batch-copy PTE ranges during fork() Content-Language: en-GB To: David Hildenbrand , Catalin Marinas , Will Deacon , Ard Biesheuvel , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Zenghui Yu , Andrey Ryabinin , Alexander Potapenko , Andrey Konovalov , Dmitry Vyukov , Vincenzo Frascino , Andrew Morton , Anshuman Khandual , Matthew Wilcox , Yu Zhao , Mark Rutland , Kefeng Wang , John Hubbard , Zi Yan Cc: linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20231115163018.1303287-1-ryan.roberts@arm.com> <20231115163018.1303287-2-ryan.roberts@arm.com> <89a9fe07-a5c5-4a99-b588-e6145053c58f@redhat.com> <1459f78b-e80c-4f21-bc65-f0ab259d348a@arm.com> <08ef2c36-2b9c-4b96-9d1d-68cca0f68ba5@redhat.com> <2d027a8d-adfb-481d-89ea-c99139e669aa@arm.com> <2618b024-6a95-4bfc-a08d-59d86e9931e5@redhat.com> From: Ryan Roberts In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231116_095829_484475_7BDD986D X-CRM114-Status: GOOD ( 33.73 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMTYvMTEvMjAyMyAxNDoxNSwgRGF2aWQgSGlsZGVuYnJhbmQgd3JvdGU6Cj4gT24gMTYuMTEu MjMgMTU6MTMsIERhdmlkIEhpbGRlbmJyYW5kIHdyb3RlOgo+PiBPbiAxNi4xMS4yMyAxNDo0OSwg UnlhbiBSb2JlcnRzIHdyb3RlOgo+Pj4gT24gMTYvMTEvMjAyMyAxMzoyMCwgRGF2aWQgSGlsZGVu YnJhbmQgd3JvdGU6Cj4+Pj4gT24gMTYuMTEuMjMgMTI6MjAsIFJ5YW4gUm9iZXJ0cyB3cm90ZToK Pj4+Pj4gT24gMTYvMTEvMjAyMyAxMTowMywgRGF2aWQgSGlsZGVuYnJhbmQgd3JvdGU6Cj4+Pj4+ PiBPbiAxNS4xMS4yMyAxNzozMCwgUnlhbiBSb2JlcnRzIHdyb3RlOgo+Pj4+Pj4+IENvbnZlcnQg Y29weV9wdGVfcmFuZ2UoKSB0byBjb3B5IGEgc2V0IG9mIHB0ZXMgaW4gYSBiYXRjaC4gQSBnaXZl biBiYXRjaAo+Pj4+Pj4+IG1hcHMgYSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgYmxvY2sgb2YgbWVt b3J5LCBhbGwgYmVsb25naW5nIHRvIHRoZSBzYW1lCj4+Pj4+Pj4gZm9saW8sIHdpdGggdGhlIHNh bWUgcGVybWlzc2lvbnMsIGFuZCBmb3Igc2hhcmVkIG1hcHBpbmdzLCB0aGUgc2FtZQo+Pj4+Pj4+ IGRpcnR5IHN0YXRlLiBUaGlzIHdpbGwgbGlrZWx5IGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgYSB0 aW55IGFtb3VudCBkdWUKPj4+Pj4+PiB0byBiYXRjaGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIGNv dW50IG1hbmFnZW1lbnQgYW5kIGNhbGxpbmcgc2V0X3B0ZXMoKQo+Pj4+Pj4+IHJhdGhlciB0aGFu IG1ha2luZyBpbmRpdmlkdWFsIGNhbGxzIHRvIHNldF9wdGVfYXQoKS4KPj4+Pj4+Pgo+Pj4+Pj4+ IEhvd2V2ZXIsIHRoZSBwcmltYXJ5IG1vdGl2YXRpb24gZm9yIHRoaXMgY2hhbmdlIGlzIHRvIHJl ZHVjZSB0aGUgbnVtYmVyCj4+Pj4+Pj4gb2YgdGxiIG1haW50ZW5hbmNlIG9wZXJhdGlvbnMgdGhh dCB0aGUgYXJtNjQgYmFja2VuZCBoYXMgdG8gcGVyZm9ybQo+Pj4+Pj4+IGR1cmluZyBmb3JrLCBh cyBpdCBpcyBhYm91dCB0byBhZGQgdHJhbnNwYXJlbnQgc3VwcG9ydCBmb3IgdGhlCj4+Pj4+Pj4g ImNvbnRpZ3VvdXMgYml0IiBpbiBpdHMgcHRlcy4gQnkgd3JpdGUtcHJvdGVjdGluZyB0aGUgcGFy ZW50IHVzaW5nIHRoZQo+Pj4+Pj4+IG5ldyBwdGVwX3NldF93cnByb3RlY3RzKCkgKG5vdGUgdGhl ICdzJyBhdCB0aGUgZW5kKSBmdW5jdGlvbiwgdGhlCj4+Pj4+Pj4gYmFja2VuZCBjYW4gYXZvaWQg aGF2aW5nIHRvIHVuZm9sZCBjb250aWcgcmFuZ2VzIG9mIFBURXMsIHdoaWNoIGlzCj4+Pj4+Pj4g ZXhwZW5zaXZlLCB3aGVuIGFsbCBwdGVzIGluIHRoZSByYW5nZSBhcmUgYmVpbmcgd3JpdGUtcHJv dGVjdGVkLgo+Pj4+Pj4+IFNpbWlsYXJseSwgYnkgdXNpbmcgc2V0X3B0ZXMoKSByYXRoZXIgdGhh biBzZXRfcHRlX2F0KCkgdG8gc2V0IHVwIHB0ZXMKPj4+Pj4+PiBpbiB0aGUgY2hpbGQsIHRoZSBi YWNrZW5kIGRvZXMgbm90IG5lZWQgdG8gZm9sZCBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb25jZQo+Pj4+ Pj4+IHRoZXkgYXJlIGFsbCBwb3B1bGF0ZWQgLSB0aGV5IGNhbiBiZSBpbml0aWFsbHkgcG9wdWxh dGVkIGFzIGEgY29udGlndW91cwo+Pj4+Pj4+IHJhbmdlIGluIHRoZSBmaXJzdCBwbGFjZS4KPj4+ Pj4+Pgo+Pj4+Pj4+IFRoaXMgY2hhbmdlIGFkZHJlc3NlcyB0aGUgY29yZS1tbSByZWZhY3Rvcmlu ZyBvbmx5LCBhbmQgaW50cm9kdWNlcwo+Pj4+Pj4+IHB0ZXBfc2V0X3dycHJvdGVjdHMoKSB3aXRo IGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGNhbGxzCj4+Pj4+Pj4gcHRlcF9zZXRfd3Jw cm90ZWN0KCkgZm9yIGVhY2ggcHRlIGluIHRoZSByYW5nZS4gQSBzZXBhcmF0ZSBjaGFuZ2Ugd2ls bAo+Pj4+Pj4+IGltcGxlbWVudCBwdGVwX3NldF93cnByb3RlY3RzKCkgaW4gdGhlIGFybTY0IGJh Y2tlbmQgdG8gcmVhbGl6ZSB0aGUKPj4+Pj4+PiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBhcyBw YXJ0IG9mIHRoZSB3b3JrIHRvIGVuYWJsZSBjb250cHRlIG1hcHBpbmdzLgo+Pj4+Pj4+Cj4+Pj4+ Pj4gU2lnbmVkLW9mZi1ieTogUnlhbiBSb2JlcnRzIDxyeWFuLnJvYmVydHNAYXJtLmNvbT4KPj4+ Pj4+PiAtLS0KPj4+Pj4+PiDCoCDCoMKgIGluY2x1ZGUvbGludXgvcGd0YWJsZS5oIHzCoCAxMyAr KysKPj4+Pj4+PiDCoCDCoMKgIG1tL21lbW9yeS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwg MTc1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KPj4+Pj4+PiDCoCDC oMKgIDIgZmlsZXMgY2hhbmdlZCwgMTUwIGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9ucygtKQo+ Pj4+Pj4+Cj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5j bHVkZS9saW51eC9wZ3RhYmxlLmgKPj4+Pj4+PiBpbmRleCBhZjc2MzljM2IwYTMuLjFjNTBmOGEw ZmRkZSAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAo+Pj4+Pj4+ ICsrKyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCj4+Pj4+Pj4gQEAgLTYyMiw2ICs2MjIsMTkg QEAgc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0 Cj4+Pj4+Pj4gKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlcwo+Pj4+Pj4+IMKgIMKgwqAgfQo+Pj4+ Pj4+IMKgIMKgwqAgI2VuZGlmCj4+Pj4+Pj4gwqAgwqDCoCArI2lmbmRlZiBwdGVwX3NldF93cnBy b3RlY3RzCj4+Pj4+Pj4gK3N0cnVjdCBtbV9zdHJ1Y3Q7Cj4+Pj4+Pj4gK3N0YXRpYyBpbmxpbmUg dm9pZCBwdGVwX3NldF93cnByb3RlY3RzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+Pj4+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVf dCAqcHRlcCwKPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVk IGludCBucikKPj4+Pj4+PiArewo+Pj4+Pj4+ICvCoMKgwqAgdW5zaWduZWQgaW50IGk7Cj4+Pj4+ Pj4gKwo+Pj4+Pj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IG5yOyBpKyssIGFkZHJlc3MgKz0g UEFHRV9TSVpFLCBwdGVwKyspCj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHB0ZXBfc2V0X3dycHJv dGVjdChtbSwgYWRkcmVzcywgcHRlcCk7Cj4+Pj4+Pj4gK30KPj4+Pj4+PiArI2VuZGlmCj4+Pj4+ Pj4gKwo+Pj4+Pj4+IMKgIMKgwqAgLyoKPj4+Pj4+PiDCoCDCoMKgwqAgKiBPbiBzb21lIGFyY2hp dGVjdHVyZXMgaGFyZHdhcmUgZG9lcyBub3Qgc2V0IHBhZ2UgYWNjZXNzIGJpdCB3aGVuCj4+Pj4+ Pj4gYWNjZXNzaW5nCj4+Pj4+Pj4gwqAgwqDCoMKgICogbWVtb3J5IHBhZ2UsIGl0IGlzIHJlc3Bv bnNpYmlsaXR5IG9mIHNvZnR3YXJlIHNldHRpbmcgdGhpcyBiaXQuCj4+Pj4+Pj4gSXQgYnJpbmdz Cj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKPj4+Pj4+PiBp bmRleCAxZjE4ZWQ0YTU0OTcuLmI3YzgyMjg4ODNjZiAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9tbS9t ZW1vcnkuYwo+Pj4+Pj4+ICsrKyBiL21tL21lbW9yeS5jCj4+Pj4+Pj4gQEAgLTkyMSw0NiArOTIx LDEyOSBAQCBjb3B5X3ByZXNlbnRfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEs Cj4+Pj4+Pj4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hCj4+Pj4+Pj4gwqAgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLyogVWZmZC13cCBuZWVkcyB0byBiZSBkZWxpdmVyZWQgdG8gZGVzdCBw dGUgYXMgd2VsbCAqLwo+Pj4+Pj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB0ZSA9IHB0ZV9t a3VmZmRfd3AocHRlKTsKPj4+Pj4+PiDCoCDCoMKgwqDCoMKgwqAgc2V0X3B0ZV9hdChkc3Rfdm1h LT52bV9tbSwgYWRkciwgZHN0X3B0ZSwgcHRlKTsKPj4+Pj4+PiAtwqDCoMKgIHJldHVybiAwOwo+ Pj4+Pj4+ICvCoMKgwqAgcmV0dXJuIDE7Cj4+Pj4+Pj4gK30KPj4+Pj4+PiArCj4+Pj4+Pj4gK3N0 YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvbnRfbWFwcGVkX3ZhZGRyKHN0cnVjdCBw YWdlICpwYWdlLAo+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IHBhZ2UgKmFuY2hvciwgdW5zaWduZWQgbG9uZyBhbmNob3JfdmFkZHIpCj4+Pj4+Pj4gK3sKPj4+ Pj4+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0Owo+Pj4+Pj4+ICvCoMKgwqAgdW5zaWdu ZWQgbG9uZyB2YWRkcjsKPj4+Pj4+PiArCj4+Pj4+Pj4gK8KgwqDCoCBvZmZzZXQgPSAocGFnZV90 b19wZm4ocGFnZSkgLSBwYWdlX3RvX3BmbihhbmNob3IpKSA8PCBQQUdFX1NISUZUOwo+Pj4+Pj4+ ICvCoMKgwqAgdmFkZHIgPSBhbmNob3JfdmFkZHIgKyBvZmZzZXQ7Cj4+Pj4+Pj4gKwo+Pj4+Pj4+ ICvCoMKgwqAgaWYgKGFuY2hvciA+IHBhZ2UpIHsKPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYg KHZhZGRyID4gYW5jaG9yX3ZhZGRyKQo+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiAwOwo+Pj4+Pj4+ICvCoMKgwqAgfSBlbHNlIHsKPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAg aWYgKHZhZGRyIDwgYW5jaG9yX3ZhZGRyKQo+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiBVTE9OR19NQVg7Cj4+Pj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+Pj4gKwo+Pj4+Pj4+ICvC oMKgwqAgcmV0dXJuIHZhZGRyOwo+Pj4+Pj4+ICt9Cj4+Pj4+Pj4gKwo+Pj4+Pj4+ICtzdGF0aWMg aW50IGZvbGlvX25yX3BhZ2VzX2NvbnRfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sCj4+Pj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGFn ZSAqcGFnZSwgcHRlX3QgKnB0ZSwKPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCj4+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdGVfdCBw dGVudCwgYm9vbCAqYW55X2RpcnR5KQo+Pj4+Pj4+ICt7Cj4+Pj4+Pj4gK8KgwqDCoCBpbnQgZmxv b3BzOwo+Pj4+Pj4+ICvCoMKgwqAgaW50IGk7Cj4+Pj4+Pj4gK8KgwqDCoCB1bnNpZ25lZCBsb25n IHBmbjsKPj4+Pj4+PiArwqDCoMKgIHBncHJvdF90IHByb3Q7Cj4+Pj4+Pj4gK8KgwqDCoCBzdHJ1 Y3QgcGFnZSAqZm9saW9fZW5kOwo+Pj4+Pj4+ICsKPj4+Pj4+PiArwqDCoMKgIGlmICghZm9saW9f dGVzdF9sYXJnZShmb2xpbykpCj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAxOwo+Pj4+ Pj4+ICsKPj4+Pj4+PiArwqDCoMKgIGZvbGlvX2VuZCA9ICZmb2xpby0+cGFnZSArIGZvbGlvX25y X3BhZ2VzKGZvbGlvKTsKPj4+Pj4+PiArwqDCoMKgIGVuZCA9IG1pbihwYWdlX2NvbnRfbWFwcGVk X3ZhZGRyKGZvbGlvX2VuZCwgcGFnZSwgYWRkciksIGVuZCk7Cj4+Pj4+Pj4gK8KgwqDCoCBmbG9v cHMgPSAoZW5kIC0gYWRkcikgPj4gUEFHRV9TSElGVDsKPj4+Pj4+PiArwqDCoMKgIHBmbiA9IHBh Z2VfdG9fcGZuKHBhZ2UpOwo+Pj4+Pj4+ICvCoMKgwqAgcHJvdCA9IHB0ZV9wZ3Byb3QocHRlX21r b2xkKHB0ZV9ta2NsZWFuKHB0ZW50KSkpOwo+Pj4+Pj4+ICsKPj4+Pj4+PiArwqDCoMKgICphbnlf ZGlydHkgPSBwdGVfZGlydHkocHRlbnQpOwo+Pj4+Pj4+ICsKPj4+Pj4+PiArwqDCoMKgIHBmbisr Owo+Pj4+Pj4+ICvCoMKgwqAgcHRlKys7Cj4+Pj4+Pj4gKwo+Pj4+Pj4+ICvCoMKgwqAgZm9yIChp ID0gMTsgaSA8IGZsb29wczsgaSsrKSB7Cj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHB0ZW50ID0g cHRlcF9nZXQocHRlKTsKPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcHRlbnQgPSBwdGVfbWtvbGQo cHRlX21rY2xlYW4ocHRlbnQpKTsKPj4+Pj4+PiArCj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlm ICghcHRlX3ByZXNlbnQocHRlbnQpIHx8IHB0ZV9wZm4ocHRlbnQpICE9IHBmbiB8fAo+Pj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBncHJvdF92YWwocHRlX3BncHJvdChwdGVudCkpICE9 IHBncHJvdF92YWwocHJvdCkpCj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7 Cj4+Pj4+Pj4gKwo+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocHRlX2RpcnR5KHB0ZW50KSkK Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqYW55X2RpcnR5ID0gdHJ1ZTsKPj4+Pj4+ PiArCj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHBmbisrOwo+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCBwdGUrKzsKPj4+Pj4+PiArwqDCoMKgIH0KPj4+Pj4+PiArCj4+Pj4+Pj4gK8KgwqDCoCByZXR1 cm4gaTsKPj4+Pj4+PiDCoCDCoMKgIH0KPj4+Pj4+PiDCoCDCoMKgIMKgIC8qCj4+Pj4+Pj4gLSAq IENvcHkgb25lIHB0ZS7CoCBSZXR1cm5zIDAgaWYgc3VjY2VlZGVkLCBvciAtRUFHQUlOIGlmIG9u ZSBwcmVhbGxvY2F0ZWQKPj4+Pj4+PiBwYWdlCj4+Pj4+Pj4gLSAqIGlzIHJlcXVpcmVkIHRvIGNv cHkgdGhpcyBwdGUuCj4+Pj4+Pj4gKyAqIENvcHkgc2V0IG9mIGNvbnRpZ3VvdXMgcHRlcy7CoCBS ZXR1cm5zIG51bWJlciBvZiBwdGVzIGNvcGllZCBpZiBzdWNjZWVkZWQKPj4+Pj4+PiArICogKGFs d2F5cyBndGUgMSksIG9yIC1FQUdBSU4gaWYgb25lIHByZWFsbG9jYXRlZCBwYWdlIGlzIHJlcXVp cmVkIHRvCj4+Pj4+Pj4gY29weSB0aGUKPj4+Pj4+PiArICogZmlyc3QgcHRlLgo+Pj4+Pj4+IMKg IMKgwqDCoCAqLwo+Pj4+Pj4+IMKgIMKgwqAgc3RhdGljIGlubGluZSBpbnQKPj4+Pj4+PiAtY29w eV9wcmVzZW50X3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9h cmVhX3N0cnVjdAo+Pj4+Pj4+ICpzcmNfdm1hLAo+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgIHB0 ZV90ICpkc3RfcHRlLCBwdGVfdCAqc3JjX3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgKnJz cywKPj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZm9saW8gKipwcmVhbGxvYykKPj4+ Pj4+PiArY29weV9wcmVzZW50X3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QKPj4+Pj4+PiAqc3JjX3ZtYSwKPj4+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgIHB0ZV90ICpkc3RfcHRlLCBwdGVfdCAqc3JjX3B0ZSwKPj4+Pj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCj4+Pj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoCBpbnQgKnJzcywgc3RydWN0IGZvbGlvICoqcHJlYWxsb2Mp Cj4+Pj4+Pj4gwqAgwqDCoCB7Cj4+Pj4+Pj4gwqAgwqDCoMKgwqDCoMKgIHN0cnVjdCBtbV9zdHJ1 Y3QgKnNyY19tbSA9IHNyY192bWEtPnZtX21tOwo+Pj4+Pj4+IMKgIMKgwqDCoMKgwqDCoCB1bnNp Z25lZCBsb25nIHZtX2ZsYWdzID0gc3JjX3ZtYS0+dm1fZmxhZ3M7Cj4+Pj4+Pj4gwqAgwqDCoMKg wqDCoMKgIHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHNyY19wdGUpOwo+Pj4+Pj4+IMKgIMKgwqDCoMKg wqDCoCBzdHJ1Y3QgcGFnZSAqcGFnZTsKPj4+Pj4+PiDCoCDCoMKgwqDCoMKgwqAgc3RydWN0IGZv bGlvICpmb2xpbzsKPj4+Pj4+PiArwqDCoMKgIGludCBuciA9IDE7Cj4+Pj4+Pj4gK8KgwqDCoCBi b29sIGFub247Cj4+Pj4+Pj4gK8KgwqDCoCBib29sIGFueV9kaXJ0eSA9IHB0ZV9kaXJ0eShwdGUp Owo+Pj4+Pj4+ICvCoMKgwqAgaW50IGk7Cj4+Pj4+Pj4gwqAgwqDCoCDCoMKgwqDCoMKgIHBhZ2Ug PSB2bV9ub3JtYWxfcGFnZShzcmNfdm1hLCBhZGRyLCBwdGUpOwo+Pj4+Pj4+IC3CoMKgwqAgaWYg KHBhZ2UpCj4+Pj4+Pj4gK8KgwqDCoCBpZiAocGFnZSkgewo+Pj4+Pj4+IMKgIMKgwqDCoMKgwqDC oMKgwqDCoMKgIGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKPj4+Pj4+PiAtwqDCoMKgIGlmIChw YWdlICYmIGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHsKPj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAg LyoKPj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoCAqIElmIHRoaXMgcGFnZSBtYXkgaGF2ZSBiZWVu IHBpbm5lZCBieSB0aGUgcGFyZW50IHByb2Nlc3MsCj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqAg KiBjb3B5IHRoZSBwYWdlIGltbWVkaWF0ZWx5IGZvciB0aGUgY2hpbGQgc28gdGhhdCB3ZSdsbCBh bHdheXMKPj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoCAqIGd1YXJhbnRlZSB0aGUgcGlubmVkIHBh Z2Ugd29uJ3QgYmUgcmFuZG9tbHkgcmVwbGFjZWQgaW4gdGhlCj4+Pj4+Pj4gLcKgwqDCoMKgwqDC oMKgwqAgKiBmdXR1cmUuCj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqAgKi8KPj4+Pj4+PiAtwqDC oMKgwqDCoMKgwqAgZm9saW9fZ2V0KGZvbGlvKTsKPj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgaWYg KHVubGlrZWx5KHBhZ2VfdHJ5X2R1cF9hbm9uX3JtYXAocGFnZSwgZmFsc2UsIHNyY192bWEpKSkg ewo+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFBhZ2UgbWF5IGJlIHBpbm5lZCwg d2UgaGF2ZSB0byBjb3B5LiAqLwo+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvbGlv X3B1dChmb2xpbyk7Cj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGNvcHlf cHJlc2VudF9wYWdlKGRzdF92bWEsIHNyY192bWEsIGRzdF9wdGUsIHNyY19wdGUsCj4+Pj4+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhZGRyLCBy c3MsIHByZWFsbG9jLCBwYWdlKTsKPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgYW5vbiA9IGZvbGlv X3Rlc3RfYW5vbihmb2xpbyk7Cj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIG5yID0gZm9saW9fbnJf cGFnZXNfY29udF9tYXBwZWQoZm9saW8sIHBhZ2UsIHNyY19wdGUsIGFkZHIsCj4+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW5kLCBwdGUsICZh bnlfZGlydHkpOwo+Pj4+Pj4+ICsKPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsg aSA8IG5yOyBpKyssIHBhZ2UrKykgewo+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm IChhbm9uKSB7Cj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+Pj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIElmIHRoaXMgcGFnZSBtYXkg aGF2ZSBiZWVuIHBpbm5lZCBieSB0aGUKPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKiBwYXJlbnQgcHJvY2VzcywgY29weSB0aGUgcGFnZSBpbW1lZGlhdGVseSBmb3IK Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiB0aGUgY2hpbGQgc28g dGhhdCB3ZSdsbCBhbHdheXMgZ3VhcmFudGVlIHRoZQo+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqIHBpbm5lZCBwYWdlIHdvbid0IGJlIHJhbmRvbWx5IHJlcGxhY2Vk IGluIHRoZQo+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGZ1dHVy ZS4KPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4+Pj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICh1bmxpa2VseShwYWdlX3RyeV9kdXBf YW5vbl9ybWFwKAo+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHBhZ2UsIGZhbHNlLCBzcmNfdm1hKSkpIHsKPj4+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGkgIT0gMCkKPj4+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogUGFnZSBtYXkgYmUgcGlubmVk LCB3ZSBoYXZlIHRvIGNvcHkuICovCj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBjb3B5X3ByZXNlbnRfcGFnZSgKPj4+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkc3Rfdm1hLCBzcmNfdm1hLCBk c3RfcHRlLAo+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNyY19wdGUsIGFkZHIsIHJzcywgcHJlYWxsb2MsCj4+Pj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFnZSk7Cj4+Pj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByc3NbTU1fQU5PTlBBR0VTXSsrOwo+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgVk1fQlVHX09OKFBhZ2VBbm9uRXhjbHVzaXZlKHBhZ2UpKTsKPj4+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcGFnZV9kdXBfZmlsZV9ybWFwKHBhZ2UsIGZhbHNlKTsKPj4+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJzc1ttbV9jb3VudGVyX2ZpbGUocGFn ZSldKys7Cj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+Pj4+IMKgIMKgwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgcnNzW01NX0FOT05QQUdF U10rKzsKPj4+Pj4+PiAtwqDCoMKgIH0gZWxzZSBpZiAocGFnZSkgewo+Pj4+Pj4+IC3CoMKgwqDC oMKgwqDCoCBmb2xpb19nZXQoZm9saW8pOwo+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBwYWdlX2R1 cF9maWxlX3JtYXAocGFnZSwgZmFsc2UpOwo+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCByc3NbbW1f Y291bnRlcl9maWxlKHBhZ2UpXSsrOwo+Pj4+Pj4+ICsKPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAg bnIgPSBpOwo+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBmb2xpb19yZWZfYWRkKGZvbGlvLCBucik7 Cj4+Pj4+Pj4gwqAgwqDCoMKgwqDCoMKgIH0KPj4+Pj4+PiDCoCDCoMKgIMKgwqDCoMKgwqAgLyoK Pj4+Pj4+PiBAQCAtOTY4LDI0ICsxMDUxLDI4IEBAIGNvcHlfcHJlc2VudF9wdGUoc3RydWN0IHZt X2FyZWFfc3RydWN0ICpkc3Rfdm1hLAo+Pj4+Pj4+IHN0cnVjdAo+Pj4+Pj4+IHZtX2FyZWFfc3Ry dWN0ICpzcmNfdm1hLAo+Pj4+Pj4+IMKgIMKgwqDCoMKgwqDCoMKgICogaW4gdGhlIHBhcmVudCBh bmQgdGhlIGNoaWxkCj4+Pj4+Pj4gwqAgwqDCoMKgwqDCoMKgwqAgKi8KPj4+Pj4+PiDCoCDCoMKg wqDCoMKgwqAgaWYgKGlzX2Nvd19tYXBwaW5nKHZtX2ZsYWdzKSAmJiBwdGVfd3JpdGUocHRlKSkg ewo+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBwdGVwX3NldF93cnByb3RlY3Qoc3JjX21tLCBhZGRy LCBzcmNfcHRlKTsKPj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcHRlcF9zZXRfd3Jwcm90ZWN0cyhz cmNfbW0sIGFkZHIsIHNyY19wdGUsIG5yKTsKPj4+Pj4+PiDCoCDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwdGUgPSBwdGVfd3Jwcm90ZWN0KHB0ZSk7Cj4+Pj4+Pgo+Pj4+Pj4gWW91IGxpa2VseSB3YW50 IGFuICJhbnlfcHRlX3dyaXRhYmxlIiBjaGVjayBoZXJlIGluc3RlYWQsIG5vPwo+Pj4+Pj4KPj4+ Pj4+IEFueSBvcGVyYXRpb25zIHRoYXQgdGFyZ2V0IGEgc2luZ2xlIGluZGlpdmlkdWFsIFBURSB3 aGlsZSBtdWx0aXBsZSBQVEVzIGFyZQo+Pj4+Pj4gYWRqdXN0ZWQgYXJlIHN1c3BpY2lvdXMgOikK Pj4+Pj4KPj4+Pj4gVGhlIGlkZWEgaXMgdGhhdCBJJ3ZlIGFscmVhZHkgY29uc3RyYWluZWQgdGhl IGJhdGNoIG9mIHBhZ2VzIHN1Y2ggdGhhdCB0aGUKPj4+Pj4gcGVybWlzc2lvbnMgYXJlIGFsbCB0 aGUgc2FtZSAoc2VlIGZvbGlvX25yX3BhZ2VzX2NvbnRfbWFwcGVkKCkpLiBTbyBpZiB0aGUKPj4+ Pj4gZmlyc3QKPj4+Pj4gcHRlIGlzIHdyaXRhYmxlLCB0aGVuIHRoZXkgYWxsIGFyZSAtIHNvbWV0 aGluZyBoYXMgZ29uZSBiYWRseSB3cm9uZyBpZiBzb21lCj4+Pj4+IGFyZQo+Pj4+PiB3cml0YWJs ZSBhbmQgb3RoZXJzIGFyZSBub3QuCj4+Pj4KPj4+PiBJIHdvbmRlciBpZiBpdCB3b3VsZCBiZSBj bGVhbmVyIGFuZCBlYXNpZXIgdG8gbm90IGRvIHRoYXQsIHRob3VnaC4KPj4+Pgo+Pj4+IFNpbXBs eSByZWNvcmQgaWYgYW55IHB0ZSBpcyB3cml0YWJsZS4gQWZ0ZXJ3YXJkcyB0aGV5IHdpbGwgKmFs bCogYmUgUi9PIGFuZCB5b3UKPj4+PiBjYW4gc2V0IHRoZSBjb250IGJpdCwgY29ycmVjdD8KPj4+ Cj4+PiBPaCBJIHNlZSB3aGF0IHlvdSBtZWFuIC0gdGhhdCBvbmx5IHdvcmtzIGZvciBjb3cgbWFw cGluZ3MgdGhvdWdoLiBJZiB5b3UgaGF2ZSBhCj4+PiBzaGFyZWQgbWFwcGluZywgeW91IHdvbid0 IGJlIG1ha2luZyBpdCByZWFkLW9ubHkgYXQgZm9yay4gU28gaWYgd2UgaWdub3JlCj4+PiBwdGVf d3JpdGUoKSBzdGF0ZSB3aGVuIGRlbWFya2luZyB0aGUgYmF0Y2hlcywgd2Ugd2lsbCBlbmQgdXAg d2l0aCBhIGJhdGNoIG9mCj4+PiBwYWdlcyB3aXRoIGEgbWl4IG9mIFJPIGFuZCBSVyBpbiB0aGUg cGFyZW50LCBidXQgdGhlbiB3ZSBzZXRfcHRlcygpIGZvciB0aGUKPj4+IGNoaWxkIGFuZCB0aG9z ZSBwYWdlcyB3aWxsIGFsbCBoYXZlIHRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgZmlyc3QgcGFnZSBv ZiB0aGUKPj4+IGJhdGNoLgo+Pgo+PiBJIHNlZSB3aGF0IHlvdSBtZWFuLgo+Pgo+PiBBZnRlciBm b3JrKCksIGFsbCBhbm9uIHBhZ2VzIHdpbGwgYmUgUi9PIGluIHRoZSBwYXJlbnQgYW5kIHRoZSBj aGlsZC4KPj4gRWFzeS4gSWYgYW55IFBURSBpcyB3cml0YWJsZSwgd3Jwcm90ZWN0IGFsbCBpbiB0 aGUgcGFyZW50IGFuZCB0aGUgY2hpbGQuCj4+Cj4+IEFmdGVyIGZvcmsoKSwgYWxsIHNoYXJlZCBw YWdlcyBjYW4gYmUgUi9PIG9yIFIvVyBpbiB0aGUgcGFyZW50LiBGb3IKPj4gc2ltcGxpY2l0eSwg SSB0aGluayB5b3UgY2FuIHNpbXBseSBzZXQgdGhlbSBhbGwgUi9PIGluIHRoZSBjaGlsZC4gU28g aWYKPj4gYW55IFBURSBpcyB3cml0YWJsZSwgd3Jwcm90ZWN0IGFsbCBpbiB0aGUgY2hpbGQuCj4g Cj4gT3IgYmV0dGVyOiBpZiBhbnkgaXMgUi9PLCBzZXQgdGhlbSBhbGwgUi9PLiBPdGhlcndpc2Ug anVzdCBsZWF2ZSB0aGVtIGFzIGlzLgo+IAo+IEJ1dCBkZXZpbCBpcyBpbiB0aGUgZGV0YWlsLgoK T0sgSSB0aGluayBJIGZvbGxvdy4gSSdsbCBpbXBsZW1lbnQgdGhpcyBmb3IgdjMuIFRoYW5rcyEK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1h cm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t a2VybmVsCg==