From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Huang, Kai" Subject: Re: [PATCH 09/15] xen: vmx: handle SGX related MSRs Date: Sat, 22 Jul 2017 13:37:41 +1200 Message-ID: References: <0d4f023a709e7ca089821267e517fb1157437ab6.1499586046.git.kai.huang@linux.intel.com> <067566ac-8294-8525-663b-fe37e449e916@citrix.com> <882af66d-ef7f-7e21-4d37-052ad87749d3@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <882af66d-ef7f-7e21-4d37-052ad87749d3@linux.intel.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andrew Cooper , Kai Huang , xen-devel@lists.xen.org Cc: kevin.tian@intel.com, jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org CgpPbiA3LzIxLzIwMTcgOTo0MiBQTSwgSHVhbmcsIEthaSB3cm90ZToKPiAKPiAKPiBPbiA3LzIw LzIwMTcgNToyNyBBTSwgQW5kcmV3IENvb3BlciB3cm90ZToKPj4gT24gMDkvMDcvMTcgMDk6MDks IEthaSBIdWFuZyB3cm90ZToKPj4+IFRoaXMgcGF0Y2ggaGFuZGxlcyBJQTMyX0ZFQVRVUkVfQ09O VFJPTCBhbmQgSUEzMl9TR1hMRVBVQktFWUhBU0huIE1TUnMuCj4+Pgo+Pj4gRm9yIElBMzJfRkVB VFVSRV9DT05UUk9MLCBpZiBTR1ggaXMgZXhwb3NlZCB0byBkb21haW4sIHRoZW4gCj4+PiBTR1hf RU5BQkxFIGJpdAo+Pj4gaXMgYWx3YXlzIHNldC4gSWYgU0dYIGxhdW5jaCBjb250cm9sIGlzIGFs c28gZXhwb3NlZCB0byBkb21haW4sIGFuZCAKPj4+IHBoeXNpY2FsCj4+PiBJQTMyX1NHWExFUFVC S0VZSEFTSG4gYXJlIHdyaXRhYmxlLCB0aGVuIFNHWF9MQVVOQ0hfQ09OVFJPTF9FTkFCTEUgCj4+ PiBiaXQgaXMKPj4+IGFsc28gYWx3YXlzIHNldC4gV3JpdGUgdG8gSUEzMl9GRUFUVVJFX0NPTlRS T0wgaXMgaWdub3JlZC4KPj4+Cj4+PiBGb3IgSUEzMl9TR1hMRVBVQktFWUhBU0huLCBhIG5ldyAn c3RydWN0IHNneF92Y3B1JyBpcyBhZGRlZCBmb3IgCj4+PiBwZXItdmNwdSBTR1gKPj4+IHN0YWZm LCBhbmQgY3VycmVudGx5IGl0IGhhcyB2Y3B1J3MgdmlydHVhbCBpYTMyX3NneGxlcHVia2V5aGFz aFswLTNdLiAKPj4+IFR3bwo+Pj4gYm9vbGVhbiAncmVhZGFibGUnIGFuZCAnd3JpdGFibGUnIGFy ZSBhbHNvIGFkZGVkIHRvIGluZGljYXRlIHdoZXRoZXIgCj4+PiB2aXJ0dWFsCj4+PiBJQTMyX1NH WExFUFVCS0VZSEFTSG4gYXJlIHJlYWRhYmxlIGFuZCB3cml0YWJsZS4KPj4+Cj4+PiBEdXJpbmcg dmNwdSBpcyBpbml0aWFsaXplZCwgdmlydHVhbCBpYTMyX3NneGxlcHVia2V5aGFzaCBhcmUgYWxz byAKPj4+IGluaXRpYWxpemVkLgo+Pj4gSWYgcGh5c2ljYWwgSUEzMl9TR1hMRVBVQktFWUhBU0hu IGFyZSB3cml0YWJsZSwgdGhlbiAKPj4+IGlhMzJfc2d4bGVwdWJrZXloYXNoIGFyZQo+Pj4gc2V0 IHRvIEludGVsJ3MgZGVmYXVsdCB2YWx1ZSwgYXMgZm9yIHBoeXNpY2FsIG1hY2hpbmUsIHRob3Nl IE1TUnMgCj4+PiB3aWxsIGhhdmUKPj4+IEludGVsJ3MgZGVmYXVsdCB2YWx1ZS4gSWYgcGh5c2lj YWwgTVNScyBhcmUgbm90IHdyaXRhYmxlIChpdCBpcyAKPj4+ICpsb2NrZWQqIGJ5Cj4+PiBCSU9T IGJlZm9yZSBoYW5kbGluZyB0byBYZW4pLCB0aGVuIHdlIHRyeSB0byByZWFkIHRob3NlIE1TUnMg YW5kIHVzZSAKPj4+IHBoeXNpY2FsCj4+PiB2YWx1ZXMgYXMgZGVmdWx0IHZhbHVlIGZvciB2aXJ0 dWFsIE1TUnMuIE9uZSB0aGluZyBpcyByZG1zcl9zYWZlIGlzIAo+Pj4gdXNlZCwgYXMKPj4+IGFs dGhvdWdoIFNETSBzYXlzIGlmIFNHWCBpcyBwcmVzZW50LCBJQTMyX1NHWExFUFVCS0VZSEFTSG4g YXJlIAo+Pj4gYXZhaWxhYmxlIGZvcgo+Pj4gcmVhZCwgYnV0IGluIHJlYWxpdHksIHNreWxha2Ug Y2xpZW50IChhdCBsZWFzdCBzb21lLCBkZXBlbmRpbmcgb24gCj4+PiBCSU9TKSBkb2Vzbid0Cj4+ PiBoYXZlIHRob3NlIE1TUnMgYXZhaWxhYmxlLCBzbyB3ZSB1c2UgcmRtc3Jfc2FmZSBhbmQgc2V0 IHJlYWRhYmxlIHRvIAo+Pj4gZmFsc2UgaWYgaXQKPj4+IHJldHVybnMgZXJyb3IgY29kZS4KPj4+ Cj4+PiBGb3IgSUEzMl9TR1hMRVBVQktFWUhBU0huIE1TUiByZWFkIGZyb20gZ3Vlc3QsIGlmIHBo eXNpY2FsIE1TUnMgYXJlIG5vdAo+Pj4gcmVhZGFibGUsIGd1ZXN0IGlzIG5vdCBhbGxvd2VkIHRv IHJlYWQgZWl0aGVyLCBvdGhlcndpc2UgdmNwdSdzIAo+Pj4gdmlydHVhbCBNU1IKPj4+IHZhbHVl IGlzIHJldHVybmVkLgo+Pj4KPj4+IEZvciBJQTMyX1NHWExFUFVCS0VZSEFTSG4gTVNSIHdyaXRl IGZyb20gZ3Vlc3QsIHdlIGFsbG93IGd1ZXN0IHRvIAo+Pj4gd3JpdGUgaWYgYm90aAo+Pj4gcGh5 c2ljYWwgTVNScyBhcmUgd3JpdGFibGUgYW5kIFNHWCBsYXVuY2ggY29udHJvbCBpcyBleHBvc2Vk IHRvIGRvbWFpbiwKPj4+IG90aGVyd2lzZSBlcnJvciBpcyBpbmplY3RlZC4KPj4+Cj4+PiBUbyBt YWtlIEVJTklUIHJ1biBzdWNjZXNzZnVsbHkgaW4gZ3Vlc3QsIHZjcHUncyB2aXJ0dWFsIAo+Pj4g SUEzMl9TR1hMRVBVQktFWUhBU0huCj4+PiB3aWxsIGJlIHVwZGF0ZSB0byBwaHlzaWNhbCBNU1Jz IHdoZW4gdmNwdSBpcyBzY2hlZHVsZWQgaW4uCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogS2FpIEh1 YW5nIDxrYWkuaHVhbmdAbGludXguaW50ZWwuY29tPgo+Pj4gLS0tCj4+PiAgIHhlbi9hcmNoL3g4 Ni9odm0vdm14L3NneC5jICAgICAgICAgfCAxOTQgCj4+PiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4+PiAgIHhlbi9hcmNoL3g4Ni9odm0vdm14L3ZteC5jICAgICAgICAg fCAgMjQgKysrKysKPj4+ICAgeGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmggICB8ICAg MyArCj4+PiAgIHhlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3ZteC9zZ3guaCAgfCAgMjIgKysrKysK Pj4+ICAgeGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vdm14L3ZtY3MuaCB8ICAgMiArCj4+PiAgIHhl bi9pbmNsdWRlL2FzbS14ODYvbXNyLWluZGV4LmggICAgfCAgIDYgKysKPj4+ICAgNiBmaWxlcyBj aGFuZ2VkLCAyNTEgaW5zZXJ0aW9ucygrKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94 ODYvaHZtL3ZteC9zZ3guYyBiL3hlbi9hcmNoL3g4Ni9odm0vdm14L3NneC5jCj4+PiBpbmRleCAx NDM3OTE1MWU4Li40OTQ0ZTU3YWVmIDEwMDY0NAo+Pj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS92 bXgvc2d4LmMKPj4+ICsrKyBiL3hlbi9hcmNoL3g4Ni9odm0vdm14L3NneC5jCj4+PiBAQCAtNDA1 LDYgKzQwNSwyMDAgQEAgdm9pZCBodm1fZGVzdHJveV9lcGMoc3RydWN0IGRvbWFpbiAqZCkKPj4+ ICAgICAgIGh2bV9yZXNldF9lcGMoZCwgdHJ1ZSk7Cj4+PiAgIH0KPj4+ICsvKiBXaGV0aGVyIElB MzJfU0dYTEVQVUJLRVlIQVNIbiBhcmUgcGh5c2ljYWxseSAqdW5sb2NrZWQqIGJ5IEJJT1MgKi8K Pj4+ICtib29sX3Qgc2d4X2lhMzJfc2d4bGVwdWJrZXloYXNoX3dyaXRhYmxlKHZvaWQpCj4+PiAr ewo+Pj4gKyAgICB1aW50NjRfdCBzZ3hfbGNfZW5hYmxlZCA9IElBMzJfRkVBVFVSRV9DT05UUk9M X1NHWF9FTkFCTEUgfAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo+Pj4gSUEz Ml9GRUFUVVJFX0NPTlRST0xfU0dYX0xBVU5DSF9DT05UUk9MX0VOQUJMRSB8Cj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSUEzMl9GRUFUVVJFX0NPTlRST0xfTE9DSzsKPj4+ICsg ICAgdWludDY0X3QgdmFsOwo+Pj4gKwo+Pj4gKyAgICByZG1zcmwoTVNSX0lBMzJfRkVBVFVSRV9D T05UUk9MLCB2YWwpOwo+Pj4gKwo+Pj4gKyAgICByZXR1cm4gKHZhbCAmIHNneF9sY19lbmFibGVk KSA9PSBzZ3hfbGNfZW5hYmxlZDsKPj4+ICt9Cj4+PiArCj4+PiArYm9vbF90IGRvbWFpbl9oYXNf c2d4KHN0cnVjdCBkb21haW4gKmQpCj4+PiArewo+Pj4gKyAgICAvKiBodm1fZXBjX3BvcHVsYXRl ZChkKSBpbXBsaWVzIENQVUlEIGhhcyBTR1ggKi8KPj4+ICsgICAgcmV0dXJuIGh2bV9lcGNfcG9w dWxhdGVkKGQpOwo+Pj4gK30KPj4+ICsKPj4+ICtib29sX3QgZG9tYWluX2hhc19zZ3hfbGF1bmNo X2NvbnRyb2woc3RydWN0IGRvbWFpbiAqZCkKPj4+ICt7Cj4+PiArICAgIHN0cnVjdCBjcHVpZF9w b2xpY3kgKnAgPSBkLT5hcmNoLmNwdWlkOwo+Pj4gKwo+Pj4gKyAgICBpZiAoICFkb21haW5faGFz X3NneChkKSApCj4+PiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4+PiArCj4+PiArICAgIC8qIFVu bmVjZXNzYXJ5IGJ1dCBjaGVjayBhbnl3YXkgKi8KPj4+ICsgICAgaWYgKCAhY3B1X2hhc19zZ3hf bGF1bmNoX2NvbnRyb2wgKQo+Pj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+Pj4gKwo+Pj4gKyAg ICByZXR1cm4gISFwLT5mZWF0LnNneF9sYXVuY2hfY29udHJvbDsKPj4+ICt9Cj4+Cj4+IEJvdGgg b2YgdGhlc2Ugc2hvdWxkIGJlIGQtPmFyY2guY3B1aWQtPmZlYXQue3NneCxzZ3hfbGN9IG9ubHks IGFuZCBub3QKPj4gZnJvbSBoYXZpbmcgaW5kaXZpZHVhbCBoZWxwZXJzLgo+Pgo+PiBUaGUgQ1BV SUQgc2V0dXAgZHVyaW5nIGhvc3QgYm9vdCBhbmQgZG9tYWluIGNvbnN0cnVjdGlvbiBzaG91bGQg dGFrZQo+PiBjYXJlIG9mIHNldHRpbmcgZXZlcnl0aGluZyB1cCBwcm9wZXJseSwgb3IgaGlkaW5n IHRoZSBmZWF0dXJlcyBmcm9tIHRoZQo+PiBndWVzdC4gIFRoZSBwb2ludCBvZiB0aGUgd29yayBJ J3ZlIGJlZW4gZG9pbmcgaXMgdG8gcHJldmVudCBzaXR1YXRpb25zCj4+IHdoZXJlIHRoZSBndWVz dCBjYW4gc2VlIFNHWCBidXQgc29tZXRoaW5nIGRvZXNuJ3Qgd29yayBiZWNhdXNlIG9mIFhlbgo+ PiB1c2luZyBuZXN0ZWQgY2hlY2tzIGxpa2UgdGhpcy4KPiAKPiBUaGFua3MgZm9yIGNvbW1lbnRz LiBXaWxsIGNoYW5nZSB0byBzaW1wbGUgY2hlY2sgYWdhaW5zdCAKPiBkLT5hcmNoLmNwdWlkLT5m ZWF0LntzZ3gsc2d4X2xjfS4KPiAKPj4KPj4+ICsKPj4+ICsvKiBEaWdlc3Qgb2YgSW50ZWwgc2ln bmluZyBrZXkuIE1TUidzIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQuICovCj4+PiArI2RlZmlu ZSBTR1hfSU5URUxfREVGQVVMVF9MRVBVQktFWUhBU0gwIDB4YTYwNTNlMDUxMjcwYjdhYwo+Pj4g KyNkZWZpbmUgU0dYX0lOVEVMX0RFRkFVTFRfTEVQVUJLRVlIQVNIMSAweDZjZmJlOGJhOGIzYjQx M2QKPj4+ICsjZGVmaW5lIFNHWF9JTlRFTF9ERUZBVUxUX0xFUFVCS0VZSEFTSDIgMHhjNDkxNmQ5 OWYyYjM3MzVkCj4+PiArI2RlZmluZSBTR1hfSU5URUxfREVGQVVMVF9MRVBVQktFWUhBU0gzIDB4 ZDRmOGMwNTkwOWY5YmIzYgo+Pj4gKwo+Pj4gK3ZvaWQgc2d4X3ZjcHVfaW5pdChzdHJ1Y3QgdmNw dSAqdikKPj4+ICt7Cj4+PiArICAgIHN0cnVjdCBzZ3hfdmNwdSAqc2d4diA9IHRvX3NneF92Y3B1 KHYpOwo+Pj4gKwo+Pj4gKyAgICBtZW1zZXQoc2d4diwgMCwgc2l6ZW9mICgqc2d4dikpOwo+Pj4g Kwo+Pj4gKyAgICBpZiAoIHNneF9pYTMyX3NneGxlcHVia2V5aGFzaF93cml0YWJsZSgpICkKPj4+ ICsgICAgewo+Pj4gKyAgICAgICAgLyoKPj4+ICsgICAgICAgICAqIElmIHBoeXNpY2FsIE1TUnMg YXJlIHdyaXRhYmxlLCBzZXQgdmNwdSdzIGRlZmF1bHQgdmFsdWUgCj4+PiB0byBJbnRlbCdzCj4+ PiArICAgICAgICAgKiBkZWZhdWx0IHZhbHVlLiBGb3IgcmVhbCBtYWNoaW5lLCBhZnRlciByZXNl dCwgTVNScyAKPj4+IGNvbnRhaW4gSW50ZWwncwo+Pj4gKyAgICAgICAgICogZGVmYXVsdCB2YWx1 ZS4KPj4+ICsgICAgICAgICAqLwo+Pj4gKyAgICAgICAgc2d4di0+aWEzMl9zZ3hsZXB1YmtleWhh c2hbMF0gPSAKPj4+IFNHWF9JTlRFTF9ERUZBVUxUX0xFUFVCS0VZSEFTSDA7Cj4+PiArICAgICAg ICBzZ3h2LT5pYTMyX3NneGxlcHVia2V5aGFzaFsxXSA9IAo+Pj4gU0dYX0lOVEVMX0RFRkFVTFRf TEVQVUJLRVlIQVNIMTsKPj4+ICsgICAgICAgIHNneHYtPmlhMzJfc2d4bGVwdWJrZXloYXNoWzJd ID0gCj4+PiBTR1hfSU5URUxfREVGQVVMVF9MRVBVQktFWUhBU0gyOwo+Pj4gKyAgICAgICAgc2d4 di0+aWEzMl9zZ3hsZXB1YmtleWhhc2hbM10gPSAKPj4+IFNHWF9JTlRFTF9ERUZBVUxUX0xFUFVC S0VZSEFTSDM7Cj4+PiArCj4+PiArICAgICAgICBzZ3h2LT5yZWFkYWJsZSA9IDE7Cj4+PiArICAg ICAgICBzZ3h2LT53cml0YWJsZSA9IGRvbWFpbl9oYXNfc2d4X2xhdW5jaF9jb250cm9sKHYtPmRv bWFpbik7Cj4+PiArICAgIH0KPj4+ICsgICAgZWxzZQo+Pj4gKyAgICB7Cj4+PiArICAgICAgICB1 aW50NjRfdCB2Owo+Pj4gKyAgICAgICAgLyoKPj4+ICsgICAgICAgICAqIEFsdGhvdWdoIFNETSBz YXlzIGlmIFNHWCBpcyBwcmVzZW50LCB0aGVuIAo+Pj4gSUEzMl9TR1hMRVBVQktFWUhBU0huIGFy ZQo+Pj4gKyAgICAgICAgICogYXZhaWxhYmxlIGZvciByZWFkLCBidXQgaW4gcmVhbGl0eSBmb3Ig U0tZTEFLRSBjbGllbnQgCj4+PiBtYWNoaW5lcywKPj4+ICsgICAgICAgICAqIHRob3NlIE1TUnMg YXJlIG5vdCBhdmFpbGFibGUgaWYgU0dYIGlzIHByZXNlbnQsIHNvIHdlIAo+Pj4gY2Fubm90IHJl bHkgb24KPj4+ICsgICAgICAgICAqIGNwdV9oYXNfc2d4IHRvIGRldGVybWluZSB3aGV0aGVyIHRv IHdlIGFyZSBhYmxlIHRvIHJlYWQgCj4+PiBNU1JzLAo+Pj4gKyAgICAgICAgICogaW5zdGVhZCwg d2UgYWx3YXlzIHVzZSByZG1zcl9zYWZlLgo+Pgo+PiBUYWxraW5nIHdpdGggSnVuIGF0IFhlblN1 bW1pdCwgSSBnb3QgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUKPj4gYXZhaWxhYmlsaXR5IG9mIHRo ZXNlIGhhcyBNU1JzIGlzIGJhc2VkIG9uIFNHWF9MQywgbm90IFNHWC4KPj4KPj4gRnVydGhlcm1v cmUsIHRoYXQgaXMgbXkgcmVhZGluZyBvZiA0MS4yLjIgIkludGVsIFNHWCBMYXVuY2ggQ29udHJv bAo+PiBDb25maWd1cmF0aW9uIiwgYWx0aG91Z2ggdGhlIGxvZ2ljIGlzIGV4cHJlc3NlZCBpbiB0 ZXJtcyBvZiBjaGVja2luZyBTR1gKPj4gYmVmb3JlIFNHWF9MQy4KPiAKPiBZZXMgeW91IGFyZSBj b3JyZWN0IGluZGVlZC4gV2hlbiBJIHdhcyB3cml0aW5nIHRoZSBjb2RlIEkgd2FzIHJlYWRpbmcg Cj4gdGhlIG9sZCBTRE0sIHdoaWNoIGhhcyBidWcgYW5kIGRvZXNuJ3QgbWVudGlvbiBTR1hfTEMg aW4gQ1BVSUQgYXMgYSAKPiBjb25kaXRpb24uIFBsZWFzZSBzZWUgbXkgcmVwbHkgdG8geW91ciBx dWVzdGlvbiB3aGV0aGVyIHRoaXMgaXMgZXJyYXR1bS4KPiAKPiBXZSBzaG91bGQgYWRkIGNwdV9o YXNfc2d4X2xjIGFzIGFkZGl0aW9uYWwgY2hlY2ssIGFuZCBJIHRoaW5rIHdlIGNhbiB1c2UgCj4g cmRtc3IgaWYgYm90aCBTR1ggYW5kIFNHWF9MQyBhcmUgcHJlc2VudCAocHJvYmFibHkgdXNpbmcg cmRtc3Jfc2FmZSBpcyAKPiBzdGlsbCBiZXR0ZXI/KS4KPiAKPj4KPj4+ICsgICAgICAgICAqLwo+ Pj4gKyAgICAgICAgc2d4di0+cmVhZGFibGUgPSByZG1zcl9zYWZlKE1TUl9JQTMyX1NHWExFUFVC S0VZSEFTSDAsIHYpID8gCj4+PiAwIDogMTsKPj4+ICsKPj4+ICsgICAgICAgIGlmICggIXNneHYt PnJlYWRhYmxlICkKPj4+ICsgICAgICAgICAgICByZXR1cm47Cj4+PiArCj4+PiArICAgICAgICBy ZG1zcl9zYWZlKE1TUl9JQTMyX1NHWExFUFVCS0VZSEFTSDAsIAo+Pj4gc2d4di0+aWEzMl9zZ3hs ZXB1YmtleWhhc2hbMF0pOwo+Pj4gKyAgICAgICAgcmRtc3Jfc2FmZShNU1JfSUEzMl9TR1hMRVBV QktFWUhBU0gxLCAKPj4+IHNneHYtPmlhMzJfc2d4bGVwdWJrZXloYXNoWzFdKTsKPj4+ICsgICAg ICAgIHJkbXNyX3NhZmUoTVNSX0lBMzJfU0dYTEVQVUJLRVlIQVNIMiwgCj4+PiBzZ3h2LT5pYTMy X3NneGxlcHVia2V5aGFzaFsyXSk7Cj4+PiArICAgICAgICByZG1zcl9zYWZlKE1TUl9JQTMyX1NH WExFUFVCS0VZSEFTSDMsIAo+Pj4gc2d4di0+aWEzMl9zZ3hsZXB1YmtleWhhc2hbM10pOwo+Pj4g KyAgICB9Cj4+PiArfQo+Pj4gKwo+Pj4gK3ZvaWQgc2d4X2N0eHRfc3dpdGNoX3RvKHN0cnVjdCB2 Y3B1ICp2KQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0IHNneF92Y3B1ICpzZ3h2ID0gdG9fc2d4X3Zj cHUodik7Cj4+PiArCj4+PiArICAgIGlmICggc2d4di0+d3JpdGFibGUgJiYgc2d4X2lhMzJfc2d4 bGVwdWJrZXloYXNoX3dyaXRhYmxlKCkgKQo+Pgo+PiBUaGlzIGNhdXNlcyBhIHJlYWQgb2YgRkVB VFVSRV9DT05UUk9MIG9uIGV2ZXJ5IGNvbnRleHQgc3dpdGNoIHBhdGgsCj4+IHdoaWNoIGlzIGlu ZWZmaWNpZW50Lgo+Pgo+PiBKdXN0IGxpa2Ugd2l0aCBDUFVJRCBwb2xpY3ksIHdlIHdpbGwgKGV2 ZW50dWFsbHkpIGhhdmUgYSBnZW5lcmljIE1TUgo+PiBwb2xpY3kgZm9yIHRoZSBndWVzdCB0byB1 c2UuICBJbiBwYXJ0aWN1bGFyLCBJIGNhbiBmb3JzZWUgYSB1c2VjYXNlCj4+IHdoZXJlIGhhcmR3 YXJlIGhhcyBMQyB1bmxvY2tlZCwgYnV0IHRoZSBob3N0IGFkbWluaXN0cmF0b3Igd2lzaGVzIExD IHRvCj4+IGJlIGxvY2tlZCBmcm9tIHRoZSBndWVzdHMgcG9pbnQgb2Ygdmlldy4KPiAKPiBXZSBj YW4gcmVtb3ZlIHNneF9pYTMyX3NneGxlcHVia2V5aGFzaF93cml0YWJsZSwgYXMgaWYgc2d4di0+ d3JpdGFibGUgaXMgCj4gdHJ1ZSwgdGhlbiBzZ3hfaWEzMl9zZ3hsZXB1YmtleWhhc2hfd3JpdGFi bGUgaXMgYWx3YXlzIHRydWUuIEkgYW0gbm90IAo+IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgbGVh dmUgZ3Vlc3QgaW4gbG9ja2VkIG1vZGUgaW4gbW9zdCBjYXNlcyBidXQgSSAKPiB0aGluayB3ZSBj YW4gYWRkICdsZXdyJyBYTCBwYXJhbWV0ZXIgdG8gZXhwbGljaXRseSBzZXQgZ3Vlc3QgdG8gdW5s b2NrZWQgCj4gbW9kZSAob3RoZXJ3aXNlIGd1ZXN0IGlzIGxvY2tlZCkuIFBsZWFzZSBzZWUgbXkg bGF0ZXN0IHJlcGx5IHRvIGRlc2lnbiAKPiBvZiBMYXVuY2ggQ29udHJvbC4KCkhpIEFuZHJldywK CkknZCBsaWtlIHRvIGFkZCBzb21ldGhpbmcgcmVnYXJkaW5nIHRvIHBlcmZvcm1hbmNlIG9wdGlt aXphdGlvbiBvZiAKdXBkYXRpbmcgdGhlIE1TUnMuIFRoZXJlIGFyZSB0d28gb3B0aW1pemF0aW9u cyB0aGF0IHdlIGNhbiBkbzoKCi0gV2UgY2FuIGFkZCBwZXJfY3B1IHZhcmlhYmxlIGZvciB0aGUg TVNScywgYW5kIGtlZXAgdGhlIHBlcl92Y3B1IAp2YXJpYWJsZSBhbHdheXMgYmVpbmcgZXF1YWwg dG8gcGh5c2ljYWwgTVNScywgdGhlbiB3ZSBvbmx5IG5lZWQgdG8gCnVwZGF0ZSB0aGUgTVNScyB3 aGVuIHRoZSB2YWx1ZSB3ZSB3YW50IHRvIHVwZGF0ZSBpcyBub3QgZXF1YWwgdG8gdGhlIAp2YWx1 ZSBvZiBwZXJfdmNwdSB2YXJpYWJsZS4gVGhpcyBjYW4gcmVkdWNlIHNvbWUgcGh5c2ljYWwgTVNS IHdyaXRlLgoKLSBUaGFua3MgdG8gY3VycmVudCBTR1ggaW1wbGVtZW50YXRpb24sIElBMzJfU0dY TEVQVUJLRVlIQVNIbiBNU1JzIGFyZSAKb25seSB1c2VkIGJ5IEVJTklULiBPbmNlIEVJTklUIGlz IGRvbmUsIEVHRVRLRVkgd29uJ3QgZGVwZW5kIG9uIApJQTMyX1NHWExFUFVCS0VZSEFTSG4uIFNv IHdlIGNhbiBhbHNvIHRyYXAgZ3Vlc3QncyBFSU5JVCwgYW5kIHVwZGF0ZSAKTVNScyBpbiBFSU5J VCBWTUVYSVQuIEhvd2V2ZXIgaWYgd2UgdHJhcCBFSU5JVCwgWGVuIG5lZWRzIHRvIHJ1biBFSU5J VCAKb24gYmVoYWxmIG9mIGd1ZXN0LCBtZWFuaW5nIFhlbiBuZWVkcyB0byByZW1hcCBndWVzdCdz IEVJTklUIHBhcmFtZXRlcnMgCih3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIHJlY29uc3RydWN0 IEVJTklUIHBhcmFtZXRlcnMgaW4gWGVuIGFzIGJvdGggClNJR1NUUlVDVCBhbmQgRUlOSVRUT0tF TiBkb24ndCBjb250YWluIGd1ZXN0J3MgdmlydHVhbCBhZGRyZXNzIAppbnRlcm5hbGx5IHRoYXQg bmVlZHMgdG8gYmUgcmVtYXBwZWQgYnkgWGVuKSwgcnVuIEVJTklULCBhbmQgZW11bGF0ZSAKRUlO SVQgcmV0dXJuIHZhbHVlIHRvIGd1ZXN0LgoKVGhlIGZpcnN0IG9wdGltaXphdGlvbiBpcyBwcmV0 dHkgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSB0aGluayB3ZSBzaG91bGQgCmRvIGl0IChhbmQgSSds bCBkbyBpbiBuZXh0IHZlcnNpb24pLiBUaGUgc2Vjb25kIG9wdGltaXphdGlvbiByZXF1aXJlcyAK dHJhcHBpbmcgRUlOSVQgZnJvbSBndWVzdCAodGh1cyBtb3JlIGNvbXBsaWNhdGVkIGltcGxlbWVu dGF0aW9uKSBidXQgY2FuIAplbGltaW5hdGUgdW5uZWNlc3NhcnkgTVNSIHVwZGF0ZXMgZHVyaW5n IGNvbnRleHQgc3dpdGNoLiBEbyB5b3UgdGhpbmsgd2UgCnNob3VsZCBkbyBib3RoIHRoZSBvcHRp bWl6YXRpb25zPwoKVGhhbmtzLAotS2FpCj4gCj4+Cj4+PiArICAgIHsKPj4+ICsgICAgICAgIHdy bXNybChNU1JfSUEzMl9TR1hMRVBVQktFWUhBU0gwLCAKPj4+IHNneHYtPmlhMzJfc2d4bGVwdWJr ZXloYXNoWzBdKTsKPj4+ICsgICAgICAgIHdybXNybChNU1JfSUEzMl9TR1hMRVBVQktFWUhBU0gx LCAKPj4+IHNneHYtPmlhMzJfc2d4bGVwdWJrZXloYXNoWzFdKTsKPj4+ICsgICAgICAgIHdybXNy bChNU1JfSUEzMl9TR1hMRVBVQktFWUhBU0gyLCAKPj4+IHNneHYtPmlhMzJfc2d4bGVwdWJrZXlo YXNoWzJdKTsKPj4+ICsgICAgICAgIHdybXNybChNU1JfSUEzMl9TR1hMRVBVQktFWUhBU0gzLCAK Pj4+IHNneHYtPmlhMzJfc2d4bGVwdWJrZXloYXNoWzNdKTsKPj4+ICsgICAgfQo+Pj4gK30KPj4+ ICsKPj4+ICtpbnQgc2d4X21zcl9yZWFkX2ludGVyY2VwdChzdHJ1Y3QgdmNwdSAqdiwgdW5zaWdu ZWQgaW50IG1zciwgdTY0IAo+Pj4gKm1zcl9jb250ZW50KQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0 IHNneF92Y3B1ICpzZ3h2ID0gdG9fc2d4X3ZjcHUodik7Cj4+PiArICAgIHU2NCBkYXRhOwo+Pj4g KyAgICBpbnQgciA9IDE7Cj4+PiArCj4+PiArICAgIGlmICggIWRvbWFpbl9oYXNfc2d4KHYtPmRv bWFpbikgKQo+Pj4gKyAgICAgICAgcmV0dXJuIDA7Cj4+PiArCj4+PiArICAgIHN3aXRjaCAoIG1z ciApCj4+PiArICAgIHsKPj4+ICsgICAgY2FzZSBNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0w6Cj4+ PiArICAgICAgICBkYXRhID0gKElBMzJfRkVBVFVSRV9DT05UUk9MX0xPQ0sgfAo+Pj4gKyAgICAg ICAgICAgICAgICBJQTMyX0ZFQVRVUkVfQ09OVFJPTF9TR1hfRU5BQkxFKTsKPj4+ICsgICAgICAg IC8qCj4+PiArICAgICAgICAgKiBJZiBwaHlzaWNhbCBJQTMyX1NHWExFUFVCS0VZSEFTSG4gYXJl IHdyaXRhYmxlLCB0aGVuIHdlIAo+Pj4gYWx3YXlzCj4+PiArICAgICAgICAgKiBhbGxvdyBndWVz dCB0byBiZSBhYmxlIHRvIGNoYW5nZSBJQTMyX1NHWExFUFVCS0VZSEFTSG4gYXQgCj4+PiBydW50 aW1lLgo+Pj4gKyAgICAgICAgICovCj4+PiArICAgICAgICBpZiAoIHNneF9pYTMyX3NneGxlcHVi a2V5aGFzaF93cml0YWJsZSgpICYmCj4+PiArICAgICAgICAgICAgICAgIGRvbWFpbl9oYXNfc2d4 X2xhdW5jaF9jb250cm9sKHYtPmRvbWFpbikgKQo+Pj4gKyAgICAgICAgICAgIGRhdGEgfD0gSUEz Ml9GRUFUVVJFX0NPTlRST0xfU0dYX0xBVU5DSF9DT05UUk9MX0VOQUJMRTsKPj4+ICsKPj4+ICsg ICAgICAgICptc3JfY29udGVudCA9IGRhdGE7Cj4+PiArCj4+PiArICAgICAgICBicmVhazsKPj4K Pj4gTmV3bGluZSBoZXJlIHBsZWFzZS4KPiAKPiBTdXJlLgo+IAo+Pgo+Pj4gKyAgICBjYXNlIE1T Ul9JQTMyX1NHWExFUFVCS0VZSEFTSDAuLi5NU1JfSUEzMl9TR1hMRVBVQktFWUhBU0gzOgo+Pgo+ PiBTcGFjZXMgYXJvdW5kIC4uLiBwbGVhc2UuICAoaXQgaXMgb25seSBiZWNhdXNlIG9mIHRoZSAj ZGVmaW5lcyB0aGF0IHRoaXMKPj4gaXNuJ3QgYSBzeW50YXggZXJyb3IpLgo+IAo+IFdpbGwgZG8u Cj4gCj4+Cj4+PiArICAgICAgICAvKgo+Pj4gKyAgICAgICAgICogU0RNIDM1LjEgTW9kZWwtU3Bl Y2lmaWMgUmVnaXN0ZXJzLCB0YWJsZSAzNS0yLgo+Pj4gKyAgICAgICAgICoKPj4+ICsgICAgICAg ICAqIElBMzJfU0dYTEVQVUJLRVlIQVNIWzAuLjNdOgo+Pj4gKyAgICAgICAgICoKPj4+ICsgICAg ICAgICAqIFJlYWQgcGVybWl0dGVkIGlmIENQVUlELjB4MTIuMDpFQVhbMF0gPSAxLgo+Pj4gKyAg ICAgICAgICoKPj4+ICsgICAgICAgICAqIEluIHJlYWxpdHksIE1TUnMgbWF5IG5vdCBiZSByZWFk YWJsZSBldmVuIFNHWCBpcyBwcmVzZW50LCAKPj4+IGluIHdoaWNoCj4+PiArICAgICAgICAgKiBj YXNlIGd1ZXN0IGlzIG5vdCBhbGxvd2VkIHRvIHJlYWQgZWl0aGVyLgo+Pj4gKyAgICAgICAgICov Cj4+PiArICAgICAgICBpZiAoICFzZ3h2LT5yZWFkYWJsZSApCj4+PiArICAgICAgICB7Cj4+PiAr ICAgICAgICAgICAgciA9IDA7Cj4+PiArICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgICB9 Cj4+PiArCj4+PiArICAgICAgICBkYXRhID0gc2d4di0+aWEzMl9zZ3hsZXB1YmtleWhhc2hbbXNy IC0gCj4+PiBNU1JfSUEzMl9TR1hMRVBVQktFWUhBU0gwXTsKPj4+ICsKPj4+ICsgICAgICAgICpt c3JfY29udGVudCA9IGRhdGE7Cj4+PiArCj4+PiArICAgICAgICBicmVhazsKPj4+ICsgICAgZGVm YXVsdDoKPj4+ICsgICAgICAgIHIgPSAwOwo+Pj4gKyAgICAgICAgYnJlYWs7Cj4+PiArICAgIH0K Pj4+ICsKPj4+ICsgICAgcmV0dXJuIHI7Cj4+PiArfQo+Pj4gKwo+Pj4gK2ludCBzZ3hfbXNyX3dy aXRlX2ludGVyY2VwdChzdHJ1Y3QgdmNwdSAqdiwgdW5zaWduZWQgaW50IG1zciwgdTY0IAo+Pj4g bXNyX2NvbnRlbnQpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3Qgc2d4X3ZjcHUgKnNneHYgPSB0b19z Z3hfdmNwdSh2KTsKPj4+ICsgICAgaW50IHIgPSAxOwo+Pj4gKwo+Pj4gKyAgICBpZiAoICFkb21h aW5faGFzX3NneCh2LT5kb21haW4pICkKPj4+ICsgICAgICAgIHJldHVybiAwOwo+Pj4gKwo+Pj4g KyAgICBzd2l0Y2ggKCBtc3IgKQo+Pj4gKyAgICB7Cj4+PiArICAgIGNhc2UgTVNSX0lBMzJfRkVB VFVSRV9DT05UUk9MOgo+Pj4gKyAgICAgICAgLyogc2xpZW50bHkgZHJvcCAqLwo+Pgo+PiBTaWxl bnRseSBkcm9wcGluZyBpcyBub3Qgb2suICBUaGlzIGNoYW5nZSBuZWVkcyByZWJhc2luZyBvdmVy IGMvcwo+PiA0NmMzYWNiMzA4IHdoZXJlIEkgaGF2ZSBmaXhlZCB1cCB0aGUgd3JpdGVhYmlsaXR5 IG9mIEZFQVRVUkVfQ09OVFJPTC4KPiAKPiBUaGFua3MuIEknbGwgdGFrZSBhIGxvb2sgYW5kIGNo YW5nZSBhY2NvcmRpbmdseS4KPiAKPj4KPj4+ICsgICAgICAgIGJyZWFrOwo+Pj4gKyAgICBjYXNl IE1TUl9JQTMyX1NHWExFUFVCS0VZSEFTSDAuLi5NU1JfSUEzMl9TR1hMRVBVQktFWUhBU0gzOgo+ Pj4gKyAgICAgICAgLyoKPj4+ICsgICAgICAgICAqIFNETSAzNS4xIE1vZGVsLVNwZWNpZmljIFJl Z2lzdGVycywgdGFibGUgMzUtMi4KPj4+ICsgICAgICAgICAqCj4+PiArICAgICAgICAgKiBJQTMy X1NHWExFUFVCS0VZSEFTSFswLi4zXToKPj4+ICsgICAgICAgICAqCj4+PiArICAgICAgICAgKiAt IElmIENQVUlELjB4Ny4wOkVDWFszMF0gPSAxLCBGRUFUVVJFX0NPTlRST0xbMTddIGlzIAo+Pj4g YXZhaWxhYmxlLgo+Pj4gKyAgICAgICAgICogLSBXcml0ZSBwZXJtaXR0ZWQgaWYgQ1BVSUQuMHgx Mi4wOkVBWFswXSA9IDEgJiYKPj4+ICsgICAgICAgICAqICAgICAgRkVBVFVSRV9DT05UUk9MWzE3 XSA9IDEgJiYgRkVBVFVSRV9DT05UUk9MWzBdID0gMS4KPj4+ICsgICAgICAgICAqCj4+PiArICAg ICAgICAgKiBzZ3h2LT53cml0YWJsZSA9PSAxIG1lYW5zIAo+Pj4gc2d4X2lhMzJfc2d4bGVwdWJr ZXloYXNoX3dyaXRhYmxlKCkgYW5kCj4+PiArICAgICAgICAgKiBkb21haW5faGFzX3NneF9sYXVu Y2hfY29udHJvbChkKSBib3RoIGFyZSB0cnVlLgo+Pj4gKyAgICAgICAgICovCj4+PiArICAgICAg ICBpZiAoICFzZ3h2LT53cml0YWJsZSApCj4+PiArICAgICAgICB7Cj4+PiArICAgICAgICAgICAg ciA9IDA7Cj4+PiArICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgICB9Cj4+PiArCj4+PiAr ICAgICAgICBzZ3h2LT5pYTMyX3NneGxlcHVia2V5aGFzaFttc3IgLSBNU1JfSUEzMl9TR1hMRVBV QktFWUhBU0gwXSA9Cj4+PiArICAgICAgICAgICAgbXNyX2NvbnRlbnQ7Cj4+PiArCj4+PiArICAg ICAgICBicmVhazsKPj4+ICsgICAgZGVmYXVsdDoKPj4+ICsgICAgICAgIHIgPSAwOwo+Pj4gKyAg ICAgICAgYnJlYWs7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgcmV0dXJuIHI7Cj4+PiArfQo+ Pj4gKwo+Pj4gICBzdGF0aWMgYm9vbF90IHNneF9lbmFibGVkX2luX2Jpb3Modm9pZCkKPj4+ICAg ewo+Pj4gICAgICAgdWludDY0X3QgdmFsLCBzZ3hfZW5hYmxlZCA9IElBMzJfRkVBVFVSRV9DT05U Uk9MX1NHWF9FTkFCTEUgfAo+Pj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vdm14L3Zt eC5jIGIveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMKPj4+IGluZGV4IDI0MzY0MzExMWQuLjdl ZTU1MTViZGMgMTAwNjQ0Cj4+PiAtLS0gYS94ZW4vYXJjaC94ODYvaHZtL3ZteC92bXguYwo+Pj4g KysrIGIveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMKPj4+IEBAIC00NzAsNiArNDcwLDggQEAg c3RhdGljIGludCB2bXhfdmNwdV9pbml0aWFsaXNlKHN0cnVjdCB2Y3B1ICp2KQo+Pj4gICAgICAg aWYgKCB2LT52Y3B1X2lkID09IDAgKQo+Pj4gICAgICAgICAgIHYtPmFyY2gudXNlcl9yZWdzLnJh eCA9IDE7Cj4+PiArICAgIHNneF92Y3B1X2luaXQodik7Cj4+PiArCj4+PiAgICAgICByZXR1cm4g MDsKPj4+ICAgfQo+Pj4gQEAgLTEwNDgsNiArMTA1MCw5IEBAIHN0YXRpYyB2b2lkIHZteF9jdHh0 X3N3aXRjaF90byhzdHJ1Y3QgdmNwdSAqdikKPj4+ICAgICAgIGlmICggdi0+ZG9tYWluLT5hcmNo Lmh2bV9kb21haW4ucGlfb3BzLnN3aXRjaF90byApCj4+PiAgICAgICAgICAgdi0+ZG9tYWluLT5h cmNoLmh2bV9kb21haW4ucGlfb3BzLnN3aXRjaF90byh2KTsKPj4+ICsKPj4+ICsgICAgaWYgKCBk b21haW5faGFzX3NneCh2LT5kb21haW4pICkKPj4+ICsgICAgICAgIHNneF9jdHh0X3N3aXRjaF90 byh2KTsKPj4+ICAgfQo+Pj4gQEAgLTI4NzYsMTAgKzI4ODEsMjAgQEAgc3RhdGljIGludCB2bXhf bXNyX3JlYWRfaW50ZXJjZXB0KHVuc2lnbmVkIAo+Pj4gaW50IG1zciwgdWludDY0X3QgKm1zcl9j b250ZW50KQo+Pj4gICAgICAgICAgIF9fdm1yZWFkKEdVRVNUX0lBMzJfREVCVUdDVEwsIG1zcl9j b250ZW50KTsKPj4+ICAgICAgICAgICBicmVhazsKPj4+ICAgICAgIGNhc2UgTVNSX0lBMzJfRkVB VFVSRV9DT05UUk9MOgo+Pj4gKyAgICAgICAgLyogSWYgbmVpdGhlciBTR1ggbm9yIG5lc3RlZCBp cyBzdXBwb3J0ZWQsIHRoaXMgTVNSIHNob3VsZCAKPj4+IG5vdCBiZQo+Pj4gKyAgICAgICAgICog dG91Y2hlZCAqLwo+Pj4gKyAgICAgICAgaWYgKCAhc2d4X21zcl9yZWFkX2ludGVyY2VwdChjdXJy ZW50LCBtc3IsIG1zcl9jb250ZW50KSAmJgo+Pj4gKyAgICAgICAgICAgICAgICAhbnZteF9tc3Jf cmVhZF9pbnRlcmNlcHQobXNyLCBtc3JfY29udGVudCkgKQo+Pj4gKyAgICAgICAgICAgIGdvdG8g Z3BfZmF1bHQ7Cj4+Cj4+IFVuZm9ydHVuYXRlbHksIHRoaXMgbG9naWMgaXMgYnJva2VuLiAgSW4g dGhlIGNhc2UgdGhhdCBib3RoIFNNWCBhbmQgVk1YCj4+IGFyZSBjb25maWd1cmVkLCB0aGUgVk1Y IGhhbmRsZXIgd2lsbCBjbG9iYmVyIHRoZSB2YWx1ZXMgc2V0IHVwIGJ5IHRoZQo+PiBTR1ggaGFu ZGxlci4gIFNlcmdleSBoYXMgYSBWTVgtcG9saWN5IHNlcmllcyAodjEgcG9zdGVkLCB2MiBpbiB0 aGUKPj4gd29ya3MpIHRvIHN0YXJ0IGFkZHJlc3Npbmcgc29tZSBvZiB0aGUgaXNzdWVzIG9uIHRo ZSBWTVggc2lkZSwgYnV0Cj4+IGZ1bmRhbWVudGFsbHksIGFsbCByZWFkcyBsaWtlIHRoaXMgbmVl ZCBzZXJ2aW5nIG91dCBvZiBhIHNpbmdsZSBwb2xpY3ksCj4+IHJhdGhlciB0aGFuIGhhdmluZyBk aWZmZXJlbnQgc3Vic3lzdGVtcyBmaWdodGluZyBmb3IgY29udHJvbCBvZiB0aGUKPj4gdmFsdWVz LiAgKFRoZSBYZW4gTVNSIGNvZGUgaXMgdGVycmlibGUgZm9yIHRoaXMgYXQgdGhlIG1vbWVudC4p Cj4gCj4gVGhhbmtzIGZvciBwb2ludGluZyBvdXQuIEkgaGF2ZSBsb2NhdGVkIHZteC1wb2xpY3kg c2VyaWVzLiBJJ2xsIGxvb2sgCj4gaW50byBpdCB0byBzZWUgaG93IHNob3VsZCBJIGNoYW5nZSB0 aGlzIGxvZ2ljLgo+IAo+Pgo+Pj4gKyAgICAgICAgYnJlYWs7Cj4+PiAgICAgICBjYXNlIE1TUl9J QTMyX1ZNWF9CQVNJQy4uLk1TUl9JQTMyX1ZNWF9WTUZVTkM6Cj4+PiAgICAgICAgICAgaWYgKCAh bnZteF9tc3JfcmVhZF9pbnRlcmNlcHQobXNyLCBtc3JfY29udGVudCkgKQo+Pj4gICAgICAgICAg ICAgICBnb3RvIGdwX2ZhdWx0Owo+Pj4gICAgICAgICAgIGJyZWFrOwo+Pj4gKyAgICBjYXNlIE1T Ul9JQTMyX1NHWExFUFVCS0VZSEFTSDAuLi5NU1JfSUEzMl9TR1hMRVBVQktFWUhBU0gzOgo+Pj4g KyAgICAgICAgaWYgKCAhc2d4X21zcl9yZWFkX2ludGVyY2VwdChjdXJyZW50LCBtc3IsIG1zcl9j b250ZW50KSApCj4+PiArICAgICAgICAgICAgZ290byBncF9mYXVsdDsKPj4+ICsgICAgICAgIGJy ZWFrOwo+Pj4gICAgICAgY2FzZSBNU1JfSUEzMl9NSVNDX0VOQUJMRToKPj4+ICAgICAgICAgICBy ZG1zcmwoTVNSX0lBMzJfTUlTQ19FTkFCTEUsICptc3JfY29udGVudCk7Cj4+PiAgICAgICAgICAg LyogRGVidWcgVHJhY2UgU3RvcmUgaXMgbm90IHN1cHBvcnRlZC4gKi8KPj4+IEBAIC0zMTE5LDEw ICszMTM0LDE5IEBAIHN0YXRpYyBpbnQgdm14X21zcl93cml0ZV9pbnRlcmNlcHQodW5zaWduZWQg Cj4+PiBpbnQgbXNyLCB1aW50NjRfdCBtc3JfY29udGVudCkKPj4+ICAgICAgICAgICBicmVhazsK Pj4+ICAgICAgIH0KPj4+ICAgICAgIGNhc2UgTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MOgo+Pj4g KyAgICAgICAgLyogU2VlIHZteF9tc3JfcmVhZF9pbnRlcmNlcHQgKi8KPj4+ICsgICAgICAgIGlm ICggIXNneF9tc3Jfd3JpdGVfaW50ZXJjZXB0KGN1cnJlbnQsIG1zciwgbXNyX2NvbnRlbnQpICYm Cj4+PiArICAgICAgICAgICAgICAgICFudm14X21zcl93cml0ZV9pbnRlcmNlcHQobXNyLCBtc3Jf Y29udGVudCkgKQo+Pgo+PiBEZWZpbml0ZWx5IG5lZWRzIGEgcmViYXNlLiAgbnZteF9tc3Jfd3Jp dGVfaW50ZXJjZXB0KCkgaGFzIGJlZW4gcmVtb3ZlZC4KPiAKPiBZZWFoLiBUaGUgY29kZSBiYXNl IG9mIHRoaXMgc2VyaWVzIGlzIGFib3V0IDMtNCB3ZWVrcyBhZ28gdW5mb3J0dW5hdGVseS4gCj4g V2lsbCBkby4KPiAKPiBUaGFua3MsCj4gLUthaQo+IAo+Pgo+PiB+QW5kcmV3Cj4+Cj4+PiArICAg ICAgICAgICAgZ290byBncF9mYXVsdDsKPj4+ICsgICAgICAgIGJyZWFrOwo+Pj4gICAgICAgY2Fz ZSBNU1JfSUEzMl9WTVhfQkFTSUMuLi5NU1JfSUEzMl9WTVhfVFJVRV9FTlRSWV9DVExTOgo+Pj4g ICAgICAgICAgIGlmICggIW52bXhfbXNyX3dyaXRlX2ludGVyY2VwdChtc3IsIG1zcl9jb250ZW50 KSApCj4+PiAgICAgICAgICAgICAgIGdvdG8gZ3BfZmF1bHQ7Cj4+PiAgICAgICAgICAgYnJlYWs7 Cj4+PiArICAgIGNhc2UgTVNSX0lBMzJfU0dYTEVQVUJLRVlIQVNIMC4uLk1TUl9JQTMyX1NHWExF UFVCS0VZSEFTSDM6Cj4+PiArICAgICAgICBpZiAoICFzZ3hfbXNyX3dyaXRlX2ludGVyY2VwdChj dXJyZW50LCBtc3IsIG1zcl9jb250ZW50KSApCj4+PiArICAgICAgICAgICAgZ290byBncF9mYXVs dDsKPj4+ICsgICAgICAgIGJyZWFrOwo+Pj4gICAgICAgY2FzZSBNU1JfUDZfUEVSRkNUUigwKS4u Lk1TUl9QNl9QRVJGQ1RSKDcpOgo+Pj4gICAgICAgY2FzZSBNU1JfUDZfRVZOVFNFTCgwKS4uLk1T Ul9QNl9FVk5UU0VMKDcpOgo+Pj4gICAgICAgY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjAu Li5NU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjI6Cj4+PiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUv YXNtLXg4Ni9jcHVmZWF0dXJlLmggCj4+PiBiL3hlbi9pbmNsdWRlL2FzbS14ODYvY3B1ZmVhdHVy ZS5oCj4+PiBpbmRleCA5NzkzZjhjMWM1Li5kZmIxN2M0YmQ4IDEwMDY0NAo+Pj4gLS0tIGEveGVu L2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmgKPj4+ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS14 ODYvY3B1ZmVhdHVyZS5oCj4+PiBAQCAtOTgsNiArOTgsOSBAQAo+Pj4gICAjZGVmaW5lIGNwdV9o YXNfc21hcCAgICAgICAgICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TTUFQKQo+Pj4gICAj ZGVmaW5lIGNwdV9oYXNfc2hhICAgICAgICAgICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9T SEEpCj4+PiArLyogQ1BVSUQgbGV2ZWwgMHgwMDAwMDAwNzowLmVjeCAqLwo+Pj4gKyNkZWZpbmUg Y3B1X2hhc19zZ3hfbGF1bmNoX2NvbnRyb2wgIAo+Pj4gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJF X1NHWF9MQVVOQ0hfQ09OVFJPTCkKPj4+ICsKPj4+ICAgLyogQ1BVSUQgbGV2ZWwgMHg4MDAwMDAw Ny5lZHggKi8KPj4+ICAgI2RlZmluZSBjcHVfaGFzX2l0c2MgICAgICAgICAgICBib290X2NwdV9o YXMoWDg2X0ZFQVRVUkVfSVRTQykKPj4+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2 L2h2bS92bXgvc2d4LmggCj4+PiBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3ZteC9zZ3guaAo+ Pj4gaW5kZXggNDBmODYwNjYyYS4uYzQ2MGY2MWU1ZSAxMDA2NDQKPj4+IC0tLSBhL3hlbi9pbmNs dWRlL2FzbS14ODYvaHZtL3ZteC9zZ3guaAo+Pj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9o dm0vdm14L3NneC5oCj4+PiBAQCAtNzUsNCArNzUsMjYgQEAgaW50IGh2bV9wb3B1bGF0ZV9lcGMo c3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgCj4+PiBsb25nIGVwY19iYXNlX3BmbiwKPj4+ICAg aW50IGh2bV9yZXNldF9lcGMoc3RydWN0IGRvbWFpbiAqZCwgYm9vbF90IGZyZWVfZXBjKTsKPj4+ ICAgdm9pZCBodm1fZGVzdHJveV9lcGMoc3RydWN0IGRvbWFpbiAqZCk7Cj4+PiArLyogUGVyLXZj cHUgU0dYIHN0cnVjdHVyZSAqLwo+Pj4gK3N0cnVjdCBzZ3hfdmNwdSB7Cj4+PiArICAgIHVpbnQ2 NF90IGlhMzJfc2d4bGVwdWJrZXloYXNoWzRdOwo+Pj4gKyAgICAvKgo+Pj4gKyAgICAgKiBBbHRo b3VnaCBTRE0gc2F5cyBpZiBTR1ggaXMgcHJlc2VudCwgdGhlbiAKPj4+IElBMzJfU0dYTEVQVUJL RVlIQVNIbiBhcmUKPj4+ICsgICAgICogYXZhaWxhYmxlIGZvciByZWFkLCBidXQgaW4gcmVhbGl0 eSBmb3IgU0tZTEFLRSBjbGllbnQgCj4+PiBtYWNoaW5lcywgdGhvc2UKPj4+ICsgICAgICogdGhv c2UgTVNScyBhcmUgbm90IGF2YWlsYWJsZSBpZiBTR1ggaXMgcHJlc2VudC4KPj4+ICsgICAgICov Cj4+PiArICAgIGJvb2xfdCByZWFkYWJsZTsKPj4+ICsgICAgYm9vbF90IHdyaXRhYmxlOwo+Pj4g K307Cj4+PiArI2RlZmluZSB0b19zZ3hfdmNwdSh2KSAgKCYodi0+YXJjaC5odm1fdm14LnNneCkp Cj4+PiArCj4+PiArYm9vbF90IHNneF9pYTMyX3NneGxlcHVia2V5aGFzaF93cml0YWJsZSh2b2lk KTsKPj4+ICtib29sX3QgZG9tYWluX2hhc19zZ3goc3RydWN0IGRvbWFpbiAqZCk7Cj4+PiArYm9v bF90IGRvbWFpbl9oYXNfc2d4X2xhdW5jaF9jb250cm9sKHN0cnVjdCBkb21haW4gKmQpOwo+Pj4g Kwo+Pj4gK3ZvaWQgc2d4X3ZjcHVfaW5pdChzdHJ1Y3QgdmNwdSAqdik7Cj4+PiArdm9pZCBzZ3hf Y3R4dF9zd2l0Y2hfdG8oc3RydWN0IHZjcHUgKnYpOwo+Pj4gK2ludCBzZ3hfbXNyX3JlYWRfaW50 ZXJjZXB0KHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBpbnQgbXNyLCB1NjQgCj4+PiAqbXNyX2Nv bnRlbnQpOwo+Pj4gK2ludCBzZ3hfbXNyX3dyaXRlX2ludGVyY2VwdChzdHJ1Y3QgdmNwdSAqdiwg dW5zaWduZWQgaW50IG1zciwgdTY0IAo+Pj4gbXNyX2NvbnRlbnQpOwo+Pj4gKwo+Pj4gICAjZW5k aWYgIC8qIF9fQVNNX1g4Nl9IVk1fVk1YX1NHWF9IX18gKi8KPj4+IGRpZmYgLS1naXQgYS94ZW4v aW5jbHVkZS9hc20teDg2L2h2bS92bXgvdm1jcy5oIAo+Pj4gYi94ZW4vaW5jbHVkZS9hc20teDg2 L2h2bS92bXgvdm1jcy5oCj4+PiBpbmRleCA2Y2ZhNWMzMzEwLi5mYzBiOWQ4NWZkIDEwMDY0NAo+ Pj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vdm14L3ZtY3MuaAo+Pj4gKysrIGIveGVu L2luY2x1ZGUvYXNtLXg4Ni9odm0vdm14L3ZtY3MuaAo+Pj4gQEAgLTE2MCw2ICsxNjAsOCBAQCBz dHJ1Y3QgYXJjaF92bXhfc3RydWN0IHsKPj4+ICAgICAgICAqIHBDUFUgYW5kIHdha2V1cCB0aGUg cmVsYXRlZCB2Q1BVLgo+Pj4gICAgICAgICovCj4+PiAgICAgICBzdHJ1Y3QgcGlfYmxvY2tpbmdf dmNwdSBwaV9ibG9ja2luZzsKPj4+ICsKPj4+ICsgICAgc3RydWN0IHNneF92Y3B1IHNneDsKPj4+ ICAgfTsKPj4+ICAgaW50IHZteF9jcmVhdGVfdm1jcyhzdHJ1Y3QgdmNwdSAqdik7Cj4+PiBkaWZm IC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9tc3ItaW5kZXguaCAKPj4+IGIveGVuL2luY2x1 ZGUvYXNtLXg4Ni9tc3ItaW5kZXguaAo+Pj4gaW5kZXggNzcxZTc1MDBhZi4uMTYyMDZhMTFiNyAx MDA2NDQKPj4+IC0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvbXNyLWluZGV4LmgKPj4+ICsrKyBi L3hlbi9pbmNsdWRlL2FzbS14ODYvbXNyLWluZGV4LmgKPj4+IEBAIC0yOTYsNiArMjk2LDEyIEBA Cj4+PiAgICNkZWZpbmUgSUEzMl9GRUFUVVJFX0NPTlRST0xfU0VOVEVSX1BBUkFNX0NUTCAgICAg ICAgIDB4N2YwMAo+Pj4gICAjZGVmaW5lIElBMzJfRkVBVFVSRV9DT05UUk9MX0VOQUJMRV9TRU5U RVIgICAgICAgICAgICAweDgwMDAKPj4+ICAgI2RlZmluZSBJQTMyX0ZFQVRVUkVfQ09OVFJPTF9T R1hfRU5BQkxFICAgICAgICAgICAgICAgMHg0MDAwMAo+Pj4gKyNkZWZpbmUgSUEzMl9GRUFUVVJF X0NPTlRST0xfU0dYX0xBVU5DSF9DT05UUk9MX0VOQUJMRSAgMHgyMDAwMAo+Pj4gKwo+Pj4gKyNk ZWZpbmUgTVNSX0lBMzJfU0dYTEVQVUJLRVlIQVNIMCAgIDB4MDAwMDAwOGMKPj4+ICsjZGVmaW5l IE1TUl9JQTMyX1NHWExFUFVCS0VZSEFTSDEgICAweDAwMDAwMDhkCj4+PiArI2RlZmluZSBNU1Jf SUEzMl9TR1hMRVBVQktFWUhBU0gyICAgMHgwMDAwMDA4ZQo+Pj4gKyNkZWZpbmUgTVNSX0lBMzJf U0dYTEVQVUJLRVlIQVNIMyAgIDB4MDAwMDAwOGYKPj4+ICAgI2RlZmluZSBNU1JfSUEzMl9UU0Nf QURKVVNUICAgICAgICAweDAwMDAwMDNiCj4+Cj4+Cj4+IF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCj4+IFhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKPj4gWGVu LWRldmVsQGxpc3RzLnhlbi5vcmcKPj4gaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo+ Pgo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4g WGVuLWRldmVsIG1haWxpbmcgbGlzdAo+IFhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCj4gaHR0cHM6 Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==