From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: Re: [RFC] ARM: New (Xen) VGIC design document Date: Wed, 1 Nov 2017 14:30:03 +0000 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 1e9txp-0001ii-5U for xen-devel@lists.xenproject.org; Wed, 01 Nov 2017 14:25:53 +0000 Received: by mail-wm0-f66.google.com with SMTP id y83so5245924wmc.4 for ; Wed, 01 Nov 2017 07:25:51 -0700 (PDT) In-Reply-To: Content-Language: en-GB List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini Cc: Marc Zyngier , xen-devel@lists.xenproject.org, Julien Grall , Christoffer Dall , Eric Auger List-Id: xen-devel@lists.xenproject.org SGkgU3RlZmFubywKCgpPbiAwMS8xMS8xNyAwMTo1OCwgU3RlZmFubyBTdGFiZWxsaW5pIHdyb3Rl Ogo+IE9uIFdlZCwgMTEgT2N0IDIwMTcsIEFuZHJlIFByenl3YXJhIHdyb3RlOgoKbWFueSB0aGFu a3MgZm9yIGdvaW5nIHRocm91Z2ggYWxsIG9mIHRoaXMhCgo+PiAoQ0M6aW5nIHNvbWUgS1ZNL0FS TSBmb2xrcyBpbnZvbHZlZCBpbiB0aGUgVkdJQykKPj4KPj4gc3RhcnRpbmcgd2l0aCB0aGUgYWRk aXRpb24gb2YgdGhlIElUUyBzdXBwb3J0IHdlIHdlcmUgc2VlaW5nIG1vcmUgYW5kCj4+IG1vcmUg aXNzdWVzIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2Ygb3VyIEFSTSBHZW5lcmlj IEludGVycnVwdAo+PiBDb250cm9sbGVyIChHSUMpIGVtdWxhdGlvbiwgdGhlIFZHSUMuCj4+IEFt b25nIG90aGVyIGFwcHJvYWNoZXMgdG8gZml4IHRob3NlIGlzc3VlcyBpdCB3YXMgcHJvcG9zZWQg dG8gY29weSB0aGUKPj4gVkdJQyBlbXVsYXRpb24gdXNlZCBpbiBLVk0uIFRoaXMgb25lIHdhcyBz dWZmZXJpbmcgZnJvbSB2ZXJ5IHNpbWlsYXIKPj4gaXNzdWVzLCBhbmQgYSBjbGVhbiBkZXNpZ24g ZnJvbSBzY3JhdGNoIGxlYWQgdG8gYSB2ZXJ5IHJvYnVzdCBhbmQKPj4gY2FwYWJsZSByZS1pbXBs ZW1lbnRhdGlvbi4gSW50ZXJlc3RpbmdseSB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGZhaXJseQo+ PiBzZWxmLWNvbnRhaW5lZCwgc28gaXQgc2VlbXMgZmVhc2libGUgdG8gY29weSBpdC4gSG9wZWZ1 bGx5IHdlIG9ubHkgbmVlZAo+PiBtaW5vciBhZGp1c3RtZW50cywgcG9zc2libHkgd2UgY2FuIGV2 ZW4gY29weSBpdCB2ZXJiYXRpbSB3aXRoIHNvbWUKPj4gYWRkaXRpb25hbCBnbHVlIGxheWVyIGNv ZGUuCj4+Cj4+IFN0ZWZhbm8gYXNrZWQgZm9yIGdldHRpbmcgYSBkZXNpZ24gb3ZlcnZpZXcsIHRv IGFzc2VzcyB0aGUgZmVhc2liaWxpdHkKPj4gb2YgY29weWluZyB0aGUgS1ZNIGNvZGUgd2l0aG91 dCByZXZpZXdpbmcgdG9ucyBvZiBjb2RlIGluIHRoZSBmaXJzdAo+PiBwbGFjZS4KPj4gU28gdG8g Zm9sbG93IFhlbiBydWxlcyBmb3IgbmV3IGZlYXR1cmVzLCB0aGlzIGRlc2lnbiBkb2N1bWVudCBi ZWxvdyBpcwo+PiBhbiBhdHRlbXB0IHRvIGRlc2NyaWJlIHRoZSBjdXJyZW50IEtWTSBWR0lDIGRl c2lnbiAtIGluIGEgaHlwZXJ2aXNvcgo+PiBhZ25vc3RpYyBzZXNzaW9uLiBJdCBpcyBhIGJpdCBv ZiBhIHJldHJvLWZpdCBkZXNpZ24gZGVzY3JpcHRpb24sIGFzIGl0Cj4+IGlzIG5vdCBzdHJpY3Rs eSBmb3J3YXJkLWxvb2tpbmcgb25seSwgYnV0IGFjdHVhbGx5IGRlc2NyaWJpbmcgdGhlCj4+IGV4 aXN0aW5nIGltcGxlbWVuYXRpb24gWzFdLgo+Pgo+PiBQbGVhc2UgaGF2ZSBhIGxvb2sgYW5kIGxl dCBtZSBrbm93Ogo+PiAxKSBpZiB0aGlzIGRvY3VtZW50IGhhcyB0aGUgcmlnaHQgc2NvcGUKPj4g MikgaWYgdGhpcyBkb2N1bWVudCBoYXMgdGhlIHJpZ2h0IGxldmVsIG9mIGRldGFpbAo+PiAzKSBp ZiB0aGVyZSBhcmUgcG9pbnRzIG1pc3NpbmcgZnJvbSB0aGUgZG9jdW1lbnQKPj4gMykgaWYgdGhl IGRlc2lnbiBpbiBnZW5lcmFsIGlzIGEgZml0Cj4gCj4gUGxlYXNlIHJlYWQgdGhlIGZvbGxvd2lu ZyBzdGF0ZW1lbnRzIGFzIGdlbnVpbmUgcXVlc3Rpb25zIGFuZCBjb25jZXJucy4KPiBNb3N0IGlk ZWFzIG9uIHRoaXMgZG9jdW1lbnQgYXJlIGdvb2QuIFNvbWUgb2YgdGhlbSBJIGhhdmUgZXZlbiBz dWdnZXN0ZWQKPiB0aGVtIG15c2VsZiBpbiB0aGUgY29udGV4dCBvZiBHSUMgaW1wcm92ZW1lbnRz IGZvciBYZW4uIEkgYXNrZWQgZm9yIGEKPiBjb3VwbGUgb2YgY2xhcmlmaWNhdGlvbnMuCj4gCj4g QnV0IEkgZG9uJ3Qgc2VlIHdoeSB3ZSBjYW5ub3QgaW1wbGVtZW50IHRoZXNlIGlkZWFzIG9uIHRv cCBvZiB0aGUKPiBleGlzdGluZyBjb2RlLCByYXRoZXIgdGhhbiB3aXRoIGEgc2VwYXJhdGUgY29k ZWJhc2UsIGVuZGluZyB1cCB3aXRoIHR3bwo+IGRyaXZlcnMuIEkgd291bGQgcHJlZmVyIGEgbmF0 dWFsIGV2b2x1dGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgZm9sbG93aW5nCj4gaW1wcm92ZW1lbnRz IHdvdWxkIGJlIHNpbXBsZSBhbmQgd291bGQgZ2l2ZSB1cyBtb3N0IG9mIHRoZSBiZW5lZml0cyBv bgo+IHRvcCBvZiB0aGUgY3VycmVudCBjb2RlYmFzZToKPiAtIGFkZGluZyB0aGUgaXJxIGxvY2ss IGFuZCB0aGUgcmVmY291bnQKPiAtIHRha2luZyBib3RoIHZjcHUgbG9ja3Mgd2hlbiBuZWNlc3Nh cnkgKG9uIG1pZ3JhdGlvbiBjb2RlIGZvciBleGFtcGxlCj4gICBpdCB3b3VsZCBoZWxwIGEgbG90 KSwgdGhlIGxvd2VyIHZjcHVfaWQgZmlyc3QKPiAtIGxldmVsIGlycSBlbXVsYXRpb24KCkkgdGhp bmsgc29tZSBvZiB0aG9zZSBwb2ludHMgeW91IG1lbnRpb25lZCBhcmUgbm90IGVhc2lseSBpbXBs ZW1lbnRlZCBpbgp0aGUgY3VycmVudCBYZW4uIEZvciBpbnN0YW5jZSBJIHJhbiBpbnRvIGxvY2tp bmcgb3JkZXIgaXNzdWVzIHdpdGggdGhvc2UKKnR3byogaW5mbGlnaHQgYW5kIGxyX3F1ZXVlIGxp c3RzLCB3aGVuIHRyeWluZyB0byBpbXBsZW1lbnQgdGhlIGxvY2sgYW5kCnRoZSByZWZjb3VudC4K QWxzbyB0aGlzICJwdXQgdklSUXMgaW50byBMUnMgZWFybHksIGJ1dCBwb3NzaWJseSByaXAgdGhl bSBvdXQgYWdhaW4iIGlzCnJlYWxseSBjb21wbGljYXRpbmcgdGhpbmdzIGEgbG90LgoKSSBiZWxp ZXZlIG9ubHkgbGV2ZWwgSVJRcyBjb3VsZCBiZSBhZGRlZCBpbiBhIHJlbGF0aXZlbHkgc3RyYWln aHQKZm9yd2FyZCBtYW5uZXIuCgpTbyB0aGUgcHJvYmxlbSB3aXRoIHRoZSBldm9sdXRpb25hcnkg YXBwcm9hY2ggaXMgdGhhdCBpdCBnZW5lcmF0ZXMgYSBsb3QKb2YgcGF0Y2hlcywgc29tZSBvZiB0 aGVtIHF1aXRlIGludmFzaXZlLCBvdGhlcnMgY3JlYXRpbmcgaGFyZC10by1yZWFkCmRpZmZzLCB3 aGljaCBhcmUgYm90aCBoYXJkIHRvIHJldmlldy4KQW5kIGNoYW5jZXMgYXJlIHRoYXQgdGhlIGFj dHVhbCByZXN1bHQgd291bGQgYmUgcHJldHR5IGNsb3NlIHRvIHRoZSBLVk0KY29kZS4gVG8gYmUg Y2xlYXI6IEkgaGFja2VkIHRoZSBYZW4gVkdJQyBpbnRvIHRoZSBLVk0gZGlyZWN0aW9uIGluIGEg ZmV3CmRheXMgc29tZSBtb250aHMgYWdvLCBidXQgaXQgdG9vayBtZSAqd2Vla3MqIHRvIG1ha2Ug c2FuZSBwYXRjaGVzIG9mCm9ubHkgdGhlIGZpcnN0IHBhcnQgb2YgaXQuCkFuZCB0aGlzIHdvdWxk IG5vdCBjb3ZlciBhbGwgdGhvc2UgZ2VuZXJhbCwgdGVkaW91cyBjb3JuZXIgY2FzZXMgdGhhdAp0 aGUgVkdJQyBjb21lcyB3aXRoLiBUaG9zZSB3b3VsZCBuZWVkIHRvIGJlIGZpeGVkIGluIGEgcGFp bmZ1bCBwcm9jZXNzLAp3aGljaCB3ZSBjb3VsZCBhdm9pZCBieSAibGlmdGluZyIgdGhlIEtWTSBj b2RlLgoKPiBJZiB3ZSBkbyBlbmQgdXAgd2l0aCBhIHNlY29uZCBzZXBhcmF0ZSBkcml2ZXIgZm9y IHRlY2huaWNhbCBvciBwcm9jZXNzCj4gcmVhc29ucywgSSB3b3VsZCBleHBlY3QgdGhlIHJlZ3Vs YXIgWGVuIHN1Ym1pc3Npb24vcmV2aWV3IHByb2Nlc3MgdG8gYmUKPiBmb2xsb3dlZC4gVGhlIGNv ZGUgc3R5bGUgd2lsbCBiZSBkaWZmZXJlbnQsIHRoZSBob29rcyBpbnRvIHRoZSByZXN0IG9mCj4g dGhlIGh5cGVydmlzb3JzIHdpbGwgYmUgZGlmZmVyZW50IGFuZCB0aGluZ3Mgd2lsbCBiZSBnZW5l cmFsbHkgY2hhbmdlZC4KPiBUaGUgbmV3IFYvR0lDIG1pZ2h0IGJlIGRlcml2ZWQgZnJvbSBLVk0s IGJ1dCBpdCBzaG91bGQgZW5kIHVwIGxvb2tpbmcKPiBhbmQgZmVlbGluZyBsaWtlIGEgMTAwJSBn ZW51aW5lIFhlbiBjb21wb25lbnQuIEFmdGVyIGFsbCwgd2UnbGwKPiBtYWludGFpbiBpdCBnb2lu ZyBmb3J3YXJkLiBJIGRvbid0IHdhbnQgYSBjb3B5IG9mIGEgTGludXggZHJpdmVyIHdpdGgKPiBn bHVlIGNvZGUuIFRoZSBYZW4gY29tbXVuaXR5IGNhbm5vdCBiZSBleHBlY3RlZCBub3QgdG8gcmV2 aWV3IHRoZQo+IHN1Ym1pc3Npb24sIGJ1dCBpZiB3ZSByZXZpZXcgaXQsIHRoZW4gd2UnbGwgYXNr IGZvciBjaGFuZ2VzLiBPbmNlIHdlCj4gY2hhbmdlIHRoZSBjb2RlLCB0aGVyZSB3aWxsIGJlIG5v IHBvaW50IGluIGtlZXBpbmcgdGhlIExpbnV4IGNvZGUKPiBzZXBhcmF0ZSB3aXRoIGdsdWUgY29k ZS4gV2Ugc2hvdWxkIGZ1bGx5IGFkYXB0IGl0IHRvIFhlbi4KCkkgc2VlIHlvdXIgcG9pbnQsIGFu ZCB0aGlzIGFjdHVhbGx5IHNpbXBsaWZpZXMgKm15KiB3b3JrLCBidXQgSSBhbSBhIGJpdAp3b3Jy aWVkIGFib3V0IHRoZSBlZmZlY3RzIG9mIGhhdmluZyB0d28gc2VwYXJhdGUgaW1wbGVtZW50YXRp b25zIHdoaWNoCnRoZW4gZGl2ZXJnZSBvdmVyIHRpbWUuCkluIHRoZSBtb21lbnQgd2UgaGF2ZSB0 d28gc2VwYXJhdGUgaW1wbGVtZW50YXRpb25zIGFzIHdlbGwsIGJ1dCB0aGV5IGFyZQpxdWl0ZSBk aWZmZXJlbnQsIHdoaWNoIGhhcyB0aGUgYWR2YW50YWdlIG9mIGRvaW5nIHRoaW5ncyBkaWZmZXJl bnRseQplbm91Z2ggdG8gaGVscCBpbiBmaW5kaW5nIGJ1Z3MgaW4gdGhlIG90aGVyIG9uZSAoc29t ZXRoaW5nIHdlIHNob3VsZAphY3R1YWxseSBleHBsb2l0IGluIHRlc3RpbmcsIEkgYmVsaWV2ZSku CgpTbyBob3cgaXMgeW91ciBmZWVsaW5nIHRvd2FyZHMgc29tZSBzaGFyZWQgImxpYnZnaWMiPyBJ IHVuZGVyc3RhbmQgdGhhdApwZW9wbGUgYXJlIG5vdCB0b28gaGFwcHkgYWJvdXQgdGhhdCBleHRy YSBtYWludGVuYW5jZSBjb3N0IG9mIGhhdmluZyBhCnNlcGFyYXRlIHJlcG9zaXRvcnksIGJ1dCBJ IGFtIGN1cmlvdXMgd2hhdCB5b3VyLCBNYXJjJ3MgYW5kCkNocmlzdG9mZmVyJ3MgdGFrZSBpcyBv biB0aGlzIGlkZWEuCgo+IFRoYXQgaXMgd2hhdCB3YXMgZG9uZSBpbiB0aGUgcGFzdCB3aGVuIEtW TSB0b29rIGNvZGUgZnJvbSBYZW4gKGZvcgo+IGV4YW1wbGUgYXN5bmMgc2hhZG93IHBhZ2V0YWJs ZXMpLiBJIGFtIGVhZ2VyIHRvIGF2b2lkIGEgc2l0dWF0aW9uIGxpa2UKPiB0aGUgY3VycmVudCBT TU1VIGRyaXZlciBpbiBYZW4sIHdoaWNoIGNvbWVzIGZyb20gTGludXgsIGFuZCB3ZSBhcmUgbm90 Cj4gZW50aXJlbHkgc3VyZSBob3cgdG8gbWFpbnRhaW4gaXQuCj4gCj4gCj4+IEFwcHJlY2lhdGUg YW55IGZlZWRiYWNrIQo+Pgo+PiBDaGVlcnMsCj4+IEFuZHJlLgo+Pgo+PiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4KPj4gVkdJQyBkZXNpZ24KPj4gPT09PT09PT09 PT0KPj4KPj4gVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGRlc2lnbiBvZiBhbiBBUk0gR2Vu ZXJpYyBJbnRlcnJ1cHQgQ29udHJvbGxlciAoR0lDKQo+PiBlbXVsYXRpb24uIEl0IGlzIG1lYW50 IHRvIGVtdWxhdGUgYSBHSUMgZm9yIGEgZ3Vlc3QgaW4gYW4gdmlydHVhbCBtYWNoaW5lLAo+PiB0 aGUgY29tbW9uIG5hbWUgZm9yIHRoYXQgaXMgVkdJQyAoZnJvbSAidmlydHVhbCBHSUMiKS4KPj4K Pj4gVGhpcyBkZXNpZ24gd2FzIHRoZSByZXN1bHQgb2YgYSBvbmUtd2Vlay1sb25nIGRlc2lnbiBz ZXNzaW9uIHdpdGggc29tZQo+PiBlbmdpbmVlcnMgaW4gYSByb29tLCB0cmlnZ2VyZWQgYnkgZXZl ci1pbmNyZWFzaW5nIGRpZmZpY3VsdGllcyBpbiBtYWludGFpbmluZwo+PiB0aGUgZXhpc3Rpbmcg R0lDIGVtdWxhdGlvbiBpbiB0aGUgS1ZNIGh5cGVydmlzb3IuIFRoZSBkZXNpZ24gZXZlbnR1YWxs eQo+PiBtYXRlcmlhbGlzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgVkdJQyBpbXBsZW1lbnRhdGlvbiBp biB0aGUgTGludXgga2VybmVsCj4+IChtZXJnZWQgaW50byBMaW51eCB2NC43KS4gQXMgb2YgTGlu dXggdjQuOCB0aGUgcHJldmlvdXMgVkdJQyBpbXBsZW1lbnRhdGlvbgo+PiB3YXMgcmVtb3ZlZCwg c28gaXQgaXMgbm93IHRoZSBjdXJyZW50IGNvZGUgdXNlZCBieSBMaW51eC4KPj4gQWx0aG91Z2gg YmVpbmcgdXNlZCBpbiBLVk0sIHRoZSBhY3R1YWwgZGVzaWduIG9mIHRoaXMgVkdJQyBpcyByYXRo ZXIgaHlwZXJ2aXNvcgo+PiBhZ25vc3RpYyBhbmQgY2FuIGJlIHVzZWQgYnkgb3RoZXIgaHlwZXJ2 aXNvcnMgYXMgd2VsbCwgaW4gcGFydGljdWxhciBmb3IgWGVuLgo+Pgo+PiBHSUMgaGFyZHdhcmUg dmlydHVhbGl6YXRpb24gc3VwcG9ydAo+PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQo+Pgo+PiBUaGUgQVJNIEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIgKHNpbmNlIHYy KSBzdXBwb3J0cyB0aGUgdmlydHVhbGl6YXRpb24KPj4gZXh0ZW5zaW9ucywgd2hpY2ggYWxsb3dz IHNvbWUgcGFydHMgb2YgdGhlIGludGVycnVwdCBsaWZlIGN5Y2xlIHRvIGJlIGhhbmRsZWQKPj4g cHVyZWx5IGluc2lkZSB0aGUgZ3Vlc3Qgd2l0aG91dCBleGl0aW5nIGludG8gdGhlIGh5cGVydmlz b3IuCj4+IEluIHRoZSBHSUN2MiBhbmQgR0lDdjMgYXJjaGl0ZWN0dXJlIHRoaXMgY292ZXJzIG1v c3RseSB0aGUgImludGVycnVwdAo+PiBhY2tub3dsZWRnZW1lbnQiLCAicHJpb3JpdHkgZHJvcCIg YW5kICJpbnRlcnJ1cHQgZGVhY3RpdmF0ZSIgYWN0aW9ucy4KPj4gU28gYSBndWVzdCBjYW4gaGFu ZGxlIG1vc3Qgb2YgdGhlIGludGVycnVwdCBwcm9jZXNzaW5nIGNvZGUgd2l0aG91dAo+PiBsZWF2 aW5nIEVMMSBhbmQgdHJhcHBpbmcgaW50byB0aGUgaHlwZXJ2aXNvci4gVG8gYWNjb21wbGlzaAo+ PiB0aGlzLCB0aGUgR0lDIGhvbGRzIHNvIGNhbGxlZCAibGlzdCByZWdpc3RlcnMiIChMUnMpLCB3 aGljaCBzaGFkb3cgdGhlCj4+IGludGVycnVwdCBzdGF0ZSBmb3IgYW55IHZpcnR1YWwgaW50ZXJy dXB0LiBJbmplY3RpbmcgYW4gaW50ZXJydXB0IHRvIGEgZ3Vlc3QKPj4gaW52b2x2ZXMgc2V0dGlu ZyB1cCBvbmUgTFIgd2l0aCB0aGUgaW50ZXJydXB0IG51bWJlciwgaXRzIHByaW9yaXR5IGFuZCBp bml0aWFsCj4+IHN0YXRlIChtb3N0bHkgInBlbmRpbmciKSwgdGhlbiBlbnRlcmluZyB0aGUgZ3Vl c3QuIEFueSBFT0kgcmVsYXRlZCBhY3Rpb24KPj4gZnJvbSB3aXRoaW4gdGhlIGd1ZXN0IGp1c3Qg YWN0cyBvbiB0aG9zZSBMUnMsIHRoZSBoeXBlcnZpc29yIGNhbiBsYXRlciB1cGRhdGUKPj4gdGhl IHZpcnR1YWwgaW50ZXJydXB0IHN0YXRlIHdoZW4gdGhlIGd1ZXN0IGV4aXN0cyB0aGUgbmV4dCB0 aW1lIChmb3Igd2hhdGV2ZXIKPj4gcmVhc29uKS4KPj4gQnV0IGRlc3BpdGUgdGhlIEdJQyBoYXJk d2FyZSBoZWxwaW5nIG91dCBoZXJlLCB0aGUgd2hvbGUgaW50ZXJydXB0Cj4+IGNvbmZpZ3VyYXRp b24gbWFuYWdlbWVudCBpcyBub3QgdmlydHVhbGl6ZWQgYXQgYWxsIGFuZCBuZWVkcyB0byBiZSBl bXVsYXRlZAo+PiBieSB0aGUgaHlwZXJ2aXNvciAtIG9yIGFub3RoZXIgcmVsYXRlZCBzb2Z0d2Fy ZSBjb21wb25lbnQsIGZvciBpbnN0YW5jZSBhCj4+IHVzZXJsYW5kIGVtdWxhdG9yLiBUaGlzIHNv IGNhbGxlZCAiZGlzdHJpYnV0b3IiIHBhcnQgb2YgdGhlIEdJQyBjb25zaXN0cyBvZgo+PiBtZW1v cnkgbWFwcGVkIHJlZ2lzdGVycywgd2hpY2ggY2FuIGJlIHRyYXBwZWQgYnkgdGhlIGh5cGVydmlz b3IsIHNvIGFueSBndWVzdAo+PiBhY2Nlc3MgY2FuIGJlIGVtdWxhdGVkIGluIHRoZSB1c3VhbCB3 YXkuCj4+Cj4+IFZHSUMgZGVzaWduIG1vdGl2YXRpb24KPj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQo+Pgo+PiBBIEdJQyBlbXVsYXRpb24gdGh1cyBuZWVkcyB0byB0YWtlIGNhcmUgb2YgdGhvc2Ug Yml0czoKPj4KPj4gLSB0cmFwIEdJQyBkaXN0cmlidXRvciBNTUlPIGFjY2Vzc2VzIGFuZCBzaGFk b3cgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dXAKPj4gICAoZW5hYmxlZC9kaXNhYmxlZCwgbGV2ZWwv ZWRnZSwgcHJpb3JpdHksIGFmZmluaXR5KSBmb3IgdmlydHVhbCBpbnRlcnJ1cHRzCj4+IC0gaGFu ZGxlIGluY29taW5nIGhhcmR3YXJlIGFuZCB2aXJ0dWFsIGludGVycnVwdCByZXF1ZXN0cyBhbmQg aW5qZWN0IHRoZQo+PiAgIGFzc29jaWF0ZWQgdmlydHVhbCBpbnRlcnJ1cHQgYnkgbWFuaXB1bGF0 aW5nIG9uZSBvZiB0aGUgbGlzdCByZWdpc3RlcnMKPj4gLSB0cmFjayB0aGUgc3RhdGUgb2YgYSB2 aXJ0dWFsIGludGVycnVwdCBieSBpbnNwZWN0aW5nIHRoZSBMUnMgYWZ0ZXIgdGhlCj4+ICAgZ3Vl c3QgaGFzIGV4aXRlZCwgcG9zc2libHkgYWRqdXN0aW5nIHRoZSBzaGFkb3dlZCB2aXJ0dWFsIGlu dGVycnVwdCBzdGF0ZQo+Pgo+PiBEZXNwaXRlIHRoZSBkaXN0cmlidXRvciBNTUlPIHJlZ2lzdGVy IGVtdWxhdGlvbiBiZWluZyBhIHNpemVhYmxlIGNodW5rIG9mCj4+IHRoZSBlbXVsYXRpb24sIGl0 IGlzIGFjdHVhbGx5IG5vdCBkb21pbmFudCBpZiBsb29raW5nIGF0IHRoZSBmcmVxdWVuY3kgYXQK Pj4gd2hpY2ggaXQgaXMgYWNjZXNzZWQuIE5vcm1hbGx5IHRoZSBpbnRlcnJ1cHQgY29uZmlndXJh dGlvbiBpcyBkb25lIGF0IGJvb3QKPj4gdGltZSBvciB1cG9uIGluaXRpYWxpc2luZyB0aGUgZGV2 aWNlIChkcml2ZXIpLCBidXQgcmFyZWx5IGR1cmluZyB0aGUgYWN0dWFsCj4+IHJ1biB0aW1lIG9m IGEgc3lzdGVtLiBJbmplY3RpbmcgYW5kIEVPSS1pbmcgaW50ZXJydXB0cyBob3dldmVyIGhhcHBl bnMgbXVjaAo+PiBtb3JlIG9mdGVuLiBBIGdvb2QgZW11bGF0aW9uIGFwcHJvYWNoIHNob3VsZCB0 aHVzIGZvY3VzIG9uIHRyYWNraW5nIHRoZSB2aXJ0dWFsCj4+IGludGVycnVwdCBzdGF0ZSBlZmZp Y2llbnRseSwgYWxsb3dpbmcgcXVpY2sgaGFuZGxpbmcgb2YgaW5jb21pbmcgYW5kIEVPSS1lZAo+ PiBpbnRlcnJ1cHRzLgo+Pgo+PiBUaGUgYWN0dWFsIGludGVycnVwdCBzdGF0ZSB0cmFja2luZyBj YW4gYmUgcXVpdGUgdHJpY2t5IGluIHBhcnRzLiBJbnRlcnJ1cHQKPj4gaW5qZWN0aW9ucyBjYW4g YmUgaW5kZXBlbmRlbnQgZnJvbSB0aGUgZ3Vlc3QgZW50cnkvZXhpdCBwb2ludHMsIGFsc28gTU1J Two+PiBjb25maWd1cmF0aW9uIGFjY2Vzc2VzIGNvdWxkIGJlIHRyaWdnZXJlZCBieSBhbnkgVkNQ VSBhdCBhbnkgcG9pbnQgaW4gdGltZS4KPj4gQ2hhbmdpbmcgaW50ZXJydXB0IENQVSBhZmZpbml0 eSBhZGRzIHRvIHRoZSBjb21wbGljYXRpb24uCj4+IFRoaXMgbGVhZHMgdG8gbWFueSBjb2RlIHBh cnRzIHdoaWNoIGNvdWxkIHJ1biBpbiBwYXJhbGxlbCBhbmQgdGh1cyBjb250YWlucwo+PiBzb21l IHJhY2UgY29uZGl0aW9ucywgc28gcHJvcGVyIGxvY2tpbmcgYmVjb21lcyBrZXkgb2YgYSBnb29k IGRlc2lnbi4KPj4gQnV0IG9uZSBoYXMgdG8gY29uc2lkZXIgdGhhdCBpbnRlcnJ1cHRzIGluIGdl bmVyYWwgY2FuIGJlIGNoYXJhY3RlcmlzZWQKPj4gYXMgYSByYXJlIGV2ZW50IC0gb3RoZXJ3aXNl IGEgZ3Vlc3Qgd291bGQgYmUgYnVzeSBoYW5kbGluZyBpbnRlcnJ1cHRzIGFuZCBjb3VsZAo+PiBu b3QgcHJvY2VzcyBhY3R1YWwgY29tcHV0YXRpb24gdGFza3MuCj4+IFRoYXQncyB3aHkgdGhlIGlu dGVycnVwdCBzdGF0ZSB0cmFja2luZyBzaG91bGQgZm9jdXMgb24gYSBjbGVhciBhbmQgcmFjZS1m cmVlCj4+IGxvY2tpbmcgc2NoZW1lLCB3aXRob3V0IG5lZWRsZXNzbHkgb3B0aW1pc2luZyB0b28g bXVjaCBpbiB0aGlzIHJlc3BlY3QuCj4+IEV4cGVyaWVuY2Ugc2hvd3MgdGhhdCB0aGlzIGNvbXBs aWNhdGVzIHRoZSBjb2RlIGFuZCBsZWFkcyB0byB1bmRldGVjdGVkIGFuZAo+PiBoYXJkLXRvLWRl YnVnIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYWZmZWN0IHRoZSBzdGFiaWxpdHkgb2YgdGhlIHN5 c3RlbSBpbgo+PiBwb3NzaWJseSB1bnRlc3RlZCBjb3JuZXIgY2FzZXMuCj4+Cj4+IFZHSUMgZGVz aWduIHByaW5jaXBsZXMKPj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pgo+PiAjIyMgRGF0YSBz dHJ1Y3R1cmUKPj4KPj4gVGhpcyBWR0lDIGRlc2lnbiBpcyBiYXNlZCBvbiB0aGUgaWRlYSBvZiBo YXZpbmcgb25lIHN0cnVjdHVyZSBwZXIgdmlydHVhbAo+PiBpbnRlcnJ1cHQsIHByb3RlY3RlZCBi eSBpdHMgb3duIGxvY2suIEluIGFkZGl0aW9uIHRoZXJlIGlzIGEgbGlzdCBwZXIgVkNQVSwKPj4g d2hpY2ggcXVldWVzIHRoZSBpbnRlcnJ1cHRzIHdoaWNoIHRoaXMgVkNQVSBzaG91bGQgY29uc2lk ZXIgZm9yIGluamVjdGlvbi4KPj4gT25lIGludGVycnVwdCBjYW4gb25seSBiZSBvbiBvbmUgVkNQ VSBsaXN0IGF0IGFueSBnaXZlbiBwb2ludCBpbiB0aW1lLgo+PiBGb3IgcHJpdmF0ZSBpbnRlcnJ1 cHRzIGFuZCBTUElzIGEgc3RhdGljIGFsbG9jYXRpb24gb2YgdGhpcyBkYXRhIHN0cnVjdHVyZQo+ PiB3b3VsZCBiZSBzdWZmaWNpZW50LCBob3dldmVyIExQSXMgKHRyaWdnZXJlZCBieSBhICh2aXJ0 dWFsKSBJVFMpIGhhdmUgYSB2ZXJ5Cj4+IGR5bmFtaWMgYW5kIHBvc3NpYmx5IHZlcnkgc3BhcnNl IGFsbG9jYXRpb24gc2NoZW1lLCBzbyB3ZSBuZWVkIHRvIGRlYWwgd2l0aAo+PiBkeW5hbWljIGFs bG9jYXRpb24gYW5kIGRlLWFsbG9jYXRpb24gb2YgdGhpcyBzdHJ1Y3QuIFRvIGFjY29tbW9kYXRl IHRoaXMKPj4gdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBsaXN0IGhlYWRlciB0byBsaW5rIGFsbCBM UElzLgo+PiBBbHNvIHRoZSBMUEkgbWFwcGluZyBhbmQgdW5tYXBwaW5nIGNhbiBoYXBwZW4gYXN5 bmNocm9ub3VzbHksIHNvIHdlIG5lZWQgdG8KPj4gcHJvcGVybHkgcmVmLWNvdW50IHRoZSBzdHJ1 Y3R1cmUgKGF0IGxlYXN0IGZvciBMUElzKSwgb3RoZXJ3aXNlIHNvbWUgY29kZSBwYXJ0cwo+PiB3 b3VsZCBwb3RlbnRpYWxseSBlbmQgdXAgd2l0aCByZWZlcmVuY2luZyBhbiBhbHJlYWR5IGZyZWVk IHBvaW50ZXIuCj4+Cj4+IFRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlIGlzIGNhbGxlZCBgc3Ry dWN0IHZnaWNfaXJxYCwgYW5kLCBiZXNpZGUgdGhlCj4+IGV4cGVjdGVkIGludGVycnVwdCBjb25m aWd1cmF0aW9uIGRhdGEsIGNvbnRhaW5zIGF0IGxlYXN0IHRoZSBsb2NrLCBhIGxpc3QKPj4gaGVh ZGVyICh0byBiZSBhYmxlIHRvIGxpbmsgaXQgdG8gYSBWQ1BVKSBhbmQgYSByZWZjb3VudC4gQWxz byBpdCBjb250YWlucwo+PiB0aGUgaW50ZXJydXB0IG51bWJlciAodG8gYWNjb21tb2RhdGUgZm9y IG5vbi1jb250aWd1b3VzIGludGVycnVwdCBhbGxvY2F0aW9ucywKPj4gZm9yIGluc3RhbmNlIGZv ciBMUElzKS4KPj4gQmVzaWRlIHRob3NlIGVzc2VudGlhbCBlbGVtZW50cyBpdCBwcm92ZXMgd29y dGggdG8gc3RvcmUgKGEgcmVmZXJlbmNlIHRvKSB0aGUKPj4gVkNQVSB0aGlzIElSUSBpcyBhc3Nv Y2lhdGVkIHdpdGguIFRoaXMgYWxsb3dzIHRvIGVhc2lseSBmaW5kIHRoZSByZXNwZWN0aXZlCj4+ IFZDUFUgbGlzdC4KPj4KPj4gICAgIHN0cnVjdCB2Z2ljX2lycSB7Cj4+ICAgICAgICAgc3Bpbmxv Y2tfdCBpcnFfbG9jazsgICAgICAgICAgICAvKiBQcm90ZWN0cyB0aGUgY29udGVudCBvZiB0aGUg c3RydWN0ICovCj4+ICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBscGlfbGlzdDsgICAgICAvKiBV c2VkIHRvIGxpbmsgYWxsIExQSXMgdG9nZXRoZXIgKi8KPj4gICAgICAgICBzdHJ1Y3QgbGlzdF9o ZWFkIGFwX2xpc3Q7Cj4+Cj4+ICAgICAgICAgc3RydWN0IHZjcHUgKnZjcHU7ICAgICAgICAgICAg ICAvKiBTR0lzIGFuZCBQUElzOiBUaGUgVkNQVQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogU1BJcyBhbmQgTFBJczogVGhlIFZDUFUgd2hvc2UgYXBfbGlzdAo+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhpcyBpcyBxdWV1 ZWQgb24uCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KPj4K Pj4gICAgICAgICBzdHJ1Y3QgdmNwdSAqdGFyZ2V0X3ZjcHU7ICAgICAgICAvKiBUaGUgVkNQVSB0 aGF0IHRoaXMgaW50ZXJydXB0IHNob3VsZAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqIGJlIHNlbnQgdG8sIGFzIGEgcmVzdWx0IG9mIHRoZQo+PiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRhcmdldHMgcmVnICh2Mikgb3Ig dGhlCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWZmaW5p dHkgcmVnICh2MykuCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICovCj4+Cj4+ICAgICAgICAgdTMyIGludGlkOyAgICAgICAgICAgICAgICAgICAgICAvKiBHdWVz dCB2aXNpYmxlIElOVElEICovCj4+ICAgICAgICAgYm9vbCBsaW5lX2xldmVsOyAgICAgICAgICAg ICAgICAvKiBMZXZlbCBvbmx5ICovCj4+ICAgICAgICAgYm9vbCBwZW5kaW5nX2xhdGNoOyAgICAg ICAgICAgICAvKiBUaGUgcGVuZGluZyBsYXRjaCBzdGF0ZSB1c2VkIHRvCj4+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjYWxjdWxhdGUgdGhlIHBlbmRpbmcgc3Rh dGUgZm9yCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBib3Ro IGxldmVsIGFuZCBlZGdlIHRyaWdnZXJlZCBJUlFzLgo+PiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCj4+Cj4+ICAgICAgICAgYm9vbCBhY3RpdmU7ICAgICAgICAg ICAgICAgICAgICAvKiBub3QgdXNlZCBmb3IgTFBJcyAqLwo+PiAgICAgICAgIGJvb2wgZW5hYmxl ZDsKPj4gICAgICAgICBib29sIGh3OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpZWQgdG8g SFcgSVJRICovCj4+ICAgICAgICAgc3RydWN0IGtyZWYgcmVmY291bnQ7ICAgICAgICAgICAvKiBV c2VkIGZvciBMUElzICovCj4+ICAgICAgICAgdTMyIGh3aW50aWQ7ICAgICAgICAgICAgICAgICAg ICAvKiBIVyBJTlRJRCBudW1iZXIgKi8KPj4gICAgICAgICB1bmlvbiB7Cj4+ICAgICAgICAgICAg IHU4IHRhcmdldHM7ICAgICAgICAgICAgICAgICAgICAgLyogR0lDdjIgdGFyZ2V0IFZDUFVzIG1h c2sgKi8KPj4gICAgICAgICAgICAgdTMyIG1waWRyOyAgICAgICAgICAgICAgICAgICAgICAvKiBH SUN2MyB0YXJnZXQgVkNQVSAqLwo+PiAgICAgICAgIH07Cj4+ICAgICAgICAgdTggc291cmNlOyAg ICAgICAgICAgICAgICAgICAgICAvKiBHSUN2MiBTR0lzIG9ubHkgKi8KPj4gICAgICAgICB1OCBw cmlvcml0eTsKPj4gICAgICAgICBlbnVtIHZnaWNfaXJxX2NvbmZpZyBjb25maWc7ICAgIC8qIExl dmVsIG9yIGVkZ2UgKi8KPj4gICAgIH07Cj4gCj4gVGhlIHJlZmNvdW50IGFuZCBpcnFfbG9jayBh cmUgZ29vZCBpZGVhcywgbGV0J3MgaGF2ZSB0aGVtLgo+IAo+IAo+PiAjIyMgVkNQVSBsaXN0IGhh bmRsaW5nCj4+Cj4+IEluaXRpYWxseSBhIHZpcnR1YWwgaW50ZXJydXB0IGp1c3QgbGl2ZXMgb24g aXRzIG93bi4gR3Vlc3QgTU1JTyBhY2Nlc3NlcyB0bwo+PiB0aGUgZGlzdHJpYnV0b3Igd2lsbCBj aGFuZ2UgdGhlIHN0YXRlIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLgo+PiBXaGVuIGFu IGludGVycnVwdCBpcyBhY3R1YWxseSBtYWRlIHBlbmRpbmcgKGVpdGhlciBieSBhbiBhc3NvY2lh dGVkIGhhcmR3YXJlCj4+IElSUSBmaXJpbmcgb3IgYnkgYSB2aXJ0dWFsIElSUSB0cmlnZ2VyKSwg dGhlIGB2Z2ljX2lycWAgc3RydWN0dXJlIHdpbGwgYmUKPj4gbGlua2VkIHRvIHRoZSBjdXJyZW50 IHRhcmdldCBWQ1BVLiBUaGUgYHZjcHVgIG1lbWJlciBpbiB0aGUgc3RydWN0dXJlIHdpbGwKPj4g YmUgc2V0IHRvIHRoaXMgVkNQVS4gQW55IGFmZmluaXR5IGNoYW5nZSBhZnRlciB0aGlzIHBvaW50 IHdpbGwgbm90IGFmZmVjdAo+PiB0aGUgY3VycmVudCB0YXJnZXQgVkNQVSBhbnltb3JlLCBpdCBq dXN0IHVwZGF0ZXMgdGhlIGB0YXJnZXRfdnB1YCBmaWVsZCBpbgo+PiB0aGUgc3RydWN0dXJlLCB3 aGljaCB3aWxsIGJlIGNvbnNpZGVyZWQgb24gdGhlIG5leHQgaW5qZWN0aW9uLgo+PiBUaGlzIHBl ci1WQ1BVIGxpc3QgaXMgY2FsbGVkIHRoZSBgYXBfbGlzdGAsIHNpbmNlIGl0IGhvbGRzIGludGVy cnVwdHMgd2hpY2gKPj4gYXJlIGluIGEgcGVuZGluZyBhbmQvb3IgYWN0aXZlIHN0YXRlLgo+IAo+ IFRoZSB0d28gdmNwdSBsaXN0cyBzb3VuZCBsaWtlIGEgZ29vZCBpZGVhIHRvbywgYW5kIENocmlz dG9mZmVyJ3MKPiBleHBsYW5hdGlvbiBoZWxwZWQuIEl0IGlzIGFjdHVhbGx5IHNpbWlsYXIgdG8g d2hhdCB3ZSBkbyBpbiBYZW4gYWxyZWFkeS4KPiBJIGd1ZXNzIGEgdmdpYyBpcyBhbHdheXMgYSB2 Z2ljIDotKQoKTW1taCwgSSBkb24ndCBnZXQgd2hlcmUgeW91IHNlZSB0d28gVkNQVSAqbGlzdHMq IGhlcmUuIFRoZXJlIGFyZSB0d28KVkNQVSAqZmllbGRzKiBpbiB0aGUgc3RydWN0dXJlLCBidXQg dGhleSBhcmUgY29tcGxldGVseSBkaWZmZXJlbnQgZnJvbQp0aGUgbHJfcGVuZGluZyBhbmQgbHJf cXVldWUgbGlzdHMgaW4gWGVuLgpJbiBmYWN0IEkgYmVsaWV2ZSB0aGF0IHRoZXNlICp0d28qIGxp c3RzIGluIFhlbiBhcmUgb25lIG9mIHRoZSBtYWpvcgpwYWluIHBvaW50cyBpbiB0aGUgY3VycmVu dCBWR0lDLgoKPiBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgaXJxIGlzIG1pZ3JhdGVkIHdoaWxlIHN0 aWxsIGluIGFuIExSIG9uIGFub3RoZXIKPiBwY3B1PyBXaGVuL0hvdyBpcyB0aGUgcGh5c2ljYWwg YWZmaW5pdHkgY2hhbmdlZD8KClBlciB0aGUgYXJjaGl0ZWN0dXJlIHRoZXJlIGlzIG5vdGhpbmcg bGlrZSBhbiBJUlEgIm1pZ3JhdGlvbiIuIFRoZXJlIGlzCnRoZSBDUFUgYWZmaW5pdHksIHdoaWNo IGRldGVybWluZXMgdG8gd2hpY2ggY29yZSB0aGlzIElSUSBpcyBmb3J3YXJkZWQKKndoZW4gaXQg YmVjb21lcyBwZW5kaW5nKi4gT25jZSBpdCBoYXMgYmVlbiBhY3RpdmF0ZWQsIGl0IHN0YXlzIGF0 IHRoaXMKY29yZSwgZXZlbiBpZiB5b3UgY2hhbmdlIHRoZSBJVEFSR0VUU1Igb3IgSVJPVVRFUiBy ZWdpc3RlciBhZnRlcndhcmRzLgpUaGlzIGlzIGEgYmVuaWduIHJhY2UsIHlvdSBqdXN0IGNhbWUg dG9vIGxhdGUgdG8gY2hhbmdlIHRoZSBhZmZpbml0eS4KCkFuZCBhdCB0aGUgbW9tZW50IHdlIGRv bid0IHN5bmNocm9uaXplIHRoZSBwaHlzaWNhbCBhZmZpbml0eSwgc2ltcGx5CmJlY2F1c2UgbW9z dCBJUlFzIGluIEtWTSB3b3JsZCB3ZXJlIHZpcnR1YWwgc28gZmFyLiBOb3cgdGhpcyBpcyBnb2lu ZyB0bwpjaGFuZ2UsIHNvIEkgZ3Vlc3Mgd2UgaGF2ZSB0byB0YWtlIGEgbG9vayBhdCB0aGlzIGF0 IHNvbWUgcG9pbnQuIEJ1dCBJCmNvbnNpZGVyIHRoaXMgYW4gb3B0aW1pemF0aW9uLCBhbmQgd291 bGQgcHJlZmVyIGNvcnJlY3RuZXNzIGFuZApzdGFiaWxpdHkgb3ZlciBwZXJmb3JtYW5jZS4KCj4g V2hhdCBoYXBwZW5zIHdoZW4gYSBuZXcgaXJxIGlzIHN1cHBvc2VkIHRvIGJlIGluamVjdGVkIHdo ZW4gdGFyZ2V0X3ZjcHUgaXMKPiBhbHJlYWR5IHNldD8gRG9lcyB0YXJnZXRfdmNwdSBzaW1wbHkg Z2V0IG92ZXJ3cml0dGVuPwoKdGFyZ2V0X3ZjcHUgaXMgc2ltcGx5IGEgY29uZmlndXJhdGlvbiBz dG9yYWdlLiBBbnlvbmUgY2FuIHVwZGF0ZSB0aGlzCmZpZWxkIGF0IGFueSB0aW1lLCB3aXRob3V0 IGFueSBzaWRlIGVmZmVjdHMuCldoZW4gYW4gSVJRIGlzIGdvaW5nIHRvIGJlIGluamVjdGVkLCB0 aGUgY3VycmVudCB2YWx1ZSBvZiB0YXJnZXRfdmNwdSBpcwp3cml0dGVuICpvbmNlKiB0byB0aGUg InZjcHUiIGZpZWxkLCB3aGljaCBmcm9tIG5vdyBvbiBkZXRlcm1pbmVzIHRoZQpyZXNwb25zaWJs ZSBWQ1BVIGZvciB0aGUgd2hvbGUgaW50ZXJydXB0IGxpZmUgY3ljbGUgKHF1ZXVlaW5nIG9uIGxp c3RzLApwdXR0aW5nIGludG8gTFJzLCAuLi4pLiBUaGlzIGZpZWxkIGNhbm5vdCBjaGFuZ2UgYW55 bW9yZSB1bnRpbCB0aGUgSVJRCmlzIEVPSWVkLgoKPiBXaGF0IGhhcHBlbnMgd2hlbiBhIHZjcHUg aXMgbWlncmF0ZWQgZnJvbSBwY3B1MSB0byBwY3B1Mj8KCk5vdGhpbmcgc3BlY3RhY3VsYXIsIEkg Z3Vlc3MuIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHBoeXNpY2FsIElSUQphZmZpbml0eS4gQW5k IHNpbmNlIHdlIGNsZWFyIGFsbCBMUnMgb24gZXhpdCBhbmQgKHJlLSlwb3B1bGF0ZSB0aGVtIG9u CmVudHJ5LCBkb2luZyB0aGlzIG9uIHR3byBkaWZmZXJlbnQgQ1BVcyBpcyBhIHRvdGFsIG5vLWJy YWluZXIuCgo+PiAjIyMgVmlydHVhbCBJUlEgcmVmZXJlbmNlcwo+Pgo+PiBUaGVyZSBpcyBhIGZ1 bmN0aW9uIGB2Z2ljX2dldF9pcnEoKWAgd2hpY2ggcmV0dXJucyBhIHJlZmVyZW5jZSB0byBhIHZp cnR1YWwgSVJRCj4+IGdpdmVuIGl0cyBudW1iZXIuCj4+IEZvciBwcml2YXRlIElSUXMgYW5kIFNQ SXMgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGlzIGp1c3QgaW5kZXhlcyBhIHN0YXRpYyBhcnJheS4K Pj4gRm9yIExQSXMgKHdoaWNoIGFyZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXQgcnVuIHRpbWUp IHRoaXMgaXMgZXhwZWN0ZWQgdG8KPj4gaXRlcmF0ZSBhIGRhdGEgc3RydWN0dXJlIChsaWtlIGEg bGlua2VkIGxpc3QpIHRvIGZpbmQgdGhlIHJpZ2h0IHN0cnVjdHVyZS4KPj4gSW4gYW55IGNhc2Ug YSBjYWxsIHRvIGB2Z2ljX2dldF9pcnFgIHdpbGwgaW5jcmVhc2UgYSByZWZjb3VudCwgd2hpY2gg d2lsbAo+PiBwcmV2ZW50IExQSXMgZnJvbSBiZWluZyBkZS1hbGxvY2F0ZWQgd2hpbGUgYW5vdGhl ciBwYXJ0IG9mIHRoZSBWR0lDIGlzIHN0aWxsCj4+IGhvbGRpbmcgYSByZWZlcmVuY2UuIFRodXMg YW55IGNhbGxlciB0byBgdmdpY19nZXRfaXJxYCBzaGFsbCBjYWxsCj4+IGB2Z2ljX3B1dF9pcnEo KWAgYWZ0ZXIgaXQgaXMgZG9uZSB3aXRoIGhhbmRsaW5nIHRoaXMgaW50ZXJydXB0Lgo+PiBBbiBl eGNlcHRpb24gd291bGQgYmUgaWYgdGhlIHZpcnR1YWwgSVJRIGlzIGV2ZW50dWFsbHkgaW5qZWN0 ZWQgaW50byBhIFZDUFUuIEluCj4+IHRoaXMgY2FzZSB0aGUgVkNQVSBob2xkcyB0aGF0IHJlZmVy ZW5jZSBhbmQgaXQgaXMga2VwdCBhcyBsb25nIGFzIHRoZSBndWVzdAo+PiBzZWVzIHRoaXMgdmly dHVhbCBJUlEuIFRoZSByZWZjb3VudCB3b3VsZCBvbmx5IGJlIGRlY3JlYXNlZCB1cG9uIHRoZSBJ UlEgaGF2aW5nCj4+IGJlZW4gRU9JZWQgYnkgdGhlIGd1ZXN0IGFuZCBpdCBoYXZpbmcgYmVlbiBy ZW1vdmVkIGZyb20gdGhlIFZDUFUgbGlzdC4KPiAKPiBJIHVuZGVyc3RhbmQgdGhlIGlkZWEgYmVo aW5kIGEgcmVmY291bnQgYW5kIHNvdW5kcyBsaWtlIGEgZ29vZCB0aGluZyB0bwo+IGhhdmUuCj4g Cj4gTGV0IG1lIGFzayB5b3UgYSBjb3VwbGUgb2YgcXVlc3Rpb25zLiBIb3cgZG9lcyBpdCBoZWxw IHdpdGggdGhlIGlzc3VlCj4gdGhhdCBhbiBMUEkgY291bGQgYmUgZGlzY2FyZGVkIGFuZCByZW1h cHBlZCAoTUFQVEkpIGZyb20gYW5vdGhlcgo+IHBjcHUgd2hpbGUgaXQgY291bGQgc3RpbGwgYmUg aW4gYW4gTFI/CgpPbiBESVNDQVJEIHdlIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IG9mIG1hcHBl ZCBMUElzLCBidXQgZG9uJ3QgZnJlZSB0aGUKc3RydWN0dXJlLiBTbyBhbnkgdmdpY19nZXRfbHBp KGxwaV9ucikgd29uJ3QgZmluZCBpdCBhbnltb3JlLiBCdXQgc2luY2UKdGhlIGludGVycnVwdCBp cyBpbiBhbiBMUiwgdGhlIFZDUFUncyBhcF9saXN0IHN0aWxsIHJlZmVyZW5jZXMgdGhlCnZnaWNf aXJxIHN0cnVjdHVyZSwgc28gd2UgY2FuIGRvIHRoZSB3aG9sZSBJUlEgbGlmZSBjeWNsZSBtYW5h Z2VtZW50Cmp1c3QgYXMgbm9ybWFsIChiZWNhdXNlIGJlaW5nIGEgbGlzdCBtZW1iZXIgaXMgd2hh dCBjb3VudHMgd2hlbiBpdCBjb21lcwp0byBhICJsaWZlIiBpbnRlcnJ1cHQpLgpPbmNlIHRoaXMg TFBJIGlzIEVPSWVkLCB3ZSByZW1vdmUgaXQgZnJvbSB0aGUgVkNQVSBsaXN0LCB3aGljaCBkZWNy ZWFzZXMKdGhlIHJlZmNvdW50IGFuZCBtb3N0IHByb2JhYmx5IHdpbGwgZnJlZSB0aGUgbWVtb3J5 LCBzaW5jZSB0aGUgdmFsdWUgaGFzCmJlY29tZSB6ZXJvIGJ5IHRoZW4uIE5vcm1hbGx5LCB3aXRo b3V0IHVubWFwcGluZyBpdCBiZWZvcmUsIHRoZQpyZWZlcmVuY2UgaGVsZCBieSB0aGUgSVRTIGxp c3Qgd291bGQgbWFrZSBzdXJlIHRoZSByZWZjb3VudCBzdGF5cwpncmVhdGVyIHRoYW4gMC4KCk5v dyB3aGVuIHRoZXJlIGlzIGEgTUFQVEkgdG8gdGhlIHNhbWUgTFBJIG51bWJlciBtZWFud2hpbGUs IHRoaXMgd2lsbAphbGxvY2F0ZSBhIG5ldyBzdHJ1Y3R1cmUgKHRoaXMgaXMgYSBuZXcgaW50ZXJy dXB0ISkgYW5kIGVudGVycyB0aGlzIGludG8KdGhlIElUUyBsaXN0LiBTbyBhbnlvbmUgYXNraW5n IGZvciB0aGlzIG5ldyBMUEkgKm51bWJlciogd2lsbCBnZXQgdGhlCnJlZmVyZW5jZSB0byB0aGUg bmV3IElSUS4gVGhpbms6IGRlbGV0aW5nIGEgZmlsZSBhbmQgY3JlYXRpbmcgYSBuZXcgb25lCndp dGggdGhlIHNhbWUgbmFtZSBvbiBhIFVOSVggc3lzdGVtLCBhbnkgb2xkIHVzZXJzIG9mIGFuIGFs cmVhZHkgb3BlbmVkCmZpbGUgZGVzY3JpcHRvciB3aWxsIHN0aWxsIHVzZSB0aGUgZGVsZXRlZCBm aWxlLCBidXQgYW4gb3BlbigpIHdpbGwKcmV0dXJuIGEgaGFuZGxlIHRvIHRoZSBuZXcgZmlsZS4K Cj4gV2hhdCBoYXBwZW5zIGlmIHRoZSBNQVBUSSBpcwo+IGlzc3VlZCBiZWZvcmUgYW5kIHdoYXQg aGFwcGVucyBpZiBpdCBpcyBpc3NlZCBhZnRlciB0aGUgaXJxIGhhcyBiZWVuCj4gRU9JZCBhbmQg Y2xlYXJlZCBmcm9tIHRoZSBMUiBhbmQgYXBfbGlzdD8KCkkgYmVsaWV2ZSB0aGUgYWJvdmUgZGVz Y3JpcHRpb24gc2hvdWxkIGFuc3dlciB0aGlzLiBJZiBub3QsIHBsZWFzZSBsZXQKbWUga25vdy4K Cj4gSSBhbSByZWZlcnJpbmcgdG8gdGhlIGNhc2UgdGhhdCB3ZSBjdXJyZW50bHkgaGFuZGxpbmcg d2l0aCB0aGUKPiBHSUNfSVJRX0dVRVNUX1BSSVNUSU5FX0xQSSBmbGFnIGluIFhlbi4KCi4uLiB3 aGljaCB3YXMgYSBoYWNrIG9mIG1pbmUgdG8gd29yayBhcm91bmQgdGhlIG1pc3NpbmcgcmVmY291 bnQgOy0pCgo+PiAjIyMgTG9ja2luZwo+Pgo+PiBUbyBrZWVwIHRoZSBgdmdpY19pcnFgIHN0cnVj dHVyZSBjb25zaXN0ZW50IGFuZCB0byBhdm9pZCByYWNlcyBiZXR3ZWVuCj4+IGRpZmZlcmVudCBw YXJ0cyBvZiB0aGUgVkdJQywgbG9ja2luZyBpcyBlc3NlbnRpYWwgd2hlbmV2ZXIgYWNjZXNzaW5n IGEgbWVtYmVyCj4+IG9mIHRoaXMgc3RydWN0dXJlLiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoaXMg bG9jayBpcyBhbG1vc3QgbmV2ZXIgY29udGVuZGVkLAo+PiBhbHNvIGhlbGQgb25seSBmb3IgYnJp ZWYgcGVyaW9kcyBvZiB0aW1lLCBzbyB0aGlzIGlzIGNvbnNpZGVyZWQgY2hlYXAuCj4+IFRvIGtl ZXAgdGhlIGNvZGUgY2xlYW4gYW5kIGF2b2lkIG5hc3R5IGNvcm5lciBjYXNlcywgdGhlcmUgYXJl IG5vIHRyaWNrcyBvbgo+PiB0cnlpbmcgdG8gYmUgbG9ja2xlc3MgaGVyZS4KPj4gSWYgZm9yIGFu eSByZWFzb24gdGhlIGNvZGUgbmVlZHMgdG8gaG9sZCB0aGUgbG9ja3MgZm9yIHR3byB2aXJ0dWFs IElSUXMsIHRoZQo+PiBvbmUgd2l0aCB0aGUgbG93ZXIgSVJRIG51bWJlciBpcyB0byBiZSB0YWtl biBmaXJzdCwgdG8gYXZvaWQgZGVhZGxvY2tzLgo+Pgo+PiBBbm90aGVyIGxvY2sgdG8gY29uc2lk ZXIgaXMgdGhlIFZDUFUgbG9jaywgd2hpY2ggb24gdGhlIGZpcnN0IGdsYW5jZSBwcm90ZWN0cwo+ PiB0aGUgdmlydHVhbCBDUFUncyBsaXN0IHN0cnVjdHVyZSwgYnV0IGFsc28gc3luY2hyb25pc2Vz IGFkZGl0aW9ucyBhbmQgcmVtb3ZhbHMKPj4gb2YgSVJRcyBmcm9tIGEgVkNQVS4gVG8gYWRkIGFu IElSUSB0byBhIGxpc3QsIGJvdGggdGhlIFZDUFUgYW5kIHRoZSBwZXItSVJRCj4+IGxvY2sgbmVl ZCB0byBiZSBoZWxkLiBUbyBhdm9pZCBkZWFkbG9ja3MsIHRoZXJlIGlzIGEgc3RyaWN0IGxvY2tp bmcgb3JkZXI6Cj4+PiBUaGUgVkNQVSBsb2NrIG5lZWRzIHRvIGJlIHRha2VuIGZpcnN0LCB0aGUg cGVyLUlSUSBsb2NrIGFmdGVyIHRoaXMuCj4gCj4gU291bmRzIGdvb2QgKGl0IGlzIGJhc2ljYWxs eSB3aGF0IEkgc3VnZ2VzdGVkIHRvIGRvIGluIHRoZSBwYXN0KS4KPiAKPiAKPj4gU29tZSBvcGVy YXRpb25zIChsaWtlIG1pZ3JhdGluZyBJUlFzIGJldHdlZW4gdHdvIFZDUFVzKSByZXF1aXJlIHR3 byBWQ1BVCj4+IGxvY2tzIHRvIGJlIGhlbGQsIGluIHRoaXMgY2FzZSB0aGUgbG9jayBmb3IgdGhl IFZDUFUgd2l0aCB0aGUgc21hbGxlciBWQ1BVIElECj4+IGlzIHRvIGJlIHRha2VuIGZpcnN0Lgo+ Pgo+PiBUaGVyZSBhcmUgb2NjYXNpb25zIHdoZXJlIHRoZSBsb2NraW5nIG9yZGVyIChWQ1BVIGZp cnN0KSBpcyBoYXJkIHRvIG9ic2VydmUsCj4+IGJlY2F1c2UgdGhlIHBlci1JUlEgbG9jayBpcyBh bHJlYWR5IGhlbGQsIGJ1dCB0aGlzIElSUSBuZWVkcyB0byBnbyBvbiBhIFZDUFUKPj4gbGlzdC4g SW4gdGhpcyBjYXNlIHRoZSBJUlEgbG9jayBuZWVkcyB0byBiZSBkcm9wcGVkLCB0aGUgcmVzcGVj dGl2ZSBWQ1BVCj4+IGxvY2sgc2hvdWxkIGJlIHRha2VuLCB0aGVuIHRoZSBwZXItSVJRIGxvY2sg bmVlZHMgdG8gYmUgcmUtdGFrZW4uCj4+IEFmdGVyIGJvdGggdGhlIGxvY2tzIGFyZSBoZWxkLCB3 ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjb25kaXRpb25zIHdoaWNoCj4+IG9yaWdpbmFsbHkgbWFu ZGF0ZWQgdGhlIGxpc3QgYWRkaXRpb24gKG9yIHJlbW92YWwpIGFyZSBzdGlsbCB0cnVlLiBUaGlz IGlzCj4+IG5lZWRlZCBiZWNhdXNlIHRoZSBJUlEgbG9jayBjb3VsZCBoYXZlIGJlZW4gdGFrZW4g YnkgYW5vdGhlciBlbnRpdHkgbWVhbndoaWxlCj4+IGFuZCB0aGUgc3RhdGUgb2YgdGhpcyBpbnRl cnJ1cHQgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQuIEV4YW1wbGVzIGFyZSBpZiB0aGUKPj4gaW50 ZXJydXB0IGlzIG5vIGxvbmdlciBwZW5kaW5nLCBnb3QgZGlzYWJsZWQgb3IgY2hhbmdlZCB0aGUg Q1BVIGFmZmluaXR5Lgo+PiBTb21lIG9mIHRob3NlIGNoYW5nZXMgbWlnaHQgcmVuZGVyIHRvIGN1 cnJlbnQgYWN0aW9uIG9ic29sZXRlIChubyBsb25nZXIKPj4gcGVuZGluZyksIG90aGVyIHdpbGwg bGVhZCB0byBhIHJldHJ5IG9mIHRoZSByZS1sb2NraW5nIHNjaGVtZSBkZXNjcmliZWQgYWJvdmUu Cj4+IFRoaXMgcmUtbG9ja2luZyBzY2hlbWUgc2hhbGwgYmUgaW1wbGVtZW50ZWQgaW4gYSB3ZWxs LWRvY3VtZW50ZWQgZnVuY3Rpb24uCj4+Cj4+ICMjIyBMZXZlbCBhbmQgZWRnZSB0cmlnZ2VyZWQg aW50ZXJydXB0cwo+Pgo+PiBUaGUgR0lDIGtub3dzIGFib3V0IHR3byBraW5kcyBvZiBzaWduYWxs aW5nIGludGVycnVwdHM6Cj4+Cj4+IC0gRWRnZSB0cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgdHJp Z2dlcmVkIGJ5IGEgZGV2aWNlIG9uY2UsIHRoZWlyIGxpZmUgY3ljbGUKPj4gZW5kcyB3aGVuIHRo ZSBndWVzdCBoYXMgRU9JZWQgdGhlbSwgYXQgd2hpY2ggcG9pbnQgd2UgcmVtb3ZlIHRoZSBwZW5k aW5nIHN0YXRlLAo+PiBjbGVhciB0aGUgTFIgYW5kIHJldHVybiB0aGUgYHZnaWNfaXJxYCBzdHJ1 Y3R1cmUgdG8gYSBxdWllc2NlbnQgc3RhdGUuCj4gCj4gSSBhc3N1bWUgdGhhdCAiYXQgd2hpY2gg cG9pbnQiIG1lYW5zIGF0IHRoZSBuZXh0IHRyYXAgaW50byB0aGUKPiBoeXBlcnZpc29yPyBXZSBh cmUgbm90IHRyYXBwaW5nIG9uIHB1cnBvc2UgZ3Vlc3QgRU9JcywgYXJlIHdlPwoKQ29ycmVjdC4g VGhpcyBtZWFucyBvdXIgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBub3QgdXAtdG8tZGF0ZSBhbGwgb2Yg dGhlCml0bWUuIEJ1dCBJIGJlbGlldmUgdGhpcyBvbmx5IG1hdHRlcnMgZm9yIHRoZSBJU1BFTkRJ TkdSL0lTQUNUSVZFUgpyZWdpc3RlciBhY2Nlc3Nlcywgd2hpY2ggYXJlIGhhbmRsZWQgaW4gYSBz cGVjaWFsIHdheSB0byBmaXggdGhpcy4KQW5kIHRoaXMgaXMgbm90aGluZyBpbXBsZW1lbnRhdGlv biBzcGVjaWZpYywgYnV0IGEgZ2VuZXJhbCBmZWF0dXJlIG9mCnRoZSBHSUMgZW11bGF0aW9uIGFy Y2hpdGVjdHVyZS4KCj4gSXMgaXQgcG9zc2libGUgdG8gaGF2ZSBhY3RpdmUgYW5kIHBlbmRpbmcg aXJxcyBpbiBhbiBMUj8gSG93IGlzIHRoYXQKPiBoYW5kbGVkPwoKU3VyZS4gVGhpcyBoYXBwZW5z IHdoZW4gdGhlcmUgaXMgYSBuZXcgaW50ZXJydXB0IHRyaWdnZXJlZCB3aGlsZSB0aGUgb2xkCm9u ZSBoYXMgYmVlbiBhY3RpdmF0ZWQsIGJ1dCBub3QgRU9JZWQgKHlldCkuClRoaXMgYWN0dWFsbHkg aGFwcGVucyBpbiB0aGUgZm9sbG93aW5nIHNjZW5hcmlvOgotIElSUSB0cmlnZ2VycyBhbmQgZ2V0 cyBpbmplY3RlZCBhcyAicGVuZGluZyIuCi0gR3Vlc3QgYWNrcyB2SVJRIGJ5IHJlYWRpbmcgdmly dHVhbCBJQ0NfSUFSLCB0aGUgTFIgc3RhdGUgY2hhbmdlcyBmcm9tCnBlbmRpbmcgdG8gYWN0aXZl LgotIER1cmluZyB0aGUgZnVydGhlciBpbnRlcnJ1cHQgaGFuZGxpbmcgdGhlIGd1ZXN0IHRyaWdn ZXJzIGFuIE1NSU8gZmF1bHQKKGJlY2F1c2UgaXQgd2FudHMgdG8gcmVhZCBkYXRhIGZyb20gdGhl IGRldmljZSBvciBleHBsaWNpdGx5IGxvd2VycyB0aGUKSVJRIGxpbmUgd2l0aCBhIHJlZ2lzdGVy IGFjY2VzcykuIFRoZSBDUFUgZXhpc3RzLCBhbmQgdGhlICJhY3RpdmUtb25seSIKc3RhdGUgYmVj b21lcyB2aXNpYmxlIHRvIHRoZSBoeXBlcnZpc29yLgotIFRoZSBIViBzeW5jIGJhY2sgdGhlIExS IHRvIG91ciBzdHJ1Y3QsIGNsZWFyaW5nIHRoZSBwZW5kaW5nIGxhdGNoLCBidXQKc2V0dGluZyB0 aGUgYWN0aXZlIGZpZWxkLiBUaGUgc3RydWN0IGlzIGluIHN5bmMgbm93LgotIEZvciB3aGF0ZXZl ciByZWFzb24gdGhlIGludGVycnVwdCBmaXJlcyAqYWdhaW4qIHdoaWxlIHRoZSBIViBpcyBzdGls bAppbiBjaGFyZ2UuIFRoaXMgc2V0cyB0aGUgcGVuZGluZyBzdGF0ZSBpbiBvdXIgc3RydWN0Lgot IFVwb24gZ3Vlc3QgZW50cnkgd2Ugc3luYyBib3RoIHRoZSBhY3RpdmUgYW5kIHBlbmRpbmcgYml0 IHRvIHRoZSBMUiwKbWFraW5nIGl0IGJvdGggYWN0aXZlICphbmQqIHBlbmRpbmcuCi0gVGhlIGd1 ZXN0J3MgSVJRIGhhbmRsZXIgY29udGludWVzIHRvIGhhbmRsZSB0aGUgSVJRLCB0aGUgYWN0aXZl IGJpdAoic2hhZG93cyIgdGhlIHBlbmRpbmcgY29uZGl0aW9uIGZvciBub3cuIEV2ZW50dWFsbHkg IHRoZSBoYW5kbGVyIHJldGlyZXMKdGhlIElSUSBieSBFT0lpbmcgaXQsIGRyb3BwaW5nIHRoZSBh Y3RpdmUgc3RhdGUgKGluIHRoZSBMUikuCi0gTm93IGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgZHJv cCB0aGUgdmlydHVhbCBJUlEgaXMgZmlyaW5nIGFnYWluLCBzaW5jZQppdCBpcyBwZW5kaW5nLCBi dXQgbm90IGJsb2NrZWQgYnkgdGhlIGFjdGl2ZSBzdGF0ZSBhbnltb3JlLgotIFRoZSBndWVzdCdz IElSUSBoYW5kbGVyIGlzIGludm9rZWQgYWdhaW4gYW5kIGhhbmRsZXMgdGhpcyBzZWNvbmQgSVJR CmFzIG5vcm1hbC4KCkRvZXMgdGhhdCBtYWtlIHNlbnNlPwpUaGlzIGlzIGEgYml0IHNpbXBsaWZp ZWQgZGVzY3JpcHRpb24gZm9yIHRoZSBzYWtlIG9mIGNsYXJpdHksIGFzIHRoZXJlCmFyZSBjb3Ju ZXIgY2FzZXMgd2l0aCBwcmlvcml0eSBkcm9wcywgZm9yIGluc3RhbmNlLgoKPj4gLSBMZXZlbCB0 cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgdHJpZ2dlcmVkIHdoZW4gYSBkZXZpY2UgcmFpc2VzIGl0 cyBpbnRlcnJ1cHQKPj4gbGluZSwgdGhleSBzdGF5IHBlbmRpbmcgYXMgbG9uZyBhcyB0aGlzIGxp bmUgaXMgaGVsZCBoaWdoLiBBdCBzb21lIHBvaW50IHRoZQo+PiBkcml2ZXIgaW4gdGhlIGd1ZXN0 IGlzIGV4cGVjdGVkIHRvIHByb2dyYW0gdGhlIGRldmljZSB0byBleHBsaWNpdGx5IG9yCj4+IGlt cGxpY2l0bHkgbG93ZXIgdGhpcyBpbnRlcnJ1cHQgbGluZS4gVGhhdCBtZWFucyB0aGF0IHdlIGhh dmUgdG8gc3RvcmUgdGhlCj4+IHN0YXRlIG9mIHRoZSB2aXJ0dWFsIGludGVycnVwdCBsaW5lLCB3 aGljaCBpcyBvbmx5IGNvbnRyb2xsZWQgYnkgdGhlICh2aXJ0dWFsKQo+PiBkZXZpY2UuIFRoaXMg aXMgZG9uZSBpbiB0aGUgYGxpbmVfbGV2ZWxgIG1lbWJlciBvZiBgc3RydWN0IHZnaWNfaXJxYC4K Pj4KPj4gVG8gYXNzZXJ0IHRoZSBpbnRlcnJ1cHQgY29uZGl0aW9uLCBhICh2aXJ0dWFsKSBkZXZp Y2UgY2FsbHMgYSBmdW5jdGlvbiBleHBvcnRlZAo+PiBieSB0aGUgVkdJQywgd2hpY2ggYWxsb3dz IHRvIHJhaXNlIG9yIGxvd2VyIGFuIGludGVycnVwdCBsaW5lLiBMb3dlcmluZyB0aGUKPj4gbGlu ZSBmb3IgYW4gZWRnZSB0cmlnZ2VyZWQgSVJRIGlzIGlnbm9yZWQgKGFuZCBzbyBpcyBvcHRpb25h bCkuIFJhaXNpbmcgdGhlCj4+IGxpbmUgYXNzZXJ0cyB0aGUgcGVuZGluZyBzdGF0ZSBhbmQgcG90 ZW50aWFsbHkgaW5qZWN0cyB0aGlzIHZpcnR1YWwgSVJRLiBBbnkKPj4gc3Vic2VxdWVudCAicmFp c2luZyIgY2FsbCBtaWdodCBpbmplY3QgYW5vdGhlciBJUlEsIGlmIHRoZSBwcmV2aW91cyBoYXMg YXQKPj4gbGVhc3QgYmVlbiBhY3RpdmF0ZWQgYnkgdGhlIGd1ZXN0IGFscmVhZHksIG90aGVyd2lz ZSBpcyBpZ25vcmVkLgo+IAo+IFRoZSBpcnEgYmVjb21lcyBhY3RpdmUgYW5kIHBlbmRpbmcgaW4g dGhlIExSPwoKWWVzLCBzZWUgYWJvdmUuCgo+PiBGb3IgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVw dHMgdGhpcyBmdW5jdGlvbiBzdG9yZXMgdGhlIG5ldyBzdGF0ZSBpbnRvIHRoZQo+PiBgbGluZV9s ZXZlbGAgdmFyaWFibGUsIHBvdGVudGlhbGx5IGluamVjdGluZyB0aGUgaW50ZXJydXB0IGlmIHRo YXQgbGluZQo+PiBjaGFuZ2VzIGZyb20gZmFsc2UgdG8gdHJ1ZS4gSWYgdGhlIGxpbmUgaXMgbG93 ZXJlZCBiZWZvcmUgdGhlIGd1ZXN0IGhhcwo+PiBzZWVuIGl0LCB0aGlzIHBhcnRpY3VsYXIgaW50 ZXJydXB0IGluc3RhbmNlIHdpbGwgYmUgZGlzY2FyZGVkLiBTdWNjZXNzaXZlCj4+ICJyYWlzaW5n IiBjYWxscyB3aWxsIG5vdCBsZWFkIHRvIG11bHRpcGxlIGludGVycnVwdHMgaWYgdGhlIGxpbmUg aGFzIG5vdAo+PiBiZWVuIGxvd2VyZWQgaW4gYmV0d2Vlbi4KPiAKPiBUaGlzIGlzIHNvbWV0aGlu ZyBYZW4gbmVlZHMgdG9vLgo+IAo+IAo+PiAjIyMgU29mdHdhcmUgdHJpZ2dlcmVkIGludGVycnVw dHMKPj4KPj4gQmVzaWRlIHRoZSBuYXR1cmFsbHkgc29mdHdhcmUgdHJpZ2dlcmVkIGludGVyLXBy b2Nlc3Nvci1pbnRlcnJ1cHRzCj4+IChTR0lzIGluIEdJQyBzcGVhayksIHRoZXJlIGlzIGFub3Ro ZXIgd2F5IG9mIGxldHRpbmcgc29mdHdhcmUgcmFpc2UgYW4KPj4gaW50ZXJydXB0IGNvbmRpdGlv bi4KPj4gVGhlIEdJQyBkaXN0cmlidXRvciBhbGxvd3MgdG8gc2V0IG9yIGNsZWFyIGJvdGggdGhl IHBlbmRpbmcgYW5kIGFjdGl2ZSBzdGF0ZQo+PiBvZiBhbnkgaW50ZXJydXB0IHZpYSBNTUlPIHJl Z2lzdGVycy4gVGhpcyBpc24ndCB3aWRlbHkgdXNlZCBieSBtYW55IG9wZXJhdGluZwo+PiBzeXN0 ZW1zLCBidXQgaXMgdXNlZnVsIHdoZW4gc2F2aW5nIGFuZCByZXN0b3JpbmcgdGhlIHN0YXRlIG9m IGEgbWFjaGluZS4KPj4gU28gZW11bGF0aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyByZXF1aXJlZCBm b3IgYmVpbmcgYXJjaGl0ZWN0dXJlIGNvbXBsaWFudCwKPj4gaG93ZXZlciB0aGUgaW1wbGVtZW50 YXRpb24gbWlnaHQgbm90IG5lZWQgdG8gYmUgdmVyeSBlZmZpY2llbnQgZ2l2ZW4gaXRzIHJhcmUK Pj4gdXNhZ2UuIEluIGZhY3Qgc3VwcG9ydGluZyB0aGUgc2V0LXBlbmRpbmcgYW5kIGNsZWFyLXBl bmRpbmcgcmVnaXN0ZXJzIGlzCj4+IHJlbGF0aXZlbHkgc3RyYWlnaHQtZm9yd2FyZCwgYXMgbG9u ZyBhcyBvbmUga2VlcHMgdGhpcyBzdGF0ZSBzZXBhcmF0ZSBmcm9tCj4+IHRoZSBlbXVsYXRlZCBp bnRlcnJ1cHQgbGluZS4gYHBlbmRpbmdfbGF0Y2hgIHN0b3JlcyB0aGlzIHN0YXRlIGluIGB2Z2lj X2lycWAuCj4+Cj4+IFRoZSBzZXQtYWN0aXZlIGFuZCBjbGVhci1hY3RpdmUgcmVnaXN0ZXJzIGFy ZSBtdWNoIGhhcmRlciB0byBlbXVsYXRlLCB0aG91Z2gsCj4+IGFzIG5vcm1hbGx5IHRoZSBhY3Rp dmUgc3RhdGUgaXMgb2YgbGl0dGxlIGNvbmNlcm4gdG8gdGhlIEdJQyBlbXVsYXRpb24uIEluCj4+ IGEgbm9ybWFsIGludGVycnVwdCBsaWZlIGN5Y2xlIHRoZSBhY3RpdmUgc3RhdGUgaXNuJ3QgZXZl biB2aXNpYmxlIHRvIHRoZQo+PiBoeXBlcnZpc29yLCBhcyBpdCBtaWdodCBiZSBzZXQgYW5kIGNs ZWFyZWQgYWdhaW4gZW50aXJlbHkgd2l0aGluIHRoZSBndWVzdAo+PiBpbiB0aGUgbGlzdCByZWdp c3Rlciwgd2l0aG91dCBleGl0aW5nIHRvIHRoZSBoeXBlcnZpc29yLgo+PiBTbyBtYW5pcHVsYXRp bmcgdGhlIGFjdGl2ZSBzdGF0ZSB2aWEgdGhlIE1NSU8gcmVnaXN0ZXJzIHJlcXVpcmVzIHNvbWUg aGVhdnkKPj4gbGlmdGluZzogSWYgdGhpcyBpbnRlcnJ1cHQgaXMgY3VycmVudGx5IGluamVjdGVk IGludG8gYSBydW5uaW5nIFZDUFUsIHRoaXMKPj4gVkNQVSBtdXN0IGV4aXQsIHRoZSBhY3RpdmUg c3RhdGUgbXVzdCBiZSBzZXQgb3IgY2xlYXJlZCBpbiB0aGUgTFIsIHRoZW4KPj4gZXhlY3V0aW9u IGNhbiBjb250aW51ZS4gV2hpbGUgdGhpcyBpcyBleHBlbnNpdmUsIGFzIG1lbnRpb25lZCBhYm92 ZSB0aGlzCj4+IHNob3VsZCBub3QgaGFwcGVuIHRvbyBvZnRlbiwgYWxzbyBwcm9iYWJseSB0aGUg c3lzdGVtIGlzbid0IHZlcnkgcGVyZm9ybWFuY2UKPj4gc2Vuc2l0aXZlIHdoZW4gdXNpbmcgdGhp cyBmZWF0dXJlIGZvciBzYXZlIGFuZCByZXN0b3JlIGFueXdheS4KPiAKPiBzZXQtYWN0aXZlIGFu ZCBjbGVhci1hY3RpdmUgcmVnaXN0ZXJzIGFyZSBub3QgZW11bGF0ZWQgaW4gWGVuIHRvZGF5LCBp dAo+IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSB0aGVtLgo+IAo+IEhvdyBkb2VzIHRoZSBsb2NraW5n L3N5bmNocm9uaXphdGlvbiB3b3JrIGluIHRoZSBjYXNlIGdpdmVuIHRoYXQgdGhlCj4gdkNQVSB0 aGF0IG5lZWRzIHRvIGV4aXQgY291bGQgYmUgcnVubmluZyBvbiBhIGRpZmZlcmVudCBwQ1BVPwoK QXMgSSBoaW50ZWQgYWJvdmUgdGhpcyBpcyBhIGJpdCBvZiBhIHNsZWRnZSBoYW1tZXI6IFdlIGNh bGwKa3ZtX2FybV9oYWx0X2d1ZXN0KCkgdG8gZm9yY2UgYWxsIFZDUFVzIHRvIGV4aXQgYW5kIHRv IG1ha2Ugc3VyZSB3ZSBhcmUKaW4gc3luYy4gVGhlbiB3ZSBjYW4gc2FmZWx5IHVwZGF0ZSB0aGUg c3RhdHVzLCBhbmQgdGhlIG5vcm1hbCBlbnRyeQpwcm9jZXNzIHRha2VzIGNhcmUgb2Ygd3JpdGlu ZyB0aGlzIGludG8gdGhlIExScy4KCj4+ICMjIyBNTUlPIGVtdWxhdGlvbgo+Pgo+PiBBcyBtZW50 aW9uZWQgYmVmb3JlLCB0aGUgZGlzdHJpYnV0b3IgYW5kIHJlZGlzdHJpYnV0b3IgcGFydCBvZiB0 aGUgVkdJQyBuZWVkcwo+PiB0byBiZSBmdWxseSBlbXVsYXRlZC4gVGhvc2UgcGFydHMgYXJlIGNo YXJhY3RlcmlzZWQgYnkgYSByYW5nZSBvZiBNTUlPCj4+IHJlZ2lzdGVycy4gVGhlIGltcGxlbWVu dGF0aW9uIHNoYWxsIHByb3ZpZGUgYSBkaXNwYXRjaGVyIGZ1bmN0aW9uLCB3aGljaAo+PiB0YWtl cyB0aGUgZmF1bHRlZCBhZGRyZXNzLCByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBN TUlPIHJhbmdlLCBhbmQKPj4gd29ya3Mgb3V0IHdoaWNoIGFjdHVhbCByZWdpc3RlciBpcyBhZmZl Y3RlZC4gSXQgdGhlbiBsb29rcyB1cCB0aGUgdGhlCj4+IHJlc3BlY3RpdmUgaGFuZGxlciBmdW5j dGlvbiBhbmQgY2FsbHMgaXQuIFRob3NlIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8KPj4gYmUg bGlzdGVkIGluIGEgc3RydWN0IGluaXRpYWxpc2VyLCB3aGljaCBjb25uZWN0cyB0aGUgYWN0dWFs IHJlZ2lzdGVyCj4+IG9mZnNldCBhbmQgaXRzIHNpemUgdG8gYSBwYXJ0aWN1bGFyIGhhbmRsZXIu IEhhdmluZyBoYW5kbGVyIGZ1bmN0aW9ucyBmb3IKPj4gYSByZWdpc3RlciByYW5nZSBzZWVtcyBi ZW5lZmljaWFsIG92ZXIgaGFuZGxpbmcgcmVnaXN0ZXJzIGluIGEgc3dpdGNoL2Nhc2UsCj4+IGJl Y2F1c2UgaXQncyBlYXNpZXIgdG8gcmVhZCBhbmQgc2ltcGxpZmllcyBjb2RlIHNoYXJpbmcsIGZv ciBpbnN0YW5jZQo+PiBiZXR3ZWVuIHRoZSBHSUN2MiwgR0lDdjMgZGlzdHJpYnV0b3IgYW5kIEdJ Q3YzIHJlZGlzdHJpYnV0b3IgcmVnaXN0ZXJzCj4+IHdpdGggdGhlIHNhbWUgc2VtYW50aWNzLgo+ IAo+IEkgYW0gaGFwcHkgdG8gcmVwbGFjZSB0aGUgd2hvbGUgTU1JTyBlbXVsYXRpb24gYml0LgoK VG8gYmUgaG9uZXN0LCB0aGlzIGlzIG15IGxlYXN0IGNvbmNlcm4gOy0pIEkgZmluZCB0aGUgWGVu IHdheSBlYXNpZXIgdG8KcmVhZCwgc2luY2UgZXZlcnl0aGluZyBpcyBpbiBvbmUgcGxhY2UuIFRo ZSBLVk0gdmVyc2lvbiBzcHJlYWRzIHRoZQpoYW5kbGVycyBvdXQgYW5kIGl0J3Mgbm90IGVhc3kg dG8gY2hhc2UgdGhlbSAod2l0aCBjdGFncywgZm9yIGluc3RhbmNlKS4KQnV0IHRoZSBLVk0gd2F5 IGlzIGNsZWFuZXIgYW5kIG1vcmUgZmxleGlibGUsIHNpbmNlIGl0IG5hdHVyYWxseSBhbGxvd3MK cmV1c2luZyBoYW5kbGVyIGZ1bmN0aW9ucy4KCj4+ICMjIyBMaXN0IHJlZ2lzdGVyIG1hbmFnZW1l bnQKPj4KPj4gQSBsaXN0IHJlZ2lzdGVyIChMUikgaG9sZHMgdGhlIHN0YXRlIG9mIGEgdmlydHVh bCBpbnRlcnJ1cHQsIHdoaWNoIHdpbGwKPj4gYmUgdXNlZCBieSB0aGUgR0lDIGhhcmR3YXJlIHRv IHNpbXVsYXRlIGFuIElSUSBsaWZlIGN5Y2xlIGZvciBhIGd1ZXN0Lgo+PiBFYWNoIEdJQyBoYXJk d2FyZSBpbXBsZW1lbnRhdGlvbiBjYW4gY2hvb3NlIHRvIGltcGxlbWVudCBhIG51bWJlciBvZiBM UnMsCj4+IGhhdmluZyBmb3VyIG9mIHRoZW0gc2VlbXMgdG8gYmUgYSBjb21tb24gdmFsdWUuIFRo aXMgZGVzaWduIGhlcmUgZG9lcyBub3QKPj4gdHJ5IHRvIG1hbmFnZSB0aGUgTFJzIHZlcnkgY2xl dmVybHksIGluc3RlYWQgb24gZXZlcnkgZ3Vlc3QgZXhpdCBldmVyeSBMUgo+PiBpbiB1c2Ugd2ls bCBiZSBzeW5jZWQgdG8gdGhlIGVtdWxhdGVkIHN0YXRlLCB0aGVuIGNsZWFyZWQuIFVwb24gZ3Vl c3QgZW50cnkKPj4gdGhlIHRvcCBwcmlvcml0eSB2aXJ0dWFsIElSUXMgd2lsbCBiZSBpbnNlcnRl ZCBpbnRvIHRoZSBMUnMuIElmIHRoZXJlIGFyZQo+PiBtb3JlIHBlbmRpbmcgb3IgYWN0aXZlIElS UXMgdGhhbiBsaXN0IHJlZ2lzdGVycywgdGhlIEdJQyBtYW5hZ2VtZW50IElSUQo+PiB3aWxsIGJl IGNvbmZpZ3VyZWQgdG8gbm90aWZ5IHRoZSBoeXBlcnZpc29yIG9mIGEgZnJlZSBMUiAob25jZSB0 aGUgZ3Vlc3QKPj4gaGFzIEVPSWVkIG9uZSBJUlEpLiBUaGlzIHdpbGwgdHJpZ2dlciBhIG5vcm1h bCBleGl0LCB3aGljaCB3aWxsIGdvIHRocm91Z2gKPj4gdGhlIG5vcm1hbCBjbGVhbnVwL3JlcG9w dWxhdGUgc2NoZW1lLCBwb3NzaWJseSBub3cgcXVldWluZyB0aGUgbGVmdG92ZXIKPj4gaW50ZXJy dXB0KHMpLgo+PiBUbyBmYWNpbGl0YXRlIHF1aWNrIGd1ZXN0IGV4aXQgYW5kIGVudHJ5IHRpbWVz LCB0aGUgVkdJQyBtYWludGFpbnMgdGhlIGxpc3QKPj4gb2YgcGVuZGluZyBvciBhY3RpdmUgaW50 ZXJydXB0cyAoYXBcX2xpc3QpIHNvcnRlZCBieSB0aGVpciBwcmlvcml0eS4gQWN0aXZlCj4+IGlu dGVycnVwdHMgYWx3YXlzIGdvIGZpcnN0IG9uIHRoZSBsaXN0LCBzaW5jZSBhIGd1ZXN0IGFuZCB0 aGUgaGFyZHdhcmUgR0lDCj4+IGV4cGVjdCB0aG9zZSB0byBzdGF5IHVudGlsIHRoZXkgaGF2ZSBi ZWVuIGV4cGxpY2l0bHkgZGVhY3RpdmF0ZWQuIEZhaWx1cmUKPj4gaW4ga2VlcGluZyBhY3RpdmUg SVJRcyBhcm91bmQgd2lsbCByZXN1bHQgaW4gZXJyb3IgY29uZGl0aW9ucyBpbiB0aGUgR0lDLgo+ PiBUaGUgc2Vjb25kIHNvcnQgY3JpdGVyaWEgZm9yIHRoZSBhcFxfbGlzdCBpcyB0aGVpciBwcmlv cml0eSwgc28gaGlnaGVyCj4+IHByaW9yaXR5IHBlbmRpbmcgaW50ZXJydXB0IGFsd2F5cyBnbyBm aXJzdCBpbnRvIHRoZSBMUnMuCj4gCj4gVGhlIHN1Z2dlc3Rpb24gb2YgdXNpbmcgdGhpcyBtb2Rl bCBpbiBYZW4gd2FzIG1hZGUgaW4gdGhlIHBhc3QgYWxyZWFkeS4KPiBJIGFsd2F5cyBvYmplY3Rl ZCBmb3IgdGhlIHJlYXNvbiB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IGtub3cgaG93IG1hbnkKPiBM UnMgdGhlIGhhcmR3YXJlIHByb3ZpZGVzLCBwb3RlbnRpYWxseSB2ZXJ5IG1hbnksIGFuZCBpdCBp cyBleHBlbnNpdmUKPiBhbmQgbmVlZGxlc3MgdG8gcmVhZC93cml0ZSB0aGVtIGFsbCBldmVyeSB0 aW1lIG9uIGVudHJ5L2V4aXQuCj4gCj4gSSB3b3VsZCBwcmVmZXIgdG8gYXZvaWQgdGhhdCwgYnV0 IEknbGwgYmUgaG9uZXN0OiBJIGNhbiBiZSBjb252aW5jZWQKPiB0aGF0IHRoYXQgbW9kZWwgb2Yg aGFuZGxpbmcgTFJzIGlzIHNvIG11Y2ggc2ltcGxlciB0aGF0IGl0IGlzIHdvcnRoIGl0Lgo+IEkg YW0gbW9yZSBjb25jZXJuZWQgYWJvdXQgdGhlIGZ1dHVyZSBtYWludGFpbmFuY2Ugb2YgYSBzZXBh cmF0ZSBuZXcKPiBkcml2ZXIgZGV2ZWxvcGVkIGVsc2V3aGVyZS4KCkkgdGhpbmsgdGhpcyBMUiB0 b3BpYyBzaG91bGQgaGF2ZSBiZWVuIGNvdmVyZWQgaW4gdGhhdCBvdGhlciBlbWFpbC4KCkJlc2lk ZSBiZWluZyBhIHN0cm9uZyBzdXBwb3J0ZXIgb2YgdGhlIEtJU1MgcHJpbmNpcGxlIGluIGdlbmVy YWwsIEkKYmVsaWV2ZSBpbiBjYXNlIG9mIHRoZSBHSUMgZW11bGF0aW9uIHdlIHNob3VsZCBhdm9p ZCAocHJlbWF0dXJlKQpvcHRpbWl6YXRpb25zIGxpa2UgdGhlIHBsYWd1ZSwgYXMgdGhlcmUgYXJl IHF1aXRlIHNvbWUgY29ybmVyIGNhc2VzIGluCmFueSBWR0lDLCBhbmQgaGFuZGxpbmcgYWxsIG9m IHRoZW0gZXhwbGljaXRseSB3aXRoIHNvbWUgaGFja3Mgd2lsbCBub3QKZmx5IChiZWVuIHRoZXJl LCBkb25lIHRoYXQpLgpTbyBJIGNhbiBqdXN0IHN1cHBvcnQgQ2hyaXN0b2ZmZXIncyBwb2ludDog aGF2aW5nIGFuIGFyY2hpdGVjdHVyZQpjb21wbGlhbnQgVkdJQyBlbXVsYXRpb24gaW4gYW4gbWFp bnRhaW5hYmxlIG1hbm5lciByZXF1aXJlcyBhCnN0cmFpZ2h0LWZvcndhcmQgYW5kIGNsZWFyIGRl c2lnbi4gRXZlcnl0aGluZyBlbHNlIHNob3VsZCBiZSBzZWNvbmRhcnksCmFuZCBjYW4gYmUgZXZh bHVhdGVkIGxhdGVyLCBpZiB0aGVyZSBhcmUgZ29vZCByZWFzb25zIChudW1iZXJzISkuCgpDaGVl cnMsCkFuZHJlLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczov L2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==