From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 24/60] drm/panel: Add driver for the Toppology TD043MTEA1 panel Date: Thu, 8 Aug 2019 18:54:54 +0300 Message-ID: <20190808155454.GS6055@pendragon.ideasonboard.com> References: <20190707180852.5512-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-21-laurent.pinchart@ideasonboard.com> <20190710130917.GA11170@ravnborg.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by gabe.freedesktop.org (Postfix) with ESMTPS id D9DA96E88A for ; Thu, 8 Aug 2019 15:54:58 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190710130917.GA11170@ravnborg.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sam Ravnborg Cc: Maxime Ripard , Sebastian Reichel , dri-devel@lists.freedesktop.org, Tomi Valkeinen , Thierry Reding , Sean Paul List-Id: dri-devel@lists.freedesktop.org SGkgU2FtLAoKT24gV2VkLCBKdWwgMTAsIDIwMTkgYXQgMDM6MDk6MTdQTSArMDIwMCwgU2FtIFJh dm5ib3JnIHdyb3RlOgo+IEhpIExhdXJlbnQuCj4gCj4gSSBoYWQgYXNzdW1lZCB0aGlzIGRyaXZl ciB3b3VsZCBsb29rIGxpa2UgdGhlIG90aGVyIFRvcG9sb2d5IGRyaXZlciwgYnV0Cj4gdGhleSBk aWZmZXIgYSBsb3QuIFNvIGl0IG1ha2VzIHNlbnNlIHRvIGhhdmUgZGlmZmVyZW50IGRyaXZlcnMu Cj4gCj4gVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXNwZW5kL3Jlc3VtZS4KPiBCdXQgdGhlIGNv cnJlY3Qgd2F5IHdvdWxkIGJlIHRvIGltcGxtZW50IHByZXBhcmUvdW5wcmVwYXJlLgoKQXMgZm9y IHRoZSBORUMgcGFuZWwsIEknbSBub3Qgb3Bwb3NlZCB0byB0aGlzIGNoYW5nZSwgYnV0IEkgaGF2 ZSBubwpoYXJkd2FyZSB0byB0ZXN0IGl0LCBzbyBJIHdvdWxkIHByZWZlciBpZiBpdCB3YXMgbGF0 ZXIgZG9uZSBvbiB0b3AuCgo+IFRoZSBwb3dlcl9vbigpLCBwb3dlcl9vZmYoKSBmdW5jdGlvbnMg d291bGQgdGhlbiBiZSBlbWJlZGRlZCBpbgo+IHRoZSBwcmVwYXJlKCksIHVucHJlcGFyZSgpIGZ1 bmN0aW9ucyBhcyB0aGVyZSB3b3VsZCBiZSBvbmx5IG9uZSB1c2VyLgo+IAo+IFNlZSBhZGRpdGlv bmFsIGNvbW1lbnRzIGluIHRoZSBmb2xsb3dpbmcuCj4gCj4gT24gU3VuLCBKdWwgMDcsIDIwMTkg YXQgMDk6MTk6MDFQTSArMDMwMCwgTGF1cmVudCBQaW5jaGFydCB3cm90ZToKPiA+IFRoaXMgcGFu ZWwgaXMgdXNlZCBvbiB0aGUgT01BUDMgUGFuZG9yYS4KPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTog TGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgo+ID4g LS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAgICAgICAgICAgICAgfCAg IDcgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgIHwg ICAxICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHBvLXRkMDQzbXRlYTEuYyB8 IDUxMCArKysrKysrKysrKysrKysrKysrCj4gPiAgMyBmaWxlcyBjaGFuZ2VkLCA1MTggaW5zZXJ0 aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFu ZWwtdHBvLXRkMDQzbXRlYTEuYwo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+ID4gaW5kZXgg YjcwOTlkMjExMDYxLi44ZjM2NjBjNzMwNDQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vcGFuZWwvS2NvbmZpZwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcK PiA+IEBAIC0zMTIsNiArMzEyLDEzIEBAIGNvbmZpZyBEUk1fUEFORUxfVFBPX1REMDI4VFRFQzEK PiA+ICAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBUUE8g VEQwMjhUVEVDMSA0ODB4NjQwCj4gPiAgCSAgMi44IiBwYW5lbC4KPiA+ICAKPiA+ICtjb25maWcg RFJNX1BBTkVMX1RQT19URDA0M01URUExCj4gPiArCXRyaXN0YXRlICJUUE8gVEQwNDNNVEVBMSBw YW5lbCBkcml2ZXIiCj4KPiBTcGVsbCBvdXQgVFBPPwo+Cj4gPiArCWRlcGVuZHMgb24gR1BJT0xJ QiAmJiBPRiAmJiBSRUdVTEFUT1IgJiYgU1BJCj4gPiArCWhlbHAKPiA+ICsJICBTYXkgWSBoZXJl IGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBUUE8gVEQwNDNNVEVBMSA4MDB4NDgw Cj4gPiArCSAgNC4zIiBwYW5lbC4KPgo+IE1heWJlIHRlbGwgaXQgaXMgdXNlZCBvbiBPTUFQMyBQ YW5kb3JhCj4gCj4gPiArCj4gPiAgY29uZmlnIERSTV9QQU5FTF9UUE9fVFBHMTEwCj4gPiAgCXRy aXN0YXRlICJUUE8gVFBHIDgwMHg0MDAgcGFuZWwiCj4gPiAgCWRlcGVuZHMgb24gT0YgJiYgU1BJ ICYmIEdQSU9MSUIKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwt dHBvLXRkMDQzbXRlYTEuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cG8tdGQwNDNt dGVhMS5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi42 YjE3ZTQ3NTgyYjgKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9w YW5lbC9wYW5lbC10cG8tdGQwNDNtdGVhMS5jCj4gPiBAQCAtMCwwICsxLDUxMCBAQAo+ID4gKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwo+Cj4gSnVzdCBub3RpY2VkLCB0aGlz IGlzIGEgZGlmZmVyZW50IGxpY2Vuc2UgdGhhbiB0aGUgb3RoZXJzLgo+IEJ1dCBJIGd1ZXNzIHRo aXMgY29tZXMgZnJvbSB0aGUgb3JpZ2luYWwgZmlsZS4KCkNvcnJlY3QuCgoKPiA+ICsvKgo+ID4g KyAqIFRvcHBvbG9neSBURDA0M01URUExIFBhbmVsIERyaXZlcgo+IAo+IFNvIEkgYWN0dWFsbHkg YXNrZWQgR29vZ2xlIHRoaXMgdGltZSAtIHRoZSBjb3JyZWN0IHNwZWxsaW5nIGlzCj4gIlRvcHBv bHkiLgo+IFNlZTogaHR0cDovL3d3dy5pbm5vbHV4LmNvbS9QYWdlcy9FTi9BYm91dFVzL0NvbXBh bnlfT3ZlcnZpZXdfRU4uaHRtbAoKRml4ZWQgKGFuZCBpbiB0aGUgcHJldmlvdXMgcGF0Y2ggdG9v KS4KCj4gPiArc3RydWN0IHRkMDQzbXRlYTFfZGV2aWNlIHsKPiA+ICsJc3RydWN0IGRybV9wYW5l bCBwYW5lbDsKPiA+ICsKPiA+ICsJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKPiA+ICsJc3RydWN0 IHJlZ3VsYXRvciAqdmNjX3JlZzsKPiA+ICsJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsK PiA+ICsKPiA+ICsJdW5zaWduZWQgaW50IG1vZGU7Cj4gPiArCXUxNiBnYW1tYVsxMl07Cj4gPiAr CWJvb2wgdm1pcnJvcjsKPiA+ICsJYm9vbCBwb3dlcmVkX29uOwo+IAo+IFRoaXMgZmxhZyB3aWxs IG5vdCBiZSBuZWVkZWQgd2hlbiBwcmVwYXJlKCksIHVucHJlcGFyZSgpIGFyZSB1c2VkLgo+IAo+ ID4gKwlib29sIHNwaV9zdXNwZW5kZWQ7Cj4gPiArCWJvb2wgcG93ZXJfb25fcmVzdW1lOwo+ID4g K307Cj4gPiArCj4gPiArCj4gCj4gPiArc3RhdGljIHZvaWQgdGQwNDNtdGVhMV93cml0ZV9nYW1t YShzdHJ1Y3QgdGQwNDNtdGVhMV9kZXZpY2UgKmxjZCkKPiA+ICt7Cj4gPiArCWNvbnN0IHUxNiAq Z2FtbWEgPSBsY2QtPmdhbW1hOwo+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ICsJdTggdmFsOwo+ ID4gKwo+ID4gKwkvKiBnYW1tYSBiaXRzIFs5OjhdICovCj4gPiArCWZvciAodmFsID0gaSA9IDA7 IGkgPCA0OyBpKyspCj4gPiArCQl2YWwgfD0gKGdhbW1hW2ldICYgMHgzMDApID4+ICgoaSArIDEp ICogMik7Cj4gPiArCXRkMDQzbXRlYTFfd3JpdGUobGNkLCAweDExLCB2YWwpOwo+ID4gKwo+ID4g Kwlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgNDsgaSsrKQo+ID4gKwkJdmFsIHw9IChnYW1tYVtpKzRd ICYgMHgzMDApID4+ICgoaSArIDEpICogMik7Cj4gCj4gU3BhY2VzIGFyb3VuZCBvcGVyYXRvcnMu Cj4gCj4gPiArCXRkMDQzbXRlYTFfd3JpdGUobGNkLCAweDEyLCB2YWwpOwo+ID4gKwo+ID4gKwlm b3IgKHZhbCA9IGkgPSAwOyBpIDwgNDsgaSsrKQo+ID4gKwkJdmFsIHw9IChnYW1tYVtpKzhdICYg MHgzMDApID4+ICgoaSArIDEpICogMik7Cj4gCj4gU2FtZSBoZXJlLgo+IAo+ID4gKwl0ZDA0M210 ZWExX3dyaXRlKGxjZCwgMHgxMywgdmFsKTsKPiA+ICsKPiA+ICsJLyogZ2FtbWEgYml0cyBbNzow XSAqLwo+ID4gKwlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgMTI7IGkrKykKPiA+ICsJCXRkMDQzbXRl YTFfd3JpdGUobGNkLCAweDE0ICsgaSwgZ2FtbWFbaV0gJiAweGZmKTsKPiA+ICt9Cj4gCj4gVGhp cyBmdW5jdGlvbiAodGQwNDNtdGVhMV93cml0ZV9nYW1tYSgpKSBmYWlscyB0byBjaGVjayB0aGUg cmVzdWx0IG9mCj4gdGhlIHdyaXRlIG9wZXJhdGlvbnMuIE1heWJlIG9uIHB1cnBvc2UuIEJ1dCBs b29rcyBzdHJhbmdlIHdlIGRvIGl0IGluCj4gc29tZSBwbGFjZXMgYnV0IG5vdCBhbGwuCgpUaGUg cmV0dXJuIHZhbHVlIGlzIG9ubHkgY2hlY2tlZCBpbiB0ZDA0M210ZWExX3dyaXRlX21pcnJvcigp LiBJIHRoaW5rCnRoaXMgc2hvdWxkIGJlIGZpeGVkIGV2ZW50dWFsbHksIGJ1dCBhZ2Fpbiwgbm8g aGFyZHdhcmUgdG8gdGVzdCA6LSggSSdtCnRoaXMgYSBiaXQgcmVsdWN0YW50IHRvIG1ha2UgaW50 cnVzaXZlIGNoYW5nZXMuCgo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgdGQwNDNtdGVhMV93cml0ZV9t aXJyb3Ioc3RydWN0IHRkMDQzbXRlYTFfZGV2aWNlICpsY2QpCj4gPiArewo+ID4gKwl1OCByZWc0 ID0gVFBPX1IwNF9ORkxJUF9IIHwgVFBPX1IwNF9ORkxJUF9WIHwKPiA+ICsJCVRQT19SMDRfQ1Bf Q0xLX0ZSRVFfMUggfCBUUE9fUjA0X1ZHTF9GUkVRXzFIOwo+ID4gKwlpZiAobGNkLT52bWlycm9y KQo+ID4gKwkJcmVnNCAmPSB+VFBPX1IwNF9ORkxJUF9WOwo+ID4gKwo+ID4gKwlyZXR1cm4gdGQw NDNtdGVhMV93cml0ZShsY2QsIDQsIHJlZzQpOwo+ID4gK30KPiAKPiBBZGQgYToKPiAjZGVmaW5l IFRQT19SNAk0Cj4gQW5kIHRoZW4gdXNlIGl0IGhlcmU/Cj4gTG9va3MgYmFkIHRoYXQgdGhlIHJl Z2lzdGVyIG51bWJlciBpcyBoYXJkY29kZWQuCj4gCj4gU2FtZSBnb2VzIGZvciBzZXZlcmFsIG90 aGVyIGNhbGxzIHRvIHRoZSB3cml0ZSgpIGZ1bmN0aW9uLgoKV2l0aG91dCBhbnkgaWRlYSBvZiB3 aGF0IHRob3NlIHJlZ2lzdGVycyBhcmUgZm9yIChhbmQgd2l0aG91dCB0aGUgcGFuZWwKZG9jdW1l bnRhdGlvbiksIEkgdGhpbmsgVFBPX1I0IGlzIGFjdHVhbGx5IGxlc3MgcmVhZGFibGUgdGhhbiA0 LgoKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHRkMDQzbXRlYTFfcG93ZXJfb24oc3RydWN0IHRkMDQz bXRlYTFfZGV2aWNlICpsY2QpCj4gPiArewo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlpZiAo bGNkLT5wb3dlcmVkX29uKQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCXJldCA9IHJlZ3Vs YXRvcl9lbmFibGUobGNkLT52Y2NfcmVnKTsKPiA+ICsJaWYgKHJldCA8IDApCj4gPiArCQlyZXR1 cm4gcmV0Owo+ID4gKwo+ID4gKwkvKiBXYWl0IGZvciB0aGUgcGFuZWwgdG8gc3RhYmlsaXplLiAq Lwo+ID4gKwltc2xlZXAoMTYwKTsKPiA+ICsKPiA+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGxjZC0+cmVz ZXRfZ3BpbywgMCk7Cj4gPiArCj4gPiArCXRkMDQzbXRlYTFfd3JpdGUobGNkLCAyLCBUUE9fUjAy X01PREUobGNkLT5tb2RlKSB8IFRQT19SMDJfTkNMS19SSVNJTkcpOwo+ID4gKwl0ZDA0M210ZWEx X3dyaXRlKGxjZCwgMywgVFBPX1IwM19WQUxfTk9STUFMKTsKPiA+ICsJdGQwNDNtdGVhMV93cml0 ZShsY2QsIDB4MjAsIDB4ZjApOwo+ID4gKwl0ZDA0M210ZWExX3dyaXRlKGxjZCwgMHgyMSwgMHhm MCk7Cj4gPiArCXRkMDQzbXRlYTFfd3JpdGVfbWlycm9yKGxjZCk7Cj4gPiArCXRkMDQzbXRlYTFf d3JpdGVfZ2FtbWEobGNkKTsKPiA+ICsKPiA+ICsJbGNkLT5wb3dlcmVkX29uID0gdHJ1ZTsKPiA+ ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+IAo+IFRoZSBhYm92ZSBzaG91bGQgYmUgcGFydCBv ZiBwcmVwYXJlKCkKPiAKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB0ZDA0M210ZWExX3Bvd2VyX29m ZihzdHJ1Y3QgdGQwNDNtdGVhMV9kZXZpY2UgKmxjZCkKPiA+ICt7Cj4gPiArCWlmICghbGNkLT5w b3dlcmVkX29uKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwl0ZDA0M210ZWExX3dyaXRlKGxj ZCwgMywgVFBPX1IwM19WQUxfU1RBTkRCWSB8IFRQT19SMDNfRU5fUFdNKTsKPiA+ICsKPiA+ICsJ Z3Bpb2Rfc2V0X3ZhbHVlKGxjZC0+cmVzZXRfZ3BpbywgMSk7Cj4gPiArCj4gPiArCS8qIHdhaXQg Zm9yIGF0IGxlYXN0IDIgdnN5bmNzIGJlZm9yZSBjdXR0aW5nIG9mZiBwb3dlciAqLwo+ID4gKwlt c2xlZXAoNTApOwo+ID4gKwo+ID4gKwl0ZDA0M210ZWExX3dyaXRlKGxjZCwgMywgVFBPX1IwM19W QUxfU1RBTkRCWSk7Cj4gPiArCj4gPiArCXJlZ3VsYXRvcl9kaXNhYmxlKGxjZC0+dmNjX3JlZyk7 Cj4gPiArCj4gPiArCWxjZC0+cG93ZXJlZF9vbiA9IGZhbHNlOwo+ID4gK30KPiAKPiBUaGUgYWJv dmUgc2hvdWxkIGJlIHBhcnQgb2YgdW5wcmVwYXJlKCkKPiAKPiA+ICsKPiA+ICsvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQo+ID4gKyAqIHN5c2ZzCj4gPiArICovCj4gPiArCj4gPiArc3RhdGljIHNz aXplX3Qgdm1pcnJvcl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgKmF0dHIsCj4gPiArCQkJICAgIGNoYXIgKmJ1ZikKPiA+ICt7Cj4gPiArCXN0cnVjdCB0 ZDA0M210ZWExX2RldmljZSAqbGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gPiArCj4gPiAr CXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBsY2QtPnZtaXJyb3IpOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVfdCB2bWlycm9yX3N0b3JlKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gPiArCQkJICAgICBjb25z dCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKPiA+ICt7Cj4gPiArCXN0cnVjdCB0ZDA0M210ZWEx X2RldmljZSAqbGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gPiArCWludCB2YWw7Cj4gPiAr CWludCByZXQ7Cj4gPiArCj4gPiArCXJldCA9IGtzdHJ0b2ludChidWYsIDAsICZ2YWwpOwo+ID4g KwlpZiAocmV0IDwgMCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCWxjZC0+dm1pcnJv ciA9ICEhdmFsOwo+ID4gKwo+ID4gKwlyZXQgPSB0ZDA0M210ZWExX3dyaXRlX21pcnJvcihsY2Qp Owo+ID4gKwlpZiAocmV0IDwgMCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCXJldHVy biBjb3VudDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHNzaXplX3QgbW9kZV9zaG93KHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gPiArCQkJIGNo YXIgKmJ1ZikKPiA+ICt7Cj4gPiArCXN0cnVjdCB0ZDA0M210ZWExX2RldmljZSAqbGNkID0gZGV2 X2dldF9kcnZkYXRhKGRldik7Cj4gPiArCj4gPiArCXJldHVybiBzbnByaW50ZihidWYsIFBBR0Vf U0laRSwgIiVkXG4iLCBsY2QtPm1vZGUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVf dCBtb2RlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmF0dHIsCj4gPiArCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKPiA+ICt7Cj4g PiArCXN0cnVjdCB0ZDA0M210ZWExX2RldmljZSAqbGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7 Cj4gPiArCWxvbmcgdmFsOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlyZXQgPSBrc3RydG9s KGJ1ZiwgMCwgJnZhbCk7Cj4gPiArCWlmIChyZXQgIT0gMCB8fCB2YWwgJiB+NykKPiA+ICsJCXJl dHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gKwlsY2QtPm1vZGUgPSB2YWw7Cj4gPiArCj4gPiArCXZh bCB8PSBUUE9fUjAyX05DTEtfUklTSU5HOwo+ID4gKwl0ZDA0M210ZWExX3dyaXRlKGxjZCwgMiwg dmFsKTsKPiA+ICsKPiA+ICsJcmV0dXJuIGNvdW50Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg c3NpemVfdCBnYW1tYV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgKmF0dHIsCj4gPiArCQkJICBjaGFyICpidWYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgdGQw NDNtdGVhMV9kZXZpY2UgKmxjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwlzc2l6ZV90 IGxlbiA9IDA7Cj4gPiArCXVuc2lnbmVkIGludCBpOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4g Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsY2QtPmdhbW1hKTsgaSsrKSB7Cj4gPiArCQly ZXQgPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIiV1ICIsCj4gPiArCQkJ CWxjZC0+Z2FtbWFbaV0pOwo+ID4gKwkJaWYgKHJldCA8IDApCj4gPiArCQkJcmV0dXJuIHJldDsK PiA+ICsJCWxlbiArPSByZXQ7Cj4gPiArCX0KPiA+ICsJYnVmW2xlbiAtIDFdID0gJ1xuJzsKPiA+ ICsKPiA+ICsJcmV0dXJuIGxlbjsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHNzaXplX3QgZ2Ft bWFfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0 ciwKPiA+ICsJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKPiA+ICt7Cj4gPiAr CXN0cnVjdCB0ZDA0M210ZWExX2RldmljZSAqbGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4g PiArCXVuc2lnbmVkIGludCBnWzEyXTsKPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiArCWludCBy ZXQ7Cj4gPiArCj4gPiArCXJldCA9IHNzY2FuZihidWYsICIldSAldSAldSAldSAldSAldSAldSAl dSAldSAldSAldSAldSIsCj4gPiArCQkJJmdbMF0sICZnWzFdLCAmZ1syXSwgJmdbM10sICZnWzRd LCAmZ1s1XSwKPiA+ICsJCQkmZ1s2XSwgJmdbN10sICZnWzhdLCAmZ1s5XSwgJmdbMTBdLCAmZ1sx MV0pOwo+ID4gKwlpZiAocmV0ICE9IDEyKQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4g PiArCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKQo+ID4gKwkJbGNkLT5nYW1tYVtpXSA9IGdbaV07 Cj4gPiArCj4gPiArCXRkMDQzbXRlYTFfd3JpdGVfZ2FtbWEobGNkKTsKPiA+ICsKPiA+ICsJcmV0 dXJuIGNvdW50Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcodm1pcnJv cik7Cj4gPiArc3RhdGljIERFVklDRV9BVFRSX1JXKG1vZGUpOwo+ID4gK3N0YXRpYyBERVZJQ0Vf QVRUUl9SVyhnYW1tYSk7Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRkMDQz bXRlYTFfYXR0cnNbXSA9IHsKPiA+ICsJJmRldl9hdHRyX3ZtaXJyb3IuYXR0ciwKPiA+ICsJJmRl dl9hdHRyX21vZGUuYXR0ciwKPiA+ICsJJmRldl9hdHRyX2dhbW1hLmF0dHIsCj4gPiArCU5VTEws Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0 ZDA0M210ZWExX2F0dHJfZ3JvdXAgPSB7Cj4gPiArCS5hdHRycyA9IHRkMDQzbXRlYTFfYXR0cnMs Cj4gPiArfTsKPiAKPiBJIHNlZSB3aGF0IGlzIGRvbmUgd2l0aCBtaXJyb3IsIG1vZGUgYW5kIGdh bW1hIC0gYnV0IHRoZSBxdWVzdGlvbiBpcyBpZgo+IHRoZXkgYXJlIHJlYWxseSBuZWVkZWQ/Cj4g QW5kIGlmIG5lZWRlZCwgaXMgaXQgdGhlIHJpZ2h0IHdheSB0byBjb25maWd1cmUgdGhlIHBhbmVs Pwo+IFRoaXMgaXMgbGlrZWx5IHF1ZXN0aW9zbiB0aGF0IGFyZSBub3QgZWFzeSB0byBhbnN3ZXIg ZGVmaW5pdGl2ZSwgc28gYmVzdAo+IHRvIGtlZXAgdGhpcyBhcyBpdCB3YXMgYmVmb3JlLgoKSSdt IGFmcmFpZCBJIGhhdmUgbm8gaWRlYSBob3cgKGFuZCBpZikgdGhvc2UgYXJlIHVzZWQgOi1TCgo+ ID4gKwo+ID4gKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiArICogQnJpZGdlIE9wZXJhdGlv bnMKPiA+ICsgKi8KPiAKPiBQYW5lbCBvcGVyYXRpb25zLCBub3QgYnJpZGdlIG9wZXJhdGlvbnM/ Cj4gCj4gPiArCj4gPiArc3RhdGljIGludCB0ZDA0M210ZWExX2Rpc2FibGUoc3RydWN0IGRybV9w YW5lbCAqcGFuZWwpCj4gPiArewo+ID4gKwlzdHJ1Y3QgdGQwNDNtdGVhMV9kZXZpY2UgKmxjZCA9 IHRvX3RkMDQzbXRlYTFfZGV2aWNlKHBhbmVsKTsKPiA+ICsKPiA+ICsJaWYgKCFsY2QtPnNwaV9z dXNwZW5kZWQpCj4gPiArCQl0ZDA0M210ZWExX3Bvd2VyX29mZihsY2QpOwo+ID4gKwo+ID4gKwly ZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB0ZDA0M210ZWExX2VuYWJsZShz dHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPiA+ICt7Cj4gPiArCXN0cnVjdCB0ZDA0M210ZWExX2Rl dmljZSAqbGNkID0gdG9fdGQwNDNtdGVhMV9kZXZpY2UocGFuZWwpOwo+ID4gKwlpbnQgcmV0Owo+ ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBJZiB3ZSBhcmUgcmVzdW1pbmcgZnJvbSBzeXN0ZW0gc3Vz cGVuZCwgU1BJIG1pZ2h0IG5vdCBiZSBlbmFibGVkCj4gPiArCSAqIHlldCwgc28gd2UnbGwgcHJv Z3JhbSB0aGUgTENEIGZyb20gU1BJIFBNIHJlc3VtZSBjYWxsYmFjay4KPiA+ICsJICovCj4gPiAr CWlmIChsY2QtPnNwaV9zdXNwZW5kZWQpCj4gPiArCQlyZXR1cm4gMDsKPiAKPiBJIGRvIG5vdCBy ZWNhbGwgdGhpcyBpcyBuZWVkZWQgaW4gb3RoZXIgcGFuZWwgZHJpdmVycywgc28gbG9vayBhdCB3 aGF0Cj4gb3RoZXIgc3BpIGJhc2VkIHBhbmVscyBkbyBoZXJlLgo+IEkgdGhpbmsgdGhpcyBpcyBz b21ldGhpbmcgdGhhdCB0b2RheSBpcyBub3QgcmVxdWlyZWQuCgpUaGUgcHJvYmxlbSBoZXJlIGlz IHRoYXQgdGhlIGRpc3BsYXkgY29udHJvbGxlciBtYXkgYmUgcmVzdW1lZCBiZWZvcmUKdGhlIFNQ SSBidXMuIEhhcyB0aGF0IGJlZW4gc29sdmVkIHNvbWV3aGVyZSBpbiBjb3JlIGNvZGUgPwoKPiA+ ICsKPiA+ICsJcmV0ID0gdGQwNDNtdGVhMV9wb3dlcl9vbihsY2QpOwo+ID4gKwlpZiAocmV0KSB7 Cj4gPiArCQlkZXZfZXJyKCZsY2QtPnNwaS0+ZGV2LCAiJXM6IHBvd2VyIG9uIGZhaWxlZCAoJWQp XG4iLAo+ID4gKwkJCV9fZnVuY19fLCByZXQpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlIHRkMDQzbXRlYTFfbW9kZSA9IHsKPiA+ICsJLmNsb2NrID0gMzYw MDAsCj4gPiArCS5oZGlzcGxheSA9IDgwMCwKPiA+ICsJLmhzeW5jX3N0YXJ0ID0gODAwICsgNjgs Cj4gPiArCS5oc3luY19lbmQgPSA4MDAgKyA2OCArIDEsCj4gPiArCS5odG90YWwgPSA4MDAgKyA2 OCArIDEgKyAyMTQsCj4gPiArCS52ZGlzcGxheSA9IDQ4MCwKPiA+ICsJLnZzeW5jX3N0YXJ0ID0g NDgwICsgMzksCj4gPiArCS52c3luY19lbmQgPSA0ODAgKyAzOSArIDEsCj4gPiArCS52dG90YWwg PSA0ODAgKyAzOSArIDEgKyAzNCwKPiA+ICsJLnZyZWZyZXNoID0gNjAsCj4gPiArCS50eXBlID0g RFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCwKPiA+ICsJLmZs YWdzID0gRFJNX01PREVfRkxBR19OSFNZTkMgfCBEUk1fTU9ERV9GTEFHX05WU1lOQywKPiA+ICt9 Owo+IAo+IGhlaWdodF9tbSwgd2lkdGhfbW0KPiAKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHRkMDQz bXRlYTFfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IHBhbmVsLT5jb25uZWN0b3I7Cj4gPiArCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwo+ID4gKwo+ID4gKwltb2RlID0gZHJtX21vZGVf ZHVwbGljYXRlKHBhbmVsLT5kcm0sICZ0ZDA0M210ZWExX21vZGUpOwo+ID4gKwlpZiAoIW1vZGUp Cj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJZHJtX21vZGVfc2V0X25hbWUobW9k ZSk7Cj4gPiArCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKPiA+ICsKPiA+ ICsJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSA5NDsKPiA+ICsJY29ubmVjdG9y LT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tID0gNTY7Cj4gPiArCS8qCj4gPiArCSAqIEZJWE1FOiBB Y2NvcmRpbmcgdG8gdGhlIGRhdGFzaGVldCBzeW5jIHNpZ25hbHMgYXJlIHNhbXBsZWQgb24gdGhl Cj4gPiArCSAqIHJpc2luZyBlZGdlIG9mIHRoZSBjbG9jaywgYnV0IHRoZSBjb2RlIHJ1bm5pbmcg b24gdGhlIE9NQVAzIFBhbmRvcmEKPiA+ICsJICogaW5kaWNhdGVzIHNhbXBsaW5nIG9uIHRoZSBm YWxsaW5nIGVkZ2UuIFRoaXMgc2hvdWxkIGJlIHRlc3RlZCBvbiBhCj4gPiArCSAqIHJlYWwgZGV2 aWNlLgo+ID4gKwkgKi8KPiA+ICsJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uYnVzX2ZsYWdzID0g RFJNX0JVU19GTEFHX0RFX0hJR0gKPiA+ICsJCQkJCSAgfCBEUk1fQlVTX0ZMQUdfU1lOQ19TQU1Q TEVfTkVHRURHRQo+ID4gKwkJCQkJICB8IERSTV9CVVNfRkxBR19QSVhEQVRBX1NBTVBMRV9QT1NF REdFOwo+ID4gKwo+ID4gKwlyZXR1cm4gMTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fcGFuZWxfZnVuY3MgdGQwNDNtdGVhMV9mdW5jcyA9IHsKPiA+ICsJLmRpc2Fi bGUgPSB0ZDA0M210ZWExX2Rpc2FibGUsCj4gPiArCS5lbmFibGUgPSB0ZDA0M210ZWExX2VuYWJs ZSwKPiA+ICsJLmdldF9tb2RlcyA9IHRkMDQzbXRlYTFfZ2V0X21vZGVzLAo+ID4gK307Cj4gPiAr Cj4gPiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICsgKiBQb3dlciBNYW5hZ2VtZW50LCBQ cm9iZSBhbmQgUmVtb3ZlCj4gPiArICovCj4gPiArCj4gPiArI2lmZGVmIENPTkZJR19QTV9TTEVF UAo+ID4gK3N0YXRpYyBpbnQgdGQwNDNtdGVhMV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikK PiA+ICt7Cj4gPiArCXN0cnVjdCB0ZDA0M210ZWExX2RldmljZSAqbGNkID0gZGV2X2dldF9kcnZk YXRhKGRldik7Cj4gPiArCj4gPiArCWlmIChsY2QtPnBvd2VyZWRfb24pIHsKPiA+ICsJCXRkMDQz bXRlYTFfcG93ZXJfb2ZmKGxjZCk7Cj4gPiArCQlsY2QtPnBvd2VyZWRfb24gPSB0cnVlOwo+ID4g Kwl9Cj4gPiArCj4gPiArCWxjZC0+c3BpX3N1c3BlbmRlZCA9IHRydWU7Cj4gPiArCj4gPiArCXJl dHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHRkMDQzbXRlYTFfcmVzdW1lKHN0 cnVjdCBkZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArCXN0cnVjdCB0ZDA0M210ZWExX2RldmljZSAq bGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCWxj ZC0+c3BpX3N1c3BlbmRlZCA9IGZhbHNlOwo+ID4gKwo+ID4gKwlpZiAobGNkLT5wb3dlcmVkX29u KSB7Cj4gPiArCQlsY2QtPnBvd2VyZWRfb24gPSBmYWxzZTsKPiA+ICsJCXJldCA9IHRkMDQzbXRl YTFfcG93ZXJfb24obGNkKTsKPiA+ICsJCWlmIChyZXQpCj4gPiArCQkJcmV0dXJuIHJldDsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIFNJTVBM RV9ERVZfUE1fT1BTKHRkMDQzbXRlYTFfcG1fb3BzLCB0ZDA0M210ZWExX3N1c3BlbmQsCj4gPiAr CQkJIHRkMDQzbXRlYTFfcmVzdW1lKTsKPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICtzdGF0aWMgaW50 IHRkMDQzbXRlYTFfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPiA+ICt7Cj4gPiArCXN0 cnVjdCB0ZDA0M210ZWExX2RldmljZSAqbGNkOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwls Y2QgPSBkZXZtX2t6YWxsb2MoJnNwaS0+ZGV2LCBzaXplb2YoKmxjZCksIEdGUF9LRVJORUwpOwo+ ID4gKwlpZiAobGNkID09IE5VTEwpCj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJ c3BpX3NldF9kcnZkYXRhKHNwaSwgbGNkKTsKPiA+ICsJbGNkLT5zcGkgPSBzcGk7Cj4gPiArCWxj ZC0+bW9kZSA9IFRQT19SMDJfTU9ERV84MDB4NDgwOwo+ID4gKwltZW1jcHkobGNkLT5nYW1tYSwg dGQwNDNtdGVhMV9kZWZfZ2FtbWEsIHNpemVvZihsY2QtPmdhbW1hKSk7Cj4gPiArCj4gPiArCWxj ZC0+dmNjX3JlZyA9IGRldm1fcmVndWxhdG9yX2dldCgmc3BpLT5kZXYsICJ2Y2MiKTsKPiA+ICsJ aWYgKElTX0VSUihsY2QtPnZjY19yZWcpKSB7Cj4gPiArCQlkZXZfZXJyKCZzcGktPmRldiwgImZh aWxlZCB0byBnZXQgVkNDIHJlZ3VsYXRvclxuIik7Cj4gPiArCQlyZXR1cm4gUFRSX0VSUihsY2Qt PnZjY19yZWcpOwo+ID4gKwl9Cj4gPiArCj4gPiArCWxjZC0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bp b2RfZ2V0KCZzcGktPmRldiwgInJlc2V0IiwgR1BJT0RfT1VUX0hJR0gpOwo+ID4gKwlpZiAoSVNf RVJSKGxjZC0+cmVzZXRfZ3BpbykpIHsKPiA+ICsJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVk IHRvIGdldCByZXNldCBHUElPXG4iKTsKPiA+ICsJCXJldHVybiBQVFJfRVJSKGxjZC0+cmVzZXRf Z3Bpbyk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7Cj4gPiAr CXNwaS0+bW9kZSA9IFNQSV9NT0RFXzA7Cj4gPiArCj4gPiArCXJldCA9IHNwaV9zZXR1cChzcGkp Owo+ID4gKwlpZiAocmV0IDwgMCkgewo+ID4gKwkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQg dG8gc2V0dXAgU1BJOiAlZFxuIiwgcmV0KTsKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZzcGktPmRldi5rb2JqLCAmdGQwNDNt dGVhMV9hdHRyX2dyb3VwKTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCWRldl9lcnIoJnNw aS0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBmaWxlc1xuIik7Cj4gPiArCQlyZXR1cm4g cmV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCWRybV9wYW5lbF9pbml0KCZsY2QtPnBhbmVsKTsKPiA+ ICsJbGNkLT5wYW5lbC5kZXYgPSAmbGNkLT5zcGktPmRldjsKPiA+ICsJbGNkLT5wYW5lbC5mdW5j cyA9ICZ0ZDA0M210ZWExX2Z1bmNzOwo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fcGFuZWxfYWRkKCZs Y2QtPnBhbmVsKTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCXN5c2ZzX3JlbW92ZV9ncm91 cCgmc3BpLT5kZXYua29iaiwgJnRkMDQzbXRlYTFfYXR0cl9ncm91cCk7Cj4gPiArCQlyZXR1cm4g cmV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IHRkMDQzbXRlYTFfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCj4gPiArewo+ ID4gKwlzdHJ1Y3QgdGQwNDNtdGVhMV9kZXZpY2UgKmxjZCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkp Owo+ID4gKwo+ID4gKwlkcm1fcGFuZWxfcmVtb3ZlKCZsY2QtPnBhbmVsKTsKPiA+ICsJdGQwNDNt dGVhMV9kaXNhYmxlKCZsY2QtPnBhbmVsKTsKPiA+ICsKPiA+ICsJc3lzZnNfcmVtb3ZlX2dyb3Vw KCZzcGktPmRldi5rb2JqLCAmdGQwNDNtdGVhMV9hdHRyX2dyb3VwKTsKPiA+ICsKPiA+ICsJcmV0 dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IHRkMDQzbXRlYTFfb2ZfbWF0Y2hbXSA9IHsKPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJ0cG8sdGQw NDNtdGVhMSIsIH0sCj4gPiArCXt9LAo+IAo+IHsgLyogc2VudGluZWwgKi8gfSwKCi0tIApSZWdh cmRzLAoKTGF1cmVudCBQaW5jaGFydApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWw=