Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0C74AC32788 for ; Thu, 11 Oct 2018 07:23:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8A87A2077C for ; Thu, 11 Oct 2018 07:23:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8A87A2077C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=realtek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727168AbeJKOtx (ORCPT ); Thu, 11 Oct 2018 10:49:53 -0400 Received: from rtits2.realtek.com ([211.75.126.72]:38393 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726008AbeJKOtx (ORCPT ); Thu, 11 Oct 2018 10:49:53 -0400 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID w9B7NPkA011277, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id w9B7NPkA011277 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 11 Oct 2018 15:23:26 +0800 Received: from RTITMBSVM01.realtek.com.tw ([fe80::f4ca:82cf:5a3:5d7a]) by RTITCASV01.realtek.com.tw ([::1]) with mapi id 14.03.0415.000; Thu, 11 Oct 2018 15:23:25 +0800 From: Tony Chuang To: Johannes Berg , "kvalo@codeaurora.org" CC: "Larry.Finger@lwfinger.net" , Pkshih , Andy Huang , "sgruszka@redhat.com" , "linux-wireless@vger.kernel.org" Subject: RE: [RFC v3 01/12] rtw88: main files Thread-Topic: [RFC v3 01/12] rtw88: main files Thread-Index: AQHUXxXUH/Zu3N4AK0aJXCSsksiUEqUWYrhA Date: Thu, 11 Oct 2018 07:23:25 +0000 Message-ID: References: <1538565659-29530-1-git-send-email-yhchuang@realtek.com> <1538565659-29530-2-git-send-email-yhchuang@realtek.com> (sfid-20181003_132152_136031_D3015842) <201810081447.w98ElQfu018110@rtits1.realtek.com.tw> In-Reply-To: <201810081447.w98ElQfu018110@rtits1.realtek.com.tw> Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.21.68.123] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBKb2hhbm5lcyBCZXJnIFttYWls dG86am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldF0NCj4gU2VudDogTW9uZGF5LCBPY3RvYmVyIDA4 LCAyMDE4IDEwOjEwIFBNDQo+IFRvOiBUb255IENodWFuZzsga3ZhbG9AY29kZWF1cm9yYS5vcmcN Cj4gQ2M6IExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ7IFBrc2hpaDsgQW5keSBIdWFuZzsgc2dy dXN6a2FAcmVkaGF0LmNvbTsNCj4gbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnDQo+IFN1 YmplY3Q6IFJlOiBbUkZDIHYzIDAxLzEyXSBydHc4ODogbWFpbiBmaWxlcw0KPiANCj4gT24gV2Vk LCAyMDE4LTEwLTAzIGF0IDE5OjIwICswODAwLCB5aGNodWFuZ0ByZWFsdGVrLmNvbSB3cm90ZToN Cj4gPg0KPiA+ICtzdGF0aWMgaW50IHJ0d19vcHNfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LCB1MzIgY2hhbmdlZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHJ0d19kZXYgKnJ0d2RldiA9 IGh3LT5wcml2Ow0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygm cnR3ZGV2LT5tdXRleCk7DQo+ID4gKw0KPiA+ICsJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09O Rl9DSEFOR0VfSURMRSkgew0KPiA+ICsJCWlmIChody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9D T05GX0lETEUpIHsNCj4gPiArCQkJcnR3X2VudGVyX2lwcyhydHdkZXYpOw0KPiA+ICsJCX0gZWxz ZSB7DQo+ID4gKwkJCXJldCA9IHJ0d19sZWF2ZV9pcHMocnR3ZGV2KTsNCj4gPiArCQkJaWYgKHJl dCkgew0KPiA+ICsJCQkJcnR3X2VycihydHdkZXYsICJmYWlsZWQgdG8gbGVhdmUgaWRsZSBzdGF0 ZVxuIik7DQo+ID4gKwkJCQlnb3RvIG91dDsNCj4gPiArCQkJfQ0KPiA+ICsJCX0NCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVM KQ0KPiA+ICsJCXJ0d19zZXRfY2hhbm5lbChydHdkZXYpOw0KPiANCj4gWW91IHJlYWxseSBzaG91 bGQgY29uc2lkZXIgc3VwcG9ydGluZyBjaGFubmVsIGNvbnRleHRzIC0gaXQncyB0aGUgZmFyDQo+ IG1vcmUgbW9kZXJuIEFQSSBhbmQgbGlrZWx5IGdpdmVzIHlvdSBtb3JlIGNvbnRyb2wgZXZlbiBp ZiB5b3Ugc3VwcG9ydA0KPiBvbmx5IGEgc2luZ2xlIGNoYW5uZWwuDQo+IA0KDQpHZXQgaXQsIGJ1 dCBzZWVtcyB0byBuZWVkIHF1aXRlIG9mIHRpbWUgdG8gZ2V0IGl0IGRvd24uDQpXaWxsIHN3aXRj aCB0byBjaGFubmVsIGNvbnRleHQgQVBJcyBhZnRlci4NCg0KPiA+ICtzdGF0aWMgc3RydWN0IHJ0 d192aWZfcG9ydCBydHdfdmlmX3BvcnRbXSA9IHsNCj4gPiArCVswXSA9IHsNCj4gPiArCQkubWFj X2FkZHIJPSB7LmFkZHIgPSAweDA2MTB9LA0KPiA+ICsJCS5ic3NpZAkJPSB7LmFkZHIgPSAweDA2 MTh9LA0KPiA+ICsJCS5uZXRfdHlwZQk9IHsuYWRkciA9IDB4MDEwMCwgLm1hc2sgPSAweDMwMDAw fSwNCj4gPiArCQkuYWlkCQk9IHsuYWRkciA9IDB4MDZhOCwgLm1hc2sgPSAweDdmZn0sDQo+ID4g Kwl9LA0KPiANCj4gZXJyLCB3aGF0J3MgYWxsIHRoaXM/DQo+IA0KPiBBbnl3YXksIHlvdSByZWFs bHkgY2Fubm90IG1ha2UgdGhpcyBzdGF0aWMgLSBhZ2FpbiwgbXVsdGlwbGUgZGV2aWNlcw0KPiBt aWdodCBnZXQgcGx1Z2dlZCBpbi4NCg0KVGhleSBhcmUganVzdCBjb25zdGFudHMsIHdpbGwgbWFy ayB0aGVtIHdpdGggImNvbnN0IHN0YXRpYyINCg0KPiANCj4gPiArCWxpc3RfYWRkX3JjdSgmcnR3 dmlmLT5saXN0LCAmcnR3ZGV2LT52aWZfbGlzdCk7DQo+IA0KPiBJIGRvbid0IHNlZSBhIHJlYXNv biBmb3IgeW91IHRvIG1haW50YWluIHlvdXIgb3duIGxpc3QsIHlvdSBjYW4gYWx3YXlzDQo+IGl0 ZXJhdGUgbWFjODAyMTEncyBsaXN0IGlmIHlvdSByZWFsbHkgbmVlZCB0bz8NCj4gDQo+ID4gKwlz d2l0Y2ggKHZpZi0+dHlwZSkgew0KPiA+ICsJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoNCj4gPiAr CWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoNCj4gPiArCQluZXRfdHlwZSA9IFJUV19O RVRfQVBfTU9ERTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURI T0M6DQo+ID4gKwkJbmV0X3R5cGUgPSBSVFdfTkVUX0FEX0hPQzsNCj4gPiArCQlicmVhazsNCj4g PiArCWRlZmF1bHQ6DQo+ID4gKwkJbmV0X3R5cGUgPSBSVFdfTkVUX05PX0xJTks7DQo+IA0KPiB5 b3UgbWlnaHQgdG8gYWRkIFNUQVRJT04gYW5kIHRoZW4gZmFpbCBpbiB0aGUgZGVmYXVsdCBjYXNl Pw0KDQoNClllYWgsIHN0YXRpb24gc3RhcnRzIHdpdGggTk9fTElOSyB1bnRpbCBpdCdzIGFzc29j aWF0ZWQgd2l0aCBhbiBBUA0KDQoNCj4gDQo+ID4gK3N0YXRpYyB2b2lkIHJ0d19vcHNfcmVtb3Zl X2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCj4gPiArCQkJCSAgICAgc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZikNCj4gPiArew0KPiA+ICsJc3RydWN0IHJ0d19kZXYgKnJ0d2Rl diA9IGh3LT5wcml2Ow0KPiA+ICsJc3RydWN0IHJ0d192aWYgKnJ0d3ZpZiA9IChzdHJ1Y3QgcnR3 X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQo+ID4gKwl1MzIgY29uZmlnID0gMDsNCj4gPiArDQo+ID4g KwlydHdfaW5mbyhydHdkZXYsICJzdG9wIHZpZiAlcE0gb24gcG9ydCAlZCIsIHZpZi0+YWRkciwg cnR3dmlmLT5wb3J0KTsNCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZydHdkZXYtPm11dGV4KTsN Cj4gPiArDQo+ID4gKwlldGhfemVyb19hZGRyKHJ0d3ZpZi0+bWFjX2FkZHIpOw0KPiA+ICsJY29u ZmlnIHw9IFBPUlRfU0VUX01BQ19BRERSOw0KPiA+ICsJcnR3dmlmLT5uZXRfdHlwZSA9IFJUV19O RVRfTk9fTElOSzsNCj4gPiArCWNvbmZpZyB8PSBQT1JUX1NFVF9ORVRfVFlQRTsNCj4gPiArCXJ0 d192aWZfcG9ydF9jb25maWcocnR3ZGV2LCBydHd2aWYsIGNvbmZpZyk7DQo+ID4gKw0KPiA+ICsJ bGlzdF9kZWxfcmN1KCZydHd2aWYtPmxpc3QpOw0KPiA+ICsJc3luY2hyb25pemVfcmN1KCk7DQo+ IA0KPiBUaGF0IHN5bmNocm9uaXplX3JjdSgpIGlzICpyZWFsbHkqIGV4cGVuc2l2ZSwgeW91IHNo b3VsZCBwcm9iYWJseSB1c2UNCj4gbWFjODAyMTEncyBsaXN0IGl0ZXJhdGlvbiB0byBhdm9pZCBp dC4NCj4gDQo+ID4gK3N0YXRpYyB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAq cnR3ZGV2KQ0KPiA+ICt7DQo+ID4gKwl1OCBpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkg PCBSVFdfTUFYX01BQ19JRF9OVU07IGkrKykgew0KPiA+ICsJCWlmICghcnR3ZGV2LT5tYWNpZF91 c2VkW2ldKSB7DQo+ID4gKwkJCXJ0d2Rldi0+bWFjaWRfdXNlZFtpXSA9IHRydWU7DQo+ID4gKwkJ CXJldHVybiBpOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gaTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnR3X3JlbGVhc2VfbWFjaWQoc3RydWN0IHJ0 d19kZXYgKnJ0d2RldiwgdTggbWFjX2lkKQ0KPiA+ICt7DQo+ID4gKwlydHdkZXYtPm1hY2lkX3Vz ZWRbbWFjX2lkXSA9IGZhbHNlOw0KPiA+ICt9DQo+IA0KPiBUaGlzIHdvdWxkIGJlIHdheSBzaW1w bGVyIChhbmQgdXNlIG11Y2ggbGVzcyBtZW1vcnkpIHdpdGggYSBiaXRtYXAgYW5kDQo+IGZpbmRf Zmlyc3RfemVyb19iaXQoKS4NCg0KT0ssIGl0IGxvb2tzIGJldHRlci4NCg0KPiANCj4gPiArc3Rh dGljIGludCBydHdfb3BzX3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQo+ID4gKwkJ CSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQo+ID4gKwkJCSAgIHN0cnVjdCBpZWVlODAy MTFfc3RhICpzdGEpDQo+IA0KPiBZb3UgbWlnaHQgd2FudCB0byB1c2Ugc3RhX3N0YXRlKCkgaW5z dGVhZCBvZiBzdGFfYWRkKCksIGl0J3MgbGlrZWx5IHRoZQ0KPiBiZXR0ZXIgQVBJLg0KDQpZZWFo IEkga25vdyBzdGFfc3RhdGUgaXMgdGhlIGJldHRlciB2ZXJzaW9uIG9mIHN0YV9hZGQvc3RhX3Jl bW92ZS4NClNob3VsZCBtYWtlIGEgdHJhbnNpdGlvbiB0byBnZXQgbW9yZSBjb250cm9sIGFib3V0 IHRoZSBzdGF0ZXMuDQpCdXQgaXQgc2VlbXMgdG8gYmUgbm90IGEgcmVhbGx5IHVyZ2VudCByZXF1 aXJlbWVudCBmb3Igbm93Lg0KQW55d2F5LCBpdCBpcyBhIGdvb2QgcG9pbnQsIHdlIHNob3VsZCBm b2xsb3cgc3RhX3N0YXRlIGluIHRoZSBmdXR1cmUuDQoNCj4gDQo+ID4gKwlzaS0+c3RhID0gc3Rh Ow0KPiA+ICsJc2ktPnZpZiA9IHZpZjsNCj4gPiArCXNpLT5pbml0X3JhX2x2ID0gMTsNCj4gPiAr CWV3bWFfcnNzaV9pbml0KCZzaS0+YXZnX3Jzc2kpOw0KPiANCj4gV2hhdCdzIHRoaXMgZm9yIHRo YXQgbWFjODAyMTEgZG9lc24ndCBkbyBhbHJlYWR5Pw0KPiANCj4gPiArCXJ0d191cGRhdGVfc3Rh X2luZm8ocnR3ZGV2LCBzaSk7DQo+ID4gKwlydHdfZndfbWVkaWFfc3RhdHVzX3JlcG9ydChydHdk ZXYsIHNpLT5tYWNfaWQsIHRydWUpOw0KPiA+ICsNCj4gPiArCWxpc3RfYWRkX3RhaWxfcmN1KCZz aS0+bGlzdCwgJnJ0d3ZpZi0+c3RhX2xpc3QpOw0KPiANCj4gQWdhaW4sIHlvdSBzaG91bGRuJ3Qg bmVlZCB0byBrZWVwIHlvdXIgb3duIGxpc3QgaW4gdGhlIGRyaXZlciwgbWFjODAyMTENCj4gZG9l cyBhbGwgdGhhdCBib29ra2VlcGluZyBmb3IgeW91Lg0KPiANCj4gPiArc3RhdGljIGludCBydHdf b3BzX3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQo+ID4gKwkJCSAgICAgIHN0 cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQo+ID4gKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFf c3RhICpzdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBydHdfZGV2ICpydHdkZXYgPSBody0+cHJp djsNCj4gPiArCXN0cnVjdCBydHdfc3RhX2luZm8gKnNpID0gKHN0cnVjdCBydHdfc3RhX2luZm8g KilzdGEtPmRydl9wcml2Ow0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJnJ0d2Rldi0+bXV0ZXgp Ow0KPiA+ICsNCj4gPiArCXJ0d19yZWxlYXNlX21hY2lkKHJ0d2Rldiwgc2ktPm1hY19pZCk7DQo+ ID4gKwlydHdfZndfbWVkaWFfc3RhdHVzX3JlcG9ydChydHdkZXYsIHNpLT5tYWNfaWQsIGZhbHNl KTsNCj4gPiArDQo+ID4gKwlsaXN0X2RlbF9yY3UoJnNpLT5saXN0KTsNCj4gPiArCXN5bmNocm9u aXplX3JjdSgpOw0KPiANCj4gVGhpcyBzeW5jaHJvbml6ZV9yY3UoKSB3aWxsIGh1cnQgeW91ciBy b2FtaW5nIHBlcmZvcm1hbmNlLg0KPiANCj4gPiArCXN3aXRjaCAoa2V5LT5jaXBoZXIpIHsNCj4g PiArCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6DQo+ID4gKwkJaHdfa2V5X3R5cGUgPSBS VFdfQ0FNX1dFUDQwOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBXTEFOX0NJUEhFUl9TVUlU RV9XRVAxMDQ6DQo+ID4gKwkJaHdfa2V5X3R5cGUgPSBSVFdfQ0FNX1dFUDEwNDsNCj4gPiArCQli cmVhazsNCj4gPiArCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoNCj4gPiArCQlod19rZXlf dHlwZSA9IFJUV19DQU1fVEtJUDsNCj4gPiArCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlf RkxBR19HRU5FUkFURV9NTUlDOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBXTEFOX0NJUEhF Ul9TVUlURV9DQ01QOg0KPiA+ICsJCWh3X2tleV90eXBlID0gUlRXX0NBTV9BRVM7DQo+ID4gKwkJ a2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfU1dfTUdNVF9UWDsNCj4gPiArCQlicmVh azsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIC1FTk9UU1VQUDsNCj4gPiArCX0NCj4g DQo+IFRoaXMgd2lsbCBwcm92b2tlIGVycm9yIG1lc3NhZ2VzIHRvIGJlIHByaW50ZWQgZm9yIGUu Zy4gQ01BQyBrZXlzLCBvciBkbw0KPiB5b3UgcmVhbGx5IG5vdCBzdXBwb3J0IHByb3RlY3RlZCBt YW5hZ2VtZW50IGZyYW1lcz8gSWYgeW91IHdlcmUgdG8gcGljaw0KPiAiLUVPUE5PVFNVUFAiIHRo ZW4gbm8gZXJyb3JzIHdvdWxkIGJlIHByaW50ZWQuDQoNCldlIGRvIG5vdCBzdXBwb3J0IFBNRiBo dyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gbm93LCBwZXJoYXBzIHdlIG5lZWQNCnRvIHJlZ2lzdGVy IHRoZSBjaXBoZXJfc2NoZW1lcyB3aGVuIGllZWU4MDIxMV9yZWdpc3Rlcl9ody4NCg0KRXZlbiBp ZiBIVyBkb2VzIG5vdCBzdXBwb3J0IGl0LCBJIHRoaW5rIG1hYzgwMjExIGNhbiB1c2UgU1cgZW5j cnlwdGlvbi9kZWNyeXB0aW9uDQphZnRlciBkcml2ZXIgZmFpbGVkIHRvIHVwbG9hZCBrZXkgdG8g aGFyZHdhcmU/DQpTbyBpZiBkcml2ZXIgaGFzIG5vdCBkZWNsYXJlZCBNRlBfQ0FQQUJMRSwgdGhl IG1hYzgwMjExIHdpbGwgaWdub3JlIGl0IGFuZA0Kd3BhX3N1cHBsaWNhbnQgd2lsbCBndWVzcyB3 ZSBjYW5ub3QgcGVyZm9ybSBNRlAuIEl0IGlzIHN0cmFuZ2UuDQoNCg0KPiANCj4gPiArCW11dGV4 X2xvY2soJnJ0d2Rldi0+bXV0ZXgpOw0KPiA+ICsNCj4gPiArCWlmIChrZXktPmZsYWdzICYgSUVF RTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSB7DQo+ID4gKwkJaHdfa2V5X2lkeCA9IHJ0d19zZWNf Z2V0X2ZyZWVfY2FtKHNlYyk7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCS8qIG11bHRpcGxlIGlu dGVyZmFjZXM/ICovDQo+ID4gKwkJaHdfa2V5X2lkeCA9IGtleS0+a2V5aWR4Ow0KPiA+ICsJfQ0K PiANCj4gSW5kZWVkLCBnb29kIHF1ZXN0aW9uIDotKQ0KPiANCg0KV29ya2luZyBvbiB0aGF0DQoN Cj4gDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHJ0 d19yYXRldGFibGVfMmdbXSA9IHsNCj4gPiArCXsuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAw eDAwLH0sDQo+ID4gKwl7LmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gMHgwMSx9LA0KPiA+ICsJ ey5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDB4MDIsfSwNCj4gPiArCXsuYml0cmF0ZSA9IDEx MCwgLmh3X3ZhbHVlID0gMHgwMyx9LA0KPiA+ICsJey5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9 IDB4MDQsfSwNCj4gPiArCXsuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSAweDA1LH0sDQo+ID4g Kwl7LmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDB4MDYsfSwNCj4gPiArCXsuYml0cmF0ZSA9 IDE4MCwgLmh3X3ZhbHVlID0gMHgwNyx9LA0KPiA+ICsJey5iaXRyYXRlID0gMjQwLCAuaHdfdmFs dWUgPSAweDA4LH0sDQo+ID4gKwl7LmJpdHJhdGUgPSAzNjAsIC5od192YWx1ZSA9IDB4MDksfSwN Cj4gPiArCXsuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gMHgwYSx9LA0KPiA+ICsJey5iaXRy YXRlID0gNTQwLCAuaHdfdmFsdWUgPSAweDBiLH0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0 aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHJ0d19yYXRldGFibGVfNWdbXSA9IHsNCj4gPiArCXsu Yml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSAweDA0LH0sDQo+ID4gKwl7LmJpdHJhdGUgPSA5MCwg Lmh3X3ZhbHVlID0gMHgwNSx9LA0KPiA+ICsJey5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSAw eDA2LH0sDQo+ID4gKwl7LmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDB4MDcsfSwNCj4gPiAr CXsuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gMHgwOCx9LA0KPiA+ICsJey5iaXRyYXRlID0g MzYwLCAuaHdfdmFsdWUgPSAweDA5LH0sDQo+ID4gKwl7LmJpdHJhdGUgPSA0ODAsIC5od192YWx1 ZSA9IDB4MGEsfSwNCj4gPiArCXsuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMHgwYix9LA0K PiA+ICt9Ow0KPiANCj4gVGhlIDVHIG9uZSBpcyB0aGUgc2FtZSBhcyB0aGUgMkcgb25lIHdpdGhv dXQgdGhlIGZpcnN0IDQgZW50cmllcywgc28geW91DQo+IGNvdWxkIGRvIHJ0d19yYXRldGFibGVf MmcrNCB0byBhdm9pZCBkdXBsaWNhdGluZyB0aGUgZGF0YS4NCg0KT0sNCg0KPiANCj4gPiArc3Rh dGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgcnR3X2JhbmRfMmdoeiA9IHsNCj4g PiArCS5iYW5kID0gTkw4MDIxMV9CQU5EXzJHSFosDQo+ID4gKw0KPiA+ICsJLmNoYW5uZWxzID0g cnR3X2NoYW5uZWx0YWJsZV8yZywNCj4gPiArCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShydHdf Y2hhbm5lbHRhYmxlXzJnKSwNCj4gPiArDQo+ID4gKwkuYml0cmF0ZXMgPSBydHdfcmF0ZXRhYmxl XzJnLA0KPiA+ICsJLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHJ0d19yYXRldGFibGVfMmcpLA0K PiA+ICsNCj4gPiArCS5odF9jYXAgPSB7MH0sDQo+ID4gKwkudmh0X2NhcCA9IHswfSwNCj4gPiAr fTsNCj4gDQo+IEkgc2VlIG5vIHJlYXNvbiB0byBpbml0IHRoZSBodC92aHQgY2FwPw0KPiANCj4g PiArc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgcnR3X2JhbmRfNWdoeiA9 IHsNCj4gPiArCS5iYW5kID0gTkw4MDIxMV9CQU5EXzVHSFosDQo+ID4gKw0KPiA+ICsJLmNoYW5u ZWxzID0gcnR3X2NoYW5uZWx0YWJsZV81ZywNCj4gPiArCS5uX2NoYW5uZWxzID0gQVJSQVlfU0la RShydHdfY2hhbm5lbHRhYmxlXzVnKSwNCj4gPiArDQo+ID4gKwkuYml0cmF0ZXMgPSBydHdfcmF0 ZXRhYmxlXzVnLA0KPiA+ICsJLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHJ0d19yYXRldGFibGVf NWcpLA0KPiA+ICsNCj4gPiArCS5odF9jYXAgPSB7MH0sDQo+ID4gKwkudmh0X2NhcCA9IHswfSwN Cj4gPiArfTsNCj4gDQo+IGRpdG8NCj4gDQo+ID4gK3N0YXRpYyB2b2lkIHJ0d193YXRjaF9kb2df d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBydHdf ZGV2ICpydHdkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19kZXYsDQo+ID4gKwkJ CQkJICAgICAgd2F0Y2hfZG9nX3dvcmsud29yayk7DQo+ID4gKwlzdHJ1Y3QgcnR3X3ZpZiAqcnR3 dmlmOw0KPiA+ICsNCj4gPiArCWlmICghcnR3X2ZsYWdfY2hlY2socnR3ZGV2LCBSVFdfRkxBR19S VU5OSU5HKSkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJaWVlZTgwMjExX3F1ZXVlX2Rl bGF5ZWRfd29yayhydHdkZXYtPmh3LA0KPiAmcnR3ZGV2LT53YXRjaF9kb2dfd29yaywNCj4gPiAr CQkJCSAgICAgUlRXX1dBVENIX0RPR19ERUxBWV9USU1FKTsNCj4gDQo+IFlvdSdyZSBhd2FyZSBv ZiB0aGUgcG93ZXIgY29zdCBvZiB3YWtpbmcgdXAgZXZlcnkgMiBzZWNvbmRzPyBUaGF0J3MgYQ0K PiByZWFsbHkgYmFkIGlkZWEsIGluIGdlbmVyYWwsIGF0IHRoZSB2ZXJ5IGxlYXN0IHlvdSBzaG91 bGQgdXNlIGEgbW9yZQ0KPiBwb3dlciBlZmZpY2llbnQgc2NoZWR1bGluZyBoZXJlIHRvIGNvbWJp bmUgd2l0aCBvdGhlciB3YWtldXBzDQo+IChyb3VuZF9qaWZmaWVzX3JlbGF0aXZlLCBvciBzbyku DQoNCg0KWWVhaCBJIGtuZXcgaXQsIGJ1dCBzbyBmYXIgd2UgY2FuIG9ubHkgd29yayBsaWtlIHRo aXMuLi4NCldpbGwgdXNlIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUgdG8gY29tYmluZSB0aGUgQ1BV IHdha2V1cHMuDQoNCg0KPiANCj4gPiArCS8qIGNoZWNrIGlmIHdlIGNhbiBlbnRlciBscHMgKi8N Cj4gPiArCXJ0d19scHNfZW50ZXJfY2hlY2socnR3ZGV2KTsNCj4gPiArDQo+ID4gKwkvKiByZXNl dCB0eC9yeCBzdGF0aWN0aWNzICovDQo+ID4gKwlydHdkZXYtPnN0YXRzLnR4X3VuaWNhc3QgPSAw Ow0KPiA+ICsJcnR3ZGV2LT5zdGF0cy5yeF91bmljYXN0ID0gMDsNCj4gPiArCXJ0d2Rldi0+c3Rh dHMudHhfY250ID0gMDsNCj4gPiArCXJ0d2Rldi0+c3RhdHMucnhfY250ID0gMDsNCj4gPiArCXJj dV9yZWFkX2xvY2soKTsNCj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJ0d3ZpZiwgJnJ0 d2Rldi0+dmlmX2xpc3QsIGxpc3QpIHsNCj4gPiArCQlydHd2aWYtPnN0YXRzLnR4X3VuaWNhc3Qg PSAwOw0KPiA+ICsJCXJ0d3ZpZi0+c3RhdHMucnhfdW5pY2FzdCA9IDA7DQo+ID4gKwkJcnR3dmlm LT5zdGF0cy50eF9jbnQgPSAwOw0KPiA+ICsJCXJ0d3ZpZi0+c3RhdHMucnhfY250ID0gMDsNCj4g PiArCX0NCj4gPiArCXJjdV9yZWFkX3VubG9jaygpOw0KPiANCj4gPz8/DQo+IA0KPiB3aHkgc2hv dWxkIHN0YXRpc3RpY3MgYmUgcmVzZXQgZXZ5ZXIgMiBzZWNvbmRzPw0KDQpBbGwgb2Ygb3VyIHN0 YXRpc3RpY3MgYXJlIGNvdW50ZWQgaW4gMiBzZWNvbmRzLCBleC4gcGt0cywgYnl0ZXMsIGZhIC4u Lg0KU28ganVzdCByZXNldCB0aGVtIGV2ZXJ5IHNlY29uZHMuDQpJZiB0aGVyZSBpcyBhIG5ldyBm ZWF0dXJlIHRoYXQgcmVxdWlyZXMgbW9yZSB0aW1lIHRvIGFjY3VtdWxhdGUgZGF0YSwNCnRoZW4g d2Ugd2lsbCBhZGQgaXQgYW5kIGl0IHdpbGwgbm90IGJlIHJlc2V0IGluIHRoZSAyLXNlY29uZCB3 YXRjaGRvZw0KDQo+IA0KPiA+ICsNCj4gPiArCXN3aXRjaCAoYndfY2FwKSB7DQo+ID4gKwljYXNl IEVGVVNFX0hXX0NBUF9JR05PUkU6DQo+ID4gKwljYXNlIEVGVVNFX0hXX0NBUF9TVVBQX0JXODA6 DQo+ID4gKwkJYncgfD0gQklUKFJUV19DSEFOTkVMX1dJRFRIXzgwKTsNCj4gPiArCS8qIGZhbGwg dGhyb3VnaCAqLw0KPiA+ICsJY2FzZSBFRlVTRV9IV19DQVBfU1VQUF9CVzQwOg0KPiA+ICsJCWJ3 IHw9IEJJVChSVFdfQ0hBTk5FTF9XSURUSF80MCk7DQo+ID4gKwkvKiBmYWxsIHRocm91Z2ggKi8N Cj4gDQo+IEknZCBwcm9iYWJseSBpbmRlbnQgdGhlIGNvbW1lbnRzIGJ5IG9uZSBtb3JlIHRhYiAo dG8gYmUgd2hlcmUgdGhlDQo+ICJicmVhayIgd291bGQgYmUpLCBidXQgdGhhdCdzIHJlYWxseSBh IHN0eWxlIG5pdC4NCg0KT0sNCg0KPiANCj4gPiArCWNhc2UgV0lSRUxFU1NfT0ZETSB8IFdJUkVM RVNTX0hUOg0KPiANCj4gQnR3IC4uLiB5b3UgaGF2ZSBhbGwgdGhpcyBIVCBzdHVmZiBhbmQgNDAv ODAgTUh6IGJ1dCBubyBIVC9WSFQNCj4gY2FwYWJpbGl0aWVzPw0KPiANCj4gPiArc3RhdGljIHZv aWQgcnR3X2luaXRfaHRfY2FwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsDQo+ID4gKwkJCSAgICBz dHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCkNCj4gPiArew0KPiANCj4gT2guLi4g b2suDQo+IA0KPiA+ICtzdGF0aWMgdm9pZCBydHdfc2V0X3N1cHBvcnRlZF9iYW5kKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LA0KPiA+ICsJCQkJICAgc3RydWN0IHJ0d19jaGlwX2luZm8gKmNoaXAp DQo+ID4gK3sNCj4gPiArCXN0cnVjdCBydHdfZGV2ICpydHdkZXYgPSBody0+cHJpdjsNCj4gPiAr CXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOw0KPiA+ICsNCj4gPiArCWlm IChjaGlwLT5iYW5kICYgUlRXX0JBTkRfMkcpIHsNCj4gPiArCQlzYmFuZCA9IGttYWxsb2Moc2l6 ZW9mKCpzYmFuZCksIEdGUF9LRVJORUwpOw0KPiA+ICsJCW1lbWNweShzYmFuZCwgJnJ0d19iYW5k XzJnaHosIHNpemVvZihydHdfYmFuZF8yZ2h6KSk7DQo+IA0KPiBlcnJvciBjaGVjaywga21lbWR1 cCwgbWFrZSBydHdfYmFuZF8yZ2h6IGNvbnN0Lg0KPiANCj4gPiArCWlmIChjaGlwLT5iYW5kICYg UlRXX0JBTkRfNUcpIHsNCj4gPiArCQlzYmFuZCA9IGttYWxsb2Moc2l6ZW9mKCpzYmFuZCksIEdG UF9LRVJORUwpOw0KPiA+ICsJCW1lbWNweShzYmFuZCwgJnJ0d19iYW5kXzVnaHosIHNpemVvZihy dHdfYmFuZF81Z2h6KSk7DQo+IA0KPiBkaXR0bw0KDQpPSw0KDQo+IA0KPiA+ICsJaWYgKGNoaXAt PmJhbmQgJiBSVFdfQkFORF8yRykNCj4gPiArCQlrZnJlZShody0+d2lwaHktPmJhbmRzW05MODAy MTFfQkFORF8yR0haXSk7DQo+ID4gKwlpZiAoY2hpcC0+YmFuZCAmIFJUV19CQU5EXzVHKQ0KPiA+ ICsJCWtmcmVlKGh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzVHSFpdKTsNCj4gDQo+IERv bid0IHJlYWxseSBuZWVkIHRoZSBpZiBpbiBib3RoIGNhc2VzLCBrZnJlZShOVUxMKSBpcyBmaW5l Lg0KDQpPSw0KDQo+IA0KPiA+ICtzdGF0aWMgaW50IHJ0d19sb2FkX2Zpcm13YXJlKHN0cnVjdCBy dHdfZGV2ICpydHdkZXYsIGNvbnN0IGNoYXIgKmZ3X25hbWUpDQo+ID4gK3sNCj4gPiArCXN0cnVj dCBydHdfZndfc3RhdGUgKmZ3ID0gJnJ0d2Rldi0+Znc7DQo+ID4gKwljb25zdCBzdHJ1Y3QgZmly bXdhcmUgKmZpcm13YXJlOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlyZXQgPSByZXF1 ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgZndfbmFtZSwgcnR3ZGV2LT5kZXYpOw0KPiANCj4gWW91 IHNob3VsZCB1c2UgcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoKSwgb3RoZXJ3aXNlIHlvdSBjYW4g c3RhbGwgdGhlDQo+IGJvb3QgaWYgeW91ciBkcml2ZXIgaXMgYnVpbHQtaW4gKG9yIGxpdmVzIGlu IGluaXRyYW1mcz8pLg0KPiANCj4gPiArRVhQT1JUX1NZTUJPTChydHdfY29yZV9pbml0KTsNCj4g DQo+IFlvdSBjb3VsZCBhbHNvIHJlbW92ZSB0aGUgZXhwb3J0cyBpZiB5b3UgcHV0IHRoZSBwY2ku YyBpbnRvIHRoZSBzYW1lDQo+IG1vZHVsZS4gRHVubm8sIG1heWJlIGl0J3Mgc29tZSBzb3J0IG9m IGZ1dHVyZS1wcm9vZmluZywgYnV0IGlmIHlvdSdyZQ0KPiBnb2luZyB0byBoYXZlIG9uZSBtb2R1 bGUgd2l0aCAqZXZlcnl0aGluZyogZXhjZXB0IGZvciB+MS4yayBMT0MgUENJLCBpdA0KPiBzZWVt cyBoYXJkbHkgd29ydGggaXQgKGVzcGVjaWFsbHkgc2luY2UgaXQncyBvbmx5IHVzZWZ1bCBpZiB5 b3UgbG9hZA0KPiBib3RoIGFueXdheSkNCj4gDQo+ID4gKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBN RlBfQ0FQQUJMRSk7DQo+IA0KPiBzbyB5b3UgZG8gaGF2ZSBNRlAgLSBJIGd1ZXNzIHlvdSBzaG91 bGQgdGVzdCBpdCBhbmQgY2hlY2sgZm9yIHNwdXJpb3VzDQo+IGhhcmR3YXJlIGNyeXB0byBtZXNz YWdlcw0KDQpXZSBkb24ndCBoYXZlIG5vdywgc2hvdWxkIHJlbW92ZSB0aGVtLiBCdXQgYXMgSSBo YXZlIG1lbnRpb25lZCwgaWYgd2UgZG9uJ3QNCmRlY2xhcmUgaXQgaGVyZSwgbWFjODAyMTEgd2ls bCBkaXNjYXJkIHRoZSBjaXBoZXIgYW5kIHBhc3MgaXQgdG8gd2lwaHkuDQpBbmQgd2Ugc3RpbGwg c2hvdWxkIGJlIGFibGUgdG8gd29yayB3aXRoIE1GUCBiZWNhdXNlIG1hYzgwMjExIGNhbiBkbw0K c29mdHdhcmUgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGZvciB1cy4NCg0KPiANCj4gPiArI2RlZmlu ZSBMRV9CSVRTX0NMRUFSRURfVE9fNEJZVEUoYWRkciwgb2Zmc2V0LCBsZW4pCQkJCVwNCj4gPiAr CShsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKShhZGRyKSkgJiAofkdFTk1BU0sob2Zmc2V0ICsgbGVu IC0gMSwgb2Zmc2V0KSkpDQo+ID4gKyNkZWZpbmUgTEVfQklUU19UT180QllURShhZGRyLCBvZmZz ZXQsIGxlbikJCQkJCVwNCj4gPiArCSgobGUzMl90b19jcHUoKigoX19sZTMyICopKGFkZHIpKSkg Pj4gKG9mZnNldCkpICYgR0VOTUFTSyhsZW4gLSAxLCAwKSkNCj4gPiArI2RlZmluZSBTRVRfQklU U19UT19MRV80QllURShhZGRyLCBvZmZzZXQsIGxlbiwgdmFsKQkJCQlcDQo+ID4gKwlkbyB7CQkJ CQkJCQkJXA0KPiA+ICsJCSooKF9fbGUzMiAqKShhZGRyKSkgPQkJCQkJCVwNCj4gPiArCQljcHVf dG9fbGUzMigJCQkJCQkJXA0KPiA+ICsJCUxFX0JJVFNfQ0xFQVJFRF9UT180QllURShhZGRyLCBv ZmZzZXQsIGxlbikgfAkJCVwNCj4gPiArCQkoKCgodTMyKXZhbCkgJiBHRU5NQVNLKGxlbiAtIDEs IDApKSA8PCAob2Zmc2V0KSkJCVwNCj4gPiArCQkpOwkJCQkJCQkJXA0KPiA+ICsJfSB3aGlsZSAo MCkNCj4gDQo+IFNlZW1zIGxpa2UgdGhhdCBsaWtlbHkgaGFzIGFsaWdubWVudCBpc3N1ZXMgYWdh aW4uDQo+IA0KPiA+ICtzdHJ1Y3QgcnR3XzJnXzFzX3B3cl9pZHhfZGlmZiB7DQo+ID4gKyNpZmRl ZiBfX0xJVFRMRV9FTkRJQU4NCj4gPiArCXM4IG9mZG06NDsNCj4gPiArCXM4IGJ3MjA6NDsNCj4g PiArI2Vsc2UNCj4gPiArCXM4IGJ3MjA6NDsNCj4gPiArCXM4IG9mZG06NDsNCj4gPiArI2VuZGlm DQo+IA0KPiBZb3UgaGF2ZSB0aGlzIGEgbG90LCBidXQgSU1ITyBpdCdzIGdlbmVyYWxseSBub3Qg YSBnb29kIGlkZWEgdG8gdHJ5IHRvDQo+IHVzZSBiaXRmaWVsZHMgd2hlbiB5b3UgYWN0dWFsbHkg bmVlZCBhY2N1cmF0ZSBiaXQgbGF5b3V0IGZvciBoYXJkd2FyZS4NCj4gDQo+IFRha2UgYSBsb29r IGF0IGluY2x1ZGUvbGludXgvYml0ZmllbGQuaCBmb3IgYW4gYWx0ZXJuYXRpdmUuDQoNCg0KWW91 J3JlIHJpZ2h0LiBGb3VuZCB0aGF0IGEgcGF0Y2ggc3VibWl0dGVkIGluIDIwMTcgRGVjLiB0aGF0 IGhhbmRsZXMgaG9zdC0gbGl0dGxlDQp3aXRoIG1hY3JvcywgdGhhdCBpcyByZWFsbHkgaGVscGZ1 bCwgd2lsbCByZXBsYWNlIHRoZW0gYWxsDQoNCg0KPiANCj4gPiArc3RydWN0IHJ0d19jYW1fZW50 cnkgew0KPiA+ICsJYm9vbCB1c2VkOw0KPiA+ICsJYm9vbCB2YWxpZDsNCj4gPiArCWJvb2wgZ3Jv dXA7DQo+ID4gKwl1OCBhZGRyW0VUSF9BTEVOXTsNCj4gPiArCXU4IGh3X2tleV90eXBlOw0KPiA+ ICsJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Ow0KPiA+ICt9Ow0KPiANCj4gSSdkIGFs c28gYXJndWUgeW91IHNob3VsZCBzcGxpdCBoYXJkd2FyZS9maXJtd2FyZSBBUEkgdGhpbmdzIChs aWtlIG11Y2gNCj4gb2YgdGhpcyBmaWxlKSBmcm9tIGRyaXZlci1pbXBsZW1lbnRhdGlvbiB0aGlu Z3MgKGxpa2UgdGhpcyBhbmQgbW9yZQ0KPiBiZWxvdykgLSBpdCBtYWtlcyB0aGUgZHJpdmVyIGVh c2llciB0byBtYWludGFpbiBzaW5jZSBvbmUgY2FuIHRoZW4gbGVhdmUNCj4gdGhlIGhhcmR3YXJl L2Zpcm13YXJlIHRoaW5ncyBwcmV0dHkgbXVjaCBhbG9uZSBmb3IgdGhlIG1vc3QgcGFydC4gT3Is IGlmDQo+IHRoYXQgY2hhbmdlcywganVzdCBoYXMgdG8gbG9vayB0aGVyZS4gVGhlIHNlcGFyYXRp b24gaXMgZ29vZC4NCj4gDQo+ID4gK3N0cnVjdCBydHdfc2VjX2Rlc2Mgew0KPiA+ICsJLyogc2Vh cmNoIHN0cmF0ZWd5ICovDQo+ID4gKwlib29sIGRlZmF1bHRfa2V5X3NlYXJjaDsNCj4gDQo+IElu Y2lkZW50YWwgbml0OiB0aGF0IHNlZW1zIGEgYml0IHN0cmFuZ2UsIHRoYXQncyBub3QgYSAic3Ry YXRlZ3kgZW51bSINCj4gb3Igc28/DQo+IA0KPiA+ICsJLyogcHJvdGVjdGVkIGJ5IHJjdSAqLw0K PiA+ICsJc3RydWN0IGxpc3RfaGVhZCBzdGFfbGlzdDsNCj4gDQo+IFJDVSBkb2Vzbid0IHByb3Rl Y3QgYSBsaXN0IGJ5IGl0c2VsZiAtIHlvdSBuZWVkIHRvIHNheSAicHJvdGVjdGVkIGJ5IHh5eg0K PiBtdXRleCwgcmVhZGVycyBjYW4gdXNlIFJDVSIgb3Igc28uDQo+IA0KPiA+ICsjaW5jbHVkZSAi aGNpLmgiDQo+IA0KPiBVaCwgSSB0aGluayBpdCdzIG1vcmUgY3VzdG9tYXJ5IHRvIHB1dCBpbmNs dWRlcyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLA0KPiBhbmQgaWYgeW91IGNhbid0IHRoYXQncyBw cm9iYWJseSBhIHNpZ24geW91IGhhdmVuJ3Qgc3BsaXQgdGhpbmdzIHVwDQo+IHdlbGwuDQo+IA0K PiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBydHdfc3RhX2luZm8gKmdldF9oZHJfc3RhKHN0cnVj dCBydHdfZGV2ICpydHdkZXYsDQo+ID4gKwkJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYsDQo+ID4gKwkJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBydHdfdmlmICpydHd2aWY7DQo+ID4gKwlzdHJ1Y3QgcnR3X3N0YV9p bmZvICpzaTsNCj4gPiArCXN0cnVjdCBydHdfc3RhX2luZm8gKnRhcmdldCA9IE5VTEw7DQo+ID4g Kw0KPiA+ICsJcmN1X3JlYWRfbG9jaygpOw0KPiA+ICsJaWYgKHZpZikgew0KPiA+ICsJCXJ0d3Zp ZiA9IChzdHJ1Y3QgcnR3X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQo+ID4gKwkJbGlzdF9mb3JfZWFj aF9lbnRyeShzaSwgJnJ0d3ZpZi0+c3RhX2xpc3QsIGxpc3QpIHsNCj4gPiArCQkJaWYgKGV0aGVy X2FkZHJfZXF1YWwoc2ktPnN0YS0+YWRkciwgaGRyLT5hZGRyMikpIHsNCj4gPiArCQkJCXRhcmdl dCA9IHNpOw0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJCX0NCj4gPiArCQl9DQo+ID4gKwl9IGVs c2Ugew0KPiA+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJ0d3ZpZiwgJnJ0d2Rldi0+dmlm X2xpc3QsIGxpc3QpIHsNCj4gPiArCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzaSwgJnJ0d3ZpZi0+ c3RhX2xpc3QsIGxpc3QpIHsNCj4gPiArCQkJCWlmIChldGhlcl9hZGRyX2VxdWFsKHNpLT5zdGEt PmFkZHIsIGhkci0+YWRkcjIpKSB7DQo+ID4gKwkJCQkJdGFyZ2V0ID0gc2k7DQo+ID4gKwkJCQkJ YnJlYWs7DQo+ID4gKwkJCQl9DQo+ID4gKwkJCX0NCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKwly Y3VfcmVhZF91bmxvY2soKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gdGFyZ2V0Ow0KPiA+ICt9DQo+ IA0KPiBTZWVtcyBhIGJpdCBsYXJnZSBmb3IgYW4gaW5saW5lPw0KPiANCj4gSm9oYW5uZXMNCg0K DQpGaW5hbGx5LCBJIHJlbW92ZWQgdGhlIHZpZl9saXN0IGFuZCBzdGFfbGlzdC4gQW5kIHVzZSB0 aGUgaXRlcmF0b3INCnByb3ZpZGVkIGJ5IG1hYzgwMjExLA0KQnV0IHRoZXJlIGlzIG9uZSBxdWVz dGlvbiB0aGF0IGhvdyBjYW4gd2UgZmluZCBhbGwgb2YgdGhlIHN0YSBhc3NvY2lhdGVkDQp3aXRo IHNwZWNpZmljIHZpZiwNCkhhcyB0aGVyZSBhbiBvbmx5IHdheSB0byBpdGVyYXRlIGV2ZXJ5IHN0 YSBhbmQgc2VlIGlmIChzdGEtPnZpZiA9PSB2aWYpID8NCg0KWWFuLUhzdWFuIENoYXVuZw0K