From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [PATCH v2] drm/i915: Avoid using intel_engine_cs *ring for GPU error capture Date: Tue, 26 Jul 2016 15:35:41 +0300 Message-ID: <1469536541.4681.80.camel@linux.intel.com> References: <1469509169.4681.9.camel@linux.intel.com> <1469528511-4262-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 8AAD96E16A for ; Tue, 26 Jul 2016 12:35:44 +0000 (UTC) In-Reply-To: <1469528511-4262-1-git-send-email-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 T24gdGksIDIwMTYtMDctMjYgYXQgMTE6MjEgKzAxMDAsIENocmlzIFdpbHNvbiB3cm90ZToKPiBJ bnNpZGUgdGhlIGVycm9yIGNhcHR1cmUgaXRzZWxmLCB3ZSByZWZlciB0byBub3Qgb25seSB0aGUg aGFyZHdhcmUKPiBlbmdpbmUsIGl0cyByaW5nYnVmZmVyIGJ1dCBhbHNvIHRoZSBjYXB0dXJlIHN0 YXRlLiBGaW5kaW5nIGNsZWFyIG5hbWVzCj4gZm9yIGVhY2ggd2hpbHN0IGF2b2lkaW5nIG1peGlu ZyByaW5nL2ludGVsX2VuZ2luZV9jcyBpcyB0cmlja3kuIEFzIGEKPiBjb21wcm9taXNlIHdlIGtl ZXAgdXNpbmcgZXJpbmcgZm9yIHRoZSBlcnJvciBjYXB0dXJlLgo+IAo+IHYyOiBVc2UgJ2VlJyBs b2NhbHMgZm9yIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9lbmdpbmUKCkFzc3VtaW5nIHRoaXMgaXMg dGhlIGNoYW5nZSwgbG9va3MgZ29vZCBub3c7CgpSZXZpZXdlZC1ieTogSm9vbmFzIExhaHRpbmVu IDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgoKPiAKPiBTaWduZWQtb2ZmLWJ5OiBD aHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBMaW5rOiBodHRwOi8vcGF0 Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9wYXRjaC9tc2dpZC8xNDY5NDMyNjg3LTIyNzU2LTgtZ2l0 LXNlbmQtZW1haWwtY2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrCj4gQ2M6IEpvb25hcyBMYWh0aW5l biA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiDCoGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmjCoMKgwqDCoMKgwqDCoHzCoMKgwqA4ICstCj4gwqBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jIHwgNDAzICsrKysrKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tLS0KPiDCoDIgZmlsZXMgY2hhbmdlZCwgMjA4IGluc2VydGlvbnMoKyksIDIw MyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCA5N2Y4Mjc5 NzlhNjYuLjY1YWRhNWQyZjg4YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC01 MTIsOCArNTEyLDggQEAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlIHsKPiDCoAlzdHJ1Y3Qg aW50ZWxfZGlzcGxheV9lcnJvcl9zdGF0ZSAqZGlzcGxheTsKPiDCoAlzdHJ1Y3QgZHJtX2k5MTVf ZXJyb3Jfb2JqZWN0ICpzZW1hcGhvcmVfb2JqOwo+IMKgCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZXJy b3JfcmluZyB7Cj4gLQkJYm9vbCB2YWxpZDsKPiArCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9lbmdp bmUgewo+ICsJCWludCBlbmdpbmVfaWQ7Cj4gwqAJCS8qIFNvZnR3YXJlIHRyYWNrZWQgc3RhdGUg Ki8KPiDCoAkJYm9vbCB3YWl0aW5nOwo+IMKgCQlpbnQgbnVtX3dhaXRlcnM7Cj4gQEAgLTU3OCw3 ICs1NzgsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGUgewo+IMKgCj4gwqAJCXBpZF90 IHBpZDsKPiDCoAkJY2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOwo+IC0JfSByaW5nW0k5MTVfTlVN X0VOR0lORVNdOwo+ICsJfSBlbmdpbmVbSTkxNV9OVU1fRU5HSU5FU107Cj4gwqAKPiDCoAlzdHJ1 Y3QgZHJtX2k5MTVfZXJyb3JfYnVmZmVyIHsKPiDCoAkJdTMyIHNpemU7Cj4gQEAgLTU5Myw3ICs1 OTMsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGUgewo+IMKgCQl1MzIgZGlydHk6MTsK PiDCoAkJdTMyIHB1cmdlYWJsZToxOwo+IMKgCQl1MzIgdXNlcnB0cjoxOwo+IC0JCXMzMiByaW5n OjQ7Cj4gKwkJczMyIGVuZ2luZTo0Owo+IMKgCQl1MzIgY2FjaGVfbGV2ZWw6MzsKPiDCoAl9ICoq YWN0aXZlX2JvLCAqKnBpbm5lZF9ibzsKPiDCoAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVf ZXJyb3IuYwo+IGluZGV4IDRkMzljNzI4NDYwNS4uYmM0YTNlYmMyNjYyIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCj4gQEAgLTMwLDkgKzMwLDkgQEAKPiDCoCNpbmNs dWRlIAo+IMKgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gwqAKPiAtc3RhdGljIGNvbnN0IGNoYXIg KnJpbmdfc3RyKGludCByaW5nKQo+ICtzdGF0aWMgY29uc3QgY2hhciAqZW5naW5lX3N0cihpbnQg ZW5naW5lKQo+IMKgewo+IC0Jc3dpdGNoIChyaW5nKSB7Cj4gKwlzd2l0Y2ggKGVuZ2luZSkgewo+ IMKgCWNhc2UgUkNTOiByZXR1cm4gInJlbmRlciI7Cj4gwqAJY2FzZSBWQ1M6IHJldHVybiAiYnNk IjsKPiDCoAljYXNlIEJDUzogcmV0dXJuICJibHQiOwo+IEBAIC0yMDcsOCArMjA3LDggQEAgc3Rh dGljIHZvaWQgcHJpbnRfZXJyb3JfYnVmZmVycyhzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGVf YnVmICptLAo+IMKgCQllcnJfcHV0cyhtLCBkaXJ0eV9mbGFnKGVyci0+ZGlydHkpKTsKPiDCoAkJ ZXJyX3B1dHMobSwgcHVyZ2VhYmxlX2ZsYWcoZXJyLT5wdXJnZWFibGUpKTsKPiDCoAkJZXJyX3B1 dHMobSwgZXJyLT51c2VycHRyID8gIiB1c2VycHRyIiA6ICIiKTsKPiAtCQllcnJfcHV0cyhtLCBl cnItPnJpbmcgIT0gLTEgPyAiICIgOiAiIik7Cj4gLQkJZXJyX3B1dHMobSwgcmluZ19zdHIoZXJy LT5yaW5nKSk7Cj4gKwkJZXJyX3B1dHMobSwgZXJyLT5lbmdpbmUgIT0gLTEgPyAiICIgOiAiIik7 Cj4gKwkJZXJyX3B1dHMobSwgZW5naW5lX3N0cihlcnItPmVuZ2luZSkpOwo+IMKgCQllcnJfcHV0 cyhtLCBpOTE1X2NhY2hlX2xldmVsX3N0cihtLT5pOTE1LCBlcnItPmNhY2hlX2xldmVsKSk7Cj4g wqAKPiDCoAkJaWYgKGVyci0+bmFtZSkKPiBAQCAtMjM5LDcwICsyMzksNjUgQEAgc3RhdGljIGNv bnN0IGNoYXIgKmhhbmdjaGVja19hY3Rpb25fdG9fc3RyKGVudW0gaW50ZWxfcmluZ19oYW5nY2hl Y2tfYWN0aW9uIGEpCj4gwqAJcmV0dXJuICJ1bmtub3duIjsKPiDCoH0KPiDCoAo+IC1zdGF0aWMg dm9pZCBpOTE1X3JpbmdfZXJyb3Jfc3RhdGUoc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlX2J1 ZiAqbSwKPiAtCQkJCcKgwqBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IC0JCQkJwqDCoHN0cnVj dCBkcm1faTkxNV9lcnJvcl9zdGF0ZSAqZXJyb3IsCj4gLQkJCQnCoMKgaW50IHJpbmdfaWR4KQo+ ICtzdGF0aWMgdm9pZCBlcnJvcl9wcmludF9lbmdpbmUoc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0 YXRlX2J1ZiAqbSwKPiArCQkJwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfZW5n aW5lICplZSkKPiDCoHsKPiAtCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9yaW5nICpyaW5nID0gJmVy cm9yLT5yaW5nW3JpbmdfaWR4XTsKPiAtCj4gLQlpZiAoIXJpbmctPnZhbGlkKQo+IC0JCXJldHVy bjsKPiAtCj4gLQllcnJfcHJpbnRmKG0sICIlcyBjb21tYW5kIHN0cmVhbTpcbiIsIHJpbmdfc3Ry KHJpbmdfaWR4KSk7Cj4gLQllcnJfcHJpbnRmKG0sICLCoMKgU1RBUlQ6IDB4JTA4eFxuIiwgcmlu Zy0+c3RhcnQpOwo+IC0JZXJyX3ByaW50ZihtLCAiwqDCoEhFQUQ6wqDCoDB4JTA4eFxuIiwgcmlu Zy0+aGVhZCk7Cj4gLQllcnJfcHJpbnRmKG0sICLCoMKgVEFJTDrCoMKgMHglMDh4XG4iLCByaW5n LT50YWlsKTsKPiAtCWVycl9wcmludGYobSwgIsKgwqBDVEw6wqDCoMKgMHglMDh4XG4iLCByaW5n LT5jdGwpOwo+IC0JZXJyX3ByaW50ZihtLCAiwqDCoEhXUzrCoMKgwqAweCUwOHhcbiIsIHJpbmct Pmh3cyk7Cj4gLQllcnJfcHJpbnRmKG0sICLCoMKgQUNUSEQ6IDB4JTA4eCAlMDh4XG4iLCAodTMy KShyaW5nLT5hY3RoZD4+MzIpLCAodTMyKXJpbmctPmFjdGhkKTsKPiAtCWVycl9wcmludGYobSwg IsKgwqBJUEVJUjogMHglMDh4XG4iLCByaW5nLT5pcGVpcik7Cj4gLQllcnJfcHJpbnRmKG0sICLC oMKgSVBFSFI6IDB4JTA4eFxuIiwgcmluZy0+aXBlaHIpOwo+IC0JZXJyX3ByaW50ZihtLCAiwqDC oElOU1RET05FOiAweCUwOHhcbiIsIHJpbmctPmluc3Rkb25lKTsKPiAtCWlmIChJTlRFTF9JTkZP KGRldiktPmdlbiA+PSA0KSB7Cj4gLQkJZXJyX3ByaW50ZihtLCAiwqDCoEJCQUREUjogMHglMDh4 ICUwOHhcbiIsICh1MzIpKHJpbmctPmJiYWRkcj4+MzIpLCAodTMyKXJpbmctPmJiYWRkcik7Cj4g LQkJZXJyX3ByaW50ZihtLCAiwqDCoEJCX1NUQVRFOiAweCUwOHhcbiIsIHJpbmctPmJic3RhdGUp Owo+IC0JCWVycl9wcmludGYobSwgIsKgwqBJTlNUUFM6IDB4JTA4eFxuIiwgcmluZy0+aW5zdHBz KTsKPiArCWVycl9wcmludGYobSwgIiVzIGNvbW1hbmQgc3RyZWFtOlxuIiwgZW5naW5lX3N0cihl ZS0+ZW5naW5lX2lkKSk7Cj4gKwllcnJfcHJpbnRmKG0sICLCoMKgU1RBUlQ6IDB4JTA4eFxuIiwg ZWUtPnN0YXJ0KTsKPiArCWVycl9wcmludGYobSwgIsKgwqBIRUFEOsKgwqAweCUwOHhcbiIsIGVl LT5oZWFkKTsKPiArCWVycl9wcmludGYobSwgIsKgwqBUQUlMOsKgwqAweCUwOHhcbiIsIGVlLT50 YWlsKTsKPiArCWVycl9wcmludGYobSwgIsKgwqBDVEw6wqDCoMKgMHglMDh4XG4iLCBlZS0+Y3Rs KTsKPiArCWVycl9wcmludGYobSwgIsKgwqBIV1M6wqDCoMKgMHglMDh4XG4iLCBlZS0+aHdzKTsK PiArCWVycl9wcmludGYobSwgIsKgwqBBQ1RIRDogMHglMDh4ICUwOHhcbiIsCj4gKwkJwqDCoMKg KHUzMikoZWUtPmFjdGhkPj4zMiksICh1MzIpZWUtPmFjdGhkKTsKPiArCWVycl9wcmludGYobSwg IsKgwqBJUEVJUjogMHglMDh4XG4iLCBlZS0+aXBlaXIpOwo+ICsJZXJyX3ByaW50ZihtLCAiwqDC oElQRUhSOiAweCUwOHhcbiIsIGVlLT5pcGVocik7Cj4gKwllcnJfcHJpbnRmKG0sICLCoMKgSU5T VERPTkU6IDB4JTA4eFxuIiwgZWUtPmluc3Rkb25lKTsKPiArCWlmIChJTlRFTF9HRU4obS0+aTkx NSkgPj0gNCkgewo+ICsJCWVycl9wcmludGYobSwgIsKgwqBCQkFERFI6IDB4JTA4eCAlMDh4XG4i LAo+ICsJCQnCoMKgwqAodTMyKShlZS0+YmJhZGRyPj4zMiksICh1MzIpZWUtPmJiYWRkcik7Cj4g KwkJZXJyX3ByaW50ZihtLCAiwqDCoEJCX1NUQVRFOiAweCUwOHhcbiIsIGVlLT5iYnN0YXRlKTsK PiArCQllcnJfcHJpbnRmKG0sICLCoMKgSU5TVFBTOiAweCUwOHhcbiIsIGVlLT5pbnN0cHMpOwo+ IMKgCX0KPiAtCWVycl9wcmludGYobSwgIsKgwqBJTlNUUE06IDB4JTA4eFxuIiwgcmluZy0+aW5z dHBtKTsKPiAtCWVycl9wcmludGYobSwgIsKgwqBGQUREUjogMHglMDh4ICUwOHhcbiIsIHVwcGVy XzMyX2JpdHMocmluZy0+ZmFkZHIpLAo+IC0JCcKgwqDCoGxvd2VyXzMyX2JpdHMocmluZy0+ZmFk ZHIpKTsKPiAtCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA2KSB7Cj4gLQkJZXJyX3ByaW50 ZihtLCAiwqDCoFJDIFBTTUk6IDB4JTA4eFxuIiwgcmluZy0+cmNfcHNtaSk7Cj4gLQkJZXJyX3By aW50ZihtLCAiwqDCoEZBVUxUX1JFRzogMHglMDh4XG4iLCByaW5nLT5mYXVsdF9yZWcpOwo+ICsJ ZXJyX3ByaW50ZihtLCAiwqDCoElOU1RQTTogMHglMDh4XG4iLCBlZS0+aW5zdHBtKTsKPiArCWVy cl9wcmludGYobSwgIsKgwqBGQUREUjogMHglMDh4ICUwOHhcbiIsIHVwcGVyXzMyX2JpdHMoZWUt PmZhZGRyKSwKPiArCQnCoMKgwqBsb3dlcl8zMl9iaXRzKGVlLT5mYWRkcikpOwo+ICsJaWYgKElO VEVMX0dFTihtLT5pOTE1KSA+PSA2KSB7Cj4gKwkJZXJyX3ByaW50ZihtLCAiwqDCoFJDIFBTTUk6 IDB4JTA4eFxuIiwgZWUtPnJjX3BzbWkpOwo+ICsJCWVycl9wcmludGYobSwgIsKgwqBGQVVMVF9S RUc6IDB4JTA4eFxuIiwgZWUtPmZhdWx0X3JlZyk7Cj4gwqAJCWVycl9wcmludGYobSwgIsKgwqBT WU5DXzA6IDB4JTA4eCBbbGFzdCBzeW5jZWQgMHglMDh4XVxuIiwKPiAtCQkJwqDCoMKgcmluZy0+ c2VtYXBob3JlX21ib3hlc1swXSwKPiAtCQkJwqDCoMKgcmluZy0+c2VtYXBob3JlX3NlcW5vWzBd KTsKPiArCQkJwqDCoMKgZWUtPnNlbWFwaG9yZV9tYm94ZXNbMF0sCj4gKwkJCcKgwqDCoGVlLT5z ZW1hcGhvcmVfc2Vxbm9bMF0pOwo+IMKgCQllcnJfcHJpbnRmKG0sICLCoMKgU1lOQ18xOiAweCUw OHggW2xhc3Qgc3luY2VkIDB4JTA4eF1cbiIsCj4gLQkJCcKgwqDCoHJpbmctPnNlbWFwaG9yZV9t Ym94ZXNbMV0sCj4gLQkJCcKgwqDCoHJpbmctPnNlbWFwaG9yZV9zZXFub1sxXSk7Cj4gLQkJaWYg KEhBU19WRUJPWChkZXYpKSB7Cj4gKwkJCcKgwqDCoGVlLT5zZW1hcGhvcmVfbWJveGVzWzFdLAo+ ICsJCQnCoMKgwqBlZS0+c2VtYXBob3JlX3NlcW5vWzFdKTsKPiArCQlpZiAoSEFTX1ZFQk9YKG0t Pmk5MTUpKSB7Cj4gwqAJCQllcnJfcHJpbnRmKG0sICLCoMKgU1lOQ18yOiAweCUwOHggW2xhc3Qg c3luY2VkIDB4JTA4eF1cbiIsCj4gLQkJCQnCoMKgwqByaW5nLT5zZW1hcGhvcmVfbWJveGVzWzJd LAo+IC0JCQkJwqDCoMKgcmluZy0+c2VtYXBob3JlX3NlcW5vWzJdKTsKPiArCQkJCcKgwqDCoGVl LT5zZW1hcGhvcmVfbWJveGVzWzJdLAo+ICsJCQkJwqDCoMKgZWUtPnNlbWFwaG9yZV9zZXFub1sy XSk7Cj4gwqAJCX0KPiDCoAl9Cj4gLQlpZiAoVVNFU19QUEdUVChkZXYpKSB7Cj4gLQkJZXJyX3By aW50ZihtLCAiwqDCoEdGWF9NT0RFOiAweCUwOHhcbiIsIHJpbmctPnZtX2luZm8uZ2Z4X21vZGUp Owo+ICsJaWYgKFVTRVNfUFBHVFQobS0+aTkxNSkpIHsKPiArCQllcnJfcHJpbnRmKG0sICLCoMKg R0ZYX01PREU6IDB4JTA4eFxuIiwgZWUtPnZtX2luZm8uZ2Z4X21vZGUpOwo+IMKgCj4gLQkJaWYg KElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDgpIHsKPiArCQlpZiAoSU5URUxfR0VOKG0tPmk5MTUp ID49IDgpIHsKPiDCoAkJCWludCBpOwo+IMKgCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKPiDC oAkJCQllcnJfcHJpbnRmKG0sICLCoMKgUERQJWQ6IDB4JTAxNmxseFxuIiwKPiAtCQkJCQnCoMKg wqBpLCByaW5nLT52bV9pbmZvLnBkcFtpXSk7Cj4gKwkJCQkJwqDCoMKgaSwgZWUtPnZtX2luZm8u cGRwW2ldKTsKPiDCoAkJfSBlbHNlIHsKPiDCoAkJCWVycl9wcmludGYobSwgIsKgwqBQUF9ESVJf QkFTRTogMHglMDh4XG4iLAo+IC0JCQkJwqDCoMKgcmluZy0+dm1faW5mby5wcF9kaXJfYmFzZSk7 Cj4gKwkJCQnCoMKgwqBlZS0+dm1faW5mby5wcF9kaXJfYmFzZSk7Cj4gwqAJCX0KPiDCoAl9Cj4g LQllcnJfcHJpbnRmKG0sICLCoMKgc2Vxbm86IDB4JTA4eFxuIiwgcmluZy0+c2Vxbm8pOwo+IC0J ZXJyX3ByaW50ZihtLCAiwqDCoGxhc3Rfc2Vxbm86IDB4JTA4eFxuIiwgcmluZy0+bGFzdF9zZXFu byk7Cj4gLQllcnJfcHJpbnRmKG0sICLCoMKgd2FpdGluZzogJXNcbiIsIHllc25vKHJpbmctPndh aXRpbmcpKTsKPiAtCWVycl9wcmludGYobSwgIsKgwqByaW5nLT5oZWFkOiAweCUwOHhcbiIsIHJp bmctPmNwdV9yaW5nX2hlYWQpOwo+IC0JZXJyX3ByaW50ZihtLCAiwqDCoHJpbmctPnRhaWw6IDB4 JTA4eFxuIiwgcmluZy0+Y3B1X3JpbmdfdGFpbCk7Cj4gKwllcnJfcHJpbnRmKG0sICLCoMKgc2Vx bm86IDB4JTA4eFxuIiwgZWUtPnNlcW5vKTsKPiArCWVycl9wcmludGYobSwgIsKgwqBsYXN0X3Nl cW5vOiAweCUwOHhcbiIsIGVlLT5sYXN0X3NlcW5vKTsKPiArCWVycl9wcmludGYobSwgIsKgwqB3 YWl0aW5nOiAlc1xuIiwgeWVzbm8oZWUtPndhaXRpbmcpKTsKPiArCWVycl9wcmludGYobSwgIsKg wqByaW5nLT5oZWFkOiAweCUwOHhcbiIsIGVlLT5jcHVfcmluZ19oZWFkKTsKPiArCWVycl9wcmlu dGYobSwgIsKgwqByaW5nLT50YWlsOiAweCUwOHhcbiIsIGVlLT5jcHVfcmluZ190YWlsKTsKPiDC oAllcnJfcHJpbnRmKG0sICLCoMKgaGFuZ2NoZWNrOiAlcyBbJWRdXG4iLAo+IC0JCcKgwqDCoGhh bmdjaGVja19hY3Rpb25fdG9fc3RyKHJpbmctPmhhbmdjaGVja19hY3Rpb24pLAo+IC0JCcKgwqDC oHJpbmctPmhhbmdjaGVja19zY29yZSk7Cj4gKwkJwqDCoMKgaGFuZ2NoZWNrX2FjdGlvbl90b19z dHIoZWUtPmhhbmdjaGVja19hY3Rpb24pLAo+ICsJCcKgwqDCoGVlLT5oYW5nY2hlY2tfc2NvcmUp Owo+IMKgfQo+IMKgCj4gwqB2b2lkIGk5MTVfZXJyb3JfcHJpbnRmKHN0cnVjdCBkcm1faTkxNV9l cnJvcl9zdGF0ZV9idWYgKmUsIGNvbnN0IGNoYXIgKmYsIC4uLikKPiBAQCAtMzQ4LDE3ICszNDMs MTcgQEAgaW50IGk5MTVfZXJyb3Jfc3RhdGVfdG9fc3RyKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9z dGF0ZV9idWYgKm0sCj4gwqAJCcKgwqDCoGVycm9yLT50aW1lLnR2X3VzZWMpOwo+IMKgCWVycl9w cmludGYobSwgIktlcm5lbDogIiBVVFNfUkVMRUFTRSAiXG4iKTsKPiDCoAltYXhfaGFuZ2NoZWNr X3Njb3JlID0gMDsKPiAtCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVycm9yLT5yaW5nKTsg aSsrKSB7Cj4gLQkJaWYgKGVycm9yLT5yaW5nW2ldLmhhbmdjaGVja19zY29yZSA+IG1heF9oYW5n Y2hlY2tfc2NvcmUpCj4gLQkJCW1heF9oYW5nY2hlY2tfc2NvcmUgPSBlcnJvci0+cmluZ1tpXS5o YW5nY2hlY2tfc2NvcmU7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlcnJvci0+ZW5n aW5lKTsgaSsrKSB7Cj4gKwkJaWYgKGVycm9yLT5lbmdpbmVbaV0uaGFuZ2NoZWNrX3Njb3JlID4g bWF4X2hhbmdjaGVja19zY29yZSkKPiArCQkJbWF4X2hhbmdjaGVja19zY29yZSA9IGVycm9yLT5l bmdpbmVbaV0uaGFuZ2NoZWNrX3Njb3JlOwo+IMKgCX0KPiAtCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGVycm9yLT5yaW5nKTsgaSsrKSB7Cj4gLQkJaWYgKGVycm9yLT5yaW5nW2ldLmhhbmdj aGVja19zY29yZSA9PSBtYXhfaGFuZ2NoZWNrX3Njb3JlICYmCj4gLQkJwqDCoMKgwqBlcnJvci0+ cmluZ1tpXS5waWQgIT0gLTEpIHsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVycm9y LT5lbmdpbmUpOyBpKyspIHsKPiArCQlpZiAoZXJyb3ItPmVuZ2luZVtpXS5oYW5nY2hlY2tfc2Nv cmUgPT0gbWF4X2hhbmdjaGVja19zY29yZSAmJgo+ICsJCcKgwqDCoMKgZXJyb3ItPmVuZ2luZVtp XS5waWQgIT0gLTEpIHsKPiDCoAkJCWVycl9wcmludGYobSwgIkFjdGl2ZSBwcm9jZXNzIChvbiBy aW5nICVzKTogJXMgWyVkXVxuIiwKPiAtCQkJCcKgwqDCoHJpbmdfc3RyKGkpLAo+IC0JCQkJwqDC oMKgZXJyb3ItPnJpbmdbaV0uY29tbSwKPiAtCQkJCcKgwqDCoGVycm9yLT5yaW5nW2ldLnBpZCk7 Cj4gKwkJCQnCoMKgwqBlbmdpbmVfc3RyKGkpLAo+ICsJCQkJwqDCoMKgZXJyb3ItPmVuZ2luZVtp XS5jb21tLAo+ICsJCQkJwqDCoMKgZXJyb3ItPmVuZ2luZVtpXS5waWQpOwo+IMKgCQl9Cj4gwqAJ fQo+IMKgCWVycl9wcmludGYobSwgIlJlc2V0IGNvdW50OiAldVxuIiwgZXJyb3ItPnJlc2V0X2Nv dW50KTsKPiBAQCAtNDE0LDggKzQwOSwxMCBAQCBpbnQgaTkxNV9lcnJvcl9zdGF0ZV90b19zdHIo c3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlX2J1ZiAqbSwKPiDCoAlpZiAoSVNfR0VONyhkZXYp KQo+IMKgCQllcnJfcHJpbnRmKG0sICJFUlJfSU5UOiAweCUwOHhcbiIsIGVycm9yLT5lcnJfaW50 KTsKPiDCoAo+IC0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXJyb3ItPnJpbmcpOyBpKysp Cj4gLQkJaTkxNV9yaW5nX2Vycm9yX3N0YXRlKG0sIGRldiwgZXJyb3IsIGkpOwo+ICsJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoZXJyb3ItPmVuZ2luZSk7IGkrKykgewo+ICsJCWlmIChlcnJv ci0+ZW5naW5lW2ldLmVuZ2luZV9pZCAhPSAtMSkKPiArCQkJZXJyb3JfcHJpbnRfZW5naW5lKG0s ICZlcnJvci0+ZW5naW5lW2ldKTsKPiArCX0KPiDCoAo+IMKgCWZvciAoaSA9IDA7IGkgPCBlcnJv ci0+dm1fY291bnQ7IGkrKykgewo+IMKgCQllcnJfcHJpbnRmKG0sICJ2bVslZF1cbiIsIGkpOwo+ IEBAIC00MjksMjEgKzQyNiwyMyBAQCBpbnQgaTkxNV9lcnJvcl9zdGF0ZV90b19zdHIoc3RydWN0 IGRybV9pOTE1X2Vycm9yX3N0YXRlX2J1ZiAqbSwKPiDCoAkJCQnCoMKgwqDCoGVycm9yLT5waW5u ZWRfYm9fY291bnRbaV0pOwo+IMKgCX0KPiDCoAo+IC0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoZXJyb3ItPnJpbmcpOyBpKyspIHsKPiAtCQlvYmogPSBlcnJvci0+cmluZ1tpXS5iYXRjaGJ1 ZmZlcjsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVycm9yLT5lbmdpbmUpOyBpKysp IHsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfZW5naW5lICplZSA9ICZlcnJvci0+ZW5naW5l W2ldOwo+ICsKPiArCQlvYmogPSBlZS0+YmF0Y2hidWZmZXI7Cj4gwqAJCWlmIChvYmopIHsKPiDC oAkJCWVycl9wdXRzKG0sIGRldl9wcml2LT5lbmdpbmVbaV0ubmFtZSk7Cj4gLQkJCWlmIChlcnJv ci0+cmluZ1tpXS5waWQgIT0gLTEpCj4gKwkJCWlmIChlZS0+cGlkICE9IC0xKQo+IMKgCQkJCWVy cl9wcmludGYobSwgIiAoc3VibWl0dGVkIGJ5ICVzIFslZF0pIiwKPiAtCQkJCQnCoMKgwqBlcnJv ci0+cmluZ1tpXS5jb21tLAo+IC0JCQkJCcKgwqDCoGVycm9yLT5yaW5nW2ldLnBpZCk7Cj4gKwkJ CQkJwqDCoMKgZWUtPmNvbW0sCj4gKwkJCQkJwqDCoMKgZWUtPnBpZCk7Cj4gwqAJCQllcnJfcHJp bnRmKG0sICIgLS0tIGd0dF9vZmZzZXQgPSAweCUwOHggJTA4eFxuIiwKPiDCoAkJCQnCoMKgwqB1 cHBlcl8zMl9iaXRzKG9iai0+Z3R0X29mZnNldCksCj4gwqAJCQkJwqDCoMKgbG93ZXJfMzJfYml0 cyhvYmotPmd0dF9vZmZzZXQpKTsKPiDCoAkJCXByaW50X2Vycm9yX29iaihtLCBvYmopOwo+IMKg CQl9Cj4gwqAKPiAtCQlvYmogPSBlcnJvci0+cmluZ1tpXS53YV9iYXRjaGJ1ZmZlcjsKPiArCQlv YmogPSBlZS0+d2FfYmF0Y2hidWZmZXI7Cj4gwqAJCWlmIChvYmopIHsKPiDCoAkJCWVycl9wcmlu dGYobSwgIiVzICh3L2EpIC0tLSBndHRfb2Zmc2V0ID0gMHglMDh4XG4iLAo+IMKgCQkJCcKgwqDC oGRldl9wcml2LT5lbmdpbmVbaV0ubmFtZSwKPiBAQCAtNDUxLDM4ICs0NTAsMzggQEAgaW50IGk5 MTVfZXJyb3Jfc3RhdGVfdG9fc3RyKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYgKm0s Cj4gwqAJCQlwcmludF9lcnJvcl9vYmoobSwgb2JqKTsKPiDCoAkJfQo+IMKgCj4gLQkJaWYgKGVy cm9yLT5yaW5nW2ldLm51bV9yZXF1ZXN0cykgewo+ICsJCWlmIChlZS0+bnVtX3JlcXVlc3RzKSB7 Cj4gwqAJCQllcnJfcHJpbnRmKG0sICIlcyAtLS0gJWQgcmVxdWVzdHNcbiIsCj4gwqAJCQkJwqDC oMKgZGV2X3ByaXYtPmVuZ2luZVtpXS5uYW1lLAo+IC0JCQkJwqDCoMKgZXJyb3ItPnJpbmdbaV0u bnVtX3JlcXVlc3RzKTsKPiAtCQkJZm9yIChqID0gMDsgaiA8IGVycm9yLT5yaW5nW2ldLm51bV9y ZXF1ZXN0czsgaisrKSB7Cj4gKwkJCQnCoMKgwqBlZS0+bnVtX3JlcXVlc3RzKTsKPiArCQkJZm9y IChqID0gMDsgaiA8IGVlLT5udW1fcmVxdWVzdHM7IGorKykgewo+IMKgCQkJCWVycl9wcmludGYo bSwgIsKgwqBzZXFubyAweCUwOHgsIGVtaXR0ZWQgJWxkLCB0YWlsIDB4JTA4eFxuIiwKPiAtCQkJ CQnCoMKgwqBlcnJvci0+cmluZ1tpXS5yZXF1ZXN0c1tqXS5zZXFubywKPiAtCQkJCQnCoMKgwqBl cnJvci0+cmluZ1tpXS5yZXF1ZXN0c1tqXS5qaWZmaWVzLAo+IC0JCQkJCcKgwqDCoGVycm9yLT5y aW5nW2ldLnJlcXVlc3RzW2pdLnRhaWwpOwo+ICsJCQkJCcKgwqDCoGVlLT5yZXF1ZXN0c1tqXS5z ZXFubywKPiArCQkJCQnCoMKgwqBlZS0+cmVxdWVzdHNbal0uamlmZmllcywKPiArCQkJCQnCoMKg wqBlZS0+cmVxdWVzdHNbal0udGFpbCk7Cj4gwqAJCQl9Cj4gwqAJCX0KPiDCoAo+IC0JCWlmIChl cnJvci0+cmluZ1tpXS5udW1fd2FpdGVycykgewo+ICsJCWlmIChlZS0+bnVtX3dhaXRlcnMpIHsK PiDCoAkJCWVycl9wcmludGYobSwgIiVzIC0tLSAlZCB3YWl0ZXJzXG4iLAo+IMKgCQkJCcKgwqDC oGRldl9wcml2LT5lbmdpbmVbaV0ubmFtZSwKPiAtCQkJCcKgwqDCoGVycm9yLT5yaW5nW2ldLm51 bV93YWl0ZXJzKTsKPiAtCQkJZm9yIChqID0gMDsgaiA8IGVycm9yLT5yaW5nW2ldLm51bV93YWl0 ZXJzOyBqKyspIHsKPiArCQkJCcKgwqDCoGVlLT5udW1fd2FpdGVycyk7Cj4gKwkJCWZvciAoaiA9 IDA7IGogPCBlZS0+bnVtX3dhaXRlcnM7IGorKykgewo+IMKgCQkJCWVycl9wcmludGYobSwgIiBz ZXFubyAweCUwOHggZm9yICVzIFslZF1cbiIsCj4gLQkJCQkJwqDCoMKgZXJyb3ItPnJpbmdbaV0u d2FpdGVyc1tqXS5zZXFubywKPiAtCQkJCQnCoMKgwqBlcnJvci0+cmluZ1tpXS53YWl0ZXJzW2pd LmNvbW0sCj4gLQkJCQkJwqDCoMKgZXJyb3ItPnJpbmdbaV0ud2FpdGVyc1tqXS5waWQpOwo+ICsJ CQkJCcKgwqDCoGVlLT53YWl0ZXJzW2pdLnNlcW5vLAo+ICsJCQkJCcKgwqDCoGVlLT53YWl0ZXJz W2pdLmNvbW0sCj4gKwkJCQkJwqDCoMKgZWUtPndhaXRlcnNbal0ucGlkKTsKPiDCoAkJCX0KPiDC oAkJfQo+IMKgCj4gLQkJaWYgKChvYmogPSBlcnJvci0+cmluZ1tpXS5yaW5nYnVmZmVyKSkgewo+ ICsJCWlmICgob2JqID0gZWUtPnJpbmdidWZmZXIpKSB7Cj4gwqAJCQllcnJfcHJpbnRmKG0sICIl cyAtLS0gcmluZ2J1ZmZlciA9IDB4JTA4eFxuIiwKPiDCoAkJCQnCoMKgwqBkZXZfcHJpdi0+ZW5n aW5lW2ldLm5hbWUsCj4gwqAJCQkJwqDCoMKgbG93ZXJfMzJfYml0cyhvYmotPmd0dF9vZmZzZXQp KTsKPiDCoAkJCXByaW50X2Vycm9yX29iaihtLCBvYmopOwo+IMKgCQl9Cj4gwqAKPiAtCQlpZiAo KG9iaiA9IGVycm9yLT5yaW5nW2ldLmh3c19wYWdlKSkgewo+ICsJCWlmICgob2JqID0gZWUtPmh3 c19wYWdlKSkgewo+IMKgCQkJdTY0IGh3c19vZmZzZXQgPSBvYmotPmd0dF9vZmZzZXQ7Cj4gwqAJ CQl1MzIgKmh3c19wYWdlID0gJm9iai0+cGFnZXNbMF1bMF07Cj4gwqAKPiBAQCAtNTA0LDcgKzUw Myw3IEBAIGludCBpOTE1X2Vycm9yX3N0YXRlX3RvX3N0cihzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jf c3RhdGVfYnVmICptLAo+IMKgCQkJfQo+IMKgCQl9Cj4gwqAKPiAtCQlvYmogPSBlcnJvci0+cmlu Z1tpXS53YV9jdHg7Cj4gKwkJb2JqID0gZWUtPndhX2N0eDsKPiDCoAkJaWYgKG9iaikgewo+IMKg CQkJdTY0IHdhX2N0eF9vZmZzZXQgPSBvYmotPmd0dF9vZmZzZXQ7Cj4gwqAJCQl1MzIgKndhX2N0 eF9wYWdlID0gJm9iai0+cGFnZXNbMF1bMF07Cj4gQEAgLTUyNiw3ICs1MjUsNyBAQCBpbnQgaTkx NV9lcnJvcl9zdGF0ZV90b19zdHIoc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlX2J1ZiAqbSwK PiDCoAkJCX0KPiDCoAkJfQo+IMKgCj4gLQkJaWYgKChvYmogPSBlcnJvci0+cmluZ1tpXS5jdHgp KSB7Cj4gKwkJaWYgKChvYmogPSBlZS0+Y3R4KSkgewo+IMKgCQkJZXJyX3ByaW50ZihtLCAiJXMg LS0tIEhXIENvbnRleHQgPSAweCUwOHhcbiIsCj4gwqAJCQkJwqDCoMKgZGV2X3ByaXYtPmVuZ2lu ZVtpXS5uYW1lLAo+IMKgCQkJCcKgwqDCoGxvd2VyXzMyX2JpdHMob2JqLT5ndHRfb2Zmc2V0KSk7 Cj4gQEAgLTYxMSwxNSArNjEwLDE4IEBAIHN0YXRpYyB2b2lkIGk5MTVfZXJyb3Jfc3RhdGVfZnJl ZShzdHJ1Y3Qga3JlZiAqZXJyb3JfcmVmKQo+IMKgCQkJCQkJCcKgwqB0eXBlb2YoKmVycm9yKSwg cmVmKTsKPiDCoAlpbnQgaTsKPiDCoAo+IC0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXJy b3ItPnJpbmcpOyBpKyspIHsKPiAtCQlpOTE1X2Vycm9yX29iamVjdF9mcmVlKGVycm9yLT5yaW5n W2ldLmJhdGNoYnVmZmVyKTsKPiAtCQlpOTE1X2Vycm9yX29iamVjdF9mcmVlKGVycm9yLT5yaW5n W2ldLndhX2JhdGNoYnVmZmVyKTsKPiAtCQlpOTE1X2Vycm9yX29iamVjdF9mcmVlKGVycm9yLT5y aW5nW2ldLnJpbmdidWZmZXIpOwo+IC0JCWk5MTVfZXJyb3Jfb2JqZWN0X2ZyZWUoZXJyb3ItPnJp bmdbaV0uaHdzX3BhZ2UpOwo+IC0JCWk5MTVfZXJyb3Jfb2JqZWN0X2ZyZWUoZXJyb3ItPnJpbmdb aV0uY3R4KTsKPiAtCQlpOTE1X2Vycm9yX29iamVjdF9mcmVlKGVycm9yLT5yaW5nW2ldLndhX2N0 eCk7Cj4gLQkJa2ZyZWUoZXJyb3ItPnJpbmdbaV0ucmVxdWVzdHMpOwo+IC0JCWtmcmVlKGVycm9y LT5yaW5nW2ldLndhaXRlcnMpOwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXJyb3It PmVuZ2luZSk7IGkrKykgewo+ICsJCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9lbmdpbmUgKmVlID0g JmVycm9yLT5lbmdpbmVbaV07Cj4gKwo+ICsJCWk5MTVfZXJyb3Jfb2JqZWN0X2ZyZWUoZWUtPmJh dGNoYnVmZmVyKTsKPiArCQlpOTE1X2Vycm9yX29iamVjdF9mcmVlKGVlLT53YV9iYXRjaGJ1ZmZl cik7Cj4gKwkJaTkxNV9lcnJvcl9vYmplY3RfZnJlZShlZS0+cmluZ2J1ZmZlcik7Cj4gKwkJaTkx NV9lcnJvcl9vYmplY3RfZnJlZShlZS0+aHdzX3BhZ2UpOwo+ICsJCWk5MTVfZXJyb3Jfb2JqZWN0 X2ZyZWUoZWUtPmN0eCk7Cj4gKwkJaTkxNV9lcnJvcl9vYmplY3RfZnJlZShlZS0+d2FfY3R4KTsK PiArCj4gKwkJa2ZyZWUoZWUtPnJlcXVlc3RzKTsKPiArCQlrZnJlZShlZS0+d2FpdGVycyk7Cj4g wqAJfQo+IMKgCj4gwqAJaTkxNV9lcnJvcl9vYmplY3RfZnJlZShlcnJvci0+c2VtYXBob3JlX29i aik7Cj4gQEAgLTc2Miw4ICs3NjQsOCBAQCBzdGF0aWMgdm9pZCBjYXB0dXJlX2JvKHN0cnVjdCBk cm1faTkxNV9lcnJvcl9idWZmZXIgKmVyciwKPiDCoAllcnItPmRpcnR5ID0gb2JqLT5kaXJ0eTsK PiDCoAllcnItPnB1cmdlYWJsZSA9IG9iai0+bWFkdiAhPSBJOTE1X01BRFZfV0lMTE5FRUQ7Cj4g wqAJZXJyLT51c2VycHRyID0gb2JqLT51c2VycHRyLm1tICE9IE5VTEw7Cj4gLQllcnItPnJpbmcg PSBvYmotPmxhc3Rfd3JpdGVfcmVxID8KPiAtCQkJaTkxNV9nZW1fcmVxdWVzdF9nZXRfZW5naW5l KG9iai0+bGFzdF93cml0ZV9yZXEpLT5pZCA6IC0xOwo+ICsJZXJyLT5lbmdpbmUgPSBvYmotPmxh c3Rfd3JpdGVfcmVxID8KPiArCQlpOTE1X2dlbV9yZXF1ZXN0X2dldF9lbmdpbmUob2JqLT5sYXN0 X3dyaXRlX3JlcSktPmlkIDogLTE7Cj4gwqAJZXJyLT5jYWNoZV9sZXZlbCA9IG9iai0+Y2FjaGVf bGV2ZWw7Cj4gwqB9Cj4gwqAKPiBAQCAtODE1LDcgKzgxNyw3IEBAIHN0YXRpYyB1MzIgY2FwdHVy ZV9waW5uZWRfYm8oc3RydWN0IGRybV9pOTE1X2Vycm9yX2J1ZmZlciAqZXJyLAo+IMKgICovCj4g wqBzdGF0aWMgdWludDMyX3QgaTkxNV9lcnJvcl9nZW5lcmF0ZV9jb2RlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPiDCoAkJCQkJwqBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3Rh dGUgKmVycm9yLAo+IC0JCQkJCcKgaW50ICpyaW5nX2lkKQo+ICsJCQkJCcKgaW50ICplbmdpbmVf aWQpCj4gwqB7Cj4gwqAJdWludDMyX3QgZXJyb3JfY29kZSA9IDA7Cj4gwqAJaW50IGk7Cj4gQEAg LTgyNiwxMSArODI4LDExIEBAIHN0YXRpYyB1aW50MzJfdCBpOTE1X2Vycm9yX2dlbmVyYXRlX2Nv ZGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IMKgCcKgKiBzdHJpY3RseSBh IGNsaWVudCBidWcuIFVzZSBpbnN0ZG9uZSB0byBkaWZmZXJlbnRpYXRlIHRob3NlIHNvbWUuCj4g wqAJwqAqLwo+IMKgCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9FTkdJTkVTOyBpKyspIHsKPiAt CQlpZiAoZXJyb3ItPnJpbmdbaV0uaGFuZ2NoZWNrX2FjdGlvbiA9PSBIQU5HQ0hFQ0tfSFVORykg ewo+IC0JCQlpZiAocmluZ19pZCkKPiAtCQkJCSpyaW5nX2lkID0gaTsKPiArCQlpZiAoZXJyb3It PmVuZ2luZVtpXS5oYW5nY2hlY2tfYWN0aW9uID09IEhBTkdDSEVDS19IVU5HKSB7Cj4gKwkJCWlm IChlbmdpbmVfaWQpCj4gKwkJCQkqZW5naW5lX2lkID0gaTsKPiDCoAo+IC0JCQlyZXR1cm4gZXJy b3ItPnJpbmdbaV0uaXBlaHIgXiBlcnJvci0+cmluZ1tpXS5pbnN0ZG9uZTsKPiArCQkJcmV0dXJu IGVycm9yLT5lbmdpbmVbaV0uaXBlaHIgXiBlcnJvci0+ZW5naW5lW2ldLmluc3Rkb25lOwo+IMKg CQl9Cj4gwqAJfQo+IMKgCj4gQEAgLTg1NSwyMSArODU3LDE2IEBAIHN0YXRpYyB2b2lkIGk5MTVf Z2VtX3JlY29yZF9mZW5jZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IMKg fQo+IMKgCj4gwqAKPiAtc3RhdGljIHZvaWQgZ2VuOF9yZWNvcmRfc2VtYXBob3JlX3N0YXRlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJCQlzdHJ1Y3QgZHJtX2k5MTVf ZXJyb3Jfc3RhdGUgKmVycm9yLAo+ICtzdGF0aWMgdm9pZCBnZW44X3JlY29yZF9zZW1hcGhvcmVf c3RhdGUoc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlICplcnJvciwKPiDCoAkJCQkJc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkJCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9y aW5nICplcmluZykKPiArCQkJCQlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfZW5naW5lICplZSkKPiDC oHsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsK PiDCoAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICp0bzsKPiDCoAllbnVtIGludGVsX2VuZ2luZV9p ZCBpZDsKPiDCoAo+IC0JaWYgKCFpOTE1LnNlbWFwaG9yZXMpCj4gLQkJcmV0dXJuOwo+IC0KPiDC oAlpZiAoIWVycm9yLT5zZW1hcGhvcmVfb2JqKQo+IC0JCWVycm9yLT5zZW1hcGhvcmVfb2JqID0K PiAtCQkJaTkxNV9lcnJvcl9nZ3R0X29iamVjdF9jcmVhdGUoZGV2X3ByaXYsCj4gLQkJCQkJCcKg wqDCoMKgwqDCoGRldl9wcml2LT5zZW1hcGhvcmVfb2JqKTsKPiArCQlyZXR1cm47Cj4gwqAKPiDC oAlmb3JfZWFjaF9lbmdpbmVfaWQodG8sIGRldl9wcml2LCBpZCkgewo+IMKgCQlpbnQgaWR4Owo+ IEBAIC04NzksNDIgKzg3Niw0MyBAQCBzdGF0aWMgdm9pZCBnZW44X3JlY29yZF9zZW1hcGhvcmVf c3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IMKgCQlpZiAoZW5naW5l ID09IHRvKQo+IMKgCQkJY29udGludWU7Cj4gwqAKPiAtCQlzaWduYWxfb2Zmc2V0ID0gKEdFTjhf U0lHTkFMX09GRlNFVChlbmdpbmUsIGlkKSAmIChQQUdFX1NJWkUgLSAxKSkKPiAtCQkJCS8gNDsK PiArCQlzaWduYWxfb2Zmc2V0ID0KPiArCQkJKEdFTjhfU0lHTkFMX09GRlNFVChlbmdpbmUsIGlk KSAmIChQQUdFX1NJWkUgLSAxKSkgLyA0Owo+IMKgCQl0bXAgPSBlcnJvci0+c2VtYXBob3JlX29i ai0+cGFnZXNbMF07Cj4gwqAJCWlkeCA9IGludGVsX3Jpbmdfc3luY19pbmRleChlbmdpbmUsIHRv KTsKPiDCoAo+IC0JCWVyaW5nLT5zZW1hcGhvcmVfbWJveGVzW2lkeF0gPSB0bXBbc2lnbmFsX29m ZnNldF07Cj4gLQkJZXJpbmctPnNlbWFwaG9yZV9zZXFub1tpZHhdID0gZW5naW5lLT5zZW1hcGhv cmUuc3luY19zZXFub1tpZHhdOwo+ICsJCWVlLT5zZW1hcGhvcmVfbWJveGVzW2lkeF0gPSB0bXBb c2lnbmFsX29mZnNldF07Cj4gKwkJZWUtPnNlbWFwaG9yZV9zZXFub1tpZHhdID0gZW5naW5lLT5z ZW1hcGhvcmUuc3luY19zZXFub1tpZHhdOwo+IMKgCX0KPiDCoH0KPiDCoAo+IC1zdGF0aWMgdm9p ZCBnZW42X3JlY29yZF9zZW1hcGhvcmVfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAo+IC0JCQkJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAtCQkJCQlz dHJ1Y3QgZHJtX2k5MTVfZXJyb3JfcmluZyAqZXJpbmcpCj4gK3N0YXRpYyB2b2lkIGdlbjZfcmVj b3JkX3NlbWFwaG9yZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJ CQkJc3RydWN0IGRybV9pOTE1X2Vycm9yX2VuZ2luZSAqZWUpCj4gwqB7Cj4gLQllcmluZy0+c2Vt YXBob3JlX21ib3hlc1swXSA9IEk5MTVfUkVBRChSSU5HX1NZTkNfMChlbmdpbmUtPm1taW9fYmFz ZSkpOwo+IC0JZXJpbmctPnNlbWFwaG9yZV9tYm94ZXNbMV0gPSBJOTE1X1JFQUQoUklOR19TWU5D XzEoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiAtCWVyaW5nLT5zZW1hcGhvcmVfc2Vxbm9bMF0gPSBl bmdpbmUtPnNlbWFwaG9yZS5zeW5jX3NlcW5vWzBdOwo+IC0JZXJpbmctPnNlbWFwaG9yZV9zZXFu b1sxXSA9IGVuZ2luZS0+c2VtYXBob3JlLnN5bmNfc2Vxbm9bMV07Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gKwo+ICsJZWUtPnNlbWFwaG9y ZV9tYm94ZXNbMF0gPSBJOTE1X1JFQUQoUklOR19TWU5DXzAoZW5naW5lLT5tbWlvX2Jhc2UpKTsK PiArCWVlLT5zZW1hcGhvcmVfbWJveGVzWzFdID0gSTkxNV9SRUFEKFJJTkdfU1lOQ18xKGVuZ2lu ZS0+bW1pb19iYXNlKSk7Cj4gKwllZS0+c2VtYXBob3JlX3NlcW5vWzBdID0gZW5naW5lLT5zZW1h cGhvcmUuc3luY19zZXFub1swXTsKPiArCWVlLT5zZW1hcGhvcmVfc2Vxbm9bMV0gPSBlbmdpbmUt PnNlbWFwaG9yZS5zeW5jX3NlcW5vWzFdOwo+IMKgCj4gwqAJaWYgKEhBU19WRUJPWChkZXZfcHJp dikpIHsKPiAtCQllcmluZy0+c2VtYXBob3JlX21ib3hlc1syXSA9Cj4gKwkJZWUtPnNlbWFwaG9y ZV9tYm94ZXNbMl0gPQo+IMKgCQkJSTkxNV9SRUFEKFJJTkdfU1lOQ18yKGVuZ2luZS0+bW1pb19i YXNlKSk7Cj4gLQkJZXJpbmctPnNlbWFwaG9yZV9zZXFub1syXSA9IGVuZ2luZS0+c2VtYXBob3Jl LnN5bmNfc2Vxbm9bMl07Cj4gKwkJZWUtPnNlbWFwaG9yZV9zZXFub1syXSA9IGVuZ2luZS0+c2Vt YXBob3JlLnN5bmNfc2Vxbm9bMl07Cj4gwqAJfQo+IMKgfQo+IMKgCj4gLXN0YXRpYyB2b2lkIGVu Z2luZV9yZWNvcmRfd2FpdGVycyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gLQkJ CQnCoMKgc3RydWN0IGRybV9pOTE1X2Vycm9yX3JpbmcgKmVyaW5nKQo+ICtzdGF0aWMgdm9pZCBl cnJvcl9yZWNvcmRfZW5naW5lX3dhaXRlcnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LAo+ICsJCQkJCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9lbmdpbmUgKmVlKQo+IMKgewo+IMKgCXN0 cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwo+IMKgCXN0 cnVjdCBkcm1faTkxNV9lcnJvcl93YWl0ZXIgKndhaXRlcjsKPiDCoAlzdHJ1Y3QgcmJfbm9kZSAq cmI7Cj4gwqAJaW50IGNvdW50Owo+IMKgCj4gLQllcmluZy0+bnVtX3dhaXRlcnMgPSAwOwo+IC0J ZXJpbmctPndhaXRlcnMgPSBOVUxMOwo+ICsJZWUtPm51bV93YWl0ZXJzID0gMDsKPiArCWVlLT53 YWl0ZXJzID0gTlVMTDsKPiDCoAo+IMKgCXNwaW5fbG9jaygmYi0+bG9jayk7Cj4gwqAJY291bnQg PSAwOwo+IEBAIC05MzAsNyArOTI4LDcgQEAgc3RhdGljIHZvaWQgZW5naW5lX3JlY29yZF93YWl0 ZXJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiDCoAlpZiAoIXdhaXRlcikKPiDC oAkJcmV0dXJuOwo+IMKgCj4gLQllcmluZy0+d2FpdGVycyA9IHdhaXRlcjsKPiArCWVlLT53YWl0 ZXJzID0gd2FpdGVyOwo+IMKgCj4gwqAJc3Bpbl9sb2NrKCZiLT5sb2NrKTsKPiDCoAlmb3IgKHJi ID0gcmJfZmlyc3QoJmItPndhaXRlcnMpOyByYjsgcmIgPSByYl9uZXh0KHJiKSkgewo+IEBAIC05 NDEsNTUgKzkzOSw1NSBAQCBzdGF0aWMgdm9pZCBlbmdpbmVfcmVjb3JkX3dhaXRlcnMoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IMKgCQl3YWl0ZXItPnNlcW5vID0gdy0+c2Vxbm87 Cj4gwqAJCXdhaXRlcisrOwo+IMKgCj4gLQkJaWYgKCsrZXJpbmctPm51bV93YWl0ZXJzID09IGNv dW50KQo+ICsJCWlmICgrK2VlLT5udW1fd2FpdGVycyA9PSBjb3VudCkKPiDCoAkJCWJyZWFrOwo+ IMKgCX0KPiDCoAlzcGluX3VubG9jaygmYi0+bG9jayk7Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIHZv aWQgaTkxNV9yZWNvcmRfcmluZ19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gLQkJCQnCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGUgKmVycm9yLAo+IC0J CQkJwqDCoMKgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkJwqDCoMKgc3Ry dWN0IGRybV9pOTE1X2Vycm9yX3JpbmcgKmVyaW5nKQo+ICtzdGF0aWMgdm9pZCBlcnJvcl9yZWNv cmRfZW5naW5lX3JlZ2lzdGVycyhzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGUgKmVycm9yLAo+ ICsJCQkJCcKgwqBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQkJwqDCoHN0 cnVjdCBkcm1faTkxNV9lcnJvcl9lbmdpbmUgKmVlKQo+IMKgewo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ICsKPiDCoAlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA2KSB7Cj4gLQkJZXJpbmctPnJjX3BzbWkgPSBJOTE1X1JFQUQoUklOR19Q U01JX0NUTChlbmdpbmUtPm1taW9fYmFzZSkpOwo+IC0JCWVyaW5nLT5mYXVsdF9yZWcgPSBJOTE1 X1JFQUQoUklOR19GQVVMVF9SRUcoZW5naW5lKSk7Cj4gKwkJZWUtPnJjX3BzbWkgPSBJOTE1X1JF QUQoUklOR19QU01JX0NUTChlbmdpbmUtPm1taW9fYmFzZSkpOwo+ICsJCWVlLT5mYXVsdF9yZWcg PSBJOTE1X1JFQUQoUklOR19GQVVMVF9SRUcoZW5naW5lKSk7Cj4gwqAJCWlmIChJTlRFTF9HRU4o ZGV2X3ByaXYpID49IDgpCj4gLQkJCWdlbjhfcmVjb3JkX3NlbWFwaG9yZV9zdGF0ZShkZXZfcHJp diwgZXJyb3IsIGVuZ2luZSwKPiAtCQkJCQkJwqDCoMKgwqBlcmluZyk7Cj4gKwkJCWdlbjhfcmVj b3JkX3NlbWFwaG9yZV9zdGF0ZShlcnJvciwgZW5naW5lLCBlZSk7Cj4gwqAJCWVsc2UKPiAtCQkJ Z2VuNl9yZWNvcmRfc2VtYXBob3JlX3N0YXRlKGRldl9wcml2LCBlbmdpbmUsIGVyaW5nKTsKPiAr CQkJZ2VuNl9yZWNvcmRfc2VtYXBob3JlX3N0YXRlKGVuZ2luZSwgZWUpOwo+IMKgCX0KPiDCoAo+ IMKgCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpIHsKPiAtCQllcmluZy0+ZmFkZHIgPSBJ OTE1X1JFQUQoUklOR19ETUFfRkFERChlbmdpbmUtPm1taW9fYmFzZSkpOwo+IC0JCWVyaW5nLT5p cGVpciA9IEk5MTVfUkVBRChSSU5HX0lQRUlSKGVuZ2luZS0+bW1pb19iYXNlKSk7Cj4gLQkJZXJp bmctPmlwZWhyID0gSTkxNV9SRUFEKFJJTkdfSVBFSFIoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiAt CQllcmluZy0+aW5zdGRvbmUgPSBJOTE1X1JFQUQoUklOR19JTlNURE9ORShlbmdpbmUtPm1taW9f YmFzZSkpOwo+IC0JCWVyaW5nLT5pbnN0cHMgPSBJOTE1X1JFQUQoUklOR19JTlNUUFMoZW5naW5l LT5tbWlvX2Jhc2UpKTsKPiAtCQllcmluZy0+YmJhZGRyID0gSTkxNV9SRUFEKFJJTkdfQkJBRERS KGVuZ2luZS0+bW1pb19iYXNlKSk7Cj4gKwkJZWUtPmZhZGRyID0gSTkxNV9SRUFEKFJJTkdfRE1B X0ZBREQoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiArCQllZS0+aXBlaXIgPSBJOTE1X1JFQUQoUklO R19JUEVJUihlbmdpbmUtPm1taW9fYmFzZSkpOwo+ICsJCWVlLT5pcGVociA9IEk5MTVfUkVBRChS SU5HX0lQRUhSKGVuZ2luZS0+bW1pb19iYXNlKSk7Cj4gKwkJZWUtPmluc3Rkb25lID0gSTkxNV9S RUFEKFJJTkdfSU5TVERPTkUoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiArCQllZS0+aW5zdHBzID0g STkxNV9SRUFEKFJJTkdfSU5TVFBTKGVuZ2luZS0+bW1pb19iYXNlKSk7Cj4gKwkJZWUtPmJiYWRk ciA9IEk5MTVfUkVBRChSSU5HX0JCQUREUihlbmdpbmUtPm1taW9fYmFzZSkpOwo+IMKgCQlpZiAo SU5URUxfR0VOKGRldl9wcml2KSA+PSA4KSB7Cj4gLQkJCWVyaW5nLT5mYWRkciB8PSAodTY0KSBJ OTE1X1JFQUQoUklOR19ETUFfRkFERF9VRFcoZW5naW5lLT5tbWlvX2Jhc2UpKSA8PCAzMjsKPiAt CQkJZXJpbmctPmJiYWRkciB8PSAodTY0KSBJOTE1X1JFQUQoUklOR19CQkFERFJfVURXKGVuZ2lu ZS0+bW1pb19iYXNlKSkgPDwgMzI7Cj4gKwkJCWVlLT5mYWRkciB8PSAodTY0KSBJOTE1X1JFQUQo UklOR19ETUFfRkFERF9VRFcoZW5naW5lLT5tbWlvX2Jhc2UpKSA8PCAzMjsKPiArCQkJZWUtPmJi YWRkciB8PSAodTY0KSBJOTE1X1JFQUQoUklOR19CQkFERFJfVURXKGVuZ2luZS0+bW1pb19iYXNl KSkgPDwgMzI7Cj4gwqAJCX0KPiAtCQllcmluZy0+YmJzdGF0ZSA9IEk5MTVfUkVBRChSSU5HX0JC U1RBVEUoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiArCQllZS0+YmJzdGF0ZSA9IEk5MTVfUkVBRChS SU5HX0JCU1RBVEUoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiDCoAl9IGVsc2Ugewo+IC0JCWVyaW5n LT5mYWRkciA9IEk5MTVfUkVBRChETUFfRkFERF9JOFhYKTsKPiAtCQllcmluZy0+aXBlaXIgPSBJ OTE1X1JFQUQoSVBFSVIpOwo+IC0JCWVyaW5nLT5pcGVociA9IEk5MTVfUkVBRChJUEVIUik7Cj4g LQkJZXJpbmctPmluc3Rkb25lID0gSTkxNV9SRUFEKEdFTjJfSU5TVERPTkUpOwo+ICsJCWVlLT5m YWRkciA9IEk5MTVfUkVBRChETUFfRkFERF9JOFhYKTsKPiArCQllZS0+aXBlaXIgPSBJOTE1X1JF QUQoSVBFSVIpOwo+ICsJCWVlLT5pcGVociA9IEk5MTVfUkVBRChJUEVIUik7Cj4gKwkJZWUtPmlu c3Rkb25lID0gSTkxNV9SRUFEKEdFTjJfSU5TVERPTkUpOwo+IMKgCX0KPiDCoAo+IC0JZXJpbmct PndhaXRpbmcgPSBpbnRlbF9lbmdpbmVfaGFzX3dhaXRlcihlbmdpbmUpOwo+IC0JZXJpbmctPmlu c3RwbSA9IEk5MTVfUkVBRChSSU5HX0lOU1RQTShlbmdpbmUtPm1taW9fYmFzZSkpOwo+IC0JZXJp bmctPmFjdGhkID0gaW50ZWxfcmluZ19nZXRfYWN0aXZlX2hlYWQoZW5naW5lKTsKPiAtCWVyaW5n LT5zZXFubyA9IGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKTsKPiAtCWVyaW5nLT5sYXN0 X3NlcW5vID0gZW5naW5lLT5sYXN0X3N1Ym1pdHRlZF9zZXFubzsKPiAtCWVyaW5nLT5zdGFydCA9 IEk5MTVfUkVBRF9TVEFSVChlbmdpbmUpOwo+IC0JZXJpbmctPmhlYWQgPSBJOTE1X1JFQURfSEVB RChlbmdpbmUpOwo+IC0JZXJpbmctPnRhaWwgPSBJOTE1X1JFQURfVEFJTChlbmdpbmUpOwo+IC0J ZXJpbmctPmN0bCA9IEk5MTVfUkVBRF9DVEwoZW5naW5lKTsKPiArCWVlLT53YWl0aW5nID0gaW50 ZWxfZW5naW5lX2hhc193YWl0ZXIoZW5naW5lKTsKPiArCWVlLT5pbnN0cG0gPSBJOTE1X1JFQUQo UklOR19JTlNUUE0oZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiArCWVlLT5hY3RoZCA9IGludGVsX3Jp bmdfZ2V0X2FjdGl2ZV9oZWFkKGVuZ2luZSk7Cj4gKwllZS0+c2Vxbm8gPSBpbnRlbF9lbmdpbmVf Z2V0X3NlcW5vKGVuZ2luZSk7Cj4gKwllZS0+bGFzdF9zZXFubyA9IGVuZ2luZS0+bGFzdF9zdWJt aXR0ZWRfc2Vxbm87Cj4gKwllZS0+c3RhcnQgPSBJOTE1X1JFQURfU1RBUlQoZW5naW5lKTsKPiAr CWVlLT5oZWFkID0gSTkxNV9SRUFEX0hFQUQoZW5naW5lKTsKPiArCWVlLT50YWlsID0gSTkxNV9S RUFEX1RBSUwoZW5naW5lKTsKPiArCWVlLT5jdGwgPSBJOTE1X1JFQURfQ1RMKGVuZ2luZSk7Cj4g wqAKPiDCoAlpZiAoSTkxNV9ORUVEX0dGWF9IV1MoZGV2X3ByaXYpKSB7Cj4gwqAJCWk5MTVfcmVn X3QgbW1pbzsKPiBAQCAtMTAxNywyOSArMTAxNSwyOSBAQCBzdGF0aWMgdm9pZCBpOTE1X3JlY29y ZF9yaW5nX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiDCoAkJCW1t aW8gPSBSSU5HX0hXU19QR0EoZW5naW5lLT5tbWlvX2Jhc2UpOwo+IMKgCQl9Cj4gwqAKPiAtCQll cmluZy0+aHdzID0gSTkxNV9SRUFEKG1taW8pOwo+ICsJCWVlLT5od3MgPSBJOTE1X1JFQUQobW1p byk7Cj4gwqAJfQo+IMKgCj4gLQllcmluZy0+aGFuZ2NoZWNrX3Njb3JlID0gZW5naW5lLT5oYW5n Y2hlY2suc2NvcmU7Cj4gLQllcmluZy0+aGFuZ2NoZWNrX2FjdGlvbiA9IGVuZ2luZS0+aGFuZ2No ZWNrLmFjdGlvbjsKPiArCWVlLT5oYW5nY2hlY2tfc2NvcmUgPSBlbmdpbmUtPmhhbmdjaGVjay5z Y29yZTsKPiArCWVlLT5oYW5nY2hlY2tfYWN0aW9uID0gZW5naW5lLT5oYW5nY2hlY2suYWN0aW9u Owo+IMKgCj4gwqAJaWYgKFVTRVNfUFBHVFQoZGV2X3ByaXYpKSB7Cj4gwqAJCWludCBpOwo+IMKg Cj4gLQkJZXJpbmctPnZtX2luZm8uZ2Z4X21vZGUgPSBJOTE1X1JFQUQoUklOR19NT0RFX0dFTjco ZW5naW5lKSk7Cj4gKwkJZWUtPnZtX2luZm8uZ2Z4X21vZGUgPSBJOTE1X1JFQUQoUklOR19NT0RF X0dFTjcoZW5naW5lKSk7Cj4gwqAKPiDCoAkJaWYgKElTX0dFTjYoZGV2X3ByaXYpKQo+IC0JCQll cmluZy0+dm1faW5mby5wcF9kaXJfYmFzZSA9Cj4gKwkJCWVlLT52bV9pbmZvLnBwX2Rpcl9iYXNl ID0KPiDCoAkJCQlJOTE1X1JFQUQoUklOR19QUF9ESVJfQkFTRV9SRUFEKGVuZ2luZSkpOwo+IMKg CQllbHNlIGlmIChJU19HRU43KGRldl9wcml2KSkKPiAtCQkJZXJpbmctPnZtX2luZm8ucHBfZGly X2Jhc2UgPQo+ICsJCQllZS0+dm1faW5mby5wcF9kaXJfYmFzZSA9Cj4gwqAJCQkJSTkxNV9SRUFE KFJJTkdfUFBfRElSX0JBU0UoZW5naW5lKSk7Cj4gwqAJCWVsc2UgaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gOCkKPiDCoAkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKPiAtCQkJCWVyaW5n LT52bV9pbmZvLnBkcFtpXSA9Cj4gKwkJCQllZS0+dm1faW5mby5wZHBbaV0gPQo+IMKgCQkJCQlJ OTE1X1JFQUQoR0VOOF9SSU5HX1BEUF9VRFcoZW5naW5lLCBpKSk7Cj4gLQkJCQllcmluZy0+dm1f aW5mby5wZHBbaV0gPDw9IDMyOwo+IC0JCQkJZXJpbmctPnZtX2luZm8ucGRwW2ldIHw9Cj4gKwkJ CQllZS0+dm1faW5mby5wZHBbaV0gPDw9IDMyOwo+ICsJCQkJZWUtPnZtX2luZm8ucGRwW2ldIHw9 Cj4gwqAJCQkJCUk5MTVfUkVBRChHRU44X1JJTkdfUERQX0xEVyhlbmdpbmUsIGkpKTsKPiDCoAkJ CX0KPiDCoAl9Cj4gQEAgLTEwNDgsNyArMTA0Niw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfcmVjb3Jk X3Jpbmdfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IMKgCj4gwqBz dGF0aWMgdm9pZCBpOTE1X2dlbV9yZWNvcmRfYWN0aXZlX2NvbnRleHQoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAo+IMKgCQkJCQnCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3Rh dGUgKmVycm9yLAo+IC0JCQkJCcKgwqDCoHN0cnVjdCBkcm1faTkxNV9lcnJvcl9yaW5nICplcmlu ZykKPiArCQkJCQnCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfZW5naW5lICplZSkKPiDCoHsK PiDCoAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4g wqAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiBAQCAtMTA2Miw3ICsxMDYwLDcg QEAgc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVjb3JkX2FjdGl2ZV9jb250ZXh0KHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKPiDCoAkJCWNvbnRpbnVlOwo+IMKgCj4gwqAJCWlmICgoZXJy b3ItPmNjaWQgJiBQQUdFX01BU0spID09IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopKSB7 Cj4gLQkJCWVyaW5nLT5jdHggPSBpOTE1X2Vycm9yX2dndHRfb2JqZWN0X2NyZWF0ZShkZXZfcHJp diwgb2JqKTsKPiArCQkJZWUtPmN0eCA9IGk5MTVfZXJyb3JfZ2d0dF9vYmplY3RfY3JlYXRlKGRl dl9wcml2LCBvYmopOwo+IMKgCQkJYnJlYWs7Cj4gwqAJCX0KPiDCoAl9Cj4gQEAgLTEwNzUsMTgg KzEwNzMsMjYgQEAgc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVjb3JkX3JpbmdzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJlcXVlc3Q7Cj4gwqAJaW50IGksIGNvdW50Owo+IMKgCj4gKwlpZiAoZGV2X3ByaXYtPnNlbWFw aG9yZV9vYmopIHsKPiArCQllcnJvci0+c2VtYXBob3JlX29iaiA9Cj4gKwkJCWk5MTVfZXJyb3Jf Z2d0dF9vYmplY3RfY3JlYXRlKGRldl9wcml2LAo+ICsJCQkJCQnCoMKgwqDCoMKgwqBkZXZfcHJp di0+c2VtYXBob3JlX29iaik7Cj4gKwl9Cj4gKwo+IMKgCWZvciAoaSA9IDA7IGkgPCBJOTE1X05V TV9FTkdJTkVTOyBpKyspIHsKPiDCoAkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0g JmRldl9wcml2LT5lbmdpbmVbaV07Cj4gKwkJc3RydWN0IGRybV9pOTE1X2Vycm9yX2VuZ2luZSAq ZWUgPSAmZXJyb3ItPmVuZ2luZVtpXTsKPiDCoAo+IC0JCWVycm9yLT5yaW5nW2ldLnBpZCA9IC0x Owo+ICsJCWVlLT5waWQgPSAtMTsKPiArCQllZS0+ZW5naW5lX2lkID0gLTE7Cj4gwqAKPiDCoAkJ aWYgKCFpbnRlbF9lbmdpbmVfaW5pdGlhbGl6ZWQoZW5naW5lKSkKPiDCoAkJCWNvbnRpbnVlOwo+ IMKgCj4gLQkJZXJyb3ItPnJpbmdbaV0udmFsaWQgPSB0cnVlOwo+ICsJCWVlLT5lbmdpbmVfaWQg PSBpOwo+IMKgCj4gLQkJaTkxNV9yZWNvcmRfcmluZ19zdGF0ZShkZXZfcHJpdiwgZXJyb3IsIGVu Z2luZSwgJmVycm9yLT5yaW5nW2ldKTsKPiAtCQllbmdpbmVfcmVjb3JkX3dhaXRlcnMoZW5naW5l LCAmZXJyb3ItPnJpbmdbaV0pOwo+ICsJCWVycm9yX3JlY29yZF9lbmdpbmVfcmVnaXN0ZXJzKGVy cm9yLCBlbmdpbmUsIGVlKTsKPiArCQllcnJvcl9yZWNvcmRfZW5naW5lX3dhaXRlcnMoZW5naW5l LCBlZSk7Cj4gwqAKPiDCoAkJcmVxdWVzdCA9IGk5MTVfZ2VtX2ZpbmRfYWN0aXZlX3JlcXVlc3Qo ZW5naW5lKTsKPiDCoAkJaWYgKHJlcXVlc3QpIHsKPiBAQCAtMTEwMCwxMyArMTEwNiwxMyBAQCBz dGF0aWMgdm9pZCBpOTE1X2dlbV9yZWNvcmRfcmluZ3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+IMKgCQkJwqAqIGFzIHRoZSBzaW1wbGVzdCBtZXRob2QgdG8gYXZvaWQgYmVp bmcgb3ZlcndyaXR0ZW4KPiDCoAkJCcKgKiBieSB1c2Vyc3BhY2UuCj4gwqAJCQnCoCovCj4gLQkJ CWVycm9yLT5yaW5nW2ldLmJhdGNoYnVmZmVyID0KPiArCQkJZWUtPmJhdGNoYnVmZmVyID0KPiDC oAkJCQlpOTE1X2Vycm9yX29iamVjdF9jcmVhdGUoZGV2X3ByaXYsCj4gwqAJCQkJCQkJwqByZXF1 ZXN0LT5iYXRjaF9vYmosCj4gwqAJCQkJCQkJwqB2bSk7Cj4gwqAKPiDCoAkJCWlmIChIQVNfQlJP S0VOX0NTX1RMQihkZXZfcHJpdikpCj4gLQkJCQllcnJvci0+cmluZ1tpXS53YV9iYXRjaGJ1ZmZl ciA9Cj4gKwkJCQllZS0+d2FfYmF0Y2hidWZmZXIgPQo+IMKgCQkJCQlpOTE1X2Vycm9yX2dndHRf b2JqZWN0X2NyZWF0ZShkZXZfcHJpdiwKPiDCoAkJCQkJCQnCoMKgwqDCoMKgZW5naW5lLT5zY3Jh dGNoLm9iaik7Cj4gwqAKPiBAQCAtMTExNiw4ICsxMTIyLDggQEAgc3RhdGljIHZvaWQgaTkxNV9n ZW1fcmVjb3JkX3JpbmdzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiDCoAkJ CQlyY3VfcmVhZF9sb2NrKCk7Cj4gwqAJCQkJdGFzayA9IHBpZF90YXNrKHJlcXVlc3QtPnBpZCwg UElEVFlQRV9QSUQpOwo+IMKgCQkJCWlmICh0YXNrKSB7Cj4gLQkJCQkJc3RyY3B5KGVycm9yLT5y aW5nW2ldLmNvbW0sIHRhc2stPmNvbW0pOwo+IC0JCQkJCWVycm9yLT5yaW5nW2ldLnBpZCA9IHRh c2stPnBpZDsKPiArCQkJCQlzdHJjcHkoZWUtPmNvbW0sIHRhc2stPmNvbW0pOwo+ICsJCQkJCWVl LT5waWQgPSB0YXNrLT5waWQ7Cj4gwqAJCQkJfQo+IMKgCQkJCXJjdV9yZWFkX3VubG9jaygpOwo+ IMKgCQkJfQo+IEBAIC0xMTI2LDM1ICsxMTMyLDM0IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX3Jl Y29yZF9yaW5ncyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gwqAJCQkJcmVx dWVzdC0+Y3R4LT5mbGFncyAmIENPTlRFWFRfTk9fRVJST1JfQ0FQVFVSRTsKPiDCoAo+IMKgCQkJ cmIgPSByZXF1ZXN0LT5yaW5nYnVmOwo+IC0JCQllcnJvci0+cmluZ1tpXS5jcHVfcmluZ19oZWFk ID0gcmItPmhlYWQ7Cj4gLQkJCWVycm9yLT5yaW5nW2ldLmNwdV9yaW5nX3RhaWwgPSByYi0+dGFp bDsKPiAtCQkJZXJyb3ItPnJpbmdbaV0ucmluZ2J1ZmZlciA9Cj4gKwkJCWVlLT5jcHVfcmluZ19o ZWFkID0gcmItPmhlYWQ7Cj4gKwkJCWVlLT5jcHVfcmluZ190YWlsID0gcmItPnRhaWw7Cj4gKwkJ CWVlLT5yaW5nYnVmZmVyID0KPiDCoAkJCQlpOTE1X2Vycm9yX2dndHRfb2JqZWN0X2NyZWF0ZShk ZXZfcHJpdiwKPiDCoAkJCQkJCQnCoMKgwqDCoMKgwqByYi0+b2JqKTsKPiDCoAkJfQo+IMKgCj4g LQkJZXJyb3ItPnJpbmdbaV0uaHdzX3BhZ2UgPQo+ICsJCWVlLT5od3NfcGFnZSA9Cj4gwqAJCQlp OTE1X2Vycm9yX2dndHRfb2JqZWN0X2NyZWF0ZShkZXZfcHJpdiwKPiDCoAkJCQkJCcKgwqDCoMKg wqDCoGVuZ2luZS0+c3RhdHVzX3BhZ2Uub2JqKTsKPiDCoAo+IMKgCQlpZiAoZW5naW5lLT53YV9j dHgub2JqKSB7Cj4gLQkJCWVycm9yLT5yaW5nW2ldLndhX2N0eCA9Cj4gKwkJCWVlLT53YV9jdHgg PQo+IMKgCQkJCWk5MTVfZXJyb3JfZ2d0dF9vYmplY3RfY3JlYXRlKGRldl9wcml2LAo+IMKgCQkJ CQkJCcKgwqDCoMKgwqDCoGVuZ2luZS0+d2FfY3R4Lm9iaik7Cj4gwqAJCX0KPiDCoAo+IC0JCWk5 MTVfZ2VtX3JlY29yZF9hY3RpdmVfY29udGV4dChlbmdpbmUsIGVycm9yLCAmZXJyb3ItPnJpbmdb aV0pOwo+ICsJCWk5MTVfZ2VtX3JlY29yZF9hY3RpdmVfY29udGV4dChlbmdpbmUsIGVycm9yLCBl ZSk7Cj4gwqAKPiDCoAkJY291bnQgPSAwOwo+IMKgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcXVl c3QsICZlbmdpbmUtPnJlcXVlc3RfbGlzdCwgbGlzdCkKPiDCoAkJCWNvdW50Kys7Cj4gwqAKPiAt CQllcnJvci0+cmluZ1tpXS5udW1fcmVxdWVzdHMgPSBjb3VudDsKPiAtCQllcnJvci0+cmluZ1tp XS5yZXF1ZXN0cyA9Cj4gLQkJCWtjYWxsb2MoY291bnQsIHNpemVvZigqZXJyb3ItPnJpbmdbaV0u cmVxdWVzdHMpLAo+IC0JCQkJR0ZQX0FUT01JQyk7Cj4gLQkJaWYgKGVycm9yLT5yaW5nW2ldLnJl cXVlc3RzID09IE5VTEwpIHsKPiAtCQkJZXJyb3ItPnJpbmdbaV0ubnVtX3JlcXVlc3RzID0gMDsK PiArCQllZS0+bnVtX3JlcXVlc3RzID0gY291bnQ7Cj4gKwkJZWUtPnJlcXVlc3RzID0KPiArCQkJ a2NhbGxvYyhjb3VudCwgc2l6ZW9mKCplZS0+cmVxdWVzdHMpLCBHRlBfQVRPTUlDKTsKPiArCQlp ZiAoIWVlLT5yZXF1ZXN0cykgewo+ICsJCQllZS0+bnVtX3JlcXVlc3RzID0gMDsKPiDCoAkJCWNv bnRpbnVlOwo+IMKgCQl9Cj4gwqAKPiBAQCAtMTE2Miw3ICsxMTY3LDcgQEAgc3RhdGljIHZvaWQg aTkxNV9nZW1fcmVjb3JkX3JpbmdzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiDCoAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXF1ZXN0LCAmZW5naW5lLT5yZXF1ZXN0X2xpc3Qs IGxpc3QpIHsKPiDCoAkJCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9yZXF1ZXN0ICplcnE7Cj4gwqAK PiAtCQkJaWYgKGNvdW50ID49IGVycm9yLT5yaW5nW2ldLm51bV9yZXF1ZXN0cykgewo+ICsJCQlp ZiAoY291bnQgPj0gZWUtPm51bV9yZXF1ZXN0cykgewo+IMKgCQkJCS8qCj4gwqAJCQkJwqAqIElm IHRoZSByaW5nIHJlcXVlc3QgbGlzdCB3YXMgY2hhbmdlZCBpbgo+IMKgCQkJCcKgKiBiZXR3ZWVu IHRoZSBwb2ludCB3aGVyZSB0aGUgZXJyb3IgcmVxdWVzdAo+IEBAIC0xMTgxLDcgKzExODYsNyBA QCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9yZWNvcmRfcmluZ3Moc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+IMKgCQkJCWJyZWFrOwo+IMKgCQkJfQo+IMKgCj4gLQkJCWVycSA9ICZl cnJvci0+cmluZ1tpXS5yZXF1ZXN0c1tjb3VudCsrXTsKPiArCQkJZXJxID0gJmVlLT5yZXF1ZXN0 c1tjb3VudCsrXTsKPiDCoAkJCWVycS0+c2Vxbm8gPSByZXF1ZXN0LT5mZW5jZS5zZXFubzsKPiDC oAkJCWVycS0+amlmZmllcyA9IHJlcXVlc3QtPmVtaXR0ZWRfamlmZmllczsKPiDCoAkJCWVycS0+ dGFpbCA9IHJlcXVlc3QtPnBvc3RmaXg7Cj4gQEAgLTEzNTIsMjAgKzEzNTcsMjAgQEAgc3RhdGlj IHZvaWQgaTkxNV9lcnJvcl9jYXB0dXJlX21zZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gwqAJCQkJwqDCoMKgY29uc3QgY2hhciAqZXJyb3JfbXNnKQo+IMKgewo+IMKgCXUz MiBlY29kZTsKPiAtCWludCByaW5nX2lkID0gLTEsIGxlbjsKPiArCWludCBlbmdpbmVfaWQgPSAt MSwgbGVuOwo+IMKgCj4gLQllY29kZSA9IGk5MTVfZXJyb3JfZ2VuZXJhdGVfY29kZShkZXZfcHJp diwgZXJyb3IsICZyaW5nX2lkKTsKPiArCWVjb2RlID0gaTkxNV9lcnJvcl9nZW5lcmF0ZV9jb2Rl KGRldl9wcml2LCBlcnJvciwgJmVuZ2luZV9pZCk7Cj4gwqAKPiDCoAlsZW4gPSBzY25wcmludGYo ZXJyb3ItPmVycm9yX21zZywgc2l6ZW9mKGVycm9yLT5lcnJvcl9tc2cpLAo+IMKgCQkJIkdQVSBI QU5HOiBlY29kZSAlZDolZDoweCUwOHgiLAo+IC0JCQlJTlRFTF9HRU4oZGV2X3ByaXYpLCByaW5n X2lkLCBlY29kZSk7Cj4gKwkJCUlOVEVMX0dFTihkZXZfcHJpdiksIGVuZ2luZV9pZCwgZWNvZGUp Owo+IMKgCj4gLQlpZiAocmluZ19pZCAhPSAtMSAmJiBlcnJvci0+cmluZ1tyaW5nX2lkXS5waWQg IT0gLTEpCj4gKwlpZiAoZW5naW5lX2lkICE9IC0xICYmIGVycm9yLT5lbmdpbmVbZW5naW5lX2lk XS5waWQgIT0gLTEpCj4gwqAJCWxlbiArPSBzY25wcmludGYoZXJyb3ItPmVycm9yX21zZyArIGxl biwKPiDCoAkJCQnCoHNpemVvZihlcnJvci0+ZXJyb3JfbXNnKSAtIGxlbiwKPiDCoAkJCQnCoCIs IGluICVzIFslZF0iLAo+IC0JCQkJwqBlcnJvci0+cmluZ1tyaW5nX2lkXS5jb21tLAo+IC0JCQkJ wqBlcnJvci0+cmluZ1tyaW5nX2lkXS5waWQpOwo+ICsJCQkJwqBlcnJvci0+ZW5naW5lW2VuZ2lu ZV9pZF0uY29tbSwKPiArCQkJCcKgZXJyb3ItPmVuZ2luZVtlbmdpbmVfaWRdLnBpZCk7Cj4gwqAK PiDCoAlzY25wcmludGYoZXJyb3ItPmVycm9yX21zZyArIGxlbiwgc2l6ZW9mKGVycm9yLT5lcnJv cl9tc2cpIC0gbGVuLAo+IMKgCQnCoMKgIiwgcmVhc29uOiAlcywgYWN0aW9uOiAlcyIsCi0tIApK b29uYXMgTGFodGluZW4KT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBDZW50ZXIKSW50ZWwgQ29ycG9y YXRpb24KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==