From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 10/34] drm/i915: Remove GPU reset dependence on struct_mutex Date: Thu, 24 Jan 2019 14:06:01 +0200 Message-ID: <87y37al0pi.fsf@gaia.fi.intel.com> References: <20190121222117.23305-1-chris@chris-wilson.co.uk> <20190121222117.23305-11-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id EBDA66F141 for ; Thu, 24 Jan 2019 12:07:56 +0000 (UTC) In-Reply-To: <20190121222117.23305-11-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gTm93IHRo YXQgdGhlIHN1Ym1pc3Npb24gYmFja2VuZHMgYXJlIGNvbnRyb2xsZWQgdmlhIHRoZWlyIG93biBz cGlubG9ja3MsCj4gd2l0aCBhIHdhdmUgb2YgYSBtYWdpYyB3YW5kIHdlIGNhbiBsaWZ0IHRoZSBz dHJ1Y3RfbXV0ZXggcmVxdWlyZW1lbnQKPiBhcm91bmQgR1BVIHJlc2V0LiBUaGF0IGlzIHdlIGFs bG93IHRoZSBzdWJtaXNzaW9uIGZyb250ZW5kICh1c2Vyc3BhY2UpCj4gdG8ga2VlcCBvbiBzdWJt aXR0aW5nIHdoaWxlIHdlIHByb2Nlc3MgdGhlIEdQVSByZXNldCBhcyB3ZSBjYW4gc3VzcGVuZAo+ IHRoZSBiYWNrZW5kIGluZGVwZW5kZW50bHkuCj4KPiBUaGUgbWFqb3IgY2hhbmdlIGlzIGFyb3Vu ZCB0aGUgYmFja29mZi9oYW5kb2ZmIHN0cmF0ZWd5IGZvciBwZXJmb3JtaW5nCj4gdGhlIHJlc2V0 LiBXaXRoIG5vIG11dGV4IGRlYWRsb2NrLCB3ZSBubyBsb25nZXIgaGF2ZSB0byBjb29yZGluYXRl IHdpdGgKPiBhbnkgd2FpdGVyLCBhbmQganVzdCBwZXJmb3JtIHRoZSByZXNldCBpbW1lZGlhdGVs eS4KPgo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNv LnVrPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAgICAgICAg ICAgfCAgMzggKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAg ICAgIHwgICA1IC0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAg ICAgIHwgIDE4ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ZlbmNlX3JlZy5o ICAgICB8ICAgMSAtCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oICAgICAg ICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgICAg ICAgICB8IDEwNCArKystLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5o ICAgICAgICAgfCAgMjggKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMg ICAgICAgICAgIHwgIDQ3IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jlc2V0LmMg ICAgICAgICAgICAgfCAzOTcgKysrKysrKystLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcmVzZXQuaCAgICAgICAgICAgICB8ICAgMyArCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2VuZ2luZV9jcy5jICAgICAgICB8ICAgNiArLQo+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9ndWNfc3VibWlzc2lvbi5jICAgfCAgIDUgKy0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfaGFuZ2NoZWNrLmMgICAgICAgIHwgIDI4ICstCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xyYy5jICAgICAgICAgICAgICB8ICA5MiArKy0tCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX292ZXJsYXkuYyAgICAgICAgICB8ICAgMiAtCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyAgICAgICB8ICA5MSArKy0tCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCAgICAgICB8ICAxNyArLQo+ICAuLi4vZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9oYW5nY2hlY2suYyAgfCAgNTcgKy0tCj4gIC4uLi9k cm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfd29ya2Fyb3VuZHMuYyAgICB8ICAgMyAtCj4gIC4uLi9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZ2VtX2RldmljZS5jICB8ICAgNCArLQo+ICAyMCBm aWxlcyBjaGFuZ2VkLCAzOTMgaW5zZXJ0aW9ucygrKSwgNTU0IGRlbGV0aW9ucygtKQo+Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBpbmRleCAyNGQ2ZDRjZTE0ZWYuLjNlYzM2OTk4 MGQ0MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gQEAgLTEyODQsOCAr MTI4NCw2IEBAIHN0YXRpYyBpbnQgaTkxNV9oYW5nY2hlY2tfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHZvaWQgKnVudXNlZCkKPiAgCQlzZXFfcHV0cyhtLCAiV2VkZ2VkXG4iKTsKPiAgCWlmICh0 ZXN0X2JpdChJOTE1X1JFU0VUX0JBQ0tPRkYsICZkZXZfcHJpdi0+Z3B1X2Vycm9yLmZsYWdzKSkK PiAgCQlzZXFfcHV0cyhtLCAiUmVzZXQgaW4gcHJvZ3Jlc3M6IHN0cnVjdF9tdXRleCBiYWNrb2Zm XG4iKTsKPiAtCWlmICh0ZXN0X2JpdChJOTE1X1JFU0VUX0hBTkRPRkYsICZkZXZfcHJpdi0+Z3B1 X2Vycm9yLmZsYWdzKSkKPiAtCQlzZXFfcHV0cyhtLCAiUmVzZXQgaW4gcHJvZ3Jlc3M6IHJlc2V0 IGhhbmRvZmYgdG8gd2FpdGVyXG4iKTsKPiAgCWlmICh3YWl0cXVldWVfYWN0aXZlKCZkZXZfcHJp di0+Z3B1X2Vycm9yLndhaXRfcXVldWUpKQo+ICAJCXNlcV9wdXRzKG0sICJXYWl0ZXIgaG9sZGlu ZyBzdHJ1Y3QgbXV0ZXhcbiIpOwo+ICAJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmRldl9wcml2LT5n cHVfZXJyb3IucmVzZXRfcXVldWUpKQo+IEBAIC0xMzIxLDE1ICsxMzE5LDE1IEBAIHN0YXRpYyBp bnQgaTkxNV9oYW5nY2hlY2tfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkK PiAgCQlzdHJ1Y3QgcmJfbm9kZSAqcmI7Cj4gIAo+ICAJCXNlcV9wcmludGYobSwgIiVzOlxuIiwg ZW5naW5lLT5uYW1lKTsKPiAtCQlzZXFfcHJpbnRmKG0sICJcdHNlcW5vID0gJXggW2N1cnJlbnQg JXgsIGxhc3QgJXhdXG4iLAo+ICsJCXNlcV9wcmludGYobSwgIlx0c2Vxbm8gPSAleCBbY3VycmVu dCAleCwgbGFzdCAleF0sICVkbXMgYWdvXG4iLAo+ICAJCQkgICBlbmdpbmUtPmhhbmdjaGVjay5z ZXFubywgc2Vxbm9baWRdLAo+IC0JCQkgICBpbnRlbF9lbmdpbmVfbGFzdF9zdWJtaXQoZW5naW5l KSk7Cj4gLQkJc2VxX3ByaW50ZihtLCAiXHR3YWl0ZXJzPyAlcywgZmFrZSBpcnEgYWN0aXZlPyAl cywgc3RhbGxlZD8gJXMsIHdlZGdlZD8gJXNcbiIsCj4gKwkJCSAgIGludGVsX2VuZ2luZV9sYXN0 X3N1Ym1pdChlbmdpbmUpLAo+ICsJCQkgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQo+ICsJ CQkJCSAgICBlbmdpbmUtPmhhbmdjaGVjay5hY3Rpb25fdGltZXN0YW1wKSk7Cj4gKwkJc2VxX3By aW50ZihtLCAiXHR3YWl0ZXJzPyAlcywgZmFrZSBpcnEgYWN0aXZlPyAlc1xuIiwKPiAgCQkJICAg eWVzbm8oaW50ZWxfZW5naW5lX2hhc193YWl0ZXIoZW5naW5lKSksCj4gIAkJCSAgIHllc25vKHRl c3RfYml0KGVuZ2luZS0+aWQsCj4gLQkJCQkJICAmZGV2X3ByaXYtPmdwdV9lcnJvci5taXNzZWRf aXJxX3JpbmdzKSksCj4gLQkJCSAgIHllc25vKGVuZ2luZS0+aGFuZ2NoZWNrLnN0YWxsZWQpLAo+ IC0JCQkgICB5ZXNubyhlbmdpbmUtPmhhbmdjaGVjay53ZWRnZWQpKTsKPiArCQkJCQkgICZkZXZf cHJpdi0+Z3B1X2Vycm9yLm1pc3NlZF9pcnFfcmluZ3MpKSk7Cj4gIAo+ICAJCXNwaW5fbG9ja19p cnEoJmItPnJiX2xvY2spOwo+ICAJCWZvciAocmIgPSByYl9maXJzdCgmYi0+d2FpdGVycyk7IHJi OyByYiA9IHJiX25leHQocmIpKSB7Cj4gQEAgLTEzNDMsMTEgKzEzNDEsNiBAQCBzdGF0aWMgaW50 IGk5MTVfaGFuZ2NoZWNrX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4g IAkJc2VxX3ByaW50ZihtLCAiXHRBQ1RIRCA9IDB4JTA4bGx4IFtjdXJyZW50IDB4JTA4bGx4XVxu IiwKPiAgCQkJICAgKGxvbmcgbG9uZyllbmdpbmUtPmhhbmdjaGVjay5hY3RoZCwKPiAgCQkJICAg KGxvbmcgbG9uZylhY3RoZFtpZF0pOwo+IC0JCXNlcV9wcmludGYobSwgIlx0YWN0aW9uID0gJXMo JWQpICVkIG1zIGFnb1xuIiwKPiAtCQkJICAgaGFuZ2NoZWNrX2FjdGlvbl90b19zdHIoZW5naW5l LT5oYW5nY2hlY2suYWN0aW9uKSwKPiAtCQkJICAgZW5naW5lLT5oYW5nY2hlY2suYWN0aW9uLAo+ IC0JCQkgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQo+IC0JCQkJCSAgICBlbmdpbmUtPmhh bmdjaGVjay5hY3Rpb25fdGltZXN0YW1wKSk7CgpZZWFoIGl0IGlzIGEgdGltZSBmb3Igc2FtcGxl IGFuZCBtb3N0IGRlY2lzaW9uIGFyZSBvbiB0b3Agb2YKc2Vxbm8uIFdlbGNvbWVkIGNvbXByZXNz aW9uLgoKPiAgCj4gIAkJaWYgKGVuZ2luZS0+aWQgPT0gUkNTKSB7Cj4gIAkJCXNlcV9wdXRzKG0s ICJcdGluc3Rkb25lIHJlYWQgPVxuIik7Cj4gQEAgLTM4ODYsOCArMzg3OSw2IEBAIHN0YXRpYyBp bnQKPiAgaTkxNV93ZWRnZWRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCgoqaG9uZXMgaGlzIGF4 ZSoKCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZGF0YTsKPiAtCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAtCXVuc2lnbmVkIGludCB0bXA7Cj4gIAo+ ICAJLyoKPiAgCSAqIFRoZXJlIGlzIG5vIHNhZmVndWFyZCBhZ2FpbnN0IHRoaXMgZGVidWdmcyBl bnRyeSBjb2xsaWRpbmcKPiBAQCAtMzkwMCwxOCArMzg5MSw4IEBAIGk5MTVfd2VkZ2VkX3NldCh2 b2lkICpkYXRhLCB1NjQgdmFsKQo+ICAJaWYgKGk5MTVfcmVzZXRfYmFja29mZigmaTkxNS0+Z3B1 X2Vycm9yKSkKPiAgCQlyZXR1cm4gLUVBR0FJTjsKPiAgCj4gLQlmb3JfZWFjaF9lbmdpbmVfbWFz a2VkKGVuZ2luZSwgaTkxNSwgdmFsLCB0bXApIHsKPiAtCQllbmdpbmUtPmhhbmdjaGVjay5zZXFu byA9IGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKTsKPiAtCQllbmdpbmUtPmhhbmdjaGVj ay5zdGFsbGVkID0gdHJ1ZTsKPiAtCX0KPiAtCj4gIAlpOTE1X2hhbmRsZV9lcnJvcihpOTE1LCB2 YWwsIEk5MTVfRVJST1JfQ0FQVFVSRSwKPiAgCQkJICAiTWFudWFsbHkgc2V0IHdlZGdlZCBlbmdp bmUgbWFzayA9ICVsbHgiLCB2YWwpOwo+IC0KPiAtCXdhaXRfb25fYml0KCZpOTE1LT5ncHVfZXJy b3IuZmxhZ3MsCj4gLQkJICAgIEk5MTVfUkVTRVRfSEFORE9GRiwKPiAtCQkgICAgVEFTS19VTklO VEVSUlVQVElCTEUpOwo+IC0KPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IEBAIC00MDY2LDEzICs0 MDQ3LDggQEAgaTkxNV9kcm9wX2NhY2hlc19zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKPiAgCQlt dXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAJfQo+ICAKPiAtCWlmICh2 YWwgJiBEUk9QX1JFU0VUX0FDVElWRSAmJgo+IC0JICAgIGk5MTVfdGVybWluYWxseV93ZWRnZWQo Jmk5MTUtPmdwdV9lcnJvcikpIHsKPiArCWlmICh2YWwgJiBEUk9QX1JFU0VUX0FDVElWRSAmJiBp OTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKCZpOTE1LT5ncHVfZXJyb3IpKQo+ICAJCWk5MTVfaGFuZGxl X2Vycm9yKGk5MTUsIEFMTF9FTkdJTkVTLCAwLCBOVUxMKTsKPiAtCQl3YWl0X29uX2JpdCgmaTkx NS0+Z3B1X2Vycm9yLmZsYWdzLAo+IC0JCQkgICAgSTkxNV9SRVNFVF9IQU5ET0ZGLAo+IC0JCQkg ICAgVEFTS19VTklOVEVSUlVQVElCTEUpOwo+IC0JfQo+ICAKPiAgCWZzX3JlY2xhaW1fYWNxdWly ZShHRlBfS0VSTkVMKTsKPiAgCWlmICh2YWwgJiBEUk9QX0JPVU5EKQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaAo+IGluZGV4IDAzZGIwMTFjYWE4ZS4uNTlhN2U5MDExM2Q3IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCj4gQEAgLTMwMDEsMTEgKzMwMDEsNiBAQCBzdGF0aWMgaW5saW5lIGJv b2wgaTkxNV9yZXNldF9iYWNrb2ZmKHN0cnVjdCBpOTE1X2dwdV9lcnJvciAqZXJyb3IpCj4gIAly ZXR1cm4gdW5saWtlbHkodGVzdF9iaXQoSTkxNV9SRVNFVF9CQUNLT0ZGLCAmZXJyb3ItPmZsYWdz KSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X3Jlc2V0X2hhbmRvZmYoc3Ry dWN0IGk5MTVfZ3B1X2Vycm9yICplcnJvcikKPiAtewo+IC0JcmV0dXJuIHVubGlrZWx5KHRlc3Rf Yml0KEk5MTVfUkVTRVRfSEFORE9GRiwgJmVycm9yLT5mbGFncykpOwo+IC19Cj4gLQo+ICBzdGF0 aWMgaW5saW5lIGJvb2wgaTkxNV90ZXJtaW5hbGx5X3dlZGdlZChzdHJ1Y3QgaTkxNV9ncHVfZXJy b3IgKmVycm9yKQo+ICB7Cj4gIAlyZXR1cm4gdW5saWtlbHkodGVzdF9iaXQoSTkxNV9XRURHRUQs ICZlcnJvci0+ZmxhZ3MpKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBpbmRleCBiMzU5Mzkw YmEyMmMuLmQyMGI0MjM4NmMzYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IEBAIC02 NTcsMTEgKzY1Nyw2IEBAIGk5MTVfZ2VtX29iamVjdF93YWl0KHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCj4gIAkJICAgICBzdHJ1Y3QgaW50ZWxfcnBzX2NsaWVudCAqcnBzX2NsaWVu dCkKPiAgewo+ICAJbWlnaHRfc2xlZXAoKTsKPiAtI2lmIElTX0VOQUJMRUQoQ09ORklHX0xPQ0tE RVApCj4gLQlHRU1fQlVHX09OKGRlYnVnX2xvY2tzICYmCj4gLQkJICAgISFsb2NrZGVwX2lzX2hl bGQoJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCkgIT0KPiAtCQkgICAhIShmbGFncyAmIEk5 MTVfV0FJVF9MT0NLRUQpKTsKPiAtI2VuZGlmCj4gIAlHRU1fQlVHX09OKHRpbWVvdXQgPCAwKTsK PiAgCj4gIAl0aW1lb3V0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVzZXJ2YXRpb24ob2JqLT5y ZXN2LAo+IEBAIC00NDkzLDggKzQ0ODgsNiBAQCB2b2lkIGk5MTVfZ2VtX3Nhbml0aXplKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAKPiAgCUdFTV9UUkFDRSgiXG4iKTsKPiAgCj4g LQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCj4gIAl3YWtlcmVmID0g aW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7Cj4gIAlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dl dChpOTE1LCBGT1JDRVdBS0VfQUxMKTsKPiAgCj4gQEAgLTQ1MjAsNiArNDUxMyw3IEBAIHZvaWQg aTkxNV9nZW1fc2FuaXRpemUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIAlpbnRl bF91bmNvcmVfZm9yY2V3YWtlX3B1dChpOTE1LCBGT1JDRVdBS0VfQUxMKTsKPiAgCWludGVsX3J1 bnRpbWVfcG1fcHV0KGk5MTUsIHdha2VyZWYpOwo+Cgp1bnNldF93ZWRnZWQgbG9va3Mgb2ssIEkg c2hvdWxkIGhhdmUgZmFpdGgKYXMgSSByZXZpZXdlZCB0aGUgcGF0Y2guIEluIHJldHJvc3BlY3QK UkVBRF9PTkNFIG9uIGd0LnNjcmF0Y2ggbWlnaHQgaGF2ZSBiZWVuCmdvb2QgYXQgcmlzaW5nIHN1 c3BpY2lvbiwgZXZlbiB0aG8Kc3VwZXJmbHVvdXMuCgpMb29rcyBsaWtlIHRoYXQgZW5naW5lcyB3 ZSBhcmUgc2F2ZWQgYnkgdGhlCnRpbWVsaW5lIGxvY2suIEFuZHcgd2UgaGF2ZSBsYXllZCBzb21l IEdFTV9CVUdfT04gbWluZXMKdGhlcmUgc28gd2Ugd2lsbCBoZWFyIHRoZSBleHBsb3Npb25zIGlm IGFueS4KCj4gKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgCWk5MTVf Z2VtX2NvbnRleHRzX2xvc3QoaTkxNSk7Cj4gIAltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+ICB9Cj4gQEAgLTQ1MzQsNiArNDUyOCw4IEBAIGludCBpOTE1X2dlbV9zdXNw ZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAJd2FrZXJlZiA9IGludGVsX3J1 bnRpbWVfcG1fZ2V0KGk5MTUpOwo+ICAJaW50ZWxfc3VzcGVuZF9ndF9wb3dlcnNhdmUoaTkxNSk7 Cj4gIAo+ICsJZmx1c2hfd29ya3F1ZXVlKGk5MTUtPndxKTsKCkkgZG9uJ3Qga25vdyB3aGF0IGlz IGhhcHBlbmluZyBoZXJlLiBXaHkKZG9uJ3Qgd2UgbmVlZCB0aGUgaTkxNV9nZW1fZHJhaW5fd29y a3F1ZXVlIGluIGhlcmU/Cgo+ICsKPiAgCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0 ZXgpOwo+ICAKPiAgCS8qCj4gQEAgLTQ1NjMsMTEgKzQ1NTksOSBAQCBpbnQgaTkxNV9nZW1fc3Vz cGVuZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgCWk5MTVfcmV0aXJlX3JlcXVl c3RzKGk5MTUpOyAvKiBlbnN1cmUgd2UgZmx1c2ggYWZ0ZXIgd2VkZ2luZyAqLwo+ICAKPiAgCW11 dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlpOTE1X3Jlc2V0X2ZsdXNo KGk5MTUpOwo+ICAKPiAtCWludGVsX3VjX3N1c3BlbmQoaTkxNSk7Cj4gLQo+IC0JY2FuY2VsX2Rl bGF5ZWRfd29ya19zeW5jKCZpOTE1LT5ncHVfZXJyb3IuaGFuZ2NoZWNrX3dvcmspOwo+IC0JY2Fu Y2VsX2RlbGF5ZWRfd29ya19zeW5jKCZpOTE1LT5ndC5yZXRpcmVfd29yayk7Cj4gKwlkcmFpbl9k ZWxheWVkX3dvcmsoJmk5MTUtPmd0LnJldGlyZV93b3JrKTsKCkhhbmdjaGVjayBpcyBpbnNpZGUg cmVzZXQgZmx1c2ggYnV0IHdoeSB0aGUgY2hhbmdlCmZvciByZXRpcmU/Cgo+ICAKPiAgCS8qCj4g IAkgKiBBcyB0aGUgaWRsZV93b3JrIGlzIHJlYXJtaW5nIGlmIGl0IGRldGVjdHMgYSByYWNlLCBw bGF5IHNhZmUgYW5kCj4gQEAgLTQ1NzUsNiArNDU2OSw4IEBAIGludCBpOTE1X2dlbV9zdXNwZW5k KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAJICovCj4gIAlkcmFpbl9kZWxheWVk X3dvcmsoJmk5MTUtPmd0LmlkbGVfd29yayk7Cj4gIAo+ICsJaW50ZWxfdWNfc3VzcGVuZChpOTE1 KTsKPiArCj4gIAkvKgo+ICAJICogQXNzZXJ0IHRoYXQgd2Ugc3VjY2Vzc2Z1bGx5IGZsdXNoZWQg YWxsIHRoZSB3b3JrIGFuZAo+ICAJICogcmVzZXQgdGhlIEdQVSBiYWNrIHRvIGl0cyBpZGxlLCBs b3cgcG93ZXIgc3RhdGUuCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2ZlbmNlX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZmVuY2VfcmVn LmgKPiBpbmRleCA5OWEzMWRlZDRkZmQuLjA5ZGNhZjE0MTIxYiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9mZW5jZV9yZWcuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2ZlbmNlX3JlZy5oCj4gQEAgLTUwLDQgKzUwLDMgQEAgc3RydWN0 IGRybV9pOTE1X2ZlbmNlX3JlZyB7Cj4gIH07Cj4gIAo+ICAjZW5kaWYKPiAtCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiBpbmRleCA5MjI5YjAzZDYyOWIuLmEwMDM5ZWE5N2NkYyAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gQEAgLTM5LDYgKzM5LDcgQEAK PiAgI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KPiAgCj4gICNpbmNsdWRlICJpOTE1X3JlcXVl c3QuaCIKPiArI2luY2x1ZGUgImk5MTVfcmVzZXQuaCIKPiAgI2luY2x1ZGUgImk5MTVfc2VsZnRl c3QuaCIKPiAgI2luY2x1ZGUgImk5MTVfdGltZWxpbmUuaCIKPiAgCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dwdV9lcnJvci5jCj4gaW5kZXggMWY4ZTgwZTMxYjQ5Li40ZWVmMDQ2MjQ4OWMgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiBAQCAtNTMzLDEwICs1MzMs NyBAQCBzdGF0aWMgdm9pZCBlcnJvcl9wcmludF9lbmdpbmUoc3RydWN0IGRybV9pOTE1X2Vycm9y X3N0YXRlX2J1ZiAqbSwKPiAgCWVycl9wcmludGYobSwgIiAgd2FpdGluZzogJXNcbiIsIHllc25v KGVlLT53YWl0aW5nKSk7Cj4gIAllcnJfcHJpbnRmKG0sICIgIHJpbmctPmhlYWQ6IDB4JTA4eFxu IiwgZWUtPmNwdV9yaW5nX2hlYWQpOwo+ICAJZXJyX3ByaW50ZihtLCAiICByaW5nLT50YWlsOiAw eCUwOHhcbiIsIGVlLT5jcHVfcmluZ190YWlsKTsKPiAtCWVycl9wcmludGYobSwgIiAgaGFuZ2No ZWNrIHN0YWxsOiAlc1xuIiwgeWVzbm8oZWUtPmhhbmdjaGVja19zdGFsbGVkKSk7Cj4gLQllcnJf cHJpbnRmKG0sICIgIGhhbmdjaGVjayBhY3Rpb246ICVzXG4iLAo+IC0JCSAgIGhhbmdjaGVja19h Y3Rpb25fdG9fc3RyKGVlLT5oYW5nY2hlY2tfYWN0aW9uKSk7Cj4gLQllcnJfcHJpbnRmKG0sICIg IGhhbmdjaGVjayBhY3Rpb24gdGltZXN0YW1wOiAlZG1zICglbHUlcylcbiIsCj4gKwllcnJfcHJp bnRmKG0sICIgIGhhbmdjaGVjayB0aW1lc3RhbXA6ICVkbXMgKCVsdSVzKVxuIiwKPiAgCQkgICBq aWZmaWVzX3RvX21zZWNzKGVlLT5oYW5nY2hlY2tfdGltZXN0YW1wIC0gZXBvY2gpLAo+ICAJCSAg IGVlLT5oYW5nY2hlY2tfdGltZXN0YW1wLAo+ICAJCSAgIGVlLT5oYW5nY2hlY2tfdGltZXN0YW1w ID09IGVwb2NoID8gIjsgZXBvY2giIDogIiIpOwo+IEBAIC02ODQsMTUgKzY4MSwxNSBAQCBzdGF0 aWMgdm9pZCBfX2Vycl9wcmludF90b19zZ2woc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlX2J1 ZiAqbSwKPiAgCQkgICBqaWZmaWVzX3RvX21zZWNzKGVycm9yLT5jYXB0dXJlIC0gZXJyb3ItPmVw b2NoKSk7Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXJyb3ItPmVuZ2luZSk7 IGkrKykgewo+IC0JCWlmIChlcnJvci0+ZW5naW5lW2ldLmhhbmdjaGVja19zdGFsbGVkICYmCj4g LQkJICAgIGVycm9yLT5lbmdpbmVbaV0uY29udGV4dC5waWQpIHsKPiAtCQkJZXJyX3ByaW50Ziht LCAiQWN0aXZlIHByb2Nlc3MgKG9uIHJpbmcgJXMpOiAlcyBbJWRdLCBzY29yZSAlZCVzXG4iLAo+ IC0JCQkJICAgZW5naW5lX25hbWUobS0+aTkxNSwgaSksCj4gLQkJCQkgICBlcnJvci0+ZW5naW5l W2ldLmNvbnRleHQuY29tbSwKPiAtCQkJCSAgIGVycm9yLT5lbmdpbmVbaV0uY29udGV4dC5waWQs Cj4gLQkJCQkgICBlcnJvci0+ZW5naW5lW2ldLmNvbnRleHQuYmFuX3Njb3JlLAo+IC0JCQkJICAg YmFubmFibGUoJmVycm9yLT5lbmdpbmVbaV0uY29udGV4dCkpOwo+IC0JCX0KPiArCQlpZiAoIWVy cm9yLT5lbmdpbmVbaV0uY29udGV4dC5waWQpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQllcnJf cHJpbnRmKG0sICJBY3RpdmUgcHJvY2VzcyAob24gcmluZyAlcyk6ICVzIFslZF0sIHNjb3JlICVk JXNcbiIsCj4gKwkJCSAgIGVuZ2luZV9uYW1lKG0tPmk5MTUsIGkpLAo+ICsJCQkgICBlcnJvci0+ ZW5naW5lW2ldLmNvbnRleHQuY29tbSwKPiArCQkJICAgZXJyb3ItPmVuZ2luZVtpXS5jb250ZXh0 LnBpZCwKPiArCQkJICAgZXJyb3ItPmVuZ2luZVtpXS5jb250ZXh0LmJhbl9zY29yZSwKPiArCQkJ ICAgYmFubmFibGUoJmVycm9yLT5lbmdpbmVbaV0uY29udGV4dCkpOwo+ICAJfQo+ICAJZXJyX3By aW50ZihtLCAiUmVzZXQgY291bnQ6ICV1XG4iLCBlcnJvci0+cmVzZXRfY291bnQpOwo+ICAJZXJy X3ByaW50ZihtLCAiU3VzcGVuZCBjb3VudDogJXVcbiIsIGVycm9yLT5zdXNwZW5kX2NvdW50KTsK PiBAQCAtMTE0NCw3ICsxMTQxLDggQEAgc3RhdGljIHUzMiBjYXB0dXJlX2Vycm9yX2JvKHN0cnVj dCBkcm1faTkxNV9lcnJvcl9idWZmZXIgKmVyciwKPiAgCXJldHVybiBpOwo+ICB9Cj4gIAo+IC0v KiBHZW5lcmF0ZSBhIHNlbWktdW5pcXVlIGVycm9yIGNvZGUuIFRoZSBjb2RlIGlzIG5vdCBtZWFu dCB0byBoYXZlIG1lYW5pbmcsIFRoZQo+ICsvKgo+ICsgKiBHZW5lcmF0ZSBhIHNlbWktdW5pcXVl IGVycm9yIGNvZGUuIFRoZSBjb2RlIGlzIG5vdCBtZWFudCB0byBoYXZlIG1lYW5pbmcsIFRoZQo+ ICAgKiBjb2RlJ3Mgb25seSBwdXJwb3NlIGlzIHRvIHRyeSB0byBwcmV2ZW50IGZhbHNlIGR1cGxp Y2F0ZWQgYnVnIHJlcG9ydHMgYnkKPiAgICogZ3Jvc3NseSBlc3RpbWF0aW5nIGEgR1BVIGVycm9y IHN0YXRlLgo+ICAgKgo+IEBAIC0xMTUzLDI5ICsxMTUxLDIzIEBAIHN0YXRpYyB1MzIgY2FwdHVy ZV9lcnJvcl9ibyhzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfYnVmZmVyICplcnIsCj4gICAqCj4gICAq IEl0J3Mgb25seSBhIHNtYWxsIHN0ZXAgYmV0dGVyIHRoYW4gYSByYW5kb20gbnVtYmVyIGluIGl0 cyBjdXJyZW50IGZvcm0uCj4gICAqLwo+IC1zdGF0aWMgdTMyIGk5MTVfZXJyb3JfZ2VuZXJhdGVf Y29kZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkgICAgc3RydWN0 IGk5MTVfZ3B1X3N0YXRlICplcnJvciwKPiAtCQkJCSAgICBpbnQgKmVuZ2luZV9pZCkKPiArc3Rh dGljIHUzMiBpOTE1X2Vycm9yX2dlbmVyYXRlX2NvZGUoc3RydWN0IGk5MTVfZ3B1X3N0YXRlICpl cnJvciwKPiArCQkJCSAgICB1bnNpZ25lZCBsb25nIGVuZ2luZV9tYXNrKQo+ICB7Cj4gLQl1MzIg ZXJyb3JfY29kZSA9IDA7Cj4gLQlpbnQgaTsKPiAtCj4gLQkvKiBJUEVIUiB3b3VsZCBiZSBhbiBp ZGVhbCB3YXkgdG8gZGV0ZWN0IGVycm9ycywgYXMgaXQncyB0aGUgZ3Jvc3MKPiArCS8qCj4gKwkg KiBJUEVIUiB3b3VsZCBiZSBhbiBpZGVhbCB3YXkgdG8gZGV0ZWN0IGVycm9ycywgYXMgaXQncyB0 aGUgZ3Jvc3MKPiAgCSAqIG1lYXN1cmUgb2YgInRoZSBjb21tYW5kIHRoYXQgaHVuZy4iIEhvd2V2 ZXIsIGhhcyBzb21lIHZlcnkgY29tbW9uCj4gIAkgKiBzeW5jaHJvbml6YXRpb24gY29tbWFuZHMg d2hpY2ggYWxtb3N0IGFsd2F5cyBhcHBlYXIgaW4gdGhlIGNhc2UKPiAgCSAqIHN0cmljdGx5IGEg Y2xpZW50IGJ1Zy4gVXNlIGluc3Rkb25lIHRvIGRpZmZlcmVudGlhdGUgdGhvc2Ugc29tZS4KPiAg CSAqLwo+IC0JZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX0VOR0lORVM7IGkrKykgewo+IC0JCWlm IChlcnJvci0+ZW5naW5lW2ldLmhhbmdjaGVja19zdGFsbGVkKSB7Cj4gLQkJCWlmIChlbmdpbmVf aWQpCj4gLQkJCQkqZW5naW5lX2lkID0gaTsKPiArCWlmIChlbmdpbmVfbWFzaykgewo+ICsJCXN0 cnVjdCBkcm1faTkxNV9lcnJvcl9lbmdpbmUgKmVlID0KPiArCQkJJmVycm9yLT5lbmdpbmVbZmZz KGVuZ2luZV9tYXNrKV07Cj4gIAo+IC0JCQlyZXR1cm4gZXJyb3ItPmVuZ2luZVtpXS5pcGVociBe Cj4gLQkJCSAgICAgICBlcnJvci0+ZW5naW5lW2ldLmluc3Rkb25lLmluc3Rkb25lOwo+IC0JCX0K PiArCQlyZXR1cm4gZWUtPmlwZWhyIF4gZWUtPmluc3Rkb25lLmluc3Rkb25lOwo+ICAJfQo+ICAK PiAtCXJldHVybiBlcnJvcl9jb2RlOwo+ICsJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2 b2lkIGdlbV9yZWNvcmRfZmVuY2VzKHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSAqZXJyb3IpCj4gQEAg LTEzMzgsOSArMTMzMCw4IEBAIHN0YXRpYyB2b2lkIGVycm9yX3JlY29yZF9lbmdpbmVfcmVnaXN0 ZXJzKHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSAqZXJyb3IsCj4gIAl9Cj4gIAo+ICAJZWUtPmlkbGUg PSBpbnRlbF9lbmdpbmVfaXNfaWRsZShlbmdpbmUpOwo+IC0JZWUtPmhhbmdjaGVja190aW1lc3Rh bXAgPSBlbmdpbmUtPmhhbmdjaGVjay5hY3Rpb25fdGltZXN0YW1wOwo+IC0JZWUtPmhhbmdjaGVj a19hY3Rpb24gPSBlbmdpbmUtPmhhbmdjaGVjay5hY3Rpb247Cj4gLQllZS0+aGFuZ2NoZWNrX3N0 YWxsZWQgPSBlbmdpbmUtPmhhbmdjaGVjay5zdGFsbGVkOwo+ICsJaWYgKCFlZS0+aWRsZSkKPiAr CQllZS0+aGFuZ2NoZWNrX3RpbWVzdGFtcCA9IGVuZ2luZS0+aGFuZ2NoZWNrLmFjdGlvbl90aW1l c3RhbXA7Cj4gIAllZS0+cmVzZXRfY291bnQgPSBpOTE1X3Jlc2V0X2VuZ2luZV9jb3VudCgmZGV2 X3ByaXYtPmdwdV9lcnJvciwKPiAgCQkJCQkJICBlbmdpbmUpOwo+ICAKPiBAQCAtMTc4MywzMSAr MTc3NCwzNSBAQCBzdGF0aWMgdm9pZCBjYXB0dXJlX3JlZ19zdGF0ZShzdHJ1Y3QgaTkxNV9ncHVf c3RhdGUgKmVycm9yKQo+ICAJZXJyb3ItPnBndGJsX2VyID0gSTkxNV9SRUFEKFBHVEJMX0VSKTsK PiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgaTkxNV9lcnJvcl9jYXB0dXJlX21zZyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkgICBzdHJ1Y3QgaTkxNV9ncHVfc3RhdGUg KmVycm9yLAo+IC0JCQkJICAgdTMyIGVuZ2luZV9tYXNrLAo+IC0JCQkJICAgY29uc3QgY2hhciAq ZXJyb3JfbXNnKQo+ICtzdGF0aWMgY29uc3QgY2hhciAqCj4gK2Vycm9yX21zZyhzdHJ1Y3QgaTkx NV9ncHVfc3RhdGUgKmVycm9yLCB1bnNpZ25lZCBsb25nIGVuZ2luZXMsIGNvbnN0IGNoYXIgKm1z ZykKPiAgewo+IC0JdTMyIGVjb2RlOwo+IC0JaW50IGVuZ2luZV9pZCA9IC0xLCBsZW47Cj4gKwlp bnQgbGVuOwo+ICsJaW50IGk7Cj4gIAo+IC0JZWNvZGUgPSBpOTE1X2Vycm9yX2dlbmVyYXRlX2Nv ZGUoZGV2X3ByaXYsIGVycm9yLCAmZW5naW5lX2lkKTsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGVycm9yLT5lbmdpbmUpOyBpKyspCj4gKwkJaWYgKCFlcnJvci0+ZW5naW5lW2ldLmNv bnRleHQucGlkKQo+ICsJCQllbmdpbmVzICY9IH5CSVQoaSk7CgpObyBtb3JlIGdyb3VwaW5nIGZv ciBkcml2ZXIgaW50ZXJuYWwgaGFuZ3MuLi4/Cgo+ICAKPiAgCWxlbiA9IHNjbnByaW50ZihlcnJv ci0+ZXJyb3JfbXNnLCBzaXplb2YoZXJyb3ItPmVycm9yX21zZyksCj4gLQkJCSJHUFUgSEFORzog ZWNvZGUgJWQ6JWQ6MHglMDh4IiwKPiAtCQkJSU5URUxfR0VOKGRldl9wcml2KSwgZW5naW5lX2lk LCBlY29kZSk7Cj4gLQo+IC0JaWYgKGVuZ2luZV9pZCAhPSAtMSAmJiBlcnJvci0+ZW5naW5lW2Vu Z2luZV9pZF0uY29udGV4dC5waWQpCj4gKwkJCSJHUFUgSEFORzogZWNvZGUgJWQ6JWx4OjB4JTA4 eCIsCj4gKwkJCUlOVEVMX0dFTihlcnJvci0+aTkxNSksIGVuZ2luZXMsCj4gKwkJCWk5MTVfZXJy b3JfZ2VuZXJhdGVfY29kZShlcnJvciwgZW5naW5lcykpOwo+ICsJaWYgKGVuZ2luZXMpIHsKPiAr CQkvKiBKdXN0IHNob3cgdGhlIGZpcnN0IGV4ZWN1dGluZyBwcm9jZXNzLCBtb3JlIGlzIGNvbmZ1 c2luZyAqLwo+ICsJCWkgPSBmZnMoZW5naW5lcyk7Cgp0aGVuIHdoeSBub3QganVzdCBtYWtlIHRo ZSBlY29kZSBhY2NlcHRpbmcgc2luZ2xlIGVuZ2luZSBhbmQgbW92ZSBpdCBoZXJlLgoKPiAgCQls ZW4gKz0gc2NucHJpbnRmKGVycm9yLT5lcnJvcl9tc2cgKyBsZW4sCj4gIAkJCQkgc2l6ZW9mKGVy cm9yLT5lcnJvcl9tc2cpIC0gbGVuLAo+ICAJCQkJICIsIGluICVzIFslZF0iLAo+IC0JCQkJIGVy cm9yLT5lbmdpbmVbZW5naW5lX2lkXS5jb250ZXh0LmNvbW0sCj4gLQkJCQkgZXJyb3ItPmVuZ2lu ZVtlbmdpbmVfaWRdLmNvbnRleHQucGlkKTsKPiArCQkJCSBlcnJvci0+ZW5naW5lW2ldLmNvbnRl eHQuY29tbSwKPiArCQkJCSBlcnJvci0+ZW5naW5lW2ldLmNvbnRleHQucGlkKTsKPiArCX0KPiAr CWlmIChtc2cpCj4gKwkJbGVuICs9IHNjbnByaW50ZihlcnJvci0+ZXJyb3JfbXNnICsgbGVuLAo+ ICsJCQkJIHNpemVvZihlcnJvci0+ZXJyb3JfbXNnKSAtIGxlbiwKPiArCQkJCSAiLCAlcyIsIG1z Zyk7Cj4gIAo+IC0Jc2NucHJpbnRmKGVycm9yLT5lcnJvcl9tc2cgKyBsZW4sIHNpemVvZihlcnJv ci0+ZXJyb3JfbXNnKSAtIGxlbiwKPiAtCQkgICIsIHJlYXNvbjogJXMsIGFjdGlvbjogJXMiLAo+ IC0JCSAgZXJyb3JfbXNnLAo+IC0JCSAgZW5naW5lX21hc2sgPyAicmVzZXQiIDogImNvbnRpbnVl Iik7Cj4gKwlyZXR1cm4gZXJyb3ItPmVycm9yX21zZzsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQg Y2FwdHVyZV9nZW5fc3RhdGUoc3RydWN0IGk5MTVfZ3B1X3N0YXRlICplcnJvcikKPiBAQCAtMTg0 Nyw3ICsxODQyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FwdHVyZV9maW5kX2Vwb2NoKGNv bnN0IHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSAqZXJyb3IpCj4gIAlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShlcnJvci0+ZW5naW5lKTsgaSsrKSB7Cj4gIAkJY29uc3Qgc3RydWN0IGRybV9pOTE1 X2Vycm9yX2VuZ2luZSAqZWUgPSAmZXJyb3ItPmVuZ2luZVtpXTsKPiAgCj4gLQkJaWYgKGVlLT5o YW5nY2hlY2tfc3RhbGxlZCAmJgo+ICsJCWlmIChlZS0+aGFuZ2NoZWNrX3RpbWVzdGFtcCAmJgo+ ICAJCSAgICB0aW1lX2JlZm9yZShlZS0+aGFuZ2NoZWNrX3RpbWVzdGFtcCwgZXBvY2gpKQo+ICAJ CQllcG9jaCA9IGVlLT5oYW5nY2hlY2tfdGltZXN0YW1wOwo+ICAJfQo+IEBAIC0xOTIxLDcgKzE5 MTYsNyBAQCBpOTE1X2NhcHR1cmVfZ3B1X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KQo+ICAgKiBpOTE1X2NhcHR1cmVfZXJyb3Jfc3RhdGUgLSBjYXB0dXJlIGFuIGVycm9yIHJl Y29yZCBmb3IgbGF0ZXIgYW5hbHlzaXMKPiAgICogQGk5MTU6IGk5MTUgZGV2aWNlCj4gICAqIEBl bmdpbmVfbWFzazogdGhlIG1hc2sgb2YgZW5naW5lcyB0cmlnZ2VyaW5nIHRoZSBoYW5nCj4gLSAq IEBlcnJvcl9tc2c6IGEgbWVzc2FnZSB0byBpbnNlcnQgaW50byB0aGUgZXJyb3IgY2FwdHVyZSBo ZWFkZXIKPiArICogQG1zZzogYSBtZXNzYWdlIHRvIGluc2VydCBpbnRvIHRoZSBlcnJvciBjYXB0 dXJlIGhlYWRlcgo+ICAgKgo+ICAgKiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gYW4gZXJyb3IgaXMg ZGV0ZWN0ZWQgKGVpdGhlciBhIGhhbmcgb3IgYW4gZXJyb3IKPiAgICogaW50ZXJydXB0KSB0byBj YXB0dXJlIGVycm9yIHN0YXRlIGZyb20gdGhlIHRpbWUgb2YgdGhlIGVycm9yLiAgRmlsbHMKPiBA QCAtMTkyOSw4ICsxOTI0LDggQEAgaTkxNV9jYXB0dXJlX2dwdV9zdGF0ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSkKPiAgICogdG8gcGljayB1cC4KPiAgICovCj4gIHZvaWQgaTkxNV9j YXB0dXJlX2Vycm9yX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+IC0JCQkg ICAgICB1MzIgZW5naW5lX21hc2ssCj4gLQkJCSAgICAgIGNvbnN0IGNoYXIgKmVycm9yX21zZykK PiArCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmdpbmVfbWFzaywKPiArCQkJICAgICAgY29uc3Qg Y2hhciAqbXNnKQo+ICB7Cj4gIAlzdGF0aWMgYm9vbCB3YXJuZWQ7Cj4gIAlzdHJ1Y3QgaTkxNV9n cHVfc3RhdGUgKmVycm9yOwo+IEBAIC0xOTQ2LDggKzE5NDEsNyBAQCB2b2lkIGk5MTVfY2FwdHVy ZV9lcnJvcl9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgCWlmIChJU19F UlIoZXJyb3IpKQo+ICAJCXJldHVybjsKPiAgCj4gLQlpOTE1X2Vycm9yX2NhcHR1cmVfbXNnKGk5 MTUsIGVycm9yLCBlbmdpbmVfbWFzaywgZXJyb3JfbXNnKTsKPiAtCURSTV9JTkZPKCIlc1xuIiwg ZXJyb3ItPmVycm9yX21zZyk7Cj4gKwlkZXZfaW5mbyhpOTE1LT5kcm0uZGV2LCAiJXNcbiIsIGVy cm9yX21zZyhlcnJvciwgZW5naW5lX21hc2ssIG1zZykpOwo+ICAKPiAgCWlmICghZXJyb3ItPnNp bXVsYXRlZCkgewo+ICAJCXNwaW5fbG9ja19pcnFzYXZlKCZpOTE1LT5ncHVfZXJyb3IubG9jaywg ZmxhZ3MpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJv ci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaAo+IGluZGV4IDYwNDI5 MWY3NzYyZC4uMjMxMTczNzg2ZWFlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ3B1X2Vycm9yLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9l cnJvci5oCj4gQEAgLTg1LDggKzg1LDYgQEAgc3RydWN0IGk5MTVfZ3B1X3N0YXRlIHsKPiAgCQli b29sIHdhaXRpbmc7Cj4gIAkJaW50IG51bV93YWl0ZXJzOwo+ICAJCXVuc2lnbmVkIGxvbmcgaGFu Z2NoZWNrX3RpbWVzdGFtcDsKPiAtCQlib29sIGhhbmdjaGVja19zdGFsbGVkOwo+IC0JCWVudW0g aW50ZWxfZW5naW5lX2hhbmdjaGVja19hY3Rpb24gaGFuZ2NoZWNrX2FjdGlvbjsKPiAgCQlzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bTsKPiAgCQlpbnQgbnVtX3JlcXVlc3RzOwo+ICAJCXUz MiByZXNldF9jb3VudDsKPiBAQCAtMTk3LDYgKzE5NSw4IEBAIHN0cnVjdCBpOTE1X2dwdV9zdGF0 ZSB7Cj4gIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgKmZpdDsKPiAgfTsKPiAgCj4gK3N0cnVj dCBpOTE1X2dwdV9yZXN0YXJ0Owo+ICsKPiAgc3RydWN0IGk5MTVfZ3B1X2Vycm9yIHsKPiAgCS8q IEZvciBoYW5nY2hlY2sgdGltZXIgKi8KPiAgI2RlZmluZSBEUk1fSTkxNV9IQU5HQ0hFQ0tfUEVS SU9EIDE1MDAgLyogaW4gbXMgKi8KPiBAQCAtMjQ3LDE1ICsyNDcsNiBAQCBzdHJ1Y3QgaTkxNV9n cHVfZXJyb3Igewo+ICAJICogaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoKT8pLiBJOTE1 X1JFU0VUX0JBQ0tPRkYgc2VydmVzIGEKPiAgCSAqIHNlY29uZGFyeSByb2xlIGluIHByZXZlbnRp bmcgdHdvIGNvbmN1cnJlbnQgZ2xvYmFsIHJlc2V0IGF0dGVtcHRzLgo+ICAJICoKPiAtCSAqICNJ OTE1X1JFU0VUX0hBTkRPRkYgLSBUbyBwZXJmb3JtIHRoZSBhY3R1YWwgR1BVIHJlc2V0LCB3ZSBu ZWVkIHRoZQo+IC0JICogc3RydWN0X211dGV4LiBXZSB0cnkgdG8gYWNxdWlyZSB0aGUgc3RydWN0 X211dGV4IGluIHRoZSByZXNldCB3b3JrZXIsCj4gLQkgKiBidXQgaXQgbWF5IGJlIGhlbGQgYnkg c29tZSBsb25nIHJ1bm5pbmcgd2FpdGVyICh0aGF0IHdlIGNhbm5vdAo+IC0JICogaW50ZXJydXB0 IHdpdGhvdXQgY2F1c2luZyB0cm91YmxlKS4gT25jZSB3ZSBhcmUgcmVhZHkgdG8gZG8gdGhlIEdQ VQo+IC0JICogcmVzZXQsIHdlIHNldCB0aGUgSTkxNV9SRVNFVF9IQU5ET0ZGIGJpdCBhbmQgd2Fr ZXVwIGFueSB3YWl0ZXJzLiBJZgo+IC0JICogdGhleSBhbHJlYWR5IGhvbGQgdGhlIHN0cnVjdF9t dXRleCBhbmQgd2FudCB0byBwYXJ0aWNpcGF0ZSB0aGV5IGNhbgo+IC0JICogaW5zcGVjdCB0aGUg Yml0IGFuZCBkbyB0aGUgcmVzZXQgZGlyZWN0bHksIG90aGVyd2lzZSB0aGUgd29ya2VyCj4gLQkg KiB3YWl0cyBmb3IgdGhlIHN0cnVjdF9tdXRleC4KPiAtCSAqCj4gIAkgKiAjSTkxNV9SRVNFVF9F TkdJTkVbbnVtX2VuZ2luZXNdIC0gU2luY2UgdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQgdG8KPiAg CSAqIGFjcXVpcmUgdGhlIHN0cnVjdF9tdXRleCB0byByZXNldCBhbiBlbmdpbmUsIHdlIG5lZWQg YW4gZXhwbGljaXQKPiAgCSAqIGZsYWcgdG8gcHJldmVudCB0d28gY29uY3VycmVudCByZXNldCBh dHRlbXB0cyBpbiB0aGUgc2FtZSBlbmdpbmUuCj4gQEAgLTI2OSwyMCArMjYwLDEzIEBAIHN0cnVj dCBpOTE1X2dwdV9lcnJvciB7Cj4gIAkgKi8KPiAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gICNk ZWZpbmUgSTkxNV9SRVNFVF9CQUNLT0ZGCTAKPiAtI2RlZmluZSBJOTE1X1JFU0VUX0hBTkRPRkYJ MQo+IC0jZGVmaW5lIEk5MTVfUkVTRVRfTU9ERVNFVAkyCj4gLSNkZWZpbmUgSTkxNV9SRVNFVF9F TkdJTkUJMwo+ICsjZGVmaW5lIEk5MTVfUkVTRVRfTU9ERVNFVAkxCj4gKyNkZWZpbmUgSTkxNV9S RVNFVF9FTkdJTkUJMgo+ICAjZGVmaW5lIEk5MTVfV0VER0VECQkoQklUU19QRVJfTE9ORyAtIDEp Cj4gIAo+ICAJLyoqIE51bWJlciBvZiB0aW1lcyBhbiBlbmdpbmUgaGFzIGJlZW4gcmVzZXQgKi8K PiAgCXUzMiByZXNldF9lbmdpbmVfY291bnRbSTkxNV9OVU1fRU5HSU5FU107Cj4gIAo+IC0JLyoq IFNldCBvZiBzdGFsbGVkIGVuZ2luZXMgd2l0aCBndWlsdHkgcmVxdWVzdHMsIGluIHRoZSBjdXJy ZW50IHJlc2V0ICovCj4gLQl1MzIgc3RhbGxlZF9tYXNrOwo+IC0KPiAtCS8qKiBSZWFzb24gZm9y IHRoZSBjdXJyZW50ICpnbG9iYWwqIHJlc2V0ICovCj4gLQljb25zdCBjaGFyICpyZWFzb247Cj4g LQo+ICAJc3RydWN0IG11dGV4IHdlZGdlX211dGV4OyAvKiBzZXJpYWxpc2VzIHdlZGdpbmcvdW53 ZWRnaW5nICovCj4gIAo+ICAJLyoqCj4gQEAgLTI5OSw2ICsyODMsOCBAQCBzdHJ1Y3QgaTkxNV9n cHVfZXJyb3Igewo+ICAKPiAgCS8qIEZvciBtaXNzZWQgaXJxL3NlcW5vIHNpbXVsYXRpb24uICov Cj4gIAl1bnNpZ25lZCBsb25nIHRlc3RfaXJxX3JpbmdzOwo+ICsKPiArCXN0cnVjdCBpOTE1X2dw dV9yZXN0YXJ0ICpyZXN0YXJ0Owo+ICB9Owo+ICAKPiAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0 YXRlX2J1ZiB7Cj4gQEAgLTMyMCw3ICszMDYsNyBAQCB2b2lkIGk5MTVfZXJyb3JfcHJpbnRmKHN0 cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYgKmUsIGNvbnN0IGNoYXIgKmYsIC4uLik7Cj4g IAo+ICBzdHJ1Y3QgaTkxNV9ncHVfc3RhdGUgKmk5MTVfY2FwdHVyZV9ncHVfc3RhdGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+ICB2b2lkIGk5MTVfY2FwdHVyZV9lcnJvcl9zdGF0 ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCSAgICAgIHUzMiBlbmdp bmVfbWFzaywKPiArCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmdpbmVfbWFzaywKPiAgCQkJICAg ICAgY29uc3QgY2hhciAqZXJyb3JfbXNnKTsKPiAgCj4gIHN0YXRpYyBpbmxpbmUgc3RydWN0IGk5 MTVfZ3B1X3N0YXRlICoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZXF1ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+IGluZGV4IDVl MTc4ZjVhYzE4Yi4uODAyMzJkZThlMmJlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcmVxdWVzdC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1 ZXN0LmMKPiBAQCAtMTA4MywxOCArMTA4Myw2IEBAIHN0YXRpYyBib29sIF9faTkxNV9zcGluX3Jl cXVlc3QoY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gIAlyZXR1cm4gZmFsc2U7Cj4g IH0KPiAgCj4gLXN0YXRpYyBib29sIF9faTkxNV93YWl0X3JlcXVlc3RfY2hlY2tfYW5kX3Jlc2V0 KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCj4gLXsKPiAtCXN0cnVjdCBpOTE1X2dwdV9l cnJvciAqZXJyb3IgPSAmcmVxdWVzdC0+aTkxNS0+Z3B1X2Vycm9yOwo+IC0KPiAtCWlmIChsaWtl bHkoIWk5MTVfcmVzZXRfaGFuZG9mZihlcnJvcikpKQo+IC0JCXJldHVybiBmYWxzZTsKPiAtCj4g LQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Cj4gLQlpOTE1X3Jlc2V0KHJlcXVl c3QtPmk5MTUsIGVycm9yLT5zdGFsbGVkX21hc2ssIGVycm9yLT5yZWFzb24pOwo+IC0JcmV0dXJu IHRydWU7Cj4gLX0KPiAtCj4gIC8qKgo+ICAgKiBpOTE1X3JlcXVlc3Rfd2FpdCAtIHdhaXQgdW50 aWwgZXhlY3V0aW9uIG9mIHJlcXVlc3QgaGFzIGZpbmlzaGVkCj4gICAqIEBycTogdGhlIHJlcXVl c3QgdG8gd2FpdCB1cG9uCj4gQEAgLTExMjAsMTcgKzExMDgsMTAgQEAgbG9uZyBpOTE1X3JlcXVl c3Rfd2FpdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgewo+ICAJY29uc3QgaW50IHN0YXRl ID0gZmxhZ3MgJiBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSA/Cj4gIAkJVEFTS19JTlRFUlJVUFRJ QkxFIDogVEFTS19VTklOVEVSUlVQVElCTEU7Cj4gLQl3YWl0X3F1ZXVlX2hlYWRfdCAqZXJycSA9 ICZycS0+aTkxNS0+Z3B1X2Vycm9yLndhaXRfcXVldWU7Cj4gLQlERUZJTkVfV0FJVF9GVU5DKHJl c2V0LCBkZWZhdWx0X3dha2VfZnVuY3Rpb24pOwo+ICAJREVGSU5FX1dBSVRfRlVOQyhleGVjLCBk ZWZhdWx0X3dha2VfZnVuY3Rpb24pOwo+ICAJc3RydWN0IGludGVsX3dhaXQgd2FpdDsKPiAgCj4g IAltaWdodF9zbGVlcCgpOwo+IC0jaWYgSVNfRU5BQkxFRChDT05GSUdfTE9DS0RFUCkKPiAtCUdF TV9CVUdfT04oZGVidWdfbG9ja3MgJiYKPiAtCQkgICAhIWxvY2tkZXBfaXNfaGVsZCgmcnEtPmk5 MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpICE9Cj4gLQkJICAgISEoZmxhZ3MgJiBJOTE1X1dBSVRfTE9D S0VEKSk7Cj4gLSNlbmRpZgo+ICAJR0VNX0JVR19PTih0aW1lb3V0IDwgMCk7Cj4gIAo+ICAJaWYg KGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQo+IEBAIC0xMTQwLDExICsxMTIxLDcgQEAgbG9u ZyBpOTE1X3JlcXVlc3Rfd2FpdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgCQlyZXR1cm4g LUVUSU1FOwo+ICAKPiAgCXRyYWNlX2k5MTVfcmVxdWVzdF93YWl0X2JlZ2luKHJxLCBmbGFncyk7 Cj4gLQo+ICAJYWRkX3dhaXRfcXVldWUoJnJxLT5leGVjdXRlLCAmZXhlYyk7Cj4gLQlpZiAoZmxh Z3MgJiBJOTE1X1dBSVRfTE9DS0VEKQo+IC0JCWFkZF93YWl0X3F1ZXVlKGVycnEsICZyZXNldCk7 Cj4gLQo+ICAJaW50ZWxfd2FpdF9pbml0KCZ3YWl0KTsKPiAgCWlmIChmbGFncyAmIEk5MTVfV0FJ VF9QUklPUklUWSkKPiAgCQlpOTE1X3NjaGVkdWxlX2J1bXBfcHJpb3JpdHkocnEsIEk5MTVfUFJJ T1JJVFlfV0FJVCk7Cj4gQEAgLTExNTUsMTAgKzExMzIsNiBAQCBsb25nIGk5MTVfcmVxdWVzdF93 YWl0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+ICAJCWlmIChpbnRlbF93YWl0X3VwZGF0ZV9y ZXF1ZXN0KCZ3YWl0LCBycSkpCj4gIAkJCWJyZWFrOwo+ICAKPiAtCQlpZiAoZmxhZ3MgJiBJOTE1 X1dBSVRfTE9DS0VEICYmCj4gLQkJICAgIF9faTkxNV93YWl0X3JlcXVlc3RfY2hlY2tfYW5kX3Jl c2V0KHJxKSkKPiAtCQkJY29udGludWU7Cj4gLQo+ICAJCWlmIChzaWduYWxfcGVuZGluZ19zdGF0 ZShzdGF0ZSwgY3VycmVudCkpIHsKPiAgCQkJdGltZW91dCA9IC1FUkVTVEFSVFNZUzsKPiAgCQkJ Z290byBjb21wbGV0ZTsKPiBAQCAtMTE4OCw5ICsxMTYxLDYgQEAgbG9uZyBpOTE1X3JlcXVlc3Rf d2FpdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgCQkgKi8KPiAgCQlnb3RvIHdha2V1cDsK PiAgCj4gLQlpZiAoZmxhZ3MgJiBJOTE1X1dBSVRfTE9DS0VEKQo+IC0JCV9faTkxNV93YWl0X3Jl cXVlc3RfY2hlY2tfYW5kX3Jlc2V0KHJxKTsKPiAtCj4gIAlmb3IgKDs7KSB7Cj4gIAkJaWYgKHNp Z25hbF9wZW5kaW5nX3N0YXRlKHN0YXRlLCBjdXJyZW50KSkgewo+ICAJCQl0aW1lb3V0ID0gLUVS RVNUQVJUU1lTOwo+IEBAIC0xMjE0LDIxICsxMTg0LDYgQEAgbG9uZyBpOTE1X3JlcXVlc3Rfd2Fp dChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgCQlpZiAoaTkxNV9yZXF1ZXN0X2NvbXBsZXRl ZChycSkpCj4gIAkJCWJyZWFrOwo+ICAKPiAtCQkvKgo+IC0JCSAqIElmIHRoZSBHUFUgaXMgaHVu ZywgYW5kIHdlIGhvbGQgdGhlIGxvY2ssIHJlc2V0IHRoZSBHUFUKPiAtCQkgKiBhbmQgdGhlbiBj aGVjayBmb3IgY29tcGxldGlvbi4gT24gYSBmdWxsIHJlc2V0LCB0aGUgZW5naW5lJ3MKPiAtCQkg KiBIVyBzZXFubyB3aWxsIGJlIGFkdmFuY2VkIHBhc3NlZCB1cyBhbmQgd2UgYXJlIGNvbXBsZXRl Lgo+IC0JCSAqIElmIHdlIGRvIGEgcGFydGlhbCByZXNldCwgd2UgaGF2ZSB0byB3YWl0IGZvciB0 aGUgR1BVIHRvCj4gLQkJICogcmVzdW1lIGFuZCB1cGRhdGUgdGhlIGJyZWFkY3J1bWIuCj4gLQkJ ICoKPiAtCQkgKiBJZiB3ZSBkb24ndCBob2xkIHRoZSBtdXRleCwgd2UgY2FuIGp1c3Qgd2FpdCBm b3IgdGhlIHdvcmtlcgo+IC0JCSAqIHRvIGNvbWUgYWxvbmcgYW5kIHVwZGF0ZSB0aGUgYnJlYWRj cnVtYiAoZWl0aGVyIGRpcmVjdGx5Cj4gLQkJICogaXRzZWxmLCBvciBpbmRpcmVjdGx5IGJ5IHJl Y292ZXJpbmcgdGhlIEdQVSkuCj4gLQkJICovCj4gLQkJaWYgKGZsYWdzICYgSTkxNV9XQUlUX0xP Q0tFRCAmJgo+IC0JCSAgICBfX2k5MTVfd2FpdF9yZXF1ZXN0X2NoZWNrX2FuZF9yZXNldChycSkp Cj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAgCQkvKiBPbmx5IHNwaW4gaWYgd2Uga25vdyB0aGUgR1BV IGlzIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0ICovCj4gIAkJaWYgKF9faTkxNV9zcGluX3JlcXVl c3QocnEsIHdhaXQuc2Vxbm8sIHN0YXRlLCAyKSkKPiAgCQkJYnJlYWs7Cj4gQEAgLTEyNDIsOCAr MTE5Nyw2IEBAIGxvbmcgaTkxNV9yZXF1ZXN0X3dhaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEs Cj4gIAlpbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQocnEtPmVuZ2luZSwgJndhaXQpOwo+ICBjb21w bGV0ZToKPiAgCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKPiAtCWlmIChmbGFn cyAmIEk5MTVfV0FJVF9MT0NLRUQpCj4gLQkJcmVtb3ZlX3dhaXRfcXVldWUoZXJycSwgJnJlc2V0 KTsKPiAgCXJlbW92ZV93YWl0X3F1ZXVlKCZycS0+ZXhlY3V0ZSwgJmV4ZWMpOwo+ICAJdHJhY2Vf aTkxNV9yZXF1ZXN0X3dhaXRfZW5kKHJxKTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVzZXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQu Ywo+IGluZGV4IDI5NjFjMjFkOTQyMC4uMDY0ZmM2ZGExNTEyIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVzZXQuYwo+IEBAIC01LDYgKzUsNyBAQAo+ICAgKi8KPiAgCj4gICNpbmNsdWRlIDxs aW51eC9zY2hlZC9tbS5oPgo+ICsjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+Cj4gIAo+ ICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAgI2luY2x1ZGUgImk5MTVfZ3B1X2Vycm9yLmgiCj4g QEAgLTE3LDIyICsxOCwyMyBAQCBzdGF0aWMgdm9pZCBlbmdpbmVfc2tpcF9jb250ZXh0KHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxKQo+ICAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0g cnEtPmVuZ2luZTsKPiAgCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpodW5nX2N0eCA9IHJxLT5n ZW1fY29udGV4dDsKPiAgCXN0cnVjdCBpOTE1X3RpbWVsaW5lICp0aW1lbGluZSA9IHJxLT50aW1l bGluZTsKPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gIAo+ICsJbG9ja2RlcF9hc3NlcnRfaGVs ZCgmZW5naW5lLT50aW1lbGluZS5sb2NrKTsKPiAgCUdFTV9CVUdfT04odGltZWxpbmUgPT0gJmVu Z2luZS0+dGltZWxpbmUpOwo+ICAKPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUtPnRpbWVs aW5lLmxvY2ssIGZsYWdzKTsKPiAgCXNwaW5fbG9jaygmdGltZWxpbmUtPmxvY2spOwo+ICAKPiAt CWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUocnEsICZlbmdpbmUtPnRpbWVsaW5lLnJlcXVl c3RzLCBsaW5rKQo+IC0JCWlmIChycS0+Z2VtX2NvbnRleHQgPT0gaHVuZ19jdHgpCj4gLQkJCWk5 MTVfcmVxdWVzdF9za2lwKHJxLCAtRUlPKTsKPiArCWlmIChycS0+Z2xvYmFsX3NlcW5vKSB7Cj4g KwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShycSwKPiArCQkJCQkgICAgICZlbmdpbmUt PnRpbWVsaW5lLnJlcXVlc3RzLCBsaW5rKQo+ICsJCQlpZiAocnEtPmdlbV9jb250ZXh0ID09IGh1 bmdfY3R4KQo+ICsJCQkJaTkxNV9yZXF1ZXN0X3NraXAocnEsIC1FSU8pOwo+ICsJfQo+ICAKPiAg CWxpc3RfZm9yX2VhY2hfZW50cnkocnEsICZ0aW1lbGluZS0+cmVxdWVzdHMsIGxpbmspCj4gIAkJ aTkxNV9yZXF1ZXN0X3NraXAocnEsIC1FSU8pOwo+ICAKPiAgCXNwaW5fdW5sb2NrKCZ0aW1lbGlu ZS0+bG9jayk7Cj4gLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPnRpbWVsaW5lLmxv Y2ssIGZsYWdzKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgY2xpZW50X21hcmtfZ3VpbHR5KHN0 cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiwKPiBAQCAtNTksNyArNjEsNyBA QCBzdGF0aWMgdm9pZCBjbGllbnRfbWFya19ndWlsdHkoc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJp dmF0ZSAqZmlsZV9wcml2LAo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBjb250ZXh0X21h cmtfZ3VpbHR5KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gK3N0YXRpYyBib29sIGNv bnRleHRfbWFya19ndWlsdHkoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPiAgewo+ICAJ dW5zaWduZWQgaW50IHNjb3JlOwo+ICAJYm9vbCBiYW5uZWQsIGJhbm5hYmxlOwo+IEBAIC03Miw3 ICs3NCw3IEBAIHN0YXRpYyB2b2lkIGNvbnRleHRfbWFya19ndWlsdHkoc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmN0eCkKPiAgCj4gIAkvKiBDb29sIGNvbnRleHRzIGRvbid0IGFjY3VtdWxhdGUg Y2xpZW50IGJhbiBzY29yZSAqLwo+ICAJaWYgKCFiYW5uYWJsZSkKPiAtCQlyZXR1cm47Cj4gKwkJ cmV0dXJuIGZhbHNlOwo+ICAKPiAgCWlmIChiYW5uZWQpIHsKPiAgCQlEUk1fREVCVUdfRFJJVkVS KCJjb250ZXh0ICVzOiBndWlsdHkgJWQsIHNjb3JlICV1LCBiYW5uZWRcbiIsCj4gQEAgLTgzLDYg Kzg1LDggQEAgc3RhdGljIHZvaWQgY29udGV4dF9tYXJrX2d1aWx0eShzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqY3R4KQo+ICAKPiAgCWlmICghSVNfRVJSX09SX05VTEwoY3R4LT5maWxlX3ByaXYp KQo+ICAJCWNsaWVudF9tYXJrX2d1aWx0eShjdHgtPmZpbGVfcHJpdiwgY3R4KTsKPiArCj4gKwly ZXR1cm4gYmFubmVkOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBjb250ZXh0X21hcmtfaW5ub2Nl bnQoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPiBAQCAtOTAsNiArOTQsMjEgQEAgc3Rh dGljIHZvaWQgY29udGV4dF9tYXJrX2lubm9jZW50KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpj dHgpCj4gIAlhdG9taWNfaW5jKCZjdHgtPmFjdGl2ZV9jb3VudCk7Cj4gIH0KPiAgCj4gK3ZvaWQg aTkxNV9yZXNldF9yZXF1ZXN0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCBib29sIGd1aWx0eSkK PiArewo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcnEtPmVuZ2luZS0+dGltZWxpbmUubG9jayk7 Cj4gKwlHRU1fQlVHX09OKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKTsKPiArCj4gKwlpZiAo Z3VpbHR5KSB7Cj4gKwkJaTkxNV9yZXF1ZXN0X3NraXAocnEsIC1FSU8pOwo+ICsJCWlmIChjb250 ZXh0X21hcmtfZ3VpbHR5KHJxLT5nZW1fY29udGV4dCkpCj4gKwkJCWVuZ2luZV9za2lwX2NvbnRl eHQocnEpOwo+ICsJfSBlbHNlIHsKPiArCQlkbWFfZmVuY2Vfc2V0X2Vycm9yKCZycS0+ZmVuY2Us IC1FQUdBSU4pOwo+ICsJCWNvbnRleHRfbWFya19pbm5vY2VudChycS0+Z2VtX2NvbnRleHQpOwo+ ICsJfQo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZCBnZW4zX3N0b3BfZW5naW5lKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZW5naW5lLT5pOTE1Owo+IEBAIC01MzMsMjIgKzU1Miw2IEBAIGludCBpbnRlbF9n cHVfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHVuc2lnbmVkIGludCBlbmdp bmVfbWFzaykKPiAgCWludCByZXRyeTsKPiAgCWludCByZXQ7Cj4gIAo+IC0JLyoKPiAtCSAqIFdl IHdhbnQgdG8gcGVyZm9ybSBwZXItZW5naW5lIHJlc2V0IGZyb20gYXRvbWljIGNvbnRleHQgKGUu Zy4KPiAtCSAqIHNvZnRpcnEpLCB3aGljaCBpbXBvc2VzIHRoZSBjb25zdHJhaW50IHRoYXQgd2Ug Y2Fubm90IHNsZWVwLgo+IC0JICogSG93ZXZlciwgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGF0IHNw ZW5kaW5nIGEgYml0IG9mIHRpbWUgd2FpdGluZwo+IC0JICogZm9yIGEgcmVzZXQgaGVscHMgaW4g dmFyaW91cyBjYXNlcywgc28gZm9yIGEgZnVsbC1kZXZpY2UgcmVzZXQKPiAtCSAqIHdlIGFwcGx5 IHRoZSBvcHBvc2l0ZSBydWxlIGFuZCB3YWl0IGlmIHdlIHdhbnQgdG8uIEFzIHdlIHNob3VsZAo+ IC0JICogYWx3YXlzIGZvbGxvdyB1cCBhIGZhaWxlZCBwZXItZW5naW5lIHJlc2V0IHdpdGggYSBm dWxsIGRldmljZSByZXNldCwKPiAtCSAqIGJlaW5nIGEgbGl0dGxlIGZhc3Rlciwgc3RyaWN0ZXIg YW5kIG1vcmUgZXJyb3IgcHJvbmUgZm9yIHRoZQo+IC0JICogYXRvbWljIGNhc2Ugc2VlbXMgYW4g YWNjZXB0YWJsZSBjb21wcm9taXNlLgo+IC0JICoKPiAtCSAqIFVuZm9ydHVuYXRlbHkgdGhpcyBs ZWFkcyB0byBhIGJpbW9kYWwgcm91dGluZSwgd2hlbiB0aGUgZ29hbCB3YXMKPiAtCSAqIHRvIGhh dmUgYSBzaW5nbGUgcmVzZXQgZnVuY3Rpb24gdGhhdCB3b3JrZWQgZm9yIHJlc2V0dGluZyBhbnkK PiAtCSAqIG51bWJlciBvZiBlbmdpbmVzIHNpbXVsdGFuZW91c2x5Lgo+IC0JICovCj4gLQltaWdo dF9zbGVlcF9pZihlbmdpbmVfbWFzayA9PSBBTExfRU5HSU5FUyk7CgpPaCBoZXJlIGl0IGlzLiBJ IHdhcyBhZnRlciB0aGlzIG9uIGF0b21pYyByZXNldHMuCgo+IC0KPiAgCS8qCj4gIAkgKiBJZiB0 aGUgcG93ZXIgd2VsbCBzbGVlcHMgZHVyaW5nIHRoZSByZXNldCwgdGhlIHJlc2V0Cj4gIAkgKiBy ZXF1ZXN0IG1heSBiZSBkcm9wcGVkIGFuZCBuZXZlciBjb21wbGV0ZXMgKGNhdXNpbmcgLUVJTyku Cj4gQEAgLTU4MCw4ICs1ODMsNiBAQCBpbnQgaW50ZWxfZ3B1X3Jlc2V0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1LCB1bnNpZ25lZCBpbnQgZW5naW5lX21hc2spCj4gIAkJfQo+ICAJCWlm IChyZXQgIT0gLUVUSU1FRE9VVCB8fCBlbmdpbmVfbWFzayAhPSBBTExfRU5HSU5FUykKPiAgCQkJ YnJlYWs7Cj4gLQo+IC0JCWNvbmRfcmVzY2hlZCgpOwo+ICAJfQo+ICAJaW50ZWxfdW5jb3JlX2Zv cmNld2FrZV9wdXQoaTkxNSwgRk9SQ0VXQUtFX0FMTCk7Cj4gIAo+IEBAIC02MjAsMTEgKzYyMSw4 IEBAIGludCBpbnRlbF9yZXNldF9ndWMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4g ICAqIEVuc3VyZSBpcnEgaGFuZGxlciBmaW5pc2hlcywgYW5kIG5vdCBydW4gYWdhaW4uCj4gICAq IEFsc28gcmV0dXJuIHRoZSBhY3RpdmUgcmVxdWVzdCBzbyB0aGF0IHdlIG9ubHkgc2VhcmNoIGZv ciBpdCBvbmNlLgo+ICAgKi8KPiAtc3RhdGljIHN0cnVjdCBpOTE1X3JlcXVlc3QgKgo+IC1yZXNl dF9wcmVwYXJlX2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3N0YXRp YyB2b2lkIHJlc2V0X3ByZXBhcmVfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKPiAgewo+IC0Jc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gLQo+ICAJLyoKPiAgCSAqIER1 cmluZyB0aGUgcmVzZXQgc2VxdWVuY2UsIHdlIG11c3QgcHJldmVudCB0aGUgZW5naW5lIGZyb20K PiAgCSAqIGVudGVyaW5nIFJDNi4gQXMgdGhlIGNvbnRleHQgc3RhdGUgaXMgdW5kZWZpbmVkIHVu dGlsIHdlIHJlc3RhcnQKPiBAQCAtNjMzLDE2MiArNjMxLDg2IEBAIHJlc2V0X3ByZXBhcmVfZW5n aW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCSAqIEdQVSBzdGF0ZSB1cG9u IHJlc3VtZSwgaS5lLiBmYWlsIHRvIHJlc3RhcnQgYWZ0ZXIgYSByZXNldC4KPiAgCSAqLwo+ICAJ aW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZW5naW5lLT5pOTE1LCBGT1JDRVdBS0VfQUxMKTsK PiAtCj4gLQlycSA9IGVuZ2luZS0+cmVzZXQucHJlcGFyZShlbmdpbmUpOwo+IC0JaWYgKHJxICYm IHJxLT5mZW5jZS5lcnJvciA9PSAtRUlPKQo+IC0JCXJxID0gRVJSX1BUUigtRUlPKTsgLyogUHJl dmlvdXMgcmVzZXQgZmFpbGVkISAqLwo+IC0KPiAtCXJldHVybiBycTsKPiArCWVuZ2luZS0+cmVz ZXQucHJlcGFyZShlbmdpbmUpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IHJlc2V0X3ByZXBhcmUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3N0YXRpYyB2b2lkIHJlc2V0X3ByZXBh cmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZTsKPiAtCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ICAJZW51bSBp bnRlbF9lbmdpbmVfaWQgaWQ7Cj4gLQlpbnQgZXJyID0gMDsKPiAgCj4gLQlmb3JfZWFjaF9lbmdp bmUoZW5naW5lLCBpOTE1LCBpZCkgewo+IC0JCXJxID0gcmVzZXRfcHJlcGFyZV9lbmdpbmUoZW5n aW5lKTsKPiAtCQlpZiAoSVNfRVJSKHJxKSkgewo+IC0JCQllcnIgPSBQVFJfRVJSKHJxKTsKPiAt CQkJY29udGludWU7Cj4gLQkJfQo+IC0KPiAtCQllbmdpbmUtPmhhbmdjaGVjay5hY3RpdmVfcmVx dWVzdCA9IHJxOwo+IC0JfQo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgaWQpCj4g KwkJcmVzZXRfcHJlcGFyZV9lbmdpbmUoZW5naW5lKTsKPiAgCj4gLQlpOTE1X2dlbV9yZXZva2Vf ZmVuY2VzKGk5MTUpOwo+ICAJaW50ZWxfdWNfc2FuaXRpemUoaTkxNSk7Cj4gLQo+IC0JcmV0dXJu IGVycjsKPiAgfQo+ICAKPiAtLyogUmV0dXJucyB0aGUgcmVxdWVzdCBpZiBpdCB3YXMgZ3VpbHR5 IG9mIHRoZSBoYW5nICovCj4gLXN0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoKPiAtcmVzZXRf cmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gLQkgICAgICBzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSwKPiAtCSAgICAgIGJvb2wgc3RhbGxlZCkKPiArc3RhdGljIGludCBn dF9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdW5zaWduZWQgaW50IHN0YWxs ZWRfbWFzaykKPiAgewo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJZW51 bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gKwlpbnQgZXJyOwo+ICsKPiAgCS8qCj4gLQkgKiBUaGUg Z3VpbHR5IHJlcXVlc3Qgd2lsbCBnZXQgc2tpcHBlZCBvbiBhIGh1bmcgZW5naW5lLgo+IC0JICoK PiAtCSAqIFVzZXJzIG9mIGNsaWVudCBkZWZhdWx0IGNvbnRleHRzIGRvIG5vdCByZWx5IG9uIGxv Z2ljYWwKPiAtCSAqIHN0YXRlIHByZXNlcnZlZCBiZXR3ZWVuIGJhdGNoZXMgc28gaXQgaXMgc2Fm ZSB0byBleGVjdXRlCj4gLQkgKiBxdWV1ZWQgcmVxdWVzdHMgZm9sbG93aW5nIHRoZSBoYW5nLiBO b24gZGVmYXVsdCBjb250ZXh0cwo+IC0JICogcmVseSBvbiBwcmVzZXJ2ZWQgc3RhdGUsIHNvIHNr aXBwaW5nIGEgYmF0Y2ggbG9zZXMgdGhlCj4gLQkgKiBldm9sdXRpb24gb2YgdGhlIHN0YXRlIGFu ZCBpdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGNvcnJ1cHRlZC4KPiAtCSAqIEV4ZWN1dGluZyBt b3JlIHF1ZXVlZCBiYXRjaGVzIG9uIHRvcCBvZiBjb3JydXB0ZWQgc3RhdGUgaXMKPiAtCSAqIHJp c2t5LiBCdXQgd2UgdGFrZSB0aGUgcmlzayBieSB0cnlpbmcgdG8gYWR2YW5jZSB0aHJvdWdoCj4g LQkgKiB0aGUgcXVldWVkIHJlcXVlc3RzIGluIG9yZGVyIHRvIG1ha2UgdGhlIGNsaWVudCBiZWhh dmlvdXIKPiAtCSAqIG1vcmUgcHJlZGljdGFibGUgYXJvdW5kIHJlc2V0cywgYnkgbm90IHRocm93 aW5nIGF3YXkgcmFuZG9tCj4gLQkgKiBhbW91bnQgb2YgYmF0Y2hlcyBpdCBoYXMgcHJlcGFyZWQg Zm9yIGV4ZWN1dGlvbi4gU29waGlzdGljYXRlZAo+IC0JICogY2xpZW50cyBjYW4gdXNlIGdlbV9y ZXNldF9zdGF0c19pb2N0bCBhbmQgZG1hIGZlbmNlIHN0YXR1cwo+IC0JICogKGV4cG9ydGVkIHZp YSBzeW5jX2ZpbGUgaW5mbyBpb2N0bCBvbiBleHBsaWNpdCBmZW5jZXMpIHRvIG9ic2VydmUKPiAt CSAqIHdoZW4gaXQgbG9zZXMgdGhlIGNvbnRleHQgc3RhdGUgYW5kIHNob3VsZCByZWJ1aWxkIGFj Y29yZGluZ2x5Lgo+IC0JICoKPiAtCSAqIFRoZSBjb250ZXh0IGJhbiwgYW5kIHVsdGltYXRlbHkg dGhlIGNsaWVudCBiYW4sIG1lY2hhbmlzbSBhcmUgc2FmZXR5Cj4gLQkgKiB2YWx2ZXMgaWYgY2xp ZW50IHN1Ym1pc3Npb24gZW5kcyB1cCByZXN1bHRpbmcgaW4gbm90aGluZyBtb3JlIHRoYW4KPiAt CSAqIHN1YnNlcXVlbnQgaGFuZ3MuCj4gKwkgKiBFdmVyeXRoaW5nIGRlcGVuZHMgb24gaGF2aW5n IHRoZSBHVFQgcnVubmluZywgc28gd2UgbmVlZCB0byBzdGFydAo+ICsJICogdGhlcmUuCj4gIAkg Ki8KPiArCWVyciA9IGk5MTVfZ2d0dF9lbmFibGVfaHcoaTkxNSk7Cj4gKwlpZiAoZXJyKQo+ICsJ CXJldHVybiBlcnI7Cj4gIAo+IC0JaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKSB7Cj4g LQkJR0VNX1RSQUNFKCIlcyBwYXJkb25lZCBnbG9iYWw9JWQgKGZlbmNlICVsbHg6JWxsZCksIGN1 cnJlbnQgJWRcbiIsCj4gLQkJCSAgZW5naW5lLT5uYW1lLCBycS0+Z2xvYmFsX3NlcW5vLAo+IC0J CQkgIHJxLT5mZW5jZS5jb250ZXh0LCBycS0+ZmVuY2Uuc2Vxbm8sCj4gLQkJCSAgaW50ZWxfZW5n aW5lX2dldF9zZXFubyhlbmdpbmUpKTsKPiAtCQlzdGFsbGVkID0gZmFsc2U7Cj4gLQl9Cj4gLQo+ IC0JaWYgKHN0YWxsZWQpIHsKPiAtCQljb250ZXh0X21hcmtfZ3VpbHR5KHJxLT5nZW1fY29udGV4 dCk7Cj4gLQkJaTkxNV9yZXF1ZXN0X3NraXAocnEsIC1FSU8pOwo+ICsJZm9yX2VhY2hfZW5naW5l KGVuZ2luZSwgaTkxNSwgaWQpCj4gKwkJaW50ZWxfZW5naW5lX3Jlc2V0KGVuZ2luZSwgc3RhbGxl ZF9tYXNrICYgRU5HSU5FX01BU0soaWQpKTsKPiAgCj4gLQkJLyogSWYgdGhpcyBjb250ZXh0IGlz IG5vdyBiYW5uZWQsIHNraXAgYWxsIHBlbmRpbmcgcmVxdWVzdHMuICovCj4gLQkJaWYgKGk5MTVf Z2VtX2NvbnRleHRfaXNfYmFubmVkKHJxLT5nZW1fY29udGV4dCkpCj4gLQkJCWVuZ2luZV9za2lw X2NvbnRleHQocnEpOwo+IC0JfSBlbHNlIHsKPiAtCQkvKgo+IC0JCSAqIFNpbmNlIHRoaXMgaXMg bm90IHRoZSBodW5nIGVuZ2luZSwgaXQgbWF5IGhhdmUgYWR2YW5jZWQKPiAtCQkgKiBzaW5jZSB0 aGUgaGFuZyBkZWNsYXJhdGlvbi4gRG91YmxlIGNoZWNrIGJ5IHJlZmluZGluZwo+IC0JCSAqIHRo ZSBhY3RpdmUgcmVxdWVzdCBhdCB0aGUgdGltZSBvZiB0aGUgcmVzZXQuCj4gLQkJICovCj4gLQkJ cnEgPSBpOTE1X2dlbV9maW5kX2FjdGl2ZV9yZXF1ZXN0KGVuZ2luZSk7Cj4gLQkJaWYgKHJxKSB7 Cj4gLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gLQo+IC0JCQljb250ZXh0X21hcmtfaW5ub2Nl bnQocnEtPmdlbV9jb250ZXh0KTsKPiAtCQkJZG1hX2ZlbmNlX3NldF9lcnJvcigmcnEtPmZlbmNl LCAtRUFHQUlOKTsKPiAtCj4gLQkJCS8qIFJld2luZCB0aGUgZW5naW5lIHRvIHJlcGxheSB0aGUg aW5jb21wbGV0ZSBycSAqLwo+IC0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT50aW1lbGlu ZS5sb2NrLCBmbGFncyk7Cj4gLQkJCXJxID0gbGlzdF9wcmV2X2VudHJ5KHJxLCBsaW5rKTsKPiAt CQkJaWYgKCZycS0+bGluayA9PSAmZW5naW5lLT50aW1lbGluZS5yZXF1ZXN0cykKPiAtCQkJCXJx ID0gTlVMTDsKPiAtCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT50aW1lbGluZS5s b2NrLCBmbGFncyk7Cj4gLQkJfQo+IC0JfQo+ICsJaTkxNV9nZW1fcmVzdG9yZV9mZW5jZXMoaTkx NSk7Cj4gIAo+IC0JcmV0dXJuIHJxOwo+ICsJcmV0dXJuIGVycjsKPiAgfQo+ICAKPiAtc3RhdGlj IHZvaWQgcmVzZXRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAtCQkJ IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+IC0JCQkgYm9vbCBzdGFsbGVkKQo+ICtzdGF0aWMg dm9pZCByZXNldF9maW5pc2hfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiAgewo+IC0JaWYgKHJxKQo+IC0JCXJxID0gcmVzZXRfcmVxdWVzdChlbmdpbmUsIHJxLCBzdGFs bGVkKTsKPiAtCj4gLQkvKiBTZXR1cCB0aGUgQ1MgdG8gcmVzdW1lIGZyb20gdGhlIGJyZWFkY3J1 bWIgb2YgdGhlIGh1bmcgcmVxdWVzdCAqLwo+IC0JZW5naW5lLT5yZXNldC5yZXNldChlbmdpbmUs IHJxKTsKPiArCWVuZ2luZS0+cmVzZXQuZmluaXNoKGVuZ2luZSk7Cj4gKwlpbnRlbF91bmNvcmVf Zm9yY2V3YWtlX3B1dChlbmdpbmUtPmk5MTUsIEZPUkNFV0FLRV9BTEwpOwo+ICB9Cj4gIAo+IC1z dGF0aWMgdm9pZCBndF9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdW5zaWdu ZWQgaW50IHN0YWxsZWRfbWFzaykKPiArc3RydWN0IGk5MTVfZ3B1X3Jlc3RhcnQgewo+ICsJc3Ry dWN0IHdvcmtfc3RydWN0IHdvcms7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsK PiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHJlc3RhcnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3Qg KndvcmspCj4gIHsKPiArCXN0cnVjdCBpOTE1X2dwdV9yZXN0YXJ0ICphcmcgPSBjb250YWluZXJf b2Yod29yaywgdHlwZW9mKCphcmcpLCB3b3JrKTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gYXJnLT5pOTE1Owo+ICAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ ICAJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsK PiAgCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAr CXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1KTsKPiArCW11dGV4X2xvY2soJmk5 MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAKPiAtCWk5MTVfcmV0aXJlX3JlcXVlc3RzKGk5MTUp OwoKQ2FuJ3QgZG8gdGhpcyBhbnltb3JlIHllcy4gV2hhdCB3aWxsIGJlIHRoZSBlZmZlY3QKb2Yg ZGVsYXlpbmcgdGhpcyBhbmQgdGhlIG90aGVyIGV4cGxpY2l0IHJldGlyZW1lbnRzPwpBcmUgd2Ug bW9yZSBwcm9uZSB0byBzdGFydmF0aW9uPwoKPiArCXNtcF9zdG9yZV9tYihpOTE1LT5ncHVfZXJy b3IucmVzdGFydCwgTlVMTCk7CgpDaGVja3BhdGNoIG1pZ2h0IHdhbnQgYSBjb21tZW50IGZvciB0 aGUgbWIuCgo+ICAKPiAgCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7Cj4gLQkJ c3RydWN0IGludGVsX2NvbnRleHQgKmNlOwo+IC0KPiAtCQlyZXNldF9lbmdpbmUoZW5naW5lLAo+ IC0JCQkgICAgIGVuZ2luZS0+aGFuZ2NoZWNrLmFjdGl2ZV9yZXF1ZXN0LAo+IC0JCQkgICAgIHN0 YWxsZWRfbWFzayAmIEVOR0lORV9NQVNLKGlkKSk7Cj4gLQkJY2UgPSBmZXRjaF9hbmRfemVybygm ZW5naW5lLT5sYXN0X3JldGlyZWRfY29udGV4dCk7Cj4gLQkJaWYgKGNlKQo+IC0JCQlpbnRlbF9j b250ZXh0X3VucGluKGNlKTsKPiArCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiAgCj4gIAkJ LyoKPiAgCQkgKiBPc3RlbnNpYmlseSwgd2UgYWx3YXlzIHdhbnQgYSBjb250ZXh0IGxvYWRlZCBm b3IgcG93ZXJzYXZpbmcsCj4gIAkJICogc28gaWYgdGhlIGVuZ2luZSBpcyBpZGxlIGFmdGVyIHRo ZSByZXNldCwgc2VuZCBhIHJlcXVlc3QKPiAgCQkgKiB0byBsb2FkIG91ciBzY3JhdGNoIGtlcm5l bF9jb250ZXh0Lgo+IC0JCSAqCj4gLQkJICogTW9yZSBteXN0ZXJpb3VzbHksIGlmIHdlIGxlYXZl IHRoZSBlbmdpbmUgaWRsZSBhZnRlciBhIHJlc2V0LAo+IC0JCSAqIHRoZSBuZXh0IHVzZXJzcGFj ZSBiYXRjaCBtYXkgaGFuZywgd2l0aCB3aGF0IGFwcGVhcnMgdG8gYmUKPiAtCQkgKiBhbiBpbmNv aGVyZW50IHJlYWQgYnkgdGhlIENTIChwcmVzdW1hYmx5IHN0YWxlIFRMQikuIEFuCj4gLQkJICog ZW1wdHkgcmVxdWVzdCBhcHBlYXJzIHN1ZmZpY2llbnQgdG8gcGFwZXIgb3ZlciB0aGUgZ2xpdGNo Lgo+ICAJCSAqLwo+IC0JCWlmIChpbnRlbF9lbmdpbmVfaXNfaWRsZShlbmdpbmUpKSB7Cj4gLQkJ CXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ICsJCWlmICghaW50ZWxfZW5naW5lX2lzX2lkbGUo ZW5naW5lKSkKPiArCQkJY29udGludWU7CgpXaHkgZGlkIHlvdSByZW1vdmUgdGhlIGNvbW1lbnQg b24gbmVlZGluZyBhIGVtcHR5IHJlcXVlc3Q/CgpBbHNvIGlmIHRoZSByZXF1ZXN0IGNhdXNpbmcg bm9uaWRsZSBjb3VsZCBiZSB0cm91Ymxlc29tZSBvbmUsCmZyb20gdHJvdWJsZXNvbWUgY29udGV4 dCwgd2h5IG5vdCBqdXN0IHNraXAgdGhlIGlkbGUgY2hlY2sgYW5kCmFsd2F5cyBhZGQgb25lIGZv ciBrZXJuZWwgY3R4PwoKPiAgCj4gLQkJCXJxID0gaTkxNV9yZXF1ZXN0X2FsbG9jKGVuZ2luZSwg aTkxNS0+a2VybmVsX2NvbnRleHQpOwo+IC0JCQlpZiAoIUlTX0VSUihycSkpCj4gLQkJCQlpOTE1 X3JlcXVlc3RfYWRkKHJxKTsKPiAtCQl9Cj4gKwkJcnEgPSBpOTE1X3JlcXVlc3RfYWxsb2MoZW5n aW5lLCBpOTE1LT5rZXJuZWxfY29udGV4dCk7Cj4gKwkJaWYgKCFJU19FUlIocnEpKQo+ICsJCQlp OTE1X3JlcXVlc3RfYWRkKHJxKTsKPiAgCX0KPiAgCj4gLQlpOTE1X2dlbV9yZXN0b3JlX2ZlbmNl cyhpOTE1KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcmVzZXRfZmluaXNoX2VuZ2luZShzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCWVuZ2luZS0+cmVzZXQuZmluaXNo KGVuZ2luZSk7Cj4gKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJ aW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSwgd2FrZXJlZik7Cj4gIAo+IC0JaW50ZWxfdW5jb3Jl X2ZvcmNld2FrZV9wdXQoZW5naW5lLT5pOTE1LCBGT1JDRVdBS0VfQUxMKTsKPiArCWtmcmVlKGFy Zyk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIHJlc2V0X2ZpbmlzaChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSkKPiBAQCAtNzk2LDExICs3MTgsMzAgQEAgc3RhdGljIHZvaWQgcmVzZXRf ZmluaXNoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAJc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lOwo+ICAJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gIAo+IC0JbG9j a2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+IC0JZm9yX2Vh Y2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgaWQpIHsKPiAtCQllbmdpbmUtPmhhbmdjaGVjay5hY3Rp dmVfcmVxdWVzdCA9IE5VTEw7Cj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkK PiAgCQlyZXNldF9maW5pc2hfZW5naW5lKGVuZ2luZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHJlc2V0X3Jlc3RhcnQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCXN0 cnVjdCBpOTE1X2dwdV9yZXN0YXJ0ICphcmc7Cj4gKwo+ICsJLyoKPiArCSAqIEZvbGxvd2luZyB0 aGUgcmVzZXQsIGVuc3VyZSB0aGF0IHdlIGFsd2F5cyByZWxvYWQgY29udGV4dCBmb3IKPiArCSAq IHBvd2Vyc2F2aW5nLCBhbmQgdG8gY29ycmVjdCBlbmdpbmUtPmxhc3RfcmV0aXJlZF9jb250ZXh0 LiBTaW5jZQo+ICsJICogdGhpcyByZXF1aXJlcyB1cyB0byBzdWJtaXQgYSByZXF1ZXN0LCBxdWV1 ZSBhIHdvcmtlciB0byBkbyB0aGF0Cj4gKwkgKiB0YXNrIGZvciB1cyB0byBldmFkZSBhbnkgbG9j a2luZyBoZXJlLgo+ICsJICovCgpOaWNlLCB0aGlzIHdhcy93aWxsIGJlIGhlbHBmdWwhCgo+ICsJ aWYgKFJFQURfT05DRShpOTE1LT5ncHVfZXJyb3IucmVzdGFydCkpCj4gKwkJcmV0dXJuOwo+ICsK PiArCWFyZyA9IGttYWxsb2Moc2l6ZW9mKCphcmcpLCBHRlBfS0VSTkVMKTsKPiArCWlmIChhcmcp IHsKPiArCQlhcmctPmk5MTUgPSBpOTE1Owo+ICsJCUlOSVRfV09SSygmYXJnLT53b3JrLCByZXN0 YXJ0X3dvcmspOwo+ICsKPiArCQlXUklURV9PTkNFKGk5MTUtPmdwdV9lcnJvci5yZXN0YXJ0LCBh cmcpOwo+ICsJCXF1ZXVlX3dvcmsoaTkxNS0+d3EsICZhcmctPndvcmspOwo+ICAJfQo+ICB9Cj4g IAo+IEBAIC04ODksOCArODMwLDYgQEAgYm9vbCBpOTE1X2dlbV91bnNldF93ZWRnZWQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIAlzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGw7Cj4g IAlib29sIHJldCA9IGZhbHNlOwo+ICAKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmk5MTUtPmRy bS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAgCWlmICghdGVzdF9iaXQoSTkxNV9XRURHRUQsICZlcnJv ci0+ZmxhZ3MpKQo+ICAJCXJldHVybiB0cnVlOwo+ICAKPiBAQCAtOTEzLDkgKzg1Miw5IEBAIGJv b2wgaTkxNV9nZW1fdW5zZXRfd2VkZ2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ ICAJICovCj4gIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRsLCAmaTkxNS0+Z3QudGltZWxpbmVzLCBs aW5rKSB7Cj4gIAkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gKwkJbG9uZyB0aW1lb3V0Owo+ ICAKPiAtCQlycSA9IGk5MTVfZ2VtX2FjdGl2ZV9wZWVrKCZ0bC0+bGFzdF9yZXF1ZXN0LAo+IC0J CQkJCSAgJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJCXJxID0gaTkxNV9nZW1fYWN0aXZl X2dldF91bmxvY2tlZCgmdGwtPmxhc3RfcmVxdWVzdCk7Cj4gIAkJaWYgKCFycSkKPiAgCQkJY29u dGludWU7Cj4gIAo+IEBAIC05MzAsMTIgKzg2OSwxMiBAQCBib29sIGk5MTVfZ2VtX3Vuc2V0X3dl ZGdlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgCQkgKiBhbmQgd2hlbiB0aGUg c2Vxbm8gcGFzc2VzIHRoZSBmZW5jZSwgdGhlIHNpZ25hbGVyCj4gIAkJICogdGhlbiBzaWduYWxz IHRoZSBmZW5jZSB3YWtpbmcgdXMgdXApLgo+ICAJCSAqLwo+IC0JCWlmIChkbWFfZmVuY2VfZGVm YXVsdF93YWl0KCZycS0+ZmVuY2UsIHRydWUsCj4gLQkJCQkJICAgTUFYX1NDSEVEVUxFX1RJTUVP VVQpIDwgMCkKPiArCQl0aW1lb3V0ID0gZG1hX2ZlbmNlX2RlZmF1bHRfd2FpdCgmcnEtPmZlbmNl LCB0cnVlLAo+ICsJCQkJCQkgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+ICsJCWk5MTVfcmVxdWVz dF9wdXQocnEpOwo+ICsJCWlmICh0aW1lb3V0IDwgMCkKPiAgCQkJZ290byB1bmxvY2s7Cj4gIAl9 Cj4gLQlpOTE1X3JldGlyZV9yZXF1ZXN0cyhpOTE1KTsKPiAtCUdFTV9CVUdfT04oaTkxNS0+Z3Qu YWN0aXZlX3JlcXVlc3RzKTsKPiAgCj4gIAlpbnRlbF9lbmdpbmVzX3Nhbml0aXplKGk5MTUsIGZh bHNlKTsKPiAgCj4gQEAgLTk0OSw3ICs4ODgsNiBAQCBib29sIGk5MTVfZ2VtX3Vuc2V0X3dlZGdl ZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgCSAqIGNvbnRleHQgYW5kIGRvIG5v dCByZXF1aXJlIHN0b3BfbWFjaGluZSgpLgo+ICAJICovCj4gIAlpbnRlbF9lbmdpbmVzX3Jlc2V0 X2RlZmF1bHRfc3VibWlzc2lvbihpOTE1KTsKPiAtCWk5MTVfZ2VtX2NvbnRleHRzX2xvc3QoaTkx NSk7Cj4gIAo+ICAJR0VNX1RSQUNFKCJlbmRcbiIpOwo+ICAKPiBAQCAtOTYyLDYgKzkwMCw0MyBA QCBib29sIGk5MTVfZ2VtX3Vuc2V0X3dlZGdlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gK3N0cnVjdCBfX2k5MTVfcmVzZXQgewo+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gKwl1bnNpZ25lZCBpbnQgc3RhbGxlZF9t YXNrOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCBfX2k5MTVfcmVzZXRfX0JLTCh2b2lkICpkYXRh KQo+ICt7Cj4gKwlzdHJ1Y3QgX19pOTE1X3Jlc2V0ICphcmcgPSBkYXRhOwo+ICsJaW50IGVycjsK PiArCj4gKwllcnIgPSBpbnRlbF9ncHVfcmVzZXQoYXJnLT5pOTE1LCBBTExfRU5HSU5FUyk7Cj4g KwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJcmV0dXJuIGd0X3Jlc2V0KGFyZy0+ aTkxNSwgYXJnLT5zdGFsbGVkX21hc2spOwo+ICt9Cj4gKwo+ICsjaWYgMAo+ICsjZGVmaW5lIF9f ZG9fcmVzZXQoZm4sIGFyZykgc3RvcF9tYWNoaW5lKGZuLCBhcmcsIE5VTEwpCgpMZXRzIHJlbW92 ZSB0aGUgbWFjaGluZXJ5IHRvIHNlbGVjdCByZXNldCBzdG9wX21hY2hpbmUgYW5kIHRoZSAjaW5j bHVkZS4KCj4gKyNlbHNlCj4gKyNkZWZpbmUgX19kb19yZXNldChmbiwgYXJnKSBmbihhcmcpCj4g KyNlbmRpZgo+ICsKPiArc3RhdGljIGludCBkb19yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSwgdW5zaWduZWQgaW50IHN0YWxsZWRfbWFzaykKPiArewo+ICsJc3RydWN0IF9faTkx NV9yZXNldCBhcmcgPSB7IGk5MTUsIHN0YWxsZWRfbWFzayB9Owo+ICsJaW50IGVyciwgaTsKPiAr Cj4gKwllcnIgPSBfX2RvX3Jlc2V0KF9faTkxNV9yZXNldF9fQktMLCAmYXJnKTsKPiArCWZvciAo aSA9IDA7IGVyciAmJiBpIDwgMzsgaSsrKSB7Cj4gKwkJbXNsZWVwKDEwMCk7Cj4gKwkJZXJyID0g X19kb19yZXNldChfX2k5MTVfcmVzZXRfX0JLTCwgJmFyZyk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IGVycjsKPiArfQo+ICsKPiAgLyoqCj4gICAqIGk5MTVfcmVzZXQgLSByZXNldCBjaGlwIGFmdGVy IGEgaGFuZwo+ICAgKiBAaTkxNTogI2RybV9pOTE1X3ByaXZhdGUgdG8gcmVzZXQKPiBAQCAtOTg3 LDMxICs5NjIsMjIgQEAgdm9pZCBpOTE1X3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1LAo+ICB7Cj4gIAlzdHJ1Y3QgaTkxNV9ncHVfZXJyb3IgKmVycm9yID0gJmk5MTUtPmdwdV9l cnJvcjsKPiAgCWludCByZXQ7Cj4gLQlpbnQgaTsKPiAgCj4gIAlHRU1fVFJBQ0UoImZsYWdzPSVs eFxuIiwgZXJyb3ItPmZsYWdzKTsKPiAgCj4gIAltaWdodF9zbGVlcCgpOwoKV2hhdCB3aWxsPyBJ IGRpZG4ndCBzcG90IGFueXRoaW5nIGluIGV4ZWNsaXN0c19yZXNldF9wcmVwYXJlLgoKPiAtCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAJYXNzZXJ0X3Jw bV93YWtlbG9ja19oZWxkKGk5MTUpOwo+ICAJR0VNX0JVR19PTighdGVzdF9iaXQoSTkxNV9SRVNF VF9CQUNLT0ZGLCAmZXJyb3ItPmZsYWdzKSk7Cj4gIAo+IC0JaWYgKCF0ZXN0X2JpdChJOTE1X1JF U0VUX0hBTkRPRkYsICZlcnJvci0+ZmxhZ3MpKQo+IC0JCXJldHVybjsKPiAtCj4gIAkvKiBDbGVh ciBhbnkgcHJldmlvdXMgZmFpbGVkIGF0dGVtcHRzIGF0IHJlY292ZXJ5LiBUaW1lIHRvIHRyeSBh Z2Fpbi4gKi8KPiAgCWlmICghaTkxNV9nZW1fdW5zZXRfd2VkZ2VkKGk5MTUpKQo+IC0JCWdvdG8g d2FrZXVwOwo+ICsJCXJldHVybjsKPiAgCj4gIAlpZiAocmVhc29uKQo+ICAJCWRldl9ub3RpY2Uo aTkxNS0+ZHJtLmRldiwgIlJlc2V0dGluZyBjaGlwIGZvciAlc1xuIiwgcmVhc29uKTsKPiAgCWVy cm9yLT5yZXNldF9jb3VudCsrOwo+ICAKPiAtCXJldCA9IHJlc2V0X3ByZXBhcmUoaTkxNSk7Cj4g LQlpZiAocmV0KSB7Cj4gLQkJZGV2X2VycihpOTE1LT5kcm0uZGV2LCAiR1BVIHJlY292ZXJ5IGZh aWxlZFxuIik7Cj4gLQkJZ290byB0YWludDsKPiAtCX0KPiArCXJlc2V0X3ByZXBhcmUoaTkxNSk7 Cj4gIAo+ICAJaWYgKCFpbnRlbF9oYXNfZ3B1X3Jlc2V0KGk5MTUpKSB7Cj4gIAkJaWYgKGk5MTVf bW9kcGFyYW1zLnJlc2V0KQo+IEBAIC0xMDIxLDMyICs5ODcsMTEgQEAgdm9pZCBpOTE1X3Jlc2V0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAJCWdvdG8gZXJyb3I7Cj4gIAl9Cj4g IAo+IC0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewo+IC0JCXJldCA9IGludGVsX2dwdV9yZXNl dChpOTE1LCBBTExfRU5HSU5FUyk7Cj4gLQkJaWYgKHJldCA9PSAwKQo+IC0JCQlicmVhazsKPiAt Cj4gLQkJbXNsZWVwKDEwMCk7Cj4gLQl9Cj4gLQlpZiAocmV0KSB7Cj4gKwlpZiAoZG9fcmVzZXQo aTkxNSwgc3RhbGxlZF9tYXNrKSkgewo+ICAJCWRldl9lcnIoaTkxNS0+ZHJtLmRldiwgIkZhaWxl ZCB0byByZXNldCBjaGlwXG4iKTsKPiAgCQlnb3RvIHRhaW50Owo+ICAJfQo+ICAKPiAtCS8qIE9r LCBub3cgZ2V0IHRoaW5ncyBnb2luZyBhZ2Fpbi4uLiAqLwo+IC0KPiAtCS8qCj4gLQkgKiBFdmVy eXRoaW5nIGRlcGVuZHMgb24gaGF2aW5nIHRoZSBHVFQgcnVubmluZywgc28gd2UgbmVlZCB0byBz dGFydAo+IC0JICogdGhlcmUuCj4gLQkgKi8KPiAtCXJldCA9IGk5MTVfZ2d0dF9lbmFibGVfaHco aTkxNSk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmUtZW5hYmxl IEdHVFQgZm9sbG93aW5nIHJlc2V0ICglZClcbiIsCj4gLQkJCSAgcmV0KTsKPiAtCQlnb3RvIGVy cm9yOwo+IC0JfQo+IC0KPiAtCWd0X3Jlc2V0KGk5MTUsIHN0YWxsZWRfbWFzayk7Cj4gIAlpbnRl bF9vdmVybGF5X3Jlc2V0KGk5MTUpOwo+ICAKPiAgCS8qCj4gQEAgLTEwNjgsOSArMTAxMyw4IEBA IHZvaWQgaTkxNV9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgCj4gIGZp bmlzaDoKPiAgCXJlc2V0X2ZpbmlzaChpOTE1KTsKPiAtd2FrZXVwOgo+IC0JY2xlYXJfYml0KEk5 MTVfUkVTRVRfSEFORE9GRiwgJmVycm9yLT5mbGFncyk7Cj4gLQl3YWtlX3VwX2JpdCgmZXJyb3It PmZsYWdzLCBJOTE1X1JFU0VUX0hBTkRPRkYpOwo+ICsJaWYgKCFpOTE1X3Rlcm1pbmFsbHlfd2Vk Z2VkKGVycm9yKSkKPiArCQlyZXNldF9yZXN0YXJ0KGk5MTUpOwo+ICAJcmV0dXJuOwo+ICAKPiAg dGFpbnQ6Cj4gQEAgLTEwODksNyArMTAzMyw2IEBAIHZvaWQgaTkxNV9yZXNldChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgCWFkZF90YWludChUQUlOVF9XQVJOLCBMT0NLREVQX1NU SUxMX09LKTsKPiAgZXJyb3I6Cj4gIAlpOTE1X2dlbV9zZXRfd2VkZ2VkKGk5MTUpOwo+IC0JaTkx NV9yZXRpcmVfcmVxdWVzdHMoaTkxNSk7Cj4gIAlnb3RvIGZpbmlzaDsKPiAgfQo+ICAKPiBAQCAt MTExNSwxOCArMTA1OCwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBpbnRlbF9ndF9yZXNldF9lbmdp bmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gIGludCBpOTE1X3Jlc2V0X2VuZ2lu ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIGNvbnN0IGNoYXIgKm1zZykKPiAgewo+ ICAJc3RydWN0IGk5MTVfZ3B1X2Vycm9yICplcnJvciA9ICZlbmdpbmUtPmk5MTUtPmdwdV9lcnJv cjsKPiAtCXN0cnVjdCBpOTE1X3JlcXVlc3QgKmFjdGl2ZV9yZXF1ZXN0Owo+ICAJaW50IHJldDsK PiAgCj4gIAlHRU1fVFJBQ0UoIiVzIGZsYWdzPSVseFxuIiwgZW5naW5lLT5uYW1lLCBlcnJvci0+ ZmxhZ3MpOwo+ICAJR0VNX0JVR19PTighdGVzdF9iaXQoSTkxNV9SRVNFVF9FTkdJTkUgKyBlbmdp bmUtPmlkLCAmZXJyb3ItPmZsYWdzKSk7Cj4gIAo+IC0JYWN0aXZlX3JlcXVlc3QgPSByZXNldF9w cmVwYXJlX2VuZ2luZShlbmdpbmUpOwo+IC0JaWYgKElTX0VSUl9PUl9OVUxMKGFjdGl2ZV9yZXF1 ZXN0KSkgewo+IC0JCS8qIEVpdGhlciB0aGUgcHJldmlvdXMgcmVzZXQgZmFpbGVkLCBvciB3ZSBw YXJkb24gdGhlIHJlc2V0LiAqLwo+IC0JCXJldCA9IFBUUl9FUlIoYWN0aXZlX3JlcXVlc3QpOwo+ IC0JCWdvdG8gb3V0Owo+IC0JfQo+ICsJaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKGludGVsX2VuZ2lu ZV9nZXRfc2Vxbm8oZW5naW5lKSwKPiArCQkJICAgICAgaW50ZWxfZW5naW5lX2xhc3Rfc3VibWl0 KGVuZ2luZSkpKQo+ICsJCXJldHVybiAwOwoKWW91IHNlZW0gdG8gaGF2ZSBhIHBhdGNoIHRvIHJl bW92ZSB0aGlzIHNob3J0bHkgYWZ0ZXIgc28Kc3F1YXNoPwoKSSBuZWVkIHRvIHJlc3RvY2sgb24g Y29mZmVlIGF0IHRoaXMgcG9pbnQuCi1NaWthCgo+ICsKPiArCXJlc2V0X3ByZXBhcmVfZW5naW5l KGVuZ2luZSk7Cj4gIAo+ICAJaWYgKG1zZykKPiAgCQlkZXZfbm90aWNlKGVuZ2luZS0+aTkxNS0+ ZHJtLmRldiwKPiBAQCAtMTE1MCw3ICsxMDkxLDcgQEAgaW50IGk5MTVfcmVzZXRfZW5naW5lKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgY29uc3QgY2hhciAqbXNnKQo+ICAJICogYWN0 aXZlIHJlcXVlc3QgYW5kIGNhbiBkcm9wIGl0LCBhZGp1c3QgaGVhZCB0byBza2lwIHRoZSBvZmZl bmRpbmcKPiAgCSAqIHJlcXVlc3QgdG8gcmVzdW1lIGV4ZWN1dGluZyByZW1haW5pbmcgcmVxdWVz dHMgaW4gdGhlIHF1ZXVlLgo+ICAJICovCj4gLQlyZXNldF9lbmdpbmUoZW5naW5lLCBhY3RpdmVf cmVxdWVzdCwgdHJ1ZSk7Cj4gKwlpbnRlbF9lbmdpbmVfcmVzZXQoZW5naW5lLCB0cnVlKTsKPiAg Cj4gIAkvKgo+ICAJICogVGhlIGVuZ2luZSBhbmQgaXRzIHJlZ2lzdGVycyAoYW5kIHdvcmthcm91 bmRzIGluIGNhc2Ugb2YgcmVuZGVyKQo+IEBAIC0xMTg3LDMwICsxMTI4LDcgQEAgc3RhdGljIHZv aWQgaTkxNV9yZXNldF9kZXZpY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gIAlp OTE1X3dlZGdlX29uX3RpbWVvdXQoJncsIGk5MTUsIDUgKiBIWikgewo+ICAJCWludGVsX3ByZXBh cmVfcmVzZXQoaTkxNSk7Cj4gIAo+IC0JCWVycm9yLT5yZWFzb24gPSByZWFzb247Cj4gLQkJZXJy b3ItPnN0YWxsZWRfbWFzayA9IGVuZ2luZV9tYXNrOwo+IC0KPiAtCQkvKiBTaWduYWwgdGhhdCBs b2NrZWQgd2FpdGVycyBzaG91bGQgcmVzZXQgdGhlIEdQVSAqLwo+IC0JCXNtcF9tYl9fYmVmb3Jl X2F0b21pYygpOwo+IC0JCXNldF9iaXQoSTkxNV9SRVNFVF9IQU5ET0ZGLCAmZXJyb3ItPmZsYWdz KTsKPiAtCQl3YWtlX3VwX2FsbCgmZXJyb3ItPndhaXRfcXVldWUpOwo+IC0KPiAtCQkvKgo+IC0J CSAqIFdhaXQgZm9yIGFueW9uZSBob2xkaW5nIHRoZSBsb2NrIHRvIHdha2V1cCwgd2l0aG91dAo+ IC0JCSAqIGJsb2NraW5nIGluZGVmaW5pdGVseSBvbiBzdHJ1Y3RfbXV0ZXguCj4gLQkJICovCj4g LQkJZG8gewo+IC0JCQlpZiAobXV0ZXhfdHJ5bG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCkp IHsKPiAtCQkJCWk5MTVfcmVzZXQoaTkxNSwgZW5naW5lX21hc2ssIHJlYXNvbik7Cj4gLQkJCQlt dXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0JCQl9Cj4gLQkJfSB3aGls ZSAod2FpdF9vbl9iaXRfdGltZW91dCgmZXJyb3ItPmZsYWdzLAo+IC0JCQkJCSAgICAgSTkxNV9S RVNFVF9IQU5ET0ZGLAo+IC0JCQkJCSAgICAgVEFTS19VTklOVEVSUlVQVElCTEUsCj4gLQkJCQkJ ICAgICAxKSk7Cj4gLQo+IC0JCWVycm9yLT5zdGFsbGVkX21hc2sgPSAwOwo+IC0JCWVycm9yLT5y ZWFzb24gPSBOVUxMOwo+ICsJCWk5MTVfcmVzZXQoaTkxNSwgZW5naW5lX21hc2ssIHJlYXNvbik7 Cj4gIAo+ICAJCWludGVsX2ZpbmlzaF9yZXNldChpOTE1KTsKPiAgCX0KPiBAQCAtMTM2Niw2ICsx Mjg0LDI1IEBAIHZvaWQgaTkxNV9oYW5kbGVfZXJyb3Ioc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUsCj4gIAlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1LCB3YWtlcmVmKTsKPiAgfQo+ICAK PiArYm9vbCBpOTE1X3Jlc2V0X2ZsdXNoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ ICt7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaTkxNS0+ Z3B1X2Vycm9yLmhhbmdjaGVja193b3JrKTsKPiArCj4gKwlmbHVzaF93b3JrcXVldWUoaTkxNS0+ d3EpOwo+ICsJR0VNX0JVR19PTihSRUFEX09OQ0UoaTkxNS0+Z3B1X2Vycm9yLnJlc3RhcnQpKTsK PiArCj4gKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCWVyciA9IGk5 MTVfZ2VtX3dhaXRfZm9yX2lkbGUoaTkxNSwKPiArCQkJCSAgICAgSTkxNV9XQUlUX0xPQ0tFRCB8 Cj4gKwkJCQkgICAgIEk5MTVfV0FJVF9GT1JfSURMRV9CT09TVCwKPiArCQkJCSAgICAgTUFYX1ND SEVEVUxFX1RJTUVPVVQpOwo+ICsJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4 KTsKPiArCj4gKwlyZXR1cm4gIWVycjsKPiArfQo+ICsKPiAgc3RhdGljIHZvaWQgaTkxNV93ZWRn ZV9tZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gIHsKPiAgCXN0cnVjdCBpOTE1X3dlZGdl X21lICp3ID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqdyksIHdvcmsud29yayk7Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVzZXQuaAo+IGluZGV4IGI2YTUxOWJkZTY3ZC4uZjJkMzQ3ZjMxOWRm IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQuaAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQuaAo+IEBAIC0yOSw2ICsyOSw5IEBAIHZv aWQgaTkxNV9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgaW50IGk5MTVf cmVzZXRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgCQkgICAgICBj b25zdCBjaGFyICpyZWFzb24pOwo+ICAKPiArdm9pZCBpOTE1X3Jlc2V0X3JlcXVlc3Qoc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEsIGJvb2wgZ3VpbHR5KTsKPiArYm9vbCBpOTE1X3Jlc2V0X2ZsdXNo KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiArCj4gIGJvb2wgaW50ZWxfaGFzX2dw dV9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gIGJvb2wgaW50ZWxfaGFz X3Jlc2V0X2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gIAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCj4gaW5kZXggMmYzYzcxZjZkMzEzLi5mYzUy NzM3NzUxZTcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5l X2NzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwo+IEBA IC0xMDcxLDEwICsxMDcxLDggQEAgdm9pZCBpbnRlbF9lbmdpbmVzX3Nhbml0aXplKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1LCBib29sIGZvcmNlKQo+ICAJaWYgKCFyZXNldF9lbmdpbmVz KGk5MTUpICYmICFmb3JjZSkKPiAgCQlyZXR1cm47Cj4gIAo+IC0JZm9yX2VhY2hfZW5naW5lKGVu Z2luZSwgaTkxNSwgaWQpIHsKPiAtCQlpZiAoZW5naW5lLT5yZXNldC5yZXNldCkKPiAtCQkJZW5n aW5lLT5yZXNldC5yZXNldChlbmdpbmUsIE5VTEwpOwo+IC0JfQo+ICsJZm9yX2VhY2hfZW5naW5l KGVuZ2luZSwgaTkxNSwgaWQpCj4gKwkJaW50ZWxfZW5naW5lX3Jlc2V0KGVuZ2luZSwgZmFsc2Up Owo+ICB9Cj4gIAo+ICAvKioKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZ3VjX3N1Ym1pc3Npb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19zdWJt aXNzaW9uLmMKPiBpbmRleCBhYjFjNDliMTA2ZjIuLjcyMTdjN2UzZWU4ZCAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfc3VibWlzc2lvbi5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYwo+IEBAIC04MzQsOCArODM0 LDcgQEAgc3RhdGljIHZvaWQgZ3VjX3N1Ym1pc3Npb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRh dGEpCj4gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPnRpbWVsaW5lLmxvY2ssIGZs YWdzKTsKPiAgfQo+ICAKPiAtc3RhdGljIHN0cnVjdCBpOTE1X3JlcXVlc3QgKgo+IC1ndWNfcmVz ZXRfcHJlcGFyZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3N0YXRpYyB2b2lk IGd1Y19yZXNldF9wcmVwYXJlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+ ICAJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5n aW5lLT5leGVjbGlzdHM7Cj4gIAo+IEBAIC04NjEsOCArODYwLDYgQEAgZ3VjX3Jlc2V0X3ByZXBh cmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJICovCj4gIAlpZiAoZW5naW5l LT5pOTE1LT5ndWMucHJlZW1wdF93cSkKPiAgCQlmbHVzaF93b3JrcXVldWUoZW5naW5lLT5pOTE1 LT5ndWMucHJlZW1wdF93cSk7Cj4gLQo+IC0JcmV0dXJuIGk5MTVfZ2VtX2ZpbmRfYWN0aXZlX3Jl cXVlc3QoZW5naW5lKTsKPiAgfQo+ICAKPiAgLyoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfaGFuZ2NoZWNrLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9o YW5nY2hlY2suYwo+IGluZGV4IDc0MTQ0MWRhYWUzMi4uNTY2MmQ2ZmVkNTIzIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hhbmdjaGVjay5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfaGFuZ2NoZWNrLmMKPiBAQCAtMjUsNiArMjUsMTcgQEAKPiAg I2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gICNpbmNsdWRlICJpOTE1X3Jlc2V0LmgiCj4gIAo+ICtz dHJ1Y3QgaGFuZ2NoZWNrIHsKPiArCXU2NCBhY3RoZDsKPiArCXUzMiBzZXFubzsKPiArCWVudW0g aW50ZWxfZW5naW5lX2hhbmdjaGVja19hY3Rpb24gYWN0aW9uOwo+ICsJdW5zaWduZWQgbG9uZyBh Y3Rpb25fdGltZXN0YW1wOwo+ICsJaW50IGRlYWRsb2NrOwo+ICsJc3RydWN0IGludGVsX2luc3Rk b25lIGluc3Rkb25lOwo+ICsJYm9vbCB3ZWRnZWQ6MTsKPiArCWJvb2wgc3RhbGxlZDoxOwo+ICt9 Owo+ICsKPiAgc3RhdGljIGJvb2wgaW5zdGRvbmVfdW5jaGFuZ2VkKHUzMiBjdXJyZW50X2luc3Rk b25lLCB1MzIgKm9sZF9pbnN0ZG9uZSkKPiAgewo+ICAJdTMyIHRtcCA9IGN1cnJlbnRfaW5zdGRv bmUgfCAqb2xkX2luc3Rkb25lOwo+IEBAIC0xMTksMjUgKzEzMCwyMiBAQCBlbmdpbmVfc3R1Y2so c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1NjQgYWN0aGQpCj4gIH0KPiAgCj4gIHN0 YXRpYyB2b2lkIGhhbmdjaGVja19sb2FkX3NhbXBsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsCj4gLQkJCQkgIHN0cnVjdCBpbnRlbF9lbmdpbmVfaGFuZ2NoZWNrICpoYykKPiArCQkJ CSAgc3RydWN0IGhhbmdjaGVjayAqaGMpCj4gIHsKPiAgCWhjLT5hY3RoZCA9IGludGVsX2VuZ2lu ZV9nZXRfYWN0aXZlX2hlYWQoZW5naW5lKTsKPiAgCWhjLT5zZXFubyA9IGludGVsX2VuZ2luZV9n ZXRfc2Vxbm8oZW5naW5lKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgaGFuZ2NoZWNrX3N0b3Jl X3NhbXBsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gLQkJCQkgICBjb25zdCBz dHJ1Y3QgaW50ZWxfZW5naW5lX2hhbmdjaGVjayAqaGMpCj4gKwkJCQkgICBjb25zdCBzdHJ1Y3Qg aGFuZ2NoZWNrICpoYykKPiAgewo+ICAJZW5naW5lLT5oYW5nY2hlY2suYWN0aGQgPSBoYy0+YWN0 aGQ7Cj4gIAllbmdpbmUtPmhhbmdjaGVjay5zZXFubyA9IGhjLT5zZXFubzsKPiAtCWVuZ2luZS0+ aGFuZ2NoZWNrLmFjdGlvbiA9IGhjLT5hY3Rpb247Cj4gLQllbmdpbmUtPmhhbmdjaGVjay5zdGFs bGVkID0gaGMtPnN0YWxsZWQ7Cj4gLQllbmdpbmUtPmhhbmdjaGVjay53ZWRnZWQgPSBoYy0+d2Vk Z2VkOwo+ICB9Cj4gIAo+ICBzdGF0aWMgZW51bSBpbnRlbF9lbmdpbmVfaGFuZ2NoZWNrX2FjdGlv bgo+ICBoYW5nY2hlY2tfZ2V0X2FjdGlvbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs Cj4gLQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2hhbmdjaGVjayAqaGMpCj4gKwkJ ICAgICBjb25zdCBzdHJ1Y3QgaGFuZ2NoZWNrICpoYykKPiAgewo+ICAJaWYgKGVuZ2luZS0+aGFu Z2NoZWNrLnNlcW5vICE9IGhjLT5zZXFubykKPiAgCQlyZXR1cm4gRU5HSU5FX0FDVElWRV9TRVFO TzsKPiBAQCAtMTQ5LDcgKzE1Nyw3IEBAIGhhbmdjaGVja19nZXRfYWN0aW9uKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgaGFuZ2NoZWNrX2Fj Y3VtdWxhdGVfc2FtcGxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAtCQkJCQlz dHJ1Y3QgaW50ZWxfZW5naW5lX2hhbmdjaGVjayAqaGMpCj4gKwkJCQkJc3RydWN0IGhhbmdjaGVj ayAqaGMpCj4gIHsKPiAgCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IEk5MTVfRU5HSU5FX0RFQURf VElNRU9VVDsKPiAgCj4gQEAgLTI2NSwxOSArMjczLDE5IEBAIHN0YXRpYyB2b2lkIGk5MTVfaGFu Z2NoZWNrX2VsYXBzZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAJaW50ZWxfdW5jb3Jl X2FybV91bmNsYWltZWRfbW1pb19kZXRlY3Rpb24oZGV2X3ByaXYpOwo+ICAKPiAgCWZvcl9lYWNo X2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgewo+IC0JCXN0cnVjdCBpbnRlbF9lbmdpbmVf aGFuZ2NoZWNrIGhjOwo+ICsJCXN0cnVjdCBoYW5nY2hlY2sgaGM7Cj4gIAo+ICAJCWhhbmdjaGVj a19sb2FkX3NhbXBsZShlbmdpbmUsICZoYyk7Cj4gIAkJaGFuZ2NoZWNrX2FjY3VtdWxhdGVfc2Ft cGxlKGVuZ2luZSwgJmhjKTsKPiAgCQloYW5nY2hlY2tfc3RvcmVfc2FtcGxlKGVuZ2luZSwgJmhj KTsKPiAgCj4gLQkJaWYgKGVuZ2luZS0+aGFuZ2NoZWNrLnN0YWxsZWQpIHsKPiArCQlpZiAoaGMu c3RhbGxlZCkgewo+ICAJCQlodW5nIHw9IGludGVsX2VuZ2luZV9mbGFnKGVuZ2luZSk7Cj4gIAkJ CWlmIChoYy5hY3Rpb24gIT0gRU5HSU5FX0RFQUQpCj4gIAkJCQlzdHVjayB8PSBpbnRlbF9lbmdp bmVfZmxhZyhlbmdpbmUpOwo+ICAJCX0KPiAgCj4gLQkJaWYgKGVuZ2luZS0+aGFuZ2NoZWNrLndl ZGdlZCkKPiArCQlpZiAoaGMud2VkZ2VkKQo+ICAJCQl3ZWRnZWQgfD0gaW50ZWxfZW5naW5lX2Zs YWcoZW5naW5lKTsKPiAgCX0KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBpbmRleCAy OGQxODM0Mzk5NTIuLmMxMWNiZjM0MjU4ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5j Cj4gQEAgLTEzNiw2ICsxMzYsNyBAQAo+ICAjaW5jbHVkZSA8ZHJtL2k5MTVfZHJtLmg+Cj4gICNp bmNsdWRlICJpOTE1X2Rydi5oIgo+ICAjaW5jbHVkZSAiaTkxNV9nZW1fcmVuZGVyX3N0YXRlLmgi Cj4gKyNpbmNsdWRlICJpOTE1X3Jlc2V0LmgiCj4gICNpbmNsdWRlICJpOTE1X3ZncHUuaCIKPiAg I2luY2x1ZGUgImludGVsX2xyY19yZWcuaCIKPiAgI2luY2x1ZGUgImludGVsX21vY3MuaCIKPiBA QCAtMjg4LDcgKzI4OSw4IEBAIHN0YXRpYyB2b2lkIHVud2luZF93YV90YWlsKHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJxKQo+ICAJYXNzZXJ0X3JpbmdfdGFpbF92YWxpZChycS0+cmluZywgcnEtPnRh aWwpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBfX3Vud2luZF9pbmNvbXBsZXRlX3JlcXVlc3Rz KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArc3RhdGljIHN0cnVjdCBpOTE1X3Jl cXVlc3QgKgo+ICtfX3Vud2luZF9pbmNvbXBsZXRlX3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiAgewo+ICAJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsICpybiwgKmFj dGl2ZSA9IE5VTEw7Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFkICp1bmluaXRpYWxpemVkX3ZhcihwbCk7 Cj4gQEAgLTMzMCw2ICszMzIsOCBAQCBzdGF0aWMgdm9pZCBfX3Vud2luZF9pbmNvbXBsZXRlX3Jl cXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCQlsaXN0X21vdmVfdGFp bCgmYWN0aXZlLT5zY2hlZC5saW5rLAo+ICAJCQkgICAgICAgaTkxNV9zY2hlZF9sb29rdXBfcHJp b2xpc3QoZW5naW5lLCBwcmlvKSk7Cj4gIAl9Cj4gKwo+ICsJcmV0dXJuIGFjdGl2ZTsKPiAgfQo+ ICAKPiAgdm9pZAo+IEBAIC0xNzQzLDExICsxNzQ3LDkgQEAgc3RhdGljIGludCBnZW44X2luaXRf Y29tbW9uX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJcmV0dXJuIDA7 Cj4gIH0KPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoKPiAtZXhlY2xpc3RzX3Jl c2V0X3ByZXBhcmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICtzdGF0aWMgdm9p ZCBleGVjbGlzdHNfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3Rz ID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwo+IC0Jc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwg KmFjdGl2ZTsKPiAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gIAo+ICAJR0VNX1RSQUNFKCIlczog ZGVwdGg8LSVkXG4iLCBlbmdpbmUtPm5hbWUsCj4gQEAgLTE3NjMsNTkgKzE3NjUsMjEgQEAgZXhl Y2xpc3RzX3Jlc2V0X3ByZXBhcmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJ ICogcHJldmVudHMgdGhlIHJhY2UuCj4gIAkgKi8KPiAgCV9fdGFza2xldF9kaXNhYmxlX3N5bmNf b25jZSgmZXhlY2xpc3RzLT50YXNrbGV0KTsKPiArCUdFTV9CVUdfT04oIXJlc2V0X2luX3Byb2dy ZXNzKGV4ZWNsaXN0cykpOwo+ICAKPiArCS8qIEFuZCBmbHVzaCBhbnkgY3VycmVudCBkaXJlY3Qg c3VibWlzc2lvbi4gKi8KPiAgCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUtPnRpbWVsaW5lLmxv Y2ssIGZsYWdzKTsKPiAtCj4gLQkvKgo+IC0JICogV2Ugd2FudCB0byBmbHVzaCB0aGUgcGVuZGlu ZyBjb250ZXh0IHN3aXRjaGVzLCBoYXZpbmcgZGlzYWJsZWQKPiAtCSAqIHRoZSB0YXNrbGV0IGFi b3ZlLCB3ZSBjYW4gYXNzdW1lIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGV4ZWNsaXN0cy4KPiAt CSAqIEZvciB0aGlzIGFsbG93cyB1cyB0byBjYXRjaCB1cCB3aXRoIGFuIGluZmxpZ2h0IHByZWVt cHRpb24gZXZlbnQsCj4gLQkgKiBhbmQgYXZvaWQgYmxhbWluZyBhbiBpbm5vY2VudCByZXF1ZXN0 IGlmIHRoZSBzdGFsbCB3YXMgZHVlIHRvIHRoZQo+IC0JICogcHJlZW1wdGlvbiBpdHNlbGYuCj4g LQkgKi8KPiAtCXByb2Nlc3NfY3NiKGVuZ2luZSk7Cj4gLQo+IC0JLyoKPiAtCSAqIFRoZSBsYXN0 IGFjdGl2ZSByZXF1ZXN0IGNhbiB0aGVuIGJlIG5vIGxhdGVyIHRoYW4gdGhlIGxhc3QgcmVxdWVz dAo+IC0JICogbm93IGluIEVMU1BbMF0uIFNvIHNlYXJjaCBiYWNrd2FyZHMgZnJvbSB0aGVyZSwg c28gdGhhdCBpZiB0aGUgR1BVCj4gLQkgKiBoYXMgYWR2YW5jZWQgYmV5b25kIHRoZSBsYXN0IENT QiB1cGRhdGUsIGl0IHdpbGwgYmUgcGFyZG9uZWQuCj4gLQkgKi8KPiAtCWFjdGl2ZSA9IE5VTEw7 Cj4gLQlyZXF1ZXN0ID0gcG9ydF9yZXF1ZXN0KGV4ZWNsaXN0cy0+cG9ydCk7Cj4gLQlpZiAocmVx dWVzdCkgewo+IC0JCS8qCj4gLQkJICogUHJldmVudCB0aGUgYnJlYWRjcnVtYiBmcm9tIGFkdmFu Y2luZyBiZWZvcmUgd2UgZGVjaWRlCj4gLQkJICogd2hpY2ggcmVxdWVzdCBpcyBjdXJyZW50bHkg YWN0aXZlLgo+IC0JCSAqLwo+IC0JCWludGVsX2VuZ2luZV9zdG9wX2NzKGVuZ2luZSk7Cj4gLQo+ IC0JCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yZXZlcnNlKHJlcXVlc3QsCj4gLQkJCQkJCSAm ZW5naW5lLT50aW1lbGluZS5yZXF1ZXN0cywKPiAtCQkJCQkJIGxpbmspIHsKPiAtCQkJaWYgKF9f aTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChyZXF1ZXN0LAo+IC0JCQkJCQkgICAgIHJlcXVlc3QtPmds b2JhbF9zZXFubykpCj4gLQkJCQlicmVhazsKPiAtCj4gLQkJCWFjdGl2ZSA9IHJlcXVlc3Q7Cj4g LQkJfQo+IC0JfQo+IC0KPiArCXByb2Nlc3NfY3NiKGVuZ2luZSk7IC8qIGRyYWluIHByZWVtcHRp b24gZXZlbnRzICovCj4gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPnRpbWVsaW5l LmxvY2ssIGZsYWdzKTsKPiAtCj4gLQlyZXR1cm4gYWN0aXZlOwo+ICB9Cj4gIAo+IC1zdGF0aWMg dm9pZCBleGVjbGlzdHNfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0J CQkgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPiArc3RhdGljIHZvaWQgZXhlY2xp c3RzX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgYm9vbCBzdGFsbGVkKQo+ ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9 ICZlbmdpbmUtPmV4ZWNsaXN0czsKPiArCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ICAJdW5z aWduZWQgbG9uZyBmbGFnczsKPiAgCXUzMiAqcmVnczsKPiAgCj4gLQlHRU1fVFJBQ0UoIiVzIHJl cXVlc3QgZ2xvYmFsPSVkLCBjdXJyZW50PSVkXG4iLAo+IC0JCSAgZW5naW5lLT5uYW1lLCByZXF1 ZXN0ID8gcmVxdWVzdC0+Z2xvYmFsX3NlcW5vIDogMCwKPiAtCQkgIGludGVsX2VuZ2luZV9nZXRf c2Vxbm8oZW5naW5lKSk7Cj4gLQo+ICAJc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+dGltZWxp bmUubG9jaywgZmxhZ3MpOwo+ICAKPiAgCS8qCj4gQEAgLTE4MzAsMTIgKzE3OTQsMTggQEAgc3Rh dGljIHZvaWQgZXhlY2xpc3RzX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwK PiAgCWV4ZWNsaXN0c19jYW5jZWxfcG9ydF9yZXF1ZXN0cyhleGVjbGlzdHMpOwo+ICAKPiAgCS8q IFB1c2ggYmFjayBhbnkgaW5jb21wbGV0ZSByZXF1ZXN0cyBmb3IgcmVwbGF5IGFmdGVyIHRoZSBy ZXNldC4gKi8KPiAtCV9fdW53aW5kX2luY29tcGxldGVfcmVxdWVzdHMoZW5naW5lKTsKPiArCXJx ID0gX191bndpbmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhlbmdpbmUpOwo+ICAKPiAgCS8qIEZvbGxv d2luZyB0aGUgcmVzZXQsIHdlIG5lZWQgdG8gcmVsb2FkIHRoZSBDU0IgcmVhZC93cml0ZSBwb2lu dGVycyAqLwo+ICAJcmVzZXRfY3NiX3BvaW50ZXJzKCZlbmdpbmUtPmV4ZWNsaXN0cyk7Cj4gIAo+ IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT50aW1lbGluZS5sb2NrLCBmbGFncyk7 Cj4gKwlHRU1fVFJBQ0UoIiVzIHNlcW5vPSVkLCBjdXJyZW50PSVkLCBzdGFsbGVkPyAlc1xuIiwK PiArCQkgIGVuZ2luZS0+bmFtZSwKPiArCQkgIHJxID8gcnEtPmdsb2JhbF9zZXFubyA6IDAsCj4g KwkJICBpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSksCj4gKwkJICB5ZXNubyhzdGFsbGVk KSk7Cj4gKwlpZiAoIXJxKQo+ICsJCWdvdG8gb3V0X3VubG9jazsKPiAgCj4gIAkvKgo+ICAJICog SWYgdGhlIHJlcXVlc3Qgd2FzIGlubm9jZW50LCB3ZSBsZWF2ZSB0aGUgcmVxdWVzdCBpbiB0aGUg RUxTUAo+IEBAIC0xODQ4LDggKzE4MTgsOSBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfcmVzZXQo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAJICogYW5kIGhhdmUgdG8gYXQgbGVh c3QgcmVzdG9yZSB0aGUgUklORyByZWdpc3RlciBpbiB0aGUgY29udGV4dAo+ICAJICogaW1hZ2Ug YmFjayB0byB0aGUgZXhwZWN0ZWQgdmFsdWVzIHRvIHNraXAgb3ZlciB0aGUgZ3VpbHR5IHJlcXVl c3QuCj4gIAkgKi8KPiAtCWlmICghcmVxdWVzdCB8fCByZXF1ZXN0LT5mZW5jZS5lcnJvciAhPSAt RUlPKQo+IC0JCXJldHVybjsKPiArCWk5MTVfcmVzZXRfcmVxdWVzdChycSwgc3RhbGxlZCk7Cj4g KwlpZiAoIXN0YWxsZWQpCj4gKwkJZ290byBvdXRfdW5sb2NrOwo+ICAKPiAgCS8qCj4gIAkgKiBX ZSB3YW50IGEgc2ltcGxlIGNvbnRleHQgKyByaW5nIHRvIGV4ZWN1dGUgdGhlIGJyZWFkY3J1bWIg dXBkYXRlLgo+IEBAIC0xODU5LDI1ICsxODMwLDIzIEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19y ZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gIAkgKiBmdXR1cmUgcmVxdWVz dCB3aWxsIGJlIGFmdGVyIHVzZXJzcGFjZSBoYXMgaGFkIHRoZSBvcHBvcnR1bml0eQo+ICAJICog dG8gcmVjcmVhdGUgaXRzIG93biBzdGF0ZS4KPiAgCSAqLwo+IC0JcmVncyA9IHJlcXVlc3QtPmh3 X2NvbnRleHQtPmxyY19yZWdfc3RhdGU7Cj4gKwlyZWdzID0gcnEtPmh3X2NvbnRleHQtPmxyY19y ZWdfc3RhdGU7Cj4gIAlpZiAoZW5naW5lLT5waW5uZWRfZGVmYXVsdF9zdGF0ZSkgewo+ICAJCW1l bWNweShyZWdzLCAvKiBza2lwIHJlc3RvcmluZyB0aGUgdmFuaWxsYSBQUEhXU1AgKi8KPiAgCQkg ICAgICAgZW5naW5lLT5waW5uZWRfZGVmYXVsdF9zdGF0ZSArIExSQ19TVEFURV9QTiAqIFBBR0Vf U0laRSwKPiAgCQkgICAgICAgZW5naW5lLT5jb250ZXh0X3NpemUgLSBQQUdFX1NJWkUpOwo+ICAJ fQo+IC0JZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKHJlZ3MsCj4gLQkJCQkgcmVxdWVzdC0+Z2Vt X2NvbnRleHQsIGVuZ2luZSwgcmVxdWVzdC0+cmluZyk7Cj4gKwlleGVjbGlzdHNfaW5pdF9yZWdf c3RhdGUocmVncywgcnEtPmdlbV9jb250ZXh0LCBlbmdpbmUsIHJxLT5yaW5nKTsKPiAgCj4gIAkv KiBNb3ZlIHRoZSBSSU5HX0hFQUQgb250byB0aGUgYnJlYWRjcnVtYiwgcGFzdCB0aGUgaGFuZ2lu ZyBiYXRjaCAqLwo+IC0JcmVnc1tDVFhfUklOR19CVUZGRVJfU1RBUlQgKyAxXSA9IGk5MTVfZ2d0 dF9vZmZzZXQocmVxdWVzdC0+cmluZy0+dm1hKTsKPiAtCj4gLQlyZXF1ZXN0LT5yaW5nLT5oZWFk ID0gaW50ZWxfcmluZ193cmFwKHJlcXVlc3QtPnJpbmcsIHJlcXVlc3QtPnBvc3RmaXgpOwo+IC0J cmVnc1tDVFhfUklOR19IRUFEICsgMV0gPSByZXF1ZXN0LT5yaW5nLT5oZWFkOwo+ICsJcmVnc1tD VFhfUklOR19CVUZGRVJfU1RBUlQgKyAxXSA9IGk5MTVfZ2d0dF9vZmZzZXQocnEtPnJpbmctPnZt YSk7Cj4gIAo+IC0JaW50ZWxfcmluZ191cGRhdGVfc3BhY2UocmVxdWVzdC0+cmluZyk7Cj4gKwly cS0+cmluZy0+aGVhZCA9IGludGVsX3Jpbmdfd3JhcChycS0+cmluZywgcnEtPnBvc3RmaXgpOwo+ ICsJcmVnc1tDVFhfUklOR19IRUFEICsgMV0gPSBycS0+cmluZy0+aGVhZDsKPiArCWludGVsX3Jp bmdfdXBkYXRlX3NwYWNlKHJxLT5yaW5nKTsKPiAgCj4gLQkvKiBSZXNldCBXYUlkbGVMaXRlUmVz dG9yZTpiZHcsc2tsIGFzIHdlbGwgKi8KPiAtCXVud2luZF93YV90YWlsKHJlcXVlc3QpOwo+ICtv dXRfdW5sb2NrOgo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT50aW1lbGluZS5s b2NrLCBmbGFncyk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19yZXNldF9maW5p c2goc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IEBAIC0xODkwLDYgKzE4NTksNyBA QCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfcmVzZXRfZmluaXNoKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKPiAgCSAqIHRvIHNsZWVwIGJlZm9yZSB3ZSByZXN0YXJ0IGFuZCByZWxvYWQg YSBjb250ZXh0Lgo+ICAJICoKPiAgCSAqLwo+ICsJR0VNX0JVR19PTighcmVzZXRfaW5fcHJvZ3Jl c3MoZXhlY2xpc3RzKSk7Cj4gIAlpZiAoIVJCX0VNUFRZX1JPT1QoJmV4ZWNsaXN0cy0+cXVldWUu cmJfcm9vdCkpCj4gIAkJZXhlY2xpc3RzLT50YXNrbGV0LmZ1bmMoZXhlY2xpc3RzLT50YXNrbGV0 LmRhdGEpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3Zl cmxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jCj4gaW5kZXggYzgx ZGI4MWU0NDE2Li5mNjhjNzk3NTAwNmMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfb3ZlcmxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3Zl cmxheS5jCj4gQEAgLTQ3OCw4ICs0NzgsNiBAQCB2b2lkIGludGVsX292ZXJsYXlfcmVzZXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJaWYgKCFvdmVybGF5KQo+ICAJCXJl dHVybjsKPiAgCj4gLQlpbnRlbF9vdmVybGF5X3JlbGVhc2Vfb2xkX3ZpZChvdmVybGF5KTsKPiAt CgpIb3cgdG8gY29tcGVuc2F0ZSBmb3IgdGhpcz8KCj4gIAlvdmVybGF5LT5vbGRfeHNjYWxlID0g MDsKPiAgCW92ZXJsYXktPm9sZF95c2NhbGUgPSAwOwo+ICAJb3ZlcmxheS0+Y3J0YyA9IE5VTEw7 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwo+IGluZGV4IDI2YjcyNzRh MmQ0My4uNjYyOTA3ZTFhMjg2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3JpbmdidWZmZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jpbmdi dWZmZXIuYwo+IEBAIC0zMyw2ICszMyw3IEBACj4gIAo+ICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIK PiAgI2luY2x1ZGUgImk5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5oIgo+ICsjaW5jbHVkZSAiaTkxNV9y ZXNldC5oIgo+ICAjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfZHJ2 LmgiCj4gICNpbmNsdWRlICJpbnRlbF93b3JrYXJvdW5kcy5oIgo+IEBAIC03MDcsNTIgKzcwOCw4 MCBAQCBzdGF0aWMgaW50IGluaXRfcmluZ19jb21tb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAtc3RhdGljIHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJlc2V0X3ByZXBhcmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICtz dGF0aWMgdm9pZCByZXNldF9wcmVwYXJlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiAgewo+ICAJaW50ZWxfZW5naW5lX3N0b3BfY3MoZW5naW5lKTsKPiAtCXJldHVybiBpOTE1X2dl bV9maW5kX2FjdGl2ZV9yZXF1ZXN0KGVuZ2luZSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIHNr aXBfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiArc3RhdGljIHZvaWQgcmVzZXRf cmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIGJvb2wgc3RhbGxlZCkKPiAgewo+ IC0Jdm9pZCAqdmFkZHIgPSBycS0+cmluZy0+dmFkZHI7Cj4gKwlzdHJ1Y3QgaTkxNV90aW1lbGlu ZSAqdGwgPSAmZW5naW5lLT50aW1lbGluZTsKPiArCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnBvcywg KnJxOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAgCXUzMiBoZWFkOwo+ICAKPiAtCWhlYWQg PSBycS0+aW5maXg7Cj4gLQlpZiAocnEtPnBvc3RmaXggPCBoZWFkKSB7Cj4gLQkJbWVtc2V0MzIo dmFkZHIgKyBoZWFkLCBNSV9OT09QLAo+IC0JCQkgKHJxLT5yaW5nLT5zaXplIC0gaGVhZCkgLyBz aXplb2YodTMyKSk7Cj4gLQkJaGVhZCA9IDA7Cj4gKwlycSA9IE5VTEw7Cj4gKwlzcGluX2xvY2tf aXJxc2F2ZSgmdGwtPmxvY2ssIGZsYWdzKTsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAm dGwtPnJlcXVlc3RzLCBsaW5rKSB7Cj4gKwkJaWYgKCFfX2k5MTVfcmVxdWVzdF9jb21wbGV0ZWQo cG9zLCBwb3MtPmdsb2JhbF9zZXFubykpIHsKPiArCQkJcnEgPSBwb3M7Cj4gKwkJCWJyZWFrOwo+ ICsJCX0KPiAgCX0KPiAtCW1lbXNldDMyKHZhZGRyICsgaGVhZCwgTUlfTk9PUCwgKHJxLT5wb3N0 Zml4IC0gaGVhZCkgLyBzaXplb2YodTMyKSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHJlc2V0 X3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSkKPiAtewo+IC0JR0VNX1RSQUNFKCIlcyByZXF1ZXN0IGdsb2JhbD0lZCwgY3VycmVudD0l ZFxuIiwKPiAtCQkgIGVuZ2luZS0+bmFtZSwgcnEgPyBycS0+Z2xvYmFsX3NlcW5vIDogMCwKPiAt CQkgIGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKSk7Cj4gIAo+ICsJR0VNX1RSQUNFKCIl cyBzZXFubz0lZCwgY3VycmVudD0lZCwgc3RhbGxlZD8gJXNcbiIsCj4gKwkJICBlbmdpbmUtPm5h bWUsCj4gKwkJICBycSA/IHJxLT5nbG9iYWxfc2Vxbm8gOiAwLAo+ICsJCSAgaW50ZWxfZW5naW5l X2dldF9zZXFubyhlbmdpbmUpLAo+ICsJCSAgeWVzbm8oc3RhbGxlZCkpOwo+ICAJLyoKPiAtCSAq IFRyeSB0byByZXN0b3JlIHRoZSBsb2dpY2FsIEdQVSBzdGF0ZSB0byBtYXRjaCB0aGUgY29udGlu dWF0aW9uCj4gLQkgKiBvZiB0aGUgcmVxdWVzdCBxdWV1ZS4gSWYgd2Ugc2tpcCB0aGUgY29udGV4 dC9QRCByZXN0b3JlLCB0aGVuCj4gLQkgKiB0aGUgbmV4dCByZXF1ZXN0IG1heSB0cnkgdG8gZXhl Y3V0ZSBhc3N1bWluZyB0aGF0IGl0cyBjb250ZXh0Cj4gLQkgKiBpcyB2YWxpZCBhbmQgbG9hZGVk IG9uIHRoZSBHUFUgYW5kIHNvIG1heSB0cnkgdG8gYWNjZXNzIGludmFsaWQKPiAtCSAqIG1lbW9y eSwgcHJvbXB0aW5nIHJlcGVhdGVkIEdQVSBoYW5ncy4KPiArCSAqIFRoZSBndWlsdHkgcmVxdWVz dCB3aWxsIGdldCBza2lwcGVkIG9uIGEgaHVuZyBlbmdpbmUuCj4gIAkgKgo+IC0JICogSWYgdGhl IHJlcXVlc3Qgd2FzIGd1aWx0eSwgd2Ugc3RpbGwgcmVzdG9yZSB0aGUgbG9naWNhbCBzdGF0ZQo+ IC0JICogaW4gY2FzZSB0aGUgbmV4dCByZXF1ZXN0IHJlcXVpcmVzIGl0IChlLmcuIHRoZSBhbGlh c2luZyBwcGd0dCksCj4gLQkgKiBidXQgc2tpcCBvdmVyIHRoZSBodW5nIGJhdGNoLgo+ICsJICog VXNlcnMgb2YgY2xpZW50IGRlZmF1bHQgY29udGV4dHMgZG8gbm90IHJlbHkgb24gbG9naWNhbAo+ ICsJICogc3RhdGUgcHJlc2VydmVkIGJldHdlZW4gYmF0Y2hlcyBzbyBpdCBpcyBzYWZlIHRvIGV4 ZWN1dGUKPiArCSAqIHF1ZXVlZCByZXF1ZXN0cyBmb2xsb3dpbmcgdGhlIGhhbmcuIE5vbiBkZWZh dWx0IGNvbnRleHRzCj4gKwkgKiByZWx5IG9uIHByZXNlcnZlZCBzdGF0ZSwgc28gc2tpcHBpbmcg YSBiYXRjaCBsb3NlcyB0aGUKPiArCSAqIGV2b2x1dGlvbiBvZiB0aGUgc3RhdGUgYW5kIGl0IG5l ZWRzIHRvIGJlIGNvbnNpZGVyZWQgY29ycnVwdGVkLgo+ICsJICogRXhlY3V0aW5nIG1vcmUgcXVl dWVkIGJhdGNoZXMgb24gdG9wIG9mIGNvcnJ1cHRlZCBzdGF0ZSBpcwo+ICsJICogcmlza3kuIEJ1 dCB3ZSB0YWtlIHRoZSByaXNrIGJ5IHRyeWluZyB0byBhZHZhbmNlIHRocm91Z2gKPiArCSAqIHRo ZSBxdWV1ZWQgcmVxdWVzdHMgaW4gb3JkZXIgdG8gbWFrZSB0aGUgY2xpZW50IGJlaGF2aW91cgo+ ICsJICogbW9yZSBwcmVkaWN0YWJsZSBhcm91bmQgcmVzZXRzLCBieSBub3QgdGhyb3dpbmcgYXdh eSByYW5kb20KPiArCSAqIGFtb3VudCBvZiBiYXRjaGVzIGl0IGhhcyBwcmVwYXJlZCBmb3IgZXhl Y3V0aW9uLiBTb3BoaXN0aWNhdGVkCj4gKwkgKiBjbGllbnRzIGNhbiB1c2UgZ2VtX3Jlc2V0X3N0 YXRzX2lvY3RsIGFuZCBkbWEgZmVuY2Ugc3RhdHVzCj4gKwkgKiAoZXhwb3J0ZWQgdmlhIHN5bmNf ZmlsZSBpbmZvIGlvY3RsIG9uIGV4cGxpY2l0IGZlbmNlcykgdG8gb2JzZXJ2ZQo+ICsJICogd2hl biBpdCBsb3NlcyB0aGUgY29udGV4dCBzdGF0ZSBhbmQgc2hvdWxkIHJlYnVpbGQgYWNjb3JkaW5n bHkuCj4gIAkgKgo+IC0JICogSWYgdGhlIHJlcXVlc3Qgd2FzIGlubm9jZW50LCB3ZSB0cnkgdG8g cmVwbGF5IHRoZSByZXF1ZXN0IHdpdGgKPiAtCSAqIHRoZSByZXN0b3JlZCBjb250ZXh0Lgo+ICsJ ICogVGhlIGNvbnRleHQgYmFuLCBhbmQgdWx0aW1hdGVseSB0aGUgY2xpZW50IGJhbiwgbWVjaGFu aXNtIGFyZSBzYWZldHkKPiArCSAqIHZhbHZlcyBpZiBjbGllbnQgc3VibWlzc2lvbiBlbmRzIHVw IHJlc3VsdGluZyBpbiBub3RoaW5nIG1vcmUgdGhhbgo+ICsJICogc3Vic2VxdWVudCBoYW5ncy4K PiAgCSAqLwo+ICsKPiAgCWlmIChycSkgewo+IC0JCS8qIElmIHRoZSBycSBodW5nLCBqdW1wIHRv IGl0cyBicmVhZGNydW1iIGFuZCBza2lwIHRoZSBiYXRjaCAqLwo+IC0JCXJxLT5yaW5nLT5oZWFk ID0gaW50ZWxfcmluZ193cmFwKHJxLT5yaW5nLCBycS0+aGVhZCk7Cj4gLQkJaWYgKHJxLT5mZW5j ZS5lcnJvciA9PSAtRUlPKQo+IC0JCQlza2lwX3JlcXVlc3QocnEpOwo+ICsJCS8qCj4gKwkJICog VHJ5IHRvIHJlc3RvcmUgdGhlIGxvZ2ljYWwgR1BVIHN0YXRlIHRvIG1hdGNoIHRoZQo+ICsJCSAq IGNvbnRpbnVhdGlvbiBvZiB0aGUgcmVxdWVzdCBxdWV1ZS4gSWYgd2Ugc2tpcCB0aGUKPiArCQkg KiBjb250ZXh0L1BEIHJlc3RvcmUsIHRoZW4gdGhlIG5leHQgcmVxdWVzdCBtYXkgdHJ5IHRvIGV4 ZWN1dGUKPiArCQkgKiBhc3N1bWluZyB0aGF0IGl0cyBjb250ZXh0IGlzIHZhbGlkIGFuZCBsb2Fk ZWQgb24gdGhlIEdQVSBhbmQKPiArCQkgKiBzbyBtYXkgdHJ5IHRvIGFjY2VzcyBpbnZhbGlkIG1l bW9yeSwgcHJvbXB0aW5nIHJlcGVhdGVkIEdQVQo+ICsJCSAqIGhhbmdzLgo+ICsJCSAqCj4gKwkJ ICogSWYgdGhlIHJlcXVlc3Qgd2FzIGd1aWx0eSwgd2Ugc3RpbGwgcmVzdG9yZSB0aGUgbG9naWNh bAo+ICsJCSAqIHN0YXRlIGluIGNhc2UgdGhlIG5leHQgcmVxdWVzdCByZXF1aXJlcyBpdCAoZS5n LiB0aGUKPiArCQkgKiBhbGlhc2luZyBwcGd0dCksIGJ1dCBza2lwIG92ZXIgdGhlIGh1bmcgYmF0 Y2guCj4gKwkJICoKPiArCQkgKiBJZiB0aGUgcmVxdWVzdCB3YXMgaW5ub2NlbnQsIHdlIHRyeSB0 byByZXBsYXkgdGhlIHJlcXVlc3QKPiArCQkgKiB3aXRoIHRoZSByZXN0b3JlZCBjb250ZXh0Lgo+ ICsJCSAqLwo+ICsJCWk5MTVfcmVzZXRfcmVxdWVzdChycSwgc3RhbGxlZCk7Cj4gKwo+ICsJCUdF TV9CVUdfT04ocnEtPnJpbmcgIT0gZW5naW5lLT5idWZmZXIpOwo+ICsJCWhlYWQgPSBycS0+aGVh ZDsKPiArCX0gZWxzZSB7Cj4gKwkJaGVhZCA9IGVuZ2luZS0+YnVmZmVyLT50YWlsOwo+ICAJfQo+ ICsJZW5naW5lLT5idWZmZXItPmhlYWQgPSBpbnRlbF9yaW5nX3dyYXAoZW5naW5lLT5idWZmZXIs IGhlYWQpOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRsLT5sb2NrLCBmbGFncyk7 Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIHJlc2V0X2ZpbmlzaChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jp bmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+IGlu ZGV4IGMzZWYwZjliZjMyMS4uMzJlZDQ0MTk2YzFhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuaAo+IEBAIC0xMjAsMTMgKzEyMCw4IEBAIHN0cnVjdCBpbnRlbF9p bnN0ZG9uZSB7Cj4gIHN0cnVjdCBpbnRlbF9lbmdpbmVfaGFuZ2NoZWNrIHsKPiAgCXU2NCBhY3Ro ZDsKPiAgCXUzMiBzZXFubzsKPiAtCWVudW0gaW50ZWxfZW5naW5lX2hhbmdjaGVja19hY3Rpb24g YWN0aW9uOwo+ICAJdW5zaWduZWQgbG9uZyBhY3Rpb25fdGltZXN0YW1wOwo+IC0JaW50IGRlYWRs b2NrOwo+ICAJc3RydWN0IGludGVsX2luc3Rkb25lIGluc3Rkb25lOwo+IC0Jc3RydWN0IGk5MTVf cmVxdWVzdCAqYWN0aXZlX3JlcXVlc3Q7Cj4gLQlib29sIHN0YWxsZWQ6MTsKPiAtCWJvb2wgd2Vk Z2VkOjE7Cj4gIH07Cj4gIAo+ICBzdHJ1Y3QgaW50ZWxfcmluZyB7Cj4gQEAgLTQ0NCw5ICs0Mzks OCBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIHsKPiAgCWludAkJKCppbml0X2h3KShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICAKPiAgCXN0cnVjdCB7Cj4gLQkJc3RydWN0IGk5 MTVfcmVxdWVzdCAqKCpwcmVwYXJlKShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ IC0JCXZvaWQgKCpyZXNldCkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkg ICAgICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSk7Cj4gKwkJdm9pZCAoKnByZXBhcmUpKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gKwkJdm9pZCAoKnJlc2V0KShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsIGJvb2wgc3RhbGxlZCk7Cj4gIAkJdm9pZCAoKmZpbmlzaCko c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgCX0gcmVzZXQ7Cj4gIAo+IEBAIC0x MDE4LDYgKzEwMTIsMTMgQEAgZ2VuOF9lbWl0X2dndHRfd3JpdGUodTMyICpjcywgdTMyIHZhbHVl LCB1MzIgZ3R0X29mZnNldCkKPiAgCXJldHVybiBjczsKPiAgfQo+ICAKPiArc3RhdGljIGlubGlu ZSB2b2lkIGludGVsX2VuZ2luZV9yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs Cj4gKwkJCQkgICAgICBib29sIHN0YWxsZWQpCj4gK3sKPiArCWlmIChlbmdpbmUtPnJlc2V0LnJl c2V0KQo+ICsJCWVuZ2luZS0+cmVzZXQucmVzZXQoZW5naW5lLCBzdGFsbGVkKTsKPiArfQo+ICsK PiAgdm9pZCBpbnRlbF9lbmdpbmVzX3Nhbml0aXplKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1LCBib29sIGZvcmNlKTsKPiAgCj4gIGJvb2wgaW50ZWxfZW5naW5lX2lzX2lkbGUoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2ludGVsX2hhbmdjaGVjay5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL2ludGVsX2hhbmdjaGVjay5jCj4gaW5kZXggMTI1NTBiNTVjNDJmLi42NzQzMTM1 NWNkNmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVs X2hhbmdjaGVjay5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVs X2hhbmdjaGVjay5jCj4gQEAgLTM2Myw5ICszNjMsNyBAQCBzdGF0aWMgaW50IGlndF9nbG9iYWxf cmVzZXQodm9pZCAqYXJnKQo+ICAJLyogQ2hlY2sgdGhhdCB3ZSBjYW4gaXNzdWUgYSBnbG9iYWwg R1BVIHJlc2V0ICovCj4gIAo+ICAJaWd0X2dsb2JhbF9yZXNldF9sb2NrKGk5MTUpOwo+IC0Jc2V0 X2JpdChJOTE1X1JFU0VUX0hBTkRPRkYsICZpOTE1LT5ncHVfZXJyb3IuZmxhZ3MpOwo+ICAKPiAt CW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAJcmVzZXRfY291bnQgPSBp OTE1X3Jlc2V0X2NvdW50KCZpOTE1LT5ncHVfZXJyb3IpOwo+ICAKPiAgCWk5MTVfcmVzZXQoaTkx NSwgQUxMX0VOR0lORVMsIE5VTEwpOwo+IEBAIC0zNzQsOSArMzcyLDcgQEAgc3RhdGljIGludCBp Z3RfZ2xvYmFsX3Jlc2V0KHZvaWQgKmFyZykKPiAgCQlwcl9lcnIoIk5vIEdQVSByZXNldCByZWNv cmRlZCFcbiIpOwo+ICAJCWVyciA9IC1FSU5WQUw7Cj4gIAl9Cj4gLQltdXRleF91bmxvY2soJmk5 MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAKPiAtCUdFTV9CVUdfT04odGVzdF9iaXQoSTkxNV9S RVNFVF9IQU5ET0ZGLCAmaTkxNS0+Z3B1X2Vycm9yLmZsYWdzKSk7Cj4gIAlpZ3RfZ2xvYmFsX3Jl c2V0X3VubG9jayhpOTE1KTsKPiAgCj4gIAlpZiAoaTkxNV90ZXJtaW5hbGx5X3dlZGdlZCgmaTkx NS0+Z3B1X2Vycm9yKSkKPiBAQCAtMzk5LDkgKzM5NSw3IEBAIHN0YXRpYyBpbnQgaWd0X3dlZGdl ZF9yZXNldCh2b2lkICphcmcpCj4gIAlpOTE1X2dlbV9zZXRfd2VkZ2VkKGk5MTUpOwo+ICAJR0VN X0JVR19PTighaTkxNV90ZXJtaW5hbGx5X3dlZGdlZCgmaTkxNS0+Z3B1X2Vycm9yKSk7Cj4gIAo+ IC0Jc2V0X2JpdChJOTE1X1JFU0VUX0hBTkRPRkYsICZpOTE1LT5ncHVfZXJyb3IuZmxhZ3MpOwo+ ICAJaTkxNV9yZXNldChpOTE1LCBBTExfRU5HSU5FUywgTlVMTCk7Cj4gLQlHRU1fQlVHX09OKHRl c3RfYml0KEk5MTVfUkVTRVRfSEFORE9GRiwgJmk5MTUtPmdwdV9lcnJvci5mbGFncykpOwo+ICAK PiAgCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUsIHdha2VyZWYpOwo+ICAJbXV0ZXhfdW5sb2Nr KCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiBAQCAtNTExLDcgKzUwNSw3IEBAIHN0YXRpYyBp bnQgX19pZ3RfcmVzZXRfZW5naW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBib29s IGFjdGl2ZSkKPiAgCQkJCWJyZWFrOwo+ICAJCQl9Cj4gIAo+IC0JCQlpZiAoIXdhaXRfZm9yX2lk bGUoZW5naW5lKSkgewo+ICsJCQlpZiAoIWk5MTVfcmVzZXRfZmx1c2goaTkxNSkpIHsKPiAgCQkJ CXN0cnVjdCBkcm1fcHJpbnRlciBwID0KPiAgCQkJCQlkcm1faW5mb19wcmludGVyKGk5MTUtPmRy bS5kZXYpOwo+ICAKPiBAQCAtOTAzLDIwICs4OTcsMTMgQEAgc3RhdGljIGludCBpZ3RfcmVzZXRf ZW5naW5lcyh2b2lkICphcmcpCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIHUzMiBm YWtlX2hhbmdjaGVjayhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyIG1hc2spCj4gK3N0YXRp YyB1MzIgZmFrZV9oYW5nY2hlY2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHUzMiBt YXNrKQo+ICB7Cj4gLQlzdHJ1Y3QgaTkxNV9ncHVfZXJyb3IgKmVycm9yID0gJnJxLT5pOTE1LT5n cHVfZXJyb3I7Cj4gLQl1MzIgcmVzZXRfY291bnQgPSBpOTE1X3Jlc2V0X2NvdW50KGVycm9yKTsK PiAtCj4gLQllcnJvci0+c3RhbGxlZF9tYXNrID0gbWFzazsKPiAtCj4gLQkvKiBzZXRfYml0KCkg bXVzdCBiZSBhZnRlciB3ZSBoYXZlIHNldHVwIHRoZSBiYWNrY2hhbm5lbCAobWFzaykgKi8KPiAt CXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwo+IC0Jc2V0X2JpdChJOTE1X1JFU0VUX0hBTkRPRkYs ICZlcnJvci0+ZmxhZ3MpOwo+ICsJdTMyIGNvdW50ID0gaTkxNV9yZXNldF9jb3VudCgmaTkxNS0+ Z3B1X2Vycm9yKTsKPiAgCj4gLQl3YWtlX3VwX2FsbCgmZXJyb3ItPndhaXRfcXVldWUpOwo+ICsJ aTkxNV9yZXNldChpOTE1LCBtYXNrLCBOVUxMKTsKPiAgCj4gLQlyZXR1cm4gcmVzZXRfY291bnQ7 Cj4gKwlyZXR1cm4gY291bnQ7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgaWd0X3Jlc2V0X3dhaXQo dm9pZCAqYXJnKQo+IEBAIC05NjIsNyArOTQ5LDcgQEAgc3RhdGljIGludCBpZ3RfcmVzZXRfd2Fp dCh2b2lkICphcmcpCj4gIAkJZ290byBvdXRfcnE7Cj4gIAl9Cj4gIAo+IC0JcmVzZXRfY291bnQg PSBmYWtlX2hhbmdjaGVjayhycSwgQUxMX0VOR0lORVMpOwo+ICsJcmVzZXRfY291bnQgPSBmYWtl X2hhbmdjaGVjayhpOTE1LCBBTExfRU5HSU5FUyk7Cj4gIAo+ICAJdGltZW91dCA9IGk5MTVfcmVx dWVzdF93YWl0KHJxLCBJOTE1X1dBSVRfTE9DS0VELCAxMCk7Cj4gIAlpZiAodGltZW91dCA8IDAp IHsKPiBAQCAtOTcyLDcgKzk1OSw2IEBAIHN0YXRpYyBpbnQgaWd0X3Jlc2V0X3dhaXQodm9pZCAq YXJnKQo+ICAJCWdvdG8gb3V0X3JxOwo+ICAJfQo+ICAKPiAtCUdFTV9CVUdfT04odGVzdF9iaXQo STkxNV9SRVNFVF9IQU5ET0ZGLCAmaTkxNS0+Z3B1X2Vycm9yLmZsYWdzKSk7Cj4gIAlpZiAoaTkx NV9yZXNldF9jb3VudCgmaTkxNS0+Z3B1X2Vycm9yKSA9PSByZXNldF9jb3VudCkgewo+ICAJCXBy X2VycigiTm8gR1BVIHJlc2V0IHJlY29yZGVkIVxuIik7Cj4gIAkJZXJyID0gLUVJTlZBTDsKPiBA QCAtMTE2Miw3ICsxMTQ4LDcgQEAgc3RhdGljIGludCBfX2lndF9yZXNldF9ldmljdF92bWEoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gIAl9Cj4gIAo+ICBvdXRfcmVzZXQ6Cj4gLQlm YWtlX2hhbmdjaGVjayhycSwgaW50ZWxfZW5naW5lX2ZsYWcocnEtPmVuZ2luZSkpOwo+ICsJZmFr ZV9oYW5nY2hlY2socnEtPmk5MTUsIGludGVsX2VuZ2luZV9mbGFnKHJxLT5lbmdpbmUpKTsKPiAg Cj4gIAlpZiAodHNrKSB7Cj4gIAkJc3RydWN0IGlndF93ZWRnZV9tZSB3Owo+IEBAIC0xMzQxLDEy ICsxMzI3LDcgQEAgc3RhdGljIGludCBpZ3RfcmVzZXRfcXVldWUodm9pZCAqYXJnKQo+ICAJCQkJ Z290byBmaW5pOwo+ICAJCQl9Cj4gIAo+IC0JCQlyZXNldF9jb3VudCA9IGZha2VfaGFuZ2NoZWNr KHByZXYsIEVOR0lORV9NQVNLKGlkKSk7Cj4gLQo+IC0JCQlpOTE1X3Jlc2V0KGk5MTUsIEVOR0lO RV9NQVNLKGlkKSwgTlVMTCk7Cj4gLQo+IC0JCQlHRU1fQlVHX09OKHRlc3RfYml0KEk5MTVfUkVT RVRfSEFORE9GRiwKPiAtCQkJCQkgICAgJmk5MTUtPmdwdV9lcnJvci5mbGFncykpOwo+ICsJCQly ZXNldF9jb3VudCA9IGZha2VfaGFuZ2NoZWNrKGk5MTUsIEVOR0lORV9NQVNLKGlkKSk7Cj4gIAo+ ICAJCQlpZiAocHJldi0+ZmVuY2UuZXJyb3IgIT0gLUVJTykgewo+ICAJCQkJcHJfZXJyKCJHUFUg cmVzZXQgbm90IHJlY29yZGVkIG9uIGhhbmdpbmcgcmVxdWVzdCBbZmVuY2UuZXJyb3I9JWRdIVxu IiwKPiBAQCAtMTU2NSw2ICsxNTQ2LDcgQEAgc3RhdGljIGludCBpZ3RfYXRvbWljX3Jlc2V0X2Vu Z2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gIAkJcHJfZXJyKCIlcyglcyk6 IEZhaWxlZCB0byBzdGFydCByZXF1ZXN0ICVsbHgsIGF0ICV4XG4iLAo+ICAJCSAgICAgICBfX2Z1 bmNfXywgZW5naW5lLT5uYW1lLAo+ICAJCSAgICAgICBycS0+ZmVuY2Uuc2Vxbm8sIGh3c19zZXFu bygmaCwgcnEpKTsKPiArCQlpOTE1X2dlbV9zZXRfd2VkZ2VkKGk5MTUpOwo+ICAJCWVyciA9IC1F SU87Cj4gIAl9Cj4gIAo+IEBAIC0xNTg4LDcgKzE1NzAsNiBAQCBzdGF0aWMgaW50IGlndF9hdG9t aWNfcmVzZXRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgc3RhdGlj IHZvaWQgZm9yY2VfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIHsKPiAg CWk5MTVfZ2VtX3NldF93ZWRnZWQoaTkxNSk7Cj4gLQlzZXRfYml0KEk5MTVfUkVTRVRfSEFORE9G RiwgJmk5MTUtPmdwdV9lcnJvci5mbGFncyk7Cj4gIAlpOTE1X3Jlc2V0KGk5MTUsIDAsIE5VTEwp Owo+ICB9Cj4gIAo+IEBAIC0xNjE4LDYgKzE1OTksMjYgQEAgc3RhdGljIGludCBpZ3RfYXRvbWlj X3Jlc2V0KHZvaWQgKmFyZykKPiAgCWlmIChpOTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKCZpOTE1LT5n cHVfZXJyb3IpKQo+ICAJCWdvdG8gdW5sb2NrOwo+ICAKPiArCWlmIChpbnRlbF9oYXNfZ3B1X3Jl c2V0KGk5MTUpKSB7Cj4gKwkJY29uc3QgdHlwZW9mKCpwaGFzZXMpICpwOwo+ICsKPiArCQlmb3Ig KHAgPSBwaGFzZXM7IHAtPm5hbWU7IHArKykgewo+ICsJCQlHRU1fVFJBQ0UoImludGVsX2dwdV9y ZXNldCB1bmRlciAlc1xuIiwgcC0+bmFtZSk7Cj4gKwo+ICsJCQlwLT5jcml0aWNhbF9zZWN0aW9u X2JlZ2luKCk7Cj4gKwkJCWVyciA9IGludGVsX2dwdV9yZXNldChpOTE1LCBBTExfRU5HSU5FUyk7 Cj4gKwkJCXAtPmNyaXRpY2FsX3NlY3Rpb25fZW5kKCk7Cj4gKwo+ICsJCQlpZiAoZXJyKSB7Cj4g KwkJCQlwcl9lcnIoImludGVsX2dwdV9yZXNldCBmYWlsZWQgdW5kZXIgJXNcbiIsCj4gKwkJCQkg ICAgICAgcC0+bmFtZSk7Cj4gKwkJCQlnb3RvIG91dDsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJ Zm9yY2VfcmVzZXQoaTkxNSk7Cj4gKwl9Cj4gKwo+ICAJaWYgKGludGVsX2hhc19yZXNldF9lbmdp bmUoaTkxNSkpIHsKPiAgCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gIAkJZW51 bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2ludGVsX3dvcmthcm91bmRzLmMKPiBpbmRleCBhOGNhYzU2YmU4MzUuLmIxNWM0ZjI2 YzU5MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxf d29ya2Fyb3VuZHMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRl bF93b3JrYXJvdW5kcy5jCj4gQEAgLTIxNCw3ICsyMTQsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3do aXRlbGlzdChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICAKPiAgc3RhdGljIGludCBk b19kZXZpY2VfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4gLQlz ZXRfYml0KEk5MTVfUkVTRVRfSEFORE9GRiwgJmVuZ2luZS0+aTkxNS0+Z3B1X2Vycm9yLmZsYWdz KTsKPiAgCWk5MTVfcmVzZXQoZW5naW5lLT5pOTE1LCBFTkdJTkVfTUFTSyhlbmdpbmUtPmlkKSwg ImxpdmVfd29ya2Fyb3VuZHMiKTsKPiAgCXJldHVybiAwOwo+ICB9Cj4gQEAgLTM5NCw3ICszOTMs NiBAQCBzdGF0aWMgaW50Cj4gIGxpdmVfZ3B1X3Jlc2V0X2d0X2VuZ2luZV93b3JrYXJvdW5kcyh2 b2lkICphcmcpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOwo+ IC0Jc3RydWN0IGk5MTVfZ3B1X2Vycm9yICplcnJvciA9ICZpOTE1LT5ncHVfZXJyb3I7Cj4gIAlp bnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAgCXN0cnVjdCB3YV9saXN0cyBsaXN0czsKPiAgCWJv b2wgb2s7Cj4gQEAgLTQxMyw3ICs0MTEsNiBAQCBsaXZlX2dwdV9yZXNldF9ndF9lbmdpbmVfd29y a2Fyb3VuZHModm9pZCAqYXJnKQo+ICAJaWYgKCFvaykKPiAgCQlnb3RvIG91dDsKPiAgCj4gLQlz ZXRfYml0KEk5MTVfUkVTRVRfSEFORE9GRiwgJmVycm9yLT5mbGFncyk7Cj4gIAlpOTE1X3Jlc2V0 KGk5MTUsIEFMTF9FTkdJTkVTLCAibGl2ZV93b3JrYXJvdW5kcyIpOwo+ICAKPiAgCW9rID0gdmVy aWZ5X2d0X2VuZ2luZV93YShpOTE1LCAmbGlzdHMsICJhZnRlciByZXNldCIpOwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMKPiBpbmRleCA1 NDc3YWQ0YTdlN2QuLjhhYjVhMjY4OGEwYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMKPiBAQCAtNTgsOCArNTgsOCBAQCBzdGF0 aWMgdm9pZCBtb2NrX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAlp OTE1X2dlbV9jb250ZXh0c19sb3N0KGk5MTUpOwo+ICAJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPiAgCj4gLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmk5MTUtPmd0 LnJldGlyZV93b3JrKTsKPiAtCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaTkxNS0+Z3QuaWRs ZV93b3JrKTsKPiArCWRyYWluX2RlbGF5ZWRfd29yaygmaTkxNS0+Z3QucmV0aXJlX3dvcmspOwo+ ICsJZHJhaW5fZGVsYXllZF93b3JrKCZpOTE1LT5ndC5pZGxlX3dvcmspOwo+ICAJaTkxNV9nZW1f ZHJhaW5fd29ya3F1ZXVlKGk5MTUpOwo+ICAKPiAgCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+IC0tIAo+IDIuMjAuMQo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=