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 X-Spam-Level: X-Spam-Status: No, score=-15.4 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 008B8C433E0 for ; Thu, 4 Feb 2021 14:33:12 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 7D94D64DDD for ; Thu, 4 Feb 2021 14:33:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7D94D64DDD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 30B114B1A9; Thu, 4 Feb 2021 09:33:11 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zxwvU-ydLTmZ; Thu, 4 Feb 2021 09:33:09 -0500 (EST) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 6E4304B231; Thu, 4 Feb 2021 09:33:09 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 975DF4B22F for ; Thu, 4 Feb 2021 09:33:08 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id aGZYSNmAQ6Px for ; Thu, 4 Feb 2021 09:33:07 -0500 (EST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 0FB284B248 for ; Thu, 4 Feb 2021 09:33:07 -0500 (EST) 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 4F34011FB; Thu, 4 Feb 2021 06:33:06 -0800 (PST) Received: from [192.168.1.179] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B07DF3F694; Thu, 4 Feb 2021 06:33:03 -0800 (PST) Subject: Re: [PATCH v7 2/3] arm64: kvm: Introduce MTE VCPU feature To: Marc Zyngier References: <20210115152811.8398-1-steven.price@arm.com> <20210115152811.8398-3-steven.price@arm.com> <0c0adbcd250690f703ac4a28faf99263@kernel.org> From: Steven Price Message-ID: <844e72df-9a24-23f6-fb7c-e6f499c29af1@arm.com> Date: Thu, 4 Feb 2021 14:33:18 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <0c0adbcd250690f703ac4a28faf99263@kernel.org> Content-Language: en-GB Cc: "Dr. David Alan Gilbert" , qemu-devel@nongnu.org, Catalin Marinas , Juan Quintela , Richard Henderson , linux-kernel@vger.kernel.org, Dave Martin , linux-arm-kernel@lists.infradead.org, Thomas Gleixner , Will Deacon , kvmarm@lists.cs.columbia.edu X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu T24gMDIvMDIvMjAyMSAxNzoxMiwgTWFyYyBaeW5naWVyIHdyb3RlOgo+IE9uIDIwMjEtMDEtMTUg MTU6MjgsIFN0ZXZlbiBQcmljZSB3cm90ZToKPj4gQWRkIGEgbmV3IFZNIGZlYXR1cmUgJ0tWTV9B Uk1fQ0FQX01URScgd2hpY2ggZW5hYmxlcyBtZW1vcnkgdGFnZ2luZwo+PiBmb3IgYSBWTS4gVGhp cyBleHBvc2VzIHRoZSBmZWF0dXJlIHRvIHRoZSBndWVzdCBhbmQgYXV0b21hdGljYWxseSB0YWdz Cj4+IG1lbW9yeSBwYWdlcyB0b3VjaGVkIGJ5IHRoZSBWTSBhcyBQR19tdGVfdGFnZ2VkIChhbmQg Y2xlYXJzIHRoZSB0YWdzCj4+IHN0b3JhZ2UpIHRvIGVuc3VyZSB0aGF0IHRoZSBndWVzdCBjYW5u b3Qgc2VlIHN0YWxlIHRhZ3MsIGFuZCBzbyB0aGF0IHRoZQo+PiB0YWdzIGFyZSBjb3JyZWN0bHkg c2F2ZWQvcmVzdG9yZWQgYWNyb3NzIHN3YXAuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFN0ZXZlbiBQ cmljZSA8c3RldmVuLnByaWNlQGFybS5jb20+Cj4+IC0tLQo+PiDCoGFyY2gvYXJtNjQvaW5jbHVk ZS9hc20va3ZtX2VtdWxhdGUuaCB8wqAgMyArKysKPj4gwqBhcmNoL2FybTY0L2luY2x1ZGUvYXNt L2t2bV9ob3N0LmjCoMKgwqAgfMKgIDMgKysrCj4+IMKgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9w Z3RhYmxlLmjCoMKgwqDCoCB8wqAgMiArLQo+PiDCoGFyY2gvYXJtNjQva2VybmVsL210ZS5jwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAzNiArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t Cj4+IMKgYXJjaC9hcm02NC9rdm0vYXJtLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB8wqAgOSArKysrKysrCj4+IMKgYXJjaC9hcm02NC9rdm0vaHlwL2V4Y2VwdGlvbi5jwqDCoMKg wqDCoMKgIHzCoCAzICsrLQo+PiDCoGFyY2gvYXJtNjQva3ZtL21tdS5jwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfCAxNiArKysrKysrKysrKysrCj4+IMKgYXJjaC9hcm02NC9rdm0v c3lzX3JlZ3MuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDYgKysrKy0KPj4gwqBpbmNsdWRl L3VhcGkvbGludXgva3ZtLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDEgKwo+PiDCoDkg ZmlsZXMgY2hhbmdlZCwgNjIgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCj4+Cj4+IGRp ZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKPj4gYi9hcmNo L2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKPj4gaW5kZXggZjYxMmMwOTBmMmU0Li42 YmY3NzZjMjM5OWMgMTAwNjQ0Cj4+IC0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2Vt dWxhdGUuaAo+PiArKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKPj4g QEAgLTg0LDYgKzg0LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHZjcHVfcmVzZXRfaGNyKHN0cnVj dCBrdm1fdmNwdSAKPj4gKnZjcHUpCj4+IMKgwqDCoMKgIGlmIChjcHVzX2hhdmVfY29uc3RfY2Fw KEFSTTY0X01JU01BVENIRURfQ0FDSEVfVFlQRSkgfHwKPj4gwqDCoMKgwqDCoMKgwqDCoCB2Y3B1 X2VsMV9pc18zMmJpdCh2Y3B1KSkKPj4gwqDCoMKgwqDCoMKgwqDCoCB2Y3B1LT5hcmNoLmhjcl9l bDIgfD0gSENSX1RJRDI7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoa3ZtX2hhc19tdGUodmNwdS0+a3Zt KSkKPj4gK8KgwqDCoMKgwqDCoMKgIHZjcHUtPmFyY2guaGNyX2VsMiB8PSBIQ1JfQVRBOwo+PiDC oH0KPj4KPj4gwqBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKnZjcHVfaGNyKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSkKPj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3Zt X2hvc3QuaAo+PiBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+PiBpbmRleCA1 MTU5MGEzOTdlNGIuLjFjYTU3ODVmYjBlOSAxMDA2NDQKPj4gLS0tIGEvYXJjaC9hcm02NC9pbmNs dWRlL2FzbS9rdm1faG9zdC5oCj4+ICsrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hv c3QuaAo+PiBAQCAtMTMyLDYgKzEzMiw4IEBAIHN0cnVjdCBrdm1fYXJjaCB7Cj4+Cj4+IMKgwqDC oMKgIHU4IHBmcjBfY3N2MjsKPj4gwqDCoMKgwqAgdTggcGZyMF9jc3YzOwo+PiArwqDCoMKgIC8q IE1lbW9yeSBUYWdnaW5nIEV4dGVuc2lvbiBlbmFibGVkIGZvciB0aGUgZ3Vlc3QgKi8KPj4gK8Kg wqDCoCBib29sIG10ZV9lbmFibGVkOwo+PiDCoH07Cj4+Cj4+IMKgc3RydWN0IGt2bV92Y3B1X2Zh dWx0X2luZm8gewo+PiBAQCAtNzQ5LDYgKzc1MSw3IEBAIGJvb2wga3ZtX2FybV92Y3B1X2lzX2Zp bmFsaXplZChzdHJ1Y3Qga3ZtX3ZjcHUgCj4+ICp2Y3B1KTsKPj4gwqAjZGVmaW5lIGt2bV9hcm1f dmNwdV9zdmVfZmluYWxpemVkKHZjcHUpIFwKPj4gwqDCoMKgwqAgKCh2Y3B1KS0+YXJjaC5mbGFn cyAmIEtWTV9BUk02NF9WQ1BVX1NWRV9GSU5BTElaRUQpCj4+Cj4+ICsjZGVmaW5lIGt2bV9oYXNf bXRlKGt2bSkgKHN5c3RlbV9zdXBwb3J0c19tdGUoKSAmJiAKPj4gKGt2bSktPmFyY2gubXRlX2Vu YWJsZWQpCj4+IMKgI2RlZmluZSBrdm1fdmNwdV9oYXNfcG11KHZjcHUpwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiDCoMKgwqDCoCAodGVzdF9iaXQoS1ZNX0FSTV9W Q1BVX1BNVV9WMywgKHZjcHUpLT5hcmNoLmZlYXR1cmVzKSkKPj4KPj4gZGlmZiAtLWdpdCBhL2Fy Y2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIAo+PiBiL2FyY2gvYXJtNjQvaW5jbHVkZS9h c20vcGd0YWJsZS5oCj4+IGluZGV4IDUwMTU2Mjc5M2NlMi4uMjc0MTZkNTJmNmE5IDEwMDY0NAo+ PiAtLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAo+PiArKysgYi9hcmNoL2Fy bTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAo+PiBAQCAtMzEyLDcgKzMxMiw3IEBAIHN0YXRpYyBp bmxpbmUgdm9pZCBzZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QKPj4gKm1tLCB1bnNpZ25lZCBs b25nIGFkZHIsCj4+IMKgwqDCoMKgwqDCoMKgwqAgX19zeW5jX2ljYWNoZV9kY2FjaGUocHRlKTsK Pj4KPj4gwqDCoMKgwqAgaWYgKHN5c3RlbV9zdXBwb3J0c19tdGUoKSAmJgo+PiAtwqDCoMKgwqDC oMKgwqAgcHRlX3ByZXNlbnQocHRlKSAmJiBwdGVfdGFnZ2VkKHB0ZSkgJiYgIXB0ZV9zcGVjaWFs KHB0ZSkpCj4+ICvCoMKgwqDCoMKgwqDCoCBwdGVfcHJlc2VudChwdGUpICYmIHB0ZV92YWxpZF91 c2VyKHB0ZSkgJiYgIXB0ZV9zcGVjaWFsKHB0ZSkpCj4+IMKgwqDCoMKgwqDCoMKgwqAgbXRlX3N5 bmNfdGFncyhwdGVwLCBwdGUpOwo+IAo+IENhcmUgdG8gZWxhYm9yYXRlIG9uIHRoaXMgY2hhbmdl PwoKU29ycnkgSSBzaG91bGQgaGF2ZSBjYWxsZWQgdGhpcyBvdXQgaW4gdGhlIGNvbW1pdCBtZXNz YWdlLiBUaGUgY2hhbmdlIApoZXJlIGlzIGluc3RlYWQgb2Ygb25seSBjYWxsaW5nIG10ZV9zeW5j X3RhZ3MoKSBvbiBwYWdlcyB3aGljaCBhcmUgCmFscmVhZHkgdGFnZ2VkIGluIHRoZSBQVEUsIGl0 IGlzIGNhbGxlZCBmb3IgYWxsIChub3JtYWwpIHVzZXIgcGFnZXMgCmluc3RlYWQuIFNlZSBiZWxv dyBmb3Igd2h5LgoKPj4KPj4gwqDCoMKgwqAgX19jaGVja19yYWN5X3B0ZV91cGRhdGUobW0sIHB0 ZXAsIHB0ZSk7Cj4+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9tdGUuYyBiL2FyY2gv YXJtNjQva2VybmVsL210ZS5jCj4+IGluZGV4IGRjOWFkYTY0ZmVlZC4uZjllMDg5YmUxNjAzIDEw MDY0NAo+PiAtLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9tdGUuYwo+PiArKysgYi9hcmNoL2FybTY0 L2tlcm5lbC9tdGUuYwo+PiBAQCAtMjUsMjcgKzI1LDMzIEBACj4+Cj4+IMKgdTY0IGdjcl9rZXJu ZWxfZXhjbCBfX3JvX2FmdGVyX2luaXQ7Cj4+Cj4+IC1zdGF0aWMgdm9pZCBtdGVfc3luY19wYWdl X3RhZ3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHB0ZV90ICpwdGVwLCBib29sIAo+PiBjaGVja19zd2Fw KQo+PiArc3RhdGljIHZvaWQgbXRlX3N5bmNfcGFnZV90YWdzKHN0cnVjdCBwYWdlICpwYWdlLCBw dGVfdCAqcHRlcCwgYm9vbCAKPj4gY2hlY2tfc3dhcCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBib29sIHB0ZV9pc190YWdnZWQpCj4+IMKgewo+PiDCoMKgwqDCoCBw dGVfdCBvbGRfcHRlID0gUkVBRF9PTkNFKCpwdGVwKTsKPj4KPj4gwqDCoMKgwqAgaWYgKGNoZWNr X3N3YXAgJiYgaXNfc3dhcF9wdGUob2xkX3B0ZSkpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoCBzd3Bf ZW50cnlfdCBlbnRyeSA9IHB0ZV90b19zd3BfZW50cnkob2xkX3B0ZSk7Cj4+Cj4+IC3CoMKgwqDC oMKgwqDCoCBpZiAoIW5vbl9zd2FwX2VudHJ5KGVudHJ5KSAmJiBtdGVfcmVzdG9yZV90YWdzKGVu dHJ5LCBwYWdlKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghbm9uX3N3YXBfZW50cnkoZW50cnkp ICYmIG10ZV9yZXN0b3JlX3RhZ3MoZW50cnksIHBhZ2UpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNldF9iaXQoUEdfbXRlX3RhZ2dlZCwgJnBhZ2UtPmZsYWdzKTsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqAg fQo+Pgo+PiAtwqDCoMKgIHBhZ2Vfa2FzYW5fdGFnX3Jlc2V0KHBhZ2UpOwo+PiAtwqDCoMKgIC8q Cj4+IC3CoMKgwqDCoCAqIFdlIG5lZWQgc21wX3dtYigpIGluIGJldHdlZW4gc2V0dGluZyB0aGUg ZmxhZ3MgYW5kIGNsZWFyaW5nIHRoZQo+PiAtwqDCoMKgwqAgKiB0YWdzIGJlY2F1c2UgaWYgYW5v dGhlciB0aHJlYWQgcmVhZHMgcGFnZS0+ZmxhZ3MgYW5kIGJ1aWxkcyBhCj4+IC3CoMKgwqDCoCAq IHRhZ2dlZCBhZGRyZXNzIG91dCBvZiBpdCwgdGhlcmUgaXMgYW4gYWN0dWFsIGRlcGVuZGVuY3kg dG8gdGhlCj4+IC3CoMKgwqDCoCAqIG1lbW9yeSBhY2Nlc3MsIGJ1dCBvbiB0aGUgY3VycmVudCB0 aHJlYWQgd2UgZG8gbm90IGd1YXJhbnRlZSB0aGF0Cj4+IC3CoMKgwqDCoCAqIHRoZSBuZXcgcGFn ZS0+ZmxhZ3MgYXJlIHZpc2libGUgYmVmb3JlIHRoZSB0YWdzIHdlcmUgdXBkYXRlZC4KPj4gLcKg wqDCoMKgICovCj4+IC3CoMKgwqAgc21wX3dtYigpOwo+PiAtwqDCoMKgIG10ZV9jbGVhcl9wYWdl X3RhZ3MocGFnZV9hZGRyZXNzKHBhZ2UpKTsKPj4gK8KgwqDCoCBpZiAocHRlX2lzX3RhZ2dlZCkg ewo+PiArwqDCoMKgwqDCoMKgwqAgc2V0X2JpdChQR19tdGVfdGFnZ2VkLCAmcGFnZS0+ZmxhZ3Mp Owo+PiArwqDCoMKgwqDCoMKgwqAgcGFnZV9rYXNhbl90YWdfcmVzZXQocGFnZSk7Cj4+ICvCoMKg wqDCoMKgwqDCoCAvKgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIFdlIG5lZWQgc21wX3dtYigpIGlu IGJldHdlZW4gc2V0dGluZyB0aGUgZmxhZ3MgYW5kIAo+PiBjbGVhcmluZyB0aGUKPj4gK8KgwqDC oMKgwqDCoMKgwqAgKiB0YWdzIGJlY2F1c2UgaWYgYW5vdGhlciB0aHJlYWQgcmVhZHMgcGFnZS0+ ZmxhZ3MgYW5kIGJ1aWxkcyBhCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogdGFnZ2VkIGFkZHJlc3Mg b3V0IG9mIGl0LCB0aGVyZSBpcyBhbiBhY3R1YWwgZGVwZW5kZW5jeSB0byAKPj4gdGhlCj4+ICvC oMKgwqDCoMKgwqDCoMKgICogbWVtb3J5IGFjY2VzcywgYnV0IG9uIHRoZSBjdXJyZW50IHRocmVh ZCB3ZSBkbyBub3QgCj4+IGd1YXJhbnRlZSB0aGF0Cj4+ICvCoMKgwqDCoMKgwqDCoMKgICogdGhl IG5ldyBwYWdlLT5mbGFncyBhcmUgdmlzaWJsZSBiZWZvcmUgdGhlIHRhZ3Mgd2VyZSB1cGRhdGVk Lgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiArwqDCoMKgwqDCoMKgwqAgc21wX3dtYigpOwo+ PiArwqDCoMKgwqDCoMKgwqAgbXRlX2NsZWFyX3BhZ2VfdGFncyhwYWdlX2FkZHJlc3MocGFnZSkp Owo+PiArwqDCoMKgIH0KPj4gwqB9Cj4+Cj4+IMKgdm9pZCBtdGVfc3luY190YWdzKHB0ZV90ICpw dGVwLCBwdGVfdCBwdGUpCj4+IEBAIC01MywxMSArNTksMTMgQEAgdm9pZCBtdGVfc3luY190YWdz KHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCj4+IMKgwqDCoMKgIHN0cnVjdCBwYWdlICpwYWdlID0g cHRlX3BhZ2UocHRlKTsKPj4gwqDCoMKgwqAgbG9uZyBpLCBucl9wYWdlcyA9IGNvbXBvdW5kX25y KHBhZ2UpOwo+PiDCoMKgwqDCoCBib29sIGNoZWNrX3N3YXAgPSBucl9wYWdlcyA9PSAxOwo+PiAr wqDCoMKgIGJvb2wgcHRlX2lzX3RhZ2dlZCA9IHB0ZV90YWdnZWQocHRlKTsKPj4KPj4gwqDCoMKg wqAgLyogaWYgUEdfbXRlX3RhZ2dlZCBpcyBzZXQsIHRhZ3MgaGF2ZSBhbHJlYWR5IGJlZW4gaW5p dGlhbGlzZWQgKi8KPj4gwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyssIHBh Z2UrKykgewo+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFBHX210ZV90 YWdnZWQsICZwYWdlLT5mbGFncykpCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG10ZV9zeW5j X3BhZ2VfdGFncyhwYWdlLCBwdGVwLCBjaGVja19zd2FwKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlm ICghdGVzdF9iaXQoUEdfbXRlX3RhZ2dlZCwgJnBhZ2UtPmZsYWdzKSkKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgbXRlX3N5bmNfcGFnZV90YWdzKHBhZ2UsIHB0ZXAsIGNoZWNrX3N3YXAsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdGVfaXNfdGFn Z2VkKTsKPj4gwqDCoMKgwqAgfQo+PiDCoH0KPiAKPiBUaGlzIHBhcnQgcmVhbGx5IHdhbnRzIHRv IGhhdmUgaXRzIG93biBwYXRjaCBhbmQgYmUgZG9jdW1lbnRlZCwKPiBleHBsYWluaW5nIHdoeSBp dCBpcyBzdGlsbCB2YWxpZCBub3QgdG8gYXRvbWljYWxseSB0ZXN0IGFuZCBzZXQKPiB0aGUgUEdf bXRlX3RhZ2dlZCBiaXQuCgpJIHRoaW5rIHlvdSdyZSByaWdodCAtIHRoaXMgcGF0Y2ggbmVlZHMg c3BsaXR0aW5nLiBUaGVyZSBhcmUgdHdvIHBhcnRzIGhlcmU6CgoxKSBDaGFuZ2luZyBtdGVfc3lu Y190YWdzKCkgdG8gYmUgY2FsbGVkIHdoZXRoZXIgdGhlIHBhZ2UgaXMgdGFnZ2VkIG9yIApub3Qu IFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRoZSBvcHBvcnR1bml0eSB0byByZXN0b3JlIHRhZ3Mg ZXZlbiBpZiAKdGhlcmUgaXMgbm8gdXNlciBzcGFjZSBtYXBwaW5nIHdpdGggdGFncyBlbmFibGVk IChpLmUuIEtWTSBoYXMgdGFncyAKZW5hYmxlZCwgYnV0IHRoZSBWTU0gaGFzbid0IG1hcHBlZCB3 aXRoIFBST1RfTVRFKS4KCjIpIEFjdHVhbGx5IGludHJvZHVjaW5nIHRoZSBNVEUgVk0gZmVhdHVy ZS4KCkknbGwgc3BsaXQgaXQgYW5kIGhvcGVmdWxseSB0aGUgY29tbWl0IG1lc3NhZ2VzIGNhbiB0 aGVuIGRvY3VtZW50IHdoYXQncyAKZ29pbmcgb24uCgo+Pgo+PiBkaWZmIC0tZ2l0IGEvYXJjaC9h cm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwo+PiBpbmRleCA2ZTYzN2QyYjRj ZmIuLmY0YzJmZDJlN2M0OSAxMDA2NDQKPj4gLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmMKPj4g KysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmMKPj4gQEAgLTk3LDYgKzk3LDEyIEBAIGludCBrdm1f dm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sCj4+IMKgwqDCoMKgwqDCoMKgwqAg ciA9IDA7Cj4+IMKgwqDCoMKgwqDCoMKgwqAga3ZtLT5hcmNoLnJldHVybl9uaXN2X2lvX2Fib3J0 X3RvX3VzZXIgPSB0cnVlOwo+PiDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNh c2UgS1ZNX0NBUF9BUk1fTVRFOgo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFzeXN0ZW1fc3VwcG9y dHNfbXRlKCkgfHwga3ZtLT5jcmVhdGVkX3ZjcHVzKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgIHIgPSAwOwo+PiArwqDCoMKgwqDC oMKgwqAga3ZtLT5hcmNoLm10ZV9lbmFibGVkID0gdHJ1ZTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJy ZWFrOwo+PiDCoMKgwqDCoCBkZWZhdWx0Ogo+PiDCoMKgwqDCoMKgwqDCoMKgIHIgPSAtRUlOVkFM Owo+PiDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiBAQCAtMjM4LDYgKzI0NCw5IEBAIGludCBr dm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgCj4+IGxvbmcgZXh0 KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4gwqDCoMKgwqDCoMKgwqDCoCByID0gMTsKPj4g wqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCBjYXNlIEtWTV9DQVBfQVJNX01URToK Pj4gK8KgwqDCoMKgwqDCoMKgIHIgPSBzeXN0ZW1fc3VwcG9ydHNfbXRlKCk7Cj4+ICvCoMKgwqDC oMKgwqDCoCBicmVhazsKPj4gwqDCoMKgwqAgY2FzZSBLVk1fQ0FQX1NURUFMX1RJTUU6Cj4+IMKg wqDCoMKgwqDCoMKgwqAgciA9IGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCgpOwo+PiDCoMKgwqDC oMKgwqDCoMKgIGJyZWFrOwo+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL2V4Y2Vw dGlvbi5jIAo+PiBiL2FyY2gvYXJtNjQva3ZtL2h5cC9leGNlcHRpb24uYwo+PiBpbmRleCA3MzYy OTA5NGY5MDMuLjU2NDI2NTY1NjAwYyAxMDA2NDQKPj4gLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlw L2V4Y2VwdGlvbi5jCj4+ICsrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9leGNlcHRpb24uYwo+PiBA QCAtMTEyLDcgKzExMiw4IEBAIHN0YXRpYyB2b2lkIGVudGVyX2V4Y2VwdGlvbjY0KHN0cnVjdCBr dm1fdmNwdQo+PiAqdmNwdSwgdW5zaWduZWQgbG9uZyB0YXJnZXRfbW9kZSwKPj4gwqDCoMKgwqAg bmV3IHw9IChvbGQgJiBQU1JfQ19CSVQpOwo+PiDCoMKgwqDCoCBuZXcgfD0gKG9sZCAmIFBTUl9W X0JJVCk7Cj4+Cj4+IC3CoMKgwqAgLy8gVE9ETzogVENPIChpZi93aGVuIEFSTXY4LjUtTWVtVGFn IGlzIGV4cG9zZWQgdG8gZ3Vlc3RzKQo+PiArwqDCoMKgIGlmIChrdm1faGFzX210ZSh2Y3B1LT5r dm0pKQo+PiArwqDCoMKgwqDCoMKgwqAgbmV3IHw9IFBTUl9UQ09fQklUOwo+Pgo+PiDCoMKgwqDC oCBuZXcgfD0gKG9sZCAmIFBTUl9ESVRfQklUKTsKPj4KPj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJt NjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmMKPj4gaW5kZXggN2QyMjU3Y2M1NDM4 Li5iOWY5ZmI0NjJkZTYgMTAwNjQ0Cj4+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jCj4+ICsr KyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jCj4+IEBAIC04NzksNiArODc5LDIyIEBAIHN0YXRpYyBp bnQgdXNlcl9tZW1fYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAo+PiBwaHlzX2FkZHJfdCBm YXVsdF9pcGEsCj4+IMKgwqDCoMKgIGlmICh2bWFfcGFnZXNpemUgPT0gUEFHRV9TSVpFICYmICFm b3JjZV9wdGUpCj4+IMKgwqDCoMKgwqDCoMKgwqAgdm1hX3BhZ2VzaXplID0gdHJhbnNwYXJlbnRf aHVnZXBhZ2VfYWRqdXN0KG1lbXNsb3QsIGh2YSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnBmbiwgJmZhdWx0X2lwYSk7 Cj4+ICsKPj4gK8KgwqDCoCBpZiAoa3ZtX2hhc19tdGUoa3ZtKSAmJiBwZm5fdmFsaWQocGZuKSkg ewo+PiArwqDCoMKgwqDCoMKgwqAgLyoKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBWTSB3aWxsIGJl IGFibGUgdG8gc2VlIHRoZSBwYWdlJ3MgdGFncywgc28gd2UgbXVzdCBlbnN1cmUKPj4gK8KgwqDC oMKgwqDCoMKgwqAgKiB0aGV5IGhhdmUgYmVlbiBpbml0aWFsaXNlZC4KPj4gK8KgwqDCoMKgwqDC oMKgwqAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3Bh Z2UocGZuKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGxvbmcgaSwgbnJfcGFnZXMgPSBjb21wb3VuZF9u cihwYWdlKTsKPiAKPiAidW5zaWduZWQgbG9uZyIgdG8gbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9m IGNvbXBvdW5kX25yKCkuCj4gCj4gQWxzbywgc2hvdWxkbid0IHlvdSBjYXAgbnJfcGFnZXMgdG8g dm1hX3BhZ2VzaXplPyBJdCBjb3VsZCB3ZWxsCj4gYmUgdGhhdCB3aGF0IHdlIGVuZC11cCBtYXBw aW5nIGF0IFMyIGhhcyBub3RoaW5nIHRvIGRvIHdpdGgKPiB0aGUgdmlldyB0aGUga2VybmVsIGhh cyBvZiB0aGF0IHBhZ2UuCgpHb29kIHBvaW50IC0gYWN0dWFsbHkgQUZBSUNUIEkgY2FuIGp1c3Qg dXNlIHZtYV9wYWdlc2l6ZSBkaXJlY3RseSAtIAp0aGVyZSdzIG5vIG5lZWQgdG8gbG9vayBhdCB0 aGUga2VybmVsJ3Mgdmlldy4KClRoYW5rcyBmb3IgdGhlIHJldmlldywKClN0ZXZlCgo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoCAvKiBpZiBQR19tdGVfdGFnZ2VkIGlzIHNldCwgdGFncyBoYXZlIGFs cmVhZHkgYmVlbiAKPj4gaW5pdGlhbGlzZWQgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaSA9 IDA7IGkgPCBucl9wYWdlczsgaSsrLCBwYWdlKyspIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFBHX210ZV90YWdnZWQsICZwYWdlLT5mbGFncykpCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbXRlX2NsZWFyX3BhZ2VfdGFncyhwYWdl X2FkZHJlc3MocGFnZSkpOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgIH0KPj4gKwo+ PiDCoMKgwqDCoCBpZiAod3JpdGFibGUpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoCBwcm90IHw9IEtW TV9QR1RBQkxFX1BST1RfVzsKPj4gwqDCoMKgwqDCoMKgwqDCoCBrdm1fc2V0X3Bmbl9kaXJ0eShw Zm4pOwo+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJt NjQva3ZtL3N5c19yZWdzLmMKPj4gaW5kZXggODhkNGYzNjA5NDllLi41N2U1YmUxNGYxY2MgMTAw NjQ0Cj4+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKPj4gKysrIGIvYXJjaC9hcm02 NC9rdm0vc3lzX3JlZ3MuYwo+PiBAQCAtMTAyOSw3ICsxMDI5LDggQEAgc3RhdGljIHU2NCByZWFk X2lkX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4+IMKgwqDCoMKgwqDCoMKgwqAg dmFsICY9IH4oMHhmVUwgPDwgSURfQUE2NFBGUjBfQ1NWM19TSElGVCk7Cj4+IMKgwqDCoMKgwqDC oMKgwqAgdmFsIHw9ICgodTY0KXZjcHUtPmt2bS0+YXJjaC5wZnIwX2NzdjMgPDwgCj4+IElEX0FB NjRQRlIwX0NTVjNfU0hJRlQpOwo+PiDCoMKgwqDCoCB9IGVsc2UgaWYgKGlkID09IFNZU19JRF9B QTY0UEZSMV9FTDEpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHZhbCAmPSB+KDB4ZlVMIDw8IElEX0FB NjRQRlIxX01URV9TSElGVCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWt2bV9oYXNfbXRlKHZj cHUtPmt2bSkpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZhbCAmPSB+KDB4ZlVMIDw8IElE X0FBNjRQRlIxX01URV9TSElGVCk7Cj4+IMKgwqDCoMKgIH0gZWxzZSBpZiAoaWQgPT0gU1lTX0lE X0FBNjRJU0FSMV9FTDEgJiYgIXZjcHVfaGFzX3B0cmF1dGgodmNwdSkpIHsKPj4gwqDCoMKgwqDC oMKgwqDCoCB2YWwgJj0gfigoMHhmVUwgPDwgSURfQUE2NElTQVIxX0FQQV9TSElGVCkgfAo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoMHhmVUwgPDwgSURfQUE2NElTQVIxX0FQSV9TSElG VCkgfAo+PiBAQCAtMTI4NCw2ICsxMjg1LDkgQEAgc3RhdGljIGJvb2wgYWNjZXNzX2Njc2lkcihz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4+IHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKPj4gwqBz dGF0aWMgdW5zaWduZWQgaW50IG10ZV92aXNpYmlsaXR5KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAq dmNwdSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3Ry dWN0IHN5c19yZWdfZGVzYyAqcmQpCj4+IMKgewo+PiArwqDCoMKgIGlmIChrdm1faGFzX210ZSh2 Y3B1LT5rdm0pKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+ICsKPj4gwqDCoMKgwqAg cmV0dXJuIFJFR19ISURERU47Cj4+IMKgfQo+Pgo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBp L2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCj4+IGluZGV4IDg4NjgwMmI4 ZmZiYS4uZGU3MzdkNTEwMmNhIDEwMDY0NAo+PiAtLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3Zt LmgKPj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCj4+IEBAIC0xMDU2LDYgKzEwNTYs NyBAQCBzdHJ1Y3Qga3ZtX3BwY19yZXNpemVfaHB0IHsKPj4gwqAjZGVmaW5lIEtWTV9DQVBfRU5G T1JDRV9QVl9GRUFUVVJFX0NQVUlEIDE5MAo+PiDCoCNkZWZpbmUgS1ZNX0NBUF9TWVNfSFlQRVJW X0NQVUlEIDE5MQo+PiDCoCNkZWZpbmUgS1ZNX0NBUF9ESVJUWV9MT0dfUklORyAxOTIKPj4gKyNk ZWZpbmUgS1ZNX0NBUF9BUk1fTVRFIDE5Mwo+Pgo+PiDCoCNpZmRlZiBLVk1fQ0FQX0lSUV9ST1VU SU5HCj4gCj4gVGhhbmtzLAo+IAo+ICDCoMKgwqDCoMKgwqDCoCBNLgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwprdm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFy bUBsaXN0cy5jcy5jb2x1bWJpYS5lZHUKaHR0cHM6Ly9saXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFp bG1hbi9saXN0aW5mby9rdm1hcm0K