From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 10/42] drm/i915: make plane helpers fully atomic Date: Tue, 12 May 2015 10:18:10 +0200 Message-ID: <20150512081810.GW15256@phenom.ffwll.local> References: <1431354318-11995-1-git-send-email-maarten.lankhorst@linux.intel.com> <1431354318-11995-11-git-send-email-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f41.google.com (mail-wg0-f41.google.com [74.125.82.41]) by gabe.freedesktop.org (Postfix) with ESMTP id 58AC76E58B for ; Tue, 12 May 2015 01:15:50 -0700 (PDT) Received: by wgbhc8 with SMTP id hc8so56259862wgb.2 for ; Tue, 12 May 2015 01:15:49 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1431354318-11995-11-git-send-email-maarten.lankhorst@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst Cc: Ander Conselvan de Oliveira , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBNYXkgMTEsIDIwMTUgYXQgMDQ6MjQ6NDZQTSArMDIwMCwgTWFhcnRlbiBMYW5raG9y c3Qgd3JvdGU6Cj4gVGhpcyBraWxscyBvZmYgbW9zdCBvZiB0aGUgdHJhbnNpdGlvbmFsIGhlbHBl cnMgYW5kIHVzZXMgYXRvbWljIHBsYW5lIHVwZGF0ZXMKPiBpbiB0aGUgbW9kZXNldCBwYXRoIHRv IHVwZGF0ZSBldmVyeXRoaW5nLgo+IAo+IEdldHRpbmcgcmlkIG9mIHRoZSB0cmFuc2l0aW9uYWwg cGxhbmUgaGVscGVycyBtZWFudCB0aGF0IHBsYW5lcyBoYWQgdG8gYmUgYWRkZWQKPiBpbiB0aGUg Y3J0YyBjaGVjayBmdW5jdGlvbi4gT24gbW9kZXNldCBhIGNvbm5lY3RvciBjYW4gYmUgbW92ZWQg dG8gYSBkaWZmZXJlbnQKPiBjcnRjLCBhbmQgdGhpcyBpcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkg b3RoZXJ3aXNlLgo+IAo+IFNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVu Lmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+CgpPayBwaWxlIG9mIGNvbW1lbnRzIG9uIHRoaXMg b25lLiBJIGRvbid0IHlldCBmdWxseSBncmFzcCBpdCBhbGwsIGJ1dCBhdAp0aGUgdmVyeSBib3R0 b20gSSd2ZSBqb3R0ZWQgZG93biBhIGxpc3Qgb2YgaWRlYXMgZm9yIGhvdyB0byBtb3ZlIGZvcndh cmQKd2l0aCB0aGlzIG9uZS4KCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0 b21pY19wbGFuZS5jIHwgIDU5ICsrLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMgICAgICB8IDY1NSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgICAgICAgfCAgIDIgKy0KPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgICAgICAgfCAgODAgKy0tLQo+ICA0IGZpbGVzIGNo YW5nZWQsIDQ0MSBpbnNlcnRpb25zKCspLCAzNTUgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmMKPiBpbmRleCA4NmJhNGIyYzNhNjUuLjg1 Yjg3ZTRkNGI2ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9t aWNfcGxhbmUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFu ZS5jCj4gQEAgLTExMCwzMiArMTEwLDQwIEBAIHN0YXRpYyBpbnQgaW50ZWxfcGxhbmVfYXRvbWlj X2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJCQkJICAgIHN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKnN0YXRlKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+ Y3J0YzsKPiAtCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOwo+IC0Jc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNf c3RhdGU7Cj4gIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0gdG9faW50ZWxfcGxh bmUocGxhbmUpOwo+ICAJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9zdGF0ZSA9IHRv X2ludGVsX3BsYW5lX3N0YXRlKHN0YXRlKTsKPiAgCj4gLQljcnRjID0gY3J0YyA/IGNydGMgOiBw bGFuZS0+Y3J0YzsKPiAtCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+IC0KPiAr CWludGVsX3N0YXRlLT52aXNpYmxlID0gZmFsc2U7Cj4gIAkvKgo+ICAJICogQm90aCBjcnRjIGFu ZCBwbGFuZS0+Y3J0YyBjb3VsZCBiZSBOVUxMIGlmIHdlJ3JlIHVwZGF0aW5nIGEKPiAgCSAqIHBy b3BlcnR5IHdoaWxlIHRoZSBwbGFuZSBpcyBkaXNhYmxlZC4gIFdlIGRvbid0IGFjdHVhbGx5IGhh dmUKPiAgCSAqIGFueXRoaW5nIGRyaXZlci1zcGVjaWZpYyB3ZSBuZWVkIHRvIHRlc3QgaW4gdGhh dCBjYXNlLCBzbwo+ICAJICoganVzdCByZXR1cm4gc3VjY2Vzcy4KPiAgCSAqLwo+IC0JaWYgKCFj cnRjKQo+ICsJaWYgKCFjcnRjKSB7Cj4gKwkJRFJNX0RFQlVHX0FUT01JQygiSW52aXNpYmxlOiBu byBjcnRjXG4iKTsKPiAgCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwljcnRjX3N0YXRlID0gc3Rh dGUtPnN0YXRlLT5jcnRjX3N0YXRlc1tkcm1fY3J0Y19pbmRleChjcnRjKV07CgpQbGVhc2UgcmV1 c2UgZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZSwgdGhpcyBkZXJlZiBtYWdpYyBpcyBoYXJkIHRv IHJlYWQuCk1heWJlIHdlIHNob3VsZCBoYXZlIGEgbm9mYWlsIHZhcmlhbnQgb2YgdGhvc2UgdG8g ZW5jb2RlIHRoZSBiZWxvdyBXQVJOX09OCmV2ZW4gLi4uCgo+ICsJaWYgKFdBUk5fT04oIWNydGNf c3RhdGUpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmICghY3J0Y19zdGF0ZS0+ZW5hYmxlKSB7 Cj4gKwkJRFJNX0RFQlVHX0FUT01JQygiSW52aXNpYmxlOiBjcnRjIG9mZlxuIik7Cj4gIAo+IC0J LyogRklYTUU6IHRlbXBvcmFyeSBoYWNrIG5lY2Vzc2FyeSB3aGlsZSB3ZSBzdGlsbCB1c2UgdGhl IHBsYW5lIHVwZGF0ZQo+IC0JICogaGVscGVyLiAqLwo+IC0JaWYgKHN0YXRlLT5zdGF0ZSkgewo+ IC0JCWNydGNfc3RhdGUgPQo+IC0JCQlpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUt PnN0YXRlLCBpbnRlbF9jcnRjKTsKPiAtCQlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQo+IC0JCQly ZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKPiAtCX0gZWxzZSB7Cj4gLQkJY3J0Y19zdGF0ZSA9 IGludGVsX2NydGMtPmNvbmZpZzsKPiArCQkvKgo+ICsJCSAqIFByb2JhYmx5IGFsbG93ZWQgYWZ0 ZXIgY29udmVydGluZyB0byBhdG9taWMuIFJpZ2h0Cj4gKwkJICogbm93IGl0IHByb2JhYmx5IG1l YW5zIHdlIGhhdmUgdGhlIHN0YXRlIGNvbmZ1c2VkLgo+ICsJCSAqLwo+ICsJCUk5MTVfU1RBVEVf V0FSTl9PTihwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKClRoaXMgaXMg YWxyZWFkeSBwb3NzaWJsZSB3aXRoIHRoZSBwcmltYXJ5IHBsYW5lIHN1cHBvcnQgLSB5b3UgY2Fu IGRpc2FibGUKaXQgKHRob3VnaCBub3QgY2hhbmdlIHRoZSBtb2RlIGF0IHRoZSBzYW1lIHRpbWUp LgoKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlpZiAoIWNydGNfc3RhdGUtPmFjdGl2ZSkg ewo+ICsJCURSTV9ERUJVR19BVE9NSUMoIkludmlzaWJsZTogZHBtcyBvZmZcbiIpOwo+ICsJCXJl dHVybiAwOwo+ICAJfQo+ICAKPiAgCS8qCj4gQEAgLTE1NSwyNCArMTYzLDkgQEAgc3RhdGljIGlu dCBpbnRlbF9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAkv KiBDbGlwIGFsbCBwbGFuZXMgdG8gQ1JUQyBzaXplLCBvciAweDAgaWYgQ1JUQyBpcyBkaXNhYmxl ZCAqLwo+ICAJaW50ZWxfc3RhdGUtPmNsaXAueDEgPSAwOwo+ICAJaW50ZWxfc3RhdGUtPmNsaXAu eTEgPSAwOwo+IC0JaW50ZWxfc3RhdGUtPmNsaXAueDIgPQo+IC0JCWNydGNfc3RhdGUtPmJhc2Uu YWN0aXZlID8gY3J0Y19zdGF0ZS0+cGlwZV9zcmNfdyA6IDA7Cj4gLQlpbnRlbF9zdGF0ZS0+Y2xp cC55MiA9Cj4gLQkJY3J0Y19zdGF0ZS0+YmFzZS5hY3RpdmUgPyBjcnRjX3N0YXRlLT5waXBlX3Ny Y19oIDogMDsKPiAtCj4gLQkvKgo+IC0JICogRGlzYWJsaW5nIGEgcGxhbmUgaXMgYWx3YXlzIG9r YXk7IHdlIGp1c3QgbmVlZCB0byB1cGRhdGUKPiAtCSAqIGZiIHRyYWNraW5nIGluIGEgc3BlY2lh bCB3YXkgc2luY2UgY2xlYW51cF9mYigpIHdvbid0Cj4gLQkgKiBnZXQgY2FsbGVkIGJ5IHRoZSBw bGFuZSBoZWxwZXJzLgo+IC0JICovCj4gLQlpZiAoc3RhdGUtPmZiID09IE5VTEwgJiYgcGxhbmUt PnN0YXRlLT5mYiAhPSBOVUxMKSB7Cj4gLQkJLyoKPiAtCQkgKiAncHJlcGFyZScgaXMgbmV2ZXIg Y2FsbGVkIHdoZW4gcGxhbmUgaXMgYmVpbmcgZGlzYWJsZWQsIHNvCj4gLQkJICogd2UgbmVlZCB0 byBoYW5kbGUgZnJvbnRidWZmZXIgdHJhY2tpbmcgYXMgYSBzcGVjaWFsIGNhc2UKPiAtCQkgKi8K PiAtCQlpbnRlbF9jcnRjLT5hdG9taWMuZGlzYWJsZWRfcGxhbmVzIHw9Cj4gLQkJCSgxIDw8IGRy bV9wbGFuZV9pbmRleChwbGFuZSkpOwo+IC0JfQo+ICsJZHJtX2NydGNfZ2V0X2h2X3RpbWluZygm Y3J0Y19zdGF0ZS0+bW9kZSwKPiArCQkJICAgICAgICZpbnRlbF9zdGF0ZS0+Y2xpcC54MiwKPiAr CQkJICAgICAgICZpbnRlbF9zdGF0ZS0+Y2xpcC55Mik7CgpJbW8gdGhpcyBpcyBvYmZ1c2NhdGlu ZyB0aGluZ3MgYSBiaXQsIHdoeSBub3QganVzdCB1bmNvbmRpdGlvbmFsbHkgY29weQpwaXBlX3Ny Y193L2ggdG8gY2xpcC54L3kyPyBnZXRfaHZfdGltaW5nIGlzIGZvciB0aGUgcGlwZSBzaXplLCB3 aGljaCBvbgptb3N0IHBsYXRmb3JtcyBtdXN0IG1hdGNoIHRoZSBwcmltYXJ5IHBsYW5lIHdpbmRv dyBleGNlcHQgZm9yIGdlbjIgYW5kCmdlbjkrLgoKPiAgCj4gIAlpZiAoc3RhdGUtPmZiICYmIGlu dGVsX3JvdGF0aW9uXzkwX29yXzI3MChzdGF0ZS0+cm90YXRpb24pKSB7Cj4gIAkJaWYgKCEoc3Rh dGUtPmZiLT5tb2RpZmllclswXSA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiBpbmRleCA5NTZjOTk2NDI3NWQuLjk2MTBmNzZh MjQ4OSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiBAQCAtMTAwLDE0 ICsxMDAsMTYgQEAgc3RhdGljIHZvaWQgdmx2X3ByZXBhcmVfcGxsKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjLAo+ICAJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29u ZmlnKTsKPiAgc3RhdGljIHZvaWQgY2h2X3ByZXBhcmVfcGxsKHN0cnVjdCBpbnRlbF9jcnRjICpj cnRjLAo+ICAJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmln KTsKPiArc3RhdGljIGludCBpbnRlbF9hdG9taWNfY2hlY2tfY3J0YyhzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwoKSSBj b25zaWRlciBmb3J3YXJkIGRlY2xhcmF0aW9ucyBldmlsLCBidXQgZ2l2ZW4gaG93IG11Y2ggb2Yg YSBtZXNzCmludGVsX2Rpc3BsYXkuYyBpcyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgbXVjaCA7 LSkKCj4gIHN0YXRpYyB2b2lkIGludGVsX2JlZ2luX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0 YyAqY3J0Yyk7Cj4gIHN0YXRpYyB2b2lkIGludGVsX2ZpbmlzaF9jcnRjX2NvbW1pdChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpOwo+ICBzdGF0aWMgdm9pZCBza2xfaW5pdF9zY2FsZXJzKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAo+ICAJc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwo+ICBzdGF0aWMgaW50IGk5eHhfZ2V0X3Jl ZmNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAgCQkJICAg aW50IG51bV9jb25uZWN0b3JzKTsKPiAtc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19lbmFibGVfcGxh bmVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gLXN0YXRpYyB2b2lkIGludGVsX2NydGNfZGlz YWJsZV9wbGFuZXMoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiArc3RhdGljIHZvaWQgaW50ZWxf cHJlX2Rpc2FibGVfcHJpbWFyeShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICtzdGF0aWMgdm9p ZCBpbnRlbF9wb3N0X2VuYWJsZV9wcmltYXJ5KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gIAo+ ICBzdGF0aWMgc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2ZpbmRfZW5jb2RlcihzdHJ1Y3Qg aW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsIGludCBwaXBlKQo+ICB7Cj4gQEAgLTIyMjAsMjgg KzIyMjIsNiBAQCB2b2lkIGludGVsX2ZsdXNoX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJUE9TVElOR19SRUFEKHJlZyk7Cj4gIH0KPiAgCj4gLS8q Kgo+IC0gKiBpbnRlbF9lbmFibGVfcHJpbWFyeV9od19wbGFuZSAtIGVuYWJsZSB0aGUgcHJpbWFy eSBwbGFuZSBvbiBhIGdpdmVuIHBpcGUKPiAtICogQHBsYW5lOiAgcGxhbmUgdG8gYmUgZW5hYmxl ZAo+IC0gKiBAY3J0YzogY3J0YyBmb3IgdGhlIHBsYW5lCj4gLSAqCj4gLSAqIEVuYWJsZSBAcGxh bmUgb24gQGNydGMsIG1ha2luZyBzdXJlIHRoYXQgdGhlIHBpcGUgaXMgcnVubmluZyBmaXJzdC4K PiAtICovCj4gLXN0YXRpYyB2b2lkIGludGVsX2VuYWJsZV9wcmltYXJ5X2h3X3BsYW5lKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAo+IC0JCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKQo+IC17 Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRldjsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgaW50 ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gLQo+IC0JLyogSWYg dGhlIHBpcGUgaXNuJ3QgZW5hYmxlZCwgd2UgY2FuJ3QgcHVtcCBwaXhlbHMgYW5kIG1heSBoYW5n ICovCj4gLQlhc3NlcnRfcGlwZV9lbmFibGVkKGRldl9wcml2LCBpbnRlbF9jcnRjLT5waXBlKTsK PiAtCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSktPnZpc2libGUgPSB0cnVlOwo+ IC0KPiAtCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9wcmltYXJ5X3BsYW5lKGNydGMsIHBsYW5l LT5mYiwKPiAtCQkJCQkgICAgICAgY3J0Yy0+eCwgY3J0Yy0+eSk7Cj4gLX0KPiAtCj4gIHN0YXRp YyBib29sIG5lZWRfdnRkX3dhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIHsKPiAgI2lmZGVm IENPTkZJR19JTlRFTF9JT01NVQo+IEBAIC0zMTYxLDExICszMTQxLDIwIEBAIGludGVsX3BpcGVf c2V0X2Jhc2VfYXRvbWljKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCj4gIHsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4g IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ ICsJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9Cj4gKwkJdG9faW50ZWxf cGxhbmVfc3RhdGUoY3J0Yy0+cHJpbWFyeS0+c3RhdGUpOwo+ICsJYm9vbCB3YXNfdmlzaWJsZSA9 IHBsYW5lX3N0YXRlLT52aXNpYmxlOwo+ICAKPiAtCWlmIChkZXZfcHJpdi0+ZGlzcGxheS5kaXNh YmxlX2ZiYykKPiArCS8qIE5vdCBzdXBwb3J0ZWQgcmlnaHQgbm93IGJ5IHRoZSBoZWxwZXIsIGJ1 dCBsZXRzIGJlIHRob3JvdWdoLiAqLwo+ICsJaWYgKHdhc192aXNpYmxlICYmICFmYikKPiArCQlp bnRlbF9wcmVfZGlzYWJsZV9wcmltYXJ5KGNydGMpOwo+ICsJZWxzZSBpZiAod2FzX3Zpc2libGUg JiYgZGV2X3ByaXYtPmRpc3BsYXkuZGlzYWJsZV9mYmMpCj4gIAkJZGV2X3ByaXYtPmRpc3BsYXku ZGlzYWJsZV9mYmMoZGV2KTsKPiAgCj4gKwlwbGFuZV9zdGF0ZS0+dmlzaWJsZSA9ICEhZmI7Cj4g IAlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfcHJpbWFyeV9wbGFuZShjcnRjLCBmYiwgeCwgeSk7 Cj4gKwlpZiAoIXdhc192aXNpYmxlICYmIGZiKQo+ICsJCWludGVsX3Bvc3RfZW5hYmxlX3ByaW1h cnkoY3J0Yyk7CgpUaGlzIGNvbnRhaW5zIGEgdmJsYW5rX3dhaXQgKGF0IGxlYXN0IGZvciBicm9h ZHdlbGwpIHdoaWNoIGlzIGEgbm8tZ28gaW4Kc2V0X2Jhc2VfYXRvbWljLiBHaXZlbiB0aGF0IHRo aXMgaXMgb25seSB1c2VkIGJ5IGtnZGIgYW5kIEknbSBub3QgYXdhcmUgb2YKYW55b25lIHVzaW5n IHRoYXQgYW5kIHdlIGFsc28gZG9uJ3QgaGF2ZSBhbnkgdGVzdGNhc2UgZm9yIHRoaXMgY29kZSBJ CnRoaW5rIHRoZSBiZXN0IHdvdWxkIGJlIHRvIGp1c3Qgbm90IHRvdWNoIHRoaXMgYW5kIGxldCBp dCBrZWVwIG9uCmJpdHJvdHRpbmcgLi4uCgo+ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gQEAgLTMx OTIsMTYgKzMxODEsMTcgQEAgc3RhdGljIHZvaWQgaW50ZWxfdXBkYXRlX3ByaW1hcnlfcGxhbmVz KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAkJc3RydWN0IGludGVsX2NydGMgKmludGVsX2Ny dGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ICAKPiAgCQlkcm1fbW9kZXNldF9sb2NrKCZjcnRj LT5tdXRleCwgTlVMTCk7Cj4gLQkJLyoKPiAtCQkgKiBGSVhNRTogT25jZSB3ZSBoYXZlIHByb3Bl ciBzdXBwb3J0IGZvciBwcmltYXJ5IHBsYW5lcyAoYW5kCj4gLQkJICogZGlzYWJsaW5nIHRoZW0g d2l0aG91dCBkaXNhYmxpbmcgdGhlIGVudGlyZSBjcnRjKSBhbGxvdyBhZ2Fpbgo+IC0JCSAqIGEg TlVMTCBjcnRjLT5wcmltYXJ5LT5mYi4KPiAtCQkgKi8KPiAtCQlpZiAoaW50ZWxfY3J0Yy0+YWN0 aXZlICYmIGNydGMtPnByaW1hcnktPmZiKQo+ICsKPiArCQlpZiAoaW50ZWxfY3J0Yy0+YWN0aXZl KSB7Cj4gKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUgPQo+ICsJCQkJ dG9faW50ZWxfcGxhbmVfc3RhdGUoY3J0Yy0+cHJpbWFyeS0+c3RhdGUpOwo+ICsKPiAgCQkJZGV2 X3ByaXYtPmRpc3BsYXkudXBkYXRlX3ByaW1hcnlfcGxhbmUoY3J0YywKPiAtCQkJCQkJCSAgICAg ICBjcnRjLT5wcmltYXJ5LT5mYiwKPiAtCQkJCQkJCSAgICAgICBjcnRjLT54LAo+IC0JCQkJCQkJ ICAgICAgIGNydGMtPnkpOwo+ICsJCQkJCQkJc3RhdGUtPmJhc2UuZmIsCj4gKwkJCQkJCQlzdGF0 ZS0+c3JjLngxID4+IDE2LAo+ICsJCQkJCQkJc3RhdGUtPnNyYy55MSA+PiAxNik7Cj4gKwkJfQoK SSB0aGluayB0aGUgYWJvdmUgaHVuayBjb3VsZCBiZSBzcGxpdCBvdXQuIEFuZCBJJ20gbm90IHN1 cmUgaXQncyByZXF1aXJlZApyZWFsbHksIHRoaXMgaXMganVzdCB0byBjYXRjaCB1cCBvbiBDUyBm bGlwcy4gV2hpY2ggd29uJ3QgYmUgdXNlZCBhbnkgbW9yZQpvbmNlIHdlIGhhdmUgYXRvbWljLCBi dXQgdW50aWwgdGhlbiB0aGUgbGVnYWN5IHN0YXRlIHN0dWZmIHVzZWQgaGVyZQpzaG91bGQgYmUg Z29vZCBlbm91Z2guCgo+ICsKPiAgCQlkcm1fbW9kZXNldF91bmxvY2soJmNydGMtPm11dGV4KTsK PiAgCX0KPiAgfQo+IEBAIC00NTcyLDIwICs0NTYyLDYgQEAgc3RhdGljIHZvaWQgaXJvbmxha2Vf cGZpdF9lbmFibGUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4gIAl9Cj4gIH0KPiAgCj4gLXN0 YXRpYyB2b2lkIGludGVsX2VuYWJsZV9zcHJpdGVfcGxhbmVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiAtCWVudW0g cGlwZSBwaXBlID0gdG9faW50ZWxfY3J0YyhjcnRjKS0+cGlwZTsKPiAtCXN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lOwo+IC0Jc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZTsKPiAtCj4gLQlk cm1fZm9yX2VhY2hfbGVnYWN5X3BsYW5lKHBsYW5lLCAmZGV2LT5tb2RlX2NvbmZpZy5wbGFuZV9s aXN0KSB7Cj4gLQkJaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZSk7Cj4gLQkJaWYg KGludGVsX3BsYW5lLT5waXBlID09IHBpcGUpCj4gLQkJCWludGVsX3BsYW5lX3Jlc3RvcmUoJmlu dGVsX3BsYW5lLT5iYXNlKTsKPiAtCX0KPiAtfQo+IC0KPiAgdm9pZCBoc3dfZW5hYmxlX2lwcyhz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiAgewo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNydGMtPmJhc2UuZGV2Owo+IEBAIC00ODE1LDQ0ICs0NzkxLDYgQEAgaW50ZWxfcHJlX2Rpc2Fi bGVfcHJpbWFyeShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIAloc3dfZGlzYWJsZV9pcHMoaW50 ZWxfY3J0Yyk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGludGVsX2NydGNfZW5hYmxlX3BsYW5l cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gLXsKPiAtCWludGVsX2VuYWJsZV9wcmltYXJ5X2h3 X3BsYW5lKGNydGMtPnByaW1hcnksIGNydGMpOwo+IC0JaW50ZWxfZW5hYmxlX3Nwcml0ZV9wbGFu ZXMoY3J0Yyk7Cj4gLQlpbnRlbF9jcnRjX3VwZGF0ZV9jdXJzb3IoY3J0YywgdHJ1ZSk7Cj4gLQo+ IC0JaW50ZWxfcG9zdF9lbmFibGVfcHJpbWFyeShjcnRjKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZv aWQgaW50ZWxfY3J0Y19kaXNhYmxlX3BsYW5lcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gLXsK PiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gLQlzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gLQlzdHJ1Y3QgaW50ZWxf cGxhbmUgKmludGVsX3BsYW5lOwo+IC0JaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+IC0K PiAtCWludGVsX2NydGNfd2FpdF9mb3JfcGVuZGluZ19mbGlwcyhjcnRjKTsKPiAtCj4gLQlpbnRl bF9wcmVfZGlzYWJsZV9wcmltYXJ5KGNydGMpOwo+IC0KPiAtCWludGVsX2NydGNfZHBtc19vdmVy bGF5X2Rpc2FibGUoaW50ZWxfY3J0Yyk7Cj4gLQlmb3JfZWFjaF9pbnRlbF9wbGFuZShkZXYsIGlu dGVsX3BsYW5lKSB7Cj4gLQkJaWYgKGludGVsX3BsYW5lLT5waXBlID09IHBpcGUpIHsKPiAtCQkJ c3RydWN0IGRybV9jcnRjICpmcm9tID0gaW50ZWxfcGxhbmUtPmJhc2UuY3J0YzsKPiAtCj4gLQkJ CWludGVsX3BsYW5lLT5kaXNhYmxlX3BsYW5lKCZpbnRlbF9wbGFuZS0+YmFzZSwKPiAtCQkJCQkJ ICAgZnJvbSA/OiBjcnRjLCB0cnVlKTsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JLyoKPiAtCSAqIEZJ WE1FOiBPbmNlIHdlIGdyb3cgcHJvcGVyIG51Y2xlYXIgZmxpcCBzdXBwb3J0IG91dCBvZiB0aGlz IHdlIG5lZWQKPiAtCSAqIHRvIGNvbXB1dGUgdGhlIG1hc2sgb2YgZmxpcCBwbGFuZXMgcHJlY2lz ZWx5LiBGb3IgdGhlIHRpbWUgYmVpbmcKPiAtCSAqIGNvbnNpZGVyIHRoaXMgYSBmbGlwIHRvIGEg TlVMTCBwbGFuZS4KPiAtCSAqLwo+IC0JaW50ZWxfZnJvbnRidWZmZXJfZmxpcChkZXYsIElOVEVM X0ZST05UQlVGRkVSX0FMTF9NQVNLKHBpcGUpKTsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQgaXJv bmxha2VfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICB7Cj4gIAlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+IEBAIC0xMTA2MSw2ICsxMDk5OSw3IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGludGVsX2hlbHBlcl9mdW5j cyA9IHsKPiAgCS5sb2FkX2x1dCA9IGludGVsX2NydGNfbG9hZF9sdXQsCj4gIAkuYXRvbWljX2Jl Z2luID0gaW50ZWxfYmVnaW5fY3J0Y19jb21taXQsCj4gIAkuYXRvbWljX2ZsdXNoID0gaW50ZWxf ZmluaXNoX2NydGNfY29tbWl0LAo+ICsJLmF0b21pY19jaGVjayA9IGludGVsX2F0b21pY19jaGVj a19jcnRjLAo+ICB9Owo+ICAKPiAgLyogVHJhbnNpdGlvbmFsIGhlbHBlciB0byBjb3B5IGN1cnJl bnQgY29ubmVjdG9yL2VuY29kZXIgc3RhdGUgdG8KPiBAQCAtMTE0MjYsMTYgKzExMzY1LDYgQEAg aW50ZWxfbW9kZXNldF9waXBlX2NvbmZpZyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAlpbnQg aTsKPiAgCWJvb2wgcmV0cnkgPSB0cnVlOwo+ICAKPiAtCWlmICghY2hlY2tfZW5jb2Rlcl9jbG9u aW5nKHN0YXRlLCB0b19pbnRlbF9jcnRjKGNydGMpKSkgewo+IC0JCURSTV9ERUJVR19LTVMoInJl amVjdGluZyBpbnZhbGlkIGNsb25pbmcgY29uZmlndXJhdGlvblxuIik7Cj4gLQkJcmV0dXJuIC1F SU5WQUw7Cj4gLQl9Cj4gLQo+IC0JaWYgKCFjaGVja19kaWdpdGFsX3BvcnRfY29uZmxpY3RzKHN0 YXRlKSkgewo+IC0JCURSTV9ERUJVR19LTVMoInJlamVjdGluZyBjb25mbGljdGluZyBkaWdpdGFs IHBvcnQgY29uZmlndXJhdGlvblxuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQoK SSB0aGluayBpdCB3b3VsZCBoZWxwIGlmIHlvdSdkIHNwbGl0IG91dCB0aGUgYWRkaXRpb24gb2Yg dGhlIGNydGNfY2hlY2sKZnVuY3Rpb24gaW50byBhIHNlcGFyYXRlIHByZXAgcGF0Y2guIEF0IGxl YXN0IEkgZG9uJ3Qgc2VlIGEgZGVwZW5jeSBoZXJlCi4uLgoKPiAgCWNsZWFyX2ludGVsX2NydGNf c3RhdGUocGlwZV9jb25maWcpOwo+ICAKPiAgCXBpcGVfY29uZmlnLT5jcHVfdHJhbnNjb2RlciA9 Cj4gQEAgLTExNTUzLDkgKzExNDgyLDI3IEBAIGludGVsX21vZGVzZXRfdXBkYXRlX3N0YXRlKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsK PiAgCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiAgCXN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3I7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubmVj dG9yX3N0YXRlOwo+ICsJaW50IGk7Cj4gIAo+ICAJaW50ZWxfc2hhcmVkX2RwbGxfY29tbWl0KGRl dl9wcml2KTsKPiAtCWRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoc3RhdGUtPmRldiwgc3Rh dGUpOwo+ICsKPiArCS8qCj4gKwkgKiBzd2FwIGNydGMgYW5kIGNvbm5lY3RvciBzdGF0ZSwgcGxh bmUgc3RhdGUgaXMgYWxyZWFkeSBzd2FwcGVkIGluCj4gKwkgKiBfX2ludGVsX3NldF9tb2RlX3Vw ZGF0ZV9wbGFuZXMuIE9uY2UgLmNydGNfZGlzYWJsZSBpcyBmaXhlZAo+ICsJICogYWxsIHN0YXRl IHNob3VsZCBiZSBzd2FwcGVkIGJlZm9yZSBkaXNhYmxpbmcgY3J0YydzLgo+ICsJICovCj4gKwlm b3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Cj4gKwkJ Y3J0Yy0+c3RhdGUtPnN0YXRlID0gc3RhdGU7Cj4gKwkJc3dhcChzdGF0ZS0+Y3J0Y19zdGF0ZXNb aV0sIGNydGMtPnN0YXRlKTsKPiArCQljcnRjLT5zdGF0ZS0+c3RhdGUgPSBOVUxMOwo+ICsJfQo+ ICsKPiArCWZvcl9lYWNoX2Nvbm5lY3Rvcl9pbl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yLCBjb25u ZWN0b3Jfc3RhdGUsIGkpIHsKPiArCQljb25uZWN0b3ItPnN0YXRlLT5zdGF0ZSA9IHN0YXRlOwo+ ICsJCXN3YXAoc3RhdGUtPmNvbm5lY3Rvcl9zdGF0ZXNbaV0sIGNvbm5lY3Rvci0+c3RhdGUpOwo+ ICsJCWNvbm5lY3Rvci0+c3RhdGUtPnN0YXRlID0gTlVMTDsKPiArCX0KPiAgCj4gIAlmb3JfZWFj aF9pbnRlbF9lbmNvZGVyKGRldiwgaW50ZWxfZW5jb2Rlcikgewo+ICAJCWlmICghaW50ZWxfZW5j b2Rlci0+YmFzZS5jcnRjKQo+IEBAIC0xMjE2Myw4ICsxMjExMCw4IEBAIGludGVsX21vZGVzZXRf Y29tcHV0ZV9jb25maWcoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJICAgIFdBUk5fT04ocGlw ZV9jb25maWctPmJhc2UuYWN0aXZlKSkKPiAgCQlwaXBlX2NvbmZpZy0+YmFzZS5hY3RpdmUgPSBm YWxzZTsKPiAgCj4gLQlpZiAoIXBpcGVfY29uZmlnLT5iYXNlLmVuYWJsZSkKPiAtCQlyZXR1cm4g cGlwZV9jb25maWc7Cj4gKwlpZiAoIXBpcGVfY29uZmlnLT5iYXNlLmFjdGl2ZSkKPiArCQlnb3Rv IGRvbmU7Cj4gIAo+ICAJcmV0ID0gaW50ZWxfbW9kZXNldF9waXBlX2NvbmZpZyhjcnRjLCBzdGF0 ZSwgcGlwZV9jb25maWcpOwo+ICAJaWYgKHJldCkKPiBAQCAtMTIxODIsOCArMTIxMjksOCBAQCBp bnRlbF9tb2Rlc2V0X2NvbXB1dGVfY29uZmlnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCSAq IHJlcXVpcmVkIGNoYW5nZXMgYW5kIGZvcmNpbmcgYSBtb2RlIHNldC4KPiAgCSAqLwo+ICAKPiAt CWludGVsX2R1bXBfcGlwZV9jb25maWcodG9faW50ZWxfY3J0YyhjcnRjKSwgcGlwZV9jb25maWcs Ilttb2Rlc2V0XSIpOwo+IC0KPiArCWludGVsX2R1bXBfcGlwZV9jb25maWcodG9faW50ZWxfY3J0 YyhjcnRjKSwgcGlwZV9jb25maWcsICJbbW9kZXNldF0iKTsKPiArZG9uZToKPiAgCXJldCA9IGRy bV9hdG9taWNfaGVscGVyX2NoZWNrX3BsYW5lcyhzdGF0ZS0+ZGV2LCBzdGF0ZSk7Cj4gIAlpZiAo cmV0KQo+ICAJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gQEAgLTEyMjQ3LDYgKzEyMTk0LDExIEBA IHN0YXRpYyBpbnQgX19pbnRlbF9zZXRfbW9kZV9jaGVja3Moc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlKQo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHN0YXRlLT5kZXY7Cj4gIAlp bnQgcmV0Owo+ICAKPiArCWlmICghY2hlY2tfZGlnaXRhbF9wb3J0X2NvbmZsaWN0cyhzdGF0ZSkp IHsKPiArCQlEUk1fREVCVUdfS01TKCJyZWplY3RpbmcgY29uZmxpY3RpbmcgZGlnaXRhbCBwb3J0 IGNvbmZpZ3VyYXRpb25cbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiAgCS8q Cj4gIAkgKiBTZWUgaWYgdGhlIGNvbmZpZyByZXF1aXJlcyBhbnkgYWRkaXRpb25hbCBwcmVwYXJh dGlvbiwgZS5nLgo+ICAJICogdG8gYWRqdXN0IGdsb2JhbCBzdGF0ZSB3aXRoIHBpcGVzIG9mZi4g IFdlIG5lZWQgdG8gZG8gdGhpcwo+IEBAIC0xMjI2Nyw2ICsxMjIxOSwxMTIgQEAgc3RhdGljIGlu dCBfX2ludGVsX3NldF9tb2RlX2NoZWNrcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUp Cj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgX19pbnRlbF9zZXRfbW9kZV91 cGRhdGVfcGxhbmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkJICAgc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlpbnQgaTsKPiArCXN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZTsKPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZTsKPiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ICsJc3RydWN0IGRybV9jcnRj ICpjcnRjOwo+ICsKPiArCS8qCj4gKwkgKiBGb3Igbm93IG9ubHkgc3dhcCBwbGFuZSBzdGF0ZSwg d2lsbCBiZSByZXBsYWNlZCB3aXRoIGEKPiArCSAqIGNhbGwgdG8gZHJtX2F0b21pY19oZWxwZXJf c3dhcF9zdGF0ZQo+ICsJICovCj4gKwlmb3JfZWFjaF9wbGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxh bmUsIG9sZF9wbGFuZV9zdGF0ZSwgaSkgewo+ICsJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0g c3RhdGUtPnBsYW5lc1tpXTsKPiArCj4gKwkJaWYgKCFwbGFuZSkKPiArCQkJY29udGludWU7Cj4g Kwo+ICsJCXBsYW5lLT5zdGF0ZS0+c3RhdGUgPSBzdGF0ZTsKPiArCQlzd2FwKHN0YXRlLT5wbGFu ZV9zdGF0ZXNbaV0sIHBsYW5lLT5zdGF0ZSk7Cj4gKwkJcGxhbmUtPnN0YXRlLT5zdGF0ZSA9IE5V TEw7Cj4gKwl9Cj4gKwo+ICsJZm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0 Y19zdGF0ZSwgaSkgewo+ICsJCWNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmZ1 bmNzOwo+ICsKPiArCQlmdW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOwo+ICsKPiArCQlpZiAo IWZ1bmNzIHx8ICFmdW5jcy0+YXRvbWljX2JlZ2luKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJ LyogWFhYOiBIYWNrIGJlY2F1c2UgY3J0YyBzdGF0ZSBpcyBub3Qgc3dhcHBlZCAqLwo+ICsJCWNy dGMtPnN0YXRlLT5tb2RlX2NoYW5nZWQgPSBjcnRjX3N0YXRlLT5tb2RlX2NoYW5nZWQ7Cj4gKwkJ Y3J0Yy0+c3RhdGUtPmFjdGl2ZV9jaGFuZ2VkID0gY3J0Y19zdGF0ZS0+YWN0aXZlX2NoYW5nZWQ7 Cj4gKwo+ICsJCURSTV9ERUJVR19BVE9NSUMoIkNhbGxpbmcgYXRvbWljX2JlZ2luIG9uIGNydGMg JWlcbiIsIGkpOwo+ICsJCWZ1bmNzLT5hdG9taWNfYmVnaW4oY3J0Yyk7Cj4gKwl9Cj4gKwo+ICsJ Zm9yX2VhY2hfcGxhbmVfaW5fc3RhdGUoc3RhdGUsIHBsYW5lLCBvbGRfcGxhbmVfc3RhdGUsIGkp IHsKPiArCQlib29sIHZpc2libGUgPSB0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUp LT52aXNpYmxlOwo+ICsJCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0b19pbnRl bF9wbGFuZShwbGFuZSk7Cj4gKwkJY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3Mg KmZ1bmNzID0KPiArCQkJcGxhbmUtPmhlbHBlcl9wcml2YXRlOwo+ICsKPiArCQljcnRjID0gcGxh bmUtPnN0YXRlLT5jcnRjOwo+ICsKPiArCQkvKiBubyBwb2ludCBpbiBkaXNhYmxpbmcgaWYgYWxy ZWFkeSBkaXNhYmxlZCAqLwo+ICsJCWlmICghdG9faW50ZWxfcGxhbmVfc3RhdGUob2xkX3BsYW5l X3N0YXRlKS0+dmlzaWJsZSAmJgo+ICsJCSAgICAhdG9faW50ZWxfcGxhbmVfc3RhdGUob2xkX3Bs YW5lX3N0YXRlKS0+aHdfZW5hYmxlZCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXRvX2ludGVs X3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSktPmh3X2VuYWJsZWQgPSBmYWxzZTsKPiArCQlEUk1f REVCVUdfQVRPTUlDKCJQbGFuZSAlaSBpcyB2aXNpYmxlOiAlaVxuIiwgaSwgdmlzaWJsZSk7Cj4g Kwo+ICsJCWlmICghdmlzaWJsZSkKPiArCQkJZnVuY3MtPmF0b21pY191cGRhdGUocGxhbmUsIG9s ZF9wbGFuZV9zdGF0ZSk7Cj4gKwkJZWxzZSBpZiAobmVlZHNfbW9kZXNldChjcnRjLT5zdGF0ZSkp Cj4gKwkJCWludGVsX3BsYW5lLT5kaXNhYmxlX3BsYW5lKHBsYW5lLCBjcnRjLCB0cnVlKTsKPiAr CX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19pbnRlbF9zZXRfbW9kZV9jbGVhbnVwX3BsYW5l cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJCSAgICBzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqb2xkX3N0YXRlKQo+ICt7Cj4gKwlpbnQgbnBsYW5lcyA9IGRldi0+bW9kZV9jb25maWcu bnVtX3RvdGFsX3BsYW5lOwo+ICsJaW50IG5jcnRjcyA9IGRldi0+bW9kZV9jb25maWcubnVtX2Ny dGM7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnBsYW5lczsgaSsrKSB7Cj4g KwkJY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgKmZ1bmNzOwo+ICsJCXN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lID0gb2xkX3N0YXRlLT5wbGFuZXNbaV07Cj4gKwkJc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0YXRlOwo+ICsKPiArCQlpZiAoIXBsYW5lKQo+ICsJ CQljb250aW51ZTsKPiArCj4gKwkJZnVuY3MgPSBwbGFuZS0+aGVscGVyX3ByaXZhdGU7Cj4gKwkJ b2xkX3BsYW5lX3N0YXRlID0gb2xkX3N0YXRlLT5wbGFuZV9zdGF0ZXNbaV07Cj4gKwo+ICsJCWlm ICh0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpLT52aXNpYmxlKSB7Cj4gKwkJCURS TV9ERUJVR19BVE9NSUMoIlBsYW5lICVpIGlzIHVwZGF0ZWRcbiIsIGkpOwo+ICsJCQlmdW5jcy0+ YXRvbWljX3VwZGF0ZShwbGFuZSwgb2xkX3BsYW5lX3N0YXRlKTsKPiArCQl9IGVsc2UKPiArCQkJ RFJNX0RFQlVHX0FUT01JQygiUGxhbmUgJWkgaXMgbGVmdCBhbG9uZVxuIiwgaSk7Cj4gKwl9Cj4g Kwo+ICsJZm9yIChpID0gMDsgaSA8IG5jcnRjczsgaSsrKSB7Cj4gKwkJY29uc3Qgc3RydWN0IGRy bV9jcnRjX2hlbHBlcl9mdW5jcyAqZnVuY3M7Cj4gKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0g b2xkX3N0YXRlLT5jcnRjc1tpXTsKPiArCj4gKwkJaWYgKCFjcnRjKQo+ICsJCQljb250aW51ZTsK PiArCj4gKwkJZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKPiArCj4gKwkJaWYgKCFmdW5j cyB8fCAhZnVuY3MtPmF0b21pY19mbHVzaCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCURSTV9E RUJVR19BVE9NSUMoIkNhbGxpbmcgYXRvbWljX2ZsdXNoIG9uIGNydGMgJWlcbiIsIGkpOwo+ICsJ CWZ1bmNzLT5hdG9taWNfZmx1c2goY3J0Yyk7Cj4gKwl9Cj4gKwlkcm1fYXRvbWljX2hlbHBlcl9j bGVhbnVwX3BsYW5lcyhkZXYsIG9sZF9zdGF0ZSk7Cj4gK30KPiArCj4gIHN0YXRpYyBpbnQgX19p bnRlbF9zZXRfbW9kZShzdHJ1Y3QgZHJtX2NydGMgKm1vZGVzZXRfY3J0YywKPiAgCQkJICAgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiAgewo+IEBAIC0xMjI3NSw3ICsx MjMzMyw3IEBAIHN0YXRpYyBpbnQgX19pbnRlbF9zZXRfbW9kZShzdHJ1Y3QgZHJtX2NydGMgKm1v ZGVzZXRfY3J0YywKPiAgCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IHBpcGVfY29u ZmlnLT5iYXNlLnN0YXRlOwo+ICAJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICAJc3RydWN0IGRy bV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+IC0JaW50IHJldCA9IDA7Cj4gKwlpbnQgcmV0Owo+ ICAJaW50IGk7Cj4gIAo+ICAJcmV0ID0gX19pbnRlbF9zZXRfbW9kZV9jaGVja3Moc3RhdGUpOwo+ IEBAIC0xMjI4NiwxNCArMTIzNDQsMTQgQEAgc3RhdGljIGludCBfX2ludGVsX3NldF9tb2RlKHN0 cnVjdCBkcm1fY3J0YyAqbW9kZXNldF9jcnRjLAo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0 Owo+ICAKPiArCV9faW50ZWxfc2V0X21vZGVfdXBkYXRlX3BsYW5lcyhkZXYsIHN0YXRlKTsKClRo aXMgY2FsbHMgY3J0Yy0+YXRvbWljX2JlZ2luLCB3aGljaCBkb2VzIGFuIGlycV9kaXNhYmxlIC4u LgoKPiArCj4gIAlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRl LCBpKSB7Cj4gIAkJaWYgKCFuZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpKQo+ICAJCQljb250aW51 ZTsKPiAgCj4gLQkJaW50ZWxfY3J0Y19kaXNhYmxlX3BsYW5lcyhjcnRjKTsKPiArCQlpbnRlbF9j cnRjX2RwbXNfb3ZlcmxheV9kaXNhYmxlKHRvX2ludGVsX2NydGMoY3J0YykpOwo+ICAJCWRldl9w cml2LT5kaXNwbGF5LmNydGNfZGlzYWJsZShjcnRjKTsKPiAtCQlpZiAoIWNydGNfc3RhdGUtPmVu YWJsZSkKPiAtCQkJZHJtX3BsYW5lX2hlbHBlcl9kaXNhYmxlKGNydGMtPnByaW1hcnkpOwo+ICAJ fQo+ICAKPiAgCS8qIE9ubHkgYWZ0ZXIgZGlzYWJsaW5nIGFsbCBvdXRwdXQgcGlwZWxpbmVzIHRo YXQgd2lsbCBiZSBjaGFuZ2VkIGNhbiB3ZQo+IEBAIC0xMjMwNSw4ICsxMjM2Myw2IEBAIHN0YXRp YyBpbnQgX19pbnRlbF9zZXRfbW9kZShzdHJ1Y3QgZHJtX2NydGMgKm1vZGVzZXRfY3J0YywKPiAg Cj4gIAltb2Rlc2V0X3VwZGF0ZV9jcnRjX3Bvd2VyX2RvbWFpbnMoc3RhdGUpOwo+ICAKPiAtCWRy bV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZGV2LCBzdGF0ZSk7Cj4gLQo+ICAJLyogTm93 IGVuYWJsZSB0aGUgY2xvY2tzLCBwbGFuZSwgcGlwZSwgYW5kIGNvbm5lY3RvcnMgdGhhdCB3ZSBz ZXQgdXAuICovCj4gIAlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0 YXRlLCBpKSB7Cj4gIAkJaWYgKCFjcnRjLT5zdGF0ZS0+YWN0aXZlKQo+IEBAIC0xMjMxNCwxMyAr MTIzNzAsMTMgQEAgc3RhdGljIGludCBfX2ludGVsX3NldF9tb2RlKHN0cnVjdCBkcm1fY3J0YyAq bW9kZXNldF9jcnRjLAo+ICAKPiAgCQl1cGRhdGVfc2NhbmxpbmVfb2Zmc2V0KHRvX2ludGVsX2Ny dGMoY3J0YykpOwo+ICAKPiAtCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZShjcnRjKTsK PiAtCQlpbnRlbF9jcnRjX2VuYWJsZV9wbGFuZXMoY3J0Yyk7Cj4gKwkJaWYgKG5lZWRzX21vZGVz ZXQoY3J0Yy0+c3RhdGUpKQo+ICsJCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZShjcnRj KTsKPiAgCX0KPiAgCj4gLQkvKiBGSVhNRTogYWRkIHN1YnBpeGVsIG9yZGVyICovCj4gKwlfX2lu dGVsX3NldF9tb2RlX2NsZWFudXBfcGxhbmVzKGRldiwgc3RhdGUpOwoKd2hpY2ggaXMgb25seSBj bGVhcmVkIGluIGF0b21pY19mbHVzaCBoZXJlLiBXZSBuZWVkIGJvdGggb2YgdGhlc2UgYXQgdGhl CmJvdHRvbSBoZXJlLiBJbiBhdG9taWMtaGVscGVycy1zcGVhayB0aGUgc2VxdWVuY2Ugc2hvdWxk IGJlCgpkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcygpOwpkcm1fYXRv bWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKCk7CmRybV9hdG9taWNfaGVscGVyX2Nv bW1pdF9wbGFuZXMoKTsKCndpdGggdGhlIG5vdGUgdGhhdCBvdXIgY3J0Y19kaXNhYmxlIG11c3Qg ZG8gdGhlIHVuY29uZGl0aW9uYWwgcGxhbmUKZGlzYWJsaW5nIGl0c2VsZi4gSS5lLiB5b3UgY2Fu J3QganVzdCByZW1vdmUgZGlzYWJsZV9wbGFuZXMgd2l0aG91dApyZXBsYWNlbWVudCwgdGhhdCBv bmUgbmVlZHMgdG8gYmUgb3Blbi1jb2RlZCAodXNpbmcgcGxhbmUtPmF0b21pY19kaXNhYmxlCmlm IHBvc3NpYmxlKS4KCkRvaW5nIHRoaW5ncyB0aGlzIHdheSB3b3VsZCBhbHNvIGFsbGV2aWF0ZSBh bnkgbmVlZCB0byBzcGxpdCB1cCBzd2FwX3N0YXRlCmFzIHlvdSBkbyBpbiB0aGlzIHBhdGNoIGhl cmUuCgo+ICAKPiAtCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRldiwgc3RhdGUp OwoKUGxlYXNlIGtlZXAgdGhpcyBzZXBhcmF0ZSBhbmQgZG9uJ3QgaGlkZSBpdCBpbiBhbm90aGVy IGZ1bmN0aW9uLCBpdCdzIGEKZGlzdGluY3Qgc3RlcCBmcm9tIHRoZSBodyB1cGRhdGUgKHdoaWNo IGlzIG5vdyBkb25lIGluIHRoZSBtaXNuYW1lZAppbnRlbF9zZXRfbW9kZV9jbGVhbnVwX3BsYW5l cykuCgo+ICsJLyogRklYTUU6IGFkZCBzdWJwaXhlbCBvcmRlciAqLwo+ICAKPiAgCWRybV9hdG9t aWNfc3RhdGVfZnJlZShzdGF0ZSk7Cj4gIAo+IEBAIC0xMjU2OCwyMCArMTI2MjQsMTEgQEAgaW50 ZWxfbW9kZXNldF9zdGFnZV9vdXRwdXRfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAg CXJldHVybiAwOwo+ICB9Cj4gIAo+IC1zdGF0aWMgYm9vbCBwcmltYXJ5X3BsYW5lX3Zpc2libGUo c3RydWN0IGRybV9jcnRjICpjcnRjKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlID0KPiAtCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShjcnRjLT5wcmltYXJ5LT5z dGF0ZSk7Cj4gLQo+IC0JcmV0dXJuIHBsYW5lX3N0YXRlLT52aXNpYmxlOwo+IC19Cj4gLQo+ICBz dGF0aWMgaW50IGludGVsX2NydGNfc2V0X2NvbmZpZyhzdHJ1Y3QgZHJtX21vZGVfc2V0ICpzZXQp Cj4gIHsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4gIAlzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUgPSBOVUxMOwo+ICAJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29u ZmlnOwo+IC0JYm9vbCBwcmltYXJ5X3BsYW5lX3dhc192aXNpYmxlOwo+ICAJaW50IHJldDsKPiAg Cj4gIAlCVUdfT04oIXNldCk7Cj4gQEAgLTEyNjIwLDM4ICsxMjY2Nyw3IEBAIHN0YXRpYyBpbnQg aW50ZWxfY3J0Y19zZXRfY29uZmlnKHN0cnVjdCBkcm1fbW9kZV9zZXQgKnNldCkKPiAgCj4gIAlp bnRlbF91cGRhdGVfcGlwZV9zaXplKHRvX2ludGVsX2NydGMoc2V0LT5jcnRjKSk7Cj4gIAo+IC0J cHJpbWFyeV9wbGFuZV93YXNfdmlzaWJsZSA9IHByaW1hcnlfcGxhbmVfdmlzaWJsZShzZXQtPmNy dGMpOwo+IC0KPiAgCXJldCA9IGludGVsX3NldF9tb2RlX3dpdGhfY29uZmlnKHNldC0+Y3J0Yywg cGlwZV9jb25maWcpOwo+IC0KPiAtCWlmIChyZXQgPT0gMCAmJgo+IC0JICAgIHBpcGVfY29uZmln LT5iYXNlLmVuYWJsZSAmJgo+IC0JICAgIHBpcGVfY29uZmlnLT5iYXNlLnBsYW5lc19jaGFuZ2Vk ICYmCj4gLQkgICAgIW5lZWRzX21vZGVzZXQoJnBpcGVfY29uZmlnLT5iYXNlKSkgewo+IC0JCXN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhzZXQtPmNydGMpOwo+ IC0KPiAtCQkvKgo+IC0JCSAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBwcmltYXJ5IHBsYW5l IGlzIHJlLWVuYWJsZWQgaWYgaXQKPiAtCQkgKiBoYXMgcHJldmlvdXNseSBiZWVuIHR1cm5lZCBv ZmYuCj4gLQkJICovCj4gLQkJaWYgKHJldCA9PSAwICYmICFwcmltYXJ5X3BsYW5lX3dhc192aXNp YmxlICYmCj4gLQkJICAgIHByaW1hcnlfcGxhbmVfdmlzaWJsZShzZXQtPmNydGMpKSB7Cj4gLQkJ CVdBUk5fT04oIWludGVsX2NydGMtPmFjdGl2ZSk7Cj4gLQkJCWludGVsX3Bvc3RfZW5hYmxlX3By aW1hcnkoc2V0LT5jcnRjKTsKPiAtCQl9Cj4gLQo+IC0JCS8qCj4gLQkJICogSW4gdGhlIGZhc3Ri b290IGNhc2UgdGhpcyBtYXkgYmUgb3VyIG9ubHkgY2hlY2sgb2YgdGhlCj4gLQkJICogc3RhdGUg YWZ0ZXIgYm9vdC4gIEl0IHdvdWxkIGJlIGJldHRlciB0byBvbmx5IGRvIGl0IG9uCj4gLQkJICog dGhlIGZpcnN0IHVwZGF0ZSwgYnV0IHdlIGRvbid0IGhhdmUgYSBuaWNlIHdheSBvZiBkb2luZyB0 aGF0Cj4gLQkJICogKGFuZCByZWFsbHksIHNldF9jb25maWcgaXNuJ3QgdXNlZCBtdWNoIGZvciBo aWdoIGZyZXEgcGFnZQo+IC0JCSAqIGZsaXBwaW5nLCBzbyBpbmNyZWFzaW5nIGl0cyBjb3N0IGhl cmUgc2hvdWxkbid0IGJlIGEgYmlnCj4gLQkJICogZGVhbCkuCj4gLQkJICovCj4gLQkJaWYgKGk5 MTUuZmFzdGJvb3QgJiYgcmV0ID09IDApCj4gLQkJCWludGVsX21vZGVzZXRfY2hlY2tfc3RhdGUo c2V0LT5jcnRjLT5kZXYpOwo+IC0JfQo+IC0KPiAgCWlmIChyZXQpIHsKPiAgCQlEUk1fREVCVUdf S01TKCJmYWlsZWQgdG8gc2V0IG1vZGUgb24gW0NSVEM6JWRdLCBlcnIgPSAlZFxuIiwKPiAgCQkJ ICAgICAgc2V0LT5jcnRjLT5iYXNlLmlkLCByZXQpOwo+IEBAIC0xMjc5MSw2ICsxMjgwNyw5IEBA IGJvb2wgaW50ZWxfd21fbmVlZF91cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAkg ICAgcGxhbmUtPnN0YXRlLT5yb3RhdGlvbiAhPSBzdGF0ZS0+cm90YXRpb24pCj4gIAkJcmV0dXJu IHRydWU7Cj4gIAo+ICsJaWYgKHBsYW5lLT5zdGF0ZS0+Y3J0Y193ICE9IHN0YXRlLT5jcnRjX3cp Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICAJcmV0dXJuIGZhbHNlOwo+ICB9Cj4gIAo+IEBAIC0x MjgxOSw2ICsxMjgzOCw5IEBAIGludGVsX3ByZXBhcmVfcGxhbmVfZmIoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCj4gIAl1bnNpZ25lZCBmcm9udGJ1ZmZlcl9iaXRzID0gMDsKPiAgCWludCByZXQg PSAwOwo+ICAKPiArCWlmICghdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKS0+dmlz aWJsZSkKPiArCQlvbGRfb2JqID0gTlVMTDsKPiArCj4gIAlpZiAoIW9iaikKPiAgCQlyZXR1cm4g MDsKPiAgCj4gQEAgLTEyOTE1LDEwICsxMjkzNyw4IEBAIGludGVsX2NoZWNrX3ByaW1hcnlfcGxh bmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAkJCSAgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpzdGF0ZSkKPiAgewo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBsYW5lLT5kZXY7 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl Owo+ICAJc3RydWN0IGRybV9jcnRjICpjcnRjID0gc3RhdGUtPmJhc2UuY3J0YzsKPiAgCXN0cnVj dCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOwo+IC0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGU7Cj4gIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5iYXNlLmZi Owo+ICAJc3RydWN0IGRybV9yZWN0ICpkZXN0ID0gJnN0YXRlLT5kc3Q7Cj4gIAlzdHJ1Y3QgZHJt X3JlY3QgKnNyYyA9ICZzdGF0ZS0+c3JjOwo+IEBAIC0xMjkyNiw5MCArMTI5NDYsNDYgQEAgaW50 ZWxfY2hlY2tfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCWJvb2wg Y2FuX3Bvc2l0aW9uID0gZmFsc2U7Cj4gIAlpbnQgbWF4X3NjYWxlID0gRFJNX1BMQU5FX0hFTFBF Ul9OT19TQ0FMSU5HOwo+ICAJaW50IG1pbl9zY2FsZSA9IERSTV9QTEFORV9IRUxQRVJfTk9fU0NB TElORzsKPiAtCWludCByZXQ7Cj4gIAo+IC0JY3J0YyA9IGNydGMgPyBjcnRjIDogcGxhbmUtPmNy dGM7Cj4gIAlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiAtCWNydGNfc3RhdGUg PSBzdGF0ZS0+YmFzZS5zdGF0ZSA/Cj4gLQkJaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0 YXRlLT5iYXNlLnN0YXRlLCBpbnRlbF9jcnRjKSA6IE5VTEw7Cj4gIAo+ICAJaWYgKElOVEVMX0lO Rk8oZGV2KS0+Z2VuID49IDkpIHsKPiArCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSA9Cj4gKwkJCWludGVsX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZS0+YmFzZS5zdGF0 ZSwgaW50ZWxfY3J0Yyk7Cj4gKwo+ICAJCW1pbl9zY2FsZSA9IDE7Cj4gIAkJbWF4X3NjYWxlID0g c2tsX21heF9zY2FsZShpbnRlbF9jcnRjLCBjcnRjX3N0YXRlKTsKPiAgCQljYW5fcG9zaXRpb24g PSB0cnVlOwo+ICAJfQo+ICAKPiAtCXJldCA9IGRybV9wbGFuZV9oZWxwZXJfY2hlY2tfdXBkYXRl KHBsYW5lLCBjcnRjLCBmYiwKPiAtCQkJCQkgICAgc3JjLCBkZXN0LCBjbGlwLAo+IC0JCQkJCSAg ICBtaW5fc2NhbGUsCj4gLQkJCQkJICAgIG1heF9zY2FsZSwKPiAtCQkJCQkgICAgY2FuX3Bvc2l0 aW9uLCB0cnVlLAo+IC0JCQkJCSAgICAmc3RhdGUtPnZpc2libGUpOwo+IC0JaWYgKHJldCkKPiAt CQlyZXR1cm4gcmV0Owo+IC0KPiAtCWlmIChpbnRlbF9jcnRjLT5hY3RpdmUpIHsKPiAtCQlzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSA9Cj4gLQkJCXRvX2ludGVsX3BsYW5lX3N0 YXRlKHBsYW5lLT5zdGF0ZSk7Cj4gLQo+IC0JCWludGVsX2NydGMtPmF0b21pYy53YWl0X2Zvcl9m bGlwcyA9IHRydWU7Cj4gLQo+IC0JCS8qCj4gLQkJICogRkJDIGRvZXMgbm90IHdvcmsgb24gc29t ZSBwbGF0Zm9ybXMgZm9yIHJvdGF0ZWQKPiAtCQkgKiBwbGFuZXMsIHNvIGRpc2FibGUgaXQgd2hl biByb3RhdGlvbiBpcyBub3QgMCBhbmQKPiAtCQkgKiB1cGRhdGUgaXQgd2hlbiByb3RhdGlvbiBp cyBzZXQgYmFjayB0byAwLgo+IC0JCSAqCj4gLQkJICogRklYTUU6IFRoaXMgaXMgcmVkdW5kYW50 IHdpdGggdGhlIGZiYyB1cGRhdGUgZG9uZSBpbgo+IC0JCSAqIHRoZSBwcmltYXJ5IHBsYW5lIGVu YWJsZSBmdW5jdGlvbiBleGNlcHQgdGhhdCB0aGF0Cj4gLQkJICogb25lIGlzIGRvbmUgdG9vIGxh dGUuIFdlIGV2ZW50dWFsbHkgbmVlZCB0byB1bmlmeQo+IC0JCSAqIHRoaXMuCj4gLQkJICovCj4g LQkJaWYgKHN0YXRlLT52aXNpYmxlICYmCj4gLQkJICAgIElOVEVMX0lORk8oZGV2KS0+Z2VuIDw9 IDQgJiYgIUlTX0c0WChkZXYpICYmCj4gLQkJICAgIGRldl9wcml2LT5mYmMuY3J0YyA9PSBpbnRl bF9jcnRjICYmCj4gLQkJICAgIHN0YXRlLT5iYXNlLnJvdGF0aW9uICE9IEJJVChEUk1fUk9UQVRF XzApKSB7Cj4gLQkJCWludGVsX2NydGMtPmF0b21pYy5kaXNhYmxlX2ZiYyA9IHRydWU7Cj4gLQkJ fQo+IC0KPiAtCQlpZiAoc3RhdGUtPnZpc2libGUgJiYgIW9sZF9zdGF0ZS0+dmlzaWJsZSkgewo+ IC0JCQkvKgo+IC0JCQkgKiBCRFcgc2lnbmFscyBmbGlwIGRvbmUgaW1tZWRpYXRlbHkgaWYgdGhl IHBsYW5lCj4gLQkJCSAqIGlzIGRpc2FibGVkLCBldmVuIGlmIHRoZSBwbGFuZSBlbmFibGUgaXMg YWxyZWFkeQo+IC0JCQkgKiBhcm1lZCB0byBvY2N1ciBhdCB0aGUgbmV4dCB2YmxhbmsgOigKPiAt CQkJICovCj4gLQkJCWlmIChJU19CUk9BRFdFTEwoZGV2KSkKPiAtCQkJCWludGVsX2NydGMtPmF0 b21pYy53YWl0X3ZibGFuayA9IHRydWU7Cj4gLQkJfQo+IC0KPiAtCQlpbnRlbF9jcnRjLT5hdG9t aWMuZmJfYml0cyB8PQo+IC0JCQlJTlRFTF9GUk9OVEJVRkZFUl9QUklNQVJZKGludGVsX2NydGMt PnBpcGUpOwo+IC0KPiAtCQlpbnRlbF9jcnRjLT5hdG9taWMudXBkYXRlX2ZiYyA9IHRydWU7Cj4g LQo+IC0JCWlmIChpbnRlbF93bV9uZWVkX3VwZGF0ZShwbGFuZSwgJnN0YXRlLT5iYXNlKSkKPiAt CQkJaW50ZWxfY3J0Yy0+YXRvbWljLnVwZGF0ZV93bSA9IHRydWU7Cj4gLQl9Cj4gKwlyZXR1cm4g ZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIGNydGMsIGZiLAo+ICsJCQkJCSAg ICAgc3JjLCBkZXN0LCBjbGlwLAo+ICsJCQkJCSAgICAgbWluX3NjYWxlLCBtYXhfc2NhbGUsCj4g KwkJCQkJICAgICBjYW5fcG9zaXRpb24sIHRydWUsCj4gKwkJCQkJICAgICAmc3RhdGUtPnZpc2li bGUpOwo+ICt9Cj4gIAo+IC0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDkpIHsKPiAtCQly ZXQgPSBza2xfdXBkYXRlX3NjYWxlcl91c2VycyhpbnRlbF9jcnRjLCBjcnRjX3N0YXRlLAo+IC0J CQl0b19pbnRlbF9wbGFuZShwbGFuZSksIHN0YXRlLCAwKTsKPiAtCQlpZiAocmV0KQo+IC0JCQly ZXR1cm4gcmV0Owo+IC0JfQo+ICtzdGF0aWMgdm9pZAo+ICtpbnRlbF9kaXNhYmxlX3ByaW1hcnlf cGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJCSAgICBzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4gKwkJCSAgICBib29sIGZvcmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gcGxhbmUtPmRldjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7Cj4gIAo+IC0JcmV0dXJuIDA7Cj4gKwlkZXZfcHJpdi0+ZGlzcGxh eS51cGRhdGVfcHJpbWFyeV9wbGFuZShjcnRjLCBOVUxMLCAwLCAwKTsKPiAgfQo+ICAKPiAgc3Rh dGljIHZvaWQKPiAgaW50ZWxfY29tbWl0X3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCj4gLQkJCSAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gKwkJCSAg IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqbmV3X3N0YXRlKQo+ICB7Cj4gLQlzdHJ1Y3QgZHJt X2NydGMgKmNydGMgPSBzdGF0ZS0+YmFzZS5jcnRjOwo+IC0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIgPSBzdGF0ZS0+YmFzZS5mYjsKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IG5ld19z dGF0ZS0+YmFzZS5jcnRjOwo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBuZXdfc3Rh dGUtPmJhc2UuZmI7Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRldjsKPiAg CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4g IAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YzsKPiAtCXN0cnVjdCBkcm1fcmVjdCAqc3Jj ID0gJnN0YXRlLT5zcmM7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgKnNyYyA9ICZuZXdfc3RhdGUtPnNy YzsKPiAgCj4gIAljcnRjID0gY3J0YyA/IGNydGMgOiBwbGFuZS0+Y3J0YzsKPiAgCWludGVsX2Ny dGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+IEBAIC0xMzAxOCwyNSArMTI5OTQsMTc4IEBAIGlu dGVsX2NvbW1pdF9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJY3J0 Yy0+eCA9IHNyYy0+eDEgPj4gMTY7Cj4gIAljcnRjLT55ID0gc3JjLT55MSA+PiAxNjsKPiAgCj4g LQlpZiAoaW50ZWxfY3J0Yy0+YWN0aXZlKSB7Cj4gLQkJaWYgKHN0YXRlLT52aXNpYmxlKQo+IC0J CQkvKiBGSVhNRToga2lsbCB0aGlzIGZhc3Rib290IGhhY2sgKi8KPiAtCQkJaW50ZWxfdXBkYXRl X3BpcGVfc2l6ZShpbnRlbF9jcnRjKTsKPiArCWlmICghbmV3X3N0YXRlLT52aXNpYmxlIHx8Cj4g KwkgICAgV0FSTl9PTihuZXdfc3RhdGUtPnZpc2libGUgJiYgIWNydGMtPnN0YXRlLT5hY3RpdmUp KSB7Cj4gKwkJaW50ZWxfZGlzYWJsZV9wcmltYXJ5X3BsYW5lKHBsYW5lLCBjcnRjLCBmYWxzZSk7 Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIEZJWE1FOiBraWxsIHRoaXMgZmFzdGJvb3QgaGFjayAqLwo+ ICsJCWludGVsX3VwZGF0ZV9waXBlX3NpemUoaW50ZWxfY3J0Yyk7Cj4gIAo+IC0JCWRldl9wcml2 LT5kaXNwbGF5LnVwZGF0ZV9wcmltYXJ5X3BsYW5lKGNydGMsIHBsYW5lLT5mYiwKPiAtCQkJCQkJ ICAgICAgIGNydGMtPngsIGNydGMtPnkpOwo+ICsJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9w cmltYXJ5X3BsYW5lKGNydGMsIGZiLAo+ICsJCQkJCQkgICAgICAgc3JjLT54MSA+PiAxNiwKPiAr CQkJCQkJICAgICAgIHNyYy0+eTEgPj4gMTYpOwo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9p ZAo+IC1pbnRlbF9kaXNhYmxlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs Cj4gLQkJCSAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gLQkJCSAgICBib29sIGZvcmNlKQo+ ICsvKiBUcmFuc2l0aW9uYWwgY2hlY2tpbmcgaGVyZSwgbW9zdGx5IGZvciBwbGFuZSB1cGRhdGVz ICovCj4gK3N0YXRpYyBpbnQgaW50ZWxfYXRvbWljX2NoZWNrX2NydGMoc3RydWN0IGRybV9jcnRj ICpjcnRjLAo+ICsJCQkJICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ICB7 Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRldjsKPiArCXN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0 ZSk7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0 Yyk7Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBjcnRjX3N0YXRlLT5zdGF0 ZTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRy bV9wbGFuZSAqcGxhbmU7Cj4gKwl1bnNpZ25lZCBwbGFuZV9tYXNrOwo+ICsJaW50IGlkeCwgcmV0 Owo+ICsJYm9vbCBtb2RlX2NoYW5nZWQgPSBuZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpOwo+ICsJ Ym9vbCBpc19jcnRjX2VuYWJsZWQgPSBjcnRjX3N0YXRlLT5hY3RpdmU7Cj4gKwlib29sIHdhc19j cnRjX2VuYWJsZWQgPSBjcnRjLT5zdGF0ZS0+YWN0aXZlOwo+ICAKPiAtCWRldl9wcml2LT5kaXNw bGF5LnVwZGF0ZV9wcmltYXJ5X3BsYW5lKGNydGMsIE5VTEwsIDAsIDApOwo+ICsJaWYgKCFjaGVj a19lbmNvZGVyX2Nsb25pbmcoc3RhdGUsIHRvX2ludGVsX2NydGMoY3J0YykpKSB7Cj4gKwkJRFJN X0RFQlVHX0tNUygicmVqZWN0aW5nIGludmFsaWQgY2xvbmluZyBjb25maWd1cmF0aW9uXG4iKTsK PiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KCkkgdGhpbmsgd2UgbmVlZCB0d28gaGF2ZSAyIGJs b2NrcyBpbiB0aGUgY3J0Y19jaGVjayBmdW5jdGlvbjogT25lIHBhcnQKdGhhdCBqdXN0IHVwZGF0 ZXMgd2F0ZXJtYXJrcyAod2hlbiBzdGF0ZS0+cGxhbmVfY2hhbmdlZCBpcyBzZXQpIGFuZCBvbmUK cGFydCB0aGF0IGRlYWxzIHdpdGggdGhlIG1vZGVzZXQgY2hlY2tzIChhZGRpbmcgcGxhbmVzLCBj aGVja2luZyBjbG9uaW5nCmFuZCBhbGwgdGhhdCkgd2hlbiBuZWVkc19tb2Rlc2V0KHN0YXRlKSBp cyB0cnVlLgoKPiArCj4gKwltZW1zZXQoJmludGVsX2NydGMtPmF0b21pYywgMCwgc2l6ZW9mKGlu dGVsX2NydGMtPmF0b21pYykpOwo+ICsJaW50ZWxfY3J0Yy0+YXRvbWljLnVwZGF0ZV93bSA9IG1v ZGVfY2hhbmdlZDsKPiArCj4gKwlpZHggPSBjcnRjLT5iYXNlLmlkOwo+ICsJSTkxNV9TVEFURV9X QVJOKGNydGMtPnN0YXRlLT5hY3RpdmUgIT0gaW50ZWxfY3J0Yy0+YWN0aXZlLAo+ICsJCSJDcnRj ICVpIG1pc21hdGNoIGJldHdlZW4gc3RhdGUtPmFjdGl2ZSglaSkgYW5kIGNydGMtPmFjdGl2ZSAo JWkpXG4iLAo+ICsJCWlkeCwgY3J0Yy0+c3RhdGUtPmFjdGl2ZSwgaW50ZWxfY3J0Yy0+YWN0aXZl KTsKClN0YXRlIGNvbXB1dGF0aW9uIGlzIGFzeW5jLCB5b3UgY2FudCBjaGVjayB0aGlzIGluIHRo ZSBhdG9taWNfY2hlY2sKZnVuY3Rpb25zLiBJZiB5b3UgdGhpbmsgdGhpcyBpcyB1c2VmdWwgdGhl biB3ZSdkIG5lZWQgdG8gY2hlY2sgdGhpcyBldmVyeQp0aW1lIGJlZm9yZSB3ZSB1cGRhdGUgaW50 ZWxfY3J0Yy0+YWN0aXZlLiBCdXQgd2UgaGF2ZSB0aGUgdmFyaW91cyBXQVJOX09OCmFsbCBvdmVy IHRoZSBwbGFjZSAoY29udmVydGVkIG92ZXIgdG8gY3J0Yy0+c3RhdGUtPmFjdGl2ZSkgc28gSSB0 aGluawp3ZSdyZSBtb3JlIHRoYW4gY292ZXJlZCBhbmQgY2FuIGp1c3QgcmlwIG91dCBvdXIgb3du IGludGVsX2NydGMtPmFjdGl2ZQpldmVudHVhbGx5LiBBdCBsZWFzdCB0aGF0J3Mga2luZGEgYmVl biBteSBpZGVhIHdpdGggc3RhdGUtPmFjdGl2ZSB0b28uCgo+ICsKPiArCURSTV9ERUJVR19BVE9N SUMoIkNydGMgJWkgd2FzIGVuYWJsZWQgJWkgbm93IGVuYWJsZWQ6ICVpXG4iLAo+ICsJCQkgaWR4 LCB3YXNfY3J0Y19lbmFibGVkLCBpc19jcnRjX2VuYWJsZWQpOwo+ICsKPiArCXBsYW5lX21hc2sg PSBjcnRjX3N0YXRlLT5wbGFuZV9tYXNrIHwgY3J0Yy0+c3RhdGUtPnBsYW5lX21hc2s7Cj4gKwlk cm1fZm9yX2VhY2hfcGxhbmVfbWFzayhwbGFuZSwgZGV2LCBwbGFuZV9tYXNrKSB7Cj4gKwkJaW50 IGkgPSBkcm1fcGxhbmVfaW5kZXgocGxhbmUpOwo+ICsJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlID0gc3RhdGUtPnBsYW5lX3N0YXRlc1tpXTsKPiArCQlzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZTsKPiArCQlib29sIHR1cm5fb2ZmLCB0dXJuX29u LCB2aXNpYmxlLCB3YXNfdmlzaWJsZTsKPiArCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsK PiArCj4gKwkJaWYgKCFwbGFuZV9zdGF0ZSkgewo+ICsJCQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5l X2hlbHBlcl9mdW5jcyAqZnVuY3M7Cj4gKwkJCWludCByZXQ7Cj4gKwo+ICsJCQlpZiAoIW1vZGVf Y2hhbmdlZCB8fCAhcGxhbmUtPnN0YXRlLT5mYikKPiArCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJ cGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdGF0ZSwgcGxhbmUpOwoK V2UgbmVlZCB0byBjaGVjayBmb3IgdGhlIGNydGMgY29uc3RyYWlucyBiZWZvcmUgYWNxdWlyaW5n IHRoZSBwbGFuZSBzdGF0ZSwKb3RoZXJ3aXNlIGFsbCB0aGUgbG9ja2luZyBnb2VzIHNpbmdsZS10 aHJlYWRlZC4gT24gaW50ZWwgaHcgd2UgY2FuIGRvIHRoYXQKYmVjYXVzZSB0aGUgcGxhbmUtPmNy dGMgbGlua3MgYXJlIHN0YXRpYywgeW91IGNhbiBsb29rIGF0CmludGVsX3BsYW5lLT5waXBlLgoK PiArCQkJaWYgKElTX0VSUihwbGFuZV9zdGF0ZSkpCj4gKwkJCQlyZXR1cm4gUFRSX0VSUihwbGFu ZV9zdGF0ZSk7Cj4gKwo+ICsJCQlmdW5jcyA9IHBsYW5lLT5oZWxwZXJfcHJpdmF0ZTsKPiArCQkJ cmV0ID0gZnVuY3MtPmF0b21pY19jaGVjayhwbGFuZSwgcGxhbmVfc3RhdGUpOwo+ICsJCQlpZiAo cmV0KQo+ICsJCQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gKwkJb2xkX3BsYW5lX3N0YXRlID0gdG9f aW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKPiArCj4gKwkJd2FzX3Zpc2libGUgPSB3 YXNfY3J0Y19lbmFibGVkICYmIChvbGRfcGxhbmVfc3RhdGUtPnZpc2libGUgfHwKPiArCQkJICAg ICAgb2xkX3BsYW5lX3N0YXRlLT5od19lbmFibGVkKTsKPiArCQl2aXNpYmxlID0gdG9faW50ZWxf cGxhbmVfc3RhdGUocGxhbmVfc3RhdGUpLT52aXNpYmxlICYmCj4gKwkJCSAgICAgIGlzX2NydGNf ZW5hYmxlZDsKPiArCj4gKwkJaWYgKHBsYW5lLT5zdGF0ZS0+Y3J0YyAhPSBjcnRjKQo+ICsJCQl3 YXNfdmlzaWJsZSA9IGZhbHNlOwo+ICsJCWlmIChwbGFuZV9zdGF0ZS0+Y3J0YyAhPSBjcnRjKQo+ ICsJCQl2aXNpYmxlID0gZmFsc2U7Cj4gKwo+ICsJCWlmICghd2FzX3Zpc2libGUgJiYgIXZpc2li bGUpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQl0dXJuX29mZiA9IHdhc192aXNpYmxlICYmICgh dmlzaWJsZSB8fCBtb2RlX2NoYW5nZWQpOwo+ICsJCXR1cm5fb24gPSB2aXNpYmxlICYmICghd2Fz X3Zpc2libGUgfHwgbW9kZV9jaGFuZ2VkKTsKPiArCQlmYiA9IHBsYW5lX3N0YXRlLT5mYjsKPiAr Cj4gKwkJRFJNX0RFQlVHX0FUT01JQygiQ3J0YyAlaSBoYXMgcGxhbmUgJWkgd2l0aCBmYiAlaVxu IiwgaWR4LAo+ICsJCQlwbGFuZS0+YmFzZS5pZCwgZmIgPyBmYi0+YmFzZS5pZCA6IC0xKTsKPiAr CQlEUk1fREVCVUdfQVRPTUlDKCJcdHZpc2libGUgJWkgLT4gJWksIG9mZiAlaSwgb24gJWksIG1z ICVpXG4iLAo+ICsJCQl3YXNfdmlzaWJsZSwgdmlzaWJsZSwgdHVybl9vZmYsIHR1cm5fb24sIG1v ZGVfY2hhbmdlZCk7Cj4gKwo+ICsJCS8qIHBsYW5lIGJlaW5nIHR1cm5lZCBvZmYgYXMgcGFydCBv ZiBtb2Rlc2V0IG9yIGNoYW5nZXM/ICovCj4gKwkJaWYgKGludGVsX3dtX25lZWRfdXBkYXRlKHBs YW5lLCBwbGFuZV9zdGF0ZSkpCj4gKwkJCWludGVsX2NydGMtPmF0b21pYy51cGRhdGVfd20gPSB0 cnVlOwo+ICsKPiArCQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOSAmJgo+ICsJCSAgICBw bGFuZS0+YmFzZS50eXBlICE9IERSTV9QTEFORV9UWVBFX0NVUlNPUikgewo+ICsJCQlyZXQgPSBz a2xfdXBkYXRlX3NjYWxlcl91c2VycyhpbnRlbF9jcnRjLCBwaXBlX2NvbmZpZywKPiArCQkJCQl0 b19pbnRlbF9wbGFuZShwbGFuZSksCj4gKwkJCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmVf c3RhdGUpLCAwKTsKPiArCQkJaWYgKHJldCkKPiArCQkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsK PiArCQkvKgo+ICsJCSAqICdwcmVwYXJlJyBpcyBuZXZlciBjYWxsZWQgd2hlbiBwbGFuZSBpcyBi ZWluZyBkaXNhYmxlZCwgc28KPiArCQkgKiB3ZSBuZWVkIHRvIGhhbmRsZSBmcm9udGJ1ZmZlciB0 cmFja2luZyBhcyBhIHNwZWNpYWwgY2FzZQo+ICsJCSAqLwo+ICsJCWlmIChvbGRfcGxhbmVfc3Rh dGUtPmJhc2UuZmIgJiYgIXZpc2libGUpCj4gKwkJCWludGVsX2NydGMtPmF0b21pYy5kaXNhYmxl ZF9wbGFuZXMgfD0gMSA8PCBpOwo+ICsKPiArCQlzd2l0Y2ggKHBsYW5lLT5iYXNlLnR5cGUpIHsK CldlIHNob3VsZCBwcm9iYWJseSBzdG9yZSB0aGUgZnJvbnRidWZmZXIgdHJhY2tpbmcgbWFzayBp biBpbnRlbF9wbGFuZQpzb21ld2hlcmUuCgo+ICsJCWNhc2UgRFJNX1BMQU5FX1RZUEVfUFJJTUFS WToKPiArCQkJaWYgKHZpc2libGUpCj4gKwkJCQlpbnRlbF9jcnRjLT5hdG9taWMuZmJfYml0cyB8 PQo+ICsJCQkJICAgIElOVEVMX0ZST05UQlVGRkVSX1BSSU1BUlkoaW50ZWxfY3J0Yy0+cGlwZSk7 Cj4gKwo+ICsJCQlpbnRlbF9jcnRjLT5hdG9taWMud2FpdF9mb3JfZmxpcHMgPSB0cnVlOwo+ICsJ CQlpbnRlbF9jcnRjLT5hdG9taWMucHJlX2Rpc2FibGVfcHJpbWFyeSA9IHR1cm5fb2ZmOwo+ICsJ CQlpbnRlbF9jcnRjLT5hdG9taWMucG9zdF9lbmFibGVfcHJpbWFyeSA9IHR1cm5fb247Cj4gKwo+ ICsJCQlpZiAodHVybl9vZmYpCj4gKwkJCQlpbnRlbF9jcnRjLT5hdG9taWMuZGlzYWJsZV9mYmMg PSB0cnVlOwo+ICsKPiArCQkJLyoKPiArCQkJICogRkJDIGRvZXMgbm90IHdvcmsgb24gc29tZSBw bGF0Zm9ybXMgZm9yIHJvdGF0ZWQKPiArCQkJICogcGxhbmVzLCBzbyBkaXNhYmxlIGl0IHdoZW4g cm90YXRpb24gaXMgbm90IDAgYW5kCj4gKwkJCSAqIHVwZGF0ZSBpdCB3aGVuIHJvdGF0aW9uIGlz IHNldCBiYWNrIHRvIDAuCj4gKwkJCSAqCj4gKwkJCSAqIEZJWE1FOiBUaGlzIGlzIHJlZHVuZGFu dCB3aXRoIHRoZSBmYmMgdXBkYXRlIGRvbmUgaW4KPiArCQkJICogdGhlIHByaW1hcnkgcGxhbmUg ZW5hYmxlIGZ1bmN0aW9uIGV4Y2VwdCB0aGF0IHRoYXQKPiArCQkJICogb25lIGlzIGRvbmUgdG9v IGxhdGUuIFdlIGV2ZW50dWFsbHkgbmVlZCB0byB1bmlmeQo+ICsJCQkgKiB0aGlzLgo+ICsJCQkg Ki8KPiArCj4gKwkJCWlmICh2aXNpYmxlICYmCj4gKwkJCSAgICBJTlRFTF9JTkZPKGRldiktPmdl biA8PSA0ICYmICFJU19HNFgoZGV2KSAmJgo+ICsJCQkgICAgZGV2X3ByaXYtPmZiYy5jcnRjID09 IGludGVsX2NydGMgJiYKPiArCQkJICAgIHBsYW5lX3N0YXRlLT5yb3RhdGlvbiAhPSBCSVQoRFJN X1JPVEFURV8wKSkKPiArCQkJCWludGVsX2NydGMtPmF0b21pYy5kaXNhYmxlX2ZiYyA9IHRydWU7 Cj4gKwo+ICsJCQkvKgo+ICsJCQkgKiBCRFcgc2lnbmFscyBmbGlwIGRvbmUgaW1tZWRpYXRlbHkg aWYgdGhlIHBsYW5lCj4gKwkJCSAqIGlzIGRpc2FibGVkLCBldmVuIGlmIHRoZSBwbGFuZSBlbmFi bGUgaXMgYWxyZWFkeQo+ICsJCQkgKiBhcm1lZCB0byBvY2N1ciBhdCB0aGUgbmV4dCB2Ymxhbmsg OigKPiArCQkJICovCj4gKwkJCWlmICh0dXJuX29uICYmIElTX0JST0FEV0VMTChkZXYpKQo+ICsJ CQkJaW50ZWxfY3J0Yy0+YXRvbWljLndhaXRfdmJsYW5rID0gdHJ1ZTsKPiArCj4gKwkJCWludGVs X2NydGMtPmF0b21pYy51cGRhdGVfZmJjID0gdHJ1ZTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBE Uk1fUExBTkVfVFlQRV9DVVJTT1I6Cj4gKwkJCWlmICh2aXNpYmxlKQo+ICsJCQkJaW50ZWxfY3J0 Yy0+YXRvbWljLmZiX2JpdHMgfD0KPiArCQkJCSAgICBJTlRFTF9GUk9OVEJVRkZFUl9DVVJTT1Io aW50ZWxfY3J0Yy0+cGlwZSk7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgRFJNX1BMQU5FX1RZUEVf T1ZFUkxBWToKPiArCQkJaWYgKHZpc2libGUpCj4gKwkJCQlpbnRlbF9jcnRjLT5hdG9taWMuZmJf Yml0cyB8PQo+ICsJCQkJICAgIElOVEVMX0ZST05UQlVGRkVSX1NQUklURShpbnRlbF9jcnRjLT5w aXBlKTsKPiArCj4gKwkJCWlmICh0dXJuX29mZikgewo+ICsJCQkJaW50ZWxfY3J0Yy0+YXRvbWlj LndhaXRfdmJsYW5rID0gdHJ1ZTsKPiArCQkJCWludGVsX2NydGMtPmF0b21pYy51cGRhdGVfc3By aXRlX3dhdGVybWFya3MgfD0KPiArCQkJCQkxIDw8IGk7Cj4gKwkJCX0KPiArCQkJYnJlYWs7Cj4g KwkJfQoKSSdtIGNvbXBsZXRlbHkgbG9zdCBhcyB0byB3aHkgd2UgbmVlZCB0byBtb3ZlIGFsbCB0 aGUgcGxhbmUtPmF0b21pY19jaGVjawpjb2RlIGludG8gYSBsb29wIGluIHRoZSBjcnRjX2NoZWNr IGZ1bmN0aW9uPwoKPiArCX0KPiArCXJldHVybiAwOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBp bnRlbF9iZWdpbl9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gQEAgLTEzMDg3 LDEwICsxMzIxNiwxMyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9iZWdpbl9jcnRjX2NvbW1pdChzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpCj4gIAlpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7Cj4g IAo+ICAJLyogUGVyZm9ybSB2YmxhbmsgZXZhc2lvbiBhcm91bmQgY29tbWl0IG9wZXJhdGlvbiAq Lwo+IC0JaWYgKGludGVsX2NydGMtPmFjdGl2ZSkKPiArCWlmIChpbnRlbF9jcnRjLT5hY3RpdmUg JiYgIW5lZWRzX21vZGVzZXQoY3J0Yy0+c3RhdGUpICYmCj4gKwkgICAgIWRldl9wcml2LT5wb3dl cl9kb21haW5zLmluaXRfcG93ZXJfb24pCj4gIAkJaW50ZWxfY3J0Yy0+YXRvbWljLmV2YWRlID0K PiAgCQkJaW50ZWxfcGlwZV91cGRhdGVfc3RhcnQoaW50ZWxfY3J0YywKPiAgCQkJCQkJJmludGVs X2NydGMtPmF0b21pYy5zdGFydF92YmxfY291bnQpOwo+ICsJZWxzZQo+ICsJCWludGVsX2NydGMt PmF0b21pYy5ldmFkZSA9IGZhbHNlOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBpbnRlbF9maW5p c2hfY3J0Y19jb21taXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+IEBAIC0xMzA5OSw2ICsxMzIz MSw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2ZpbmlzaF9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwo+ICAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9j cnRjKGNydGMpOwo+ICAJc3RydWN0IGRybV9wbGFuZSAqcDsKPiArCXVuc2lnbmVkIHBsYW5lX21h c2s7Cj4gIAo+ICAJaWYgKGludGVsX2NydGMtPmF0b21pYy5ldmFkZSkKPiAgCQlpbnRlbF9waXBl X3VwZGF0ZV9lbmQoaW50ZWxfY3J0YywKPiBAQCAtMTMxMjAsMTIgKzEzMjUzLDEzIEBAIHN0YXRp YyB2b2lkIGludGVsX2ZpbmlzaF9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4g IAlpZiAoaW50ZWxfY3J0Yy0+YXRvbWljLnBvc3RfZW5hYmxlX3ByaW1hcnkpCj4gIAkJaW50ZWxf cG9zdF9lbmFibGVfcHJpbWFyeShjcnRjKTsKPiAgCj4gLQlkcm1fZm9yX2VhY2hfbGVnYWN5X3Bs YW5lKHAsICZkZXYtPm1vZGVfY29uZmlnLnBsYW5lX2xpc3QpCj4gLQkJaWYgKGludGVsX2NydGMt PmF0b21pYy51cGRhdGVfc3ByaXRlX3dhdGVybWFya3MgJiBkcm1fcGxhbmVfaW5kZXgocCkpCj4g LQkJCWludGVsX3VwZGF0ZV9zcHJpdGVfd2F0ZXJtYXJrcyhwLCBjcnRjLCAwLCAwLCAwLAo+IC0J CQkJCQkgICAgICAgZmFsc2UsIGZhbHNlKTsKPiArCXBsYW5lX21hc2sgPSBpbnRlbF9jcnRjLT5h dG9taWMudXBkYXRlX3Nwcml0ZV93YXRlcm1hcmtzOwo+ICsJZHJtX2Zvcl9lYWNoX3BsYW5lX21h c2socCwgZGV2LCBwbGFuZV9tYXNrKQo+ICsJCWludGVsX3VwZGF0ZV9zcHJpdGVfd2F0ZXJtYXJr cyhwLCBjcnRjLCAwLCAwLCAwLCBmYWxzZSwgZmFsc2UpOwo+ICAKPiAgCW1lbXNldCgmaW50ZWxf Y3J0Yy0+YXRvbWljLCAwLCBzaXplb2YoaW50ZWxfY3J0Yy0+YXRvbWljKSk7Cj4gKwljcnRjLT5z dGF0ZS0+bW9kZV9jaGFuZ2VkID0gZmFsc2U7Cj4gKwljcnRjLT5zdGF0ZS0+YWN0aXZlX2NoYW5n ZWQgPSBmYWxzZTsKPiAgfQo+ICAKPiAgLyoqCj4gQEAgLTEzMjM4LDEzICsxMzM3Miw5IEBAIGlu dGVsX2NoZWNrX2N1cnNvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCXN0cnVj dCBkcm1fcmVjdCAqc3JjID0gJnN0YXRlLT5zcmM7Cj4gIAljb25zdCBzdHJ1Y3QgZHJtX3JlY3Qg KmNsaXAgPSAmc3RhdGUtPmNsaXA7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq ID0gaW50ZWxfZmJfb2JqKGZiKTsKPiAtCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOwo+ ICAJdW5zaWduZWQgc3RyaWRlOwo+ICAJaW50IHJldDsKPiAgCj4gLQljcnRjID0gY3J0YyA/IGNy dGMgOiBwbGFuZS0+Y3J0YzsKPiAtCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ IC0KPiAgCXJldCA9IGRybV9wbGFuZV9oZWxwZXJfY2hlY2tfdXBkYXRlKHBsYW5lLCBjcnRjLCBm YiwKPiAgCQkJCQkgICAgc3JjLCBkZXN0LCBjbGlwLAo+ICAJCQkJCSAgICBEUk1fUExBTkVfSEVM UEVSX05PX1NDQUxJTkcsCj4gQEAgLTEzMjU2LDcgKzEzMzg2LDcgQEAgaW50ZWxfY2hlY2tfY3Vy c29yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAKPiAgCS8qIGlmIHdlIHdhbnQg dG8gdHVybiBvZmYgdGhlIGN1cnNvciBpZ25vcmUgd2lkdGggYW5kIGhlaWdodCAqLwo+ICAJaWYg KCFvYmopCj4gLQkJZ290byBmaW5pc2g7Cj4gKwkJcmV0dXJuIDA7Cj4gIAo+ICAJLyogQ2hlY2sg Zm9yIHdoaWNoIGN1cnNvciB0eXBlcyB3ZSBzdXBwb3J0ICovCj4gIAlpZiAoIWN1cnNvcl9zaXpl X29rKGRldiwgc3RhdGUtPmJhc2UuY3J0Y193LCBzdGF0ZS0+YmFzZS5jcnRjX2gpKSB7Cj4gQEAg LTEzMjczLDE5ICsxMzQwMywxMCBAQCBpbnRlbF9jaGVja19jdXJzb3JfcGxhbmUoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCj4gIAo+ICAJaWYgKGZiLT5tb2RpZmllclswXSAhPSBEUk1fRk9STUFU X01PRF9OT05FKSB7Cj4gIAkJRFJNX0RFQlVHX0tNUygiY3Vyc29yIGNhbm5vdCBiZSB0aWxlZFxu Iik7Cj4gLQkJcmV0ID0gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLWZpbmlzaDoKPiAtCWlmIChpbnRl bF9jcnRjLT5hY3RpdmUpIHsKPiAtCQlpZiAocGxhbmUtPnN0YXRlLT5jcnRjX3cgIT0gc3RhdGUt PmJhc2UuY3J0Y193KQo+IC0JCQlpbnRlbF9jcnRjLT5hdG9taWMudXBkYXRlX3dtID0gdHJ1ZTsK PiAtCj4gLQkJaW50ZWxfY3J0Yy0+YXRvbWljLmZiX2JpdHMgfD0KPiAtCQkJSU5URUxfRlJPTlRC VUZGRVJfQ1VSU09SKGludGVsX2NydGMtPnBpcGUpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICAJ fQo+ICAKPiAtCXJldHVybiByZXQ7Cj4gKwlyZXR1cm4gMDsKPiAgfQo+ICAKPiAgc3RhdGljIHZv aWQKPiBAQCAtMTMzMDYsMjAgKzEzNDI3LDI2IEBAIGludGVsX2Rpc2FibGVfY3Vyc29yX3BsYW5l KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAKPiAgc3RhdGljIHZvaWQKPiAgaW50ZWxfY29t bWl0X2N1cnNvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAtCQkJICBzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICsJCQkgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqbmV3X3N0YXRlKQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+YmFz ZS5jcnRjOwo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gbmV3X3N0YXRlLT5iYXNlLmNydGM7 Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRldjsKPiAgCXN0cnVjdCBpbnRl bF9jcnRjICppbnRlbF9jcnRjOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9 IGludGVsX2ZiX29iaihzdGF0ZS0+YmFzZS5mYik7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqID0gaW50ZWxfZmJfb2JqKG5ld19zdGF0ZS0+YmFzZS5mYik7Cj4gIAl1aW50MzJf dCBhZGRyOwo+ICAKPiAgCWNydGMgPSBjcnRjID8gY3J0YyA6IHBsYW5lLT5jcnRjOwo+ICAJaW50 ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gIAo+IC0JcGxhbmUtPmZiID0gc3RhdGUt PmJhc2UuZmI7Cj4gLQljcnRjLT5jdXJzb3JfeCA9IHN0YXRlLT5iYXNlLmNydGNfeDsKPiAtCWNy dGMtPmN1cnNvcl95ID0gc3RhdGUtPmJhc2UuY3J0Y195Owo+ICsJcGxhbmUtPmZiID0gbmV3X3N0 YXRlLT5iYXNlLmZiOwo+ICsJY3J0Yy0+Y3Vyc29yX3ggPSBuZXdfc3RhdGUtPmJhc2UuY3J0Y194 Owo+ICsJY3J0Yy0+Y3Vyc29yX3kgPSBuZXdfc3RhdGUtPmJhc2UuY3J0Y195Owo+ICsKPiArCWlm ICghbmV3X3N0YXRlLT52aXNpYmxlIHx8Cj4gKwkgICAgV0FSTl9PTihuZXdfc3RhdGUtPnZpc2li bGUgJiYgIWNydGMtPnN0YXRlLT5hY3RpdmUpKSB7CgpBcyBhbiBhc2lkZTogV2UgbXVzdCBtb3Zl IG92ZXIgdG8gY29tcHV0ZSAtPnZpc2libGUgaXJyZXNwZWN0aXZlIG9mCi0+YWN0aXZlLiBJIGhh dmVuJ3QgY2hlY2sgd2hldGhlciB5b3UgZml4IHRoYXQgbGF0ZXIgb24gYWxyZWFkeSwgYnV0IHRo aXMKaXMgaW1wb3J0YW50IHRvIGJlIGFibGUgdG8gY2hlY2sgd20gY29uc3RyYWludHMgY29ycmVj dGx5LiBUaGUKY3J0Y19zdGF0ZS0+YWN0aXZlIGhhbmRsaW5nIHNob3VsZCBpbW8gYmUgZG9uZSBp biB0aGUgY29tbW9uIGNvZGUgYnkKc2ltcGx5IG5vdCBjYWxsaW5nIGFueSBvZiB0aGUgcGxhbmUg b3IgY3J0YyBmdW5jdGlvbnMgaHcgdXBkYXRlIGlmIHRoZQpjcnRjIGlzIG9mZi4KCk9mIGNvdXJz ZSB0aGF0IG1lYW5zIHdlIG5lZWQgdG8gYWRkIGFsbCBwbGFuZXMgYm90aCBmb3IgLT5tb2RlX2No YW5nZWQgYW5kCmZvciAtPmFjdGl2ZV9jaGFuZ2VkLCBidXQgbmVlZHNfbW9kZXNldChjcnRjX3N0 YXRlKSB0YWtlcyBjYXJlIG9mIHRoYXQKYWxyZWFkeS4KCkFzaWRlOiBUaGUgaWRlYSBiZWhpbmQg dGhlIHNwbGl0IGJldHdlZW4gZHJtX2F0b21pY19oZWxwZXJfY2hlY2tfcGxhbmVzCmFuZCBkcm1f YXRvbWljX2hlbHBlcl9jaGVja19tb2Rlc2V0IGlzIHRoYXQgdGhlIGZvcm1lciBoYW5kbGVzIHBs YW5lcy1vbmx5CnVwZGF0ZXMgd2hpbGUgdGhlIGxhdHRlciBoYW5kbGVzIG1vZGVzZXQuIFdlIGNh bid0IGZ1bGx5IHVzZQpjaGVja19tb2Rlc2V0cyBiZWNhdXNlIHdlIGRvbid0IHVzZSBjcnRjIGhl bHBlcnMsIGJ1dCBJIHRoaW5rIHJldXNpbmcgdGhlCnNhbWUgaWRlYSBzdGlsbCBoYXMgbWVyaXQ6 CgotIFdlIGNyZWF0ZSBhbiBpbnRlbF9jaGVja19tb2Rlc2V0IHdoaWNoIGNhbGxzIHRoZSBoZWxw ZXIncyBjaGVja19tb2Rlc2V0CiAgcGx1cyBhZnRlcndhcmRzIGFsbCB0aGUgbW9kZXNldCBjaGVj a3MgKGRwbGwsIGNsb25pbmcgY2hlY2tzLCBhZGRpbmcKICBwbGFuZSBzdGF0ZXMgYW5kIGdsb2Jh bCByZXNvdXJjZXMpIHRoYXQgd2UgZG8gaW4gY3J0Y19jb21wdXRlX2NvbmZpZyBhbmQKICBmcmll bmRzIHJpZ2h0IG5vdy4gVGhhdCBvbmUgd291bGQgYWxzbyBhZGQgcGxhbmUgc3RhdGVzIGFzIG5l ZWRlZCAoYnV0CiAgbm90IGNhbGwgcGxhbmUtPmF0b21pY19jaGVjaykuIEFsbCBvZiB0aGlzIHdv dWxkIGJlIHNraXBwZWQgaWYKICBuZWVkc19tb2Rlc2V0IGlzbid0IHRydWUuCgotIEFmdGVyIHRo YXQgd2UnZCBjYWxsIHRoZSBoZWxwZXIncyBwbGFuZV9jaGVjayBmdW5jdGlvbnMgd2hpY2ggZG9l cwogIGV4Y2x1c2l2ZWx5IHBsYW5lLXVwZGF0ZSByZWxhdGVkIGNoZWNrcy4gY3J0Yy9wbGFuZS0+ YXRvbWljX2NoZWNrCiAgd291bGRuJ3QgY29udGFpbiBhbnkgbW9kZXNldCByZWxhdGVkIGNoZWNr cyAobGlrZSB0aGUgZW5jb2RlciBjbG9uaW5nIG9yCiAgcGxhbmUgYWRkaW5nIHlvdSdyZSBkb2lu ZyByaWdodCBub3cpLgoKPiArCQlpbnRlbF9kaXNhYmxlX2N1cnNvcl9wbGFuZShwbGFuZSwgY3J0 YywgZmFsc2UpOwo+ICsJCXJldHVybjsKPiArCX0KPiAgCj4gIAlpZiAoaW50ZWxfY3J0Yy0+Y3Vy c29yX2JvID09IG9iaikKPiAgCQlnb3RvIHVwZGF0ZTsKPiBAQCAtMTMzMzMsMTAgKzEzNDYwLDkg QEAgaW50ZWxfY29tbWl0X2N1cnNvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAg Cj4gIAlpbnRlbF9jcnRjLT5jdXJzb3JfYWRkciA9IGFkZHI7Cj4gIAlpbnRlbF9jcnRjLT5jdXJz b3JfYm8gPSBvYmo7Cj4gLXVwZGF0ZToKPiAgCj4gLQlpZiAoaW50ZWxfY3J0Yy0+YWN0aXZlKQo+ IC0JCWludGVsX2NydGNfdXBkYXRlX2N1cnNvcihjcnRjLCBzdGF0ZS0+dmlzaWJsZSk7Cj4gK3Vw ZGF0ZToKPiArCWludGVsX2NydGNfdXBkYXRlX2N1cnNvcihjcnRjLCBuZXdfc3RhdGUtPnZpc2li bGUpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgc3RydWN0IGRybV9wbGFuZSAqaW50ZWxfY3Vyc29yX3Bs YW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IEBAIC0xNDY5NSw3ICsxNDgyMSwx NCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9tb2Rlc2V0X3JlYWRvdXRfaHdfc3RhdGUoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPiAgCQljcnRjLT5iYXNlLmVuYWJsZWQgPSBjcnRjLT5hY3RpdmU7Cj4g IAo+ICAJCXBsYW5lX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUocHJpbWFyeS0+c3RhdGUp Owo+IC0JCXBsYW5lX3N0YXRlLT52aXNpYmxlID0gcHJpbWFyeV9nZXRfaHdfc3RhdGUoY3J0Yyk7 Cj4gKwkJcGxhbmVfc3RhdGUtPmh3X2VuYWJsZWQgPSBwbGFuZV9zdGF0ZS0+dmlzaWJsZSA9Cj4g KwkJCXByaW1hcnlfZ2V0X2h3X3N0YXRlKGNydGMpOwo+ICsJCWlmIChwbGFuZV9zdGF0ZS0+dmlz aWJsZSkKPiArCQkJY3J0Yy0+YmFzZS5zdGF0ZS0+cGxhbmVfbWFzayB8PQo+ICsJCQkJMSA8PCBk cm1fcGxhbmVfaW5kZXgocHJpbWFyeSk7Cj4gKwkJZWxzZQo+ICsJCQljcnRjLT5iYXNlLnN0YXRl LT5wbGFuZV9tYXNrICY9Cj4gKwkJCQl+KDEgPDwgZHJtX3BsYW5lX2luZGV4KHByaW1hcnkpKTsK PiAgCj4gIAkJRFJNX0RFQlVHX0tNUygiW0NSVEM6JWRdIGh3IHN0YXRlIHJlYWRvdXQ6ICVzXG4i LAo+ICAJCQkgICAgICBjcnRjLT5iYXNlLmJhc2UuaWQsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2 LmgKPiBpbmRleCAxZTg5MjA5OGVlYTIuLjllZjg5YzkxYWE1YyAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rydi5oCj4gQEAgLTIzNSw3ICsyMzUsNyBAQCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgewo+ICAJc3RydWN0IGRybV9yZWN0IHNyYzsKPiAgCXN0cnVjdCBkcm1fcmVjdCBkc3Q7Cj4g IAlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKPiAtCWJvb2wgdmlzaWJsZTsKPiArCWJvb2wgdmlzaWJs ZSwgaHdfZW5hYmxlZDsKPiAgCj4gIAkvKgo+ICAJICogc2NhbGVyX2lkCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfc3ByaXRlLmMKPiBpbmRleCA0OTdlNzk1M2FkNGQuLjI4MjkxYWIwOTkzZiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4gQEAgLTc1OSw3ICs3NTksNiBAQCBp bnRlbF9jaGVja19zcHJpdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIHsKPiAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2Owo+ICAJc3RydWN0IGludGVsX2Ny dGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKHN0YXRlLT5iYXNlLmNydGMpOwo+IC0Jc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gIAlzdHJ1Y3QgaW50ZWxfcGxhbmUg KmludGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmUpOwo+ICAJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+YmFzZS5mYjsKPiAgCWludCBjcnRjX3gsIGNydGNfeTsKPiBA QCAtNzcxLDE2ICs3NzAsOSBAQCBpbnRlbF9jaGVja19zcHJpdGVfcGxhbmUoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCj4gIAlpbnQgaHNjYWxlLCB2c2NhbGU7Cj4gIAlpbnQgbWF4X3NjYWxlLCBt aW5fc2NhbGU7Cj4gIAlpbnQgcGl4ZWxfc2l6ZTsKPiAtCWludCByZXQ7Cj4gLQo+IC0JaW50ZWxf Y3J0YyA9IGludGVsX2NydGMgPyBpbnRlbF9jcnRjIDogdG9faW50ZWxfY3J0YyhwbGFuZS0+Y3J0 Yyk7Cj4gLQljcnRjX3N0YXRlID0gc3RhdGUtPmJhc2Uuc3RhdGUgPwo+IC0JCWludGVsX2F0b21p Y19nZXRfY3J0Y19zdGF0ZShzdGF0ZS0+YmFzZS5zdGF0ZSwgaW50ZWxfY3J0YykgOiBOVUxMOwo+ ICAKPiAtCWlmICghZmIpIHsKPiAtCQlzdGF0ZS0+dmlzaWJsZSA9IGZhbHNlOwo+IC0JCWdvdG8g ZmluaXNoOwo+IC0JfQo+ICsJaWYgKCFmYikKPiArCQlyZXR1cm4gMDsKPiAgCj4gIAkvKiBEb24n dCBtb2RpZnkgYW5vdGhlciBwaXBlJ3MgcGxhbmUgKi8KPiAgCWlmIChpbnRlbF9wbGFuZS0+cGlw ZSAhPSBpbnRlbF9jcnRjLT5waXBlKSB7Cj4gQEAgLTgwMyw2ICs3OTUsOSBAQCBpbnRlbF9jaGVj a19zcHJpdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAltaW5fc2NhbGUgPSBp bnRlbF9wbGFuZS0+Y2FuX3NjYWxlID8gMSA6ICgxIDw8IDE2KTsKPiAgCj4gIAlpZiAoSU5URUxf SU5GTyhkZXYpLT5nZW4gPj0gOSkgewo+ICsJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlID0KPiArCQkJaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLT5iYXNlLnN0 YXRlLCBpbnRlbF9jcnRjKTsKPiArCj4gIAkJbWluX3NjYWxlID0gMTsKPiAgCQltYXhfc2NhbGUg PSBza2xfbWF4X3NjYWxlKGludGVsX2NydGMsIGNydGNfc3RhdGUpOwo+ICAJfQo+IEBAIC04MTYs NyArODExLDcgQEAgaW50ZWxfY2hlY2tfc3ByaXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAo+ICAJdnNjYWxlID0gZHJtX3JlY3RfY2FsY192c2NhbGVfcmVsYXhlZChzcmMsIGRzdCwg bWluX3NjYWxlLCBtYXhfc2NhbGUpOwo+ICAJQlVHX09OKHZzY2FsZSA8IDApOwo+ICAKPiAtCXN0 YXRlLT52aXNpYmxlID0gIGRybV9yZWN0X2NsaXBfc2NhbGVkKHNyYywgZHN0LCBjbGlwLCBoc2Nh bGUsIHZzY2FsZSk7Cj4gKwlzdGF0ZS0+dmlzaWJsZSA9IGRybV9yZWN0X2NsaXBfc2NhbGVkKHNy YywgZHN0LCBjbGlwLCBoc2NhbGUsIHZzY2FsZSk7Cj4gIAo+ICAJY3J0Y194ID0gZHN0LT54MTsK PiAgCWNydGNfeSA9IGRzdC0+eTE7Cj4gQEAgLTkyMSwzNiArOTE2LDYgQEAgaW50ZWxfY2hlY2tf c3ByaXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJZHN0LT55MSA9IGNydGNf eTsKPiAgCWRzdC0+eTIgPSBjcnRjX3kgKyBjcnRjX2g7Cj4gIAo+IC1maW5pc2g6Cj4gLQkvKgo+ IC0JICogSWYgdGhlIHNwcml0ZSBpcyBjb21wbGV0ZWx5IGNvdmVyaW5nIHRoZSBwcmltYXJ5IHBs YW5lLAo+IC0JICogd2UgY2FuIGRpc2FibGUgdGhlIHByaW1hcnkgYW5kIHNhdmUgcG93ZXIuCj4g LQkgKi8KPiAtCWlmIChpbnRlbF9jcnRjLT5hY3RpdmUpIHsKPiAtCQlpbnRlbF9jcnRjLT5hdG9t aWMuZmJfYml0cyB8PQo+IC0JCQlJTlRFTF9GUk9OVEJVRkZFUl9TUFJJVEUoaW50ZWxfY3J0Yy0+ cGlwZSk7Cj4gLQo+IC0JCWlmIChpbnRlbF93bV9uZWVkX3VwZGF0ZShwbGFuZSwgJnN0YXRlLT5i YXNlKSkKPiAtCQkJaW50ZWxfY3J0Yy0+YXRvbWljLnVwZGF0ZV93bSA9IHRydWU7Cj4gLQo+IC0J CWlmICghc3RhdGUtPnZpc2libGUpIHsKPiAtCQkJLyoKPiAtCQkJICogQXZvaWQgdW5kZXJydW5z IHdoZW4gZGlzYWJsaW5nIHRoZSBzcHJpdGUuCj4gLQkJCSAqIEZJWE1FIHJlbW92ZSBvbmNlIHdh dGVybWFyayB1cGRhdGVzIGFyZSBkb25lIHByb3Blcmx5Lgo+IC0JCQkgKi8KPiAtCQkJaW50ZWxf Y3J0Yy0+YXRvbWljLndhaXRfdmJsYW5rID0gdHJ1ZTsKPiAtCQkJaW50ZWxfY3J0Yy0+YXRvbWlj LnVwZGF0ZV9zcHJpdGVfd2F0ZXJtYXJrcyB8PQo+IC0JCQkJKDEgPDwgZHJtX3BsYW5lX2luZGV4 KHBsYW5lKSk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+ PSA5KSB7Cj4gLQkJcmV0ID0gc2tsX3VwZGF0ZV9zY2FsZXJfdXNlcnMoaW50ZWxfY3J0YywgY3J0 Y19zdGF0ZSwgaW50ZWxfcGxhbmUsCj4gLQkJCXN0YXRlLCAwKTsKPiAtCQlpZiAocmV0KQo+IC0J CQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IEBAIC05NTks NyArOTI0LDYgQEAgaW50ZWxfY29tbWl0X3Nwcml0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKPiAgCQkJICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICB7Cj4gIAlz dHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+YmFzZS5jcnRjOwo+IC0Jc3RydWN0IGludGVs X2NydGMgKmludGVsX2NydGM7Cj4gIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0g dG9faW50ZWxfcGxhbmUocGxhbmUpOwo+ICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBz dGF0ZS0+YmFzZS5mYjsKPiAgCWludCBjcnRjX3gsIGNydGNfeTsKPiBAQCAtOTY3LDI2ICs5MzEs MjIgQEAgaW50ZWxfY29tbWl0X3Nwcml0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK PiAgCXVpbnQzMl90IHNyY194LCBzcmNfeSwgc3JjX3csIHNyY19oOwo+ICAKPiAgCWNydGMgPSBj cnRjID8gY3J0YyA6IHBsYW5lLT5jcnRjOwo+IC0JaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMo Y3J0Yyk7Cj4gLQo+ICAJcGxhbmUtPmZiID0gZmI7Cj4gIAo+IC0JaWYgKGludGVsX2NydGMtPmFj dGl2ZSkgewo+IC0JCWlmIChzdGF0ZS0+dmlzaWJsZSkgewo+IC0JCQljcnRjX3ggPSBzdGF0ZS0+ ZHN0LngxOwo+IC0JCQljcnRjX3kgPSBzdGF0ZS0+ZHN0LnkxOwo+IC0JCQljcnRjX3cgPSBkcm1f cmVjdF93aWR0aCgmc3RhdGUtPmRzdCk7Cj4gLQkJCWNydGNfaCA9IGRybV9yZWN0X2hlaWdodCgm c3RhdGUtPmRzdCk7Cj4gLQkJCXNyY194ID0gc3RhdGUtPnNyYy54MSA+PiAxNjsKPiAtCQkJc3Jj X3kgPSBzdGF0ZS0+c3JjLnkxID4+IDE2Owo+IC0JCQlzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZz dGF0ZS0+c3JjKSA+PiAxNjsKPiAtCQkJc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnN0YXRlLT5z cmMpID4+IDE2Owo+IC0JCQlpbnRlbF9wbGFuZS0+dXBkYXRlX3BsYW5lKHBsYW5lLCBjcnRjLCBm YiwKPiAtCQkJCQkJICBjcnRjX3gsIGNydGNfeSwgY3J0Y193LCBjcnRjX2gsCj4gLQkJCQkJCSAg c3JjX3gsIHNyY195LCBzcmNfdywgc3JjX2gpOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCWludGVsX3Bs YW5lLT5kaXNhYmxlX3BsYW5lKHBsYW5lLCBjcnRjLCBmYWxzZSk7Cj4gLQkJfQo+ICsJaWYgKHN0 YXRlLT52aXNpYmxlICYmIGNydGMtPnN0YXRlLT5hY3RpdmUpIHsKPiArCQljcnRjX3ggPSBzdGF0 ZS0+ZHN0LngxOwo+ICsJCWNydGNfeSA9IHN0YXRlLT5kc3QueTE7Cj4gKwkJY3J0Y193ID0gZHJt X3JlY3Rfd2lkdGgoJnN0YXRlLT5kc3QpOwo+ICsJCWNydGNfaCA9IGRybV9yZWN0X2hlaWdodCgm c3RhdGUtPmRzdCk7Cj4gKwkJc3JjX3ggPSBzdGF0ZS0+c3JjLngxID4+IDE2Owo+ICsJCXNyY195 ID0gc3RhdGUtPnNyYy55MSA+PiAxNjsKPiArCQlzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZzdGF0 ZS0+c3JjKSA+PiAxNjsKPiArCQlzcmNfaCA9IGRybV9yZWN0X2hlaWdodCgmc3RhdGUtPnNyYykg Pj4gMTY7Cj4gKwkJaW50ZWxfcGxhbmUtPnVwZGF0ZV9wbGFuZShwbGFuZSwgY3J0YywgZmIsCj4g KwkJCQkJICBjcnRjX3gsIGNydGNfeSwgY3J0Y193LCBjcnRjX2gsCj4gKwkJCQkJICBzcmNfeCwg c3JjX3ksIHNyY193LCBzcmNfaCk7Cj4gKwl9IGVsc2Ugewo+ICsJCWludGVsX3BsYW5lLT5kaXNh YmxlX3BsYW5lKHBsYW5lLCBjcnRjLCBmYWxzZSk7Cj4gIAl9Cj4gIH0KCk9rIEkgdGhpbmsgb3Zl cmFsbCB0aGlzIHBhdGNoIGlzIHRvbyBiaWcgYW5kIG5lZWRzIHRvIGJlIHNwbGl0IGEgYml0LiBU aGUKZm9sbG93aW5nIHNob3VsZCBiZSBkb2FibGUgYXMgcHJlcC1wYXRjaGVzOgotIHNldF9iYXNl X2F0b21pYyAoaWYgd2UgZGFyZSB0byB0b3VjaCBpdCBhdCBhbGwpCi0gc2h1ZmZsaW5nIHRoZSBj cnRjIG1vZGVzZXQgY2hlY2sgbG9naWMgYXJvdW5kIHRvIGFkZCBwbGFuZSBzdGF0ZXMgYXMKICBu ZWVkZWQsIG1ha2luZyBzdXJlIHdlIG9ubHkgcnVuIHRoYXQgaWYgbmVlZHNfbW9kZXNldCBpbmRp Y2F0ZXMgc28uCi0gUHVzaGluZyB0aGUgY2hlY2tzIGZvciBpbnRlbF9jcnRjLT5hY3RpdmUgb3Ig Y3J0Yy0+c3RhdGUtPmFjdGl2ZSBvdXQgb2YKICB0aGUgbG93LWxldmVsIHBsYW5lIGNvZGUgdXAg aW50byBoaWdoZXIgbGV2ZWwgYXRvbWljIHBsYW5lIGNvZGUgKGFuZCB0aGUKICBmZXcgbGVnYWN5 IGVudHJ5IHBvaW50cyBmb3IgcGxhbmUgdXBkYXRlcyB0aGF0IHdlIHN0aWxsIGhhdmUgbWF5YmUs IGJ1dAogIHRob3NlIHNob3VsZCBiZSBjb3ZlcmVkIEkgdGhpbmsgd2l0aCB0aGUgdW5pdmVyc2Fs IHBsYW5lICsgdHJhbnNpdGlvbmFsCiAgaGVscGVycykuCgpUaGVuIHdlIGNhbiBwdXQgaW4gdGhl IG1lYXQgb2YgdGhpcyBwYXRjaCwgaS5lLiByZXBsYWNpbmcgdGhlIGhlbHBlcnMgd2l0aAphdG9t aWMgdXBkYXRlcyBpbiB0aGUgbW9kZXNldCBjb2RlLgoKQ2hlZXJzLCBEYW5pZWwKLS0gCkRhbmll bCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9n LmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==