From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 08/39] drm/i915: Create/destroy VM (ppGTT) for use with contexts Date: Thu, 14 Mar 2019 16:07:17 +0000 Message-ID: <6a261758-dcd3-b601-8eb9-911214b73e4f@linux.intel.com> References: <20190313144401.17735-1-chris@chris-wilson.co.uk> <20190313144401.17735-8-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 10D326E167 for ; Thu, 14 Mar 2019 16:07:21 +0000 (UTC) In-Reply-To: <20190313144401.17735-8-chris@chris-wilson.co.uk> Content-Language: en-US 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 Ck9uIDEzLzAzLzIwMTkgMTQ6NDMsIENocmlzIFdpbHNvbiB3cm90ZToKPiBJbiBwcmVwYXJhdGlv biB0byBtYWtpbmcgdGhlIHBwR1RUIGJpbmRpbmcgZm9yIGEgY29udGV4dCBleHBsaWNpdCAodG8K PiBmYWNpbGl0YXRlIHJldXNpbmcgdGhlIHNhbWUgcHBHVFQgYmV0d2VlbiBkaWZmZXJlbnQgY29u dGV4dHMpLCBhbGxvdyB0aGUKPiB1c2VyIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBuYW1lZCBwcEdU VC4KPiAKPiB2MjogUmVwbGFjZSBnbG9iYWwgYmFycmllciBmb3Igc3dhcHBpbmcgb3ZlciB0aGUg cHBndHQgYW5kIHRsYnMgd2l0aCBhCj4gbG9jYWwgY29udGV4dCBiYXJyaWVyIChUdnJ0a28pCj4g djM6IHNlcmlhbGlzZSB3aXRoIHN0cnVjdF9tdXRleDsgaXQncyBsYXp5IGJ1dCByZXF1aXJlZCBk YW1taXQKPiB2NDogUmV3cml0ZSBpZ3RfY3R4X3NoYXJlZF9leGVjIHRvIGJlIG1vcmUgZGlmZmVy ZW50IChhaW1lZCB0byBiZSBtb3JlCj4gc2ltaWxhcmx5LCB0dXJuZWQgb3V0IGRpZmZlcmVudCEp Cj4gCj4gdjI6IEZpeCB1cCB0ZXN0IHVud2luZCBmb3IgYWxpYXNpbmctcHBndHQgKHNuYikKPiB2 MzogVGlnaHRlbiBsYW5ndWFnZSBmb3IgdWFwaSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRy b2wuCj4gdjQ6IFBhdGNoIHRoZSBjb250ZXh0IGltYWdlIGZvciBydW50aW1lIHBwZ3R0IHN3aXRj aGluZyEKCi1FQ0hBTkdFTE9HTk9UTU9OT1RPTklDIDopKQoKPiBUZXN0Y2FzZTogaWd0L2dlbV9j dHhfcGFyYW0vdm0KPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdp bHNvbi5jby51az4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNv bT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICAgICAg ICB8ICAgMiArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAg ICAgfCAgIDMgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jICAg ICAgIHwgMzIyICsrKysrKysrKysrKysrKysrLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fY29udGV4dC5oICAgICAgIHwgICA1ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2d0dC5jICAgICAgICAgICB8ICAzMCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZ3R0LmggICAgICAgICAgIHwgIDE3ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jICAgfCAgIDEgLQo+ICAgLi4uL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jIHwgMjM3ICsrKysrKysrKystLS0KPiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYyB8ICAgMSAtCj4gICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19jb250ZXh0LmMgfCAgIDggKy0KPiAgIGlu Y2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAgICAgICAgICB8ICA0MyArKysKPiAg IDExIGZpbGVzIGNoYW5nZWQsIDU5NCBpbnNlcnRpb25zKCspLCA3NSBkZWxldGlvbnMoLSkKPiAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBpbmRleCAwZDc0MzkwN2U3YmMuLjVkNTNlZmM0YzVk OSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IEBAIC0zMTIxLDYgKzMxMjEsOCBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIGk5MTVfaW9jdGxzW10gPSB7Cj4gICAJ RFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9QRVJGX0FERF9DT05GSUcsIGk5MTVfcGVyZl9hZGRfY29u ZmlnX2lvY3RsLCBEUk1fVU5MT0NLRUR8RFJNX1JFTkRFUl9BTExPVyksCj4gICAJRFJNX0lPQ1RM X0RFRl9EUlYoSTkxNV9QRVJGX1JFTU9WRV9DT05GSUcsIGk5MTVfcGVyZl9yZW1vdmVfY29uZmln X2lvY3RsLCBEUk1fVU5MT0NLRUR8RFJNX1JFTkRFUl9BTExPVyksCj4gICAJRFJNX0lPQ1RMX0RF Rl9EUlYoSTkxNV9RVUVSWSwgaTkxNV9xdWVyeV9pb2N0bCwgRFJNX1VOTE9DS0VEfERSTV9SRU5E RVJfQUxMT1cpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fVk1fQ1JFQVRFLCBpOTE1 X2dlbV92bV9jcmVhdGVfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAo+ICsJRFJNX0lPQ1RMX0RF Rl9EUlYoSTkxNV9HRU1fVk1fREVTVFJPWSwgaTkxNV9nZW1fdm1fZGVzdHJveV9pb2N0bCwgRFJN X1JFTkRFUl9BTExPVyksCj4gICB9Owo+ICAgCj4gICBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIg ZHJpdmVyID0gewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IGRjNjMzMDMyMjVmYy4u NDY3NTM1NTkxNmZmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTIxOCw2ICsy MTgsOSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlIHsKPiAgIAl9IG1tOwo+ICAgCXN0 cnVjdCBpZHIgY29udGV4dF9pZHI7Cj4gICAKPiArCXN0cnVjdCBtdXRleCB2bV9sb2NrOwo+ICsJ c3RydWN0IGlkciB2bV9pZHI7Cj4gKwo+ICAgCXVuc2lnbmVkIGludCBic2RfZW5naW5lOwo+ICAg Cj4gICAvKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250 ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPiBpbmRleCA0 YWY1MWI2ODljYmQuLjcxNDY0YWU5MWQ2MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9jb250ZXh0LmMKPiBAQCAtMTIwLDEyICsxMjAsMTUgQEAgc3RhdGljIHZvaWQgbHV0X2Ns b3NlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gICAJCWxpc3RfZGVsKCZsdXQtPm9i al9saW5rKTsKPiAgIAkJaTkxNV9sdXRfaGFuZGxlX2ZyZWUobHV0KTsKPiAgIAl9Cj4gKwlJTklU X0xJU1RfSEVBRCgmY3R4LT5oYW5kbGVzX2xpc3QpOwo+ICAgCj4gICAJcmN1X3JlYWRfbG9jaygp Owo+ICAgCXJhZGl4X3RyZWVfZm9yX2VhY2hfc2xvdChzbG90LCAmY3R4LT5oYW5kbGVzX3ZtYSwg Jml0ZXIsIDApIHsKPiAgIAkJc3RydWN0IGk5MTVfdm1hICp2bWEgPSByY3VfZGVyZWZlcmVuY2Vf cmF3KCpzbG90KTsKPiAgIAo+ICAgCQlyYWRpeF90cmVlX2l0ZXJfZGVsZXRlKCZjdHgtPmhhbmRs ZXNfdm1hLCAmaXRlciwgc2xvdCk7Cj4gKwo+ICsJCXZtYS0+b3Blbl9jb3VudC0tOwo+ICAgCQlf X2k5MTVfZ2VtX29iamVjdF9yZWxlYXNlX3VubGVzc19hY3RpdmUodm1hLT5vYmopOwo+ICAgCX0K PiAgIAlyY3VfcmVhZF91bmxvY2soKTsKPiBAQCAtMzA2LDcgKzMwOSw3IEBAIHN0YXRpYyB2b2lk IGNvbnRleHRfY2xvc2Uoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPiAgIAkgKi8KPiAg IAlsdXRfY2xvc2UoY3R4KTsKPiAgIAlpZiAoY3R4LT5wcGd0dCkKPiAtCQlpOTE1X3BwZ3R0X2Ns b3NlKCZjdHgtPnBwZ3R0LT52bSk7Cj4gKwkJaTkxNV9wcGd0dF9jbG9zZShjdHgtPnBwZ3R0KTsK PiAgIAo+ICAgCWN0eC0+ZmlsZV9wcml2ID0gRVJSX1BUUigtRUJBREYpOwo+ICAgCWk5MTVfZ2Vt X2NvbnRleHRfcHV0KGN0eCk7Cj4gQEAgLTQxNyw2ICs0MjAsMzIgQEAgc3RhdGljIHZvaWQgX19k ZXN0cm95X2h3X2NvbnRleHQoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgIAljb250 ZXh0X2Nsb3NlKGN0eCk7Cj4gICB9Cj4gICAKPiArc3RhdGljIHN0cnVjdCBpOTE1X2h3X3BwZ3R0 ICoKPiArX19zZXRfcHBndHQoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwgc3RydWN0IGk5 MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqb2xkID0g Y3R4LT5wcGd0dDsKPiArCj4gKwlpOTE1X3BwZ3R0X29wZW4ocHBndHQpOwo+ICsJY3R4LT5wcGd0 dCA9IGk5MTVfcHBndHRfZ2V0KHBwZ3R0KTsKPiArCj4gKwljdHgtPmRlc2NfdGVtcGxhdGUgPSBk ZWZhdWx0X2Rlc2NfdGVtcGxhdGUoY3R4LT5pOTE1LCBwcGd0dCk7Cj4gKwo+ICsJcmV0dXJuIG9s ZDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19hc3NpZ25fcHBndHQoc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmN0eCwKPiArCQkJICAgc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICt7 Cj4gKwlpZiAocHBndHQgPT0gY3R4LT5wcGd0dCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJcHBndHQg PSBfX3NldF9wcGd0dChjdHgsIHBwZ3R0KTsKPiArCWlmIChwcGd0dCkgewo+ICsJCWk5MTVfcHBn dHRfY2xvc2UocHBndHQpOwo+ICsJCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKPiArCX0KPiArfQo+ ICsKPiAgIHN0YXRpYyBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqCj4gICBpOTE1X2dlbV9jcmVh dGVfY29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICAJCQlzdHJ1 Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYpCj4gQEAgLTQ0Myw4ICs0NzIsOCBA QCBpOTE1X2dlbV9jcmVhdGVfY29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gICAJCQlyZXR1cm4gRVJSX0NBU1QocHBndHQpOwo+ICAgCQl9Cj4gICAKPiAtCQljdHgt PnBwZ3R0ID0gcHBndHQ7Cj4gLQkJY3R4LT5kZXNjX3RlbXBsYXRlID0gZGVmYXVsdF9kZXNjX3Rl bXBsYXRlKGRldl9wcml2LCBwcGd0dCk7Cj4gKwkJX19hc3NpZ25fcHBndHQoY3R4LCBwcGd0dCk7 Cj4gKwkJaTkxNV9wcGd0dF9wdXQocHBndHQpOwo+ICAgCX0KPiAgIAo+ICAgCXRyYWNlX2k5MTVf Y29udGV4dF9jcmVhdGUoY3R4KTsKPiBAQCAtNjI1LDE5ICs2NTQsMjkgQEAgc3RhdGljIGludCBj b250ZXh0X2lkcl9jbGVhbnVwKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqZGF0YSkKPiAgIAlyZXR1 cm4gMDsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50IHZtX2lkcl9jbGVhbnVwKGludCBpZCwgdm9p ZCAqcCwgdm9pZCAqZGF0YSkKPiArewo+ICsJaTkxNV9wcGd0dF9wdXQocCk7Cj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiAgIGludCBpOTE1X2dlbV9jb250ZXh0X29wZW4oc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsCj4gICAJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiAgIHsKPiAg IAlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSBmaWxlLT5kcml2ZXJf cHJpdjsKPiAgIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owo+ICAgCj4gKwltdXRleF9p bml0KCZmaWxlX3ByaXYtPnZtX2xvY2spOwo+ICsKPiAgIAlpZHJfaW5pdCgmZmlsZV9wcml2LT5j b250ZXh0X2lkcik7Cj4gKwlpZHJfaW5pdF9iYXNlKCZmaWxlX3ByaXYtPnZtX2lkciwgMSk7Cj4g ICAKPiAgIAltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAljdHggPSBp OTE1X2dlbV9jcmVhdGVfY29udGV4dChpOTE1LCBmaWxlX3ByaXYpOwo+ICAgCW11dGV4X3VubG9j aygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAJaWYgKElTX0VSUihjdHgpKSB7Cj4gICAJ CWlkcl9kZXN0cm95KCZmaWxlX3ByaXYtPmNvbnRleHRfaWRyKTsKPiArCQlpZHJfZGVzdHJveSgm ZmlsZV9wcml2LT52bV9pZHIpOwo+ICAgCQlyZXR1cm4gUFRSX0VSUihjdHgpOwo+ICAgCX0KPiAg IAo+IEBAIC02NTQsNiArNjkzLDg5IEBAIHZvaWQgaTkxNV9nZW1fY29udGV4dF9jbG9zZShzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gICAKPiAgIAlpZHJfZm9yX2VhY2goJmZpbGVfcHJpdi0+Y29u dGV4dF9pZHIsIGNvbnRleHRfaWRyX2NsZWFudXAsIE5VTEwpOwo+ICAgCWlkcl9kZXN0cm95KCZm aWxlX3ByaXYtPmNvbnRleHRfaWRyKTsKPiArCj4gKwlpZHJfZm9yX2VhY2goJmZpbGVfcHJpdi0+ dm1faWRyLCB2bV9pZHJfY2xlYW51cCwgTlVMTCk7Cj4gKwlpZHJfZGVzdHJveSgmZmlsZV9wcml2 LT52bV9pZHIpOwo+ICsKPiArCW11dGV4X2Rlc3Ryb3koJmZpbGVfcHJpdi0+dm1fbG9jayk7Cj4g K30KPiArCj4gK2ludCBpOTE1X2dlbV92bV9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwKPiArCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gK3sK PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShkZXYpOwo+ICsJc3Ry dWN0IGRybV9pOTE1X2dlbV92bV9jb250cm9sICphcmdzID0gZGF0YTsKPiArCXN0cnVjdCBkcm1f aTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2Owo+ICsJc3Ry dWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0Owo+ICsJaW50IGVycjsKPiArCj4gKwlpZiAoIUhBU19G VUxMX1BQR1RUKGk5MTUpKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCWlmIChhcmdzLT5m bGFncykKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAoYXJncy0+ZXh0ZW5zaW9ucykK PiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlwcGd0dCA9IGk5MTVfcHBndHRfY3JlYXRlKGk5 MTUsIGZpbGVfcHJpdik7Cj4gKwlpZiAoSVNfRVJSKHBwZ3R0KSkKPiArCQlyZXR1cm4gUFRSX0VS UihwcGd0dCk7Cj4gKwo+ICsJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmaWxlX3By aXYtPnZtX2xvY2spOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIGVycl9wdXQ7Cj4gKwo+ICsJZXJy ID0gaWRyX2FsbG9jKCZmaWxlX3ByaXYtPnZtX2lkciwgcHBndHQsIDAsIDAsIEdGUF9LRVJORUwp Owo+ICsJbXV0ZXhfdW5sb2NrKCZmaWxlX3ByaXYtPnZtX2xvY2spOwo+ICsJaWYgKGVyciA8IDAp Cj4gKwkJZ290byBlcnJfcHV0Owo+ICsKPiArCUdFTV9CVUdfT04oZXJyID09IDApOyAvKiByZXNl cnZlZCBmb3IgZGVmYXVsdC91bmFzc2lnbmVkIHBwZ3R0ICovCj4gKwlwcGd0dC0+dXNlcl9oYW5k bGUgPSBlcnI7Cj4gKwlhcmdzLT5pZCA9IGVycjsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX3B1 dDoKPiArCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4g K2ludCBpOTE1X2dlbV92bV9kZXN0cm95X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsCj4gKwkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRyb2wgKmFyZ3MgPSBkYXRhOwo+ICsJc3Ry dWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0Owo+ICsJaW50IGVycjsKPiArCXUzMiBpZDsKPiArCj4g KwlpZiAoYXJncy0+ZmxhZ3MpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKGFyZ3Mt PmV4dGVuc2lvbnMpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWQgPSBhcmdzLT5pZDsK PiArCWlmICghaWQpCj4gKwkJcmV0dXJuIC1FTk9FTlQ7Cj4gKwo+ICsJZXJyID0gbXV0ZXhfbG9j a19pbnRlcnJ1cHRpYmxlKCZmaWxlX3ByaXYtPnZtX2xvY2spOwo+ICsJaWYgKGVycikKPiArCQly ZXR1cm4gZXJyOwo+ICsKPiArCXBwZ3R0ID0gaWRyX3JlbW92ZSgmZmlsZV9wcml2LT52bV9pZHIs IGlkKTsKPiArCWlmIChwcGd0dCkgewo+ICsJCUdFTV9CVUdfT04oIXBwZ3R0LT51c2VyX2hhbmRs ZSk7Cj4gKwkJcHBndHQtPnVzZXJfaGFuZGxlID0gMDsKPiArCX0KPiArCj4gKwltdXRleF91bmxv Y2soJmZpbGVfcHJpdi0+dm1fbG9jayk7Cj4gKwlpZiAoIXBwZ3R0KQo+ICsJCXJldHVybiAtRU5P RU5UOwo+ICsKPiArCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKPiArCXJldHVybiAwOwo+ICAgfQo+ ICAgCj4gICBzdGF0aWMgc3RydWN0IGk5MTVfcmVxdWVzdCAqCj4gQEAgLTY5NywxMiArODE5LDEz IEBAIHN0YXRpYyB2b2lkIGNiX3JldGlyZShzdHJ1Y3QgaTkxNV9hY3RpdmUgKmJhc2UpCj4gICBJ OTE1X1NFTEZURVNUX0RFQ0xBUkUoc3RhdGljIHVuc2lnbmVkIGxvbmcgY29udGV4dF9iYXJyaWVy X2luamVjdF9mYXVsdCk7Cj4gICBzdGF0aWMgaW50IGNvbnRleHRfYmFycmllcl90YXNrKHN0cnVj dCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gICAJCQkJdW5zaWduZWQgbG9uZyBlbmdpbmVzLAo+ ICsJCQkJaW50ICgqZW1pdCkoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHZvaWQgKmRhdGEpLAo+ ICAgCQkJCXZvaWQgKCp0YXNrKSh2b2lkICpkYXRhKSwKPiAgIAkJCQl2b2lkICpkYXRhKQo+ICAg ewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gY3R4LT5pOTE1Owo+ICAgCXN0 cnVjdCBjb250ZXh0X2JhcnJpZXJfdGFzayAqY2I7Cj4gLQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y2U7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsICpuZXh0Owo+ICAgCWludGVsX3dha2Vy ZWZfdCB3YWtlcmVmOwo+ICAgCWludCBlcnIgPSAwOwo+ICAgCj4gQEAgLTcxNywxMSArODQwLDEx IEBAIHN0YXRpYyBpbnQgY29udGV4dF9iYXJyaWVyX3Rhc2soc3RydWN0IGk5MTVfZ2VtX2NvbnRl eHQgKmN0eCwKPiAgIAlpOTE1X2FjdGl2ZV9hY3F1aXJlKCZjYi0+YmFzZSk7Cj4gICAKPiAgIAl3 YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7Cj4gLQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGNlLCAmY3R4LT5hY3RpdmVfZW5naW5lcywgYWN0aXZlX2xpbmspIHsKPiArCXJidHJlZV9w b3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShjZSwgbmV4dCwgJmN0eC0+aHdfY29udGV4dHMs IG5vZGUpIHsKPiAgIAkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gY2UtPmVuZ2lu ZTsKPiAgIAkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gICAKPiAtCQlpZiAoIShjZS0+ZW5n aW5lLT5tYXNrICYgZW5naW5lcykpCj4gKwkJaWYgKCEoZW5naW5lLT5tYXNrICYgZW5naW5lcykp Cj4gICAJCQljb250aW51ZTsKPiAgIAo+ICAgCQlpZiAoSTkxNV9TRUxGVEVTVF9PTkxZKGNvbnRl eHRfYmFycmllcl9pbmplY3RfZmF1bHQgJgo+IEBAIC03MzYsNyArODU5LDEyIEBAIHN0YXRpYyBp bnQgY29udGV4dF9iYXJyaWVyX3Rhc2soc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAg IAkJCWJyZWFrOwo+ICAgCQl9Cj4gICAKPiAtCQllcnIgPSBpOTE1X2FjdGl2ZV9yZWYoJmNiLT5i YXNlLCBycS0+ZmVuY2UuY29udGV4dCwgcnEpOwo+ICsJCWVyciA9IDA7Cj4gKwkJaWYgKGVtaXQp Cj4gKwkJCWVyciA9IGVtaXQocnEsIGRhdGEpOwo+ICsJCWlmIChlcnIgPT0gMCkKPiArCQkJZXJy ID0gaTkxNV9hY3RpdmVfcmVmKCZjYi0+YmFzZSwgcnEtPmZlbmNlLmNvbnRleHQsIHJxKTsKPiAr Cj4gICAJCWk5MTVfcmVxdWVzdF9hZGQocnEpOwo+ICAgCQlpZiAoZXJyKQo+ICAgCQkJYnJlYWs7 Cj4gQEAgLTc5OSw2ICs5MjcsMTczIEBAIGludCBpOTE1X2dlbV9zd2l0Y2hfdG9fa2VybmVsX2Nv bnRleHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gICAJcmV0dXJuIDA7Cj4gICB9 Cj4gICAKPiArc3RhdGljIGludCBnZXRfcHBndHQoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0 eCwKPiArCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSAqYXJncykKPiAr ewo+ICsJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2ID0gY3R4LT5maWxl X3ByaXY7Cj4gKwlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQ7Cj4gKwlpbnQgcmV0Owo+ICsK PiArCWlmICghY3R4LT5wcGd0dCkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwkvKiBYWFgg cmN1IGFjcXVpcmU/ICovCj4gKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmN0eC0+ aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4g Kwo+ICsJcHBndHQgPSBpOTE1X3BwZ3R0X2dldChjdHgtPnBwZ3R0KTsKPiArCW11dGV4X3VubG9j aygmY3R4LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCj4gKwlyZXQgPSBtdXRleF9sb2Nr X2ludGVycnVwdGlibGUoJmZpbGVfcHJpdi0+dm1fbG9jayk7Cj4gKwlpZiAocmV0KQo+ICsJCWdv dG8gZXJyX3B1dDsKPiArCj4gKwlpZiAoIXBwZ3R0LT51c2VyX2hhbmRsZSkgewo+ICsJCXJldCA9 IGlkcl9hbGxvYygmZmlsZV9wcml2LT52bV9pZHIsIHBwZ3R0LCAwLCAwLCBHRlBfS0VSTkVMKTsK PiArCQlHRU1fQlVHX09OKCFyZXQpOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlnb3RvIGVycl91 bmxvY2s7Cj4gKwo+ICsJCXBwZ3R0LT51c2VyX2hhbmRsZSA9IHJldDsKPiArCQlpOTE1X3BwZ3R0 X2dldChwcGd0dCk7Cj4gKwl9Cj4gKwo+ICsJYXJncy0+c2l6ZSA9IDA7Cj4gKwlhcmdzLT52YWx1 ZSA9IHBwZ3R0LT51c2VyX2hhbmRsZTsKPiArCj4gKwlyZXQgPSAwOwo+ICtlcnJfdW5sb2NrOgo+ ICsJbXV0ZXhfdW5sb2NrKCZmaWxlX3ByaXYtPnZtX2xvY2spOwo+ICtlcnJfcHV0Ogo+ICsJaTkx NV9wcGd0dF9wdXQocHBndHQpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgc2V0X3BwZ3R0X2JhcnJpZXIodm9pZCAqZGF0YSkKPiArewo+ICsJc3RydWN0IGk5MTVfaHdf cHBndHQgKm9sZCA9IGRhdGE7Cj4gKwo+ICsJaWYgKElOVEVMX0dFTihvbGQtPnZtLmk5MTUpIDwg OCkKPiArCQlnZW42X3BwZ3R0X3VucGluX2FsbChvbGQpOwoKSXMgcHBndHQgc2hhcmluZyBpbnRl cmVzdGluZyBmb3IgYWxpYXNpbmcgcHBndHQ/IEFoIEhTVyBub3cgaGFzIHByb3Blci4uCgo+ICsK PiArCWk5MTVfcHBndHRfY2xvc2Uob2xkKTsKPiArCWk5MTVfcHBndHRfcHV0KG9sZCk7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgZW1pdF9wcGd0dF91cGRhdGUoc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEsIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCA9IHJx LT5nZW1fY29udGV4dC0+cHBndHQ7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUg PSBycS0+ZW5naW5lOwo+ICsJdTMyICpjczsKPiArCWludCBpOwo+ICsKPiArCWlmIChpOTE1X3Zt X2lzXzQ4Yml0KCZwcGd0dC0+dm0pKSB7Cj4gKwkJY29uc3QgZG1hX2FkZHJfdCBwZF9kYWRkciA9 IHB4X2RtYSgmcHBndHQtPnBtbDQpOwo+ICsKPiArCQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEs IDYpOwo+ICsJCWlmIChJU19FUlIoY3MpKQo+ICsJCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gKwo+ ICsJCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oMik7Cj4gKwo+ICsJCSpjcysrID0gaTkx NV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9VRFcoZW5naW5lLCAwKSk7Cj4gKwkJKmNz KysgPSB1cHBlcl8zMl9iaXRzKHBkX2RhZGRyKTsKPiArCQkqY3MrKyA9IGk5MTVfbW1pb19yZWdf b2Zmc2V0KEdFTjhfUklOR19QRFBfTERXKGVuZ2luZSwgMCkpOwo+ICsJCSpjcysrID0gbG93ZXJf MzJfYml0cyhwZF9kYWRkcik7CgpPbmx5IG9uZSBvdXQgb2YgZm91ciB0aGVzZSBiZWFzdGllcyBu ZWVkcyB0byBiZSB1cGRhdGVkPyAoSW4gY29udHJhc3QgdG8gCnZpcnR1YWxfdXBkYXRlX3JlZ2lz dGVyX29mZnNldHMuKSBBcyB5b3UgY2FuIHNlZSBJIGFtIG5vdCB0b28gZmFtaWxpYXIgCndpdGgg cGd0YWJsZSBtYW5hZ2VtZW50LgoKPiArCj4gKwkJKmNzKysgPSBNSV9OT09QOwo+ICsJCWludGVs X3JpbmdfYWR2YW5jZShycSwgY3MpOwo+ICsJfSBlbHNlIGlmIChIQVNfTE9HSUNBTF9SSU5HX0NP TlRFWFRTKGVuZ2luZS0+aTkxNSkpIHsKPiArCQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQg KiBHRU44XzNMVkxfUERQRVMgKyAyKTsKPiArCQlpZiAoSVNfRVJSKGNzKSkKPiArCQkJcmV0dXJu IFBUUl9FUlIoY3MpOwo+ICsKPiArCQkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDIgKiBH RU44XzNMVkxfUERQRVMpOwo+ICsJCWZvciAoaSA9IEdFTjhfM0xWTF9QRFBFUzsgaS0tOyApIHsK PiArCQkJY29uc3QgZG1hX2FkZHJfdCBwZF9kYWRkciA9IGk5MTVfcGFnZV9kaXJfZG1hX2FkZHIo cHBndHQsIGkpOwo+ICsKPiArCQkJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X1JJ TkdfUERQX1VEVyhlbmdpbmUsIGkpKTsKPiArCQkJKmNzKysgPSB1cHBlcl8zMl9iaXRzKHBkX2Rh ZGRyKTsKPiArCQkJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X1JJTkdfUERQX0xE VyhlbmdpbmUsIGkpKTsKPiArCQkJKmNzKysgPSBsb3dlcl8zMl9iaXRzKHBkX2RhZGRyKTsKPiAr CQl9Cj4gKwkJKmNzKysgPSBNSV9OT09QOwo+ICsJCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3Mp OwoKU28gYSBydW5uaW5nIGNvbnRleHQgd2lsbCB1cGRhdGUgaXQncyBvd24gY29udGV4dCBpbWFn ZS4gQW5kIGl0IGRvZXNuJ3QgCmdldCBvdmVyd3JpdHRlbiBvbiBjb250ZXh0IHNhdmU/CgpBcmUg dGhlcmUgdGVzdHMgd2hpY2ggaGl0IHRoaXMgcGF0aD8KCj4gKwl9IGVsc2Ugewo+ICsJCS8qIHBw R1RUIGlzIG5vdCBwYXJ0IG9mIHRoZSBsZWdhY3kgY29udGV4dCBpbWFnZSAqLwo+ICsJCWdlbjZf cHBndHRfcGluKHBwZ3R0KTsKCldoYXQgaXMgaGFwcGVuaW5nIG9uIHRoaXMgcGF0aCAtIHdoeSBp cyB0aGUgcGluIG5lZWRlZCBoZXJlIG9ubHkgdG8gYmUgCnVucGlubmVkIGluIHRoZSBiYXJyaWVy IGNhbGxiYWNrPyBUaGlzIGlzIG5vdCBoYW5kbGVkIGJ5IG5vcm1hbCByZXF1ZXN0IApmbG93PwoK UmVnYXJkcywKClR2cnRrbwoKCj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgc2V0X3BwZ3R0KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gKwkJICAg ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gKmFyZ3MpCj4gK3sKPiArCXN0cnVj dCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiA9IGN0eC0+ZmlsZV9wcml2Owo+ICsJ c3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LCAqb2xkOwo+ICsJaW50IGVycjsKPiArCj4gKwlp ZiAoYXJncy0+c2l6ZSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAoIWN0eC0+cHBn dHQpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJaWYgKHVwcGVyXzMyX2JpdHMoYXJncy0+ dmFsdWUpKQo+ICsJCXJldHVybiAtRU5PRU5UOwo+ICsKPiArCWVyciA9IG11dGV4X2xvY2tfaW50 ZXJydXB0aWJsZSgmZmlsZV9wcml2LT52bV9sb2NrKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJu IGVycjsKPiArCj4gKwlwcGd0dCA9IGlkcl9maW5kKCZmaWxlX3ByaXYtPnZtX2lkciwgYXJncy0+ dmFsdWUpOwo+ICsJaWYgKHBwZ3R0KSB7Cj4gKwkJR0VNX0JVR19PTihwcGd0dC0+dXNlcl9oYW5k bGUgIT0gYXJncy0+dmFsdWUpOwo+ICsJCWk5MTVfcHBndHRfZ2V0KHBwZ3R0KTsKPiArCX0KPiAr CW11dGV4X3VubG9jaygmZmlsZV9wcml2LT52bV9sb2NrKTsKPiArCWlmICghcHBndHQpCj4gKwkJ cmV0dXJuIC1FTk9FTlQ7Cj4gKwo+ICsJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZj dHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIG91dDsK PiArCj4gKwlpZiAocHBndHQgPT0gY3R4LT5wcGd0dCkKPiArCQlnb3RvIHVubG9jazsKPiArCj4g KwkvKiBUZWFyZG93biB0aGUgZXhpc3Rpbmcgb2JqOnZtYSBjYWNoZSwgaXQgd2lsbCBoYXZlIHRv IGJlIHJlYnVpbHQuICovCj4gKwlsdXRfY2xvc2UoY3R4KTsKPiArCj4gKwlvbGQgPSBfX3NldF9w cGd0dChjdHgsIHBwZ3R0KTsKPiArCj4gKwkvKgo+ICsJICogV2UgbmVlZCB0byBmbHVzaCBhbnkg cmVxdWVzdHMgdXNpbmcgdGhlIGN1cnJlbnQgcHBndHQgYmVmb3JlCj4gKwkgKiB3ZSByZWxlYXNl IGl0IGFzIHRoZSByZXF1ZXN0cyBkbyBub3QgaG9sZCBhIHJlZmVyZW5jZSB0aGVtc2VsdmVzLAo+ ICsJICogb25seSBpbmRpcmVjdGx5IHRocm91Z2ggdGhlIGNvbnRleHQuCj4gKwkgKi8KPiArCWVy ciA9IGNvbnRleHRfYmFycmllcl90YXNrKGN0eCwgQUxMX0VOR0lORVMsCj4gKwkJCQkgICBlbWl0 X3BwZ3R0X3VwZGF0ZSwKPiArCQkJCSAgIHNldF9wcGd0dF9iYXJyaWVyLAo+ICsJCQkJICAgb2xk KTsKPiArCWlmIChlcnIpIHsKPiArCQljdHgtPnBwZ3R0ID0gb2xkOwo+ICsJCWN0eC0+ZGVzY190 ZW1wbGF0ZSA9IGRlZmF1bHRfZGVzY190ZW1wbGF0ZShjdHgtPmk5MTUsIG9sZCk7Cj4gKwo+ICsJ CWk5MTVfcHBndHRfY2xvc2UocHBndHQpOwo+ICsJCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKPiAr CX0KPiArCj4gK3VubG9jazoKPiArCW11dGV4X3VubG9jaygmY3R4LT5pOTE1LT5kcm0uc3RydWN0 X211dGV4KTsKPiArCj4gK291dDoKPiArCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKPiArCXJldHVy biBlcnI7Cj4gK30KPiArCj4gICBzdGF0aWMgYm9vbCBjbGllbnRfaXNfYmFubmVkKHN0cnVjdCBk cm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdikKPiAgIHsKPiAgIAlyZXR1cm4gYXRvbWlj X3JlYWQoJmZpbGVfcHJpdi0+YmFuX3Njb3JlKSA+PSBJOTE1X0NMSUVOVF9TQ09SRV9CQU5ORUQ7 Cj4gQEAgLTk3Myw2ICsxMjY4LDkgQEAgaW50IGk5MTVfZ2VtX2NvbnRleHRfZ2V0cGFyYW1faW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAljYXNlIEk5MTVfQ09O VEVYVF9QQVJBTV9TU0VVOgo+ICAgCQlyZXQgPSBnZXRfc3NldShjdHgsIGFyZ3MpOwo+ICAgCQli cmVhazsKPiArCWNhc2UgSTkxNV9DT05URVhUX1BBUkFNX1ZNOgo+ICsJCXJldCA9IGdldF9wcGd0 dChjdHgsIGFyZ3MpOwo+ICsJCWJyZWFrOwo+ICAgCWRlZmF1bHQ6Cj4gICAJCXJldCA9IC1FSU5W QUw7Cj4gICAJCWJyZWFrOwo+IEBAIC0xMjc0LDkgKzE1NzIsNiBAQCBpbnQgaTkxNV9nZW1fY29u dGV4dF9zZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ ICAgCQlyZXR1cm4gLUVOT0VOVDsKPiAgIAo+ICAgCXN3aXRjaCAoYXJncy0+cGFyYW0pIHsKPiAt CWNhc2UgSTkxNV9DT05URVhUX1BBUkFNX0JBTl9QRVJJT0Q6Cj4gLQkJcmV0ID0gLUVJTlZBTDsK PiAtCQlicmVhazsKPiAgIAljYXNlIEk5MTVfQ09OVEVYVF9QQVJBTV9OT19aRVJPTUFQOgo+ICAg CQlpZiAoYXJncy0+c2l6ZSkKPiAgIAkJCXJldCA9IC1FSU5WQUw7Cj4gQEAgLTEzMzIsOSArMTYy NywxNiBAQCBpbnQgaTkxNV9nZW1fY29udGV4dF9zZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAgCQkJCQlJOTE1X1VTRVJfUFJJT1JJVFkocHJpb3Jp dHkpOwo+ICAgCQl9Cj4gICAJCWJyZWFrOwo+ICsKPiAgIAljYXNlIEk5MTVfQ09OVEVYVF9QQVJB TV9TU0VVOgo+ICAgCQlyZXQgPSBzZXRfc3NldShjdHgsIGFyZ3MpOwo+ICAgCQlicmVhazsKPiAr Cj4gKwljYXNlIEk5MTVfQ09OVEVYVF9QQVJBTV9WTToKPiArCQlyZXQgPSBzZXRfcHBndHQoY3R4 LCBhcmdzKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIEk5MTVfQ09OVEVYVF9QQVJBTV9CQU5f UEVSSU9EOgo+ICAgCWRlZmF1bHQ6Cj4gICAJCXJldCA9IC1FSU5WQUw7Cj4gICAJCWJyZWFrOwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmgKPiBpbmRleCA1YTMyYzRiNDgx NmYuLjFlNjcwMzcyODkyYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9jb250ZXh0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250 ZXh0LmgKPiBAQCAtMTUzLDYgKzE1MywxMSBAQCB2b2lkIGk5MTVfZ2VtX2NvbnRleHRfcmVsZWFz ZShzdHJ1Y3Qga3JlZiAqY3R4X3JlZik7Cj4gICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqCj4g ICBpOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9ndnQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4g ICAKPiAraW50IGk5MTVfZ2VtX3ZtX2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLAo+ICsJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cj4gK2ludCBp OTE1X2dlbV92bV9kZXN0cm95X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEsCj4gKwkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cj4gKwo+ICAgaW50IGk5MTVf Z2VtX2NvbnRleHRfY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEsCj4gICAJCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ICAgaW50IGk5MTVfZ2VtX2Nv bnRleHRfZGVzdHJveV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXggZGFjMDhkOWMzZmFiLi5jMDk3 MmNkOTUyODMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0 LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IEBAIC0xOTM5 LDYgKzE5MzksOCBAQCBpbnQgZ2VuNl9wcGd0dF9waW4oc3RydWN0IGk5MTVfaHdfcHBndHQgKmJh c2UpCj4gICAJc3RydWN0IGdlbjZfaHdfcHBndHQgKnBwZ3R0ID0gdG9fZ2VuNl9wcGd0dChiYXNl KTsKPiAgIAlpbnQgZXJyOwo+ICAgCj4gKwlHRU1fQlVHX09OKHBwZ3R0LT5iYXNlLnZtLmNsb3Nl ZCk7Cj4gKwo+ICAgCS8qCj4gICAJICogV29ya2Fyb3VuZCB0aGUgbGltaXRlZCBtYXhpbXVtIHZt YS0+cGluX2NvdW50IGFuZCB0aGUgYWxpYXNpbmdfcHBndHQKPiAgIAkgKiB3aGljaCB3aWxsIGJl IHBpbm5lZCBpbnRvIGV2ZXJ5IGFjdGl2ZSBjb250ZXh0Lgo+IEBAIC0xOTc3LDYgKzE5NzksMTcg QEAgdm9pZCBnZW42X3BwZ3R0X3VucGluKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpiYXNlKQo+ICAg CWk5MTVfdm1hX3VucGluKHBwZ3R0LT52bWEpOwo+ICAgfQo+ICAgCj4gK3ZvaWQgZ2VuNl9wcGd0 dF91bnBpbl9hbGwoc3RydWN0IGk5MTVfaHdfcHBndHQgKmJhc2UpCj4gK3sKPiArCXN0cnVjdCBn ZW42X2h3X3BwZ3R0ICpwcGd0dCA9IHRvX2dlbjZfcHBndHQoYmFzZSk7Cj4gKwo+ICsJaWYgKCFw cGd0dC0+cGluX2NvdW50KQo+ICsJCXJldHVybjsKPiArCj4gKwlwcGd0dC0+cGluX2NvdW50ID0g MDsKPiArCWk5MTVfdm1hX3VucGluKHBwZ3R0LT52bWEpOwo+ICt9Cj4gKwo+ICAgc3RhdGljIHN0 cnVjdCBpOTE1X2h3X3BwZ3R0ICpnZW42X3BwZ3R0X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSkKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9nZ3R0ICogY29uc3QgZ2d0dCA9ICZp OTE1LT5nZ3R0Owo+IEBAIC0yMDk5LDEwICsyMTEyLDIxIEBAIGk5MTVfcHBndHRfY3JlYXRlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCXJldHVybiBwcGd0dDsKPiAgIH0KPiAg IAo+IC12b2lkIGk5MTVfcHBndHRfY2xvc2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0p Cj4gK3ZvaWQgaTkxNV9wcGd0dF9vcGVuKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAg IHsKPiAtCUdFTV9CVUdfT04odm0tPmNsb3NlZCk7Cj4gLQl2bS0+Y2xvc2VkID0gdHJ1ZTsKPiAr CUdFTV9CVUdfT04ocHBndHQtPnZtLmNsb3NlZCk7Cj4gKwo+ICsJcHBndHQtPm9wZW5fY291bnQr KzsKPiArfQo+ICsKPiArdm9pZCBpOTE1X3BwZ3R0X2Nsb3NlKHN0cnVjdCBpOTE1X2h3X3BwZ3R0 ICpwcGd0dCkKPiArewo+ICsJR0VNX0JVR19PTighcHBndHQtPm9wZW5fY291bnQpOwo+ICsJaWYg KC0tcHBndHQtPm9wZW5fY291bnQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCUdFTV9CVUdfT04ocHBn dHQtPnZtLmNsb3NlZCk7Cj4gKwlwcGd0dC0+dm0uY2xvc2VkID0gdHJ1ZTsKPiAgIH0KPiAgIAo+ ICAgc3RhdGljIHZvaWQgcHBndHRfZGVzdHJveV92bWEoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0pCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiBpbmRleCBhNDdlMTFlNmZj MWIuLjU5NzNkOTJlNDVmYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4g QEAgLTM5MSwxMSArMzkxLDE1IEBAIHN0cnVjdCBpOTE1X2h3X3BwZ3R0IHsKPiAgIAlzdHJ1Y3Qg a3JlZiByZWY7Cj4gICAKPiAgIAl1bnNpZ25lZCBsb25nIHBkX2RpcnR5X2VuZ2luZXM7Cj4gKwl1 bnNpZ25lZCBpbnQgb3Blbl9jb3VudDsKPiArCj4gICAJdW5pb24gewo+ICAgCQlzdHJ1Y3QgaTkx NV9wbWw0IHBtbDQ7CQkvKiBHRU44KyAmIDQ4YiBQUEdUVCAqLwo+ICAgCQlzdHJ1Y3QgaTkxNV9w YWdlX2RpcmVjdG9yeV9wb2ludGVyIHBkcDsJLyogR0VOOCsgKi8KPiAgIAkJc3RydWN0IGk5MTVf cGFnZV9kaXJlY3RvcnkgcGQ7CQkvKiBHRU42LTcgKi8KPiAgIAl9Owo+ICsKPiArCXUzMiB1c2Vy X2hhbmRsZTsKPiAgIH07Cj4gICBjYgo+ICAgc3RydWN0IGdlbjZfaHdfcHBndHQgewo+IEBAIC02 MDYsMTIgKzYxMCwxNiBAQCBpbnQgaTkxNV9wcGd0dF9pbml0X2h3KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdik7Cj4gICB2b2lkIGk5MTVfcHBndHRfcmVsZWFzZShzdHJ1Y3Qga3Jl ZiAqa3JlZik7Cj4gICBzdHJ1Y3QgaTkxNV9od19wcGd0dCAqaTkxNV9wcGd0dF9jcmVhdGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgCQkJCQlzdHJ1Y3QgZHJtX2k5MTVf ZmlsZV9wcml2YXRlICpmcHJpdik7Cj4gLXZvaWQgaTkxNV9wcGd0dF9jbG9zZShzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSk7Cj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3BwZ3R0X2dl dChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gKwo+ICt2b2lkIGk5MTVfcHBndHRfb3Bl bihzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpOwo+ICt2b2lkIGk5MTVfcHBndHRfY2xvc2Uo c3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0 IGk5MTVfaHdfcHBndHQgKmk5MTVfcHBndHRfZ2V0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0 dCkKPiAgIHsKPiAtCWlmIChwcGd0dCkKPiAtCQlrcmVmX2dldCgmcHBndHQtPnJlZik7Cj4gKwlr cmVmX2dldCgmcHBndHQtPnJlZik7Cj4gKwlyZXR1cm4gcHBndHQ7Cj4gICB9Cj4gKwo+ICAgc3Rh dGljIGlubGluZSB2b2lkIGk5MTVfcHBndHRfcHV0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0 dCkKPiAgIHsKPiAgIAlpZiAocHBndHQpCj4gQEAgLTYyMCw2ICs2MjgsNyBAQCBzdGF0aWMgaW5s aW5lIHZvaWQgaTkxNV9wcGd0dF9wdXQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAg Cj4gICBpbnQgZ2VuNl9wcGd0dF9waW4oc3RydWN0IGk5MTVfaHdfcHBndHQgKmJhc2UpOwo+ICAg dm9pZCBnZW42X3BwZ3R0X3VucGluKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpiYXNlKTsKPiArdm9p ZCBnZW42X3BwZ3R0X3VucGluX2FsbChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqYmFzZSk7Cj4gICAK PiAgIHZvaWQgaTkxNV9jaGVja19hbmRfY2xlYXJfZmF1bHRzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7Cj4gICB2b2lkIGk5MTVfZ2VtX3N1c3BlbmRfZ3R0X21hcHBpbmdzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jCj4gaW5kZXggMWU2NmNmZjk4NWY4Li4wYjc3NDBkYzE4 Y2IgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFn ZXMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMK PiBAQCAtMTczNCw3ICsxNzM0LDYgQEAgaW50IGk5MTVfZ2VtX2h1Z2VfcGFnZV9tb2NrX3NlbGZ0 ZXN0cyh2b2lkKQo+ICAgCWVyciA9IGk5MTVfc3VidGVzdHModGVzdHMsIHBwZ3R0KTsKPiAgIAo+ ICAgb3V0X2Nsb3NlOgo+IC0JaTkxNV9wcGd0dF9jbG9zZSgmcHBndHQtPnZtKTsKPiAgIAlpOTE1 X3BwZ3R0X3B1dChwcGd0dCk7Cj4gICAKPiAgIG91dF91bmxvY2s6Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jCj4gaW5kZXggNDM5OWVm OWViZjE1Li4xYmEzNTRhOTE2YzAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMKPiBAQCAtMzcyLDcgKzM3Miw4IEBAIHN0YXRp YyBpbnQgY3B1X2ZpbGwoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgdTMyIHZhbHVl KQo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgY3B1X2NoZWNrKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIHVuc2lnbmVkIGludCBtYXgpCj4gK3N0YXRpYyBu b2lubGluZSBpbnQgY3B1X2NoZWNrKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4g KwkJCSAgICAgIHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGludCBtYXgpCj4gICB7Cj4gICAJ dW5zaWduZWQgaW50IG4sIG0sIG5lZWRzX2ZsdXNoOwo+ICAgCWludCBlcnI7Cj4gQEAgLTM5MCw4 ICszOTEsMTAgQEAgc3RhdGljIGludCBjcHVfY2hlY2soc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwgdW5zaWduZWQgaW50IG1heCkKPiAgIAo+ICAgCQlmb3IgKG0gPSAwOyBtIDwgbWF4 OyBtKyspIHsKPiAgIAkJCWlmIChtYXBbbV0gIT0gbSkgewo+IC0JCQkJcHJfZXJyKCJJbnZhbGlk IHZhbHVlIGF0IHBhZ2UgJWQsIG9mZnNldCAlZDogZm91bmQgJXggZXhwZWN0ZWQgJXhcbiIsCj4g LQkJCQkgICAgICAgbiwgbSwgbWFwW21dLCBtKTsKPiArCQkJCXByX2VycigiJXBTOiBJbnZhbGlk IHZhbHVlIGF0IG9iamVjdCAlZCBwYWdlICVkLyVsZCwgb2Zmc2V0ICVkLyVkOiBmb3VuZCAleCBl eHBlY3RlZCAleFxuIiwKPiArCQkJCSAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCks IGlkeCwKPiArCQkJCSAgICAgICBuLCByZWFsX3BhZ2VfY291bnQob2JqKSwgbSwgbWF4LAo+ICsJ CQkJICAgICAgIG1hcFttXSwgbSk7Cj4gICAJCQkJZXJyID0gLUVJTlZBTDsKPiAgIAkJCQlnb3Rv IG91dF91bm1hcDsKPiAgIAkJCX0KPiBAQCAtMzk5LDggKzQwMiw5IEBAIHN0YXRpYyBpbnQgY3B1 X2NoZWNrKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIHVuc2lnbmVkIGludCBtYXgp Cj4gICAKPiAgIAkJZm9yICg7IG0gPCBEV19QRVJfUEFHRTsgbSsrKSB7Cj4gICAJCQlpZiAobWFw W21dICE9IFNUQUNLX01BR0lDKSB7Cj4gLQkJCQlwcl9lcnIoIkludmFsaWQgdmFsdWUgYXQgcGFn ZSAlZCwgb2Zmc2V0ICVkOiBmb3VuZCAleCBleHBlY3RlZCAleFxuIiwKPiAtCQkJCSAgICAgICBu LCBtLCBtYXBbbV0sIFNUQUNLX01BR0lDKTsKPiArCQkJCXByX2VycigiJXBTOiBJbnZhbGlkIHZh bHVlIGF0IG9iamVjdCAlZCBwYWdlICVkLCBvZmZzZXQgJWQ6IGZvdW5kICV4IGV4cGVjdGVkICV4 ICh1bmluaXRpYWxpc2VkKVxuIiwKPiArCQkJCSAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJl c3MoMCksIGlkeCwgbiwgbSwKPiArCQkJCSAgICAgICBtYXBbbV0sIFNUQUNLX01BR0lDKTsKPiAg IAkJCQllcnIgPSAtRUlOVkFMOwo+ICAgCQkJCWdvdG8gb3V0X3VubWFwOwo+ICAgCQkJfQo+IEBA IC00NzgsMTIgKzQ4Miw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9kd29yZHMoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIHN0YXRpYyBpbnQgaWd0X2N0eF9leGVjKHZv aWQgKmFyZykKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsK PiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBOVUxMOwo+IC0JdW5zaWduZWQg bG9uZyBuY29udGV4dHMsIG5kd29yZHMsIGR3Owo+IC0Jc3RydWN0IGlndF9saXZlX3Rlc3QgdDsK PiAtCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKPiAtCUlHVF9USU1FT1VUKGVuZF90aW1lKTsKPiAt CUxJU1RfSEVBRChvYmplY3RzKTsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsK PiArCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+ICAgCWludCBlcnIgPSAtRU5PREVWOwo+ICAg Cj4gICAJLyoKPiBAQCAtNDk1LDQ0ICs0OTUsMTY5IEBAIHN0YXRpYyBpbnQgaWd0X2N0eF9leGVj KHZvaWQgKmFyZykKPiAgIAlpZiAoIURSSVZFUl9DQVBTKGk5MTUpLT5oYXNfbG9naWNhbF9jb250 ZXh0cykKPiAgIAkJcmV0dXJuIDA7Cj4gICAKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5 MTUsIGlkKSB7Cj4gKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IE5VTEw7Cj4g KwkJdW5zaWduZWQgbG9uZyBuY29udGV4dHMsIG5kd29yZHMsIGR3Owo+ICsJCXN0cnVjdCBpZ3Rf bGl2ZV90ZXN0IHQ7Cj4gKwkJc3RydWN0IGRybV9maWxlICpmaWxlOwo+ICsJCUlHVF9USU1FT1VU KGVuZF90aW1lKTsKPiArCQlMSVNUX0hFQUQob2JqZWN0cyk7Cj4gKwo+ICsJCWlmICghaW50ZWxf ZW5naW5lX2Nhbl9zdG9yZV9kd29yZChlbmdpbmUpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJ aWYgKCFlbmdpbmUtPmNvbnRleHRfc2l6ZSkKPiArCQkJY29udGludWU7IC8qIE5vIGxvZ2ljYWwg Y29udGV4dCBzdXBwb3J0IGluIEhXICovCj4gKwo+ICsJCWZpbGUgPSBtb2NrX2ZpbGUoaTkxNSk7 Cj4gKwkJaWYgKElTX0VSUihmaWxlKSkKPiArCQkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7Cj4gKwo+ ICsJCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCQllcnIgPSBp Z3RfbGl2ZV90ZXN0X2JlZ2luKCZ0LCBpOTE1LCBfX2Z1bmNfXywgZW5naW5lLT5uYW1lKTsKPiAr CQlpZiAoZXJyKQo+ICsJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwo+ICsJCW5jb250ZXh0cyA9IDA7 Cj4gKwkJbmR3b3JkcyA9IDA7Cj4gKwkJZHcgPSAwOwo+ICsJCXdoaWxlICghdGltZV9hZnRlcihq aWZmaWVzLCBlbmRfdGltZSkpIHsKPiArCQkJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsK PiArCQkJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gKwo+ICsJCQljdHggPSBpOTE1X2dlbV9j cmVhdGVfY29udGV4dChpOTE1LCBmaWxlLT5kcml2ZXJfcHJpdik7Cj4gKwkJCWlmIChJU19FUlIo Y3R4KSkgewo+ICsJCQkJZXJyID0gUFRSX0VSUihjdHgpOwo+ICsJCQkJZ290byBvdXRfdW5sb2Nr Owo+ICsJCQl9Cj4gKwo+ICsJCQlpZiAoIW9iaikgewo+ICsJCQkJb2JqID0gY3JlYXRlX3Rlc3Rf b2JqZWN0KGN0eCwgZmlsZSwgJm9iamVjdHMpOwo+ICsJCQkJaWYgKElTX0VSUihvYmopKSB7Cj4g KwkJCQkJZXJyID0gUFRSX0VSUihvYmopOwo+ICsJCQkJCWdvdG8gb3V0X3VubG9jazsKPiArCQkJ CX0KPiArCQkJfQo+ICsKPiArCQkJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGk5MTUsIHdha2VyZWYp Cj4gKwkJCQllcnIgPSBncHVfZmlsbChvYmosIGN0eCwgZW5naW5lLCBkdyk7Cj4gKwkJCWlmIChl cnIpIHsKPiArCQkJCXByX2VycigiRmFpbGVkIHRvIGZpbGwgZHdvcmQgJWx1IFslbHUvJWx1XSB3 aXRoIGdwdSAoJXMpIGluIGN0eCAldSBbZnVsbC1wcGd0dD8gJXNdLCBlcnI9JWRcbiIsCj4gKwkJ CQkgICAgICAgbmR3b3JkcywgZHcsIG1heF9kd29yZHMob2JqKSwKPiArCQkJCSAgICAgICBlbmdp bmUtPm5hbWUsIGN0eC0+aHdfaWQsCj4gKwkJCQkgICAgICAgeWVzbm8oISFjdHgtPnBwZ3R0KSwg ZXJyKTsKPiArCQkJCWdvdG8gb3V0X3VubG9jazsKPiArCQkJfQo+ICsKPiArCQkJaWYgKCsrZHcg PT0gbWF4X2R3b3JkcyhvYmopKSB7Cj4gKwkJCQlvYmogPSBOVUxMOwo+ICsJCQkJZHcgPSAwOwo+ ICsJCQl9Cj4gKwo+ICsJCQluZHdvcmRzKys7Cj4gKwkJCW5jb250ZXh0cysrOwo+ICsJCX0KPiAr Cj4gKwkJcHJfaW5mbygiU3VibWl0dGVkICVsdSBjb250ZXh0cyB0byAlcywgZmlsbGluZyAlbHUg ZHdvcmRzXG4iLAo+ICsJCQluY29udGV4dHMsIGVuZ2luZS0+bmFtZSwgbmR3b3Jkcyk7Cj4gKwo+ ICsJCW5jb250ZXh0cyA9IGR3ID0gMDsKPiArCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgJm9i amVjdHMsIHN0X2xpbmspIHsKPiArCQkJdW5zaWduZWQgaW50IHJlbSA9Cj4gKwkJCQltaW5fdCh1 bnNpZ25lZCBpbnQsIG5kd29yZHMgLSBkdywgbWF4X2R3b3JkcyhvYmopKTsKPiArCj4gKwkJCWVy ciA9IGNwdV9jaGVjayhvYmosIG5jb250ZXh0cysrLCByZW0pOwo+ICsJCQlpZiAoZXJyKQo+ICsJ CQkJYnJlYWs7Cj4gKwo+ICsJCQlkdyArPSByZW07Cj4gKwkJfQo+ICsKPiArb3V0X3VubG9jazoK PiArCQlpZiAoaWd0X2xpdmVfdGVzdF9lbmQoJnQpKQo+ICsJCQllcnIgPSAtRUlPOwo+ICsJCW11 dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwo+ICsJCW1vY2tfZmlsZV9m cmVlKGk5MTUsIGZpbGUpOwo+ICsJCWlmIChlcnIpCj4gKwkJCXJldHVybiBlcnI7Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X3NoYXJlZF9jdHhfZXhl Yyh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJn Owo+ICsJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKnBhcmVudDsKPiArCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZTsKPiArCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+ICsJc3RydWN0 IGlndF9saXZlX3Rlc3QgdDsKPiArCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKPiArCWludCBlcnIg PSAwOwo+ICsKPiArCS8qCj4gKwkgKiBDcmVhdGUgYSBmZXcgZGlmZmVyZW50IGNvbnRleHRzIHdp dGggdGhlIHNhbWUgbW0gYW5kIHdyaXRlCj4gKwkgKiB0aHJvdWdoIGVhY2ggY3R4IHVzaW5nIHRo ZSBHUFUgbWFraW5nIHN1cmUgdGhvc2Ugd3JpdGVzIGVuZAo+ICsJICogdXAgaW4gdGhlIGV4cGVj dGVkIHBhZ2VzIG9mIG91ciBvYmouCj4gKwkgKi8KPiArCWlmICghRFJJVkVSX0NBUFMoaTkxNSkt Pmhhc19sb2dpY2FsX2NvbnRleHRzKQo+ICsJCXJldHVybiAwOwo+ICsKPiAgIAlmaWxlID0gbW9j a19maWxlKGk5MTUpOwo+ICAgCWlmIChJU19FUlIoZmlsZSkpCj4gICAJCXJldHVybiBQVFJfRVJS KGZpbGUpOwo+ICAgCj4gICAJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g ICAKPiArCXBhcmVudCA9IGk5MTVfZ2VtX2NyZWF0ZV9jb250ZXh0KGk5MTUsIGZpbGUtPmRyaXZl cl9wcml2KTsKPiArCWlmIChJU19FUlIocGFyZW50KSkgewo+ICsJCWVyciA9IFBUUl9FUlIocGFy ZW50KTsKPiArCQlnb3RvIG91dF91bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFwYXJlbnQtPnBw Z3R0KSB7IC8qIG5vdCBmdWxsLXBwZ3R0OyBub3RoaW5nIHRvIHNoYXJlICovCj4gKwkJZXJyID0g LUVOT0RFVjsKPiArCQlnb3RvIG91dF91bmxvY2s7Cj4gKwl9Cj4gKwo+ICAgCWVyciA9IGlndF9s aXZlX3Rlc3RfYmVnaW4oJnQsIGk5MTUsIF9fZnVuY19fLCAiIik7Cj4gICAJaWYgKGVycikKPiAg IAkJZ290byBvdXRfdW5sb2NrOwo+ICAgCj4gLQluY29udGV4dHMgPSAwOwo+IC0JbmR3b3JkcyA9 IDA7Cj4gLQlkdyA9IDA7Cj4gLQl3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgZW5kX3RpbWUp KSB7Cj4gLQkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+IC0JCXN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpjdHg7Cj4gLQkJdW5zaWduZWQgaW50IGlkOwo+ICsJZm9yX2VhY2hfZW5n aW5lKGVuZ2luZSwgaTkxNSwgaWQpIHsKPiArCQl1bnNpZ25lZCBsb25nIG5jb250ZXh0cywgbmR3 b3JkcywgZHc7Cj4gKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IE5VTEw7Cj4g KwkJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCA9IE5VTEw7Cj4gKwkJSUdUX1RJTUVPVVQo ZW5kX3RpbWUpOwo+ICsJCUxJU1RfSEVBRChvYmplY3RzKTsKPiAgIAo+IC0JCWN0eCA9IGk5MTVf Z2VtX2NyZWF0ZV9jb250ZXh0KGk5MTUsIGZpbGUtPmRyaXZlcl9wcml2KTsKPiAtCQlpZiAoSVNf RVJSKGN0eCkpIHsKPiAtCQkJZXJyID0gUFRSX0VSUihjdHgpOwo+IC0JCQlnb3RvIG91dF91bmxv Y2s7Cj4gLQkJfQo+ICsJCWlmICghaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChlbmdpbmUp KQo+ICsJCQljb250aW51ZTsKPiAgIAo+IC0JCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUs IGlkKSB7Cj4gKwkJZHcgPSAwOwo+ICsJCW5kd29yZHMgPSAwOwo+ICsJCW5jb250ZXh0cyA9IDA7 Cj4gKwkJd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIGVuZF90aW1lKSkgewo+ICAgCQkJaW50 ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gICAKPiAtCQkJaWYgKCFlbmdpbmUtPmNvbnRleHRfc2l6 ZSkKPiAtCQkJCWNvbnRpbnVlOyAvKiBObyBsb2dpY2FsIGNvbnRleHQgc3VwcG9ydCBpbiBIVyAq Lwo+ICsJCQlpZiAoY3R4KQo+ICsJCQkJX19kZXN0cm95X2h3X2NvbnRleHQoY3R4LCBmaWxlLT5k cml2ZXJfcHJpdik7Cj4gICAKPiAtCQkJaWYgKCFpbnRlbF9lbmdpbmVfY2FuX3N0b3JlX2R3b3Jk KGVuZ2luZSkpCj4gLQkJCQljb250aW51ZTsKPiArCQkJY3R4ID0gaTkxNV9nZW1fY3JlYXRlX2Nv bnRleHQoaTkxNSwgZmlsZS0+ZHJpdmVyX3ByaXYpOwo+ICsJCQlpZiAoSVNfRVJSKGN0eCkpIHsK PiArCQkJCWVyciA9IFBUUl9FUlIoY3R4KTsKPiArCQkJCWdvdG8gb3V0X3Rlc3Q7Cj4gKwkJCX0K PiArCj4gKwkJCV9fYXNzaWduX3BwZ3R0KGN0eCwgcGFyZW50LT5wcGd0dCk7Cj4gICAKPiAgIAkJ CWlmICghb2JqKSB7Cj4gLQkJCQlvYmogPSBjcmVhdGVfdGVzdF9vYmplY3QoY3R4LCBmaWxlLCAm b2JqZWN0cyk7Cj4gKwkJCQlvYmogPSBjcmVhdGVfdGVzdF9vYmplY3QocGFyZW50LCBmaWxlLCAm b2JqZWN0cyk7Cj4gICAJCQkJaWYgKElTX0VSUihvYmopKSB7Cj4gICAJCQkJCWVyciA9IFBUUl9F UlIob2JqKTsKPiAtCQkJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwkJCQkJZ290byBvdXRfdGVzdDsK PiAgIAkJCQl9Cj4gICAJCQl9Cj4gICAKPiBAQCAtNTQ0LDM1ICs2NjksMzYgQEAgc3RhdGljIGlu dCBpZ3RfY3R4X2V4ZWModm9pZCAqYXJnKQo+ICAgCQkJCSAgICAgICBuZHdvcmRzLCBkdywgbWF4 X2R3b3JkcyhvYmopLAo+ICAgCQkJCSAgICAgICBlbmdpbmUtPm5hbWUsIGN0eC0+aHdfaWQsCj4g ICAJCQkJICAgICAgIHllc25vKCEhY3R4LT5wcGd0dCksIGVycik7Cj4gLQkJCQlnb3RvIG91dF91 bmxvY2s7Cj4gKwkJCQlnb3RvIG91dF90ZXN0Owo+ICAgCQkJfQo+ICAgCj4gICAJCQlpZiAoKytk dyA9PSBtYXhfZHdvcmRzKG9iaikpIHsKPiAgIAkJCQlvYmogPSBOVUxMOwo+ICAgCQkJCWR3ID0g MDsKPiAgIAkJCX0KPiArCj4gICAJCQluZHdvcmRzKys7Cj4gKwkJCW5jb250ZXh0cysrOwo+ICAg CQl9Cj4gLQkJbmNvbnRleHRzKys7Cj4gLQl9Cj4gLQlwcl9pbmZvKCJTdWJtaXR0ZWQgJWx1IGNv bnRleHRzIChhY3Jvc3MgJXUgZW5naW5lcyksIGZpbGxpbmcgJWx1IGR3b3Jkc1xuIiwKPiAtCQlu Y29udGV4dHMsIFJVTlRJTUVfSU5GTyhpOTE1KS0+bnVtX2VuZ2luZXMsIG5kd29yZHMpOwo+ICsJ CXByX2luZm8oIlN1Ym1pdHRlZCAlbHUgY29udGV4dHMgdG8gJXMsIGZpbGxpbmcgJWx1IGR3b3Jk c1xuIiwKPiArCQkJbmNvbnRleHRzLCBlbmdpbmUtPm5hbWUsIG5kd29yZHMpOwo+ICAgCj4gLQlk dyA9IDA7Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgJm9iamVjdHMsIHN0X2xpbmspIHsK PiAtCQl1bnNpZ25lZCBpbnQgcmVtID0KPiAtCQkJbWluX3QodW5zaWduZWQgaW50LCBuZHdvcmRz IC0gZHcsIG1heF9kd29yZHMob2JqKSk7Cj4gKwkJbmNvbnRleHRzID0gZHcgPSAwOwo+ICsJCWxp c3RfZm9yX2VhY2hfZW50cnkob2JqLCAmb2JqZWN0cywgc3RfbGluaykgewo+ICsJCQl1bnNpZ25l ZCBpbnQgcmVtID0KPiArCQkJCW1pbl90KHVuc2lnbmVkIGludCwgbmR3b3JkcyAtIGR3LCBtYXhf ZHdvcmRzKG9iaikpOwo+ICAgCj4gLQkJZXJyID0gY3B1X2NoZWNrKG9iaiwgcmVtKTsKPiAtCQlp ZiAoZXJyKQo+IC0JCQlicmVhazsKPiArCQkJZXJyID0gY3B1X2NoZWNrKG9iaiwgbmNvbnRleHRz KyssIHJlbSk7Cj4gKwkJCWlmIChlcnIpCj4gKwkJCQlnb3RvIG91dF90ZXN0Owo+ICAgCj4gLQkJ ZHcgKz0gcmVtOwo+ICsJCQlkdyArPSByZW07Cj4gKwkJfQo+ICAgCX0KPiAtCj4gLW91dF91bmxv Y2s6Cj4gK291dF90ZXN0Ogo+ICAgCWlmIChpZ3RfbGl2ZV90ZXN0X2VuZCgmdCkpCj4gICAJCWVy ciA9IC1FSU87Cj4gK291dF91bmxvY2s6Cj4gICAJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKPiAgIAo+ICAgCW1vY2tfZmlsZV9mcmVlKGk5MTUsIGZpbGUpOwo+IEBAIC0x MDQ4LDcgKzExNzQsNyBAQCBzdGF0aWMgaW50IGlndF9jdHhfcmVhZG9ubHkodm9pZCAqYXJnKQo+ ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBOVUxMOwo+ICAgCXN0cnVjdCBp OTE1X2dlbV9jb250ZXh0ICpjdHg7Cj4gICAJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0Owo+ IC0JdW5zaWduZWQgbG9uZyBuZHdvcmRzLCBkdzsKPiArCXVuc2lnbmVkIGxvbmcgaWR4LCBuZHdv cmRzLCBkdzsKPiAgIAlzdHJ1Y3QgaWd0X2xpdmVfdGVzdCB0Owo+ICAgCXN0cnVjdCBkcm1fZmls ZSAqZmlsZTsKPiAgIAlJOTE1X1JORF9TVEFURShwcm5nKTsKPiBAQCAtMTEyOSw2ICsxMjU1LDcg QEAgc3RhdGljIGludCBpZ3RfY3R4X3JlYWRvbmx5KHZvaWQgKmFyZykKPiAgIAkJbmR3b3Jkcywg UlVOVElNRV9JTkZPKGk5MTUpLT5udW1fZW5naW5lcyk7Cj4gICAKPiAgIAlkdyA9IDA7Cj4gKwlp ZHggPSAwOwo+ICAgCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmb2JqZWN0cywgc3RfbGluaykg ewo+ICAgCQl1bnNpZ25lZCBpbnQgcmVtID0KPiAgIAkJCW1pbl90KHVuc2lnbmVkIGludCwgbmR3 b3JkcyAtIGR3LCBtYXhfZHdvcmRzKG9iaikpOwo+IEBAIC0xMTM4LDcgKzEyNjUsNyBAQCBzdGF0 aWMgaW50IGlndF9jdHhfcmVhZG9ubHkodm9pZCAqYXJnKQo+ICAgCQlpZiAoaTkxNV9nZW1fb2Jq ZWN0X2lzX3JlYWRvbmx5KG9iaikpCj4gICAJCQludW1fd3JpdGVzID0gMDsKPiAgIAo+IC0JCWVy ciA9IGNwdV9jaGVjayhvYmosIG51bV93cml0ZXMpOwo+ICsJCWVyciA9IGNwdV9jaGVjayhvYmos IGlkeCsrLCBudW1fd3JpdGVzKTsKPiAgIAkJaWYgKGVycikKPiAgIAkJCWJyZWFrOwo+ICAgCj4g QEAgLTE2MjYsNyArMTc1Myw4IEBAIHN0YXRpYyBpbnQgbW9ja19jb250ZXh0X2JhcnJpZXIodm9p ZCAqYXJnKQo+ICAgCX0KPiAgIAo+ICAgCWNvdW50ZXIgPSAwOwo+IC0JZXJyID0gY29udGV4dF9i YXJyaWVyX3Rhc2soY3R4LCAwLCBtb2NrX2JhcnJpZXJfdGFzaywgJmNvdW50ZXIpOwo+ICsJZXJy ID0gY29udGV4dF9iYXJyaWVyX3Rhc2soY3R4LCAwLAo+ICsJCQkJICAgTlVMTCwgbW9ja19iYXJy aWVyX3Rhc2ssICZjb3VudGVyKTsKPiAgIAlpZiAoZXJyKSB7Cj4gICAJCXByX2VycigiRmFpbGVk IGF0IGxpbmUgJWQsIGVycj0lZFxuIiwgX19MSU5FX18sIGVycik7Cj4gICAJCWdvdG8gb3V0Owo+ IEBAIC0xNjM4LDggKzE3NjYsOCBAQCBzdGF0aWMgaW50IG1vY2tfY29udGV4dF9iYXJyaWVyKHZv aWQgKmFyZykKPiAgIAl9Cj4gICAKPiAgIAljb3VudGVyID0gMDsKPiAtCWVyciA9IGNvbnRleHRf YmFycmllcl90YXNrKGN0eCwKPiAtCQkJCSAgIEFMTF9FTkdJTkVTLCBtb2NrX2JhcnJpZXJfdGFz aywgJmNvdW50ZXIpOwo+ICsJZXJyID0gY29udGV4dF9iYXJyaWVyX3Rhc2soY3R4LCBBTExfRU5H SU5FUywKPiArCQkJCSAgIE5VTEwsIG1vY2tfYmFycmllcl90YXNrLCAmY291bnRlcik7Cj4gICAJ aWYgKGVycikgewo+ICAgCQlwcl9lcnIoIkZhaWxlZCBhdCBsaW5lICVkLCBlcnI9JWRcbiIsIF9f TElORV9fLCBlcnIpOwo+ICAgCQlnb3RvIG91dDsKPiBAQCAtMTY2Miw4ICsxNzkwLDggQEAgc3Rh dGljIGludCBtb2NrX2NvbnRleHRfYmFycmllcih2b2lkICphcmcpCj4gICAKPiAgIAljb3VudGVy ID0gMDsKPiAgIAljb250ZXh0X2JhcnJpZXJfaW5qZWN0X2ZhdWx0ID0gQklUKFJDUzApOwo+IC0J ZXJyID0gY29udGV4dF9iYXJyaWVyX3Rhc2soY3R4LAo+IC0JCQkJICAgQUxMX0VOR0lORVMsIG1v Y2tfYmFycmllcl90YXNrLCAmY291bnRlcik7Cj4gKwllcnIgPSBjb250ZXh0X2JhcnJpZXJfdGFz ayhjdHgsIEFMTF9FTkdJTkVTLAo+ICsJCQkJICAgTlVMTCwgbW9ja19iYXJyaWVyX3Rhc2ssICZj b3VudGVyKTsKPiAgIAljb250ZXh0X2JhcnJpZXJfaW5qZWN0X2ZhdWx0ID0gMDsKPiAgIAlpZiAo ZXJyID09IC1FTlhJTykKPiAgIAkJZXJyID0gMDsKPiBAQCAtMTY3Nyw4ICsxODA1LDggQEAgc3Rh dGljIGludCBtb2NrX2NvbnRleHRfYmFycmllcih2b2lkICphcmcpCj4gICAJCWdvdG8gb3V0Owo+ ICAgCj4gICAJY291bnRlciA9IDA7Cj4gLQllcnIgPSBjb250ZXh0X2JhcnJpZXJfdGFzayhjdHgs Cj4gLQkJCQkgICBBTExfRU5HSU5FUywgbW9ja19iYXJyaWVyX3Rhc2ssICZjb3VudGVyKTsKPiAr CWVyciA9IGNvbnRleHRfYmFycmllcl90YXNrKGN0eCwgQUxMX0VOR0lORVMsCj4gKwkJCQkgICBO VUxMLCBtb2NrX2JhcnJpZXJfdGFzaywgJmNvdW50ZXIpOwo+ICAgCWlmIChlcnIpIHsKPiAgIAkJ cHJfZXJyKCJGYWlsZWQgYXQgbGluZSAlZCwgZXJyPSVkXG4iLCBfX0xJTkVfXywgZXJyKTsKPiAg IAkJZ290byBvdXQ7Cj4gQEAgLTE3MjYsNiArMTg1NCw3IEBAIGludCBpOTE1X2dlbV9jb250ZXh0 X2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgIAkJ U1VCVEVTVChpZ3RfY3R4X2V4ZWMpLAo+ICAgCQlTVUJURVNUKGlndF9jdHhfcmVhZG9ubHkpLAo+ ICAgCQlTVUJURVNUKGlndF9jdHhfc3NldSksCj4gKwkJU1VCVEVTVChpZ3Rfc2hhcmVkX2N0eF9l eGVjKSwKPiAgIAkJU1VCVEVTVChpZ3Rfdm1faXNvbGF0aW9uKSwKPiAgIAl9Owo+ICAgCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYwo+IGluZGV4IDgy NmZkNTFjMzMxZS4uNTdiM2Q5ODY3MDcwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYwo+IEBAIC0xMDIwLDcgKzEwMjAsNiBAQCBzdGF0aWMg aW50IGV4ZXJjaXNlX3BwZ3R0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAg IAo+ICAgCWVyciA9IGZ1bmMoZGV2X3ByaXYsICZwcGd0dC0+dm0sIDAsIHBwZ3R0LT52bS50b3Rh bCwgZW5kX3RpbWUpOwo+ICAgCj4gLQlpOTE1X3BwZ3R0X2Nsb3NlKCZwcGd0dC0+dm0pOwo+ICAg CWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKPiAgIG91dF91bmxvY2s6Cj4gICAJbXV0ZXhfdW5sb2Nr KCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYwo+IGluZGV4IDhlZmE2ODkyYzZjZC4uZjkwMzI4YjIx NzYzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2Nv bnRleHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2NvbnRl eHQuYwo+IEBAIC01NCwxMyArNTQsMTcgQEAgbW9ja19jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1LAo+ICAgCQlnb3RvIGVycl9oYW5kbGVzOwo+ICAgCj4gICAJaWYgKG5hbWUp IHsKPiArCQlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQ7Cj4gKwo+ICAgCQljdHgtPm5hbWUg PSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOwo+ICAgCQlpZiAoIWN0eC0+bmFtZSkKPiAgIAkJ CWdvdG8gZXJyX3B1dDsKPiAgIAo+IC0JCWN0eC0+cHBndHQgPSBtb2NrX3BwZ3R0KGk5MTUsIG5h bWUpOwo+IC0JCWlmICghY3R4LT5wcGd0dCkKPiArCQlwcGd0dCA9IG1vY2tfcHBndHQoaTkxNSwg bmFtZSk7Cj4gKwkJaWYgKCFwcGd0dCkKPiAgIAkJCWdvdG8gZXJyX3B1dDsKPiArCj4gKwkJX19z ZXRfcHBndHQoY3R4LCBwcGd0dCk7Cj4gICAJfQo+ICAgCj4gICAJcmV0dXJuIGN0eDsKPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS9p OTE1X2RybS5oCj4gaW5kZXggMWM2OWVkMTZhOTIzLi41MDc5ZTI1OTA5ZWYgMTAwNjQ0Cj4gLS0t IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gKysrIGIvaW5jbHVkZS91YXBpL2RybS9p OTE1X2RybS5oCj4gQEAgLTM0Myw2ICszNDMsOCBAQCB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVf c2FyZWEgewo+ICAgI2RlZmluZSBEUk1fSTkxNV9QRVJGX0FERF9DT05GSUcJMHgzNwo+ICAgI2Rl ZmluZSBEUk1fSTkxNV9QRVJGX1JFTU9WRV9DT05GSUcJMHgzOAo+ICAgI2RlZmluZSBEUk1fSTkx NV9RVUVSWQkJCTB4MzkKPiArI2RlZmluZSBEUk1fSTkxNV9HRU1fVk1fQ1JFQVRFCQkweDNhCj4g KyNkZWZpbmUgRFJNX0k5MTVfR0VNX1ZNX0RFU1RST1kJCTB4M2IKPiAgIC8qIE11c3QgYmUga2Vw dCBjb21wYWN0IC0tIG5vIGhvbGVzICovCj4gICAKPiAgICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVf SU5JVAkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0lOSVQsIGRybV9pOTE1 X2luaXRfdCkKPiBAQCAtNDAyLDYgKzQwNCw4IEBAIHR5cGVkZWYgc3RydWN0IF9kcm1faTkxNV9z YXJlYSB7Cj4gICAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X1BFUkZfQUREX0NPTkZJRwlEUk1fSU9X KERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9QRVJGX0FERF9DT05GSUcsIHN0cnVjdCBkcm1f aTkxNV9wZXJmX29hX2NvbmZpZykKPiAgICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfUEVSRl9SRU1P VkVfQ09ORklHCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1BFUkZfUkVNT1ZF X0NPTkZJRywgX191NjQpCj4gICAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X1FVRVJZCQkJRFJNX0lP V1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1FVRVJZLCBzdHJ1Y3QgZHJtX2k5MTVfcXVl cnkpCj4gKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1ZNX0NSRUFURQlEUk1fSU9XUihEUk1f Q09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1ZNX0NSRUFURSwgc3RydWN0IGRybV9pOTE1X2dl bV92bV9jb250cm9sKQo+ICsjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9WTV9ERVNUUk9ZCURS TV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fVk1fREVTVFJPWSwgc3RydWN0 IGRybV9pOTE1X2dlbV92bV9jb250cm9sKQo+ICAgCj4gICAvKiBBbGxvdyBkcml2ZXJzIHRvIHN1 Ym1pdCBiYXRjaGJ1ZmZlcnMgZGlyZWN0bHkgdG8gaGFyZHdhcmUsIHJlbHlpbmcKPiAgICAqIG9u IHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHByb3ZpZGVkIGJ5IGhhcmR3YXJlLgo+IEBAIC0xNDUz LDYgKzE0NTcsMzMgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2Rlc3Ryb3kgewo+ICAg CV9fdTMyIHBhZDsKPiAgIH07Cj4gICAKPiArLyoKPiArICogRFJNX0k5MTVfR0VNX1ZNX0NSRUFU RSAtCj4gKyAqCj4gKyAqIENyZWF0ZSBhIG5ldyB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIHNwYWNl IChwcEdUVCkgZm9yIHVzZSB3aXRoaW4gYSBjb250ZXh0Cj4gKyAqIG9uIHRoZSBzYW1lIGZpbGUu IEV4dGVuc2lvbnMgY2FuIGJlIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZSBleGFjdGx5IGhvdyB0aGUK PiArICogYWRkcmVzcyBzcGFjZSBpcyBzZXR1cCB1cG9uIGNyZWF0aW9uLgo+ICsgKgo+ICsgKiBU aGUgaWQgb2YgbmV3IFZNIChib3VuZCB0byB0aGUgZmQpIGZvciB1c2Ugd2l0aCBJOTE1X0NPTlRF WFRfUEFSQU1fVk0gaXMKPiArICogcmV0dXJuZWQgaW4gdGhlIG91dHBhcmFtIEBpZC4KPiArICoK PiArICogTm8gZmxhZ3MgYXJlIGRlZmluZWQsIHdpdGggYWxsIGJpdHMgcmVzZXJ2ZWQgYW5kIG11 c3QgYmUgemVyby4KPiArICoKPiArICogQW4gZXh0ZW5zaW9uIGNoYWluIG1heWJlIHByb3ZpZGVk LCBzdGFydGluZyB3aXRoIEBleHRlbnNpb25zLCBhbmQgdGVybWluYXRlZAo+ICsgKiBieSB0aGUg QG5leHRfZXh0ZW5zaW9uIGJlaW5nIDAuIEN1cnJlbnRseSwgbm8gZXh0ZW5zaW9ucyBhcmUgZGVm aW5lZC4KPiArICoKPiArICogRFJNX0k5MTVfR0VNX1ZNX0RFU1RST1kgLQo+ICsgKgo+ICsgKiBE ZXN0cm95cyBhIHByZXZpb3VzbHkgY3JlYXRlZCBWTSBpZCwgc3BlY2lmaWVkIGluIEBpZC4KPiAr ICoKPiArICogTm8gZXh0ZW5zaW9ucyBvciBmbGFncyBhcmUgYWxsb3dlZCBjdXJyZW50bHksIGFu ZCBzbyBtdXN0IGJlIHplcm8uCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRy b2wgewo+ICsJX191NjQgZXh0ZW5zaW9uczsKPiArCV9fdTMyIGZsYWdzOwo+ICsJX191MzIgaWQ7 Cj4gK307Cj4gKwo+ICAgc3RydWN0IGRybV9pOTE1X3JlZ19yZWFkIHsKPiAgIAkvKgo+ICAgCSAq IFJlZ2lzdGVyIG9mZnNldC4KPiBAQCAtMTU0Miw3ICsxNTczLDE5IEBAIHN0cnVjdCBkcm1faTkx NV9nZW1fY29udGV4dF9wYXJhbSB7Cj4gICAgKiBPbiBjcmVhdGlvbiwgYWxsIG5ldyBjb250ZXh0 cyBhcmUgbWFya2VkIGFzIHJlY292ZXJhYmxlLgo+ICAgICovCj4gICAjZGVmaW5lIEk5MTVfQ09O VEVYVF9QQVJBTV9SRUNPVkVSQUJMRQkweDgKPiArCj4gKwkvKgo+ICsJICogVGhlIGlkIG9mIHRo ZSBhc3NvY2lhdGVkIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3Mgc3BhY2UgKHBwR1RUKSBvZgo+ICsJ ICogdGhpcyBjb250ZXh0LiBDYW4gYmUgcmV0cmlldmVkIGFuZCBwYXNzZWQgdG8gYW5vdGhlciBj b250ZXh0Cj4gKwkgKiAob24gdGhlIHNhbWUgZmQpIGZvciBib3RoIHRvIHVzZSB0aGUgc2FtZSBw cEdUVCBhbmQgc28gc2hhcmUKPiArCSAqIGFkZHJlc3MgbGF5b3V0cywgYW5kIGF2b2lkIHJlbG9h ZGluZyB0aGUgcGFnZSB0YWJsZXMgb24gY29udGV4dAo+ICsJICogc3dpdGNoZXMgYmV0d2VlbiB0 aGVtc2VsdmVzLgo+ICsJICoKPiArCSAqIFNlZSBEUk1fSTkxNV9HRU1fVk1fQ1JFQVRFIGFuZCBE Uk1fSTkxNV9HRU1fVk1fREVTVFJPWS4KPiArCSAqLwo+ICsjZGVmaW5lIEk5MTVfQ09OVEVYVF9Q QVJBTV9WTQkJMHg5Cj4gICAvKiBNdXN0IGJlIGtlcHQgY29tcGFjdCAtLSBubyBob2xlcyBhbmQg d2VsbCBkb2N1bWVudGVkICovCj4gKwo+ICAgCV9fdTY0IHZhbHVlOwo+ICAgfTsKPiAgIAo+IApf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=