Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934058AbeAKLRS (ORCPT + 1 other); Thu, 11 Jan 2018 06:17:18 -0500 Received: from mx07-00178001.pphosted.com ([62.209.51.94]:30558 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933916AbeAKLRO (ORCPT ); Thu, 11 Jan 2018 06:17:14 -0500 From: Philippe CORNU To: Brian Norris CC: Archit Taneja , Andrzej Hajda , Laurent Pinchart , David Airlie , Yannick FERTRE , Vincent ABRIOU , "dri-devel@lists.freedesktop.org" , "linux-kernel@vger.kernel.org" , Sean Paul , "Nickey Yang" , "hl@rock-chips.com" , "linux-rockchip@lists.infradead.org" , "mka@chromium.org" , "hoegsberg@gmail.com" , "zyw@rock-chips.com" , "xbl@rock-chips.com" Subject: Re: [PATCH] drm/bridge/synopsys: dsi: use common mipi_dsi_create_packet() Thread-Topic: [PATCH] drm/bridge/synopsys: dsi: use common mipi_dsi_create_packet() Thread-Index: AQHThoap1QCkJ49j+0ukvgxd0HhaQKNrUQSAgACH7YCAAqSDgA== Date: Thu, 11 Jan 2018 11:16:34 +0000 Message-ID: References: <20180106003813.4816-1-briannorris@chromium.org> <715bb58c-efa6-7944-f186-c186d7fae569@st.com> <20180109185512.GA73309@google.com> In-Reply-To: <20180109185512.GA73309@google.com> Accept-Language: fr-FR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.75.127.50] Content-Type: text/plain; charset="utf-8" Content-ID: <692640C042191D4985701DCA3F87A9FA@st.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2018-01-11_04:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: SGkgQnJpYW4sDQoNCk9uIDAxLzA5LzIwMTggMDc6NTUgUE0sIEJyaWFuIE5vcnJpcyB3cm90ZToN Cj4gSGkgUGhpbGlwcGUsDQo+IA0KPiBPbiBUdWUsIEphbiAwOSwgMjAxOCBhdCAxMDo0ODo0M0FN ICswMDAwLCBQaGlsaXBwZSBDT1JOVSB3cm90ZToNCj4+IEhpIEJyaWFuLA0KPj4NCj4+IEFuZCBt YW55IHRoYW5rcyBmb3IgaW1wbGVtZW50aW5nIHRoZXNlIFRPRE9zLg0KPiANCj4gQW5kIHRoYW5r cyBmb3IgYWRkaW5nIHRoZW07IGl0IGdhdmUgbWUgYSBiZXR0ZXIgb3B0aW9uIHRoYW4ganVzdCBh ZGRpbmcNCj4geWV0IGFub3RoZXIgc3dpdGNoIGNhc2UgKE1JUElfRFNJX0dFTkVSSUNfTE9OR19X UklURSkgOykNCj4gDQo+PiBPbiAwMS8wNi8yMDE4IDAxOjM4IEFNLCBCcmlhbiBOb3JyaXMgd3Jv dGU6DQo+Pj4gVGhpcyB0YWtlcyBjYXJlIG9mIDIgVE9ET3MgaW4gdGhpcyBkcml2ZXIsIGJ5IHVz aW5nIHRoZSBjb21tb24gRFNJDQo+Pj4gcGFja2V0LW1hcnNoYWxsaW5nIGNvZGUgaW5zdGVhZCBv ZiBvdXIgY3VzdG9tIHNob3J0L2xvbmcgd3JpdGUgY29kZS4NCj4+PiBUaGlzIGJvdGggc2F2ZXMg dXMgc29tZSBkdXBsaWNhdGVkIGNvZGUgYW5kIGdldHMgdXMgZnJlZSBzdXBwb3J0IGZvcg0KPj4+ IGNvbW1hbmQgdHlwZXMgdGhhdCB3ZXJlbid0IGFscmVhZHkgcGFydCBvZiBvdXIgc3dpdGNoIGJs b2NrIChlLmcuLA0KPj4+IE1JUElfRFNJX0dFTkVSSUNfTE9OR19XUklURSkuDQo+Pj4NCj4+PiBU aGUgY29kZSBsb2dpYyBzdGF5cyBtb3N0bHkgaW50YWN0LCBleGNlcHQgdGhhdCBpdCBiZWNvbWVz IHVubmVjZXNzYXJ5DQo+Pj4gdG8gc3BsaXQgdGhlIHNob3J0L2xvbmcgd3JpdGUgZnVuY3Rpb25z LCBhbmQgd2UgaGF2ZSB0byBjb3B5IGRhdGEgYSBiaXQNCj4+PiBtb3JlLg0KPj4+DQo+Pj4gQWxv bmcgdGhlIHdheSwgSSBub3RpY2VkIHRoYXQgbG9vcCBib3VuZHMgd2VyZSBhIGxpdHRsZSBvZGQ6 DQo+Pj4NCj4+PiAJd2hpbGUgKERJVl9ST1VORF9VUChsZW4sIHBsZF9kYXRhX2J5dGVzKSkNCj4+ Pg0KPj4+IFRoaXMgcmVhbGx5IHdhcyBqdXN0IHN1cHBvc2VkIHRvIGJlICdsZW4gIT0gMCcsIHNv IEkgbWFkZSB0aGF0IG1vcmUNCj4+PiBjbGVhci4NCj4+Pg0KPj4+IFRlc3RlZCBvbiBSSzMzOTkg d2l0aCBzb21lIHBlbmRpbmcgcmVmYWN0b3JpbmcgcGF0Y2hlcyBieSBOaWNrZXkgWWFuZywNCj4+ PiB0byBtYWtlIHRoZSBSb2NrY2hpcCBEU0kgZHJpdmVyIHdyYXAgdGhpcyBjb21tb24gZHJpdmVy Lg0KPj4+DQo+Pj4gU2lnbmVkLW9mZi1ieTogQnJpYW4gTm9ycmlzIDxicmlhbm5vcnJpc0BjaHJv bWl1bS5vcmc+DQo+Pj4gLS0tDQo+Pj4gQ291bGQgdXNlIGFuIGV4dHJhIGxvb2sgZnJvbSBmb2xr cy4gVGhpcyBsb29rcyBsaWtlIHRoZSBjb3JyZWN0IHRyaXZpYWwNCj4+PiB0cmFuc2Zvcm1hdGlv biwgYnV0IEknbSBub3QgdGhhdCBmYW1pbGlhciB3aXRoIERTSS4NCj4+Pg0KPj4+ICAgIGRyaXZl cnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctbWlwaS1kc2kuYyB8IDc4ICsrKysrKy0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KPj4+ICAgIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCsp LCA2MiBkZWxldGlvbnMoLSkNCj4+Pg0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL3N5bm9wc3lzL2R3LW1pcGktZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5 bm9wc3lzL2R3LW1pcGktZHNpLmMNCj4+PiBpbmRleCBkOWNjYTRmZDY2ZWMuLjJmZWQyMGU0NGRm ZSAxMDA2NDQNCj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LW1p cGktZHNpLmMNCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LW1p cGktZHNpLmMNCj4+PiBAQCAtMTM2LDEwICsxMzYsNiBAQA0KPj4+ICAgIAkJCQkJIEdFTl9TV18w UF9UWF9MUCkNCj4+PiAgICANCj4+PiAgICAjZGVmaW5lIERTSV9HRU5fSERSCQkJMHg2Yw0KPj4+ IC0vKiBUT0RPIFRoZXNlIDIgZGVmaW5lcyB3aWxsIGJlIHJld29ya2VkIHRoYW5rcyB0byBtaXBp X2RzaV9jcmVhdGVfcGFja2V0KCkgKi8NCj4+PiAtI2RlZmluZSBHRU5fSERBVEEoZGF0YSkJCQko KChkYXRhKSAmIDB4ZmZmZikgPDwgOCkNCj4+PiAtI2RlZmluZSBHRU5fSFRZUEUodHlwZSkJCQko KCh0eXBlKSAmIDB4ZmYpIDw8IDApDQo+Pj4gLQ0KPj4+ICAgICNkZWZpbmUgRFNJX0dFTl9QTERf REFUQQkJMHg3MA0KPj4+ICAgIA0KPj4+ICAgICNkZWZpbmUgRFNJX0NNRF9QS1RfU1RBVFVTCQkw eDc0DQo+Pj4gQEAgLTM1OSw0NCArMzU1LDE1IEBAIHN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZ2Vu X3BrdF9oZHJfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiBoZHJfdmFsKQ0KPj4+ ICAgIAlyZXR1cm4gMDsNCj4+PiAgICB9DQo+Pj4gICAgDQo+Pj4gLXN0YXRpYyBpbnQgZHdfbWlw aV9kc2lfZGNzX3Nob3J0X3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLA0KPj4+IC0JCQkJ ICAgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykNCj4+PiAtew0KPj4+IC0JY29u c3QgdTggKnR4X2J1ZiA9IG1zZy0+dHhfYnVmOw0KPj4+IC0JdTE2IGRhdGEgPSAwOw0KPj4+IC0J dTMyIHZhbDsNCj4+PiAtDQo+Pj4gLQlpZiAobXNnLT50eF9sZW4gPiAwKQ0KPj4+IC0JCWRhdGEg fD0gdHhfYnVmWzBdOw0KPj4+IC0JaWYgKG1zZy0+dHhfbGVuID4gMSkNCj4+PiAtCQlkYXRhIHw9 IHR4X2J1ZlsxXSA8PCA4Ow0KPj4+IC0NCj4+PiAtCWlmIChtc2ctPnR4X2xlbiA+IDIpIHsNCj4+ PiAtCQlkZXZfZXJyKGRzaS0+ZGV2LCAidG9vIGxvbmcgdHggYnVmIGxlbmd0aCAlenUgZm9yIHNo b3J0IHdyaXRlXG4iLA0KPj4+IC0JCQltc2ctPnR4X2xlbik7DQo+Pj4gLQkJcmV0dXJuIC1FSU5W QUw7DQo+Pj4gLQl9DQo+Pj4gLQ0KPj4+IC0JdmFsID0gR0VOX0hEQVRBKGRhdGEpIHwgR0VOX0hU WVBFKG1zZy0+dHlwZSk7DQo+Pj4gLQlyZXR1cm4gZHdfbWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3Jp dGUoZHNpLCB2YWwpOw0KPj4+IC19DQo+Pj4gLQ0KPj4+IC1zdGF0aWMgaW50IGR3X21pcGlfZHNp X2Rjc19sb25nX3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLA0KPj4+IC0JCQkJICAgICAg Y29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQ0KPj4+ICtzdGF0aWMgaW50IGR3X21pcGlf ZHNpX2Rjc193cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwNCj4+PiArCQkJCSBjb25zdCBz dHJ1Y3QgbWlwaV9kc2lfcGFja2V0ICpwYWNrZXQpDQo+Pg0KPj4gQm90aCBEQ1MgYW5kIEdlbmVy aWMgZHNpIHRyYW5zZmVycyBhcmUgbWFuYWdlZCBieSBkcm1fbWlwaV9kc2kuYw0KPj4gaGVscGVy cy4gU28gbWF5YmUgZHdfbWlwaV9kc2lfZGNzX3dyaXRlKCkgc2hvdWxkIGJlIHJlbmFtZWQNCj4+ IGR3X21pcGlfZHNpX3dyaXRlKCkuLi4NCj4gDQo+IEFoLCBnb29kIHBvaW50LiBJIHJlYWxseSBt ZWFudCB0byByZW1vdmUgdGhlIF9kY3MgbmFtaW5nIHRvbywgYnV0IEkNCj4gZ3Vlc3MgSSBtaXNz ZWQgaXQuIFdpbGwgZm9sbG93IHVwLg0KPiANCj4+PiAgICB7DQo+Pj4gLQljb25zdCB1OCAqdHhf YnVmID0gbXNnLT50eF9idWY7DQo+Pj4gLQlpbnQgbGVuID0gbXNnLT50eF9sZW4sIHBsZF9kYXRh X2J5dGVzID0gc2l6ZW9mKHUzMiksIHJldDsNCj4+PiAtCXUzMiBoZHJfdmFsID0gR0VOX0hEQVRB KG1zZy0+dHhfbGVuKSB8IEdFTl9IVFlQRShtc2ctPnR5cGUpOw0KPj4+ICsJY29uc3QgdTggKnR4 X2J1ZiA9IHBhY2tldC0+cGF5bG9hZDsNCj4+PiArCWludCBsZW4gPSBwYWNrZXQtPnBheWxvYWRf bGVuZ3RoLCBwbGRfZGF0YV9ieXRlcyA9IHNpemVvZih1MzIpLCByZXQ7DQo+Pj4gICAgCXUzMiBy ZW1haW5kZXI7DQo+Pj4gICAgCXUzMiB2YWw7DQo+Pj4gICAgDQo+Pj4gLQlpZiAobXNnLT50eF9s ZW4gPCAzKSB7DQo+Pj4gLQkJZGV2X2Vycihkc2ktPmRldiwgIndyb25nIHR4IGJ1ZiBsZW5ndGgg JXp1IGZvciBsb25nIHdyaXRlXG4iLA0KPj4+IC0JCQltc2ctPnR4X2xlbik7DQo+Pj4gLQkJcmV0 dXJuIC1FSU5WQUw7DQo+Pj4gLQl9DQo+Pj4gLQ0KPj4+IC0Jd2hpbGUgKERJVl9ST1VORF9VUChs ZW4sIHBsZF9kYXRhX2J5dGVzKSkgew0KPj4+ICsJd2hpbGUgKGxlbikgew0KPj4+ICAgIAkJaWYg KGxlbiA8IHBsZF9kYXRhX2J5dGVzKSB7DQo+Pj4gICAgCQkJcmVtYWluZGVyID0gMDsNCj4+PiAg ICAJCQltZW1jcHkoJnJlbWFpbmRlciwgdHhfYnVmLCBsZW4pOw0KPj4+IEBAIC00MTksNDAgKzM4 NiwyNyBAQCBzdGF0aWMgaW50IGR3X21pcGlfZHNpX2Rjc19sb25nX3dyaXRlKHN0cnVjdCBkd19t aXBpX2RzaSAqZHNpLA0KPj4+ICAgIAkJfQ0KPj4+ICAgIAl9DQo+Pj4gICAgDQo+Pj4gLQlyZXR1 cm4gZHdfbWlwaV9kc2lfZ2VuX3BrdF9oZHJfd3JpdGUoZHNpLCBoZHJfdmFsKTsNCj4+PiArCXJl bWFpbmRlciA9IDA7DQo+Pj4gKwltZW1jcHkoJnJlbWFpbmRlciwgcGFja2V0LT5oZWFkZXIsIHNp emVvZihwYWNrZXQtPmhlYWRlcikpOw0KPiANCj4gQnkgdGhlIHdheTogSSBkb24ndCB0aGluayBp dCdzIGFuIGlzc3VlIHRoYXQgc2hvdWxkIGJsb2NrIHRoaXMgcGF0Y2gsDQo+IHNpbmNlIGlmIEkn bSByaWdodCwgdGhpcyBmdW5jdGlvbiBhbHJlYWR5IGlzICJicm9rZW4iLCBidXQgaXNuJ3QgdGhp cw0KPiBhY3R1YWxseSBhIGJhZCB3YXkgdG8gaGFuZGxlIGJ5dGUtdG8td29yZCBtYXJzaGFsbGlu Zz8gUGFydGljdWxhcmx5LA0KPiB3ZSdyZSBjb3B5aW5nIGJ5dGVzIGludG8gYSB3b3JkIGluIExF IG9yZGVyaW5nLCBidXQgdGhlbiB3ZSBsYXRlciB3cml0ZQ0KPiB0aGVtIHRvIElPIHJlZ2lzdGVy cyB3aXRoIHdyaXRlbCgpICh3aGljaCBkb2VzIGVuZGlhbiBzd2FwcGluZykuDQo+IA0KPiBTbyBJ IHRoaW5rIHdlIGhhdmUgYW4gZW5kaWFubmVzcyBwcm9ibGVtIG9uIEJFIHN5c3RlbXMuDQo+IA0K PiBPbmUgc29sdXRpb24gd291bGQgYmUgdG8gd3JpdGUgdGhlc2UgdG8gSU8gcmVnaXN0ZXJzIHdp dGggYSBub24tc3dhcHBlZA0KPiB3cml0ZWwoKSAoZS5nLiwgX19yYXdfd3JpdGVsKCk/IGJ1dCB0 aGF0J3Mgbm90IHZlcnkgbmljZS4uLikuIEFub3RoZXINCj4gd291bGQgYmUgdG8gYXZvaWQgbWVt Y3B5LCBhbmQganVzdCByZWFkIHRoaXMgb3V0IGEgd29yZCBhdCBhIHRpbWUgLS0NCj4gdGhhdCB3 b3JrcyBmaW5lIGZvciB0aGUgYWxpZ25lZCBwaWVjZXMsIGJ1dCBub3Qgc28gd2VsbCBmb3IgYW55 DQo+IG5vbi1hbGlnbmVkIGJpdHMgKCdpZiAobGVuIDwgcGxkX2RhdGFfYnl0ZXMpJyBhYm92ZSkg SSB0aGluaz8NCj4gDQo+IFdEWVQ/DQo+IA0KDQpUbyBiZSBob25lc3QsIEkgZG8gbm90IHJlYWxs eSBsaWtlIHRoZSBtZW1jcHkgaGVyZSB0b28gYW5kIEkgYWdyZWUgd2l0aCANCnlvdSByZWdhcmRp bmcgdGhlIEJFIGlzc3VlLg0KDQpNeSBmaXJzdCAic3RtIiBkcml2ZXIgKGllLiBiZWZvcmUgdXNp bmcgdGhpcyAiZnJlZXNjYWxlL3JvY2tjaGlwIiANCmR3LW1pcGktZHNpIGRyaXZlciB3aXRoIHRo ZSBtZW1jcHkpIHVzZWQgdGhlICJleGFjdCIgc2FtZSBjb2RlIGFzIHRoZSANClRlZ3JhIGRzaSB0 ZWdyYV9kc2lfd3JpdGVzbCgpIGZ1bmN0aW9uIHdpdGggdGhlIDIgbG9vcHMuDQoNCmh0dHBzOi8v ZWxpeGlyLmZyZWUtZWxlY3Ryb25zLmNvbS9saW51eC92NC4xNC9zb3VyY2UvZHJpdmVycy9ncHUv ZHJtL3RlZ3JhL2RzaS5jI0wxMjQ4DQoNCklNSE8sIGl0IGlzIGJldHRlciB0aGFuIG1lbWNweS4u Lg0KSSBhZGRlZCB0aGVzZSAzICJkb2N1bWVudGF0aW9uIiBsaW5lcywgbWF5YmUgd2UgbWF5IHJl dXNlIHRoZW0gb3IgDQpzb21ldGhpbmcgc2ltaWxhci4uLg0KDQovKg0KICAqIFdyaXRlIDgtYml0 IHBheWxvYWQgZGF0YSBpbnRvIHRoZSAzMi1iaXQgcGF5bG9hZCBkYXRhIHJlZ2lzdGVyLg0KICAq IGV4OiBwYXlsb2FkIGRhdGEgIjB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYiIHdp bGwgYmVjb21lDQogICogIjB4MDQwMzAyMDEgMHgwMDAwMDYwNSIgMzItYml0IHdyaXRlcw0KICAq Lw0KDQpOb3Qgc3VyZSBpdCBoZWxwcyB0byBmaXggdGhlIEJFIGlzc3VlIGJ1dCB3ZSBtYXkgYWRk IGEgVE9ETyBzdGF0aW5nIHRoYXQgDQoidGhpcyBsb29wIGhhcyBub3QgYmVlbiB0ZXN0ZWQgb24g QkUiLi4uDQoNCldoYXQgaXMgeW91ciBvcGluaW9uPw0KDQpNYW55IHRoYW5rcw0KUGhpbGlwcGUg Oi0pDQoNCg0KPj4+ICsJcmV0dXJuIGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dyaXRlKGRzaSwg cmVtYWluZGVyKTsNCj4+PiAgICB9DQo+Pj4gICAgDQo+Pj4gICAgc3RhdGljIHNzaXplX3QgZHdf bWlwaV9kc2lfaG9zdF90cmFuc2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwNCj4+PiAg ICAJCQkJCSBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpDQo+Pj4gICAgew0KPj4+ICAg IAlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOw0KPj4+ICsJc3Ry dWN0IG1pcGlfZHNpX3BhY2tldCBwYWNrZXQ7DQo+Pj4gICAgCWludCByZXQ7DQo+Pj4gICAgDQo+ Pj4gLQkvKg0KPj4+IC0JICogVE9ETyBkdyBkcnYgaW1wcm92ZW1lbnRzDQo+Pj4gLQkgKiB1c2Ug bWlwaV9kc2lfY3JlYXRlX3BhY2tldCgpIGluc3RlYWQgb2YgYWxsIGZvbGxvd2luZw0KPj4+IC0J ICogZnVuY3Rpb25zIGFuZCBjb2RlIChubyBzd2l0Y2ggY2FzZXMsIG5vDQo+Pj4gLQkgKiBkd19t aXBpX2RzaV9kY3Nfc2hvcnRfd3JpdGUoKSwgb25seSB0aGUgbG9vcCBpbiBsb25nX3dyaXRlLi4u KQ0KPj4+IC0JICogYW5kIHVzZSBwYWNrZXQuaGVhZGVyLi4uDQo+Pj4gLQkgKi8NCj4+PiAtCWR3 X21pcGlfbWVzc2FnZV9jb25maWcoZHNpLCBtc2cpOw0KPj4+IC0NCj4+PiAtCXN3aXRjaCAobXNn LT50eXBlKSB7DQo+Pj4gLQljYXNlIE1JUElfRFNJX0RDU19TSE9SVF9XUklURToNCj4+PiAtCWNh c2UgTUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFX1BBUkFNOg0KPj4+IC0JY2FzZSBNSVBJX0RTSV9T RVRfTUFYSU1VTV9SRVRVUk5fUEFDS0VUX1NJWkU6DQo+Pj4gLQkJcmV0ID0gZHdfbWlwaV9kc2lf ZGNzX3Nob3J0X3dyaXRlKGRzaSwgbXNnKTsNCj4+PiAtCQlicmVhazsNCj4+PiAtCWNhc2UgTUlQ SV9EU0lfRENTX0xPTkdfV1JJVEU6DQo+Pj4gLQkJcmV0ID0gZHdfbWlwaV9kc2lfZGNzX2xvbmdf d3JpdGUoZHNpLCBtc2cpOw0KPj4+IC0JCWJyZWFrOw0KPj4+IC0JZGVmYXVsdDoNCj4+PiAtCQlk ZXZfZXJyKGRzaS0+ZGV2LCAidW5zdXBwb3J0ZWQgbWVzc2FnZSB0eXBlIDB4JTAyeFxuIiwNCj4+ PiAtCQkJbXNnLT50eXBlKTsNCj4+PiAtCQlyZXQgPSAtRUlOVkFMOw0KPj4+ICsJcmV0ID0gbWlw aV9kc2lfY3JlYXRlX3BhY2tldCgmcGFja2V0LCBtc2cpOw0KPj4+ICsJaWYgKHJldCkgew0KPj4+ ICsJCWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBhY2tldDogJWRcbiIsIHJl dCk7DQo+Pj4gKwkJcmV0dXJuIHJldDsNCj4+PiAgICAJfQ0KPj4+ICAgIA0KPj4+IC0JcmV0dXJu IHJldDsNCj4+PiArCWR3X21pcGlfbWVzc2FnZV9jb25maWcoZHNpLCBtc2cpOw0KPj4+ICsNCj4+ PiArCXJldHVybiBkd19taXBpX2RzaV9kY3Nfd3JpdGUoZHNpLCAmcGFja2V0KTsNCj4+PiAgICB9 DQo+Pj4gICAgDQo+Pj4gICAgc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBk d19taXBpX2RzaV9ob3N0X29wcyA9IHsNCj4+Pg0KPj4NCj4+IEkgcGVyZm9ybWVkIHNvbWUgdGVz dHMgdHJhY2luZyBhbGwgRFNJX0dFTl9IRFIgJiBEU0lfR0VOX1BMRF9EQVRBIHJlZw0KPj4gd3Jp dGVzIHdpdGggcGFuZWwvcGFuZWwtb3Jpc2V0ZWNoLW90bTgwMDlhLmMgKHVzaW5nIGxvbmcgZGNz IGNvbW1hbmRzKQ0KPj4gYmVmb3JlIGFuZCBhZnRlciB5b3VyIHBhdGNoIGFuZCB0aGlzIGlzICIx MDAlIHBlcmZlY3QiIQ0KPj4NCj4+IFNvLCBhcGFydCB0aGUgdW4taW1wb3J0YW50ICJkY3MiIGlu IGR3X21pcGlfZHNpX2Rjc193cml0ZSgpIGZ1bmN0aW9uIG5hbWU6DQo+Pg0KPj4gUmV2aWV3ZWQt Ynk6IFBoaWxpcHBlIENvcm51IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+DQo+PiBUZXN0ZWQtYnk6 IFBoaWxpcHBlIENvcm51IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+DQo+Pg0KPj4gVGhpcyBjbGVh bi11cCB3aWxsIGhlbHAgYSBsb3QgdG8gYWRkIHRoZSBkc2kgcmVhZCBmZWF0dXJlIGluIHRoZSBm dXR1cmUuDQo+Pg0KPj4gVmVyeSBnb29kIHBhdGNoIEJyaWFuIGFuZCBiaWcgInRoYW5rIHlvdSIg IQ0KPiANCj4gVGhhbmtzIGZvciB0aGUgcmV2aWV3IGFuZCB0ZXN0ISBJJ2xsIGxpa2VseSBzZW5k IGEgdjIgd2l0aCBvbmx5IHRoZQ0KPiBuYW1pbmcgY2hhbmdlICsgeW91ciB0YWdzLCBhbmQgSSds bCBzZWUgYWJvdXQgd2hhdCBkbyBhYm91dCB0aGUNCj4gZW5kaWFubmVzcyBpc3N1ZXMgSSBub3Rp Y2VkIGFzIGEgZm9sbG93LXVwLg0KPiANCj4gQnJpYW4NCj4g