From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Tyshchenko Subject: Re: Shattering superpages impact on IOMMU in Xen Date: Mon, 3 Apr 2017 21:21:11 +0300 Message-ID: References: <1a585c67-6af4-fbc0-af4c-0df2a26c43dd@citrix.com> <66626ce8-4196-b02e-1628-72c49ebdee99@arm.com> <94e0279b-5d0a-f427-1a6f-e2f7a5057f2a@citrix.com> <4fb78ab9-62bc-d003-a680-7fc7371310a6@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 1cv6bL-0003a7-Bw for xen-devel@lists.xenproject.org; Mon, 03 Apr 2017 18:21:15 +0000 Received: by mail-io0-f181.google.com with SMTP id f84so80993731ioj.0 for ; Mon, 03 Apr 2017 11:21:13 -0700 (PDT) In-Reply-To: <4fb78ab9-62bc-d003-a680-7fc7371310a6@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Julien Grall Cc: Stefano Stabellini , Oleksandr Andrushchenko , Andrew Cooper , Andrii Anisov , Volodymyr Babchuk , al1img , xen-devel@lists.xenproject.org, Artem Mygaiev List-Id: xen-devel@lists.xenproject.org T24gTW9uLCBBcHIgMywgMjAxNyBhdCA5OjA2IFBNLCBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFs bEBhcm0uY29tPiB3cm90ZToKPiBIaSBBbmRyZXcsCj4KPgo+IE9uIDAzLzA0LzE3IDE4OjE2LCBB bmRyZXcgQ29vcGVyIHdyb3RlOgo+Pgo+PiBPbiAwMy8wNC8xNyAxODowMiwgSnVsaWVuIEdyYWxs IHdyb3RlOgo+Pj4KPj4+IEhpIEFuZHJldywKPj4+Cj4+PiBPbiAwMy8wNC8xNyAxNzo0MiwgQW5k cmV3IENvb3BlciB3cm90ZToKPj4+Pgo+Pj4+IE9uIDAzLzA0LzE3IDE3OjI0LCBPbGVrc2FuZHIg VHlzaGNoZW5rbyB3cm90ZToKPj4+Pj4KPj4+Pj4gSGksIGFsbC4KPj4+Pj4KPj4+Pj4gUGxheWlu ZyB3aXRoIG5vbi1zaGFyZWQgSU9NTVUgaW4gWGVuIG9uIEFSTSBJIGZhY2VkIG9uZSBpbnRlcmVz dGluZwo+Pj4+PiB0aGluZy4gSSBmb3VuZCBvdXQgdGhhdCB0aGUgc3VwZXJwYWdlcyB3ZXJlIHNo YXR0ZXJlZCBkdXJpbmcgZG9tYWluCj4+Pj4+IGxpZmUgY3ljbGUuCj4+Pj4+IFRoaXMgaXMgdGhl IHJlc3VsdCBvZiBtYXBwaW5nIG9mIGZvcmVpZ24gcGFnZXMsIGJhbGxvb25pbmcgbWVtb3J5LAo+ Pj4+PiBldmVuIGlmIGRvbWFpbiBtYXBzIFhlbiBzaGFyZWQgcGFnZXMsIGV0Yy4KPj4+Pj4gSSBk b24ndCBib3RoZXIgd2l0aCB0aGUgbWVtb3J5IGZyYWdtZW50YXRpb24gYXQgdGhlIG1vbWVudC4g QnV0LAo+Pj4+PiBzaGF0dGVyaW5nIGJvdGhlcnMgbWUgZnJvbSB0aGUgSU9NTVUgcG9pbnQgb2Yg dmlldy4KPj4+Pj4gQXMgdGhlIFhlbiBvd25zIElPTU1VIGl0IG1pZ2h0IG1hbmlwdWxhdGUgSU9N TVUgcGFnZSB0YWJsZXMgd2hlbgo+Pj4+PiBwYXNzdGhvdWdoZWQvcHJvdGVjdGVkIGRldmljZSBk b2luZyBETUEgaW4gTGludXguIEl0IGlzIGhhcmQgdG8gZGV0ZWN0Cj4+Pj4+IHdoZW4gdGhlIERN QSB0cmFuc2FjdGlvbiBpc24ndCBpbiBwcm9ncmVzcwo+Pj4+PiBpbiBvcmRlciB0byBwcmV2ZW50 IHRoaXMgcmFjZS4gU28sIGlmIHdlIGhhdmUgaW5mbGlnaHQgdHJhbnNhY3Rpb24KPj4+Pj4gZnJv bSBhIGRldmljZSB3aGVuIGNoYW5naW5nIElPTU1VIG1hcHBpbmcgd2UgbWlnaHQgZ2V0IGludG8g dHJvdWJsZS4KPj4+Pj4gVW5mb3J0dW5hdGVseSwgbm90IGluIGFsbCB0aGUgY2FzZXMgdGhlCj4+ Pj4+IGZhdWx0aW5nIHRyYW5zYWN0aW9uIGNhbiBiZSByZXN0YXJ0ZWQuIFRoZSBjaGFuY2UgdG8g aGl0IHRoZSBwcm9ibGVtCj4+Pj4+IGluY3JlYXNlcyBkdXJpbmcgc2hhdHRlcmluZy4KPj4+Pj4K Pj4+Pj4gSSBkaWQgbmV4dCB0ZXN0Ogo+Pj4+PiBUaGUgZG9tMCBvbiBteSBzZXR1cCBjb250YWlu cyBldGhlcm5ldCBJUCB0aGF0IGFyZSBwcm90ZWN0ZWQgYnkgSU9NTVUuCj4+Pj4+IFdoYXQgaXMg bW9yZSwgYXMgdGhlIElPTU1VIEkgYW0gcGxheWluZyB3aXRoIHN1cHBvcnRzIHN1cGVycGFnZXMg KDJNLAo+Pj4+PiAxRykgdGhlIElPTU1VIGRyaXZlcgo+Pj4+PiB0YWtlcyBpbnRvIGFjY291bnQg dGhlc2UgY2FwYWJpbGl0aWVzIHdoZW4gYnVpbGRpbmcgcGFnZSB0YWJsZXMuIEFzIEkKPj4+Pj4g Z2F2ZSAyNTYgTUIgZm9yIGRvbTAsIHRoZSBJT01NVSBtYXBwaW5nIHdhcyBidWlsdCBieSAyTSBt ZW1vcnkgYmxvY2tzCj4+Pj4+IG9ubHkuIEFzIEkgYW0gdXNpbmcgTkZTIGZvciBib3RoIGRvbTAg YW5kIGRvbVUgdGhlIGV0aGVybmV0IElQCj4+Pj4+IHBlcmZvcm1zIERNQSB0cmFuc2FjdGlvbnMg YWxtb3N0IGFsbCB0aGUgdGltZS4KPj4+Pj4gU29tZXRpbWVzLCBJIHNlZSB0aGUgSU9NTVUgcGFn ZSBmYXVsdHMgZHVyaW5nIGNyZWF0aW5nIGd1ZXN0IGRvbWFpbi4gSQo+Pj4+PiB0aGluaywgaXQg aGFwcGVucyBkdXJpbmcgWGVuIGlzIHNoYXR0ZXJpbmcgMk0gbWFwcGluZ3MgNEsgbWFwcGluZ3Mg KGl0Cj4+Pj4+IHVubWFwcyBkb20wIHBhZ2VzIGJ5IG9uZSA0SyBwYWdlIGF0IGEgdGltZSwgdGhl biBtYXBzIGRvbVUgcGFnZXMgdGhlcmUKPj4+Pj4gZm9yIGNvcHlpbmcgZG9tVSBpbWFnZXMpLgo+ Pj4+PiBCdXQsIEkgZG9uJ3Qgc2VlIGFueSBwYWdlIGZhdWx0cyB3aGVuIHRoZSBJT01NVSBwYWdl IHRhYmxlIHdhcyBidWlsdAo+Pj4+PiBieSA0SyBwYWdlcyBvbmx5Lgo+Pj4+Pgo+Pj4+PiBJIGhh ZCBhIHRhbGsgd2l0aCBKdWxpZW4gb24gSUlSQyBhbmQgd2UgY2FtZSB0byBjb25jbHVzaW9uIHRo YXQgdGhlCj4+Pj4+IHNhZmVzdCB3YXkgd291bGQgYmUgdG8gdXNlIDRLIHBhZ2VzIHRvIHByZXZl bnQgc2hhdHRlcmluZywgc28gdGhlCj4+Pj4+IElPTU1VIHNob3VsZG4ndCByZXBvcnQgc3VwZXJw YWdlIGNhcGFiaWxpdHkuCj4+Pj4+IE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBidWlsZCBJT01N VSBmcm9tIDRLIHBhZ2VzIHdlIHdpbGwgaGF2ZQo+Pj4+PiBwZXJmb3JtYW5jZSBkcm9wIChkdXJp bmcgYnVpbGRpbmcsIHdhbGtpbmcgcGFnZSB0YWJsZXMpLCBUTEIgcHJlc3N1cmUsCj4+Pj4+IGV0 Yy4KPj4+Pj4gQW5vdGhlciBwb3NzaWJsZSBzb2x1dGlvbiBKdWxpZW4gd2FzIHN1Z2dlc3Rpbmcg aXMgdG8gYWx3YXlzCj4+Pj4+IGJhbGxvb25pbmcgd2l0aCAyTSwgMUcsIGFuZCBub3QgdXNpbmcg NEsuIFRoYXQgd291bGQgaGVscCB1cyB0bwo+Pj4+PiBwcmV2ZW50IHNoYXR0ZXJpbmcgZWZmZWN0 Lgo+Pj4+PiBUaGUgZGlzY3Vzc2lvbiB3YXMgbW92ZWQgdG8gdGhlIE1MIHNpbmNlIGl0IHNlZW1z IHRvIGJlIGEgZ2VuZXJpYwo+Pj4+PiBpc3N1ZSBhbmQgdGhlIHJpZ2h0IHNvbHV0aW9uIHNob3Vs ZCBiZSB0aGluayBvZi4KPj4+Pj4KPj4+Pj4gV2hhdCBkbyB5b3UgdGhpbmsgaXMgdGhlIHJpZ2h0 IHdheSB0byBmb2xsb3c/IFVzZSA0SyBwYWdlcyBhbmQgZG9uJ3QKPj4+Pj4gYm90aGVyIHdpdGgg c2hhdHRlcmluZyBvciB0cnkgdG8gb3B0aW1pemU/IEFuZCBpZiB0aGUgaWRlYSB0byBtYWtlCj4+ Pj4+IGJhbGxvb24gbWVjaGFuaXNtIHNtYXJ0ZXIgbWFrZXMgc2Vuc2UgaG93IHRvIHRlYWNoIGJh bGxvb24gdG8gZG8gc28/Cj4+Pj4+IFRoYW5rIHlvdS4KPj4+Pgo+Pj4+Cj4+Pj4gQmFsbG9vbmlu ZyBhbmQgZm9yZWlnbiBtYXBwaW5ncyBhcmUgdGVycmlibGUgZm9yIHRyeWluZyB0byByZXRhaW4K Pj4+PiBzdXBlcnBhZ2UgbWFwcGluZ3MuICBObyBPUywgbm90IGV2ZW4gTGludXgsIGNhbiBzZW5z aWJseSBwcm92aWRlIHZpY3RpbQo+Pj4+IHBhZ2VzIGluIGEgdXNlZnVsIHdheSB0byBhdm9pZCBz aGF0dGVyaW5nLgo+Pj4+Cj4+Pj4gSWYgeW91IGNhcmUgYWJvdXQgcGVyZm9ybWFuY2UsIGRvbid0 IGV2ZXIgYmFsbG9vbi4gIEZvcmVpZ24gbWFwcGluZ3MgaW4KPj4+PiB0cmFuc2xhdGVkIGd1ZXN0 cyBzaG91bGQgc3RhcnQgZnJvbSB0aGUgdG9wIG9mIFJBTSwgYW5kIHdvcmsgdXB3YXJkcy4KPj4+ Cj4+Pgo+Pj4gSSBhbSBub3Qgc3VyZSB0byB1bmRlcnN0YW5kIHRoaXMuIENhbiB5b3UgZXh0ZW5k Pwo+Pgo+Pgo+PiBJIGFtIG5vdCBzdXJlIHdoYXQgaXMgdW5jbGVhci4gIEhhbmRpbmcgcmFuZG9t IGZyYW1lcyBvZiBSQU0gYmFjayB0byB0aGUKPj4gaHlwZXJ2aXNvciBpcyB3aGF0IGV4YWNlcmJh dGVzIGhvc3Qgc3VwZXJwYWdlIGZyYWdtZW50YXRpb24sIGFuZCBhbGwKPj4gYmFsbG9vbiBkcml2 ZXJzIGN1cnJlbnRseSBkbyBpdC4KPj4KPj4gSWYgeW91IHdhbnQgdG8gYXZvaWQgaG9zdCBzdXBl cnBhZ2UgZnJhZ21lbnRhdGlvbiwgZG9uJ3QgdXNlIGEKPj4gc2NhdHRlcmd1biBhcHByb2FjaCBv ZiBoYW5kaW5nIGZyYW1lcyBiYWNrIHRvIFhlbi4gIEhvd2V2ZXIsIGJlY2F1c2UKPj4gZXZlbiBM aW51eCBkb2Vzbid0IHByb3ZpZGUgZW5vdWdoIGhvb2tzIGludG8gdGhlIHBoeXNpY2FsIG1lbW9y eQo+PiBtYW5hZ2VtZW50IGxvZ2ljLCB0aGUgb25seSBzb2x1dGlvbiBpcyB0byBub3QgYmFsbG9v biBhdCBhbGwsIGFuZCB0byB1c2UKPj4gYWxyZWFkeS11bm9jY3VwaWVkIGZyYW1lcyBmb3IgZm9y ZWlnbiBtYXBwaW5ncy4KPgo+Cj4gRG8geW91IGhhdmUgYW55IHBvaW50ZXIgaW4gdGhlIExpbnV4 IGNvZGU/Cj4KPgo+Pgo+Pj4KPj4+Pgo+Pj4+Cj4+Pj4gQXMgZm9yIHRoZSBJT01NVSBzcGVjaWZp Y2FsbHksIHRoaW5ncyBhcmUgcmF0aGVyIGVhc2llci4gIEl0IGlzIHRoZQo+Pj4+IGd1ZXN0cyBy ZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBmcmFtZXMgb2ZmZXJlZCB1cCBmb3IgYmFsbG9v bmluZyBvcgo+Pj4+IGZvcmVpZ24gbWFwcGluZ3MgYXJlIHVudXNlZC4gIFRoZXJlZm9yZSwgaWYg YW55dGhpbmcgY2FyZXMgYWJvdXQgdGhlCj4+Pj4gc3BlY2lmaWMgNEsgcmVnaW9uIGJlY29taW5n IG5vbi1wcmVzZW50IGluIHRoZSBJT01NVSBtYXBwaW5ncywgaXQgaXMgdGhlCj4+Pj4gZ3Vlc3Qg a2VybmVscyBmYXVsdCBmb3Igb2ZmZXJpbmcgdXAgYSBmcmFtZSBhbHJlYWR5IGluIHVzZS4KPj4+ Pgo+Pj4+IEZvciB0aGUgc2hhdHRlcmluZyBob3dldmVyLCBJdCBpcyBYZW4ncyByZXNwb25zaWJp bGl0eSB0byBlbnN1cmUgdGhhdAo+Pj4+IGFsbCBvdGhlciBtYXBwaW5ncyBzdGF5IHZhbGlkIGF0 IGFsbCBwb2ludHMuICBUaGUgY29ycmVjdCB3YXkgdG8gZG8gdGhpcwo+Pj4+IGlzIHRvIGNvbnN0 cnVjdCBhIG5ldyBMMSB0YWJsZSwgbWlycm9yaW5nIHRoZSBMMiBzdXBlcnBhZ2UgYnV0IGxhY2tp bmcKPj4+PiB0aGUgc3BlY2lmaWMgNEsgbWFwcGluZyBpbiBxdWVzdGlvbiwgdGhlbiBhdG9taWNh bGx5IHJlcGxhY2UgdGhlIEwyCj4+Pj4gc3VwZXJwYWdlIGVudHJ5IHdpdGggdGhlIG5ldyBMMSB0 YWJsZSwgdGhlbiBpc3N1ZSBhbiBJT01NVSBUTEIKPj4+PiBpbnZhbGlkYXRpb24gdG8gcmVtb3Zl IGFueSBjYWNoZWQgbWFwcGluZ3MuCj4+Pj4KPj4+PiBCeSBmb2xsb3dpbmcgdGhhdCBwcm9jZWR1 cmUsIGFsbCBETUEgd2l0aGluIHRoZSAyTSByZWdpb24sIGJ1dCBub3QKPj4+PiBoaXR0aW5nIHRo ZSA0SyBmcmFtZSwgd29uJ3Qgb2JzZXJ2ZSBhbnkgaW50ZXJpbSBsYWNrIG9mIG1hcHBpbmdzLiAg SXQKPj4+PiBhcHBlYXJzIGZyb20geW91ciBkZXNjcmlwdGlvbiB0aGF0IFhlbiBpc24ndCBmb2xs b3dpbmcgdGhlIHByb2NlZHVyZS4KPj4+Cj4+Pgo+Pj4gWGVuIGlzIGZvbGxvd2luZyB3aGF0J3Mg dGhlIEFSTSBBUk0gaXMgbWFuZGF0aW5nLiBGb3Igc2hhdHRlcmluZyBwYWdlCj4+PiB0YWJsZSwg d2UgaGF2ZSB0byBmb2xsb3cgdGhlIGJyZWFrLWJlZm9yZS1zZXF1ZW5jZSBpLmU6Cj4+PiAgICAg LSBJbnZhbGlkYXRlIHRoZSBMMiBlbnRyeQo+Pj4gICAgIC0gRmx1c2ggdGhlIFRMQnMKPj4+ICAg ICAtIEFkZCB0aGUgbmV3IEwxIHRhYmxlCj4+PiBTZWUgRDQtMTgxNiBpbiBBUk0gRERJIDA0ODdB LmtfaXNzMTA3NzUgZm9yIGRldGFpbHMuIFNvIHdlIGVuZCB1cCBpbiBhCj4+PiBzbWFsbCB3aW5k b3cgd2hlcmUgdGhlcmUgYXJlIG5vIHZhbGlkIG1hcHBpbmcuIEl0IGlzIGVhc3kgdG8gdHJhcCBk YXRhCj4+PiBhYm9ydCBmcm9tIHByb2Nlc3NvciBhbmQgcmVzdGFydGluZyBpdCBidXQgbm90IGZv ciBkZXZpY2UgbWVtb3J5Cj4+PiB0cmFuc2FjdGlvbnMuCj4+Pgo+Pj4gWGVuIGJ5IGRlZmF1bHQg aXMgc2hhcmluZyBzdGFnZS0yIHBhZ2UgdGFibGVzIHdpdGggYmV0d2VlbiB0aGUgSU9NTVUKPj4+ IGFuZCB0aGUgTU1VLiBIb3dldmVyLCBmcm9tIHRoZSBkaXNjdXNzaW9uIEkgaGFkIHdpdGggT2xl a3NhbmRyLCB0aGV5Cj4+PiBhcmUgbm90IHNoYXJpbmcgcGFnZSB0YWJsZXMgYW5kIHN0aWxsIHNl ZSB0aGUgcHJvYmxlbS4gSSBhbSBub3Qgc3VyZQo+Pj4gaG93IHRoZXkgYXJlIHVwZGF0aW5nIHRo ZSBwYWdlIHRhYmxlIGhlcmUuIE9sZWtzYW5kciwgY2FuIHlvdSBwcm92aWRlCj4+PiBtb3JlIGRl dGFpbHM/Cj4+Cj4+Cj4+IEFyZSB5b3Ugc2F5aW5nIHRoYXQgQVJNIGhhcyBubyB3YXkgb2YgbWFr aW5nIGF0b21pYyB1cGRhdGVzIHRvIHRoZSBJT01NVQo+PiBtYXBwaW5ncz8gIChIb3cgZG8gSSBn ZXQgYWNjZXNzIHRvIHRoYXQgZG9jdW1lbnQ/ICBHb29nbGUgZ2V0cyBtZSB0bwo+Pgo+PiBodHRw Oi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvaW5kZXguanNwP3RvcGljPS9jb20uYXJtLmRvYy5z dWJzZXQuYXJjaGl0ZWN0dXJlLnJlZmVyZW5jZS9pbmRleC5odG1sLAo+PiBidXQKPj4gaHR0cDov L2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLmRkaTA0ODdhLmsvaW5k ZXguaHRtbAo+PiB3aGljaCBsb29rcyBsaWtlIHRoZSBkb2N1bWVudCB5b3Ugc3BlY2lmaWVkIHJl c3VsdHMgaW4gNDA0LikKPgo+Cj4gQmVsb3cgYSBsaW5rLCBJIGFtIG5vdCBzdXJlIHdoeSBnb29n bGUgZG9lcyBub3QgcmVmZXIgaXQ6Cj4KPiBodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAv dG9waWMvY29tLmFybS5kb2MuZGRpMDQ4N2Eua18xMDc3NS9pbmRleC5odG1sCj4KPj4KPj4gSWYg c28sIHRoYXQgaXMgYW4gYXJjaGl0ZWN0dXJlIGJ1ZyBJTU8uICBCeSBkZXNpZ24sIHRoZSBJT01N VSBpcyBvdXQgb2YKPj4gY29udHJvbCBvZiBndWVzdCBzb2Z0d2FyZSwgYW5kIHRoZSBoeXBlcnZp c29yIHNob3VsZCBiZSBhYmxlIHRvIG1ha2UKPj4gYXRvbWljIG1vZGlmaWNhdGlvbnMgd2l0aG91 dCBndWVzdCBjb29wZXJhdGlvbi4KPgo+Cj4gSSB0aGluayB5b3UgbWlzcmVhZCB3aGF0IEkgbWVh bnQsIElPTU1VIHN1cHBvcnRzIGF0b21pYyBvcGVyYXRpb25zLiBIb3dldmVyLAo+IGlmIHlvdSBz aGFyZSB0aGUgcGFnZSB0YWJsZSB3ZSBoYXZlIHRvIGFwcGx5IEJyZWFrLUJlZm9yZS1NYWtlIHdo ZW4KPiBzaGF0dGVyaW5nIHN1cGVycGFnZS4gVGhpcyBpcyBtYW5kYXRvcnkgaWYgeW91IHdhbnQg dG8gZ2V0IFhlbiBydW5uaW5nIG9uCj4gYWxsIHRoZSBtaWNyby1hcmNoaXRlY3R1cmVzLgo+Cj4g U29tZSBJT01NVSBtYXkgY29wZSB3aXRoIHRoZSBCQk0sIHNvbWUgbm90LiBJIGhhdmVuJ3Qgc2Vl biBhbnkgaXNzdWUgc28gZmFyCj4gKGl0IGRvZXMgbm90IG1lYW4gdGhlcmUgYXJlIG5vbmUpLgo+ Cj4gVGhlIElPTU1VIHVzZWQgYnkgT2xla3NhbmRyIChlLmcgVk1TQS1JUE1NVSkgaXMgYW4gSVAg ZnJvbSBSZW5lc2FzIHdoaWNoIEkKPiBuZXZlciB1c2VkIG15c2VsZi4gSW4gaGlzIGNhc2UgaGUg bmVlZHMgZGlmZmVyZW50IHBhZ2UgdGFibGVzIGJlY2F1c2UgdGhlCj4gbGF5b3V0cyBhcmUgbm90 IHRoZSBzYW1lLgo+Cj4gT2xla3NhbmRyLCBsb29raW5nIGF0IHRoZSBjb2RlIHlvdXIgcHJvdmlk ZWQsIHRoZSBzdXBlcnBhZ2UgYXJlIHNwbGl0IHRoZQo+IHdheSBBbmRyZXcgc2FpZCwgaS5lOgo+ ICAgICAgICAgMSkgYWxsb2NhdGluZyBsZXZlbCAzIHRhYmxlIG1pbnVzIHRoZSA0SyBtYXBwaW5n Cj4gICAgICAgICAyKSByZXBsYWNlIGxldmVsIDIgZW50cnkgd2l0aCB0aGUgbmV3IHRhYmxlCj4K PiBBbSBJIHJpZ2h0PwoKSXQgc2VlbXMsIHllcy4gV2Fsa2luZyB0aGUgcGFnZSB0YWJsZSBkb3du IHdoZW4gdHJ5aW5nIHRvIHVubWFwIHdlCmJ1bXAgaW50byBsZWFmIGVudHJ5ICgyTSBtYXBwaW5n KSwKc28gMk0tNEsgbWFwcGluZyBhcmUgaW5zZXJ0ZWQgYXQgdGhlIG5leHQgbGV2ZWwgYW5kIGFm dGVyIHRoYXQgdGhlCnBhZ2UgdGFibGUgZW50cnkgYXJlIHJlcGxhY2VkLgoKPgo+IENoZWVycywK Pgo+IC0tCj4gSnVsaWVuIEdyYWxsCgoKCi0tIApSZWdhcmRzLAoKT2xla3NhbmRyIFR5c2hjaGVu a28KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54 ZW4ub3JnL3hlbi1kZXZlbAo=