From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= Subject: Re: [PATCH v6 24/29] xen/x86: allow HVM guests to use hypercalls to bring up vCPUs Date: Mon, 28 Sep 2015 18:09:49 +0200 Message-ID: <5609664D.8060604@citrix.com> References: <1441368548-43465-1-git-send-email-roger.pau@citrix.com> <1441368548-43465-25-git-send-email-roger.pau@citrix.com> <5600420C02000078000A4234@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Zgazz-0005nY-JX for xen-devel@lists.xenproject.org; Mon, 28 Sep 2015 16:09:55 +0000 In-Reply-To: <5600420C02000078000A4234@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich Cc: Andrew Cooper , Stefano Stabellini , Ian Campbell , xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org RWwgMjEvMDkvMTUgYSBsZXMgMTcuNDQsIEphbiBCZXVsaWNoIGhhIGVzY3JpdDoKPj4+PiBPbiAw NC4wOS4xNSBhdCAxNDowOSwgPHJvZ2VyLnBhdUBjaXRyaXguY29tPiB3cm90ZToKPj4gQWxsb3cg dGhlIHVzYWdlIG9mIHRoZSBWQ1BVT1BfaW5pdGlhbGlzZSwgVkNQVU9QX3VwLCBWQ1BVT1BfZG93 biBhbmQKPj4gVkNQVU9QX2lzX3VwIGh5cGVyY2FsbHMgZnJvbSBIVk0gZ3Vlc3RzLgo+Pgo+PiBU aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RydWN0dXJlICh2Y3B1X2h2bV9jb250ZXh0KSB0 aGF0IHNob3VsZCBiZSB1c2VkCj4+IGluIGNvbmp1Y3Rpb24gd2l0aCB0aGUgVkNQVU9QX2luaXRp YWxpc2UgaHlwZXJjYWxsIGluIG9yZGVyIHRvIGluaXRpYWxpemUKPj4gdkNQVXMgZm9yIEhWTSBn dWVzdHMuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBj aXRyaXguY29tPgo+PiBTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVy M0BjaXRyaXguY29tPgo+IAo+IFNvIHRoaXMgYmktbW9kYWwgdGhpbmcgZG9lc24ndCBsb29rIHRv byBiYWQsIGJ1dCBhIGNvbmNlcm4gSSBoYXZlIGlzCj4gd2l0aCB0aGUgbm93IGRpZmZlcmVudCBj b250ZXh0cyB1c2VkIGJ5IFhFTl9ET01DVExfc2V0dmNwdWNvbnRleHQKPiBhbmQgVkNQVU9QX2lu aXRpYWxpc2UuCgpZZXMsIHRoYXQncyBmYXIgZnJvbSBpZGVhbC4gSSB3YXMgZ29pbmcgdG8gc2F5 IHRoYXQKWEVOX0RPTUNUTF97c2V0L2dldH12Y3B1Y29udGV4dCBzaG91bGQgcmV0dXJuIEVPUE5P VFNVUFAgd2hlbiBleGVjdXRlZAphZ2FpbnN0IEhWTSBndWVzdHMsIGJ1dCB0aGF0J3MgZ29pbmcg dG8gYnJlYWsgY3VycmVudCB0b29sc3RhY2sgY29kZQp0aGF0IHJlbGllcyBvbiB0aGlzIGluIG9y ZGVyIHRvIHBlcmZvcm0gc3VzcGVuZC9yZXN1bWUgb2YgSFZNIGd1ZXN0cwooYW5kIGdkYnN4IHdv dWxkIHByb2JhYmx5IGFsc28gYmUgYWZmZWN0ZWQpLgoKSWYgeW91IGZlZWwgdGhhdCB3b3VsZCBi ZSBhIGJldHRlciBzb2x1dGlvbiBJIGNvdWxkIGZpeCBjdXJyZW50IHRvb2xzCmNvZGUgaW4gb3Jk ZXIgdG8gdXNlIFhFTl9ET01DVExfe2dldC9zZXR9aHZtY29udGV4dCBpbnN0ZWFkIG9mClhFTl9E T01DVExfe3NldC9nZXR9dmNwdWNvbnRleHQgd2hlbiBkZWFsaW5nIHdpdGggSFZNIGd1ZXN0cy4K Cj4+IC0tLSBhL3hlbi9hcmNoL2FybS9kb21haW4uYwo+PiArKysgYi94ZW4vYXJjaC9hcm0vZG9t YWluLmMKPj4gQEAgLTc1Miw2ICs3NTIsMzAgQEAgaW50IGFyY2hfc2V0X2luZm9fZ3Vlc3QoCj4+ ICAgICAgcmV0dXJuIDA7Cj4+ICB9Cj4+ICAKPj4gK2ludCBhcmNoX2luaXRpYWxpemVfdmNwdShz dHJ1Y3QgdmNwdSAqdiwgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh2b2lkKSBhcmcpCj4+ICt7Cj4+ ICsgICAgc3RydWN0IHZjcHVfZ3Vlc3RfY29udGV4dCAqY3R4dDsKPj4gKyAgICBzdHJ1Y3QgZG9t YWluICpkID0gdi0+ZG9tYWluOwo+PiArICAgIGludCByYzsKPj4gKwo+PiArICAgIGlmICggKGN0 eHQgPSBhbGxvY192Y3B1X2d1ZXN0X2NvbnRleHQoKSkgPT0gTlVMTCApCj4+ICsgICAgICAgIHJl dHVybiAtRU5PTUVNOwo+PiArCj4+ICsgICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3QoY3R4dCwgYXJn LCAxKSApCj4+ICsgICAgewo+PiArICAgICAgICBmcmVlX3ZjcHVfZ3Vlc3RfY29udGV4dChjdHh0 KTsKPj4gKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgZG9t YWluX2xvY2soZCk7Cj4+ICsgICAgcmMgPSB2LT5pc19pbml0aWFsaXNlZCA/IC1FRVhJU1QgOiBh cmNoX3NldF9pbmZvX2d1ZXN0KHYsIGN0eHQpOwo+PiArICAgIGRvbWFpbl91bmxvY2soZCk7Cj4+ ICsKPj4gKyAgICBmcmVlX3ZjcHVfZ3Vlc3RfY29udGV4dChjdHh0KTsKPj4gKwo+PiArICAgIHJl dHVybiByYzsKPj4gK30KPiAKPiBJIHdvbmRlciB3aGV0aGVyIHRoaXMgc2hvdWxkbid0IGluc3Rl YWQgYmUga2VwdCBpbiBjb21tb24gY29kZSwKPiB3aXRoIGFyY2ggY29kZSBjYWxsaW5nIGl0IGFz IG5lZWRlZCAoZS5nLiBhcyBkZWZhdWx0X2luaXRpYWxpemVfdmNwdSgpKSwKPiBzaW5jZSBhZmFp Y3QgdGhlIGNvZGUgaXMgbm93IGR1cGxpY2F0ZSB3aXRoIHRoZSB4ODYgc2lkZSBQViBoYW5kbGlu Zy4KCkFjay4KCj4+IEBAIC0xMTQwLDYgKzExNDEsMjAxIEBAIGludCBhcmNoX3NldF9pbmZvX2d1 ZXN0KAo+PiAgI3VuZGVmIGMKPj4gIH0KPj4gIAo+PiArLyogQ2FsbGVkIGJ5IFZDUFVPUF9pbml0 aWFsaXNlIGZvciBIVk0gZ3Vlc3RzLiAqLwo+PiArc3RhdGljIGludCBhcmNoX3NldF9pbmZvX2h2 bV9ndWVzdChzdHJ1Y3QgdmNwdSAqdiwgdmNwdV9odm1fY29udGV4dF90ICpjdHgpCj4+ICt7Cj4+ ICsgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnVyZWdzID0gJnYtPmFyY2gudXNlcl9yZWdzOwo+ PiArICAgIHN0cnVjdCBzZWdtZW50X3JlZ2lzdGVyIGNzLCBkcywgc3MsIHRyOwo+PiArCj4+ICsj ZGVmaW5lIFNFRyhzLCByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4+ICsgICAgKHN0cnVjdCBzZWdtZW50X3JlZ2lzdGVyKXsgLmJhc2Ug PSAociktPnMgIyMgX2Jhc2UsICAgICAgICAgICAgICAgICBcCj4+ICsgICAgICAgICAgICAubGlt aXQgPSAociktPnMgIyMgX2xpbWl0LCAuYXR0ci5ieXRlcyA9IChyKS0+cyAjIyBfYXIgfQo+PiAr Cj4+ICsgICAgc3dpdGNoICggY3R4LT5tb2RlICkKPj4gKyAgICB7Cj4+ICsgICAgZGVmYXVsdDoK Pj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKyAgICBjYXNlIFZDUFVfSFZNX01P REVfMTZCOgo+IAo+IEkgdGhpbmsgIk1PREUiIGlzIG1pc2xlYWRpbmcgaGVyZSwgbm90IGp1c3Qg YmVjYXVzZSBvZiB0aGUgcmVnaXN0ZXIKPiBzaXplIGlzc3VlIChzZWUgZnVydGhlciBkb3duKSBi dXQgYWxzbyBiZWNhdXNlIHlvdSBkb24ndCBzZWVtIHRvCj4gZW5mb3JjZSB0aGUgcmVzcGVjdGl2 ZSBtb2RlIHRvIGJlIGNob3NlbiBpbiBjc19hci4gSSdtIGFsc28gbWlzc2luZwo+IGF0IGxlYXN0 IHNvbWUgc2ltcGxlIGNvbnNpc3RlbmN5IGNoZWNrcyAobGlrZSBDUy5EUEwgPT0gU1MuRFBMLAo+ IHJJUCB3aXRoaW4gQ1MgbGltaXQsIHJTUCB3aXRoaW4gU1MgbGltaXQpOyBsZWF2aW5nIHRoZXNl IHRvIHRoZSBmaXJzdCBWTQo+IGVudHJ5IHdvdWxkIGxpa2VseSByZXN1bHQgaW4gbXVjaCBoYXJk ZXIgdG8gYW5hbHl6ZSBpc3N1ZXMgaW4gY2FzZSBvZgo+IGJhZCBpbnB1dC4KClNlZSB0aGUgY29t bWVudCBhYm91dCB0aGUgMTZiaXQgcmVnaXN0ZXJzIGluIHZjcHVfaHZtX2NvbnRleHRfdC4KCj4+ ICsgICAgewo+PiArICAgICAgICBjb25zdCBzdHJ1Y3QgdmNwdV9odm1feDg2XzE2ICpyZWdzID0g JmN0eC0+Y3B1X3JlZ3MueDg2XzE2Owo+PiArCj4+ICsgICAgICAgIHVyZWdzLT5yYXggICAgPSBy ZWdzLT5heDsKPj4gKyAgICAgICAgdXJlZ3MtPnJjeCAgICA9IHJlZ3MtPmN4Owo+PiArICAgICAg ICB1cmVncy0+cmR4ICAgID0gcmVncy0+ZHg7Cj4+ICsgICAgICAgIHVyZWdzLT5yYnggICAgPSBy ZWdzLT5ieDsKPj4gKyAgICAgICAgdXJlZ3MtPnJzcCAgICA9IHJlZ3MtPnNwOwo+PiArICAgICAg ICB1cmVncy0+cmJwICAgID0gcmVncy0+YnA7Cj4+ICsgICAgICAgIHVyZWdzLT5yc2kgICAgPSBy ZWdzLT5zaTsKPj4gKyAgICAgICAgdXJlZ3MtPnJkaSAgICA9IHJlZ3MtPmRpOwo+PiArICAgICAg ICB1cmVncy0+cmlwICAgID0gcmVncy0+aXA7Cj4+ICsgICAgICAgIHVyZWdzLT5yZmxhZ3MgPSBy ZWdzLT5mbGFnczsKPj4gKwo+PiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzBd ID0gcmVncy0+Y3IwOwo+PiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzRdID0g cmVncy0+Y3I0Owo+PiArCj4+ICsgICAgICAgIGNzID0gU0VHKGNzLCByZWdzKTsKPj4gKyAgICAg ICAgZHMgPSBTRUcoZHMsIHJlZ3MpOwo+PiArICAgICAgICBzcyA9IFNFRyhzcywgcmVncyk7Cj4+ ICsgICAgICAgIHRyID0gU0VHKHRyLCByZWdzKTsKPj4gKyAgICB9Cj4+ICsgICAgYnJlYWs7Cj4+ ICsKPj4gKyAgICBjYXNlIFZDUFVfSFZNX01PREVfMzJCOgo+PiArICAgIHsKPj4gKyAgICAgICAg Y29uc3Qgc3RydWN0IHZjcHVfaHZtX3g4Nl8zMiAqcmVncyA9ICZjdHgtPmNwdV9yZWdzLng4Nl8z MjsKPj4gKwo+PiArICAgICAgICB1cmVncy0+cmF4ICAgID0gcmVncy0+ZWF4Owo+PiArICAgICAg ICB1cmVncy0+cmN4ICAgID0gcmVncy0+ZWN4Owo+PiArICAgICAgICB1cmVncy0+cmR4ICAgID0g cmVncy0+ZWR4Owo+PiArICAgICAgICB1cmVncy0+cmJ4ICAgID0gcmVncy0+ZWJ4Owo+PiArICAg ICAgICB1cmVncy0+cnNwICAgID0gcmVncy0+ZXNwOwo+PiArICAgICAgICB1cmVncy0+cmJwICAg ID0gcmVncy0+ZWJwOwo+PiArICAgICAgICB1cmVncy0+cnNpICAgID0gcmVncy0+ZXNpOwo+PiAr ICAgICAgICB1cmVncy0+cmRpICAgID0gcmVncy0+ZWRpOwo+PiArICAgICAgICB1cmVncy0+cmlw ICAgID0gcmVncy0+ZWlwOwo+PiArICAgICAgICB1cmVncy0+cmZsYWdzID0gcmVncy0+ZWZsYWdz Owo+PiArCj4+ICsgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbMF0gPSByZWdzLT5j cjA7Cj4+ICsgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbM10gPSByZWdzLT5jcjM7 Cj4+ICsgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbNF0gPSByZWdzLT5jcjQ7Cj4+ ICsgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfZWZlciAgPSByZWdzLT5lZmVyOwo+PiAr Cj4+ICsgICAgICAgIGNzID0gU0VHKGNzLCByZWdzKTsKPj4gKyAgICAgICAgZHMgPSBTRUcoZHMs IHJlZ3MpOwo+PiArICAgICAgICBzcyA9IFNFRyhzcywgcmVncyk7Cj4+ICsgICAgICAgIHRyID0g U0VHKHRyLCByZWdzKTsKPj4gKyAgICB9Cj4+ICsgICAgYnJlYWs7Cj4+ICsKPj4gKyAgICBjYXNl IFZDUFVfSFZNX01PREVfNjRCOgo+PiArICAgIHsKPj4gKyAgICAgICAgY29uc3Qgc3RydWN0IHZj cHVfaHZtX3g4Nl82NCAqcmVncyA9ICZjdHgtPmNwdV9yZWdzLng4Nl82NDsKPj4gKwo+PiArICAg ICAgICB1cmVncy0+cmF4ICAgID0gcmVncy0+cmF4Owo+PiArICAgICAgICB1cmVncy0+cmN4ICAg ID0gcmVncy0+cmN4Owo+PiArICAgICAgICB1cmVncy0+cmR4ICAgID0gcmVncy0+cmR4Owo+PiAr ICAgICAgICB1cmVncy0+cmJ4ICAgID0gcmVncy0+cmJ4Owo+PiArICAgICAgICB1cmVncy0+cnNw ICAgID0gcmVncy0+cnNwOwo+PiArICAgICAgICB1cmVncy0+cmJwICAgID0gcmVncy0+cmJwOwo+ PiArICAgICAgICB1cmVncy0+cnNpICAgID0gcmVncy0+cnNpOwo+PiArICAgICAgICB1cmVncy0+ cmRpICAgID0gcmVncy0+cmRpOwo+PiArICAgICAgICB1cmVncy0+cmlwICAgID0gcmVncy0+cmlw Owo+PiArICAgICAgICB1cmVncy0+cmZsYWdzID0gcmVncy0+cmZsYWdzOwo+PiArICAgICAgICB1 cmVncy0+cjggICAgID0gcmVncy0+cjg7Cj4+ICsgICAgICAgIHVyZWdzLT5yOSAgICAgPSByZWdz LT5yOTsKPj4gKyAgICAgICAgdXJlZ3MtPnIxMCAgICA9IHJlZ3MtPnIxMDsKPj4gKyAgICAgICAg dXJlZ3MtPnIxMSAgICA9IHJlZ3MtPnIxMTsKPj4gKyAgICAgICAgdXJlZ3MtPnIxMiAgICA9IHJl Z3MtPnIxMjsKPj4gKyAgICAgICAgdXJlZ3MtPnIxMyAgICA9IHJlZ3MtPnIxMzsKPj4gKyAgICAg ICAgdXJlZ3MtPnIxNCAgICA9IHJlZ3MtPnIxNDsKPj4gKyAgICAgICAgdXJlZ3MtPnIxNSAgICA9 IHJlZ3MtPnIxNTsKPj4gKwo+PiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzBd ID0gcmVncy0+Y3IwOwo+PiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzNdID0g cmVncy0+Y3IzOwo+PiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzRdID0gcmVn cy0+Y3I0Owo+PiArICAgICAgICB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2VmZXIgID0gcmVncy0+ ZWZlcjsKPj4gKwo+PiArICAgICAgICBjcyA9IFNFRyhjcywgcmVncyk7Cj4+ICsgICAgICAgIGRz ID0gU0VHKGRzLCByZWdzKTsKPj4gKyAgICAgICAgc3MgPSBTRUcoc3MsIHJlZ3MpOwo+PiArICAg ICAgICB0ciA9IFNFRyh0ciwgcmVncyk7Cj4+ICsgICAgfQo+PiArICAgIGJyZWFrOwo+PiArCj4+ ICsgICAgfQo+PiArCj4+ICsgICAgaWYgKCAhcGFnaW5nX21vZGVfaGFwKHYtPmRvbWFpbikgKQo+ PiArICAgICAgICB2LT5hcmNoLmd1ZXN0X3RhYmxlID0gcGFnZXRhYmxlX251bGwoKTsKPiAKPiBB IGNvbW1lbnQgd2l0aCB0aGUgcmVhc29uIGZvciB0aGlzIHdvdWxkIGJlIG5pY2UuIEkgY2FuJ3Qg aW1tZWRpYXRlbHkKPiBzZWUgd2h5IHRoaXMgaXMgaGVyZS4KCmd1ZXN0X3RhYmxlIGNvbnRhaW5z IHVuaW5pdGlhbGl6ZWQgZGF0YSBhdCB0aGlzIHBvaW50LCB3aGljaCBtYWtlcwpwYWdldGFibGVf aXNfbnVsbCByZXR1cm4gZmFsc2UuIE90aGVyIHBsYWNlcyB3aGVyZSBndWVzdF90YWJsZSBpcyBz ZXQKY2hlY2sgaWYgcHJldmlvdXMgZ3Vlc3RfdGFibGUgaXMgbnVsbCBvciBub3QsIGFuZCBpZiBp dCdzIG5vdCBudWxsIFhlbgp3aWxsIHRyeSB0byBmcmVlIGl0LCBjYXVzaW5nIGEgYnVnLiBodm1f dmNwdV9yZXNldF9zdGF0ZSBkb2VzIHNvbWV0aGluZwpzaW1pbGFyIHdoZW4gc2V0dGluZyB0aGUg aW5pdGlhbCB2Q1BVIHN0YXRlLgoKSSB3aWxsIGFkZCBhIGNvbW1lbnQgdG8gcG9pbnQgdGhpcyBv dXQuCgo+PiArICAgIGh2bV91cGRhdGVfZ3Vlc3RfY3IodiwgMCk7Cj4+ICsgICAgaHZtX3VwZGF0 ZV9ndWVzdF9jcih2LCA0KTsKPj4gKwo+PiArICAgIGlmICggKGN0eC0+bW9kZSA9PSBWQ1BVX0hW TV9NT0RFXzMyQikgfHwKPj4gKyAgICAgICAgIChjdHgtPm1vZGUgPT0gVkNQVV9IVk1fTU9ERV82 NEIpICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIGh2bV91cGRhdGVfZ3Vlc3RfY3IodiwgMyk7Cj4+ ICsgICAgICAgIGh2bV91cGRhdGVfZ3Vlc3RfZWZlcih2KTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAg ICBpZiAoIGh2bV9wYWdpbmdfZW5hYmxlZCh2KSAmJiAhcGFnaW5nX21vZGVfaGFwKHYtPmRvbWFp bikgKQo+PiArICAgIHsKPj4gKyAgICAgICAgLyogU2hhZG93LW1vZGUgQ1IzIGNoYW5nZS4gQ2hl Y2sgUERCUiBhbmQgdXBkYXRlIHJlZmNvdW50cy4gKi8KPj4gKyAgICAgICAgc3RydWN0IHBhZ2Vf aW5mbyAqcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKHYtPmRvbWFpbiwKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbM10gPj4gUEFH RV9TSElGVCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIFAyTV9B TExPQyk7Cj4gCj4gUDJNX0FMTE9DIGJ1dCBub3QgUDJNX1VOU0hBUkU/CgpUaGlzIGlzIGEgY29w eSBvZiB3aGF0J3MgZG9uZSBpbiBodm1fc2V0X2NyMyB3aGVuIHNoYWRvdyBtb2RlIGlzIGVuYWJs ZWQuCgo+PiArICAgICAgICBpZiAoICFwYWdlICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAg ICAgZ2RwcmludGsoWEVOTE9HX0VSUiwgIkludmFsaWQgQ1IzOiAlI2x4XG4iLAo+PiArICAgICAg ICAgICAgICAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jclszXSk7Cj4+ICsgICAgICAg ICAgICBkb21haW5fY3Jhc2godi0+ZG9tYWluKTsKPj4gKyAgICAgICAgICAgIHJldHVybiAtRUlO VkFMOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgdi0+YXJjaC5ndWVzdF90YWJsZSA9 IHBhZ2V0YWJsZV9mcm9tX3BhZ2UocGFnZSk7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaHZtX3Nl dF9zZWdtZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdfY3MsICZjcyk7Cj4+ICsgICAgaHZtX3NldF9z ZWdtZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdfZHMsICZkcyk7Cj4+ICsgICAgaHZtX3NldF9zZWdt ZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdfc3MsICZzcyk7Cj4+ICsgICAgaHZtX3NldF9zZWdtZW50 X3JlZ2lzdGVyKHYsIHg4Nl9zZWdfdHIsICZ0cik7Cj4+ICsKPj4gKyAgICAvKiBTeW5jIEFQJ3Mg VFNDIHdpdGggQlNQJ3MuICovCj4+ICsgICAgdi0+YXJjaC5odm1fdmNwdS5jYWNoZV90c2Nfb2Zm c2V0ID0KPj4gKyAgICAgICAgdi0+ZG9tYWluLT52Y3B1WzBdLT5hcmNoLmh2bV92Y3B1LmNhY2hl X3RzY19vZmZzZXQ7Cj4+ICsgICAgaHZtX2Z1bmNzLnNldF90c2Nfb2Zmc2V0KHYsIHYtPmFyY2gu aHZtX3ZjcHUuY2FjaGVfdHNjX29mZnNldCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdi0+ZG9tYWluLT5hcmNoLmh2bV9kb21haW4uc3luY190c2MpOwo+PiArCj4+ICsgICAgdi0+ YXJjaC5odm1fdmNwdS5tc3JfdHNjX2FkanVzdCA9IDA7Cj4gCj4gVGhlIG5lZWQgZm9yIHRoaXMg b25lIEkgYWxzbyBjYW4ndCBzZWUgcmlnaHQgYXdheSAtIGFub3RoZXIgY29tbWVudAo+IHBlcmhh cHM/CgpBRkFJQ1Qgd2UgbmVlZCB0byBpbml0aWFsaXplIHRoaXMgdG8gYSBzYW5lIHZhbHVlLCBs aWtlIGl0J3MgZG9uZSBpbgpodm1fdmNwdV9yZXNldF9zdGF0ZS4KCj4+ICsgICAgcGFnaW5nX3Vw ZGF0ZV9wYWdpbmdfbW9kZXModik7Cj4+ICsKPj4gKyAgICB2LT5pc19pbml0aWFsaXNlZCA9IDE7 Cj4+ICsgICAgc2V0X2JpdChfVlBGX2Rvd24sICZ2LT5wYXVzZV9mbGFncyk7Cj4gCj4gTm8gVkdD Rl9vbmxpbmUgZXF1aXZhbGVudD8KCk5vLCB0aGlzIGludGVyZmFjZSBkb2Vzbid0IGFsbG93IHRv IHNldHVwIHRoZSB2Q1BVIHN0YXRlIGFuZCBzdGFydCBpdCBhdAp0aGUgc2FtZSB0aW1lLiBVc2Vy cyB3aWxsIGhhdmUgdG8gY2FsbCBWQ1BVT1BfdXAgYWZ0ZXIgVkNQVU9QX2luaXRpYWxpc2UKaW4g b3JkZXIgdG8gc3RhcnQgdGhlIHZDUFUuIHZjcHVfaHZtX2NvbnRleHQgZG9lc24ndCBldmVuIGhh dmUgdGhlCiJmbGFncyIgZmllbGQgYW55IG1vcmUsIHdoZXJlIHRoaXMgdXNlZCB0byBiZSBzZXQu Cgo+PiArICAgIHJldHVybiAwOwo+PiArI3VuZGVmIFNFRwo+IAo+IEkgdGhpbmsgdGhpcyBzaG91 bGQgbW92ZSB1cCAocmlnaHQgYWZ0ZXIgdGhlIHN3aXRjaCgpIHVzaW5nIGl0KS4KCk9rLCBJIGRv bid0IG1pbmQuCgo+PiArI2lmbmRlZiBfX1hFTl9QVUJMSUNfSFZNX0hWTV9WQ1BVX0hfXwo+PiAr I2RlZmluZSBfX1hFTl9QVUJMSUNfSFZNX0hWTV9WQ1BVX0hfXwo+PiArCj4+ICsjaW5jbHVkZSAi Li4veGVuLmgiCj4+ICsKPj4gK3N0cnVjdCB2Y3B1X2h2bV94ODZfMTYgewo+PiArICAgIHVpbnQx Nl90IGF4Owo+PiArICAgIHVpbnQxNl90IGN4Owo+PiArICAgIHVpbnQxNl90IGR4Owo+PiArICAg IHVpbnQxNl90IGJ4Owo+PiArICAgIHVpbnQxNl90IHNwOwo+PiArICAgIHVpbnQxNl90IGJwOwo+ PiArICAgIHVpbnQxNl90IHNpOwo+PiArICAgIHVpbnQxNl90IGRpOwo+PiArICAgIHVpbnQxNl90 IGlwOwo+PiArICAgIHVpbnQxNl90IGZsYWdzOwo+PiArCj4+ICsgICAgdWludDMyX3QgY3IwOwo+ PiArICAgIHVpbnQzMl90IGNyNDsKPj4gKwo+PiArICAgIHVpbnQzMl90IGNzX2Jhc2U7Cj4+ICsg ICAgdWludDMyX3QgZHNfYmFzZTsKPj4gKyAgICB1aW50MzJfdCBzc19iYXNlOwo+PiArICAgIHVp bnQzMl90IHRyX2Jhc2U7Cj4+ICsgICAgdWludDMyX3QgY3NfbGltaXQ7Cj4+ICsgICAgdWludDMy X3QgZHNfbGltaXQ7Cj4+ICsgICAgdWludDMyX3Qgc3NfbGltaXQ7Cj4+ICsgICAgdWludDMyX3Qg dHJfbGltaXQ7Cj4+ICsgICAgdWludDE2X3QgY3NfYXI7Cj4+ICsgICAgdWludDE2X3QgZHNfYXI7 Cj4+ICsgICAgdWludDE2X3Qgc3NfYXI7Cj4+ICsgICAgdWludDE2X3QgdHJfYXI7Cj4+ICt9Owo+ IAo+IEkgZG91YnQgdGhpcyBpcyB2ZXJ5IHVzZWZ1bDogV2hpbGUgb25lIG91Z2h0IHRvIGJlIGFi bGUgdG8gc3RhcnQgYQo+IGd1ZXN0IGluIDE2LWJpdCBtb2RlLCBpdHMgR1BScyBzdGlsbCBhcmUg c3VwcG9zZWQgdG8gYmUgMzIgYml0cyB3aWRlLgo+IFRoZSBtb2RlIHVzZWQgcmVhbGx5IHdvdWxk IGRlcGVuZCBvbiB0aGUgY3NfYXIgc2V0dGluZy4gKEhhdmluZwo+IHRoZSBzdHJ1Y3R1cmUganVz dCBmb3IgYSAxNi1iaXQgSVAgd291bGQgc2VlbSBpbnNhbmUuKQoKU28sIHdvdWxkIHlvdSBwcmVm ZXIgdG8gZ28ganVzdCB3aXRoIHRoZSA2NC1iaXQgc3RydWN0dXJlIGFuZCB0aGUgbW9kZQppcyBz aW1wbHkgc2V0IGJ5IHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCByZWdpc3RlcnMgLyBzZWdtZW50 IHNlbGVjdG9ycz8KCj4+ICtzdHJ1Y3QgdmNwdV9odm1feDg2XzMyIHsKPj4gKyAgICB1aW50MzJf dCBlYXg7Cj4+ICsgICAgdWludDMyX3QgZWN4Owo+PiArICAgIHVpbnQzMl90IGVkeDsKPj4gKyAg ICB1aW50MzJfdCBlYng7Cj4+ICsgICAgdWludDMyX3QgZXNwOwo+PiArICAgIHVpbnQzMl90IGVi cDsKPj4gKyAgICB1aW50MzJfdCBlc2k7Cj4+ICsgICAgdWludDMyX3QgZWRpOwo+PiArICAgIHVp bnQzMl90IGVpcDsKPj4gKyAgICB1aW50MTZfdCBlZmxhZ3M7Cj4gCj4gdWludDMyX3QgZm9yIHN1 cmUuCgpSaWdodC4KCj4gCj4+ICsgICAgdWludDMyX3QgY3IwOwo+PiArICAgIHVpbnQzMl90IGNy MzsKPj4gKyAgICB1aW50MzJfdCBjcjQ7Cj4+ICsgICAgdWludDY0X3QgZWZlcjsKPiAKPiBXaGF0 IGFnYWluIHdhcyB0aGUgcG9pbnQgb2YgaGF2aW5nIEVGRVIgaGVyZT8KCkZvciB0aGUgTlggYml0 LgoKPj4gKyAgICB1aW50MzJfdCBjc19iYXNlOwo+PiArICAgIHVpbnQzMl90IGRzX2Jhc2U7Cj4+ ICsgICAgdWludDMyX3Qgc3NfYmFzZTsKPiAKPiBJIGNvbnRpbnVlIHRvIHF1ZXN0aW9uIHdoeSB3 ZSBoYXZlIERTIGhlcmUsIGJ1dCBub3QgRVMgKGFuZCBtYXliZQo+IEZTIGFuZCBHUyB0b28pLiBJ LmUuIGVpdGhlciBqdXN0IENTIGFuZCBTUyAod2hpY2ggYXJlIGFyY2hpdGVjdHVyYWxseQo+IHJl cXVpcmVkKSBvciBhdCBsZWFzdCBhbGwgZm91ciB0cmFkaXRpb25hbCB4ODYgc2VnbWVudCByZWdp c3RlcnMuIEFuZAo+IHlvdSdyZSBhbHNvIGNsZWFybHkgbm90IHRhcmdldGluZyBtaW5pbWFsIHN0 YXRlLCBvciBlbHNlIHRoZXJlIGxpa2VseQo+IHdvdWxkbid0IGJlIGEgbmVlZCBmb3IgZS5nLiBS OC1SMTUgaW4gdGhlIDY0LWJpdCB2YXJpYW50LgoKSSdtIGZpbmUgd2l0aCByZW1vdmluZyByOC0x NS4gUmVnYXJkaW5nIHRoZSBzZWdtZW50IHNlbGVjdG9ycywgSSBkb24ndApoYXZlIGEgcHJvYmxl bSB3aXRoIG9ubHkgYWxsb3dpbmcgQ1MgYW5kIFNTIHRvIGJlIHNldCwgb3IgYWxsIG9mIHRoZW0K aW5jbHVkaW5nIEZTIGFuZCBHUy4gQnV0IEkgd291bGQgbGlrZSB0byBnZXQgYSBjb25zZW5zdXMg b24gdGhpcywgd2UKaGF2ZSBhbHJlYWR5IGdvbmUgYmFjayBhbmQgZm9ydGggc2V2ZXJhbCB0aW1l cyByZWdhcmRpbmcgaG93IHRoaXMKc3RydWN0dXJlIHNob3VsZCBsb29rIGxpa2UsIGFuZCBUQkgs IEkgd2FzIGhvcGluZyB0aGF0IHRoaXMgd2FzIHRoZSBsYXN0CnRpbWUuCgpBbmRyZXcsIEphbiwg d2hhdCB3b3VsZCB5b3UgcHJlZmVyLCBlaXRoZXIgRFMgaXMgcmVtb3ZlZCBvciBFUywgRlMgYW5k CkdTIGFyZSBhbHNvIGFkZGVkPwoKPj4gK3N0cnVjdCB2Y3B1X2h2bV94ODZfNjQgewo+PiArICAg IHVpbnQ2NF90IHJheDsKPj4gKyAgICB1aW50NjRfdCByY3g7Cj4+ICsgICAgdWludDY0X3QgcmR4 Owo+PiArICAgIHVpbnQ2NF90IHJieDsKPj4gKyAgICB1aW50NjRfdCByc3A7Cj4+ICsgICAgdWlu dDY0X3QgcmJwOwo+PiArICAgIHVpbnQ2NF90IHJzaTsKPj4gKyAgICB1aW50NjRfdCByZGk7Cj4+ ICsgICAgdWludDY0X3Qgcjg7Cj4+ICsgICAgdWludDY0X3Qgcjk7Cj4+ICsgICAgdWludDY0X3Qg cjEwOwo+PiArICAgIHVpbnQ2NF90IHIxMTsKPj4gKyAgICB1aW50NjRfdCByMTI7Cj4+ICsgICAg dWludDY0X3QgcjEzOwo+PiArICAgIHVpbnQ2NF90IHIxNDsKPj4gKyAgICB1aW50NjRfdCByMTU7 Cj4+ICsgICAgdWludDY0X3QgcmlwOwo+PiArICAgIHVpbnQ2NF90IHJmbGFnczsKPj4gKwo+PiAr ICAgIHVpbnQ2NF90IGNyMDsKPj4gKyAgICB1aW50NjRfdCBjcjM7Cj4+ICsgICAgdWludDY0X3Qg Y3I0Owo+PiArICAgIHVpbnQ2NF90IGVmZXI7Cj4+ICsKPj4gKyAgICB1aW50MzJfdCBjc19iYXNl Owo+PiArICAgIHVpbnQzMl90IGRzX2Jhc2U7Cj4+ICsgICAgdWludDMyX3Qgc3NfYmFzZTsKPj4g KyAgICB1aW50MzJfdCB0cl9iYXNlOwo+PiArICAgIHVpbnQzMl90IGNzX2xpbWl0Owo+PiArICAg IHVpbnQzMl90IGRzX2xpbWl0Owo+PiArICAgIHVpbnQzMl90IHNzX2xpbWl0Owo+PiArICAgIHVp bnQzMl90IHRyX2xpbWl0Owo+IAo+IEkgY2FuIHNlZSB0aGUgbmVlZCBmb3IgdGhlIFRSIG9uZXMg aGVyZSwgYnV0IHdoYXQncyB0aGUgcG9pbnQgb2YgdGhlCj4gQ1MsIFNTLCBhbmQgRFMgb25lcz8K CkluIGNhc2UgdGhlIGd1ZXN0IHdhbnRzIHRvIHN0YXJ0IGluIDY0Yml0IGNvbXBhdGliaWxpdHkg bW9kZT8KCj4+ICsvKgo+PiArICogVGhlIGxheW91dCBvZiB0aGUgX2FyIGZpZWxkcyBvZiB0aGUg c2VnbWVudCByZWdpc3RlcnMgaXMgdGhlCj4+ICsgKiBmb2xsb3dpbmc6Cj4+ICsgKgo+PiArICog Qml0cyBbMCwzXTogdHlwZSAoYml0cyA0MC00MykuCj4+ICsgKiBCaXQgICAgICA0OiBzICAgIChk ZXNjcmlwdG9yIHR5cGUsIGJpdCA0NCkuCj4+ICsgKiBCaXQgIFs1LDZdOiBkcGwgIChkZXNjcmlw dG9yIHByaXZpbGVnZSBsZXZlbCwgYml0cyA0NS00NikuCj4+ICsgKiBCaXQgICAgICA3OiBwICAg IChzZWdtZW50LXByZXNlbnQsIGJpdCA0NykuCj4+ICsgKiBCaXQgICAgICA4OiBhdmwgIChhdmFp bGFibGUgZm9yIHN5c3RlbSBzb2Z0d2FyZSwgYml0IDUyKS4KPj4gKyAqIEJpdCAgICAgIDk6IGwg ICAgKDY0LWJpdCBjb2RlIHNlZ21lbnQsIGJpdCA1MykuCj4+ICsgKiBCaXQgICAgIDEwOiBkYiAg IChtZWFuaW5nIGRlcGVuZHMgb24gdGhlIHNlZ21lbnQsIGJpdCA1NCkuCj4+ICsgKiBCaXQgICAg IDExOiBnICAgIChncmFudWxhcml0eSwgYml0IDU1KQo+PiArICoKPj4gKyAqIEEgbW9yZSBjb21w bGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkcyBjYW4gYmUKPj4g KyAqIG9idGFpbmVkIGZyb20gdGhlIEludGVsIFNETSwgVm9sdW1lIDMsIHNlY3Rpb24gMy40LjUu Cj4+ICsgKi8KPiAKPiBQbGVhc2UgbWFrZSBleHBsaWNpdCB3aGF0IHN0YXRlIGJpdHMgMTItMTUg YXJlIGV4cGVjdGVkIHRvIGJlIGluCj4gKGhvcGVmdWxseSB0aGV5J3JlIGJlaW5nIGNoZWNrZWQg dG8gYmUgemVybyByYXRoZXIgdGhhbiBnZXR0aW5nCj4gaWdub3JlZCkuCgpJIHdpbGwgYWRkIGEg Y29tbWVudCByZWdhcmRpbmcgdGhlIDEyLTE1IGJpdHMuIElNSE8sIHRoYXQgY2hlY2tpbmcKc2hv dWxkIGJlIGRvbmUgaW4gaHZtX3NldF9zZWdtZW50X3JlZ2lzdGVyLCBhbmQgaXMgbm90IHBhcnQg b2YgdGhpcyBwYXRjaC4KCj4gUGxlYXNlIGFsc28gY2xhcmlmeSB3aGV0aGVyIHRoZSBsaW1pdCBz cGVjaWZpZWQgZm9yIHRoZSB2YXJpb3VzCj4gc2VnbWVudCByZWdpc3RlcnMgaXMgdGhlIG9uZSBw cmVzZW50IGluIGRlc2NyaXB0b3IgdGFibGVzIChzdWJqZWN0Cj4gdG8gc2NhbGluZyBieSB0aGUg ZyBiaXQpIG9yIChtb3JlIGxpa2VseSkgdGhlIGJ5dGUgZ3JhbnVsYXIgb25lLiBJbgo+IGFueSBl dmVudCBJIHN1cHBvc2UgY2VydGFpbiByZXN0cmljdGlvbnMgYXBwbHkuCgpMaW1pdCBpcyBub3Qg c3ViamVjdCB0byB0aGUgZyBiaXQsIHRoZSBsaW1pdCBzZXQgaGVyZSBpdCdzIHRoZSBvbmUgdGhh dAplbmRzIHVwIHByZXNlbnQgaW4gdGhlIGRlc2NyaXB0b3IgdGFibGVzIChvciBpbiB0aGlzIGNh c2UgaW4gdGhlIGNhY2hlZApwYXJ0IG9mIHRoZSBzZWxlY3RvcnMpLiBJTUhPIHRoYXQncyBpbXBs aWNpdCwgYW5kIGl0J3Mgd2hhdCdzIGRvbmUgb24KYmFyZSBtZXRhbC4KClJvZ2VyLgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxp bmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4t ZGV2ZWwK