From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Koenig, Christian" Subject: Re: [PATCH 1/4] dma-buf: change DMA-buf locking convention Date: Tue, 17 Sep 2019 12:40:51 +0000 Message-ID: References: <20190829142917.13058-1-christian.koenig@amd.com> <20190829142917.13058-2-christian.koenig@amd.com> <20190903080522.GM2112@phenom.ffwll.local> <88f748d2-43de-ae2a-b895-40d8b3be5c78@gmail.com> <20190917123150.GM3958@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190917123150.GM3958@phenom.ffwll.local> Content-Language: en-US Content-ID: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: "linaro-mm-sig@lists.linaro.org" , "intel-gfx@lists.freedesktop.org" , "sumit.semwal@linaro.org" , "dri-devel@lists.freedesktop.org" , "linux-media@vger.kernel.org" List-Id: intel-gfx@lists.freedesktop.org QW0gMTcuMDkuMTkgdW0gMTQ6MzEgc2NocmllYiBEYW5pZWwgVmV0dGVyOg0KPiBPbiBNb24sIFNl cCAxNiwgMjAxOSBhdCAwMjoyMzoxM1BNICswMjAwLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOg0K Pj4gUGluZz8gQW55IGZ1cnRoZXIgY29tbWVudCBvbiB0aGlzIG9yIGNhbid0IHdlIG1lcmdlIGF0 IGxlYXN0IHRoZSBsb2NraW5nDQo+PiBjaGFuZ2U/DQo+IEkgd2FzIGF0IHBsdW1iZXJzIC4uLg0K Pj4gQ2hyaXN0aWFuLg0KPj4NCj4+IEFtIDExLjA5LjE5IHVtIDEyOjUzIHNjaHJpZWIgQ2hyaXN0 aWFuIEvDtm5pZzoNCj4+PiBBbSAwMy4wOS4xOSB1bSAxMDowNSBzY2hyaWViIERhbmllbCBWZXR0 ZXI6DQo+Pj4+IE9uIFRodSwgQXVnIDI5LCAyMDE5IGF0IDA0OjI5OjE0UE0gKzAyMDAsIENocmlz dGlhbiBLw7ZuaWcgd3JvdGU6DQo+Pj4+PiBUaGlzIHBhdGNoIGlzIGEgc3RyaXBwZWQgZG93biB2 ZXJzaW9uIG9mIHRoZSBsb2NraW5nIGNoYW5nZXMNCj4+Pj4+IG5lY2Vzc2FyeSB0byBzdXBwb3J0 IGR5bmFtaWMgRE1BLWJ1ZiBoYW5kbGluZy4NCj4+Pj4+DQo+Pj4+PiBGb3IgY29tcGF0aWJpbGl0 eSB3ZSBjYWNoZSB0aGUgRE1BLWJ1ZiBtYXBwaW5nIGFzIHNvb24gYXMNCj4+Pj4+IGV4cG9ydGVy L2ltcG9ydGVyIGRpc2FncmVlIG9uIHRoZSBkeW5hbWljIGhhbmRsaW5nLg0KPj4+Pj4NCj4+Pj4+ IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNv bT4NCj4+Pj4+IC0tLQ0KPj4+Pj4gIMKgIGRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMgfCA5MA0K Pj4+Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tDQo+Pj4+PiAgwqAg aW5jbHVkZS9saW51eC9kbWEtYnVmLmjCoMKgIHwgNTEgKysrKysrKysrKysrKysrKysrKysrLQ0K Pj4+Pj4gIMKgIDIgZmlsZXMgY2hhbmdlZCwgMTMzIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25z KC0pDQo+Pj4+Pg0KPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMg Yi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jDQo+Pj4+PiBpbmRleCA0MzNkOTFkNzEwZTQuLjY1 MDUyZDUyNjAyYiAxMDA2NDQNCj4+Pj4+IC0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMN Cj4+Pj4+ICsrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMNCj4+Pj4+IEBAIC01MjUsNiAr NTI1LDEwIEBAIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QNCj4+ Pj4+IGRtYV9idWZfZXhwb3J0X2luZm8gKmV4cF9pbmZvKQ0KPj4+Pj4gIMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsNCj4+Pj4+ICDCoMKgwqDCoMKgIH0NCj4+Pj4+ ICDCoCArwqDCoMKgIGlmIChXQVJOX09OKGV4cF9pbmZvLT5vcHMtPmNhY2hlX3NndF9tYXBwaW5n ICYmDQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBleHBfaW5mby0+b3BzLT5keW5hbWlj X21hcHBpbmcpKQ0KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKC1FSU5WQUwp Ow0KPj4+Pj4gKw0KPj4+Pj4gIMKgwqDCoMKgwqAgaWYgKCF0cnlfbW9kdWxlX2dldChleHBfaW5m by0+b3duZXIpKQ0KPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRU5P RU5UKTsNCj4+Pj4+ICDCoCBAQCAtNjQ1LDEwICs2NDksMTEgQEAgdm9pZCBkbWFfYnVmX3B1dChz dHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQ0KPj4+Pj4gIMKgIEVYUE9SVF9TWU1CT0xfR1BMKGRtYV9i dWZfcHV0KTsNCj4+Pj4+ICDCoCDCoCAvKioNCj4+Pj4+IC0gKiBkbWFfYnVmX2F0dGFjaCAtIEFk ZCB0aGUgZGV2aWNlIHRvIGRtYV9idWYncyBhdHRhY2htZW50cw0KPj4+Pj4gbGlzdDsgb3B0aW9u YWxseSwNCj4+Pj4+ICsgKiBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoIC0gQWRkIHRoZSBkZXZpY2Ug dG8gZG1hX2J1ZidzDQo+Pj4+PiBhdHRhY2htZW50cyBsaXN0OyBvcHRpb25hbGx5LA0KPj4+Pj4g IMKgwqAgKiBjYWxscyBhdHRhY2goKSBvZiBkbWFfYnVmX29wcyB0byBhbGxvdyBkZXZpY2Utc3Bl Y2lmaWMNCj4+Pj4+IGF0dGFjaCBmdW5jdGlvbmFsaXR5DQo+Pj4+PiAtICogQGRtYWJ1ZjrCoMKg wqAgW2luXcKgwqDCoCBidWZmZXIgdG8gYXR0YWNoIGRldmljZSB0by4NCj4+Pj4+IC0gKiBAZGV2 OsKgwqDCoCBbaW5dwqDCoMKgIGRldmljZSB0byBiZSBhdHRhY2hlZC4NCj4+Pj4+ICsgKiBAZG1h YnVmOsKgwqDCoMKgwqDCoMKgIFtpbl3CoMKgwqAgYnVmZmVyIHRvIGF0dGFjaCBkZXZpY2UgdG8u DQo+Pj4+PiArICogQGRldjrCoMKgwqDCoMKgwqDCoCBbaW5dwqDCoMKgIGRldmljZSB0byBiZSBh dHRhY2hlZC4NCj4+Pj4+ICsgKiBAZHluYW1pY19tYXBwaW5nOsKgwqDCoCBbaW5dwqDCoMKgIGNh bGxpbmcgY29udmVudGlvbiBmb3IgbWFwL3VubWFwDQo+Pj4+PiAgwqDCoCAqDQo+Pj4+PiAgwqDC oCAqIFJldHVybnMgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCBwb2ludGVyIGZvciB0aGlzDQo+ Pj4+PiBhdHRhY2htZW50LiBBdHRhY2htZW50cw0KPj4+Pj4gIMKgwqAgKiBtdXN0IGJlIGNsZWFu ZWQgdXAgYnkgY2FsbGluZyBkbWFfYnVmX2RldGFjaCgpLg0KPj4+Pj4gQEAgLTY2Miw4ICs2Njcs OSBAQCBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX3B1dCk7DQo+Pj4+PiAgwqDCoCAqIGFjY2Vz c2libGUgdG8gQGRldiwgYW5kIGNhbm5vdCBiZSBtb3ZlZCB0byBhIG1vcmUgc3VpdGFibGUNCj4+ Pj4+IHBsYWNlLiBUaGlzIGlzDQo+Pj4+PiAgwqDCoCAqIGluZGljYXRlZCB3aXRoIHRoZSBlcnJv ciBjb2RlIC1FQlVTWS4NCj4+Pj4+ICDCoMKgICovDQo+Pj4+PiAtc3RydWN0IGRtYV9idWZfYXR0 YWNobWVudCAqZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwNCj4+Pj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRldmljZSAq ZGV2KQ0KPj4+Pj4gK3N0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKg0KPj4+Pj4gK2RtYV9idWZf ZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2 LA0KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCBkeW5hbWljX21hcHBp bmcpDQo+Pj4+PiAgwqAgew0KPj4+Pj4gIMKgwqDCoMKgwqAgc3RydWN0IGRtYV9idWZfYXR0YWNo bWVudCAqYXR0YWNoOw0KPj4+Pj4gIMKgwqDCoMKgwqAgaW50IHJldDsNCj4+Pj4+IEBAIC02Nzcs NiArNjgzLDcgQEAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudA0KPj4+Pj4gKmRtYV9idWZfYXR0 YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsDQo+Pj4+PiAgwqAgwqDCoMKgwqDCoCBhdHRhY2gt PmRldiA9IGRldjsNCj4+Pj4+ICDCoMKgwqDCoMKgIGF0dGFjaC0+ZG1hYnVmID0gZG1hYnVmOw0K Pj4+Pj4gK8KgwqDCoCBhdHRhY2gtPmR5bmFtaWNfbWFwcGluZyA9IGR5bmFtaWNfbWFwcGluZzsN Cj4+Pj4+ICDCoCDCoMKgwqDCoMKgIG11dGV4X2xvY2soJmRtYWJ1Zi0+bG9jayk7DQo+Pj4+PiAg wqAgQEAgLTY4NSwxNiArNjkyLDY0IEBAIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQNCj4+Pj4+ ICpkbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLA0KPj4+Pj4gIMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAocmV0KQ0KPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdv dG8gZXJyX2F0dGFjaDsNCj4+Pj4+ICDCoMKgwqDCoMKgIH0NCj4+Pj4+ICvCoMKgwqAgZG1hX3Jl c3ZfbG9jayhkbWFidWYtPnJlc3YsIE5VTEwpOw0KPj4+Pj4gIMKgwqDCoMKgwqAgbGlzdF9hZGQo JmF0dGFjaC0+bm9kZSwgJmRtYWJ1Zi0+YXR0YWNobWVudHMpOw0KPj4+Pj4gK8KgwqDCoCBkbWFf cmVzdl91bmxvY2soZG1hYnVmLT5yZXN2KTsNCj4+Pj4+ICDCoCDCoMKgwqDCoMKgIG11dGV4X3Vu bG9jaygmZG1hYnVmLT5sb2NrKTsNCj4+Pj4+ICDCoCArwqDCoMKgIC8qIFdoZW4gZWl0aGVyIHRo ZSBpbXBvcnRlciBvciB0aGUgZXhwb3J0ZXIgY2FuJ3QgaGFuZGxlIGR5bmFtaWMNCj4+Pj4+ICvC oMKgwqDCoCAqIG1hcHBpbmdzIHdlIGNhY2hlIHRoZSBtYXBwaW5nIGhlcmUgdG8gYXZvaWQgaXNz dWVzIHdpdGggdGhlDQo+Pj4+PiArwqDCoMKgwqAgKiByZXNlcnZhdGlvbiBvYmplY3QgbG9jay4N Cj4+Pj4+ICvCoMKgwqDCoCAqLw0KPj4+Pj4gK8KgwqDCoCBpZiAoZG1hX2J1Zl9hdHRhY2htZW50 X2lzX2R5bmFtaWMoYXR0YWNoKSAhPQ0KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRtYV9idWZfaXNf ZHluYW1pYyhkbWFidWYpKSB7DQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHNnX3RhYmxl ICpzZ3Q7DQo+Pj4+PiArDQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGRtYV9idWZfaXNfZHlu YW1pYyhhdHRhY2gtPmRtYWJ1ZikpDQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFf cmVzdl9sb2NrKGF0dGFjaC0+ZG1hYnVmLT5yZXN2LCBOVUxMKTsNCj4+Pj4+ICsNCj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCBzZ3QgPSBkbWFidWYtPm9wcy0+bWFwX2RtYV9idWYoYXR0YWNoLCBETUFf QklESVJFQ1RJT05BTCk7DQo+Pj4+IE5vdyB3ZSdyZSBiYWNrIHRvIGVuZm9yY2luZyBETUFfQklE SSwgd2hpY2ggd29ya3MgbmljZWx5IGFyb3VuZCB0aGUNCj4+Pj4gbG9ja2luZyBwYWluLCBidXQg YXBwYXJlbnRseSB1cHNldHMgdGhlIGFybS1zb2MgZm9sa3Mgd2hvIHdhbnQgdG8NCj4+Pj4gY29u dHJvbA0KPj4+PiB0aGlzIGJldHRlci4NCj4+PiBUYWtlIGFub3RoZXIgbG9vayBhdCBkbWFfYnVm X21hcF9hdHRhY2htZW50KCksIHdlIHN0aWxsIHRyeSB0byBnZXQgdGhlDQo+Pj4gY2FjaGluZyB0 aGVyZSBmb3IgQVJNLg0KPj4+DQo+Pj4gV2hhdCB3ZSBkbyBoZXJlIGlzIHRvIGJpZGlyZWN0aW9u YWxseSBtYXAgdGhlIGJ1ZmZlciB0byBhdm9pZCB0aGUNCj4+PiBsb2NraW5nIGh5ZHJhIHdoZW4g aW1wb3J0ZXIgYW5kIGV4cG9ydGVyIGRpc2FncmVlIG9uIGxvY2tpbmcuDQo+Pj4NCj4+PiBTbyB0 aGUgQVJNIGZvbGtzIGNhbiBlYXNpbHkgYXZvaWQgdGhhdCBieSBzd2l0Y2hpbmcgdG8gZHluYW1p YyBsb2NraW5nDQo+Pj4gZm9yIGJvdGguDQo+IFNvIHlvdSBzdGlsbCBicmVhayB0aGUgY29udHJh Y3QgYmV0d2VlbiBpbXBvcnRlciBhbmQgZXhwb3J0ZXIsIGV4Y2VwdCBub3QNCj4gZm9yIGFueXRo aW5nIHRoYXQncyBydW4gaW4gaW50ZWwtZ2Z4LWNpIHNvIGFsbCBpcyBnb29kPw0KDQpObywgdGhl IGNvbnRyYWN0IGJldHdlZW4gaW1wb3J0ZXIgYW5kIGV4cG9ydGVyIHN0YXlzIGV4YWN0bHkgdGhl IHNhbWUgaXQgDQppcyBjdXJyZW50bHkgYXMgbG9uZyBhcyB5b3UgZG9uJ3Qgc3dpdGNoIHRvIGR5 bmFtaWMgZG1hLWJ1ZiBoYW5kbGluZy4NCg0KVGhlcmUgaXMgbm8gZnVuY3Rpb25hbCBjaGFuZ2Ug Zm9yIHRoZSBBUk0gZm9sa3MgaGVyZS4gVGhlIG9ubHkgY2hhbmdlIA0Kd2hpY2ggdGFrZXMgZWZm ZWN0IGlzIGJldHdlZW4gaTkxNSBhbmQgYW1kZ3B1IGFuZCB0aGF0IGlzIHBlcmZlY3RseSANCmNv dmVyZWQgYnkgaW50ZWwtZ2Z4LWNpLg0KDQpSZWdhcmRzLA0KQ2hyaXN0aWFuLg0KDQo+DQo+IFRo ZSBvdGhlciBpc3N1ZSB3aXRoICJ3ZSBzb2x2ZSB0aGlzIHdpdGggY2FjaGluZyB0aGUgbWFwcGlu ZyI6IEN1cnJlbnRseQ0KPiBtYXAvdW5tYXAgZmx1c2ggKGF0IGxlYXN0IG9uIGFybSwgYXQgbGVh c3Qgb24gY2FzZXMgd2hlcmUgaXQgbWF0dGVycykuIElmDQo+IHlvdSBqdXN0IHJldHVybiB0aGUg Y2FjaGVkIHNnLCB0aGVuIHdlIGRvbid0IGRvIHRoZSBmbHVzaGluZyBhbnltb3JlLA0KPiB3aGlj aCBtaWdodCBicmVhayBpbXBvcnRlcnMvZXhwb3J0ZXJzIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5 IGFzIGp1c3QNCj4gZ2l2aW5nIHRoZW0gdGhlIHdyb25nIG1hcHBpbmcuIFRoZXJlJ3MgemVybyBk aWZmZXJlbmNlcyBiZXR3ZWVuIGEgQklESSwNCj4gVE9fQ1BVLCBvciBUT19ERVZJQ0UgbWFwcGlu ZywgdGhlIG9ubHkgcGxhY2VzIHdoZXJlIHRoaXMgbWF0dGVycyBpcyBmb3INCj4gY2FjaGUgZmx1 c2hpbmcuDQo+DQo+IFNvIGhlcmUncyBzb21ldGhpbmcgdGhhdCBjb3VsZCBhY3R1YWxseSB3b3Jr Og0KPiAtIFdlIGNhY2hlIHRoZSBtYXBwaW5nLg0KPiAtIFdlIGNhY2hlIGEgYmlkaXJlY3Rpb25h bCBtYXBwaW5nLg0KPiAtIFdlIHB1dCB0aGUgcmlnaHQgZG1hX3NnX3N5bmNfZm9yX2NwdS9kZXZp Y2UgY2FsbHMgaW4gcGxhY2UgZm9yIG1hcC91bm1hcA0KPiAgICB0byBnaXZlIGN1cnJlbnQgaW1w b3J0ZXJzL2V4cG9ydGVycyB0aGUgc2FtZSBiZWhhdmlvdXIgdGhleSdyZSB1c2VkIHRvDQo+ICAg IG5vdy4NCj4NCj4gQW5kIHllcyB0aGUgY2FjaGluZyB3ZSd2ZSBsaWZ0ZWQgbWlnaHQgaGF2ZSBi cm9rZW4gc29tZXRoaW5nIHNvbWV3aGVyZQ0KPiBhbHJlYWR5LiBCdXQgZ2VuZXJhbGx5IHlvdSBv bmx5IGhlYXIgYWJvdXQgdGhhdCBsb25nIHRpbWUgYWZ0ZXIgYmVjYXVzZQ0KPiBhcm0gdmVuZG9y cyByb2xsIGZvcndhcmQgb25jZSBldmVyeSBmZXcgeWVhcnMuIE9yIHNvbWV0aGluZyBsaWtlIHRo YXQuDQo+IC1EYW5pZWwNCj4NCj4+PiBSZWdhcmRzLA0KPj4+IENocmlzdGlhbi4NCj4+Pg0KPj4+ PiBUaGF0J3Mgd2h5IHlvdXIgcHJldmlvdXMgdmVyc2lvbiBtb3ZlZCB0aGUgY2FjaGluZyBpbnRv DQo+Pj4+IG1hcC91bm1hcF9zZywgd2hpY2ggcmVzdXJyZWN0ZWQgdGhlIGxvY2tpbmcgaHlkcmEu DQo+Pj4+DQo+Pj4+IEkgdGhpbmsgd2UncmUgZ29pbmcgYSBiaXQgaW4gY2lyY2xlcyBoZXJlLCBh bmQgSSBkb24ndCBoYXZlIGEgZ29vZCBpZGVhDQo+Pj4+IGVpdGhlciA6LS8NCj4+Pj4gLURhbmll bA0KPj4+Pg0KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghc2d0KQ0KPj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc2d0ID0gRVJSX1BUUigtRU5PTUVNKTsNCj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCBpZiAoSVNfRVJSKHNndCkpIHsNCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dCA9IFBUUl9FUlIoc2d0KTsNCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJy X3VubG9jazsNCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9DQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAg aWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpDQo+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkbWFfcmVzdl91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOw0KPj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIGF0dGFjaC0+c2d0ID0gc2d0Ow0KPj4+Pj4gK8KgwqDCoMKgwqDC oMKgIGF0dGFjaC0+ZGlyID0gRE1BX0JJRElSRUNUSU9OQUw7DQo+Pj4+PiArwqDCoMKgIH0NCj4+ Pj4+ICsNCj4+Pj4+ICDCoMKgwqDCoMKgIHJldHVybiBhdHRhY2g7DQo+Pj4+PiAgwqAgwqAgZXJy X2F0dGFjaDoNCj4+Pj4+ICDCoMKgwqDCoMKgIGtmcmVlKGF0dGFjaCk7DQo+Pj4+PiAgwqDCoMKg wqDCoCBtdXRleF91bmxvY2soJmRtYWJ1Zi0+bG9jayk7DQo+Pj4+PiAgwqDCoMKgwqDCoCByZXR1 cm4gRVJSX1BUUihyZXQpOw0KPj4+Pj4gKw0KPj4+Pj4gK2Vycl91bmxvY2s6DQo+Pj4+PiArwqDC oMKgIGlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQ0KPj4+Pj4gK8KgwqDC oMKgwqDCoMKgIGRtYV9yZXN2X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7DQo+Pj4+PiAr DQo+Pj4+PiArwqDCoMKgIGRtYV9idWZfZGV0YWNoKGRtYWJ1ZiwgYXR0YWNoKTsNCj4+Pj4+ICvC oMKgwqAgcmV0dXJuIEVSUl9QVFIocmV0KTsNCj4+Pj4+ICt9DQo+Pj4+PiArRVhQT1JUX1NZTUJP TF9HUEwoZG1hX2J1Zl9keW5hbWljX2F0dGFjaCk7DQo+Pj4+PiArDQo+Pj4+PiArLyoqDQo+Pj4+ PiArICogZG1hX2J1Zl9hdHRhY2ggLSBXcmFwcGVyIGZvciBkbWFfYnVmX2R5bmFtaWNfYXR0YWNo DQo+Pj4+PiArICogQGRtYWJ1ZjrCoMKgwqAgW2luXcKgwqDCoCBidWZmZXIgdG8gYXR0YWNoIGRl dmljZSB0by4NCj4+Pj4+ICsgKiBAZGV2OsKgwqDCoCBbaW5dwqDCoMKgIGRldmljZSB0byBiZSBh dHRhY2hlZC4NCj4+Pj4+ICsgKg0KPj4+Pj4gKyAqIFdyYXBwZXIgdG8gY2FsbCBkbWFfYnVmX2R5 bmFtaWNfYXR0YWNoKCkgZm9yIGRyaXZlcnMgd2hpY2gNCj4+Pj4+IHN0aWxsIHVzZSBhIHN0YXRp Yw0KPj4+Pj4gKyAqIG1hcHBpbmcuDQo+Pj4+PiArICovDQo+Pj4+PiArc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwNCj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRldmlj ZSAqZGV2KQ0KPj4+Pj4gK3sNCj4+Pj4+ICvCoMKgwqAgcmV0dXJuIGRtYV9idWZfZHluYW1pY19h dHRhY2goZG1hYnVmLCBkZXYsIGZhbHNlKTsNCj4+Pj4+ICDCoCB9DQo+Pj4+PiAgwqAgRVhQT1JU X1NZTUJPTF9HUEwoZG1hX2J1Zl9hdHRhY2gpOw0KPj4+Pj4gIMKgIEBAIC03MTEsMTEgKzc2Niwy MCBAQCB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmDQo+Pj4+PiAqZG1hYnVmLCBz dHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpDQo+Pj4+PiAgwqDCoMKgwqDCoCBpZiAo V0FSTl9PTighZG1hYnVmIHx8ICFhdHRhY2gpKQ0KPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm47DQo+Pj4+PiAgwqAgLcKgwqDCoCBpZiAoYXR0YWNoLT5zZ3QpDQo+Pj4+PiArwqDCoMKg IGlmIChhdHRhY2gtPnNndCkgew0KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkbWFfYnVmX2lz X2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQ0KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZG1hX3Jlc3ZfbG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdiwgTlVMTCk7DQo+Pj4+PiArDQo+Pj4+ PiAgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYWJ1Zi0+b3BzLT51bm1hcF9kbWFfYnVmKGF0dGFjaCwg YXR0YWNoLT5zZ3QsIGF0dGFjaC0+ZGlyKTsNCj4+Pj4+ICDCoCArwqDCoMKgwqDCoMKgwqAgaWYg KGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpDQo+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkbWFfcmVzdl91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOw0KPj4+Pj4g K8KgwqDCoCB9DQo+Pj4+PiArDQo+Pj4+PiAgwqDCoMKgwqDCoCBtdXRleF9sb2NrKCZkbWFidWYt PmxvY2spOw0KPj4+Pj4gK8KgwqDCoCBkbWFfcmVzdl9sb2NrKGRtYWJ1Zi0+cmVzdiwgTlVMTCk7 DQo+Pj4+PiAgwqDCoMKgwqDCoCBsaXN0X2RlbCgmYXR0YWNoLT5ub2RlKTsNCj4+Pj4+ICvCoMKg wqAgZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi0+cmVzdik7DQo+Pj4+PiAgwqDCoMKgwqDCoCBpZiAo ZG1hYnVmLT5vcHMtPmRldGFjaCkNCj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hYnVmLT5v cHMtPmRldGFjaChkbWFidWYsIGF0dGFjaCk7DQo+Pj4+PiAgwqAgQEAgLTc0OSw2ICs4MTMsOSBA QCBzdHJ1Y3Qgc2dfdGFibGUNCj4+Pj4+ICpkbWFfYnVmX21hcF9hdHRhY2htZW50KHN0cnVjdCBk bWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwNCj4+Pj4+ICDCoMKgwqDCoMKgIGlmIChXQVJOX09O KCFhdHRhY2ggfHwgIWF0dGFjaC0+ZG1hYnVmKSkNCj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+Pj4+PiAgwqAgK8KgwqDCoCBpZiAoZG1hX2J1Zl9h dHRhY2htZW50X2lzX2R5bmFtaWMoYXR0YWNoKSkNCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkbWFf cmVzdl9hc3NlcnRfaGVsZChhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7DQo+Pj4+PiArDQo+Pj4+PiAg wqDCoMKgwqDCoCBpZiAoYXR0YWNoLT5zZ3QpIHsNCj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAg LyoNCj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIFR3byBtYXBwaW5ncyB3aXRoIGRpZmZl cmVudCBkaXJlY3Rpb25zIGZvciB0aGUgc2FtZQ0KPj4+Pj4gQEAgLTc2MSw2ICs4MjgsOSBAQCBz dHJ1Y3Qgc2dfdGFibGUNCj4+Pj4+ICpkbWFfYnVmX21hcF9hdHRhY2htZW50KHN0cnVjdCBkbWFf YnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwNCj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IGF0dGFjaC0+c2d0Ow0KPj4+Pj4gIMKgwqDCoMKgwqAgfQ0KPj4+Pj4gIMKgICvCoMKgwqAgaWYg KGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpDQo+Pj4+PiArwqDCoMKgwqDCoMKg wqAgZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJlc3YpOw0KPj4+Pj4gKw0K Pj4+Pj4gIMKgwqDCoMKgwqAgc2dfdGFibGUgPSBhdHRhY2gtPmRtYWJ1Zi0+b3BzLT5tYXBfZG1h X2J1ZihhdHRhY2gsIGRpcmVjdGlvbik7DQo+Pj4+PiAgwqDCoMKgwqDCoCBpZiAoIXNnX3RhYmxl KQ0KPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCBzZ190YWJsZSA9IEVSUl9QVFIoLUVOT01FTSk7 DQo+Pj4+PiBAQCAtNzkzLDkgKzg2MywxNSBAQCB2b2lkIGRtYV9idWZfdW5tYXBfYXR0YWNobWVu dChzdHJ1Y3QNCj4+Pj4+IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLA0KPj4+Pj4gIMKgwqDC oMKgwqAgaWYgKFdBUk5fT04oIWF0dGFjaCB8fCAhYXR0YWNoLT5kbWFidWYgfHwgIXNnX3RhYmxl KSkNCj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuOw0KPj4+Pj4gIMKgICvCoMKgwqAg aWYgKGRtYV9idWZfYXR0YWNobWVudF9pc19keW5hbWljKGF0dGFjaCkpDQo+Pj4+PiArwqDCoMKg wqDCoMKgwqAgZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJlc3YpOw0KPj4+ Pj4gKw0KPj4+Pj4gIMKgwqDCoMKgwqAgaWYgKGF0dGFjaC0+c2d0ID09IHNnX3RhYmxlKQ0KPj4+ Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47DQo+Pj4+PiAgwqAgK8KgwqDCoCBpZiAoZG1h X2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkNCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBk bWFfcmVzdl9hc3NlcnRfaGVsZChhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7DQo+Pj4+PiArDQo+Pj4+ PiAgwqDCoMKgwqDCoCBhdHRhY2gtPmRtYWJ1Zi0+b3BzLT51bm1hcF9kbWFfYnVmKGF0dGFjaCwg c2dfdGFibGUsIGRpcmVjdGlvbik7DQo+Pj4+PiAgwqAgfQ0KPj4+Pj4gIMKgIEVYUE9SVF9TWU1C T0xfR1BMKGRtYV9idWZfdW5tYXBfYXR0YWNobWVudCk7DQo+Pj4+PiBAQCAtMTIxOSwxMCArMTI5 NSwxMiBAQCBzdGF0aWMgaW50IGRtYV9idWZfZGVidWdfc2hvdyhzdHJ1Y3QNCj4+Pj4+IHNlcV9m aWxlICpzLCB2b2lkICp1bnVzZWQpDQo+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIHNlcV9wdXRz KHMsICJcdEF0dGFjaGVkIERldmljZXM6XG4iKTsNCj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAg YXR0YWNoX2NvdW50ID0gMDsNCj4+Pj4+ICDCoCArwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfbG9j ayhidWZfb2JqLT5yZXN2LCBOVUxMKTsNCj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgbGlzdF9m b3JfZWFjaF9lbnRyeShhdHRhY2hfb2JqLCAmYnVmX29iai0+YXR0YWNobWVudHMsDQo+Pj4+PiBu b2RlKSB7DQo+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VxX3ByaW50ZihzLCAi XHQlc1xuIiwgZGV2X25hbWUoYXR0YWNoX29iai0+ZGV2KSk7DQo+Pj4+PiAgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYXR0YWNoX2NvdW50Kys7DQo+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKg IH0NCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkbWFfcmVzdl91bmxvY2soYnVmX29iai0+cmVzdik7 DQo+Pj4+PiAgwqAgwqDCoMKgwqDCoMKgwqDCoMKgIHNlcV9wcmludGYocywgIlRvdGFsICVkIGRl dmljZXMgYXR0YWNoZWRcblxuIiwNCj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGF0dGFjaF9jb3VudCk7DQo+Pj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9k bWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaA0KPj4+Pj4gaW5kZXggZWMyMTJjYjI3 ZmRjLi5hOGY4YjJiODEyZmQgMTAwNjQ0DQo+Pj4+PiAtLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1i dWYuaA0KPj4+Pj4gKysrIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgNCj4+Pj4+IEBAIC00Miw2 ICs0MiwxNyBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgew0KPj4+Pj4gIMKgwqDCoMKgwqDCoMKgICov DQo+Pj4+PiAgwqDCoMKgwqDCoCBib29sIGNhY2hlX3NndF9tYXBwaW5nOw0KPj4+Pj4gIMKgICvC oMKgwqAgLyoqDQo+Pj4+PiArwqDCoMKgwqAgKiBAZHluYW1pY19tYXBwaW5nOg0KPj4+Pj4gK8Kg wqDCoMKgICoNCj4+Pj4+ICvCoMKgwqDCoCAqIElmIHRydWUgdGhlIGZyYW1ld29yayBtYWtlcyBz dXJlIHRoYXQgdGhlIG1hcC91bm1hcF9kbWFfYnVmDQo+Pj4+PiArwqDCoMKgwqAgKiBjYWxsYmFj a3MgYXJlIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgZG1hX3Jlc3Ygb2JqZWN0IGxvY2tlZC4NCj4+ Pj4+ICvCoMKgwqDCoCAqDQo+Pj4+PiArwqDCoMKgwqAgKiBJZiBmYWxzZSB0aGUgZnJhbWV3b3Jr IG1ha2VzIHVyZSB0aGF0IHRoZSBtYXAvdW5tYXBfZG1hX2J1Zg0KPj4+Pj4gK8KgwqDCoMKgICog Y2FsbGJhY2tzIGFyZSBhbHdheXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRtYV9yZXN2IG9iamVjdCBs b2NrZWQuDQo+Pj4+PiArwqDCoMKgwqAgKi8NCj4+Pj4+ICvCoMKgwqAgYm9vbCBkeW5hbWljX21h cHBpbmc7DQo+Pj4+PiArDQo+Pj4+PiAgwqDCoMKgwqDCoCAvKioNCj4+Pj4+ICDCoMKgwqDCoMKg wqAgKiBAYXR0YWNoOg0KPj4+Pj4gIMKgwqDCoMKgwqDCoCAqDQo+Pj4+PiBAQCAtMTA5LDYgKzEy MCw5IEBAIHN0cnVjdCBkbWFfYnVmX29wcyB7DQo+Pj4+PiAgwqDCoMKgwqDCoMKgICogYW55IG90 aGVyIGtpbmQgb2Ygc2hhcmluZyB0aGF0IHRoZSBleHBvcnRlciBtaWdodCB3aXNoIHRvIG1ha2UN Cj4+Pj4+ICDCoMKgwqDCoMKgwqAgKiBhdmFpbGFibGUgdG8gYnVmZmVyLXVzZXJzLg0KPj4+Pj4g IMKgwqDCoMKgwqDCoCAqDQo+Pj4+PiArwqDCoMKgwqAgKiBUaGlzIGlzIGFsd2F5cyBjYWxsZWQg d2l0aCB0aGUgZG1hYnVmLT5yZXN2IG9iamVjdCBsb2NrZWQgd2hlbg0KPj4+Pj4gK8KgwqDCoMKg ICogdGhlIGR5bmFtaWNfbWFwcGluZyBmbGFnIGlzIHRydWUuDQo+Pj4+PiArwqDCoMKgwqAgKg0K Pj4+Pj4gIMKgwqDCoMKgwqDCoCAqIFJldHVybnM6DQo+Pj4+PiAgwqDCoMKgwqDCoMKgICoNCj4+ Pj4+ICDCoMKgwqDCoMKgwqAgKiBBICZzZ190YWJsZSBzY2F0dGVyIGxpc3Qgb2Ygb3IgdGhlIGJh Y2tpbmcgc3RvcmFnZSBvZg0KPj4+Pj4gdGhlIERNQSBidWZmZXIsDQo+Pj4+PiBAQCAtMzI3LDYg KzM0MSw4IEBAIHN0cnVjdCBkbWFfYnVmIHsNCj4+Pj4+ICDCoMKgICogQHNndDogY2FjaGVkIG1h cHBpbmcuDQo+Pj4+PiAgwqDCoCAqIEBkaXI6IGRpcmVjdGlvbiBvZiBjYWNoZWQgbWFwcGluZy4N Cj4+Pj4+ICDCoMKgICogQHByaXY6IGV4cG9ydGVyIHNwZWNpZmljIGF0dGFjaG1lbnQgZGF0YS4N Cj4+Pj4+ICsgKiBAZHluYW1pY19tYXBwaW5nOiB0cnVlIGlmIGRtYV9idWZfbWFwL3VubWFwX2F0 dGFjaG1lbnQoKSBpcw0KPj4+Pj4gY2FsbGVkIHdpdGggdGhlDQo+Pj4+PiArICogZG1hX3Jlc3Yg bG9jayBoZWxkLg0KPj4+Pj4gIMKgwqAgKg0KPj4+Pj4gIMKgwqAgKiBUaGlzIHN0cnVjdHVyZSBo b2xkcyB0aGUgYXR0YWNobWVudCBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZQ0KPj4+Pj4gZG1hX2J1 ZiBidWZmZXINCj4+Pj4+ICDCoMKgICogYW5kIGl0cyB1c2VyIGRldmljZShzKS4gVGhlIGxpc3Qg Y29udGFpbnMgb25lIGF0dGFjaG1lbnQNCj4+Pj4+IHN0cnVjdCBwZXIgZGV2aWNlDQo+Pj4+PiBA QCAtMzQzLDYgKzM1OSw3IEBAIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgew0KPj4+Pj4gIMKg wqDCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCBub2RlOw0KPj4+Pj4gIMKgwqDCoMKgwqAgc3RydWN0 IHNnX3RhYmxlICpzZ3Q7DQo+Pj4+PiAgwqDCoMKgwqDCoCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlv biBkaXI7DQo+Pj4+PiArwqDCoMKgIGJvb2wgZHluYW1pY19tYXBwaW5nOw0KPj4+Pj4gIMKgwqDC oMKgwqAgdm9pZCAqcHJpdjsNCj4+Pj4+ICDCoCB9Ow0KPj4+Pj4gIMKgIEBAIC0zOTQsMTAgKzQx MSwzOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2RtYV9idWYoc3RydWN0DQo+Pj4+PiBkbWFf YnVmICpkbWFidWYpDQo+Pj4+PiAgwqDCoMKgwqDCoCBnZXRfZmlsZShkbWFidWYtPmZpbGUpOw0K Pj4+Pj4gIMKgIH0NCj4+Pj4+ICDCoCArLyoqDQo+Pj4+PiArICogZG1hX2J1Zl9pc19keW5hbWlj IC0gY2hlY2sgaWYgYSBETUEtYnVmIHVzZXMgZHluYW1pYyBtYXBwaW5ncy4NCj4+Pj4+ICsgKiBA ZG1hYnVmOiB0aGUgRE1BLWJ1ZiB0byBjaGVjaw0KPj4+Pj4gKyAqDQo+Pj4+PiArICogUmV0dXJu cyB0cnVlIGlmIGEgRE1BLWJ1ZiBleHBvcnRlciB3YW50cyB0byBiZSBjYWxsZWQgd2l0aA0KPj4+ Pj4gdGhlIGRtYV9yZXN2DQo+Pj4+PiArICogbG9ja2VkLCBmYWxzZSBpZiBpdCBkb2Vzbid0IHdh bnRzIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBsb2NrIGhlbGQuDQo+Pj4+PiArICovDQo+Pj4+PiAr c3RhdGljIGlubGluZSBib29sIGRtYV9idWZfaXNfZHluYW1pYyhzdHJ1Y3QgZG1hX2J1ZiAqZG1h YnVmKQ0KPj4+Pj4gK3sNCj4+Pj4+ICvCoMKgwqAgcmV0dXJuIGRtYWJ1Zi0+b3BzLT5keW5hbWlj X21hcHBpbmc7DQo+Pj4+PiArfQ0KPj4+Pj4gKw0KPj4+Pj4gKy8qKg0KPj4+Pj4gKyAqIGRtYV9i dWZfYXR0YWNobWVudF9pc19keW5hbWljIC0gY2hlY2sgaWYgYSBETUEtYnVmDQo+Pj4+PiBhdHRh Y2htZW50IHVzZXMgZHluYW1pYw0KPj4+Pj4gKyAqIG1hcHBpbnNnDQo+Pj4+PiArICogQGF0dGFj aDogdGhlIERNQS1idWYgYXR0YWNobWVudCB0byBjaGVjaw0KPj4+Pj4gKyAqDQo+Pj4+PiArICog UmV0dXJucyB0cnVlIGlmIGEgRE1BLWJ1ZiBpbXBvcnRlciB3YW50cyB0byBjYWxsIHRoZQ0KPj4+ Pj4gbWFwL3VubWFwIGZ1bmN0aW9ucyB3aXRoDQo+Pj4+PiArICogdGhlIGRtYV9yZXN2IGxvY2sg aGVsZC4NCj4+Pj4+ICsgKi8NCj4+Pj4+ICtzdGF0aWMgaW5saW5lIGJvb2wNCj4+Pj4+ICtkbWFf YnVmX2F0dGFjaG1lbnRfaXNfZHluYW1pYyhzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRh Y2gpDQo+Pj4+PiArew0KPj4+Pj4gK8KgwqDCoCByZXR1cm4gYXR0YWNoLT5keW5hbWljX21hcHBp bmc7DQo+Pj4+PiArfQ0KPj4+Pj4gKw0KPj4+Pj4gIMKgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1l bnQgKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsDQo+Pj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBk ZXZpY2UgKmRldik7DQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldik7DQo+Pj4+PiArc3RydWN0IGRtYV9idWZfYXR0YWNo bWVudCAqDQo+Pj4+PiArZG1hX2J1Zl9keW5hbWljX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1h YnVmLCBzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBib29sIGR5bmFtaWNfbWFwcGluZyk7DQo+Pj4+PiAgwqAgdm9pZCBkbWFfYnVmX2RldGFj aChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLA0KPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFidWZfYXR0YWNoKTsNCj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aCk7DQo+Pj4+PiAgwqAgwqAgc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0 cnVjdA0KPj4+Pj4gZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pOw0KPj4+Pj4gIMKgIEBA IC00MDksNiArNDU1LDcgQEAgc3RydWN0IHNnX3RhYmxlDQo+Pj4+PiAqZG1hX2J1Zl9tYXBfYXR0 YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICosDQo+Pj4+PiAgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsN Cj4+Pj4+ICDCoCB2b2lkIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9h dHRhY2htZW50ICosDQo+Pj4+PiBzdHJ1Y3Qgc2dfdGFibGUgKiwNCj4+Pj4+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsNCj4+Pj4+ ICt2b2lkIGRtYV9idWZfbW92ZV9ub3RpZnkoc3RydWN0IGRtYV9idWYgKmRtYV9idWYpOw0KPj4+ Pj4gIMKgIGludCBkbWFfYnVmX2JlZ2luX2NwdV9hY2Nlc3Moc3RydWN0IGRtYV9idWYgKmRtYV9i dWYsDQo+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gZG1h X2RhdGFfZGlyZWN0aW9uIGRpcik7DQo+Pj4+PiAgwqAgaW50IGRtYV9idWZfZW5kX2NwdV9hY2Nl c3Moc3RydWN0IGRtYV9idWYgKmRtYV9idWYsDQo+Pj4+PiAtLSANCj4+Pj4+IDIuMTcuMQ0KPj4+ Pj4NCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4