From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH 10/42] drm/i915: make plane helpers fully atomic Date: Tue, 12 May 2015 15:33:12 +0200 Message-ID: <55520118.1000501@linux.intel.com> References: <1431354318-11995-1-git-send-email-maarten.lankhorst@linux.intel.com> <1431354318-11995-11-git-send-email-maarten.lankhorst@linux.intel.com> <20150512081810.GW15256@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 93FAB72116 for ; Tue, 12 May 2015 06:33:16 -0700 (PDT) In-Reply-To: <20150512081810.GW15256@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: Ander Conselvan de Oliveira , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T3AgMTItMDUtMTUgb20gMTA6MTggc2NocmVlZiBEYW5pZWwgVmV0dGVyOgo+IE9uIE1vbiwgTWF5 IDExLCAyMDE1IGF0IDA0OjI0OjQ2UE0gKzAyMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3RlOgo+ PiBUaGlzIGtpbGxzIG9mZiBtb3N0IG9mIHRoZSB0cmFuc2l0aW9uYWwgaGVscGVycyBhbmQgdXNl cyBhdG9taWMgcGxhbmUgdXBkYXRlcwo+PiBpbiB0aGUgbW9kZXNldCBwYXRoIHRvIHVwZGF0ZSBl dmVyeXRoaW5nLgo+Pgo+PiBHZXR0aW5nIHJpZCBvZiB0aGUgdHJhbnNpdGlvbmFsIHBsYW5lIGhl bHBlcnMgbWVhbnQgdGhhdCBwbGFuZXMgaGFkIHRvIGJlIGFkZGVkCj4+IGluIHRoZSBjcnRjIGNo ZWNrIGZ1bmN0aW9uLiBPbiBtb2Rlc2V0IGEgY29ubmVjdG9yIGNhbiBiZSBtb3ZlZCB0byBhIGRp ZmZlcmVudAo+PiBjcnRjLCBhbmQgdGhpcyBpcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkgb3RoZXJ3 aXNlLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5r aG9yc3RAbGludXguaW50ZWwuY29tPgo+IE9rIHBpbGUgb2YgY29tbWVudHMgb24gdGhpcyBvbmUu IEkgZG9uJ3QgeWV0IGZ1bGx5IGdyYXNwIGl0IGFsbCwgYnV0IGF0Cj4gdGhlIHZlcnkgYm90dG9t IEkndmUgam90dGVkIGRvd24gYSBsaXN0IG9mIGlkZWFzIGZvciBob3cgdG8gbW92ZSBmb3J3YXJk Cj4gd2l0aCB0aGlzIG9uZS4KPgo+PiAtLS0KPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2F0b21pY19wbGFuZS5jIHwgIDU5ICsrLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jICAgICAgfCA2NTUgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCj4+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgICAgICB8ICAgMiArLQo+PiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgICAgICAgfCAgODAgKy0tLQo+PiAgNCBm aWxlcyBjaGFuZ2VkLCA0NDEgaW5zZXJ0aW9ucygrKSwgMzU1IGRlbGV0aW9ucygtKQo+Pgo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYwo+PiBpbmRleCA4NmJhNGIy YzNhNjUuLjg1Yjg3ZTRkNGI2ZSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfYXRvbWljX3BsYW5lLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf YXRvbWljX3BsYW5lLmMKPj4gQEAgLTExMCwzMiArMTEwLDQwIEBAIHN0YXRpYyBpbnQgaW50ZWxf cGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+PiAgCQkJCSAgICBz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPj4gIHsKPj4gIAlzdHJ1Y3QgZHJtX2NydGMg KmNydGMgPSBzdGF0ZS0+Y3J0YzsKPj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YzsK Pj4gLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPj4gKwlzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4+ICAJc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9w bGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lKTsKPj4gIAlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKmludGVsX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUoc3RhdGUpOwo+PiAgCj4+IC0J Y3J0YyA9IGNydGMgPyBjcnRjIDogcGxhbmUtPmNydGM7Cj4+IC0JaW50ZWxfY3J0YyA9IHRvX2lu dGVsX2NydGMoY3J0Yyk7Cj4+IC0KPj4gKwlpbnRlbF9zdGF0ZS0+dmlzaWJsZSA9IGZhbHNlOwo+ PiAgCS8qCj4+ICAJICogQm90aCBjcnRjIGFuZCBwbGFuZS0+Y3J0YyBjb3VsZCBiZSBOVUxMIGlm IHdlJ3JlIHVwZGF0aW5nIGEKPj4gIAkgKiBwcm9wZXJ0eSB3aGlsZSB0aGUgcGxhbmUgaXMgZGlz YWJsZWQuICBXZSBkb24ndCBhY3R1YWxseSBoYXZlCj4+ICAJICogYW55dGhpbmcgZHJpdmVyLXNw ZWNpZmljIHdlIG5lZWQgdG8gdGVzdCBpbiB0aGF0IGNhc2UsIHNvCj4+ICAJICoganVzdCByZXR1 cm4gc3VjY2Vzcy4KPj4gIAkgKi8KPj4gLQlpZiAoIWNydGMpCj4+ICsJaWYgKCFjcnRjKSB7Cj4+ ICsJCURSTV9ERUJVR19BVE9NSUMoIkludmlzaWJsZTogbm8gY3J0Y1xuIik7Cj4+ICAJCXJldHVy biAwOwo+PiArCX0KPj4gKwo+PiArCWNydGNfc3RhdGUgPSBzdGF0ZS0+c3RhdGUtPmNydGNfc3Rh dGVzW2RybV9jcnRjX2luZGV4KGNydGMpXTsKPiBQbGVhc2UgcmV1c2UgZHJtX2F0b21pY19nZXRf Y3J0Y19zdGF0ZSwgdGhpcyBkZXJlZiBtYWdpYyBpcyBoYXJkIHRvIHJlYWQuCj4gTWF5YmUgd2Ug c2hvdWxkIGhhdmUgYSBub2ZhaWwgdmFyaWFudCBvZiB0aG9zZSB0byBlbmNvZGUgdGhlIGJlbG93 IFdBUk5fT04KPiBldmVuIC4uLgpZZWFoLCB0aGVyZSBhcmUgYSBmZXcgcGxhY2VzIHdoZXJlIEkg dXNlIGl0IGxpa2UgdGhpcywgYmVjYXVzZSBpbiB0aG9zZSBjYXNlcyB0aGUgcmVsZXZhbnQgc3Rh dGUgc2hvdWxkIGFscmVhZHkgZXhpc3QuCj4+ICsJaWYgKFdBUk5fT04oIWNydGNfc3RhdGUpKQo+ PiArCQlyZXR1cm4gMDsKPj4gKwo+PiArCWlmICghY3J0Y19zdGF0ZS0+ZW5hYmxlKSB7Cj4+ICsJ CURSTV9ERUJVR19BVE9NSUMoIkludmlzaWJsZTogY3J0YyBvZmZcbiIpOwo+PiAgCj4+IC0JLyog RklYTUU6IHRlbXBvcmFyeSBoYWNrIG5lY2Vzc2FyeSB3aGlsZSB3ZSBzdGlsbCB1c2UgdGhlIHBs YW5lIHVwZGF0ZQo+PiAtCSAqIGhlbHBlci4gKi8KPj4gLQlpZiAoc3RhdGUtPnN0YXRlKSB7Cj4+ IC0JCWNydGNfc3RhdGUgPQo+PiAtCQkJaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRl LT5zdGF0ZSwgaW50ZWxfY3J0Yyk7Cj4+IC0JCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpCj4+IC0J CQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKPj4gLQl9IGVsc2Ugewo+PiAtCQljcnRjX3N0 YXRlID0gaW50ZWxfY3J0Yy0+Y29uZmlnOwo+PiArCQkvKgo+PiArCQkgKiBQcm9iYWJseSBhbGxv d2VkIGFmdGVyIGNvbnZlcnRpbmcgdG8gYXRvbWljLiBSaWdodAo+PiArCQkgKiBub3cgaXQgcHJv YmFibHkgbWVhbnMgd2UgaGF2ZSB0aGUgc3RhdGUgY29uZnVzZWQuCj4+ICsJCSAqLwo+PiArCQlJ OTE1X1NUQVRFX1dBUk5fT04ocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7 Cj4gVGhpcyBpcyBhbHJlYWR5IHBvc3NpYmxlIHdpdGggdGhlIHByaW1hcnkgcGxhbmUgc3VwcG9y dCAtIHlvdSBjYW4gZGlzYWJsZQo+IGl0ICh0aG91Z2ggbm90IGNoYW5nZSB0aGUgbW9kZSBhdCB0 aGUgc2FtZSB0aW1lKS4KVGhhdCBleHBsYWlucyBhIGZldyB3YXJuaW5ncywgdGhhbmtzLiA6LSkK Pj4gKwkJcmV0dXJuIDA7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKCFjcnRjX3N0YXRlLT5hY3RpdmUp IHsKPj4gKwkJRFJNX0RFQlVHX0FUT01JQygiSW52aXNpYmxlOiBkcG1zIG9mZlxuIik7Cj4+ICsJ CXJldHVybiAwOwo+PiAgCX0KPj4gIAo+PiAgCS8qCj4+IEBAIC0xNTUsMjQgKzE2Myw5IEBAIHN0 YXRpYyBpbnQgaW50ZWxfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAo+PiAgCS8qIENsaXAgYWxsIHBsYW5lcyB0byBDUlRDIHNpemUsIG9yIDB4MCBpZiBDUlRDIGlz IGRpc2FibGVkICovCj4+ICAJaW50ZWxfc3RhdGUtPmNsaXAueDEgPSAwOwo+PiAgCWludGVsX3N0 YXRlLT5jbGlwLnkxID0gMDsKPj4gLQlpbnRlbF9zdGF0ZS0+Y2xpcC54MiA9Cj4+IC0JCWNydGNf c3RhdGUtPmJhc2UuYWN0aXZlID8gY3J0Y19zdGF0ZS0+cGlwZV9zcmNfdyA6IDA7Cj4+IC0JaW50 ZWxfc3RhdGUtPmNsaXAueTIgPQo+PiAtCQljcnRjX3N0YXRlLT5iYXNlLmFjdGl2ZSA/IGNydGNf c3RhdGUtPnBpcGVfc3JjX2ggOiAwOwo+PiAtCj4+IC0JLyoKPj4gLQkgKiBEaXNhYmxpbmcgYSBw bGFuZSBpcyBhbHdheXMgb2theTsgd2UganVzdCBuZWVkIHRvIHVwZGF0ZQo+PiAtCSAqIGZiIHRy YWNraW5nIGluIGEgc3BlY2lhbCB3YXkgc2luY2UgY2xlYW51cF9mYigpIHdvbid0Cj4+IC0JICog Z2V0IGNhbGxlZCBieSB0aGUgcGxhbmUgaGVscGVycy4KPj4gLQkgKi8KPj4gLQlpZiAoc3RhdGUt PmZiID09IE5VTEwgJiYgcGxhbmUtPnN0YXRlLT5mYiAhPSBOVUxMKSB7Cj4+IC0JCS8qCj4+IC0J CSAqICdwcmVwYXJlJyBpcyBuZXZlciBjYWxsZWQgd2hlbiBwbGFuZSBpcyBiZWluZyBkaXNhYmxl ZCwgc28KPj4gLQkJICogd2UgbmVlZCB0byBoYW5kbGUgZnJvbnRidWZmZXIgdHJhY2tpbmcgYXMg YSBzcGVjaWFsIGNhc2UKPj4gLQkJICovCj4+IC0JCWludGVsX2NydGMtPmF0b21pYy5kaXNhYmxl ZF9wbGFuZXMgfD0KPj4gLQkJCSgxIDw8IGRybV9wbGFuZV9pbmRleChwbGFuZSkpOwo+PiAtCX0K Pj4gKwlkcm1fY3J0Y19nZXRfaHZfdGltaW5nKCZjcnRjX3N0YXRlLT5tb2RlLAo+PiArCQkJICAg ICAgICZpbnRlbF9zdGF0ZS0+Y2xpcC54MiwKPj4gKwkJCSAgICAgICAmaW50ZWxfc3RhdGUtPmNs aXAueTIpOwo+IEltbyB0aGlzIGlzIG9iZnVzY2F0aW5nIHRoaW5ncyBhIGJpdCwgd2h5IG5vdCBq dXN0IHVuY29uZGl0aW9uYWxseSBjb3B5Cj4gcGlwZV9zcmNfdy9oIHRvIGNsaXAueC95Mj8gZ2V0 X2h2X3RpbWluZyBpcyBmb3IgdGhlIHBpcGUgc2l6ZSwgd2hpY2ggb24KPiBtb3N0IHBsYXRmb3Jt cyBtdXN0IG1hdGNoIHRoZSBwcmltYXJ5IHBsYW5lIHdpbmRvdyBleGNlcHQgZm9yIGdlbjIgYW5k Cj4gZ2VuOSsuCnBpcGVfc3JjXyogaXMgY2FsY3VsYXRlZCBpbiB0aGUgc2FtZSB3YXksIGFuZCBh dCB0aGUgdGltZSBvZiBwbGFuZSB2YWxpZGF0aW9uIHRoZSBjcnRjIHZhbGlkYXRpb24gaGFzbid0 IHJ1biB5ZXQsCnNvIHBpcGVfc3JjXyogY29udGFpbnMgb3V0ZGF0ZWQgdmFsdWVzIHdoaWNoIGJy ZWFrIGluIGludGVyZXN0aW5nIHdheXMuCgo+PiAgCj4+ICAJaWYgKHN0YXRlLT5mYiAmJiBpbnRl bF9yb3RhdGlvbl85MF9vcl8yNzAoc3RhdGUtPnJvdGF0aW9uKSkgewo+PiAgCQlpZiAoIShzdGF0 ZS0+ZmItPm1vZGlmaWVyWzBdID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEIHx8Cj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPj4gaW5kZXggOTU2Yzk5NjQyNzVkLi45NjEwZjc2 YTI0ODkgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku Ywo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPj4gQEAgLTEw MCwxNCArMTAwLDE2IEBAIHN0YXRpYyB2b2lkIHZsdl9wcmVwYXJlX3BsbChzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YywKPj4gIAkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlw ZV9jb25maWcpOwo+PiAgc3RhdGljIHZvaWQgY2h2X3ByZXBhcmVfcGxsKHN0cnVjdCBpbnRlbF9j cnRjICpjcnRjLAo+PiAgCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBl X2NvbmZpZyk7Cj4+ICtzdGF0aWMgaW50IGludGVsX2F0b21pY19jaGVja19jcnRjKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKPj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpOwo+IEkgY29uc2lkZXIgZm9yd2FyZCBkZWNsYXJhdGlvbnMgZXZpbCwgYnV0IGdpdmVuIGhv dyBtdWNoIG9mIGEgbWVzcwo+IGludGVsX2Rpc3BsYXkuYyBpcyBpdCBkb2Vzbid0IHJlYWxseSBt YXR0ZXIgbXVjaCA7LSkKPgo+PiAgc3RhdGljIHZvaWQgaW50ZWxfYmVnaW5fY3J0Y19jb21taXQo c3RydWN0IGRybV9jcnRjICpjcnRjKTsKPj4gIHN0YXRpYyB2b2lkIGludGVsX2ZpbmlzaF9jcnRj X2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+PiAgc3RhdGljIHZvaWQgc2tsX2luaXRf c2NhbGVycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxf Y3J0YywKPj4gIAlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cj4+ICBzdGF0 aWMgaW50IGk5eHhfZ2V0X3JlZmNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKPj4gIAkJCSAgIGludCBudW1fY29ubmVjdG9ycyk7Cj4+IC1zdGF0aWMgdm9pZCBp bnRlbF9jcnRjX2VuYWJsZV9wbGFuZXMoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPj4gLXN0YXRp YyB2b2lkIGludGVsX2NydGNfZGlzYWJsZV9wbGFuZXMoc3RydWN0IGRybV9jcnRjICpjcnRjKTsK Pj4gK3N0YXRpYyB2b2lkIGludGVsX3ByZV9kaXNhYmxlX3ByaW1hcnkoc3RydWN0IGRybV9jcnRj ICpjcnRjKTsKPj4gK3N0YXRpYyB2b2lkIGludGVsX3Bvc3RfZW5hYmxlX3ByaW1hcnkoc3RydWN0 IGRybV9jcnRjICpjcnRjKTsKPj4gIAo+PiAgc3RhdGljIHN0cnVjdCBpbnRlbF9lbmNvZGVyICpp bnRlbF9maW5kX2VuY29kZXIoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBpbnQg cGlwZSkKPj4gIHsKPj4gQEAgLTIyMjAsMjggKzIyMjIsNiBAQCB2b2lkIGludGVsX2ZsdXNoX3By aW1hcnlfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiAgCVBPU1RJ TkdfUkVBRChyZWcpOwo+PiAgfQo+PiAgCj4+IC0vKioKPj4gLSAqIGludGVsX2VuYWJsZV9wcmlt YXJ5X2h3X3BsYW5lIC0gZW5hYmxlIHRoZSBwcmltYXJ5IHBsYW5lIG9uIGEgZ2l2ZW4gcGlwZQo+ PiAtICogQHBsYW5lOiAgcGxhbmUgdG8gYmUgZW5hYmxlZAo+PiAtICogQGNydGM6IGNydGMgZm9y IHRoZSBwbGFuZQo+PiAtICoKPj4gLSAqIEVuYWJsZSBAcGxhbmUgb24gQGNydGMsIG1ha2luZyBz dXJlIHRoYXQgdGhlIHBpcGUgaXMgcnVubmluZyBmaXJzdC4KPj4gLSAqLwo+PiAtc3RhdGljIHZv aWQgaW50ZWxfZW5hYmxlX3ByaW1hcnlfaHdfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs Cj4+IC0JCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKQo+PiAtewo+PiAtCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2Owo+PiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4+IC0Jc3RydWN0IGludGVsX2NydGMgKmludGVs X2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+PiAtCj4+IC0JLyogSWYgdGhlIHBpcGUgaXNu J3QgZW5hYmxlZCwgd2UgY2FuJ3QgcHVtcCBwaXhlbHMgYW5kIG1heSBoYW5nICovCj4+IC0JYXNz ZXJ0X3BpcGVfZW5hYmxlZChkZXZfcHJpdiwgaW50ZWxfY3J0Yy0+cGlwZSk7Cj4+IC0JdG9faW50 ZWxfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKS0+dmlzaWJsZSA9IHRydWU7Cj4+IC0KPj4gLQlk ZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfcHJpbWFyeV9wbGFuZShjcnRjLCBwbGFuZS0+ZmIsCj4+ IC0JCQkJCSAgICAgICBjcnRjLT54LCBjcnRjLT55KTsKPj4gLX0KPj4gLQo+PiAgc3RhdGljIGJv b2wgbmVlZF92dGRfd2Eoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPj4gIHsKPj4gICNpZmRlZiBD T05GSUdfSU5URUxfSU9NTVUKPj4gQEAgLTMxNjEsMTEgKzMxNDEsMjAgQEAgaW50ZWxfcGlwZV9z ZXRfYmFzZV9hdG9taWMoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwKPj4gIHsKPj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ PiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7 Cj4+ICsJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9Cj4+ICsJCXRvX2lu dGVsX3BsYW5lX3N0YXRlKGNydGMtPnByaW1hcnktPnN0YXRlKTsKPj4gKwlib29sIHdhc192aXNp YmxlID0gcGxhbmVfc3RhdGUtPnZpc2libGU7Cj4+ICAKPj4gLQlpZiAoZGV2X3ByaXYtPmRpc3Bs YXkuZGlzYWJsZV9mYmMpCj4+ICsJLyogTm90IHN1cHBvcnRlZCByaWdodCBub3cgYnkgdGhlIGhl bHBlciwgYnV0IGxldHMgYmUgdGhvcm91Z2guICovCj4+ICsJaWYgKHdhc192aXNpYmxlICYmICFm YikKPj4gKwkJaW50ZWxfcHJlX2Rpc2FibGVfcHJpbWFyeShjcnRjKTsKPj4gKwllbHNlIGlmICh3 YXNfdmlzaWJsZSAmJiBkZXZfcHJpdi0+ZGlzcGxheS5kaXNhYmxlX2ZiYykKPj4gIAkJZGV2X3By aXYtPmRpc3BsYXkuZGlzYWJsZV9mYmMoZGV2KTsKPj4gIAo+PiArCXBsYW5lX3N0YXRlLT52aXNp YmxlID0gISFmYjsKPj4gIAlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfcHJpbWFyeV9wbGFuZShj cnRjLCBmYiwgeCwgeSk7Cj4+ICsJaWYgKCF3YXNfdmlzaWJsZSAmJiBmYikKPj4gKwkJaW50ZWxf cG9zdF9lbmFibGVfcHJpbWFyeShjcnRjKTsKPiBUaGlzIGNvbnRhaW5zIGEgdmJsYW5rX3dhaXQg KGF0IGxlYXN0IGZvciBicm9hZHdlbGwpIHdoaWNoIGlzIGEgbm8tZ28gaW4KPiBzZXRfYmFzZV9h dG9taWMuIEdpdmVuIHRoYXQgdGhpcyBpcyBvbmx5IHVzZWQgYnkga2dkYiBhbmQgSSdtIG5vdCBh d2FyZSBvZgo+IGFueW9uZSB1c2luZyB0aGF0IGFuZCB3ZSBhbHNvIGRvbid0IGhhdmUgYW55IHRl c3RjYXNlIGZvciB0aGlzIGNvZGUgSQo+IHRoaW5rIHRoZSBiZXN0IHdvdWxkIGJlIHRvIGp1c3Qg bm90IHRvdWNoIHRoaXMgYW5kIGxldCBpdCBrZWVwIG9uCj4gYml0cm90dGluZyAuLi4KT2ssIEkn bGwgZHJvcCB0aGlzIGh1bmsuCgo+PiAgCj4+ICAJcmV0dXJuIDA7Cj4+ICB9Cj4+IEBAIC0zMTky LDE2ICszMTgxLDE3IEBAIHN0YXRpYyB2b2lkIGludGVsX3VwZGF0ZV9wcmltYXJ5X3BsYW5lcyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+PiAgCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0 YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4+ICAKPj4gIAkJZHJtX21vZGVzZXRfbG9jaygmY3J0 Yy0+bXV0ZXgsIE5VTEwpOwo+PiAtCQkvKgo+PiAtCQkgKiBGSVhNRTogT25jZSB3ZSBoYXZlIHBy b3BlciBzdXBwb3J0IGZvciBwcmltYXJ5IHBsYW5lcyAoYW5kCj4+IC0JCSAqIGRpc2FibGluZyB0 aGVtIHdpdGhvdXQgZGlzYWJsaW5nIHRoZSBlbnRpcmUgY3J0YykgYWxsb3cgYWdhaW4KPj4gLQkJ ICogYSBOVUxMIGNydGMtPnByaW1hcnktPmZiLgo+PiAtCQkgKi8KPj4gLQkJaWYgKGludGVsX2Ny dGMtPmFjdGl2ZSAmJiBjcnRjLT5wcmltYXJ5LT5mYikKPj4gKwo+PiArCQlpZiAoaW50ZWxfY3J0 Yy0+YWN0aXZlKSB7Cj4+ICsJCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRl ID0KPj4gKwkJCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShjcnRjLT5wcmltYXJ5LT5zdGF0ZSk7Cj4+ ICsKPj4gIAkJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9wcmltYXJ5X3BsYW5lKGNydGMsCj4+ IC0JCQkJCQkJICAgICAgIGNydGMtPnByaW1hcnktPmZiLAo+PiAtCQkJCQkJCSAgICAgICBjcnRj LT54LAo+PiAtCQkJCQkJCSAgICAgICBjcnRjLT55KTsKPj4gKwkJCQkJCQlzdGF0ZS0+YmFzZS5m YiwKPj4gKwkJCQkJCQlzdGF0ZS0+c3JjLngxID4+IDE2LAo+PiArCQkJCQkJCXN0YXRlLT5zcmMu eTEgPj4gMTYpOwo+PiArCQl9Cj4gSSB0aGluayB0aGUgYWJvdmUgaHVuayBjb3VsZCBiZSBzcGxp dCBvdXQuIEFuZCBJJ20gbm90IHN1cmUgaXQncyByZXF1aXJlZAo+IHJlYWxseSwgdGhpcyBpcyBq dXN0IHRvIGNhdGNoIHVwIG9uIENTIGZsaXBzLiBXaGljaCB3b24ndCBiZSB1c2VkIGFueSBtb3Jl Cj4gb25jZSB3ZSBoYXZlIGF0b21pYywgYnV0IHVudGlsIHRoZW4gdGhlIGxlZ2FjeSBzdGF0ZSBz dHVmZiB1c2VkIGhlcmUKPiBzaG91bGQgYmUgZ29vZCBlbm91Z2guCj8KPj4gKwo+PiAgCQlkcm1f bW9kZXNldF91bmxvY2soJmNydGMtPm11dGV4KTsKPj4gIAl9Cj4+ICB9Cj4+IEBAIC00NTcyLDIw ICs0NTYyLDYgQEAgc3RhdGljIHZvaWQgaXJvbmxha2VfcGZpdF9lbmFibGUoc3RydWN0IGludGVs X2NydGMgKmNydGMpCj4+ICAJfQo+PiAgfQo+PiAgCj4+IC1zdGF0aWMgdm9pZCBpbnRlbF9lbmFi bGVfc3ByaXRlX3BsYW5lcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4+IC17Cj4+IC0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPj4gLQllbnVtIHBpcGUgcGlwZSA9IHRvX2lu dGVsX2NydGMoY3J0YyktPnBpcGU7Cj4+IC0Jc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4+IC0J c3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZTsKPj4gLQo+PiAtCWRybV9mb3JfZWFjaF9s ZWdhY3lfcGxhbmUocGxhbmUsICZkZXYtPm1vZGVfY29uZmlnLnBsYW5lX2xpc3QpIHsKPj4gLQkJ aW50ZWxfcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZSk7Cj4+IC0JCWlmIChpbnRlbF9wbGFu ZS0+cGlwZSA9PSBwaXBlKQo+PiAtCQkJaW50ZWxfcGxhbmVfcmVzdG9yZSgmaW50ZWxfcGxhbmUt PmJhc2UpOwo+PiAtCX0KPj4gLX0KPj4gLQo+PiAgdm9pZCBoc3dfZW5hYmxlX2lwcyhzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YykKPj4gIHsKPj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0 Yy0+YmFzZS5kZXY7Cj4+IEBAIC00ODE1LDQ0ICs0NzkxLDYgQEAgaW50ZWxfcHJlX2Rpc2FibGVf cHJpbWFyeShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4+ICAJaHN3X2Rpc2FibGVfaXBzKGludGVs X2NydGMpOwo+PiAgfQo+PiAgCj4+IC1zdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2VuYWJsZV9wbGFu ZXMoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+PiAtewo+PiAtCWludGVsX2VuYWJsZV9wcmltYXJ5 X2h3X3BsYW5lKGNydGMtPnByaW1hcnksIGNydGMpOwo+PiAtCWludGVsX2VuYWJsZV9zcHJpdGVf cGxhbmVzKGNydGMpOwo+PiAtCWludGVsX2NydGNfdXBkYXRlX2N1cnNvcihjcnRjLCB0cnVlKTsK Pj4gLQo+PiAtCWludGVsX3Bvc3RfZW5hYmxlX3ByaW1hcnkoY3J0Yyk7Cj4+IC19Cj4+IC0KPj4g LXN0YXRpYyB2b2lkIGludGVsX2NydGNfZGlzYWJsZV9wbGFuZXMoc3RydWN0IGRybV9jcnRjICpj cnRjKQo+PiAtewo+PiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4+IC0J c3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+PiAt CXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmU7Cj4+IC0JaW50IHBpcGUgPSBpbnRlbF9j cnRjLT5waXBlOwo+PiAtCj4+IC0JaW50ZWxfY3J0Y193YWl0X2Zvcl9wZW5kaW5nX2ZsaXBzKGNy dGMpOwo+PiAtCj4+IC0JaW50ZWxfcHJlX2Rpc2FibGVfcHJpbWFyeShjcnRjKTsKPj4gLQo+PiAt CWludGVsX2NydGNfZHBtc19vdmVybGF5X2Rpc2FibGUoaW50ZWxfY3J0Yyk7Cj4+IC0JZm9yX2Vh Y2hfaW50ZWxfcGxhbmUoZGV2LCBpbnRlbF9wbGFuZSkgewo+PiAtCQlpZiAoaW50ZWxfcGxhbmUt PnBpcGUgPT0gcGlwZSkgewo+PiAtCQkJc3RydWN0IGRybV9jcnRjICpmcm9tID0gaW50ZWxfcGxh bmUtPmJhc2UuY3J0YzsKPj4gLQo+PiAtCQkJaW50ZWxfcGxhbmUtPmRpc2FibGVfcGxhbmUoJmlu dGVsX3BsYW5lLT5iYXNlLAo+PiAtCQkJCQkJICAgZnJvbSA/OiBjcnRjLCB0cnVlKTsKPj4gLQkJ fQo+PiAtCX0KPj4gLQo+PiAtCS8qCj4+IC0JICogRklYTUU6IE9uY2Ugd2UgZ3JvdyBwcm9wZXIg bnVjbGVhciBmbGlwIHN1cHBvcnQgb3V0IG9mIHRoaXMgd2UgbmVlZAo+PiAtCSAqIHRvIGNvbXB1 dGUgdGhlIG1hc2sgb2YgZmxpcCBwbGFuZXMgcHJlY2lzZWx5LiBGb3IgdGhlIHRpbWUgYmVpbmcK Pj4gLQkgKiBjb25zaWRlciB0aGlzIGEgZmxpcCB0byBhIE5VTEwgcGxhbmUuCj4+IC0JICovCj4+ IC0JaW50ZWxfZnJvbnRidWZmZXJfZmxpcChkZXYsIElOVEVMX0ZST05UQlVGRkVSX0FMTF9NQVNL KHBpcGUpKTsKPj4gLX0KPj4gLQo+PiAgc3RhdGljIHZvaWQgaXJvbmxha2VfY3J0Y19lbmFibGUo c3RydWN0IGRybV9jcnRjICpjcnRjKQo+PiAgewo+PiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjcnRjLT5kZXY7Cj4+IEBAIC0xMTA2MSw2ICsxMDk5OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGludGVsX2hlbHBlcl9mdW5jcyA9IHsKPj4gIAkubG9h ZF9sdXQgPSBpbnRlbF9jcnRjX2xvYWRfbHV0LAo+PiAgCS5hdG9taWNfYmVnaW4gPSBpbnRlbF9i ZWdpbl9jcnRjX2NvbW1pdCwKPj4gIAkuYXRvbWljX2ZsdXNoID0gaW50ZWxfZmluaXNoX2NydGNf Y29tbWl0LAo+PiArCS5hdG9taWNfY2hlY2sgPSBpbnRlbF9hdG9taWNfY2hlY2tfY3J0YywKPj4g IH07Cj4+ICAKPj4gIC8qIFRyYW5zaXRpb25hbCBoZWxwZXIgdG8gY29weSBjdXJyZW50IGNvbm5l Y3Rvci9lbmNvZGVyIHN0YXRlIHRvCj4+IEBAIC0xMTQyNiwxNiArMTEzNjUsNiBAQCBpbnRlbF9t b2Rlc2V0X3BpcGVfY29uZmlnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPj4gIAlpbnQgaTsKPj4g IAlib29sIHJldHJ5ID0gdHJ1ZTsKPj4gIAo+PiAtCWlmICghY2hlY2tfZW5jb2Rlcl9jbG9uaW5n KHN0YXRlLCB0b19pbnRlbF9jcnRjKGNydGMpKSkgewo+PiAtCQlEUk1fREVCVUdfS01TKCJyZWpl Y3RpbmcgaW52YWxpZCBjbG9uaW5nIGNvbmZpZ3VyYXRpb25cbiIpOwo+PiAtCQlyZXR1cm4gLUVJ TlZBTDsKPj4gLQl9Cj4+IC0KPj4gLQlpZiAoIWNoZWNrX2RpZ2l0YWxfcG9ydF9jb25mbGljdHMo c3RhdGUpKSB7Cj4+IC0JCURSTV9ERUJVR19LTVMoInJlamVjdGluZyBjb25mbGljdGluZyBkaWdp dGFsIHBvcnQgY29uZmlndXJhdGlvblxuIik7Cj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCX0K Pj4gLQo+IEkgdGhpbmsgaXQgd291bGQgaGVscCBpZiB5b3UnZCBzcGxpdCBvdXQgdGhlIGFkZGl0 aW9uIG9mIHRoZSBjcnRjX2NoZWNrCj4gZnVuY3Rpb24gaW50byBhIHNlcGFyYXRlIHByZXAgcGF0 Y2guIEF0IGxlYXN0IEkgZG9uJ3Qgc2VlIGEgZGVwZW5jeSBoZXJlCj4gLi4uClllYWggYnV0IHRo YXQgd291bGQgYmUgdGhlIG9ubHkgdGhpbmcgcHV0IGluIHRoZXJlLCBvaCB3ZWxsIGdvdCB0byBz dGFydCBzb21ld2hlcmUuLi4KPgo+PiBAQCAtMTIyNzUsNyArMTIzMzMsNyBAQCBzdGF0aWMgaW50 IF9faW50ZWxfc2V0X21vZGUoc3RydWN0IGRybV9jcnRjICptb2Rlc2V0X2NydGMsCj4+ICAJc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gcGlwZV9jb25maWctPmJhc2Uuc3RhdGU7Cj4+ ICAJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+PiAgCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZTsKPj4gLQlpbnQgcmV0ID0gMDsKPj4gKwlpbnQgcmV0Owo+PiAgCWludCBpOwo+PiAg Cj4+ICAJcmV0ID0gX19pbnRlbF9zZXRfbW9kZV9jaGVja3Moc3RhdGUpOwo+PiBAQCAtMTIyODYs MTQgKzEyMzQ0LDE0IEBAIHN0YXRpYyBpbnQgX19pbnRlbF9zZXRfbW9kZShzdHJ1Y3QgZHJtX2Ny dGMgKm1vZGVzZXRfY3J0YywKPj4gIAlpZiAocmV0KQo+PiAgCQlyZXR1cm4gcmV0Owo+PiAgCj4+ ICsJX19pbnRlbF9zZXRfbW9kZV91cGRhdGVfcGxhbmVzKGRldiwgc3RhdGUpOwo+IFRoaXMgY2Fs bHMgY3J0Yy0+YXRvbWljX2JlZ2luLCB3aGljaCBkb2VzIGFuIGlycV9kaXNhYmxlIC4uLgpZZWFo IEkgdHJpZWQgdG8gaGFuZGxlIGl0IGJ5IGZpeGluZyBhbGwgcHJldmlvdXMgcGxhY2VzIHRvIHBy ZXZlbnQgYXRvbWljIGV2YWRpbmcgb24gbW9kZXNldCwKd2hpY2ggbWVhbnMgaXQgaXMgbW9zdGx5 IHNhZmUgdG8gZG8gaXQgbGlrZSB0aGlzLgoKPgo+PiArCj4+ICAJZm9yX2VhY2hfY3J0Y19pbl9z dGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkgewo+PiAgCQlpZiAoIW5lZWRzX21vZGVz ZXQoY3J0Y19zdGF0ZSkpCj4+ICAJCQljb250aW51ZTsKPj4gIAo+PiAtCQlpbnRlbF9jcnRjX2Rp c2FibGVfcGxhbmVzKGNydGMpOwo+PiArCQlpbnRlbF9jcnRjX2RwbXNfb3ZlcmxheV9kaXNhYmxl KHRvX2ludGVsX2NydGMoY3J0YykpOwo+PiAgCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Rpc2Fi bGUoY3J0Yyk7Cj4+IC0JCWlmICghY3J0Y19zdGF0ZS0+ZW5hYmxlKQo+PiAtCQkJZHJtX3BsYW5l X2hlbHBlcl9kaXNhYmxlKGNydGMtPnByaW1hcnkpOwo+PiAgCX0KPj4gIAo+PiAgCS8qIE9ubHkg YWZ0ZXIgZGlzYWJsaW5nIGFsbCBvdXRwdXQgcGlwZWxpbmVzIHRoYXQgd2lsbCBiZSBjaGFuZ2Vk IGNhbiB3ZQo+PiBAQCAtMTIzMDUsOCArMTIzNjMsNiBAQCBzdGF0aWMgaW50IF9faW50ZWxfc2V0 X21vZGUoc3RydWN0IGRybV9jcnRjICptb2Rlc2V0X2NydGMsCj4+ICAKPj4gIAltb2Rlc2V0X3Vw ZGF0ZV9jcnRjX3Bvd2VyX2RvbWFpbnMoc3RhdGUpOwo+PiAgCj4+IC0JZHJtX2F0b21pY19oZWxw ZXJfY29tbWl0X3BsYW5lcyhkZXYsIHN0YXRlKTsKPj4gLQo+PiAgCS8qIE5vdyBlbmFibGUgdGhl IGNsb2NrcywgcGxhbmUsIHBpcGUsIGFuZCBjb25uZWN0b3JzIHRoYXQgd2Ugc2V0IHVwLiAqLwo+ PiAgCWZvcl9lYWNoX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsIGkpIHsK Pj4gIAkJaWYgKCFjcnRjLT5zdGF0ZS0+YWN0aXZlKQo+PiBAQCAtMTIzMTQsMTMgKzEyMzcwLDEz IEBAIHN0YXRpYyBpbnQgX19pbnRlbF9zZXRfbW9kZShzdHJ1Y3QgZHJtX2NydGMgKm1vZGVzZXRf Y3J0YywKPj4gIAo+PiAgCQl1cGRhdGVfc2NhbmxpbmVfb2Zmc2V0KHRvX2ludGVsX2NydGMoY3J0 YykpOwo+PiAgCj4+IC0JCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5hYmxlKGNydGMpOwo+PiAt CQlpbnRlbF9jcnRjX2VuYWJsZV9wbGFuZXMoY3J0Yyk7Cj4+ICsJCWlmIChuZWVkc19tb2Rlc2V0 KGNydGMtPnN0YXRlKSkKPj4gKwkJCWRldl9wcml2LT5kaXNwbGF5LmNydGNfZW5hYmxlKGNydGMp Owo+PiAgCX0KPj4gIAo+PiAtCS8qIEZJWE1FOiBhZGQgc3VicGl4ZWwgb3JkZXIgKi8KPj4gKwlf X2ludGVsX3NldF9tb2RlX2NsZWFudXBfcGxhbmVzKGRldiwgc3RhdGUpOwo+IHdoaWNoIGlzIG9u bHkgY2xlYXJlZCBpbiBhdG9taWNfZmx1c2ggaGVyZS4gV2UgbmVlZCBib3RoIG9mIHRoZXNlIGF0 IHRoZQo+IGJvdHRvbSBoZXJlLiBJbiBhdG9taWMtaGVscGVycy1zcGVhayB0aGUgc2VxdWVuY2Ug c2hvdWxkIGJlCj4KPiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcygp Owo+IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2VuYWJsZXMoKTsKPiBkcm1fYXRv bWljX2hlbHBlcl9jb21taXRfcGxhbmVzKCk7Cj4KPiB3aXRoIHRoZSBub3RlIHRoYXQgb3VyIGNy dGNfZGlzYWJsZSBtdXN0IGRvIHRoZSB1bmNvbmRpdGlvbmFsIHBsYW5lCj4gZGlzYWJsaW5nIGl0 c2VsZi4gSS5lLiB5b3UgY2FuJ3QganVzdCByZW1vdmUgZGlzYWJsZV9wbGFuZXMgd2l0aG91dAo+ IHJlcGxhY2VtZW50LCB0aGF0IG9uZSBuZWVkcyB0byBiZSBvcGVuLWNvZGVkICh1c2luZyBwbGFu ZS0+YXRvbWljX2Rpc2FibGUKPiBpZiBwb3NzaWJsZSkuCj4KPiBEb2luZyB0aGluZ3MgdGhpcyB3 YXkgd291bGQgYWxzbyBhbGxldmlhdGUgYW55IG5lZWQgdG8gc3BsaXQgdXAgc3dhcF9zdGF0ZQo+ IGFzIHlvdSBkbyBpbiB0aGlzIHBhdGNoIGhlcmUuCllvdSdyZSByaWdodCBpdCBjb3VsZCBiZSBk b25lIGxpa2UgdGhpcywgYnV0IGRvaW5nIGNvbW1pdF9wbGFuZXMgYXJvdW5kIHRoZSBtb2Rlc2V0 cyBhbGxvd3MKdXMgdG8gdGVzdCB0aGUgc2FtZSBjb2RlIGZvciBjYWxjdWxhdGluZyBkaXNhYmxl IHBsYW5lcyBkdXJpbmcgbW9kZXNldCBhcyB3aGVuIHRvZ2dpbmcgcGxhbmVzCnNlcGFyYXRlbHku IEZvciBleGFtcGxlIHRoaXMgaXMgdXNlZnVsIHdoZW4gYSBjb25uZWN0b3IgbW92ZXMgdG8gYSBk aWZmZXJlbnQgY3J0Yy4KCkluIGFueSBjYXNlIHRoaXMgaXMgY29zbWV0aWMsIGFuZCBkb25lIGZv ciBiaXNlY3RpbmcuIEkgY2FuIG1vdmUgdGhlIHN3YXBfc3RhdGVzIGluIHRoaXMgY29tbWl0LApi dXQgY2hvc2UgdG8gZG8gaXQgMiBjb21taXRzIGxhdGVyIGZvciBlYXNpZXIgYmlzZWN0aW9uLgoK SSBjYW4ndCBtb3ZlIGl0IHRvIGJlZm9yZSB0aGlzIGNvbW1pdCBiZWNhdXNlIGNhbGxpbmcgdGhl IHBsYW5lIGhlbHBlcnMgbWVzc2VzIHVwIHRoZSBzdGF0ZS4KCj4+ICAKPj4gLQlkcm1fYXRvbWlj X2hlbHBlcl9jbGVhbnVwX3BsYW5lcyhkZXYsIHN0YXRlKTsKPiBQbGVhc2Uga2VlcCB0aGlzIHNl cGFyYXRlIGFuZCBkb24ndCBoaWRlIGl0IGluIGFub3RoZXIgZnVuY3Rpb24sIGl0J3MgYQo+IGRp c3RpbmN0IHN0ZXAgZnJvbSB0aGUgaHcgdXBkYXRlICh3aGljaCBpcyBub3cgZG9uZSBpbiB0aGUg bWlzbmFtZWQKPiBpbnRlbF9zZXRfbW9kZV9jbGVhbnVwX3BsYW5lcykuCk9rLgo+Cj4+ICsJLyog RklYTUU6IGFkZCBzdWJwaXhlbCBvcmRlciAqLwo+PiAgCj4+ICAJZHJtX2F0b21pY19zdGF0ZV9m cmVlKHN0YXRlKTsKPj4gIAo+PiBAQCAtMTI1NjgsMjAgKzEyNjI0LDExIEBAIGludGVsX21vZGVz ZXRfc3RhZ2Vfb3V0cHV0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+ICAJcmV0dXJu IDA7Cj4+ICB9Cj4+ICAKPj4gLXN0YXRpYyBib29sIHByaW1hcnlfcGxhbmVfdmlzaWJsZShzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpCj4+IC17Cj4+IC0Jc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSA9Cj4+IC0JCXRvX2ludGVsX3BsYW5lX3N0YXRlKGNydGMtPnByaW1hcnktPnN0 YXRlKTsKPj4gLQo+PiAtCXJldHVybiBwbGFuZV9zdGF0ZS0+dmlzaWJsZTsKPj4gLX0KPj4gLQo+ PiAgc3RhdGljIGludCBpbnRlbF9jcnRjX3NldF9jb25maWcoc3RydWN0IGRybV9tb2RlX3NldCAq c2V0KQo+PiAgewo+PiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4+ICAJc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlID0gTlVMTDsKPj4gIAlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq cGlwZV9jb25maWc7Cj4+IC0JYm9vbCBwcmltYXJ5X3BsYW5lX3dhc192aXNpYmxlOwo+PiAgCWlu dCByZXQ7Cj4+ICAKPj4gIAlCVUdfT04oIXNldCk7Cj4+IEBAIC0xMjYyMCwzOCArMTI2NjcsNyBA QCBzdGF0aWMgaW50IGludGVsX2NydGNfc2V0X2NvbmZpZyhzdHJ1Y3QgZHJtX21vZGVfc2V0ICpz ZXQpCj4+ICAKPj4gIAlpbnRlbF91cGRhdGVfcGlwZV9zaXplKHRvX2ludGVsX2NydGMoc2V0LT5j cnRjKSk7Cj4+ICAKPj4gLQlwcmltYXJ5X3BsYW5lX3dhc192aXNpYmxlID0gcHJpbWFyeV9wbGFu ZV92aXNpYmxlKHNldC0+Y3J0Yyk7Cj4+IC0KPj4gIAlyZXQgPSBpbnRlbF9zZXRfbW9kZV93aXRo X2NvbmZpZyhzZXQtPmNydGMsIHBpcGVfY29uZmlnKTsKPj4gLQo+PiAtCWlmIChyZXQgPT0gMCAm Jgo+PiAtCSAgICBwaXBlX2NvbmZpZy0+YmFzZS5lbmFibGUgJiYKPj4gLQkgICAgcGlwZV9jb25m aWctPmJhc2UucGxhbmVzX2NoYW5nZWQgJiYKPj4gLQkgICAgIW5lZWRzX21vZGVzZXQoJnBpcGVf Y29uZmlnLT5iYXNlKSkgewo+PiAtCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRv X2ludGVsX2NydGMoc2V0LT5jcnRjKTsKPj4gLQo+PiAtCQkvKgo+PiAtCQkgKiBXZSBuZWVkIHRv IG1ha2Ugc3VyZSB0aGUgcHJpbWFyeSBwbGFuZSBpcyByZS1lbmFibGVkIGlmIGl0Cj4+IC0JCSAq IGhhcyBwcmV2aW91c2x5IGJlZW4gdHVybmVkIG9mZi4KPj4gLQkJICovCj4+IC0JCWlmIChyZXQg PT0gMCAmJiAhcHJpbWFyeV9wbGFuZV93YXNfdmlzaWJsZSAmJgo+PiAtCQkgICAgcHJpbWFyeV9w bGFuZV92aXNpYmxlKHNldC0+Y3J0YykpIHsKPj4gLQkJCVdBUk5fT04oIWludGVsX2NydGMtPmFj dGl2ZSk7Cj4+IC0JCQlpbnRlbF9wb3N0X2VuYWJsZV9wcmltYXJ5KHNldC0+Y3J0Yyk7Cj4+IC0J CX0KPj4gLQo+PiAtCQkvKgo+PiAtCQkgKiBJbiB0aGUgZmFzdGJvb3QgY2FzZSB0aGlzIG1heSBi ZSBvdXIgb25seSBjaGVjayBvZiB0aGUKPj4gLQkJICogc3RhdGUgYWZ0ZXIgYm9vdC4gIEl0IHdv dWxkIGJlIGJldHRlciB0byBvbmx5IGRvIGl0IG9uCj4+IC0JCSAqIHRoZSBmaXJzdCB1cGRhdGUs IGJ1dCB3ZSBkb24ndCBoYXZlIGEgbmljZSB3YXkgb2YgZG9pbmcgdGhhdAo+PiAtCQkgKiAoYW5k IHJlYWxseSwgc2V0X2NvbmZpZyBpc24ndCB1c2VkIG11Y2ggZm9yIGhpZ2ggZnJlcSBwYWdlCj4+ IC0JCSAqIGZsaXBwaW5nLCBzbyBpbmNyZWFzaW5nIGl0cyBjb3N0IGhlcmUgc2hvdWxkbid0IGJl IGEgYmlnCj4+IC0JCSAqIGRlYWwpLgo+PiAtCQkgKi8KPj4gLQkJaWYgKGk5MTUuZmFzdGJvb3Qg JiYgcmV0ID09IDApCj4+IC0JCQlpbnRlbF9tb2Rlc2V0X2NoZWNrX3N0YXRlKHNldC0+Y3J0Yy0+ ZGV2KTsKPj4gLQl9Cj4+IC0KPj4gIAlpZiAocmV0KSB7Cj4+ICAJCURSTV9ERUJVR19LTVMoImZh aWxlZCB0byBzZXQgbW9kZSBvbiBbQ1JUQzolZF0sIGVyciA9ICVkXG4iLAo+PiAgCQkJICAgICAg c2V0LT5jcnRjLT5iYXNlLmlkLCByZXQpOwo+PiBAQCAtMTI3OTEsNiArMTI4MDcsOSBAQCBib29s IGludGVsX3dtX25lZWRfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+PiAgCSAgICBw bGFuZS0+c3RhdGUtPnJvdGF0aW9uICE9IHN0YXRlLT5yb3RhdGlvbikKPj4gIAkJcmV0dXJuIHRy dWU7Cj4+ICAKPj4gKwlpZiAocGxhbmUtPnN0YXRlLT5jcnRjX3cgIT0gc3RhdGUtPmNydGNfdykK Pj4gKwkJcmV0dXJuIHRydWU7Cj4+ICsKPj4gIAlyZXR1cm4gZmFsc2U7Cj4+ICB9Cj4+ICAKPj4g QEAgLTEyODE5LDYgKzEyODM4LDkgQEAgaW50ZWxfcHJlcGFyZV9wbGFuZV9mYihzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPj4gIAl1bnNpZ25lZCBmcm9udGJ1ZmZlcl9iaXRzID0gMDsKPj4gIAlp bnQgcmV0ID0gMDsKPj4gIAo+PiArCWlmICghdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPnN0 YXRlKS0+dmlzaWJsZSkKPj4gKwkJb2xkX29iaiA9IE5VTEw7Cj4+ICsKPj4gIAlpZiAoIW9iaikK Pj4gIAkJcmV0dXJuIDA7Cj4+ICAKPj4gQEAgLTEyOTE1LDEwICsxMjkzNyw4IEBAIGludGVsX2No ZWNrX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4+ICAJCQkgIHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4+ICB7Cj4+ICAJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IHBsYW5lLT5kZXY7Cj4+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPj4gIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+ YmFzZS5jcnRjOwo+PiAgCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOwo+PiAtCXN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+PiAgCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiID0gc3RhdGUtPmJhc2UuZmI7Cj4+ICAJc3RydWN0IGRybV9yZWN0ICpkZXN0ID0gJnN0 YXRlLT5kc3Q7Cj4+ICAJc3RydWN0IGRybV9yZWN0ICpzcmMgPSAmc3RhdGUtPnNyYzsKPj4gQEAg LTEyOTI2LDkwICsxMjk0Niw0NiBAQCBpbnRlbF9jaGVja19wcmltYXJ5X3BsYW5lKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAo+PiAgCWJvb2wgY2FuX3Bvc2l0aW9uID0gZmFsc2U7Cj4+ICAJaW50 IG1heF9zY2FsZSA9IERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORzsKPj4gIAlpbnQgbWluX3Nj YWxlID0gRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HOwo+PiAtCWludCByZXQ7Cj4+ICAKPj4g LQljcnRjID0gY3J0YyA/IGNydGMgOiBwbGFuZS0+Y3J0YzsKPj4gIAlpbnRlbF9jcnRjID0gdG9f aW50ZWxfY3J0YyhjcnRjKTsKPj4gLQljcnRjX3N0YXRlID0gc3RhdGUtPmJhc2Uuc3RhdGUgPwo+ PiAtCQlpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUtPmJhc2Uuc3RhdGUsIGludGVs X2NydGMpIDogTlVMTDsKPj4gIAo+PiAgCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA5KSB7 Cj4+ICsJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0KPj4gKwkJCWludGVs X2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZS0+YmFzZS5zdGF0ZSwgaW50ZWxfY3J0Yyk7Cj4+ ICsKPj4gIAkJbWluX3NjYWxlID0gMTsKPj4gIAkJbWF4X3NjYWxlID0gc2tsX21heF9zY2FsZShp bnRlbF9jcnRjLCBjcnRjX3N0YXRlKTsKPj4gIAkJY2FuX3Bvc2l0aW9uID0gdHJ1ZTsKPj4gIAl9 Cj4+ICAKPj4gLQlyZXQgPSBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShwbGFuZSwgY3J0 YywgZmIsCj4+IC0JCQkJCSAgICBzcmMsIGRlc3QsIGNsaXAsCj4+IC0JCQkJCSAgICBtaW5fc2Nh bGUsCj4+IC0JCQkJCSAgICBtYXhfc2NhbGUsCj4+IC0JCQkJCSAgICBjYW5fcG9zaXRpb24sIHRy dWUsCj4+IC0JCQkJCSAgICAmc3RhdGUtPnZpc2libGUpOwo+PiAtCWlmIChyZXQpCj4+IC0JCXJl dHVybiByZXQ7Cj4+IC0KPj4gLQlpZiAoaW50ZWxfY3J0Yy0+YWN0aXZlKSB7Cj4+IC0JCXN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlID0KPj4gLQkJCXRvX2ludGVsX3BsYW5lX3N0 YXRlKHBsYW5lLT5zdGF0ZSk7Cj4+IC0KPj4gLQkJaW50ZWxfY3J0Yy0+YXRvbWljLndhaXRfZm9y X2ZsaXBzID0gdHJ1ZTsKPj4gLQo+PiAtCQkvKgo+PiAtCQkgKiBGQkMgZG9lcyBub3Qgd29yayBv biBzb21lIHBsYXRmb3JtcyBmb3Igcm90YXRlZAo+PiAtCQkgKiBwbGFuZXMsIHNvIGRpc2FibGUg aXQgd2hlbiByb3RhdGlvbiBpcyBub3QgMCBhbmQKPj4gLQkJICogdXBkYXRlIGl0IHdoZW4gcm90 YXRpb24gaXMgc2V0IGJhY2sgdG8gMC4KPj4gLQkJICoKPj4gLQkJICogRklYTUU6IFRoaXMgaXMg cmVkdW5kYW50IHdpdGggdGhlIGZiYyB1cGRhdGUgZG9uZSBpbgo+PiAtCQkgKiB0aGUgcHJpbWFy eSBwbGFuZSBlbmFibGUgZnVuY3Rpb24gZXhjZXB0IHRoYXQgdGhhdAo+PiAtCQkgKiBvbmUgaXMg ZG9uZSB0b28gbGF0ZS4gV2UgZXZlbnR1YWxseSBuZWVkIHRvIHVuaWZ5Cj4+IC0JCSAqIHRoaXMu Cj4+IC0JCSAqLwo+PiAtCQlpZiAoc3RhdGUtPnZpc2libGUgJiYKPj4gLQkJICAgIElOVEVMX0lO Rk8oZGV2KS0+Z2VuIDw9IDQgJiYgIUlTX0c0WChkZXYpICYmCj4+IC0JCSAgICBkZXZfcHJpdi0+ ZmJjLmNydGMgPT0gaW50ZWxfY3J0YyAmJgo+PiAtCQkgICAgc3RhdGUtPmJhc2Uucm90YXRpb24g IT0gQklUKERSTV9ST1RBVEVfMCkpIHsKPj4gLQkJCWludGVsX2NydGMtPmF0b21pYy5kaXNhYmxl X2ZiYyA9IHRydWU7Cj4+IC0JCX0KPj4gLQo+PiAtCQlpZiAoc3RhdGUtPnZpc2libGUgJiYgIW9s ZF9zdGF0ZS0+dmlzaWJsZSkgewo+PiAtCQkJLyoKPj4gLQkJCSAqIEJEVyBzaWduYWxzIGZsaXAg ZG9uZSBpbW1lZGlhdGVseSBpZiB0aGUgcGxhbmUKPj4gLQkJCSAqIGlzIGRpc2FibGVkLCBldmVu IGlmIHRoZSBwbGFuZSBlbmFibGUgaXMgYWxyZWFkeQo+PiAtCQkJICogYXJtZWQgdG8gb2NjdXIg YXQgdGhlIG5leHQgdmJsYW5rIDooCj4+IC0JCQkgKi8KPj4gLQkJCWlmIChJU19CUk9BRFdFTEwo ZGV2KSkKPj4gLQkJCQlpbnRlbF9jcnRjLT5hdG9taWMud2FpdF92YmxhbmsgPSB0cnVlOwo+PiAt CQl9Cj4+IC0KPj4gLQkJaW50ZWxfY3J0Yy0+YXRvbWljLmZiX2JpdHMgfD0KPj4gLQkJCUlOVEVM X0ZST05UQlVGRkVSX1BSSU1BUlkoaW50ZWxfY3J0Yy0+cGlwZSk7Cj4+IC0KPj4gLQkJaW50ZWxf Y3J0Yy0+YXRvbWljLnVwZGF0ZV9mYmMgPSB0cnVlOwo+PiAtCj4+IC0JCWlmIChpbnRlbF93bV9u ZWVkX3VwZGF0ZShwbGFuZSwgJnN0YXRlLT5iYXNlKSkKPj4gLQkJCWludGVsX2NydGMtPmF0b21p Yy51cGRhdGVfd20gPSB0cnVlOwo+PiAtCX0KPj4gKwlyZXR1cm4gZHJtX3BsYW5lX2hlbHBlcl9j aGVja191cGRhdGUocGxhbmUsIGNydGMsIGZiLAo+PiArCQkJCQkgICAgIHNyYywgZGVzdCwgY2xp cCwKPj4gKwkJCQkJICAgICBtaW5fc2NhbGUsIG1heF9zY2FsZSwKPj4gKwkJCQkJICAgICBjYW5f cG9zaXRpb24sIHRydWUsCj4+ICsJCQkJCSAgICAgJnN0YXRlLT52aXNpYmxlKTsKPj4gK30KPj4g IAo+PiAtCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA5KSB7Cj4+IC0JCXJldCA9IHNrbF91 cGRhdGVfc2NhbGVyX3VzZXJzKGludGVsX2NydGMsIGNydGNfc3RhdGUsCj4+IC0JCQl0b19pbnRl bF9wbGFuZShwbGFuZSksIHN0YXRlLCAwKTsKPj4gLQkJaWYgKHJldCkKPj4gLQkJCXJldHVybiBy ZXQ7Cj4+IC0JfQo+PiArc3RhdGljIHZvaWQKPj4gK2ludGVsX2Rpc2FibGVfcHJpbWFyeV9wbGFu ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPj4gKwkJCSAgICBzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCj4+ICsJCQkgICAgYm9vbCBmb3JjZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gcGxhbmUtPmRldjsKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOwo+PiAgCj4+IC0JcmV0dXJuIDA7Cj4+ICsJZGV2X3ByaXYtPmRp c3BsYXkudXBkYXRlX3ByaW1hcnlfcGxhbmUoY3J0YywgTlVMTCwgMCwgMCk7Cj4+ICB9Cj4+ICAK Pj4gIHN0YXRpYyB2b2lkCj4+ICBpbnRlbF9jb21taXRfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPj4gLQkJCSAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUp Cj4+ICsJCQkgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm5ld19zdGF0ZSkKPj4gIHsKPj4g LQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+YmFzZS5jcnRjOwo+PiAtCXN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmJhc2UuZmI7Cj4+ICsJc3RydWN0IGRybV9jcnRj ICpjcnRjID0gbmV3X3N0YXRlLT5iYXNlLmNydGM7Cj4+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIgPSBuZXdfc3RhdGUtPmJhc2UuZmI7Cj4+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IHBsYW5lLT5kZXY7Cj4+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKPj4gIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YzsKPj4gLQlz dHJ1Y3QgZHJtX3JlY3QgKnNyYyA9ICZzdGF0ZS0+c3JjOwo+PiArCXN0cnVjdCBkcm1fcmVjdCAq c3JjID0gJm5ld19zdGF0ZS0+c3JjOwo+PiAgCj4+ICAJY3J0YyA9IGNydGMgPyBjcnRjIDogcGxh bmUtPmNydGM7Cj4+ICAJaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4+IEBAIC0x MzAxOCwyNSArMTI5OTQsMTc4IEBAIGludGVsX2NvbW1pdF9wcmltYXJ5X3BsYW5lKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAo+PiAgCWNydGMtPnggPSBzcmMtPngxID4+IDE2Owo+PiAgCWNydGMt PnkgPSBzcmMtPnkxID4+IDE2Owo+PiAgCj4+IC0JaWYgKGludGVsX2NydGMtPmFjdGl2ZSkgewo+ PiAtCQlpZiAoc3RhdGUtPnZpc2libGUpCj4+IC0JCQkvKiBGSVhNRToga2lsbCB0aGlzIGZhc3Ri b290IGhhY2sgKi8KPj4gLQkJCWludGVsX3VwZGF0ZV9waXBlX3NpemUoaW50ZWxfY3J0Yyk7Cj4+ ICsJaWYgKCFuZXdfc3RhdGUtPnZpc2libGUgfHwKPj4gKwkgICAgV0FSTl9PTihuZXdfc3RhdGUt PnZpc2libGUgJiYgIWNydGMtPnN0YXRlLT5hY3RpdmUpKSB7Cj4+ICsJCWludGVsX2Rpc2FibGVf cHJpbWFyeV9wbGFuZShwbGFuZSwgY3J0YywgZmFsc2UpOwo+PiArCX0gZWxzZSB7Cj4+ICsJCS8q IEZJWE1FOiBraWxsIHRoaXMgZmFzdGJvb3QgaGFjayAqLwo+PiArCQlpbnRlbF91cGRhdGVfcGlw ZV9zaXplKGludGVsX2NydGMpOwo+PiAgCj4+IC0JCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9w cmltYXJ5X3BsYW5lKGNydGMsIHBsYW5lLT5mYiwKPj4gLQkJCQkJCSAgICAgICBjcnRjLT54LCBj cnRjLT55KTsKPj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3ByaW1hcnlfcGxhbmUoY3J0 YywgZmIsCj4+ICsJCQkJCQkgICAgICAgc3JjLT54MSA+PiAxNiwKPj4gKwkJCQkJCSAgICAgICBz cmMtPnkxID4+IDE2KTsKPj4gIAl9Cj4+ICB9Cj4+ICAKPj4gLXN0YXRpYyB2b2lkCj4+IC1pbnRl bF9kaXNhYmxlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4+IC0JCQkg ICAgc3RydWN0IGRybV9jcnRjICpjcnRjLAo+PiAtCQkJICAgIGJvb2wgZm9yY2UpCj4+ICsvKiBU cmFuc2l0aW9uYWwgY2hlY2tpbmcgaGVyZSwgbW9zdGx5IGZvciBwbGFuZSB1cGRhdGVzICovCj4+ ICtzdGF0aWMgaW50IGludGVsX2F0b21pY19jaGVja19jcnRjKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKPj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4+ICB7Cj4+ IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBsYW5lLT5kZXY7Cj4+ICsJc3RydWN0IGludGVs X2NydGNfc3RhdGUgKnBpcGVfY29uZmlnID0gdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRl KTsKPj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0 Yyk7Cj4+ICsJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gY3J0Y19zdGF0ZS0+c3Rh dGU7Cj4+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPj4gIAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+PiArCXN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lOwo+PiArCXVuc2lnbmVkIHBsYW5lX21hc2s7Cj4+ICsJaW50IGlk eCwgcmV0Owo+PiArCWJvb2wgbW9kZV9jaGFuZ2VkID0gbmVlZHNfbW9kZXNldChjcnRjX3N0YXRl KTsKPj4gKwlib29sIGlzX2NydGNfZW5hYmxlZCA9IGNydGNfc3RhdGUtPmFjdGl2ZTsKPj4gKwli b29sIHdhc19jcnRjX2VuYWJsZWQgPSBjcnRjLT5zdGF0ZS0+YWN0aXZlOwo+PiAgCj4+IC0JZGV2 X3ByaXYtPmRpc3BsYXkudXBkYXRlX3ByaW1hcnlfcGxhbmUoY3J0YywgTlVMTCwgMCwgMCk7Cj4+ ICsJaWYgKCFjaGVja19lbmNvZGVyX2Nsb25pbmcoc3RhdGUsIHRvX2ludGVsX2NydGMoY3J0Yykp KSB7Cj4+ICsJCURSTV9ERUJVR19LTVMoInJlamVjdGluZyBpbnZhbGlkIGNsb25pbmcgY29uZmln dXJhdGlvblxuIik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPiBJIHRoaW5rIHdlIG5l ZWQgdHdvIGhhdmUgMiBibG9ja3MgaW4gdGhlIGNydGNfY2hlY2sgZnVuY3Rpb246IE9uZSBwYXJ0 Cj4gdGhhdCBqdXN0IHVwZGF0ZXMgd2F0ZXJtYXJrcyAod2hlbiBzdGF0ZS0+cGxhbmVfY2hhbmdl ZCBpcyBzZXQpIGFuZCBvbmUKPiBwYXJ0IHRoYXQgZGVhbHMgd2l0aCB0aGUgbW9kZXNldCBjaGVj a3MgKGFkZGluZyBwbGFuZXMsIGNoZWNraW5nIGNsb25pbmcKPiBhbmQgYWxsIHRoYXQpIHdoZW4g bmVlZHNfbW9kZXNldChzdGF0ZSkgaXMgdHJ1ZS4KTWFrZXMgc2Vuc2UuCgo+PiArCj4+ICsJbWVt c2V0KCZpbnRlbF9jcnRjLT5hdG9taWMsIDAsIHNpemVvZihpbnRlbF9jcnRjLT5hdG9taWMpKTsK Pj4gKwlpbnRlbF9jcnRjLT5hdG9taWMudXBkYXRlX3dtID0gbW9kZV9jaGFuZ2VkOwo+PiArCj4+ ICsJaWR4ID0gY3J0Yy0+YmFzZS5pZDsKPj4gKwlJOTE1X1NUQVRFX1dBUk4oY3J0Yy0+c3RhdGUt PmFjdGl2ZSAhPSBpbnRlbF9jcnRjLT5hY3RpdmUsCj4+ICsJCSJDcnRjICVpIG1pc21hdGNoIGJl dHdlZW4gc3RhdGUtPmFjdGl2ZSglaSkgYW5kIGNydGMtPmFjdGl2ZSAoJWkpXG4iLAo+PiArCQlp ZHgsIGNydGMtPnN0YXRlLT5hY3RpdmUsIGludGVsX2NydGMtPmFjdGl2ZSk7Cj4gU3RhdGUgY29t cHV0YXRpb24gaXMgYXN5bmMsIHlvdSBjYW50IGNoZWNrIHRoaXMgaW4gdGhlIGF0b21pY19jaGVj awo+IGZ1bmN0aW9ucy4gSWYgeW91IHRoaW5rIHRoaXMgaXMgdXNlZnVsIHRoZW4gd2UnZCBuZWVk IHRvIGNoZWNrIHRoaXMgZXZlcnkKPiB0aW1lIGJlZm9yZSB3ZSB1cGRhdGUgaW50ZWxfY3J0Yy0+ YWN0aXZlLiBCdXQgd2UgaGF2ZSB0aGUgdmFyaW91cyBXQVJOX09OCj4gYWxsIG92ZXIgdGhlIHBs YWNlIChjb252ZXJ0ZWQgb3ZlciB0byBjcnRjLT5zdGF0ZS0+YWN0aXZlKSBzbyBJIHRoaW5rCj4g d2UncmUgbW9yZSB0aGFuIGNvdmVyZWQgYW5kIGNhbiBqdXN0IHJpcCBvdXQgb3VyIG93biBpbnRl bF9jcnRjLT5hY3RpdmUKPiBldmVudHVhbGx5LiBBdCBsZWFzdCB0aGF0J3Mga2luZGEgYmVlbiBt eSBpZGVhIHdpdGggc3RhdGUtPmFjdGl2ZSB0b28uClllYWgsIGl0J3MgYSByZW1haW5kZXIgd2hl biBJIGhhZCB0aGUgY29tbWl0cyBpbiBhIGRpZmZlcmVudCBvcmRlci4KPj4gKwo+PiArCURSTV9E RUJVR19BVE9NSUMoIkNydGMgJWkgd2FzIGVuYWJsZWQgJWkgbm93IGVuYWJsZWQ6ICVpXG4iLAo+ PiArCQkJIGlkeCwgd2FzX2NydGNfZW5hYmxlZCwgaXNfY3J0Y19lbmFibGVkKTsKPj4gKwo+PiAr CXBsYW5lX21hc2sgPSBjcnRjX3N0YXRlLT5wbGFuZV9tYXNrIHwgY3J0Yy0+c3RhdGUtPnBsYW5l X21hc2s7Cj4+ICsJZHJtX2Zvcl9lYWNoX3BsYW5lX21hc2socGxhbmUsIGRldiwgcGxhbmVfbWFz aykgewo+PiArCQlpbnQgaSA9IGRybV9wbGFuZV9pbmRleChwbGFuZSk7Cj4+ICsJCXN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0gc3RhdGUtPnBsYW5lX3N0YXRlc1tpXTsKPj4g KwkJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGU7Cj4+ICsJCWJvb2wg dHVybl9vZmYsIHR1cm5fb24sIHZpc2libGUsIHdhc192aXNpYmxlOwo+PiArCQlzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYjsKPj4gKwo+PiArCQlpZiAoIXBsYW5lX3N0YXRlKSB7Cj4+ICsJCQlj b25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyAqZnVuY3M7Cj4+ICsJCQlpbnQgcmV0 Owo+PiArCj4+ICsJCQlpZiAoIW1vZGVfY2hhbmdlZCB8fCAhcGxhbmUtPnN0YXRlLT5mYikKPj4g KwkJCQljb250aW51ZTsKPj4gKwo+PiArCQkJcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9w bGFuZV9zdGF0ZShzdGF0ZSwgcGxhbmUpOwo+IFdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBjcnRj IGNvbnN0cmFpbnMgYmVmb3JlIGFjcXVpcmluZyB0aGUgcGxhbmUgc3RhdGUsCj4gb3RoZXJ3aXNl IGFsbCB0aGUgbG9ja2luZyBnb2VzIHNpbmdsZS10aHJlYWRlZC4gT24gaW50ZWwgaHcgd2UgY2Fu IGRvIHRoYXQKPiBiZWNhdXNlIHRoZSBwbGFuZS0+Y3J0YyBsaW5rcyBhcmUgc3RhdGljLCB5b3Ug Y2FuIGxvb2sgYXQKPiBpbnRlbF9wbGFuZS0+cGlwZS4KVGhpcyBjb2RlIGlzIHRvIG1ha2Ugc3Vy ZSBhbGwgcGxhbmVzIGFyZSBjaGVja2VkIHdoZW4gbW9kZV9jaGFuZ2VkICYmIHBsYW5lLT5zdGF0 ZS0+ZmIsCnBsYW5lX3N0YXRlLT52aXNpYmxlIG5lZWRzIHRvIGJlIHVwZGF0ZWQgaW4gdGhhdCBj YXNlLgoKPj4gKwkJCWlmIChJU19FUlIocGxhbmVfc3RhdGUpKQo+PiArCQkJCXJldHVybiBQVFJf RVJSKHBsYW5lX3N0YXRlKTsKPj4gKwo+PiArCQkJZnVuY3MgPSBwbGFuZS0+aGVscGVyX3ByaXZh dGU7Cj4+ICsJCQlyZXQgPSBmdW5jcy0+YXRvbWljX2NoZWNrKHBsYW5lLCBwbGFuZV9zdGF0ZSk7 Cj4+ICsJCQlpZiAocmV0KQo+PiArCQkJCXJldHVybiByZXQ7Cj4+ICsJCX0KPj4gKwkJb2xkX3Bs YW5lX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKPj4gKwo+PiAr CQl3YXNfdmlzaWJsZSA9IHdhc19jcnRjX2VuYWJsZWQgJiYgKG9sZF9wbGFuZV9zdGF0ZS0+dmlz aWJsZSB8fAo+PiArCQkJICAgICAgb2xkX3BsYW5lX3N0YXRlLT5od19lbmFibGVkKTsKPj4gKwkJ dmlzaWJsZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lX3N0YXRlKS0+dmlzaWJsZSAmJgo+ PiArCQkJICAgICAgaXNfY3J0Y19lbmFibGVkOwo+PiArCj4+ICsJCWlmIChwbGFuZS0+c3RhdGUt PmNydGMgIT0gY3J0YykKPj4gKwkJCXdhc192aXNpYmxlID0gZmFsc2U7Cj4+ICsJCWlmIChwbGFu ZV9zdGF0ZS0+Y3J0YyAhPSBjcnRjKQo+PiArCQkJdmlzaWJsZSA9IGZhbHNlOwo+PiArCj4+ICsJ CWlmICghd2FzX3Zpc2libGUgJiYgIXZpc2libGUpCj4+ICsJCQljb250aW51ZTsKPj4gKwo+PiAr CQl0dXJuX29mZiA9IHdhc192aXNpYmxlICYmICghdmlzaWJsZSB8fCBtb2RlX2NoYW5nZWQpOwo+ PiArCQl0dXJuX29uID0gdmlzaWJsZSAmJiAoIXdhc192aXNpYmxlIHx8IG1vZGVfY2hhbmdlZCk7 Cj4+ICsJCWZiID0gcGxhbmVfc3RhdGUtPmZiOwo+PiArCj4+ICsJCURSTV9ERUJVR19BVE9NSUMo IkNydGMgJWkgaGFzIHBsYW5lICVpIHdpdGggZmIgJWlcbiIsIGlkeCwKPj4gKwkJCXBsYW5lLT5i YXNlLmlkLCBmYiA/IGZiLT5iYXNlLmlkIDogLTEpOwo+PiArCQlEUk1fREVCVUdfQVRPTUlDKCJc dHZpc2libGUgJWkgLT4gJWksIG9mZiAlaSwgb24gJWksIG1zICVpXG4iLAo+PiArCQkJd2FzX3Zp c2libGUsIHZpc2libGUsIHR1cm5fb2ZmLCB0dXJuX29uLCBtb2RlX2NoYW5nZWQpOwo+PiArCj4+ ICsJCS8qIHBsYW5lIGJlaW5nIHR1cm5lZCBvZmYgYXMgcGFydCBvZiBtb2Rlc2V0IG9yIGNoYW5n ZXM/ICovCj4+ICsJCWlmIChpbnRlbF93bV9uZWVkX3VwZGF0ZShwbGFuZSwgcGxhbmVfc3RhdGUp KQo+PiArCQkJaW50ZWxfY3J0Yy0+YXRvbWljLnVwZGF0ZV93bSA9IHRydWU7Cj4+ICsKPj4gKwkJ aWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDkgJiYKPj4gKwkJICAgIHBsYW5lLT5iYXNlLnR5 cGUgIT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKSB7Cj4+ICsJCQlyZXQgPSBza2xfdXBkYXRlX3Nj YWxlcl91c2VycyhpbnRlbF9jcnRjLCBwaXBlX2NvbmZpZywKPj4gKwkJCQkJdG9faW50ZWxfcGxh bmUocGxhbmUpLAo+PiArCQkJCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZV9zdGF0ZSksIDAp Owo+PiArCQkJaWYgKHJldCkKPj4gKwkJCQlyZXR1cm4gcmV0Owo+PiArCQl9Cj4+ICsKPj4gKwkJ LyoKPj4gKwkJICogJ3ByZXBhcmUnIGlzIG5ldmVyIGNhbGxlZCB3aGVuIHBsYW5lIGlzIGJlaW5n IGRpc2FibGVkLCBzbwo+PiArCQkgKiB3ZSBuZWVkIHRvIGhhbmRsZSBmcm9udGJ1ZmZlciB0cmFj a2luZyBhcyBhIHNwZWNpYWwgY2FzZQo+PiArCQkgKi8KPj4gKwkJaWYgKG9sZF9wbGFuZV9zdGF0 ZS0+YmFzZS5mYiAmJiAhdmlzaWJsZSkKPj4gKwkJCWludGVsX2NydGMtPmF0b21pYy5kaXNhYmxl ZF9wbGFuZXMgfD0gMSA8PCBpOwo+PiArCj4+ICsJCXN3aXRjaCAocGxhbmUtPmJhc2UudHlwZSkg ewo+IFdlIHNob3VsZCBwcm9iYWJseSBzdG9yZSB0aGUgZnJvbnRidWZmZXIgdHJhY2tpbmcgbWFz ayBpbiBpbnRlbF9wbGFuZQo+IHNvbWV3aGVyZS4KCkluZGVlZCwgYnV0IHRoaXMgY29kZSdzIGFs cmVhZHkgY29tcGxpY2F0ZWQgZW5vdWdoIHNvIEkgZmVsdCB0aGF0IGluaXRpYWxseSBkb2luZwph IDE6MSBtb3ZpbmcgZnJvbSBwbGFuZV9jaGVjayB0byBjcnRjX2NoZWNrIHdvdWxkIGJlIGVhc2ll ciB0byBkZWJ1Zy4KCgo+PiA8c25pcD4KPiBJJ20gY29tcGxldGVseSBsb3N0IGFzIHRvIHdoeSB3 ZSBuZWVkIHRvIG1vdmUgYWxsIHRoZSBwbGFuZS0+YXRvbWljX2NoZWNrCj4gY29kZSBpbnRvIGEg bG9vcCBpbiB0aGUgY3J0Y19jaGVjayBmdW5jdGlvbj8KVG8gY2FsY3VsYXRlIHdoYXQgbmVlZHMg dG8gaGFwcGVuIGR1cmluZyBhdG9taWNfYmVnaW4gYW5kIGF0b21pY19mbHVzaCgpIG9uIGVhY2gg Y3J0Yy4KCj4+IDxzbmlwPgo+PiBAQCAtMTMzMDYsMjAgKzEzNDI3LDI2IEBAIGludGVsX2Rpc2Fi bGVfY3Vyc29yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+PiAgCj4+ICBzdGF0aWMg dm9pZAo+PiAgaW50ZWxfY29tbWl0X2N1cnNvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKPj4gLQkJCSAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSkKPj4gKwkJCSAgc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpuZXdfc3RhdGUpCj4+ICB7Cj4+IC0Jc3RydWN0IGRybV9j cnRjICpjcnRjID0gc3RhdGUtPmJhc2UuY3J0YzsKPj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMg PSBuZXdfc3RhdGUtPmJhc2UuY3J0YzsKPj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxh bmUtPmRldjsKPj4gIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YzsKPj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJfb2JqKHN0YXRlLT5iYXNlLmZiKTsK Pj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJfb2JqKG5ld19z dGF0ZS0+YmFzZS5mYik7Cj4+ICAJdWludDMyX3QgYWRkcjsKPj4gIAo+PiAgCWNydGMgPSBjcnRj ID8gY3J0YyA6IHBsYW5lLT5jcnRjOwo+PiAgCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNy dGMpOwo+PiAgCj4+IC0JcGxhbmUtPmZiID0gc3RhdGUtPmJhc2UuZmI7Cj4+IC0JY3J0Yy0+Y3Vy c29yX3ggPSBzdGF0ZS0+YmFzZS5jcnRjX3g7Cj4+IC0JY3J0Yy0+Y3Vyc29yX3kgPSBzdGF0ZS0+ YmFzZS5jcnRjX3k7Cj4+ICsJcGxhbmUtPmZiID0gbmV3X3N0YXRlLT5iYXNlLmZiOwo+PiArCWNy dGMtPmN1cnNvcl94ID0gbmV3X3N0YXRlLT5iYXNlLmNydGNfeDsKPj4gKwljcnRjLT5jdXJzb3Jf eSA9IG5ld19zdGF0ZS0+YmFzZS5jcnRjX3k7Cj4+ICsKPj4gKwlpZiAoIW5ld19zdGF0ZS0+dmlz aWJsZSB8fAo+PiArCSAgICBXQVJOX09OKG5ld19zdGF0ZS0+dmlzaWJsZSAmJiAhY3J0Yy0+c3Rh dGUtPmFjdGl2ZSkpIHsKPiBBcyBhbiBhc2lkZTogV2UgbXVzdCBtb3ZlIG92ZXIgdG8gY29tcHV0 ZSAtPnZpc2libGUgaXJyZXNwZWN0aXZlIG9mCj4gLT5hY3RpdmUuIEkgaGF2ZW4ndCBjaGVjayB3 aGV0aGVyIHlvdSBmaXggdGhhdCBsYXRlciBvbiBhbHJlYWR5LCBidXQgdGhpcwo+IGlzIGltcG9y dGFudCB0byBiZSBhYmxlIHRvIGNoZWNrIHdtIGNvbnN0cmFpbnRzIGNvcnJlY3RseS4gVGhlCj4g Y3J0Y19zdGF0ZS0+YWN0aXZlIGhhbmRsaW5nIHNob3VsZCBpbW8gYmUgZG9uZSBpbiB0aGUgY29t bW9uIGNvZGUgYnkKPiBzaW1wbHkgbm90IGNhbGxpbmcgYW55IG9mIHRoZSBwbGFuZSBvciBjcnRj IGZ1bmN0aW9ucyBodyB1cGRhdGUgaWYgdGhlCj4gY3J0YyBpcyBvZmYuCkluIHRoZSBjcnRjX2No ZWNrIGZ1bmN0aW9uIEknbSBzZXR0aW5nOgppbnRlbF9jcnRjLT5hdG9taWMudXBkYXRlX3dtID0g bW9kZV9jaGFuZ2VkOyA/CgpJdCBtZWFucyByZWNhbGN1bGF0aW5nIHdtIG9uIGRwbXMgb2ZmLT5v biB0b28gYnV0IGlzIHRoYXQgcmVhbGx5IHN1Y2ggYSBidXJkZW4/ClRyZWF0aW5nIGNydGMtPnN0 YXRlLT5hY3RpdmUgYXMgdGhlIG9ubHkga25vYiBmb3IgY3J0YyBvbi9vZmYgc2ltcGxpZmllcyB0 aGluZ3MuCj4gT2YgY291cnNlIHRoYXQgbWVhbnMgd2UgbmVlZCB0byBhZGQgYWxsIHBsYW5lcyBi b3RoIGZvciAtPm1vZGVfY2hhbmdlZCBhbmQKPiBmb3IgLT5hY3RpdmVfY2hhbmdlZCwgYnV0IG5l ZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkgdGFrZXMgY2FyZSBvZiB0aGF0Cj4gYWxyZWFkeS4KVGhp cyBpcyBleGFjdGx5IHdoeSBJIGFkZCBhbGwgcGxhbmVzIGluIHRoZSBjaGVjayBmdW5jdGlvbi4K Cj4gQXNpZGU6IFRoZSBpZGVhIGJlaGluZCB0aGUgc3BsaXQgYmV0d2VlbiBkcm1fYXRvbWljX2hl bHBlcl9jaGVja19wbGFuZXMKPiBhbmQgZHJtX2F0b21pY19oZWxwZXJfY2hlY2tfbW9kZXNldCBp cyB0aGF0IHRoZSBmb3JtZXIgaGFuZGxlcyBwbGFuZXMtb25seQo+IHVwZGF0ZXMgd2hpbGUgdGhl IGxhdHRlciBoYW5kbGVzIG1vZGVzZXQuIFdlIGNhbid0IGZ1bGx5IHVzZQo+IGNoZWNrX21vZGVz ZXRzIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIGNydGMgaGVscGVycywgYnV0IEkgdGhpbmsgcmV1c2lu ZyB0aGUKPiBzYW1lIGlkZWEgc3RpbGwgaGFzIG1lcml0Ogo+Cj4gLSBXZSBjcmVhdGUgYW4gaW50 ZWxfY2hlY2tfbW9kZXNldCB3aGljaCBjYWxscyB0aGUgaGVscGVyJ3MgY2hlY2tfbW9kZXNldAo+ ICAgcGx1cyBhZnRlcndhcmRzIGFsbCB0aGUgbW9kZXNldCBjaGVja3MgKGRwbGwsIGNsb25pbmcg Y2hlY2tzLCBhZGRpbmcKPiAgIHBsYW5lIHN0YXRlcyBhbmQgZ2xvYmFsIHJlc291cmNlcykgdGhh dCB3ZSBkbyBpbiBjcnRjX2NvbXB1dGVfY29uZmlnIGFuZAo+ICAgZnJpZW5kcyByaWdodCBub3cu IFRoYXQgb25lIHdvdWxkIGFsc28gYWRkIHBsYW5lIHN0YXRlcyBhcyBuZWVkZWQgKGJ1dAo+ICAg bm90IGNhbGwgcGxhbmUtPmF0b21pY19jaGVjaykuIEFsbCBvZiB0aGlzIHdvdWxkIGJlIHNraXBw ZWQgaWYKPiAgIG5lZWRzX21vZGVzZXQgaXNuJ3QgdHJ1ZS4KTWlnaHQgYmUgZG9hYmxlIGlmIHdl IGRvIGFkZCBwbGFuZXMgYmV0d2VlbiBjaGVja19tb2Rlc2V0IGFuZCBjaGVja19wbGFuZXMuCgpP cmlnaW5hbGx5IEkgdHJpZWQgaXQgaW4gaW50ZWxfbW9kZXNldF9jb21wdXRlX2NvbmZpZywgYnV0 IHRoYXQgZGlkbid0IHdvcmsgd2hlbgp0aGUgY3J0YyB3YXMgZGlmZmVyZW50IGZyb20gdGhlIG9u ZSB0aGF0IGhhZCB0aGUgYXJndW1lbnQgcGFzc2VkLgoKPiAtIEFmdGVyIHRoYXQgd2UnZCBjYWxs IHRoZSBoZWxwZXIncyBwbGFuZV9jaGVjayBmdW5jdGlvbnMgd2hpY2ggZG9lcwo+ICAgZXhjbHVz aXZlbHkgcGxhbmUtdXBkYXRlIHJlbGF0ZWQgY2hlY2tzLiBjcnRjL3BsYW5lLT5hdG9taWNfY2hl Y2sKPiAgIHdvdWxkbid0IGNvbnRhaW4gYW55IG1vZGVzZXQgcmVsYXRlZCBjaGVja3MgKGxpa2Ug dGhlIGVuY29kZXIgY2xvbmluZyBvcgo+ICAgcGxhbmUgYWRkaW5nIHlvdSdyZSBkb2luZyByaWdo dCBub3cpLgpJIHRoaW5rIGVuY29kZXIgY2xvbmluZyBvdWdodCB0byBiZSBwYXJ0IG9mIHRoZSBj cnRjIGNoZWNrIHNpbmNlIGl0cyBkb25lIG9uIGVhY2ggY3J0Yy4KPj4gPHNuaXA+Cj4gT2sgSSB0 aGluayBvdmVyYWxsIHRoaXMgcGF0Y2ggaXMgdG9vIGJpZyBhbmQgbmVlZHMgdG8gYmUgc3BsaXQg YSBiaXQuIFRoZQo+IGZvbGxvd2luZyBzaG91bGQgYmUgZG9hYmxlIGFzIHByZXAtcGF0Y2hlczoK PiAtIHNldF9iYXNlX2F0b21pYyAoaWYgd2UgZGFyZSB0byB0b3VjaCBpdCBhdCBhbGwpCkkgdGhp bmsgSSdsbCBkcm9wIGl0Lgo+IC0gc2h1ZmZsaW5nIHRoZSBjcnRjIG1vZGVzZXQgY2hlY2sgbG9n aWMgYXJvdW5kIHRvIGFkZCBwbGFuZSBzdGF0ZXMgYXMKPiAgIG5lZWRlZCwgbWFraW5nIHN1cmUg d2Ugb25seSBydW4gdGhhdCBpZiBuZWVkc19tb2Rlc2V0IGluZGljYXRlcyBzby4KSSB0aGluayBz cGxpdHRpbmcgdGhpcyBvdXQgd291bGQgYnJlYWsgdGhlIHRyYW5zaXRpb25hbCBoZWxwZXJzLCB0 aGV5IHJlbHkgb24gdGhlIHBsYW5lIHN0YXRlIG5vdCBiZWluZyB0aGVyZSBzbyB0aGUgc3RhdGUg aXMgY29ycmVjdGx5IHVwZGF0ZWQKd2hlbiB0aGUgdHJhbnNpdGlvbmFsIHBsYW5lIGhlbHBlcnMg cnVuLCBlbHNlIHdlIHdvdWxkIGNhdXNlIHN0YWxlIHN0YXRlIHRvIGJlIHN3YXBwZWQuIDotKAo+ IC0gUHVzaGluZyB0aGUgY2hlY2tzIGZvciBpbnRlbF9jcnRjLT5hY3RpdmUgb3IgY3J0Yy0+c3Rh dGUtPmFjdGl2ZSBvdXQgb2YKPiAgIHRoZSBsb3ctbGV2ZWwgcGxhbmUgY29kZSB1cCBpbnRvIGhp Z2hlciBsZXZlbCBhdG9taWMgcGxhbmUgY29kZSAoYW5kIHRoZQo+ICAgZmV3IGxlZ2FjeSBlbnRy eSBwb2ludHMgZm9yIHBsYW5lIHVwZGF0ZXMgdGhhdCB3ZSBzdGlsbCBoYXZlIG1heWJlLCBidXQK PiAgIHRob3NlIHNob3VsZCBiZSBjb3ZlcmVkIEkgdGhpbmsgd2l0aCB0aGUgdW5pdmVyc2FsIHBs YW5lICsgdHJhbnNpdGlvbmFsCj4gICBoZWxwZXJzKS4KSSBmZWFyIHRoaXMgbWlnaHQgYnJlYWsg dGhlIHRyYW5zaXRpb25hbCBoZWxwZXIgY2FsbHMgdG9vLCB0aGUgdHJhbnNpdGlvbmFsIGhlbHBl cnMgcmVxdWlyZSB0aGUgdHJhbnNpdGlvbmFsIHN0YXRlIHRvIGJlIG1vc3RseSBpbiBzeW5jIHdp dGggdGhlIGF0b21pYyBzdGF0ZS4KCj4gVGhlbiB3ZSBjYW4gcHV0IGluIHRoZSBtZWF0IG9mIHRo aXMgcGF0Y2gsIGkuZS4gcmVwbGFjaW5nIHRoZSBoZWxwZXJzIHdpdGgKPiBhdG9taWMgdXBkYXRl cyBpbiB0aGUgbW9kZXNldCBjb2RlLgpJIHdpc2ggdGhhdCB3b3VsZCB3b3JrLiA7LSkKCn5NYWFy dGVuCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==