From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [RFC] ARM: New (Xen) VGIC design document Date: Tue, 31 Oct 2017 18:58:58 -0700 (PDT) Message-ID: References: <20171011143303.27453-1-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e9iJ5-0004XC-NS for xen-devel@lists.xenproject.org; Wed, 01 Nov 2017 01:59:03 +0000 In-Reply-To: <20171011143303.27453-1-andre.przywara@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andre Przywara Cc: Stefano Stabellini , Marc Zyngier , Eric Auger , Julien Grall , xen-devel@lists.xenproject.org, Christoffer Dall List-Id: xen-devel@lists.xenproject.org T24gV2VkLCAxMSBPY3QgMjAxNywgQW5kcmUgUHJ6eXdhcmEgd3JvdGU6Cj4gSGksCj4gCj4gKEND OmluZyBzb21lIEtWTS9BUk0gZm9sa3MgaW52b2x2ZWQgaW4gdGhlIFZHSUMpCj4gCj4gc3RhcnRp bmcgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlIElUUyBzdXBwb3J0IHdlIHdlcmUgc2VlaW5nIG1v cmUgYW5kCj4gbW9yZSBpc3N1ZXMgd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBv dXIgQVJNIEdlbmVyaWMgSW50ZXJydXB0Cj4gQ29udHJvbGxlciAoR0lDKSBlbXVsYXRpb24sIHRo ZSBWR0lDLgo+IEFtb25nIG90aGVyIGFwcHJvYWNoZXMgdG8gZml4IHRob3NlIGlzc3VlcyBpdCB3 YXMgcHJvcG9zZWQgdG8gY29weSB0aGUKPiBWR0lDIGVtdWxhdGlvbiB1c2VkIGluIEtWTS4gVGhp cyBvbmUgd2FzIHN1ZmZlcmluZyBmcm9tIHZlcnkgc2ltaWxhcgo+IGlzc3VlcywgYW5kIGEgY2xl YW4gZGVzaWduIGZyb20gc2NyYXRjaCBsZWFkIHRvIGEgdmVyeSByb2J1c3QgYW5kCj4gY2FwYWJs ZSByZS1pbXBsZW1lbnRhdGlvbi4gSW50ZXJlc3RpbmdseSB0aGlzIGltcGxlbWVudGF0aW9uIGlz IGZhaXJseQo+IHNlbGYtY29udGFpbmVkLCBzbyBpdCBzZWVtcyBmZWFzaWJsZSB0byBjb3B5IGl0 LiBIb3BlZnVsbHkgd2Ugb25seSBuZWVkCj4gbWlub3IgYWRqdXN0bWVudHMsIHBvc3NpYmx5IHdl IGNhbiBldmVuIGNvcHkgaXQgdmVyYmF0aW0gd2l0aCBzb21lCj4gYWRkaXRpb25hbCBnbHVlIGxh eWVyIGNvZGUuCj4KPiBTdGVmYW5vIGFza2VkIGZvciBnZXR0aW5nIGEgZGVzaWduIG92ZXJ2aWV3 LCB0byBhc3Nlc3MgdGhlIGZlYXNpYmlsaXR5Cj4gb2YgY29weWluZyB0aGUgS1ZNIGNvZGUgd2l0 aG91dCByZXZpZXdpbmcgdG9ucyBvZiBjb2RlIGluIHRoZSBmaXJzdAo+IHBsYWNlLgo+IFNvIHRv IGZvbGxvdyBYZW4gcnVsZXMgZm9yIG5ldyBmZWF0dXJlcywgdGhpcyBkZXNpZ24gZG9jdW1lbnQg YmVsb3cgaXMKPiBhbiBhdHRlbXB0IHRvIGRlc2NyaWJlIHRoZSBjdXJyZW50IEtWTSBWR0lDIGRl c2lnbiAtIGluIGEgaHlwZXJ2aXNvcgo+IGFnbm9zdGljIHNlc3Npb24uIEl0IGlzIGEgYml0IG9m IGEgcmV0cm8tZml0IGRlc2lnbiBkZXNjcmlwdGlvbiwgYXMgaXQKPiBpcyBub3Qgc3RyaWN0bHkg Zm9yd2FyZC1sb29raW5nIG9ubHksIGJ1dCBhY3R1YWxseSBkZXNjcmliaW5nIHRoZQo+IGV4aXN0 aW5nIGltcGxlbWVuYXRpb24gWzFdLgo+IAo+IFBsZWFzZSBoYXZlIGEgbG9vayBhbmQgbGV0IG1l IGtub3c6Cj4gMSkgaWYgdGhpcyBkb2N1bWVudCBoYXMgdGhlIHJpZ2h0IHNjb3BlCj4gMikgaWYg dGhpcyBkb2N1bWVudCBoYXMgdGhlIHJpZ2h0IGxldmVsIG9mIGRldGFpbAo+IDMpIGlmIHRoZXJl IGFyZSBwb2ludHMgbWlzc2luZyBmcm9tIHRoZSBkb2N1bWVudAo+IDMpIGlmIHRoZSBkZXNpZ24g aW4gZ2VuZXJhbCBpcyBhIGZpdAoKUGxlYXNlIHJlYWQgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnRz IGFzIGdlbnVpbmUgcXVlc3Rpb25zIGFuZCBjb25jZXJucy4KTW9zdCBpZGVhcyBvbiB0aGlzIGRv Y3VtZW50IGFyZSBnb29kLiBTb21lIG9mIHRoZW0gSSBoYXZlIGV2ZW4gc3VnZ2VzdGVkCnRoZW0g bXlzZWxmIGluIHRoZSBjb250ZXh0IG9mIEdJQyBpbXByb3ZlbWVudHMgZm9yIFhlbi4gSSBhc2tl ZCBmb3IgYQpjb3VwbGUgb2YgY2xhcmlmaWNhdGlvbnMuCgpCdXQgSSBkb24ndCBzZWUgd2h5IHdl IGNhbm5vdCBpbXBsZW1lbnQgdGhlc2UgaWRlYXMgb24gdG9wIG9mIHRoZQpleGlzdGluZyBjb2Rl LCByYXRoZXIgdGhhbiB3aXRoIGEgc2VwYXJhdGUgY29kZWJhc2UsIGVuZGluZyB1cCB3aXRoIHR3 bwpkcml2ZXJzLiBJIHdvdWxkIHByZWZlciBhIG5hdHVhbCBldm9sdXRpb24uIFNwZWNpZmljYWxs eSwgdGhlIGZvbGxvd2luZwppbXByb3ZlbWVudHMgd291bGQgYmUgc2ltcGxlIGFuZCB3b3VsZCBn aXZlIHVzIG1vc3Qgb2YgdGhlIGJlbmVmaXRzIG9uCnRvcCBvZiB0aGUgY3VycmVudCBjb2RlYmFz ZToKLSBhZGRpbmcgdGhlIGlycSBsb2NrLCBhbmQgdGhlIHJlZmNvdW50Ci0gdGFraW5nIGJvdGgg dmNwdSBsb2NrcyB3aGVuIG5lY2Vzc2FyeSAob24gbWlncmF0aW9uIGNvZGUgZm9yIGV4YW1wbGUK ICBpdCB3b3VsZCBoZWxwIGEgbG90KSwgdGhlIGxvd2VyIHZjcHVfaWQgZmlyc3QKLSBsZXZlbCBp cnEgZW11bGF0aW9uCgoKSWYgd2UgZG8gZW5kIHVwIHdpdGggYSBzZWNvbmQgc2VwYXJhdGUgZHJp dmVyIGZvciB0ZWNobmljYWwgb3IgcHJvY2VzcwpyZWFzb25zLCBJIHdvdWxkIGV4cGVjdCB0aGUg cmVndWxhciBYZW4gc3VibWlzc2lvbi9yZXZpZXcgcHJvY2VzcyB0byBiZQpmb2xsb3dlZC4gVGhl IGNvZGUgc3R5bGUgd2lsbCBiZSBkaWZmZXJlbnQsIHRoZSBob29rcyBpbnRvIHRoZSByZXN0IG9m CnRoZSBoeXBlcnZpc29ycyB3aWxsIGJlIGRpZmZlcmVudCBhbmQgdGhpbmdzIHdpbGwgYmUgZ2Vu ZXJhbGx5IGNoYW5nZWQuClRoZSBuZXcgVi9HSUMgbWlnaHQgYmUgZGVyaXZlZCBmcm9tIEtWTSwg YnV0IGl0IHNob3VsZCBlbmQgdXAgbG9va2luZwphbmQgZmVlbGluZyBsaWtlIGEgMTAwJSBnZW51 aW5lIFhlbiBjb21wb25lbnQuIEFmdGVyIGFsbCwgd2UnbGwKbWFpbnRhaW4gaXQgZ29pbmcgZm9y d2FyZC4gSSBkb24ndCB3YW50IGEgY29weSBvZiBhIExpbnV4IGRyaXZlciB3aXRoCmdsdWUgY29k ZS4gVGhlIFhlbiBjb21tdW5pdHkgY2Fubm90IGJlIGV4cGVjdGVkIG5vdCB0byByZXZpZXcgdGhl CnN1Ym1pc3Npb24sIGJ1dCBpZiB3ZSByZXZpZXcgaXQsIHRoZW4gd2UnbGwgYXNrIGZvciBjaGFu Z2VzLiBPbmNlIHdlCmNoYW5nZSB0aGUgY29kZSwgdGhlcmUgd2lsbCBiZSBubyBwb2ludCBpbiBr ZWVwaW5nIHRoZSBMaW51eCBjb2RlCnNlcGFyYXRlIHdpdGggZ2x1ZSBjb2RlLiBXZSBzaG91bGQg ZnVsbHkgYWRhcHQgaXQgdG8gWGVuLgoKVGhhdCBpcyB3aGF0IHdhcyBkb25lIGluIHRoZSBwYXN0 IHdoZW4gS1ZNIHRvb2sgY29kZSBmcm9tIFhlbiAoZm9yCmV4YW1wbGUgYXN5bmMgc2hhZG93IHBh Z2V0YWJsZXMpLiBJIGFtIGVhZ2VyIHRvIGF2b2lkIGEgc2l0dWF0aW9uIGxpa2UKdGhlIGN1cnJl bnQgU01NVSBkcml2ZXIgaW4gWGVuLCB3aGljaCBjb21lcyBmcm9tIExpbnV4LCBhbmQgd2UgYXJl IG5vdAplbnRpcmVseSBzdXJlIGhvdyB0byBtYWludGFpbiBpdC4KCgo+IEFwcHJlY2lhdGUgYW55 IGZlZWRiYWNrIQo+IAo+IENoZWVycywKPiBBbmRyZS4KPiAKPiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAKPiBWR0lDIGRlc2lnbgo+ID09PT09PT09PT09Cj4gCj4g VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGRlc2lnbiBvZiBhbiBBUk0gR2VuZXJpYyBJbnRl cnJ1cHQgQ29udHJvbGxlciAoR0lDKQo+IGVtdWxhdGlvbi4gSXQgaXMgbWVhbnQgdG8gZW11bGF0 ZSBhIEdJQyBmb3IgYSBndWVzdCBpbiBhbiB2aXJ0dWFsIG1hY2hpbmUsCj4gdGhlIGNvbW1vbiBu YW1lIGZvciB0aGF0IGlzIFZHSUMgKGZyb20gInZpcnR1YWwgR0lDIikuCj4gCj4gVGhpcyBkZXNp Z24gd2FzIHRoZSByZXN1bHQgb2YgYSBvbmUtd2Vlay1sb25nIGRlc2lnbiBzZXNzaW9uIHdpdGgg c29tZQo+IGVuZ2luZWVycyBpbiBhIHJvb20sIHRyaWdnZXJlZCBieSBldmVyLWluY3JlYXNpbmcg ZGlmZmljdWx0aWVzIGluIG1haW50YWluaW5nCj4gdGhlIGV4aXN0aW5nIEdJQyBlbXVsYXRpb24g aW4gdGhlIEtWTSBoeXBlcnZpc29yLiBUaGUgZGVzaWduIGV2ZW50dWFsbHkKPiBtYXRlcmlhbGlz ZWQgYXMgYW4gYWx0ZXJuYXRpdmUgVkdJQyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgTGludXgga2Vy bmVsCj4gKG1lcmdlZCBpbnRvIExpbnV4IHY0LjcpLiBBcyBvZiBMaW51eCB2NC44IHRoZSBwcmV2 aW91cyBWR0lDIGltcGxlbWVudGF0aW9uCj4gd2FzIHJlbW92ZWQsIHNvIGl0IGlzIG5vdyB0aGUg Y3VycmVudCBjb2RlIHVzZWQgYnkgTGludXguCj4gQWx0aG91Z2ggYmVpbmcgdXNlZCBpbiBLVk0s IHRoZSBhY3R1YWwgZGVzaWduIG9mIHRoaXMgVkdJQyBpcyByYXRoZXIgaHlwZXJ2aXNvcgo+IGFn bm9zdGljIGFuZCBjYW4gYmUgdXNlZCBieSBvdGhlciBoeXBlcnZpc29ycyBhcyB3ZWxsLCBpbiBw YXJ0aWN1bGFyIGZvciBYZW4uCj4gCj4gR0lDIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIHN1cHBv cnQKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IAo+IFRoZSBBUk0gR2Vu ZXJpYyBJbnRlcnJ1cHQgQ29udHJvbGxlciAoc2luY2UgdjIpIHN1cHBvcnRzIHRoZSB2aXJ0dWFs aXphdGlvbgo+IGV4dGVuc2lvbnMsIHdoaWNoIGFsbG93cyBzb21lIHBhcnRzIG9mIHRoZSBpbnRl cnJ1cHQgbGlmZSBjeWNsZSB0byBiZSBoYW5kbGVkCj4gcHVyZWx5IGluc2lkZSB0aGUgZ3Vlc3Qg d2l0aG91dCBleGl0aW5nIGludG8gdGhlIGh5cGVydmlzb3IuCj4gSW4gdGhlIEdJQ3YyIGFuZCBH SUN2MyBhcmNoaXRlY3R1cmUgdGhpcyBjb3ZlcnMgbW9zdGx5IHRoZSAiaW50ZXJydXB0Cj4gYWNr bm93bGVkZ2VtZW50IiwgInByaW9yaXR5IGRyb3AiIGFuZCAiaW50ZXJydXB0IGRlYWN0aXZhdGUi IGFjdGlvbnMuCj4gU28gYSBndWVzdCBjYW4gaGFuZGxlIG1vc3Qgb2YgdGhlIGludGVycnVwdCBw cm9jZXNzaW5nIGNvZGUgd2l0aG91dAo+IGxlYXZpbmcgRUwxIGFuZCB0cmFwcGluZyBpbnRvIHRo ZSBoeXBlcnZpc29yLiBUbyBhY2NvbXBsaXNoCj4gdGhpcywgdGhlIEdJQyBob2xkcyBzbyBjYWxs ZWQgImxpc3QgcmVnaXN0ZXJzIiAoTFJzKSwgd2hpY2ggc2hhZG93IHRoZQo+IGludGVycnVwdCBz dGF0ZSBmb3IgYW55IHZpcnR1YWwgaW50ZXJydXB0LiBJbmplY3RpbmcgYW4gaW50ZXJydXB0IHRv IGEgZ3Vlc3QKPiBpbnZvbHZlcyBzZXR0aW5nIHVwIG9uZSBMUiB3aXRoIHRoZSBpbnRlcnJ1cHQg bnVtYmVyLCBpdHMgcHJpb3JpdHkgYW5kIGluaXRpYWwKPiBzdGF0ZSAobW9zdGx5ICJwZW5kaW5n IiksIHRoZW4gZW50ZXJpbmcgdGhlIGd1ZXN0LiBBbnkgRU9JIHJlbGF0ZWQgYWN0aW9uCj4gZnJv bSB3aXRoaW4gdGhlIGd1ZXN0IGp1c3QgYWN0cyBvbiB0aG9zZSBMUnMsIHRoZSBoeXBlcnZpc29y IGNhbiBsYXRlciB1cGRhdGUKPiB0aGUgdmlydHVhbCBpbnRlcnJ1cHQgc3RhdGUgd2hlbiB0aGUg Z3Vlc3QgZXhpc3RzIHRoZSBuZXh0IHRpbWUgKGZvciB3aGF0ZXZlcgo+IHJlYXNvbikuCj4gQnV0 IGRlc3BpdGUgdGhlIEdJQyBoYXJkd2FyZSBoZWxwaW5nIG91dCBoZXJlLCB0aGUgd2hvbGUgaW50 ZXJydXB0Cj4gY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IGlzIG5vdCB2aXJ0dWFsaXplZCBhdCBh bGwgYW5kIG5lZWRzIHRvIGJlIGVtdWxhdGVkCj4gYnkgdGhlIGh5cGVydmlzb3IgLSBvciBhbm90 aGVyIHJlbGF0ZWQgc29mdHdhcmUgY29tcG9uZW50LCBmb3IgaW5zdGFuY2UgYQo+IHVzZXJsYW5k IGVtdWxhdG9yLiBUaGlzIHNvIGNhbGxlZCAiZGlzdHJpYnV0b3IiIHBhcnQgb2YgdGhlIEdJQyBj b25zaXN0cyBvZgo+IG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXJzLCB3aGljaCBjYW4gYmUgdHJhcHBl ZCBieSB0aGUgaHlwZXJ2aXNvciwgc28gYW55IGd1ZXN0Cj4gYWNjZXNzIGNhbiBiZSBlbXVsYXRl ZCBpbiB0aGUgdXN1YWwgd2F5Lgo+IAo+IFZHSUMgZGVzaWduIG1vdGl2YXRpb24KPiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tCj4gCj4gQSBHSUMgZW11bGF0aW9uIHRodXMgbmVlZHMgdG8gdGFrZSBj YXJlIG9mIHRob3NlIGJpdHM6Cj4gCj4gLSB0cmFwIEdJQyBkaXN0cmlidXRvciBNTUlPIGFjY2Vz c2VzIGFuZCBzaGFkb3cgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dXAKPiAgIChlbmFibGVkL2Rpc2Fi bGVkLCBsZXZlbC9lZGdlLCBwcmlvcml0eSwgYWZmaW5pdHkpIGZvciB2aXJ0dWFsIGludGVycnVw dHMKPiAtIGhhbmRsZSBpbmNvbWluZyBoYXJkd2FyZSBhbmQgdmlydHVhbCBpbnRlcnJ1cHQgcmVx dWVzdHMgYW5kIGluamVjdCB0aGUKPiAgIGFzc29jaWF0ZWQgdmlydHVhbCBpbnRlcnJ1cHQgYnkg bWFuaXB1bGF0aW5nIG9uZSBvZiB0aGUgbGlzdCByZWdpc3RlcnMKPiAtIHRyYWNrIHRoZSBzdGF0 ZSBvZiBhIHZpcnR1YWwgaW50ZXJydXB0IGJ5IGluc3BlY3RpbmcgdGhlIExScyBhZnRlciB0aGUK PiAgIGd1ZXN0IGhhcyBleGl0ZWQsIHBvc3NpYmx5IGFkanVzdGluZyB0aGUgc2hhZG93ZWQgdmly dHVhbCBpbnRlcnJ1cHQgc3RhdGUKPiAKPiBEZXNwaXRlIHRoZSBkaXN0cmlidXRvciBNTUlPIHJl Z2lzdGVyIGVtdWxhdGlvbiBiZWluZyBhIHNpemVhYmxlIGNodW5rIG9mCj4gdGhlIGVtdWxhdGlv biwgaXQgaXMgYWN0dWFsbHkgbm90IGRvbWluYW50IGlmIGxvb2tpbmcgYXQgdGhlIGZyZXF1ZW5j eSBhdAo+IHdoaWNoIGl0IGlzIGFjY2Vzc2VkLiBOb3JtYWxseSB0aGUgaW50ZXJydXB0IGNvbmZp Z3VyYXRpb24gaXMgZG9uZSBhdCBib290Cj4gdGltZSBvciB1cG9uIGluaXRpYWxpc2luZyB0aGUg ZGV2aWNlIChkcml2ZXIpLCBidXQgcmFyZWx5IGR1cmluZyB0aGUgYWN0dWFsCj4gcnVuIHRpbWUg b2YgYSBzeXN0ZW0uIEluamVjdGluZyBhbmQgRU9JLWluZyBpbnRlcnJ1cHRzIGhvd2V2ZXIgaGFw cGVucyBtdWNoCj4gbW9yZSBvZnRlbi4gQSBnb29kIGVtdWxhdGlvbiBhcHByb2FjaCBzaG91bGQg dGh1cyBmb2N1cyBvbiB0cmFja2luZyB0aGUgdmlydHVhbAo+IGludGVycnVwdCBzdGF0ZSBlZmZp Y2llbnRseSwgYWxsb3dpbmcgcXVpY2sgaGFuZGxpbmcgb2YgaW5jb21pbmcgYW5kIEVPSS1lZAo+ IGludGVycnVwdHMuCj4gCj4gVGhlIGFjdHVhbCBpbnRlcnJ1cHQgc3RhdGUgdHJhY2tpbmcgY2Fu IGJlIHF1aXRlIHRyaWNreSBpbiBwYXJ0cy4gSW50ZXJydXB0Cj4gaW5qZWN0aW9ucyBjYW4gYmUg aW5kZXBlbmRlbnQgZnJvbSB0aGUgZ3Vlc3QgZW50cnkvZXhpdCBwb2ludHMsIGFsc28gTU1JTwo+ IGNvbmZpZ3VyYXRpb24gYWNjZXNzZXMgY291bGQgYmUgdHJpZ2dlcmVkIGJ5IGFueSBWQ1BVIGF0 IGFueSBwb2ludCBpbiB0aW1lLgo+IENoYW5naW5nIGludGVycnVwdCBDUFUgYWZmaW5pdHkgYWRk cyB0byB0aGUgY29tcGxpY2F0aW9uLgo+IFRoaXMgbGVhZHMgdG8gbWFueSBjb2RlIHBhcnRzIHdo aWNoIGNvdWxkIHJ1biBpbiBwYXJhbGxlbCBhbmQgdGh1cyBjb250YWlucwo+IHNvbWUgcmFjZSBj b25kaXRpb25zLCBzbyBwcm9wZXIgbG9ja2luZyBiZWNvbWVzIGtleSBvZiBhIGdvb2QgZGVzaWdu Lgo+IEJ1dCBvbmUgaGFzIHRvIGNvbnNpZGVyIHRoYXQgaW50ZXJydXB0cyBpbiBnZW5lcmFsIGNh biBiZSBjaGFyYWN0ZXJpc2VkCj4gYXMgYSByYXJlIGV2ZW50IC0gb3RoZXJ3aXNlIGEgZ3Vlc3Qg d291bGQgYmUgYnVzeSBoYW5kbGluZyBpbnRlcnJ1cHRzIGFuZCBjb3VsZAo+IG5vdCBwcm9jZXNz IGFjdHVhbCBjb21wdXRhdGlvbiB0YXNrcy4KPiBUaGF0J3Mgd2h5IHRoZSBpbnRlcnJ1cHQgc3Rh dGUgdHJhY2tpbmcgc2hvdWxkIGZvY3VzIG9uIGEgY2xlYXIgYW5kIHJhY2UtZnJlZQo+IGxvY2tp bmcgc2NoZW1lLCB3aXRob3V0IG5lZWRsZXNzbHkgb3B0aW1pc2luZyB0b28gbXVjaCBpbiB0aGlz IHJlc3BlY3QuCj4gRXhwZXJpZW5jZSBzaG93cyB0aGF0IHRoaXMgY29tcGxpY2F0ZXMgdGhlIGNv ZGUgYW5kIGxlYWRzIHRvIHVuZGV0ZWN0ZWQgYW5kCj4gaGFyZC10by1kZWJ1ZyByYWNlIGNvbmRp dGlvbnMsIHdoaWNoIGFmZmVjdCB0aGUgc3RhYmlsaXR5IG9mIHRoZSBzeXN0ZW0gaW4KPiBwb3Nz aWJseSB1bnRlc3RlZCBjb3JuZXIgY2FzZXMuCj4gCj4gVkdJQyBkZXNpZ24gcHJpbmNpcGxlcwo+ IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAKPiAjIyMgRGF0YSBzdHJ1Y3R1cmUKPiAKPiBUaGlz IFZHSUMgZGVzaWduIGlzIGJhc2VkIG9uIHRoZSBpZGVhIG9mIGhhdmluZyBvbmUgc3RydWN0dXJl IHBlciB2aXJ0dWFsCj4gaW50ZXJydXB0LCBwcm90ZWN0ZWQgYnkgaXRzIG93biBsb2NrLiBJbiBh ZGRpdGlvbiB0aGVyZSBpcyBhIGxpc3QgcGVyIFZDUFUsCj4gd2hpY2ggcXVldWVzIHRoZSBpbnRl cnJ1cHRzIHdoaWNoIHRoaXMgVkNQVSBzaG91bGQgY29uc2lkZXIgZm9yIGluamVjdGlvbi4KPiBP bmUgaW50ZXJydXB0IGNhbiBvbmx5IGJlIG9uIG9uZSBWQ1BVIGxpc3QgYXQgYW55IGdpdmVuIHBv aW50IGluIHRpbWUuCj4gRm9yIHByaXZhdGUgaW50ZXJydXB0cyBhbmQgU1BJcyBhIHN0YXRpYyBh bGxvY2F0aW9uIG9mIHRoaXMgZGF0YSBzdHJ1Y3R1cmUKPiB3b3VsZCBiZSBzdWZmaWNpZW50LCBo b3dldmVyIExQSXMgKHRyaWdnZXJlZCBieSBhICh2aXJ0dWFsKSBJVFMpIGhhdmUgYSB2ZXJ5Cj4g ZHluYW1pYyBhbmQgcG9zc2libHkgdmVyeSBzcGFyc2UgYWxsb2NhdGlvbiBzY2hlbWUsIHNvIHdl IG5lZWQgdG8gZGVhbCB3aXRoCj4gZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBkZS1hbGxvY2F0aW9u IG9mIHRoaXMgc3RydWN0LiBUbyBhY2NvbW1vZGF0ZSB0aGlzCj4gdGhlcmUgaXMgYW4gYWRkaXRp b25hbCBsaXN0IGhlYWRlciB0byBsaW5rIGFsbCBMUElzLgo+IEFsc28gdGhlIExQSSBtYXBwaW5n IGFuZCB1bm1hcHBpbmcgY2FuIGhhcHBlbiBhc3luY2hyb25vdXNseSwgc28gd2UgbmVlZCB0bwo+ IHByb3Blcmx5IHJlZi1jb3VudCB0aGUgc3RydWN0dXJlIChhdCBsZWFzdCBmb3IgTFBJcyksIG90 aGVyd2lzZSBzb21lIGNvZGUgcGFydHMKPiB3b3VsZCBwb3RlbnRpYWxseSBlbmQgdXAgd2l0aCBy ZWZlcmVuY2luZyBhbiBhbHJlYWR5IGZyZWVkIHBvaW50ZXIuCj4gCj4gVGhlIGNlbnRyYWwgZGF0 YSBzdHJ1Y3R1cmUgaXMgY2FsbGVkIGBzdHJ1Y3QgdmdpY19pcnFgLCBhbmQsIGJlc2lkZSB0aGUK PiBleHBlY3RlZCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBkYXRhLCBjb250YWlucyBhdCBsZWFz dCB0aGUgbG9jaywgYSBsaXN0Cj4gaGVhZGVyICh0byBiZSBhYmxlIHRvIGxpbmsgaXQgdG8gYSBW Q1BVKSBhbmQgYSByZWZjb3VudC4gQWxzbyBpdCBjb250YWlucwo+IHRoZSBpbnRlcnJ1cHQgbnVt YmVyICh0byBhY2NvbW1vZGF0ZSBmb3Igbm9uLWNvbnRpZ3VvdXMgaW50ZXJydXB0IGFsbG9jYXRp b25zLAo+IGZvciBpbnN0YW5jZSBmb3IgTFBJcykuCj4gQmVzaWRlIHRob3NlIGVzc2VudGlhbCBl bGVtZW50cyBpdCBwcm92ZXMgd29ydGggdG8gc3RvcmUgKGEgcmVmZXJlbmNlIHRvKSB0aGUKPiBW Q1BVIHRoaXMgSVJRIGlzIGFzc29jaWF0ZWQgd2l0aC4gVGhpcyBhbGxvd3MgdG8gZWFzaWx5IGZp bmQgdGhlIHJlc3BlY3RpdmUKPiBWQ1BVIGxpc3QuCj4gCj4gICAgIHN0cnVjdCB2Z2ljX2lycSB7 Cj4gICAgICAgICBzcGlubG9ja190IGlycV9sb2NrOyAgICAgICAgICAgIC8qIFByb3RlY3RzIHRo ZSBjb250ZW50IG9mIHRoZSBzdHJ1Y3QgKi8KPiAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbHBp X2xpc3Q7ICAgICAgLyogVXNlZCB0byBsaW5rIGFsbCBMUElzIHRvZ2V0aGVyICovCj4gICAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkIGFwX2xpc3Q7Cj4gCj4gICAgICAgICBzdHJ1Y3QgdmNwdSAqdmNw dTsgICAgICAgICAgICAgIC8qIFNHSXMgYW5kIFBQSXM6IFRoZSBWQ1BVCj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFNQSXMgYW5kIExQSXM6IFRoZSBWQ1BVIHdo b3NlIGFwX2xpc3QKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICog dGhpcyBpcyBxdWV1ZWQgb24uCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqLwo+IAo+ICAgICAgICAgc3RydWN0IHZjcHUgKnRhcmdldF92Y3B1OyAgICAgICAgLyog VGhlIFZDUFUgdGhhdCB0aGlzIGludGVycnVwdCBzaG91bGQKPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqIGJlIHNlbnQgdG8sIGFzIGEgcmVzdWx0IG9mIHRoZQo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGFyZ2V0cyByZWcg KHYyKSBvciB0aGUKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq IGFmZmluaXR5IHJlZyAodjMpLgo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovCj4gCj4gICAgICAgICB1MzIgaW50aWQ7ICAgICAgICAgICAgICAgICAgICAgIC8q IEd1ZXN0IHZpc2libGUgSU5USUQgKi8KPiAgICAgICAgIGJvb2wgbGluZV9sZXZlbDsgICAgICAg ICAgICAgICAgLyogTGV2ZWwgb25seSAqLwo+ICAgICAgICAgYm9vbCBwZW5kaW5nX2xhdGNoOyAg ICAgICAgICAgICAvKiBUaGUgcGVuZGluZyBsYXRjaCBzdGF0ZSB1c2VkIHRvCj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNhbGN1bGF0ZSB0aGUgcGVuZGluZyBz dGF0ZSBmb3IKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYm90 aCBsZXZlbCBhbmQgZWRnZSB0cmlnZ2VyZWQgSVJRcy4KPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCj4gCj4gICAgICAgICBib29sIGFjdGl2ZTsgICAgICAgICAg ICAgICAgICAgIC8qIG5vdCB1c2VkIGZvciBMUElzICovCj4gICAgICAgICBib29sIGVuYWJsZWQ7 Cj4gICAgICAgICBib29sIGh3OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpZWQgdG8gSFcg SVJRICovCj4gICAgICAgICBzdHJ1Y3Qga3JlZiByZWZjb3VudDsgICAgICAgICAgIC8qIFVzZWQg Zm9yIExQSXMgKi8KPiAgICAgICAgIHUzMiBod2ludGlkOyAgICAgICAgICAgICAgICAgICAgLyog SFcgSU5USUQgbnVtYmVyICovCj4gICAgICAgICB1bmlvbiB7Cj4gICAgICAgICAgICAgdTggdGFy Z2V0czsgICAgICAgICAgICAgICAgICAgICAvKiBHSUN2MiB0YXJnZXQgVkNQVXMgbWFzayAqLwo+ ICAgICAgICAgICAgIHUzMiBtcGlkcjsgICAgICAgICAgICAgICAgICAgICAgLyogR0lDdjMgdGFy Z2V0IFZDUFUgKi8KPiAgICAgICAgIH07Cj4gICAgICAgICB1OCBzb3VyY2U7ICAgICAgICAgICAg ICAgICAgICAgIC8qIEdJQ3YyIFNHSXMgb25seSAqLwo+ICAgICAgICAgdTggcHJpb3JpdHk7Cj4g ICAgICAgICBlbnVtIHZnaWNfaXJxX2NvbmZpZyBjb25maWc7ICAgIC8qIExldmVsIG9yIGVkZ2Ug Ki8KPiAgICAgfTsKClRoZSByZWZjb3VudCBhbmQgaXJxX2xvY2sgYXJlIGdvb2QgaWRlYXMsIGxl dCdzIGhhdmUgdGhlbS4KCgo+ICMjIyBWQ1BVIGxpc3QgaGFuZGxpbmcKPiAKPiBJbml0aWFsbHkg YSB2aXJ0dWFsIGludGVycnVwdCBqdXN0IGxpdmVzIG9uIGl0cyBvd24uIEd1ZXN0IE1NSU8gYWNj ZXNzZXMgdG8KPiB0aGUgZGlzdHJpYnV0b3Igd2lsbCBjaGFuZ2UgdGhlIHN0YXRlIGluZm9ybWF0 aW9uIGluIHRoaXMgc3RydWN0dXJlLgo+IFdoZW4gYW4gaW50ZXJydXB0IGlzIGFjdHVhbGx5IG1h ZGUgcGVuZGluZyAoZWl0aGVyIGJ5IGFuIGFzc29jaWF0ZWQgaGFyZHdhcmUKPiBJUlEgZmlyaW5n IG9yIGJ5IGEgdmlydHVhbCBJUlEgdHJpZ2dlciksIHRoZSBgdmdpY19pcnFgIHN0cnVjdHVyZSB3 aWxsIGJlCj4gbGlua2VkIHRvIHRoZSBjdXJyZW50IHRhcmdldCBWQ1BVLiBUaGUgYHZjcHVgIG1l bWJlciBpbiB0aGUgc3RydWN0dXJlIHdpbGwKPiBiZSBzZXQgdG8gdGhpcyBWQ1BVLiBBbnkgYWZm aW5pdHkgY2hhbmdlIGFmdGVyIHRoaXMgcG9pbnQgd2lsbCBub3QgYWZmZWN0Cj4gdGhlIGN1cnJl bnQgdGFyZ2V0IFZDUFUgYW55bW9yZSwgaXQganVzdCB1cGRhdGVzIHRoZSBgdGFyZ2V0X3ZwdWAg ZmllbGQgaW4KPiB0aGUgc3RydWN0dXJlLCB3aGljaCB3aWxsIGJlIGNvbnNpZGVyZWQgb24gdGhl IG5leHQgaW5qZWN0aW9uLgo+IFRoaXMgcGVyLVZDUFUgbGlzdCBpcyBjYWxsZWQgdGhlIGBhcF9s aXN0YCwgc2luY2UgaXQgaG9sZHMgaW50ZXJydXB0cyB3aGljaAo+IGFyZSBpbiBhIHBlbmRpbmcg YW5kL29yIGFjdGl2ZSBzdGF0ZS4KClRoZSB0d28gdmNwdSBsaXN0cyBzb3VuZCBsaWtlIGEgZ29v ZCBpZGVhIHRvbywgYW5kIENocmlzdG9mZmVyJ3MKZXhwbGFuYXRpb24gaGVscGVkLiBJdCBpcyBh Y3R1YWxseSBzaW1pbGFyIHRvIHdoYXQgd2UgZG8gaW4gWGVuIGFscmVhZHkuCkkgZ3Vlc3MgYSB2 Z2ljIGlzIGFsd2F5cyBhIHZnaWMgOi0pCgpXaGF0IGhhcHBlbnMgd2hlbiB0aGUgaXJxIGlzIG1p Z3JhdGVkIHdoaWxlIHN0aWxsIGluIGFuIExSIG9uIGFub3RoZXIKcGNwdT8gV2hlbi9Ib3cgaXMg dGhlIHBoeXNpY2FsIGFmZmluaXR5IGNoYW5nZWQ/CgpXaGF0IGhhcHBlbnMgd2hlbiBhIG5ldyBp cnEgaXMgc3VwcG9zZWQgdG8gYmUgaW5qZWN0ZWQgd2hlbiB0YXJnZXRfdmNwdSBpcwphbHJlYWR5 IHNldD8gRG9lcyB0YXJnZXRfdmNwdSBzaW1wbHkgZ2V0IG92ZXJ3cml0dGVuPwoKV2hhdCBoYXBw ZW5zIHdoZW4gYSB2Y3B1IGlzIG1pZ3JhdGVkIGZyb20gcGNwdTEgdG8gcGNwdTI/CgoKCj4gIyMj IFZpcnR1YWwgSVJRIHJlZmVyZW5jZXMKPiAKPiBUaGVyZSBpcyBhIGZ1bmN0aW9uIGB2Z2ljX2dl dF9pcnEoKWAgd2hpY2ggcmV0dXJucyBhIHJlZmVyZW5jZSB0byBhIHZpcnR1YWwgSVJRCj4gZ2l2 ZW4gaXRzIG51bWJlci4KPiBGb3IgcHJpdmF0ZSBJUlFzIGFuZCBTUElzIGl0IGlzIGV4cGVjdGVk IHRoYXQgdGhpcyBqdXN0IGluZGV4ZXMgYSBzdGF0aWMgYXJyYXkuCj4gRm9yIExQSXMgKHdoaWNo IGFyZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXQgcnVuIHRpbWUpIHRoaXMgaXMgZXhwZWN0ZWQg dG8KPiBpdGVyYXRlIGEgZGF0YSBzdHJ1Y3R1cmUgKGxpa2UgYSBsaW5rZWQgbGlzdCkgdG8gZmlu ZCB0aGUgcmlnaHQgc3RydWN0dXJlLgo+IEluIGFueSBjYXNlIGEgY2FsbCB0byBgdmdpY19nZXRf aXJxYCB3aWxsIGluY3JlYXNlIGEgcmVmY291bnQsIHdoaWNoIHdpbGwKPiBwcmV2ZW50IExQSXMg ZnJvbSBiZWluZyBkZS1hbGxvY2F0ZWQgd2hpbGUgYW5vdGhlciBwYXJ0IG9mIHRoZSBWR0lDIGlz IHN0aWxsCj4gaG9sZGluZyBhIHJlZmVyZW5jZS4gVGh1cyBhbnkgY2FsbGVyIHRvIGB2Z2ljX2dl dF9pcnFgIHNoYWxsIGNhbGwKPiBgdmdpY19wdXRfaXJxKClgIGFmdGVyIGl0IGlzIGRvbmUgd2l0 aCBoYW5kbGluZyB0aGlzIGludGVycnVwdC4KPiBBbiBleGNlcHRpb24gd291bGQgYmUgaWYgdGhl IHZpcnR1YWwgSVJRIGlzIGV2ZW50dWFsbHkgaW5qZWN0ZWQgaW50byBhIFZDUFUuIEluCj4gdGhp cyBjYXNlIHRoZSBWQ1BVIGhvbGRzIHRoYXQgcmVmZXJlbmNlIGFuZCBpdCBpcyBrZXB0IGFzIGxv bmcgYXMgdGhlIGd1ZXN0Cj4gc2VlcyB0aGlzIHZpcnR1YWwgSVJRLiBUaGUgcmVmY291bnQgd291 bGQgb25seSBiZSBkZWNyZWFzZWQgdXBvbiB0aGUgSVJRIGhhdmluZwo+IGJlZW4gRU9JZWQgYnkg dGhlIGd1ZXN0IGFuZCBpdCBoYXZpbmcgYmVlbiByZW1vdmVkIGZyb20gdGhlIFZDUFUgbGlzdC4K CkkgdW5kZXJzdGFuZCB0aGUgaWRlYSBiZWhpbmQgYSByZWZjb3VudCBhbmQgc291bmRzIGxpa2Ug YSBnb29kIHRoaW5nIHRvCmhhdmUuCgpMZXQgbWUgYXNrIHlvdSBhIGNvdXBsZSBvZiBxdWVzdGlv bnMuIEhvdyBkb2VzIGl0IGhlbHAgd2l0aCB0aGUgaXNzdWUKdGhhdCBhbiBMUEkgY291bGQgYmUg ZGlzY2FyZGVkIGFuZCByZW1hcHBlZCAoTUFQVEkpIGZyb20gYW5vdGhlcgpwY3B1IHdoaWxlIGl0 IGNvdWxkIHN0aWxsIGJlIGluIGFuIExSPyBXaGF0IGhhcHBlbnMgaWYgdGhlIE1BUFRJIGlzCmlz c3VlZCBiZWZvcmUgYW5kIHdoYXQgaGFwcGVucyBpZiBpdCBpcyBpc3NlZCBhZnRlciB0aGUgaXJx IGhhcyBiZWVuCkVPSWQgYW5kIGNsZWFyZWQgZnJvbSB0aGUgTFIgYW5kIGFwX2xpc3Q/CgpJIGFt IHJlZmVycmluZyB0byB0aGUgY2FzZSB0aGF0IHdlIGN1cnJlbnRseSBoYW5kbGluZyB3aXRoIHRo ZQpHSUNfSVJRX0dVRVNUX1BSSVNUSU5FX0xQSSBmbGFnIGluIFhlbi4KCgo+ICMjIyBMb2NraW5n Cj4gCj4gVG8ga2VlcCB0aGUgYHZnaWNfaXJxYCBzdHJ1Y3R1cmUgY29uc2lzdGVudCBhbmQgdG8g YXZvaWQgcmFjZXMgYmV0d2Vlbgo+IGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgVkdJQywgbG9ja2lu ZyBpcyBlc3NlbnRpYWwgd2hlbmV2ZXIgYWNjZXNzaW5nIGEgbWVtYmVyCj4gb2YgdGhpcyBzdHJ1 Y3R1cmUuIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhpcyBsb2NrIGlzIGFsbW9zdCBuZXZlciBjb250 ZW5kZWQsCj4gYWxzbyBoZWxkIG9ubHkgZm9yIGJyaWVmIHBlcmlvZHMgb2YgdGltZSwgc28gdGhp cyBpcyBjb25zaWRlcmVkIGNoZWFwLgo+IFRvIGtlZXAgdGhlIGNvZGUgY2xlYW4gYW5kIGF2b2lk IG5hc3R5IGNvcm5lciBjYXNlcywgdGhlcmUgYXJlIG5vIHRyaWNrcyBvbgo+IHRyeWluZyB0byBi ZSBsb2NrbGVzcyBoZXJlLgo+IElmIGZvciBhbnkgcmVhc29uIHRoZSBjb2RlIG5lZWRzIHRvIGhv bGQgdGhlIGxvY2tzIGZvciB0d28gdmlydHVhbCBJUlFzLCB0aGUKPiBvbmUgd2l0aCB0aGUgbG93 ZXIgSVJRIG51bWJlciBpcyB0byBiZSB0YWtlbiBmaXJzdCwgdG8gYXZvaWQgZGVhZGxvY2tzLgo+ IAo+IEFub3RoZXIgbG9jayB0byBjb25zaWRlciBpcyB0aGUgVkNQVSBsb2NrLCB3aGljaCBvbiB0 aGUgZmlyc3QgZ2xhbmNlIHByb3RlY3RzCj4gdGhlIHZpcnR1YWwgQ1BVJ3MgbGlzdCBzdHJ1Y3R1 cmUsIGJ1dCBhbHNvIHN5bmNocm9uaXNlcyBhZGRpdGlvbnMgYW5kIHJlbW92YWxzCj4gb2YgSVJR cyBmcm9tIGEgVkNQVS4gVG8gYWRkIGFuIElSUSB0byBhIGxpc3QsIGJvdGggdGhlIFZDUFUgYW5k IHRoZSBwZXItSVJRCj4gbG9jayBuZWVkIHRvIGJlIGhlbGQuIFRvIGF2b2lkIGRlYWRsb2Nrcywg dGhlcmUgaXMgYSBzdHJpY3QgbG9ja2luZyBvcmRlcjoKPiA+IFRoZSBWQ1BVIGxvY2sgbmVlZHMg dG8gYmUgdGFrZW4gZmlyc3QsIHRoZSBwZXItSVJRIGxvY2sgYWZ0ZXIgdGhpcy4KClNvdW5kcyBn b29kIChpdCBpcyBiYXNpY2FsbHkgd2hhdCBJIHN1Z2dlc3RlZCB0byBkbyBpbiB0aGUgcGFzdCku CgoKPiBTb21lIG9wZXJhdGlvbnMgKGxpa2UgbWlncmF0aW5nIElSUXMgYmV0d2VlbiB0d28gVkNQ VXMpIHJlcXVpcmUgdHdvIFZDUFUKPiBsb2NrcyB0byBiZSBoZWxkLCBpbiB0aGlzIGNhc2UgdGhl IGxvY2sgZm9yIHRoZSBWQ1BVIHdpdGggdGhlIHNtYWxsZXIgVkNQVSBJRAo+IGlzIHRvIGJlIHRh a2VuIGZpcnN0Lgo+IAo+IFRoZXJlIGFyZSBvY2Nhc2lvbnMgd2hlcmUgdGhlIGxvY2tpbmcgb3Jk ZXIgKFZDUFUgZmlyc3QpIGlzIGhhcmQgdG8gb2JzZXJ2ZSwKPiBiZWNhdXNlIHRoZSBwZXItSVJR IGxvY2sgaXMgYWxyZWFkeSBoZWxkLCBidXQgdGhpcyBJUlEgbmVlZHMgdG8gZ28gb24gYSBWQ1BV Cj4gbGlzdC4gSW4gdGhpcyBjYXNlIHRoZSBJUlEgbG9jayBuZWVkcyB0byBiZSBkcm9wcGVkLCB0 aGUgcmVzcGVjdGl2ZSBWQ1BVCj4gbG9jayBzaG91bGQgYmUgdGFrZW4sIHRoZW4gdGhlIHBlci1J UlEgbG9jayBuZWVkcyB0byBiZSByZS10YWtlbi4KPiBBZnRlciBib3RoIHRoZSBsb2NrcyBhcmUg aGVsZCwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgY29uZGl0aW9ucyB3aGljaAo+IG9yaWdpbmFs bHkgbWFuZGF0ZWQgdGhlIGxpc3QgYWRkaXRpb24gKG9yIHJlbW92YWwpIGFyZSBzdGlsbCB0cnVl LiBUaGlzIGlzCj4gbmVlZGVkIGJlY2F1c2UgdGhlIElSUSBsb2NrIGNvdWxkIGhhdmUgYmVlbiB0 YWtlbiBieSBhbm90aGVyIGVudGl0eSBtZWFud2hpbGUKPiBhbmQgdGhlIHN0YXRlIG9mIHRoaXMg aW50ZXJydXB0IGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkLiBFeGFtcGxlcyBhcmUgaWYgdGhlCj4g aW50ZXJydXB0IGlzIG5vIGxvbmdlciBwZW5kaW5nLCBnb3QgZGlzYWJsZWQgb3IgY2hhbmdlZCB0 aGUgQ1BVIGFmZmluaXR5Lgo+IFNvbWUgb2YgdGhvc2UgY2hhbmdlcyBtaWdodCByZW5kZXIgdG8g Y3VycmVudCBhY3Rpb24gb2Jzb2xldGUgKG5vIGxvbmdlcgo+IHBlbmRpbmcpLCBvdGhlciB3aWxs IGxlYWQgdG8gYSByZXRyeSBvZiB0aGUgcmUtbG9ja2luZyBzY2hlbWUgZGVzY3JpYmVkIGFib3Zl Lgo+IFRoaXMgcmUtbG9ja2luZyBzY2hlbWUgc2hhbGwgYmUgaW1wbGVtZW50ZWQgaW4gYSB3ZWxs LWRvY3VtZW50ZWQgZnVuY3Rpb24uCj4gCj4gIyMjIExldmVsIGFuZCBlZGdlIHRyaWdnZXJlZCBp bnRlcnJ1cHRzCj4gCj4gVGhlIEdJQyBrbm93cyBhYm91dCB0d28ga2luZHMgb2Ygc2lnbmFsbGlu ZyBpbnRlcnJ1cHRzOgo+IAo+IC0gRWRnZSB0cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgdHJpZ2dl cmVkIGJ5IGEgZGV2aWNlIG9uY2UsIHRoZWlyIGxpZmUgY3ljbGUKPiBlbmRzIHdoZW4gdGhlIGd1 ZXN0IGhhcyBFT0llZCB0aGVtLCBhdCB3aGljaCBwb2ludCB3ZSByZW1vdmUgdGhlIHBlbmRpbmcg c3RhdGUsCj4gY2xlYXIgdGhlIExSIGFuZCByZXR1cm4gdGhlIGB2Z2ljX2lycWAgc3RydWN0dXJl IHRvIGEgcXVpZXNjZW50IHN0YXRlLgoKSSBhc3N1bWUgdGhhdCAiYXQgd2hpY2ggcG9pbnQiIG1l YW5zIGF0IHRoZSBuZXh0IHRyYXAgaW50byB0aGUKaHlwZXJ2aXNvcj8gV2UgYXJlIG5vdCB0cmFw cGluZyBvbiBwdXJwb3NlIGd1ZXN0IEVPSXMsIGFyZSB3ZT8KCklzIGl0IHBvc3NpYmxlIHRvIGhh dmUgYWN0aXZlIGFuZCBwZW5kaW5nIGlycXMgaW4gYW4gTFI/IEhvdyBpcyB0aGF0CmhhbmRsZWQ/ CgoKPiAtIExldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFyZSB0cmlnZ2VyZWQgd2hlbiBhIGRl dmljZSByYWlzZXMgaXRzIGludGVycnVwdAo+IGxpbmUsIHRoZXkgc3RheSBwZW5kaW5nIGFzIGxv bmcgYXMgdGhpcyBsaW5lIGlzIGhlbGQgaGlnaC4gQXQgc29tZSBwb2ludCB0aGUKPiBkcml2ZXIg aW4gdGhlIGd1ZXN0IGlzIGV4cGVjdGVkIHRvIHByb2dyYW0gdGhlIGRldmljZSB0byBleHBsaWNp dGx5IG9yCj4gaW1wbGljaXRseSBsb3dlciB0aGlzIGludGVycnVwdCBsaW5lLiBUaGF0IG1lYW5z IHRoYXQgd2UgaGF2ZSB0byBzdG9yZSB0aGUKPiBzdGF0ZSBvZiB0aGUgdmlydHVhbCBpbnRlcnJ1 cHQgbGluZSwgd2hpY2ggaXMgb25seSBjb250cm9sbGVkIGJ5IHRoZSAodmlydHVhbCkKPiBkZXZp Y2UuIFRoaXMgaXMgZG9uZSBpbiB0aGUgYGxpbmVfbGV2ZWxgIG1lbWJlciBvZiBgc3RydWN0IHZn aWNfaXJxYC4KPiAKPiBUbyBhc3NlcnQgdGhlIGludGVycnVwdCBjb25kaXRpb24sIGEgKHZpcnR1 YWwpIGRldmljZSBjYWxscyBhIGZ1bmN0aW9uIGV4cG9ydGVkCj4gYnkgdGhlIFZHSUMsIHdoaWNo IGFsbG93cyB0byByYWlzZSBvciBsb3dlciBhbiBpbnRlcnJ1cHQgbGluZS4gTG93ZXJpbmcgdGhl Cj4gbGluZSBmb3IgYW4gZWRnZSB0cmlnZ2VyZWQgSVJRIGlzIGlnbm9yZWQgKGFuZCBzbyBpcyBv cHRpb25hbCkuIFJhaXNpbmcgdGhlCj4gbGluZSBhc3NlcnRzIHRoZSBwZW5kaW5nIHN0YXRlIGFu ZCBwb3RlbnRpYWxseSBpbmplY3RzIHRoaXMgdmlydHVhbCBJUlEuIEFueQo+IHN1YnNlcXVlbnQg InJhaXNpbmciIGNhbGwgbWlnaHQgaW5qZWN0IGFub3RoZXIgSVJRLCBpZiB0aGUgcHJldmlvdXMg aGFzIGF0Cj4gbGVhc3QgYmVlbiBhY3RpdmF0ZWQgYnkgdGhlIGd1ZXN0IGFscmVhZHksIG90aGVy d2lzZSBpcyBpZ25vcmVkLgoKVGhlIGlycSBiZWNvbWVzIGFjdGl2ZSBhbmQgcGVuZGluZyBpbiB0 aGUgTFI/CgoKPiBGb3IgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMgdGhpcyBmdW5jdGlvbiBz dG9yZXMgdGhlIG5ldyBzdGF0ZSBpbnRvIHRoZQo+IGBsaW5lX2xldmVsYCB2YXJpYWJsZSwgcG90 ZW50aWFsbHkgaW5qZWN0aW5nIHRoZSBpbnRlcnJ1cHQgaWYgdGhhdCBsaW5lCj4gY2hhbmdlcyBm cm9tIGZhbHNlIHRvIHRydWUuIElmIHRoZSBsaW5lIGlzIGxvd2VyZWQgYmVmb3JlIHRoZSBndWVz dCBoYXMKPiBzZWVuIGl0LCB0aGlzIHBhcnRpY3VsYXIgaW50ZXJydXB0IGluc3RhbmNlIHdpbGwg YmUgZGlzY2FyZGVkLiBTdWNjZXNzaXZlCj4gInJhaXNpbmciIGNhbGxzIHdpbGwgbm90IGxlYWQg dG8gbXVsdGlwbGUgaW50ZXJydXB0cyBpZiB0aGUgbGluZSBoYXMgbm90Cj4gYmVlbiBsb3dlcmVk IGluIGJldHdlZW4uCgpUaGlzIGlzIHNvbWV0aGluZyBYZW4gbmVlZHMgdG9vLgoKCj4gIyMjIFNv ZnR3YXJlIHRyaWdnZXJlZCBpbnRlcnJ1cHRzCj4gCj4gQmVzaWRlIHRoZSBuYXR1cmFsbHkgc29m dHdhcmUgdHJpZ2dlcmVkIGludGVyLXByb2Nlc3Nvci1pbnRlcnJ1cHRzCj4gKFNHSXMgaW4gR0lD IHNwZWFrKSwgdGhlcmUgaXMgYW5vdGhlciB3YXkgb2YgbGV0dGluZyBzb2Z0d2FyZSByYWlzZSBh bgo+IGludGVycnVwdCBjb25kaXRpb24uCj4gVGhlIEdJQyBkaXN0cmlidXRvciBhbGxvd3MgdG8g c2V0IG9yIGNsZWFyIGJvdGggdGhlIHBlbmRpbmcgYW5kIGFjdGl2ZSBzdGF0ZQo+IG9mIGFueSBp bnRlcnJ1cHQgdmlhIE1NSU8gcmVnaXN0ZXJzLiBUaGlzIGlzbid0IHdpZGVseSB1c2VkIGJ5IG1h bnkgb3BlcmF0aW5nCj4gc3lzdGVtcywgYnV0IGlzIHVzZWZ1bCB3aGVuIHNhdmluZyBhbmQgcmVz dG9yaW5nIHRoZSBzdGF0ZSBvZiBhIG1hY2hpbmUuCj4gU28gZW11bGF0aW5nIHRoZXNlIGZ1bmN0 aW9ucyBpcyByZXF1aXJlZCBmb3IgYmVpbmcgYXJjaGl0ZWN0dXJlIGNvbXBsaWFudCwKPiBob3dl dmVyIHRoZSBpbXBsZW1lbnRhdGlvbiBtaWdodCBub3QgbmVlZCB0byBiZSB2ZXJ5IGVmZmljaWVu dCBnaXZlbiBpdHMgcmFyZQo+IHVzYWdlLiBJbiBmYWN0IHN1cHBvcnRpbmcgdGhlIHNldC1wZW5k aW5nIGFuZCBjbGVhci1wZW5kaW5nIHJlZ2lzdGVycyBpcwo+IHJlbGF0aXZlbHkgc3RyYWlnaHQt Zm9yd2FyZCwgYXMgbG9uZyBhcyBvbmUga2VlcHMgdGhpcyBzdGF0ZSBzZXBhcmF0ZSBmcm9tCj4g dGhlIGVtdWxhdGVkIGludGVycnVwdCBsaW5lLiBgcGVuZGluZ19sYXRjaGAgc3RvcmVzIHRoaXMg c3RhdGUgaW4gYHZnaWNfaXJxYC4KPiAKPiBUaGUgc2V0LWFjdGl2ZSBhbmQgY2xlYXItYWN0aXZl IHJlZ2lzdGVycyBhcmUgbXVjaCBoYXJkZXIgdG8gZW11bGF0ZSwgdGhvdWdoLAo+IGFzIG5vcm1h bGx5IHRoZSBhY3RpdmUgc3RhdGUgaXMgb2YgbGl0dGxlIGNvbmNlcm4gdG8gdGhlIEdJQyBlbXVs YXRpb24uIEluCj4gYSBub3JtYWwgaW50ZXJydXB0IGxpZmUgY3ljbGUgdGhlIGFjdGl2ZSBzdGF0 ZSBpc24ndCBldmVuIHZpc2libGUgdG8gdGhlCj4gaHlwZXJ2aXNvciwgYXMgaXQgbWlnaHQgYmUg c2V0IGFuZCBjbGVhcmVkIGFnYWluIGVudGlyZWx5IHdpdGhpbiB0aGUgZ3Vlc3QKPiBpbiB0aGUg bGlzdCByZWdpc3Rlciwgd2l0aG91dCBleGl0aW5nIHRvIHRoZSBoeXBlcnZpc29yLgo+IFNvIG1h bmlwdWxhdGluZyB0aGUgYWN0aXZlIHN0YXRlIHZpYSB0aGUgTU1JTyByZWdpc3RlcnMgcmVxdWly ZXMgc29tZSBoZWF2eQo+IGxpZnRpbmc6IElmIHRoaXMgaW50ZXJydXB0IGlzIGN1cnJlbnRseSBp bmplY3RlZCBpbnRvIGEgcnVubmluZyBWQ1BVLCB0aGlzCj4gVkNQVSBtdXN0IGV4aXQsIHRoZSBh Y3RpdmUgc3RhdGUgbXVzdCBiZSBzZXQgb3IgY2xlYXJlZCBpbiB0aGUgTFIsIHRoZW4KPiBleGVj dXRpb24gY2FuIGNvbnRpbnVlLiBXaGlsZSB0aGlzIGlzIGV4cGVuc2l2ZSwgYXMgbWVudGlvbmVk IGFib3ZlIHRoaXMKPiBzaG91bGQgbm90IGhhcHBlbiB0b28gb2Z0ZW4sIGFsc28gcHJvYmFibHkg dGhlIHN5c3RlbSBpc24ndCB2ZXJ5IHBlcmZvcm1hbmNlCj4gc2Vuc2l0aXZlIHdoZW4gdXNpbmcg dGhpcyBmZWF0dXJlIGZvciBzYXZlIGFuZCByZXN0b3JlIGFueXdheS4KCnNldC1hY3RpdmUgYW5k IGNsZWFyLWFjdGl2ZSByZWdpc3RlcnMgYXJlIG5vdCBlbXVsYXRlZCBpbiBYZW4gdG9kYXksIGl0 CndvdWxkIGJlIG5pY2UgdG8gaGF2ZSB0aGVtLgoKSG93IGRvZXMgdGhlIGxvY2tpbmcvc3luY2hy b25pemF0aW9uIHdvcmsgaW4gdGhlIGNhc2UgZ2l2ZW4gdGhhdCB0aGUKdkNQVSB0aGF0IG5lZWRz IHRvIGV4aXQgY291bGQgYmUgcnVubmluZyBvbiBhIGRpZmZlcmVudCBwQ1BVPwoKCj4gIyMjIE1N SU8gZW11bGF0aW9uCj4gCj4gQXMgbWVudGlvbmVkIGJlZm9yZSwgdGhlIGRpc3RyaWJ1dG9yIGFu ZCByZWRpc3RyaWJ1dG9yIHBhcnQgb2YgdGhlIFZHSUMgbmVlZHMKPiB0byBiZSBmdWxseSBlbXVs YXRlZC4gVGhvc2UgcGFydHMgYXJlIGNoYXJhY3RlcmlzZWQgYnkgYSByYW5nZSBvZiBNTUlPCj4g cmVnaXN0ZXJzLiBUaGUgaW1wbGVtZW50YXRpb24gc2hhbGwgcHJvdmlkZSBhIGRpc3BhdGNoZXIg ZnVuY3Rpb24sIHdoaWNoCj4gdGFrZXMgdGhlIGZhdWx0ZWQgYWRkcmVzcywgcmVsYXRpdmUgdG8g dGhlIGJlZ2lubmluZyBvZiB0aGUgTU1JTyByYW5nZSwgYW5kCj4gd29ya3Mgb3V0IHdoaWNoIGFj dHVhbCByZWdpc3RlciBpcyBhZmZlY3RlZC4gSXQgdGhlbiBsb29rcyB1cCB0aGUgdGhlCj4gcmVz cGVjdGl2ZSBoYW5kbGVyIGZ1bmN0aW9uIGFuZCBjYWxscyBpdC4gVGhvc2UgZnVuY3Rpb25zIGFy ZSBleHBlY3RlZCB0bwo+IGJlIGxpc3RlZCBpbiBhIHN0cnVjdCBpbml0aWFsaXNlciwgd2hpY2gg Y29ubmVjdHMgdGhlIGFjdHVhbCByZWdpc3Rlcgo+IG9mZnNldCBhbmQgaXRzIHNpemUgdG8gYSBw YXJ0aWN1bGFyIGhhbmRsZXIuIEhhdmluZyBoYW5kbGVyIGZ1bmN0aW9ucyBmb3IKPiBhIHJlZ2lz dGVyIHJhbmdlIHNlZW1zIGJlbmVmaWNpYWwgb3ZlciBoYW5kbGluZyByZWdpc3RlcnMgaW4gYSBz d2l0Y2gvY2FzZSwKPiBiZWNhdXNlIGl0J3MgZWFzaWVyIHRvIHJlYWQgYW5kIHNpbXBsaWZpZXMg Y29kZSBzaGFyaW5nLCBmb3IgaW5zdGFuY2UKPiBiZXR3ZWVuIHRoZSBHSUN2MiwgR0lDdjMgZGlz dHJpYnV0b3IgYW5kIEdJQ3YzIHJlZGlzdHJpYnV0b3IgcmVnaXN0ZXJzCj4gd2l0aCB0aGUgc2Ft ZSBzZW1hbnRpY3MuCgpJIGFtIGhhcHB5IHRvIHJlcGxhY2UgdGhlIHdob2xlIE1NSU8gZW11bGF0 aW9uIGJpdC4KCgo+ICMjIyBMaXN0IHJlZ2lzdGVyIG1hbmFnZW1lbnQKPiAKPiBBIGxpc3QgcmVn aXN0ZXIgKExSKSBob2xkcyB0aGUgc3RhdGUgb2YgYSB2aXJ0dWFsIGludGVycnVwdCwgd2hpY2gg d2lsbAo+IGJlIHVzZWQgYnkgdGhlIEdJQyBoYXJkd2FyZSB0byBzaW11bGF0ZSBhbiBJUlEgbGlm ZSBjeWNsZSBmb3IgYSBndWVzdC4KPiBFYWNoIEdJQyBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiBj YW4gY2hvb3NlIHRvIGltcGxlbWVudCBhIG51bWJlciBvZiBMUnMsCj4gaGF2aW5nIGZvdXIgb2Yg dGhlbSBzZWVtcyB0byBiZSBhIGNvbW1vbiB2YWx1ZS4gVGhpcyBkZXNpZ24gaGVyZSBkb2VzIG5v dAo+IHRyeSB0byBtYW5hZ2UgdGhlIExScyB2ZXJ5IGNsZXZlcmx5LCBpbnN0ZWFkIG9uIGV2ZXJ5 IGd1ZXN0IGV4aXQgZXZlcnkgTFIKPiBpbiB1c2Ugd2lsbCBiZSBzeW5jZWQgdG8gdGhlIGVtdWxh dGVkIHN0YXRlLCB0aGVuIGNsZWFyZWQuIFVwb24gZ3Vlc3QgZW50cnkKPiB0aGUgdG9wIHByaW9y aXR5IHZpcnR1YWwgSVJRcyB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIExScy4gSWYgdGhlcmUg YXJlCj4gbW9yZSBwZW5kaW5nIG9yIGFjdGl2ZSBJUlFzIHRoYW4gbGlzdCByZWdpc3RlcnMsIHRo ZSBHSUMgbWFuYWdlbWVudCBJUlEKPiB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gbm90aWZ5IHRoZSBo eXBlcnZpc29yIG9mIGEgZnJlZSBMUiAob25jZSB0aGUgZ3Vlc3QKPiBoYXMgRU9JZWQgb25lIElS USkuIFRoaXMgd2lsbCB0cmlnZ2VyIGEgbm9ybWFsIGV4aXQsIHdoaWNoIHdpbGwgZ28gdGhyb3Vn aAo+IHRoZSBub3JtYWwgY2xlYW51cC9yZXBvcHVsYXRlIHNjaGVtZSwgcG9zc2libHkgbm93IHF1 ZXVpbmcgdGhlIGxlZnRvdmVyCj4gaW50ZXJydXB0KHMpLgo+IFRvIGZhY2lsaXRhdGUgcXVpY2sg Z3Vlc3QgZXhpdCBhbmQgZW50cnkgdGltZXMsIHRoZSBWR0lDIG1haW50YWlucyB0aGUgbGlzdAo+ IG9mIHBlbmRpbmcgb3IgYWN0aXZlIGludGVycnVwdHMgKGFwXF9saXN0KSBzb3J0ZWQgYnkgdGhl aXIgcHJpb3JpdHkuIEFjdGl2ZQo+IGludGVycnVwdHMgYWx3YXlzIGdvIGZpcnN0IG9uIHRoZSBs aXN0LCBzaW5jZSBhIGd1ZXN0IGFuZCB0aGUgaGFyZHdhcmUgR0lDCj4gZXhwZWN0IHRob3NlIHRv IHN0YXkgdW50aWwgdGhleSBoYXZlIGJlZW4gZXhwbGljaXRseSBkZWFjdGl2YXRlZC4gRmFpbHVy ZQo+IGluIGtlZXBpbmcgYWN0aXZlIElSUXMgYXJvdW5kIHdpbGwgcmVzdWx0IGluIGVycm9yIGNv bmRpdGlvbnMgaW4gdGhlIEdJQy4KPiBUaGUgc2Vjb25kIHNvcnQgY3JpdGVyaWEgZm9yIHRoZSBh cFxfbGlzdCBpcyB0aGVpciBwcmlvcml0eSwgc28gaGlnaGVyCj4gcHJpb3JpdHkgcGVuZGluZyBp bnRlcnJ1cHQgYWx3YXlzIGdvIGZpcnN0IGludG8gdGhlIExScy4KClRoZSBzdWdnZXN0aW9uIG9m IHVzaW5nIHRoaXMgbW9kZWwgaW4gWGVuIHdhcyBtYWRlIGluIHRoZSBwYXN0IGFscmVhZHkuCkkg YWx3YXlzIG9iamVjdGVkIGZvciB0aGUgcmVhc29uIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkga25v dyBob3cgbWFueQpMUnMgdGhlIGhhcmR3YXJlIHByb3ZpZGVzLCBwb3RlbnRpYWxseSB2ZXJ5IG1h bnksIGFuZCBpdCBpcyBleHBlbnNpdmUKYW5kIG5lZWRsZXNzIHRvIHJlYWQvd3JpdGUgdGhlbSBh bGwgZXZlcnkgdGltZSBvbiBlbnRyeS9leGl0LgoKSSB3b3VsZCBwcmVmZXIgdG8gYXZvaWQgdGhh dCwgYnV0IEknbGwgYmUgaG9uZXN0OiBJIGNhbiBiZSBjb252aW5jZWQKdGhhdCB0aGF0IG1vZGVs IG9mIGhhbmRsaW5nIExScyBpcyBzbyBtdWNoIHNpbXBsZXIgdGhhdCBpdCBpcyB3b3J0aCBpdC4K SSBhbSBtb3JlIGNvbmNlcm5lZCBhYm91dCB0aGUgZnV0dXJlIG1haW50YWluYW5jZSBvZiBhIHNl cGFyYXRlIG5ldwpkcml2ZXIgZGV2ZWxvcGVkIGVsc2V3aGVyZS4KCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVu LWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=