From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v3 07/21] drm/bridge: Make the bridge chain a double-linked list Date: Sun, 24 Nov 2019 15:57:49 +0200 Message-ID: <20191124135749.GH4727@pendragon.ideasonboard.com> References: <20191023154512.9762-1-boris.brezillon@collabora.com> <20191023154512.9762-8-boris.brezillon@collabora.com> 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 5689389CDF for ; Sun, 24 Nov 2019 13:58:02 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20191023154512.9762-8-boris.brezillon@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Boris Brezillon Cc: Mark Rutland , Neil Armstrong , dri-devel@lists.freedesktop.org, Thierry Reding , kernel@collabora.com, Sam Ravnborg , Nikita Yushchenko , Andrey Smirnov , Kyungmin Park , Chris Healy , devicetree@vger.kernel.org, Jonas Karlman , Rob Herring , Jernej Skrabec , Seung-Woo Kim List-Id: dri-devel@lists.freedesktop.org SGkgQm9yaXMsCgpUaGFuayB5b3UgZm9yIHRoZSBwYXRjaC4KCk9uIFdlZCwgT2N0IDIzLCAyMDE5 IGF0IDA1OjQ0OjU4UE0gKzAyMDAsIEJvcmlzIEJyZXppbGxvbiB3cm90ZToKPiBTbyB0aGF0IGVh Y2ggZWxlbWVudCBpbiB0aGUgY2hhaW4gY2FuIGVhc2lseSBhY2Nlc3MgaXRzIHByZWRlY2Vzc29y Lgo+IFRoaXMgd2lsbCBiZSBuZWVkZWQgdG8gc3VwcG9ydCBidXMgZm9ybWF0IG5lZ290aWF0aW9u IGJldHdlZW4gZWxlbWVudHMKPiBvZiB0aGUgYnJpZGdlIGNoYWluLgo+IAo+IFNpZ25lZC1vZmYt Ynk6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGNvbGxhYm9yYS5jb20+Cj4gLS0t Cj4gQ2hhbmdlcyBpbiB2MzoKPiAqIE5vbmUKPiAKPiBDaGFuZ2VzIGluIHYyOgo+ICogQWRqdXN0 IHRoaW5ncyB0byB0aGUgImR1bW15IGVuY29kZXIgYnJpZGdlIiBjaGFuZ2UgKHBhdGNoIDIgaW4g dGhpcwo+ICAgc2VyaWVzKQo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jICB8 IDE3MSArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2Ry bS9kcm1fZW5jb2Rlci5jIHwgIDE2ICstLS0KPiAgaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oICAg ICAgfCAgMTIgKystCj4gIGluY2x1ZGUvZHJtL2RybV9lbmNvZGVyLmggICAgIHwgICA5ICstCj4g IDQgZmlsZXMgY2hhbmdlZCwgMTM1IGluc2VydGlvbnMoKyksIDczIGRlbGV0aW9ucygtKQo+IAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jIGIvZHJpdmVycy9ncHUv ZHJtL2RybV9icmlkZ2UuYwo+IGluZGV4IDU0Yzg3NDQ5M2M1Ny4uYzVjZjhhOWM0MjM3IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vZHJtX2JyaWRnZS5jCj4gQEAgLTU1LDcgKzU1LDcgQEAKPiAgICoganVzdCBwcm92aWRl IGFkZGl0aW9uYWwgaG9va3MgdG8gZ2V0IHRoZSBkZXNpcmVkIG91dHB1dCBhdCB0aGUgZW5kIG9m IHRoZQo+ICAgKiBlbmNvZGVyIGNoYWluLgo+ICAgKgo+IC0gKiBCcmlkZ2VzIGNhbiBhbHNvIGJl IGNoYWluZWQgdXAgdXNpbmcgdGhlICZkcm1fYnJpZGdlLm5leHQgcG9pbnRlci4KPiArICogQnJp ZGdlcyBjYW4gYWxzbyBiZSBjaGFpbmVkIHVwIHVzaW5nIHRoZSAmZHJtX2JyaWRnZS5jaGFpbl9u b2RlIGZpZWxkLgo+ICAgKgo+ICAgKiBCb3RoIGxlZ2FjeSBDUlRDIGhlbHBlcnMgYW5kIHRoZSBu ZXcgYXRvbWljIG1vZGVzZXQgaGVscGVycyBzdXBwb3J0IGJyaWRnZXMuCj4gICAqLwo+IEBAIC0x MTQsNiArMTE0LDcgQEAgRVhQT1JUX1NZTUJPTChkcm1fYnJpZGdlX3JlbW92ZSk7Cj4gIGludCBk cm1fYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UsCj4gIAkJICAgICAgc3RydWN0IGRybV9icmlkZ2UgKnByZXZpb3VzKQo+ ICB7Cj4gKwlMSVNUX0hFQUQodG1wX2xpc3QpOwo+ICAJaW50IHJldDsKPiAgCj4gIAlpZiAoIWVu Y29kZXIgfHwgIWJyaWRnZSkKPiBAQCAtMTI3LDYgKzEyOCw3IEBAIGludCBkcm1fYnJpZGdlX2F0 dGFjaChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UsCj4gIAo+ICAJYnJpZGdlLT5kZXYgPSBlbmNvZGVyLT5kZXY7Cj4gIAlicmlkZ2UtPmVuY29k ZXIgPSBlbmNvZGVyOwo+ICsJbGlzdF9hZGRfdGFpbCgmYnJpZGdlLT5jaGFpbl9ub2RlLCAmdG1w X2xpc3QpOwoKQ291bGRuJ3Qgd2Ugc2ltcGxpZnkgdGhpcyBieSBhZGRpbmcgdGhlIGJyaWRnZSB0 byB0aGUgbGlzdCBoZXJlID8gV2UKd291bGQgbmVlZCB0byByZW1vdmUgaXQgaW4gdGhlIGVycm9y IHBhdGggb2YgdGhlIGF0dGFjaCBvcGVyYXRpb24KdGhvdWdoLCBidXQgd291bGRuJ3QgaXQgbWFr ZSB0aGUgY29kZSBlYXNpZXIgdG8gcmVhZCwgYW5kIG1vcmUgZWZmaWNpZW50CmluIHRoZSBtb3N0 IGxpa2VseSBwYXRoID8KCj4gIAo+ICAJaWYgKGJyaWRnZS0+ZnVuY3MtPmF0dGFjaCkgewo+ICAJ CXJldCA9IGJyaWRnZS0+ZnVuY3MtPmF0dGFjaChicmlkZ2UpOwo+IEBAIC0xMzgsOSArMTQwLDkg QEAgaW50IGRybV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlciwgc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiAgCX0KPiAgCj4gIAlpZiAocHJldmlvdXMpCj4gLQkJ cHJldmlvdXMtPm5leHQgPSBicmlkZ2U7Cj4gKwkJbGlzdF9zcGxpY2UoJnRtcF9saXN0LCAmcHJl dmlvdXMtPmNoYWluX25vZGUpOwo+ICAJZWxzZQo+IC0JCWVuY29kZXItPmJyaWRnZSA9IGJyaWRn ZTsKPiArCQlsaXN0X3NwbGljZSgmdG1wX2xpc3QsICZlbmNvZGVyLT5icmlkZ2VfY2hhaW4pOwo+ ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gQEAgLTE1Nyw2ICsxNTksNyBAQCB2b2lkIGRybV9icmlk Z2VfZGV0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gIAlpZiAoYnJpZGdlLT5mdW5j cy0+ZGV0YWNoKQo+ICAJCWJyaWRnZS0+ZnVuY3MtPmRldGFjaChicmlkZ2UpOwo+ICAKPiArCWxp c3RfZGVsKCZicmlkZ2UtPmNoYWluX25vZGUpOwo+ICAJYnJpZGdlLT5kZXYgPSBOVUxMOwo+ICB9 Cj4gIAo+IEBAIC0xOTAsMTggKzE5MywyMiBAQCBib29sIGRybV9icmlkZ2VfY2hhaW5fbW9kZV9m aXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICAJCQkJIGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlLAo+ICAJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1 c3RlZF9tb2RlKQo+ICB7Cj4gLQlib29sIHJldCA9IHRydWU7Cj4gKwlzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXI7Cj4gIAo+ICAJaWYgKCFicmlkZ2UpCj4gIAkJcmV0dXJuIHRydWU7Cj4gIAo+ IC0JaWYgKGJyaWRnZS0+ZnVuY3MtPm1vZGVfZml4dXApCj4gLQkJcmV0ID0gYnJpZGdlLT5mdW5j cy0+bW9kZV9maXh1cChicmlkZ2UsIG1vZGUsIGFkanVzdGVkX21vZGUpOwo+ICsJZW5jb2RlciA9 IGJyaWRnZS0+ZW5jb2RlcjsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShicmlkZ2UsICZl bmNvZGVyLT5icmlkZ2VfY2hhaW4sCj4gKwkJCQkgY2hhaW5fbm9kZSkgewo+ICsJCWlmICghYnJp ZGdlLT5mdW5jcy0+bW9kZV9maXh1cCkKPiArCQkJY29udGludWU7Cj4gIAo+IC0JcmV0ID0gcmV0 ICYmIGRybV9icmlkZ2VfY2hhaW5fbW9kZV9maXh1cChicmlkZ2UtPm5leHQsIG1vZGUsCj4gLQkJ CQkJCSBhZGp1c3RlZF9tb2RlKTsKPiArCQlpZiAoIWJyaWRnZS0+ZnVuY3MtPm1vZGVfZml4dXAo YnJpZGdlLCBtb2RlLCBhZGp1c3RlZF9tb2RlKSkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ ICAKPiAtCXJldHVybiByZXQ7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9M KGRybV9icmlkZ2VfY2hhaW5fbW9kZV9maXh1cCk7Cj4gIAo+IEBAIC0yMjQsMTggKzIzMSwyNCBA QCBlbnVtIGRybV9tb2RlX3N0YXR1cwo+ICBkcm1fYnJpZGdlX2NoYWluX21vZGVfdmFsaWQoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiAgCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlKQo+ICB7Cj4gLQllbnVtIGRybV9tb2RlX3N0YXR1cyByZXQgPSBNT0RFX09L Owo+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwo+ICAKPiAgCWlmICghYnJpZGdlKQo+ IC0JCXJldHVybiByZXQ7Cj4gKwkJcmV0dXJuIE1PREVfT0s7Cj4gKwo+ICsJZW5jb2RlciA9IGJy aWRnZS0+ZW5jb2RlcjsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShicmlkZ2UsICZlbmNv ZGVyLT5icmlkZ2VfY2hhaW4sIGNoYWluX25vZGUpIHsKPiArCQllbnVtIGRybV9tb2RlX3N0YXR1 cyByZXQ7Cj4gKwo+ICsJCWlmICghYnJpZGdlLT5mdW5jcy0+bW9kZV92YWxpZCkKPiArCQkJY29u dGludWU7Cj4gIAo+IC0JaWYgKGJyaWRnZS0+ZnVuY3MtPm1vZGVfdmFsaWQpCj4gIAkJcmV0ID0g YnJpZGdlLT5mdW5jcy0+bW9kZV92YWxpZChicmlkZ2UsIG1vZGUpOwo+ICsJCWlmIChyZXQgIT0g TU9ERV9PSykKPiArCQkJcmV0dXJuIHJldDsKPiArCX0KPiAgCj4gLQlpZiAocmV0ICE9IE1PREVf T0spCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlyZXR1cm4gZHJtX2JyaWRnZV9jaGFpbl9tb2Rl X3ZhbGlkKGJyaWRnZS0+bmV4dCwgbW9kZSk7Cj4gKwlyZXR1cm4gTU9ERV9PSzsKPiAgfQo+ICBF WFBPUlRfU1lNQk9MKGRybV9icmlkZ2VfY2hhaW5fbW9kZV92YWxpZCk7Cj4gIAo+IEBAIC0yNTEs MTMgKzI2NCwyMCBAQCBFWFBPUlRfU1lNQk9MKGRybV9icmlkZ2VfY2hhaW5fbW9kZV92YWxpZCk7 Cj4gICAqLwo+ICB2b2lkIGRybV9icmlkZ2VfY2hhaW5fZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlKQo+ICB7Cj4gKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Cj4gKwlzdHJ1 Y3QgZHJtX2JyaWRnZSAqaXRlcjsKPiArCj4gIAlpZiAoIWJyaWRnZSkKPiAgCQlyZXR1cm47Cj4g IAo+IC0JZHJtX2JyaWRnZV9jaGFpbl9kaXNhYmxlKGJyaWRnZS0+bmV4dCk7Cj4gKwllbmNvZGVy ID0gYnJpZGdlLT5lbmNvZGVyOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGl0ZXIs ICZlbmNvZGVyLT5icmlkZ2VfY2hhaW4sIGNoYWluX25vZGUpIHsKPiArCQlpZiAoaXRlci0+ZnVu Y3MtPmRpc2FibGUpCj4gKwkJCWl0ZXItPmZ1bmNzLT5kaXNhYmxlKGl0ZXIpOwo+ICAKPiAtCWlm IChicmlkZ2UtPmZ1bmNzLT5kaXNhYmxlKQo+IC0JCWJyaWRnZS0+ZnVuY3MtPmRpc2FibGUoYnJp ZGdlKTsKPiArCQlpZiAoaXRlciA9PSBicmlkZ2UpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICB9Cj4g IEVYUE9SVF9TWU1CT0woZHJtX2JyaWRnZV9jaGFpbl9kaXNhYmxlKTsKPiAgCj4gQEAgLTI3NCwx MyArMjk0LDE2IEBAIEVYUE9SVF9TWU1CT0woZHJtX2JyaWRnZV9jaGFpbl9kaXNhYmxlKTsKPiAg ICovCj4gIHZvaWQgZHJtX2JyaWRnZV9jaGFpbl9wb3N0X2Rpc2FibGUoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSkKPiAgewo+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwo+ICsKPiAg CWlmICghYnJpZGdlKQo+ICAJCXJldHVybjsKPiAgCj4gLQlpZiAoYnJpZGdlLT5mdW5jcy0+cG9z dF9kaXNhYmxlKQo+IC0JCWJyaWRnZS0+ZnVuY3MtPnBvc3RfZGlzYWJsZShicmlkZ2UpOwo+IC0K PiAtCWRybV9icmlkZ2VfY2hhaW5fcG9zdF9kaXNhYmxlKGJyaWRnZS0+bmV4dCk7Cj4gKwllbmNv ZGVyID0gYnJpZGdlLT5lbmNvZGVyOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKGJyaWRn ZSwgJmVuY29kZXItPmJyaWRnZV9jaGFpbiwgY2hhaW5fbm9kZSkgewo+ICsJCWlmIChicmlkZ2Ut PmZ1bmNzLT5wb3N0X2Rpc2FibGUpCj4gKwkJCWJyaWRnZS0+ZnVuY3MtPnBvc3RfZGlzYWJsZShi cmlkZ2UpOwo+ICsJfQo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2JyaWRnZV9jaGFpbl9wb3N0 X2Rpc2FibGUpOwo+ICAKPiBAQCAtMzAwLDEzICszMjMsMTYgQEAgdm9pZCBkcm1fYnJpZGdlX2No YWluX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gIAkJCSAgICAgICBjb25z dCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiAgCQkJICAgICAgIGNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQo+ICB7Cj4gKwlzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXI7Cj4gKwo+ICAJaWYgKCFicmlkZ2UpCj4gIAkJcmV0dXJuOwo+ICAKPiAt CWlmIChicmlkZ2UtPmZ1bmNzLT5tb2RlX3NldCkKPiAtCQlicmlkZ2UtPmZ1bmNzLT5tb2RlX3Nl dChicmlkZ2UsIG1vZGUsIGFkanVzdGVkX21vZGUpOwo+IC0KPiAtCWRybV9icmlkZ2VfY2hhaW5f bW9kZV9zZXQoYnJpZGdlLT5uZXh0LCBtb2RlLCBhZGp1c3RlZF9tb2RlKTsKPiArCWVuY29kZXIg PSBicmlkZ2UtPmVuY29kZXI7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20oYnJpZGdlLCAm ZW5jb2Rlci0+YnJpZGdlX2NoYWluLCBjaGFpbl9ub2RlKSB7Cj4gKwkJaWYgKGJyaWRnZS0+ZnVu Y3MtPm1vZGVfc2V0KQo+ICsJCQlicmlkZ2UtPmZ1bmNzLT5tb2RlX3NldChicmlkZ2UsIG1vZGUs IGFkanVzdGVkX21vZGUpOwo+ICsJfQo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2JyaWRnZV9j aGFpbl9tb2RlX3NldCk7Cj4gIAo+IEBAIC0zMjMsMTMgKzM0OSwxNyBAQCBFWFBPUlRfU1lNQk9M KGRybV9icmlkZ2VfY2hhaW5fbW9kZV9zZXQpOwo+ICAgKi8KPiAgdm9pZCBkcm1fYnJpZGdlX2No YWluX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiAgewo+ICsJc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyOwo+ICsJc3RydWN0IGRybV9icmlkZ2UgKml0ZXI7CgpZb3Ug Y291bGQgcmV1c2UgdGhlIGJyaWRnZSBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBkZWNsYXJpbmcgYSBs b2NhbAp2YXJpYWJsZSwgdGhlIHNhbWUgd2F5IHlvdSBkbyBpbiBkcm1fYXRvbWljX2JyaWRnZV9j aGFpbl9lbmFibGUoKS4KCj4gKwo+ICAJaWYgKCFicmlkZ2UpCj4gIAkJcmV0dXJuOwo+ICAKPiAt CWRybV9icmlkZ2VfY2hhaW5fcHJlX2VuYWJsZShicmlkZ2UtPm5leHQpOwo+IC0KPiAtCWlmIChi cmlkZ2UtPmZ1bmNzLT5wcmVfZW5hYmxlKQo+IC0JCWJyaWRnZS0+ZnVuY3MtPnByZV9lbmFibGUo YnJpZGdlKTsKPiArCWVuY29kZXIgPSBicmlkZ2UtPmVuY29kZXI7Cj4gKwlsaXN0X2Zvcl9lYWNo X2VudHJ5X3JldmVyc2UoaXRlciwgJmVuY29kZXItPmJyaWRnZV9jaGFpbiwgY2hhaW5fbm9kZSkg ewo+ICsJCWlmIChpdGVyLT5mdW5jcy0+cHJlX2VuYWJsZSkKPiArCQkJaXRlci0+ZnVuY3MtPnBy ZV9lbmFibGUoaXRlcik7CgpPciBhcmUgeW91IG1pc3NpbmcgdGhlIGl0ZXIgPT0gYnJpZGdlIGNo ZWNrID8KCj4gKwl9Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTChkcm1fYnJpZGdlX2NoYWluX3ByZV9l bmFibGUpOwo+ICAKPiBAQCAtMzQ1LDEzICszNzUsMTYgQEAgRVhQT1JUX1NZTUJPTChkcm1fYnJp ZGdlX2NoYWluX3ByZV9lbmFibGUpOwo+ICAgKi8KPiAgdm9pZCBkcm1fYnJpZGdlX2NoYWluX2Vu YWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICB7Cj4gKwlzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXI7Cj4gKwo+ICAJaWYgKCFicmlkZ2UpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWlm IChicmlkZ2UtPmZ1bmNzLT5lbmFibGUpCj4gLQkJYnJpZGdlLT5mdW5jcy0+ZW5hYmxlKGJyaWRn ZSk7Cj4gLQo+IC0JZHJtX2JyaWRnZV9jaGFpbl9lbmFibGUoYnJpZGdlLT5uZXh0KTsKPiArCWVu Y29kZXIgPSBicmlkZ2UtPmVuY29kZXI7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20oYnJp ZGdlLCAmZW5jb2Rlci0+YnJpZGdlX2NoYWluLCBjaGFpbl9ub2RlKSB7Cj4gKwkJaWYgKGJyaWRn ZS0+ZnVuY3MtPmVuYWJsZSkKPiArCQkJYnJpZGdlLT5mdW5jcy0+ZW5hYmxlKGJyaWRnZSk7Cj4g Kwl9Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTChkcm1fYnJpZGdlX2NoYWluX2VuYWJsZSk7Cj4gIAo+ IEBAIC0zNzAsMTUgKzQwMywyMyBAQCBFWFBPUlRfU1lNQk9MKGRybV9icmlkZ2VfY2hhaW5fZW5h YmxlKTsKPiAgdm9pZCBkcm1fYXRvbWljX2JyaWRnZV9jaGFpbl9kaXNhYmxlKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UsCj4gIAkJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSkKPiAgewo+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwo+ICsJc3RydWN0IGRybV9i cmlkZ2UgKml0ZXI7Cj4gKwo+ICAJaWYgKCFicmlkZ2UpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWRy bV9hdG9taWNfYnJpZGdlX2NoYWluX2Rpc2FibGUoYnJpZGdlLT5uZXh0LCBzdGF0ZSk7Cj4gKwll bmNvZGVyID0gYnJpZGdlLT5lbmNvZGVyOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNl KGl0ZXIsICZlbmNvZGVyLT5icmlkZ2VfY2hhaW4sCj4gKwkJCQkgICAgY2hhaW5fbm9kZSkgewoK VGhpcyBjYW4gaG9sZCBvbiBhIHNpbmdsZSBsaW5lLgoKPiArCQlpZiAoaXRlci0+ZnVuY3MtPmF0 b21pY19kaXNhYmxlKQo+ICsJCQlpdGVyLT5mdW5jcy0+YXRvbWljX2Rpc2FibGUoaXRlciwgc3Rh dGUpOwo+ICsJCWVsc2UgaWYgKGl0ZXItPmZ1bmNzLT5kaXNhYmxlKQo+ICsJCQlpdGVyLT5mdW5j cy0+ZGlzYWJsZShpdGVyKTsKPiAgCj4gLQlpZiAoYnJpZGdlLT5mdW5jcy0+YXRvbWljX2Rpc2Fi bGUpCj4gLQkJYnJpZGdlLT5mdW5jcy0+YXRvbWljX2Rpc2FibGUoYnJpZGdlLCBzdGF0ZSk7Cj4g LQllbHNlIGlmIChicmlkZ2UtPmZ1bmNzLT5kaXNhYmxlKQo+IC0JCWJyaWRnZS0+ZnVuY3MtPmRp c2FibGUoYnJpZGdlKTsKPiArCQlpZiAoaXRlciA9PSBicmlkZ2UpCj4gKwkJCWJyZWFrOwo+ICsJ fQo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19icmlkZ2VfY2hhaW5fZGlzYWJsZSk7 Cj4gIAo+IEBAIC0zOTgsMTUgKzQzOSwxOSBAQCBFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfYnJp ZGdlX2NoYWluX2Rpc2FibGUpOwo+ICB2b2lkIGRybV9hdG9taWNfYnJpZGdlX2NoYWluX3Bvc3Rf ZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICAJCQkJCSAgc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlKQo+ICB7Cj4gKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7 Cj4gKwo+ICAJaWYgKCFicmlkZ2UpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWlmIChicmlkZ2UtPmZ1 bmNzLT5hdG9taWNfcG9zdF9kaXNhYmxlKQo+IC0JCWJyaWRnZS0+ZnVuY3MtPmF0b21pY19wb3N0 X2Rpc2FibGUoYnJpZGdlLCBzdGF0ZSk7Cj4gLQllbHNlIGlmIChicmlkZ2UtPmZ1bmNzLT5wb3N0 X2Rpc2FibGUpCj4gLQkJYnJpZGdlLT5mdW5jcy0+cG9zdF9kaXNhYmxlKGJyaWRnZSk7Cj4gLQo+ IC0JZHJtX2F0b21pY19icmlkZ2VfY2hhaW5fcG9zdF9kaXNhYmxlKGJyaWRnZS0+bmV4dCwgc3Rh dGUpOwo+ICsJZW5jb2RlciA9IGJyaWRnZS0+ZW5jb2RlcjsKPiArCWxpc3RfZm9yX2VhY2hfZW50 cnlfZnJvbShicmlkZ2UsICZlbmNvZGVyLT5icmlkZ2VfY2hhaW4sCj4gKwkJCQkgY2hhaW5fbm9k ZSkgewoKVGhpcyB0b28gY2FuIGhvbGQgb24gYSBzaW5nbGUgbGluZS4KCj4gKwkJaWYgKGJyaWRn ZS0+ZnVuY3MtPmF0b21pY19wb3N0X2Rpc2FibGUpCj4gKwkJCWJyaWRnZS0+ZnVuY3MtPmF0b21p Y19wb3N0X2Rpc2FibGUoYnJpZGdlLCBzdGF0ZSk7Cj4gKwkJZWxzZSBpZiAoYnJpZGdlLT5mdW5j cy0+cG9zdF9kaXNhYmxlKQo+ICsJCQlicmlkZ2UtPmZ1bmNzLT5wb3N0X2Rpc2FibGUoYnJpZGdl KTsKPiArCX0KPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfYnJpZGdlX2NoYWluX3Bv c3RfZGlzYWJsZSk7Cj4gIAo+IEBAIC00MjYsMTUgKzQ3MSwyMyBAQCBFWFBPUlRfU1lNQk9MKGRy bV9hdG9taWNfYnJpZGdlX2NoYWluX3Bvc3RfZGlzYWJsZSk7Cj4gIHZvaWQgZHJtX2F0b21pY19i cmlkZ2VfY2hhaW5fcHJlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICAJCQkJ CXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiAgewo+ICsJc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyOwo+ICsJc3RydWN0IGRybV9icmlkZ2UgKml0ZXI7Cj4gKwo+ICAJaWYgKCFi cmlkZ2UpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCWRybV9hdG9taWNfYnJpZGdlX2NoYWluX3ByZV9l bmFibGUoYnJpZGdlLT5uZXh0LCBzdGF0ZSk7Cj4gKwllbmNvZGVyID0gYnJpZGdlLT5lbmNvZGVy Owo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGl0ZXIsICZicmlkZ2UtPmVuY29kZXIt PmJyaWRnZV9jaGFpbiwKPiArCQkJCSAgICBjaGFpbl9ub2RlKSB7CgpBcyBOZWlsIHBvaW50ZWQg b3V0LCAmZW5jb2Rlci0+YnJpZGdlX2NoYWluLgoKPiArCQlpZiAoaXRlci0+ZnVuY3MtPmF0b21p Y19wcmVfZW5hYmxlKQo+ICsJCQlpdGVyLT5mdW5jcy0+YXRvbWljX3ByZV9lbmFibGUoaXRlciwg c3RhdGUpOwo+ICsJCWVsc2UgaWYgKGl0ZXItPmZ1bmNzLT5wcmVfZW5hYmxlKQo+ICsJCQlpdGVy LT5mdW5jcy0+cHJlX2VuYWJsZShpdGVyKTsKPiAgCj4gLQlpZiAoYnJpZGdlLT5mdW5jcy0+YXRv bWljX3ByZV9lbmFibGUpCj4gLQkJYnJpZGdlLT5mdW5jcy0+YXRvbWljX3ByZV9lbmFibGUoYnJp ZGdlLCBzdGF0ZSk7Cj4gLQllbHNlIGlmIChicmlkZ2UtPmZ1bmNzLT5wcmVfZW5hYmxlKQo+IC0J CWJyaWRnZS0+ZnVuY3MtPnByZV9lbmFibGUoYnJpZGdlKTsKPiArCQlpZiAoaXRlciA9PSBicmlk Z2UpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19i cmlkZ2VfY2hhaW5fcHJlX2VuYWJsZSk7Cj4gIAo+IEBAIC00NTMsMTUgKzUwNiwxOSBAQCBFWFBP UlRfU1lNQk9MKGRybV9hdG9taWNfYnJpZGdlX2NoYWluX3ByZV9lbmFibGUpOwo+ICB2b2lkIGRy bV9hdG9taWNfYnJpZGdlX2NoYWluX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ ICAJCQkJICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiAgewo+ICsJc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyOwo+ICsKPiAgCWlmICghYnJpZGdlKQo+ICAJCXJldHVybjsK PiAgCj4gLQlpZiAoYnJpZGdlLT5mdW5jcy0+YXRvbWljX2VuYWJsZSkKPiAtCQlicmlkZ2UtPmZ1 bmNzLT5hdG9taWNfZW5hYmxlKGJyaWRnZSwgc3RhdGUpOwo+IC0JZWxzZSBpZiAoYnJpZGdlLT5m dW5jcy0+ZW5hYmxlKQo+IC0JCWJyaWRnZS0+ZnVuY3MtPmVuYWJsZShicmlkZ2UpOwo+IC0KPiAt CWRybV9hdG9taWNfYnJpZGdlX2NoYWluX2VuYWJsZShicmlkZ2UtPm5leHQsIHN0YXRlKTsKPiAr CWVuY29kZXIgPSBicmlkZ2UtPmVuY29kZXI7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20o YnJpZGdlLCAmYnJpZGdlLT5lbmNvZGVyLT5icmlkZ2VfY2hhaW4sCgpIZXJlIHRvby4KCkJ5IHRo ZSB3YXksIHNob3VsZCB0aGVzZSBicmlkZ2UgY2hhaW4gZnVuY3Rpb25zIHRha2UgYW4gZW5jb2Rl ciBpbnN0ZWFkCm9mIGEgYnJpZGdlIChpbiBhIHNlcGFyYXRlIHBhdGNoIHNlcmllcyBwcm9iYWJs eSkgPwoKPiArCQkJCSBjaGFpbl9ub2RlKSB7Cj4gKwkJaWYgKGJyaWRnZS0+ZnVuY3MtPmF0b21p Y19lbmFibGUpCj4gKwkJCWJyaWRnZS0+ZnVuY3MtPmF0b21pY19lbmFibGUoYnJpZGdlLCBzdGF0 ZSk7Cj4gKwkJZWxzZSBpZiAoYnJpZGdlLT5mdW5jcy0+ZW5hYmxlKQo+ICsJCQlicmlkZ2UtPmZ1 bmNzLT5lbmFibGUoYnJpZGdlKTsKPiArCX0KPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9hdG9t aWNfYnJpZGdlX2NoYWluX2VuYWJsZSk7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vZHJtX2VuY29kZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZW5jb2Rlci5jCj4gaW5kZXgg NGZlOWU3MjNlMjI3Li5lNTU1MjgxZjQzZDQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2RybV9lbmNvZGVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VuY29kZXIuYwo+IEBA IC0xNDAsNiArMTQwLDcgQEAgaW50IGRybV9lbmNvZGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiAgCQlnb3RvIG91dF9wdXQ7Cj4gIAl9Cj4gIAo+ICsJSU5JVF9MSVNUX0hFQUQoJmVu Y29kZXItPmJyaWRnZV9jaGFpbik7Cj4gIAlsaXN0X2FkZF90YWlsKCZlbmNvZGVyLT5oZWFkLCAm ZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QpOwo+ICAJZW5jb2Rlci0+aW5kZXggPSBkZXYt Pm1vZGVfY29uZmlnLm51bV9lbmNvZGVyKys7Cj4gIAo+IEBAIC0xNjAsMjMgKzE2MSwxNiBAQCBF WFBPUlRfU1lNQk9MKGRybV9lbmNvZGVyX2luaXQpOwo+ICB2b2lkIGRybV9lbmNvZGVyX2NsZWFu dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gZW5jb2Rlci0+ZGV2Owo+ICsJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwgKm5l eHQ7Cj4gIAo+ICAJLyogTm90ZSB0aGF0IHRoZSBlbmNvZGVyX2xpc3QgaXMgY29uc2lkZXJlZCB0 byBiZSBzdGF0aWM7IHNob3VsZCB3ZQo+ICAJICogcmVtb3ZlIHRoZSBkcm1fZW5jb2RlciBhdCBy dW50aW1lIHdlIHdvdWxkIGhhdmUgdG8gZGVjcmVtZW50IGFsbAo+ICAJICogdGhlIGluZGljZXMg b24gdGhlIGRybV9lbmNvZGVyIGFmdGVyIHVzIGluIHRoZSBlbmNvZGVyX2xpc3QuCj4gIAkgKi8K PiAgCj4gLQlpZiAoZW5jb2Rlci0+YnJpZGdlKSB7Cj4gLQkJc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZTsKPiAtCQlzdHJ1Y3QgZHJtX2JyaWRnZSAqbmV4dDsKPiAtCj4gLQkJYnJpZGdlID0gZHJt X2JyaWRnZV9jaGFpbl9nZXRfZmlyc3RfYnJpZGdlKGVuY29kZXIpOwo+IC0JCXdoaWxlIChicmlk Z2UpIHsKPiAtCQkJbmV4dCA9IGJyaWRnZS0+bmV4dDsKPiAtCQkJZHJtX2JyaWRnZV9kZXRhY2go YnJpZGdlKTsKPiAtCQkJYnJpZGdlID0gbmV4dDsKPiAtCQl9Cj4gLQl9Cj4gKwlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoYnJpZGdlLCBuZXh0LCAmZW5jb2Rlci0+YnJpZGdlX2NoYWluLAo+ICsJ CQkJIGNoYWluX25vZGUpCj4gKwkJZHJtX2JyaWRnZV9kZXRhY2goYnJpZGdlKTsKPiAgCj4gIAlk cm1fbW9kZV9vYmplY3RfdW5yZWdpc3RlcihkZXYsICZlbmNvZGVyLT5iYXNlKTsKPiAgCWtmcmVl KGVuY29kZXItPm5hbWUpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fYnJpZGdlLmgg Yi9pbmNsdWRlL2RybS9kcm1fYnJpZGdlLmgKPiBpbmRleCAyN2VlZjYzY2UwZmYuLjNhYjE2Yzk1 ZTU5ZSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fYnJpZGdlLmgKPiArKysgYi9pbmNs dWRlL2RybS9kcm1fYnJpZGdlLmgKPiBAQCAtMzg0LDggKzM4NCw4IEBAIHN0cnVjdCBkcm1fYnJp ZGdlIHsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4gIAkvKiogQGVuY29kZXI6IGVuY29k ZXIgdG8gd2hpY2ggdGhpcyBicmlkZ2UgaXMgY29ubmVjdGVkICovCj4gIAlzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXI7Cj4gLQkvKiogQG5leHQ6IHRoZSBuZXh0IGJyaWRnZSBpbiB0aGUgZW5j b2RlciBjaGFpbiAqLwo+IC0Jc3RydWN0IGRybV9icmlkZ2UgKm5leHQ7Cj4gKwkvKiogQGNoYWlu X25vZGU6IHVzZWQgdG8gZm9ybSBhIGJyaWRnZSBjaGFpbiAqLwo+ICsJc3RydWN0IGxpc3RfaGVh ZCBjaGFpbl9ub2RlOwo+ICAjaWZkZWYgQ09ORklHX09GCj4gIAkvKiogQG9mX25vZGU6IGRldmlj ZSBub2RlIHBvaW50ZXIgdG8gdGhlIGJyaWRnZSAqLwo+ICAJc3RydWN0IGRldmljZV9ub2RlICpv Zl9ub2RlOwo+IEBAIC00MjAsNyArNDIwLDEwIEBAIGludCBkcm1fYnJpZGdlX2F0dGFjaChzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gIHN0 YXRpYyBpbmxpbmUgc3RydWN0IGRybV9icmlkZ2UgKgo+ICBkcm1fYnJpZGdlX2NoYWluX2dldF9u ZXh0X2JyaWRnZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICB7Cj4gLQlyZXR1cm4gYnJp ZGdlLT5uZXh0Owo+ICsJaWYgKGxpc3RfaXNfbGFzdCgmYnJpZGdlLT5jaGFpbl9ub2RlLCAmYnJp ZGdlLT5lbmNvZGVyLT5icmlkZ2VfY2hhaW4pKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCXJl dHVybiBsaXN0X25leHRfZW50cnkoYnJpZGdlLCBjaGFpbl9ub2RlKTsKCkEgbGlzdF9uZXh0X2Vu dHJ5X29yX251bGwoKSB3b3VsZCBiZSB1c2VmdWwgaW4gbGlzdC5oIEkgdGhpbmsgKG9mIGNvdXJz ZQpub3QgYXMgYSBtYW5kYXRvcnkgcGFydCBvZiB0aGlzIHNlcmllcyA6LSkpLgoKPiAgfQo+ICAK PiAgLyoqCj4gQEAgLTQzNCw3ICs0MzcsOCBAQCBkcm1fYnJpZGdlX2NoYWluX2dldF9uZXh0X2Jy aWRnZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICBzdGF0aWMgaW5saW5lIHN0cnVjdCBk cm1fYnJpZGdlICoKPiAgZHJtX2JyaWRnZV9jaGFpbl9nZXRfZmlyc3RfYnJpZGdlKHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcikKPiAgewo+IC0JcmV0dXJuIGVuY29kZXItPmJyaWRnZTsKPiAr CXJldHVybiBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmVuY29kZXItPmJyaWRnZV9jaGFpbiwK PiArCQkJCQlzdHJ1Y3QgZHJtX2JyaWRnZSwgY2hhaW5fbm9kZSk7Cj4gIH0KPiAgCj4gIGJvb2wg ZHJtX2JyaWRnZV9jaGFpbl9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4g ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9lbmNvZGVyLmggYi9pbmNsdWRlL2RybS9kcm1f ZW5jb2Rlci5oCj4gaW5kZXggZjA2MTY0ZjQ0ZWZlLi45YjNkZGUxNzdjODEgMTAwNjQ0Cj4gLS0t IGEvaW5jbHVkZS9kcm0vZHJtX2VuY29kZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9lbmNv ZGVyLmgKPiBAQCAtMTcyLDcgKzE3MiwxNCBAQCBzdHJ1Y3QgZHJtX2VuY29kZXIgewo+ICAJICog JmRybV9jb25uZWN0b3Jfc3RhdGUuY3J0Yy4KPiAgCSAqLwo+ICAJc3RydWN0IGRybV9jcnRjICpj cnRjOwo+IC0Jc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKPiArCj4gKwkvKioKPiArCSAqIEBi cmlkZ2VfY2hhaW46IEJyaWRnZXMgYXR0YWNoZWQgdG8gdGhpcyBlbmNvZGVyLiBUaGUgZmlyc3Qg ZW50cnkgb2YKPiArCSAqIHRoaXMgbGlzdCBpcyBhbHdheXMgJmRybV9lbmNvZGVyLmJyaWRnZS4g SXQgbWF5IGJlIGZvbGxvd2VkIGJ5IG90aGVyCgpUaGVyZSdzIG5vICZkcm1fZW5jb2Rlci5icmlk Z2UgYW55bW9yZSA6LSkKCldpdGggYWxsIHRob3NlIHNtYWxsIGlzc3VlcyBmaXhlZCwKClJldmll d2VkLWJ5OiBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5j b20+Cgo+ICsJICogYnJpZGdlIGVudGl0aWVzLgo+ICsJICovCj4gKwlzdHJ1Y3QgbGlzdF9oZWFk IGJyaWRnZV9jaGFpbjsKPiArCj4gIAljb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgKmZ1 bmNzOwo+ICAJY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqaGVscGVyX3By aXZhdGU7Cj4gIH07CgotLSAKUmVnYXJkcywKCkxhdXJlbnQgUGluY2hhcnQKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs