From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Lin, Mengdong" Subject: Re: [PATCH 1/2] ucm: Automatically load the best config file based on the card long name Date: Thu, 22 Dec 2016 14:35:01 +0000 Message-ID: References: <1482325768-20084-1-git-send-email-mengdong.lin@linux.intel.com> <1482331138.2554.101.camel@loki> <1482408879.24233.32.camel@loki> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by alsa0.perex.cz (Postfix) with ESMTP id DEBA126663B for ; Thu, 22 Dec 2016 15:35:07 +0100 (CET) In-Reply-To: <1482408879.24233.32.camel@loki> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Liam Girdwood Cc: "alsa-devel@alsa-project.org" , "mengdong.lin@linux.intel.com" , "tiwai@suse.de" , "Koul, Vinod" , "broonie@kernel.org" , "Bossart, Pierre-louis" List-Id: alsa-devel@alsa-project.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBMaWFtIEdpcmR3b29kIFttYWls dG86bGlhbS5yLmdpcmR3b29kQGxpbnV4LmludGVsLmNvbV0NCj4gU2VudDogVGh1cnNkYXksIERl Y2VtYmVyIDIyLCAyMDE2IDg6MTUgUE0NCj4gVG86IExpbiwgTWVuZ2RvbmcgPG1lbmdkb25nLmxp bkBpbnRlbC5jb20+DQo+IENjOiBtZW5nZG9uZy5saW5AbGludXguaW50ZWwuY29tOyBhbHNhLWRl dmVsQGFsc2EtcHJvamVjdC5vcmc7DQo+IGJyb29uaWVAa2VybmVsLm9yZzsgdGl3YWlAc3VzZS5k ZTsgS291bCwgVmlub2QgPHZpbm9kLmtvdWxAaW50ZWwuY29tPjsNCj4gQm9zc2FydCwgUGllcnJl LWxvdWlzIDxwaWVycmUtbG91aXMuYm9zc2FydEBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBb YWxzYS1kZXZlbF0gW1BBVENIIDEvMl0gdWNtOiBBdXRvbWF0aWNhbGx5IGxvYWQgdGhlIGJlc3Qg Y29uZmlnDQo+IGZpbGUgYmFzZWQgb24gdGhlIGNhcmQgbG9uZyBuYW1lDQo+IA0KPiBPbiBXZWQs IDIwMTYtMTItMjEgYXQgMTY6MTIgKzAwMDAsIExpbiwgTWVuZ2Rvbmcgd3JvdGU6DQo+ID4gPiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogTGlhbSBHaXJkd29vZCBbbWFp bHRvOmxpYW0uci5naXJkd29vZEBsaW51eC5pbnRlbC5jb21dDQo+ID4gPiBTZW50OiBXZWRuZXNk YXksIERlY2VtYmVyIDIxLCAyMDE2IDEwOjM5IFBNDQo+ID4gPg0KPiA+ID4gT24gV2VkLCAyMDE2 LTEyLTIxIGF0IDIxOjA5ICswODAwLCBtZW5nZG9uZy5saW5AbGludXguaW50ZWwuY29tDQo+IHdy b3RlOg0KPiA+ID4gPiBGcm9tOiBNZW5nZG9uZyBMaW4gPG1lbmdkb25nLmxpbkBsaW51eC5pbnRl bC5jb20+DQo+ID4gPiA+DQo+ID4gPiA+IEludGVsIERTUCBwbGF0Zm9ybSBkcml2ZXJzIGFyZSB1 c2VkIGJ5IG1hbnkgZGlmZmVyZW50IGRldmljZXMuIEZvcg0KPiA+ID4gPiB1c2VyIHNwYWNlIHRv IGRpZmZlcmVudGlhdGUgdGhlbSwgQVNvQyBtYWNoaW5lIGRyaXZlciBtYXkgaW5jbHVkZQ0KPiA+ ID4gPiB0aGUgRE1JIGluZm8gKHZlbmRvciwgcHJvZHVjdCBhbmQgYm9hcmQpIGluIGNhcmQgbG9u ZyBuYW1lLg0KPiA+ID4gPiBQb3NzaWJsZSBjYXJkIGxvbmcgbmFtZXMNCj4gPiA+ID4gYXJlOg0K PiA+ID4gPiBicm9hZHdlbGwtcnQyODYtRGVsbCBJbmMuLVhQUyAxMyA5MzQzLTAzMTBKSA0KPiA+ ID4NCj4gPiA+IFNlZSBteSBwcmV2aW91cyBjb21tZW50cyBvbiB0aGUga2VybmVsIHBhdGNoLCBi dXQgdGhlIGxvbmduYW1lDQo+ID4gPiBzaG91bGQgYmUgbGlrZSA6LQ0KPiA+ID4NCj4gPiA+ICJE ZWxsIEluYy4tWFBTIDEzIg0KPiA+DQo+ID4gTWF5IHdlIGtlZXAgaXQ/IEl0IGNhbiBtYWtlIHRo ZSBtYXRjaGluZyBjb2RlIHNpbXBsZXIuDQo+IA0KPiBTb3JyeSwgZG9udCBmb2xsb3cuDQoNCkkn bGwgcmVtb3ZlIHRoZSBjYXJkIG5hbWUgKGRyaXZlciBuYW1lKSBmcm9tIHRoZSBsb25nIG5hbWUg YXMgeW91IHN1Z2dlc3RlZCwgcGxlYXNlIHNlZSBteSBwcmV2aW91cyBtYWlsOg0KaHR0cDovL21h aWxtYW4uYWxzYS1wcm9qZWN0Lm9yZy9waXBlcm1haWwvYWxzYS1kZXZlbC8yMDE2LURlY2VtYmVy LzExNTk4OS5odG1sDQoNCj4gDQo+ID4gPg0KPiA+ID4gPiBicm9hZHdlbGwtcnQyODYtSW50ZWwg Q29ycC4tQnJvYWR3ZWxsIENsaWVudCBwbGF0Zm9ybS1XaWxzb24gQmVhY2gNCj4gPiA+ID4gU0RT IGJ5dGNyLXJ0NTY0MC1BU1VTVGVLIENPTVBVVEVSIElOQy4tVDEwMFRBLVQxMDBUQQ0KPiA+ID4g PiBieXRjci1ydDU2NTEtQ2lyY3VpdGNvLU1pbm5vd2JvYXJkIE1heCBEMCBQTEFURk9STS1NaW5u b3dCb2FyZA0KPiA+ID4gTUFYIC4uLg0KPiA+ID4gPg0KPiA+ID4gPiBBbmQgdXNlciBzcGFjZSBj YW4gZGVmaW5lIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW5jbHVkaW5nIGZpZWxkcw0KPiA+ID4gPiBz ZXBhcmF0ZWQgYnkgJy4nIGFzIGJlbG93Og0KPiA+ID4gPiBicm9hZHdlbGwtcnQyODYNCj4gPiA+ ID4gYnJvYWR3ZWxsLXJ0Mjg2LkRlbGwuWFBTDQo+ID4gPg0KPiA+ID4gRG9udCBuZWVkIHRvIHVz ZSBhIC4gYXMgdGhlIG5hbWVzIHNob3VsZCBiZSB1bmlxdWUuDQo+ID4gPg0KPiA+ID4gPiBieXRj ci1ydDU2NDANCj4gPiA+ID4gYnl0Y3ItcnQ1NjQwLkFTVVMuVDEwMA0KPiA+ID4gPiBieXRjci1y dDU2NTEuTWlubm93Ym9hcmRNYXgNCj4gPiA+ID4gLi4uDQo+ID4gPiA+DQo+ID4gPiA+IFdoZW4g YmVpbmcgYXNrZWQgdG8gbG9hZCBjb25maWd1cmF0aW9uIGZpbGUgb2YgYSBjYXJkLCBVQ00gd2ls bA0KPiA+ID4gPiB0cnkgdG8gZmluZCB0aGUgY2FyZCBsb25nIG5hbWUgZnJvbSB0aGUgbG9jYWwg bWFjaGluZSwgYW5kIHRoZW4NCj4gPiA+ID4gc2NhbiBhbGwgYXZhaWxhYmxlIGNvbmZpZ3VyYXRp b24gZmlsZSBuYW1lcywgc2VhcmNoIGV2ZXJ5IGZpZWxkIG9mDQo+ID4gPiA+IGNvbmZpZyBmaWxl IG5hbWUgaW4gdGhlIGNhcmQgbG9uZyBuYW1lLiBUaGUgbW9yZSBjaGFyYWN0ZXJzIG1hdGNoLA0K PiA+ID4gPiB0aGUgaGlnaGVyIHNjb3JlIHRoZSBmaWxlIGhhcy4gRmluYWxseSwgdGhlIGZpbGUg d2l0aCB0aGUgaGlnaGVzdA0KPiA+ID4gPiBzY29yZSB3aWxsIGJlIGxvYWRlZCB0byBjb25maWd1 cmUgdGhlIHNvdW5kIGNhcmQuDQo+ID4gPiA+DQo+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IE1lbmdk b25nIExpbiA8bWVuZ2RvbmcubGluQGxpbnV4LmludGVsLmNvbT4NCj4gPiA+ID4NCj4gPiA+ID4g ZGlmZiAtLWdpdCBhL3NyYy91Y20vcGFyc2VyLmMgYi9zcmMvdWNtL3BhcnNlci5jIGluZGV4DQo+ ID4gPiA+IGM5ODM3M2EuLmZmNzVkYTcgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL3NyYy91Y20vcGFy c2VyLmMNCj4gPiA+ID4gKysrIGIvc3JjL3VjbS9wYXJzZXIuYw0KPiA+ID4gPiBAQCAtNTUsNiAr NTUsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNvbXBvbmVudF9kaXJbXSA9IHsNCj4g PiA+ID4gIAlOVUxMLAkJLyogdGVybWluYXRvciAqLw0KPiA+ID4gPiAgfTsNCj4gPiA+ID4NCj4g PiA+ID4gK3N0YXRpYyBpbnQgZmlsZW5hbWVfZmlsdGVyKGNvbnN0IHN0cnVjdCBkaXJlbnQgKmRp cmVudCk7IHN0YXRpYw0KPiA+ID4gPiAraW50IGlzX2NvbXBvbmVudF9kaXJlY3RvcnkoY29uc3Qg Y2hhciAqZGlyKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiAgc3RhdGljIGludCBwYXJzZV9zZXF1ZW5j ZShzbmRfdXNlX2Nhc2VfbWdyX3QgKnVjX21nciwNCj4gPiA+ID4gIAkJCSAgc3RydWN0IGxpc3Rf aGVhZCAqYmFzZSwNCj4gPiA+ID4gIAkJCSAgc25kX2NvbmZpZ190ICpjZmcpOw0KPiA+ID4gPiBA QCAtMTMyOCw2ICsxMzMxLDIxMCBAQCBzdGF0aWMgaW50DQo+ID4gPiBwYXJzZV9tYXN0ZXJfZmls ZShzbmRfdXNlX2Nhc2VfbWdyX3QgKnVjX21nciwgc25kX2NvbmZpZ190ICpjZmcpDQo+ID4gPiA+ ICAJcmV0dXJuIDA7DQo+ID4gPiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+ICsvKiB0cmltIFNQQUNF ICgweDIwKSBmcm9tIHRoZSBzdHJpbmcgKi8gc3RhdGljIHZvaWQNCj4gPiA+ID4gK3RyaW1fc3Bh Y2UoY2hhcg0KPiA+ID4gPiArKnN0cikgew0KPiA+ID4gPiArCWludCBpLCBqID0gMDsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArCWZvciAoaSA9IDA7IHN0cltpXSAmJiBpIDwgTUFYX0ZJTEU7IGkrKykg ew0KPiA+ID4gPiArCQlpZiAoc3RyW2ldICE9IDB4MjApDQo+ID4gPiA+ICsJCQlzdHJbaisrXSA9 IHN0cltpXTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlzdHJbal0gPSAnXDAn Ow0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKiBmaW5kIGFuZCBzdG9yZSB0aGUg Y2FyZCBsb25nIG5hbWUgaWYgdGhlIGNhcmQgaXMgaW4gdGhpcw0KPiA+ID4gPiArbWFjaGluZSAq LyBzdGF0aWMgaW50IGdldF9jYXJkX2xvbmdfbmFtZShzbmRfdXNlX2Nhc2VfbWdyX3QgKm1ncikN Cj4gew0KPiA+ID4gPiArCWNvbnN0IGNoYXIgKmNhcmRfbmFtZSA9IG1nci0+Y2FyZF9uYW1lOw0K PiA+ID4gPiArCXNuZF9jdGxfdCAqaGFuZGxlOw0KPiA+ID4gPiArCWludCBjYXJkLCBlcnIsIGRl diwgaWR4Ow0KPiA+ID4gPiArCXNuZF9jdGxfY2FyZF9pbmZvX3QgKmluZm87DQo+ID4gPiA+ICsJ Y29uc3QgY2hhciAqX25hbWUsICpfbG9uZ19uYW1lOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJc25k X2N0bF9jYXJkX2luZm9fYWxsb2NhKCZpbmZvKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWNhcmQg PSAtMTsNCj4gPiA+ID4gKwlpZiAoc25kX2NhcmRfbmV4dCgmY2FyZCkgPCAwIHx8IGNhcmQgPCAw KSB7DQo+ID4gPiA+ICsJCXVjX2Vycm9yKCJubyBzb3VuZGNhcmRzIGZvdW5kLi4uIik7DQo+ID4g PiA+ICsJCXJldHVybiAtMTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwl3aGls ZSAoY2FyZCA+PSAwKSB7DQo+ID4gPiA+ICsJCWNoYXIgbmFtZVszMl07DQo+ID4gPiA+ICsNCj4g PiA+ID4gKwkJc3ByaW50ZihuYW1lLCAiaHc6JWQiLCBjYXJkKTsNCj4gPiA+ID4gKwkJZXJyID0g c25kX2N0bF9vcGVuKCZoYW5kbGUsIG5hbWUsIDApOw0KPiA+ID4gPiArCQlpZiAoZXJyIDwgMCkg ew0KPiA+ID4gPiArCQkJdWNfZXJyb3IoImNvbnRyb2wgb3BlbiAoJWkpOiAlcyIsIGNhcmQsDQo+ ID4gPiA+ICsJCQkJIHNuZF9zdHJlcnJvcihlcnIpKTsNCj4gPiA+ID4gKwkJCWdvdG8gbmV4dF9j YXJkOw0KPiA+ID4gPiArCQl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJZXJyID0gc25kX2N0bF9j YXJkX2luZm8oaGFuZGxlLCBpbmZvKTsNCj4gPiA+ID4gKwkJaWYgKGVyciA8IDApIHsNCj4gPiA+ ID4gKwkJCXVjX2Vycm9yKCJjb250cm9sIGhhcmR3YXJlIGluZm8gKCVpKTogJXMiLCBjYXJkLA0K PiA+ID4gPiArCQkJCSBzbmRfc3RyZXJyb3IoZXJyKSk7DQo+ID4gPiA+ICsJCQlzbmRfY3RsX2Ns b3NlKGhhbmRsZSk7DQo+ID4gPiA+ICsJCQlnb3RvIG5leHRfY2FyZDsNCj4gPiA+ID4gKwkJfQ0K PiA+ID4gPiArDQo+ID4gPiA+ICsJCV9uYW1lID0gc25kX2N0bF9jYXJkX2luZm9fZ2V0X25hbWUo aW5mbyk7DQo+ID4gPiA+ICsJCWlmICghc3RybmNtcChjYXJkX25hbWUsIF9uYW1lLCAzMikpIHsN Cj4gPiA+ID4gKwkJCV9sb25nX25hbWUgPSBzbmRfY3RsX2NhcmRfaW5mb19nZXRfbG9uZ25hbWUo aW5mbyk7DQo+ID4gPiA+ICsJCQlzdHJuY3B5KG1nci0+Y2FyZF9sb25nX25hbWUsIF9sb25nX25h bWUsDQo+ID4gPiA+ICsJCQkJTUFYX0NBUkRfTE9OR19OQU1FKTsNCj4gPiA+ID4gKwkJCXNuZF9j dGxfY2xvc2UoaGFuZGxlKTsNCj4gPiA+ID4gKwkJCXJldHVybiAwOw0KPiA+ID4gPiArCQl9DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKwkJc25kX2N0bF9jbG9zZShoYW5kbGUpOw0KPiA+ID4gPiArbmV4 dF9jYXJkOg0KPiA+ID4gPiArCQlpZiAoc25kX2NhcmRfbmV4dCgmY2FyZCkgPCAwKSB7DQo+ID4g PiA+ICsJCQl1Y19lcnJvcigic25kX2NhcmRfbmV4dCIpOw0KPiA+ID4gPiArCQkJYnJlYWs7DQo+ ID4gPiA+ICsJCX0NCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyZXR1cm4gLTE7 DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIFRoaXMgZnVuY3Rpb24gd2lsbCBm aW5kIHRoZSBiZXN0IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uDQo+ID4gPiA+ICtmaWxl IGJhc2VkDQo+ID4gPiA+ICsgKiBvbiB0aGUgc291bmQgY2FyZCBsb25nIG5hbWUuDQo+ID4gPiA+ ICsgKiBEaWZmZXJlbnQgZGV2aWNlcyBtYXkgc2hhcmUgdGhlIHNhbWUgc291bmQgZHJpdmVyIGFu ZCB0aHVzIHRoZQ0KPiA+ID4gPiArc2FtZSBzb3VuZA0KPiA+ID4gPiArICogY2FyZCBuYW1lIChz aG9ydCBuYW1lKSwgYnV0IHRoZXkgbWF5IHN0aWxsIG5lZWQgZGlmZmVyZW50DQo+ID4gPiA+ICtk ZXZpY2Utc3BlY2lmaWMNCj4gPiA+ID4gKyAqIGNvbmZpZ3VyYXRpb25zLiBGb3IgdXNlciBzcGFj ZSB0byBkaWZmZXJlbnRpYXRlIHRoZW0sIGtlcm5lbA0KPiA+ID4gPiArZHJpdmVycyBtYXkNCj4g PiA+ID4gKyAqIGluY2x1ZGUgdGhlIERNSSBpbmZvICh2ZW5kb3IsIHByb2R1Y3QgYW5kIGJvYXJk KSBpbiB0aGUgY2FyZA0KPiA+ID4gPiArbG9uZw0KPiA+ID4gbmFtZS4NCj4gPiA+ID4gKyAqIEFu ZCB1c2VyIHNwYWNlIGNhbiBkZWZpbmUgY29uZmlndXJhdGlvbiBmaWxlIG5hbWVzIGFwcGVuZGlu Zw0KPiA+ID4gPiArRE1JIGtleXdvcmRzDQo+ID4gPiA+ICsgKiB0byB0aGUgY2FyZCBuYW1lLCBs aWtlOg0KPiA+ID4gPiArICogYnl0Y3ItcnQ1NjQwLkFTVVMuVDEwMA0KPiA+ID4gPiArICogYnl0 Y3ItcnQ1NjUxLk1pbm5vd0JvYXJkDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogV2hlbiBiZWlu ZyBhc2tlZCB0byBsb2FkIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGEgY2FyZCwNCj4gPiA+ ID4gK3RoaXMgZnVuY3Rpb24NCj4gPiA+ID4gKyAqIHdpbGwgdHJ5IHRvIGZpbmQgdGhlIGNhcmQg bG9uZyBuYW1lIGZyb20gdGhlIGxvY2FsIG1hY2hpbmUsDQo+ID4gPiA+ICthbmQgdGhlbiBzY2Fu DQo+ID4gPiA+ICsgKiBhbGwgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lcywgc2Vh cmNoIGV2ZXJ5IGZpZWxkIG9mDQo+ID4gPiA+ICt0aGUgY29uZmlnDQo+ID4gPiA+ICsgKiBmaWxl IG5hbWUgaW4gdGhlIGNhcmQgbG9uZyBuYW1lLiBUaGUgbW9yZSBjaGFyYWN0ZXJzIG1hdGNoLA0K PiA+ID4gPiArdGhlIGhpZ2hlcg0KPiA+ID4gPiArICogc2NvcmUgdGhlIGZpbGUgaGFzLiBGaW5h bGx5LCB0aGUgZmlsZSB3aXRoIHRoZSBoaWdoZXN0IHNjb3JlIHdpbGwgYmUNCj4gbG9hZGVkLg0K PiA+ID4gPiArICovDQo+ID4gPg0KPiA+ID4gSWQnIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIHRy eSBhbmQgb3BlbiBjYXJkIGxvbmduYW1lIGFuZCB0aGVuIGNhcmQNCj4gPiA+IG5hbWUgaWYgbG9u Z25hbWUgaXMgbm90IGZvdW5kLiBTbyBwcm92aWRpbmcgd2UgdXNlIHRoZSBleGFjdCBzYW1lDQo+ ID4gPiBuYW1lcyBhcyB0aGUgRE1JIG5hbWUgd2Ugd29udCBuZWVkIGFueSBzdHJpbmcgZm9ybWF0 dGluZyBvciBzY29yaW5nDQo+ID4gPiAoaS5lLiBmaWxlDQo+ID4gPiBvcGVuKCJsb25nbmFtZS9s b25nbmFtZS5jb25mIikgd2lsbCBlaXRoZXIgc3VjY2VlZCBvciBmYWlsKQ0KPiA+ID4NCj4gPiA+ IExpYW0NCj4gPg0KPiA+IEkgZmVlbCB3ZSBjYW5ub3QgdXNlIHRoZSBleGFjdCBzYW1lIG5hbWVz IGZvciB0aGUgY29uZmlndXJhdGlvbiBmaWxlDQo+ID4gYW5kIGNhcmQgbG9uZyBuYW1lLiBUaGUg RE1JIGluZm8gaW4gdGhlIGNhcmQgbG9uZyBuYW1lIGNhbiBiZSBsZW5ndGh5LA0KPiA+IGluY2x1 ZGluZyAnLicgLCBTUEFDRSwgbWVhbmluZ2xlc3MgaW5mbyBsaWtlICJDb3JwLiIgYW5kIHNvbWV0 aW1lDQo+ID4gZHVwbGljYXRlZCBpbmZvIGZvciBzb21lIE9FTXPvvI5JIGhvcGUgZGV2ZWxvcGVy cyBjYW4ganVzdCBleHRyYWN0IGtleQ0KPiA+IHdvcmRzIGZyb20gdGhlIG1lc3N5IERNSSBpbmZv IHRvIG1ha2UgYSBzaW1wbGUgY29uZmlndXJhdGlvbiBmaWxlDQo+ID4gbmFtZSwgYW5kIFVDTSBh dXRvbWF0aWNhbGx5IGRvIHRoZSBtYXRjaGluZyBhbmQgZ2l2ZSBlYWNoDQo+ID4gY29uZmlndXJh dGlvbiBmaWxlIGEgc2NvcmUuIFRoZW4gdGhlIGZpbGUgd2l0aCBoaWdoZXN0IHNjb3JlIHdpbGwg YmUNCj4gPiB1c2VkIGZvciB0aGUgY2FyZC4NCj4gDQo+IFByb3ZpZGluZyB0aGUgRE1JIG5hbWUg ZG9lcyBub3QgdXNlIGludmFsaWQgZmlsZW5hbWUgY2hhcmFjdGVycyB3ZSBhcmUgb2suDQo+IEV4 dHJhY3Rpbmcga2V5IHdvcmRzIGFuZCBtYXRjaGluZyBpcyBwcm9uZSB0byBtYW55IHByb2JsZW1z IGFuZCBwYWluZnVsIHRvDQo+IGRlYnVnLi4uLg0KDQpNYXkgSSByZXZpc2UgdGhlIFVDTSBjb2Rl IGxpa2UgdGhpcz8gSXQgd2lsbCB0cnkgdG8gb3BlbiB0aGUgZmlsZSB3aXRoIERNSSBuYW1lIGF0 IGZpcnN0LiBBbmQgb25seSBpZiB0aGF0IGZpbGUgaXMgbm90IGF2YWlsYWJsZSwgZmFsbCBiYWNr IHRvIGtleSB3b3JkcyBtYXRjaGluZy4gDQoNCkkgaG9wZSB0byBrZWVwIHRoZSBwb3NzaWJpbGl0 eSB0aGF0IHVzZXIgY2FuIHVzZSBhIHNpbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGEgcHJv ZHVjdCBmYW1pbHksIHdpdGhvdXQgZ2VuZXJhdGluZyB0b28gbWFueSBjYXJkIGRpcmVjdG9yaWVz IGFuZCBmaWxlcy4NCg0KVGhhbmtzDQpNZW5nZG9uZw0KDQo+IA0KPiBUaGUgYWx0ZXJuYXRpdmUg aXMgdG8gaW5jbHVkZSB0aGUgZXhhY3QgRE1JIG5hbWUgaW4gYSB0b3AgbGV2ZWwgY29uZmlnIGZp bGUNCj4gdGhhdCBwb2ludHMgdG8gdGhlIFVDTSBjb25maWcuDQoNCg0KDQpUaGFua3MNCk1lbmdk b25nDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBbHNh LWRldmVsIG1haWxpbmcgbGlzdApBbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcKaHR0cDovL21h aWxtYW4uYWxzYS1wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Fsc2EtZGV2ZWwK