From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Verma, Vishal L" Subject: Re: [PATCH] ndctl: add a BTT check utility Date: Tue, 24 Jan 2017 20:59:40 +0000 Message-ID: <1485291510.4857.8.camel@intel.com> References: <20170120031234.24226-1-vishal.l.verma@intel.com> <1484959224.4857.6.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US Content-ID: <2584722C7B20AE48861E2AA868F39BD0-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linux-nvdimm-bounces-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org Sender: "Linux-nvdimm" To: "jmoyer-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org" Cc: "linux-nvdimm-y27Ovi1pjclAfugRpC6u6w@public.gmane.org" List-Id: linux-nvdimm@lists.01.org T24gTW9uLCAyMDE3LTAxLTIzIGF0IDEzOjIwIC0wNTAwLCBKZWZmIE1veWVyIHdyb3RlOg0KPiAN Cj4gDQo+IE9LLCB5ZWFoLCBsZXQncyBkZWZpbml0ZWx5IHB1dCB0ZXN0cyBpbiB0aGUgdHJlZSBm b3IgYW55dGhpbmcgdGhhdCBpcw0KPiBlYXN5IHRvIGRvLsKgwqBDYW4ndCB3ZSBjcmVhdGUgdGVz dCBuZml0cyBsYXJnZSBlbm91Z2ggZm9yIG11bHRpcGxlDQo+IGFyZW5hcz/CoMKgT25lIHRoaW5n IHdlIGNvdWxkIGRvIGlzIGtlZXAgYXJvdW5kIGJvZ3VzIG1ldGFkYXRhIGltYWdlcw0KPiBhbmQN Cj4ganVzdCBzaG92ZSB0aGVtIGludG8gdGhlIHJhdyBkZXZpY2UuwqDCoE9ubHkgaWYgdGhhdCdz IGVhc2llciB0aGFuDQo+IHByb2dyYW1tYXRpY2FsbHkgcGVydHVyYnVpbmcgdGhpbmdzLg0KPiAN Cj4gQWxzbywgd2UgbWF5IGNvbnNpZGVyIGEgYnR0IG1ldGFkYXRhIGR1bXAgdXRpbGl0eSwgbXVj aCBsaWtlIGZpbGUNCj4gc3lzdGVtcyBoYXZlLjENCg0KWWVwIEkgd2lsbCB3b3JrIG9uIHRlc3Rz LiBObywgdGhlIEFSRU5BX01BWF9TSVpFIGlzIDUxMkcsIHNvIHRoZSBrZXJuZWwNCndvbid0IGNy ZWF0ZSBhIHNlY29uZCBhcmVuYSB1bmxlc3MgdGhlIG5hbWVzcGFjZSBpcyBsYXJnZXIgdGhhbiB0 aGF0LA0KYW5kIG5maXRfdGVzdCBuYW1lc3BhY2VzIGFyZSBvbmx5IDMyTSBvciBzby4uDQoNCkRh biBhbmQgSSB3ZXJlIGFsc28gdGFsa2luZyBhYm91dCBhIGEgbWV0YWRhdGEgZHVtcCB1dGlsaXR5 IHNpbWlsYXIgdG8NCmZpbGVzeXN0ZW1zLiBJJ2xsIHdvcmsgb24gdGhpcyBuZXh0Lg0KDQo+IA0K PiA+ID4gQ2hlY2tpbmcgc2hvdWxkIG5vdCBiZSBhbiBvcHRpb25hbCBmZWF0dXJlLsKgwqBKdXN0 IGFsd2F5cyBidWlsZCBpdA0KPiA+ID4gaW4uDQo+ID4gDQo+ID4gWW91IG1lYW4gY2hlY2tpbmcg bWV0YWRhdGEgd2hlbiBicmluZ2luZyB1cCB0aGUgbmFtZXNwYWNlPyBUaGUNCj4gPiBrZXJuZWwN Cj4gPiBkb2VzIGVzc2VudGlhbCBjaGVja3Mgb2YgY291cnNlLCBidXQgZG8geW91IG1lYW4gdGhl IG1vcmUgaW52b2x2ZWQNCj4gPiBvbmVzDQo+ID4gbGlrZSBsb2cvbWFwIGVudHJ5IGJvdW5kcywg dGhlIGJhY2t1cCBpbmZvIGJsb2NrIGV0Yz8NCj4gDQo+IEkgbWVhbid0IHRoZSAiY2hlY2siIG5k Y3RsIGNvbW1hbmQgc2hvdWxkbid0IGJlIHNlbGVjdGFibGUgdmlhDQo+IGNvbmZpZ3VyZS7CoMKg SSB0aGluayBEYW4gaGFkIHRoZSBzYW1lIGNvbW1lbnQuDQoNCkFoIHllcyBJJ2xsIG1ha2UgdGhh dCBjaGFuZ2UuDQoNCj4gDQo+ID4gPiBUaGVyZSBzZWVtcyB0byBiZSBhIGxvdCBvZiByZXBlYXRl ZCBjb2RlIHNlcXVlbmNlcyBhcm91bmQgcmVhZGluZw0KPiA+ID4gYW5kDQo+ID4gPiB2ZXJpZnlp bmcgdGhlIGJ0dCBpbmZvIGJsb2Nrcy7CoMKgUGVyaGFwcyB0aGF0IGNhbiBiZSBmYWN0b3JlZA0K PiA+ID4gb3V0P8KgwqBNYXliZQ0KPiA+ID4gZ2V0IHJpZCBvZiB0aGUgZmlyc3Rfc2Igc3BlY2lh bCBzbm93Zmxha2UgYW5kIHJvbGwgdGhhdCBpbnRvIHRoZQ0KPiA+ID4gYXJlbmENCj4gPiA+IGRp c2NvdmVyeT8NCj4gDQo+IFlvdSBkaWRuJ3QgY29tbWVudCBvbiB0aGlzIG9uZS4uLiBkaWQgeW91 IG1pc3MgaXQsIG9yIHdpbGwgeW91DQo+IGludmVzdGlnYXRlLCBvciBkbyB5b3UgdGhpbmsgaXQn cyBhIGJvZ3VzIGNvbW1lbnQ/DQoNCkkganVzdCBtaXNzZWQgaXQuwqBJIGRpZCBub3RpY2UgdGhl IHJlYWQrdmVyaWZ5IHNlcXVlbmNlLCBtYXliZSBpbiB0aGUNCmxlYXN0LCBJIGNvdWxkIHdyYXAg dGhvc2UgdHdvIGludG8gYSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgY29tYmluZXMgdGhlDQp0d28g b3BlcmF0aW9ucy4NCg0KSSB0aGluayB0aGUgc3R1ZmYgd2UgZG8gaW4gZmlyc3Rfc2IgaXMgcmVx dWlyZWQgdG8gZmluZCAocmVjb3ZlcikgdGhlDQppbmZvIGJsb2NrIGlmIG9uZSBpcyBub3QgcmVh ZGlseSBmb3VuZC4gSXQgaXMgYSBzcGVjaWFsIHNub3dmbGFrZSBqdXN0DQpiZWNhdXNlIGl0IHVz ZXMgc29tZSBoZXVyaXN0aWNzIHRvIHRyeSBhbmQgZmluZCBhIHVzYWJsZSBpbmZvIGJsb2NrLA0K d2hlcmUgYXMgZGlzY292ZXJfYXJlbmFzIGp1c3Qgd2Fsa3MgdGhyb3VnaCB0aGUgbmFtZXNwYWNl LCBhbmQga25vd3MNCndoYXQgdG8gZXhwZWN0IGF0IGVhY2ggc3RlcC4gSSdsbCBzdGFyZSBhdCBp dCBoYXJkZXIgYW5kIHNlZSBpZiBJIGNhbg0KY29uc29saWRhdGUvcmVmYWN0b3IgYW55dGhpbmcg OikNCg0KPiANCj4gPiA+ID4gZGlmZiAtLWdpdCBhL25kY3RsL2J0dC1zdHJ1Y3RzLmggYi9uZGN0 bC9idHQtc3RydWN0cy5oDQo+ID4gPiA+ICsjZGVmaW5lIElCX0ZMQUdfRVJST1IgMHgwMDAwMDAw MQ0KPiA+ID4gPiArI2RlZmluZSBJQl9GTEFHX0VSUk9SX01BU0sgMHgwMDAwMDAwMQ0KPiA+ID4g DQo+ID4gPiBJQl9GTEFHX0VSUk9SIGlzIGRlZmluZWQgYnV0IG5ldmVyIHVzZWQvY2hlY2tlZC7C oMKgT2YgY291cnNlLA0KPiA+ID4gbmVpdGhlcg0KPiA+ID4gdGhlDQo+ID4gPiBrZXJuZWwgbm9y IHRoaXMgdXRpbGl0eSB3aWxsIHNldCB0aGF0IGZsYWcuwqDCoFdlIHNob3VsZCBwcm9iYWJseQ0K PiA+ID4gZGVjaWRlDQo+ID4gPiB3aGV0aGVyIGl0IG1ha2VzIHNlbnNlIHRvIGRvIHNvLg0KPiA+ IA0KPiA+IFRydWUsIHdpbGwgcmVtb3ZlLg0KPiANCj4gV2VsbCwgaG9sZCBvbi7CoMKgVGhpcyBm bGFnIGV4aXN0cyBpbiB0aGUgc3BlYywgc28gYXQgdGhlIHZlcnkgbGVhc3Qgd2UNCj4gc2hvdWxk IGNvbnNpZGVyIHdoZXJlIGl0IHNob3VsZCBiZSBzZXQsIGFuZCB3aGF0IHRvIGRvIGlmIGl0IC9p cy8gc2V0Lg0KPiBMZXQncyBub3QganVzdCByZW1vdmUgaXQuDQoNCkkgc2FpZCB0aGF0IGJlY2F1 c2Ugd2Uga25vdyBjdXJyZW50bHkgaW4gdGhlIGtlcm5lbCB3ZSBoYXZlIG5vIHdheSBvZg0Kc2V0 dGluZyBpdC4gSSB0aGluayB0aGUgZmlyc3QgdGhpbmcgd2UnZCBuZWVkIHRvIGRvIGlzIGZpZ3Vy ZSBvdXQgd2hhdA0KY2FzZXMgaXQgd2lsbCBiZSBzZXQgdW5kZXIuLiBBbmQgdGhlbiBmaWd1cmUg b3V0IHdoYXQgdGhlIGNoZWNrZXIgY2FuIGRvDQphYm91dCBpdC4NCg0KPiANCj4gPiA+IEkgZmlu ZCBpdCBvZGQgdGhhdCB0aGUgY2FsbGVyIGhhcyB0byBwYXNzIGluIHRoZSBvZmZzZXQgNGsgYmVm b3JlDQo+ID4gPiB0aGUNCj4gPiA+IHN0YXJ0IG9mIHRoZSBpbmZvIGJsb2NrLsKgwqBJdCBzZWVt cyBuYXR1cmFsIGZvciB0aGUgZmlyc3QgaW5mbw0KPiA+ID4gYmxvY2ssDQo+ID4gPiBidXQNCj4g PiA+IGZvciB0aGUgYmFja3VwLCBpdCdzIHRvdGFsbHkgYm9ndXMuwqDCoDstKQ0KPiA+IA0KPiA+ IEkgYWdyZWUsIGFuZCBJIGhhdGVkIGl0IHRvbyA6KQ0KPiA+IEJ1dCBJIHdhbnRlZCB0byBrZWVw IHRoZSArNEsgYWRkaXRpb24gaW4gdGhlIGxvd2VzdCBsZXZlbA0KPiA+IGZ1bmN0aW9ucy4uDQo+ ID4gSGF2ZSBhIGJldHRlciBpZGVhPyA6KcKgwqBUaGlzIGRvZXMga2luZGEga2lsbCB0aGUgaWRl YSBvZiAib2ggdGhlIDRrDQo+ID4gb2Zmc2V0dGluZyB3aWxsIGJlIGNvbXBsZXRlbHkgaGlkZGVu IGZyb20gdGhlIGhpZ2hlciBsZXZlbCBsb2dpYyINCj4gPiANCj4gPiBUaGUgb3Bwb3NpdGUgb2Yg dGhpcyB3b3VsZCBiZSBzcHJpbmtsaW5nIGEgbnVtYmVyIG9mICs0SyBldmVyeXdoZXJlDQo+ID4g ZWxzZSwgYW5kIEkgdGhpbmsgd2l0aCB0aGlzIHdlIG9ubHkgaGF2ZSB0byBkbyB0aGUgaW52ZXJz ZSBpbiBhDQo+ID4gY291cGxlDQo+ID4gb2YgcGxhY2VzLi4NCj4gDQo+IEkgZ3Vlc3MgSSdkIGhh dmUgdG8gc2VlIHRoZSByZXN1bHQgb2YgaW52ZXJ0aW5nIHRoZSByb2xlcy7CoMKgRmVlbCBmcmVl DQo+IHRvDQo+IGhvbGQgb2ZmIG9uIHRoaXMgb25lLCBJIGRvbid0IHRoaW5rIGl0J3MgY3JpdGlj YWwuDQo+IA0KPiA+ID4gQWdhaW4sIHogYW5kIGUgYXJlIHVudXNlZC7CoMKgTnVrZSAnZW0uDQo+ ID4gDQo+ID4gVHJ1ZSwgSSBqdXN0IGNvcGllZCB0aGVzZSBvdmVyIGZyb20gdGhlIGtlcm5lbCBp bXBsZW1lbnRhdGlvbiwgYW5kDQo+ID4gd2Fzbid0IHN1cmUgaWYgSSdkIGV2ZXIgYmUgdXNpbmcg eiBhbmQgZS4gQ3VycmVudGx5IHRoZSBrZXJuZWwNCj4gPiBkb2Vzbid0DQo+ID4gZXZlbiBzZXQg dGhvc2UsIHNvIGl0IGlzIGEgYml0IHJlZHVuZGFudC4gSWYgdGhlIGtlcm5lbCBkb2VzIGdyb3cN Cj4gPiB0aGUNCj4gPiBhYmlsaXR5IHRvIHVzZSB0aGVtIGluIGZ1dHVyZSwgdGhlcmUgY291bGQg YmUgdXNlIGZvciB0aGVzZSwgYnV0IEkNCj4gPiBzdXBwb3NlIEkgc2hvdWxkIHJlbW92ZSB0aGUg ZGVhZCBjb2RlIHVudGlsIHRoYXQgaGFwcGVucyA6KQ0KPiANCj4gRXZlcnkgc2luZ2xlIHN0YXRl IG9mIHRob3NlIHR3byBiaXRzIGlzIHZhbGlkLsKgwqBIb3cgd291bGQgeW91IGV2ZXIgZG8NCj4g c29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZW0/DQoNCkFncmVlZCwgSSBkb24ndCBzZWUgYSBzY2Vu YXJpbyB3aGVyZSB0aGUgY2hlY2tlciB3b3VsZCBhdHRlbXB0IHRvIG1vZGlmeQ0KdGhlIGJpdHMu DQo+IA0KPiA+ID4gU2hvdWxkIHdlIHBlcmZvcm0gYSBsb2FkIG9mIHRoZSBpbmZvIGJsb2NrIGFm dGVyIHRoZSBtc3luYyB0bw0KPiA+ID4gZW5zdXJlDQo+ID4gPiBpdA0KPiA+ID4gd2FzIHdyaXR0 ZW4gKHRvIHRyaWdnZXIgYW4gTUNFIGlmIG9uZSBpcyBnb2luZyB0byBoYXBwZW4pP8KgwqBUaGF0 DQo+ID4gPiBzYW1lDQo+ID4gPiBxdWVzdGlvbiBjb3VsZCBiZSBhc2tlZCBmb3IgZWFjaCBwbGFj ZSB3aGVyZSBhbiB1cGRhdGUgaXMgbWFkZS4NCj4gPiANCj4gPiBHb29kIHF1ZXN0aW9uLiBJIGd1 ZXNzIHRoZSBwcm9iYWJpbGl0eSBvZiB0aG9zZSBsb2NhdGlvbnMgaGF2aW5nIGENCj4gPiBiYWQN Cj4gPiBjZWxsIGlzIGxvdyBiZWNhdXNlIHdlIGRpZCBqdXN0IHJlYWQgdGhlbSB0byBmaW5kIG91 dCB0aGVyZSBpcyBhDQo+ID4gcHJvYmxlbSwgYW5kIHN1YnNlcXVlbnRseSB3cml0aW5nIHRoZW0g c2hvdWxkIGhhdmUgYSBsb3cgcHJvYmFiaWxpdHkNCj4gPiBvZg0KPiA+IHRyaWdnZXJpbmcgYSBD TUNJLiBCdXQgcmUtcmVhZGluZyB0byBtYWtlIHN1cmUgaXQgd2FzIGNvcnJlY3RseQ0KPiA+IHdy aXR0ZW4NCj4gPiBpcyBub3QgYSBiYWQgaWRlYS4gRGFuLCB0aG91Z2h0cz8NCj4gDQo+IFRoaXMg b25lJ3Mgbm90IGNyaXRpY2FsLsKgwqBCdXQgaXQncyBhIGNoZWNrZXIgdG9vbCwgc28gaXQgbWln aHQgYmUgbmljZQ0KPiB0byBiZSBwYXJhbm9pZC4NCj4gDQo+ID4gPiBUaGlzIGlzbid0IGFuIGVy cm9yLsKgwqBXZSBleHBlY3QgdGhpcyB0byBoYXBwZW4gaWYgcG93ZXIgaXMNCj4gPiA+IHN1ZGRl bmx5DQo+ID4gPiBsb3N0LCBhbmQgdGhlIGZvcm1hdCBpcyBidWlsdCB0byByZWNvdmVyIGZyb20g aXQuwqDCoElmIHlvdSBsb2cgaXQNCj4gPiA+IGF0DQo+ID4gPiBhbGwsIEkgd291bGQgbWFrZSBp dCBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuDQo+ID4gPiANCj4gPiA+IEkgd29uZGVyIHdoZXRo ZXIgd2Ugc2hvdWxkIGV2ZW4gZml4IGl0LsKgwqBJIHdvcnJ5IGFib3V0IGhhdmluZyB0aGUNCj4g PiA+IHNhbWUNCj4gPiA+IHJlY292ZXJ5IGNvZGUgaW4gbXVsdGlwbGUgcGxhY2VzICh0aGUga2Vy bmVsIGFuZCBoZXJlKS7CoMKgV2hhdCBkbw0KPiA+ID4geW91DQo+ID4gPiB0aGluaz8NCj4gPiAN Cj4gPiBIbSwgSSBhZ3JlZSBhYm91dCB0aGUgbWVzc2FnZSwgaW4gdGhhdCBpdCBpcyByb3V0aW5l LiBCdXQgSSBhZGRlZA0KPiA+IHRoZQ0KPiA+IHJlcGFpcmluZyBzbyB0aGF0IGEgdXNlciBtYXkg anVzdCBkZWNpZGUgdG8gZG8gYSBjaGVjayB1c2luZyB0aGlzDQo+ID4gYWZ0ZXINCj4gPiBhIHBv d2VyIGZhaWx1cmUsIGFuZCB3ZSBjYW4gZWFzaWx5IGZpeCBpdCB3aGVuIHdlIGhhdmUgdGhlIGNo YW5jZS4gSQ0KPiA+IGRvDQo+ID4gYWdyZWUgYWJvdXQgdGhlIGNoZWNrL2NvcnJlY3Rpb24gaW4g bXVsdGlwbGUgcGxhY2VzLCBJIHdvdWxkbid0IGJlDQo+ID4gdG9vDQo+ID4gb3Bwb3NlZCB0byBy ZW1vdmluZyBpdCBlbnRpcmVseSBmcm9tIGhlcmUuDQo+IA0KPiBJZiB5b3UgcmVtb3ZlIGl0LCBw dXQgYSBiaWcgY29tbWVudCBpbiB0aGVyZS7CoMKgOinCoMKgSSdsbCBsZWF2ZSB0aGUNCj4gdWx0 aW1hdGUgZGVjaXNpb24gdXAgdG8geW91LsKgwqBJdCdzIG5vdCBjb21wbGV4IHJlY292ZXJ5LCBz byB3ZQ0KPiAqc2hvdWxkKg0KPiBiZSBva2F5IHRvIGhhdmUgdGhhdCBsb2dpYyBpbiBtdWx0aXBs ZSBwbGFjZXMuLi4NCg0KSSBjYW4gcmVtb3ZlIGl0LCB0aGlzIG1ha2VzIHRoZSBlbnRpcmUgZnVu Y3Rpb24gKGJ0dF9jaGVja19sb2dfbWFwKQ0KZGlzYXBwZWFyLCBhbmQgSSdsbCBwdXQgYSBjb21t ZW50IGluIHRoZSBtYWluIGNoZWNrZXIgbG9vcCBzYXlpbmcgdGhhdA0KdGhpcyBpcyBhIG5vcm1h bCBjb25kaXRpb24uDQoNCj4gDQo+ID4gPiA+ICsJLyoNCj4gPiA+ID4gKwnCoCogQXR0ZW1wdCAz OiB1c2UgaW5mbzJvZmYgYXMtaXMsIGFuZCBjaGVjayBpZiB3ZSBmaW5kDQo+ID4gPiA+IGENCj4g PiA+ID4gdmFsaWQgaW5mbw0KPiA+ID4gPiArCcKgKiBibG9jayBhdCB0aGF0IGxvY2F0aW9uLg0K PiA+ID4gPiArCcKgKi8NCj4gPiA+ID4gKwnCoG9mZnNldCA9IGxlMzJ0b2goYnR0X3NiWzBdLmlu Zm8yb2ZmKTsNCj4gPiA+ID4gKwnCoGlmIChvZmZzZXQpIHsNCj4gPiA+IA0KPiA+ID4gTWF5YmUg ZG8gc29tZSBib3VuZHMgY2hlY2tpbmcgb24gb2Zmc2V0Pw0KPiA+IA0KPiA+IElmIHRoZSBvZmZz ZXQgaXMgYm9ndXMgZWl0aGVyIHRoZSByZWFkIHdpbGwgZmFpbCBvciB0aGUgdmVyaWZ5IHdpbGws DQo+ID4gYnV0DQo+ID4geWVzIEkgY291bGQgYWRkIGNoZWNraW5nIHRvby4NCj4gDQo+IEFnYWlu LCBub3QgY3JpdGljYWwuwqDCoEknbGwgbGVhdmUgaXQgdXAgdG8geW91Lg0KPiANCj4gPiA+ID4g KwkJcHJpbnRmKCJBdHRlbXB0aW5nIHRvIHJlY292ZXIgaW5mby1ibG9jayBmcm9tDQo+ID4gPiA+ IGluZm8yDQo+ID4gPiA+IG9mZnNldCAoYXMtaXMpICUjbGx4XG4iLCBvZmZzZXQpOw0KPiA+ID4g PiArCQlyYyA9IGJ0dF9yZWFkX2luZm8oYnR0YywgJmJ0dF9zYlsxXSwgb2Zmc2V0KTsNCj4gPiA+ ID4gKwkJaWYgKHJjKQ0KPiA+ID4gPiArCQkJZ290byBvdXQ7DQo+ID4gPiA+ICsJCXJjID0gYnR0 X2luZm9fdmVyaWZ5KGJ0dGMsICZidHRfc2JbMV0pOw0KPiA+ID4gPiArCQlpZiAocmMgPT0gMCkg ew0KPiA+ID4gPiArCQkJcmMgPSBidHRfd3JpdGVfaW5mbyhidHRjLCAmYnR0X3NiWzFdLA0KPiA+ ID4gPiAwKTsNCj4gPiA+ID4gKwkJCWdvdG8gb3V0Ow0KPiA+ID4gPiArCQl9DQo+ID4gPiA+ICsJ fSBlbHNlDQo+ID4gPiA+ICsJCXJjID0gLUVOWElPOw0KPiA+ID4gDQo+ID4gPiBZb3UgY291bGQg YWxzbyBsb29rIGZvciB0aGUgcHJpbWFyeSBpbmZvIGJsb2NrcyBmb3IgdGhlIG90aGVyDQo+ID4g PiBhcmVuYXMuDQo+ID4gDQo+ID4gVGhhdCBzZWVtcyBraW5kIG9mIGRpZmZpY3VsdCBhcyB3ZSBk b24ndCByZWFsbHkgaGF2ZSBhbnkgaW5mb3JtYXRpb24NCj4gPiBvbg0KPiA+IHdoZXJlIHRoZSBv dGhlciBhcmVuYXMgbWlnaHQgYmUuDQo+ID4gV2UgY291bGQgZG8gYSBmdWxsIGNhbGN1bGF0aW9u IG9mICJ0aGlzIGlzIHdoZXJlIEkgd291bGQgbGF5IG91dCB0aGUNCj4gPiBhcmVuYXMgaWYgSSBo YWQgdGhpcyByYXdzaXplIiwgYnV0IEkgd2FzIGhvcGluZyB0byBhdm9pZCBkb2luZw0KPiA+IHRo YXQuLg0KPiANCj4gT0suwqDCoElmIHdlIGdldCB0byBoZXJlLCB0aGluZ3MgYXJlIHByZXR0eSB3 ZWxsIHNjcmV3ZWQuwqDCoEZlZWwgZnJlZSB0bw0KPiBpZ25vcmUgdGhhdCBzdWdnZXN0aW9uLg0K PiANCj4gPiA+ID4gKyBvdXQ6DQo+ID4gPiA+ICsJZnJlZShidHRfc2IpOw0KPiA+ID4gPiArCXJl dHVybiByYzsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGludCBuYW1l c3BhY2VfY2hlY2soc3RydWN0IG5kY3RsX3JlZ2lvbiAqcmVnaW9uLA0KPiA+ID4gPiArCQlzdHJ1 Y3QgbmRjdGxfbmFtZXNwYWNlICpuZG5zKQ0KPiA+ID4gPiArew0KPiA+ID4gDQo+ID4gPiBuYW1l c3BhY2VfY2hlY2sgc291bmRzIGdlbmVyaWMsIGJ1dCBpdCByZWFsbHkgb25seSB3b3JrcyBmb3Ig dGhlDQo+ID4gPiBidHQuDQo+ID4gPiBBbHNvLCBzaG91bGQgd2UgdmVyaWZ5IHRoYXQgdGhlIG5h bWVzcGFjZSB3YXMgY29uZmlndXJlZCB3aXRoIGENCj4gPiA+IGJ0dA0KPiA+ID4gYmVmb3JlIGV2 ZW4gYXR0ZW1wdGluZyB0byBjaGVjayBpdD8NCj4gPiANCj4gPiBUcnVlLiBJIGRpZCB0aGluayBv ZiBjaGVja2luZyBpZiB0aGlzIGlzIGEgYnR0IG5hbWVzcGFjZSBiZWZvcmUNCj4gPiBjaGVja2lu ZywgYnV0IEkgdGhpbmsgaWYgdGhlIG5hbWVzcGFjZSBpcyBkaXNhYmxlZCwgbXkgdW5kZXJzdGFu ZGluZw0KPiA+IGlzDQo+ID4gbmRjdGwgYW5kIGxpYm5kY3RsIGhhdmUgbm8gaWRlYSB3aGV0aGVy IGl0IGlzIGEgYnR0IG5hbWVzcGFjZSBvcg0KPiA+IG5vdC4NCj4gPiBUaGUgQlRUIGlzIGRpc2Nv dmVyZWQgYnkgdGhlIGtlcm5lbCB3aGVuIGRvaW5nIGl0J3MgcHJvYmUsIGFuZCBvbmNlDQo+ID4g aXQNCj4gPiBpcyB1cCwgbmRjdGwgY2FuIHNlZSB0aGF0LCBidXQgdW50aWwgdGhlbiwgaXQgY2Fu IHJlYWxseSBvbmx5IGZpbmQNCj4gPiBvdXQNCj4gPiBpZiB0aGVyZSBpcyBhIHZhbGlkIEJUVCBi eSB0cnlpbmcgdG8gcmVhZCB0aGUgbWV0YWRhdGEgaXRzZWxmLg0KPiANCj4gWWVhaC7CoMKgQXQg c29tZSBwb2ludCBJIGd1ZXNzIHdlIGhhdmUgdG8gdHJ1c3QgdGhlIGFkbWluIG5vdCB0byB0cnkg dG8NCj4gZml4IHRoZSBidHQgb24gYSBub24tYnR0IGRldmljZS7CoMKgSG93ZXZlciwgaWYgd2Ug YWxsb3dlZCB0aGVtIHRvIHJ1bg0KPiB0aGUNCj4gY29tbWFuZCBvbiBhIHBtZW1OcyBkZXZpY2Us IHRoYXQgd291bGQgcmVkdWNlIHRoZSBvcHBvcnR1bml0aWVzIGZvcg0KPiBmYWlsdXJlLg0KDQpJ J20gbGlraW5nIHRoZSAtLWZvcmNlIG9wdGlvbiBmb3IgdGhpcyAocnVubmluZyBvbiBhICdsaXZl JyBuYW1lc3BhY2UpLA0KYW5kIGV2ZW4gaWYgc29tZW9uZSBkb2VzIHJ1biBpdCBvbiBhIG5vbi1C VFQgbmFtZXNwYWNlLCB3ZSBmYWlsIHF1aWNrbHkNCmVub3VnaCB3aXRoIGEgaGVscGZ1bCBtZXNz YWdlLi4NCg0KPiANCj4gPiA+ID4gKwlyYXdfbW9kZSA9IG5kY3RsX25hbWVzcGFjZV9nZXRfcmF3 X21vZGUobmRucyk7DQo+ID4gPiA+ICsJbmRjdGxfbmFtZXNwYWNlX3NldF9yYXdfbW9kZShuZG5z LCAxKTsNCj4gPiA+ID4gKwlyYyA9IG5kY3RsX25hbWVzcGFjZV9lbmFibGUobmRucyk7DQo+ID4g PiA+ICsJaWYgKHJjICE9IDApDQo+ID4gPiA+ICsJCWVycm9yKCIlczogZmFpbGVkIHRvIGVuYWJs ZSByYXcgbW9kZVxuIiwNCj4gPiA+ID4gZGV2bmFtZSk7DQo+ID4gPiA+ICsJbmRjdGxfbmFtZXNw YWNlX3NldF9yYXdfbW9kZShuZG5zLCByYXdfbW9kZSk7DQo+ID4gPiANCj4gPiA+IFdoYXQgdGhl IGhlY2sgZG8gdGhlIGFib3ZlIDYgbGluZXMgZG8/wqDCoFBsZWFzZSBleHBsYWluLg0KPiA+IA0K PiA+IExpbmRhIGhhZCB0aGUgc2FtZSBxdWVzdGlvbiBzbyBJIHN1cHBvc2UgSSBzaG91bGQgYXQg bGVhc3QgaGF2ZSBhDQo+ID4gY29tbWVudCB0aGVyZSA6KQ0KPiA+IEJ1dCB0aGUgaWRlYSBpcyB3 ZSBnZXQgdGhlIGV4aXN0aW5nIG1vZGUgKHJhdyBvciBub3QpLCBhbmQgc2F2ZSBpdA0KPiA+IGlu DQo+ID4gcmF3X21vZGUuIFRoZW4gdHJ5IHRvIGVuYWJsZSBpdCB3aXRoIHJhd19tb2RlID0gMS4g SWYgaXQgZmFpbHMsDQo+ID4gcmVzdG9yZQ0KPiA+IHRoZSBzYXZlZCByYXdfbW9kZS4NCj4gDQo+ IEkgaGFkIG1vcmUgYmFzaWMgcXVlc3Rpb25zLCBsaWtlIHdoYXQgdGhlIGhlY2sgaXMgZ29pbmcg b24/wqDCoDotKSBJJ3ZlDQo+IGRvbmUgc29tZSBtb3JlIHJlYWRpbmcsIGFuZCB0aGlzIGlzIHdo YXQgSSB0aGluayBpcyBoYXBwZW5pbmcuDQo+IA0KPiAJLyogSW4gdHlwaWNhbCB1c2FnZSwgdGhl IGN1cnJlbnQgcmF3X21vZGUgc2hvdWxkIGJlIGZhbHNlLiAqLw0KPiAJcmF3X21vZGUgPSBuZGN0 bF9uYW1lc3BhY2VfZ2V0X3Jhd19tb2RlKG5kbnMpOw0KPiAJLyoNCj4gCSAqIFB1dHRpbmcgdGhl IG5hbWVzcGFjZSBpbnRvIHJhdyBtb2RlIHdpbGwgYWxsb3cgdXMgdG8gYWNjZXNzDQo+IAkgKiB0 aGUgYnR0IG1ldGFkYXRhLg0KPiAJICovDQo+IAluZGN0bF9uYW1lc3BhY2Vfc2V0X3Jhd19tb2Rl KG5kbnMsIDEpOw0KPiAJLyoNCj4gCSAqIE5vdyBlbmFibGUgdGhlIG5hbWVzcGFjZS7CoMKgVGhp cyB3aWxsIHJlc3VsdCBpbiBhIHBtZW0gZGV2aWNlDQo+IAkgKiBub2RlIHNob3dpbmcgdXAgaW4g L2RldiB0aGF0IGlzIGluIHJhdyBtb2RlLg0KPiAJICovDQo+IAlyYyA9IG5kY3RsX25hbWVzcGFj ZV9lbmFibGUobmRucyk7DQo+IAlpZiAocmMgIT0gMCkNCj4gCQllcnJvcigiJXM6IGZhaWxlZCB0 byBlbmFibGUgcmF3IG1vZGVcbiIsIGRldm5hbWUpOw0KPiAJc3ByaW50ZihwYXRoLCAiL2Rldi8l cyIsDQo+IG5kY3RsX25hbWVzcGFjZV9nZXRfYmxvY2tfZGV2aWNlKG5kbnMpKTsNCj4gDQo+IEFu ZCBtb3ZlIHRoZSByZXNldHRpbmcgb2YgcmF3X21vZGUgZG93biBpbnRvIHRoZSBvdXQ6IGxhYmVs LsKgwqBUaGF0DQo+IHdpbGwNCj4gZ28gYSBsb25nIHdheSB0b3dhcmRzIGNsZWFyaW5nIHVwIHRo ZSBjb25mdXNpb24gSSBoYWQgd2hlbiByZWFkaW5nIHRoZQ0KPiBjb2RlIGZvciB0aGUgZmlyc3Qg dGltZS7CoMKgSSB0aGluayB5b3Ugc2hvdWxkIGFsc28gbWVudGlvbiB0aGF0IGENCj4gcHJlLWNv bmRpdGlvbiBmb3IgdGhpcyBmdW5jdGlvbiBpcyB0aGF0IHRoZSBuYW1lc3BhY2UgaXMgZGlzYWJs ZWQsIGFuZA0KPiB5b3Ugc2hvdWxkIGNoZWNrIGZvciBpdCBhbmQgcHJvdmlkZSBhIHVzZWZ1bCBl cnJvciBtZXNzYWdlIGlmIGl0J3MNCj4gYWxyZWFkeSBlbmFibGVkLg0KDQpZZXMgeW91ciBpbnRl cnByZXRhdGlvbiBpcyBjb3JyZWN0LCBhbmQgSSB3aWxsIHN0ZWFsIHNvbWUgb2YgdGhlIGFib3Zl DQpjb21tZW50cyBhbmQgcHV0IHRoZW0gaW4gOikNCg0KPiANCj4gPiBNYXliZSB0aGlzIGlzIGEg Yml0IHBvaW50bGVzcz8gQnV0IHdlIHNob3VsZCB0cnkgYW5kIGtlZXAgdGhpbmdzIGluDQo+ID4g dGhlDQo+ID4gc2FtZSBzdGF0ZSB0aGUgdXNlciBoYWQsIHJpZ2h0PyA6KQ0KPiANCj4gSSBkZWZp bml0ZWx5IGFncmVlIHdlIHNob3VsZCBrZWVwIHRoaW5ncyBpbiB0aGUgc2FtZSBzdGF0ZS7CoMKg SSByZWFsbHkNCj4gZGlkbid0IGhhdmUgYSBnb29kIGdyYXNwIG9mIHdoYXQgd2FzIGdvaW5nIG9u IHRoZXJlLCBhbmQgY29tbWVudHMNCj4gd291bGQNCj4gaGF2ZSBzYXZlZCBtZSBzb21lIHRpbWUg ZGlnZ2luZyB0aHJvdWdoIGJvdGggbmRjdGwgYW5kIGtlcm5lbCBjb2RlLg0KDQoNCj4gDQo+IENo ZWVycywNCj4gSmVmZgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpMaW51eC1udmRpbW0gbWFpbGluZyBsaXN0CkxpbnV4LW52ZGltbUBsaXN0cy4wMS5vcmcK aHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1udmRpbW0K