From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoffer Dall Subject: Re: [RFC PATCH 09/16] KVM: arm64: Allow ID registers to by dynamically read-as-zero Date: Wed, 8 Aug 2018 11:58:35 +0200 Message-ID: <20180808095835.GK5985@e113682-lin.lund.arm.com> References: <1529593060-542-1-git-send-email-Dave.Martin@arm.com> <1529593060-542-10-git-send-email-Dave.Martin@arm.com> <20180806130324.GA5985@e113682-lin.lund.arm.com> <20180807110958.GC9097@e103592.cambridge.arm.com> <20180807193512.GH5985@e113682-lin.lund.arm.com> <20180808091111.GL9097@e103592.cambridge.arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id A5B9F4A0C9 for ; Wed, 8 Aug 2018 05:58:40 -0400 (EDT) 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 uYxYVG4Y5Q4f for ; Wed, 8 Aug 2018 05:58:38 -0400 (EDT) Received: from foss.arm.com (usa-sjc-mx-foss1.foss.arm.com [217.140.101.70]) by mm01.cs.columbia.edu (Postfix) with ESMTP id C45B240493 for ; Wed, 8 Aug 2018 05:58:38 -0400 (EDT) Content-Disposition: inline In-Reply-To: <20180808091111.GL9097@e103592.cambridge.arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu To: Dave Martin Cc: Okamoto Takayuki , Christoffer Dall , Ard Biesheuvel , Marc Zyngier , Catalin Marinas , Will Deacon , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org List-Id: kvmarm@lists.cs.columbia.edu T24gV2VkLCBBdWcgMDgsIDIwMTggYXQgMTA6MTE6MTFBTSArMDEwMCwgRGF2ZSBNYXJ0aW4gd3Jv dGU6Cj4gT24gVHVlLCBBdWcgMDcsIDIwMTggYXQgMDk6MzU6MTJQTSArMDIwMCwgQ2hyaXN0b2Zm ZXIgRGFsbCB3cm90ZToKPiA+IE9uIFR1ZSwgQXVnIDA3LCAyMDE4IGF0IDEyOjA5OjU4UE0gKzAx MDAsIERhdmUgTWFydGluIHdyb3RlOgo+ID4gPiBPbiBNb24sIEF1ZyAwNiwgMjAxOCBhdCAwMzow MzoyNFBNICswMjAwLCBDaHJpc3RvZmZlciBEYWxsIHdyb3RlOgo+ID4gPiA+IEhpIERhdmUsCj4g PiA+ID4gCj4gPiA+ID4gSSB0aGluayB0aGVyZSdzIGEgdHlwbyBpbiB0aGUgc3ViamVjdCAidG8g YmUiIHJhdGhlciB0aGFuICJ0byBieSIuCj4gPiA+ID4gCj4gPiA+ID4gT24gVGh1LCBKdW4gMjEs IDIwMTggYXQgMDM6NTc6MzNQTSArMDEwMCwgRGF2ZSBNYXJ0aW4gd3JvdGU6Cj4gPiA+ID4gPiBX aGVuIGEgZmVhdHVyZS1kZXBlbmRlbnQgSUQgcmVnaXN0ZXIgaXMgaGlkZGVuIGZyb20gdGhlIGd1 ZXN0LCBpdAo+ID4gPiA+ID4gbmVlZHMgdG8gZXhoaWJpdCByZWFkLWFzLXplcm8gYmVoYXZpb3Vy IGFzIGRlZmluZWQgYnkgdGhlIEFybQo+ID4gPiA+ID4gYXJjaGl0ZWN0dXJlLCByYXRoZXIgdGhh biBhcHBlYXJpbmcgdG8gYmUgZW50aXJlbHkgYWJzZW50Lgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBU aGlzIHBhdGNoIHVwZGF0ZXMgdGhlIElEIHJlZ2lzdGVyIGVtdWxhdGlvbiBsb2dpYyB0byBtYWtl IHVzZSBvZgo+ID4gPiA+ID4gdGhlIG5ldyBjaGVja19wcmVzZW50KCkgbWV0aG9kIHRvIGRldGVy bWluZSB3aGV0aGVyIHRoZSByZWdpc3Rlcgo+ID4gPiA+ID4gc2hvdWxkIHJlYWQgYXMgemVybyBp bnN0ZWFkIG9mIHlpZWxkaW5nIHRoZSBob3N0J3Mgc2FuaXRpc2VkCj4gPiA+ID4gPiB2YWx1ZS4g IEJlY2F1c2UgY3VycmVudGx5IGEgZmFsc2UgcmVzdWx0IGZyb20gdGhpcyBtZXRob2QgdHJ1bmNh dGVzCj4gPiA+ID4gPiB0aGUgdHJhcCBjYWxsIGNoYWluIGJlZm9yZSB0aGUgc3lzcmVnJ3MgZW11 bGF0ZSBtZXRob2QoKSBpcyBjYWxsZWQsCj4gPiA+ID4gPiBhIGZsYWcgaXMgYWRkZWQgdG8gZGlz dGluZ3Vpc2ggdGhpcyBzcGVjaWFsIGNhc2UsIGFuZCBoZWxwZXJzIGFyZQo+ID4gPiA+ID4gcmVm YWN0b3JlZCBhcHByb3ByaWF0ZWx5Lgo+ID4gPiA+IAo+ID4gPiA+IEkgZG9uJ3QgdW5kZXJzdGFu ZCB0aGlzIGxhc3Qgc2VudGVuY2UuCj4gPiA+ID4gCj4gPiA+ID4gQW5kIEknbSBub3QgcmVhbGx5 IHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb2RlIGVpdGhlci4KPiA+ID4gPiAKPiA+ID4gPiBJIGNh bid0IHNlZW0gdG8gc2VlIGFueSByZWdpc3RlcnMgd2hpY2ggYXJlIGRlZmluZWQgYXMgIXByZXNl bnQgJiYgIXJheiwKPiA+ID4gPiB3aGljaCBpcyB3aGF0IEkgdGhvdWdodCB0aGlzIGZlYXR1cmUg d2FzIGFsbCBhYm91dC4KPiA+ID4gCj4gPiA+ICFwcmVzZW50IGFuZCAhcmF6IGlzIHRoZSBkZWZh dWx0IGJlaGF2aW91ciBmb3IgZXZlcnl0aGluZyB0aGF0IGlzIG5vdAo+ID4gPiBJRC1yZWdpc3Rl ci1saWtlLiAgVGhpcyBwYXRjaCBpcyBhZGRpbmcgdGhlICFwcmVzZW50ICYmIHJheiBjYXNlICh0 aG91Z2gKPiA+ID4gdGhhdCBtYXkgbm90IGJlIGEgaGVscGZ1bCB3YXkgdG8gZGVzY2liZSBpdCAu Li4gc2VlIGJlbG93KS4KPiA+IAo+ID4gRmFpciBlbm91Z2gsIGJ1dCBJIGRvbid0IHJlYWxseSBz ZWUgd2h5IHlvdSBuZWVkIHRvIGNsYXNzaWZ5IGEgcmVnaXN0ZXIKPiA+IGFzICFwcmVzZW50ICYm IHJheiwgYmVjYXVzZSByYXogaW1wbGllcyBwcmVzZW50IEFGQUlDVC4KPiA+IAo+ID4gPiAKPiA+ ID4gPiBJbiBvdGhlciB3b3Jkcywgd2hhdCBpcyB0aGUgYmVuZWZpdCBvZiB0aGlzIG1vcmUgZ2Vu ZXJpYyBtZXRob2QgYXMKPiA+ID4gPiBvcHBvc2VkIHRvIGhhdmluZyBhIHdyYXBwZXIgYXJvdW5k IHJlYWRfaWRfcmVnKCkgZm9yIHJlYWRfc3ZlX2lkX3JlZygpCj4gPiA+ID4gd2hpY2ggc2V0cyBS QVogaWYgdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgU1ZFIGluIHRoaXMgY29udGV4dD8KPiA+ID4g Cj4gPiA+IFRoZXJlIG1heSBiZSBvdGhlciB3YXlzIHRvIGZhY3RvciB0aGlzLiAgSSBjYW4ndCBu b3cgcmVtZW1iZXIgd2hheSBJCj4gPiA+IHdlbnQgd2l0aCB0aGlzIHBhcnRpY3VsYXIgYXBwcm9h Y2gsIGV4Y2VwdCB0aGF0IEkgdmFndWVseSByZWNhbGwKPiA+ID4gaGl0dGluZyBzb21lIG9ic3Rh Y2xlcyB3aGVuIGRvaW5nIHRoaW5ncyBhbm90aGVyIHdheS4KPiA+IAo+ID4gV2hhdCBJIGRvbid0 IG11Y2ggY2FyZSBmb3IgaXMgdGhhdCB3ZSBub3cgc2VlbSB0byBiZSBtaXhpbmcgdGhlIGNvbmNl cHQKPiA+IG9mIHdoZXRoZXIgc29tZXRoaW5nIGlzIHByZXNlbnQgYW5kIHRoZSB2YWx1ZSBpdCBy ZXR1cm5zIGlmIGl0IGlzCj4gPiBwcmVzZW50IGluIHRoZSBvdmVyYWxsIHN5c3RlbSByZWdpc3Rl ciBoYW5kbGluZyBsb2dpYy4gIEFuZCBJIGRvbid0Cj4gPiB1bmRlcnN0YW5kIHdoeSB0aGlzIGlz IGEgcmVxdWlyZW1lbnQuCj4gPiAKPiA+ID4gCj4gPiA+IENhbiB5b3UgdGFrZSBhIGxvb2sgYXQg bXkgYXR0ZW1wdGVkIGV4cGxhbmF0aW9uIGJlbG93IGFuZCB0aGVuIHdlCj4gPiA+IGNhbiByZWNv bnNpZGVyIHRoaXM/Cj4gPiAKPiA+IFN1cmUsIHNlZSBteSBjb21tZW50cyBiZWxvdy4KPiA+IAo+ ID4gPiAKPiA+ID4gWy4uLl0KPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gPiAKPiA+ID4gPiA+IFRo aXMgaW52bG92ZXMgc29tZSB0cml2aWFsIHVwZGF0ZXMgdG8gcGFzcyB0aGUgdmNwdSBwb2ludGVy IGRvd24KPiA+ID4gPiA+IGludG8gdGhlIElEIHJlZ2lzdGVyIGVtdWxhdGlvbi9hY2Nlc3MgZnVu Y3Rpb25zLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBBIG5ldyBJRF9TQU5JVElTRURfSUYoKSBtYWNy byBpcyBkZWZpbmVkIGZvciBkZWNsYXJpbmcKPiA+ID4gPiA+IGNvbmRpdGlvbmFsbHkgdmlzaWJs ZSBJRCByZWdpc3RlcnMuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IERhdmUg TWFydGluIDxEYXZlLk1hcnRpbkBhcm0uY29tPgo+ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiAgYXJj aC9hcm02NC9rdm0vc3lzX3JlZ3MuYyB8IDUxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tCj4gPiA+ID4gPiAgYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuaCB8 IDExICsrKysrKysrKysKPiA+ID4gPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDQ0IGluc2VydGlvbnMo KyksIDE4IGRlbGV0aW9ucygtKQo+ID4gPiA+ID4gCj4gPiA+IAo+ID4gPiBbLi4uXQo+ID4gPiAK PiA+ID4gPiA+IEBAIC0xODQwLDcgKzE4NTUsNyBAQCBzdGF0aWMgaW50IGVtdWxhdGVfY3Aoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LAo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gIAlyID0gZmluZF9yZWco cGFyYW1zLCB0YWJsZSwgbnVtKTsKPiA+ID4gPiA+ICAKPiA+ID4gPiA+IC0JaWYgKGxpa2VseShy KSAmJiBzeXNfcmVnX3ByZXNlbnQodmNwdSwgcikpIHsKPiA+ID4gPiA+ICsJaWYgKGxpa2VseShy KSAmJiBzeXNfcmVnX3ByZXNlbnRfb3JfcmF6KHZjcHUsIHIpKSB7Cj4gPiA+ID4gPiAgCQlwZXJm b3JtX2FjY2Vzcyh2Y3B1LCBwYXJhbXMsIHIpOwo+ID4gPiA+ID4gIAkJcmV0dXJuIDA7Cj4gPiA+ ID4gPiAgCX0KPiA+ID4gPiA+IEBAIC0yMDE2LDcgKzIwMzEsNyBAQCBzdGF0aWMgaW50IGVtdWxh dGVfc3lzX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gPiA+ID4gPiAgCWlmICghcikKPiA+ ID4gPiA+ICAJCXIgPSBmaW5kX3JlZyhwYXJhbXMsIHN5c19yZWdfZGVzY3MsIEFSUkFZX1NJWkUo c3lzX3JlZ19kZXNjcykpOwo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gLQlpZiAobGlrZWx5KHIpICYm IHN5c19yZWdfcHJlc2VudCh2Y3B1LCByKSkgewo+ID4gPiA+ID4gKwlpZiAobGlrZWx5KHIpICYm IHN5c19yZWdfcHJlc2VudF9vcl9yYXoodmNwdSwgcikpIHsKPiA+ID4gPiA+ICAJCXBlcmZvcm1f YWNjZXNzKHZjcHUsIHBhcmFtcywgcik7Cj4gPiA+ID4gPiAgCX0gZWxzZSB7Cj4gPiA+ID4gPiAg CQlrdm1fZXJyKCJVbnN1cHBvcnRlZCBndWVzdCBzeXNfcmVnIGFjY2VzcyBhdDogJWx4XG4iLAo+ ID4gPiA+ID4gQEAgLTIzMTMsNyArMjMyOCw3IEBAIGludCBrdm1fYXJtX3N5c19yZWdfZ2V0X3Jl ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnCj4g PiA+ID4gPiAgCWlmICghcikKPiA+ID4gPiA+ICAJCXJldHVybiBnZXRfaW52YXJpYW50X3N5c19y ZWcocmVnLT5pZCwgdWFkZHIpOwo+ID4gPiA+ID4gIAo+ID4gPiA+ID4gLQlpZiAoIXN5c19yZWdf cHJlc2VudCh2Y3B1LCByKSkKPiA+ID4gPiA+ICsJaWYgKCFzeXNfcmVnX3ByZXNlbnRfb3JfcmF6 KHZjcHUsIHIpKQo+ID4gPiA+ID4gIAkJcmV0dXJuIC1FTk9FTlQ7Cj4gPiA+ID4gPiAgCj4gPiA+ ID4gPiAgCWlmIChyLT5nZXRfdXNlcikKPiA+ID4gPiA+IEBAIC0yMzM3LDcgKzIzNTIsNyBAQCBp bnQga3ZtX2FybV9zeXNfcmVnX3NldF9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBz dHJ1Y3Qga3ZtX29uZV9yZWcgKnJlZwo+ID4gPiA+ID4gIAlpZiAoIXIpCj4gPiA+ID4gPiAgCQly ZXR1cm4gc2V0X2ludmFyaWFudF9zeXNfcmVnKHJlZy0+aWQsIHVhZGRyKTsKPiA+ID4gPiA+ICAK PiA+ID4gPiA+IC0JaWYgKCFzeXNfcmVnX3ByZXNlbnQodmNwdSwgcikpCj4gPiA+ID4gPiArCWlm ICghc3lzX3JlZ19wcmVzZW50X29yX3Jheih2Y3B1LCByKSkKPiA+ID4gPiA+ICAJCXJldHVybiAt RU5PRU5UOwo+ID4gPiAKPiA+ID4gT24gV2VkLCBKdWwgMjUsIDIwMTggYXQgMDQ6NDY6NTVQTSAr MDEwMCwgQWxleCBCZW5uw6llIHdyb3RlOgo+ID4gPiA+IEl0J3MgYWxsIHZlcnkgd2VsbCBiZWlu ZyByYXosIGJ1dCBzaG91bGRuJ3QgeW91IGNhdGNoIHRoaXMgZnVydGhlciBkb3duCj4gPiA+ID4g YW5kIG5vdCBhdHRlbXB0IHRvIHdyaXRlIHRoZSByZWdpc3RlciB0aGF0IGRvZXNuJ3QgZXhpc3Q/ Cj4gPiA+IAo+ID4gPiBUbyBiZSBjbGVhciwgaXMgdGhpcyBhIHF1ZXN0aW9uIGFib3V0IGZhY3Rv cmluZywgb3IgZG8geW91IHRoaW5rIHRoZXJlJ3MKPiA+ID4gYSBidWcgaGVyZT8KPiA+ID4gCj4g PiA+IAo+ID4gPiBJbiByZXNwb25zZSB0byBib3RoIHNldHMgb2YgY29tbWVudHMsIEkgdGhpbmsg dGhlIHdheSB0aGUgY29kZSBpcwo+ID4gPiBmYWN0b3JlZCBpcyBjYXVzaW5nIHNvbWUgY29uZnVz aW9uLgo+ID4gPiAKPiA+ID4gVGhlIGlkZWEgaW4gbXkgaGVhZCB3YXMgc29tZXRoaW5nIGxpa2Ug dGhpczoKPiA+ID4gCj4gPiA+IFN5c3RlbSByZWdpc3RlciBlbmNvZGluZ3MgZmFsbCBpbnRvIHR3 byBjbGFzc2VzOgo+ID4gPiAKPiA+ID4gIGEpIGVuY29kaW5ncyB0aGF0IHdlIGVtdWxhdGUgaW4g c29tZSB3YXkKPiA+IAo+ID4gdGhpcyBpcyBwcmVzZW50LCB0aGVuCj4gPiAKPiA+ID4gIGIpIGVu Y29kaW5ncyB0aGF0IHdlIHVuY29uZGl0aW9uYWxseSByZWZsZWN0IGJhY2sgdG8gdGhlIGd1ZXN0 IGFzIGFuCj4gPiA+ICAgICBVbmRlZi4KPiA+IAo+ID4gdGhpcyBpcyAhcHJlc2VudCwgdGhlbgo+ ID4gCj4gPiBUaGUgcHJldmlvdXMgY2hhbmdlIG1hZGUgdGhpcyBhIGNvbmZpZ3VyYWJsZSB0aGlu ZyBhcyBvcHBvc2VkIHRvIGEKPiA+IHN0YXRpYyBjb21waWxlIHRpbWUgdGhpbmcsIHJpZ2h0Pwo+ ID4gPiAKPiA+ID4gQXJjaGl0ZWN0dXJhbGx5IGRlZmluZWQgc3lzdGVtIHJlZ2lzdGVycyBmYWxs IGludG8gdHdvIGNsYXNzZXM6Cj4gPiA+IAo+ID4gPiAgaSkgcmVnaXN0ZXJzIHdob3NlIHJlbW92 YWwgdHVybnMgYWxsIGFjY2Vzc2VzIGludG8gYW4gVW5kZWYKPiA+ID4gIGlpKSByZWdpc3RlcnMg d2hvc2UgcmVtb3ZhbCBleGhpYml0cyBzb21lIG90aGVyIGJlaGF2aW91ci4KPiA+IAo+ID4gSSdt IG5vdCBzdXJlIHdoYXQgeW91IG1lYW4gYnkgJ3JlbW92YWwnIGhlcmUsIGFuZCB3aGljaCBhcmNo aXRlY3R1cmFsCj4gPiBjb25jZXB0IHRoYXQgcmVsYXRlcyB0bywgd2hpY2ggbWFrZXMgaXQgaGFy ZCBmb3IgbWUgdG8gcGFyc2UgdGhlIHJlc3QKPiA+IGhlcmUuLi4KPiA+IAo+ID4gPiAKPiA+ID4g VGhlc2UgdHdvIGNsYXNzaWZpY2F0aW9ucyBvdmVybGFwIHNvbXdlaGF0Lgo+ID4gPiAKPiA+ID4g Cj4gPiA+IEZyb20gYW4gZW11bGF0aW9uIHBlcnNwZWN0aXZlLCAoYiksIGFuZCAoaSkgaW4gdGhl ICJyZWdpc3RlciBub3QKPiA+ID4gcHJlc2VudCIgY2FzZSwgbG9vayB0aGUgc2FtZTogd2UgdHJh cCB0aGUgcmVnaXN0ZXIgYW5kIHJlZmxlY3QgYW4gVW5kZWYKPiA+ID4gZGlyZWN0bHkgYmFjayB0 byB0aGUgZ3Vlc3Qgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbiByZXF1aXJlZC4KPiA+ID4gCj4gPiA+ IEZyb20gYW4gZW11bGF0aW9uIHBlcnNwZWN0aXZlLCAoYSkgYW5kIChpaSkgYXJlIGFsc28gc29t ZXdoYXQgdGhlCj4gPiA+IHNhbWU6IHdlIG5lZWQgdG8gZW11bGF0ZSBzb21ldGhpbmcsIGFsdGhv dWdoIHByZWNpc2VseSB3aGF0IHdlIG5lZWQKPiA+ID4gdG8gZG8gZGVwZW5kcyBvbiB3aGljaCBy ZWdpc3RlciBpdCBpcyBhbmQgb24gd2hldGhlciB0aGUgcmVnaXN0ZXIgaXMKPiA+ID4gZGVlbWVk IHByZXNlbnQgb3Igbm90Lgo+ID4gPiAKPiA+ID4gc3lzX3JlZ19jaGVja19wcmVzZW50X29yX3Jh eigpIHRodXMgbWVhbnMgImZhbGxzIHVuZGVyIChhKSBvciAoaWkpIiwKPiA+ID4gaS5lLiwgc29t ZSBlbXVsYXRpb24gaXMgcmVxdWlyZWQgYW5kIHdlIG5lZWQgdG8gY2FsbCBzeXNyZWctc3BlY2lm aWMKPiA+ID4gbWV0aG9kcyB0byBmaWd1cmUgb3V0IHByZWNpc2VseSB3aGF0IHdlIG5lZWQgdG8g ZG8uCj4gPiAKPiA+IHllcywgYnV0IHdlJ3ZlIGFsd2F5cyBoYWQgdGhhdCB3aXRob3V0IHRoZSAi b3JfcmF6IiBzdHVmZiBhdCB0aGUgbG9va3VwCj4gPiBsZXZlbC4gIFdoYXQgaGFzIGNoYW5nZWQ/ Cj4gPiAKPiA+ID4gCj4gPiA+IENvbnZlcnNlbHkgIXN5c19yZWdfY2hlY2tfcHJlc2VudF9vcl9y YXooKSBtZWFucyB0aGF0IHdlIGNhbiBqdXN0Cj4gPiA+IFVuZGVmIHRoZSBndWVzdCB3aXRoIG5v IGZ1cnRoZXIgbG9naWMgcmVxdWlyZWQuCj4gPiAKPiA+IFllcywgYnV0IHRoYXQncyB0aGUgc2Ft ZSBhcyAhcHJlc2VudCwgYmVjYXVzZSByYXogdGhlbiBpbXBsaWVzIHByZXNlbnQsCj4gPiBzZWUg YWJvdmUuCj4gPiAKPiA+ID4gCj4gPiA+IERvZXMgdGhpcyByYXRpb25hbGUgbWFrZSB0aGluZ3Mg Y2xlYXJlcj8gIFRoZSBuYW1pbmcgaXMgcGVyaGFwcwo+ID4gPiB1bmZvcnR1bmF0ZS4KPiA+ID4g Cj4gPiAKPiA+IFVuZm9ydHVuYXRlbHkgbm90IHNvIG11Y2guICBJIGhhdmUgYSBzdHJvbmcgZmVl bGluZyB5b3Ugd2FudCB0byBtb3ZlCj4gPiBhbnl0aGluZyByZWxhdGluZyB0byBzb21ldGhpbmcg YmVpbmcgZW11bGF0ZWQgYXMgUkFaL1JBTy9zb21ldGhpbmcgZWxzZQo+ID4gaW50byBzeXNyZWcg c3BlY2lmaWMgZnVuY3Rpb25zLgo+IAo+IAo+IFRoZSB3YXkgSSBpbnRlZ3JhdGVkIHRoaXMgc2Vl bWVkIG5hdHVyYWwgYXQgdGhlIHRpbWUsIGJ1dCB5b3VyCj4gcmVhY3Rpb24gc3VnZ2VzdHMgdGhh dCBpdCBtYXkgbm90IGJlIHRoZSByaWdodCBhcHByb2FjaC4uLgo+IAo+IAo+IEF0IGl0cyBoZWFy dCwgSSdtIHRyeWluZyB0byBhYnN0cmFjdCBvdXQgdGhlIHNwZWNpYWwgYmVoYXZpb3VyIG9mCj4g YWxsIHVuYWxsb2NhdGVkIElEIHJlZ2lzdGVycywgc28gdGhhdCB3ZSBjYW4gZGVjaWRlIGF0IHJ1 bnRpbWUgd2hpY2gKPiBvbmVzIHRvIGhpZGUgZnJvIHRoZSBndWVzdDogd2l0aGluIHRoZSBJRCBy ZWdpc3RlciBibG9jaywgZWFjaAo+IHVuYWxsb2NhdGVkIHJlZ2lzdGVyIGJlY29tZXMgUkFaLCBu b3QgVU5ERUZJTkVEIGFzIHdvdWxkIGJlIHRoZSBjYXNlCj4gZm9yIG90aGVyIHN5c3RlbSByZWdp c3RlcnMsIHNvIHdlIG5lZWQgdG8gY2FwdHVyZSBib3RoIGJlaGF2aW91cnMuCj4gCj4gCj4gSWYg d2Ugd2FudCBhIGdlbmVyaWMgaGFuZGxlciBmb3IgYWxsIHRoZSBJRCByZWdpc3RlcnMgaW4gc3lz X3JlZ3MuYywKPiB0aGVuIHdlIG5lZWQgYSBmbGFnIHRvIHRlbGwgdXMgd2hldGhlciB0byBwYXNz IHRoZSBJRCByZWdpc3RlciB0aHJvdWdoCj4gZnJvbSBjcHVmZWF0dXJlcyBvciB0byBtYWtlIGl0 IGFwcGVhciBhcyB6ZXJvLgo+IAo+IEZvciBaQ1JfRUwxIG9uIHRoZSBvdGhlciBoYW5kLCB3ZSBy ZWFsbHkgd2FudCBhdHRlbXB0cyB0byBhY2Nlc3MgdGhhdAo+IHRvIHJlZmxlY3QgYW4gVW5kZWYg dG8gdGhlIGd1ZXN0IGlmIHdlIGFyZSBwcmV0ZW5kaW5nIHRoYXQgU1ZFIGlzIG5vdAo+IGltcGxl bWVudGVkLiAgQWdhaW4gaWYgd2Ugd2FudCB0byBmaWx0ZXIgb3V0IHNvbWUgc3lzcmVncyBpbiBh IHJ1bnRpbWUtCj4gY29udHJvbGxlZCB3YXksIHdlIG5lZWQgYSBmbGFnIHRvIHRlbGwgdXMgd2hl dGhlciB0byBmaWx0ZXIgb3V0IGEKPiBwYXJ0aWN1bGFyIHJlZ2lzdGVyLgo+IAo+IFNvLCB3ZSBo YXZlIHR3byBzcGVjaWZpYyB3YXlzIG9mIHJvbGxpbmcgYSBmZWF0dXJlIHRoYXQgaXMgcmVhbGx5 Cj4gaW1wbGVtZW50ZWQgaW4gdGhlIGhhcmR3YXJlIGJhY2sgdG8gdGhlIEFSTXY4LUEgYmVoYXZp b3VyIChSQVogZm9yIElECj4gcmVnaXN0ZXJzIGFuZCBVbmRlZiBmb3IgYW55dGhpbmcgZWxzZSku Cj4gCj4gSSB0cmllZCB0byBncm91cCB0aGVzZSB1bmRlciBhIHNpbmdsZSBjb25jZXB0IG9mIHBy ZXNlbmNlL2Fic2VuY2UsCj4gd2hpY2ggaXMgd2hhdCBjaGVja19wcmVzZW50KCkgaXMgaW50ZW5k ZWQgdG8gY2hlY2suICBIb3dldmVyLCB3ZQo+IGRvbid0IHJlYWxseSB3YW50IElEIHJlZ2lzdGVy cyB0byBVbmRlZiB3aGVuICFjaGVja19wcmVzZW50KCk6IHRoaXMKPiBpcyBib2RnZWQgYXJvdW5k IHdpdGggdGhlIGFkZGl0aW9uYWwgU1JfUkFaX0lGX0FCU0VOVCBmbGFnIHNvIHRoYXQKPiB0aGUg ZGVjaXNpb24gYWJvdXQgd2hldGhlciB0byBtYWtlIHRoZSByZWdpc3RlciBVbmRlZiBvciBub3Qg Y2FuCj4gYmUgbWFkZSBnZW5lcmljLgo+IAo+IAo+IEl0IHNlZW1zIHRoYXQgdGhpcyBhdHRlbXB0 IGF0IGdlbmVyYWxpc2F0aW9uIGlzIGNyZWF0aW5nIG1vcmUgY29uZnVzaW9uCj4gdGhhbiBpdCBz b2x2ZXMsIHNvIEkgbWF5IGFiYW5kb24gaXQgYW5kIGp1c3QgaGFuZGxlIElEX0FBNjRQRlIwX0VM MSBhbmQKPiBJRF9BQTY0WkZSMF9FTDEgc3BlY2lhbGx5Lgo+IAo+IFdoZW4vaWYgd2UndmUgZG9u ZSB0aGF0IGEgZmV3IHRpbWVzIGZvciBkaWZmZXJlbnQgZmVhdHVyZXMsIGl0IG1heQo+IGJlY29t ZSBjbGVhcmVyIHdoYXQgYW55IGdlbmVyaWMgZnJhbWV3b3JrIGZvciBkb2luZyBpdCBzaG91bGQg bG9vawo+IGxpa2UuLi4KPiAKCkkgdGhpbmsgdGhlcmUncyBqdXN0IGEgcmVhc29uYWJsZSBhbW91 bnQgb2YgY29tcGxleGl0eSBpbiBzeXNfcmVncy5jCmFscmVhZHksIGFuZCB0aGUgbmFtaW5nIGFu ZCBjb25jZXB0cyBhcmVuJ3QgY2xlYXIgZnJvbSB0aGUgcmVhZGluZyB0aGUKY29kZSBhcyBpdCBz dGFuZHMgbm93LgoKSSB0aGluayBpdCB3b3VsZCBwcm9iYWJseSBoZWxwIHRvIGZsYWcgdGhpbmdz IGFzIElEIHJlZ2lzdGVycyBhcyBvcHBvc2VkCnRvICdSQVonIGJlaGF2aW9yLCBiZWNjYXVzZSBp dCdzIGNsZWFyIHdlJ3JlIHRoZW4gdHJ5aW5nIHRvIHN1cHBvcnQgYW4KYXJjaGl0ZWN0dXJhbCBj b25jZXB0LgoKSG93ZXZlciwgSSB0aGluayBvZiB0aGUgZ2VuZXJpYyBpbmZyYXN0cnVjdHJlIGlu IHN5c19yZWdzLmMgdG8gYmUKd29ycmllZCBhYm91dCBLVk0tc3BlY2lmaWNzLCBhbmQgdGhlIGlt cGxlbWVudGF0aW9uIG9mIHRoZQplbXVsYXRlL2FjY2VzcyBmdW5jdGlvbnMgdG8gYmUgY29uY2Vy bmVkIHdpdGggYXJjaGl0ZWN0dXJhbCBjb25jZXB0cy4KVGhhdCdzIGp1c3QgaG93IEkndmUgYWx3 YXlzIHRob3VnaHQgYWJ1b3QgdGhpcyBjb2RlLgoKVGhlcmVmb3JlLCBJIHdvdWxkIHN1Z2dlc3Qg d3JhcHBpbmcgYWxsIElEIHJlZ2lzdGVyIGFjY2Vzc2VzIHRocm91Z2gKY29tbW9uIElEIHJlZ2lz dGVyIGFjY2VzcyBmdW5jdGlvbnMgKHJlYWQvd3JpdGUpIHdoaWNoIGhhbmRsZXMgdGhlIFJBWgpj YXNlLgoKQXQgbGVhc3QsIEknZCBsaWtlIHRvIHNlZSBpZiB0aGF0IGJlY29tZXMgdG9vIGhvcnJp YmxlIGJlZm9yZSB0YWtpbmcKdGhpcyByb3V0ZS4KClRoYW5rcywKLUNocmlzdG9mZmVyCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmt2bWFybSBtYWlsaW5n IGxpc3QKa3ZtYXJtQGxpc3RzLmNzLmNvbHVtYmlhLmVkdQpodHRwczovL2xpc3RzLmNzLmNvbHVt YmlhLmVkdS9tYWlsbWFuL2xpc3RpbmZvL2t2bWFybQo=