From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 9/9] drm/i915: Add two-stage ILK-style watermark programming (v7) Date: Wed, 25 Nov 2015 19:08:53 +0200 Message-ID: <20151125170853.GT4437@intel.com> References: <1448470115-7863-1-git-send-email-matthew.d.roper@intel.com> <1448470115-7863-10-git-send-email-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 662136EAEB for ; Wed, 25 Nov 2015 09:08:57 -0800 (PST) Content-Disposition: inline In-Reply-To: <1448470115-7863-10-git-send-email-matthew.d.roper@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Roper Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBOb3YgMjUsIDIwMTUgYXQgMDg6NDg6MzVBTSAtMDgwMCwgTWF0dCBSb3BlciB3cm90 ZToKPiBJbiBhZGRpdGlvbiB0byBjYWxjdWxhdGluZyBmaW5hbCB3YXRlcm1hcmtzLCBsZXQncyBh bHNvIHByZS1jYWxjdWxhdGUgYQo+IHNldCBvZiBpbnRlcm1lZGlhdGUgd2F0ZXJtYXJrIHZhbHVl cyBhdCBhdG9taWMgY2hlY2sgdGltZS4gIFRoZXNlCj4gaW50ZXJtZWRpYXRlIHdhdGVybWFya3Mg YXJlIGEgY29tYmluYXRpb24gb2YgdGhlIHdhdGVybWFya3MgZm9yIHRoZSBvbGQKPiBzdGF0ZSBh bmQgdGhlIG5ldyBzdGF0ZTsgdGhleSBzaG91bGQgc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIG9m IGJvdGgKPiBzdGF0ZXMgd2hpY2ggbWVhbnMgdGhleSBjYW4gYmUgcHJvZ3JhbW1lZCBpbW1lZGlh dGVseSB3aGVuIHdlIGNvbW1pdCB0aGUKPiBhdG9taWMgc3RhdGUgKHdpdGhvdXQgd2FpdGluZyBm b3IgYSB2YmxhbmspLiAgT25jZSB0aGUgdmJsYW5rIGRvZXMKPiBoYXBwZW4sIHdlIGNhbiB0aGVu IHJlLXByb2dyYW0gd2F0ZXJtYXJrcyB0byB0aGUgbW9yZSBvcHRpbWFsIGZpbmFsCj4gdmFsdWUu Cj4gCj4gdjI6IFNpZ25pZmljYW50IHJlYmFzaW5nL3Jld3JpdGluZy4KPiAKPiB2MzoKPiAgLSBN b3ZlICduZWVkX3Bvc3R2YmxfdXBkYXRlJyBmbGFnIHRvIENSVEMgc3RhdGUgKERhbmllbCkKPiAg LSBEb24ndCBmb3JnZXQgdG8gY2hlY2sgaW50ZXJtZWRpYXRlIHdhdGVybWFyayB2YWx1ZXMgZm9y IHZhbGlkaXR5Cj4gICAgKE1hYXJ0ZW4pCj4gIC0gRG9uJ3QgZHVlIGFzeW5jIHdhdGVybWFyayBv cHRpbWl6YXRpb247IGp1c3QgZG8gaXQgYXQgdGhlIGVuZCBvZiB0aGUKPiAgICBhdG9taWMgdHJh bnNhY3Rpb24sIGFmdGVyIHdhaXRpbmcgZm9yIHZibGFua3MuICBXZSBkbyB3YW50IGl0IHRvIGJl Cj4gICAgYXN5bmMgZXZlbnR1YWxseSwgYnV0IGFkZGluZyB0aGF0IG5vdyB3aWxsIGNhdXNlIG1v cmUgdHJvdWJsZSBmb3IKPiAgICBNYWFydGVuJ3MgaW4tcHJvZ3Jlc3Mgd29yay4gIChNYWFydGVu KQo+ICAtIERvbid0IGFsbG9jYXRlIHNwYWNlIGluIGNydGNfc3RhdGUgZm9yIGludGVybWVkaWF0 ZSB3YXRlcm1hcmtzIG9uCj4gICAgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgbmVlZCBpdCAoZ2VuOSsp Lgo+ICAtIE1vdmUgV2FDeFNSRGlzYWJsZWRGb3JTcHJpdGVTY2FsaW5nOml2YiBpbnRvIGludGVs X2JlZ2luX2NydGNfY29tbWl0Cj4gICAgbm93IHRoYXQgaWxrX3VwZGF0ZV93bSBpcyBnb25lLgo+ IAo+IHY0Ogo+ICAtIEFkZCBhIHdtX211dGV4IHRvIGNvdmVyIHVwZGF0ZXMgdG8gaW50ZWxfY3J0 Yy0+YWN0aXZlIGFuZCB0aGUKPiAgICBuZWVkX3Bvc3R2YmxfdXBkYXRlIGZsYWcuICBTaW5jZSB3 ZSBkb24ndCBoYXZlIGFzeW5jIHlldCBpdCBpc24ndAo+ICAgIHRlcnJpYmx5IGltcG9ydGFudCB5 ZXQsIGJ1dCBtaWdodCBhcyB3ZWxsIGFkZCBpdCBub3cuCj4gIC0gQ2hhbmdlIGludGVyZmFjZSB0 byBwcm9ncmFtIHdhdGVybWFya3MuICBQbGF0Zm9ybXMgd2lsbCBub3cgZXhwb3NlCj4gICAgLmlu aXRpYWxfd2F0ZXJtYXJrcygpIGFuZCAub3B0aW1pemVfd2F0ZXJtYXJrcygpIGZ1bmN0aW9ucyB0 byBkbwo+ICAgIHdhdGVybWFyayBwcm9ncmFtbWluZy4gIFRoZXNlIHNob3VsZCBsb2NrIHdtX211 dGV4LCBjb3B5IHRoZQo+ICAgIGFwcHJvcHJpYXRlIHN0YXRlIHZhbHVlcyBpbnRvIGludGVsX2Ny dGMtPmFjdGl2ZSwgYW5kIHRoZW4gY2FsbAo+ICAgIHRoZSBpbnRlcm5hbCBwcm9ncmFtIHdhdGVy bWFya3MgZnVuY3Rpb24uCj4gCj4gdjU6Cj4gIC0gU2tpcCBpbnRlcm1lZGlhdGUgd2F0ZXJtYXJr IGNhbGN1bGF0aW9uL2NoZWNrIGR1cmluZyBpbml0aWFsIGhhcmR3YXJlCj4gICAgcmVhZG91dCBz aW5jZSB3ZSBkb24ndCB0cnVzdCB0aGUgZXhpc3RpbmcgSFcgdmFsdWVzIChhbmQgZG9uJ3QgaGF2 ZQo+ICAgIHZhbGlkIHZhbHVlcyBvZiBvdXIgb3duIHlldCkuCj4gIC0gRG9uJ3QgdHJ5IHRvIGNh bGwgLm9wdGltaXplX3dhdGVybWFya3MoKSBvbiBwbGF0Zm9ybXMgdGhhdCBkb24ndCBoYXZlCj4g ICAgYXRvbWljIHdhdGVybWFya3MgeWV0LiAgKE1hYXJ0ZW4pCj4gCj4gdjY6Cj4gIC0gUmViYXNl Cj4gCj4gdjc6Cj4gIC0gRnVydGhlciByZWJhc2UKPiAKPiBTaWduZWQtb2ZmLWJ5OiBNYXR0IFJv cGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgo+IFJldmlld2VkLWJ5KHY1KTogTWFhcnRl biBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgIHwgICA2ICstCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2F0b21pYy5jICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYyB8ICA5MCArKysrKysrKysrKysrKysrKysrLQo+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgMzEgKysrKysrLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9wbS5jICAgICAgfCAxNjAgKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0KPiAgNSBmaWxlcyBjaGFuZ2VkLCAyMzIgaW5zZXJ0aW9ucygrKSwgNTYgZGVs ZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggNTE3MjYwNC4uNDI3 YjQ4OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC02MzAsNyArNjMwLDExIEBA IHN0cnVjdCBkcm1faTkxNV9kaXNwbGF5X2Z1bmNzIHsKPiAgCQkJICBzdHJ1Y3QgZHBsbCAqYmVz dF9jbG9jayk7Cj4gIAlpbnQgKCpjb21wdXRlX3BpcGVfd20pKHN0cnVjdCBpbnRlbF9jcnRjICpj cnRjLAo+ICAJCQkgICAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiAtCXZv aWQgKCpwcm9ncmFtX3dhdGVybWFya3MpKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUp Owo+ICsJaW50ICgqY29tcHV0ZV9pbnRlcm1lZGlhdGVfd20pKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4gKwkJCQkgICAgICAgc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCj4gKwkJCQkg ICAgICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld3N0YXRlKTsKPiArCXZvaWQgKCppbml0 aWFsX3dhdGVybWFya3MpKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUpOwo+ICsJdm9p ZCAoKm9wdGltaXplX3dhdGVybWFya3MpKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUp Owo+ICAJdm9pZCAoKnVwZGF0ZV93bSkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiAgCWludCAo Km1vZGVzZXRfY2FsY19jZGNsaykoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiAg CXZvaWQgKCptb2Rlc2V0X2NvbW1pdF9jZGNsaykoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWMuYwo+IGluZGV4IDY0M2YzNDIuLmI5 MWUxNjYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWMuYwo+IEBAIC05NSw2ICs5 NSw3IEBAIGludGVsX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK PiAgCj4gIAljcnRjX3N0YXRlLT51cGRhdGVfcGlwZSA9IGZhbHNlOwo+ICAJY3J0Y19zdGF0ZS0+ ZGlzYWJsZV9scF93bSA9IGZhbHNlOwo+ICsJY3J0Y19zdGF0ZS0+d20ubmVlZF9wb3N0dmJsX3Vw ZGF0ZSA9IGZhbHNlOwo+ICAKPiAgCXJldHVybiAmY3J0Y19zdGF0ZS0+YmFzZTsKPiAgfQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiBpbmRleCBlYjUyYWZhLi44ZGIwNDg2IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IEBAIC0xMTgwMSw2ICsxMTgw MSwxMiBAQCBpbnQgaW50ZWxfcGxhbmVfYXRvbWljX2NhbGNfY2hhbmdlcyhzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gIAkJaW50ZWxfY3J0Yy0+YXRvbWljLnVwZGF0ZV93bV9w cmUgPSB0cnVlOwo+ICAJfQo+ICAKPiArCS8qIFByZS1nZW45IHBsYXRmb3JtcyBuZWVkIHR3by1z dGVwIHdhdGVybWFyayB1cGRhdGVzICovCj4gKwlpZiAoKGludGVsX2NydGMtPmF0b21pYy51cGRh dGVfd21fcHJlIHx8IGludGVsX2NydGMtPmF0b21pYy51cGRhdGVfd21fcG9zdCkgJiYKPiArCSAg ICBJTlRFTF9JTkZPKGRldiktPmdlbiA8IDkgJiYKPiArCSAgICBkZXZfcHJpdi0+ZGlzcGxheS5v cHRpbWl6ZV93YXRlcm1hcmtzKQo+ICsJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSkt PndtLm5lZWRfcG9zdHZibF91cGRhdGUgPSB0cnVlOwo+ICsKPiAgCWlmICh2aXNpYmxlIHx8IHdh c192aXNpYmxlKQo+ICAJCWludGVsX2NydGMtPmF0b21pYy5mYl9iaXRzIHw9Cj4gIAkJCXRvX2lu dGVsX3BsYW5lKHBsYW5lKS0+ZnJvbnRidWZmZXJfYml0Owo+IEBAIC0xMTk1Nyw4ICsxMTk2Mywy OSBAQCBzdGF0aWMgaW50IGludGVsX2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKPiAgCXJldCA9IDA7Cj4gIAlpZiAoZGV2X3ByaXYtPmRpc3BsYXkuY29tcHV0ZV9waXBl X3dtKSB7Cj4gIAkJcmV0ID0gZGV2X3ByaXYtPmRpc3BsYXkuY29tcHV0ZV9waXBlX3dtKGludGVs X2NydGMsIHN0YXRlKTsKPiAtCQlpZiAocmV0KQo+ICsJCWlmIChyZXQpIHsKPiArCQkJRFJNX0RF QlVHX0tNUygiVGFyZ2V0IHBpcGUgd2F0ZXJtYXJrcyBhcmUgaW52YWxpZFxuIik7Cj4gIAkJCXJl dHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmIChkZXZfcHJpdi0+ZGlzcGxheS5jb21w dXRlX2ludGVybWVkaWF0ZV93bSAmJgo+ICsJICAgICF0b19pbnRlbF9hdG9taWNfc3RhdGUoc3Rh dGUpLT5za2lwX2ludGVybWVkaWF0ZV93bSkgewo+ICsJCWlmIChXQVJOX09OKCFkZXZfcHJpdi0+ ZGlzcGxheS5jb21wdXRlX3BpcGVfd20pKQo+ICsJCQlyZXR1cm4gMDsKPiArCj4gKwkJLyoKPiAr CQkgKiBDYWxjdWxhdGUgJ2ludGVybWVkaWF0ZScgd2F0ZXJtYXJrcyB0aGF0IHNhdGlzZnkgYm90 aCB0aGUKPiArCQkgKiBvbGQgc3RhdGUgYW5kIHRoZSBuZXcgc3RhdGUuICBXZSBjYW4gcHJvZ3Jh bSB0aGVzZQo+ICsJCSAqIGltbWVkaWF0ZWx5Lgo+ICsJCSAqLwo+ICsJCXJldCA9IGRldl9wcml2 LT5kaXNwbGF5LmNvbXB1dGVfaW50ZXJtZWRpYXRlX3dtKGNydGMtPmRldiwKPiArCQkJCQkJCQlp bnRlbF9jcnRjLAo+ICsJCQkJCQkJCXBpcGVfY29uZmlnKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJ CURSTV9ERUJVR19LTVMoIk5vIHZhbGlkIGludGVybWVkaWF0ZSBwaXBlIHdhdGVybWFya3MgYXJl IHBvc3NpYmxlXG4iKTsKPiArCQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gIAl9Cj4gIAo+ICAJaWYg KElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDkpIHsKPiBAQCAtMTM0MDksNiArMTM0MzYsNyBAQCBz dGF0aWMgaW50IGludGVsX2F0b21pY19jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAg CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4g IAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gIAlzdHJ1Y3QgZHJtX2NydGMg KmNydGM7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqaW50ZWxfY3N0YXRlOwo+ICAJaW50 IHJldCA9IDA7Cj4gIAlpbnQgaTsKPiAgCWJvb2wgYW55X21zID0gZmFsc2U7Cj4gQEAgLTEzNTAw LDYgKzEzNTI4LDIwIEBAIHN0YXRpYyBpbnQgaW50ZWxfYXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ICAKPiAgCWRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX3ZibGFua3Mo ZGV2LCBzdGF0ZSk7Cj4gIAo+ICsJLyoKPiArCSAqIE5vdyB0aGF0IHRoZSB2YmxhbmsgaGFzIHBh c3NlZCwgd2UgY2FuIGdvIGFoZWFkIGFuZCBwcm9ncmFtIHRoZQo+ICsJICogb3B0aW1hbCB3YXRl cm1hcmtzIG9uIHBsYXRmb3JtcyB0aGF0IG5lZWQgdHdvLXN0ZXAgd2F0ZXJtYXJrCj4gKwkgKiBw cm9ncmFtbWluZy4KPiArCSAqCj4gKwkgKiBUT0RPOiBNb3ZlIHRoaXMgKGFuZCBvdGhlciBjbGVh bnVwKSB0byBhbiBhc3luYyB3b3JrZXIgZXZlbnR1YWxseS4KPiArCSAqLwo+ICsJZm9yX2VhY2hf Y3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkgewo+ICsJCWludGVsX2Nz dGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+ICsKPiArCQlpZiAoZGV2 X3ByaXYtPmRpc3BsYXkub3B0aW1pemVfd2F0ZXJtYXJrcykKPiArCQkgICAgZGV2X3ByaXYtPmRp c3BsYXkub3B0aW1pemVfd2F0ZXJtYXJrcyhpbnRlbF9jc3RhdGUpOwo+ICsJfQo+ICsKPiAgCW11 dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgCWRybV9hdG9taWNfaGVscGVyX2NsZWFu dXBfcGxhbmVzKGRldiwgc3RhdGUpOwo+ICAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRl eCk7Cj4gQEAgLTEzODYyLDEzICsxMzkwNCw0NCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9iZWdpbl9j cnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAkJCQkgICAgc3RydWN0IGRybV9j cnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKPiAgewo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmRldjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZGV2KTsKPiAgCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxf Y3J0YyhjcnRjKTsKPiArCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUgPSB0b19pbnRl bF9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKPiAgCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpv bGRfaW50ZWxfc3RhdGUgPQo+ICAJCXRvX2ludGVsX2NydGNfc3RhdGUob2xkX2NydGNfc3RhdGUp Owo+ICAJYm9vbCBtb2Rlc2V0ID0gbmVlZHNfbW9kZXNldChjcnRjLT5zdGF0ZSk7Cj4gIAo+IC0J aWYgKGludGVsX2NydGMtPmF0b21pYy51cGRhdGVfd21fcHJlKQo+ICsJLyoKPiArCSAqIElWQiB3 b3JrYXJvdW5kOiBtdXN0IGRpc2FibGUgbG93IHBvd2VyIHdhdGVybWFya3MgZm9yIGF0IGxlYXN0 Cj4gKwkgKiBvbmUgZnJhbWUgYmVmb3JlIGVuYWJsaW5nIHNjYWxpbmcuICBMUCB3YXRlcm1hcmtz IGNhbiBiZSByZS1lbmFibGVkCj4gKwkgKiB3aGVuIHNjYWxpbmcgaXMgZGlzYWJsZWQuCj4gKwkg Kgo+ICsJICogV2FDeFNSRGlzYWJsZWRGb3JTcHJpdGVTY2FsaW5nOml2Ygo+ICsJICovCj4gKwlp ZiAoY3N0YXRlLT5kaXNhYmxlX2xwX3dtKSB7Cj4gKwkJaWxrX2Rpc2FibGVfbHBfd20oY3J0Yy0+ ZGV2KTsKPiArCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoY3J0Yy0+ZGV2LCBpbnRlbF9jcnRjLT5w aXBlKTsKPiArCX0KPiArCj4gKwkvKgo+ICsJICogRm9yIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQg YXRvbWljIHdhdGVybWFya3MsIHByb2dyYW0gdGhlCj4gKwkgKiAnaW50ZXJtZWRpYXRlJyB3YXRl cm1hcmtzIGltbWVkaWF0ZWx5LiAgT24gcHJlLWdlbjkgcGxhdGZvcm1zLCB0aGVzZQo+ICsJICog d2lsbCBiZSB0aGUgaW50ZXJtZWRpYXRlIHZhbHVlcyB0aGF0IGFyZSBzYWZlIGZvciBib3RoIHBy ZS0gYW5kCj4gKwkgKiBwb3N0LSB2Ymxhbms7IHdoZW4gdmJsYW5rIGhhcHBlbnMsIHRoZSAnYWN0 aXZlJyB2YWx1ZXMgd2lsbCBiZSBzZXQKPiArCSAqIHRvIHRoZSBmaW5hbCAndGFyZ2V0JyB2YWx1 ZXMgYW5kIHdlJ2xsIGRvIHRoaXMgYWdhaW4gdG8gZ2V0IHRoZQo+ICsJICogb3B0aW1hbCB3YXRl cm1hcmtzLiAgRm9yIGdlbjkrIHBsYXRmb3JtcywgdGhlIHZhbHVlcyB3ZSBwcm9ncmFtIGhlcmUK PiArCSAqIHdpbGwgYmUgdGhlIGZpbmFsIHRhcmdldCB2YWx1ZXMgd2hpY2ggd2lsbCBnZXQgYXV0 b21hdGljYWxseSBsYXRjaGVkCj4gKwkgKiBhdCB2YmxhbmsgdGltZTsgbm8gZnVydGhlciBwcm9n cmFtbWluZyB3aWxsIGJlIG5lY2Vzc2FyeS4KPiArCSAqCj4gKwkgKiBJZiBhIHBsYXRmb3JtIGhh c24ndCBiZWVuIHRyYW5zaXRpb25lZCB0byBhdG9taWMgd2F0ZXJtYXJrcyB5ZXQsCj4gKwkgKiB3 ZSdsbCBjb250aW51ZSB0byB1cGRhdGUgd2F0ZXJtYXJrcyB0aGUgb2xkIHdheSwgaWYgZmxhZ3Mg dGVsbAo+ICsJICogdXMgdG8uCj4gKwkgKi8KPiArCWlmIChkZXZfcHJpdi0+ZGlzcGxheS5pbml0 aWFsX3dhdGVybWFya3MgIT0gTlVMTCkgewo+ICsJCWRldl9wcml2LT5kaXNwbGF5LmluaXRpYWxf d2F0ZXJtYXJrcyhjc3RhdGUpOwo+ICsJfSBlbHNlIGlmIChpbnRlbF9jcnRjLT5hdG9taWMudXBk YXRlX3dtX3ByZSkgewo+ICAJCWludGVsX3VwZGF0ZV93YXRlcm1hcmtzKGNydGMpOwo+ICsJfQo+ ICAKPiAgCS8qIFBlcmZvcm0gdmJsYW5rIGV2YXNpb24gYXJvdW5kIGNvbW1pdCBvcGVyYXRpb24g Ki8KPiAgCWludGVsX3BpcGVfdXBkYXRlX3N0YXJ0KGludGVsX2NydGMpOwo+IEBAIC0xNDIwNyw2 ICsxNDI4MCw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCBpbnQgcGlwZSkKPiAgCWludGVsX2NydGMtPmN1cnNvcl9zaXplID0gfjA7Cj4gIAo+ ICAJaW50ZWxfY3J0Yy0+d20uY3hzcl9hbGxvd2VkID0gdHJ1ZTsKPiArCW11dGV4X2luaXQoJmlu dGVsX2NydGMtPndtLndtX211dGV4KTsKPiAgCj4gIAlCVUdfT04ocGlwZSA+PSBBUlJBWV9TSVpF KGRldl9wcml2LT5wbGFuZV90b19jcnRjX21hcHBpbmcpIHx8Cj4gIAkgICAgICAgZGV2X3ByaXYt PnBsYW5lX3RvX2NydGNfbWFwcGluZ1tpbnRlbF9jcnRjLT5wbGFuZV0gIT0gTlVMTCk7Cj4gQEAg LTE1MTM2LDcgKzE1MjEwLDcgQEAgc3RhdGljIHZvaWQgc2FuaXRpemVfd2F0ZXJtYXJrcyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJaW50IGk7Cj4gIAo+ICAJLyogT25seSBzdXBwb3J0ZWQg b24gcGxhdGZvcm1zIHRoYXQgdXNlIGF0b21pYyB3YXRlcm1hcmsgZGVzaWduICovCj4gLQlpZiAo IWRldl9wcml2LT5kaXNwbGF5LnByb2dyYW1fd2F0ZXJtYXJrcykKPiArCWlmICghZGV2X3ByaXYt PmRpc3BsYXkub3B0aW1pemVfd2F0ZXJtYXJrcykKPiAgCQlyZXR1cm47Cj4gIAo+ICAJLyoKPiBA QCAtMTUxNDgsNiArMTUyMjIsMTMgQEAgc3RhdGljIHZvaWQgc2FuaXRpemVfd2F0ZXJtYXJrcyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJaWYgKFdBUk5fT04oSVNfRVJSKHN0YXRlKSkpCj4g IAkJcmV0dXJuOwo+ICAKPiArCS8qCj4gKwkgKiBIYXJkd2FyZSByZWFkb3V0IGlzIHRoZSBvbmx5 IHRpbWUgd2UgZG9uJ3Qgd2FudCB0byBjYWxjdWxhdGUKPiArCSAqIGludGVybWVkaWF0ZSB3YXRl cm1hcmtzIChzaW5jZSB3ZSBkb24ndCB0cnVzdCB0aGUgY3VycmVudAo+ICsJICogd2F0ZXJtYXJr cykuCj4gKwkgKi8KPiArCXRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSktPnNraXBfaW50ZXJt ZWRpYXRlX3dtID0gdHJ1ZTsKPiArCj4gIAlyZXQgPSBpbnRlbF9hdG9taWNfY2hlY2soZGV2LCBz dGF0ZSk7Cj4gIAlpZiAocmV0KSB7Cj4gIAkJLyoKPiBAQCAtMTUxNjMsNyArMTUyNDQsOCBAQCBz dGF0aWMgdm9pZCBzYW5pdGl6ZV93YXRlcm1hcmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4g IAlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjc3RhdGUsIGkpIHsKPiAgCQlz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3MgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNzdGF0ZSk7 Cj4gIAo+IC0JCWRldl9wcml2LT5kaXNwbGF5LnByb2dyYW1fd2F0ZXJtYXJrcyhjcyk7Cj4gKwkJ Y3MtPndtLm5lZWRfcG9zdHZibF91cGRhdGUgPSB0cnVlOwo+ICsJCWRldl9wcml2LT5kaXNwbGF5 Lm9wdGltaXplX3dhdGVybWFya3MoY3MpOwo+ICAJfQo+ICAKPiAgCWRybV9hdG9taWNfc3RhdGVf ZnJlZShzdGF0ZSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBpbmRleCA4ZmFlODI0Li5j NTNlYjEwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBAQCAtMjQ5LDYgKzI0OSwx MiBAQCBzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlIHsKPiAgCWJvb2wgZHBsbF9zZXQ7Cj4gIAlz dHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGxfY29uZmlnIHNoYXJlZF9kcGxsW0k5MTVfTlVNX1BMTFNd Owo+ICAJc3RydWN0IGludGVsX3dtX2NvbmZpZyB3bV9jb25maWc7Cj4gKwo+ICsJLyoKPiArCSAq IEN1cnJlbnQgd2F0ZXJtYXJrcyBjYW4ndCBiZSB0cnVzdGVkIGR1cmluZyBoYXJkd2FyZSByZWFk b3V0LCBzbwo+ICsJICogZG9uJ3QgYm90aGVyIGNhbGN1bGF0aW5nIGludGVybWVkaWF0ZSB3YXRl cm1hcmtzLgo+ICsJICovCj4gKwlib29sIHNraXBfaW50ZXJtZWRpYXRlX3dtOwo+ICB9Owo+ICAK PiAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlIHsKPiBAQCAtNDkxLDEzICs0OTcsMjkgQEAgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgewo+ICAKPiAgCXN0cnVjdCB7Cj4gIAkJLyoKPiAtCQkgKiBv cHRpbWFsIHdhdGVybWFya3MsIHByb2dyYW1tZWQgcG9zdC12Ymxhbmsgd2hlbiB0aGlzIHN0YXRl Cj4gLQkJICogaXMgY29tbWl0dGVkCj4gKwkJICogT3B0aW1hbCB3YXRlcm1hcmtzLCBwcm9ncmFt bWVkIHBvc3QtdmJsYW5rIHdoZW4gdGhpcyBzdGF0ZQo+ICsJCSAqIGlzIGNvbW1pdHRlZC4KPiAg CQkgKi8KPiAgCQl1bmlvbiB7Cj4gIAkJCXN0cnVjdCBpbnRlbF9waXBlX3dtIGlsazsKPiAgCQkJ c3RydWN0IHNrbF9waXBlX3dtIHNrbDsKPiAgCQl9IG9wdGltYWw7Cj4gKwo+ICsJCS8qCj4gKwkJ ICogSW50ZXJtZWRpYXRlIHdhdGVybWFya3M7IHRoZXNlIGNhbiBiZSBwcm9ncmFtbWVkIGltbWVk aWF0ZWx5Cj4gKwkJICogc2luY2UgdGhleSBzYXRpc2Z5IGJvdGggdGhlIGN1cnJlbnQgY29uZmln dXJhdGlvbiB3ZSdyZQo+ICsJCSAqIHN3aXRjaGluZyBhd2F5IGZyb20gYW5kIHRoZSBuZXcgY29u ZmlndXJhdGlvbiB3ZSdyZSBzd2l0Y2hpbmcKPiArCQkgKiB0by4KPiArCQkgKi8KPiArCQlzdHJ1 Y3QgaW50ZWxfcGlwZV93bSBpbnRlcm1lZGlhdGU7Cj4gKwo+ICsJCS8qCj4gKwkJICogUGxhdGZv cm1zIHdpdGggdHdvLXN0ZXAgd2F0ZXJtYXJrIHByb2dyYW1taW5nIHdpbGwgbmVlZCB0bwo+ICsJ CSAqIHVwZGF0ZSB3YXRlcm1hcmsgcHJvZ3JhbW1pbmcgcG9zdC12YmxhbmsgdG8gc3dpdGNoIGZy b20gdGhlCj4gKwkJICogc2FmZSBpbnRlcm1lZGlhdGUgd2F0ZXJtYXJrcyB0byB0aGUgb3B0aW1h bCBmaW5hbAo+ICsJCSAqIHdhdGVybWFya3MuCj4gKwkJICovCj4gKwkJYm9vbCBuZWVkX3Bvc3R2 YmxfdXBkYXRlOwo+ICAJfSB3bTsKPiAgfTsKPiAgCj4gQEAgLTU4Nyw4ICs2MDksMTIgQEAgc3Ry dWN0IGludGVsX2NydGMgewo+ICAJCQlzdHJ1Y3QgaW50ZWxfcGlwZV93bSBpbGs7Cj4gIAkJCXN0 cnVjdCBza2xfcGlwZV93bSBza2w7Cj4gIAkJfSBhY3RpdmU7Cj4gKwo+ICAJCS8qIGFsbG93IEN4 U1Igb24gdGhpcyBwaXBlICovCj4gIAkJYm9vbCBjeHNyX2FsbG93ZWQ7Cj4gKwo+ICsJCS8qIFBy b3RlY3RzIGFjdGl2ZSBhbmQgbmVlZF9wb3N0dmJsX3VwZGF0ZSAqLwo+ICsJCXN0cnVjdCBtdXRl eCB3bV9tdXRleDsKPiAgCX0gd207Cj4gIAo+ICAJaW50IHNjYW5saW5lX29mZnNldDsKPiBAQCAt MTQ2Myw2ICsxNDg5LDcgQEAgdm9pZCBza2xfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOwo+ICB2b2lkIHNrbF9kZGJfZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiAgCQkJICBzdHJ1Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIg Lyogb3V0ICovKTsKPiAgdWludDMyX3QgaWxrX3BpcGVfcGl4ZWxfcmF0ZShjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwo+ICtib29sIGlsa19kaXNhYmxlX2xwX3dt KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICAKPiAgLyogaW50ZWxfc2R2by5jICovCj4gIGJv b2wgaW50ZWxfc2R2b19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9wbS5jCj4gaW5kZXggYzIwOWE2OS4uMjlkNzI1ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcG0uYwo+IEBAIC0yMjY1LDYgKzIyNjUsMjkgQEAgc3RhdGljIHZvaWQgc2tsX3NldHVwX3dt X2xhdGVuY3koc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCWludGVsX3ByaW50X3dtX2xhdGVu Y3koZGV2LCAiR2VuOSBQbGFuZSIsIGRldl9wcml2LT53bS5za2xfbGF0ZW5jeSk7Cj4gIH0KPiAg Cj4gK3N0YXRpYyBib29sIGlsa192YWxpZGF0ZV9waXBlX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4gKwkJCQkgc3RydWN0IGludGVsX3BpcGVfd20gKnBpcGVfd20pCj4gK3sKPiArCS8qIExQ MCB3YXRlcm1hcmsgbWF4aW11bXMgZGVwZW5kIG9uIHRoaXMgcGlwZSBhbG9uZSAqLwo+ICsJY29u c3Qgc3RydWN0IGludGVsX3dtX2NvbmZpZyBjb25maWcgPSB7Cj4gKwkJLm51bV9waXBlc19hY3Rp dmUgPSAxLAo+ICsJCS5zcHJpdGVzX2VuYWJsZWQgPSBwaXBlX3dtLT5zcHJpdGVzX2VuYWJsZWQs Cj4gKwkJLnNwcml0ZXNfc2NhbGVkID0gcGlwZV93bS0+c3ByaXRlc19zY2FsZWQsCj4gKwl9Owo+ ICsJc3RydWN0IGlsa193bV9tYXhpbXVtcyBtYXg7Cj4gKwo+ICsJLyogTFAwIHdhdGVybWFya3Mg YWx3YXlzIHVzZSAxLzIgRERCIHBhcnRpdGlvbmluZyAqLwo+ICsJaWxrX2NvbXB1dGVfd21fbWF4 aW11bXMoZGV2LCAwLCAmY29uZmlnLCBJTlRFTF9EREJfUEFSVF8xXzIsICZtYXgpOwo+ICsKPiAr CS8qIEF0IGxlYXN0IExQMCBtdXN0IGJlIHZhbGlkICovCj4gKwlpZiAoIWlsa192YWxpZGF0ZV93 bV9sZXZlbCgwLCAmbWF4LCAmcGlwZV93bS0+d21bMF0pKSB7Cj4gKwkJRFJNX0RFQlVHX0tNUygi TFAwIHdhdGVybWFyayBpbnZhbGlkXG4iKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gIC8qIENvbXB1dGUgbmV3IHdhdGVybWFya3MgZm9y IHRoZSBwaXBlICovCj4gIHN0YXRpYyBpbnQgaWxrX2NvbXB1dGVfcGlwZV93bShzdHJ1Y3QgaW50 ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiAgCQkJICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSkKPiBAQCAtMjI3OSwxMCArMjMwMiw2IEBAIHN0YXRpYyBpbnQgaWxrX2NvbXB1dGVf cGlwZV93bShzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiAgCXN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqc3Byc3RhdGUgPSBOVUxMOwo+ICAJc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpjdXJzdGF0ZSA9IE5VTEw7Cj4gIAlpbnQgbGV2ZWwsIG1heF9sZXZlbCA9IGlsa193bV9tYXhf bGV2ZWwoZGV2KTsKPiAtCS8qIExQMCB3YXRlcm1hcmsgbWF4aW11bXMgZGVwZW5kIG9uIHRoaXMg cGlwZSBhbG9uZSAqLwo+IC0Jc3RydWN0IGludGVsX3dtX2NvbmZpZyBjb25maWcgPSB7Cj4gLQkJ Lm51bV9waXBlc19hY3RpdmUgPSAxLAo+IC0JfTsKPiAgCXN0cnVjdCBpbGtfd21fbWF4aW11bXMg bWF4Owo+ICAKPiAgCWNzdGF0ZSA9IGludGVsX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwg aW50ZWxfY3J0Yyk7Cj4gQEAgLTIzMDUsMjEgKzIzMjQsMTggQEAgc3RhdGljIGludCBpbGtfY29t cHV0ZV9waXBlX3dtKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAo+ICAJCQljdXJzdGF0 ZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKHBzKTsKPiAgCX0KPiAgCj4gLQljb25maWcuc3ByaXRl c19lbmFibGVkID0gc3Byc3RhdGUtPnZpc2libGU7Cj4gLQljb25maWcuc3ByaXRlc19zY2FsZWQg PSBzcHJzdGF0ZS0+dmlzaWJsZSAmJgo+ICsJcGlwZV93bS0+cGlwZV9lbmFibGVkID0gY3N0YXRl LT5iYXNlLmFjdGl2ZTsKPiArCXBpcGVfd20tPnNwcml0ZXNfZW5hYmxlZCA9IHNwcnN0YXRlLT52 aXNpYmxlOwo+ICsJcGlwZV93bS0+c3ByaXRlc19zY2FsZWQgPSBzcHJzdGF0ZS0+dmlzaWJsZSAm Jgo+ICAJCShkcm1fcmVjdF93aWR0aCgmc3Byc3RhdGUtPmRzdCkgIT0gZHJtX3JlY3Rfd2lkdGgo JnNwcnN0YXRlLT5zcmMpID4+IDE2IHx8Cj4gIAkJZHJtX3JlY3RfaGVpZ2h0KCZzcHJzdGF0ZS0+ ZHN0KSAhPSBkcm1fcmVjdF9oZWlnaHQoJnNwcnN0YXRlLT5zcmMpID4+IDE2KTsKPiAgCj4gLQlw aXBlX3dtLT5waXBlX2VuYWJsZWQgPSBjc3RhdGUtPmJhc2UuYWN0aXZlOwo+IC0JcGlwZV93bS0+ c3ByaXRlc19lbmFibGVkID0gY29uZmlnLnNwcml0ZXNfZW5hYmxlZDsKPiAtCXBpcGVfd20tPnNw cml0ZXNfc2NhbGVkID0gY29uZmlnLnNwcml0ZXNfc2NhbGVkOwo+IC0KPiAgCS8qIElMSy9TTkI6 IExQMisgd2F0ZXJtYXJrcyBvbmx5IHcvbyBzcHJpdGVzICovCj4gIAlpZiAoSU5URUxfSU5GTyhk ZXYpLT5nZW4gPD0gNiAmJiBzcHJzdGF0ZS0+dmlzaWJsZSkKPiAgCQltYXhfbGV2ZWwgPSAxOwo+ ICAKPiAgCS8qIElMSy9TTkIvSVZCOiBMUDErIHdhdGVybWFya3Mgb25seSB3L28gc2NhbGluZyAq Lwo+IC0JaWYgKGNvbmZpZy5zcHJpdGVzX3NjYWxlZCkKPiArCWlmIChwaXBlX3dtLT5zcHJpdGVz X3NjYWxlZCkKPiAgCQltYXhfbGV2ZWwgPSAwOwo+ICAKPiAgCWlsa19jb21wdXRlX3dtX2xldmVs KGRldl9wcml2LCBpbnRlbF9jcnRjLCAwLCBjc3RhdGUsCj4gQEAgLTIzMjgsMTIgKzIzNDQsOCBA QCBzdGF0aWMgaW50IGlsa19jb21wdXRlX3BpcGVfd20oc3RydWN0IGludGVsX2NydGMgKmludGVs X2NydGMsCj4gIAlpZiAoSVNfSEFTV0VMTChkZXYpIHx8IElTX0JST0FEV0VMTChkZXYpKQo+ICAJ CXBpcGVfd20tPmxpbmV0aW1lID0gaHN3X2NvbXB1dGVfbGluZXRpbWVfd20oZGV2LCBjc3RhdGUp Owo+ICAKPiAtCS8qIExQMCB3YXRlcm1hcmtzIGFsd2F5cyB1c2UgMS8yIEREQiBwYXJ0aXRpb25p bmcgKi8KPiAtCWlsa19jb21wdXRlX3dtX21heGltdW1zKGRldiwgMCwgJmNvbmZpZywgSU5URUxf RERCX1BBUlRfMV8yLCAmbWF4KTsKPiAtCj4gLQkvKiBBdCBsZWFzdCBMUDAgbXVzdCBiZSB2YWxp ZCAqLwo+IC0JaWYgKCFpbGtfdmFsaWRhdGVfd21fbGV2ZWwoMCwgJm1heCwgJnBpcGVfd20tPndt WzBdKSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiArCWlmICghaWxrX3ZhbGlkYXRlX3BpcGVfd20o ZGV2LCBwaXBlX3dtKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gIAo+ICAJaWxrX2NvbXB1dGVfd21f cmVnX21heGltdW1zKGRldiwgMSwgJm1heCk7Cj4gIAo+IEBAIC0yMzU4LDYgKzIzNzAsNTkgQEAg c3RhdGljIGludCBpbGtfY29tcHV0ZV9waXBlX3dtKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9j cnRjLAo+ICB9Cj4gIAo+ICAvKgo+ICsgKiBCdWlsZCBhIHNldCBvZiAnaW50ZXJtZWRpYXRlJyB3 YXRlcm1hcmsgdmFsdWVzIHRoYXQgc2F0aXNmeSBib3RoIHRoZSBvbGQKPiArICogc3RhdGUgYW5k IHRoZSBuZXcgc3RhdGUuICBUaGVzZSBjYW4gYmUgcHJvZ3JhbW1lZCB0byB0aGUgaGFyZHdhcmUK PiArICogaW1tZWRpYXRlbHkuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGlsa19jb21wdXRlX2ludGVy bWVkaWF0ZV93bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJICAgICAgIHN0cnVjdCBp bnRlbF9jcnRjICppbnRlbF9jcnRjLAo+ICsJCQkJICAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpuZXdzdGF0ZSkKPiArewo+ICsJc3RydWN0IGludGVsX3BpcGVfd20gKmEgPSAmbmV3c3Rh dGUtPndtLmludGVybWVkaWF0ZTsKPiArCXN0cnVjdCBpbnRlbF9waXBlX3dtICpiID0gJmludGVs X2NydGMtPndtLmFjdGl2ZS5pbGs7Cj4gKwlpbnQgbGV2ZWwsIG1heF9sZXZlbCA9IGlsa193bV9t YXhfbGV2ZWwoZGV2KTsKPiArCj4gKwkvKgo+ICsJICogU3RhcnQgd2l0aCB0aGUgZmluYWwsIHRh cmdldCB3YXRlcm1hcmtzLCB0aGVuIGNvbWJpbmUgd2l0aCB0aGUKPiArCSAqIGN1cnJlbnRseSBh Y3RpdmUgd2F0ZXJtYXJrcyB0byBnZXQgdmFsdWVzIHRoYXQgYXJlIHNhZmUgYm90aCBiZWZvcmUK PiArCSAqIGFuZCBhZnRlciB0aGUgdmJsYW5rLgo+ICsJICovCj4gKwkqYSA9IG5ld3N0YXRlLT53 bS5vcHRpbWFsLmlsazsKPiArCWEtPnBpcGVfZW5hYmxlZCB8PSBiLT5waXBlX2VuYWJsZWQ7Cj4g KwlhLT5zcHJpdGVzX2VuYWJsZWQgfD0gYi0+c3ByaXRlc19lbmFibGVkOwo+ICsJYS0+c3ByaXRl c19zY2FsZWQgfD0gYi0+c3ByaXRlc19zY2FsZWQ7Cj4gKwo+ICsJZm9yIChsZXZlbCA9IDA7IGxl dmVsIDw9IG1heF9sZXZlbDsgbGV2ZWwrKykgewo+ICsJCXN0cnVjdCBpbnRlbF93bV9sZXZlbCAq YV93bSA9ICZhLT53bVtsZXZlbF07Cj4gKwkJY29uc3Qgc3RydWN0IGludGVsX3dtX2xldmVsICpi X3dtID0gJmItPndtW2xldmVsXTsKPiArCj4gKwkJYV93bS0+ZW5hYmxlICY9IGJfd20tPmVuYWJs ZTsKPiArCQlhX3dtLT5wcmlfdmFsID0gbWF4KGFfd20tPnByaV92YWwsIGJfd20tPnByaV92YWwp Owo+ICsJCWFfd20tPnNwcl92YWwgPSBtYXgoYV93bS0+c3ByX3ZhbCwgYl93bS0+c3ByX3ZhbCk7 Cj4gKwkJYV93bS0+Y3VyX3ZhbCA9IG1heChhX3dtLT5jdXJfdmFsLCBiX3dtLT5jdXJfdmFsKTsK PiArCQlhX3dtLT5mYmNfdmFsID0gbWF4KGFfd20tPmZiY192YWwsIGJfd20tPmZiY192YWwpOwo+ ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIG1l cmdlZCB3YXRlcm1hcmsgdmFsdWVzIGFyZQo+ICsJICogYWN0dWFsbHkgYSB2YWxpZCBjb25maWd1 cmF0aW9uIHRoZW1zZWx2ZXMuICBJZiB0aGV5J3JlIG5vdCwKPiArCSAqIHRoZXJlJ3Mgbm8gc2Fm ZSB3YXkgdG8gdHJhbnNpdGlvbiBmcm9tIHRoZSBvbGQgc3RhdGUgdG8KPiArCSAqIHRoZSBuZXcg c3RhdGUsIHNvIHdlIG5lZWQgdG8gZmFpbCB0aGUgYXRvbWljIHRyYW5zYWN0aW9uLgo+ICsJICov Cj4gKwlpZiAoIWlsa192YWxpZGF0ZV9waXBlX3dtKGRldiwgYSkpCj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsJLyoKPiArCSAqIElmIG91ciBpbnRlcm1lZGlhdGUgV00gYXJlIGlkZW50aWNh bCB0byB0aGUgZmluYWwgV00sIHRoZW4gd2UgY2FuCj4gKwkgKiBvbWl0IHRoZSBwb3N0LXZibGFu ayBwcm9ncmFtbWluZzsgb25seSB1cGRhdGUgaWYgaXQncyBkaWZmZXJlbnQuCj4gKwkgKi8KPiAr CWlmIChtZW1jbXAoYSwgJm5ld3N0YXRlLT53bS5vcHRpbWFsLmlsaywgc2l6ZW9mICphKSAhPSAw KQo+ICsJCW5ld3N0YXRlLT53bS5uZWVkX3Bvc3R2YmxfdXBkYXRlID0gZmFsc2U7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qCj4gICAqIE1lcmdlIHRoZSB3YXRlcm1hcmtzIGZyb20g YWxsIGFjdGl2ZSBwaXBlcyBmb3IgYSBzcGVjaWZpYyBsZXZlbC4KPiAgICovCj4gIHN0YXRpYyB2 b2lkIGlsa19tZXJnZV93bV9sZXZlbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IEBAIC0yMzY5 LDkgKzI0MzQsNyBAQCBzdGF0aWMgdm9pZCBpbGtfbWVyZ2Vfd21fbGV2ZWwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiAgCXJldF93bS0+ZW5hYmxlID0gdHJ1ZTsKPiAgCj4gIAlmb3JfZWFjaF9p bnRlbF9jcnRjKGRldiwgaW50ZWxfY3J0Yykgewo+IC0JCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjc3RhdGUgPQo+IC0JCQl0b19pbnRlbF9jcnRjX3N0YXRlKGludGVsX2NydGMtPmJh c2Uuc3RhdGUpOwo+IC0JCWNvbnN0IHN0cnVjdCBpbnRlbF9waXBlX3dtICphY3RpdmUgPSAmY3N0 YXRlLT53bS5vcHRpbWFsLmlsazsKPiArCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGlwZV93bSAqYWN0 aXZlID0gJmludGVsX2NydGMtPndtLmFjdGl2ZS5pbGs7Cj4gIAkJY29uc3Qgc3RydWN0IGludGVs X3dtX2xldmVsICp3bSA9ICZhY3RpdmUtPndtW2xldmVsXTsKPiAgCj4gIAkJaWYgKCFhY3RpdmUt PnBpcGVfZW5hYmxlZCkKPiBAQCAtMjUxOSwxNSArMjU4MiwxMyBAQCBzdGF0aWMgdm9pZCBpbGtf Y29tcHV0ZV93bV9yZXN1bHRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAo+ICAJLyogTFAw IHJlZ2lzdGVyIHZhbHVlcyAqLwo+ICAJZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGludGVsX2Ny dGMpIHsKPiAtCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlID0KPiAtCQkJ dG9faW50ZWxfY3J0Y19zdGF0ZShpbnRlbF9jcnRjLT5iYXNlLnN0YXRlKTsKPiAgCQllbnVtIHBp cGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4gLQkJY29uc3Qgc3RydWN0IGludGVsX3dtX2xl dmVsICpyID0gJmNzdGF0ZS0+d20ub3B0aW1hbC5pbGsud21bMF07Cj4gKwkJY29uc3Qgc3RydWN0 IGludGVsX3dtX2xldmVsICpyID0gJmludGVsX2NydGMtPndtLmFjdGl2ZS5pbGsud21bMF07Cj4g IAo+ICAJCWlmIChXQVJOX09OKCFyLT5lbmFibGUpKQo+ICAJCQljb250aW51ZTsKPiAgCj4gLQkJ cmVzdWx0cy0+d21fbGluZXRpbWVbcGlwZV0gPSBjc3RhdGUtPndtLm9wdGltYWwuaWxrLmxpbmV0 aW1lOwo+ICsJCXJlc3VsdHMtPndtX2xpbmV0aW1lW3BpcGVdID0gaW50ZWxfY3J0Yy0+d20uYWN0 aXZlLmlsay5saW5ldGltZTsKPiAgCj4gIAkJcmVzdWx0cy0+d21fcGlwZVtwaXBlXSA9Cj4gIAkJ CShyLT5wcmlfdmFsIDw8IFdNMF9QSVBFX1BMQU5FX1NISUZUKSB8Cj4gQEAgLTI3MzQsNyArMjc5 NSw3IEBAIHN0YXRpYyB2b2lkIGlsa193cml0ZV93bV92YWx1ZXMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ICAJZGV2X3ByaXYtPndtLmh3ID0gKnJlc3VsdHM7Cj4gIH0KPiAg Cj4gLXN0YXRpYyBib29sIGlsa19kaXNhYmxlX2xwX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cj4gK2Jvb2wgaWxrX2Rpc2FibGVfbHBfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgewo+ ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK PiAgCj4gQEAgLTM2MTAsMTkgKzM2NzEsMTUgQEAgc3RhdGljIHZvaWQgc2tsX3VwZGF0ZV93bShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIAlkZXZfcHJpdi0+d20uc2tsX2h3ID0gKnJlc3VsdHM7 Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGlsa19wcm9ncmFtX3dhdGVybWFya3Moc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkKPiArc3RhdGljIHZvaWQgaWxrX3Byb2dyYW1fd2F0ZXJt YXJrcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiAtCXN0cnVjdCBk cm1fY3J0YyAqY3J0YyA9IGNzdGF0ZS0+YmFzZS5jcnRjOwo+IC0Jc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGNydGMtPmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZGV2KTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2 Owo+ICAJc3RydWN0IGludGVsX3BpcGVfd20gbHBfd21fMV8yID0ge30sIGxwX3dtXzVfNiA9IHt9 LCAqYmVzdF9scF93bTsKPiAgCXN0cnVjdCBpbGtfd21fbWF4aW11bXMgbWF4Owo+ICAJc3RydWN0 IGludGVsX3dtX2NvbmZpZyAqY29uZmlnID0gJmRldl9wcml2LT53bS5jb25maWc7Cj4gIAlzdHJ1 Y3QgaWxrX3dtX3ZhbHVlcyByZXN1bHRzID0ge307Cj4gIAllbnVtIGludGVsX2RkYl9wYXJ0aXRp b25pbmcgcGFydGl0aW9uaW5nOwo+ICAKPiAtCXRvX2ludGVsX2NydGMoY3J0YyktPndtLmFjdGl2 ZS5pbGsgPSBjc3RhdGUtPndtLm9wdGltYWwuaWxrOwo+IC0KCjopIFNvIGV2ZW4geW91IHlvdXJz ZWxmIE5BS2VkIHRoZSBwcmV2aW91cyBwYXRjaC4KCj4gIAlpbGtfY29tcHV0ZV93bV9tYXhpbXVt cyhkZXYsIDEsIGNvbmZpZywgSU5URUxfRERCX1BBUlRfMV8yLCAmbWF4KTsKPiAgCWlsa193bV9t ZXJnZShkZXYsIGNvbmZpZywgJm1heCwgJmxwX3dtXzFfMik7Cj4gIAo+IEBAIC0zNjQ1LDI2ICsz NzAyLDI5IEBAIHN0YXRpYyB2b2lkIGlsa19wcm9ncmFtX3dhdGVybWFya3Moc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNzdGF0ZSkKPiAgCWlsa193cml0ZV93bV92YWx1ZXMoZGV2X3ByaXYsICZy ZXN1bHRzKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgaWxrX3VwZGF0ZV93bShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCj4gK3N0YXRpYyB2b2lkIGlsa19pbml0aWFsX3dhdGVybWFya3Moc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkKPiAgewo+IC0Jc3RydWN0IGludGVsX2NydGMgKmlu dGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+IC0Jc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNzdGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjc3RhdGUtPmJhc2UuY3J0Yy0+ ZGV2KTsKPiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0Yyhj c3RhdGUtPmJhc2UuY3J0Yyk7Cj4gIAo+IC0JV0FSTl9PTihjc3RhdGUtPmJhc2UuYWN0aXZlICE9 IGludGVsX2NydGMtPmFjdGl2ZSk7Cj4gKwltdXRleF9sb2NrKCZpbnRlbF9jcnRjLT53bS53bV9t dXRleCk7Cj4gKwlpbnRlbF9jcnRjLT53bS5hY3RpdmUuaWxrID0gY3N0YXRlLT53bS5pbnRlcm1l ZGlhdGU7Cj4gKwlpbGtfcHJvZ3JhbV93YXRlcm1hcmtzKGRldl9wcml2KTsKPiArCW11dGV4X3Vu bG9jaygmaW50ZWxfY3J0Yy0+d20ud21fbXV0ZXgpOwo+ICt9Cj4gIAo+IC0JLyoKPiAtCSAqIElW QiB3b3JrYXJvdW5kOiBtdXN0IGRpc2FibGUgbG93IHBvd2VyIHdhdGVybWFya3MgZm9yIGF0IGxl YXN0Cj4gLQkgKiBvbmUgZnJhbWUgYmVmb3JlIGVuYWJsaW5nIHNjYWxpbmcuICBMUCB3YXRlcm1h cmtzIGNhbiBiZSByZS1lbmFibGVkCj4gLQkgKiB3aGVuIHNjYWxpbmcgaXMgZGlzYWJsZWQuCj4g LQkgKgo+IC0JICogV2FDeFNSRGlzYWJsZWRGb3JTcHJpdGVTY2FsaW5nOml2Ygo+IC0JICovCj4g LQlpZiAoY3N0YXRlLT5kaXNhYmxlX2xwX3dtKSB7Cj4gLQkJaWxrX2Rpc2FibGVfbHBfd20oY3J0 Yy0+ZGV2KTsKPiAtCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoY3J0Yy0+ZGV2LCBpbnRlbF9jcnRj LT5waXBlKTsKPiAtCX0KPiArc3RhdGljIHZvaWQgaWxrX29wdGltaXplX3dhdGVybWFya3Moc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSkKCkkgZG9uJ3QgcmVhbGx5IGxpa2UgdGhhdCBu YW1lLiBTaG91bGQganVzdCBoYXZlIGZvb19wcmUgYW5kIGZvb19wb3N0IG9yCnNvbWV0aGluZyBh bG9uZyB0aG9zZSBsaW5lcyBJTU8uCgo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGNzdGF0ZS0+YmFzZS5jcnRjLT5kZXYpOwo+ICsJc3RydWN0IGlu dGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNzdGF0ZS0+YmFzZS5jcnRjKTsK PiAgCj4gLQlpbGtfcHJvZ3JhbV93YXRlcm1hcmtzKGNzdGF0ZSk7Cj4gKwltdXRleF9sb2NrKCZp bnRlbF9jcnRjLT53bS53bV9tdXRleCk7Cj4gKwlpZiAoY3N0YXRlLT53bS5uZWVkX3Bvc3R2Ymxf dXBkYXRlKSB7Cj4gKwkJaW50ZWxfY3J0Yy0+d20uYWN0aXZlLmlsayA9IGNzdGF0ZS0+d20ub3B0 aW1hbC5pbGs7Cj4gKwkJaWxrX3Byb2dyYW1fd2F0ZXJtYXJrcyhkZXZfcHJpdik7Cj4gKwkJY3N0 YXRlLT53bS5uZWVkX3Bvc3R2YmxfdXBkYXRlID0gZmFsc2U7Cj4gKwl9Cj4gKwltdXRleF91bmxv Y2soJmludGVsX2NydGMtPndtLndtX211dGV4KTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgc2ts X3BpcGVfd21fYWN0aXZlX3N0YXRlKHVpbnQzMl90IHZhbCwKPiBAQCAtNjk3MCw5ICs3MDMwLDEx IEBAIHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJCSAgICAg ZGV2X3ByaXYtPndtLnNwcl9sYXRlbmN5WzFdICYmIGRldl9wcml2LT53bS5jdXJfbGF0ZW5jeVsx XSkgfHwKPiAgCQkgICAgKCFJU19HRU41KGRldikgJiYgZGV2X3ByaXYtPndtLnByaV9sYXRlbmN5 WzBdICYmCj4gIAkJICAgICBkZXZfcHJpdi0+d20uc3ByX2xhdGVuY3lbMF0gJiYgZGV2X3ByaXYt PndtLmN1cl9sYXRlbmN5WzBdKSkgewo+IC0JCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20g PSBpbGtfdXBkYXRlX3dtOwo+ICAJCQlkZXZfcHJpdi0+ZGlzcGxheS5jb21wdXRlX3BpcGVfd20g PSBpbGtfY29tcHV0ZV9waXBlX3dtOwo+IC0JCQlkZXZfcHJpdi0+ZGlzcGxheS5wcm9ncmFtX3dh dGVybWFya3MgPSBpbGtfcHJvZ3JhbV93YXRlcm1hcmtzOwo+ICsJCQlkZXZfcHJpdi0+ZGlzcGxh eS5jb21wdXRlX2ludGVybWVkaWF0ZV93bSA9Cj4gKwkJCQlpbGtfY29tcHV0ZV9pbnRlcm1lZGlh dGVfd207Cj4gKwkJCWRldl9wcml2LT5kaXNwbGF5LmluaXRpYWxfd2F0ZXJtYXJrcyA9IGlsa19p bml0aWFsX3dhdGVybWFya3M7Cj4gKwkJCWRldl9wcml2LT5kaXNwbGF5Lm9wdGltaXplX3dhdGVy bWFya3MgPSBpbGtfb3B0aW1pemVfd2F0ZXJtYXJrczsKPiAgCQl9IGVsc2Ugewo+ICAJCQlEUk1f REVCVUdfS01TKCJGYWlsZWQgdG8gcmVhZCBkaXNwbGF5IHBsYW5lIGxhdGVuY3kuICIKPiAgCQkJ CSAgICAgICJEaXNhYmxlIEN4U1JcbiIpOwo+IC0tIAo+IDIuMS40Cj4gCj4gX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBs aXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApWaWxsZSBTeXJqw6Rs w6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==