From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: Re: [PATCH v2 3/4] drm/i915/icl: Fix HPD handling for TypeC legacy ports Date: Mon, 17 Dec 2018 12:49:17 -0800 Message-ID: <20181217204917.GE54091@intel.com> References: <20181214182703.18865-1-imre.deak@intel.com> <20181214182703.18865-4-imre.deak@intel.com> <20181217180540.GC53648@intel.com> <20181217193505.GA23297@ideak-desk.fi.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 489D96E6E0 for ; Mon, 17 Dec 2018 20:49:18 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20181217193505.GA23297@ideak-desk.fi.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Imre Deak Cc: intel-gfx@lists.freedesktop.org, Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBEZWMgMTcsIDIwMTggYXQgMDk6MzU6MDVQTSArMDIwMCwgSW1yZSBEZWFrIHdyb3Rl Ogo+IE9uIE1vbiwgRGVjIDE3LCAyMDE4IGF0IDEwOjA1OjQwQU0gLTA4MDAsIFJvZHJpZ28gVml2 aSB3cm90ZToKPiA+IE9uIEZyaSwgRGVjIDE0LCAyMDE4IGF0IDA4OjI3OjAyUE0gKzAyMDAsIElt cmUgRGVhayB3cm90ZToKPiA+ID4gQXRtIEhQRCBkaXNjb25uZWN0IGV2ZW50cyBvbiBUeXBlQyBw b3J0cyB3aWxsIGJyZWFrIHRoaW5ncywgc2luY2Ugd2UnbGwKPiA+ID4gc3dpdGNoIHRoZSBUeXBl QyBtb2RlIChiZXR3ZWVuIGxlZ2FjeSBhbmQgZGlzY29ubmVjdGVkIG1vZGVzIGFzIHdlbGwgYXMK PiA+ID4gYW1vbmcgVVNCIERQIGFsdGVybmF0ZSwgVGh1bmRlcmJvbHQgYWx0ZXJuYXRlIGFuZCBk aXNjb25uZWN0ZWQgbW9kZXMpIG9uCj4gPiA+IHRoZSBmbHkgZnJvbSB0aGUgSFBEIGRpc2Nvbm5l Y3QgaW50ZXJydXB0IHdvcmsgd2hpbGUgdGhlIHBvcnQgbWF5IGJlCj4gPiA+IHN0aWxsIGFjdGl2 ZS4KPiA+ID4gCj4gPiA+IEV2ZW4gaWYgdGhlIHBvcnQgaGFwcGVucyB0byBiZSBub3QgYWN0aXZl IGR1cmluZyB0aGUgZGlzY29ubmVjdCB3ZSdkCj4gPiA+IHN0aWxsIGhhdmUgYSBwcm9ibGVtIGR1 cmluZyBhIHN1YnNlcXVlbnQgbW9kZXNldCBvciBBVVggdHJhbnNmZXIgdGhhdAo+ID4gPiBjb3Vs ZCBoYXBwZW4gcmVnYXJkbGVzcyBvZiB0aGUgcG9ydCdzIGNvbm5lY3RlZCBzdGF0ZS4gRm9yIGlu c3RhbmNlIHRoZQo+ID4gPiBzeXN0ZW0gcmVzdW1lIGRpc3BsYXkgbW9kZSByZXN0b3JlIGNvZGUg YW5kIHVzZXJzcGFjZSBjb3VsZCBwZXJmb3JtIGEKPiA+ID4gbW9kZXNldCBvbiB0aGUgcG9ydCBv ciB1c2Vyc3BhY2UgY291bGQgc3RhcnQgYW4gQVVYIHRyYW5zZmVyIGV2ZW4gaWYgdGhlCj4gPiA+ IHBvcnQgaXMgaW4gZGlzY29ubmVjdGVkIHN0YXRlLgo+ID4gPiAKPiA+ID4gVG8gZml4IHRoaXMg a2VlcCBUeXBlQyBsZWdhY3kgcG9ydHMgaW4gbGVnYWN5IG1vZGUgd2hlbmV2ZXIgd2UncmUgbm90 Cj4gPiA+IHN1c3BlbmRlZC4gVGhpcyBtb2RlIGlzIGEgc3RhdGljIGNvbmZpZ3VyYXRpb24gYXMg b3Bwb3NlZCB0byB0aGUKPiA+ID4gVGh1bmRlcmJvbHQgYW5kIFVTQiBEUCBhbHRlcm5hdGUgbW9k ZXMgYmV0d2VlbiB3aGljaCB3ZSBjYW4gc3dpdGNoCj4gPiA+IGR5bmFtaWNhbGx5Lgo+ID4gPiAK PiA+ID4gV2UgZGV0ZXJtaW5lIGlmIGEgVHlwZUMgcG9ydCBpcyBsZWdhY3kgKHdpcmVkIHRvIGEg bGVnYWN5IEhETUkgb3IgYQo+ID4gPiBsZWdhY3kgRFAgY29ubmVjdG9yKSB2aWEgdGhlIFZCVCBE REkgcG9ydCBzcGVjaWZpYyBVU0ItVHlwZUMgYW5kCj4gPiA+IFRodW5kZXJib2x0IGZsYWdzLiBJ ZiBib3RoIHRoZXNlIGZsYWdzIGFyZSBjbGVhcmVkIHRoZW4gdGhlIHBvcnQgaXMKPiA+ID4gY29u ZmlndXJlZCBmb3IgbGVnYWN5IG1vZGUuCj4gPiA+IAo+ID4gPiBPbiBzdWNoIGxlZ2FjeSBwb3J0 cyB3ZSdsbCBydW4gdGhlIFR5cGVDIFBIWSBjb25uZWN0IHNlcXVlbmNlIGV4cGxpY2l0bHkKPiA+ ID4gZHVyaW5nIGRyaXZlciBsb2FkaW5nIGFuZCBzeXN0ZW0gcmVzdW1lICh2cy4gcnVubmluZyB0 aGUgc2VxdWVuY2UgZHVyaW5nCj4gPiA+IEhQRCBwcm9jZXNzaW5nKS4gVGhlIGNvbm5lY3Qgd2ls bCBzdWNjZWVkIGV2ZW4gaWYgdGhlIGRpc3BsYXkgaXMgbm90Cj4gPiA+IGNvbm5lY3RlZCB0byBi ZWdpbiB3aXRoIChvciBkaXNhcHBlYXJzIGR1cmluZyB0aGUgc3VzcGVuZGVkIHN0YXRlKSBzaW5j ZQo+ID4gPiBmb3IgbGVnYWN5IHBvcnRzIHRoZSBQT1JUX1RYX0RGTEVYRFBQTVMgLyBEUF9QSFlf TU9ERV9TVEFUVVNfQ09NUExFVEVECj4gPiA+IGZsYWcgaXMgYWx3YXlzIHNldCAoYXMgb3Bwb3Nl ZCB0byB0aGUgVVNCIERQIGFsdGVybmF0ZSBtb2RlIHdoZXJlIGl0Cj4gPiA+IGdldHMgc2V0IG9u bHkgd2hlbiBhIGRpc3BsYXkgaXMgY29ubmVjdGVkKS4KPiA+ID4gCj4gPiA+IENvcnJlc3BvbmRp bmdseSBydW4gdGhlIFR5cGVDIFBIWSBkaXNjb25uZWN0IHNlcXVlbmNlIGR1cmluZyBzeXN0ZW0K PiA+ID4gc3VzcGVuZCBhbmQgZHJpdmVyIHVubG9hZGluZy4gRm9yIHRoZSB1bmxvYWRpbmcgY2Fz ZSBJIGhhZCB0byBzcGxpdAo+ID4gPiB1cCBpbnRlbF9kcF9lbmNvZGVyX2Rlc3Ryb3koKSB0byBi ZSBhYmxlIHRvIGhhdmUgdGhlIDEuIGZsdXNoIGFueQo+ID4gPiBwZW5kaW5nIGVuY29kZXIgd29y aywgMi4gZGlzY29ubmVjdCBUQyBQSFksIDMuIGNhbGwgRFJNIGNvcmUgY2xlYW51cCBhbmQKPiA+ ID4ga2ZyZWUgb24gdGhlIGVuY29kZXIgb2JqZWN0Lgo+ID4gPiAKPiA+ID4gRm9yIG5vdyBydW4g dGhlIFBIWSBkaXNjb25uZWN0IGR1cmluZyBzdXNwZW5kIG9ubHkgZm9yIFR5cGVDIGxlZ2FjeQo+ ID4gPiBwb3J0cy4gV2Ugd2lsbCBuZWVkIHRvIGRpc2Nvbm5lY3QgZXZlbiBpbiBVU0IgRFAgYWx0 ZXJuYXRlIG1vZGUgaW4gdGhlCj4gPiA+IGZ1dHVyZSwgYnV0IGF0bSB3ZSBkb24ndCBoYXZlIGEg d2F5IHRvIHJlY29ubmVjdCB0aGUgcG9ydCBpbiB0aGlzIG1vZGUKPiA+ID4gZHVyaW5nIHJlc3Vt ZSBpZiB0aGUgZGlzcGxheSBkaXNhcHBlYXJzIHdoaWxlIGJlaW5nIHN1c3BlbmRlZC4gU28gZm9y Cj4gPiA+IG5vdyBwdW50IG9uIHRoaXMgY2FzZS4KPiA+ID4gCj4gPiA+IE5vdGUgdGhhdCB3ZSBk byBub3QgZGlzY29ubmVjdCB0aGUgcG9ydCBkdXJpbmcgcnVudGltZSBzdXNwZW5kOyBpbgo+ID4g PiBsZWdhY3kgbW9kZSB0aGVyZSBhcmUgbm8gc2hhcmVkIEhXIHJlc291cmNlcyAoUEhZIGxhbmVz KSB3aXRoIG90aGVyIEhXCj4gPiA+IGJsb2NrcyAoVVNCKSwgc28gbm8gbmVlZCB0byByZWxlYXNl IC8gcmVhY3F1aXJlIHRoZXNlIHJlc291cmNlcyBhcyB3aXRoCj4gPiA+IFVTQiBEUCBhbHRlcm5h dGUgbW9kZS4gVGhlIG9ubHkgcmVhc29uIHRvIGRpc2Nvbm5lY3QgbGVnYWN5IHBvcnRzIGR1cmlu Zwo+ID4gPiBzeXN0ZW0gc3VzcGVuZCBpcyB0aGF0IHRoZSBQT1JUX1RYX0RGTEVYRFBQTVMgLwo+ ID4gPiBEUF9QSFlfTU9ERV9TVEFUVVNfQ09NUExFVEVEIGZsYWcgbXVzdCBiZSByZWNoZWNrZWQg YW5kIHRoZSBwb3J0IG11c3QgYmUKPiA+ID4gY29ubmVjdGVkIGFnYWluIGR1cmluZyBzeXN0ZW0g cmVzdW1lLiBXZSdsbCBhbHNvIGhhdmUgdG8gdHVybiB0aGUgY2hlY2sKPiA+ID4gZm9yIHRoaXMg ZmxhZyBpbnRvIGEgcG9sbCwgYWZ0ZXIgZmlndXJpbmcgb3V0IHdoYXQncyB0aGUgcHJvcGVyIHRp bWVvdXQKPiA+ID4gdmFsdWUgZm9yIGl0Lgo+ID4gPiAKPiA+ID4gdjI6Cj4gPiA+IC0gUmVtb3Zl IHRoZSByZWR1bmRhbnQgc3BlY2lhbCBjYXNpbmcgb2YgbGVnYWN5IG1vZGUgd2hlbiBkb2luZyBh Cj4gPiA+ICAgZGlzY29ubmVjdCBpbiBpY2xfdGNfcG9ydF9jb25uZWN0ZWQoKS4gSXQncyBndWFy YW50ZWVkIGFscmVhZHkgdGhhdCB3ZQo+ID4gPiAgIHdvbid0IGRpc2Nvbm5lY3QgbGVnYWN5IHBv cnRzIGluIHRoYXQgZnVuY3Rpb24uCj4gPiA+IC0gQWRkIGEgbm90ZSBhYm91dCB0aGUgbmV3IGlu dGVsX2RkaV9lbmNvZGVyX2Rlc3Ryb3koKSBob29rLgo+ID4gPiAtIFJld29yZCB0aGUgY29tbWl0 IG1lc3NhZ2UgYWZ0ZXIgc3dpdGNoaW5nIHRvIHRoZSBWQlQgYmFzZWQgZGV0ZWN0aW9uLgo+ID4g Cj4gPiBSZXZpZXdlZC1ieTogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgo+ ID4gCj4gPiAoanVzdCBiZWNhdXNlIHlvdSBhc2tlZCBhYm91dCB3aGF0IEkgZmVlbCBub24tc3lt bWV0cmljIEkgd2lsbCB3cml0ZSBoZXJlLAo+ID4gYnV0IEkgZG8gYmVsaWV2ZSB5b3VyIHZlcnNp b25zIGlzIGdvb2QgYW5kIG9wdGltYWwgYW5kIG15ICJzeW1tZXRyaWMiIG9uZQo+ID4gd291bGQg YmUganVzdCBiYWQgT0NELgo+ID4gCj4gPiB0aGUgYXN5bW1ldHJpYyBwYXJ0IEkgc2VlIGlzOgo+ ID4gZGRpX3Jlc2V0IC0+IGRwX3Jlc2V0Cj4gPiBkZGlfZGVzdHJveSAtPiBmbHVzaAo+ID4gZHBf ZGVzdHJveSAtPiBmbHVzaAo+IAo+IE9rLCBJIHNlZSB3aGF0IHlvdSBtZWFuIG5vdywgYnV0IG5v dCBzdXJlIGlmIGl0J3MgcmVhbGx5IGFuIGlzc3VlLgoKSSB0b2xkIGl0IGlzIG5vdCBhbiBpc3N1 ZSBidXQganVzdCBhIGR1bW15IE9DRCA7KQpJIGp1c3Qgd3JvdGUgdG8gY2xhcmlmeSwgdGhhdCdz IGFsbCEgCgo+IEFzIEkKPiBzZWUgdGhlIGFzc3ltZXRyeSBjb21lcyBmcm9tIHRoZSBmYWN0IHRo YXQgaW50ZWxfZHBfZW5jb2Rlcl9yZXNldCgpIGNhbiBiZQo+IHJldXNlZCBieSB0aGUgZGRpIGNv ZGUgYXMgYSB3aG9sZSB3aGlsZSBpbnRlbF9kcF9lbmNvZGVyX2Rlc3Ryb3koKSBjYW4ndCBiZQo+ IHJldXNlZCBieSB0aGUgZGRpIGNvZGUuIElPVyAuLgo+IAo+ID4gYSBtb3JlIHN5bW1ldHJpYyB3 YXkgd291bGQgYmUKPiA+IGRkaV9yZXNldCAtPiBkcF9yZXNldAo+ID4gZGRpX2Rlc3Ryb3kgLT4g ZHBfZGVzdHJveQo+ID4gCj4gPiBvcgo+ID4gCj4gPiBkZGlfcmVzZXQgLT4gc29tZV9jb21tb25f cmVzZXQKPiA+IGRwX3Jlc2V0IC0+IHNvbWVfY29tbW9uX3Jlc2V0Cj4gCj4gLi4gZHBfcmVzZXQo KSBpcyBqdXN0IHRoZSBzYW1lIGFzIHNvbWVfY29tbW9uX3Jlc2V0KCkuCj4gCj4gPiBkZGlfZGVz dHJveSAtPiBmbHVzaAo+ID4gZHBfZGVzdHJveSAtPiBmbHVzaAo+ID4gKQo+ID4gCj4gPiA+IAo+ ID4gPiBCdWd6aWxsYTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/ aWQ9MTA4MDcwCj4gPiA+IEJ1Z3ppbGxhOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3No b3dfYnVnLmNnaT9pZD0xMDg5MjQKPiA+ID4gQ2M6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5v bmlAaW50ZWwuY29tPgo+ID4gPiBDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxp bnV4LmludGVsLmNvbT4KPiA+ID4gQ2M6IEpvc8OpIFJvYmVydG8gZGUgU291emEgPGpvc2Uuc291 emFAaW50ZWwuY29tPgo+ID4gPiBDYzogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwu Y29tPgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBJbXJlIERlYWsgPGltcmUuZGVha0BpbnRlbC5jb20+ Cj4gPiA+IC0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMgfCA2MyAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCj4gPiA+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcC5jICB8IDIxICsrKysrKysrKy0tLS0tCj4gPiA+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCB8ICA1ICsrKy0KPiA+ID4gIDMgZmlsZXMgY2hhbmdl ZCwgNzMgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCj4gPiA+IAo+ID4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kZGkuYwo+ID4gPiBpbmRleCBmM2UxZDZhMGI3ZGQuLjI5NWQ3NWM1MDY4OCAx MDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiA+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiA+ID4gQEAgLTM5MDEsOSAr MzkwMSw1MCBAQCBzdGF0aWMgYm9vbCBpbnRlbF9kZGlfY29tcHV0ZV9jb25maWcoc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXIsCj4gPiA+ICAKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiArc3Rh dGljIHZvaWQgaW50ZWxfZGRpX2VuY29kZXJfc3VzcGVuZChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAq ZW5jb2RlcikKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdf cG9ydCA9IGVuY190b19kaWdfcG9ydCgmZW5jb2Rlci0+YmFzZSk7Cj4gPiA+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKPiA+ID4g Kwo+ID4gPiArCWludGVsX2RwX2VuY29kZXJfc3VzcGVuZChlbmNvZGVyKTsKPiA+ID4gKwo+ID4g PiArCS8qCj4gPiA+ICsJICogVE9ETzogZGlzY29ubmVjdCBhbHNvIGZyb20gVVNCIERQIGFsdGVy bmF0ZSBtb2RlIG9uY2Ugd2UgaGF2ZSBhCj4gPiA+ICsJICogd2F5IHRvIGhhbmRsZSB0aGUgbW9k ZXNldCByZXN0b3JlIGluIHRoYXQgbW9kZSBkdXJpbmcgcmVzdW1lCj4gPiA+ICsJICogZXZlbiBp ZiB0aGUgc2luayBoYXMgZGlzYXBwZWFyZWQgd2hpbGUgYmVpbmcgc3VzcGVuZGVkLgo+ID4gPiAr CSAqLwo+ID4gPiArCWlmIChkaWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQpCj4gPiA+ICsJCWljbF90 Y19waHlfZGlzY29ubmVjdChpOTE1LCBkaWdfcG9ydCk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4g K3N0YXRpYyB2b2lkIGludGVsX2RkaV9lbmNvZGVyX3Jlc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAq ZHJtX2VuY29kZXIpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAq ZGlnX3BvcnQgPSBlbmNfdG9fZGlnX3BvcnQoZHJtX2VuY29kZXIpOwo+ID4gPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShkcm1fZW5jb2Rlci0+ZGV2KTsKPiA+ID4g Kwo+ID4gPiArCWlmIChpbnRlbF9wb3J0X2lzX3RjKGk5MTUsIGRpZ19wb3J0LT5iYXNlLnBvcnQp KQo+ID4gPiArCQlpbnRlbF9kaWdpdGFsX3BvcnRfY29ubmVjdGVkKCZkaWdfcG9ydC0+YmFzZSk7 Cj4gPiA+ICsKPiA+ID4gKwlpbnRlbF9kcF9lbmNvZGVyX3Jlc2V0KGRybV9lbmNvZGVyKTsKPiA+ ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgaW50ZWxfZGRpX2VuY29kZXJfZGVzdHJv eShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGlu dGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBlbmNfdG9fZGlnX3BvcnQoZW5jb2Rlcik7Cj4g PiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGVuY29kZXItPmRl dik7Cj4gPiA+ICsKPiA+ID4gKwlpbnRlbF9kcF9lbmNvZGVyX2ZsdXNoX3dvcmsoZW5jb2Rlcik7 Cj4gPiA+ICsKPiA+ID4gKwlpZiAoaW50ZWxfcG9ydF9pc190YyhpOTE1LCBkaWdfcG9ydC0+YmFz ZS5wb3J0KSkKPiA+ID4gKwkJaWNsX3RjX3BoeV9kaXNjb25uZWN0KGk5MTUsIGRpZ19wb3J0KTsK PiA+ID4gKwo+ID4gPiArCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cj4gPiA+ICsJa2Zy ZWUoZGlnX3BvcnQpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICBzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9lbmNvZGVyX2Z1bmNzIGludGVsX2RkaV9mdW5jcyA9IHsKPiA+ID4gLQkucmVzZXQgPSBp bnRlbF9kcF9lbmNvZGVyX3Jlc2V0LAo+ID4gPiAtCS5kZXN0cm95ID0gaW50ZWxfZHBfZW5jb2Rl cl9kZXN0cm95LAo+ID4gPiArCS5yZXNldCA9IGludGVsX2RkaV9lbmNvZGVyX3Jlc2V0LAo+ID4g PiArCS5kZXN0cm95ID0gaW50ZWxfZGRpX2VuY29kZXJfZGVzdHJveSwKPiA+ID4gIH07Cj4gPiA+ ICAKPiA+ID4gIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICoKPiA+ID4gQEAgLTQxNDcs MTYgKzQxODgsMTYgQEAgaW50ZWxfZGRpX21heF9sYW5lcyhzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9w b3J0ICppbnRlbF9kcG9ydCkKPiA+ID4gIAo+ID4gPiAgdm9pZCBpbnRlbF9kZGlfaW5pdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcG9ydCBwb3J0KQo+ID4gPiAgewo+ ID4gPiArCXN0cnVjdCBkZGlfdmJ0X3BvcnRfaW5mbyAqcG9ydF9pbmZvID0KPiA+ID4gKwkJJmRl dl9wcml2LT52YnQuZGRpX3BvcnRfaW5mb1twb3J0XTsKPiA+ID4gIAlzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydDsKPiA+ID4gIAlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAq aW50ZWxfZW5jb2RlcjsKPiA+ID4gIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Cj4gPiA+ ICAJYm9vbCBpbml0X2hkbWksIGluaXRfZHAsIGluaXRfbHNwY29uID0gZmFsc2U7Cj4gPiA+ICAJ ZW51bSBwaXBlIHBpcGU7Cj4gPiA+ICAKPiA+ID4gLQo+ID4gPiAtCWluaXRfaGRtaSA9IChkZXZf cHJpdi0+dmJ0LmRkaV9wb3J0X2luZm9bcG9ydF0uc3VwcG9ydHNfZHZpIHx8Cj4gPiA+IC0JCSAg ICAgZGV2X3ByaXYtPnZidC5kZGlfcG9ydF9pbmZvW3BvcnRdLnN1cHBvcnRzX2hkbWkpOwo+ID4g PiAtCWluaXRfZHAgPSBkZXZfcHJpdi0+dmJ0LmRkaV9wb3J0X2luZm9bcG9ydF0uc3VwcG9ydHNf ZHA7Cj4gPiA+ICsJaW5pdF9oZG1pID0gcG9ydF9pbmZvLT5zdXBwb3J0c19kdmkgfHwgcG9ydF9p bmZvLT5zdXBwb3J0c19oZG1pOwo+ID4gPiArCWluaXRfZHAgPSBwb3J0X2luZm8tPnN1cHBvcnRz X2RwOwo+ID4gPiAgCj4gPiA+ICAJaWYgKGludGVsX2Jpb3NfaXNfbHNwY29uX3ByZXNlbnQoZGV2 X3ByaXYsIHBvcnQpKSB7Cj4gPiA+ICAJCS8qCj4gPiA+IEBAIC00MTk3LDcgKzQyMzgsNyBAQCB2 b2lkIGludGVsX2RkaV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51 bSBwb3J0IHBvcnQpCj4gPiA+ICAJaW50ZWxfZW5jb2Rlci0+cG9zdF9kaXNhYmxlID0gaW50ZWxf ZGRpX3Bvc3RfZGlzYWJsZTsKPiA+ID4gIAlpbnRlbF9lbmNvZGVyLT5nZXRfaHdfc3RhdGUgPSBp bnRlbF9kZGlfZ2V0X2h3X3N0YXRlOwo+ID4gPiAgCWludGVsX2VuY29kZXItPmdldF9jb25maWcg PSBpbnRlbF9kZGlfZ2V0X2NvbmZpZzsKPiA+ID4gLQlpbnRlbF9lbmNvZGVyLT5zdXNwZW5kID0g aW50ZWxfZHBfZW5jb2Rlcl9zdXNwZW5kOwo+ID4gPiArCWludGVsX2VuY29kZXItPnN1c3BlbmQg PSBpbnRlbF9kZGlfZW5jb2Rlcl9zdXNwZW5kOwo+ID4gPiAgCWludGVsX2VuY29kZXItPmdldF9w b3dlcl9kb21haW5zID0gaW50ZWxfZGRpX2dldF9wb3dlcl9kb21haW5zOwo+ID4gPiAgCWludGVs X2VuY29kZXItPnR5cGUgPSBJTlRFTF9PVVRQVVRfRERJOwo+ID4gPiAgCWludGVsX2VuY29kZXIt PnBvd2VyX2RvbWFpbiA9IGludGVsX3BvcnRfdG9fcG93ZXJfZG9tYWluKHBvcnQpOwo+ID4gPiBA QCAtNDIxNiw2ICs0MjU3LDEwIEBAIHZvaWQgaW50ZWxfZGRpX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBvcnQgcG9ydCkKPiA+ID4gIAlpbnRlbF9kaWdfcG9y dC0+bWF4X2xhbmVzID0gaW50ZWxfZGRpX21heF9sYW5lcyhpbnRlbF9kaWdfcG9ydCk7Cj4gPiA+ ICAJaW50ZWxfZGlnX3BvcnQtPmF1eF9jaCA9IGludGVsX2Jpb3NfcG9ydF9hdXhfY2goZGV2X3By aXYsIHBvcnQpOwo+ID4gPiAgCj4gPiA+ICsJaW50ZWxfZGlnX3BvcnQtPnRjX2xlZ2FjeV9wb3J0 ID0gaW50ZWxfcG9ydF9pc190YyhkZXZfcHJpdiwgcG9ydCkgJiYKPiA+ID4gKwkJCQkJICFwb3J0 X2luZm8tPnN1cHBvcnRzX3R5cGVjX3VzYiAmJgo+ID4gPiArCQkJCQkgIXBvcnRfaW5mby0+c3Vw cG9ydHNfdGJ0Owo+ID4gPiArCj4gPiA+ICAJc3dpdGNoIChwb3J0KSB7Cj4gPiA+ICAJY2FzZSBQ T1JUX0E6Cj4gPiA+ICAJCWludGVsX2RpZ19wb3J0LT5kZGlfaW9fcG93ZXJfZG9tYWluID0KPiA+ ID4gQEAgLTQyNzQsNiArNDMxOSwxMCBAQCB2b2lkIGludGVsX2RkaV9pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwb3J0IHBvcnQpCj4gPiA+ICAJfQo+ID4gPiAg Cj4gPiA+ICAJaW50ZWxfaW5mb2ZyYW1lX2luaXQoaW50ZWxfZGlnX3BvcnQpOwo+ID4gPiArCj4g PiA+ICsJaWYgKGludGVsX3BvcnRfaXNfdGMoZGV2X3ByaXYsIHBvcnQpKQo+ID4gPiArCQlpbnRl bF9kaWdpdGFsX3BvcnRfY29ubmVjdGVkKGludGVsX2VuY29kZXIpOwo+ID4gPiArCj4gPiA+ICAJ cmV0dXJuOwo+ID4gPiAgCj4gPiA+ICBlcnI6Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ ID4gPiBpbmRleCAwODI1OTRiYjY1YTcuLmIyYTMwMTI0NzhjYSAxMDA2NDQKPiA+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcC5jCj4gPiA+IEBAIC01MTA4LDkgKzUxMDgsNiBAQCBzdGF0aWMgdm9p ZCBpY2xfdXBkYXRlX3RjX3BvcnRfdHlwZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gPiA+ICAJCQkgICAgICB0Y190eXBlX25hbWUoaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUp KTsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiAtc3RhdGljIHZvaWQgaWNsX3RjX3BoeV9kaXNjb25u ZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ID4gLQkJCQkgIHN0cnVj dCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0KTsKPiA+ID4gLQo+ID4gPiAgLyoKPiA+ID4g ICAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgQ29ubmVj dCBGbG93IGRlc2NyaWJlZCBieSBvdXIKPiA+ID4gICAqIHNwZWNpZmljYXRpb24sIEdlbjExIFR5 cGVDIFByb2dyYW1taW5nIGNoYXB0ZXIuIFRoZSByZXN0IG9mIHRoZSBmbG93IChyZWFkaW5nCj4g PiA+IEBAIC01MTQ1LDYgKzUxNDIsNyBAQCBzdGF0aWMgYm9vbCBpY2xfdGNfcGh5X2Nvbm5lY3Qo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gPiAgCXZhbCA9IEk5MTVfUkVB RChQT1JUX1RYX0RGTEVYRFBQTVMpOwo+ID4gPiAgCWlmICghKHZhbCAmIERQX1BIWV9NT0RFX1NU QVRVU19DT01QTEVURUQodGNfcG9ydCkpKSB7Cj4gPiA+ICAJCURSTV9ERUJVR19LTVMoIkRQIFBI WSBmb3IgVEMgcG9ydCAlZCBub3QgcmVhZHlcbiIsIHRjX3BvcnQpOwo+ID4gPiArCQlXQVJOX09O KGRpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCk7Cj4gPiA+ICAJCXJldHVybiBmYWxzZTsKPiA+ID4g IAl9Cj4gPiA+ICAKPiA+ID4gQEAgLTUxNzYsOCArNTE3NCw4IEBAIHN0YXRpYyBib29sIGljbF90 Y19waHlfY29ubmVjdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiA+ICAg KiBTZWUgdGhlIGNvbW1lbnQgYXQgdGhlIGNvbm5lY3QgZnVuY3Rpb24uIFRoaXMgaW1wbGVtZW50 cyB0aGUgRGlzY29ubmVjdAo+ID4gPiAgICogRmxvdy4KPiA+ID4gICAqLwo+ID4gPiAtc3RhdGlj IHZvaWQgaWNsX3RjX3BoeV9kaXNjb25uZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiA+ID4gLQkJCQkgIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0KQo+ ID4gPiArdm9pZCBpY2xfdGNfcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+ID4gPiArCQkJICAgc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3Bv cnQpCj4gPiA+ICB7Cj4gPiA+ICAJZW51bSB0Y19wb3J0IHRjX3BvcnQgPSBpbnRlbF9wb3J0X3Rv X3RjKGRldl9wcml2LCBkaWdfcG9ydC0+YmFzZS5wb3J0KTsKPiA+ID4gIAo+ID4gPiBAQCAtNTIy Miw3ICs1MjIwLDggQEAgc3RhdGljIGJvb2wgaWNsX3RjX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ID4gIAlib29sIGlzX2xlZ2FjeSwgaXNfdHlw ZWMsIGlzX3RidDsKPiA+ID4gIAl1MzIgZHBzcDsKPiA+ID4gIAo+ID4gPiAtCWlzX2xlZ2FjeSA9 IEk5MTVfUkVBRChTREVJU1IpICYgU0RFX1RDX0hPVFBMVUdfSUNQKHRjX3BvcnQpOwo+ID4gPiAr CWlzX2xlZ2FjeSA9IGludGVsX2RpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCB8fAo+ID4gPiArCQlJ OTE1X1JFQUQoU0RFSVNSKSAmIFNERV9UQ19IT1RQTFVHX0lDUCh0Y19wb3J0KTsKPiA+ID4gIAo+ ID4gPiAgCS8qCj4gPiA+ICAJICogVGhlIHNwZWMgc2F5cyB3ZSBzaG91bGRuJ3QgYmUgdXNpbmcg dGhlIElTUiBiaXRzIGZvciBkZXRlY3RpbmcKPiA+ID4gQEAgLTUyMzQsNiArNTIzMyw3IEBAIHN0 YXRpYyBib29sIGljbF90Y19wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCj4gPiA+ICAKPiA+ID4gIAlpZiAoIWlzX2xlZ2FjeSAmJiAhaXNfdHlwZWMgJiYg IWlzX3RidCkgewo+ID4gPiAgCQlpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoZGV2X3ByaXYsIGludGVs X2RpZ19wb3J0KTsKPiA+ID4gKwo+ID4gPiAgCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICAJfQo+ID4g PiAgCj4gPiA+IEBAIC01NTQyLDcgKzU1NDIsNyBAQCBpbnRlbF9kcF9jb25uZWN0b3JfdW5yZWdp c3RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4gPiAgCWludGVsX2Nvbm5l Y3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLXZvaWQg aW50ZWxfZHBfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiA+ ID4gK3ZvaWQgaW50ZWxfZHBfZW5jb2Rlcl9mbHVzaF93b3JrKHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlcikKPiA+ID4gIHsKPiA+ID4gIAlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRl bF9kaWdfcG9ydCA9IGVuY190b19kaWdfcG9ydChlbmNvZGVyKTsKPiA+ID4gIAlzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwID0gJmludGVsX2RpZ19wb3J0LT5kcDsKPiA+ID4gQEAgLTU1NjUsOSAr NTU2NSwxNCBAQCB2b2lkIGludGVsX2RwX2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIpCj4gPiA+ICAJfQo+ID4gPiAgCj4gPiA+ICAJaW50ZWxfZHBfYXV4X2Zpbmko aW50ZWxfZHApOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBpbnRlbF9kcF9l bmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+ID4gPiArewo+ID4g PiArCWludGVsX2RwX2VuY29kZXJfZmx1c2hfd29yayhlbmNvZGVyKTsKPiA+ID4gIAo+ID4gPiAg CWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cj4gPiA+IC0Ja2ZyZWUoaW50ZWxfZGlnX3Bv cnQpOwo+ID4gPiArCWtmcmVlKGVuY190b19kaWdfcG9ydChlbmNvZGVyKSk7Cj4gPiA+ICB9Cj4g PiA+ICAKPiA+ID4gIHZvaWQgaW50ZWxfZHBfZW5jb2Rlcl9zdXNwZW5kKHN0cnVjdCBpbnRlbF9l bmNvZGVyICppbnRlbF9lbmNvZGVyKQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4g PiBpbmRleCBkMDhmMDhmNjA3ZGQuLjk3YzQyMmJlYTdmYiAxMDA2NDQKPiA+ID4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmgKPiA+ID4gQEAgLTEyMzQsNiArMTIzNCw3IEBAIHN0cnVjdCBpbnRl bF9kaWdpdGFsX3BvcnQgewo+ID4gPiAgCS8qIFVzZWQgZm9yIERQIGFuZCBJQ0wrIFR5cGVDL0RQ IGFuZCBUeXBlQy9IRE1JIHBvcnRzLiAqLwo+ID4gPiAgCWVudW0gYXV4X2NoIGF1eF9jaDsKPiA+ ID4gIAllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRkaV9pb19wb3dlcl9kb21haW47 Cj4gPiA+ICsJYm9vbCB0Y19sZWdhY3lfcG9ydDoxOwo+ID4gPiAgCWVudW0gdGNfcG9ydF90eXBl IHRjX3R5cGU7Cj4gPiA+ICAKPiA+ID4gIAl2b2lkICgqd3JpdGVfaW5mb2ZyYW1lKShzdHJ1Y3Qg aW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ID4gQEAgLTE4MDYsNyArMTgwNyw3IEBAIHZvaWQg aW50ZWxfZHBfc2lua19zZXRfZGVjb21wcmVzc2lvbl9zdGF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwLAo+ID4gPiAgCQkJCQkgICBib29sIGVuYWJsZSk7Cj4gPiA+ICB2b2lkIGludGVsX2Rw X2VuY29kZXJfcmVzZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKPiA+ID4gIHZvaWQg aW50ZWxfZHBfZW5jb2Rlcl9zdXNwZW5kKHN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNv ZGVyKTsKPiA+ID4gLXZvaWQgaW50ZWxfZHBfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2Rlcik7Cj4gPiA+ICt2b2lkIGludGVsX2RwX2VuY29kZXJfZmx1c2hfd29yayhz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwo+ID4gPiAgYm9vbCBpbnRlbF9kcF9jb21wdXRl X2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ID4gIAkJCSAgICAgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAo+ID4gPiAgCQkJICAgICBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSk7Cj4gPiA+IEBAIC0xODc0LDYgKzE4NzUs OCBAQCBib29sIGludGVsX2RwX3JlYWRfZHBjZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsK PiA+ID4gIGludCBpbnRlbF9kcF9saW5rX3JlcXVpcmVkKGludCBwaXhlbF9jbG9jaywgaW50IGJw cCk7Cj4gPiA+ICBpbnQgaW50ZWxfZHBfbWF4X2RhdGFfcmF0ZShpbnQgbWF4X2xpbmtfY2xvY2ss IGludCBtYXhfbGFuZXMpOwo+ID4gPiAgYm9vbCBpbnRlbF9kaWdpdGFsX3BvcnRfY29ubmVjdGVk KHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKTsKPiA+ID4gK3ZvaWQgaWNsX3RjX3BoeV9k aXNjb25uZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ID4gKwkJCSAg IHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0KTsKPiA+ID4gIAo+ID4gPiAgLyog aW50ZWxfZHBfYXV4X2JhY2tsaWdodC5jICovCj4gPiA+ICBpbnQgaW50ZWxfZHBfYXV4X2luaXRf YmFja2xpZ2h0X2Z1bmNzKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3Rvcik7 Cj4gPiA+IC0tIAo+ID4gPiAyLjEzLjIKPiA+ID4gCj4gPiA+IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiA+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QK PiA+ID4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gPiBodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK