From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Grodzovsky, Andrey" Subject: Re: [PATCH 2/4] drm/amd/powerplay: Add EEPROM I2C read/write support to Arcturus. Date: Tue, 22 Oct 2019 19:09:41 +0000 Message-ID: References: <1571431711-30149-1-git-send-email-andrey.grodzovsky@amd.com> <1571431711-30149-3-git-send-email-andrey.grodzovsky@amd.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: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Chen, Guchun" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Deucher, Alexander" , "Zhou1, Tao" , "Quan, Evan" , "noreply-confluence-5C7GfCeVMHo@public.gmane.org" DQpPbiAxMC8yMi8xOSAxMDo1OCBBTSwgQW5kcmV5IEdyb2R6b3Zza3kgd3JvdGU6DQo+DQo+IE9u IDEwLzIwLzE5IDk6NDQgUE0sIENoZW4sIEd1Y2h1biB3cm90ZToNCj4+IENvbW1lbnQgaW5saW5l Lg0KPj4NCj4+DQo+PiBSZWdhcmRzLA0KPj4gR3VjaHVuDQo+Pg0KPj4gLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCj4+IEZyb206IEFuZHJleSBHcm9kem92c2t5IDxhbmRyZXkuZ3JvZHpvdnNr eUBhbWQuY29tPg0KPj4gU2VudDogU2F0dXJkYXksIE9jdG9iZXIgMTksIDIwMTkgNDo0OCBBTQ0K Pj4gVG86IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+PiBDYzogQ2hlbiwgR3VjaHVu IDxHdWNodW4uQ2hlbkBhbWQuY29tPjsgWmhvdTEsIFRhbyANCj4+IDxUYW8uWmhvdTFAYW1kLmNv bT47IERldWNoZXIsIEFsZXhhbmRlciA8QWxleGFuZGVyLkRldWNoZXJAYW1kLmNvbT47IA0KPj4g bm9yZXBseS1jb25mbHVlbmNlQGFtZC5jb207IFF1YW4sIEV2YW4gPEV2YW4uUXVhbkBhbWQuY29t PjsgDQo+PiBHcm9kem92c2t5LCBBbmRyZXkgPEFuZHJleS5Hcm9kem92c2t5QGFtZC5jb20+DQo+ PiBTdWJqZWN0OiBbUEFUQ0ggMi80XSBkcm0vYW1kL3Bvd2VycGxheTogQWRkIEVFUFJPTSBJMkMg cmVhZC93cml0ZSANCj4+IHN1cHBvcnQgdG8gQXJjdHVydXMuDQo+Pg0KPj4gVGhlIGNvbW11bmlj YXRpb24gaXMgZG9uZSB0aHJvdWdoIFNNVSB0YWJsZSBhbmQgaGVuY2UgdGhlIGNvZGUgaXMgaW4g DQo+PiBwb3dlcnBsYXkuDQo+Pg0KPj4gU2lnbmVkLW9mZi1ieTogQW5kcmV5IEdyb2R6b3Zza3kg PGFuZHJleS5ncm9kem92c2t5QGFtZC5jb20+DQo+PiAtLS0NCj4+IMKgIGRyaXZlcnMvZ3B1L2Ry bS9hbWQvcG93ZXJwbGF5L2FyY3R1cnVzX3BwdC5jIHwgMjI5IA0KPj4gKysrKysrKysrKysrKysr KysrKysrKysrKysrDQo+PiDCoCAxIGZpbGUgY2hhbmdlZCwgMjI5IGluc2VydGlvbnMoKykNCj4+ DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvYXJjdHVydXNf cHB0LmMgDQo+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2FyY3R1cnVzX3BwdC5j DQo+PiBpbmRleCA5MGQ4NzFhLi41M2QwOGRlNSAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvcG93ZXJwbGF5L2FyY3R1cnVzX3BwdC5jDQo+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL3Bvd2VycGxheS9hcmN0dXJ1c19wcHQuYw0KPj4gQEAgLTM2LDYgKzM2LDExIEBADQo+ PiDCoCAjaW5jbHVkZSAic211X3YxMV8wX3BwdGFibGUuaCINCj4+IMKgICNpbmNsdWRlICJhcmN0 dXJ1c19wcHNtYy5oIg0KPj4gwqAgI2luY2x1ZGUgIm5iaW8vbmJpb183XzRfc2hfbWFzay5oIg0K Pj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+DQo+ PiArI2luY2x1ZGUgImFtZGdwdV9yYXMuaCINCj4+ICsNCj4+ICsjZGVmaW5lIHRvX2FtZGdwdV9k ZXZpY2UoeCkgKGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgYW1kZ3B1X3JhcywNCj4+ICtlZXByb21f Y29udHJvbC5lZXByb21fYWNjZXNzb3IpKS0+YWRldg0KPj4gwqAgwqAgI2RlZmluZSBDVEZfT0ZG U0VUX0VER0XCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDUNCj4+IMKgICNkZWZpbmUgQ1RGX09GRlNF VF9IT1RTUE9UwqDCoMKgwqDCoMKgwqAgNQ0KPj4gQEAgLTE3MSw2ICsxNzYsNyBAQCBzdGF0aWMg c3RydWN0IHNtdV8xMV8wX2NtbjJhaXNjX21hcHBpbmcgDQo+PiBhcmN0dXJ1c190YWJsZV9tYXBb U01VX1RBQkxFX0NPVU5UXSA9IHsNCj4+IMKgwqDCoMKgwqAgVEFCX01BUChTTVVfTUVUUklDUyks DQo+PiDCoMKgwqDCoMKgIFRBQl9NQVAoRFJJVkVSX1NNVV9DT05GSUcpLA0KPj4gwqDCoMKgwqDC oCBUQUJfTUFQKE9WRVJEUklWRSksDQo+PiArwqDCoMKgIFRBQl9NQVAoSTJDX0NPTU1BTkRTKSwN Cj4+IMKgIH07DQo+PiDCoCDCoCBzdGF0aWMgc3RydWN0IHNtdV8xMV8wX2NtbjJhaXNjX21hcHBp bmcgDQo+PiBhcmN0dXJ1c19wd3Jfc3JjX21hcFtTTVVfUE9XRVJfU09VUkNFX0NPVU5UXSA9IHsg QEAgLTI5Myw2ICsyOTksOSBAQCANCj4+IHN0YXRpYyBpbnQgYXJjdHVydXNfdGFibGVzX2luaXQo c3RydWN0IHNtdV9jb250ZXh0ICpzbXUsIHN0cnVjdCANCj4+IHNtdV90YWJsZSAqdGFibGUNCj4+ IMKgwqDCoMKgwqAgU01VX1RBQkxFX0lOSVQodGFibGVzLCBTTVVfVEFCTEVfU01VX01FVFJJQ1Ms IA0KPj4gc2l6ZW9mKFNtdU1ldHJpY3NfdCksDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBQQUdFX1NJWkUsIEFNREdQVV9HRU1fRE9NQUlOX1ZSQU0pOw0KPj4gwqAgK8KgwqDC oCBTTVVfVEFCTEVfSU5JVCh0YWJsZXMsIFNNVV9UQUJMRV9JMkNfQ09NTUFORFMsIA0KPj4gc2l6 ZW9mKFN3STJjUmVxdWVzdF90KSwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgUEFHRV9TSVpFLCBBTURHUFVfR0VNX0RPTUFJTl9WUkFNKTsNCj4+ICsNCj4+IMKgwqDC oMKgwqAgc211X3RhYmxlLT5tZXRyaWNzX3RhYmxlID0ga3phbGxvYyhzaXplb2YoU211TWV0cmlj c190KSwgDQo+PiBHRlBfS0VSTkVMKTsNCj4+IMKgwqDCoMKgwqAgaWYgKCFzbXVfdGFibGUtPm1l dHJpY3NfdGFibGUpDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07DQo+PiBA QCAtMTkyNyw2ICsxOTM2LDIyNCBAQCBzdGF0aWMgaW50IGFyY3R1cnVzX2RwbV9zZXRfdXZkX2Vu YWJsZShzdHJ1Y3QgDQo+PiBzbXVfY29udGV4dCAqc211LCBib29sIGVuYWJsZSkNCj4+IMKgwqDC oMKgwqAgcmV0dXJuIHJldDsNCj4+IMKgIH0NCj4+IMKgICsNCj4+ICtzdGF0aWMgdm9pZCBhcmN0 dXJ1c19maWxsX2VlcHJvbV9pMmNfcmVxKFN3STJjUmVxdWVzdF90wqAgKnJlcSwgYm9vbCANCj4+ IHdyaXRlLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDhfdCBh ZGRyZXNzLCB1aW50MzJfdCBudW1ieXRlcywNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHVpbnQ4X3QgKmRhdGEpDQo+PiArew0KPj4gK8KgwqDCoCBpbnQgaTsNCj4+ICsN Cj4+ICvCoMKgwqAgQlVHX09OKG51bWJ5dGVzID4gTUFYX1NXX0kyQ19DT01NQU5EUyk7DQo+PiAr DQo+PiArwqDCoMKgIHJlcS0+STJDY29udHJvbGxlclBvcnQgPSAwOw0KPj4gK8KgwqDCoCByZXEt PkkyQ1NwZWVkID0gMjsNCj4+ICvCoMKgwqAgcmVxLT5TbGF2ZUFkZHJlc3MgPSBhZGRyZXNzOw0K Pj4gK8KgwqDCoCByZXEtPk51bUNtZHMgPSBudW1ieXRlczsNCj4+ICsNCj4+ICvCoMKgwqAgZm9y IChpID0gMDsgaSA8IG51bWJ5dGVzOyBpKyspIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBTd0kyY0Nt ZF90ICpjbWQgPcKgICZyZXEtPlN3STJjQ21kc1tpXTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDC oCAvKiBGaXJzdCAyIGJ5dGVzIGFyZSBhbHdheXMgd3JpdGUgZm9yIGxvd2VyIDJiIEVFUFJPTSAN Cj4+IGFkZHJlc3MgKi8NCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoaSA8IDIpDQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjbWQtPkNtZCA9IDE7DQo+PiArwqDCoMKgwqDCoMKgwqAgZWxzZQ0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY21kLT5DbWQgPSB3cml0ZTsNCj4+ICsNCj4+ICsN Cj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBBZGQgUkVTVEFSVCBmb3IgcmVhZMKgIGFmdGVyIGFkZHJl c3MgZmlsbGVkICovDQo+PiArwqDCoMKgwqDCoMKgwqAgY21kLT5DbWRDb25maWcgfD0gKGkgPT0g MiAmJiAhd3JpdGUpID8gDQo+PiBDTURDT05GSUdfUkVTVEFSVF9NQVNLIDogMDsNCj4+ICsNCj4+ ICvCoMKgwqDCoMKgwqDCoCAvKiBBZGQgU1RPUCBpbiB0aGUgZW5kICovDQo+PiArwqDCoMKgwqDC oMKgwqAgY21kLT5DbWRDb25maWcgfD0gKGkgPT0gKG51bWJ5dGVzIC0gMSkpID8gDQo+PiBDTURD T05GSUdfU1RPUF9NQVNLIDogMDsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBGaWxsIHdp dGggZGF0YSByZWdhcmRsZXNzIGlmIHJlYWQgb3Igd3JpdGUgdG8gc2ltcGxpZnkgDQo+PiBjb2Rl ICovDQo+PiArwqDCoMKgwqDCoMKgwqAgY21kLT5SZWdpc3RlckFkZHIgPSBkYXRhW2ldOw0KPj4g K8KgwqDCoCB9DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgYXJjdHVydXNfaTJjX2VlcHJv bV9yZWFkX2RhdGEoc3RydWN0IGkyY19hZGFwdGVyICpjb250cm9sLA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDhfdCBhZGRyZXNz LA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdWludDhfdCAqZGF0YSwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHVpbnQzMl90IG51bWJ5dGVzKQ0KPj4gK3sNCj4+ICvCoMKgwqAg dWludDMyX3TCoCBpLCByZXQgPSAwOw0KPj4gK8KgwqDCoCBTd0kyY1JlcXVlc3RfdCByZXE7DQo+ PiArwqDCoMKgIHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gdG9fYW1kZ3B1X2RldmljZShj b250cm9sKTsNCj4+ICvCoMKgwqAgc3RydWN0IHNtdV90YWJsZV9jb250ZXh0ICpzbXVfdGFibGUg PSAmYWRldi0+c211LnNtdV90YWJsZTsNCj4+ICvCoMKgwqAgc3RydWN0IHNtdV90YWJsZSAqdGFi bGUgPSANCj4+ICZzbXVfdGFibGUtPnRhYmxlc1tTTVVfVEFCTEVfSTJDX0NPTU1BTkRTXTsNCj4+ ICsNCj4+ICvCoMKgwqAgbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsNCj4+ICvCoMKgwqAg YXJjdHVydXNfZmlsbF9lZXByb21faTJjX3JlcSgmcmVxLCBmYWxzZSwgYWRkcmVzcywgbnVtYnl0 ZXMsIGRhdGEpOw0KPj4gKw0KPj4gK8KgwqDCoCBtdXRleF9sb2NrKCZhZGV2LT5zbXUubXV0ZXgp Ow0KPj4gK8KgwqDCoCAvKiBOb3cgcmVhZCBkYXRhIHN0YXJ0aW5nIHdpdGggdGhhdCBhZGRyZXNz ICovDQo+PiArwqDCoMKgIHJldCA9IHNtdV91cGRhdGVfdGFibGUoJmFkZXYtPnNtdSwgU01VX1RB QkxFX0kyQ19DT01NQU5EUywgMCwgJnJlcSwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB0cnVlKTsNCj4+ICvCoMKgwqAgbXV0ZXhfdW5sb2NrKCZhZGV2LT5zbXUu bXV0ZXgpOw0KPj4gKw0KPj4gK8KgwqDCoCBpZiAoIXJldCkgew0KPj4gK8KgwqDCoMKgwqDCoMKg IFN3STJjUmVxdWVzdF90ICpyZXMgPSAoU3dJMmNSZXF1ZXN0X3QgKil0YWJsZS0+Y3B1X2FkZHI7 DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqAgLyogQXNzdW1lIFNNVcKgIGZpbGxzIHJlcy5Td0ky Y0NtZHNbaV0uRGF0YSB3aXRoIHJlYWQgYnl0ZXMgKi8NCj4+ICvCoMKgwqDCoMKgwqDCoCBmb3Ig KGkgPSAwOyBpIDwgbnVtYnl0ZXM7IGkrKykNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRh dGFbaV0gPSByZXMtPlN3STJjQ21kc1tpXS5EYXRhOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKg IHByX2RlYnVnKCJhcmN0dXJ1c19pMmNfZWVwcm9tX3JlYWRfZGF0YSwgYWRkcmVzcyA9ICV4LCBi eXRlcyANCj4+ID0gJWQsIGRhdGEgOiIsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAodWludDE2X3QpYWRkcmVzcywgbnVtYnl0ZXMpOw0KPj4gKw0KPj4gK8KgwqDCoMKg wqDCoMKgIHByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJkYXRhOiAiLCBEVU1QX1BSRUZJWF9O T05FLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA4LCAxLCBkYXRh LCBudW1ieXRlcywgZmFsc2UpOw0KPj4gK8KgwqDCoCB9IGVsc2UNCj4+ICvCoMKgwqDCoMKgwqDC oCBwcl9lcnIoImFyY3R1cnVzX2kyY19lZXByb21fcmVhZF9kYXRhIC0gZXJyb3Igb2NjdXJyZWQg OiV4IiwgDQo+PiByZXQpOw0KPj4gKw0KPj4gK8KgwqDCoCByZXR1cm4gcmV0Ow0KPj4gK30NCj4+ ICsNCj4+ICtzdGF0aWMgaW50IGFyY3R1cnVzX2kyY19lZXByb21fd3JpdGVfZGF0YShzdHJ1Y3Qg aTJjX2FkYXB0ZXIgKmNvbnRyb2wsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB1aW50OF90IGFkZHJlc3MsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50OF90ICpkYXRhLA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDMyX3QgbnVtYnl0ZXMp DQo+PiArew0KPj4gK8KgwqDCoCB1aW50MzJfdCByZXQ7DQo+PiArwqDCoMKgIFN3STJjUmVxdWVz dF90IHJlcTsNCj4+ICvCoMKgwqAgc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSB0b19hbWRn cHVfZGV2aWNlKGNvbnRyb2wpOw0KPj4gKw0KPj4gK8KgwqDCoCBtZW1zZXQoJnJlcSwgMCwgc2l6 ZW9mKHJlcSkpOw0KPj4gK8KgwqDCoCBhcmN0dXJ1c19maWxsX2VlcHJvbV9pMmNfcmVxKCZyZXEs IHRydWUsIGFkZHJlc3MsIG51bWJ5dGVzLCBkYXRhKTsNCj4+ICsNCj4+ICvCoMKgwqAgbXV0ZXhf bG9jaygmYWRldi0+c211Lm11dGV4KTsNCj4+ICvCoMKgwqAgcmV0ID0gc211X3VwZGF0ZV90YWJs ZSgmYWRldi0+c211LCBTTVVfVEFCTEVfSTJDX0NPTU1BTkRTLCAwLCANCj4+ICZyZXEsIHRydWUp Ow0KPj4gK8KgwqDCoCBtdXRleF91bmxvY2soJmFkZXYtPnNtdS5tdXRleCk7DQo+PiArDQo+PiAr wqDCoMKgIGlmICghcmV0KSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgcHJfZGVidWcoImFyY3R1cnVz X2kyY193cml0ZSgpLCBhZGRyZXNzID0gJXgsIGJ5dGVzID0gJWQgLCANCj4+IGRhdGE6ICIsDQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodWludDE2X3QpYWRk cmVzcywgbnVtYnl0ZXMpOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgIHByaW50X2hleF9kdW1w KEtFUk5fREVCVUcsICJkYXRhOiAiLCBEVU1QX1BSRUZJWF9OT05FLA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA4LCAxLCBkYXRhLCBudW1ieXRlcywgZmFsc2UpOw0K Pj4gK8KgwqDCoMKgwqDCoMKgIC8qDQo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIEFjY29yZGluZyB0 byBFRVBST00gc3BlYyB0aGVyZSBpcyBhIE1BWCBvZiAxMCBtcyByZXF1aXJlZCANCj4+IGZvcg0K Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBFRVBST00gdG8gZmx1c2ggaW50ZXJuYWwgUlggYnVmZmVy IGFmdGVyIFNUT1Agd2FzIGlzc3VlZCANCj4+IGF0IHRoZQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqAg KiBlbmQgb2Ygd3JpdGUgdHJhbnNhY3Rpb24uIER1cmluZyB0aGlzIHRpbWUgdGhlIEVFUFJPTSAN Cj4+IHdpbGwgbm90IGJlDQo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIHJlc3BvbnNpdmUgdG8gYW55 IG1vcmUgY29tbWFuZHMgLSBzbyB3YWl0IGEgYml0IG1vcmUuDQo+PiArwqDCoMKgwqDCoMKgwqDC oCAqLw0KPj4gK8KgwqDCoMKgwqDCoMKgIG1zbGVlcCgxMCk7DQo+PiArDQo+PiArwqDCoMKgIH0g ZWxzZQ0KPj4gK8KgwqDCoMKgwqDCoMKgIHByX2VycigiYXJjdHVydXNfaTJjX3dyaXRlLSBlcnJv ciBvY2N1cnJlZCA6JXgiLCByZXQpOw0KPj4gKw0KPj4gK8KgwqDCoCByZXR1cm4gcmV0Ow0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGFyY3R1cnVzX2kyY19lZXByb21faTJjX3hmZXIoc3Ry dWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKSB7DQo+PiArwqDCoMKgIHVp bnQzMl90wqAgaSwgaiwgcmV0LCBkYXRhX3NpemUsIGRhdGFfY2h1bmtfc2l6ZSwgDQo+PiBuZXh0 X2VlcHJvbV9hZGRyID0gMDsNCj4+ICvCoMKgwqAgdWludDhfdCAqZGF0YV9wdHIsIGRhdGFfY2h1 bmtbTUFYX1NXX0kyQ19DT01NQU5EU10gPSB7IDAgfTsNCj4+ICsNCj4+ICvCoMKgwqAgZm9yIChp ID0gMDsgaSA8IG51bTsgaSsrKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgLyoNCj4+ICvCoMKgwqDC oMKgwqDCoMKgICogU01VIGludGVyZmFjZSBhbGxvd3MgYXQgbW9zdCBNQVhfU1dfSTJDX0NPTU1B TkRTIGJ5dGVzIG9mIA0KPj4gZGF0YSBhdA0KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBvbmNlIGFu ZCBoZW5jZSB0aGUgZGF0YSBuZWVkcyB0byBiZSBzcGxpY2VkIGludG8gY2h1bmtzIA0KPj4gYW5k IHNlbnQgZWFjaA0KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBjaHVuayBzZXBhcmF0ZWx5DQo+PiAr wqDCoMKgwqDCoMKgwqDCoCAqLw0KPj4gK8KgwqDCoMKgwqDCoMKgIGRhdGFfc2l6ZSA9IG1zZ3Nb aV0ubGVuIC0gMjsNCj4+ICvCoMKgwqDCoMKgwqDCoCBkYXRhX2NodW5rX3NpemUgPSBNQVhfU1df STJDX0NPTU1BTkRTIC0gMjsNCj4+ICvCoMKgwqDCoMKgwqDCoCBuZXh0X2VlcHJvbV9hZGRyID0g KG1zZ3NbaV0uYnVmWzBdIDw8IDggJiAweGZmMDApIHwgDQo+PiAobXNnc1tpXS5idWZbMV0gJiAw eGZmKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBkYXRhX3B0ciA9IG1zZ3NbaV0uYnVmICsgMjsNCj4+ ICsNCj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGogPSAwOyBqIDwgZGF0YV9zaXplIC8gZGF0YV9j aHVua19zaXplOyBqKyspIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIEluc2VydCB0 aGUgRUVQUk9NIGRlc3QgYWRkZXNzLCBiaXRzIDAtMTUgKi8NCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGRhdGFfY2h1bmtbMF0gPSAoKG5leHRfZWVwcm9tX2FkZHIgPj4gOCkgJiAweGZmKTsN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRhdGFfY2h1bmtbMV0gPSAobmV4dF9lZXByb21f YWRkciAmIDB4ZmYpOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG1zZ3Nb aV0uZmxhZ3MgJiBJMkNfTV9SRCkgew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXQgPSBhcmN0dXJ1c19pMmNfZWVwcm9tX3JlYWRfZGF0YShpMmNfYWRhcCwNCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAodWludDhfdCltc2dzW2ldLmFkZHIsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YV9jaHVuaywgTUFYX1NXX0ky Q19DT01NQU5EUyk7DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1l bWNweShkYXRhX3B0ciwgZGF0YV9jaHVuayArIDIsIGRhdGFfY2h1bmtfc2l6ZSk7DQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugew0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBtZW1jcHkoZGF0YV9jaHVuayArIDIsIGRhdGFfcHRyLCBkYXRhX2NodW5r X3NpemUpOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBh cmN0dXJ1c19pMmNfZWVwcm9tX3dyaXRlX2RhdGEoaTJjX2FkYXAsDQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodWlu dDhfdCltc2dzW2ldLmFkZHIsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRhX2NodW5rLCBNQVhfU1dfSTJDX0NP TU1BTkRTKTsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbnVtID0gLUVJTzsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290 byBmYWlsOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbmV4dF9lZXByb21fYWRkciArPSBkYXRhX2NodW5rX3NpemU7DQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRhX3B0ciArPSBkYXRhX2NodW5rX3NpemU7DQo+PiAr wqDCoMKgwqDCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkYXRhX3NpemUg JSBkYXRhX2NodW5rX3NpemUpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRhdGFfY2h1 bmtbMF0gPSAoKG5leHRfZWVwcm9tX2FkZHIgPj4gOCkgJiAweGZmKTsNCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRhdGFfY2h1bmtbMV0gPSAobmV4dF9lZXByb21fYWRkciAmIDB4ZmYpOw0K Pj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNf TV9SRCkgew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBhcmN0dXJ1 c19pMmNfZWVwcm9tX3JlYWRfZGF0YShpMmNfYWRhcCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodWludDhfdCltc2dz W2ldLmFkZHIsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YV9jaHVuaywgKGRhdGFfc2l6ZSAlIA0KPj4gZGF0YV9j aHVua19zaXplKSArIDIpOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBtZW1jcHkoZGF0YV9wdHIsIGRhdGFfY2h1bmsgKyAyLCBkYXRhX3NpemUgJSANCj4+IGRhdGFf Y2h1bmtfc2l6ZSk7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugew0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW1jcHkoZGF0YV9jaHVuayArIDIsIGRhdGFf cHRyLCBkYXRhX3NpemUgJSANCj4+IGRhdGFfY2h1bmtfc2l6ZSk7DQo+PiArDQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IGFyY3R1cnVzX2kyY19lZXByb21fd3JpdGVf ZGF0YShpMmNfYWRhcCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh1aW50OF90KW1zZ3NbaV0uYWRkciwNCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGRhdGFfY2h1bmssIChkYXRhX3NpemUgJSANCj4+IGRhdGFfY2h1bmtfc2l6ZSkgKyAy KTsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlmIChyZXQpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg bnVtID0gLUVJTzsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBmYWls Ow0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4+ ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK2ZhaWw6DQo+PiArwqDCoMKgIHJldHVybiBudW07DQo+PiAr fQ0KPj4gKw0KPj4gK3N0YXRpYyB1MzIgYXJjdHVydXNfaTJjX2VlcHJvbV9pMmNfZnVuYyhzdHJ1 Y3QgaTJjX2FkYXB0ZXIgKmFkYXApIHsNCj4+ICvCoMKgwqAgcmV0dXJuIEkyQ19GVU5DX0kyQyB8 IEkyQ19GVU5DX1NNQlVTX0VNVUw7IH0NCj4+ICsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGkyY19hbGdvcml0aG0gYXJjdHVydXNfaTJjX2VlcHJvbV9pMmNfYWxnbyA9IHsNCj4+ICvC oMKgwqAgLm1hc3Rlcl94ZmVyID0gYXJjdHVydXNfaTJjX2VlcHJvbV9pMmNfeGZlciwNCj4+ICvC oMKgwqAgLmZ1bmN0aW9uYWxpdHkgPSBhcmN0dXJ1c19pMmNfZWVwcm9tX2kyY19mdW5jLA0KPj4g K307DQo+PiArDQo+PiAraW50IGFyY3R1cnVzX2kyY19lZXByb21fY29udHJvbF9pbml0KHN0cnVj dCBpMmNfYWRhcHRlciAqY29udHJvbCkNCj4+ICt7DQo+PiArwqDCoMKgIHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2ID0gdG9fYW1kZ3B1X2RldmljZShjb250cm9sKTsNCj4+ICvCoMKgwqAgaW50 IHJlczsNCj4+ICsNCj4+ICvCoMKgwqAgY29udHJvbC0+b3duZXIgPSBUSElTX01PRFVMRTsNCj4+ ICvCoMKgwqAgY29udHJvbC0+Y2xhc3MgPSBJMkNfQ0xBU1NfU1BEOw0KPj4gK8KgwqDCoCBjb250 cm9sLT5kZXYucGFyZW50ID0gJmFkZXYtPnBkZXYtPmRldjsNCj4+ICvCoMKgwqAgY29udHJvbC0+ YWxnbyA9ICZhcmN0dXJ1c19pMmNfZWVwcm9tX2kyY19hbGdvOw0KPj4gK8KgwqDCoCBzbnByaW50 Zihjb250cm9sLT5uYW1lLCBzaXplb2YoY29udHJvbC0+bmFtZSksICJSQVMgRUVQUk9NIik7DQo+ PiArDQo+PiArwqDCoMKgIHJlcyA9IGkyY19hZGRfYWRhcHRlcihjb250cm9sKTsNCj4+ICvCoMKg wqAgaWYgKHJlcykNCj4+ICvCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoIkZhaWxlZCB0byByZWdp c3RlciBodyBpMmMsIGVycjogJWRcbiIsIHJlcyk7DQo+PiArDQo+PiArwqDCoMKgIHJldHVybiBy ZXM7DQo+PiArfQ0KPj4gW0d1Y2h1bl1DYW4gd2UgbW92ZSB0aGlzIHJlZ2lzdGVyIGNvZGUgdG8g b25lIGNvbW1vbiBmaWxlPyBBcyBJIHNhdyANCj4+IG9uIHZlZ2EyMCwgd2UgaGF2ZSB0aGUgc2Ft ZSBjb2RlIHNtdV92MTFfMF9pMmNfZWVwcm9tX2NvbnRyb2xfaW5pdCB0byANCj4+IHJlZ2lzdGVy IGkyYyBkZXZpY2UuDQo+PiBJZiB3ZSBjYW4gbW92ZSBzdWNoIGNvZGUgdG8gYSBjb21tb24gZmls ZSwgdGhlbiBpbiBlYWNoIGFzaWMncyBpMmMgDQo+PiBjb2RlLCB3aGF0IHdlIHNob3VsZCBkbyBp cyB0byBwYXNzIG5lY2Vzc2FyeSBwdHJzL25hbWUvb3BzIHRvIHRoYXQgDQo+PiBjb21tb24gZmls ZSwgYW5kIGZyb20gdGhlcmUsIHdlIHdpbGwgcmVnaXN0ZXIgaTJjIGRldmljZS4NCj4+IFRoaXMg Y2FuIGhlbHAgY2xlYW4gc29tZSBjb2RlLCB3aGF0ZXZlciwgbWF5YmUgY29udmVuaWVudCB0byBv dGhlciANCj4+IGFzaWNzIGlmIHdlIHdhbnQgdG8gZG8gdGhlIHNhbWUgaTJjIGFkZGluZyBqb2Iu DQo+Pg0KPj4gK3ZvaWQgYXJjdHVydXNfaTJjX2VlcHJvbV9jb250cm9sX2Zpbmkoc3RydWN0IGky Y19hZGFwdGVyICpjb250cm9sKQ0KPj4gK3sNCj4+ICvCoMKgwqAgaTJjX2RlbF9hZGFwdGVyKGNv bnRyb2wpOw0KPj4gK30NCj4+ICsNCj4+IFtHdWNodW5dVGhlIHNhbWUgYXMgYWJvdmUuDQo+DQo+ IFRoaXMgd2lsbCBiZSB2ZXJ5IHNtYWxsIGR1cGxpY2F0aW9uIHJlZHVjdGlvbiBidXQgSSB3aWxs IGxvb2sgaW50byANCj4gcHV0dGluZyB0aGlzIGluc2lkZSBhbWRncHVfcmFzX2VlcHJvbS5jDQo+ DQo+IEFuZHJleQ0KDQoNCkkgdG9vayBhIGxvb2sgYW5kIGkgaG9uZXN0bHkgZG9uJ3Qgc2VlIGEg cG9pbnQgbm93IGluIHRoaXMgYXMgaSBzYXZlIA0Kb25seSBhIGZldyBsaW5lcyBvZiBjb2RlIGJl Y2F1c2UgYXJjdHVydXNfaTJjX2VlcHJvbV9pMmNfYWxnbyBvciANCnNtdV92MTFfMF9pMmNfZWVw cm9tX2kyY194ZmVyIGFyZSBBU0lDIHNwZWNpZmljIGFuZCBzbyBpdCBib2lscyBkb3duIHRvIA0K YSBmZXcgYXNzaWdubWVudHMgYW5kIGNhbGxzIHRvIGkyY19hZGRfYWRhcHRlciBhbmQgaTJjX2Rl bF9hZGFwdGVyLiBPbiANCnRoZSBvdGhlciBoYW5kIGkgbmVlZCB0byBjaGFuZ2UgdGhlIFNNVSBp bnRlcmZhY2UgYW5kIA0Kc211X3YxMV8wX2kyY19lZXByb20gaGVhZGVyIHRvIHJldHVybiBtZSBz b21ldGhpbmcgbGlrZSBhIHBvaW50ZXIgdG8gDQppMmNfYWxnb3JpdGhtLmZ1bmN0aW9uYWxpdHkg d2hpY2ggZG9lc24ndCBzZWVtIGludHVpdGl2ZSB0byBtZS4NCg0KQW5kcmV5DQoNCg0KPg0KPj4N Cj4+IMKgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHB0YWJsZV9mdW5jcyBhcmN0dXJ1c19wcHRfZnVu Y3MgPSB7DQo+PiDCoMKgwqDCoMKgIC8qIHRyYW5zbGF0ZSBzbXUgaW5kZXggaW50byBhcmN0dXJ1 cyBzcGVjaWZpYyBpbmRleCAqLw0KPj4gwqDCoMKgwqDCoCAuZ2V0X3NtdV9tc2dfaW5kZXggPSBh cmN0dXJ1c19nZXRfc211X21zZ19pbmRleCwNCj4+IEBAIC0xOTY2LDYgKzIxOTMsOCBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0IHBwdGFibGVfZnVuY3MgDQo+PiBhcmN0dXJ1c19wcHRfZnVuY3MgPSB7 DQo+PiDCoMKgwqDCoMKgIC5nZXRfcG93ZXJfbGltaXQgPSBhcmN0dXJ1c19nZXRfcG93ZXJfbGlt aXQsDQo+PiDCoMKgwqDCoMKgIC5pc19kcG1fcnVubmluZyA9IGFyY3R1cnVzX2lzX2RwbV9ydW5u aW5nLA0KPj4gwqDCoMKgwqDCoCAuZHBtX3NldF91dmRfZW5hYmxlID0gYXJjdHVydXNfZHBtX3Nl dF91dmRfZW5hYmxlLA0KPj4gK8KgwqDCoCAuaTJjX2VlcHJvbV9pbml0ID0gYXJjdHVydXNfaTJj X2VlcHJvbV9jb250cm9sX2luaXQsDQo+PiArwqDCoMKgIC5pMmNfZWVwcm9tX2ZpbmkgPSBhcmN0 dXJ1c19pMmNfZWVwcm9tX2NvbnRyb2xfZmluaSwNCj4+IMKgIH07DQo+PiDCoCDCoCB2b2lkIGFy Y3R1cnVzX3NldF9wcHRfZnVuY3Moc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpDQpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlz dAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZng=