From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 849B9DED for ; Fri, 4 May 2018 11:04:57 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 04 May 2018 02:04:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,361,1520924400"; d="scan'208";a="196673273" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga004.jf.intel.com with ESMTP; 04 May 2018 02:04:54 -0700 Received: from fmsmsx111.amr.corp.intel.com (10.18.116.5) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 4 May 2018 02:04:54 -0700 Received: from cdsmsx103.ccr.corp.intel.com (172.17.3.37) by fmsmsx111.amr.corp.intel.com (10.18.116.5) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 4 May 2018 02:04:54 -0700 Received: from cdsmsx104.ccr.corp.intel.com ([169.254.4.183]) by CDSMSX103.ccr.corp.intel.com ([169.254.5.121]) with mapi id 14.03.0319.002; Fri, 4 May 2018 17:04:52 +0800 From: "Zhang, Tianfei" To: Shreyansh Jain , "Xu, Rosen" , "dev@dpdk.org" CC: "Doherty, Declan" , "Richardson, Bruce" , "Yigit, Ferruh" , "Ananyev, Konstantin" , "Wu, Hao" , "gaetan.rivet@6wind.com" , "Wu, Yanglong" , "Liu, Song" Thread-Topic: [dpdk-dev] [PATCH v6 3/5] iFPGA: Add Intel FPGA BUS Rawdev Driver Thread-Index: AQHT3ULKEplX0Xv8iEymcMVy5d2WkqQe0A4AgACCudA= Date: Fri, 4 May 2018 09:04:52 +0000 Message-ID: References: <1521553556-62982-1-git-send-email-rosen.xu@intel.com> <1524735793-37302-1-git-send-email-rosen.xu@intel.com> <1524735793-37302-4-git-send-email-rosen.xu@intel.com> <19adfc90-e90c-069c-cd90-20de6e7a98cf@nxp.com> In-Reply-To: <19adfc90-e90c-069c-cd90-20de6e7a98cf@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNzdkZGVmZWEtZDliYi00ZmRlLTgxYzMtNzgzNGMxY2Y0OWVlIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjIuNS4xOCIsIlRydXN0ZWRMYWJlbEhhc2giOiJETE1DREh0am9xc21LbFQ2XC9RWFVYSDJqT21PREgxalU5NmZYZmJIdFdRN0dPcU5aTnBQR25RN0xvb0dFcENYNSJ9 x-ctpclassification: CTP_NT x-originating-ip: [172.17.6.105] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v6 3/5] iFPGA: Add Intel FPGA BUS Rawdev Driver X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 May 2018 09:04:59 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogU2hyZXlhbnNoIEphaW4g W21haWx0bzpzaHJleWFuc2guamFpbkBueHAuY29tXQ0KPiBTZW50OiBGcmlkYXksIE1heSA0LCAy MDE4IDU6MTUgUE0NCj4gVG86IFh1LCBSb3NlbiA8cm9zZW4ueHVAaW50ZWwuY29tPjsgZGV2QGRw ZGsub3JnDQo+IENjOiBEb2hlcnR5LCBEZWNsYW4gPGRlY2xhbi5kb2hlcnR5QGludGVsLmNvbT47 IFJpY2hhcmRzb24sIEJydWNlDQo+IDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47IFlpZ2l0 LCBGZXJydWggPGZlcnJ1aC55aWdpdEBpbnRlbC5jb20+Ow0KPiBBbmFueWV2LCBLb25zdGFudGlu IDxrb25zdGFudGluLmFuYW55ZXZAaW50ZWwuY29tPjsgWmhhbmcsIFRpYW5mZWkNCj4gPHRpYW5m ZWkuemhhbmdAaW50ZWwuY29tPjsgV3UsIEhhbyA8aGFvLnd1QGludGVsLmNvbT47DQo+IGdhZXRh bi5yaXZldEA2d2luZC5jb207IFd1LCBZYW5nbG9uZyA8eWFuZ2xvbmcud3VAaW50ZWwuY29tPg0K PiBTdWJqZWN0OiBSZTogW2RwZGstZGV2XSBbUEFUQ0ggdjYgMy81XSBpRlBHQTogQWRkIEludGVs IEZQR0EgQlVTIFJhd2Rldg0KPiBEcml2ZXINCj4gDQo+IEhlbGxvIFJvc2VuLA0KPiANCj4gU29y cnkgZm9yIG11bHRpcGxlIHJldmlldyBpdGVyYXRpb25zLCBidXQsIGluIHRoZSB2NywgY2FuIHlv dSB0YWtlIGNhcmUgb2YgdGhlc2UNCj4gYXMgd2VsbDoNCj4gDQo+IE9uIFRodXJzZGF5IDI2IEFw cmlsIDIwMTggMDM6MTMgUE0sIFh1LCBSb3NlbiB3cm90ZToNCj4gPiBGcm9tOiBSb3NlbiBYdSA8 cm9zZW4ueHVAaW50ZWwuY29tPg0KPiA+DQo+ID4gQWRkIEludGVsIEZQR0EgQlVTIFJhd2RldiBE cml2ZXIgd2hpY2ggaXMgYmFzZWQgb24gbGlicnRlX3Jhd2Rldg0KPiA+IGxpYnJhcnkuDQo+ID4N Cj4gPiBTaWduZWQtb2ZmLWJ5OiBSb3NlbiBYdSA8cm9zZW4ueHVAaW50ZWwuY29tPg0KPiA+IFNp Z25lZC1vZmYtYnk6IFlhbmdsb25nIFd1IDx5YW5nbG9uZy53dUBpbnRlbC5jb20+DQo+ID4gU2ln bmVkLW9mZi1ieTogRmlnbyB6aGFuZyA8dGlhbmZlaS56aGFuZ0BpbnRlbC5jb20+DQo+ID4gLS0t DQo+ID4gICBjb25maWcvY29tbW9uX2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMSArDQo+ID4gICBkcml2ZXJzL3Jhdy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMSArDQo+ID4gICBkcml2ZXJzL3Jhdy9pZnBnYV9yYXdkZXYvTWFrZWZp bGUgICAgICAgICAgICAgICAgICB8ICAzNiArKw0KPiA+ICAgZHJpdmVycy9yYXcvaWZwZ2FfcmF3 ZGV2L2lmcGdhX3Jhd2Rldi5jICAgICAgICAgICAgfCA1OTcNCj4gKysrKysrKysrKysrKysrKysr KysrDQo+ID4gICBkcml2ZXJzL3Jhdy9pZnBnYV9yYXdkZXYvaWZwZ2FfcmF3ZGV2LmggICAgICAg ICAgICB8ICAzNyArKw0KPiA+ICAgLi4uL3Jhdy9pZnBnYV9yYXdkZXYvcnRlX2lmcGdhX3Jhd2Rl dl92ZXJzaW9uLm1hcCAgfCAgIDQgKw0KPiA+ICAgbWsvcnRlLmFwcC5tayAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKw0KPiA+ICAgNyBmaWxlcyBjaGFuZ2VkLCA2 NzcgaW5zZXJ0aW9ucygrKQ0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcmF3L2lm cGdhX3Jhd2Rldi9NYWtlZmlsZQ0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcmF3 L2lmcGdhX3Jhd2Rldi9pZnBnYV9yYXdkZXYuYw0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvcmF3L2lmcGdhX3Jhd2Rldi9pZnBnYV9yYXdkZXYuaA0KPiA+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0DQo+ID4gZHJpdmVycy9yYXcvaWZwZ2FfcmF3ZGV2L3J0ZV9pZnBnYV9yYXdkZXZfdmVy c2lvbi5tYXANCj4gPg0KPiANCj4gWy4uLl0NCj4gDQo+ID4gK3N0YXRpYyBpbnQNCj4gPiArZnBn YV9wcihzdHJ1Y3QgcnRlX3Jhd2RldiAqcmF3X2RldiwgdTMyIHBvcnRfaWQsIHU2NCAqYnVmZmVy LCB1MzIgc2l6ZSwNCj4gPiArCQkJdTY0ICpzdGF0dXMpDQo+ID4gK3sNCj4gPiArDQo+ID4gKwlz dHJ1Y3Qgb3BhZV9hZGFwdGVyICphZGFwdGVyOw0KPiA+ICsJc3RydWN0IG9wYWVfbWFuYWdlciAq bWdyOw0KPiA+ICsJc3RydWN0IG9wYWVfYWNjZWxlcmF0b3IgKmFjYzsNCj4gPiArCXN0cnVjdCBv cGFlX2JyaWRnZSAqYnI7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCWFkYXB0ZXIgPSBp ZnBnYV9yYXdkZXZfZ2V0X3ByaXYocmF3X2Rldik7DQo+ID4gKwlpZiAoIWFkYXB0ZXIpDQo+ID4g KwkJcmV0dXJuIC1FTk9ERVY7DQo+ID4gKw0KPiA+ICsJbWdyID0gb3BhZV9hZGFwdGVyX2dldF9t Z3IoYWRhcHRlcik7DQo+ID4gKwlpZiAoIW1ncikNCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4g PiArDQo+ID4gKwlhY2MgPSBvcGFlX2FkYXB0ZXJfZ2V0X2FjYyhhZGFwdGVyLCBwb3J0X2lkKTsN Cj4gPiArCWlmICghYWNjKQ0KPiA+ICsJCXJldHVybiAtRU5PREVWOw0KPiA+ICsNCj4gPiArCWJy ID0gb3BhZV9hY2NfZ2V0X2JyKGFjYyk7DQo+ID4gKwlpZiAoIWJyKQ0KPiA+ICsJCXJldHVybiAt RU5PREVWOw0KPiA+ICsNCj4gPiArCXJldCA9IG9wYWVfbWFuYWdlcl9mbGFzaChtZ3IsIHBvcnRf aWQsIGJ1ZmZlciwgc2l6ZSwgc3RhdHVzKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlwcmlu dGYoIiVzIHByIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsNCj4gDQo+IFBsZWFzZSB1c2Ug dGhlIGRlYnVnZ2luZyBvciBlcnJvciBtYWNyb3MuDQo+IA0KPiA+ICsJCXJldHVybiByZXQ7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJdXNsZWVwKDEwMCk7DQo+IA0KPiBIbW0sIGlzIHRoYXQgc29t ZSBjYXZlYXQgb3IgYSBzdHJheSBsaW5lIGxlZnQgZnJvbSBzb21lIGRlYnVnZ2luZz8NCj4gDQo+ ID4gKwlyZXQgPSBvcGFlX2JyaWRnZV9yZXNldChicik7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4g KwkJcHJpbnRmKCIlcyByZXNldCBwb3J0OiVkIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcG9ydF9p ZCwgcmV0KTsNCj4gDQo+IFNhbWUgLSBkZWJ1Z2dpbmcvZXJyb3IgbWFjcm9zLg0KPiANCj4gPiAr CQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcnRlX2ZwZ2FfZG9fcHIoc3RydWN0IHJ0ZV9yYXdkZXYg KnJhd2RldiwgaW50IHBvcnRfaWQsDQo+ID4gKwkJY29uc3QgY2hhciAqZmlsZV9uYW1lKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3Qgc3RhdCBmaWxlX3N0YXQ7DQo+ID4gKwlpbnQgZmlsZV9mZDsNCj4g PiArCWludCByZXQgPSAwOw0KPiA+ICsJdTMyIGJ1ZmZlcl9zaXplOw0KPiA+ICsJdm9pZCAqYnVm ZmVyOw0KPiA+ICsJdTY0IHByX2Vycm9yOw0KPiA+ICsNCj4gPiArCWlmICghZmlsZV9uYW1lKQ0K PiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCWZpbGVfZmQgPSBvcGVuKGZpbGVf bmFtZSwgT19SRE9OTFkpOw0KPiA+ICsJaWYgKGZpbGVfZmQgPCAwKSB7DQo+ID4gKwkJcHJpbnRm KCIlczogb3BlbiBmaWxlIGVycm9yOiAlc1xuIiwgX19mdW5jX18sIGZpbGVfbmFtZSk7DQo+ID4g KwkJcHJpbnRmKCJNZXNzYWdlIDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQo+IA0KPiBTYW1l IC0gZGVidWcvZXJyb3IgbWFjcm9zDQo+IA0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJ fQ0KPiA+ICsJcmV0ID0gc3RhdChmaWxlX25hbWUsICZmaWxlX3N0YXQpOw0KPiA+ICsJaWYgKHJl dCkgew0KPiA+ICsJCXByaW50Zigic3RhdCBvbiBiaXRzdHJlYW0gZmlsZSBmYWlsZWQ6ICVzXG4i LCBmaWxlX25hbWUpOw0KPiANCj4gT25lIG1vcmUgKHNhbWUgaXMgYXBwbGljYWJsZSBhY3Jvc3Mg dGhlIGZpbGUpLg0KPiANCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArCWJ1 ZmZlcl9zaXplID0gZmlsZV9zdGF0LnN0X3NpemU7DQo+ID4gKwlwcmludGYoImJpdHN0cmVhbSBm aWxlIHNpemU6ICV1XG4iLCBidWZmZXJfc2l6ZSk7DQo+ID4gKwlidWZmZXIgPSBydGVfbWFsbG9j KE5VTEwsIGJ1ZmZlcl9zaXplLCAwKTsNCj4gPiArCWlmICghYnVmZmVyKSB7DQo+ID4gKwkJcmV0 ID0gLUVOT01FTTsNCj4gPiArCQlnb3RvIGNsb3NlX2ZkOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CS8qcmVhZCB0aGUgcmF3IGRhdGEqLw0KPiA+ICsJaWYgKGJ1ZmZlcl9zaXplICE9IHJlYWQoZmls ZV9mZCwgKHZvaWQgKilidWZmZXIsIGJ1ZmZlcl9zaXplKSkgew0KPiA+ICsJCXJldCA9IC1FSU5W QUw7DQo+ID4gKwkJZ290byBmcmVlX2J1ZmZlcjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKmRv IFBSIG5vdyovDQo+ID4gKwlyZXQgPSBmcGdhX3ByKHJhd2RldiwgcG9ydF9pZCwgYnVmZmVyLCBi dWZmZXJfc2l6ZSwgJnByX2Vycm9yKTsNCj4gPiArCXByaW50ZigiZG93bmxvYWRpbmcgdG8gZGV2 aWNlIHBvcnQgJWQuLi4uJXMuXG4iLCBwb3J0X2lkLA0KPiA+ICsJCXJldCA/ICJmYWlsZWQiIDog InN1Y2Nlc3MiKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ ICsJCS8vcmF3X2Rldi0+b3BzLT5zaG93X3ByX2Vycm9yKHByX2Vycm9yKTsNCj4gDQo+IEkgYW0g Z3Vlc3NpbmcgdGhpcyBpcyBzdHJheSBmcm9tIHNvbWUgZGVidWdnaW5nIGF0dGVtcHQuIFNhbWUg Zm9yIHRoZSBwcmludGYNCj4gYWJvdmUuDQo+IA0KPiA+ICsJCWdvdG8gZnJlZV9idWZmZXI7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICtmcmVlX2J1ZmZlcjoNCj4gPiArCWlmIChidWZmZXIpDQo+ID4g KwkJcnRlX2ZyZWUoYnVmZmVyKTsNCj4gPiArY2xvc2VfZmQ6DQo+ID4gKwljbG9zZShmaWxlX2Zk KTsNCj4gPiArCWZpbGVfZmQgPSAwOw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGludCBpZnBnYV9yYXdkZXZfcHIoc3RydWN0IHJ0ZV9yYXdkZXYgKmRldiwN Cj4gPiArCXJ0ZV9yYXdkZXZfb2JqX3QgcHJfY29uZikNCj4gPiArew0KPiA+ICsJc3RydWN0IG9w YWVfYWRhcHRlciAqYWRhcHRlcjsNCj4gPiArCXN0cnVjdCBydGVfYWZ1X3ByX2NvbmYgKmFmdV9w cl9jb25mOw0KPiA+ICsJaW50IHJldDsNCj4gPiArCXN0cnVjdCB1dWlkIHV1aWQ7DQo+ID4gKwlz dHJ1Y3Qgb3BhZV9hY2NlbGVyYXRvciAqYWNjOw0KPiA+ICsNCj4gPiArCUlGUEdBX1JBV0RFVl9Q TURfRlVOQ19UUkFDRSgpOw0KPiA+ICsNCj4gPiArCWFkYXB0ZXIgPSBpZnBnYV9yYXdkZXZfZ2V0 X3ByaXYoZGV2KTsNCj4gPiArCWlmICghYWRhcHRlcikNCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsN Cj4gPiArDQo+ID4gKwlpZiAoIXByX2NvbmYpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4g Kw0KPiA+ICsJYWZ1X3ByX2NvbmYgPSBwcl9jb25mOw0KPiA+ICsNCj4gPiArCWlmIChhZnVfcHJf Y29uZi0+cHJfZW5hYmxlKSB7DQo+ID4gKwkJcmV0ID0gcnRlX2ZwZ2FfZG9fcHIoZGV2LA0KPiA+ ICsJCQkJYWZ1X3ByX2NvbmYtPmFmdV9pZC5wb3J0LA0KPiA+ICsJCQkJYWZ1X3ByX2NvbmYtPmJz X3BhdGgpOw0KPiA+ICsJCWlmIChyZXQpIHsNCj4gPiArCQkJcHJpbnRmKCJkbyBwciBlcnJvciAl ZFxuIiwgcmV0KTsNCj4gDQo+IE9uZSBtb3JlDQo+IA0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlhY2MgPSBvcGFlX2FkYXB0ZXJfZ2V0X2FjYyhh ZGFwdGVyLCBhZnVfcHJfY29uZi0+YWZ1X2lkLnBvcnQpOw0KPiA+ICsJaWYgKCFhY2MpDQo+ID4g KwkJcmV0dXJuIC1FTk9ERVY7DQo+ID4gKw0KPiA+ICsJcmV0ID0gb3BhZV9hY2NfZ2V0X3V1aWQo YWNjLCAmdXVpZCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0K PiA+ICsJbWVtY3B5KCZhZnVfcHJfY29uZi0+YWZ1X2lkLnV1aWRfbG93LCB1dWlkLmIsIHNpemVv Zih1NjQpKTsNCj4gPiArCW1lbWNweSgmYWZ1X3ByX2NvbmYtPmFmdV9pZC51dWlkX2hpZ2gsIHV1 aWQuYiArIDgsIHNpemVvZih1NjQpKTsNCj4gPiArDQo+ID4gKwlwcmludGYoIiVzOiB1dWlkX2w9 MHglbHgsIHV1aWRfaD0weCVseFxuIiwgX19mdW5jX18sDQo+ID4gKwkJKHU2NClhZnVfcHJfY29u Zi0+YWZ1X2lkLnV1aWRfbG93LA0KPiA+ICsJCSh1NjQpYWZ1X3ByX2NvbmYtPmFmdV9pZC51dWlk X2hpZ2gpOw0KPiBkZWJ1Zy9lcnJvciBtYWNyb3MNCj4gDQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRlX3Jhd2Rldl9vcHMg aWZwZ2FfcmF3ZGV2X29wcyA9IHsNCj4gPiArCS5kZXZfaW5mb19nZXQgPSBpZnBnYV9yYXdkZXZf aW5mb19nZXQsDQo+ID4gKwkuZGV2X2NvbmZpZ3VyZSA9IE5VTEwsDQo+ID4gKwkuZGV2X3N0YXJ0 ID0gaWZwZ2FfcmF3ZGV2X3N0YXJ0LA0KPiA+ICsJLmRldl9zdG9wID0gaWZwZ2FfcmF3ZGV2X3N0 b3AsDQo+ID4gKwkuZGV2X2Nsb3NlID0gaWZwZ2FfcmF3ZGV2X2Nsb3NlLA0KPiA+ICsJLmRldl9y ZXNldCA9IGlmcGdhX3Jhd2Rldl9yZXNldCwNCj4gPiArDQo+ID4gKwkucXVldWVfZGVmX2NvbmYg PSBOVUxMLA0KPiA+ICsJLnF1ZXVlX3NldHVwID0gTlVMTCwNCj4gPiArCS5xdWV1ZV9yZWxlYXNl ID0gTlVMTCwNCj4gPiArDQo+ID4gKwkuYXR0cl9nZXQgPSBOVUxMLA0KPiA+ICsJLmF0dHJfc2V0 ID0gTlVMTCwNCj4gPiArDQo+ID4gKwkuZW5xdWV1ZV9idWZzID0gTlVMTCwNCj4gPiArCS5kZXF1 ZXVlX2J1ZnMgPSBOVUxMLA0KPiA+ICsNCj4gPiArCS5kdW1wID0gTlVMTCwNCj4gPiArDQo+ID4g KwkueHN0YXRzX2dldCA9IE5VTEwsDQo+ID4gKwkueHN0YXRzX2dldF9uYW1lcyA9IE5VTEwsDQo+ ID4gKwkueHN0YXRzX2dldF9ieV9uYW1lID0gTlVMTCwNCj4gPiArCS54c3RhdHNfcmVzZXQgPSBO VUxMLA0KPiA+ICsNCj4gPiArCS5maXJtd2FyZV9zdGF0dXNfZ2V0ID0gTlVMTCwNCj4gPiArCS5m aXJtd2FyZV92ZXJzaW9uX2dldCA9IE5VTEwsDQo+ID4gKwkuZmlybXdhcmVfbG9hZCA9IGlmcGdh X3Jhd2Rldl9wciwNCj4gPiArCS5maXJtd2FyZV91bmxvYWQgPSBOVUxMLA0KPiA+ICsNCj4gPiAr CS5kZXZfc2VsZnRlc3QgPSBOVUxMLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludA0K PiA+ICtpZnBnYV9yYXdkZXZfY3JlYXRlKHN0cnVjdCBydGVfcGNpX2RldmljZSAqcGNpX2RldiwN Cj4gPiArCQkJaW50IHNvY2tldF9pZCkNCj4gPiArew0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4g KwlzdHJ1Y3QgcnRlX3Jhd2RldiAqcmF3ZGV2ID0gTlVMTDsNCj4gPiArCXN0cnVjdCBvcGFlX2Fk YXB0ZXIgKmFkYXB0ZXI7DQo+ID4gKwlzdHJ1Y3Qgb3BhZV9tYW5hZ2VyICptZ3I7DQo+ID4gKwlz dHJ1Y3Qgb3BhZV9hZGFwdGVyX2RhdGFfcGNpICpkYXRhOw0KPiA+ICsJY2hhciBuYW1lW1JURV9S QVdERVZfTkFNRV9NQVhfTEVOXTsNCj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiArCWlmICghcGNp X2Rldikgew0KPiA+ICsJCUlGUEdBX1JBV0RFVl9QTURfRVJSKCJJbnZhbGlkIHBjaV9kZXYgb2Yg dGhlIGRldmljZSEiKTsNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCWdvdG8gY2xlYW51 cDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwltZW1zZXQobmFtZSwgMCwgc2l6ZW9mKG5hbWUpKTsN Cj4gPiArCXNucHJpbnRmKG5hbWUsIFJURV9SQVdERVZfTkFNRV9NQVhfTEVOLCAiSUZQR0E6JXg6 JTAyeC4leCIsDQo+ID4gKwlwY2lfZGV2LT5hZGRyLmJ1cywgcGNpX2Rldi0+YWRkci5kZXZpZCwg cGNpX2Rldi0+YWRkci5mdW5jdGlvbik7DQo+IA0KPiBBbGlnbm1lbnQgaXNzdWUuLi4gJ3BjaV9k ZXYtPmFkZHIuYnVzIC4uLiAnIHdvdWxkIHN0YXJ0IGZyb20gdW5kZXJuZWF0aA0KPiBhcmd1bWVu dHMgb2Ygc25wcmludGYuDQo+IA0KPiA+ICsNCj4gPiArCUlGUEdBX1JBV0RFVl9QTURfSU5GTygi SW5pdCAlcyBvbiBOVU1BIG5vZGUgJWQiLCBuYW1lLA0KPiA+ICtydGVfc29ja2V0X2lkKCkpOw0K PiA+ICsNCj4gPiArCS8qIEFsbG9jYXRlIGRldmljZSBzdHJ1Y3R1cmUgKi8NCj4gPiArCXJhd2Rl diA9IHJ0ZV9yYXdkZXZfcG1kX2FsbG9jYXRlKG5hbWUsIHNpemVvZihzdHJ1Y3Qgb3BhZV9hZGFw dGVyKSwNCj4gPiArCQkJCQkgc29ja2V0X2lkKTsNCj4gPiArCWlmIChyYXdkZXYgPT0gTlVMTCkg ew0KPiA+ICsJCUlGUEdBX1JBV0RFVl9QTURfRVJSKCJVbmFibGUgdG8gYWxsb2NhdGUgcmF3ZGV2 aWNlIik7DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQlnb3RvIGNsZWFudXA7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJLyogYWxsb2MgT1BBRV9GUEdBX1BDSSBkYXRhIHRvIHJlZ2lzdGVy IHRvIE9QQUUgaGFyZHdhcmUgbGV2ZWwgQVBJICovDQo+ID4gKwlkYXRhID0gb3BhZV9hZGFwdGVy X2RhdGFfYWxsb2MoT1BBRV9GUEdBX1BDSSk7DQo+ID4gKwlpZiAoIWRhdGEpDQo+ID4gKwkJcmV0 dXJuIC1FTk9NRU07DQo+IA0KPiBXaGF0IGFib3V0IGp1bXBpbmcgdG8gY2xlYW51cCBoZXJlPyAo cG1kX3JlbGVhc2UoKSkNCj4gDQo+ID4gKw0KPiA+ICsJLyogaW5pdCBvcGFlX2FkYXB0ZXJfZGF0 YV9wY2kgZm9yIGRldmljZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLw0KPiA+ICsJZm9yIChpID0g MDsgaSA8IFBDSV9NQVhfUkVTT1VSQ0U7IGkrKykgew0KPiA+ICsJCWRhdGEtPnJlZ2lvbltpXS5w aHlzX2FkZHIgPSBwY2lfZGV2LT5tZW1fcmVzb3VyY2VbaV0ucGh5c19hZGRyOw0KPiA+ICsJCWRh dGEtPnJlZ2lvbltpXS5sZW4gPSBwY2lfZGV2LT5tZW1fcmVzb3VyY2VbaV0ubGVuOw0KPiA+ICsJ CWRhdGEtPnJlZ2lvbltpXS5hZGRyID0gcGNpX2Rldi0+bWVtX3Jlc291cmNlW2ldLmFkZHI7DQo+ ID4gKwl9DQo+ID4gKwlkYXRhLT5kZXZpY2VfaWQgPSBwY2lfZGV2LT5pZC5kZXZpY2VfaWQ7DQo+ ID4gKwlkYXRhLT52ZW5kb3JfaWQgPSBwY2lfZGV2LT5pZC52ZW5kb3JfaWQ7DQo+ID4gKw0KPiA+ ICsJLyogY3JlYXRlIGEgb3BhZV9hZGFwdGVyIGJhc2VkIG9uIGFib3ZlIGRldmljZSBkYXRhICov DQo+ID4gKwlhZGFwdGVyID0gb3BhZV9hZGFwdGVyX2FsbG9jKHBjaV9kZXYtPmRldmljZS5uYW1l LCBkYXRhKTsNCj4gPiArCWlmICghYWRhcHRlcikgew0KPiA+ICsJCW9wYWVfYWRhcHRlcl9kYXRh X2ZyZWUoZGF0YSk7DQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+IA0KPiBTYW1lIC0geW91IGFy ZSBub3QgcGVyZm9ybWluZyBjbGVhbnVwIGhlcmUuDQo+IA0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJhd2Rldi0+ZGV2X29wcyA9ICZpZnBnYV9yYXdkZXZfb3BzOw0KPiA+ICsJcmF3ZGV2LT5kZXZp Y2UgPSAmcGNpX2Rldi0+ZGV2aWNlOw0KPiA+ICsJcmF3ZGV2LT5kcml2ZXJfbmFtZSA9IHBjaV9k ZXYtPmRldmljZS5kcml2ZXItPm5hbWU7DQo+ID4gKw0KPiA+ICsJcmF3ZGV2LT5kZXZfcHJpdmF0 ZSA9IGFkYXB0ZXI7DQo+ID4gKw0KPiA+ICsJLyogbXVzdCBlbnVtZXJhdGUgdGhlIGFkYXB0ZXIg YmVmb3JlIHVzZSBpdCAqLw0KPiA+ICsJcmV0ID0gb3BhZV9hZGFwdGVyX2VudW1lcmF0ZShhZGFw dGVyKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gDQo+IENsZWFudXAg dG8gYmUgcGVyZm9ybWVkIGhlcmUuDQo+IA0KPiA+ICsNCj4gPiArCS8qIHNldCBvcGFlX21hbmFn ZXIgdG8gcmF3ZGV2ICovDQo+ID4gKwltZ3IgPSBvcGFlX2FkYXB0ZXJfZ2V0X21ncihhZGFwdGVy KTsNCj4gPiArCWlmIChtZ3IpIHsNCj4gPiArCQkvKlBGIGZ1bmN0aW9uKi8NCj4gDQo+IC8qPHNw YWNlPlBGIGZ1bmN0aW9uPHNwYWNlPiovDQo+IA0KPiA+ICsJCUlGUEdBX1JBV0RFVl9QTURfSU5G TygidGhpcyBpcyBhIFBGIGZ1bmN0aW9uIik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJu IHJldDsNCj4gPiArDQo+ID4gK2NsZWFudXA6DQo+ID4gKwlpZiAocmF3ZGV2KQ0KPiA+ICsJCXJ0 ZV9yYXdkZXZfcG1kX3JlbGVhc2UocmF3ZGV2KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK2lmcGdhX3Jhd2Rldl9kZXN0cm95 KHN0cnVjdCBydGVfcGNpX2RldmljZSAqcGNpX2Rldikgew0KPiA+ICsJaW50IHJldDsNCj4gPiAr CXN0cnVjdCBydGVfcmF3ZGV2ICpyYXdkZXY7DQo+ID4gKwljaGFyIG5hbWVbUlRFX1JBV0RFVl9O QU1FX01BWF9MRU5dOw0KPiA+ICsJc3RydWN0IG9wYWVfYWRhcHRlciAqYWRhcHRlcjsNCj4gPiAr DQo+ID4gKwlpZiAoIXBjaV9kZXYpIHsNCj4gPiArCQlJRlBHQV9SQVdERVZfUE1EX0VSUigiSW52 YWxpZCBwY2lfZGV2IG9mIHRoZSBkZXZpY2UhIik7DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsNCj4g PiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW1lbXNldChuYW1lLCAwLCBz aXplb2YobmFtZSkpOw0KPiA+ICsJc25wcmludGYobmFtZSwgUlRFX1JBV0RFVl9OQU1FX01BWF9M RU4sICJJRlBHQToleDolMDJ4LiV4IiwNCj4gPiArCQlwY2lfZGV2LT5hZGRyLmJ1cywgcGNpX2Rl di0+YWRkci5kZXZpZCwgcGNpX2Rldi0+YWRkci5mdW5jdGlvbik7DQo+ID4gKw0KPiA+ICsJSUZQ R0FfUkFXREVWX1BNRF9JTkZPKCJDbG9zaW5nICVzIG9uIE5VTUEgbm9kZSAlZCIsDQo+ID4gKwkJ bmFtZSwgcnRlX3NvY2tldF9pZCgpKTsNCj4gPiArDQo+ID4gKwlyYXdkZXYgPSBydGVfcmF3ZGV2 X3BtZF9nZXRfbmFtZWRfZGV2KG5hbWUpOw0KPiA+ICsJaWYgKCFyYXdkZXYpIHsNCj4gPiArCQlJ RlBHQV9SQVdERVZfUE1EX0VSUigiSW52YWxpZCBkZXZpY2UgbmFtZSAoJXMpIiwgbmFtZSk7DQo+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJYWRhcHRlciA9IGlm cGdhX3Jhd2Rldl9nZXRfcHJpdihyYXdkZXYpOw0KPiA+ICsJaWYgKCFhZGFwdGVyKQ0KPiA+ICsJ CXJldHVybiAtRU5PREVWOw0KPiA+ICsNCj4gPiArCW9wYWVfYWRhcHRlcl9kYXRhX2ZyZWUoYWRh cHRlci0+ZGF0YSk7DQo+ID4gKwlvcGFlX2FkYXB0ZXJfZnJlZShhZGFwdGVyKTsNCj4gPiArDQo+ ID4gKwkvKiBydGVfcmF3ZGV2X2Nsb3NlIGlzIGNhbGxlZCBieSBwbWRfcmVsZWFzZSAqLw0KPiA+ ICsJcmV0ID0gcnRlX3Jhd2Rldl9wbWRfcmVsZWFzZShyYXdkZXYpOw0KPiA+ICsJaWYgKHJldCkN Cj4gPiArCQlJRlBHQV9SQVdERVZfUE1EX0RFQlVHKCJEZXZpY2UgY2xlYW51cCBmYWlsZWQiKTsN Cj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludA0K PiA+ICtpZnBnYV9yYXdkZXZfcGNpX3Byb2JlKHN0cnVjdCBydGVfcGNpX2RyaXZlciAqcGNpX2Ry diBfX3J0ZV91bnVzZWQsDQo+ID4gKwlzdHJ1Y3QgcnRlX3BjaV9kZXZpY2UgKnBjaV9kZXYpDQo+ ID4gK3sNCj4gPiArDQo+ID4gKwlwcmludGYoIiMjICVzXG4iLCBfX2Z1bmNfXyk7DQo+IA0KPiBP bmUgbW9yZS4NCj4gDQo+ID4gKwlyZXR1cm4gaWZwZ2FfcmF3ZGV2X2NyZWF0ZShwY2lfZGV2LCBy dGVfc29ja2V0X2lkKCkpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGlmcGdhX3Jhd2Rldl9w Y2lfcmVtb3ZlKHN0cnVjdCBydGVfcGNpX2RldmljZSAqcGNpX2Rldikgew0KPiA+ICsJcmV0dXJu IGlmcGdhX3Jhd2Rldl9kZXN0cm95KHBjaV9kZXYpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3Ry dWN0IHJ0ZV9wY2lfZHJpdmVyIHJ0ZV9pZnBnYV9yYXdkZXZfcG1kID0gew0KPiA+ICsJLmlkX3Rh YmxlICA9IHBjaV9pZnBnYV9tYXAsDQo+ID4gKwkuZHJ2X2ZsYWdzID0gUlRFX1BDSV9EUlZfTkVF RF9NQVBQSU5HIHwgUlRFX1BDSV9EUlZfSU5UUl9MU0MsDQo+ID4gKwkucHJvYmUgICAgID0gaWZw Z2FfcmF3ZGV2X3BjaV9wcm9iZSwNCj4gPiArCS5yZW1vdmUgICAgPSBpZnBnYV9yYXdkZXZfcGNp X3JlbW92ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK1JURV9QTURfUkVHSVNURVJfUENJKGlmcGdh X3Jhd2Rldl9wY2lfZHJpdmVyLA0KPiBydGVfaWZwZ2FfcmF3ZGV2X3BtZCk7DQo+ID4gK1JURV9Q TURfUkVHSVNURVJfUENJX1RBQkxFKGlmcGdhX3Jhd2Rldl9wY2lfZHJpdmVyLA0KPiA+ICtydGVf aWZwZ2FfcmF3ZGV2X3BtZCk7DQo+ID4gK1JURV9QTURfUkVHSVNURVJfS01PRF9ERVAoaWZwZ2Ff cmF3ZGV2X3BjaV9kcml2ZXIsICIqIGlnYl91aW8gfA0KPiA+ICt1aW9fcGNpX2dlbmVyaWMgfCB2 ZmlvLXBjaSIpOw0KPiA+ICsNCj4gPiArUlRFX0lOSVQoaWZwZ2FfcmF3ZGV2X2luaXRfbG9nKTsN Cj4gPiArc3RhdGljIHZvaWQNCj4gPiAraWZwZ2FfcmF3ZGV2X2luaXRfbG9nKHZvaWQpDQo+ID4g K3sNCj4gPiArCWlmcGdhX3Jhd2Rldl9sb2d0eXBlID0gcnRlX2xvZ19yZWdpc3RlcigiZHJpdmVy LnJhdy5pbml0Iik7DQo+ID4gKwlpZiAoaWZwZ2FfcmF3ZGV2X2xvZ3R5cGUgPj0gMCkNCj4gPiAr CQlydGVfbG9nX3NldF9sZXZlbChpZnBnYV9yYXdkZXZfbG9ndHlwZSwgUlRFX0xPR19OT1RJQ0Up OyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZhbGlkX2FyZ3NbXSA9 IHsNCj4gPiArI2RlZmluZSBJRlBHQV9BUkdfTkFNRSAgICAgICAgICJpZnBnYSINCj4gPiArCUlG UEdBX0FSR19OQU1FLA0KPiA+ICsjZGVmaW5lIElGUEdBX0FSR19QT1JUICAgICAgICAgInBvcnQi DQo+ID4gKwlJRlBHQV9BUkdfUE9SVCwNCj4gPiArI2RlZmluZSBJRlBHQV9BRlVfQlRTICAgICAg ICAgICJhZnVfYnRzIg0KPiA+ICsJSUZQR0FfQUZVX0JUUywNCj4gPiArCU5VTEwNCj4gPiArfTsN Cj4gPiArDQo+ID4gK3N0YXRpYyBpbnQNCj4gPiAraWZwZ2FfY2ZnX3Byb2JlKHN0cnVjdCBydGVf dmRldl9kZXZpY2UgKmRldikgew0KPiA+ICsJc3RydWN0IHJ0ZV9kZXZhcmdzICpkZXZhcmdzOw0K PiA+ICsJc3RydWN0IHJ0ZV9rdmFyZ3MgKmt2bGlzdCA9IE5VTEw7DQo+ID4gKwlpbnQgICAgICBw b3J0Ow0KPiA+ICsJY2hhciAqbmFtZSA9IE5VTEw7DQo+ID4gKwljaGFyIGRldl9uYW1lW1JURV9S QVdERVZfTkFNRV9NQVhfTEVOKzhdOw0KPiA+ICsNCj4gPiArCWRldmFyZ3MgPSBkZXYtPmRldmlj ZS5kZXZhcmdzOw0KPiA+ICsNCj4gPiArCWt2bGlzdCA9IHJ0ZV9rdmFyZ3NfcGFyc2UoZGV2YXJn cy0+YXJncywgdmFsaWRfYXJncyk7DQo+ID4gKwlpZiAoIWt2bGlzdCkgew0KPiA+ICsJCUlGUEdB X1JBV0RFVl9QTURfTE9HKEVSUiwgImVycm9yIHdoZW4gcGFyc2luZyBwYXJhbSIpOw0KPiA+ICsJ CWdvdG8gZW5kOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChydGVfa3ZhcmdzX2NvdW50KGt2 bGlzdCwgSUZQR0FfQVJHX05BTUUpID09IDEpIHsNCj4gPiArCQlpZiAocnRlX2t2YXJnc19wcm9j ZXNzKGt2bGlzdCwgSUZQR0FfQVJHX05BTUUsDQo+ID4gKwkJCQkgICAgICAgJmlmcGdhX2dldF9z dHJpbmdfYXJnLCAmbmFtZSkgPCAwKSB7DQo+ID4gKwkJCUlGUEdBX1JBV0RFVl9QTURfRVJSKCJl cnJvciB0byBwYXJzZSAlcyIsDQo+ID4gKwkJCQkgICAgIElGUEdBX0FSR19OQU1FKTsNCj4gPiAr CQkJZ290byBlbmQ7DQo+ID4gKwkJfQ0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlJRlBHQV9SQVdE RVZfUE1EX0VSUigiYXJnICVzIGlzIG1hbmRhdG9yeSBmb3IgaWZwZ2EgYnVzIiwNCj4gPiArCQkJ ICBJRlBHQV9BUkdfTkFNRSk7DQo+ID4gKwkJZ290byBlbmQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJaWYgKHJ0ZV9rdmFyZ3NfY291bnQoa3ZsaXN0LCBJRlBHQV9BUkdfUE9SVCkgPT0gMSkgew0K PiA+ICsJCWlmIChydGVfa3ZhcmdzX3Byb2Nlc3Moa3ZsaXN0LA0KPiA+ICsJCQlJRlBHQV9BUkdf UE9SVCwNCj4gPiArCQkJJmlmcGdhX2dldF9pbnRlZ2VyMzJfYXJnLA0KPiA+ICsJCQkmcG9ydCkg PCAwKSB7DQo+ID4gKwkJCUlGUEdBX1JBV0RFVl9QTURfRVJSKCJlcnJvciB0byBwYXJzZSAlcyIs DQo+ID4gKwkJCQlJRlBHQV9BUkdfUE9SVCk7DQo+ID4gKwkJCWdvdG8gZW5kOw0KPiA+ICsJCX0N Cj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJSUZQR0FfUkFXREVWX1BNRF9FUlIoImFyZyAlcyBpcyBt YW5kYXRvcnkgZm9yIGlmcGdhIGJ1cyIsDQo+ID4gKwkJCSAgSUZQR0FfQVJHX1BPUlQpOw0KPiA+ ICsJCWdvdG8gZW5kOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW1lbXNldChkZXZfbmFtZSwgMCwg c2l6ZW9mKGRldl9uYW1lKSk7DQo+ID4gKwlzbnByaW50ZihkZXZfbmFtZSwgKFJURV9SQVdERVZf TkFNRV9NQVhfTEVOKzgpLCAiJWR8JXMiLA0KPiANCj4gV2h5IGRpZCB5b3UgZG8gdGhpcz8gKGFk ZGluZyA4IHRvIFJURV9SQVdERVZfTkFNRV9NQVhfTEVOKT8NCj4gSnVzdCBhZGQgYSBwYXRjaCB0 byBpbmNyZWFzZSB0aGUgdmFsdWUgb2YgUlRFX1JBV0RFVl9OQU1FX01BWF9MRU4uDQo+IA0KPiA+ ICsJcG9ydCwgbmFtZSk7DQo+ID4gKw0KPiA+ICsJcnRlX2VhbF9ob3RwbHVnX2FkZChSVEVfU1RS KElGUEdBX0JVU19OQU1FKSwNCj4gPiArCQkJCQkJCWRldl9uYW1lLA0KPiA+ICsJCQkJCQkJZGV2 YXJncy0+YXJncyk7DQo+IA0KPiBTZWVtcyB0byBiZSBzb21lIGFsaWdubWVudCBpc3N1ZSBoZXJl Li4uDQo+IA0KPiA+ICtlbmQ6DQo+ID4gKwlpZiAoa3ZsaXN0KQ0KPiA+ICsJCXJ0ZV9rdmFyZ3Nf ZnJlZShrdmxpc3QpOw0KPiA+ICsJaWYgKG5hbWUpDQo+ID4gKwkJZnJlZShuYW1lKTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludA0KPiA+ICtp ZnBnYV9jZmdfcmVtb3ZlKHN0cnVjdCBydGVfdmRldl9kZXZpY2UgKnZkZXYpIHsNCj4gPiArCUlG UEdBX1JBV0RFVl9QTURfSU5GTygiUmVtb3ZlIGlmcGdhX2NmZyAlcCIsDQo+ID4gKwkJdmRldik7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1 Y3QgcnRlX3ZkZXZfZHJpdmVyIGlmcGdhX2NmZ19kcml2ZXIgPSB7DQo+ID4gKwkucHJvYmUgPSBp ZnBnYV9jZmdfcHJvYmUsDQo+ID4gKwkucmVtb3ZlID0gaWZwZ2FfY2ZnX3JlbW92ZSwNCj4gPiAr fTsNCj4gPiArDQo+ID4gK1JURV9QTURfUkVHSVNURVJfVkRFVihuZXRfaWZwZ2FfY2ZnLCBpZnBn YV9jZmdfZHJpdmVyKTsNCj4gPiArUlRFX1BNRF9SRUdJU1RFUl9BTElBUyhuZXRfaWZwZ2FfY2Zn LCBpZnBnYV9jZmcpOw0KPiA+ICtSVEVfUE1EX1JFR0lTVEVSX1BBUkFNX1NUUklORyhuZXRfaWZw Z2FfY2ZnLA0KPiA+ICsJImJkZj08c3RyaW5nPiAiDQo+ID4gKwkicG9ydD08aW50PiAiDQo+ID4g KwkiYWZ1X2J0cz08cGF0aD4iKTsNCj4gPiArDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmF3 L2lmcGdhX3Jhd2Rldi9pZnBnYV9yYXdkZXYuaA0KPiA+IGIvZHJpdmVycy9yYXcvaWZwZ2FfcmF3 ZGV2L2lmcGdhX3Jhd2Rldi5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAw MDAwMDAwLi4xNjlkYzFkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvcmF3 L2lmcGdhX3Jhd2Rldi9pZnBnYV9yYXdkZXYuaA0KPiA+IEBAIC0wLDAgKzEsMzcgQEANCj4gPiAr LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiA+ICsgKiBDb3B5cmln aHQoYykgMjAxMC0yMDE4IEludGVsIENvcnBvcmF0aW9uICAqLw0KPiA+ICsNCj4gPiArI2lmbmRl ZiBfSUZQR0FfUkFXREVWX0hfDQo+ID4gKyNkZWZpbmUgX0lGUEdBX1JBV0RFVl9IXw0KPiA+ICsN Cj4gPiArZXh0ZXJuIGludCBpZnBnYV9yYXdkZXZfbG9ndHlwZTsNCj4gPiArDQo+ID4gKyNkZWZp bmUgSUZQR0FfUkFXREVWX1BNRF9MT0cobGV2ZWwsIGZtdCwgYXJncy4uLikgXA0KPiA+ICsJcnRl X2xvZyhSVEVfTE9HXyAjIyBsZXZlbCwgaWZwZ2FfcmF3ZGV2X2xvZ3R5cGUsICIlcygpOiAiIGZt dCAiXG4iLCBcDQo+ID4gKwkJX19mdW5jX18sICMjYXJncykNCj4gDQo+IEp1c3QgYSB0cml2aWFs IGNvbW1lbnQgLSB5b3Ugd2FudCBhbGwgeW91ciBsb2dzLCB3aGV0aGVyIElORk8sIEVSUk9SIGV0 YyB0bw0KPiBiZSBhcHBlbmRlZCB3aXRoIGZ1bmN0aW9uIG5hbWU/IEl0cyB5b3VyIGNob2ljZSwg YnV0IGlkZWFsbHkgeW91IHNob3VsZA0KPiBzZXBhcmF0ZS4NCj4gDQo+ID4gKw0KPiA+ICsjZGVm aW5lIElGUEdBX1JBV0RFVl9QTURfRlVOQ19UUkFDRSgpDQo+IElGUEdBX1JBV0RFVl9QTURfTE9H KERFQlVHLA0KPiA+ICsiPj4iKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBJRlBHQV9SQVdERVZfUE1E X0RFQlVHKGZtdCwgYXJncy4uLikgXA0KPiA+ICsJSUZQR0FfUkFXREVWX1BNRF9MT0coREVCVUcs IGZtdCwgIyMgYXJncykgI2RlZmluZQ0KPiA+ICtJRlBHQV9SQVdERVZfUE1EX0lORk8oZm10LCBh cmdzLi4uKSBcDQo+ID4gKwlJRlBHQV9SQVdERVZfUE1EX0xPRyhJTkZPLCBmbXQsICMjIGFyZ3Mp ICNkZWZpbmUNCj4gPiArSUZQR0FfUkFXREVWX1BNRF9FUlIoZm10LCBhcmdzLi4uKSBcDQo+ID4g KwlJRlBHQV9SQVdERVZfUE1EX0xPRyhFUlIsIGZtdCwgIyMgYXJncykgI2RlZmluZQ0KPiA+ICtJ RlBHQV9SQVdERVZfUE1EX1dBUk4oZm10LCBhcmdzLi4uKSBcDQo+ID4gKwlJRlBHQV9SQVdERVZf UE1EX0xPRyhXQVJOSU5HLCBmbXQsICMjIGFyZ3MpDQo+ID4gKw0KPiA+ICtlbnVtIGlmcGdhX3Jh d2Rldl9kZXZpY2Vfc3RhdGUgew0KPiA+ICsJSUZQR0FfSURMRSwNCj4gPiArCUlGUEdBX1JFQURZ LA0KPiA+ICsJSUZQR0FfRVJST1INCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUg c3RydWN0IG9wYWVfYWRhcHRlciAqDQo+ID4gK2lmcGdhX3Jhd2Rldl9nZXRfcHJpdihjb25zdCBz dHJ1Y3QgcnRlX3Jhd2RldiAqcmF3ZGV2KSB7DQo+ID4gKwlyZXR1cm4gcmF3ZGV2LT5kZXZfcHJp dmF0ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2VuZGlmIC8qIF9JRlBHQV9SQVdERVZfSF8gKi8N Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXcvaWZwZ2FfcmF3ZGV2L3J0ZV9pZnBnYV9yYXdk ZXZfdmVyc2lvbi5tYXANCj4gPiBiL2RyaXZlcnMvcmF3L2lmcGdhX3Jhd2Rldi9ydGVfaWZwZ2Ff cmF3ZGV2X3ZlcnNpb24ubWFwDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAw MDAwMDAwLi45YjlhYjFhDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvcmF3 L2lmcGdhX3Jhd2Rldi9ydGVfaWZwZ2FfcmF3ZGV2X3ZlcnNpb24ubWFwDQo+ID4gQEAgLTAsMCAr MSw0IEBADQo+ID4gK0RQREtfMTguMDUgew0KPiA+ICsNCj4gPiArCWxvY2FsOiAqOw0KPiA+ICt9 Ow0KPiA+IGRpZmYgLS1naXQgYS9tay9ydGUuYXBwLm1rIGIvbWsvcnRlLmFwcC5tayBpbmRleCA5 ZGUyZWRiLi40YTc2ODkwDQo+ID4gMTAwNjQ0DQo+ID4gLS0tIGEvbWsvcnRlLmFwcC5taw0KPiA+ ICsrKyBiL21rL3J0ZS5hcHAubWsNCj4gPiBAQCAtMjQ5LDYgKzI0OSw3IEBAIGVuZGlmICMgQ09O RklHX1JURV9MSUJSVEVfRVZFTlRERVYNCj4gPg0KPiA+ICAgaWZlcSAoJChDT05GSUdfUlRFX0xJ QlJURV9SQVdERVYpLHkpDQo+ID4gICBfTERMSUJTLSQoQ09ORklHX1JURV9MSUJSVEVfUE1EX1NL RUxFVE9OX1JBV0RFVikgKz0NCj4gPiAtbHJ0ZV9wbWRfc2tlbGV0b25fcmF3ZGV2DQo+ID4gK19M RExJQlMtJChDT05GSUdfUlRFX0xJQlJURV9JRlBHQV9SQVdERVYpICAgKz0NCj4gLWxydGVfaWZw Z2FfcmF3ZGV2DQo+ID4gICBlbmRpZiAjIENPTkZJR19SVEVfTElCUlRFX1JBV0RFVg0KPiA+DQo+ ID4NCj4gPg0KPiANCj4gSG93IGZhc3QgY2FuIHlvdSBmaXggYW5kIHB1c2g/IEkgY2FuIHNwYXJl IHRpbWUgdG9tb3Jyb3cgKDUvTWF5KSB0bw0KPiByZS1yZXZpZXcsIGlmIHlvdSBjYW4gcHVzaCBi eSB0aGVuLiBJdCBtaWdodCBoZWxwIGluIG1lcmdpbmcgbmV4dCB3ZWVrLg0KPiANCj4gLQ0KPiBT aHJleWFuc2gNCg0KSGkgU2hyZXlhbnNoOg0KDQpUaGFuayB5b3UgZm9yIHlvdXIgcmV2aWV3LCB3 ZSB3aWxsIGZpeCBhbmQgcHVzaCBhdCBuZXh0IGRheS4NCg0KQmVzdA0KVGlhbmZlaQ0KDQo=