From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: [PATCH v7 15/17] vmx: VT-d posted-interrupt core logic handling Date: Mon, 21 Sep 2015 10:18:31 +0100 Message-ID: <55FFCB67.3050900@citrix.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: "Wu, Feng" , Dario Faggioli Cc: "Tian, Kevin" , Keir Fraser , George Dunlap , Andrew Cooper , "xen-devel@lists.xen.org" , Jan Beulich List-Id: xen-devel@lists.xenproject.org T24gMDkvMjEvMjAxNSAwNjowOCBBTSwgV3UsIEZlbmcgd3JvdGU6Cj4gCj4gCj4+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tCj4+IEZyb206IEdlb3JnZSBEdW5sYXAgW21haWx0bzpnZW9yZ2Uu ZHVubGFwQGNpdHJpeC5jb21dCj4+IFNlbnQ6IFRodXJzZGF5LCBTZXB0ZW1iZXIgMTcsIDIwMTUg NTozOCBQTQo+PiBUbzogRGFyaW8gRmFnZ2lvbGk7IFd1LCBGZW5nCj4+IENjOiB4ZW4tZGV2ZWxA bGlzdHMueGVuLm9yZzsgVGlhbiwgS2V2aW47IEtlaXIgRnJhc2VyOyBHZW9yZ2UgRHVubGFwOyBB bmRyZXcKPj4gQ29vcGVyOyBKYW4gQmV1bGljaAo+PiBTdWJqZWN0OiBSZTogW1hlbi1kZXZlbF0g W1BBVENIIHY3IDE1LzE3XSB2bXg6IFZULWQgcG9zdGVkLWludGVycnVwdCBjb3JlIGxvZ2ljCj4+ IGhhbmRsaW5nCj4+Cj4+IE9uIDA5LzE3LzIwMTUgMDk6NDggQU0sIERhcmlvIEZhZ2dpb2xpIHdy b3RlOgo+Pj4gT24gVGh1LCAyMDE1LTA5LTE3IGF0IDA4OjAwICswMDAwLCBXdSwgRmVuZyB3cm90 ZToKPj4+Cj4+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+Pj4+IEZyb206IERhcmlv IEZhZ2dpb2xpIFttYWlsdG86ZGFyaW8uZmFnZ2lvbGlAY2l0cml4LmNvbV0KPj4+Cj4+Pj4+IFNv LCBJIGd1ZXNzLCBmaXJzdCBvZiBhbGwsIGNhbiB5b3UgY29uZmlybSB3aGV0aGVyIG9yIG5vdCBp dCdzIGV4cGxvZGluZwo+Pj4+PiBpbiBkZWJ1ZyBidWlsZHM/Cj4+Pj4KPj4+PiBEb2VzIHRoZSBm b2xsb3dpbmcgaW5mb3JtYXRpb24gaW4gQ29uZmlnLm1rIG1lYW4gaXQgaXMgYSBkZWJ1ZyBidWls ZD8KPj4+Pgo+Pj4+ICMgQSBkZWJ1ZyBidWlsZCBvZiBYZW4gYW5kIHRvb2xzPwo+Pj4+IGRlYnVn ID89IHkKPj4+PiBkZWJ1Z19zeW1ib2xzID89ICQoZGVidWcpCj4+Pj4KPj4+IEkgdGhpbmsgc28u IEJ1dCBhcyBJIHNhaWQgaW4gbXkgb3RoZXIgZW1haWwsIEkgd2FzIHdyb25nLCBhbmQgdGhpcyBp cwo+Pj4gcHJvYmFibHkgbm90IGFuIGlzc3VlLgo+Pj4KPj4+Pj4gQW5kIGluIGVpdGhlciBjYXNl IChqdXN0IHRvc3Npbmcgb3V0IGlkZWFzKSB3b3VsZCBpdCBiZQo+Pj4+PiBwb3NzaWJsZSB0byBk ZWFsIHdpdGggdGhlICJpbnRlcnJ1cHQgYWxyZWFkeSByYWlzZWQgd2hlbiBibG9ja2luZyIgY2Fz ZToKPj4+Pgo+Pj4+IFRoYW5rcyBmb3IgdGhlIHN1Z2dlc3Rpb25zIGJlbG93IQo+Pj4+Cj4+PiA6 LSkKPj4+Cj4+Pj4+ICAtIGxhdGVyIGluIHRoZSBjb250ZXh0IHN3aXRjaGluZyBmdW5jdGlvbiA/ Cj4+Pj4gSW4gdGhpcyBjYXNlLCB3ZSBtaWdodCBuZWVkIHRvIHNldCBhIGZsYWcgaW4gdm14X3By ZV9jdHhfc3dpdGNoX3BpKCkgaW5zdGVhZAo+Pj4+IG9mIGNhbGxpbmcgdmNwdV91bmJsb2NrKCkg ZGlyZWN0bHksIHRoZW4gd2hlbiBpdCByZXR1cm5zIHRvIGNvbnRleHRfc3dpdGNoKCksCj4+Pj4g d2UgY2FuIGNoZWNrIHRoZSBmbGFnIGFuZCBkb24ndCByZWFsbHkgYmxvY2sgdGhlIHZDUFUuCj4+ Pj4KPj4+IFllYWgsIGFuZCB0aGF0IHdvdWxkIHN0aWxsIGJlIHJhdGhlciBoYXJkIHRvIHVuZGVy c3RhbmQgYW5kIG1haW50YWluLAo+Pj4gSU1PLgo+Pj4KPj4+PiBCdXQgSSBkb24ndCBoYXZlIGEg Y2xlYXIKPj4+PiBwaWN0dXJlIGFib3V0IGhvdyB0byBhcmNoaXZlIHRoaXMsIGhlcmUgYXJlIHNv bWUgcXVlc3Rpb25zIGZyb20gbWU6Cj4+Pj4gLSBXaGVuIHdlIGFyZSBpbiBjb250ZXh0X3N3aXRj aCgpLCB3ZSBoYXZlIGRvbmUgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIHRvCj4+Pj4gdmNwdSdzIHN0 YXRlOgo+Pj4+IAkqIHNkLT5jdXJyIGlzIHNldCB0byBuZXh0Cj4+Pj4gCSogdkNQVSdzIHJ1bm5p bmcgc3RhdGUgKGJvdGggcHJldiBhbmQgbmV4dCApIGlzIGNoYW5nZWQgYnkKPj4+PiAJICB2Y3B1 X3J1bnN0YXRlX2NoYW5nZSgpCj4+Pj4gCSogbmV4dC0+aXNfcnVubmluZyBpcyBzZXQgdG8gMQo+ Pj4+IAkqIHBlcmlvZGljIHRpbWVyIGZvciBwcmV2IGlzIHN0b3BwZWQKPj4+PiAJKiBwZXJpb2Rp YyB0aW1lciBmb3IgbmV4dCBpcyBzZXR1cAo+Pj4+IAkuLi4uLi4KPj4+Pgo+Pj4+IFNvIHdoYXQg cG9pbnQgc2hvdWxkIHdlIHBlcmZvcm0gdGhlIGFjdGlvbiB0byBfdW5ibG9ja18gdGhlIHZDUFU/ IFdlCj4+Pj4gTmVlZCB0byByb2xsIGJhY2sgdGhlIGZvcm1hbCBjaGFuZ2VzIHRvIHRoZSB2Q1BV J3Mgc3RhdGUsIHJpZ2h0Pwo+Pj4+Cj4+PiBNbW0uLi4gbm90IHJlYWxseS4gTm90IGJsb2NraW5n IHByZXYgZG9lcyBub3QgbWVhbiB0aGF0IHByZXYgd291bGQgYmUKPj4+IGtlcHQgcnVubmluZyBv biB0aGUgcENQVSwgYW5kIHRoYXQncyB0cnVlIGZvciB5b3VyIGN1cnJlbnQgc29sdXRpb24gYXMK Pj4+IHdlbGwhIEFzIHlvdSBzYXkgeW91cnNlbGYsIHlvdSdyZSBhbHJlYWR5IGluIHRoZSBwcm9j ZXNzIG9mIHN3aXRjaGluZwo+Pj4gYmV0d2VlbiBwcmV2IGFuZCBuZXh0LCBhdCBhIHBvaW50IHdo ZXJlIGl0J3MgYWxyZWFkeSBhIHRoaW5nIHRoYXQgbmV4dAo+Pj4gd2lsbCBiZSB0aGUgdkNQVSB0 aGF0IHdpbGwgcnVuLiBOb3QgYmxvY2tpbmcgbWVhbnMgdGhhdCBwcmV2IGlzCj4+PiByZWluc2Vy dGVkIHRvIHRoZSBydW5xdWV1ZSwgYW5kIGEgbmV3IGludm9jYXRpb24gdG8gdGhlIHNjaGVkdWxl ciBpcwo+Pj4gKHBvdGVudGlhbGx5KSBxdWV1ZWQgYXMgd2VsbCAodmlhIHJhaXNpbmcgU0NIRURV TEVfU09GVElSUSwgaW4KPj4+IF9fcnVucV90aWNrbGUoKSksIGJ1dCBpdCdzIG9ubHkgd2hlbiBz dWNoIG5ldyBzY2hlZHVsaW5nIGhhcHBlbnMgdGhhdAo+Pj4gcHJldiB3aWxsIChwb3RlbnRpYWxs eSkgYmUgc2VsZWN0ZWQgdG8gcnVuIGFnYWluLgo+Pj4KPj4+IFNvLCBubywgdW5sZXNzIEknbSBm dWxseSBtaXNzaW5nIHlvdXIgcG9pbnQsIHRoZXJlIHdvdWxkbid0IGJlIG5vCj4+PiByb2xsYmFj ayByZXF1aXJlZC4gSG93ZXZlciwgSSBzdGlsbCB3b3VsZCBsaWtlIHRoZSBvdGhlciBzb2x1dGlv biAoZG9pbmcKPj4+IHN0dWZmIGluIHZjcHVfYmxvY2soKSkgYmV0dGVyIChzZWUgYmVsb3cpLgo+ Pj4KPj4+Pj4gIC0gd2l0aCBhbm90aGVyIGhvb2ssIHBlcmhhcHMgaW4gdmNwdV9ibG9jaygpID8K Pj4+Pgo+Pj4+IFdlIGNvdWxkIGNoZWNrIHRoaXMgaW4gdmNwdV9ibG9jaygpLCBob3dldmVyLCB0 aGUgbG9naWMgaGVyZSBpcyB0aGF0IGJlZm9yZQo+Pj4+IHZDUFUgaXMgYmxvY2tlZCwgd2UgbmVl ZCB0byBjaGFuZ2UgdGhlIHBvc3RlZC1pbnRlcnJ1cHQgZGVzY3JpcHRvciwKPj4+PiBhbmQgZHVy aW5nIGNoYW5naW5nIGl0LCBpZiAnT04nIGJpdCBpcyBzZXQsIHdoaWNoIG1lYW5zIFZULWQgaGFy ZHdhcmUKPj4+PiBpc3N1ZXMgYSBub3RpZmljYXRpb24gZXZlbnQgYmVjYXVzZSBpbnRlcnJ1cHRz IGZyb20gdGhlIGFzc2lnbmVkIGRldmljZXMKPj4+PiBpcyBjb21pbmcsIHdlIGRvbid0IG5lZWQg dG8gYmxvY2sgdGhlIHZDUFUgYW5kIGhlbmNlIG5vIG5lZWQgdG8gdXBkYXRlCj4+Pj4gdGhlIFBJ IGRlc2NyaXB0b3IgaW4gdGhpcyBjYXNlLgo+Pj4+Cj4+PiBZZXAsIEkgc2F3IHRoYXQuIEJ1dCBj b3VsZCBpdCBiZSBwb3NzaWJsZSB0byBkbyAqZXZlcnl0aGluZyogcmVsYXRlZCB0bwo+Pj4gYmxv Y2tpbmcsIGluY2x1ZGluZyB0aGUgdXBkYXRlIG9mIHRoZSBkZXNjcmlwdG9yLCBpbiB2Y3B1X2Js b2NrKCksIGlmIG5vCj4+PiBpbnRlcnJ1cHQgaGF2ZSBiZWVuIHJhaXNlZCB5ZXQgYXQgdGhhdCB0 aW1lPyBJIG1lYW4sIHdvdWxkIHlvdSwgaWYKPj4+IHVwZGF0aW5nIHRoZSBkZXNjcmlwdG9yIGlu IHRoZXJlLCBzdGlsbCBnZXQgdGhlIGV2ZW50IHRoYXQgYWxsb3dzIHlvdSB0bwo+Pj4gY2FsbCB2 Y3B1X3dha2UoKSwgYW5kIGhlbmNlIHZteF92Y3B1X3dha2VfcHJlcGFyZSgpLCB3aGljaCB3b3Vs ZCB1bmRvCj4+PiB0aGUgYmxvY2tpbmcsIG5vIG1hdHRlciB3aGV0aGVyIHRoYXQgcmVzdWx0ZWQg aW4gYW4gYWN0dWFsIGNvbnRleHQKPj4+IHN3aXRjaCBhbHJlYWR5IG9yIG5vdD8KPj4+Cj4+PiBJ IGFwcHJlY2lhdGUgdGhhdCB0aGlzIG5hcnJvd3MgdGhlIHdpbmRvdyBmb3Igc3VjaCBhbiBldmVu dCB0byBoYXBwZW4gYnkKPj4+IHF1aXRlIGEgYml0LCBtYWtpbmcgdGhlIGxvZ2ljIGl0c2VsZiBh IGxpdHRsZSBsZXNzIHVzZWZ1bCAoaXQgbWFrZXMKPj4+IHRoaW5ncyBtb3JlIHNpbWlsYXIgdG8g InJlZ3VsYXIiIGJsb2NraW5nIHZzLiBldmVudCBkZWxpdmVyeSwgdGhvdWdoLAo+Pj4gQUZBSUNU KSwgYnV0IGlmIGl0J3MgY29ycmVjdCwgYWQgaWYgaXQgYWxsb3dzIHVzIHRvIHNhdmUgdGhlIHVn bHkKPj4+IGludm9jYXRpb24gb2YgdmNwdV91bmJsb2NrIGZyb20gY29udGV4dCBzd2l0Y2ggY29u dGV4dCwgSSdkIGdpdmUgaXQgYQo+Pj4gdHJ5Lgo+Pj4KPj4+IEFmdGVyIGFsbCwgdGhpcyBQSSB0 aGluZyByZXF1aXJlcyBhY3Rpb25zIHRvIGJlIHRha2VuIHdoZW4gYSB2Q1BVIGlzCj4+PiBzY2hl ZHVsZWQgb3IgZGVzY2hlZHVsZWQgYmVjYXVzZSBvZiBibG9ja2luZywgdW5ibG9ja2luZyBhbmQK Pj4+IHByZWVtcHRpb25zLCBhbmQgaXQgd291bGQgc2VlbSBuYXR1cmFsIHRvIG1lIHRvOgo+Pj4g IC0gZGVhbCB3aXRoIGJsb2NraW5ncyBpbiB2Y3B1X2Jsb2NrKCkKPj4+ICAtIGRlYWwgd2l0aCB1 bmJsb2NraW5ncyBpbiB2Y3B1X3dha2UoKQo+Pj4gIC0gZGVhbCB3aXRoIHByZWVtcHRpb25zIGlu IGNvbnRleHRfc3dpdGNoKCkKPj4+Cj4+PiBUaGlzIGRvZXMgbm90IG1lYW4gYmVpbmcgYWJsZSB0 byBjb25zb2xpZGF0ZSBzb21lIG9mIHRoZSBjYXNlcyAobGlrZQo+Pj4gYmxvY2tpbmdzIGFuZCBw cmVlbXB0aW9ucywgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgY29kZSkgd2VyZSBub3QK Pj4+IGEgbmljZSB0aGluZy4uLiBCdXQgd2UgZG9uJ3Qgd2FudCBpdCBhdCBhbGwgY29zdHMgLiA6 LSkKPj4KPj4gU28ganVzdCB0byBjbGFyaWZ5IHRoZSBzaXR1YXRpb24uLi4KPj4KPj4gSWYgYSB2 Y3B1IGNvbmZpZ3VyZWQgZm9yIHRoZSAicnVubmluZyIgc3RhdGUgKGkuZS4sIE5WIHNldCB0bwo+ PiAicG9zdGVkX2ludHJfdmVjdG9yIiwgbm90aWZpY2F0aW9ucyBlbmFibGVkKSwgYW5kIGFuIGlu dGVycnVwdCBoYXBwZW5zCj4+IGluIHRoZSBoeXBlcnZpc29yIC0tIHdoYXQgaGFwcGVucz8KPj4K Pj4gSXMgaXQgdGhlIGNhc2UgdGhhdCB0aGUgaW50ZXJydXB0IGlzIG5vdCBhY3R1YWxseSBkZWxp dmVyZWQgdG8gdGhlCj4+IHByb2Nlc3NvciwgYnV0IHRoYXQgdGhlIHBlbmRpbmcgYml0IHdpbGwg YmUgc2V0IGluIHRoZSBwaSBmaWVsZCwgc28gdGhhdAo+PiB0aGUgaW50ZXJydXB0IHdpbGwgYmUg ZGVsaXZlcmVkIHRoZSBuZXh0IHRpbWUgdGhlIGh5cGVydmlzb3IgcmV0dXJucwo+PiBpbnRvIHRo ZSBndWVzdD8KPj4KPj4gKEkgYW0gYXNzdW1pbmcgdGhhdCBpcyB0aGUgY2FzZSwgYmVjYXVzZSBp ZiB0aGUgaHlwZXJ2aXNvciAqZG9lcyogZ2V0IGFuCj4+IGludGVycnVwdCwgdGhlbiBpdCBjYW4g anVzdCB1bmJsb2NrIGl0IHRoZXJlLikKPj4KPj4gVGhpcyBzb3J0IG9mIHJhY2UgY29uZGl0aW9u IC0tIHdoZXJlIHdlIGdldCBhbiBpbnRlcnJ1cHQgdG8gd2FrZSB1cCBhCj4+IHZjcHUgYXMgd2Un cmUgYmxvY2tpbmcgLS0gaXMgYWxyZWFkeSBoYW5kbGVkIGZvciAib2xkLXN0eWxlIiBpbnRlcnJ1 cHRzCj4+IGluIHZjcHVfYmxvY2s6Cj4+Cj4+IHZvaWQgdmNwdV9ibG9jayh2b2lkKQo+PiB7Cj4+ ICAgICBzdHJ1Y3QgdmNwdSAqdiA9IGN1cnJlbnQ7Cj4+Cj4+ICAgICBzZXRfYml0KF9WUEZfYmxv Y2tlZCwgJnYtPnBhdXNlX2ZsYWdzKTsKPj4KPj4gICAgIC8qIENoZWNrIGZvciBldmVudHMgL2Fm dGVyLyBibG9ja2luZzogYXZvaWRzIHdha2V1cCB3YWl0aW5nIHJhY2UuICovCj4+ICAgICBpZiAo IGxvY2FsX2V2ZW50c19uZWVkX2RlbGl2ZXJ5KCkgKQo+PiAgICAgewo+PiAgICAgICAgIGNsZWFy X2JpdChfVlBGX2Jsb2NrZWQsICZ2LT5wYXVzZV9mbGFncyk7Cj4+ICAgICB9Cj4+ICAgICBlbHNl Cj4+ICAgICB7Cj4+ICAgICAgICAgVFJBQ0VfMkQoVFJDX1NDSEVEX0JMT0NLLCB2LT5kb21haW4t PmRvbWFpbl9pZCwgdi0+dmNwdV9pZCk7Cj4+ICAgICAgICAgcmFpc2Vfc29mdGlycShTQ0hFRFVM RV9TT0ZUSVJRKTsKPj4gICAgIH0KPj4gfQo+Pgo+PiBUaGF0IGlzLCB3ZSBzZXQgX1ZQRl9ibG9j a2VkLCBzbyB0aGF0IGFueSBpbnRlcnJ1cHQgd2hpY2ggd291bGQgd2FrZSBpdAo+PiB1cCBhY3R1 YWxseSB3YWtlcyBpdCB1cCwgYW5kIHRoZW4gd2UgY2hlY2sgbG9jYWxfZXZlbnRzX25lZWRfZGVs aXZlcnkoKQo+PiB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgdGhhdCBjYW1lIGluIGFmdGVyIHdl IGRlY2lkZWQgdG8gYmxvY2sgYnV0Cj4+IGJlZm9yZSB3ZSBtYWRlIHN1cmUgdGhhdCBhbiBpbnRl cnJ1cHQgd291bGQgd2FrZSB1cyB1cC4KPj4KPj4gSSB0aGluayBpdCB3b3VsZCBiZSBiZXN0IGlm IHdlIGNvdWxkIGtlZXAgYWxsIHRoZSBsb2dpYyB0aGF0IGRvZXMgdGhlCj4+IHNhbWUgdGhpbmcg aW4gdGhlIHNhbWUgcGxhY2UuICBXaGljaCB3b3VsZCBtZWFuIGluIHZjcHVfYmxvY2soKSwgYWZ0 ZXIKPj4gY2FsbGluZyBzZXRfYml0KF9WUEZfYmxvY2tlZCksIGNoYW5naW5nIHRoZSBOViB0byBw aV93YWtldXBfdmVjdG9yLCBhbmQKPj4gdGhlbiBleHRlbmRpbmcgbG9jYWxfZXZlbnRzX25lZWRf ZGVsaXZlcnkoKSB0byBhbHNvIGxvb2sgZm9yIHBlbmRpbmcgUEkKPj4gZXZlbnRzLgo+Pgo+PiBM b29raW5nIGEgYml0IG1vcmUgYXQgeW91ciBzdGF0ZXMsIEkgdGhpbmsgdGhlIGFjdGlvbnMgdGhh dCBuZWVkIHRvIGJlCj4+IHRha2VuIG9uIGFsbCB0aGUgdHJhbnNpdGlvbnMgYXJlIHRoZXNlIChj b2xsYXBzaW5nICdydW5uYWJsZScgYW5kCj4+ICdvZmZsaW5lJyBpbnRvIHRoZSBzYW1lIHN0YXRl KToKPj4KPj4gYmxvY2tlZCAtPiBydW5uYWJsZSAodmNwdV93YWtlKQo+PiAgLSBOViA9IHBvc3Rl ZF9pbnRyX3ZlY3Rvcgo+PiAgLSBUYWtlIHZjcHUgb2ZmIGJsb2NrZWQgbGlzdAo+PiAgLSBTTiA9 IDEKPj4gcnVubmFibGUgLT4gcnVubmluZyAoY29udGV4dF9zd2l0Y2gpCj4+ICAtIFNOID0gMAo+ IAo+IE5lZWQgc2V0IHRoZSAnTkRTVCcgZmllbGQgdG8gdGhlIHJpZ2h0IGRlc3QgdkNQVSBhcyB3 ZWxsLgo+IAo+PiBydW5uaW5nIC0+IHJ1bm5hYmxlIChjb250ZXh0X3N3aXRjaCkKPj4gIC0gU04g PSAxCj4+IHJ1bm5pbmcgLT4gYmxvY2tlZCAodmNwdV9ibG9jaykKPj4gIC0gTlYgPSBwaV93YWtl dXBfdmVjdG9yCj4+ICAtIEFkZCB2Y3B1IHRvIGJsb2NrZWQgbGlzdAo+IAo+IE5lZWQgc2V0IHRo ZSAnTkRTVCcgZmllbGQgdG8gdGhlIHBDUFUgd2hpY2ggb3ducyB0aGUgYmxvY2tpbmcgbGlzdCwK PiBTbyB3ZSBjYW4gd2FrZSB1cCB0aGUgdkNQVSBmcm9tIHRoZSByaWdodCBibG9ja2luZyBsaXN0 IGluIHRoZSB3YWtldXAKPiBldmVudCBoYW5kbGVyLgo+IAo+Pgo+PiBUaGlzIGFjdHVhbGx5IGhh cyBhIGZldyBwcmV0dHkgbmljZSBwcm9wZXJ0aWVzOgo+PiAxLiBZb3UgaGF2ZSBhIG5pY2UgcGFp ciBvZiBjb21wbGVtZW50YXJ5IGFjdGlvbnMgLS0gYmxvY2sgLyB3YWtlLCBydW4gLwo+PiBwcmVl bXB0Cj4+IDIuIFRoZSBwb3RlbnRpYWxseSBsb25nIGFjdGlvbnMgd2l0aCBsaXN0cyBoYXBwZW4g aW4gdmNwdV93YWtlIGFuZAo+PiB2Y3B1X2Jsb2NrLCBub3Qgb24gdGhlIGNvbnRleHQgc3dpdGNo IHBhdGgKPj4KPj4gQW5kIGF0IHRoaXMgcG9pbnQsIHlvdSBkb24ndCBoYXZlIHRoZSAibGF6eSBj b250ZXh0IHN3aXRjaCIgaXNzdWUKPj4gYW55bW9yZSwgZG8gd2U/ICBCZWNhdXNlIHdlJ3ZlIGhh bmRsZWQgdGhlICJibG9ja2luZyIgY2FzZSBpbgo+PiB2Y3B1X2Jsb2NrKCksIHdlIGRvbid0IG5l ZWQgdG8gZG8gYW55dGhpbmcgaW4gdGhlIG1haW4gY29udGV4dF9zd2l0Y2goKQo+PiAod2hpY2gg bWF5IGRvIHRoZSBsYXp5IGNvbnRleHQgc3dpdGNoaW5nIGludG8gaWRsZSkuICBXZSBvbmx5IG5l ZWQgdG8gZG8KPj4gc29tZXRoaW5nIGluIHRoZSBhY3R1YWwgX19jb250ZXh0X3N3aXRjaCgpLgo+ IAo+IEkgdGhpbmsgdGhlIGhhbmRsaW5nIGZvciBsYXp5IGNvbnRleHQgc3dpdGNoIGlzIG5vdCBv bmx5IGZvciB0aGUgYmxvY2tpbmcgY2FzZSwKPiB3ZSBzdGlsbCBuZWVkIHRvIGRvIHNvbWV0aGlu ZyBmb3IgbGF6eSBjb250ZXh0IHN3aXRjaCBldmVuIHdlIGhhbmRsZWQgdGhlCj4gYmxvY2tpbmcg Y2FzZSBpbiB2Y3B1X2Jsb2NrKCksIHN1Y2ggYXMsCj4gMS4gRm9yIG5vbi1pZGxlIC0+IGlkbGUK PiAtIHNldCAnU04nCgpJZiB3ZSBzZXQgU04gaW4gdmNwdV9ibG9jaygpLCB0aGVuIHdlIGRvbid0 IG5lZWQgdG8gc2V0IGl0IG9uIGNvbnRleHQKc3dpdGNoIC0tIOaYr+S4jeaYr++8nwoKPiAyLiBG b3IgaWRsZSAtPiBub24taWRsZQo+IC0gY2xlYXIgJ1NOJwo+IC0gc2V0ICdORFNUJyBmaWxlZCB0 byB0aGUgcmlnaHQgY3B1IHRoZSB2Q1BVIGlzIGdvaW5nIHRvIHJ1bm5pbmcgb24uIChNYXliZQo+ IHRoaXMgb25lIGRvZXNuJ3QgYmVsb25nIHRvIGxhenkgY29udGV4dCBzd2l0Y2gsIGlmIHRoZSBj cHUgb2YgdGhlIG5vbi1pZGxlCj4gdkNQVSB3YXMgY2hhbmdlZCwgdGhlbiBwZXJfY3B1KGN1cnJf dmNwdSwgY3B1KSAhPSBuZXh0IGluIGNvbnRleHRfc3dpdGNoKCksCj4gaGVuY2UgaXQgd2lsbCBn byB0byBfX2NvbnRleHRfc3dpdGNoKCkgZGlyZWN0bHksIHJpZ2h0PykKCklmIHdlIGNsZWFyIFNO KiBpbiB2Y3B1X3dha2UoKSwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyIGl0IG9uIGEKY29u dGV4dCBzd2l0Y2guICBBbmQgdGhlIG9ubHkgd2F5IHdlIGNhbiB0cmFuc2l0aW9uIGZyb20gImlk bGUgbGF6eQpjb250ZXh0IHN3aXRjaCIgdG8gInJ1bm5hYmxlIiBpcyBpZiB0aGUgdmNwdSB3YXMg dGhlIGxhc3QgdmNwdSBydW5uaW5nCm9uIHRoaXMgcGNwdSAtLSBpbiB3aGljaCBjYXNlLCBORFNU IHNob3VsZCBhbHJlYWR5IGJlIHNldCB0byB0aGlzIHBjcHUsCnJpZ2h0PwoKIC1HZW9yZ2UKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3Jn L3hlbi1kZXZlbAo=