From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 3A5C01396 for ; Thu, 2 Apr 2015 16:16:30 +0200 (CEST) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP; 02 Apr 2015 07:16:29 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,511,1422950400"; d="scan'208";a="689503412" Received: from orsmsx110.amr.corp.intel.com ([10.22.240.8]) by fmsmga001.fm.intel.com with ESMTP; 02 Apr 2015 07:16:30 -0700 Received: from fmsmsx104.amr.corp.intel.com (10.18.124.202) by ORSMSX110.amr.corp.intel.com (10.22.240.8) with Microsoft SMTP Server (TLS) id 14.3.224.2; Thu, 2 Apr 2015 07:16:28 -0700 Received: from fmsmsx113.amr.corp.intel.com ([169.254.13.111]) by fmsmsx104.amr.corp.intel.com ([10.18.124.202]) with mapi id 14.03.0224.002; Thu, 2 Apr 2015 07:16:28 -0700 From: "Wiles, Keith" To: "dev@dpdk.org" Thread-Topic: [dpdk-dev] [RFC] Adding multiple device types to DPDK. Thread-Index: AQHQbU+b+yAkLgCq9kSDn5yz7Dlulg== Date: Thu, 2 Apr 2015 14:16:27 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.254.35.22] Content-Type: text/plain; charset="euc-kr" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC] Adding multiple device types to DPDK. X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Apr 2015 14:16:31 -0000 SGkgQWxsLCBqdXN0IHRvIG1ha2UgYSBjb21tZW50IG9uIG15IG93biBlbWFpbCA6LSkNCg0KT24g NC8xLzE1LCA3OjQ0IEFNLCAiV2lsZXMsIEtlaXRoIiA8a2VpdGgud2lsZXNAaW50ZWwuY29tPiB3 cm90ZToNCg0KPkhpIGFsbCwgKGhvcGluZyBmb3JtYXQgb2YgdGhlIHRleHQgaXMgbWFpbnRhaW5l ZCkNCj4NCj5CcnVjZSBhbmQgbXlzZWxmIGFyZSBzdWJtaXR0aW5nIHRoaXMgUkZDIGluIGhvcGVz IG9mIHByb3ZpZGluZyBkaXNjdXNzaW9uDQo+cG9pbnRzIGZvciB0aGUgaWRlYS4gUGxlYXNlIGRv IG5vdCBnZXQgY2FycmllZCBhd2F5IHdpdGggdGhlIGNvZGUNCj5pbmNsdWRlZCwgaXQgd2FzIHRv IGhlbHAgZXZlcnlvbmUgdW5kZXJzdGFuZCB0aGUgcHJvcG9zYWwvUkZDLg0KPg0KPlRoZSBSRkMg aXMgdG8gZGVzY3JpYmUgYSBwcm9wb3NlZCBjaGFuZ2Ugd2UgYXJlIGxvb2tpbmcgdG8gbWFrZSB0 byBEUERLIHRvDQo+YWRkIG1vcmUgZGV2aWNlIHR5cGVzLiBXZSB3b3VsZCBsaWtlIHRvIGFkZCBp biB0byBEUERLIHRoZSBpZGVhIG9mIGENCj5nZW5lcmljIHBhY2tldC1kZXZpY2Ugb3Igqfhwa3Rk ZXap9ywgd2hpY2ggY2FuIGJlIHRob3VnaHQgb2YgYXMgYSB0aGluIGxheWVyDQo+Zm9yIGFsbCBk ZXZpY2UgY2xhc3Nlcy4gRm9yIG90aGVyIGRldmljZSB0eXBlcyBzdWNoIGFzIHBvdGVudGlhbGx5 IGENCj6p+GNyeXB0b2Rldqn3IG9yIKn4ZHBpZGV2qfcuIE9uZSBvZiB0aGUgbWFpbiBnb2FscyBp cyB0byBub3QgZWZmZWN0DQo+cGVyZm9ybWFuY2UgYW5kIG5vdCByZXF1aXJlIGFueSBjdXJyZW50 IGFwcGxpY2F0aW9uIHRvIGJlIG1vZGlmaWVkLiBUaGUNCj5wa3RkZXYgbGF5ZXIgaXMgcHJvdmlk aW5nIGEgbGlnaHQgZnJhbWV3b3JrIGZvciBkZXZlbG9wZXJzIHRvIGFkZCBhIGRldmljZQ0KPnRv IERQREsuDQo+DQo+UmVhc29uIGZvciBDaGFuZ2UNCj4tLS0tLS0tLS0tLS0tLS0tLQ0KPg0KPlRo ZSByZWFzb24gd2h5IHdlIGFyZSBsb29raW5nIHRvIGludHJvZHVjZSB0aGVzZSBjb25jZXB0cyB0 byBEUERLIGFyZToNCj4NCj4qIEV4cGFuZCB0aGUgc2NvcGUgb2YgRFBESyBzbyB0aGF0IGl0IGNh biBwcm92aWRlIEFQSXMgZm9yIG1vcmUgdGhhbiBqdXN0DQo+cGFja2V0IGFjcXVpc2l0aW9uIGFu ZCB0cmFuc21pc3Npb24sIGJ1dCBhbHNvIHByb3ZpZGUgQVBJcyB0aGF0IGNhbiBiZQ0KPnVzZWQg dG8gd29yayB3aXRoIG90aGVyIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBvZmZsb2Fkcywgc3VjaCBh cw0KPmNyeXB0b2dyYXBoaWMgYWNjZWxlcmF0b3JzLCBvciBhY2NlbGVyYXRlZCBsaWJyYXJpZXMg Zm9yIGNyeXB0b2dyYXBoaWMNCj5mdW5jdGlvbnMuIFtUaGUgcmVhc29uIHdoeSBib3RoIHNvZnR3 YXJlIGFuZCBoYXJkd2FyZSBhcmUgbWVudGlvbmVkIGlzIHNvDQo+dGhhdCB0aGUgc2FtZSBBUElz IGNhbiBiZSB1c2VkIHdoZXRoZXIgb3Igbm90IGEgaGFyZHdhcmUgYWNjZWxlcmF0b3IgaXMNCj5h Y3R1YWxseSBhdmFpbGFibGVdLg0KPiogUHJvdmlkZSBhIG1pbmltYWwgY29tbW9uIGJhc2lzIGZv ciBkZXZpY2UgYWJzdHJhY3Rpb24gaW4gRFBESywgdGhhdCBjYW4NCj5iZSB1c2VkIHRvIHVuaWZ5 IHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgcGFja2V0IEkvTyBkZXZpY2VzIGFscmVhZHkNCj5leGlz dGluZyBpbiBEUERLLiBUbyB0aGlzIGVuZCwgdGhlIGV0aGRldiBBUElzIGFyZSBhIGdvb2Qgc3Rh cnRpbmcgcG9pbnQsDQo+YnV0IHRoZSBldGhkZXYgbGlicmFyeSBjb250YWlucyB0b28gbWFueSBm dW5jdGlvbnMgd2hpY2ggYXJlIE5JQy1zcGVjaWZpYw0KPnRvIGJlIGEgZ2VuZXJhbC1wdXJwb3Nl IHNldCBvZiBBUElzIGFjcm9zcyBhbGwgZGV2aWNlcy4NCj4gICAgIE5vdGU6IFRoZSBpZGVhIHdh cyBwcmV2aW91c2x5IHRvdWNoZWQgb24gaGVyZToNCj5odHRwOi8vcGVybWFsaW5rLmdtYW5lLm9y Zy9nbWFuZS5jb21wLm5ldHdvcmtpbmcuZHBkay5kZXZlbC8xMzU0NQ0KPg0KPkRlc2NyaXB0aW9u IG9mIFByb3Bvc2VkIENoYW5nZQ0KPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPg0K PlRoZSBiYXNpYyBpZGVhIGJlaGluZCAicGt0ZGV2IiBpcyB0byBhYnN0cmFjdCBvdXQgYSBmZXcg Y29tbW9uIHJvdXRpbmVzDQo+YW5kIHN0cnVjdHVyZXMvbWVtYmVycyBvZiBzdHJ1Y3R1cmVzIGJ5 IHN0YXJ0aW5nIHdpdGggZXRoZGV2IHN0cnVjdHVyZXMgYXMNCj5hIHN0YXJ0aW5nIHBvaW50LCBj dXQgaXQgZG93biB0byBsaXR0bGUgbW9yZSB0aGFuIGEgZmV3IG1lbWJlcnMgaW4gZWFjaA0KPnN0 cnVjdHVyZSB0aGVuIHBvc3NpYmxlIGFkZCBqdXN0IHJ4X2J1cnN0IGFuZCB0eF9idXJzdC4gVGhl biB1c2UgdGhlDQo+c3RydWN0dXJlcyBhcyBhIHN0YXJ0aW5nIHBvaW50IGZvciB3cml0aW5nIGEg ZGV2aWNlIHR5cGUuIEN1cnJlbnRseSB3ZQ0KPmhhdmUgdGhlIHJ4X2J1cnN0L3R4X2J1cnN0IHJv dXRpbmVzIG1vdmVkIHRvIHRoZSBwa3RkZXYgYW5kIGl0IHNlZSBsaWtlDQo+bW92ZSBhIGNvdXBs ZSBtb3JlIGNvbW1vbiBmdW5jdGlvbnMgbWF5YmUgcmVzYW9uYWJsZS4gSXQgY291bGQgYmUgdGhl DQo+UngvVHggcm91dGluZXMgaW4gcGt0ZGV2IHNob3VsZCBiZSBsZWZ0IGFzIGlzLCBidXQgaW4g dGhlIGNvZGUgYmVsb3cgaXMgYQ0KPnBvc3NpYmxlIHJlYXNvbiB0byBhYnN0cmFjdCBhIGZldyBy b3V0aW5lcyBpbnRvIGEgY29tbW9uIHNldCBvZiBmaWxlcy4NCj4NCj5Gcm9tIHRoZXJlLCB3ZSBo YXZlIHRoZSBldGhkZXYgdHlwZSB3aGljaCBhZGRzIGluIHRoZSBleGlzdGluZyBmdW5jdGlvbnMN Cj5zcGVjaWZpYyB0byBFdGhlcm5ldCBkZXZpY2VzLCBhbmQgYWxzbywgZm9yIGV4YW1wbGUsIGEg Y3J5cHRvZGV2IHdoaWNoIG1heQ0KPmFkZCBpbiBmdW5jdGlvbnMgc3BlY2lmaWMgZm9yIGNyeXB0 b2dyYXBoaWMgb2ZmbG9hZC4gQXMgbm93LCB3aXRoIHRoZQ0KPmV0aGRldiwgdGhlIHNwZWNpZmlj IGRyaXZlcnMgcHJvdmlkZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlDQo+ZnVuY3Rp b25hbGl0eSBleHBvc2VkIGJ5IHRoZSBpbnRlcmZhY2UuIFRoaXMgaGllcmFyY2h5IGlzIHNob3du IGluIHRoZQ0KPmRpYWdyYW0gYmVsb3csIHVzaW5nIHRoZSBleGlzdGluZyBldGhkZXYgYW5kIGl4 Z2JlIGRyaXZlcnMgYXMgYSByZWZlcmVuY2UsDQo+YWxvbmdzaWRlIGEgaHlwb3RoZXRpY2FsIGNy eXB0b2RldiBjbGFzcyBhbmQgZHJpdmVyIGltcGxlbWVudGF0aW9uDQo+KGNhdGNoaW5nbHkgY2Fs bGVkKSAiWCI6DQo+DQo+ICAgICAgICAgICAgICAgICAgICAsLS0tLS0tLS0tLS0tLS0tLS0tLS0t Lg0KPiAgICAgICAgICAgICAgICAgICAgfCBzdHJ1Y3QgcnRlX3BrdGRldiAgIHwNCj4gICAgICAg ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+ICAgICAgICAgICAgICAgICAg ICB8IHJ0ZV9wa3RfcnhfYnVyc3QoKSAgfA0KPiAgICAgICAgICAgIC4tLS0tLS0tfCBydGVfcGt0 X3R4X2J1cnN0KCkgIHwtLS0tLS0tLS0tLS4NCj4gICAgICAgICAgICB8ICAgICAgIGAtLS0tLS0t LS0tLS0tLS0tLS0tLS0nICAgICAgICAgICB8DQo+ICAgICAgICAgICAgfCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KPiAgICAgICAgICAgIHwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4gICwtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLiAgICAsLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLg0KPiAgfCAgICBz dHJ1Y3QgcnRlX2V0aGRldiAgICAgICAgICB8ICAgIHwgICAgICBzdHJ1Y3QgcnRlX2NyeXB0b2Rl diAgICB8DQo+ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCj4gIHwgcnRlX2V0aF9kZXZfY29uZmlndXJlKCkgICAg ICAgfCAgICB8IHJ0ZV9jcnlwdG9faW5pdF9zeW1fc2Vzc2lvbigpfA0KPiAgfCBydGVfZXRoX2Fs bG11bHRpY2FzdF9lbmFibGUoKSB8ICAgIHwgcnRlX2NyeXB0b19kZWxfc3ltX3Nlc3Npb24oKSB8 DQo+ICB8IHJ0ZV9ldGhfZmlsdGVyX2N0cmwoKSAgICAgICAgIHwgICAgfCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwNCj4gIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyAg ICBgLS0tLS0tLS0tLS0tLS0tLi0tLS0tLS0tLS0tLS0tJw0KPiAgICAgICAgICAgIHwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQo+ICAgICAgICAgICAgfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4gICwtLS0tLS0tLS0nLS0t LS0tLS0tLS0tLS0tLS0tLS0tLiAgICAsLS0tLS0tLS0tLS0tLS0tJy0tLS0tLS0tLS0tLS0tLg0K PiAgfCAgICBzdHJ1Y3QgcnRlX3BtZF9peGdiZSAgICAgICB8ICAgIHwgICAgICBzdHJ1Y3QgcnRl X3BtZF9YICAgICAgICB8DQo+ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAg Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCj4gIHwgLmNvbmZpZ3VyZSAtPiBpeGdi ZV9jb25maWd1cmUgfCAgICB8IC5pbml0X3Nlc3Npb24gLT4gWF9pbml0X3NlcygpfA0KPiAgfCAu dHhfYnVyc3QgIC0+IGl4Z2JlX3htaXRfcGt0cyB8ICAgIHwgLnR4X2J1cnN0IC0+IFhfaGFuZGxl X3BrdHMoKSB8DQo+ICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScgICAgYC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScNCj4NCj5XZSBhcmUgbm90IGF0dGVtcHRpbmcgdG8g Y3JlYXRlIGEgcmVhbCBjbGFzcyBtb2RlbCBoZXJlIG9ubHkgbG9va2luZyBhdA0KPmNyZWF0aW5n IGEgdmVyeSBiYXNpYyBjb21tb24gc2V0IG9mIEFQSXMgYW5kIHN0cnVjdHVyZXMgZm9yIG90aGVy IGRldmljZQ0KPnR5cGVzLg0KPg0KPkluIHRlcm1zIG9mIGNvZGUgY2hhbmdlcyBmb3IgdGhpcywg d2Ugb2J2aW91c2x5IG5lZWQgdG8gYWRkIGluIG5ldw0KPmludGVyZmFjZSBsaWJyYXJpZXMgZm9y IHBrdGRldiBhbmQgY3J5cHRvZGV2LiBUaGUgcGt0ZGV2IGxpYnJhcnkgY2FuDQo+ZGVmaW5lIGEg c2tlbGV0b24gc3RydWN0dXJlIGZvciB0aGUgZmlyc3QgZmV3IGVsZW1lbnRzIG9mIHRoZSBuZXN0 ZWQNCj5zdHJ1Y3R1cmVzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS4gRWFjaCBvZiB0aGUgZGVmaW5l cyBiZWxvdyBpbGx1c3RyYXRlIHRoZQ0KPmNvbW1vbiBtZW1iZXJzIGluIGRldmljZSBzdHJ1Y3R1 cmVzLCB3aGljaCBnaXZlcyBzb21lIGJhc2ljIHN0cnVjdHVyZSB0aGUNCj5kZXZpY2UgZnJhbWV3 b3JrLiBFYWNoIG9mIHRoZSBkZWZpbmVzIGFyZSBwbGFjZWQgYXQgdGhlIHRvcCBvZiB0aGUgZGV2 aWNlcw0KPm1hdGNoaW5nIHN0cnVjdHVyZXMgYW5kIGFsbG93cyB0aGUgZGV2aWNlcyB0byBjb250 YWluIGNvbW1vbiBhbmQgcHJpdmF0ZQ0KPmRhdGEuIFRoZSBwa2RldiBzdHJ1Y3R1cmVzIG92ZXJs YXkgdGhlIGZpcnN0IGNvbW1vbiBzZXQgb2YgbWVtYmVycyBmb3INCj5lYWNoIGRldmljZSB0eXBl Lg0KPg0KPkZvciBleGFtcGxlOg0KPi0tLS0tLS0tLS0tLQ0KPg0KPldlIGFyZSB1c2luZyBtYWNy b3MgdG8gcmVkdWNlIGNvZGUgY2hhbmdlcyB0byBEUERLLCBidXQgbmVzdGVkIHN0cnVjdHVyZXMN Cj5hcmUgYSBiZXR0ZXIgc29sdXRpb246DQo+DQo+I2RlZmluZSBSVEVfUEtUX0NPTU1PTl9ERVYo X3QpDQo+ICAgICAgICAgICAgICAgICBcDQo+ICAgIHBrdF9yeF9idXJzdF90ICAgICAgICAgICAg ICByeF9wa3RfYnVyc3Q7ICAgLyoqPCBQb2ludGVyIHRvIFBNRA0KPnJlY2VpdmUgZnVuY3Rpb24u ICovICAgIFwNCj4gICAgcGt0X3R4X2J1cnN0X3QgICAgICAgICAgICAgIHR4X3BrdF9idXJzdDsg ICAvKio8IFBvaW50ZXIgdG8gUE1EDQo+dHJhbnNtaXQgZnVuY3Rpb24uICovICAgXA0KPiAgICBz dHJ1Y3QgcnRlXyMjX3QjI19kZXZfZGF0YSAgKmRhdGE7ICAgICAgICAgIC8qKjwgUG9pbnRlciB0 byBkZXZpY2UNCj5kYXRhICovICAgICAgICAgICAgICBcDQo+ICAgIGNvbnN0IHN0cnVjdCBfdCMj X2RyaXZlciAgICAqZHJpdmVyOyAgICAgICAgLyoqPCBEcml2ZXIgZm9yIHRoaXMNCj5kZXZpY2Ug Ki8gICAgICAgICAgICAgIFwNCj4gICAgc3RydWN0IF90IyNfZGV2X29wcyAgICAgICAgICpkZXZf b3BzOyAgICAgICAvKio8IEZ1bmN0aW9ucyBleHBvcnRlZCBieQ0KPlBNRCAqLyAgICAgICAgICAg XA0KPiAgICBzdHJ1Y3QgcnRlX3BjaV9kZXZpY2UgICAgICAgKnBjaV9kZXY7ICAgICAgIC8qKjwg UENJIGluZm8uIHN1cHBsaWVkIGJ5DQo+cHJvYmluZyAqLyAgICAgICBcDQo+ICAgIC8qKiBVc2Vy IGFwcGxpY2F0aW9uIGNhbGxiYWNrIGZvciBpbnRlcnJ1cHRzIGlmIHByZXNlbnQgKi8NCj4gICAg ICAgICAgICAgICAgIFwNCj4gICAgc3RydWN0IHJ0ZV8jI190IyNfZGV2X2NiX2xpc3QgICBsaW5r X2ludHJfY2JzOw0KPiAgICAgICAgICAgICAgICAgXA0KPiAgICAvKiogICAgICAgICAgIA0KPiAg ICAgICAgICAgICAgICAgXA0KPiAgICAgKiBVc2VyLXN1cHBsaWVkIGZ1bmN0aW9ucyBjYWxsZWQg ZnJvbSByeF9idXJzdCB0byBwb3N0LXByb2Nlc3MNCj4gICAgICAgICAgICAgICAgIFwNCj4gICAg ICogcmVjZWl2ZWQgcGFja2V0cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZSB1c2VyDQo+ICAg ICAgICAgICAgICAgICBcDQo+ICAgICAqLyAgICAgICAgICAgDQo+ICAgICAgICAgICAgICAgICBc DQo+ICAgIHN0cnVjdCBydGVfIyNfdCMjX3J4dHhfY2FsbGJhY2sgKipwb3N0X3J4X2J1cnN0X2Ni czsNCj4gICAgICAgICAgICAgICAgIFwNCj4gICAgLyoqICAgICAgICAgICANCj4gICAgICAgICAg ICAgICAgIFwNCj4gICAgICogVXNlci1zdXBwbGllZCBmdW5jdGlvbnMgY2FsbGVkIGZyb20gdHhf YnVyc3QgdG8gcHJlLXByb2Nlc3MNCj4gICAgICAgICAgICAgICAgIFwNCj4gICAgICogcmVjZWl2 ZWQgcGFja2V0cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZSBkcml2ZXIgZm9yDQo+dHJhbnNt aXNzaW9uLiAgICAgICAgICAgICAgICAgXA0KPiAgICAgKi8gICAgICAgICAgIA0KPiAgICAgICAg ICAgICAgICAgXA0KPiAgICBzdHJ1Y3QgcnRlXyMjX3QjI19yeHR4X2NhbGxiYWNrICoqcHJlX3R4 X2J1cnN0X2NiczsNCj4gICAgICAgICAgICAgICAgIFwNCj4gICAgZW51bSBydGVfcGt0X2Rldl90 eXBlICAgICAgIGRldl90eXBlOyAgICAgICAvKio8IEZsYWcgaW5kaWNhdGluZyB0aGUNCj5kZXZp Y2UgdHlwZSAqLyAgICAgXA0KPiAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgYXR0YWNo ZWQgICAgICAgIC8qKjwgRmxhZyBpbmRpY2F0aW5nIHRoZQ0KPnBvcnQgaXMgYXR0YWNoZWQgKi8N Cj4gICAgLyogUG9zc2libGUgYWxpZ25tZW50IG9yIGEgaG9sZSBpbiB0aGUgc3RydWN0dXJlICov DQo+DQo+I2RlZmluZSBSVEVfUEtUX05BTUVfTUFYX0xFTiAoMzIpDQo+DQo+I2RlZmluZSBSVEVf UEtUX0NPTU1PTl9ERVZfREFUQQ0KPiAgICAgXA0KPiAgICBjaGFyIG5hbWVbUlRFX1BLVF9OQU1F X01BWF9MRU5dOyAvKio8IFVuaXF1ZSBpZGVudGlmaWVyIG5hbWUgKi8NCj4gICAgIFwNCj4gICAg ICAgICAgICAgICAgICANCj4gICAgIFwNCj4gICAgdm9pZCAqKnJ4X3F1ZXVlczsgICAgICAgICAg ICAgICAvKio8IEFycmF5IG9mIHBvaW50ZXJzIHRvIFJYIHF1ZXVlcy4NCj4qLyAgICAgXA0KPiAg ICB2b2lkICoqdHhfcXVldWVzOyAgICAgICAgICAgICAgIC8qKjwgQXJyYXkgb2YgcG9pbnRlcnMg dG8gVFggcXVldWVzLg0KPiovICAgICBcDQo+ICAgIHVpbnQxNl90IG5iX3J4X3F1ZXVlczsgICAg ICAgICAgLyoqPCBOdW1iZXIgb2YgUlggcXVldWVzLiAqLw0KPiAgICAgXA0KPiAgICB1aW50MTZf dCBuYl90eF9xdWV1ZXM7ICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIFRYIHF1ZXVlcy4gKi8NCj4g ICAgIFwNCj4gICAgICAgICAgICAgICAgICANCj4gICAgIFwNCj4gICAgdWludDE2X3QgZmxhZ3M7 ICAgICAgICAgICAgICAgICAvKio8IEJpdCBmaWVsZHMgZm9yIHh5emRldidzIHRvIHVzZS4NCj4q LyAgICAgXA0KPiAgICB1aW50MTZfdCBtdHU7ICAgICAgICAgICAgICAgICAgIC8qKjwgTWF4aW11 bSBUcmFuc21pc3Npb24gVW5pdC4gKi8NCj4gICAgIFwNCj4gICAgdWludDhfdCB1bml0X2lkOyAg ICAgICAgICAgICAgICAvKio8IFVuaXQgSUQgZm9yIHRoaXMgaW5zdGFuY2UgKi8NCj4gICAgIFwN Cj4gICAgdWludDhfdCBfZmlsbGVyWzddOyAgICAgICAgICAgICAvKiBhbGlnbm1lbnQgZmlsbGVy ICovDQo+ICAgICBcDQo+ICAgICAgICAgICAgICAgICAgDQo+ICAgICBcDQo+ICAgIC8qIDY0Yml0 IGFsaWdubWVudCBzdGFydHMgaGVyZSAqLw0KPiAgICAgXA0KPiAgICB2b2lkICAgICpkZXZfcHJp dmF0ZTsgICAgICAgICAgIC8qKjwgUE1ELXNwZWNpZmljIHByaXZhdGUgZGF0YSAqLw0KPiAgICAg XA0KPiAgICB1aW50NjRfdCByeF9tYnVmX2FsbG9jX2ZhaWxlZDsgIC8qKjwgUlggcmluZyBtYnVm IGFsbG9jYXRpb24gZmFpbHVyZXMuDQo+Ki8gICBcDQo+ICAgIHVpbnQzMl90IG1pbl9yeF9idWZf c2l6ZTsgICAgICAgLyoqPCBDb21tb24gcnggYnVmZmVyIHNpemUgaGFuZGxlZCBieQ0KPmFsbCBx dWV1ZXMgKi8gXA0KPiAgICB1aW50MzJfdCBfcGFkMA0KPg0KPiNkZWZpbmUgcG9ydF9pZCAgICAg dW5pdF9pZA0KPg0KPiNkZWZpbmUgUlRFX1BLVF9DT01NT05fREVWX0lORk8NCj4gICAgIFwNCj4g ICAgc3RydWN0IHJ0ZV9wY2lfZGV2aWNlICAgKnBjaV9kZXY7ICAgICAgIC8qKjwgRGV2aWNlIFBD SSBpbmZvcm1hdGlvbi4NCj4qLyAgICAgXA0KPiAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAq ZHJpdmVyX25hbWU7ICAgLyoqPCBEZXZpY2UgRHJpdmVyIG5hbWUuICovDQo+ICAgICBcDQo+ICAg IHVuc2lnbmVkIGludCAgICAgICAgICAgIGlmX2luZGV4OyAgICAgICAvKio8IEluZGV4IHRvIGJv dW5kIGhvc3QNCj5pbnRlcmZhY2UsIG9yIDAgaWYgbm9uZS4gKi8gXA0KPiAgICAgICAgLyogVXNl IGlmX2luZGV4dG9uYW1lKCkgdG8gdHJhbnNsYXRlIGludG8gYW4gaW50ZXJmYWNlIG5hbWUuICov DQo+ICAgICBcDQo+ICAgIHVpbnQzMl90IF9wYWQwDQo+DQo+VGhlIGFib3ZlIGlzIGF0dGVtcHRp bmcgdG8gY29sbGVjdCB0aGUgY29tbW9uIG1lbWJlcnMgdG8gYmUgcGxhY2UgaW50byB0aGUNCj50 b3Agb2YgcHJpdmF0ZSBkZXZpY2Ugc3RydWN0dXJlcyBhcyB3ZSBmZWVsIHRoZXNlIG1lbWJlcnMg c2hvdWxkIGJlIGZhaXJseQ0KPmNvbW1vbiBhbW9uZyB0aGUgZGV2aWNlIHR5cGVzLg0KPg0KPi8q Kg0KPiogQGludGVybmFsDQo+KiBUaGUgZ2VuZXJpYyBkYXRhIHN0cnVjdHVyZSBhc3NvY2lhdGVk IHdpdGggZWFjaCBkZXZpY2UuDQo+Kg0KPiogUG9pbnRlcnMgdG8gYnVyc3Qtb3JpZW50ZWQgcGFj a2V0IHJlY2VpdmUgYW5kIHRyYW5zbWl0IGZ1bmN0aW9ucyBhcmUNCj4qIGxvY2F0ZWQgYXQgdGhl IGJlZ2lubmluZyBvZiB0aGUgc3RydWN0dXJlLCBhbG9uZyB3aXRoIHRoZSBwb2ludGVyIHRvDQo+ KiB3aGVyZSBhbGwgdGhlIGRhdGEgZWxlbWVudHMgZm9yIHRoZSBwYXJ0aWN1bGFyIGRldmljZSBh cmUgc3RvcmVkIGluDQo+c2hhcmVkDQo+KiBtZW1vcnkuIFRoaXMgc3BsaXQgYWxsb3dzIHRoZSBm dW5jdGlvbiBwb2ludGVyIGFuZCBkcml2ZXIgZGF0YSB0byBiZQ0KPnBlci0NCj4qIHByb2Nlc3Ms IHdoaWxlIHRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgZGV2aWNlIGlzIHNo YXJlZC4NCj4qLw0KPnN0cnVjdCBydGVfcGt0X2RldiB7DQo+ICAgIFJURV9QS1RfQ09NTU9OX0RF Vihwa3QpOw0KPn07DQo+DQo+LyoqDQo+KiBAaW50ZXJuYWwNCj4qIFRoZSBkYXRhIHBhcnQsIHdp dGggbm8gZnVuY3Rpb24gcG9pbnRlcnMsIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGRldmljZS4NCj4q DQo+KiBUaGlzIHN0cnVjdHVyZSBpcyBzYWZlIHRvIHBsYWNlIGluIHNoYXJlZCBtZW1vcnkgdG8g YmUgY29tbW9uIGFtb25nDQo+ZGlmZmVyZW50DQo+KiBwcm9jZXNzZXMgaW4gYSBtdWx0aS1wcm9j ZXNzIGNvbmZpZ3VyYXRpb24uDQo+Ki8NCj5zdHJ1Y3QgcnRlX3BrdF9kZXZfZGF0YSB7DQo+ICAg IFJURV9QS1RfQ09NTU9OX0RFVl9EQVRBOw0KPn07DQo+DQo+LS0tLS0tDQo+DQo+VGhlIGV4aXN0 aW5nIGV0aGRldiBjb2RlIGNhbiB0aGVuIGhhdmUgYSBtaW5vciB1cGRhdGVzIHN1Y2ggYXMgdGhv c2Ugc2hvd24NCj5iZWxvdzoNCj4NCj5zdHJ1Y3QgcnRlX2V0aF9kZXZfaW5mbyB7DQo+ICAgIFJU RV9QS1RfQ09NTU9OX0RFVl9JTkZPOw0KPg0KPiAgICAvKiBQcml2YXRlIGRldmljZSBkYXRhIG1h eWJlIGhlcmUgKi8NCj4gICAgdWludDMyX3QgbWluX3J4X2J1ZnNpemU7IC8qKjwgTWluaW11bSBz aXplIG9mIFJYIGJ1ZmZlci4gKi8NCj4gICAgdWludDMyX3QgbWF4X3J4X3BrdGxlbjsgLyoqPCBN YXhpbXVtIGNvbmZpZ3VyYWJsZSBsZW5ndGggb2YgUlggcGt0LiAqLw0KPiAgICAuLi4NCj4NCj5z dHJ1Y3QgcnRlX2V0aF9kZXZfZGF0YSB7DQo+ICAgIFJURV9QS1RfQ09NTU9OX0RFVl9EQVRBOyAv Kio8IERlZmluZSBsb2NhdGVkIGluIDxydGVfcGt0Lmg+ICovDQo+DQo+ICAgIC8qIFByaXZhdGUg ZGV2aWNlIGRhdGEgbWF5YmUgaGVyZSAqLw0KPiAgICBzdHJ1Y3QgcnRlX2V0aF9kZXZfc3Jpb3Yg c3Jpb3Y7IC8qKjwgU1JJT1YgZGF0YSAqLw0KPg0KPiAgICBzdHJ1Y3QgcnRlX2V0aF9saW5rIGRl dl9saW5rOyAvKio8IExpbmstbGV2ZWwgaW5mb3JtYXRpb24gJiBzdGF0dXMgKi8NCj4gICAgLi4u DQo+DQo+c3RydWN0IHJ0ZV9ldGhfZGV2IHsNCj4gICAgUlRFX1BLVF9DT01NT05fREVWKGV0aCk7 DQo+ICAgIC8qIFByaXZhdGUgZGV2aWNlIGRhdGEgbWF5YmUgaGVyZSAqLw0KPn07DQo+DQo+Lyog Qml0IGRlZmluZXMgZm9yIGZsYWdzIGluIGNvbW1vbiBwa3Qgc3RydWN0dXJlICovDQo+I2RlZmlu ZSBwcm9taXNjdW91cyAgICAgMHgwMDA4ICAgLyoqPCBSWCBwcm9taXNjdW91cyBtb2RlIE9OKDEp IC8gT0ZGKDApLg0KPiovDQo+I2RlZmluZSBzY2F0dGVyZWRfcnggICAgMHgwMDA0ICAgLyoqPCBS WCBvZiBzY2F0dGVyZWQgcGFja2V0cyBpcyBPTigxKSAvDQo+T0ZGKDApICovDQo+I2RlZmluZSBh bGxfbXVsdGljYXN0ICAgMHgwMDAyICAgLyoqPCBSWCBhbGwgbXVsdGljYXN0IG1vZGUgT04oMSkg Lw0KPk9GRigwKS4gKi8NCj4jZGVmaW5lIGRldl9zdGFydGVkICAgICAweDAwMDEgICAvKio8IERl dmljZSBzdGF0ZTogU1RBUlRFRCgxKS9TVE9QUEVEKDApDQo+Ki8gDQo+DQo+VGhlIGFkdmFudGFn ZSBvZiBkb2luZyBhIGNvbW1vbiBzZXQgb2YgbWVtYmVyIGlzIHRoZSBleGlzdGluZyBldGhkZXYN Cj5zdHJ1Y3R1cmVzIGFuZCBBUElzIGNhbiByZW1haW4gZXhhY3RseSB0aGUgc2FtZSwgYnV0IGV2 ZXJ5IGV0aGRldiBpcyBhbHNvDQo+YSBwa3RkZXYsIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGVpdGhl ciBhcyBhcHByb3ByaWF0ZS4gU2ltaWxhcmx5IGZvciBhIHR5cGUNCj5vZiBjcnlwdG8gZGV2aWNl cywgb3IgZHBpIGRldmljZXMgKG9yIHNvZnR3YXJlIHJpbmdzIG9yIEtOSSBkZXZpY2VzLCBpZiB3 ZQ0KPnNvIGRlc2lyZSksIHdlIGNhbiBiYXNlIHRoZW0gb2ZmIHRoaXMgY29tbW9uIG1pbmltYWwg ZnJhbWV3b3JrIGFuZCB1c2UNCj50aGVtIGFsbCBpbiBhIHNpbWlsYXIgbWFubmVyLg0KPg0KPk1v dmluZyBzb21lIGJhc2ljIGNvbW1vbiBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgaW50byBhIGNv bW1vbiBzZXQgb2YNCj5maWxlcyBnaXZlcyBldmVyeW9uZSBhIGNsZWFuIHN0YXJ0aW5nIHBvaW50 IGZvciBhIG5ldyBkZXZpY2UgcGx1cyBhZGRpbmcgYQ0KPmxpZ2h0IGZyYW1ld29yay4gVGhlIHBr dGRldiBjb2RlIGlzIG5vcm1hbGx5IG5vdCBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUNCj5hcHBs aWNhdGlvbiwgYnV0IGNhbGxlZCBmcm9tIHRoZSBkZXZpY2UgaXRzZWxmIHZpYSBhIGRlZmluZSBp biB0aGUgZGV2aWNlDQo+aGVhZGVyIGZpbGVzLiBUaGUgcGt0ZGV2IFJYL1RYIHJvdXRpbmVzIGNh biBiZSBjYWxsZWQgZnJvbSB0aGUNCj5hcHBsaWNhdGlvbiwgYnV0IHRoZSBhcHBsaWNhdGlvbiBu ZWVkcyB0byBnZXQgdGhlIGRldmljZSBzdHJ1Y3R1cmUgcG9pbnRlcg0KPmJhc2VkIG9uIHRoZSBw b3J0IGlkLg0KPg0KPlRoZSBjcnlwdG9kZXYgQVBJIG1heWJlIHZlcnkgZGlmZmVyZW50IGZyb20g b3RoZXIgZGV2aWNlcyBhbmQgZm9sbG93aW5nDQo+c29tZSB0eXBlIG9mIE9wZW4gQ3J5cHRvIEFQ SS4gVGhlIGdvYWwgaXMgbm90IHRvIHJlc3RyaWN0IHRoZSBkZXZpY2UgQVBJLA0KPmJ1dCB0cnkg dG8gZ2l2ZSBzb21lIHR5cGUgb2Ygc3RydWN0dXJlIHRvIHRnaGUgZGVzaWduLiBEb2VzIGl0IG1h a2Ugc2Vuc2UNCj50byBoYXZlIGEgbWJ1ZiBiYXNlZCBSeC9UeCBBUEksIG1heWJlIG5vdC4gQ291 bGQgdGhlIG1idWYgYmFzZWQgQVBJcyBiZQ0KPmhpZGRlbiBpbiB0aGUgcGt0ZGV2IGNvZGUsIHZl cnkgcG9zc2libGUuIFdlIGhhdmUgYSBsb3Qgb2Ygb3B0aW9ucyBoZXJlLg0KDQpBZGRpbmcgc29t ZSBtb2RpZmllZCBBUEkgbG9va2luZyB2ZXJ5IGNsb3NlIHRvIHRoZSBPcGVuQ3J5cHRvIEFQSSBv ciBMaW51eA0KS2VybmVsIENyeXB0byBBUEkgaXMgYSBnb29kIHdheSB0byBleHRlbmQgYW5kIGNy ZWF0ZSBhIGNvbW1vbiBBUEkgZm9yDQpjcnlwdG8gaW4gRFBESy4gRm9sbG93aW5nIGEgc3RhbmRh cmQgc2V0IG9mIEFQSXMgc2hvdWxkIGhlbHAgYWRvcHRpb24uDQo+DQo+SG93IHRoZSB0d28gUngv VHggcm91dGluZXMgYXJlIGRlZmluZWQ6DQo+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQo+DQo+LyoqDQo+ICoNCj4gKiBSZXRyaWV2ZSBhIGJ1cnN0IG9mIGlucHV0IHBh Y2tldHMgZnJvbSBhIHJlY2VpdmUgcXVldWUgb2YgYW4gRXRoZXJuZXQNCj4gKiBkZXZpY2UuDQo+ ICoNCj48U05JUD4NCj4gKi8NCj4jZGVmaW5lIHJ0ZV9ldGhfcnhfYnVyc3QoX3BpZCwgX3FpZCwg X3BrdHMsIF9uYl9wa3RzKSBcDQo+ICAgIHJ0ZV9wa3RfcnhfYnVyc3QoKHN0cnVjdCBydGVfcGt0 X2RldiAqKSZydGVfZXRoX2RldmljZXNbX3BpZF0sIF9xaWQsDQo+X3BrdHMsIF9uYl9wa3RzKQ0K Pg0KPi8qKg0KPiAqIFNlbmQgYSBidXJzdCBvZiBvdXRwdXQgcGFja2V0cyBvbiBhIHRyYW5zbWl0 IHF1ZXVlIG9mIGFuIEV0aGVybmV0DQo+ZGV2aWNlLg0KPiAqDQo+PFNOSVA+DQo+ICovDQo+I2Rl ZmluZSBydGVfZXRoX3R4X2J1cnN0KF9waWQsIF9xaWQsIF9wa3RzLCBfbmJfcGt0cykgXA0KPiAg ICBydGVfcGt0X3R4X2J1cnN0KChzdHJ1Y3QgcnRlX3BrdF9kZXYgKikmcnRlX2V0aF9kZXZpY2Vb X3BpZF0sIF9xaWQsDQo+X3BrdHMsIF9uYl9wa3RzKQ0KPg0KPkEgc25pcCBvZiBjb2RlIHNob3dp bmcgc29tZSBhZHZhbnRhZ2VzIGFuZCB1c2UgY2FzZSBvZiB1c2luZyBwa3RkZXYgQVBJOg0KPi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KPg0KPk5vdCB0aGUgY29tcGxldGUgY29kZSBhbmQgaXQgaGFzIG5vdCBi ZWVuIHRlc3RlZCBhbmQgaXMgb25seSBhbiBleGFtcGxlDQo+aG93IG9uZSBjb3VsZCB1c2UgdGhl IGRlc2lnbi4NCj4NCj4vKg0KPiAqIFRoZSBsY29yZSBtYWluLiBUaGlzIGlzIHRoZSBtYWluIHRo cmVhZCB0aGF0IGRvZXMgdGhlIHdvcmssIHJlYWRpbmcNCj5mcm9tDQo+ICogYW4gaW5wdXQgcG9y dCBhbmQgd3JpdGluZyB0byBhbiBvdXRwdXQgcG9ydC4NCj4gKi8NCj5zdGF0aWMgX19hdHRyaWJ1 dGVfXygobm9yZXR1cm4pKSB2b2lkDQo+ZG9fd29yayhjb25zdCBzdHJ1Y3QgcGlwZWxpbmVfcGFy YW1zICpwKQ0KPnsNCj4gICAgcHJpbnRmKCJcbkNvcmUgJXUgZm9yd2FyZGluZyBwYWNrZXRzLiAl cyAtPiAlc1xuIiwNCj4gICAgICAgICAgICBydGVfbGNvcmVfaWQoKSwNCj4gICAgICAgICAgICBw LT5zcmMtPmRhdGEtPm5hbWUsDQo+ICAgICAgICAgICAgcC0+ZHN0LT5kYXRhLT5uYW1lKTsNCj4N Cj4gICAgLyogUnVuIHVudGlsIHRoZSBhcHBsaWNhdGlvbiBpcyBxdWl0IG9yIGtpbGxlZC4gKi8N Cj4gICAgZm9yICg7Oykgew0KPiAgICAgICAgLyoNCj4gICAgICAgICAqIFJlY2VpdmUgcGFja2V0 cyBvbiBhIHNyYyBkZXZpY2UgYW5kIGZvcndhcmQgdGhlbSBvbiBvdXQNCj4gICAgICAgICAqIHRo ZSBkc3QgZGV2aWNlLg0KPiAgICAgICAgICovDQo+ICAgICAgICAvKiBHZXQgYnVyc3Qgb2YgUlgg cGFja2V0cywgZnJvbSBmaXJzdCBwb3J0IG9mIHBhaXIuICovDQo+ICAgICAgICBzdHJ1Y3QgcnRl X21idWYgKmJ1ZnNbQlVSU1RfU0laRV07DQo+ICAgICAgICBjb25zdCB1aW50MTZfdCBuYl9yeCA9 IHJ0ZV9wa3RfcnhfYnVyc3QocC0+c3JjLCAwLA0KPiAgICAgICAgICAgICAgICBidWZzLCBCVVJT VF9TSVpFKTsNCj4NCj4gICAgICAgIGlmICh1bmxpa2VseShuYl9yeCA9PSAwKSkNCj4gICAgICAg ICAgICBjb250aW51ZTsNCj4NCj4gICAgICAgIC8qIFNlbmQgYnVyc3Qgb2YgVFggcGFja2V0cywg dG8gc2Vjb25kIHBvcnQgb2YgcGFpci4gKi8NCj4gICAgICAgIGNvbnN0IHVpbnQxNl90IG5iX3R4 ID0gcnRlX3BrdF90eF9idXJzdChwLT5kc3QsIDAsDQo+ICAgICAgICAgICAgICAgIGJ1ZnMsIG5i X3J4KTsNCj4NCj4gICAgICAgIC8qIEZyZWUgYW55IHVuc2VudCBwYWNrZXRzLiAqLw0KPiAgICAg ICAgaWYgKHVubGlrZWx5KG5iX3R4IDwgbmJfcngpKSB7DQo+ICAgICAgICAgICAgdWludDE2X3Qg YnVmOw0KPiAgICAgICAgICAgIGZvciAoYnVmID0gbmJfdHg7IGJ1ZiA8IG5iX3J4OyBidWYrKykN Cj4gICAgICAgICAgICAgICAgcnRlX3BrdG1idWZfZnJlZShidWZzW2J1Zl0pOw0KPiAgICAgICAg fQ0KPiAgICB9DQo+fQ0KPg0KPi8qDQo+ICogVGhlIG1haW4gZnVuY3Rpb24sIHdoaWNoIGRvZXMg aW5pdGlhbGl6YXRpb24gYW5kIGNhbGxzIHRoZSBwZXItbGNvcmUNCj4gKiBmdW5jdGlvbnMuDQo+ ICovDQo+aW50DQo+bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KPnsNCj4gICAgc3RydWN0 IHBpcGVsaW5lX3BhcmFtcyBwW1JURV9NQVhfTENPUkVdOw0KPiAgICBzdHJ1Y3QgcnRlX21lbXBv b2wgKm1idWZfcG9vbDsNCj4gICAgdW5zaWduZWQgbmJfcG9ydHMsIGxjb3JlX2lkOw0KPiAgICB1 aW50OF90IHBvcnRpZDsNCj4NCj4gICAgLyogSW5pdGlhbGl6ZSB0aGUgRW52aXJvbm1lbnQgQWJz dHJhY3Rpb24gTGF5ZXIgKEVBTCkuICovDQo+ICAgIGludCByZXQgPSBydGVfZWFsX2luaXQoYXJn YywgYXJndik7DQo+ICAgIGlmIChyZXQgPCAwKQ0KPiAgICAgICAgcnRlX2V4aXQoRVhJVF9GQUlM VVJFLCAiRXJyb3Igd2l0aCBFQUwgaW5pdGlhbGl6YXRpb25cbiIpOw0KPg0KPiAgICBhcmdjIC09 IHJldDsNCj4gICAgYXJndiArPSByZXQ7DQo+DQo+ICAgIC8qIENoZWNrIHRoYXQgdGhlcmUgaXMg YW4gZXZlbiBudW1iZXIgb2YgcG9ydHMgdG8gc2VuZC9yZWNlaXZlIG9uLiAqLw0KPiAgICBuYl9w b3J0cyA9IHJ0ZV9ldGhfZGV2X2NvdW50KCk7DQo+ICAgIGlmIChuYl9wb3J0cyA8IDIgfHwgKG5i X3BvcnRzICYgMSkpDQo+ICAgICAgICBydGVfZXhpdChFWElUX0ZBSUxVUkUsICJFcnJvcjogbnVt YmVyIG9mIHBvcnRzIG11c3QgYmUgZXZlblxuIik7DQo+DQo+ICAgIC8qIENyZWF0ZXMgYSBuZXcg bWVtcG9vbCBpbiBtZW1vcnkgdG8gaG9sZCB0aGUgbWJ1ZnMuICovDQo+ICAgIG1idWZfcG9vbCA9 IHJ0ZV9tZW1wb29sX2NyZWF0ZSgiTUJVRl9QT09MIiwNCj4gICAgICAgICAgICAgICAgICAgICAg IE5VTV9NQlVGUyAqIG5iX3BvcnRzLA0KPiAgICAgICAgICAgICAgICAgICAgICAgTUJVRl9TSVpF LA0KPiAgICAgICAgICAgICAgICAgICAgICAgTUJVRl9DQUNIRV9TSVpFLA0KPiAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBydGVfcGt0bWJ1Zl9wb29sX3ByaXZhdGUpLA0KPiAg ICAgICAgICAgICAgICAgICAgICAgcnRlX3BrdG1idWZfcG9vbF9pbml0LCBOVUxMLA0KPiAgICAg ICAgICAgICAgICAgICAgICAgcnRlX3BrdG1idWZfaW5pdCwgICAgICBOVUxMLA0KPiAgICAgICAg ICAgICAgICAgICAgICAgcnRlX3NvY2tldF9pZCgpLA0KPiAgICAgICAgICAgICAgICAgICAgICAg MCk7DQo+DQo+ICAgIGlmIChtYnVmX3Bvb2wgPT0gTlVMTCkNCj4gICAgICAgIHJ0ZV9leGl0KEVY SVRfRkFJTFVSRSwgIkNhbm5vdCBjcmVhdGUgbWJ1ZiBwb29sXG4iKTsNCj4NCj4gICAgLyogSW5p dGlhbGl6ZSBhbGwgcG9ydHMuICovDQo+ICAgIGZvciAocG9ydGlkID0gMDsgcG9ydGlkIDwgbmJf cG9ydHM7IHBvcnRpZCsrKQ0KPiAgICAgICAgaWYgKHBvcnRfaW5pdChwb3J0aWQsIG1idWZfcG9v bCkgIT0gMCkNCj4gICAgICAgICAgICBydGVfZXhpdChFWElUX0ZBSUxVUkUsICJDYW5ub3QgaW5p dCBwb3J0ICUiUFJJdTggIlxuIiwNCj4gICAgICAgICAgICAgICAgICAgIHBvcnRpZCk7DQo+DQo+ ICAgIHN0cnVjdCBydGVfcGt0X2RldiAqaW4gPSBydGVfZXRoX2dldF9kZXYoMCk7DQo+ICAgIFJU RV9MQ09SRV9GT1JFQUNIX1NMQVZFKGxjb3JlX2lkKXsNCj4gICAgICAgIGNoYXIgbmFtZVtSVEVf UklOR19OQU1FU0laRV07DQo+ICAgICAgICBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJS SU5HX2Zyb21fJXUiLCBsY29yZV9pZCk7DQo+ICAgICAgICBzdHJ1Y3QgcnRlX3BrdF9kZXYgKm91 dCA9IHJ0ZV9yaW5nX2dldF9kZXYoDQo+ICAgICAgICAgICAgICAgIHJ0ZV9yaW5nX2NyZWF0ZShu YW1lLCA0MDk2LCBydGVfc29ja2V0X2lkKCksIDApKTsNCj4NCj4gICAgICAgIHBbbGNvcmVfaWRd LnNyYyA9IGluOw0KPiAgICAgICAgcFtsY29yZV9pZF0uZHN0ID0gb3V0Ow0KPiAgICAgICAgcnRl X2VhbF9yZW1vdGVfbGF1bmNoKChsY29yZV9mdW5jdGlvbl90ICopZG9fd29yaywNCj4gICAgICAg ICAgICAgICAgJnBbbGNvcmVfaWRdLCBsY29yZV9pZCk7DQo+ICAgICAgICBpbiA9IG91dDsgLy8g bmV4dCBwaXBlbGluZSBzdGFnZSByZWFkcyBmcm9tIG15IG91dHB1dC4NCj4gICAgfQ0KPiAgICAv L25vdyBmaW5pc2ggcGlwZWxpbmUgb24gbWFzdGVyIGxjb3JlDQo+ICAgIGxjb3JlX2lkID0gcnRl X2xjb3JlX2lkKCk7DQo+ICAgIHBbbGNvcmVfaWRdLnNyYyA9IGluOw0KPiAgICBwW2xjb3JlX2lk XS5kc3QgPSBydGVfZXRoX2dldF9kZXYoMSk7DQo+ICAgIGRvX3dvcmsoJnBbbGNvcmVfaWRdKTsN Cj4NCj4gICAgcmV0dXJuIDA7DQo+fQ0KPg0KPg0KPkNoYW5nZXMgdG8gcnRlX2V0aGRldi5bY2hd DQo+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4NCj5UaGUgbW9zdCBjaGFuZ2VzIHRvIHJ0 ZV9ldGhkZXYuW2NoXSB3YXMgdG8gdXNlIHRoZSBuZXcgZGVmaW5lcyBmcm9tDQo+cnRlX3BrdC5o LiBBbGwgb2YgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIGdsb2JhbHMgaW4gZXRoZGV2IGhhZCB0byBi ZQ0KPnJlcGxhY2VkIHdpdGggYSByZWZlcmVuY2UgdG8gYSBnbG9iYWwgc3RydWN0dXJlIGluIGV0 aGRldi4gTW92aW5nIHRoZQ0KPmdsb2JhbCBvciBwcml2YXRlIGRhdGEgaW50byBhIGRldmljZSBz cGVjaWZpYyBzdHJ1Y3R1cmUgc2VlbWVkIHJlYXNvbmFibGUNCj50byByZWR1Y2UgbmFtZSBzcGFj ZSBpc3N1ZXMgd2l0aCBuZXcgZGV2aWNlcy4gVGhlIHJ4X2J1cnN0L3R4X2J1cnN0DQo+cm91dGlu ZXMgd2VyZSByZW1vdmVkIGFzIHRoZXkgbm93IGV4aXN0IGluIHRoZSBydGVfcGt0ZGV2LmMgZmls ZS4gSWYgd2UNCj51c2UgbmVzdGVkIHN0cnVjdHVyZXMgaW5zdGVhZCBvZiBtYWNyb3MgdGhlbiBt b3JlIG9mIHRoZSBjb2RlIHdpbGwgbmVlZCB0bw0KPmJlIGNvbnZlcnRlZCBvciBtYWNyb3MgdXNl ZCB0byBjb252ZXJ0IHRoZSBtZW1iZXJzIHRvIGFkZHJlc3MgdGhlIG5lc3RlZA0KPnN0cnVjdHVy ZXMuDQo+DQo+RXhhbXBsZToNCj4jZGVmaW5lIHJ4X3BrdF9idXJzdCAgICBkZXZfZGF0YS5yeF9w a3RfYnVyc3QNCj4jZGVmaW5lIHR4X3BrdF9idXJzdCAgICBkZXZfZGF0YS50eF9wa3RfYnVyc3QN Cj4NCj4NCj5JbXBhY3QgdG8gRXhpc3RpbmcgQXBwbGljYXRpb25zDQo+LS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KPg0KPk5vbmUuIFRoZSBleGlzdGluZyBBUElzIHNob3VsZCBhbGwg cmVtYWluIHVuY2hhbmdlZCwgb25seSB0aGUgdW5kZXJseWluZw0KPmxpYnJhcnkgY29kZSBuZWVk cyB0byBjaGFuZ2UuIFtPYnZpb3VzbHkgY2hhbmdlcyB0byBhcHBzIHdpbGwgYmUgbmVlZGVkIHRv DQo+dGFrZSBhZHZhbnRhZ2Ugb2YgbmV3IGRldmljZSBjbGFzc2VzIGFzIHdlIG1ha2UgdGhlbSBh dmFpbGFibGVdLg0KPg0KPlRoZSBjcnlwdG8gQVBJIGNvdWxkIGJlIHNpbWlsYXIgdG8gdGhlIE9w ZW4gQ3J5cHRvIEFQSXMgYW5kIHRoZXkgc2VlbQ0KPnJlYXNvbmFibGUsIGJ1dCBhbHNvIHVzaW5n IG1idWZzIHRvIGhvbGQgZGF0YSBpcyBqdXN0IHRyeWluZyB0byB1c2UgdGhhdA0KPmNvbnRhaW5l ciB0eXBlIHRvIHByb3ZpZGUgc29tZSBjb21tb24gc3RydWN0dXJlIHRvIHRoZSBzeXN0ZW0uIFNv bWUgb2YgdGhlDQo+Y3J5cHRvIGRhdGEgd2l0aCBiZSBpbiB0aGUgZm9ybSBvZiBwYWNrZXRzIGFu ZCBzb21lIGluIHRoZSBmb3JtIG9mIGNodW5rcw0KPm9mIGRhdGEsIHdoaWNoIHRoZSBBUEkgc2hv dWxkIGFjY291bnQgZm9yIGluIHRoZSBkZXNpZ24uDQo+DQo+TXkgZ29hbCBpcyB0byBwcm92aWRl IGEgbGlnaHQgd2VpZ2h0IGZyYW1ld29yayBmb3IgYWRkaW5nIG1vcmUgZGV2aWNlcyBhbmQNCj5u b3QgdHJ5IHRvIG1ha2UgZXZlcnRoaW5nIGxvb2sgbGlrZSBFdGhlcm5ldCBkZXZpY2UuDQo+DQo+ UmVnYXJkcywNCj4rK0tlaXRoIGFuZCBCcnVjZQ0KPg0KPg0KDQo=