From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Lan, Tianyu" Subject: Re: Xen virtual IOMMU high level design doc V2 Date: Sat, 22 Oct 2016 15:32:50 +0800 Message-ID: <9a90c4e6-0615-f6ac-3b58-ad74eae029c8@intel.com> References: <5746B3FA.6020401@intel.com> <5746DF93.8090803@citrix.com> <57480327.60609@intel.com> <78d122f0-c773-7fa3-1258-c551937c508e@intel.com> <575081E8.6070609@citrix.com> <57518B78.6060604@citrix.com> <647d0b74-cecc-db33-1033-f7201c8a0af5@intel.com> <13fa96c1-4e66-e8a0-3b66-1c93ad2b6543@intel.com> <577BD8D002000078000FB3F7@prv-mh.provo.novell.com> <3f375a3e-0bbb-ca70-9ea2-e8a970a5dc72@intel.com> <4a8616a2-a576-aadc-993f-3d349f91f310@citrix.com> <884d6ac3-5f8a-a01a-f87d-26037b1069e3@intel.com> <561ba095-e75e-4847-def6-90933ca5ba20@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <561ba095-e75e-4847-def6-90933ca5ba20@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andrew Cooper , Jan Beulich , Kevin Tian , "yang.zhang.wz@gmail.com" , Jun Nakajima , Stefano Stabellini Cc: "anthony.perard@citrix.com" , xuquan8@huawei.com, "xen-devel@lists.xensource.com" , "ian.jackson@eu.citrix.com" , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org T24gMTAvMjEvMjAxNiA0OjM2IEFNLCBBbmRyZXcgQ29vcGVyIHdyb3RlOgo+Cj4+Cj4+Pgo+Pj4+ IDI1NSB2Y3B1cyBzdXBwb3J0IHJlcXVpcmVzIFgyQVBJQyBhbmQgTGludXggZGlzYWJsZXMgWDJB UElDIG1vZGUgaWYKPj4+PiB0aGVyZSBpcyBubyBpbnRlcnJ1cHQgcmVtYXBwaW5nIGZ1bmN0aW9u IHdoaWNoIGlzIHByZXNlbnQgYnkgdklPTU1VLgo+Pj4+IEludGVycnVwdCByZW1hcHBpbmcgZnVu Y3Rpb24gaGVscHMgdG8gZGVsaXZlciBpbnRlcnJ1cHQgdG8gI3ZjcHUgPjI1NS4KPj4+Cj4+PiBU aGlzIGlzIG9ubHkgYSByZXF1aXJlbWVudCBmb3IgeGFwaWMgaW50ZXJydXB0IHNvdXJjZXMuICB4 MmFwaWMKPj4+IGludGVycnVwdCBzb3VyY2VzIGFscmVhZHkgZGVsaXZlciBjb3JyZWN0bHkuCj4+ Cj4+IFRoZSBrZXkgaXMgdGhlIEFQSUMgSUQuIFRoZXJlIGlzIG5vIG1vZGlmaWNhdGlvbiB0byBl eGlzdGluZyBQQ0kgTVNJIGFuZAo+PiBJT0FQSUMgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHgy YXBpYy4gUENJIE1TSS9JT0FQSUMgY2FuIG9ubHkgc2VuZAo+PiBpbnRlcnJ1cHQgbWVzc2FnZSBj b250YWluaW5nIDhiaXQgQVBJQyBJRCwgd2hpY2ggY2Fubm90IGFkZHJlc3MgPjI1NQo+PiBjcHVz LiBJbnRlcnJ1cHQgcmVtYXBwaW5nIHN1cHBvcnRzIDMyYml0IEFQSUMgSUQgc28gaXQncyBuZWNl c3NhcnkgdG8KPj4gZW5hYmxlID4yNTUgY3B1cyB3aXRoIHgyYXBpYyBtb2RlLgo+Pgo+PiBJZiBM QVBJQyBpcyBpbiB4MmFwaWMgd2hpbGUgaW50ZXJydXB0IHJlbWFwcGluZyBpcyBkaXNhYmxlZCwg SU9BUElDCj4+IGNhbm5vdCBkZWxpdmVyIGludGVycnVwdHMgdG8gYWxsIGNwdXMgaW4gdGhlIHN5 c3RlbSBpZiAjY3B1ID4gMjU1Lgo+Cj4gQWZ0ZXIgc3BlbmRpbmcgYSBsb25nIHRpbWUgcmVhZGlu ZyB1cCBvbiB0aGlzLCBteSBmaXJzdCBvYnNlcnZhdGlvbiBpcwo+IHRoYXQgaXQgaXMgdmVyeSBk aWZmaWN1bHQgdG8gZmluZCBjb25zaXN0ZW50IGluZm9ybWF0aW9uIGNvbmNlcm5pbmcgdGhlCj4g ZXhwZWN0ZWQgY29udGVudCBvZiBNU0kgYWRkcmVzcy9kYXRhIGZpZWxkcyBmb3IgeDg2IGhhcmR3 YXJlLiAgSGF2aW5nCj4gc2FpZCB0aGF0LCB0aGlzIGhhcyBiZWVuIHZlcnkgZWR1Y2F0aW9uYWwu Cj4KPiBJdCBpcyBub3cgY2xlYXIgdGhhdCBhbnkgTVNJIG1lc3NhZ2UgY2FuIGVpdGhlciBzcGVj aWZ5IGFuIDggYml0IEFQSUMgSUQKPiBkaXJlY3RseSwgb3IgcmVxdWVzdCBmb3IgdGhlIG1lc3Nh Z2UgdG8gYmUgcmVtYXBwZWQuICBBcG9sb2dpZXMgZm9yIG15Cj4gZWFybGllciBjb25mdXNpb24u CgpOZXZlciBtaW5kZXIsIEkgd2lsbCBkZXNjcmliZSB0aGlzIG1vcmUgZGV0YWlsIGluIHRoZSBm b2xsb3dpbmcgdmVyc2lvbi4KCj4+Pj4KPj4+Pgo+Pj4+Cj4+Pj4gMyBYZW4gaHlwZXJ2aXNvcgo+ Pj4+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Cj4+Pj4KPj4+Pgo+Pj4+IDMuMSBOZXcgaHlwZXJjYWxsIFhF Tl9TWVNDVExfdmlvbW11X29wCj4+Pj4gVGhpcyBoeXBlcmNhbGwgc2hvdWxkIGFsc28gc3VwcG9y dCBwdiBJT01NVSB3aGljaCBpcyBzdGlsbCB1bmRlciBSRkMKPj4+PiByZXZpZXcuIEhlcmUgb25s eSBjb3ZlcnMgbm9uLXB2IHBhcnQuCj4+Pj4KPj4+PiAxKSBEZWZpbml0aW9uIG9mICJzdHJ1Y3Qg eGVuX3N5c2N0bF92aW9tbXVfb3AiIGFzIG5ldyBoeXBlcmNhbGwKPj4+PiBwYXJhbWV0ZXIuCj4+ Pgo+Pj4gV2h5IGRpZCB5b3UgY2hvb3NlIHN5c2N0bD8gIEFzIHRoZXNlIGFyZSBwZXItZG9tYWlu LCBkb21jdGwgd291bGQgYmUgYQo+Pj4gbW9yZSBsb2dpY2FsIGNob2ljZS4gIEhvd2V2ZXIsIG5l aXRoZXIgb2YgdGhlc2Ugc2hvdWxkIGJlIHVzYWJsZSBieQo+Pj4gUWVtdSwgYW5kIHdlIGFyZSB0 cnlpbmcgdG8gc3BsaXQgb3V0ICJub3JtYWwgcWVtdSBvcGVyYXRpb25zIiBpbnRvIGRtb3BzCj4+ PiB3aGljaCBjYW4gYmUgc2FmZWx5IGRlcHJpdmlsZWdlZC4KPj4+Cj4+Cj4+IERvIHlvdSBrbm93 IHdoYXQncyB0aGUgc3RhdHVzIG9mIGRtb3Agbm93PyBJIGp1c3QgZm91bmQgc29tZSBkaXNjdXNz aW9ucwo+PiBhYm91dCBkZXNpZ24gaW4gdGhlIG1haWxsaXN0LiBXZSBtYXkgdXNlIGRvbWN0bCBm aXJzdCBhbmQgbW92ZSB0byBkbW9wCj4+IHdoZW4gaXQncyByZWFkeT8KPgo+IEkgYmVsaWV2ZSBQ YXVsIGlzIGxvb2tpbmcgaW50byByZXNwaW4gdGhlIHNlcmllcyBlYXJseSBpbiB0aGUgNC45IGRl dgo+IGN5Y2xlLiAgSSBleHBlY3QgaXQgd29uJ3QgdGFrZSBsb25nIHVudGlsIHRoZXkgYXJlIHN1 Ym1pdHRlZC4KCk9rLiBJIGdvdCBpdC4gVGhhbmtzIGZvciBpbmZvcm1hdGlvbi4KCj4+Cj4+Pgo+ Pj4+Cj4+Pj4KPj4+PiBEZWZpbml0aW9uIG9mIFZJT01NVSBzdWJvcHM6Cj4+Pj4gI2RlZmluZSBY RU5fU1lTQ1RMX3Zpb21tdV9xdWVyeV9jYXBhYmlsaXR5ICAgICAgICAwCj4+Pj4gI2RlZmluZSBY RU5fU1lTQ1RMX3Zpb21tdV9jcmVhdGUgICAgICAgICAgICAxCj4+Pj4gI2RlZmluZSBYRU5fU1lT Q1RMX3Zpb21tdV9kZXN0cm95ICAgICAgICAgICAgMgo+Pj4+ICNkZWZpbmUgWEVOX1NZU0NUTF92 aW9tbXVfZG1hX3RyYW5zbGF0aW9uX2Zvcl92cGRldiAgICAgMwo+Pj4+Cj4+Pj4gRGVmaW5pdGlv biBvZiBWSU9NTVUgY2FwYWJpbGl0aWVzCj4+Pj4gI2RlZmluZSBYRU5fVklPTU1VX0NBUEFCSUxJ VFlfbDFfdHJhbnNsYXRpb24gICAgKDEgPDwgMCkKPj4+PiAjZGVmaW5lIFhFTl9WSU9NTVVfQ0FQ QUJJTElUWV9sMl90cmFuc2xhdGlvbiAgICAoMSA8PCAxKQo+Pj4+ICNkZWZpbmUgWEVOX1ZJT01N VV9DQVBBQklMSVRZX2ludGVycnVwdF9yZW1hcHBpbmcgICAgKDEgPDwgMikKPj4+Cj4+PiBIb3cg YXJlIHZJT01NVXMgZ29pbmcgdG8gYmUgbW9kZWxsZWQgdG8gZ3Vlc3RzPyAgT24gcmVhbCBoYXJk d2FyZSwgdGhleQo+Pj4gYWxsIHNlZW0gdG8gZW5kIGFzc29jaWF0ZWQgd2l0aCBhIFBDSSBkZXZp Y2Ugb2Ygc29tZSBzb3J0LCBldmVuIGlmIGl0IGlzCj4+PiBqdXN0IHRoZSBMUEMgYnJpZGdlLgo+ Pgo+Pgo+PiBUaGlzIGRlc2lnbiBqdXN0IGNvbnNpZGVycyBvbmUgdklPTU1VIGhhcyBhbGwgUENJ IGRldmljZSB1bmRlciBpdHMKPj4gc3BlY2lmaWVkIFBDSSBTZWdtZW50LiAiSU5DTFVERV9QQ0lf QUxMIiBiaXQgb2YgRFJIRCBzdHJ1Y3QgaXMgc2V0IGZvcgo+PiB2SU9NTVUuCj4KPiBFdmVuIGlm IHRoZSBmaXJzdCBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIHZJT01NVSwg cGxlYXNlCj4gZGVzaWduIHRoZSBpbnRlcmZhY2UgdG8gY29wZSB3aXRoIG11bHRpcGxlLiAgSXQg d2lsbCBzYXZlIHNvbWVvbmUgaGF2aW5nCj4gdG8gZ28gYW5kIGJyZWFrIHRoZSBBUEkvQUJJIGlu IHRoZSBmdXR1cmUgd2hlbiBzdXBwb3J0IGZvciBtdWx0aXBsZQo+IHZJT01NVXMgaXMgbmVlZGVk LgoKT0suIEkgZ290LgoKPgo+Pgo+Pj4KPj4+IEhvdyBkbyB3ZSBkZWFsIHdpdGggbXVsdGlwbGUg dklPTU1VcyBpbiBhIHNpbmdsZSBndWVzdD8KPj4KPj4gRm9yIG11bHRpLXZJT01NVSwgd2UgbmVl ZCB0byBhZGQgbmV3IGZpZWxkIGluIHRoZSBzdHJ1Y3QgaW9tbXVfb3AgdG8KPj4gZGVzaWduYXRl IGRldmljZSBzY29wZSBvZiB2SU9NTVVzIGlmIHRoZXkgYXJlIHVuZGVyIHNhbWUgUENJCj4+IHNl Z21lbnQuIFRoaXMgYWxzbyBuZWVkcyB0byBjaGFuZ2UgRE1BUiB0YWJsZS4KPj4KPj4+Cj4+Pj4K Pj4+Pgo+Pj4+IDIpIERlc2lnbiBmb3Igc3Vib3BzCj4+Pj4gLSBYRU5fU1lTQ1RMX3Zpb21tdV9x dWVyeV9jYXBhYmlsaXR5Cj4+Pj4gICAgICAgIEdldCB2SU9NTVUgY2FwYWJpbGl0aWVzKGwxL2wy IHRyYW5zbGF0aW9uIGFuZCBpbnRlcnJ1cHQKPj4+PiByZW1hcHBpbmcpLgo+Pj4+Cj4+Pj4gLSBY RU5fU1lTQ1RMX3Zpb21tdV9jcmVhdGUKPj4+PiAgICAgICBDcmVhdGUgdklPTU1VIGluIFhlbiBo eXBlcnZpc29yIHdpdGggZG9tX2lkLCBjYXBhYmlsaXRpZXMgYW5kIHJlZwo+Pj4+IGJhc2UgYWRk cmVzcy4KPj4+Pgo+Pj4+IC0gWEVOX1NZU0NUTF92aW9tbXVfZGVzdHJveQo+Pj4+ICAgICAgIERl c3RvcnkgdklPTU1VIGluIFhlbiBoeXBlcnZpc29yIHdpdGggZG9tX2lkIGFzIHBhcmFtZXRlcnMu Cj4+Pj4KPj4+PiAtIFhFTl9TWVNDVExfdmlvbW11X2RtYV90cmFuc2xhdGlvbl9mb3JfdnBkZXYK Pj4+PiAgICAgICBUcmFuc2xhdGUgSU9WQSB0byBHUEEgZm9yIHNwZWNpZmllZCB2aXJ0dWFsIFBD SSBkZXZpY2Ugd2l0aAo+Pj4+IGRvbSBpZCwKPj4+PiBQQ0kgZGV2aWNlJ3MgYmRmIGFuZCBJT1ZB IGFuZCB4ZW4gaHlwZXJ2aXNvciByZXR1cm5zIHRyYW5zbGF0ZWQgR1BBLAo+Pj4+IGFkZHJlc3Mg bWFzayBhbmQgYWNjZXNzIHBlcm1pc3Npb24uCj4+Pj4KPj4+Pgo+Pj4+IDMuMiBsMiB0cmFuc2xh dGlvbgo+Pj4+IDEpIEZvciB2aXJ0dWFsIFBDSSBkZXZpY2UKPj4+PiBYZW4gZHVtbXkgeGVuLXZJ T01NVSBpbiBRZW11IHRyYW5zbGF0ZXMgSU9WQSB0byB0YXJnZXQgR1BBIHZpYSBuZXcKPj4+PiBo eXBlcmNhbGwgd2hlbiBETUEgb3BlcmF0aW9uIGhhcHBlbnMuCj4+Pj4KPj4+PiAyKSBGb3IgcGh5 c2ljYWwgUENJIGRldmljZQo+Pj4+IERNQSBvcGVyYXRpb25zIGdvIHRob3VnaCBwaHlzaWNhbCBJ T01NVSBkaXJlY3RseSBhbmQgSU8gcGFnZSB0YWJsZSBmb3IKPj4+PiBJT1ZBLT5IUEEgc2hvdWxk IGJlIGxvYWRlZCBpbnRvIHBoeXNpY2FsIElPTU1VLiBXaGVuIGd1ZXN0IHVwZGF0ZXMKPj4+PiBs MiBQYWdlLXRhYmxlIHBvaW50ZXIgZmllbGQsIGl0IHByb3ZpZGVzIElPIHBhZ2UgdGFibGUgZm9y Cj4+Pj4gSU9WQS0+R1BBLiB2SU9NTVUgbmVlZHMgdG8gc2hhZG93IGwyIHRyYW5zbGF0aW9uIHRh YmxlLCB0cmFuc2xhdGUKPj4+PiBHUEEtPkhQQSBhbmQgdXBkYXRlIHNoYWRvdyBwYWdlIHRhYmxl KElPVkEtPkhQQSkgcG9pbnRlciB0byBsMgo+Pj4+IFBhZ2UtdGFibGUgcG9pbnRlciB0byBjb250 ZXh0IGVudHJ5IG9mIHBoeXNpY2FsIElPTU1VLgo+Pj4KPj4+IEhvdyBhcmUgeW91IHByb3Bvc2lu ZyB0byBkbyB0aGlzIHNoYWRvd2luZz8gIERvIHdlIG5lZWQgdG8gdHJhcCBhbmQKPj4+IGVtdWxh dGUgYWxsIHdyaXRlcyB0byB0aGUgdklPTU1VIHBhZ2V0YWJsZXMsIG9yIGlzIHRoZXJlIGEgYmV0 dGVyIHdheSB0bwo+Pj4ga25vdyB3aGVuIHRoZSBtYXBwaW5ncyBuZWVkIGludmFsaWRhdGluZz8K Pj4KPj4gTm8sIHdlIGRvbid0IG5lZWQgdG8gdHJhcCBhbGwgd3JpdGUgdG8gSU8gcGFnZSB0YWJs ZS4KPj4gRnJvbSBWVEQgc3BlYyA2LjEsICJSZXBvcnRpbmcgdGhlIENhY2hpbmcgTW9kZSBhcyBT ZXQgZm9yIHRoZQo+PiB2aXJ0dWFsIGhhcmR3YXJlIHJlcXVpcmVzIHRoZSBndWVzdCBzb2Z0d2Fy ZSB0byBleHBsaWNpdGx5IGlzc3VlCj4+IGludmFsaWRhdGlvbiBvcGVyYXRpb25zIG9uIHRoZSB2 aXJ0dWFsIGhhcmR3YXJlIGZvciBhbnkvYWxsIHVwZGF0ZXMgdG8KPj4gdGhlIGd1ZXN0IHJlbWFw cGluZyBzdHJ1Y3R1cmVzLlRoZSB2aXJ0dWFsaXppbmcgc29mdHdhcmUgbWF5IHRyYXAgdGhlc2UK Pj4gZ3Vlc3QgaW52YWxpZGF0aW9uIG9wZXJhdGlvbnMgdG8ga2VlcCB0aGUgc2hhZG93IHRyYW5z bGF0aW9uIHN0cnVjdHVyZXMKPj4gY29uc2lzdGVudCB0byBndWVzdCB0cmFuc2xhdGlvbiBzdHJ1 Y3R1cmUgbW9kaWZpY2F0aW9ucywgd2l0aG91dAo+PiByZXNvcnRpbmcgdG8gb3RoZXIgbGVzcyBl ZmZpY2llbnQgdGVjaG5pcXVlcy4iCj4+IFNvIGFueSB1cGRhdGVzIG9mIElPIHBhZ2UgdGFibGUg d2lsbCBmb2xsb3cgaW52YWxpZGF0aW9uIG9wZXJhdGlvbiBhbmQKPj4gd2UgdXNlIHRoZW0gdG8g ZG8gc2hhZG93aW5nLgo+Cj4gT2suICBUaGF0IGlzIGhlbHBmdWwuCj4KPiBTbywgdGhlIGd1ZXN0 IG1ha2VzIHNvbWUgdXBkYXRlcywgYW5kIHJlcXVlc3RzIGFuIGludmFsaWRhdGlvbi4gIFRoaXMK PiB0cmFwcyBpbnRvIFhlbiwgYW5kIHdlIHByZXN1bWFibHkgcmUtc2hhZG93IGFsbCBzdGF0ZSBm cm9tIGZyZXNoPwoKd2UgbWF5IGV4cG9zZSBQU2koUGFnZSBTZWxlY3RpdmUgSW52YWxpZGF0aW9u KSBjYXBhYmlsaXR5IGFuZCBndWVzdCB3aWxsIApqdXN0IGludmFsaWRhdGUgYXNzb2NpYXRlZCBw YWdlIGVudHJ5IHJhdGhlciB0aGFuIGFsbC4KCj4gIFdlIGNhbiB0aGVuIHByZXN1bWFibHkgc2Vu ZCBhIHN5bmNocm9ub3VzIGludmFsaWRhdGlvbiByZXF1ZXN0IHRvIFFlbXUgYXQKPiB0aGlzIHBv aW50PwoKSW4gb3VyIGRlc2lnbiwgUWVtdSB3aWxsIG5vdCBjYWNoZSBJT1RMQiBhbmQgc28gbm8g aW52YWxpZGF0aW9uIHJlcXVlc3QgCmlzIHNlbnQgdG8gUWVtdS4gQnV0IEkgYW0gc3RpbGwgY29u c2lkZXJpbmcgaG93IHRvIGRlYWwgd2l0aCBpbi1mbHkgRE1BIAp3aGVuIHRoZXJlIGlzIGludmFs aWRhdGlvbiByZXF1ZXN0IGp1c3QgbGlrZSB5b3UgbWVudGlvbmVkLgoKPgo+IEhvdyBsb25nIGlz IHRoaXMgbGlrZWx5IHRvIHRha2U/ICBSZXNoYWRvd2luZyBhbGwgRE1BIGFuZCBJbnRlcnJ1cHQK PiByZW1hcHBpbmcgdGFibGVzIHNvdW5kcyB2ZXJ5IGV4cGVuc2l2ZS4KPgo+Pgo+Pj4KPj4+Pgo+ Pj4+IE5vdyBhbGwgUENJIGRldmljZXMgaW4gc2FtZSBodm0gZG9tYWluIHNoYXJlIG9uZSBJTyBw YWdlIHRhYmxlCj4+Pj4gKEdQQS0+SFBBKSBpbiBwaHlzaWNhbCBJT01NVSBkcml2ZXIgb2YgWGVu LiBUbyBzdXBwb3J0IGwyCj4+Pj4gdHJhbnNsYXRpb24gb2YgdklPTU1VLCBJT01NVSBkcml2ZXIg bmVlZCB0byBzdXBwb3J0IG11bHRpcGxlIGFkZHJlc3MKPj4+PiBzcGFjZXMgcGVyIGRldmljZSBl bnRyeS4gVXNpbmcgZXhpc3RpbmcgSU8gcGFnZSB0YWJsZShHUEEtPkhQQSkKPj4+PiBkZWZhdWx0 bHkgYW5kIHN3aXRjaCB0byBzaGFkb3cgSU8gcGFnZSB0YWJsZShJT1ZBLT5IUEEpIHdoZW4gbDIK Pj4+PiB0cmFuc2xhdGlvbiBmdW5jdGlvbiBpcyBlbmFibGVkLiBUaGVzZSBjaGFuZ2Ugd2lsbCBu b3QgYWZmZWN0IGN1cnJlbnQKPj4+PiBQMk0gbG9naWMuCj4+Pj4KPj4+PiAzLjMgSW50ZXJydXB0 IHJlbWFwcGluZwo+Pj4+IEludGVycnVwdHMgZnJvbSB2aXJ0dWFsIGRldmljZXMgYW5kIHBoeXNp Y2FsIGRldmljZXMgd2lsbCBiZSBkZWxpdmVyZWQKPj4+PiB0byB2bGFwaWMgZnJvbSB2SU9BUElD IGFuZCB2TVNJLiBJdCBuZWVkcyB0byBhZGQgaW50ZXJydXB0IHJlbWFwcGluZwo+Pj4+IGhvb2tz IGluIHRoZSB2bXNpX2RlbGl2ZXIoKSBhbmQgaW9hcGljX2RlbGl2ZXIoKSB0byBmaW5kIHRhcmdl dCB2bGFwaWMKPj4+PiBhY2NvcmRpbmcgaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZS4KPj4+Pgo+ Pj4+Cj4+Pj4gMy40IGwxIHRyYW5zbGF0aW9uCj4+Pj4gV2hlbiBuZXN0ZWQgdHJhbnNsYXRpb24g aXMgZW5hYmxlZCwgYW55IGFkZHJlc3MgZ2VuZXJhdGVkIGJ5IGwxCj4+Pj4gdHJhbnNsYXRpb24g aXMgdXNlZCBhcyB0aGUgaW5wdXQgYWRkcmVzcyBmb3IgbmVzdGluZyB3aXRoIGwyCj4+Pj4gdHJh bnNsYXRpb24uIFBoeXNpY2FsIElPTU1VIG5lZWRzIHRvIGVuYWJsZSBib3RoIGwxIGFuZCBsMiB0 cmFuc2xhdGlvbgo+Pj4+IGluIG5lc3RlZCB0cmFuc2xhdGlvbiBtb2RlKEdWQS0+R1BBLT5IUEEp IGZvciBwYXNzdGhyb3VnaAo+Pj4+IGRldmljZS4KPj4+Cj4+PiBBbGwgdGhlc2UgbDEgYW5kIGwy IHRyYW5zbGF0aW9ucyBhcmUgZ2V0dGluZyBjb25mdXNpbmcuICBDb3VsZCB3ZQo+Pj4gcGVyaGFw cyBjYWxsIHRoZW0gZ3Vlc3QgdHJhbnNsYXRpb24gYW5kIGhvc3QgdHJhbnNsYXRpb24sIG9yIGlz IHRoYXQKPj4+IGxpa2VseSB0byBjYXVzZSBvdGhlciBwcm9ibGVtcz8KPj4KPj4gRGVmaW5pdGlv bnMgb2YgbDEgYW5kIGwyIHRyYW5zbGF0aW9uIGZyb20gVlREIHNwZWMuCj4+IGZpcnN0LWxldmVs IHRyYW5zbGF0aW9uIHRvIHJlbWFwIGEgdmlydHVhbCBhZGRyZXNzIHRvIGludGVybWVkaWF0ZQo+ PiAoZ3Vlc3QpIHBoeXNpY2FsIGFkZHJlc3MuCj4+IHNlY29uZC1sZXZlbCB0cmFuc2xhdGlvbnMg dG8gcmVtYXAgYSBpbnRlcm1lZGlhdGUgcGh5c2ljYWwgYWRkcmVzcyB0bwo+PiBtYWNoaW5lICho b3N0KSBwaHlzaWNhbCBhZGRyZXNzLgo+PiBndWVzdCBhbmQgaG9zdCB0cmFuc2xhdGlvbiBtYXli ZSBub3Qgc3VpdGFibGUgZm9yIHRoZW0/Cj4KPiBUcnVlLCBidXQgd2hhdCBpcyBhbHNvIGNvbmZ1 c2luZyBpcyB0aGF0IHdoYXQgd2FzIHByZXZpb3VzbHkgdGhlIG9ubHkKPiBsZXZlbCBvZiB0cmFu c2xhdGlvbiBpcyBub3cgbDIuCj4KPiBTbyBsb25nIGFzIGl0IGlzIGNsZWFybHkgc3RhdGVkIHNv bWV3aGVyZSBpbiB0aGUgY29kZSBhbmQvb3IgZmVhdHVyZSBkb2MKPiB3aGljaCBhZGRyZXNzIHNw YWNlcyBlYWNoIGxldmVsIHRyYW5zbGF0ZXMgYmV0d2VlbiAoaS5lLiBsMSB0cmFuc2xhdGVzCj4g bGluZWFyIGFkZHJlc3NlcyBpbnRvIGdmbnMsIGFuZCBsMiB0cmFuc2xhdGVzIGdmbnMgaW50byBt Zm5zKSwgaXQgd2lsbAo+IHByb2JhYmx5IGJlIG9rLgoKU3VyZSwgd2Ugc2hvdWxkIHJlbmFtZSBj dXJyZW50IGxldmVsIHRyYW5zbGF0aW9uIHRvIGwyIHRyYW5zbGF0aW9uIHdoZW4gCmludHJvZHVj ZSBsMSB0cmFuc2xhdGlvbiBhbmQgYWxpZ25zIHdpdGggVlREIHNwZWMuCgo+Cj4gQ2FuIEkgcmVj b21tZW5kIHRoYXQgeW91IG1ha2UgdXNlIG9mIHRoZSBUWVBFX1NBRkUoKSBpbmZyYXN0cnVjdHVy ZSB0bwo+IG1ha2UgY29uY3JldGUsIGRpc3BlcmF0ZSB0eXBlcyBmb3IgYW55IG5ldyB0cmFuc2xh dGlvbiBmdW5jdGlvbnMsIHRvCj4gbWFrZSBpdCBoYXJkZXIgdG8gYWNjaWRlbnRhbGx5IGdldCB3 cm9uZy4KCk9rLiBJIGdvdCBpdC4KCj4KPj4KPj4+Cj4+Pj4KPj4+PiBWVC1kIGNvbnRleHQgZW50 cnkgcG9pbnRzIHRvIGd1ZXN0IGwxIHRyYW5zbGF0aW9uIHRhYmxlIHdoaWNoCj4+Pj4gd2lsbCBi ZSBuZXN0LXRyYW5zbGF0ZWQgYnkgbDIgdHJhbnNsYXRpb24gdGFibGUgYW5kIHNvIGl0Cj4+Pj4g Y2FuIGJlIGRpcmVjdGx5IGxpbmtlZCB0byBjb250ZXh0IGVudHJ5IG9mIHBoeXNpY2FsIElPTU1V Lgo+Pj4+Cj4+Pj4gVG8gZW5hYmxlIGwxIHRyYW5zbGF0aW9uIGluIFZNCj4+Pj4gMSkgWGVuIElP TU1VIGRyaXZlciBlbmFibGVzIG5lc3RlZCB0cmFuc2xhdGlvbiBtb2RlCj4+Pj4gMikgVXBkYXRl IEdQQSByb290IG9mIGd1ZXN0IGwxIHRyYW5zbGF0aW9uIHRhYmxlIHRvIGNvbnRleHQgZW50cnkK Pj4+PiBvZiBwaHlzaWNhbCBJT01NVS4KPj4+Pgo+Pj4+IEFsbCBoYW5kbGVzIGFyZSBpbiBoeXBl cnZpc29yIGFuZCBubyBpbnRlcmFjdGlvbiB3aXRoIFFlbXUuCj4+Pj4KPj4+Pgo+Pj4+IDMuNSBJ bXBsZW1lbnRhdGlvbiBjb25zaWRlcmF0aW9uCj4+Pj4gVlQtZCBzcGVjIGRvZXNuJ3QgZGVmaW5l IGEgY2FwYWJpbGl0eSBiaXQgZm9yIHRoZSBsMiB0cmFuc2xhdGlvbi4KPj4+PiBBcmNoaXRlY3R1 cmFsbHkgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgZ3Vlc3QgdGhhdCBsMiB0cmFuc2xhdGlvbgo+ Pj4+IGNhcGFiaWxpdHkgaXMgbm90IGF2YWlsYWJsZS4gTGludXggSW50ZWwgSU9NTVUgZHJpdmVy IHRoaW5rcyBsMgo+Pj4+IHRyYW5zbGF0aW9uIGlzIGFsd2F5cyBhdmFpbGFibGUgd2hlbiBWVEQg ZXhpdHMgYW5kIGZhaWwgdG8gYmUgbG9hZGVkCj4+Pj4gd2l0aG91dCBsMiB0cmFuc2xhdGlvbiBz dXBwb3J0IGV2ZW4gaWYgaW50ZXJydXB0IHJlbWFwcGluZyBhbmQgbDEKPj4+PiB0cmFuc2xhdGlv biBhcmUgYXZhaWxhYmxlLiBTbyBpdCBuZWVkcyB0byBlbmFibGUgbDIgdHJhbnNsYXRpb24gZmly c3QKPj4+PiBiZWZvcmUgb3RoZXIgZnVuY3Rpb25zLgo+Pj4KPj4+IFdoYXQgdGhlbiBpcyB0aGUg cHVycG9zZSBvZiB0aGUgbmVzdGVkIHRyYW5zbGF0aW9uIHN1cHBvcnQgYml0IGluIHRoZQo+Pj4g ZXh0ZW5kZWQgY2FwYWJpbGl0eSByZWdpc3Rlcj8KPj4KPj4gSXQncyB0byB0cmFuc2xhdGUgb3V0 cHV0IEdQQSBmcm9tIGZpcnN0IGxldmVsIHRyYW5zbGF0aW9uKElPVkEtPkdQQSkKPj4gdG8gSFBB Lgo+Pgo+PiBEZXRhaWwgcGxlYXNlIHNlZSBWVEQgc3BlYyAtIDMuOCBOZXN0ZWQgVHJhbnNsYXRp b24KPj4gIldoZW4gTmVzdGluZyBFbmFibGUgKE5FU1RFKSBmaWVsZCBpcyAxIGluIGV4dGVuZGVk LWNvbnRleHQtZW50cmllcywKPj4gcmVxdWVzdHMtd2l0aC1QQVNJRCB0cmFuc2xhdGVkIHRocm91 Z2ggZmlyc3QtbGV2ZWwgdHJhbnNsYXRpb24gYXJlIGFsc28KPj4gc3ViamVjdGVkIHRvIG5lc3Rl ZCBzZWNvbmQtbGV2ZWwgdHJhbnNsYXRpb24uIFN1Y2ggZXh0ZW5kZWRjb250ZXh0LQo+PiBlbnRy aWVzIGNvbnRhaW4gYm90aCB0aGUgcG9pbnRlciB0byB0aGUgUEFTSUQtdGFibGUgKHdoaWNoIGNv bnRhaW5zIHRoZQo+PiBwb2ludGVyIHRvIHRoZSBmaXJzdGxldmVsIHRyYW5zbGF0aW9uIHN0cnVj dHVyZXMpLCBhbmQgdGhlIHBvaW50ZXIgdG8KPj4gdGhlIHNlY29uZC1sZXZlbCB0cmFuc2xhdGlv biBzdHJ1Y3R1cmVzLiIKPgo+IEkgZGlkbid0IHBocmFzZSBteSBxdWVzdGlvbiB2ZXJ5IHdlbGwu ICBJIHVuZGVyc3RhbmQgd2hhdCB0aGUgbmVzdGVkCj4gdHJhbnNsYXRpb24gYml0IG1lYW5zLCBi dXQgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSB3ZSBoYXZlIGEgcHJvYmxlbQo+IHNpZ25hbGxpbmcg dGhlIHByZXNlbmNlIG9yIGxhY2sgb2YgbmVzdGVkIHRyYW5zbGF0aW9ucyB0byB0aGUgZ3Vlc3Qu Cj4KPiBJbiBvdGhlciB3b3Jkcywgd2h5IGNhbid0IHdlIGhpZGUgbDIgdHJhbnNsYXRpb24gZnJv bSB0aGUgZ3Vlc3QgYnkKPiBzaW1wbHkgY2xlYXJpbmcgdGhlIG5lc3RlZCB0cmFuc2xhdGlvbiBj YXBhYmlsaXR5PwoKWW91IG1lYW4gdG8gdGVsbCBubyBzdXBwb3J0IG9mIGwyIHRyYW5zbGF0aW9u IHZpYSBuZXN0IHRyYW5zbGF0aW9uIGJpdD8KQnV0IHRoZSBuZXN0ZWQgdHJhbnNsYXRpb24gaXMg YSBkaWZmZXJlbnQgZnVuY3Rpb24gd2l0aCBsMiB0cmFuc2xhdGlvbgpldmVuIGZyb20gZ3Vlc3Qg dmlldyBhbmQgbmVzdGVkIHRyYW5zbGF0aW9uIG9ubHkgd29ya3MgcmVxdWVzdHMgd2l0aApQQVNJ RCAobDEgdHJhbnNsYXRpb24pLgoKTGludXggaW50ZWwgaW9tbXUgZHJpdmVyIGVuYWJsZXMgbDIg dHJhbnNsYXRpb24gdW5jb25kaXRpb25hbGx5IGFuZCBmcmVlIAppb21tdSBpbnN0YW5jZSB3aGVu IGZhaWxlZCB0byBlbmFibGUgbDIgdHJhbnNsYXRpb24uCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK