From mboxrd@z Thu Jan 1 00:00:00 1970 From: Isaila Alexandru Subject: Re: [PATCH v12 03/11] x86/hvm: Introduce hvm_save_cpu_ctxt_one func Date: Tue, 17 Jul 2018 15:25:32 +0300 Message-ID: <1531830332.10865.4.camel@bitdefender.com> References: <1531752937-10478-1-git-send-email-aisaila@bitdefender.com> <1531752937-10478-4-git-send-email-aisaila@bitdefender.com> <492015aaf7164a48bc2a2e635ef0277d@AMSPEX02CL02.citrite.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <492015aaf7164a48bc2a2e635ef0277d@AMSPEX02CL02.citrite.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Paul Durrant , "xen-devel@lists.xen.org" Cc: Ian Jackson , Wei Liu , "jbeulich@suse.com" , Andrew Cooper List-Id: xen-devel@lists.xenproject.org T24gTHUsIDIwMTgtMDctMTYgYXQgMTU6MjkgKzAwMDAsIFBhdWwgRHVycmFudCB3cm90ZToKPiA+ IAo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+IEZyb206IEFsZXhhbmRydSBJc2Fp bGEgW21haWx0bzphaXNhaWxhQGJpdGRlZmVuZGVyLmNvbV0KPiA+IFNlbnQ6IDE2IEp1bHkgMjAx OCAxNTo1NQo+ID4gVG86IHhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCj4gPiBDYzogSWFuIEphY2tz b24gPElhbi5KYWNrc29uQGNpdHJpeC5jb20+OyBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguCj4g PiBjb20+Owo+ID4gamJldWxpY2hAc3VzZS5jb207IEFuZHJldyBDb29wZXIgPEFuZHJldy5Db29w ZXIzQGNpdHJpeC5jb20+OyBQYXVsCj4gPiBEdXJyYW50IDxQYXVsLkR1cnJhbnRAY2l0cml4LmNv bT47IEFsZXhhbmRydSBJc2FpbGEKPiA+IDxhaXNhaWxhQGJpdGRlZmVuZGVyLmNvbT4KPiA+IFN1 YmplY3Q6IFtQQVRDSCB2MTIgMDMvMTFdIHg4Ni9odm06IEludHJvZHVjZSBodm1fc2F2ZV9jcHVf Y3R4dF9vbmUKPiA+IGZ1bmMKPiA+IAo+ID4gVGhpcyBpcyB1c2VkIHRvIHNhdmUgZGF0YSBmcm9t IGEgc2luZ2xlIGluc3RhbmNlLgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUgSXNh aWxhIDxhaXNhaWxhQGJpdGRlZmVuZGVyLmNvbT4KPiA+IAo+ID4gLS0tCj4gPiBDaGFuZ2VzIHNp bmNlIFYxMToKPiA+IAktIGh2bV9zYXZlX2NwdV9jdHh0KCkgbm93IHJldHVybnMgZXJyIGZyb20K PiA+IAnCoMKgaHZtX3NhdmVfY3B1X2N0eHRfb25lKCkuCj4gPiAtLS0KPiA+IMKgeGVuL2FyY2gv eDg2L2h2bS9odm0uYyB8IDIxNiArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t Cj4gPiAtCj4gPiAtLS0tLS0tLS0tLQo+ID4gwqAxIGZpbGUgY2hhbmdlZCwgMTEzIGluc2VydGlv bnMoKyksIDEwMyBkZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4 Ni9odm0vaHZtLmMgYi94ZW4vYXJjaC94ODYvaHZtL2h2bS5jCj4gPiBpbmRleCBkZDg4NzUxLi5l MjBhMjVjIDEwMDY0NAo+ID4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS9odm0uYwo+ID4gKysrIGIv eGVuL2FyY2gveDg2L2h2bS9odm0uYwo+ID4gQEAgLTc4NywxMTkgKzc4NywxMjkgQEAgc3RhdGlj IGludCBodm1fbG9hZF90c2NfYWRqdXN0KHN0cnVjdAo+ID4gZG9tYWluICpkLAo+ID4gaHZtX2Rv bWFpbl9jb250ZXh0X3QgKmgpCj4gPiDCoEhWTV9SRUdJU1RFUl9TQVZFX1JFU1RPUkUoVFNDX0FE SlVTVCwgaHZtX3NhdmVfdHNjX2FkanVzdCwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGh2bV9sb2FkX3RzY19hZGp1c3QsIDEsIEhWTVNS X1BFUl9WQ1BVKTsKPiA+IAo+ID4gK3N0YXRpYyBpbnQgaHZtX3NhdmVfY3B1X2N0eHRfb25lKHN0 cnVjdCB2Y3B1ICp2LAo+ID4gaHZtX2RvbWFpbl9jb250ZXh0X3QKPiA+ICpoKQo+ID4gK3sKPiA+ ICvCoMKgwqDCoHN0cnVjdCBzZWdtZW50X3JlZ2lzdGVyIHNlZzsKPiA+ICvCoMKgwqDCoHN0cnVj dCBodm1faHdfY3B1IGN0eHQ7Cj4gPiArCj4gPiArwqDCoMKgwqBtZW1zZXQoJmN0eHQsIDAsIHNp emVvZihjdHh0KSk7Cj4gV2h5IG5vdCB1c2UgYW4gPSB7fSBpbml0aWFsaXplciBpbnN0ZWFkIG9m IHRoZSBtZW1zZXQgaGVyZSBsaWtlCj4gZWxzZXdoZXJlPwo+IAo+IMKgIFBhdWwKCkkgd2FudGVk IHRvIG1ha2UgbGVzcyBjaGFuZ2UgYXMgcG9zc2libGUgYW5kIEkgb25seSBhZGRlZCBhIGluaXRp YWxpemVyCndoZXJlIHRoZXJlIHdhcyBub25lLsKgCgpBbGV4wqAKPiA+IAo+ID4gKwo+ID4gK8Kg wqDCoMKgLyogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIHZtY3Mvdm1jYiBiaXRzICovCj4gPiArwqDC oMKgwqBodm1fZnVuY3Muc2F2ZV9jcHVfY3R4dCh2LCAmY3R4dCk7Cj4gPiArCj4gPiArwqDCoMKg wqBjdHh0LnRzYyA9IGh2bV9nZXRfZ3Vlc3RfdHNjX2ZpeGVkKHYsIHYtPmRvbWFpbi0KPiA+ID4g Cj4gPiA+IGFyY2guaHZtX2RvbWFpbi5zeW5jX3RzYyk7Cj4gPiArCj4gPiArwqDCoMKgwqBjdHh0 Lm1zcl90c2NfYXV4ID0gaHZtX21zcl90c2NfYXV4KHYpOwo+ID4gKwo+ID4gK8KgwqDCoMKgaHZt X2dldF9zZWdtZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdfaWR0ciwgJnNlZyk7Cj4gPiArwqDCoMKg wqBjdHh0LmlkdHJfbGltaXQgPSBzZWcubGltaXQ7Cj4gPiArwqDCoMKgwqBjdHh0LmlkdHJfYmFz ZSA9IHNlZy5iYXNlOwo+ID4gKwo+ID4gK8KgwqDCoMKgaHZtX2dldF9zZWdtZW50X3JlZ2lzdGVy KHYsIHg4Nl9zZWdfZ2R0ciwgJnNlZyk7Cj4gPiArwqDCoMKgwqBjdHh0LmdkdHJfbGltaXQgPSBz ZWcubGltaXQ7Cj4gPiArwqDCoMKgwqBjdHh0LmdkdHJfYmFzZSA9IHNlZy5iYXNlOwo+ID4gKwo+ ID4gK8KgwqDCoMKgaHZtX2dldF9zZWdtZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdfY3MsICZzZWcp Owo+ID4gK8KgwqDCoMKgY3R4dC5jc19zZWwgPSBzZWcuc2VsOwo+ID4gK8KgwqDCoMKgY3R4dC5j c19saW1pdCA9IHNlZy5saW1pdDsKPiA+ICvCoMKgwqDCoGN0eHQuY3NfYmFzZSA9IHNlZy5iYXNl Owo+ID4gK8KgwqDCoMKgY3R4dC5jc19hcmJ5dGVzID0gc2VnLmF0dHI7Cj4gPiArCj4gPiArwqDC oMKgwqBodm1fZ2V0X3NlZ21lbnRfcmVnaXN0ZXIodiwgeDg2X3NlZ19kcywgJnNlZyk7Cj4gPiAr wqDCoMKgwqBjdHh0LmRzX3NlbCA9IHNlZy5zZWw7Cj4gPiArwqDCoMKgwqBjdHh0LmRzX2xpbWl0 ID0gc2VnLmxpbWl0Owo+ID4gK8KgwqDCoMKgY3R4dC5kc19iYXNlID0gc2VnLmJhc2U7Cj4gPiAr wqDCoMKgwqBjdHh0LmRzX2FyYnl0ZXMgPSBzZWcuYXR0cjsKPiA+ICsKPiA+ICvCoMKgwqDCoGh2 bV9nZXRfc2VnbWVudF9yZWdpc3Rlcih2LCB4ODZfc2VnX2VzLCAmc2VnKTsKPiA+ICvCoMKgwqDC oGN0eHQuZXNfc2VsID0gc2VnLnNlbDsKPiA+ICvCoMKgwqDCoGN0eHQuZXNfbGltaXQgPSBzZWcu bGltaXQ7Cj4gPiArwqDCoMKgwqBjdHh0LmVzX2Jhc2UgPSBzZWcuYmFzZTsKPiA+ICvCoMKgwqDC oGN0eHQuZXNfYXJieXRlcyA9IHNlZy5hdHRyOwo+ID4gKwo+ID4gK8KgwqDCoMKgaHZtX2dldF9z ZWdtZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdfc3MsICZzZWcpOwo+ID4gK8KgwqDCoMKgY3R4dC5z c19zZWwgPSBzZWcuc2VsOwo+ID4gK8KgwqDCoMKgY3R4dC5zc19saW1pdCA9IHNlZy5saW1pdDsK PiA+ICvCoMKgwqDCoGN0eHQuc3NfYmFzZSA9IHNlZy5iYXNlOwo+ID4gK8KgwqDCoMKgY3R4dC5z c19hcmJ5dGVzID0gc2VnLmF0dHI7Cj4gPiArCj4gPiArwqDCoMKgwqBodm1fZ2V0X3NlZ21lbnRf cmVnaXN0ZXIodiwgeDg2X3NlZ19mcywgJnNlZyk7Cj4gPiArwqDCoMKgwqBjdHh0LmZzX3NlbCA9 IHNlZy5zZWw7Cj4gPiArwqDCoMKgwqBjdHh0LmZzX2xpbWl0ID0gc2VnLmxpbWl0Owo+ID4gK8Kg wqDCoMKgY3R4dC5mc19iYXNlID0gc2VnLmJhc2U7Cj4gPiArwqDCoMKgwqBjdHh0LmZzX2FyYnl0 ZXMgPSBzZWcuYXR0cjsKPiA+ICsKPiA+ICvCoMKgwqDCoGh2bV9nZXRfc2VnbWVudF9yZWdpc3Rl cih2LCB4ODZfc2VnX2dzLCAmc2VnKTsKPiA+ICvCoMKgwqDCoGN0eHQuZ3Nfc2VsID0gc2VnLnNl bDsKPiA+ICvCoMKgwqDCoGN0eHQuZ3NfbGltaXQgPSBzZWcubGltaXQ7Cj4gPiArwqDCoMKgwqBj dHh0LmdzX2Jhc2UgPSBzZWcuYmFzZTsKPiA+ICvCoMKgwqDCoGN0eHQuZ3NfYXJieXRlcyA9IHNl Zy5hdHRyOwo+ID4gKwo+ID4gK8KgwqDCoMKgaHZtX2dldF9zZWdtZW50X3JlZ2lzdGVyKHYsIHg4 Nl9zZWdfdHIsICZzZWcpOwo+ID4gK8KgwqDCoMKgY3R4dC50cl9zZWwgPSBzZWcuc2VsOwo+ID4g K8KgwqDCoMKgY3R4dC50cl9saW1pdCA9IHNlZy5saW1pdDsKPiA+ICvCoMKgwqDCoGN0eHQudHJf YmFzZSA9IHNlZy5iYXNlOwo+ID4gK8KgwqDCoMKgY3R4dC50cl9hcmJ5dGVzID0gc2VnLmF0dHI7 Cj4gPiArCj4gPiArwqDCoMKgwqBodm1fZ2V0X3NlZ21lbnRfcmVnaXN0ZXIodiwgeDg2X3NlZ19s ZHRyLCAmc2VnKTsKPiA+ICvCoMKgwqDCoGN0eHQubGR0cl9zZWwgPSBzZWcuc2VsOwo+ID4gK8Kg wqDCoMKgY3R4dC5sZHRyX2xpbWl0ID0gc2VnLmxpbWl0Owo+ID4gK8KgwqDCoMKgY3R4dC5sZHRy X2Jhc2UgPSBzZWcuYmFzZTsKPiA+ICvCoMKgwqDCoGN0eHQubGR0cl9hcmJ5dGVzID0gc2VnLmF0 dHI7Cj4gPiArCj4gPiArwqDCoMKgwqBpZiAoIHYtPmZwdV9pbml0aWFsaXNlZCApCj4gPiArwqDC oMKgwqB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoG1lbWNweShjdHh0LmZwdV9yZWdzLCB2LT5hcmNo LmZwdV9jdHh0LAo+ID4gc2l6ZW9mKGN0eHQuZnB1X3JlZ3MpKTsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgY3R4dC5mbGFncyA9IFhFTl9YODZfRlBVX0lOSVRJQUxJU0VEOwo+ID4gK8KgwqDCoMKgfQo+ ID4gKwo+ID4gK8KgwqDCoMKgY3R4dC5yYXggPSB2LT5hcmNoLnVzZXJfcmVncy5yYXg7Cj4gPiAr wqDCoMKgwqBjdHh0LnJieCA9IHYtPmFyY2gudXNlcl9yZWdzLnJieDsKPiA+ICvCoMKgwqDCoGN0 eHQucmN4ID0gdi0+YXJjaC51c2VyX3JlZ3MucmN4Owo+ID4gK8KgwqDCoMKgY3R4dC5yZHggPSB2 LT5hcmNoLnVzZXJfcmVncy5yZHg7Cj4gPiArwqDCoMKgwqBjdHh0LnJicCA9IHYtPmFyY2gudXNl cl9yZWdzLnJicDsKPiA+ICvCoMKgwqDCoGN0eHQucnNpID0gdi0+YXJjaC51c2VyX3JlZ3MucnNp Owo+ID4gK8KgwqDCoMKgY3R4dC5yZGkgPSB2LT5hcmNoLnVzZXJfcmVncy5yZGk7Cj4gPiArwqDC oMKgwqBjdHh0LnJzcCA9IHYtPmFyY2gudXNlcl9yZWdzLnJzcDsKPiA+ICvCoMKgwqDCoGN0eHQu cmlwID0gdi0+YXJjaC51c2VyX3JlZ3MucmlwOwo+ID4gK8KgwqDCoMKgY3R4dC5yZmxhZ3MgPSB2 LT5hcmNoLnVzZXJfcmVncy5yZmxhZ3M7Cj4gPiArwqDCoMKgwqBjdHh0LnI4wqDCoD0gdi0+YXJj aC51c2VyX3JlZ3Mucjg7Cj4gPiArwqDCoMKgwqBjdHh0LnI5wqDCoD0gdi0+YXJjaC51c2VyX3Jl Z3Mucjk7Cj4gPiArwqDCoMKgwqBjdHh0LnIxMCA9IHYtPmFyY2gudXNlcl9yZWdzLnIxMDsKPiA+ ICvCoMKgwqDCoGN0eHQucjExID0gdi0+YXJjaC51c2VyX3JlZ3MucjExOwo+ID4gK8KgwqDCoMKg Y3R4dC5yMTIgPSB2LT5hcmNoLnVzZXJfcmVncy5yMTI7Cj4gPiArwqDCoMKgwqBjdHh0LnIxMyA9 IHYtPmFyY2gudXNlcl9yZWdzLnIxMzsKPiA+ICvCoMKgwqDCoGN0eHQucjE0ID0gdi0+YXJjaC51 c2VyX3JlZ3MucjE0Owo+ID4gK8KgwqDCoMKgY3R4dC5yMTUgPSB2LT5hcmNoLnVzZXJfcmVncy5y MTU7Cj4gPiArwqDCoMKgwqBjdHh0LmRyMCA9IHYtPmFyY2guZGVidWdyZWdbMF07Cj4gPiArwqDC oMKgwqBjdHh0LmRyMSA9IHYtPmFyY2guZGVidWdyZWdbMV07Cj4gPiArwqDCoMKgwqBjdHh0LmRy MiA9IHYtPmFyY2guZGVidWdyZWdbMl07Cj4gPiArwqDCoMKgwqBjdHh0LmRyMyA9IHYtPmFyY2gu ZGVidWdyZWdbM107Cj4gPiArwqDCoMKgwqBjdHh0LmRyNiA9IHYtPmFyY2guZGVidWdyZWdbNl07 Cj4gPiArwqDCoMKgwqBjdHh0LmRyNyA9IHYtPmFyY2guZGVidWdyZWdbN107Cj4gPiArCj4gPiAr wqDCoMKgwqByZXR1cm4gaHZtX3NhdmVfZW50cnkoQ1BVLCB2LT52Y3B1X2lkLCBoLCAmY3R4dCk7 Cj4gPiArfQo+ID4gKwo+ID4gwqBzdGF0aWMgaW50IGh2bV9zYXZlX2NwdV9jdHh0KHN0cnVjdCBk b21haW4gKmQsCj4gPiBodm1fZG9tYWluX2NvbnRleHRfdCAqaCkKPiA+IMKgewo+ID4gwqDCoMKg wqDCoHN0cnVjdCB2Y3B1ICp2Owo+ID4gLcKgwqDCoMKgc3RydWN0IGh2bV9od19jcHUgY3R4dDsK PiA+IC3CoMKgwqDCoHN0cnVjdCBzZWdtZW50X3JlZ2lzdGVyIHNlZzsKPiA+ICvCoMKgwqDCoGlu dCBlcnIgPSAwOwo+ID4gCj4gPiDCoMKgwqDCoMKgZm9yX2VhY2hfdmNwdSAoIGQsIHYgKQo+ID4g wqDCoMKgwqDCoHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgLyogV2UgZG9uJ3QgbmVlZCB0byBzYXZl IHN0YXRlIGZvciBhIHZjcHUgdGhhdCBpcyBkb3duOwo+ID4gdGhlIHJlc3RvcmUKPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqAqIGNvZGUgd2lsbCBsZWF2ZSBpdCBkb3duIGlmIHRoZXJlIGlzIG5vdGhp bmcgc2F2ZWQuICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoC8qCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgKiBXZSBkb24ndCBuZWVkIHRvIHNhdmUgc3RhdGUgZm9yIGEgdmNwdSB0aGF0IGlzIGRvd247 Cj4gPiB0aGUgcmVzdG9yZQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCogY29kZSB3aWxsIGxlYXZl IGl0IGRvd24gaWYgdGhlcmUgaXMgbm90aGluZyBzYXZlZC4KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqAqLwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCB2LT5wYXVzZV9mbGFncyAmIFZQRl9kb3du ICkKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4gPiAKPiA+IC3CoMKg wqDCoMKgwqDCoMKgbWVtc2V0KCZjdHh0LCAwLCBzaXplb2YoY3R4dCkpOwo+ID4gLQo+ID4gLcKg wqDCoMKgwqDCoMKgwqAvKiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgdm1jcy92bWNiIGJpdHMgKi8K PiA+IC3CoMKgwqDCoMKgwqDCoMKgaHZtX2Z1bmNzLnNhdmVfY3B1X2N0eHQodiwgJmN0eHQpOwo+ ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LnRzYyA9IGh2bV9nZXRfZ3Vlc3RfdHNjX2Zp eGVkKHYsIGQtCj4gPiA+YXJjaC5odm1fZG9tYWluLnN5bmNfdHNjKTsKPiA+IC0KPiA+IC3CoMKg wqDCoMKgwqDCoMKgY3R4dC5tc3JfdHNjX2F1eCA9IGh2bV9tc3JfdHNjX2F1eCh2KTsKPiA+IC0K PiA+IC3CoMKgwqDCoMKgwqDCoMKgaHZtX2dldF9zZWdtZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdf aWR0ciwgJnNlZyk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQuaWR0cl9saW1pdCA9IHNlZy5s aW1pdDsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgY3R4dC5pZHRyX2Jhc2UgPSBzZWcuYmFzZTsKPiA+ IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgaHZtX2dldF9zZWdtZW50X3JlZ2lzdGVyKHYsIHg4Nl9z ZWdfZ2R0ciwgJnNlZyk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQuZ2R0cl9saW1pdCA9IHNl Zy5saW1pdDsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgY3R4dC5nZHRyX2Jhc2UgPSBzZWcuYmFzZTsK PiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgaHZtX2dldF9zZWdtZW50X3JlZ2lzdGVyKHYsIHg4 Nl9zZWdfY3MsICZzZWcpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LmNzX3NlbCA9IHNlZy5z ZWw7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQuY3NfbGltaXQgPSBzZWcubGltaXQ7Cj4gPiAt wqDCoMKgwqDCoMKgwqDCoGN0eHQuY3NfYmFzZSA9IHNlZy5iYXNlOwo+ID4gLcKgwqDCoMKgwqDC oMKgwqBjdHh0LmNzX2FyYnl0ZXMgPSBzZWcuYXR0cjsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDC oMKgaHZtX2dldF9zZWdtZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdfZHMsICZzZWcpOwo+ID4gLcKg wqDCoMKgwqDCoMKgwqBjdHh0LmRzX3NlbCA9IHNlZy5zZWw7Cj4gPiAtwqDCoMKgwqDCoMKgwqDC oGN0eHQuZHNfbGltaXQgPSBzZWcubGltaXQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQuZHNf YmFzZSA9IHNlZy5iYXNlOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LmRzX2FyYnl0ZXMgPSBz ZWcuYXR0cjsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgaHZtX2dldF9zZWdtZW50X3JlZ2lz dGVyKHYsIHg4Nl9zZWdfZXMsICZzZWcpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LmVzX3Nl bCA9IHNlZy5zZWw7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQuZXNfbGltaXQgPSBzZWcubGlt aXQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQuZXNfYmFzZSA9IHNlZy5iYXNlOwo+ID4gLcKg wqDCoMKgwqDCoMKgwqBjdHh0LmVzX2FyYnl0ZXMgPSBzZWcuYXR0cjsKPiA+IC0KPiA+IC3CoMKg wqDCoMKgwqDCoMKgaHZtX2dldF9zZWdtZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdfc3MsICZzZWcp Owo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LnNzX3NlbCA9IHNlZy5zZWw7Cj4gPiAtwqDCoMKg wqDCoMKgwqDCoGN0eHQuc3NfbGltaXQgPSBzZWcubGltaXQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqDC oGN0eHQuc3NfYmFzZSA9IHNlZy5iYXNlOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LnNzX2Fy Ynl0ZXMgPSBzZWcuYXR0cjsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgaHZtX2dldF9zZWdt ZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdfZnMsICZzZWcpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqBj dHh0LmZzX3NlbCA9IHNlZy5zZWw7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQuZnNfbGltaXQg PSBzZWcubGltaXQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQuZnNfYmFzZSA9IHNlZy5iYXNl Owo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LmZzX2FyYnl0ZXMgPSBzZWcuYXR0cjsKPiA+IC0K PiA+IC3CoMKgwqDCoMKgwqDCoMKgaHZtX2dldF9zZWdtZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdf Z3MsICZzZWcpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LmdzX3NlbCA9IHNlZy5zZWw7Cj4g PiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQuZ3NfbGltaXQgPSBzZWcubGltaXQ7Cj4gPiAtwqDCoMKg wqDCoMKgwqDCoGN0eHQuZ3NfYmFzZSA9IHNlZy5iYXNlOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqBj dHh0LmdzX2FyYnl0ZXMgPSBzZWcuYXR0cjsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgaHZt X2dldF9zZWdtZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdfdHIsICZzZWcpOwo+ID4gLcKgwqDCoMKg wqDCoMKgwqBjdHh0LnRyX3NlbCA9IHNlZy5zZWw7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQu dHJfbGltaXQgPSBzZWcubGltaXQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQudHJfYmFzZSA9 IHNlZy5iYXNlOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LnRyX2FyYnl0ZXMgPSBzZWcuYXR0 cjsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgaHZtX2dldF9zZWdtZW50X3JlZ2lzdGVyKHYs IHg4Nl9zZWdfbGR0ciwgJnNlZyk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQubGR0cl9zZWwg PSBzZWcuc2VsOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LmxkdHJfbGltaXQgPSBzZWcubGlt aXQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQubGR0cl9iYXNlID0gc2VnLmJhc2U7Cj4gPiAt wqDCoMKgwqDCoMKgwqDCoGN0eHQubGR0cl9hcmJ5dGVzID0gc2VnLmF0dHI7Cj4gPiAtCj4gPiAt wqDCoMKgwqDCoMKgwqDCoGlmICggdi0+ZnB1X2luaXRpYWxpc2VkICkKPiA+IC3CoMKgwqDCoMKg wqDCoMKgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lbWNweShjdHh0LmZwdV9yZWdz LCB2LT5hcmNoLmZwdV9jdHh0LAo+ID4gc2l6ZW9mKGN0eHQuZnB1X3JlZ3MpKTsKPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBjdHh0LmZsYWdzID0gWEVOX1g4Nl9GUFVfSU5JVElBTElTRUQ7 Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoH0KPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgY3R4dC5y YXggPSB2LT5hcmNoLnVzZXJfcmVncy5yYXg7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQucmJ4 ID0gdi0+YXJjaC51c2VyX3JlZ3MucmJ4Owo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LnJjeCA9 IHYtPmFyY2gudXNlcl9yZWdzLnJjeDsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgY3R4dC5yZHggPSB2 LT5hcmNoLnVzZXJfcmVncy5yZHg7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQucmJwID0gdi0+ YXJjaC51c2VyX3JlZ3MucmJwOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LnJzaSA9IHYtPmFy Y2gudXNlcl9yZWdzLnJzaTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgY3R4dC5yZGkgPSB2LT5hcmNo LnVzZXJfcmVncy5yZGk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQucnNwID0gdi0+YXJjaC51 c2VyX3JlZ3MucnNwOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LnJpcCA9IHYtPmFyY2gudXNl cl9yZWdzLnJpcDsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgY3R4dC5yZmxhZ3MgPSB2LT5hcmNoLnVz ZXJfcmVncy5yZmxhZ3M7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQucjjCoMKgPSB2LT5hcmNo LnVzZXJfcmVncy5yODsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgY3R4dC5yOcKgwqA9IHYtPmFyY2gu dXNlcl9yZWdzLnI5Owo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LnIxMCA9IHYtPmFyY2gudXNl cl9yZWdzLnIxMDsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgY3R4dC5yMTEgPSB2LT5hcmNoLnVzZXJf cmVncy5yMTE7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQucjEyID0gdi0+YXJjaC51c2VyX3Jl Z3MucjEyOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LnIxMyA9IHYtPmFyY2gudXNlcl9yZWdz LnIxMzsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgY3R4dC5yMTQgPSB2LT5hcmNoLnVzZXJfcmVncy5y MTQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQucjE1ID0gdi0+YXJjaC51c2VyX3JlZ3MucjE1 Owo+ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHh0LmRyMCA9IHYtPmFyY2guZGVidWdyZWdbMF07Cj4g PiAtwqDCoMKgwqDCoMKgwqDCoGN0eHQuZHIxID0gdi0+YXJjaC5kZWJ1Z3JlZ1sxXTsKPiA+IC3C oMKgwqDCoMKgwqDCoMKgY3R4dC5kcjIgPSB2LT5hcmNoLmRlYnVncmVnWzJdOwo+ID4gLcKgwqDC oMKgwqDCoMKgwqBjdHh0LmRyMyA9IHYtPmFyY2guZGVidWdyZWdbM107Cj4gPiAtwqDCoMKgwqDC oMKgwqDCoGN0eHQuZHI2ID0gdi0+YXJjaC5kZWJ1Z3JlZ1s2XTsKPiA+IC3CoMKgwqDCoMKgwqDC oMKgY3R4dC5kcjcgPSB2LT5hcmNoLmRlYnVncmVnWzddOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDC oMKgwqBpZiAoIGh2bV9zYXZlX2VudHJ5KENQVSwgdi0+dmNwdV9pZCwgaCwgJmN0eHQpICE9IDAg KQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAxOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqBlcnIgPSBodm1fc2F2ZV9jcHVfY3R4dF9vbmUodiwgaCk7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoGlmICggZXJyICkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+IMKg wqDCoMKgwqB9Cj4gPiAtwqDCoMKgwqByZXR1cm4gMDsKPiA+ICvCoMKgwqDCoHJldHVybiBlcnI7 Cj4gPiDCoH0KPiA+IAo+ID4gwqAvKiBSZXR1cm4gYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgZXJy b3IsIG9yIE5VTEwgZm9yIHZhbGlkLiAqLwo+ID4gLS0KPiA+IDIuNy40CgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0 Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qu b3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs