From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 7/9] drm/xen-front: Implement KMS/connector handling Date: Mon, 5 Mar 2018 10:23:53 +0100 Message-ID: <20180305092353.GI22212__39135.3394989439$1520241770$gmane$org@phenom.ffwll.local> References: <1519200222-20623-1-git-send-email-andr2000@gmail.com> <1519200222-20623-8-git-send-email-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1esmLg-0003cf-3r for xen-devel@lists.xenproject.org; Mon, 05 Mar 2018 09:24:00 +0000 Received: by mail-wm0-x242.google.com with SMTP id h21so14334695wmd.1 for ; Mon, 05 Mar 2018 01:23:57 -0800 (PST) Content-Disposition: inline In-Reply-To: <1519200222-20623-8-git-send-email-andr2000@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Oleksandr Andrushchenko Cc: jgross@suse.com, airlied@linux.ie, gustavo@padovan.org, Oleksandr Andrushchenko , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, seanpaul@chromium.org, daniel.vetter@intel.com, xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBGZWIgMjEsIDIwMTggYXQgMTA6MDM6NDBBTSArMDIwMCwgT2xla3NhbmRyIEFuZHJ1 c2hjaGVua28gd3JvdGU6Cj4gRnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5k cl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+IAo+IEltcGxlbWVudCBrZXJuZWwgbW9kZXNldGlp bmcvY29ubmVjdG9yIGhhbmRsaW5nIHVzaW5nCj4gRFJNIHNpbXBsZSBLTVMgaGVscGVyIHBpcGVs aW5lOgo+IAo+IC0gaW1wbGVtZW50IEtNUyBwYXJ0IG9mIHRoZSBkcml2ZXIgd2l0aCB0aGUgaGVs cCBvZiBEUk0KPiAgIHNpbXBsZSBwaXBlcGxpbmUgaGVscGVyIHdoaWNoIGlzIHBvc3NpYmxlIGR1 ZSB0byB0aGUgZmFjdAo+ICAgdGhhdCB0aGUgcGFyYS12aXJ0dWFsaXplZCBkcml2ZXIgb25seSBz dXBwb3J0cyBhIHNpbmdsZQo+ICAgKHByaW1hcnkpIHBsYW5lOgo+ICAgLSBpbml0aWFsaXplIGNv bm5lY3RvcnMgYWNjb3JkaW5nIHRvIFhlblN0b3JlIGNvbmZpZ3VyYXRpb24KPiAgIC0gaGFuZGxl IGZyYW1lIGRvbmUgZXZlbnRzIGZyb20gdGhlIGJhY2tlbmQKPiAgIC0gZ2VuZXJhdGUgdmJsYW5r IGV2ZW50cwo+ICAgLSBjcmVhdGUgYW5kIGRlc3Ryb3kgZnJhbWUgYnVmZmVycyBhbmQgcHJvcGFn YXRlIHRob3NlCj4gICAgIHRvIHRoZSBiYWNrZW5kCj4gICAtIHByb3BhZ2F0ZSBzZXQvcmVzZXQg bW9kZSBjb25maWd1cmF0aW9uIHRvIHRoZSBiYWNrZW5kIG9uIGRpc3BsYXkKPiAgICAgZW5hYmxl L2Rpc2FibGUgY2FsbGJhY2tzCj4gICAtIHNlbmQgcGFnZSBmbGlwIHJlcXVlc3QgdG8gdGhlIGJh Y2tlbmQgYW5kIGltcGxlbWVudCBsb2dpYyBmb3IKPiAgICAgcmVwb3J0aW5nIGJhY2tlbmQgSU8g ZXJyb3JzIG9uIHByZXBhcmUgZmIgY2FsbGJhY2sKPiAKPiAtIGltcGxlbWVudCB2aXJ0dWFsIGNv bm5lY3RvciBoYW5kbGluZzoKPiAgIC0gc3VwcG9ydCBvbmx5IHBpeGVsIGZvcm1hdHMgc3VpdGFi bGUgZm9yIHNpbmdsZSBwbGFuZSBtb2Rlcwo+ICAgLSBtYWtlIHN1cmUgdGhlIGNvbm5lY3RvciBp cyBhbHdheXMgY29ubmVjdGVkCj4gICAtIHN1cHBvcnQgYSBzaW5nbGUgdmlkZW8gbW9kZSBhcyBw ZXIgcGFyYS12aXJ0dWFsaXplZCBkcml2ZXIKPiAgICAgY29uZmlndXJhdGlvbgo+IAo+IFNpZ25l ZC1vZmYtYnk6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5r b0BlcGFtLmNvbT4KCkkgdGhpbmsgb25jZSB5b3UndmUgcmVtb3ZlZCB0aGUgbWlkbGF5ZXIgaW4g dGhlIHByZXZpb3VzIHBhdGNoIGl0IHdvdWxkCm1ha2VzIHNlbnNlIHRvIG1lcmdlIHRoZSAyIHBh dGNoZXMgaW50byAxLgoKQnVuY2ggbW9yZSBjb21tZW50cyBiZWxvdy4KLURhbmllbAoKPiAtLS0K PiAgZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMiArCj4gIGRy aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jb25uLmMgfCAxMjUgKysrKysrKysrKysr Kwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY29ubi5oIHwgIDM1ICsrKysK PiAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Rydi5jICB8ICAxNSArKwo+ICBk cml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZHJ2LmggIHwgIDEyICsrCj4gIGRyaXZl cnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMuYyAgfCAyOTkgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfa21z LmggIHwgIDMwICsrKysKPiAgNyBmaWxlcyBjaGFuZ2VkLCA1MTggaW5zZXJ0aW9ucygrKQo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Nvbm4u Ywo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250 X2Nvbm4uaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJt X2Zyb250X2ttcy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hl bl9kcm1fZnJvbnRfa21zLmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi9N YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS94ZW4vTWFrZWZpbGUKPiBpbmRleCBkMzA2ODIwMjU5 MGYuLjRmY2IwZGExYTljNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGVuL01ha2Vm aWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZQo+IEBAIC0yLDYgKzIsOCBA QAo+ICAKPiAgZHJtX3hlbl9mcm9udC1vYmpzIDo9IHhlbl9kcm1fZnJvbnQubyBcCj4gIAkJICAg ICAgeGVuX2RybV9mcm9udF9kcnYubyBcCj4gKwkJICAgICAgeGVuX2RybV9mcm9udF9rbXMubyBc Cj4gKwkJICAgICAgeGVuX2RybV9mcm9udF9jb25uLm8gXAo+ICAJCSAgICAgIHhlbl9kcm1fZnJv bnRfZXZ0Y2hubC5vIFwKPiAgCQkgICAgICB4ZW5fZHJtX2Zyb250X3NoYnVmLm8gXAo+ICAJCSAg ICAgIHhlbl9kcm1fZnJvbnRfY2ZnLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hl bi94ZW5fZHJtX2Zyb250X2Nvbm4uYyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9u dF9jb25uLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZDk5 ODZhMmUxYTNiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVu X2RybV9mcm9udF9jb25uLmMKPiBAQCAtMCwwICsxLDEyNSBAQAo+ICsvKgo+ICsgKiAgWGVuIHBh cmEtdmlydHVhbCBEUk0gZGV2aWNlCj4gKyAqCj4gKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQo+ICsgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4gKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKPiArICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz Lgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgo+ ICsgKgo+ICsgKiBBdXRob3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5k cnVzaGNoZW5rb0BlcGFtLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gKwo+ICsj aW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4gKwo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9u dF9jb25uLmgiCj4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2Rydi5oIgo+ICsKPiArc3RhdGlj IHN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAqCj4gK3RvX3hlbl9kcm1fcGlwZWxp bmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJcmV0dXJuIGNvbnRh aW5lcl9vZihjb25uZWN0b3IsIHN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSwgY29u bik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCB1aW50MzJfdCBwbGFuZV9mb3JtYXRzW10gPSB7 Cj4gKwlEUk1fRk9STUFUX1JHQjU2NSwKPiArCURSTV9GT1JNQVRfUkdCODg4LAo+ICsJRFJNX0ZP Uk1BVF9YUkdCODg4OCwKPiArCURSTV9GT1JNQVRfQVJHQjg4ODgsCj4gKwlEUk1fRk9STUFUX1hS R0I0NDQ0LAo+ICsJRFJNX0ZPUk1BVF9BUkdCNDQ0NCwKPiArCURSTV9GT1JNQVRfWFJHQjE1NTUs Cj4gKwlEUk1fRk9STUFUX0FSR0IxNTU1LAo+ICt9Owo+ICsKPiArY29uc3QgdWludDMyX3QgKnhl bl9kcm1fZnJvbnRfY29ubl9nZXRfZm9ybWF0cyhpbnQgKmZvcm1hdF9jb3VudCkKPiArewo+ICsJ KmZvcm1hdF9jb3VudCA9IEFSUkFZX1NJWkUocGxhbmVfZm9ybWF0cyk7Cj4gKwlyZXR1cm4gcGxh bmVfZm9ybWF0czsKPiArfQo+ICsKPiArc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMg Y29ubmVjdG9yX2RldGVjdCgKPiArCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBi b29sIGZvcmNlKQo+ICt7Cj4gKwlpZiAoZHJtX2Rldl9pc191bnBsdWdnZWQoY29ubmVjdG9yLT5k ZXYpKQo+ICsJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPiArCj4gKwly ZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cj4gK30KPiArCj4gKyNkZWZpbmUgWEVO X0RSTV9OVU1fVklERU9fTU9ERVMJCTEKPiArI2RlZmluZSBYRU5fRFJNX0NSVENfVlJFRlJFU0hf SFoJNjAKPiArCj4gK3N0YXRpYyBpbnQgY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlw ZWxpbmUgKnBpcGVsaW5lID0KPiArCQl0b194ZW5fZHJtX3BpcGVsaW5lKGNvbm5lY3Rvcik7Cj4g KwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKPiArCXN0cnVjdCB2aWRlb21vZGUgdmlk ZW9tb2RlOwo+ICsJaW50IHdpZHRoLCBoZWlnaHQ7Cj4gKwo+ICsJbW9kZSA9IGRybV9tb2RlX2Ny ZWF0ZShjb25uZWN0b3ItPmRldik7Cj4gKwlpZiAoIW1vZGUpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ ICsJbWVtc2V0KCZ2aWRlb21vZGUsIDAsIHNpemVvZih2aWRlb21vZGUpKTsKPiArCXZpZGVvbW9k ZS5oYWN0aXZlID0gcGlwZWxpbmUtPndpZHRoOwo+ICsJdmlkZW9tb2RlLnZhY3RpdmUgPSBwaXBl bGluZS0+aGVpZ2h0Owo+ICsJd2lkdGggPSB2aWRlb21vZGUuaGFjdGl2ZSArIHZpZGVvbW9kZS5o ZnJvbnRfcG9yY2ggKwo+ICsJCXZpZGVvbW9kZS5oYmFja19wb3JjaCArIHZpZGVvbW9kZS5oc3lu Y19sZW47Cj4gKwloZWlnaHQgPSB2aWRlb21vZGUudmFjdGl2ZSArIHZpZGVvbW9kZS52ZnJvbnRf cG9yY2ggKwo+ICsJCXZpZGVvbW9kZS52YmFja19wb3JjaCArIHZpZGVvbW9kZS52c3luY19sZW47 Cj4gKwl2aWRlb21vZGUucGl4ZWxjbG9jayA9IHdpZHRoICogaGVpZ2h0ICogWEVOX0RSTV9DUlRD X1ZSRUZSRVNIX0haOwo+ICsJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEIHwg RFJNX01PREVfVFlQRV9EUklWRVI7Cj4gKwo+ICsJZHJtX2Rpc3BsYXlfbW9kZV9mcm9tX3ZpZGVv bW9kZSgmdmlkZW9tb2RlLCBtb2RlKTsKPiArCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9y LCBtb2RlKTsKPiArCXJldHVybiBYRU5fRFJNX05VTV9WSURFT19NT0RFUzsKPiArfQo+ICsKPiAr c3RhdGljIGludCBjb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAo+ICsJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ICt7Cj4gKwlzdHJ1 Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUgKnBpcGVsaW5lID0KPiArCQkJdG9feGVuX2Ry bV9waXBlbGluZShjb25uZWN0b3IpOwo+ICsKPiArCWlmIChtb2RlLT5oZGlzcGxheSAhPSBwaXBl bGluZS0+d2lkdGgpCj4gKwkJcmV0dXJuIE1PREVfRVJST1I7Cj4gKwo+ICsJaWYgKG1vZGUtPnZk aXNwbGF5ICE9IHBpcGVsaW5lLT5oZWlnaHQpCj4gKwkJcmV0dXJuIE1PREVfRVJST1I7Cj4gKwo+ ICsJcmV0dXJuIE1PREVfT0s7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9oZWxwZXJfZnVuY3MgY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5nZXRf bW9kZXMgPSBjb25uZWN0b3JfZ2V0X21vZGVzLAo+ICsJLm1vZGVfdmFsaWQgPSBjb25uZWN0b3Jf bW9kZV92YWxpZCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9mdW5jcyBjb25uZWN0b3JfZnVuY3MgPSB7Cj4gKwkuZGV0ZWN0ID0gY29ubmVjdG9yX2RldGVj dCwKPiArCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21v ZGVzLAo+ICsJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAsCj4gKwkucmVzZXQgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9z dGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCj4gKwku YXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJv eV9zdGF0ZSwKPiArfTsKPiArCj4gK2ludCB4ZW5fZHJtX2Zyb250X2Nvbm5faW5pdChzdHJ1Y3Qg eGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8sCj4gKwkJc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcikKPiArewo+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3Rv ciwgJmNvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwo+ICsKPiArCXJldHVybiBkcm1fY29ubmVjdG9y X2luaXQoZHJtX2luZm8tPmRybV9kZXYsIGNvbm5lY3RvciwKPiArCQkmY29ubmVjdG9yX2Z1bmNz LCBEUk1fTU9ERV9DT05ORUNUT1JfVklSVFVBTCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Nvbm4uaCBiL2RyaXZlcnMvZ3B1L2RybS94ZW4v eGVuX2RybV9mcm9udF9jb25uLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uNzA4ZTgwZDQ1OTg1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV9mcm9udF9jb25uLmgKPiBAQCAtMCwwICsxLDM1IEBACj4gKy8qCj4g KyAqICBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKPiArICoKPiArICogICBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQo+ICsgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPiArICogICAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiAgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCj4gKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQo+ICsgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEVQQU0gU3lz dGVtcyBJbmMuCj4gKyAqCj4gKyAqIEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9s ZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19Y RU5fRFJNX0ZST05UX0NPTk5fSF8KPiArI2RlZmluZSBfX1hFTl9EUk1fRlJPTlRfQ09OTl9IXwo+ ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4K PiArI2luY2x1ZGUgPGRybS9kcm1fZW5jb2Rlci5oPgo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3dh aXQuaD4KPiArCj4gK3N0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9pbmZvOwo+ICsKPiArY29uc3Qg dWludDMyX3QgKnhlbl9kcm1fZnJvbnRfY29ubl9nZXRfZm9ybWF0cyhpbnQgKmZvcm1hdF9jb3Vu dCk7Cj4gKwo+ICtpbnQgeGVuX2RybV9mcm9udF9jb25uX2luaXQoc3RydWN0IHhlbl9kcm1fZnJv bnRfZHJtX2luZm8gKmRybV9pbmZvLAo+ICsJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpOwo+ICsKPiArI2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9OVF9DT05OX0hfICovCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuYyBiL2RyaXZlcnMv Z3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuYwo+IGluZGV4IGIzNzY0ZDVlZDBmNi4uZTg4 NjJkMjZiYTI3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9u dF9kcnYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuYwo+ IEBAIC0yMyw2ICsyMyw3IEBACj4gICNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250LmgiCj4gICNpbmNs dWRlICJ4ZW5fZHJtX2Zyb250X2NmZy5oIgo+ICAjaW5jbHVkZSAieGVuX2RybV9mcm9udF9kcnYu aCIKPiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfa21zLmgiCj4gIAo+ICBzdGF0aWMgaW50IGR1 bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlscCwKPiAgCQlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCj4gQEAgLTQxLDYgKzQyLDEz IEBAIHN0YXRpYyB2b2lkIGZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ ICBzdGF0aWMgdm9pZCBvbl9mcmFtZV9kb25lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYs Cj4gIAkJaW50IGNvbm5faWR4LCB1aW50NjRfdCBmYl9jb29raWUpCj4gIHsKPiArCXN0cnVjdCB4 ZW5fZHJtX2Zyb250X2RybV9pbmZvICpkcm1faW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOwo+ICsKPiArCWlmICh1bmxpa2VseShjb25uX2lkeCA+PSBkcm1faW5mby0+Y2ZnLT5udW1f Y29ubmVjdG9ycykpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXhlbl9kcm1fZnJvbnRfa21zX29uX2Zy YW1lX2RvbmUoJmRybV9pbmZvLT5waXBlbGluZVtjb25uX2lkeF0sCj4gKwkJCWZiX2Nvb2tpZSk7 Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGxhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQo+IEBAIC0xNTcsNiArMTY1LDEyIEBAIGludCB4ZW5fZHJtX2Zyb250X2Rydl9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICAJCXJldHVybiByZXQ7Cj4gIAl9Cj4gIAo+ICsJ cmV0ID0geGVuX2RybV9mcm9udF9rbXNfaW5pdChkcm1faW5mbyk7Cj4gKwlpZiAocmV0KSB7Cj4g KwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBEUk0vS01TLCByZXQgJWRcbiIsIHJl dCk7Cj4gKwkJZ290byBmYWlsX21vZGVzZXQ7Cj4gKwl9Cj4gKwo+ICAJZGV2LT5pcnFfZW5hYmxl ZCA9IDE7Cj4gIAo+ICAJcmV0ID0gZHJtX2Rldl9yZWdpc3RlcihkZXYsIDApOwo+IEBAIC0xNzIs NiArMTg2LDcgQEAgaW50IHhlbl9kcm1fZnJvbnRfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsCj4gIAo+ICBmYWlsX3JlZ2lzdGVyOgo+ICAJZHJtX2Rldl91bnJlZ2lzdGVy KGRldik7Cj4gK2ZhaWxfbW9kZXNldDoKPiAgCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRldik7 Cj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4v eGVuX2RybV9mcm9udF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9k cnYuaAo+IGluZGV4IGFhYTQ3NjUzNWMxMy4uNTYzMzE4YjE5ZjM0IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuaAo+IEBAIC0yMCwxNCArMjAsMjQgQEAKPiAgI2Rl ZmluZSBfX1hFTl9EUk1fRlJPTlRfRFJWX0hfCj4gIAo+ICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4K PiArI2luY2x1ZGUgPGRybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuaD4KPiAgCj4gICNpbmNsdWRl ICJ4ZW5fZHJtX2Zyb250LmgiCj4gICNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2NmZy5oIgo+ICsj aW5jbHVkZSAieGVuX2RybV9mcm9udF9jb25uLmgiCj4gIAo+ICBzdHJ1Y3QgeGVuX2RybV9mcm9u dF9kcm1fcGlwZWxpbmUgewo+ICAJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9p bmZvOwo+ICAKPiAgCWludCBpbmRleDsKPiArCj4gKwlzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5 X3BpcGUgcGlwZTsKPiArCj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uOwo+ICsJLyogdGhl c2UgYXJlIG9ubHkgZm9yIGNvbm5lY3RvciBtb2RlIGNoZWNraW5nICovCj4gKwlpbnQgd2lkdGgs IGhlaWdodDsKPiArCS8qIGxhc3QgYmFja2VuZCBlcnJvciBzZWVuIG9uIHBhZ2UgZmxpcCAqLwo+ ICsJaW50IHBnZmxpcF9sYXN0X2Vycm9yOwo+ICB9Owo+ICAKPiAgc3RydWN0IHhlbl9kcm1fZnJv bnRfZHJtX2luZm8gewo+IEBAIC0zNSw2ICs0NSw4IEBAIHN0cnVjdCB4ZW5fZHJtX2Zyb250X2Ry bV9pbmZvIHsKPiAgCXN0cnVjdCB4ZW5fZHJtX2Zyb250X29wcyAqZnJvbnRfb3BzOwo+ICAJc3Ry dWN0IGRybV9kZXZpY2UgKmRybV9kZXY7Cj4gIAlzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmcgKmNm ZzsKPiArCj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUgcGlwZWxpbmVbWEVO X0RSTV9GUk9OVF9NQVhfQ1JUQ1NdOwo+ICB9Owo+ICAKPiAgc3RhdGljIGlubGluZSB1aW50NjRf dCB4ZW5fZHJtX2Zyb250X2ZiX3RvX2Nvb2tpZSgKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3hlbi94ZW5fZHJtX2Zyb250X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJt X2Zyb250X2ttcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAu LmFkOTRjMjg4MzVjZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGVu L3hlbl9kcm1fZnJvbnRfa21zLmMKPiBAQCAtMCwwICsxLDI5OSBAQAo+ICsvKgo+ICsgKiAgWGVu IHBhcmEtdmlydHVhbCBEUk0gZGV2aWNlCj4gKyAqCj4gKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICog ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQo+ICsgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4gKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsg KiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKPiArICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5j Lgo+ICsgKgo+ICsgKiBBdXRob3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJf YW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSAieGVuX2RybV9m cm9udF9rbXMuaCIKPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2ZyYW1lYnVm ZmVyX2hlbHBlci5oPgo+ICsKPiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnQuaCIKPiArI2luY2x1 ZGUgInhlbl9kcm1fZnJvbnRfY29ubi5oIgo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9kcnYu aCIKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUgKgo+ICt0 b194ZW5fZHJtX3BpcGVsaW5lKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSkK PiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihwaXBlLCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9k cm1fcGlwZWxpbmUsIHBpcGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBmYl9kZXN0cm95KHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9k cm1faW5mbyAqZHJtX2luZm8gPSBmYi0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlkcm1faW5m by0+ZnJvbnRfb3BzLT5mYl9kZXRhY2goZHJtX2luZm8tPmZyb250X2luZm8sCj4gKwkJCXhlbl9k cm1fZnJvbnRfZmJfdG9fY29va2llKGZiKSk7Cj4gKwlkcm1fZ2VtX2ZiX2Rlc3Ryb3koZmIpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBmYl9mdW5jcyA9 IHsKPiArCS5kZXN0cm95ID0gZmJfZGVzdHJveSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQlz dHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2Rl X2NtZCkKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0g ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsK PiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iajsKPiArCWludCByZXQ7Cj4gKwo+ICsJ ZmIgPSBkcm1fZ2VtX2ZiX2NyZWF0ZV93aXRoX2Z1bmNzKGRldiwgZmlscCwgbW9kZV9jbWQsICZm Yl9mdW5jcyk7Cj4gKwlpZiAoSVNfRVJSX09SX05VTEwoZmIpKQo+ICsJCXJldHVybiBmYjsKPiAr Cj4gKwlnZW1fb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGZpbHAsIG1vZGVfY21kLT5oYW5k bGVzWzBdKTsKPiArCWlmICghZ2VtX29iaikgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGxv b2t1cCBHRU0gb2JqZWN0XG4iKTsKPiArCQlyZXQgPSAtRU5PRU5UOwo+ICsJCWdvdG8gZmFpbDsK PiArCX0KPiArCj4gKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnZW1fb2Jq KTsKPiArCj4gKwlyZXQgPSBkcm1faW5mby0+ZnJvbnRfb3BzLT5mYl9hdHRhY2goCj4gKwkJCWRy bV9pbmZvLT5mcm9udF9pbmZvLAo+ICsJCQl4ZW5fZHJtX2Zyb250X2RidWZfdG9fY29va2llKGdl bV9vYmopLAo+ICsJCQl4ZW5fZHJtX2Zyb250X2ZiX3RvX2Nvb2tpZShmYiksCj4gKwkJCWZiLT53 aWR0aCwgZmItPmhlaWdodCwgZmItPmZvcm1hdC0+Zm9ybWF0KTsKPiArCWlmIChyZXQgPCAwKSB7 Cj4gKwkJRFJNX0VSUk9SKCJCYWNrIGZhaWxlZCB0byBhdHRhY2ggRkIgJXA6ICVkXG4iLCBmYiwg cmV0KTsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZiOwo+ICsKPiArZmFp bDoKPiArCWRybV9nZW1fZmJfZGVzdHJveShmYik7Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBtb2Rl X2NvbmZpZ19mdW5jcyA9IHsKPiArCS5mYl9jcmVhdGUgPSBmYl9jcmVhdGUsCj4gKwkuYXRvbWlj X2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCj4gKwkuYXRvbWljX2NvbW1pdCA9IGRy bV9hdG9taWNfaGVscGVyX2NvbW1pdCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgZGlzcGxheV9z ZXRfY29uZmlnKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwKPiArCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1f cGlwZWxpbmUgKnBpcGVsaW5lID0KPiArCQkJdG9feGVuX2RybV9waXBlbGluZShwaXBlKTsKPiAr CXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZwaXBlLT5jcnRjOwo+ICsJc3RydWN0IHhlbl9kcm1f ZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gcGlwZWxpbmUtPmRybV9pbmZvOwo+ICsJaW50IHJl dDsKPiArCj4gKwlpZiAoZmIpCj4gKwkJcmV0ID0gZHJtX2luZm8tPmZyb250X29wcy0+bW9kZV9z ZXQocGlwZWxpbmUsCj4gKwkJCQljcnRjLT54LCBjcnRjLT55LAo+ICsJCQkJZmItPndpZHRoLCBm Yi0+aGVpZ2h0LCBmYi0+Zm9ybWF0LT5jcHBbMF0gKiA4LAo+ICsJCQkJeGVuX2RybV9mcm9udF9m Yl90b19jb29raWUoZmIpKTsKPiArCWVsc2UKPiArCQlyZXQgPSBkcm1faW5mby0+ZnJvbnRfb3Bz LT5tb2RlX3NldChwaXBlbGluZSwKPiArCQkJCTAsIDAsIDAsIDAsIDAsCj4gKwkJCQl4ZW5fZHJt X2Zyb250X2ZiX3RvX2Nvb2tpZShOVUxMKSk7CgpUaGlzIGlzIGEgYml0IG11Y2ggbGF5ZXJpbmcs IHRoZSBpZiAoZmIpIGNhc2UgY29ycmVzcG9uZHMgdG8gdGhlCmRpc3BsYXlfZW5hYmxlL2Rpc2Fi bGUgaG9va3MsIHBscyBmb2xkIHRoYXQgaW4gaW5zdGVhZCBvZiB0aGUgaW5kaXJlY3Rpb24uCnNp bXBsZSBoZWxwZXJzIGd1YXJhbnRlZSB0aGF0IHdoZW4gdGhlIGRpc3BsYXkgaXMgb24sIHRoZW4g eW91IGhhdmUgYW4gZmIuCgpNYXliZSB3ZSBuZWVkIHRvIGZpeCB0aGUgZG9jcywgcGxzIGNoZWNr IGFuZCBpZiB0aGF0J3Mgbm90IGNsZWFyLCBzdWJtaXQgYQprZXJuZWwtZG9jIHBhdGNoIGZvciB0 aGUgc2ltcGxlIHBpcGUgaGVscGVycy4KCj4gKwo+ICsJaWYgKHJldCkKPiArCQlEUk1fRVJST1Io IkZhaWxlZCB0byBzZXQgbW9kZSB0byBiYWNrOiAlZFxuIiwgcmV0KTsKPiArCj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkaXNwbGF5X2VuYWJsZShzdHJ1Y3QgZHJtX3Np bXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCj4gKwkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRj X3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmcGlwZS0+Y3J0YzsKPiAr CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGlwZS0+cGxhbmUuc3RhdGUtPmZiOwo+ICsK PiArCWlmIChkaXNwbGF5X3NldF9jb25maWcocGlwZSwgZmIpID09IDApCj4gKwkJZHJtX2NydGNf dmJsYW5rX29uKGNydGMpOwoKSSBnZXQgdGhlIGltcHJlc3Npb24geW91ciBkcml2ZXIgZG9lc24n dCBzdXBwb3J0IHZibGFua3MgKHRoZSBwYWdlIGZsaXAKY29kZSBhdCBsZWFzdCBsb29rcyBsaWtl IGl0J3Mgb25seSBnZW5lcmF0aW5nIGEgc2luZ2xlIGV2ZW50KSwgeW91IGFsc28KZG9uJ3QgaGF2 ZSBhIGVuYWJsZS9kaXNhYmxlX3ZibGFuayBpbXBsZW1lbnRhdGlvbi4gSWYgdGhlcmUncyBubyB2 YmxhbmsKaGFuZGxpbmcgdGhlbiB0aGlzIHNob3VsZG4ndCBiZSBuZWVkZWQuCgo+ICsJZWxzZQo+ ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBkaXNwbGF5XG4iKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlw ZSAqcGlwZSkKPiArewo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJnBpcGUtPmNydGM7Cj4g Kwo+ICsJZGlzcGxheV9zZXRfY29uZmlnKHBpcGUsIE5VTEwpOwo+ICsJZHJtX2NydGNfdmJsYW5r X29mZihjcnRjKTsKPiArCS8qIGZpbmFsIGNoZWNrIGZvciBzdGFsbGVkIGV2ZW50cyAqLwo+ICsJ aWYgKGNydGMtPnN0YXRlLT5ldmVudCAmJiAhY3J0Yy0+c3RhdGUtPmFjdGl2ZSkgewo+ICsJCXVu c2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZjcnRjLT5kZXYt PmV2ZW50X2xvY2ssIGZsYWdzKTsKPiArCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRj LCBjcnRjLT5zdGF0ZS0+ZXZlbnQpOwo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNydGMt PmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ICsJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7 Cj4gKwl9Cj4gK30KPiArCj4gK3ZvaWQgeGVuX2RybV9mcm9udF9rbXNfb25fZnJhbWVfZG9uZSgK PiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUgKnBpcGVsaW5lLAo+ICsJCXVp bnQ2NF90IGZiX2Nvb2tpZSkKPiArewo+ICsJZHJtX2NydGNfaGFuZGxlX3ZibGFuaygmcGlwZWxp bmUtPnBpcGUuY3J0Yyk7CgpIbSwgYWdhaW4gdGhpcyBkb2Vzbid0IGxvb2sgbGlrZSByZWFsIHZi bGFuaywgYnV0IG9ubHkgYSBwYWdlLWZsaXAgZG9uZQpldmVudC4gSWYgdGhhdCdzIGNvcnJlY3Qg dGhlbiBwbGVhc2UgZG9uJ3QgdXNlIHRoZSB2YmxhbmsgbWFjaGluZXJ5LCBidXQKanVzdCBzdG9y ZSB0aGUgZXZlbnQgaW50ZXJuYWxseSAocHJvdGVjdGVkIHdpdGggeW91ciBvd24gcHJpdmF0ZSBz cGlubG9jaykKYW5kIHNlbmQgaXQgb3V0IHVzaW5nIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50 IGRpcmVjdGx5LiBObyBjYWxscyB0bwphcm1fdmJsYW5rX2V2ZW50IG9yIGFueSBvZiB0aGUgb3Ro ZXIgdmJsYW5rIGluZnJhc3RydWN0dXJlIHNob3VsZCBiZQpuZWVkZWQuCgpBbHNvIHBsZWFzZSBy ZW1vdmUgdGhlIGRybV92YmxhbmtfaW5pdCgpIGNhbGwsIHNpbmNlIHlvdXIgaHcgZG9lc24ndApy ZWFsbHkgaGF2ZSB2YmxhbmtzLiBBbmQgZXhwb3NpbmcgdmJsYW5rcyB0byB1c2Vyc3BhY2Ugd2l0 aG91dAppbXBsZW1lbnRpbmcgdGhlbSBpcyBjb25mdXNpbmcuCgo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBkaXNwbGF5X3NlbmRfcGFnZV9mbGlwKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlw ZSAqcGlwZSwKPiArCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUpCj4g K3sKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19n ZXRfbmV3X3BsYW5lX3N0YXRlKAo+ICsJCQlvbGRfcGxhbmVfc3RhdGUtPnN0YXRlLCAmcGlwZS0+ cGxhbmUpOwo+ICsKPiArCS8qCj4gKwkgKiBJZiBvbGRfcGxhbmVfc3RhdGUtPmZiIGlzIE5VTEwg YW5kIHBsYW5lX3N0YXRlLT5mYiBpcyBub3QsCj4gKwkgKiB0aGVuIHRoaXMgaXMgYW4gYXRvbWlj IGNvbW1pdCB3aGljaCB3aWxsIGVuYWJsZSBkaXNwbGF5Lgo+ICsJICogSWYgb2xkX3BsYW5lX3N0 YXRlLT5mYiBpcyBub3QgTlVMTCBhbmQgcGxhbmVfc3RhdGUtPmZiIGlzLAo+ICsJICogdGhlbiB0 aGlzIGlzIGFuIGF0b21pYyBjb21taXQgd2hpY2ggd2lsbCBkaXNhYmxlIGRpc3BsYXkuCj4gKwkg KiBJZ25vcmUgdGhlc2UgYW5kIGRvIG5vdCBzZW5kIHBhZ2UgZmxpcCBhcyB0aGlzIGZyYW1lYnVm ZmVyIHdpbGwgYmUKPiArCSAqIHNlbnQgdG8gdGhlIGJhY2tlbmQgYXMgYSBwYXJ0IG9mIGRpc3Bs YXlfc2V0X2NvbmZpZyBjYWxsLgo+ICsJICovCj4gKwlpZiAob2xkX3BsYW5lX3N0YXRlLT5mYiAm JiBwbGFuZV9zdGF0ZS0+ZmIpIHsKPiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxp bmUgKnBpcGVsaW5lID0KPiArCQkJCXRvX3hlbl9kcm1fcGlwZWxpbmUocGlwZSk7Cj4gKwkJc3Ry dWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gcGlwZWxpbmUtPmRybV9pbmZv Owo+ICsJCWludCByZXQ7Cj4gKwo+ICsJCXJldCA9IGRybV9pbmZvLT5mcm9udF9vcHMtPnBhZ2Vf ZmxpcChkcm1faW5mby0+ZnJvbnRfaW5mbywKPiArCQkJCXBpcGVsaW5lLT5pbmRleCwKPiArCQkJ CXhlbl9kcm1fZnJvbnRfZmJfdG9fY29va2llKHBsYW5lX3N0YXRlLT5mYikpOwo+ICsJCXBpcGVs aW5lLT5wZ2ZsaXBfbGFzdF9lcnJvciA9IHJldDsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCURSTV9F UlJPUigiRmFpbGVkIHRvIHNlbmQgcGFnZSBmbGlwIHJlcXVlc3QgdG8gYmFja2VuZDogJWRcbiIs IHJldCk7Cj4gKwkJCS8qCj4gKwkJCSAqIEFzIHdlIGFyZSBhdCBjb21taXQgc3RhZ2UgdGhlIERS TSBjb3JlIHdpbGwgYW55d2F5cwo+ICsJCQkgKiB3YWl0IGZvciB0aGUgdmJsYW5rIGFuZCBrbm93 cyBub3RoaW5nIGFib3V0IG91cgo+ICsJCQkgKiBmYWlsdXJlLiBUaGUgYmVzdCB3ZSBjYW4gZG8g aXMgdG8gaGFuZGxlCj4gKwkJCSAqIHZibGFuayBub3csIHNvIHRoZXJlIGlzIG5vIHZibGFuay9m bGlwX2RvbmUKPiArCQkJICogdGltZSBvdXRzCj4gKwkJCSAqLwo+ICsJCQlkcm1fY3J0Y19oYW5k bGVfdmJsYW5rKCZwaXBlbGluZS0+cGlwZS5jcnRjKTsKPiArCQl9Cj4gKwl9Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgZGlzcGxheV9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlf cGlwZSAqcGlwZSwKPiArCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiAr ewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9Cj4gKwkJ CXRvX3hlbl9kcm1fcGlwZWxpbmUocGlwZSk7Cj4gKwo+ICsJaWYgKHBpcGVsaW5lLT5wZ2ZsaXBf bGFzdF9lcnJvcikgewo+ICsJCWludCByZXQ7Cj4gKwo+ICsJCS8qIGlmIHByZXZpb3VzIHBhZ2Ug ZmxpcCBkaWRuJ3Qgc3VjY2VlZCB0aGVuIHJlcG9ydCB0aGUgZXJyb3IgKi8KPiArCQlyZXQgPSBw aXBlbGluZS0+cGdmbGlwX2xhc3RfZXJyb3I7Cj4gKwkJLyogYW5kIGxldCB1cyB0cnkgdG8gcGFn ZSBmbGlwIG5leHQgdGltZSAqLwo+ICsJCXBpcGVsaW5lLT5wZ2ZsaXBfbGFzdF9lcnJvciA9IDA7 Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KCk5vcGUsIHRoaXMgaXNuJ3QgaG93IHRoZSB1YXBpIHdv cmtzLiBJZiB5b3VyIGZsaXBzIGZhaWwgdGhlbiB3ZSBtaWdodCBuZWVkCnRvIGFkZCBzb21lIGVy cm9yIHN0YXR1cyB0aGluZyB0byB0aGUgZHJtIGV2ZW50cywgYnV0IHlvdSBjYW4ndCBtYWtlIHRo ZQpuZXh0IGZsaXAgZmFpbC4KLURhbmllbAoKPiArCXJldHVybiBkcm1fZ2VtX2ZiX3ByZXBhcmVf ZmIoJnBpcGUtPnBsYW5lLCBwbGFuZV9zdGF0ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRp c3BsYXlfdXBkYXRlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwKPiArCQlz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBk cm1fY3J0YyAqY3J0YyA9ICZwaXBlLT5jcnRjOwo+ICsJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFu a19ldmVudCAqZXZlbnQ7Cj4gKwo+ICsJZXZlbnQgPSBjcnRjLT5zdGF0ZS0+ZXZlbnQ7Cj4gKwlp ZiAoZXZlbnQpIHsKPiArCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ICsJ CXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7 Cj4gKwo+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiAr CQlpZiAoZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSA9PSAwKQo+ICsJCQlkcm1fY3J0Y19hcm1f dmJsYW5rX2V2ZW50KGNydGMsIGV2ZW50KTsKPiArCQllbHNlCj4gKwkJCWRybV9jcnRjX3NlbmRf dmJsYW5rX2V2ZW50KGNydGMsIGV2ZW50KTsKPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZk ZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiArCX0KPiArCS8qCj4gKwkgKiBTZW5kIHBhZ2UgZmxp cCByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kICphZnRlciogd2UgaGF2ZSBldmVudCBhcm1lZC8KPiAr CSAqIHNlbnQgYWJvdmUsIHNvIG9uIHBhZ2UgZmxpcCBkb25lIGV2ZW50IGZyb20gdGhlIGJhY2tl bmQgd2UgY2FuCj4gKwkgKiBkZWxpdmVyIGl0IHdoaWxlIGhhbmRsaW5nIHZibGFuay4KPiArCSAq Lwo+ICsJZGlzcGxheV9zZW5kX3BhZ2VfZmxpcChwaXBlLCBvbGRfcGxhbmVfc3RhdGUpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2Z1bmNz IGRpc3BsYXlfZnVuY3MgPSB7Cj4gKwkuZW5hYmxlID0gZGlzcGxheV9lbmFibGUsCj4gKwkuZGlz YWJsZSA9IGRpc3BsYXlfZGlzYWJsZSwKPiArCS5wcmVwYXJlX2ZiID0gZGlzcGxheV9wcmVwYXJl X2ZiLAo+ICsJLnVwZGF0ZSA9IGRpc3BsYXlfdXBkYXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIGlu dCBkaXNwbGF5X3BpcGVfaW5pdChzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2lu Zm8sCj4gKwkJaW50IGluZGV4LCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmdfY29ubmVjdG9yICpj ZmcsCj4gKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSkKPiAr ewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRybV9pbmZvLT5kcm1fZGV2Owo+ICsJY29u c3QgdWludDMyX3QgKmZvcm1hdHM7Cj4gKwlpbnQgZm9ybWF0X2NvdW50Owo+ICsJaW50IHJldDsK PiArCj4gKwlwaXBlbGluZS0+ZHJtX2luZm8gPSBkcm1faW5mbzsKPiArCXBpcGVsaW5lLT5pbmRl eCA9IGluZGV4Owo+ICsJcGlwZWxpbmUtPmhlaWdodCA9IGNmZy0+aGVpZ2h0Owo+ICsJcGlwZWxp bmUtPndpZHRoID0gY2ZnLT53aWR0aDsKPiArCj4gKwlyZXQgPSB4ZW5fZHJtX2Zyb250X2Nvbm5f aW5pdChkcm1faW5mbywgJnBpcGVsaW5lLT5jb25uKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJu IHJldDsKPiArCj4gKwlmb3JtYXRzID0geGVuX2RybV9mcm9udF9jb25uX2dldF9mb3JtYXRzKCZm b3JtYXRfY291bnQpOwo+ICsKPiArCXJldHVybiBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9pbml0 KGRldiwgJnBpcGVsaW5lLT5waXBlLAo+ICsJCQkmZGlzcGxheV9mdW5jcywgZm9ybWF0cywgZm9y bWF0X2NvdW50LAo+ICsJCQlOVUxMLCAmcGlwZWxpbmUtPmNvbm4pOwo+ICt9Cj4gKwo+ICtpbnQg eGVuX2RybV9mcm9udF9rbXNfaW5pdChzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJt X2luZm8pCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkcm1faW5mby0+ZHJtX2Rl djsKPiArCWludCBpLCByZXQ7Cj4gKwo+ICsJZHJtX21vZGVfY29uZmlnX2luaXQoZGV2KTsKPiAr Cj4gKwlkZXYtPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDA7Cj4gKwlkZXYtPm1vZGVfY29uZmln Lm1pbl9oZWlnaHQgPSAwOwo+ICsJZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSA0MDk1Owo+ ICsJZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gMjA0NzsKPiArCWRldi0+bW9kZV9jb25m aWcuZnVuY3MgPSAmbW9kZV9jb25maWdfZnVuY3M7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGRy bV9pbmZvLT5jZmctPm51bV9jb25uZWN0b3JzOyBpKyspIHsKPiArCQlzdHJ1Y3QgeGVuX2RybV9m cm9udF9jZmdfY29ubmVjdG9yICpjZmcgPQo+ICsJCQkJJmRybV9pbmZvLT5jZmctPmNvbm5lY3Rv cnNbaV07Cj4gKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9 Cj4gKwkJCQkmZHJtX2luZm8tPnBpcGVsaW5lW2ldOwo+ICsKPiArCQlyZXQgPSBkaXNwbGF5X3Bp cGVfaW5pdChkcm1faW5mbywgaSwgY2ZnLCBwaXBlbGluZSk7Cj4gKwkJaWYgKHJldCkgewo+ICsJ CQlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZXYpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0K PiArCX0KPiArCj4gKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZGV2KTsKPiArCXJldHVybiAwOwo+ ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMu aCBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMuaAo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi42NWE1MDAzM2JiOWIKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2ttcy5oCj4gQEAg LTAsMCArMSwzMCBAQAo+ICsvKgo+ICsgKiAgWGVuIHBhcmEtdmlydHVhbCBEUk0gZGV2aWNlCj4g KyAqCj4gKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+ICsgKiAgIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yCj4gKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiAr ICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKPiArICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQg KEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgo+ICsgKgo+ICsgKiBBdXRob3I6IE9sZWtz YW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPiAr ICovCj4gKwo+ICsjaWZuZGVmIF9fWEVOX0RSTV9GUk9OVF9LTVNfSF8KPiArI2RlZmluZSBfX1hF Tl9EUk1fRlJPTlRfS01TX0hfCj4gKwo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9kcnYuaCIK PiArCj4gK2ludCB4ZW5fZHJtX2Zyb250X2ttc19pbml0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2Ry bV9pbmZvICpkcm1faW5mbyk7Cj4gKwo+ICt2b2lkIHhlbl9kcm1fZnJvbnRfa21zX29uX2ZyYW1l X2RvbmUoCj4gKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSwK PiArCQl1aW50NjRfdCBmYl9jb29raWUpOwo+ICsKPiArI2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9O VF9LTVNfSF8gKi8KPiAtLSAKPiAyLjcuNAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5n aW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBs aXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2pl Y3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs