From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v8 05/35] drm/i915: MEI interface definition Date: Fri, 7 Dec 2018 15:32:09 +0100 Message-ID: <20181207143209.GF21184@phenom.ffwll.local> References: <1543315413-24302-1-git-send-email-ramalingam.c@intel.com> <1543315413-24302-6-git-send-email-ramalingam.c@intel.com> <20181206102303.GO21184@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "C, Ramalingam" Cc: dri-devel@lists.freedesktop.org, daniel.vetter@ffwll.ch, tomas.winkler@intel.com, intel-gfx@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBEZWMgMDcsIDIwMTggYXQgMDQ6MTg6MjVQTSArMDUzMCwgQywgUmFtYWxpbmdhbSB3 cm90ZToKPiAKPiBPbiAxMi83LzIwMTggMTE6MjIgQU0sIEMsIFJhbWFsaW5nYW0gd3JvdGU6Cj4g PiAKPiA+IAo+ID4gT24gMTIvNi8yMDE4IDM6NTMgUE0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4g PiA+IE9uIFR1ZSwgTm92IDI3LCAyMDE4IGF0IDA0OjEzOjAzUE0gKzA1MzAsIFJhbWFsaW5nYW0g QyB3cm90ZToKPiA+ID4gPiBEZWZpbmluZyB0aGUgbWVpLWk5MTUgaW50ZXJmYWNlIGZ1bmN0aW9u cyBhbmQgaW5pdGlhbGl6YXRpb24gb2YKPiA+ID4gPiB0aGUgaW50ZXJmYWNlLgo+ID4gPiA+IAo+ ID4gPiA+IFNpZ25lZC1vZmYtYnk6IFJhbWFsaW5nYW0gQzxyYW1hbGluZ2FtLmNAaW50ZWwuY29t Pgo+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IFRvbWFzIFdpbmtsZXI8dG9tYXMud2lua2xlckBpbnRl bC5jb20+Cj4gPiA+ID4gLS0tCj4gPiA+ID4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oICAgfCAgIDIgKwo+ID4gPiA+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2Lmgg IHwgICA3ICsKPiA+ID4gPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYyB8IDQ0 MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+ID4gPiA+ICAgaW5jbHVk ZS9kcm0vaTkxNV9jb21wb25lbnQuaCAgICAgIHwgIDcxICsrKysrKwo+ID4gPiA+ICAgNCBmaWxl cyBjaGFuZ2VkLCA1MjEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ID4gPiA+IAo+ID4g PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gPiA+IGluZGV4IGY3NjNiMzBmOThkOS4uYjY4 YmM5ODBiN2NkIDEwMDY0NAo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+ ID4gQEAgLTIwMTUsNiArMjAxNSw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPiA+ID4g PiAgIAlzdHJ1Y3QgaTkxNV9wbXUgcG11Owo+ID4gPiA+ICsJc3RydWN0IGk5MTVfaGRjcF9jb21w b25lbnRfbWFzdGVyICpoZGNwX2NvbXA7Cj4gPiA+ID4gKwo+ID4gPiA+ICAgCS8qCj4gPiA+ID4g ICAJICogTk9URTogVGhpcyBpcyB0aGUgZHJpMS91bXMgZHVuZ2VvbiwgZG9uJ3QgYWRkIHN0dWZm IGhlcmUuIFlvdXIgcGF0Y2gKPiA+ID4gPiAgIAkgKiB3aWxsIGJlIHJlamVjdGVkLiBJbnN0ZWFk IGxvb2sgZm9yIGEgYmV0dGVyIHBsYWNlLgo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o Cj4gPiA+ID4gaW5kZXggODVhNTI2NTk4MDk2Li5iZGU4MmYzYWRhODUgMTAwNjQ0Cj4gPiA+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+ID4gPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gPiA+IEBAIC0yOSw2ICsyOSw3IEBACj4g PiA+ID4gICAjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4gPiA+ID4gICAjaW5jbHVkZSA8bGludXgv aGRtaS5oPgo+ID4gPiA+ICAgI2luY2x1ZGUgPGxpbnV4L3NjaGVkL2Nsb2NrLmg+Cj4gPiA+ID4g KyNpbmNsdWRlIDxsaW51eC9tZWlfaGRjcC5oPgo+ID4gPiA+ICAgI2luY2x1ZGUgPGRybS9pOTE1 X2RybS5oPgo+ID4gPiA+ICAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gPiA+ID4gICAjaW5jbHVk ZSA8ZHJtL2RybV9jcnRjLmg+Cj4gPiA+ID4gQEAgLTM3OSw2ICszODAsOSBAQCBzdHJ1Y3QgaW50 ZWxfaGRjcF9zaGltIHsKPiA+ID4gPiAgIAkvKiBEZXRlY3RzIHBhbmVsJ3MgaGRjcCBjYXBhYmls aXR5LiBUaGlzIGlzIG9wdGlvbmFsIGZvciBIRE1JLiAqLwo+ID4gPiA+ICAgCWludCAoKmhkY3Bf Y2FwYWJsZSkoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCj4gPiA+ ID4gICAJCQkgICAgYm9vbCAqaGRjcF9jYXBhYmxlKTsKPiA+ID4gPiArCj4gPiA+ID4gKwkvKiBE ZXRlY3RzIHRoZSBIRENQIHByb3RvY29sKERQL0hETUkpIHJlcXVpcmVkIG9uIHRoZSBwb3J0ICov Cj4gPiA+ID4gKwllbnVtIG1laV9oZGNwX3dpcmVkX3Byb3RvY29sICgqaGRjcF9wcm90b2NvbCko dm9pZCk7Cj4gPiA+IExvb2tpbmcgYWhlYWQsIHRoaXMgc2VlbXMgaGFyZHdpcmVkIHRvIGNvbnN0 YW50IHJldHVybiB2YWx1ZT8gT3Igd2h5IGRvIHdlCj4gPiA+IG5lZWQgYSBmdW5jdGlvbiBoZXJl Pwo+ID4gVGhpcyBpcyBoYXJkd2lyZWQgYmFzZWQgb24gdGhlIGNvbm5lY3RvciB0eXBlKERQL0hE TUkpLgo+ID4gU2luY2Ugd2UgaGF2ZSB0aGUgc2hpbSBmb3IgaGRjcCdzIGNvbm5lY3RvciBiYXNl ZCB3b3JrLCBJIGhhdmUgYWRkZWQgdGhpcyBmdW5jdGlvbi4KPiA+IAo+ID4gQ291bGQgaGF2ZSBk b25lIHRoaXMganVzdCB3aXRoIGNvbm5lY3Rvcl90eXBlIGNoZWNrLCBidXQgaW4gdGhhdCB3YXkg d2hvbGUgaGRjcF9zaGltCj4gPiBjYW4gYmUgZG9uZSBpbiB0aGF0IHdheS4gU28gZ29pbmcgd2l0 aCB0aGUgbGFyZ2VyIGRlc2lnbiBoZXJlLgo+ID4gPiA+ICAgfTsKPiA+ID4gPiAgIHN0cnVjdCBp bnRlbF9oZGNwIHsKPiA+ID4gPiBAQCAtMzk5LDYgKzQwMyw5IEBAIHN0cnVjdCBpbnRlbF9oZGNw IHsKPiA+ID4gPiAgIAkgKiBjb250ZW50IGNhbiBmbG93IG9ubHkgdGhyb3VnaCBhIGxpbmsgcHJv dGVjdGVkIGJ5IEhEQ1AyLjIuCj4gPiA+ID4gICAJICovCj4gPiA+ID4gICAJdTggY29udGVudF90 eXBlOwo+ID4gPiA+ICsKPiA+ID4gPiArCS8qIG1laSBpbnRlcmZhY2UgcmVsYXRlZCBpbmZvcm1h dGlvbiAqLwo+ID4gPiA+ICsJc3RydWN0IG1laV9oZGNwX2RhdGEgbWVpX2RhdGE7Cj4gPiA+ID4g ICB9Owo+ID4gPiA+ICAgc3RydWN0IGludGVsX2Nvbm5lY3RvciB7Cj4gPiA+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2hkY3AuYwo+ID4gPiA+IGluZGV4IDk5ZGRkYjU0MDk1OC4uNzYwNzgwZjExMDVj IDEwMDY0NAo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYwo+ ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYwo+ID4gPiA+IEBA IC04LDE0ICs4LDIwIEBACj4gPiA+ID4gICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ID4gPiAg ICNpbmNsdWRlIDxkcm0vZHJtX2hkY3AuaD4KPiA+ID4gPiArI2luY2x1ZGUgPGRybS9pOTE1X2Nv bXBvbmVudC5oPgo+ID4gPiA+ICAgI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ID4gPiA+ICAgI2lu Y2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvY29tcG9uZW50 Lmg+Cj4gPiA+ID4gICAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gPiA+ID4gICAjaW5jbHVkZSAi aTkxNV9yZWcuaCIKPiA+ID4gPiAgICNkZWZpbmUgS0VZX0xPQURfVFJJRVMJNQo+ID4gPiA+ICAg I2RlZmluZSBUSU1FX0ZPUl9FTkNSWVBUX1NUQVRVU19DSEFOR0UJNTAKPiA+ID4gPiArI2RlZmlu ZSBHRVRfTUVJX0RESV9JTkRFWChwKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4g PiA+ID4gKwl0eXBlb2YocCkgX19wID0gKHApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gPiA+ID4gKwlfX3AgPT0gUE9SVF9BID8gTUVJX0RESV9BIDogKGVudW0gbWVpX2hkY3Bf ZGRpKV9fcDtcCj4gPiA+ID4gK30pCj4gPiA+ID4gICBzdGF0aWMKPiA+ID4gPiAgIGJvb2wgaW50 ZWxfaGRjcF9pc19rc3ZfdmFsaWQodTggKmtzdikKPiA+ID4gPiBAQCAtODMzLDYgKzgzOSw0MTcg QEAgYm9vbCBpc19oZGNwX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIGVudW0gcG9ydCBwb3J0KQo+ID4gPiA+ICAgCQkhSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikg JiYgcG9ydCA8IFBPUlRfRSk7Cj4gPiA+ID4gICB9Cj4gPiA+ID4gK3N0YXRpYyBfX2F0dHJpYnV0 ZV9fKCh1bnVzZWQpKSBpbnQKPiA+ID4gPiAraGRjcDJfcHJlcGFyZV9ha2VfaW5pdChzdHJ1Y3Qg aW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiA+ID4gKwkJICAgICAgIHN0cnVjdCBoZGNw Ml9ha2VfaW5pdCAqYWtlX2RhdGEpCj4gPiA+ID4gK3sKPiA+ID4gPiArCXN0cnVjdCBtZWlfaGRj cF9kYXRhICpkYXRhID0gJmNvbm5lY3Rvci0+aGRjcC5tZWlfZGF0YTsKPiA+ID4gPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNlLmRl dik7Cj4gPiA+ID4gKwlzdHJ1Y3QgaTkxNV9oZGNwX2NvbXBvbmVudF9tYXN0ZXIgKmNvbXAgPSBk ZXZfcHJpdi0+aGRjcF9jb21wOwo+ID4gPiA+ICsJaW50IHJldDsKPiA+ID4gPiArCj4gPiA+ID4g KwlpZiAoIWNvbXApCj4gPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gKwo+ID4gPiA+ ICsJbXV0ZXhfbG9jaygmY29tcC0+bXV0ZXgpOwo+ID4gPiA+ICsJaWYgKCFjb21wLT5vcHMgfHwg IWNvbXAtPmRldikgewo+ID4gPiA+ICsJCW11dGV4X3VubG9jaygmY29tcC0+bXV0ZXgpOwo+ID4g PiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiA+ICsJfQo+ID4gPiA+ICsKPiA+ID4gPiArCWlm IChkYXRhLT5wb3J0ID09IE1FSV9ERElfSU5WQUxJRF9QT1JUICYmIGNvbm5lY3Rvci0+ZW5jb2Rl cikKPiA+ID4gPiArCQlkYXRhLT5wb3J0ID0gR0VUX01FSV9ERElfSU5ERVgoY29ubmVjdG9yLT5l bmNvZGVyLT5wb3J0KTsKPiA+ID4gPiArCj4gPiA+ID4gKwkvKiBDbGVhciBNRSBGVyBpbnN0YW5j ZSBmb3IgdGhlIHBvcnQsIGp1c3QgaW5jYXNlICovCj4gPiA+ID4gKwljb21wLT5vcHMtPmNsb3Nl X2hkY3Bfc2Vzc2lvbihjb21wLT5kZXYsIGRhdGEpOwo+ID4gPiBTb3VuZHMgbGlrZSBhIGJ1ZyBz b21ld2hlcmUgaWYgd2UgbmVlZCB0aGlzPyBJJ2QgcHV0IHRoaXMgY29kZSBpbnRvIHRoZQo+ID4g PiAtPmluaXRpYXRlX2hkY3AyX3Nlc3Npb24sIHdpdGggYSBiaWcgV0FSTl9PTiBpZiBpdCdzIGFj dHVhbGx5IG5lZWRlZC4KPiA+IE5vdCByZWFsbHkuIExldHMgc2F5IHlvdSBoYXZlIHByb2dyZXNz ZWQgYmV5b25kIHRoZSBmaXJzdCBzdGVwIG9mIEhEQ1AyLjIgYXV0aCBhbG9uZyB3aXRoIE1FIEZX Lgo+ID4gTm93IGlmIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCBkdWUgdG8gc29tZSByZWFzb24sIHRo ZW4gdGhlIEhEQ1AyLjIgc2Vhc29uIGNyZWF0ZWQgd2l0aAo+ID4gTUUgRlcgZm9yIHRoYXQgcG9y dCBpcyBub3QgY2xvc2VkIHlldC4KPiA+IAo+ID4gU28gd2UgbmVlZCB0byBjYWxsIGNsb3NlX2hk Y3Bfc2Vzc2lvbigpIGV4cGxpY2l0bHkgb24gYXV0aGVudGljYXRpb24gZmFpbHVyZXMuCj4gPiBT ZXNzaW9uIGhhcyB0byBiZSBjbG9zZWQgYmVmb3JlIHJlc3RhcnRpbmcgdGhlIGF1dGggb24gdGhh dCBwb3J0IHdpdGggaW5pdGlhbGl0ZV9oZGNwX3Nlc3Npb24uCj4gPiBJZiB3ZSBhcmUgY2xvc2lu ZyB0aGUgaGRjcCBzZXNzaW9uIG9mIHRoZSBwb3J0IG9uIGFsbCBhdXRoIGVycm9ycywgd2UgZG9u dCBuZWVkIHRoaXMganVzdCBiZWZvcmUKPiA+IHN0YXJ0IG9mIHRoZSBoZGNwIHNlc3Npb24uCj4g PiA+ICJKdXN0IGluIGNhc2UiIHBhcGVyaW5nIG92ZXIgcHJvZ3JhbW1pbmcgYnVncyBvZiBvdXIg b3duIGp1c3QgbWFrZXMKPiA+ID4gZGVidWdnaW5nIGhhcmRlci4KPiA+ID4gCj4gPiA+ID4gKwo+ ID4gPiA+ICsJcmV0ID0gY29tcC0+b3BzLT5pbml0aWF0ZV9oZGNwMl9zZXNzaW9uKGNvbXAtPmRl diwKPiA+ID4gPiArCQkJCQkJZGF0YSwgYWtlX2RhdGEpOwo+ID4gPiBXZSBzaG91bGQgc2V0IHRo ZSBwb3J0IG9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemluZyB0aGlzLgo+ID4gaGRj cDJfc2Vzc2lvbiBpcyBjcmVhdGVkIGZvciBlYWNoIHBvcnQgYXQgTUUgRlcuIEhlbmNlIHdlIG5l ZWQgdGhlIHBvcnQKPiA+IGluaXRpYWxpemVkIGV2ZW4gYmVmb3JlIGNhbGxpbmcgdGhlIGluaXRp YXRlX2hkY3AyX3Nlc3Npb24uCj4gPiA+ID4gKwltdXRleF91bmxvY2soJmNvbXAtPm11dGV4KTsK PiA+ID4gPiArCj4gPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4g PiA+ICtzdGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaW50Cj4gPiA+ID4gK2hkY3AyX3Zl cmlmeV9yeF9jZXJ0X3ByZXBhcmVfa20oc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9y LAo+ID4gPiA+ICsJCQkJc3RydWN0IGhkY3AyX2FrZV9zZW5kX2NlcnQgKnJ4X2NlcnQsCj4gPiA+ ID4gKwkJCQlib29sICpwYWlyZWQsCj4gPiA+ID4gKwkJCQlzdHJ1Y3QgaGRjcDJfYWtlX25vX3N0 b3JlZF9rbSAqZWtfcHViX2ttLAo+ID4gPiA+ICsJCQkJc2l6ZV90ICptc2dfc3opCj4gPiA+ID4g K3sKPiA+ID4gPiArCXN0cnVjdCBtZWlfaGRjcF9kYXRhICpkYXRhID0gJmNvbm5lY3Rvci0+aGRj cC5tZWlfZGF0YTsKPiA+ID4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNlLmRldik7Cj4gPiA+ID4gKwlzdHJ1Y3QgaTkxNV9oZGNw X2NvbXBvbmVudF9tYXN0ZXIgKmNvbXAgPSBkZXZfcHJpdi0+aGRjcF9jb21wOwo+ID4gPiA+ICsJ aW50IHJldDsKPiA+ID4gPiArCj4gPiA+ID4gKwlpZiAoIWNvbXApCj4gPiA+ID4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJbXV0ZXhfbG9jaygmY29tcC0+bXV0ZXgpOwo+ ID4gPiA+ICsJaWYgKCFjb21wLT5vcHMgfHwgIWNvbXAtPmRldiB8fCBkYXRhLT5wb3J0ID09IE1F SV9ERElfSU5WQUxJRF9QT1JUKSB7Cj4gPiA+IFRoZXNlIGFsbCBsb29rIGxpa2UgcHJvZ3JhbW1p bmcgbWlzdGFrZXMgdGhhdCBzaG91bGQgcmVzdWx0IGluIGEgV0FSTl9PTi4KPiA+IFdlIGFyZSB1 c2luZyB0aGUgY29tcC0+bXV0ZXggZm9yIHByb3RlY3RpbmcgdGhlIGludGVyZmFjZSBkdXJpbmcg dGhlIGludGVyZmFjZQo+ID4gaW5pdCwgdXNhZ2UgZm9yIG1laSBjb21tdW5pY2F0aW9uIGFuZCBp bnRlcmZhY2UgdGVhcmRvd24uCj4gPiAKPiA+IEJ1dCB3aGF0IGlmIG1laSBpbnRlcmZhY2UgdGVh cmRvd24gaGFwcGVucyBiZXR3ZWVuIG1laSBjb21tdW5pY2F0aW9ucz8KPiA+IFNvIHdoZW4gd2Ug dHJ5IHRvIGFjY2VzcyB0aGUgbWVpIGludGVyZmFjZSBhZnRlciBzdWNoIHBvc3NpYmxlIHRlYXIg ZG93biBzY2VuYXJpbywKPiA+IHdlIGFyZSBjaGVja2luZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBp bnRlcmZhY2UuCj4gPiAKPiA+IFBvc3NpYmxlIGFsdGVybmF0ZSBzb2x1dGlvbiBpcyBob2xkIHRo ZSBjb21wLT5tdXRleCBhY3Jvc3MgdGhlIGF1dGhlbnRpY2F0aW9uIHN0ZXBzLgo+ID4gQnV0IGNv bnNlcXVlbmNlIGlzIHRoYXQgbWVpIG1vZHVsZSByZW1vdmFsIHdpbGwgYmUgYmxvY2tlZCBmb3Ig YXV0aGVudGljYXRpb24gZHVyYXRpb24KPiA+IGFuZCBldmVuIGlmIHRoZSBtZWlfZGV2IGlzIHJl bW92ZWQsIGNvbXBvbmVudCB1bmJpbmQgd2lsbCBiZSBibG9ja2VkIGR1ZSB0byB0aGlzIG11dGV4 IGRlcGVuZGVuY3kuCj4gPiA+ID4gKwkJbXV0ZXhfdW5sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJcmV0 ID0gY29tcC0+b3BzLT52ZXJpZnlfcmVjZWl2ZXJfY2VydF9wcmVwYXJlX2ttKGNvbXAtPmRldiwg ZGF0YSwKPiA+ID4gPiArCQkJCQkJCSByeF9jZXJ0LCBwYWlyZWQsCj4gPiA+ID4gKwkJCQkJCQkg ZWtfcHViX2ttLCBtc2dfc3opOwo+ID4gPiA+ICsJaWYgKHJldCA8IDApCj4gPiA+ID4gKwkJY29t cC0+b3BzLT5jbG9zZV9oZGNwX3Nlc3Npb24oY29tcC0+ZGV2LCBkYXRhKTsKPiA+ID4gRXJyb3Ig aGFuZGxpbmcgaGVyZSBzZWVtcyBhIGJpdCBzdHJhbmdlLiBZb3UgY2xvc2UgdGhlIHNlc3Npb24s IGJ1dCBkb24ndAo+ID4gPiByZXNldCB0aGUgcG9ydC4gU28gbmV4dCBvcCB3aWxsIGJlIHRvdGFs bHkgdW5hd2FyZSB0aGF0IHRoaW5ncyBoYXZlIGJsb3duCj4gPiA+IHVwLiBBbHNvIG5vIHdhcm5p bmcuCj4gPiA+IAo+ID4gPiBJZiB3ZSB3YW50IHRvIGNsb3NlIHRoZSBzZXNzaW9uLCB0aGVuIEkg dGhpbmsgdGhhdCBzaG91bGQgYmUgYSBkZWNpc2lvbgo+ID4gPiBtYWRlIGhpZ2hlciB1cC4KPiA+ IFRoaXMgaXMgbmVlZGVkIGFzIGV4cGxhaW5lZCBhYm92ZS4gQnV0IGFzIHlvdSBoYXZlIG1lbnRp b25lZCB0aGlzIGNhbiBiZSBtb3ZlZAo+ID4gdG8gdGhlIGVuZCBvZiB0aGUgYXV0aGVudGljYXRp b24gb24gZXJyb3Igc2NlbmFyaW8uIEkgd2lsbCB3b3JrIG9uIHRoYXQuCj4gPiA+ID4gKwltdXRl eF91bmxvY2soJmNvbXAtPm11dGV4KTsKPiA+ID4gV2l0aCBjb21wb25lbnQgZG8gd2Ugc3RpbGwg bmVlZCB0aGlzIG11dGV4IHN0dWZmIGhlcmU/Cj4gPiA+IAo+ID4gPiBFeGFjdCBzYW1lIGNvbW1l bnRzIGV2ZXJ5d2hlcmUgYmVsb3cuCj4gPiA+IAo+ID4gPiA+ICsKPiA+ID4gPiArCXJldHVybiBy ZXQ7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKCh1 bnVzZWQpKSBpbnQKPiA+ID4gPiAraGRjcDJfdmVyaWZ5X2hwcmltZShzdHJ1Y3QgaW50ZWxfY29u bmVjdG9yICpjb25uZWN0b3IsCj4gPiA+ID4gKwkJICAgIHN0cnVjdCBoZGNwMl9ha2Vfc2VuZF9o cHJpbWUgKnJ4X2hwcmltZSkKPiA+ID4gPiArewo+ID4gPiA+ICsJc3RydWN0IG1laV9oZGNwX2Rh dGEgKmRhdGEgPSAmY29ubmVjdG9yLT5oZGNwLm1laV9kYXRhOwo+ID4gPiA+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsK PiA+ID4gPiArCXN0cnVjdCBpOTE1X2hkY3BfY29tcG9uZW50X21hc3RlciAqY29tcCA9IGRldl9w cml2LT5oZGNwX2NvbXA7Cj4gPiA+ID4gKwlpbnQgcmV0Owo+ID4gPiA+ICsKPiA+ID4gPiArCWlm ICghY29tcCkKPiA+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiArCj4gPiA+ID4gKwlt dXRleF9sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ID4gKwlpZiAoIWNvbXAtPm9wcyB8fCAhY29t cC0+ZGV2IHx8IGRhdGEtPnBvcnQgPT0gTUVJX0RESV9JTlZBTElEX1BPUlQpIHsKPiA+ID4gPiAr CQltdXRleF91bmxvY2soJmNvbXAtPm11dGV4KTsKPiA+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsK PiA+ID4gPiArCX0KPiA+ID4gPiArCj4gPiA+ID4gKwlyZXQgPSBjb21wLT5vcHMtPnZlcmlmeV9o cHJpbWUoY29tcC0+ZGV2LCBkYXRhLCByeF9ocHJpbWUpOwo+ID4gPiA+ICsJaWYgKHJldCA8IDAp Cj4gPiA+ID4gKwkJY29tcC0+b3BzLT5jbG9zZV9oZGNwX3Nlc3Npb24oY29tcC0+ZGV2LCBkYXRh KTsKPiA+ID4gPiArCW11dGV4X3VubG9jaygmY29tcC0+bXV0ZXgpOwo+ID4gPiA+ICsKPiA+ID4g PiArCXJldHVybiByZXQ7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBfX2F0 dHJpYnV0ZV9fKCh1bnVzZWQpKSBpbnQKPiA+ID4gPiAraGRjcDJfc3RvcmVfcGFpcmluZ19pbmZv KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ID4gPiArCQkJIHN0cnVjdCBo ZGNwMl9ha2Vfc2VuZF9wYWlyaW5nX2luZm8gKnBhaXJpbmdfaW5mbykKPiA+ID4gPiArewo+ID4g PiA+ICsJc3RydWN0IG1laV9oZGNwX2RhdGEgKmRhdGEgPSAmY29ubmVjdG9yLT5oZGNwLm1laV9k YXRhOwo+ID4gPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShjb25uZWN0b3ItPmJhc2UuZGV2KTsKPiA+ID4gPiArCXN0cnVjdCBpOTE1X2hkY3BfY29tcG9u ZW50X21hc3RlciAqY29tcCA9IGRldl9wcml2LT5oZGNwX2NvbXA7Cj4gPiA+ID4gKwlpbnQgcmV0 Owo+ID4gPiA+ICsKPiA+ID4gPiArCWlmICghY29tcCkKPiA+ID4gPiArCQlyZXR1cm4gLUVJTlZB TDsKPiA+ID4gPiArCj4gPiA+ID4gKwltdXRleF9sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ID4g KwlpZiAoIWNvbXAtPm9wcyB8fCAhY29tcC0+ZGV2IHx8IGRhdGEtPnBvcnQgPT0gTUVJX0RESV9J TlZBTElEX1BPUlQpIHsKPiA+ID4gPiArCQltdXRleF91bmxvY2soJmNvbXAtPm11dGV4KTsKPiA+ ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiArCX0KPiA+ID4gPiArCj4gPiA+ID4gKwly ZXQgPSBjb21wLT5vcHMtPnN0b3JlX3BhaXJpbmdfaW5mbyhjb21wLT5kZXYsCj4gPiA+ID4gKwkJ CQkJICAgIGRhdGEsIHBhaXJpbmdfaW5mbyk7Cj4gPiA+ID4gKwlpZiAocmV0IDwgMCkKPiA+ID4g PiArCQljb21wLT5vcHMtPmNsb3NlX2hkY3Bfc2Vzc2lvbihjb21wLT5kZXYsIGRhdGEpOwo+ID4g PiA+ICsJbXV0ZXhfdW5sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJcmV0 dXJuIHJldDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIF9fYXR0cmlidXRl X18oKHVudXNlZCkpIGludAo+ID4gPiA+ICtoZGNwMl9wcmVwYXJlX2xjX2luaXQoc3RydWN0IGlu dGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gPiA+ICsJCSAgICAgIHN0cnVjdCBoZGNwMl9s Y19pbml0ICpsY19pbml0KQo+ID4gPiA+ICt7Cj4gPiA+ID4gKwlzdHJ1Y3QgbWVpX2hkY3BfZGF0 YSAqZGF0YSA9ICZjb25uZWN0b3ItPmhkY3AubWVpX2RhdGE7Cj4gPiA+ID4gKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNvbm5lY3Rvci0+YmFzZS5kZXYpOwo+ ID4gPiA+ICsJc3RydWN0IGk5MTVfaGRjcF9jb21wb25lbnRfbWFzdGVyICpjb21wID0gZGV2X3By aXYtPmhkY3BfY29tcDsKPiA+ID4gPiArCWludCByZXQ7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJaWYg KCFjb21wKQo+ID4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiA+ICsKPiA+ID4gPiArCW11 dGV4X2xvY2soJmNvbXAtPm11dGV4KTsKPiA+ID4gPiArCWlmICghY29tcC0+b3BzIHx8ICFjb21w LT5kZXYgfHwgZGF0YS0+cG9ydCA9PSBNRUlfRERJX0lOVkFMSURfUE9SVCkgewo+ID4gPiA+ICsJ CW11dGV4X3VubG9jaygmY29tcC0+bXV0ZXgpOwo+ID4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ ID4gPiA+ICsJfQo+ID4gPiA+ICsKPiA+ID4gPiArCXJldCA9IGNvbXAtPm9wcy0+aW5pdGlhdGVf bG9jYWxpdHlfY2hlY2soY29tcC0+ZGV2LAo+ID4gPiA+ICsJCQkJCQkgZGF0YSwgbGNfaW5pdCk7 Cj4gPiA+ID4gKwlpZiAocmV0IDwgMCkKPiA+ID4gPiArCQljb21wLT5vcHMtPmNsb3NlX2hkY3Bf c2Vzc2lvbihjb21wLT5kZXYsIGRhdGEpOwo+ID4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZjb21wLT5t dXRleCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJcmV0dXJuIHJldDsKPiA+ID4gPiArfQo+ID4gPiA+ ICsKPiA+ID4gPiArc3RhdGljIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGludAo+ID4gPiA+ICto ZGNwMl92ZXJpZnlfbHByaW1lKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ ID4gPiArCQkgICAgc3RydWN0IGhkY3AyX2xjX3NlbmRfbHByaW1lICpyeF9scHJpbWUpCj4gPiA+ ID4gK3sKPiA+ID4gPiArCXN0cnVjdCBtZWlfaGRjcF9kYXRhICpkYXRhID0gJmNvbm5lY3Rvci0+ aGRjcC5tZWlfZGF0YTsKPiA+ID4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNlLmRldik7Cj4gPiA+ID4gKwlzdHJ1Y3QgaTkxNV9o ZGNwX2NvbXBvbmVudF9tYXN0ZXIgKmNvbXAgPSBkZXZfcHJpdi0+aGRjcF9jb21wOwo+ID4gPiA+ ICsJaW50IHJldDsKPiA+ID4gPiArCj4gPiA+ID4gKwlpZiAoIWNvbXApCj4gPiA+ID4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJbXV0ZXhfbG9jaygmY29tcC0+bXV0ZXgp Owo+ID4gPiA+ICsJaWYgKCFjb21wLT5vcHMgfHwgIWNvbXAtPmRldiB8fCBkYXRhLT5wb3J0ID09 IE1FSV9ERElfSU5WQUxJRF9QT1JUKSB7Cj4gPiA+ID4gKwkJbXV0ZXhfdW5sb2NrKCZjb21wLT5t dXRleCk7Cj4gPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ ID4gPiA+ICsJcmV0ID0gY29tcC0+b3BzLT52ZXJpZnlfbHByaW1lKGNvbXAtPmRldiwgZGF0YSwg cnhfbHByaW1lKTsKPiA+ID4gPiArCWlmIChyZXQgPCAwKQo+ID4gPiA+ICsJCWNvbXAtPm9wcy0+ Y2xvc2VfaGRjcF9zZXNzaW9uKGNvbXAtPmRldiwgZGF0YSk7Cj4gPiA+ID4gKwltdXRleF91bmxv Y2soJmNvbXAtPm11dGV4KTsKPiA+ID4gPiArCj4gPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiA+ ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKPiA+ ID4gPiAraW50IGhkY3AyX3ByZXBhcmVfc2tleShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25u ZWN0b3IsCj4gPiA+ID4gKwkJICAgICAgIHN0cnVjdCBoZGNwMl9za2Vfc2VuZF9la3MgKnNrZV9k YXRhKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKwlzdHJ1Y3QgbWVpX2hkY3BfZGF0YSAqZGF0YSA9ICZj b25uZWN0b3ItPmhkY3AubWVpX2RhdGE7Cj4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNvbm5lY3Rvci0+YmFzZS5kZXYpOwo+ID4gPiA+ICsJc3Ry dWN0IGk5MTVfaGRjcF9jb21wb25lbnRfbWFzdGVyICpjb21wID0gZGV2X3ByaXYtPmhkY3BfY29t cDsKPiA+ID4gPiArCWludCByZXQ7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJaWYgKCFjb21wKQo+ID4g PiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiA+ICsKPiA+ID4gPiArCW11dGV4X2xvY2soJmNv bXAtPm11dGV4KTsKPiA+ID4gPiArCWlmICghY29tcC0+b3BzIHx8ICFjb21wLT5kZXYgfHwgZGF0 YS0+cG9ydCA9PSBNRUlfRERJX0lOVkFMSURfUE9SVCkgewo+ID4gPiA+ICsJCW11dGV4X3VubG9j aygmY29tcC0+bXV0ZXgpOwo+ID4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiA+ICsJfQo+ ID4gPiA+ICsKPiA+ID4gPiArCXJldCA9IGNvbXAtPm9wcy0+Z2V0X3Nlc3Npb25fa2V5KGNvbXAt PmRldiwgZGF0YSwgc2tlX2RhdGEpOwo+ID4gPiA+ICsJaWYgKHJldCA8IDApCj4gPiA+ID4gKwkJ Y29tcC0+b3BzLT5jbG9zZV9oZGNwX3Nlc3Npb24oY29tcC0+ZGV2LCBkYXRhKTsKPiA+ID4gPiAr CW11dGV4X3VubG9jaygmY29tcC0+bXV0ZXgpOwo+ID4gPiA+ICsKPiA+ID4gPiArCXJldHVybiBy ZXQ7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKCh1 bnVzZWQpKSBpbnQKPiA+ID4gPiAraGRjcDJfdmVyaWZ5X3JlcF90b3BvbG9neV9wcmVwYXJlX2Fj ayhzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiA+ID4gKwkJCQkgICAgICBz dHJ1Y3QgaGRjcDJfcmVwX3NlbmRfcmVjZWl2ZXJpZF9saXN0Cj4gPiA+ID4gKwkJCQkJCQkJKnJl cF90b3BvbG9neSwKPiA+ID4gPiArCQkJCSAgICAgIHN0cnVjdCBoZGNwMl9yZXBfc2VuZF9hY2sg KnJlcF9zZW5kX2FjaykKPiA+ID4gPiArewo+ID4gPiA+ICsJc3RydWN0IG1laV9oZGNwX2RhdGEg KmRhdGEgPSAmY29ubmVjdG9yLT5oZGNwLm1laV9kYXRhOwo+ID4gPiA+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsKPiA+ ID4gPiArCXN0cnVjdCBpOTE1X2hkY3BfY29tcG9uZW50X21hc3RlciAqY29tcCA9IGRldl9wcml2 LT5oZGNwX2NvbXA7Cj4gPiA+ID4gKwlpbnQgcmV0Owo+ID4gPiA+ICsKPiA+ID4gPiArCWlmICgh Y29tcCkKPiA+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiArCj4gPiA+ID4gKwltdXRl eF9sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ID4gKwlpZiAoIWNvbXAtPm9wcyB8fCAhY29tcC0+ ZGV2IHx8IGRhdGEtPnBvcnQgPT0gTUVJX0RESV9JTlZBTElEX1BPUlQpIHsKPiA+ID4gPiArCQlt dXRleF91bmxvY2soJmNvbXAtPm11dGV4KTsKPiA+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ ID4gPiArCX0KPiA+ID4gPiArCj4gPiA+ID4gKwlyZXQgPSBjb21wLT5vcHMtPnJlcGVhdGVyX2No ZWNrX2Zsb3dfcHJlcGFyZV9hY2soY29tcC0+ZGV2LAo+ID4gPiA+ICsJCQkJCQkJIGRhdGEsIHJl cF90b3BvbG9neSwKPiA+ID4gPiArCQkJCQkJCSByZXBfc2VuZF9hY2spOwo+ID4gPiA+ICsJaWYg KHJldCA8IDApCj4gPiA+ID4gKwkJY29tcC0+b3BzLT5jbG9zZV9oZGNwX3Nlc3Npb24oY29tcC0+ ZGV2LCBkYXRhKTsKPiA+ID4gPiArCW11dGV4X3VubG9jaygmY29tcC0+bXV0ZXgpOwo+ID4gPiA+ ICsKPiA+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0 YXRpYyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBpbnQKPiA+ID4gPiAraGRjcDJfdmVyaWZ5X21w cmltZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiA+ID4gKwkJICAgIHN0 cnVjdCBoZGNwMl9yZXBfc3RyZWFtX3JlYWR5ICpzdHJlYW1fcmVhZHkpCj4gPiA+ID4gK3sKPiA+ ID4gPiArCXN0cnVjdCBtZWlfaGRjcF9kYXRhICpkYXRhID0gJmNvbm5lY3Rvci0+aGRjcC5tZWlf ZGF0YTsKPiA+ID4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoY29ubmVjdG9yLT5iYXNlLmRldik7Cj4gPiA+ID4gKwlzdHJ1Y3QgaTkxNV9oZGNwX2NvbXBv bmVudF9tYXN0ZXIgKmNvbXAgPSBkZXZfcHJpdi0+aGRjcF9jb21wOwo+ID4gPiA+ICsJaW50IHJl dDsKPiA+ID4gPiArCj4gPiA+ID4gKwlpZiAoIWNvbXApCj4gPiA+ID4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJbXV0ZXhfbG9jaygmY29tcC0+bXV0ZXgpOwo+ID4gPiA+ ICsJaWYgKCFjb21wLT5vcHMgfHwgIWNvbXAtPmRldiB8fCBkYXRhLT5wb3J0ID09IE1FSV9ERElf SU5WQUxJRF9QT1JUKSB7Cj4gPiA+ID4gKwkJbXV0ZXhfdW5sb2NrKCZjb21wLT5tdXRleCk7Cj4g PiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJ cmV0ID0gY29tcC0+b3BzLT52ZXJpZnlfbXByaW1lKGNvbXAtPmRldiwgZGF0YSwgc3RyZWFtX3Jl YWR5KTsKPiA+ID4gPiArCWlmIChyZXQgPCAwKQo+ID4gPiA+ICsJCWNvbXAtPm9wcy0+Y2xvc2Vf aGRjcF9zZXNzaW9uKGNvbXAtPmRldiwgZGF0YSk7Cj4gPiA+ID4gKwltdXRleF91bmxvY2soJmNv bXAtPm11dGV4KTsKPiA+ID4gPiArCj4gPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiA+ICt9Cj4g PiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKPiA+ID4gPiAr aW50IGhkY3AyX2F1dGhlbnRpY2F0ZV9wb3J0KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5l Y3RvcikKPiA+ID4gPiArewo+ID4gPiA+ICsJc3RydWN0IG1laV9oZGNwX2RhdGEgKmRhdGEgPSAm Y29ubmVjdG9yLT5oZGNwLm1laV9kYXRhOwo+ID4gPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsKPiA+ID4gPiArCXN0 cnVjdCBpOTE1X2hkY3BfY29tcG9uZW50X21hc3RlciAqY29tcCA9IGRldl9wcml2LT5oZGNwX2Nv bXA7Cj4gPiA+ID4gKwlpbnQgcmV0Owo+ID4gPiA+ICsKPiA+ID4gPiArCWlmICghY29tcCkKPiA+ ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiArCj4gPiA+ID4gKwltdXRleF9sb2NrKCZj b21wLT5tdXRleCk7Cj4gPiA+ID4gKwlpZiAoIWNvbXAtPm9wcyB8fCAhY29tcC0+ZGV2IHx8IGRh dGEtPnBvcnQgPT0gTUVJX0RESV9JTlZBTElEX1BPUlQpIHsKPiA+ID4gPiArCQltdXRleF91bmxv Y2soJmNvbXAtPm11dGV4KTsKPiA+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiArCX0K PiA+ID4gPiArCj4gPiA+ID4gKwlyZXQgPSBjb21wLT5vcHMtPmVuYWJsZV9oZGNwX2F1dGhlbnRp Y2F0aW9uKGNvbXAtPmRldiwgZGF0YSk7Cj4gPiA+ID4gKwlpZiAocmV0IDwgMCkKPiA+ID4gPiAr CQljb21wLT5vcHMtPmNsb3NlX2hkY3Bfc2Vzc2lvbihjb21wLT5kZXYsIGRhdGEpOwo+ID4gPiA+ ICsJbXV0ZXhfdW5sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJcmV0dXJu IHJldDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIF9fYXR0cmlidXRlX18o KHVudXNlZCkpCj4gPiA+ID4gK2ludCBoZGNwMl9jbG9zZV9tZWlfc2Vzc2lvbihzdHJ1Y3QgaW50 ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCj4gPiA+ID4gK3sKPiA+ID4gPiArCXN0cnVjdCBtZWlf aGRjcF9kYXRhICpkYXRhID0gJmNvbm5lY3Rvci0+aGRjcC5tZWlfZGF0YTsKPiA+ID4gPiArCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNl LmRldik7Cj4gPiA+ID4gKwlzdHJ1Y3QgaTkxNV9oZGNwX2NvbXBvbmVudF9tYXN0ZXIgKmNvbXAg PSBkZXZfcHJpdi0+aGRjcF9jb21wOwo+ID4gPiA+ICsJaW50IHJldDsKPiA+ID4gPiArCj4gPiA+ ID4gKwlpZiAoIWNvbXApCj4gPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gKwo+ID4g PiA+ICsJbXV0ZXhfbG9jaygmY29tcC0+bXV0ZXgpOwo+ID4gPiA+ICsJaWYgKCFjb21wLT5vcHMg fHwgIWNvbXAtPmRldiB8fAo+ID4gPiA+ICsJICAgIGRhdGEtPnBvcnQgPT0gTUVJX0RESV9JTlZB TElEX1BPUlQpIHsKPiA+ID4gPiArCQltdXRleF91bmxvY2soJmNvbXAtPm11dGV4KTsKPiA+ID4g PiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiArCX0KPiA+ID4gPiArCj4gPiA+ID4gKwlyZXQg PSBjb21wLT5vcHMtPmNsb3NlX2hkY3Bfc2Vzc2lvbihjb21wLT5kZXYsIGRhdGEpOwo+ID4gPiBO ZWVkIHRvIHJlc2V0IHRoZSBwb3J0IGhlcmUgSSB0aGluay4KPiA+IFdoYXQgaXMgdGhlIHJlc2V0 IG9mIHRoZSBwb3J0IHlvdSBhcmUgcmVmZXJyaW5nIHRvPyBwb3J0IGlzIG5vdAo+ID4gY29uZmln dXJlZCBmb3IgZW5jcnlwdGlvbi4gQW5kIHRoaXMgaXMgdGhlIGNhbGwgZm9yIG1hcmtpbmcgdGhl IHBvcnQgYXMgZGUtYXV0aGVudGljYXRlZCB0b28uCj4gPiA+ID4gKwltdXRleF91bmxvY2soJmNv bXAtPm11dGV4KTsKPiA+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4g PiA+ID4gK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQo+ID4gPiA+ICtpbnQgaGRjcDJf ZGVhdXRoZW50aWNhdGVfcG9ydChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCj4g PiA+ID4gK3sKPiA+ID4gPiArCXJldHVybiBoZGNwMl9jbG9zZV9tZWlfc2Vzc2lvbihjb25uZWN0 b3IpOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW50IGk5MTVfaGRjcF9j b21wb25lbnRfbWFzdGVyX2JpbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gPiA+ICt7Cj4gPiA+ ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X3RvX2k5MTUoZGV2 KTsKPiA+ID4gPiArCj4gPiA+ID4gKwlyZXR1cm4gY29tcG9uZW50X2JpbmRfYWxsKGRldiwgZGV2 X3ByaXYtPmhkY3BfY29tcCk7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyB2 b2lkIGludGVsX2Nvbm5lY3RvcnNfaGRjcF9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKPiA+ID4gPiArewo+ID4gPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 ICZkZXZfcHJpdi0+ZHJtOwo+ID4gPiA+ICsJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxf Y29ubmVjdG9yOwo+ID4gPiA+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+ ID4gPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7Cj4gPiA+ID4g Kwo+ID4gPiA+ICsJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfYmVnaW4oZGV2LCAmY29ubl9pdGVy KTsKPiA+ID4gPiArCWRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRlcihjb25uZWN0b3IsICZjb25u X2l0ZXIpIHsKPiA+ID4gPiArCQlpbnRlbF9jb25uZWN0b3IgPSB0b19pbnRlbF9jb25uZWN0b3Io Y29ubmVjdG9yKTsKPiA+ID4gPiArCQlpZiAoIShpbnRlbF9jb25uZWN0b3ItPmhkY3Auc2hpbSkp Cj4gPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiA+ICsKPiA+ID4gPiArCQlpbnRlbF9oZGNwX2Rp c2FibGUoaW50ZWxfY29ubmVjdG9yKTsKPiA+ID4gPiArCX0KPiA+ID4gPiArCWRybV9jb25uZWN0 b3JfbGlzdF9pdGVyX2VuZCgmY29ubl9pdGVyKTsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4g PiArc3RhdGljIHZvaWQgaTkxNV9oZGNwX2NvbXBvbmVudF9tYXN0ZXJfdW5iaW5kKHN0cnVjdCBk ZXZpY2UgKmRldikKPiA+ID4gPiArewo+ID4gPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0ga2Rldl90b19pOTE1KGRldik7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJaW50ZWxf Y29ubmVjdG9yc19oZGNwX2Rpc2FibGUoZGV2X3ByaXYpOwo+ID4gPiBXaHkgdGhpcyBjb2RlPyBP bmNlIHdlJ3ZlIHVucmVnaXN0ZXJlZCB0aGUgZHJpdmVyLCB3ZSBzaG91bGQgaGF2ZSBzaHV0Cj4g PiA+IGRvd24gdGhlIGhhcmR3YXJlIGNvbXBsZXRlbHkuIFdoaWNoIHNob3VsZCBoYXZlIHNodXQg ZG93biBhbGwgdGhlIGhkY3AKPiA+ID4gdXNlcnMgdG9vLgo+ID4gVGhpcyB1bmJpbmQgbWlnaHQg YmUgdHJpZ2dlcmVkIGVpdGhlciBkdWUgdG8gbWFzdGVyX2RlbCBvciBjb21wb25lbnRfZGVsLgo+ ID4gaWYgaXRzIHRyaWdnZXJlZCBmcm9tIG1laSB0aHJvdWdoIGNvbXBvbmVudF9kZWwsIHRoZW4g YmVmb3JlIHRlYXJkb3duIG9mCj4gPiB0aGUgaS9mIGluIGNvbXBvbmVudF91bmJpbmQoKSwgZGlz YWJsZSB0aGUgb25nb2luZyBIRENQIHNlc3Npb24gdGhyb3VnaAo+ID4gaGRjcF9kaXNhYmxlKCkg Zm9yIGVhY2ggY29ubmVjdG9ycy4KPiA+ID4gPiArCWNvbXBvbmVudF91bmJpbmRfYWxsKGRldiwg ZGV2X3ByaXYtPmhkY3BfY29tcCk7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMgaTkxNV9oZGNwX2NvbXBvbmVudF9t YXN0ZXJfb3BzID0gewo+ID4gPiA+ICsJLmJpbmQgPSBpOTE1X2hkY3BfY29tcG9uZW50X21hc3Rl cl9iaW5kLAo+ID4gPiA+ICsJLnVuYmluZCA9IGk5MTVfaGRjcF9jb21wb25lbnRfbWFzdGVyX3Vu YmluZCwKPiA+ID4gPiArfTsKPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbnQgaTkxNV9oZGNw X2NvbXBvbmVudF9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCj4gPiA+ID4g K3sKPiA+ID4gPiArCXJldHVybiAhc3RyY21wKGRldi0+ZHJpdmVyLT5uYW1lLCAibWVpX2hkY3Ai KTsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGludCBpbnRlbF9oZGNwX2Nv bXBvbmVudF9pbml0KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiA+ID4gPiAr ewo+ID4gPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShj b25uZWN0b3ItPmJhc2UuZGV2KTsKPiA+ID4gPiArCXN0cnVjdCBpOTE1X2hkY3BfY29tcG9uZW50 X21hc3RlciAqY29tcDsKPiA+ID4gPiArCXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0g TlVMTDsKPiA+ID4gPiArCWludCByZXQ7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJY29tcCA9IGt6YWxs b2Moc2l6ZW9mKCpjb21wKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gKwlpZiAoIWNvbXApCj4gPiA+ ID4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gPiA+ID4gKwo+ID4gPiA+ICsJbXV0ZXhfaW5pdCgmY29t cC0+bXV0ZXgpOwo+ID4gPiA+ICsJZGV2X3ByaXYtPmhkY3BfY29tcCA9IGNvbXA7Cj4gPiA+ID4g Kwo+ID4gPiA+ICsJY29tcG9uZW50X21hdGNoX2FkZChkZXZfcHJpdi0+ZHJtLmRldiwgJm1hdGNo LAo+ID4gPiA+ICsJCQkgICAgaTkxNV9oZGNwX2NvbXBvbmVudF9tYXRjaCwgZGV2X3ByaXYpOwo+ ID4gPiA+ICsJcmV0ID0gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChkZXZfcHJpdi0+ ZHJtLmRldiwKPiA+ID4gPiArCQkJCQkgICAgICAmaTkxNV9oZGNwX2NvbXBvbmVudF9tYXN0ZXJf b3BzLAo+ID4gPiA+ICsJCQkJCSAgICAgIG1hdGNoKTsKPiA+ID4gU28gSSdtIG5vdCBzdXJlIHRo aXMgd2lsbCB3b3JrIG91dCB3ZWxsLCBoaWRpbmcgdGhlIG1hc3Rlcl9vcHMgaGVyZSBpbgo+ID4g PiBoZGNwLiBEZWZpbml0ZWx5IG5lZWRzIHRvIGJlIHJld3JpdHRlbiBhcyBzb29uIGFzIGk5MTUg bmVlZHMgYW5vdGhlcgo+ID4gPiBjb21wb25lbnQuIEFuZCBtaWdodCBtYWtlIHRoZSBsb2FkL3Vu bG9hZCBzcGxpdCBjb21wbGljYXRlZC4KPiA+IHdlIGhhdmUgYWxyZWFkeSBkaXNjdXNzZWQgdGhp cy4KPiA+ID4gPiArCWlmIChyZXQgPCAwKQo+ID4gPiA+ICsJCWdvdG8gb3V0X2VycjsKPiA+ID4g PiArCj4gPiA+ID4gKwlEUk1fSU5GTygiSTkxNSBoZGNwIGNvbXBvbmVudCBtYXN0ZXIgYWRkZWQu XG4iKTsKPiA+ID4gWW91IGFkZCBib3RoIHRoZSBtYXN0ZXIgYW5kIHRoZSBoZGNwIGNvbXBvbmVu dCBoZXJlLiBPdXRwdXQgaXMgYSBiaXQKPiA+ID4gY29uZnVzaW5nLgo+ID4gCj4gPiB3ZSBoYXZl IGNvbXBvbmVudCBtYXN0ZXIgYW5kIGEgY29tcG9uZW50IGZyb20gbWVpIHdoaWNoIHdpbGwgbWF0 Y2ggdG8KPiA+IHRoZSBtYXN0ZXIuCj4gPiAKPiA+IEhlcmUgd2UgYXJlIGFkZGluZyB0aGUgY29t cG9uZW50IG1hc3Rlci4KPiA+IAo+ID4gPiA+ICsJcmV0dXJuIHJldDsKPiA+ID4gPiArCj4gPiA+ ID4gK291dF9lcnI6Cj4gPiA+ID4gKwljb21wb25lbnRfbWFzdGVyX2RlbChkZXZfcHJpdi0+ZHJt LmRldiwKPiA+ID4gPiArCQkJICAgICAmaTkxNV9oZGNwX2NvbXBvbmVudF9tYXN0ZXJfb3BzKTsK PiA+ID4gPiArCWtmcmVlKGNvbXApOwo+ID4gPiA+ICsJZGV2X3ByaXYtPmhkY3BfY29tcCA9IE5V TEw7Cj4gPiA+ID4gKwlEUk1fRVJST1IoIkZhaWxlZCB0byBhZGQgaTkxNSBoZGNwIGNvbXBvbmVu dCBtYXN0ZXIgKCVkKVxuIiwgcmV0KTsKPiA+ID4gPiArCj4gPiA+ID4gKwlyZXR1cm4gcmV0Owo+ ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW50IGluaXRpYWxpemVfbWVpX2hk Y3BfZGF0YShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCj4gPiA+ID4gK3sKPiA+ ID4gPiArCXN0cnVjdCBpbnRlbF9oZGNwICpoZGNwID0gJmNvbm5lY3Rvci0+aGRjcDsKPiA+ID4g PiArCXN0cnVjdCBtZWlfaGRjcF9kYXRhICpkYXRhID0gJmhkY3AtPm1laV9kYXRhOwo+ID4gPiA+ ICsJZW51bSBwb3J0IHBvcnQ7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJaWYgKGNvbm5lY3Rvci0+ZW5j b2Rlcikgewo+ID4gPiA+ICsJCXBvcnQgPSBjb25uZWN0b3ItPmVuY29kZXItPnBvcnQ7Cj4gPiA+ ID4gKwkJZGF0YS0+cG9ydCA9IEdFVF9NRUlfRERJX0lOREVYKHBvcnQpOwo+ID4gPiA+ICsJfQo+ ID4gPiA+ICsKPiA+ID4gPiArCWRhdGEtPnBvcnRfdHlwZSA9IE1FSV9IRENQX1BPUlRfVFlQRV9J TlRFR1JBVEVEOwo+ID4gPiA+ICsJZGF0YS0+cHJvdG9jb2wgPSBoZGNwLT5zaGltLT5oZGNwX3By b3RvY29sKCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJZGF0YS0+ayA9IDE7Cj4gPiA+ID4gKwlpZiAo IWRhdGEtPnN0cmVhbXMpCj4gPiA+ID4gKwkJZGF0YS0+c3RyZWFtcyA9IGtjYWxsb2MoZGF0YS0+ aywgc2l6ZW9mKGRhdGEtPnN0cmVhbXNbMF0pLAo+ID4gPiA+ICsJCQkJCUdGUF9LRVJORUwpOwo+ ID4gPiA+ICsJaWYgKCFkYXRhLT5zdHJlYW1zKSB7Cj4gPiA+ID4gKwkJRFJNX0VSUk9SKCJPdXQg b2YgTWVtb3J5XG4iKTsKPiA+ID4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ID4gPiArCX0KPiA+ ID4gPiArCj4gPiA+ID4gKwlkYXRhLT5zdHJlYW1zWzBdLnN0cmVhbV9pZCA9IDA7Cj4gPiA+ID4g KwlkYXRhLT5zdHJlYW1zWzBdLnN0cmVhbV90eXBlID0gaGRjcC0+Y29udGVudF90eXBlOwo+ID4g PiA+ICsKPiA+ID4gPiArCXJldHVybiAwOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICAg Ym9vbCBpc19oZGNwMl9zdXBwb3J0ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+ID4gPiA+ICAgewo+ID4gPiA+ICAgCXJldHVybiAoKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikgfHwKPiA+ID4gPiBAQCAtODQzLDEwICsxMjYw LDI1IEBAIHN0YXRpYyB2b2lkIGludGVsX2hkY3AyX2luaXQoc3RydWN0IGludGVsX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQo+ID4gPiA+ICAgewo+ID4gPiA+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNlLmRldik7Cj4gPiA+ID4gICAJ c3RydWN0IGludGVsX2hkY3AgKmhkY3AgPSAmY29ubmVjdG9yLT5oZGNwOwo+ID4gPiA+ICsJaW50 IHJldDsKPiA+ID4gPiAgIAlXQVJOX09OKCFpc19oZGNwMl9zdXBwb3J0ZWQoZGV2X3ByaXYpKTsK PiA+ID4gPiAtCS8qIFRPRE86IE1FSSBpbnRlcmZhY2UgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQg aGVyZSAqLwo+ID4gPiA+ICsJcmV0ID0gaW5pdGlhbGl6ZV9tZWlfaGRjcF9kYXRhKGNvbm5lY3Rv cik7Cj4gPiA+ID4gKwlpZiAocmV0KSB7Cj4gPiA+ID4gKwkJRFJNX0RFQlVHX0tNUygiTWVpIGhk Y3AgZGF0YSBpbml0IGZhaWxlZFxuIik7Cj4gPiA+ID4gKwkJcmV0dXJuOwo+ID4gPiA+ICsJfQo+ ID4gPiA+ICsKPiA+ID4gPiArCWlmICghZGV2X3ByaXYtPmhkY3BfY29tcCkKPiA+ID4gPiArCQly ZXQgPSBpbnRlbF9oZGNwX2NvbXBvbmVudF9pbml0KGNvbm5lY3Rvcik7Cj4gPiA+ID4gKwo+ID4g PiA+ICsJaWYgKHJldCkgewo+ID4gPiA+ICsJCURSTV9ERUJVR19LTVMoIkhEQ1AgY29tcCBpbml0 IGZhaWxlZFxuIik7Cj4gPiA+ID4gKwkJa2ZyZWUoaGRjcC0+bWVpX2RhdGEuc3RyZWFtcyk7Cj4g PiA+ID4gKwkJcmV0dXJuOwo+ID4gPiA+ICsJfQo+ID4gPiA+ICsKPiA+ID4gPiAgIAloZGNwLT5o ZGNwMl9zdXBwb3J0ZWQgPSAxOwo+ID4gPiA+ICAgfQo+ID4gPiA+IEBAIC04OTQsOSArMTMyNiwx NyBAQCB2b2lkIGludGVsX2hkY3BfZXhpdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gPiA+ID4gICAJCW11dGV4X2xvY2soJmludGVsX2Nvbm5lY3Rvci0+aGRjcC5tdXRleCk7 Cj4gPiA+ID4gICAJCWludGVsX2Nvbm5lY3Rvci0+aGRjcC5oZGNwMl9zdXBwb3J0ZWQgPSAwOwo+ ID4gPiA+ICAgCQlpbnRlbF9jb25uZWN0b3ItPmhkY3Auc2hpbSA9IE5VTEw7Cj4gPiA+ID4gKwkJ a2ZyZWUoaW50ZWxfY29ubmVjdG9yLT5oZGNwLm1laV9kYXRhLnN0cmVhbXMpOwo+ID4gPiBXZSBu ZWVkIHRvIHB1c2ggdGhpcyBpbnRvIGEgcGVyLWNvbm5lY3RvciBoZGNwIGNsZWFudXAgZnVuY3Rp b24uIE9yIGp1c3QKPiA+ID4gaW50byB0aGUgZ2VuZXJpYyBjb25uZWN0b3IgY2xlYW51cC4KPiA+ IFdlIGNvdWxkIG1vdmUgaXQgdG8gcGVyIGNvbm5lY3RvcsKgIGhkY3AgY2xlYW51cCBmdW5jdGlv bi4KPiA+ID4gPiAgIAkJbXV0ZXhfdW5sb2NrKCZpbnRlbF9jb25uZWN0b3ItPmhkY3AubXV0ZXgp Owo+ID4gPiA+ICAgCX0KPiA+ID4gPiAgIAlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9lbmQoJmNv bm5faXRlcik7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJaWYgKGRldl9wcml2LT5oZGNwX2NvbXApIHsK PiA+ID4gPiArCQljb21wb25lbnRfbWFzdGVyX2RlbChkZXZfcHJpdi0+ZHJtLmRldiwKPiA+ID4g PiArCQkJCSAgICAgJmk5MTVfaGRjcF9jb21wb25lbnRfbWFzdGVyX29wcyk7Cj4gPiA+ID4gKwkJ a2ZyZWUoZGV2X3ByaXYtPmhkY3BfY29tcCk7Cj4gPiA+ID4gKwkJZGV2X3ByaXYtPmhkY3BfY29t cCA9IE5VTEw7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gICB9Cj4gPiA+ID4gICBpbnQgaW50ZWxfaGRj cF9lbmFibGUoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4gPiA+IGRpZmYg LS1naXQgYS9pbmNsdWRlL2RybS9pOTE1X2NvbXBvbmVudC5oIGIvaW5jbHVkZS9kcm0vaTkxNV9j b21wb25lbnQuaAo+ID4gPiA+IGluZGV4IGZjYTIyZDQ2M2UxYi4uMTIyNjgyMjhmNGRjIDEwMDY0 NAo+ID4gPiA+IC0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfY29tcG9uZW50LmgKPiA+ID4gPiArKysg Yi9pbmNsdWRlL2RybS9pOTE1X2NvbXBvbmVudC5oCj4gPiA+ID4gQEAgLTI0LDggKzI0LDEyIEBA Cj4gPiA+ID4gICAjaWZuZGVmIF9JOTE1X0NPTVBPTkVOVF9IXwo+ID4gPiA+ICAgI2RlZmluZSBf STkxNV9DT01QT05FTlRfSF8KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gPiA+ ID4gKwo+ID4gPiA+ICAgI2luY2x1ZGUgImRybV9hdWRpb19jb21wb25lbnQuaCIKPiA+ID4gPiAr I2luY2x1ZGUgPGRybS9kcm1faGRjcC5oPgo+ID4gPiA+ICsKPiA+ID4gPiAgIC8qIE1BWF9QT1JU IGlzIHRoZSBudW1iZXIgb2YgcG9ydAo+ID4gPiA+ICAgICogSXQgbXVzdCBiZSBzeW5jIHdpdGgg STkxNV9NQVhfUE9SVFMgZGVmaW5lZCBpOTE1X2Rydi5oCj4gPiA+ID4gICAgKi8KPiA+ID4gPiBA QCAtNDYsNCArNTAsNzEgQEAgc3RydWN0IGk5MTVfYXVkaW9fY29tcG9uZW50IHsKPiA+ID4gPiAg IAlpbnQgYXVkX3NhbXBsZV9yYXRlW01BWF9QT1JUU107Cj4gPiA+ID4gICB9Owo+ID4gPiA+ICtz dHJ1Y3QgaTkxNV9oZGNwX2NvbXBvbmVudF9vcHMgewo+ID4gPiBJbW8gdGhhdCBzaG91bGQgYmUg Y2FsbGVkIG1laV9oZGNwX2NvbXBvbmVudF9vcHMgYW5kIHB1dCBpbnRvIHRoZQo+ID4gPiBsaW51 eC9tZWlfaGRjcC5oIGhlYWRlci4gT3Igd2FzIHRoYXQgVGhvbWFzJyByZXZpZXcgY29tbWVudD8K PiA+IE5vcGUgdGhpcyBpcyB0aGVyZSBmb3IgbWFueSB2ZXJzaW9ucy4gaTkxNV9oZGNwX2NvbXBv bmVudF9vcHMgYXJlCj4gPiBpbXBsZW1lbnRlZCBieSBtZWlfaGRjcC5jIGFuZCBpbml0aWFsaXpl cyB0aGUgY29tcG9uZW50IHdpdGggdGhlICZvcHMuCj4gCj4gVG9tYXMgYW5kIERhbmllbCwKPiAK PiBJcyB0aGlzIGZpbmU/IERlZmluaW5nIHRoZSBvcHMgYXQgaTkxNV9jb21wb25lbnQuaCBhbmQg STkxNSBhbmQgbWVpX2hkY3AKPiB1c2luZyBpdCBmb3IgdGhlaXIgcHVycG9zZT8KPiAKPiBJZiBp dCBoYXMgdG8gYmUgY29tcHVsc29yaWx5IGRlZmluZWQgYnkgdGhlIHNlcnZpY2UgcHJvdmlkZXIg dGhlbiB3ZSBuZWVkCj4gdG8gbW92ZSB0aGlzIGludG8gdGhlIGluY2x1ZGUvbGludXgvbWVpX2hk Y3AuaC4gSW4gdGhhdCB3ZSBjYW4gYXZvaWQgdGhlCj4gZ2xvYmFsIGhlYWRlciBmcm9tIHRoZSBt ZWlfaGRjcCBUb21hcy4gUGxlYXNlIGhlbHAgaGVyZSB0byBjbGFyaWZ5IHRoZSBkaXJlY3Rpb24u CgpMZXQncyBtb3ZlIHRoaXMgZGlzY3Vzc2lvbiB0byB0aGUgb3RoZXIgcmVwbHkgY2hhaW4sIHRv IGF2b2lkIHNwbGl0dGluZwpkaXNjdXNzaW9uIHVwIHRvbyBtdWNoLgotRGFuaWVsCgo+IAo+IC1S YW0KPiAKPiA+ID4gQXNpZGU6IFJldmlldyBoZXJlIGluIHB1YmxpYyBjaGFubmVscyBpbnN0ZWFk IG9mIGluIHByaXZhdGUgd291bGQgYmUgbXVjaAo+ID4gPiBiZXR0ZXIgZm9yIGNvb3JkaW5hdGlv bi4KPiA+IFRvbWFzLAo+ID4gQ291bGQgeW91IHBsZWFzZSBoZWxwIG9uIHRoaXMgYXNrLj8KPiA+ IC0tUmFtCj4gPiA+ID4gKwkvKioKPiA+ID4gPiArCSAqIEBvd25lcjogbWVpX2hkY3AgbW9kdWxl Cj4gPiA+ID4gKwkgKi8KPiA+ID4gPiArCXN0cnVjdCBtb2R1bGUgKm93bmVyOwo+ID4gPiA+ICsK PiA+ID4gPiArCWludCAoKmluaXRpYXRlX2hkY3AyX3Nlc3Npb24pKHN0cnVjdCBkZXZpY2UgKmRl diwKPiA+ID4gPiArCQkJCSAgICAgIHZvaWQgKmhkY3BfZGF0YSwKPiA+ID4gPiArCQkJCSAgICAg IHN0cnVjdCBoZGNwMl9ha2VfaW5pdCAqYWtlX2RhdGEpOwo+ID4gPiA+ICsJaW50ICgqdmVyaWZ5 X3JlY2VpdmVyX2NlcnRfcHJlcGFyZV9rbSkoc3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiA+ICsJ CQkJCSAgICAgICB2b2lkICpoZGNwX2RhdGEsCj4gPiA+ID4gKwkJCQkJICAgICAgIHN0cnVjdCBo ZGNwMl9ha2Vfc2VuZF9jZXJ0Cj4gPiA+ID4gKwkJCQkJCQkJKnJ4X2NlcnQsCj4gPiA+ID4gKwkJ CQkJICAgICAgIGJvb2wgKmttX3N0b3JlZCwKPiA+ID4gPiArCQkJCQkgICAgICAgc3RydWN0IGhk Y3AyX2FrZV9ub19zdG9yZWRfa20KPiA+ID4gPiArCQkJCQkJCQkqZWtfcHViX2ttLAo+ID4gPiA+ ICsJCQkJCSAgICAgICBzaXplX3QgKm1zZ19zeik7Cj4gPiA+ID4gKwlpbnQgKCp2ZXJpZnlfaHBy aW1lKShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiA+ID4gKwkJCSAgICAgdm9pZCAqaGRjcF9kYXRh LAo+ID4gPiA+ICsJCQkgICAgIHN0cnVjdCBoZGNwMl9ha2Vfc2VuZF9ocHJpbWUgKnJ4X2hwcmlt ZSk7Cj4gPiA+ID4gKwlpbnQgKCpzdG9yZV9wYWlyaW5nX2luZm8pKHN0cnVjdCBkZXZpY2UgKmRl diwKPiA+ID4gPiArCQkJCSAgdm9pZCAqaGRjcF9kYXRhLAo+ID4gPiA+ICsJCQkJICBzdHJ1Y3Qg aGRjcDJfYWtlX3NlbmRfcGFpcmluZ19pbmZvCj4gPiA+ID4gKwkJCQkJCQkJKnBhaXJpbmdfaW5m byk7Cj4gPiA+ID4gKwlpbnQgKCppbml0aWF0ZV9sb2NhbGl0eV9jaGVjaykoc3RydWN0IGRldmlj ZSAqZGV2LAo+ID4gPiA+ICsJCQkJICAgICAgIHZvaWQgKmhkY3BfZGF0YSwKPiA+ID4gPiArCQkJ CSAgICAgICBzdHJ1Y3QgaGRjcDJfbGNfaW5pdCAqbGNfaW5pdF9kYXRhKTsKPiA+ID4gPiArCWlu dCAoKnZlcmlmeV9scHJpbWUpKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ID4gPiArCQkJICAgICB2 b2lkICpoZGNwX2RhdGEsCj4gPiA+ID4gKwkJCSAgICAgc3RydWN0IGhkY3AyX2xjX3NlbmRfbHBy aW1lICpyeF9scHJpbWUpOwo+ID4gPiA+ICsJaW50ICgqZ2V0X3Nlc3Npb25fa2V5KShzdHJ1Y3Qg ZGV2aWNlICpkZXYsCj4gPiA+ID4gKwkJCSAgICAgICB2b2lkICpoZGNwX2RhdGEsCj4gPiA+ID4g KwkJCSAgICAgICBzdHJ1Y3QgaGRjcDJfc2tlX3NlbmRfZWtzICpza2VfZGF0YSk7Cj4gPiA+ID4g KwlpbnQgKCpyZXBlYXRlcl9jaGVja19mbG93X3ByZXBhcmVfYWNrKShzdHJ1Y3QgZGV2aWNlICpk ZXYsCj4gPiA+ID4gKwkJCQkJICAgICAgIHZvaWQgKmhkY3BfZGF0YSwKPiA+ID4gPiArCQkJCQkg ICAgICAgc3RydWN0IGhkY3AyX3JlcF9zZW5kX3JlY2VpdmVyaWRfbGlzdAo+ID4gPiA+ICsJCQkJ CQkJCSpyZXBfdG9wb2xvZ3ksCj4gPiA+ID4gKwkJCQkJICAgICAgIHN0cnVjdCBoZGNwMl9yZXBf c2VuZF9hY2sKPiA+ID4gPiArCQkJCQkJCQkqcmVwX3NlbmRfYWNrKTsKPiA+ID4gPiArCWludCAo KnZlcmlmeV9tcHJpbWUpKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ID4gPiArCQkJICAgICB2b2lk ICpoZGNwX2RhdGEsCj4gPiA+ID4gKwkJCSAgICAgc3RydWN0IGhkY3AyX3JlcF9zdHJlYW1fcmVh ZHkgKnN0cmVhbV9yZWFkeSk7Cj4gPiA+ID4gKwlpbnQgKCplbmFibGVfaGRjcF9hdXRoZW50aWNh dGlvbikoc3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiA+ICsJCQkJCSAgdm9pZCAqaGRjcF9kYXRh KTsKPiA+ID4gPiArCWludCAoKmNsb3NlX2hkY3Bfc2Vzc2lvbikoc3RydWN0IGRldmljZSAqZGV2 LAo+ID4gPiA+ICsJCQkJICB2b2lkICpoZGNwX2RhdGEpOwo+ID4gPiA+ICt9Owo+ID4gPiA+ICsK PiA+ID4gPiArLyoqCj4gPiA+ID4gKyAqIHN0cnVjdCBpOTE1X2hkY3BfY29tcG9uZW50X21hc3Rl ciAtIFVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBpOTE1Cj4gPiA+ID4gKyAqIGFuZCBt ZWlfaGRjcCBmb3IgSERDUDIuMiBzZXJ2aWNlcy4KPiA+ID4gPiArICovCj4gPiA+ID4gK3N0cnVj dCBpOTE1X2hkY3BfY29tcG9uZW50X21hc3RlciB7Cj4gPiA+ID4gKwkvKioKPiA+ID4gPiArCSAq IEBkZXY6IGEgZGV2aWNlIHByb3ZpZGluZyBoZGNwCj4gPiA+ID4gKwkgKi8KPiA+ID4gPiArCXN0 cnVjdCBkZXZpY2UgKmRldjsKPiA+ID4gPiArCS8qKgo+ID4gPiA+ICsJICogQG11dGV4OiBNdXRl eCB0byBwcm90ZWN0IHRoZSBzdGF0ZSBvZiBkZXYKPiA+ID4gPiArCSAqLwo+ID4gPiA+ICsJc3Ry dWN0IG11dGV4IG11dGV4Owo+ID4gPiA+ICsJLyoqCj4gPiA+ID4gKwkgKiBAb3BzOiBPcHMgaW1w bGVtZW50ZWQgYnkgbWVpX2hkY3AgZHJpdmVyLCB1c2VkIGJ5IGk5MTUgZHJpdmVyLgo+ID4gPiA+ ICsJICovCj4gPiA+ID4gKwljb25zdCBzdHJ1Y3QgaTkxNV9oZGNwX2NvbXBvbmVudF9vcHMgKm9w czsKPiA+ID4gPiArfTsKPiA+ID4gPiArCj4gPiA+ID4gICAjZW5kaWYgLyogX0k5MTVfQ09NUE9O RU5UX0hfICovCj4gPiA+ID4gLS0gCj4gPiA+ID4gMi43LjQKPiA+ID4gPiAKPiA+IAo+ID4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+IEludGVsLWdm eCBtYWlsaW5nIGxpc3QKPiA+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+IGh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cgot LSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0 cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==