From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Wu, Feng" Subject: Re: Ideas Re: [PATCH v14 1/2] vmx: VT-d posted-interrupt core logic handling Date: Wed, 9 Mar 2016 05:06:24 +0000 Message-ID: References: <1456714816-3876-1-git-send-email-feng.wu@intel.com> <1456714816-3876-2-git-send-email-feng.wu@intel.com> <20160304220031.GA28111@char.us.oracle.com> <20160307155304.GD5402@localhost.localdomain> <56DEBF4B.7060606@citrix.com> <56DF00D902000078000DA7C1@prv-mh.provo.novell.com> <56DF066B.3090106@citrix.com> <56DF195902000078000DA8C1@prv-mh.provo.novell.com> <56DF1C3E.1070101@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <56DF1C3E.1070101@citrix.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: George Dunlap , Jan Beulich , George Dunlap Cc: "Tian, Kevin" , Keir Fraser , Andrew Cooper , Dario Faggioli , "xen-devel@lists.xen.org" , "Wu, Feng" List-Id: xen-devel@lists.xenproject.org Cgo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gRnJvbTogR2VvcmdlIER1bmxhcCBbbWFp bHRvOmdlb3JnZS5kdW5sYXBAY2l0cml4LmNvbV0KPiBTZW50OiBXZWRuZXNkYXksIE1hcmNoIDks IDIwMTYgMjozOSBBTQo+IFRvOiBKYW4gQmV1bGljaCA8SkJldWxpY2hAc3VzZS5jb20+OyBHZW9y Z2UgRHVubGFwCj4gPEdlb3JnZS5EdW5sYXBAZXUuY2l0cml4LmNvbT47IFd1LCBGZW5nIDxmZW5n Lnd1QGludGVsLmNvbT4KPiBDYzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4 LmNvbT47IERhcmlvIEZhZ2dpb2xpCj4gPGRhcmlvLmZhZ2dpb2xpQGNpdHJpeC5jb20+OyBUaWFu LCBLZXZpbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+OyB4ZW4tCj4gZGV2ZWxAbGlzdHMueGVuLm9y ZzsgS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2lsa0BvcmFjbGUuY29tPjsgS2Vpcgo+ IEZyYXNlciA8a2VpckB4ZW4ub3JnPgo+IFN1YmplY3Q6IFJlOiBbWGVuLWRldmVsXSBJZGVhcyBS ZTogW1BBVENIIHYxNCAxLzJdIHZteDogVlQtZCBwb3N0ZWQtaW50ZXJydXB0Cj4gY29yZSBsb2dp YyBoYW5kbGluZwo+IAo+IE9uIDA4LzAzLzE2IDE3OjI2LCBKYW4gQmV1bGljaCB3cm90ZToKPiA+ Pj4+IE9uIDA4LjAzLjE2IGF0IDE4OjA1LCA8Z2VvcmdlLmR1bmxhcEBjaXRyaXguY29tPiB3cm90 ZToKPiA+PiBPbiAwOC8wMy8xNiAxNTo0MiwgSmFuIEJldWxpY2ggd3JvdGU6Cj4gPj4+Pj4+IE9u IDA4LjAzLjE2IGF0IDE1OjQyLCA8R2VvcmdlLkR1bmxhcEBldS5jaXRyaXguY29tPiB3cm90ZToK PiA+Pj4+IE9uIFR1ZSwgTWFyIDgsIDIwMTYgYXQgMToxMCBQTSwgV3UsIEZlbmcgPGZlbmcud3VA aW50ZWwuY29tPiB3cm90ZToKPiA+Pj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+ Pj4+Pj4gRnJvbTogR2VvcmdlIER1bmxhcCBbbWFpbHRvOmdlb3JnZS5kdW5sYXBAY2l0cml4LmNv bV0KPiA+Pj4+Pj4KPiA+Pj4+Pj4gMi4gVHJ5IHRvIHRlc3QgZW5naW5lZXJlZCBzaXR1YXRpb25z IHdoZXJlIHdlIGV4cGVjdCB0aGlzIHRvIGJlIGEKPiA+Pj4+Pj4gcHJvYmxlbSwgdG8gc2VlIGhv dyBiaWcgb2YgYSBwcm9ibGVtIGl0IGlzIChwcm92aW5nIHRoZSB0aGVvcnkgdG8gYmUKPiA+Pj4+ Pj4gYWNjdXJhdGUgb3IgaW5hY2N1cmF0ZSBpbiB0aGlzIGNhc2UpCj4gPj4+Pj4KPiA+Pj4+PiBN YXliZSB3ZSBjYW4gcnVuIGEgU01QIGd1ZXN0IHdpdGggYWxsIHRoZSB2Y3B1cyBwaW5uZWQgdG8g YSBkZWRpY2F0ZWQKPiA+Pj4+PiBwQ1BVLCB3ZSBjYW4gcnVuIHNvbWUgYmVuY2htYXJrIGluIHRo ZSBndWVzdCB3aXRoIFZULWQgUEkgYW5kIHdpdGhvdXQKPiA+Pj4+PiBWVC1kIFBJLCB0aGVuIHNl ZSB0aGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlIHR3bwo+IHNjZWFucmlv cy4KPiA+Pj4+Cj4gPj4+PiBUaGlzIHdvdWxkIGdpdmUgdXMgYW4gaWRlYSB3aGF0IHRoZSB3b3Jz dC1jYXNlIHNjZW5hcmlvIHdvdWxkIGJlLgo+ID4+Pgo+ID4+PiBIb3cgd291bGQgYSBzaW5nbGUg Vk0gZXZlciBnaXZlIHVzIGFuIGlkZWEgYWJvdXQgdGhlIHdvcnN0Cj4gPj4+IGNhc2U/IFNvbWV0 aGluZyBnZXR0aW5nIGNsb3NlIHRvIHdvcnN0IGNhc2UgaXMgYSB0b24gb2Ygc2luZ2xlCj4gPj4+ IHZDUFUgZ3Vlc3RzIGFsbCB0ZW1wb3JhcmlseSBwaW5uZWQgdG8gb25lIGFuZCB0aGUgc2FtZSBw Q1BVCj4gPj4+IChjb3VsZCBiZSBtdWx0aS12Q1BVIG9uZXMsIGJ1dCB0aGUgbW9yZSB2Q1BVLXMg dGhlIG1vcmUKPiA+Pj4gYXJ0aWZpY2lhbCB0aGlzIHBpbm5pbmcgd291bGQgYmVjb21lKSByaWdo dCBiZWZvcmUgdGhleSBnbyBpbnRvCj4gPj4+IGJsb2NrZWQgc3RhdGUgKGkuZS4gdGhyb3VnaCBv bmUgb2YgdGhlIHR3byBjYWxsZXJzIG9mCj4gPj4+IGFyY2hfdmNwdV9ibG9jaygpKSwgdGhlIHBp bm5pbmcgcmVtb3ZlZCB3aGlsZSBibG9ja2VkLCBhbmQKPiA+Pj4gdGhlbiBhbGwgZ2V0dGluZyB3 b2tlbiBhdCBvbmNlLgo+ID4+Cj4gPj4gV2h5IHdvdWxkIHJlbW92aW5nIHRoZSBwaW5uaW5nIGJl IGltcG9ydGFudD8KPiA+Cj4gPiBJdCdzIG5vdCBpbXBvcnRhbnQgYnkgaXRzZWxmLCBvdGhlciB0 aGFuIHRvIGF2b2lkIGFsbCB2Q1BVLXMgdGhlbgo+ID4gd2FraW5nIHVwIG9uIHRoZSBvbmUgcENQ VS4KPiA+Cj4gPj4gQW5kIEkgZ3Vlc3MgaXQncyBhY3R1YWxseSB0aGUgY2FzZSB0aGF0IGl0IGRv ZXNuJ3QgbmVlZCBhbGwgVk1zIHRvCj4gPj4gYWN0dWFsbHkgYmUgKnJlY2VpdmluZyogaW50ZXJy dXB0czsgaXQganVzdCByZXF1aXJlcyB0aGVtIHRvIGJlCj4gPj4gKmNhcGFibGUqIG9mIHJlY2Vp dmluZyBpbnRlcnJ1cHRzLCBmb3IgdGhlcmUgdG8gYmUgYSBsb25nIGNoYWluIGFsbAo+ID4+IGJs b2NrZWQgb24gdGhlIHNhbWUgcGh5c2ljYWwgY3B1Lgo+ID4KPiA+IFllcy4KPiA+Cj4gPj4+PiAg QnV0Cj4gPj4+PiBwaW5uaW5nIGFsbCB2Y3B1cyB0byBhIHNpbmdsZSBwY3B1IGlzbid0IHJlYWxs eSBhIHNlbnNpYmxlIHVzZSBjYXNlIHdlCj4gPj4+PiB3YW50IHRvIHN1cHBvcnQgLS0gaWYgeW91 IGhhdmUgdG8gZG8gc29tZXRoaW5nIHN0dXBpZCB0byBnZXQgYQo+ID4+Pj4gcGVyZm9ybWFuY2Ug cmVncmVzc2lvbiwgdGhlbiBJIGFzIGZhciBhcyBJJ20gY29uY2VybmVkIGl0J3Mgbm90IGEKPiA+ Pj4+IHByb2JsZW0uCj4gPj4+Pgo+ID4+Pj4gT3IgdG8gcHV0IGl0IGEgZGlmZmVyZW50IHdheTog SWYgd2UgcGluIDEwIHZjcHVzIHRvIGEgc2luZ2xlIHBjcHUgYW5kCj4gPj4+PiB0aGVuIHBvdW5k IHRoZW0gYWxsIHdpdGggcG9zdGVkIGludGVycnVwdHMsIGFuZCB0aGVyZSBpcyAqbm8qCj4gPj4+ PiBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uLCB0aGVuIHRoYXQgd2lsbCBjb25j bHVzaXZlbHkgcHJvdmUKPiA+Pj4+IHRoYXQgdGhlIHRoZW9yZXRpY2FsIHBlcmZvcm1hbmNlIHJl Z3Jlc3Npb24gaXMgb2Ygbm8gY29uY2VybiwgYW5kIHdlCj4gPj4+PiBjYW4gZW5hYmxlIFBJIGJ5 IGRlZmF1bHQuCj4gPj4+Cj4gPj4+IFRoZSBwb2ludCBpc24ndCB0aGUgcGlubmluZy4gVGhlIHBv aW50IGlzIHdoYXQgcENQVSB0aGV5J3JlIG9uIHdoZW4KPiA+Pj4gZ29pbmcgdG8gc2xlZXAuIEFu ZCB0aGF0IGNvdWxkIGludm9sdmUgcXVpdGUgYSBmZXcgbW9yZSB0aGFuIGp1c3QKPiA+Pj4gMTAg dkNQVS1zLCBwcm92aWRlZCB0aGV5IGFsbCBzbGVlcCBsb25nIGVub3VnaC4KPiA+Pj4KPiA+Pj4g QW5kIHRoZSAidGhlb3JldGljYWwgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBpcyBvZiBubyBjb25j ZXJuIiBpcwo+ID4+PiBhbHNvIG5vdCBhIHByb3BlciB3YXkgb2YgbG9va2luZyBhdCBpdCwgSSB3 b3VsZCBzYXk6IEV2ZW4gaWYgc3VjaAo+ID4+PiBhIHNpdHVhdGlvbiB3b3VsZCBoYXBwZW4gZXh0 cmVtZWx5IHJhcmVseSwgaWYgaXQgY2FuIGhhcHBlbiBhdCBhbGwsCj4gPj4+IGl0IHdvdWxkIHN0 aWxsIGJlIGEgc2VjdXJpdHkgaXNzdWUuCj4gPj4KPiA+PiBXaGF0IEknbSB0cnlpbmcgdG8gZ2V0 IGF0IGlzIC0tIGV4YWN0bHkgd2hhdCBzaXR1YXRpb24/ICBXaGF0IGFjdHVhbGx5Cj4gPj4gY29u c3RpdHV0ZXMgYSBwcm9ibGVtYXRpYyBpbnRlcnJ1cHQgbGF0ZW5jeSAvIGludGVycnVwdCBwcm9j ZXNzaW5nCj4gPj4gd29ya2xvYWQsIGhvdyBtYW55IHZjcHVzIG11c3QgYmUgc2xlZXBpbmcgb24g dGhlIHNhbWUgcGNwdSB0byBhY3R1YWxseQo+ID4+IHJpc2sgdHJpZ2dlcmluZyB0aGF0IGxhdGVu Y3kgLyB3b3JrbG9hZCwgYW5kIGhvdyBmZWFzaWJsZSBpcyBpdCB0aGF0Cj4gPj4gc3VjaCBhIHNp dHVhdGlvbiB3b3VsZCBhcmlzZSBpbiBhIHJlYXNvbmFibGUgc2NlbmFyaW8/Cj4gPj4KPiA+PiBJ ZiAyMDB1cyBpcyB0b28gbG9uZywgYW5kIGl0IG9ubHkgdGFrZXMgMyBzbGVlcGluZyB2Y3B1cyB0 byBnZXQgdGhlcmUsCj4gPj4gdGhlbiB5ZXMsIHRoZXJlIGlzIGEgZ2VudWluZSBwcm9ibGVtIHdl IG5lZWQgdG8gdHJ5IHRvIGFkZHJlc3MgYmVmb3JlIHdlCj4gPj4gdHVybiBpdCBvbiBieSBkZWZh dWx0LiAgSWYgd2Ugc2F5IHRoYXQgdXAgdG8gNTAwdXMgaXMgdG9sZXJhYmxlLCBhbmQgaXQKPiA+ PiB0YWtlcyAxMDAgc2xlZXBpbmcgdmNwdXMgdG8gcmVhY2ggdGhhdCBsYXRlbmN5LCB0aGVuIHRo aXMgaXMgc29tZXRoaW5nIEkKPiA+PiBkb24ndCByZWFsbHkgdGhpbmsgd2UgbmVlZCB0byB3b3Jy eSBhYm91dC4KPiA+Pgo+ID4+ICJJIHRoaW5rIHNvbWV0aGluZyBiYWQgbWF5IGhhcHBlbiIgaXMg YSByZWFsbHkgZGlmZmljdWx0IHRvIHdvcmsgd2l0aC4KPiA+Cj4gPiBJIHVuZGVyc3RhbmQgdGhh dCwgYnV0IGNvbWluZyB1cCB3aXRoIHByb3BlciBudW1iZXJzIGhlcmUgaXNuJ3QKPiA+IGVhc3ku IEZhY3QgaXMgLSBpdCBjYW5ub3QgYmUgZXhjbHVkZWQgdGhhdCBvbiBhIHN5c3RlbSB3aXRoCj4g PiBodW5kcmVkcyBvZiBwQ1BVLXMgYW5kIHRob3VzYW5kcyBvciB2Q1BVLXMsIHRoYXQgYWxsIHZD UFUtcwo+ID4gd291bGQgYXQgc29tZSBwb2ludCBwaWxlIHVwIG9uIG9uZSBwQ1BVJ3MgbGlzdC4K PiAKPiBTbyBpdCdzIGFscmVhZHkgdGhlIGNhc2UgdGhhdCB3aGVuIGEgdmNwdSBpcyB3b2tlbiwg aXQgaXMgaW5zZXJ0ZWQgaW50bwo+IHRoZSBydW5xdWV1ZSBieSBwcmlvcml0eSBvcmRlciwgYm90 aCBmb3IgY3JlZGl0MSBhbmQgY3JlZGl0MjsgYW5kIHRoaXMKPiBpcyBhbiBpbnNlcnRpb24gc29y dCwgc28gdGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIHRvIGRvIHRoZSBpbnNlcnQgaXMKPiBl eHBlY3RlZCB0byBiZSB0aGUgdGltZSBpdCB0YWtlcyB0byB0cmF2ZXJzZSBoYWxmIG9mIHRoZSBs aXN0LiAgVGhpcwo+IGlzbid0IGFuIGV4YWN0IGFuYWxvZywgYmVjYXVzZSBpbiB0aGF0IGNhc2Ug aXQncyB0aGUgbnVtYmVyIG9mCj4gKnJ1bm5hYmxlKiB2Y3B1cywgbm90IHRoZSBudW1iZXIgb2Yg KmJsb2NrZWQqIHZjcHVzOyBidXQgaXQgZGVtb25zdHJhdGVzCj4gdGhlIHBvaW50IHRoYXQgMSkg d2UgYWxyZWFkeSBoYXZlIGNvZGUgdGhhdCBhc3N1bWVzIHRoYXQgd2Fsa2luZyBhIGxpc3QKPiBv ZiB2Y3B1cyBwZXIgcGNwdSBpcyBhIHJlYXNvbmFibHkgYm91bmRlZCB0aGluZyAyKSB3ZSBoYXZl IHllYXJzIG9mIG5vCj4gbWFqb3IgcGVyZm9ybWFuY2UgcHJvYmxlbXMgcmVwb3J0ZWQgdG8gYmFj ayB0aGF0IGFzc3VtcHRpb24gdXAuCj4gCj4gSSBndWVzcyB0aGUgc2xpZ2h0IGRpZmZlcmVuY2Ug dGhlcmUgaXMgdGhhdCBpdCdzIGFscmVhZHkgd2VsbC11bmRlcnN0b29kCj4gdGhhdCB0b28gbWFu eSAqYWN0aXZlKiB2Y3B1cyB3aWxsIG92ZXJsb2FkIHlvdXIgc3lzdGVtIGFuZCBzbG93IHRoaW5n cwo+IGRvd247IGluIHRoZSBjYXNlIG9mIHRoZSBwaSB3YWtlLXVwcywgdGhlIHByb2JsZW0gaXMg dGhhdCB0b28gbWFueQo+ICppbmFjdGl2ZSogdmNwdXMgd2lsbCBvdmVybG9hZCB5b3VyIHN5c3Rl bSBhbmQgc2xvdyB0aGluZ3MgZG93bi4KPiAKPiBTdGlsbCAtLSBJIGhhdmUgYSBoYXJkIHRpbWUg Y29uc3RydWN0aW5nIGluIG15IG1pbmQgYSBzY2VuYXJpbyB3aGVyZQo+IGh1Z2UgbnVtYmVycyBv ZiBpZGxlIHZjcHVzIGZvciBzb21lIHJlYXNvbiBkZWNpZGUgdG8gY29uZ3JlZ2F0ZSBvbiBhCj4g c2luZ2xlIHBjcHUuCj4gCj4gU3VwcG9zZSB3ZSBoYWQgMTAyNCBwY3B1cywgYW5kIDEwMjMgVk1z IGVhY2ggd2l0aCA1IHZjcHVzLCBvZiB3aGljaCAxCj4gd2FzIHNwaW5uaW5nIGF0IDEwMCUgYW5k IHRoZSBvdGhlciA0IHdlcmUgaWRsZS4gIEknbSBub3Qgc2VlaW5nIGEKPiBzaXR1YXRpb24gd2hl cmUgYW55IG9mIHRoZSBzY2hlZHVsZXJzIHB1dCBhbGwgKDEwMjMqNCkgaWRsZSB2Y3B1cyBvbiBh Cj4gc2luZ2xlIHBjcHUuCj4gCj4gRm9yIHRoZSBjcmVkaXQxIHNjaGVkdWxlciwgSSdtIGJhc2lj YWxseSBwb3NpdGl2ZSB0aGF0IGl0IGNhbid0IGhhcHBlbgo+IGV2ZW4gb25jZSwgZXZlbiBieSBj aGFuY2UuICBZb3UnZCBuZXZlciBiZSBhYmxlIHRvIGFjY3JldGUgbW9yZSB0aGFuIGEKPiBkb3pl biB2Y3B1cyBvbiB0aGF0IG9uZSBwY3B1IGJlZm9yZSB0aGV5IHdlcmUgc3RvbGVuIGF3YXkuCj4g Cj4gRm9yIHRoZSBjcmVkaXQyIHNjaGVkdWxlciwgaXQgKm1pZ2h0KiBiZSBwb3NzaWJsZSB0aGF0 IGlmIHRoZSBidXN5IHZjcHUKPiBvbiBlYWNoIFZNIG5ldmVyIGNoYW5nZXMgKHdoaWNoIGl0c2Vs ZiBpcyBwcmV0dHkgdW5saWtlbHkpLCAqYW5kKiB0aGUKPiBzdW0gb2YgdGhlICJsb2FkIiBmb3Ig YWxsICgxMDIzKjQpIGlkbGUgdmNwdXMgd2FzIGxlc3MgdGhhbiAxIChpLmUuLAo+IGlkbGUgdmNw dXMgdG9vayBsZXNzIHRoYW4gMC4wMiUgb2YgdGhlIGNwdSB0aW1lKSwgdGhlbiB5b3UgKm1pZ2h0 Kgo+IHBvc3NpYmx5IGFmdGVyIGEgbG9uZyB0aW1lIGVuZCB1cCBhdCBhIHNpdHVhdGlvbiB3aGVy ZSB5b3UgaGFkIGFsbCB2Y3B1cwo+IG9uIGEgc2luZ2xlIHBjcHUuICBCdXQgdGhhdCAiYWNjcmV0 aW9uIiBwcm9jZXNzIHdvdWxkIHRha2UgYSB2ZXJ5IGxvbmcKPiB0aW1lOyBhbmQgYXMgc29vbiBh cyBhbnkgdmNwdSBoYWQgYSBicmllZiAic3Bpa2UiIGFib3ZlIHRoZSAiMC4wMiUiLCBhCj4gd2hv bGUgYnVuY2ggb2YgdGhlbSBnZXQgbW92ZWQgc29tZXdoZXJlIGVsc2UuCj4gCj4gQW5kIGluIGFu eSBjYXNlLCBhcmUgeW91IHJlYWxseSBnb2luZyB0byBoYXZlIDEwMjMgZGV2aWNlcyBzbyB0aGF0 IHlvdQo+IGNhbiBoYW5kIG9uZSB0byBlYWNoIG9mIHRob3NlIDEwMjMgZ3Vlc3RzPyAgQmVjYXVz ZSBpdCdzIG9ubHkgdmNwdXMgb2YKPiBWTXMgKndoaWNoIGhhdmUgYSBkZXZpY2UgYXNzaWduZWQq IHRoYXQgZW5kIHVwIG9uIHRoZSBibG9jayBsaXN0Lgo+IAo+IElmIEkgbWF5IGdvICJtZXRhIiBm b3IgYSBtb21lbnQgaGVyZSAtLSB0aGlzIGlzIGV4YWN0bHkgd2hhdCBJJ20gdGFsa2luZwo+IGFi b3V0IHdpdGggIlNvbWV0aGluZyBiYWQgbWF5IGhhcHBlbiIgYmVpbmcgZGlmZmljdWx0IHRvIHdv cmsgd2l0aC4KPiBSYXRoZXIgdGhhbiB5b3Ugc3BlbGxpbmcgb3V0IGV4YWN0bHkgdGhlIHNpdHVh dGlvbiB3aGljaCB5b3UgdGhpbmsgbWF5Cj4gaGFwcGVuLCAod2hpY2ggSSBjb3VsZCB0aGVuIGVp dGhlciBhY2NlcHQgb3IgcmVmdXRlIG9uIGl0cyBtZXJpdHMpICpJKgo+IGFtIG5vdyBzcGVuZGlu ZyBhIGxvdCBvZiB0aW1lIGFuZCBlZmZvcnQgdHJ5aW5nIHRvIGltYWdpbmUgd2hhdAo+IHNpdHVh dGlvbnMgeW91IG1heSBiZSB0YWxraW5nIGFib3V0IGFuZCB0aGVuIHJlZnV0aW5nIHRoZW0gbXlz ZWxmLgo+IAo+IElmIHlvdSBoYXZlIGNvbmNlcm5zLCB5b3UgbmVlZCB0byBtYWtlIHRob3NlIGNv bmNlcm5zIGNvbmNyZXRlLCBvciBhdAo+IGxlYXN0IHNldCBjbGVhciBjcml0ZXJpYSBmb3IgaG93 IHNvbWVvbmUgY291bGQgZ28gYWJvdXQgYWRkcmVzc2luZyB5b3VyCj4gY29uY2VybnMuICBBbmQg eWVzLCBpdCBpcyAqeW91ciogam9iLCBhcyB0aGUgcGVyc29uIGRvaW5nIHRoZSBvYmplY3RpbmcK PiAoYW5kIGV2ZW4gbW9yZXNvIGFzIHRoZSB4ODYgbWFpbnRhaW5lciksIHRvIG1ha2UgeW91ciBj b25jZXJucyBleHBsaWNpdAo+IGFuZC9vciBzZXQgdGhvc2UgY3JpdGVyaWEsIGFuZCBub3QgRmVu ZydzIGpvYiAob3IgZXZlbiBteSBqb2IpIHRvIHRyeSB0bwo+IGd1ZXNzIHdoYXQgaXQgaXMgbWln aHQgbWFrZSB5b3UgaGFwcHkuCj4gCj4gPiBIb3cgbWFueSB3b3VsZCBiZSB0b2xlcmFibGUgb24g YSBzaW5nbGUgbGlzdCBkZXBlbmRzIHVwb24gaG9zdAo+ID4gY2hhcmFjdGVyaXN0aWNzLCBzbyBh IGZpeGVkIG51bWJlciB3b24ndCBkbyBhbnl3YXkuCj4gCj4gU3VyZSwgYnV0IGlmIHdlIGNhbiBy dW4gdGhyb3VnaCBhIGxpc3Qgb2YgMTAwIHZjcHVzIGluIDI1dXMgb24gYSB0eXBpY2FsCj4gc2Vy dmVyLCB0aGVuIHdlIGNhbiBiZSBwcmV0dHkgY2VydGFpbiAxMDAgdmNwdXMgd2lsbCBuZXZlciBl eGNlZWQgNTAwdXMKPiBvbiBiYXNpY2FsbHkgYW55IHNlcnZlci4KPiAKPiBPbiB0aGUgb3RoZXIg aGFuZCwgaWYgNTAgdmNwdXMgdGFrZXMgNTAwdXMgb24gd2hhdGV2ZXIgc2VydmVyIEZlbmcgdXNl cwo+IGZvciBoaXMgdGVzdHMsIHRoZW4geWVzLCB3ZSBkb24ndCByZWFsbHkgaGF2ZSBlbm91Z2gg InNsYWNrIiB0byBiZSBzdXJlCj4gdGhhdCB3ZSB3b24ndCBydW4gdG8gcHJvYmxlbXMgYXQgc29t ZSBwb2ludC4KPiAKPiBCdXQgYXQgdGhpcyBwb2ludCB3ZSdyZSBqdXN0IHB1bGxpbmcgbnVtYmVy cyBvdXQgb2YgdGhlIGFpciAtLSB3aGVuIHdlCj4gaGF2ZSBhY3R1YWwgZGF0YSB3ZSBjYW4gbWFr ZSBhIGJldHRlciBqdWRnZW1lbnQgYWJvdXQgd2hhdCBtaWdodCBvcgo+IG1pZ2h0IG5vdCBiZSBh Y2NlcHRhYmxlLgo+IAo+ID4gSGVuY2UgSQo+ID4gdGhpbmsgdGhlIGJldHRlciBhcHByb2FjaCwg aW5zdGVhZCBvZiBpbXByb3ZpbmcgbG9va3VwLCBpcyB0bwo+ID4gZGlzdHJpYnV0ZSB2Q1BVLXMg ZXZlbmx5IGFjcm9zcyBsaXN0cy4gV2hpY2ggaW4gdHVybiB3b3VsZCBsaWtlbHkKPiA+IHJlcXVp cmUgdGhvc2UgbGlzdHMgdG8gbm8gbG9uZ2VyIGJlIHRpZWQgdG8gcENQVS1zLCBhbiBhc3BlY3Qg SQo+ID4gaGFkIGFscmVhZHkgc3VnZ2VzdGVkIGR1cmluZyByZXZpZXcuIEFzIHNvb24gYXMgZGlz dHJpYnV0aW9uCj4gPiB3b3VsZCBiZSByZWFzb25hYmx5IGV2ZW4sIHRoZSBzZWN1cml0eSBjb25j ZXJuIHdvdWxkIHZhbmlzaDoKPiA+IFNvbWVvbmUgcGxhY2luZyBtb3JlIHZDUFUtcyBvbiBhIGhv c3QgdGhhbiB0aGF0IGhvc3QgY2FuCj4gPiBoYW5kbGUgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBj b25zZXF1ZW5jZXMuIFF1aXRlIGNvbnRyYXJ5IHRvCj4gPiBzb21lb25lIHBsYWNpbmcgbW9yZSB2 Q1BVLXMgb24gYSBob3N0IHRoYW4gYSBzaW5nbGUgcENQVSBjYW4KPiA+IHJlYXNvbmFibHkgaGFu ZGxlIGluIGFuIGludGVycnVwdCBoYW5kbGVyLgo+IAo+IEkgZG9uJ3QgcmVhbGx5IHVuZGVyc3Rh bmQgeW91ciBzdWdnZXN0aW9uLiAgVGhlIFBJIGludGVycnVwdCBpcwo+IG5lY2Vzc2FyaWx5IHRp ZWQgdG8gYSBzcGVjaWZpYyBwY3B1OyB1bmxlc3Mgd2Ugc3RhcnQgaGF2aW5nIG11bHRpcGxlIFBJ Cj4gaW50ZXJydXB0cywgd2Ugb25seSBoYXZlIGFzIG1hbnkgaW50ZXJydXB0cyBhcyB3ZSBoYXZl IHBjcHVzLCByaWdodD8KPiBBcmUgeW91IHNheWluZyB0aGF0IHJhdGhlciB0aGFuIHB1dCB2Y3B1 cyBvbiB0aGUgbGlzdCBvZiB0aGUgcGNwdSBpdCdzCj4gcnVubmluZyBvbiwgd2Ugc2hvdWxkIHNl dCB0aGUgaW50ZXJydXB0IHRvIHRoYXQgb2YgYW4gYXJiaXRyYXJ5IHBjcHUKPiB0aGF0IGhhcHBl bnMgdG8gaGF2ZSByb29tIG9uIGl0cyBsaXN0PwoKSSBkb24ndCB0aGluayB0aGF0IGlzIGEgZ29v ZCBpZGVhLCBhcyBHZW9yZ2UgbWVudGlvbmVkIGFib3ZlLCB0aGUgUEkKd2FrZXVwIG5vdGlmaWNh dGlvbiBldmVudHMgKFBJIGludGVycnVwdHMpIGFyZSBib3VuZCB0byBhIHNwZWNpZmljCnBDUFUs IHRoYXQgbWVhbnMgdGhlICdORFNUJyBmaWxlZCBpbiB0aGUgdkNQVSdzIFBJIGRlc2NyaXB0b3Ig aXMgdGhlCnNwZWNpZmljIHBDUFUsIHNvIHdoZW4gdGhlIFBJIGludGVycnVwdHMgaGFwcGVuLCB3 ZSBjYW4gZmluZCB0aGUKcmlnaHQgYmxvY2tpbmcgbGlzdC4gSWYgd2UgcHV0IHRoZSB2Q1BVIHRv IGFub3RoZXIgcENQVSdzIChvdGhlciB0aGFuCnRoZSBvbmUgaW5kaWNhdGVkIGJ5ICdORFNUJyBm aWVsZCkgYmxvY2tpbmcgbGlzdCwgaG93IHNob3VsZCB3ZSBmaW5kCnRoZSB2Q1BVIHRvIHdha2Ug dXAgd2hlbiBQSSBpbnRlcnJ1cHRzIGNvbWUgaW4/CgpUaGFua3MsCkZlbmcKCj4gCj4gIC1HZW9y Z2UKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhl bi5vcmcveGVuLWRldmVsCg==