From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [PATCH 08/12 v3] xen/arm: vpl011: Modify xenconsole to support multiple consoles Date: Tue, 16 May 2017 16:41:29 -0700 (PDT) Message-ID: References: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> <1494426918-32737-3-git-send-email-bhupinder.thakur@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dAm5v-00031i-ID for xen-devel@lists.xenproject.org; Tue, 16 May 2017 23:41:35 +0000 In-Reply-To: <1494426918-32737-3-git-send-email-bhupinder.thakur@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Bhupinder Thakur Cc: xen-devel@lists.xenproject.org, Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org T24gV2VkLCAxMCBNYXkgMjAxNywgQmh1cGluZGVyIFRoYWt1ciB3cm90ZToKPiBYZW5jb25zb2xl IHN1cHBvcnRzIG9ubHkgUFYgY29uc29sZSBjdXJyZW50bHkuIFRoaXMgcGF0Y2ggYWRkcyBzdXBw b3J0Cj4gZm9yIHN1cHBvcnRpbmcgbXVsdGlwbGUgY29uc29sZXMuCj4gCj4gVGhpcyBwYXRjaCBt b2RpZmllcyBkaWZmZXJlbnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBBUElzIHVzZWQKPiBpbiB4ZW5j b25zb2xlIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29uc29sZXMuCj4gCj4gQ2hhbmdlIHN1bW1hcnk6 Cj4gCj4gMS4gU3BsaXQgdGhlIGRvbWFpbiBzdHJ1Y3R1cmUgaW50byBhIGNvbnNvbGUgc3RydWN0 dXJlIGFuZCB0aGUKPiAgICBkb21haW4gc3RydWN0dXJlLCB3aGVyZSBlYWNoIGNvbnNvbGUgc3Ry dWN0dXJlIHJlcHJlc2VudHMgb25lCj4gICAgY29uc29sZS4KPiAKPiAyLiBNb2RpZnkgZGlmZmVy ZW50IEFQSXMgc3VjaCBhcyBidWZmZXJfYXBwZW5kKCkgZXRjLiB0byB0YWtlCj4gICAgY29uc29s ZSBzdHJ1Y3R1cmUgYXMgaW5wdXQgYW5kIHBlcmZvcm0gcGVyIGNvbnNvbGUgc3BlY2lmaWMKPiAg ICBvcGVyYXRpb25zLgo+IAo+IDMuIERlZmluZSBhIGdlbmVyaWMgY29uc29sZV9jcmVhdGVfcmlu ZygpLCB3aGljaCBzZXRzIHVwIHRoZQo+ICAgIHJpbmcgYnVmZmVyIGFuZCBldmVudCBjaGFubmVs IGZvciBlYWNoIGNvbnNvbGUuCj4gCj4gMy4gTW9kaWZ5IGRvbWFpbl9jcmVhdGVfcmluZygpIHRv IHVzZSBjb25zb2xlX2NyZWF0ZV9yaW5nKCkuCj4gCj4gNC4gTW9kaWZpY2F0aW9ucyBpbiBoYW5k bGVfcmluZ19yZWFkKCkgdG8gcmVhZCByaW5nIGJ1ZmZlciBkYXRhCj4gICAgZnJvbSBtdWx0aXBs ZSBjb25zb2xlcy4KPiAKPiA1LiBBZGQgbG9nIGZpbGUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgY29u c29sZXMuCj4gCj4gU2lnbmVkLW9mZi1ieTogQmh1cGluZGVyIFRoYWt1ciA8Ymh1cGluZGVyLnRo YWt1ckBsaW5hcm8ub3JnPgoKVGhlcmUgaXMgc29tZXRoaW5nIHdyb25nIHdpdGggdGhpcyBwYXRj aDogSSBjYW5ub3QgYXBwbHkgaXQuCgpBbHNvLCBpdCBpcyBzdGlsbCB3YXkgdG8gYmlnIGZvciBt ZSB0byByZXZpZXcuIEkgY2Fubm90IHRyYWNrIGFsbCB0aGUKY2hhbmdlcyBhbmQgZmlndXJlIG91 dCBpZiB0aGV5IGFyZSBjb3JyZWN0LgoKT25lIG9wdGlvbiBpcyB0byBpbnRyb2R1Y2Ugc3RydWN0 IGNvbnNvbGUgaW4gb25lIHBhdGNoLCB3aXRoIG9ubHkgb25lCnN0cnVjdCBjb25zb2xlIHBlciBk b21haW4uIFRoZW4gdGhlIHNlY29uZCBwYXRjaCBjb3VsZCBpbnRyb2R1Y2UKbXVsdGlwbGUgc3Ry dWN0IGNvbnNvbGUgd2l0aCB0aGUgaGVscGVycyBzdWNoIGFzIGNvbnNvbGVfaXRlcl92b2lkX2Fy ZzEuCgpGaW5hbGx5IHRoZSB0aGlyZCBwYXRjaCBjb3VsZCBhZGQgdnVhcnQgc3VwcG9ydC4KCgo+ IC0tLQo+IAo+IENoYW5nZXMgc2luY2UgdjI6Cj4gCj4gLSBEZWZpbmVkIGEgbmV3IGZ1bmN0aW9u IGNvbnNvbGVfY3JlYXRlX3JpbmcoKSB3aGljaCBzZXRzIHVwIHRoZSByaW5nIGJ1ZmZlciBhbmQg Cj4gICBldmVudCBjaGFubmVsIGEgbmV3IGNvbnNvbGUuIGRvbWFpbl9jcmVhdGVfcmluZygpIHVz ZXMgdGhpcyBmdW5jdGlvbiB0byBzZXR1cAo+ICAgYSBjb25zb2xlLgo+IC0gVGhpcyBwYXRjaCBk b2VzIG5vdCBjb250YWluIHZ1YXJ0IHNwZWNpZmljIGNoYW5nZXMsIHdoaWNoIHdvdWxkIGJlIGlu dHJvZHVjZWQgaW4KPiAgIHRoZSBuZXh0IHBhdGNoLgo+IC0gQ2hhbmdlcyBmb3Iga2VlcGluZyB0 aGUgUFYgbG9nIGZpbGUgbmFtZSB1bmNoYW5nZWQuCj4gCj4gQ2hhbmdlcyBzaW5jZSB2MToKPiAK PiAtIFNwbGl0IHRoZSBkb21haW4gc3RydXR1cmUgdG8gYSBzZXBhcmF0ZSBjb25zb2xlIHN0cnVj dHVyZQo+IC0gTW9kaWZpZWQgdGhlIGZ1bmN0aW9ucyB0byBvcGVyYXRlIG9uIHRoZSBjb25zb2xl IHN0cnV0dXJlCj4gLSBSZXBsYWNlZCByZXBldGl0aXZlIHBlciBjb25zb2xlIGNvZGUgd2l0aCBn ZW5lcmljIGNvZGUKPiAKPiAgdG9vbHMvY29uc29sZS9kYWVtb24vaW8uYyB8IDY1MCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2Vk LCA0NjAgaW5zZXJ0aW9ucygrKSwgMTkwIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS90 b29scy9jb25zb2xlL2RhZW1vbi9pby5jIGIvdG9vbHMvY29uc29sZS9kYWVtb24vaW8uYwo+IGlu ZGV4IDdlNmE4ODYuLjliYjE0ZGUgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvY29uc29sZS9kYWVtb24v aW8uYwo+ICsrKyBiL3Rvb2xzL2NvbnNvbGUvZGFlbW9uL2lvLmMKPiBAQCAtODksMjkgKzg5LDEz OSBAQCBzdHJ1Y3QgYnVmZmVyIHsKPiAgCXNpemVfdCBtYXhfY2FwYWNpdHk7Cj4gIH07Cj4gIAo+ IC1zdHJ1Y3QgZG9tYWluIHsKPiAtCWludCBkb21pZDsKPiArc3RydWN0IGNvbnNvbGUgewo+ICsJ Y2hhciAqeHNuYW1lOwo+ICsJY2hhciAqdHR5bmFtZTsKPiAgCWludCBtYXN0ZXJfZmQ7Cj4gIAlp bnQgbWFzdGVyX3BvbGxmZF9pZHg7Cj4gIAlpbnQgc2xhdmVfZmQ7Cj4gIAlpbnQgbG9nX2ZkOwo+ IC0JYm9vbCBpc19kZWFkOwo+IC0JdW5zaWduZWQgbGFzdF9zZWVuOwo+ICAJc3RydWN0IGJ1ZmZl ciBidWZmZXI7Cj4gLQlzdHJ1Y3QgZG9tYWluICpuZXh0Owo+IC0JY2hhciAqY29uc3BhdGg7Cj4g IAlpbnQgcmluZ19yZWY7Cj4gIAl4ZW5ldnRjaG5fcG9ydF9vcl9lcnJvcl90IGxvY2FsX3BvcnQ7 Cj4gIAl4ZW5ldnRjaG5fcG9ydF9vcl9lcnJvcl90IHJlbW90ZV9wb3J0Owo+ICsJc3RydWN0IHhl bmNvbnNfaW50ZXJmYWNlICppbnRlcmZhY2U7Cj4gKwlzdHJ1Y3QgZG9tYWluICpkOyAgLyogUmVm ZXJlbmNlIHRvIHRoZSBkb21haW4gaXQgaXMgY29udGFpbmVkIGluLiAqLwo+ICsJY2hhciAqeHNw YXRoOwo+ICsJaW50ICgqbWFwX3JpbmdfcmVmKShzdHJ1Y3QgY29uc29sZSAqLCBpbnQpOwo+ICsJ Ym9vbCBtYW5kYXRvcnk7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgY29uc29sZV9kYXRhIHsKPiArCWNo YXIgKnhzbmFtZTsKPiArCWNoYXIgKnR0eW5hbWU7Cj4gKwlpbnQgKCptYXBmdW5jKShzdHJ1Y3Qg Y29uc29sZSAqLCBpbnQpOwo+ICsJYm9vbCBtYW5kYXRvcnk7Cj4gK307Cj4gKwo+ICtzdGF0aWMg aW50IG1hcF9wdmNvbl9yaW5nX3JlZihzdHJ1Y3QgY29uc29sZSAqLCBpbnQgKTsKPiArCj4gK3N0 YXRpYyBzdHJ1Y3QgY29uc29sZV9kYXRhIGNvbnNvbGVfZGF0YVtdID0gewo+ICsKPiArCXsKPiAr CQkueHNuYW1lID0gIi9jb25zb2xlIiwKPiArCQkudHR5bmFtZSA9ICJ0dHkiLAo+ICsJCS5tYXBm dW5jID0gbWFwX3B2Y29uX3JpbmdfcmVmLAo+ICsJCS5tYW5kYXRvcnkgPSB0cnVlCj4gKwl9LAo+ ICt9Owo+ICsKPiArI2RlZmluZSBNQVhfQ09OU09MRSAoc2l6ZW9mKGNvbnNvbGVfZGF0YSkvc2l6 ZW9mKHN0cnVjdCBjb25zb2xlX2RhdGEpKQo+ICsKPiArc3RydWN0IGRvbWFpbiB7Cj4gKwlpbnQg ZG9taWQ7Cj4gKwlib29sIGlzX2RlYWQ7Cj4gKwl1bnNpZ25lZCBsYXN0X3NlZW47Cj4gKwlzdHJ1 Y3QgZG9tYWluICpuZXh0Owo+ICAJeGVuZXZ0Y2huX2hhbmRsZSAqeGNlX2hhbmRsZTsKPiAgCWlu dCB4Y2VfcG9sbGZkX2lkeDsKPiAtCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZXJmYWNl Owo+ICAJaW50IGV2ZW50X2NvdW50Owo+ICAJbG9uZyBsb25nIG5leHRfcGVyaW9kOwo+ICsJc3Ry dWN0IGNvbnNvbGUgY29uc29sZVtNQVhfQ09OU09MRV07Cj4gIH07Cj4gIAo+ICBzdGF0aWMgc3Ry dWN0IGRvbWFpbiAqZG9tX2hlYWQ7Cj4gIAo+ICt0eXBlZGVmIHZvaWQgKCpWT0lEX0lURVJfRlVO Q19BUkcxKShzdHJ1Y3QgY29uc29sZSAqKTsKPiArdHlwZWRlZiBib29sICgqQk9PTF9JVEVSX0ZV TkNfQVJHMSkoc3RydWN0IGNvbnNvbGUgKik7Cj4gK3R5cGVkZWYgaW50ICgqSU5UX0lURVJfRlVO Q19BUkcxKShzdHJ1Y3QgY29uc29sZSAqKTsKPiArdHlwZWRlZiB2b2lkICgqVk9JRF9JVEVSX0ZV TkNfQVJHMikoc3RydWN0IGNvbnNvbGUgKiwgIHVuc2lnbmVkIGludCk7Cj4gK3R5cGVkZWYgaW50 ICgqSU5UX0lURVJfRlVOQ19BUkczKShzdHJ1Y3QgY29uc29sZSAqLAo+ICsJCQkgc3RydWN0IGRv bWFpbiAqZG9tLCB2b2lkICoqKTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBjb25zb2xlX2Vu YWJsZWQoc3RydWN0IGNvbnNvbGUgKmNvbikKPiArewo+ICsJcmV0dXJuIGNvbi0+bG9jYWxfcG9y dCAhPSAtMTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGNvbnNvbGVfaXRlcl92b2lk X2FyZzEoc3RydWN0IGRvbWFpbiAqZCwKPiArCQkJCQkJCQkJCSAgIFZPSURfSVRFUl9GVU5DX0FS RzEgaXRlcl9mdW5jKQo+ICt7Cj4gKwlpbnQgaSA9IDA7Cj4gKwlzdHJ1Y3QgY29uc29sZSAqY29u ID0gJihkLT5jb25zb2xlWzBdKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTlNPTEU7 IGkrKywgY29uKyspCj4gKwl7Cj4gKwkJaXRlcl9mdW5jKGNvbik7Cj4gKwl9Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgdm9pZCBjb25zb2xlX2l0ZXJfdm9pZF9hcmcyKHN0cnVjdCBkb21haW4g KmQsCj4gKwkJCQkJCQkJCQkgICBWT0lEX0lURVJfRlVOQ19BUkcyIGl0ZXJfZnVuYywKPiArCQkJ CQkJCQkJCSAgIHVuc2lnbmVkIGludCBpdGVyX2RhdGEpCj4gK3sKPiArCWludCBpID0gMDsKPiAr CXN0cnVjdCBjb25zb2xlICpjb24gPSAmKGQtPmNvbnNvbGVbMF0pOwo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCBNQVhfQ09OU09MRTsgaSsrLCBjb24rKykKPiArCXsKPiArCQlpdGVyX2Z1bmMoY29u LCBpdGVyX2RhdGEpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgY29uc29s ZV9pdGVyX2Jvb2xfYXJnMShzdHJ1Y3QgZG9tYWluICpkLAo+ICsJCQkJCQkJCQkJICAgQk9PTF9J VEVSX0ZVTkNfQVJHMSBpdGVyX2Z1bmMpCj4gK3sKPiArCWludCBpID0gMDsKPiArCXN0cnVjdCBj b25zb2xlICpjb24gPSAmKGQtPmNvbnNvbGVbMF0pOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBN QVhfQ09OU09MRTsgaSsrLCBjb24rKykKPiArCXsKPiArCQlpZiAoaXRlcl9mdW5jKGNvbikpCj4g KwkJCXJldHVybiB0cnVlOwo+ICsJfQo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW5saW5lIGludCBjb25zb2xlX2l0ZXJfaW50X2FyZzEoc3RydWN0IGRvbWFpbiAqZCwKPiAr CQkJCQkJCQkJCSBJTlRfSVRFUl9GVU5DX0FSRzEgaXRlcl9mdW5jKQo+ICt7Cj4gKwlpbnQgaSA9 IDA7Cj4gKwlzdHJ1Y3QgY29uc29sZSAqY29uID0gJihkLT5jb25zb2xlWzBdKTsKPiArCj4gKwlm b3IgKGkgPSAwOyBpIDwgTUFYX0NPTlNPTEU7IGkrKywgY29uKyspCj4gKwl7Cj4gKwkJaWYgKGl0 ZXJfZnVuYyhjb24pKQo+ICsJCQlyZXR1cm4gMTsKPiArCX0KPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW5saW5lIGludCBjb25zb2xlX2l0ZXJfaW50X2FyZzMoc3RydWN0IGRvbWFp biAqZCwKPiArCQkJCQkJCQkJCSBJTlRfSVRFUl9GVU5DX0FSRzMgaXRlcl9mdW5jLAo+ICsJCQkJ CQkJCQkJIHZvaWQgKml0ZXJfZGF0YSkKPiArewo+ICsJaW50IGkgPSAwOwo+ICsJc3RydWN0IGNv bnNvbGUgKmNvbiA9ICYoZC0+Y29uc29sZVswXSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IE1B WF9DT05TT0xFOyBpKyssIGNvbisrKQo+ICsJewo+ICsJCWlmIChpdGVyX2Z1bmMoY29uLCBkLCBp dGVyX2RhdGEpKQo+ICsJCQlyZXR1cm4gMTsKPiArCX0KPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICBzdGF0aWMgaW50IHdyaXRlX2FsbChpbnQgZmQsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxl bikKPiAgewo+ICAJd2hpbGUgKGxlbikgewo+IEBAIC0xNTgsMTEgKzI2OCwyOSBAQCBzdGF0aWMg aW50IHdyaXRlX3dpdGhfdGltZXN0YW1wKGludCBmZCwgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90 IHN6LAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGJ1ZmZlcl9hcHBlbmQo c3RydWN0IGRvbWFpbiAqZG9tKQo+ICtzdGF0aWMgaW5saW5lIGJvb2wgYnVmZmVyX2F2YWlsYWJs ZShzdHJ1Y3QgY29uc29sZSAqY29uKQo+ICB7Cj4gLQlzdHJ1Y3QgYnVmZmVyICpidWZmZXIgPSAm ZG9tLT5idWZmZXI7Cj4gKwlpZiAoZGlzY2FyZF9vdmVyZmxvd2VkX2RhdGEgfHwKPiArCQkhY29u LT5idWZmZXIubWF4X2NhcGFjaXR5IHx8Cj4gKwkJY29uLT5idWZmZXIuc2l6ZSA8IGNvbi0+YnVm ZmVyLm1heF9jYXBhY2l0eSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCWVsc2UKPiArCQlyZXR1cm4g ZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGJ1ZmZlcl9hcHBlbmQoc3RydWN0IGNvbnNv bGUgKmNvbiwgdW5zaWduZWQgaW50IGRhdGEpCj4gK3sKPiArCXN0cnVjdCBidWZmZXIgKmJ1ZmZl ciA9ICZjb24tPmJ1ZmZlcjsKPiArCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IGNv bi0+aW50ZXJmYWNlOwo+ICsJeGVuZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCBwb3J0ID0gY29uLT5s b2NhbF9wb3J0Owo+ICsJc3RydWN0IGRvbWFpbiAqZG9tID0gY29uLT5kOwo+ICsJeGVuZXZ0Y2hu X3BvcnRfb3JfZXJyb3JfdCByeHBvcnQgPSAoeGVuZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdClkYXRh Owo+ICsKPiAgCVhFTkNPTlNfUklOR19JRFggY29ucywgcHJvZCwgc2l6ZTsKPiAtCXN0cnVjdCB4 ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IGRvbS0+aW50ZXJmYWNlOwo+ICsKPiArCS8qIElmIGlu Y29taW5nIGRhdGEgaXMgbm90IGZvciB0aGUgY3VycmVudCBjb25zb2xlIHRoZW4gaWdub3JlLiAq Lwo+ICsJaWYgKHBvcnQgIT0gcnhwb3J0KQo+ICsJCXJldHVybjsKPiAgCj4gIAljb25zID0gaW50 Zi0+b3V0X2NvbnM7Cj4gIAlwcm9kID0gaW50Zi0+b3V0X3Byb2Q7Cj4gQEAgLTE4NywyMiArMzE1 LDIyIEBAIHN0YXRpYyB2b2lkIGJ1ZmZlcl9hcHBlbmQoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICAK PiAgCXhlbl9tYigpOwo+ICAJaW50Zi0+b3V0X2NvbnMgPSBjb25zOwo+IC0JeGVuZXZ0Y2huX25v dGlmeShkb20tPnhjZV9oYW5kbGUsIGRvbS0+bG9jYWxfcG9ydCk7Cj4gKwl4ZW5ldnRjaG5fbm90 aWZ5KGRvbS0+eGNlX2hhbmRsZSwgcG9ydCk7Cj4gIAo+ICAJLyogR2V0IHRoZSBkYXRhIHRvIHRo ZSBsb2dmaWxlIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGJlY2F1c2UgaWYKPiAgCSAqIG5vIG9uZSBp cyBsaXN0ZW5pbmcgb24gdGhlIGNvbnNvbGUgcHR5IHRoZW4gaXQgd2lsbCBmaWxsIHVwCj4gIAkg KiBhbmQgaGFuZGxlX3R0eV93cml0ZSB3aWxsIHN0b3AgYmVpbmcgY2FsbGVkLgo+ICAJICovCj4g LQlpZiAoZG9tLT5sb2dfZmQgIT0gLTEpIHsKPiArCWlmIChjb24tPmxvZ19mZCAhPSAtMSkgewo+ ICAJCWludCBsb2dyZXQ7Cj4gIAkJaWYgKGxvZ190aW1lX2d1ZXN0KSB7Cj4gIAkJCWxvZ3JldCA9 IHdyaXRlX3dpdGhfdGltZXN0YW1wKAo+IC0JCQkJZG9tLT5sb2dfZmQsCj4gKwkJCQljb24tPmxv Z19mZCwKPiAgCQkJCWJ1ZmZlci0+ZGF0YSArIGJ1ZmZlci0+c2l6ZSAtIHNpemUsCj4gIAkJCQlz aXplLCAmbG9nX3RpbWVfZ3Vlc3RfbmVlZHRzKTsKPiAgCQl9IGVsc2Ugewo+ICAJCQlsb2dyZXQg PSB3cml0ZV9hbGwoCj4gLQkJCQlkb20tPmxvZ19mZCwKPiArCQkJCWNvbi0+bG9nX2ZkLAo+ICAJ CQkJYnVmZmVyLT5kYXRhICsgYnVmZmVyLT5zaXplIC0gc2l6ZSwKPiAgCQkJCXNpemUpOwo+ICAJ CX0KPiBAQCAtMjkwLDEyICs0MTgsMTMgQEAgc3RhdGljIGludCBjcmVhdGVfaHZfbG9nKHZvaWQp Cj4gIAlyZXR1cm4gZmQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgY3JlYXRlX2RvbWFpbl9sb2co c3RydWN0IGRvbWFpbiAqZG9tKQo+ICtzdGF0aWMgaW50IGNyZWF0ZV9jb25zb2xlX2xvZyhzdHJ1 Y3QgY29uc29sZSAqY29uKQo+ICB7Cj4gIAljaGFyIGxvZ2ZpbGVbUEFUSF9NQVhdOwo+ICAJY2hh ciAqbmFtZXBhdGgsICpkYXRhLCAqczsKPiAgCWludCBmZDsKPiAgCXVuc2lnbmVkIGludCBsZW47 Cj4gKwlzdHJ1Y3QgZG9tYWluICpkb20gPSBjb24tPmQ7Cj4gIAo+ICAJbmFtZXBhdGggPSB4c19n ZXRfZG9tYWluX3BhdGgoeHMsIGRvbS0+ZG9taWQpOwo+ICAJcyA9IHJlYWxsb2MobmFtZXBhdGgs IHN0cmxlbihuYW1lcGF0aCkgKyA2KTsKPiBAQCAtMzE0LDcgKzQ0Myw5IEBAIHN0YXRpYyBpbnQg Y3JlYXRlX2RvbWFpbl9sb2coc3RydWN0IGRvbWFpbiAqZG9tKQo+ICAJCXJldHVybiAtMTsKPiAg CX0KPiAgCj4gLQlzbnByaW50Zihsb2dmaWxlLCBQQVRIX01BWC0xLCAiJXMvZ3Vlc3QtJXMubG9n IiwgbG9nX2RpciwgZGF0YSk7Cj4gKwlzbnByaW50Zihsb2dmaWxlLCBQQVRIX01BWC0xLCAiJXMl cy9ndWVzdC0lcy5sb2ciLAo+ICsJCQkgbG9nX2RpciwgY29uLT54c3BhdGgsIGRhdGEpOwoKVGhp cyBjaGFuZ2VzIHRoZSBsb2cgZGlyZWN0b3J5LCByaWdodD8gQXJlIHRoZSBuZXcgZGlyZWN0b3Jp ZXMgY3JlYXRlZApjb3JyZWN0bHkgYnkgdGhlIGluc3RhbGwgc2NyaXB0cz8KCgo+ICAJZnJlZShk YXRhKTsKPiAgCWxvZ2ZpbGVbUEFUSF9NQVgtMV0gPSAnXDAnOwo+ICAKPiBAQCAtMzM2LDE5ICs0 NjcsMjQgQEAgc3RhdGljIGludCBjcmVhdGVfZG9tYWluX2xvZyhzdHJ1Y3QgZG9tYWluICpkb20p Cj4gIAlyZXR1cm4gZmQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGRvbWFpbl9jbG9zZV90dHko c3RydWN0IGRvbWFpbiAqZG9tKQo+ICtzdGF0aWMgdm9pZCBjb25zb2xlX2Nsb3NlX3R0eShzdHJ1 Y3QgY29uc29sZSAqY29uKQo+ICB7Cj4gLQlpZiAoZG9tLT5tYXN0ZXJfZmQgIT0gLTEpIHsKPiAt CQljbG9zZShkb20tPm1hc3Rlcl9mZCk7Cj4gLQkJZG9tLT5tYXN0ZXJfZmQgPSAtMTsKPiArCWlm IChjb24tPm1hc3Rlcl9mZCAhPSAtMSkgewo+ICsJCWNsb3NlKGNvbi0+bWFzdGVyX2ZkKTsKPiAr CQljb24tPm1hc3Rlcl9mZCA9IC0xOwo+ICAJfQo+ICAKPiAtCWlmIChkb20tPnNsYXZlX2ZkICE9 IC0xKSB7Cj4gLQkJY2xvc2UoZG9tLT5zbGF2ZV9mZCk7Cj4gLQkJZG9tLT5zbGF2ZV9mZCA9IC0x Owo+ICsJaWYgKGNvbi0+c2xhdmVfZmQgIT0gLTEpIHsKPiArCQljbG9zZShjb24tPnNsYXZlX2Zk KTsKPiArCQljb24tPnNsYXZlX2ZkID0gLTE7Cj4gIAl9Cj4gIH0KPiAgCj4gK3N0YXRpYyB2b2lk IGRvbWFpbl9jbG9zZV90dHkoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICt7Cj4gKwljb25zb2xlX2l0 ZXJfdm9pZF9hcmcxKGRvbSwgY29uc29sZV9jbG9zZV90dHkpOwo+ICt9Cj4gKwo+ICAjaWZkZWYg X19zdW5fXwo+ICBzdGF0aWMgaW50IG9wZW5wdHkoaW50ICphbWFzdGVyLCBpbnQgKmFzbGF2ZSwg Y2hhciAqbmFtZSwKPiAgCQkgICBzdHJ1Y3QgdGVybWlvcyAqdGVybXAsIHN0cnVjdCB3aW5zaXpl ICp3aW5wKQo+IEBAIC00MDksNyArNTQ1LDcgQEAgdm9pZCBjZm1ha2VyYXcoc3RydWN0IHRlcm1p b3MgKnRlcm1pb3NfcCkKPiAgfQo+ICAjZW5kaWYgLyogX19zdW5fXyAqLwo+ICAKPiAtc3RhdGlj IGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20pCj4gK3N0YXRpYyBpbnQg Y29uc29sZV9jcmVhdGVfdHR5KHN0cnVjdCBjb25zb2xlICpjb24pCj4gIHsKPiAgCWNvbnN0IGNo YXIgKnNsYXZlOwo+ICAJY2hhciAqcGF0aDsKPiBAQCAtNDE4LDE5ICs1NTQsMjMgQEAgc3RhdGlj IGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20pCj4gIAljaGFyICpkYXRh Owo+ICAJdW5zaWduZWQgaW50IGxlbjsKPiAgCXN0cnVjdCB0ZXJtaW9zIHRlcm07Cj4gKwlzdHJ1 Y3QgZG9tYWluICpkb20gPSBjb24tPmQ7Cj4gKwo+ICsJaWYgKCFjb25zb2xlX2VuYWJsZWQoY29u KSkKPiArCQlyZXR1cm4gMDsKPiAgCj4gLQlhc3NlcnQoZG9tLT5zbGF2ZV9mZCA9PSAtMSk7Cj4g LQlhc3NlcnQoZG9tLT5tYXN0ZXJfZmQgPT0gLTEpOwo+ICsJYXNzZXJ0KGNvbi0+bWFzdGVyX2Zk ID09IC0xKTsKPiArCWFzc2VydChjb24tPnNsYXZlX2ZkID09IC0xKTsKPiAgCj4gLQlpZiAob3Bl bnB0eSgmZG9tLT5tYXN0ZXJfZmQsICZkb20tPnNsYXZlX2ZkLCBOVUxMLCBOVUxMLCBOVUxMKSA8 IDApIHsKPiArCWlmIChvcGVucHR5KCZjb24tPm1hc3Rlcl9mZCwgJmNvbi0+c2xhdmVfZmQsIE5V TEwsIE5VTEwsIE5VTEwpIDwgMCkgewo+ICAJCWVyciA9IGVycm5vOwo+ICAJCWRvbG9nKExPR19F UlIsICJGYWlsZWQgdG8gY3JlYXRlIHR0eSBmb3IgZG9tYWluLSVkICIKPiAtCQkgICAgICAiKGVy cm5vID0gJWksICVzKSIsCj4gLQkJICAgICAgZG9tLT5kb21pZCwgZXJyLCBzdHJlcnJvcihlcnIp KTsKPiAtCQlyZXR1cm4gMDsKPiArCQkJICAiKGVycm5vID0gJWksICVzKSIsCj4gKwkJCSAgZG9t LT5kb21pZCwgZXJyLCBzdHJlcnJvcihlcnIpKTsKPiArCQlnb3RvIG91dDsKCnN0aWxsIGNoYW5n aW5nIHRoZSByZXR1cm4gaW50byBhIGdvdG8/CgoKPiAgCX0KPiAgCj4gLQlpZiAodGNnZXRhdHRy KGRvbS0+c2xhdmVfZmQsICZ0ZXJtKSA8IDApIHsKPiArCWlmICh0Y2dldGF0dHIoY29uLT5zbGF2 ZV9mZCwgJnRlcm0pIDwgMCkgewo+ICAJCWVyciA9IGVycm5vOwo+ICAJCWRvbG9nKExPR19FUlIs ICJGYWlsZWQgdG8gZ2V0IHR0eSBhdHRyaWJ1dGVzIGZvciBkb21haW4tJWQgIgo+ICAJCQkiKGVy cm5vID0gJWksICVzKSIsCj4gQEAgLTQzOCw3ICs1NzgsNyBAQCBzdGF0aWMgaW50IGRvbWFpbl9j cmVhdGVfdHR5KHN0cnVjdCBkb21haW4gKmRvbSkKPiAgCQlnb3RvIG91dDsKPiAgCX0KPiAgCWNm bWFrZXJhdygmdGVybSk7Cj4gLQlpZiAodGNzZXRhdHRyKGRvbS0+c2xhdmVfZmQsIFRDU0FOT1cs ICZ0ZXJtKSA8IDApIHsKPiArCWlmICh0Y3NldGF0dHIoY29uLT5zbGF2ZV9mZCwgVENTQU5PVywg JnRlcm0pIDwgMCkgewo+ICAJCWVyciA9IGVycm5vOwo+ICAJCWRvbG9nKExPR19FUlIsICJGYWls ZWQgdG8gc2V0IHR0eSBhdHRyaWJ1dGVzIGZvciBkb21haW4tJWQgIgo+ICAJCQkiKGVycm5vID0g JWksICVzKSIsCj4gQEAgLTQ0Niw0MCArNTg2LDU0IEBAIHN0YXRpYyBpbnQgZG9tYWluX2NyZWF0 ZV90dHkoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICAJCWdvdG8gb3V0Owo+ICAJfQo+ICAKPiAtCWlm ICgoc2xhdmUgPSBwdHNuYW1lKGRvbS0+bWFzdGVyX2ZkKSkgPT0gTlVMTCkgewo+ICsJaWYgKChz bGF2ZSA9IHB0c25hbWUoY29uLT5tYXN0ZXJfZmQpKSA9PSBOVUxMKSB7Cj4gIAkJZXJyID0gZXJy bm87Cj4gIAkJZG9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBnZXQgc2xhdmUgbmFtZSBmb3IgZG9t YWluLSVkICIKPiAtCQkgICAgICAiKGVycm5vID0gJWksICVzKSIsCj4gLQkJICAgICAgZG9tLT5k b21pZCwgZXJyLCBzdHJlcnJvcihlcnIpKTsKPiArCQkJICAiKGVycm5vID0gJWksICVzKSIsCj4g KwkJCSAgZG9tLT5kb21pZCwgZXJyLCBzdHJlcnJvcihlcnIpKTsKPiAgCQlnb3RvIG91dDsKPiAg CX0KPiAgCj4gLQlzdWNjZXNzID0gYXNwcmludGYoJnBhdGgsICIlcy9saW1pdCIsIGRvbS0+Y29u c3BhdGgpICE9Cj4gKwlzdWNjZXNzID0gYXNwcmludGYoJnBhdGgsICIlcy9saW1pdCIsIGNvbi0+ eHNwYXRoKSAhPQo+ICAJCS0xOwo+ICAJaWYgKCFzdWNjZXNzKQo+ICAJCWdvdG8gb3V0Owo+ICAJ ZGF0YSA9IHhzX3JlYWQoeHMsIFhCVF9OVUxMLCBwYXRoLCAmbGVuKTsKPiAgCWlmIChkYXRhKSB7 Cj4gLQkJZG9tLT5idWZmZXIubWF4X2NhcGFjaXR5ID0gc3RydG91bChkYXRhLCAwLCAwKTsKPiAr CQljb24tPmJ1ZmZlci5tYXhfY2FwYWNpdHkgPSBzdHJ0b3VsKGRhdGEsIDAsIDApOwo+ICAJCWZy ZWUoZGF0YSk7Cj4gIAl9Cj4gIAlmcmVlKHBhdGgpOwo+ICAKPiAtCXN1Y2Nlc3MgPSAoYXNwcmlu dGYoJnBhdGgsICIlcy90dHkiLCBkb20tPmNvbnNwYXRoKSAhPSAtMSk7Cj4gKwlzdWNjZXNzID0g KGFzcHJpbnRmKCZwYXRoLCAiJXMvJXMiLCBjb24tPnhzcGF0aCwgY29uLT50dHluYW1lKSAhPSAt MSk7Cj4gKwo+ICAJaWYgKCFzdWNjZXNzKQo+ICAJCWdvdG8gb3V0Owo+ICAJc3VjY2VzcyA9IHhz X3dyaXRlKHhzLCBYQlRfTlVMTCwgcGF0aCwgc2xhdmUsIHN0cmxlbihzbGF2ZSkpOwo+ICAJZnJl ZShwYXRoKTsKPiAtCWlmICghc3VjY2VzcykKPiArCj4gKwlpZiAoZmNudGwoY29uLT5tYXN0ZXJf ZmQsIEZfU0VURkwsIE9fTk9OQkxPQ0spID09IC0xKQo+ICAJCWdvdG8gb3V0Owo+ICAKPiAtCWlm IChmY250bChkb20tPm1hc3Rlcl9mZCwgRl9TRVRGTCwgT19OT05CTE9DSykgPT0gLTEpCj4gKwlp ZiAoIXN1Y2Nlc3MpCj4gIAkJZ290byBvdXQ7Cj4gIAo+IC0JcmV0dXJuIDE7Cj4gLW91dDoKPiAt CWRvbWFpbl9jbG9zZV90dHkoZG9tKTsKPiAgCXJldHVybiAwOwo+ICsKPiArb3V0Ogo+ICsJcmV0 dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZG9tYWluX2NyZWF0ZV90dHkoc3RydWN0IGRv bWFpbiAqZG9tKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGNvbnNvbGVfaXRlcl9p bnRfYXJnMShkb20sIGNvbnNvbGVfY3JlYXRlX3R0eSk7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlk b21haW5fY2xvc2VfdHR5KGRvbSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAgfQo+ICAgCj4gIC8q IFRha2VzIHR1cGxlcyBvZiBuYW1lcywgc2NhbmYtc3R5bGUgYXJncywgYW5kIHZvaWQgKiosIE5V TEwgdGVybWluYXRlZC4gKi8KPiBAQCAtNTE3LDMxICs2NzEsMTA2IEBAIHN0YXRpYyBpbnQgeHNf Z2F0aGVyKHN0cnVjdCB4c19oYW5kbGUgKnhzLCBjb25zdCBjaGFyICpkaXIsIC4uLikKPiAgCXJl dHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGRvbWFpbl91bm1hcF9pbnRlcmZhY2Uo c3RydWN0IGRvbWFpbiAqZG9tKQo+ICtzdGF0aWMgdm9pZCBjb25zb2xlX3VubWFwX2ludGVyZmFj ZShzdHJ1Y3QgY29uc29sZSAqY29uKQo+ICB7Cj4gLQlpZiAoZG9tLT5pbnRlcmZhY2UgPT0gTlVM TCkKPiArCWlmIChjb24tPmludGVyZmFjZSA9PSBOVUxMKQo+ICAJCXJldHVybjsKPiAtCWlmICh4 Z3RfaGFuZGxlICYmIGRvbS0+cmluZ19yZWYgPT0gLTEpCj4gLQkJeGVuZ250dGFiX3VubWFwKHhn dF9oYW5kbGUsIGRvbS0+aW50ZXJmYWNlLCAxKTsKPiArCWlmICh4Z3RfaGFuZGxlICYmIGNvbi0+ cmluZ19yZWYgPT0gLTEpCj4gKwkJeGVuZ250dGFiX3VubWFwKHhndF9oYW5kbGUsIGNvbi0+aW50 ZXJmYWNlLCAxKTsKPiAgCWVsc2UKPiAtCQltdW5tYXAoZG9tLT5pbnRlcmZhY2UsIFhDX1BBR0Vf U0laRSk7Cj4gLQlkb20tPmludGVyZmFjZSA9IE5VTEw7Cj4gLQlkb20tPnJpbmdfcmVmID0gLTE7 Cj4gKwkJbXVubWFwKGNvbi0+aW50ZXJmYWNlLCBYQ19QQUdFX1NJWkUpOwo+ICsJY29uLT5pbnRl cmZhY2UgPSBOVUxMOwo+ICsJY29uLT5yaW5nX3JlZiA9IC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBkb21haW5fdW5tYXBfaW50ZXJmYWNlKHN0cnVjdCBkb21haW4gKmRvbSkKPiArewo+ICsJ Y29uc29sZV9pdGVyX3ZvaWRfYXJnMShkb20sIGNvbnNvbGVfdW5tYXBfaW50ZXJmYWNlKTsKPiAr fQo+ICsKPiArc3RhdGljIGludCBiaW5kX2V2ZW50X2NoYW5uZWwoc3RydWN0IGRvbWFpbiAqZG9t LAo+ICsJCQkJCQkJICBpbnQgbmV3X3Jwb3J0LAo+ICsJCQkJCQkJICBpbnQgKmxwb3J0LAo+ICsJ CQkJCQkJICBpbnQgKnJwb3J0KQo+ICt7Cj4gKwlpbnQgZXJyID0gMCwgcmM7Cj4gKwo+ICsJLyog R28gbm8gZnVydGhlciBpZiBwb3J0IGhhcyBub3QgY2hhbmdlZCBhbmQgd2UgYXJlIHN0aWxsIGJv dW5kLiAqLwo+ICsJaWYgKG5ld19ycG9ydCA9PSAqcnBvcnQpIHsKPiArCQl4Y19ldnRjaG5fc3Rh dHVzX3Qgc3RhdHVzID0gewo+ICsJCS5kb20gPSBET01JRF9TRUxGLAo+ICsJCS5wb3J0ID0gKmxw b3J0IH07Cj4gKwkJaWYgKCh4Y19ldnRjaG5fc3RhdHVzKHhjLCAmc3RhdHVzKSA9PSAwKSAmJgo+ ICsJCQkoc3RhdHVzLnN0YXR1cyA9PSBFVlRDSE5TVEFUX2ludGVyZG9tYWluKSkKPiArCQkJZ290 byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJKmxwb3J0ID0gLTE7Cj4gKwkqcnBvcnQgPSAtMTsKPiArCXJj ID0geGVuZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4oZG9tLT54Y2VfaGFuZGxlLAo+ICsJCQkJCQkJ CQlkb20tPmRvbWlkLCBuZXdfcnBvcnQpOwo+ICsKPiArCWlmIChyYyA9PSAtMSkgewo+ICsJCWVy ciA9IGVycm5vOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCSpscG9ydCA9IHJjOwo+ICsJ KnJwb3J0ID0gbmV3X3Jwb3J0Owo+ICtvdXQ6Cj4gKwlyZXR1cm4gZXJyOwo+ICB9Cj4gICAKPiAt c3RhdGljIGludCBkb21haW5fY3JlYXRlX3Jpbmcoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICtzdGF0 aWMgaW50IG1hcF9wdmNvbl9yaW5nX3JlZihzdHJ1Y3QgY29uc29sZSAqY29uLCBpbnQgcmluZ19y ZWYpCj4gIHsKPiAtCWludCBlcnIsIHJlbW90ZV9wb3J0LCByaW5nX3JlZiwgcmM7Cj4gKwlpbnQg ZXJyID0gMDsKPiArCXN0cnVjdCBkb21haW4gKmRvbSA9IGNvbi0+ZDsKPiArCj4gKwlpZiAoIWNv bi0+aW50ZXJmYWNlICYmIHhndF9oYW5kbGUpIHsKPiArCQkvKiBQcmVmZXIgdXNpbmcgZ3JhbnQg dGFibGUgKi8KPiArCQljb24tPmludGVyZmFjZSA9IHhlbmdudHRhYl9tYXBfZ3JhbnRfcmVmKHhn dF9oYW5kbGUsCj4gKwkJCQkJCQkJCQkJCSBkb20tPmRvbWlkLCAKPiArCQkJCQkJCQkJCQkJIEdO VFRBQl9SRVNFUlZFRF9DT05TT0xFLAo+ICsJCQkJCQkJCQkJCQkgUFJPVF9SRUFEfFBST1RfV1JJ VEUpOwo+ICsJCWNvbi0+cmluZ19yZWYgPSAtMTsKPiArCX0KPiArCj4gKwlpZiAoIWNvbi0+aW50 ZXJmYWNlKSB7Cj4gKwkJY29uLT5pbnRlcmZhY2UgPSB4Y19tYXBfZm9yZWlnbl9yYW5nZSh4YywK PiArCQkJCQkJCQkJCQkgIGRvbS0+ZG9taWQsCj4gKwkJCQkJCQkJCQkJICBYQ19QQUdFX1NJWkUs Cj4gKwkJCQkJCQkJCQkJICBQUk9UX1JFQUR8UFJPVF9XUklURSwKPiArCQkJCQkJCQkJCQkgICh1 bnNpZ25lZCBsb25nKXJpbmdfcmVmKTsKPiArCQlpZiAoY29uLT5pbnRlcmZhY2UgPT0gTlVMTCkg ewo+ICsJCQllcnIgPSBFSU5WQUw7Cj4gKwkJCWdvdG8gb3V0Owo+ICsJCX0KPiArCQljb24tPnJp bmdfcmVmID0gcmluZ19yZWY7Cj4gKwl9Cj4gKwo+ICtvdXQ6Cj4gKwlyZXR1cm4gZXJyOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGNvbnNvbGVfY3JlYXRlX3Jpbmcoc3RydWN0IGNvbnNvbGUgKmNv bikKPiArewo+ICsJaW50IGVyciwgcmVtb3RlX3BvcnQsIHJpbmdfcmVmOwo+ICAJY2hhciAqdHlw ZSwgcGF0aFtQQVRIX01BWF07Cj4gKwlzdHJ1Y3QgZG9tYWluICpkb20gPSBjb24tPmQ7Cj4gKwo+ ICsJZXJyID0geHNfZ2F0aGVyKHhzLCBjb24tPnhzcGF0aCwKPiArCQkJCQkicmluZy1yZWYiLCAi JXUiLCAmcmluZ19yZWYsCj4gKwkJCQkJInBvcnQiLCAiJWkiLCAmcmVtb3RlX3BvcnQsCj4gKwkJ CQkJTlVMTCk7Cj4gIAo+IC0JZXJyID0geHNfZ2F0aGVyKHhzLCBkb20tPmNvbnNwYXRoLAo+IC0J CQkicmluZy1yZWYiLCAiJXUiLCAmcmluZ19yZWYsCj4gLQkJCSJwb3J0IiwgIiVpIiwgJnJlbW90 ZV9wb3J0LAo+IC0JCQlOVUxMKTsKPiAgCWlmIChlcnIpCj4gKwl7Cj4gKwkJLyogSWYgdGhlIGNv bnNvbGUgaXMgbm90IG1hbmRhdG9yeSB0aGVuIGRvIG5vdCByZXR1cm4gYW4gZXJyb3IuICovCj4g KwkJaWYgKCFjb24tPm1hbmRhdG9yeSkKPiArCQkJZXJyID0gMDsKPiAgCQlnb3RvIG91dDsKPiAr CX0KPiAgCj4gLQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy90eXBlIiwgZG9tLT5j b25zcGF0aCk7Cj4gKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy90eXBlIiwgY29u LT54c3BhdGgpOwo+ICAJdHlwZSA9IHhzX3JlYWQoeHMsIFhCVF9OVUxMLCBwYXRoLCBOVUxMKTsK PiAgCWlmICh0eXBlICYmIHN0cmNtcCh0eXBlLCAieGVuY29uc29sZWQiKSAhPSAwKSB7Cj4gIAkJ ZnJlZSh0eXBlKTsKPiBAQCAtNTUwLDQxICs3NzksNDQgQEAgc3RhdGljIGludCBkb21haW5fY3Jl YXRlX3Jpbmcoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICAJZnJlZSh0eXBlKTsKPiAgCj4gIAkvKiBJ ZiB1c2luZyByaW5nX3JlZiBhbmQgaXQgaGFzIGNoYW5nZWQsIHJlbWFwICovCj4gLQlpZiAocmlu Z19yZWYgIT0gZG9tLT5yaW5nX3JlZiAmJiBkb20tPnJpbmdfcmVmICE9IC0xKQo+IC0JCWRvbWFp bl91bm1hcF9pbnRlcmZhY2UoZG9tKTsKPiArCWlmIChyaW5nX3JlZiAhPSBjb24tPnJpbmdfcmVm ICYmIGNvbi0+cmluZ19yZWYgIT0gLTEpCj4gKwkJY29uc29sZV91bm1hcF9pbnRlcmZhY2UoY29u KTsKPiAgCj4gLQlpZiAoIWRvbS0+aW50ZXJmYWNlICYmIHhndF9oYW5kbGUpIHsKPiAtCQkvKiBQ cmVmZXIgdXNpbmcgZ3JhbnQgdGFibGUgKi8KPiAtCQlkb20tPmludGVyZmFjZSA9IHhlbmdudHRh Yl9tYXBfZ3JhbnRfcmVmKHhndF9oYW5kbGUsCj4gLQkJCWRvbS0+ZG9taWQsIEdOVFRBQl9SRVNF UlZFRF9DT05TT0xFLAo+IC0JCQlQUk9UX1JFQUR8UFJPVF9XUklURSk7Cj4gLQkJZG9tLT5yaW5n X3JlZiA9IC0xOwo+IC0JfQo+IC0JaWYgKCFkb20tPmludGVyZmFjZSkgewo+IC0JCS8qIEZhbGwg YmFjayB0byB4Y19tYXBfZm9yZWlnbl9yYW5nZSAqLwo+IC0JCWRvbS0+aW50ZXJmYWNlID0geGNf bWFwX2ZvcmVpZ25fcmFuZ2UoCj4gLQkJCXhjLCBkb20tPmRvbWlkLCBYQ19QQUdFX1NJWkUsCj4g LQkJCVBST1RfUkVBRHxQUk9UX1dSSVRFLAo+IC0JCQkodW5zaWduZWQgbG9uZylyaW5nX3JlZik7 Cj4gLQkJaWYgKGRvbS0+aW50ZXJmYWNlID09IE5VTEwpIHsKPiAtCQkJZXJyID0gRUlOVkFMOwo+ IC0JCQlnb3RvIG91dDsKPiArCWVyciA9IGNvbi0+bWFwX3JpbmdfcmVmKGNvbiwgcmluZ19yZWYp Owo+ICsKPiArCWlmIChlcnIpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJZXJyID0gYmluZF9ldmVu dF9jaGFubmVsKGRvbSwgcmVtb3RlX3BvcnQsCj4gKwkJCQkJCQkgJmNvbi0+bG9jYWxfcG9ydCwK PiArCQkJCQkJCSAmY29uLT5yZW1vdGVfcG9ydCk7Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8gb3V0 MTsKPiArCj4gKwlpZiAoY29uLT5tYXN0ZXJfZmQgPT0gLTEpIHsKPiArCQlpZiAoY29uc29sZV9j cmVhdGVfdHR5KGNvbikpIHsKPiArCQkJZXJyID0gZXJybm87Cj4gKwkJCWNvbi0+bG9jYWxfcG9y dCA9IC0xOwo+ICsJCQljb24tPnJlbW90ZV9wb3J0ID0gLTE7Cj4gKwkJCWdvdG8gb3V0MTsKPiAg CQl9Cj4gLQkJZG9tLT5yaW5nX3JlZiA9IHJpbmdfcmVmOwo+ICAJfQo+ICAKPiAtCS8qIEdvIG5v IGZ1cnRoZXIgaWYgcG9ydCBoYXMgbm90IGNoYW5nZWQgYW5kIHdlIGFyZSBzdGlsbCBib3VuZC4g Ki8KPiAtCWlmIChyZW1vdGVfcG9ydCA9PSBkb20tPnJlbW90ZV9wb3J0KSB7Cj4gLQkJeGNfZXZ0 Y2huX3N0YXR1c190IHN0YXR1cyA9IHsKPiAtCQkJLmRvbSA9IERPTUlEX1NFTEYsCj4gLQkJCS5w b3J0ID0gZG9tLT5sb2NhbF9wb3J0IH07Cj4gLQkJaWYgKCh4Y19ldnRjaG5fc3RhdHVzKHhjLCAm c3RhdHVzKSA9PSAwKSAmJgo+IC0JCSAgICAoc3RhdHVzLnN0YXR1cyA9PSBFVlRDSE5TVEFUX2lu dGVyZG9tYWluKSkKPiAtCQkJZ290byBvdXQ7Cj4gLQl9Cj4gKwlpZiAobG9nX2d1ZXN0ICYmIChj b24tPmxvZ19mZCA9PSAtMSkpCj4gKwkJY29uLT5sb2dfZmQgPSBjcmVhdGVfY29uc29sZV9sb2co Y29uKTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICsKPiArIG91dDE6Cj4gKwljb25zb2xlX3VubWFw X2ludGVyZmFjZShjb24pOwo+ICsgb3V0Ogo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3Rh dGljIGludCBkb21haW5fY3JlYXRlX3Jpbmcoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICt7Cj4gKwlp bnQgZXJyOwo+ICAKPiAtCWRvbS0+bG9jYWxfcG9ydCA9IC0xOwo+IC0JZG9tLT5yZW1vdGVfcG9y dCA9IC0xOwo+ICAJaWYgKGRvbS0+eGNlX2hhbmRsZSAhPSBOVUxMKQo+ICAJCXhlbmV2dGNobl9j bG9zZShkb20tPnhjZV9oYW5kbGUpOwo+ICAKPiBAQCAtNTkyLDM3ICs4MjQsMTcgQEAgc3RhdGlj IGludCBkb21haW5fY3JlYXRlX3Jpbmcoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICAJICogd2FzdGVm dWwsIGJ1dCB0aGF0J3MgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQuLi4gKi8KPiAgCWRvbS0+ eGNlX2hhbmRsZSA9IHhlbmV2dGNobl9vcGVuKE5VTEwsIDApOwo+ICAJaWYgKGRvbS0+eGNlX2hh bmRsZSA9PSBOVUxMKSB7Cj4gLQkJZXJyID0gZXJybm87Cj4gLQkJZ290byBvdXQ7Cj4gKwkJcmV0 dXJuIGVycm5vOwo+ICAJfQo+IC0gCj4gLQlyYyA9IHhlbmV2dGNobl9iaW5kX2ludGVyZG9tYWlu KGRvbS0+eGNlX2hhbmRsZSwKPiAtCQlkb20tPmRvbWlkLCByZW1vdGVfcG9ydCk7Cj4gIAo+IC0J aWYgKHJjID09IC0xKSB7Cj4gLQkJZXJyID0gZXJybm87Cj4gKwllcnIgPSBjb25zb2xlX2l0ZXJf aW50X2FyZzEoZG9tLCBjb25zb2xlX2NyZWF0ZV9yaW5nKTsKPiArCj4gKwlpZiAoZXJyKQo+ICsJ ewo+ICAJCXhlbmV2dGNobl9jbG9zZShkb20tPnhjZV9oYW5kbGUpOwo+ICAJCWRvbS0+eGNlX2hh bmRsZSA9IE5VTEw7Cj4gLQkJZ290byBvdXQ7Cj4gLQl9Cj4gLQlkb20tPmxvY2FsX3BvcnQgPSBy YzsKPiAtCWRvbS0+cmVtb3RlX3BvcnQgPSByZW1vdGVfcG9ydDsKPiAtCj4gLQlpZiAoZG9tLT5t YXN0ZXJfZmQgPT0gLTEpIHsKPiAtCQlpZiAoIWRvbWFpbl9jcmVhdGVfdHR5KGRvbSkpIHsKPiAt CQkJZXJyID0gZXJybm87Cj4gLQkJCXhlbmV2dGNobl9jbG9zZShkb20tPnhjZV9oYW5kbGUpOwo+ IC0JCQlkb20tPnhjZV9oYW5kbGUgPSBOVUxMOwo+IC0JCQlkb20tPmxvY2FsX3BvcnQgPSAtMTsK PiAtCQkJZG9tLT5yZW1vdGVfcG9ydCA9IC0xOwo+IC0JCQlnb3RvIG91dDsKPiAtCQl9Cj4gIAl9 Cj4gIAo+IC0JaWYgKGxvZ19ndWVzdCAmJiAoZG9tLT5sb2dfZmQgPT0gLTEpKQo+IC0JCWRvbS0+ bG9nX2ZkID0gY3JlYXRlX2RvbWFpbl9sb2coZG9tKTsKPiAtCj4gLSBvdXQ6Cj4gIAlyZXR1cm4g ZXJyOwo+ICB9Cj4gIAo+IEBAIC02MzAsMjcgKzg0Miw2NiBAQCBzdGF0aWMgYm9vbCB3YXRjaF9k b21haW4oc3RydWN0IGRvbWFpbiAqZG9tLCBib29sIHdhdGNoKQo+ICB7Cj4gIAljaGFyIGRvbWlk X3N0clszICsgTUFYX1NUUkxFTihkb20tPmRvbWlkKV07Cj4gIAlib29sIHN1Y2Nlc3M7Cj4gKwlj aGFyICpwYXRoID0gZG9tLT5jb25zb2xlWzBdLnhzcGF0aDsKPiAgCj4gIAlzbnByaW50Zihkb21p ZF9zdHIsIHNpemVvZihkb21pZF9zdHIpLCAiZG9tJXUiLCBkb20tPmRvbWlkKTsKPiAgCWlmICh3 YXRjaCkgewo+IC0JCXN1Y2Nlc3MgPSB4c193YXRjaCh4cywgZG9tLT5jb25zcGF0aCwgZG9taWRf c3RyKTsKPiArCQlzdWNjZXNzID0geHNfd2F0Y2goeHMsIHBhdGgsIGRvbWlkX3N0cik7Cj4gIAkJ aWYgKHN1Y2Nlc3MpCj4gIAkJCWRvbWFpbl9jcmVhdGVfcmluZyhkb20pOwo+ICAJCWVsc2UKPiAt CQkJeHNfdW53YXRjaCh4cywgZG9tLT5jb25zcGF0aCwgZG9taWRfc3RyKTsKPiArCQkJeHNfdW53 YXRjaCh4cywgcGF0aCwgZG9taWRfc3RyKTsKPiAgCX0gZWxzZSB7Cj4gLQkJc3VjY2VzcyA9IHhz X3Vud2F0Y2goeHMsIGRvbS0+Y29uc3BhdGgsIGRvbWlkX3N0cik7Cj4gKwkJc3VjY2VzcyA9IHhz X3Vud2F0Y2goeHMsIHBhdGgsIGRvbWlkX3N0cik7Cj4gIAl9Cj4gIAo+ICAJcmV0dXJuIHN1Y2Nl c3M7Cj4gIH0KPiAgCj4gK3N0YXRpYyBpbnQgY29uc29sZV9pbml0KHN0cnVjdCBjb25zb2xlICpj b24sIHN0cnVjdCBkb21haW4gKmRvbSwgdm9pZCAqKmRhdGEpCj4gK3sKPiArCWNoYXIgKnM7Cj4g KwlpbnQgZXJyID0gLTE7Cj4gKwlzdHJ1Y3QgY29uc29sZV9kYXRhICoqY29uX2RhdGEgPSAoc3Ry dWN0IGNvbnNvbGVfZGF0YSAqKilkYXRhOwo+ICsKPiArCWNvbi0+bWFzdGVyX2ZkID0gLTE7Cj4g Kwljb24tPm1hc3Rlcl9wb2xsZmRfaWR4ID0gLTE7Cj4gKwljb24tPnNsYXZlX2ZkID0gLTE7Cj4g Kwljb24tPmxvZ19mZCA9IC0xOwo+ICsJY29uLT5yaW5nX3JlZiA9IC0xOwo+ICsJY29uLT5sb2Nh bF9wb3J0ID0gLTE7Cj4gKwljb24tPnJlbW90ZV9wb3J0ID0gLTE7Cj4gKwljb24tPmQgPSBkb207 Cj4gKwljb24tPnR0eW5hbWUgPSAoKmNvbl9kYXRhKS0+dHR5bmFtZTsKPiArCWNvbi0+eHNuYW1l ID0gKCpjb25fZGF0YSktPnhzbmFtZTsKPiArCWNvbi0+bWFwX3JpbmdfcmVmID0gKCpjb25fZGF0 YSktPm1hcGZ1bmM7Cj4gKwljb24tPm1hbmRhdG9yeSA9ICgqY29uX2RhdGEpLT5tYW5kYXRvcnk7 Cj4gKwljb24tPnhzcGF0aCA9IHhzX2dldF9kb21haW5fcGF0aCh4cywgZG9tLT5kb21pZCk7Cj4g KwlzID0gcmVhbGxvYyhjb24tPnhzcGF0aCwgc3RybGVuKGNvbi0+eHNwYXRoKSArCj4gKwkJCQlz dHJsZW4oY29uLT54c25hbWUpICsgMSk7Cj4gKwo+ICsJKCpjb25fZGF0YSkrKzsKPiArCj4gKwlp ZiAocykKPiArCXsKPiArCQljb24tPnhzcGF0aCA9IHM7Cj4gKwkJc3RyY2F0KGNvbi0+eHNwYXRo LCBjb24tPnhzbmFtZSk7Cj4gKwkJZXJyID0gMDsKPiArCX0KPiArCXJldHVybiBlcnI7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGNvbnNvbGVfZnJlZShzdHJ1Y3QgY29uc29sZSAqY29uKQo+ICt7 Cj4gKwlpZiAoY29uLT54c3BhdGgpCj4gKwkJZnJlZShjb24tPnhzcGF0aCk7Cj4gK30KPiAgCj4g IHN0YXRpYyBzdHJ1Y3QgZG9tYWluICpjcmVhdGVfZG9tYWluKGludCBkb21pZCkKPiAgewo+ICAJ c3RydWN0IGRvbWFpbiAqZG9tOwo+IC0JY2hhciAqczsKPiAgCXN0cnVjdCB0aW1lc3BlYyB0czsK PiArCXN0cnVjdCBjb25zb2xlX2RhdGEgKmNvbl9kYXRhID0gJmNvbnNvbGVfZGF0YVswXTsKPiAg Cj4gIAlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cykgPCAwKSB7Cj4gIAkJ ZG9sb2coTE9HX0VSUiwgIkNhbm5vdCBnZXQgdGltZSBvZiBkYXkgJXM6JXM6TCVkIiwKPiBAQCAt NjY3LDI2ICs5MTgsMTMgQEAgc3RhdGljIHN0cnVjdCBkb21haW4gKmNyZWF0ZV9kb21haW4oaW50 IGRvbWlkKQo+ICAKPiAgCWRvbS0+ZG9taWQgPSBkb21pZDsKPiAgCj4gLQlkb20tPmNvbnNwYXRo ID0geHNfZ2V0X2RvbWFpbl9wYXRoKHhzLCBkb20tPmRvbWlkKTsKPiAtCXMgPSByZWFsbG9jKGRv bS0+Y29uc3BhdGgsIHN0cmxlbihkb20tPmNvbnNwYXRoKSArCj4gLQkJICAgIHN0cmxlbigiL2Nv bnNvbGUiKSArIDEpOwo+IC0JaWYgKHMgPT0gTlVMTCkKPiArCWlmIChjb25zb2xlX2l0ZXJfaW50 X2FyZzMoZG9tLCBjb25zb2xlX2luaXQsICh2b2lkICoqKSZjb25fZGF0YSkpCj4gIAkJZ290byBv dXQ7Cj4gLQlkb20tPmNvbnNwYXRoID0gczsKPiAtCXN0cmNhdChkb20tPmNvbnNwYXRoLCAiL2Nv bnNvbGUiKTsKPiAgCj4gLQlkb20tPm1hc3Rlcl9mZCA9IC0xOwo+IC0JZG9tLT5tYXN0ZXJfcG9s bGZkX2lkeCA9IC0xOwo+IC0JZG9tLT5zbGF2ZV9mZCA9IC0xOwo+IC0JZG9tLT5sb2dfZmQgPSAt MTsKPiAgCWRvbS0+eGNlX3BvbGxmZF9pZHggPSAtMTsKPiAgCj4gIAlkb20tPm5leHRfcGVyaW9k ID0gKChsb25nIGxvbmcpdHMudHZfc2VjICogMTAwMCkgKyAodHMudHZfbnNlYyAvIDEwMDAwMDAp ICsgUkFURV9MSU1JVF9QRVJJT0Q7Cj4gIAo+IC0JZG9tLT5yaW5nX3JlZiA9IC0xOwo+IC0JZG9t LT5sb2NhbF9wb3J0ID0gLTE7Cj4gLQlkb20tPnJlbW90ZV9wb3J0ID0gLTE7Cj4gLQo+ICAJaWYg KCF3YXRjaF9kb21haW4oZG9tLCB0cnVlKSkKPiAgCQlnb3RvIG91dDsKPiAgCj4gQEAgLTY5Niw4 ICs5MzQsMTAgQEAgc3RhdGljIHN0cnVjdCBkb21haW4gKmNyZWF0ZV9kb21haW4oaW50IGRvbWlk KQo+ICAJZG9sb2coTE9HX0RFQlVHLCAiTmV3IGRvbWFpbiAlZCIsIGRvbWlkKTsKPiAgCj4gIAly ZXR1cm4gZG9tOwo+ICsKPiAgIG91dDoKPiAtCWZyZWUoZG9tLT5jb25zcGF0aCk7Cj4gKwljb25z b2xlX2l0ZXJfdm9pZF9hcmcxKGRvbSwgY29uc29sZV9mcmVlKTsKPiArCj4gIAlmcmVlKGRvbSk7 Cj4gIAlyZXR1cm4gTlVMTDsKPiAgfQo+IEBAIC03MjcsMjAgKzk2NywyNCBAQCBzdGF0aWMgdm9p ZCByZW1vdmVfZG9tYWluKHN0cnVjdCBkb21haW4gKmRvbSkKPiAgCX0KPiAgfQo+ICAKPiAtc3Rh dGljIHZvaWQgY2xlYW51cF9kb21haW4oc3RydWN0IGRvbWFpbiAqZCkKPiAtewo+IC0JZG9tYWlu X2Nsb3NlX3R0eShkKTsKPiAgCj4gLQlpZiAoZC0+bG9nX2ZkICE9IC0xKSB7Cj4gLQkJY2xvc2Uo ZC0+bG9nX2ZkKTsKPiAtCQlkLT5sb2dfZmQgPSAtMTsKPiArc3RhdGljIHZvaWQgY29uc29sZV9j bGVhbnVwKHN0cnVjdCBjb25zb2xlICpjb24pCj4gK3sKPiArCWlmIChjb24tPmxvZ19mZCAhPSAt MSkgewo+ICsJCWNsb3NlKGNvbi0+bG9nX2ZkKTsKPiArCQljb24tPmxvZ19mZCA9IC0xOwo+ICAJ fQo+ICsJZnJlZShjb24tPmJ1ZmZlci5kYXRhKTsKPiArCWNvbi0+YnVmZmVyLmRhdGEgPSBOVUxM Owo+ICsJZnJlZShjb24tPnhzcGF0aCk7Cj4gKwljb24tPnhzcGF0aCA9IE5VTEw7Cj4gK30KPiAg Cj4gLQlmcmVlKGQtPmJ1ZmZlci5kYXRhKTsKPiAtCWQtPmJ1ZmZlci5kYXRhID0gTlVMTDsKPiAr c3RhdGljIHZvaWQgY2xlYW51cF9kb21haW4oc3RydWN0IGRvbWFpbiAqZCkKPiArewo+ICsJZG9t YWluX2Nsb3NlX3R0eShkKTsKPiAgCj4gLQlmcmVlKGQtPmNvbnNwYXRoKTsKPiAtCWQtPmNvbnNw YXRoID0gTlVMTDsKPiArCWNvbnNvbGVfaXRlcl92b2lkX2FyZzEoZCwgY29uc29sZV9jbGVhbnVw KTsKPiAgCj4gIAlyZW1vdmVfZG9tYWluKGQpOwo+ICB9Cj4gQEAgLTc4MCw5ICsxMDI0LDkgQEAg c3RhdGljIHZvaWQgZW51bV9kb21haW5zKHZvaWQpCj4gIAl9Cj4gIH0KPiAgCj4gLXN0YXRpYyBp bnQgcmluZ19mcmVlX2J5dGVzKHN0cnVjdCBkb21haW4gKmRvbSkKPiArc3RhdGljIGludCByaW5n X2ZyZWVfYnl0ZXMoc3RydWN0IGNvbnNvbGUgKmNvbikKPiAgewo+IC0Jc3RydWN0IHhlbmNvbnNf aW50ZXJmYWNlICppbnRmID0gZG9tLT5pbnRlcmZhY2U7Cj4gKwlzdHJ1Y3QgeGVuY29uc19pbnRl cmZhY2UgKmludGYgPSBjb24tPmludGVyZmFjZTsKPiAgCVhFTkNPTlNfUklOR19JRFggY29ucywg cHJvZCwgc3BhY2U7Cj4gIAo+ICAJY29ucyA9IGludGYtPmluX2NvbnM7Cj4gQEAgLTgwNywyNSAr MTA1MSwyNyBAQCBzdGF0aWMgdm9pZCBkb21haW5faGFuZGxlX2Jyb2tlbl90dHkoc3RydWN0IGRv bWFpbiAqZG9tLCBpbnQgcmVjcmVhdGUpCj4gIAl9Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGhh bmRsZV90dHlfcmVhZChzdHJ1Y3QgZG9tYWluICpkb20pCj4gK3N0YXRpYyB2b2lkIGhhbmRsZV90 dHlfcmVhZChzdHJ1Y3QgY29uc29sZSAqY29uKQo+ICB7Cj4gIAlzc2l6ZV90IGxlbiA9IDA7Cj4g IAljaGFyIG1zZ1s4MF07Cj4gIAlpbnQgaTsKPiAtCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAq aW50ZiA9IGRvbS0+aW50ZXJmYWNlOwo+ICAJWEVOQ09OU19SSU5HX0lEWCBwcm9kOwo+ICsJc3Ry dWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gY29uLT5pbnRlcmZhY2U7Cj4gKwl4ZW5ldnRj aG5fcG9ydF9vcl9lcnJvcl90IHBvcnQgPSBjb24tPmxvY2FsX3BvcnQ7Cj4gKwlzdHJ1Y3QgZG9t YWluICpkb20gPSBjb24tPmQ7Cj4gIAo+ICAJaWYgKGRvbS0+aXNfZGVhZCkKPiAgCQlyZXR1cm47 Cj4gIAo+IC0JbGVuID0gcmluZ19mcmVlX2J5dGVzKGRvbSk7Cj4gKwlsZW4gPSByaW5nX2ZyZWVf Ynl0ZXMoY29uKTsKPiAgCWlmIChsZW4gPT0gMCkKPiAgCQlyZXR1cm47Cj4gIAo+ICAJaWYgKGxl biA+IHNpemVvZihtc2cpKQo+ICAJCWxlbiA9IHNpemVvZihtc2cpOwo+ICAKPiAtCWxlbiA9IHJl YWQoZG9tLT5tYXN0ZXJfZmQsIG1zZywgbGVuKTsKPiArCWxlbiA9IHJlYWQoY29uLT5tYXN0ZXJf ZmQsIG1zZywgbGVuKTsKPiAgCS8qCj4gIAkgKiBOb3RlOiBvbiBTb2xhcmlzLCBsZW4gPT0gMCBt ZWFucyB0aGUgc2xhdmUgY2xvc2VkLCBhbmQgdGhpcwo+ICAJICogaXMgbm8gcHJvYmxlbSwgYnV0 IExpbnV4IGNhbid0IGhhbmRsZSB0aGlzIHVzZWZ1bGx5LCBzbyB3ZQo+IEBAIC04NDEsMzEgKzEw ODcsMzkgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3R0eV9yZWFkKHN0cnVjdCBkb21haW4gKmRvbSkK PiAgCQl9Cj4gIAkJeGVuX3dtYigpOwo+ICAJCWludGYtPmluX3Byb2QgPSBwcm9kOwo+IC0JCXhl bmV2dGNobl9ub3RpZnkoZG9tLT54Y2VfaGFuZGxlLCBkb20tPmxvY2FsX3BvcnQpOwo+ICsJCXhl bmV2dGNobl9ub3RpZnkoZG9tLT54Y2VfaGFuZGxlLCBwb3J0KTsKPiAgCX0gZWxzZSB7Cj4gIAkJ ZG9tYWluX2Nsb3NlX3R0eShkb20pOwo+ICAJCXNodXRkb3duX2RvbWFpbihkb20pOwo+ICAJfQo+ ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBoYW5kbGVfdHR5X3dyaXRlKHN0cnVjdCBkb21haW4gKmRv bSkKPiArc3RhdGljIHZvaWQgaGFuZGxlX3R0eV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uKQo+ ICB7Cj4gIAlzc2l6ZV90IGxlbjsKPiArCXN0cnVjdCBkb21haW4gKmRvbSA9IGNvbi0+ZDsKPiAg Cj4gIAlpZiAoZG9tLT5pc19kZWFkKQo+ICAJCXJldHVybjsKPiAgCj4gLQlsZW4gPSB3cml0ZShk b20tPm1hc3Rlcl9mZCwgZG9tLT5idWZmZXIuZGF0YSArIGRvbS0+YnVmZmVyLmNvbnN1bWVkLAo+ IC0JCSAgICBkb20tPmJ1ZmZlci5zaXplIC0gZG9tLT5idWZmZXIuY29uc3VtZWQpOwo+ICsJbGVu ID0gd3JpdGUoY29uLT5tYXN0ZXJfZmQsCj4gKwkJCQljb24tPmJ1ZmZlci5kYXRhICsgY29uLT5i dWZmZXIuY29uc3VtZWQsCj4gKwkJCQljb24tPmJ1ZmZlci5zaXplIC0gY29uLT5idWZmZXIuY29u c3VtZWQpOwo+ICAgCWlmIChsZW4gPCAxKSB7Cj4gIAkJZG9sb2coTE9HX0RFQlVHLCAiV3JpdGUg ZmFpbGVkIG9uIGRvbWFpbiAlZDogJXpkLCAlZFxuIiwKPiAgCQkgICAgICBkb20tPmRvbWlkLCBs ZW4sIGVycm5vKTsKPiAgCQlkb21haW5faGFuZGxlX2Jyb2tlbl90dHkoZG9tLCBkb21haW5faXNf dmFsaWQoZG9tLT5kb21pZCkpOwo+ICAJfSBlbHNlIHsKPiAtCQlidWZmZXJfYWR2YW5jZSgmZG9t LT5idWZmZXIsIGxlbik7Cj4gKwkJYnVmZmVyX2FkdmFuY2UoJmNvbi0+YnVmZmVyLCBsZW4pOwo+ ICAJfQo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBjb25zb2xlX2V2ZW50X3VubWFzayhzdHJ1Y3Qg Y29uc29sZSAqY29uKQo+ICt7Cj4gKwlpZiAoY29uLT5sb2NhbF9wb3J0ICE9IC0xKQo+ICsJCSh2 b2lkKXhlbmV2dGNobl91bm1hc2soY29uLT5kLT54Y2VfaGFuZGxlLCBjb24tPmxvY2FsX3BvcnQp Owo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZCBoYW5kbGVfcmluZ19yZWFkKHN0cnVjdCBkb21haW4g KmRvbSkKPiAgewo+ICAJeGVuZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCBwb3J0Owo+IEBAIC04Nzgs MTAgKzExMzIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JpbmdfcmVhZChzdHJ1Y3QgZG9tYWlu ICpkb20pCj4gIAo+ICAJZG9tLT5ldmVudF9jb3VudCsrOwo+ICAKPiAtCWJ1ZmZlcl9hcHBlbmQo ZG9tKTsKPiArCWNvbnNvbGVfaXRlcl92b2lkX2FyZzIoZG9tLCBidWZmZXJfYXBwZW5kLCBwb3J0 KTsKPiAgCj4gIAlpZiAoZG9tLT5ldmVudF9jb3VudCA8IFJBVEVfTElNSVRfQUxMT1dBTkNFKQo+ IC0JCSh2b2lkKXhlbmV2dGNobl91bm1hc2soZG9tLT54Y2VfaGFuZGxlLCBwb3J0KTsKPiArCQlj b25zb2xlX2l0ZXJfdm9pZF9hcmcxKGRvbSwgY29uc29sZV9ldmVudF91bm1hc2spOwo+ICB9Cj4g IAo+ICBzdGF0aWMgdm9pZCBoYW5kbGVfeHModm9pZCkKPiBAQCAtOTQzLDE0ICsxMTk3LDIyIEBA IHN0YXRpYyB2b2lkIGhhbmRsZV9odl9sb2dzKHhlbmV2dGNobl9oYW5kbGUgKnhjZV9oYW5kbGUs IGJvb2wgZm9yY2UpCj4gIAkJKHZvaWQpeGVuZXZ0Y2huX3VubWFzayh4Y2VfaGFuZGxlLCBwb3J0 KTsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgY29uc29sZV9vcGVuX2xvZyhzdHJ1Y3QgY29uc29s ZSAqY29uKQo+ICt7Cj4gKwlpZiAoY29uc29sZV9lbmFibGVkKGNvbikpCj4gKwl7Cj4gKwkJaWYg KGNvbi0+bG9nX2ZkICE9IC0xKQo+ICsJCQljbG9zZShjb24tPmxvZ19mZCk7Cj4gKwkJY29uLT5s b2dfZmQgPSBjcmVhdGVfY29uc29sZV9sb2coY29uKTsKPiArCX0KPiArfQo+ICsKPiAgc3RhdGlj IHZvaWQgaGFuZGxlX2xvZ19yZWxvYWQodm9pZCkKPiAgewo+ICAJaWYgKGxvZ19ndWVzdCkgewo+ ICAJCXN0cnVjdCBkb21haW4gKmQ7Cj4gIAkJZm9yIChkID0gZG9tX2hlYWQ7IGQ7IGQgPSBkLT5u ZXh0KSB7Cj4gLQkJCWlmIChkLT5sb2dfZmQgIT0gLTEpCj4gLQkJCQljbG9zZShkLT5sb2dfZmQp Owo+IC0JCQlkLT5sb2dfZmQgPSBjcmVhdGVfZG9tYWluX2xvZyhkKTsKPiArCQkJY29uc29sZV9p dGVyX3ZvaWRfYXJnMShkLCBjb25zb2xlX29wZW5fbG9nKTsKPiAgCQl9Cj4gIAl9Cj4gIAo+IEBA IC0xMDAyLDYgKzEyNjQsNDAgQEAgc3RhdGljIHZvaWQgcmVzZXRfZmRzKHZvaWQpCj4gIAkJbWVt c2V0KGZkcywgMCwgc2l6ZW9mKHN0cnVjdCBwb2xsZmQpICogY3VycmVudF9hcnJheV9zaXplKTsK PiAgfQo+ICAKPiArc3RhdGljIHZvaWQgYWRkX2NvbnNvbGVfZmQoc3RydWN0IGNvbnNvbGUgKmNv bikKPiArewo+ICsJaWYgKGNvbi0+bWFzdGVyX2ZkICE9IC0xKSB7Cj4gKwkJc2hvcnQgZXZlbnRz ID0gMDsKPiArCQlpZiAoIWNvbi0+ZC0+aXNfZGVhZCAmJiByaW5nX2ZyZWVfYnl0ZXMoY29uKSkK PiArCQkJZXZlbnRzIHw9IFBPTExJTjsKPiArCj4gKwkJaWYgKCFidWZmZXJfZW1wdHkoJmNvbi0+ YnVmZmVyKSkKPiArCQkJZXZlbnRzIHw9IFBPTExPVVQ7Cj4gKwo+ICsJCWlmIChldmVudHMpCj4g KwkJCWNvbi0+bWFzdGVyX3BvbGxmZF9pZHggPQo+ICsJCQkJc2V0X2Zkcyhjb24tPm1hc3Rlcl9m ZCwgZXZlbnRzfFBPTExQUkkpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwcm9jZXNz X2NvbnNvbGUoc3RydWN0IGNvbnNvbGUgKmNvbikKPiArewo+ICsJaWYgKGNvbi0+bWFzdGVyX2Zk ICE9IC0xICYmIGNvbi0+bWFzdGVyX3BvbGxmZF9pZHggIT0gLTEpIHsKPiArCQlpZiAoZmRzW2Nv bi0+bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgo+ICsJCQl+KFBPTExJTnxQT0xMT1VUfFBP TExQUkkpKQo+ICsJCQlkb21haW5faGFuZGxlX2Jyb2tlbl90dHkoY29uLT5kLCBkb21haW5faXNf dmFsaWQoY29uLT5kLT5kb21pZCkpOwo+ICsJCWVsc2Ugewo+ICsJCQlpZiAoZmRzW2Nvbi0+bWFz dGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgo+ICsJCQkJUE9MTElOKQo+ICsJCQkJaGFuZGxlX3R0 eV9yZWFkKGNvbik7Cj4gKwkJCWlmIChmZHNbY29uLT5tYXN0ZXJfcG9sbGZkX2lkeF0ucmV2ZW50 cyAmCj4gKwkJCQlQT0xMT1VUKQo+ICsJCQkJaGFuZGxlX3R0eV93cml0ZShjb24pOwo+ICsJCX0K PiArCX0KPiArCWNvbi0+bWFzdGVyX3BvbGxmZF9pZHggPSAtMTsKPiArfQo+ICsKPiAgdm9pZCBo YW5kbGVfaW8odm9pZCkKPiAgewo+ICAJaW50IHJldDsKPiBAQCAtMTA2OCw3ICsxMzY0LDcgQEAg dm9pZCBoYW5kbGVfaW8odm9pZCkKPiAgCQkJaWYgKChub3crNSkgPiBkLT5uZXh0X3BlcmlvZCkg ewo+ICAJCQkJZC0+bmV4dF9wZXJpb2QgPSBub3cgKyBSQVRFX0xJTUlUX1BFUklPRDsKPiAgCQkJ CWlmIChkLT5ldmVudF9jb3VudCA+PSBSQVRFX0xJTUlUX0FMTE9XQU5DRSkgewo+IC0JCQkJCSh2 b2lkKXhlbmV2dGNobl91bm1hc2soZC0+eGNlX2hhbmRsZSwgZC0+bG9jYWxfcG9ydCk7Cj4gKwkJ CQkJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShkLCBjb25zb2xlX2V2ZW50X3VubWFzayk7Cj4gIAkJ CQl9Cj4gIAkJCQlkLT5ldmVudF9jb3VudCA9IDA7Cj4gIAkJCX0KPiBAQCAtMTA4MSwyOCArMTM3 NywxNSBAQCB2b2lkIGhhbmRsZV9pbyh2b2lkKQo+ICAJCQkJICAgIGQtPm5leHRfcGVyaW9kIDwg bmV4dF90aW1lb3V0KQo+ICAJCQkJCW5leHRfdGltZW91dCA9IGQtPm5leHRfcGVyaW9kOwo+ICAJ CQl9IGVsc2UgaWYgKGQtPnhjZV9oYW5kbGUgIT0gTlVMTCkgewo+IC0JCQkJaWYgKGRpc2NhcmRf b3ZlcmZsb3dlZF9kYXRhIHx8Cj4gLQkJCQkgICAgIWQtPmJ1ZmZlci5tYXhfY2FwYWNpdHkgfHwK PiAtCQkJCSAgICBkLT5idWZmZXIuc2l6ZSA8IGQtPmJ1ZmZlci5tYXhfY2FwYWNpdHkpIHsKPiAr CQkJCWlmIChjb25zb2xlX2l0ZXJfYm9vbF9hcmcxKGQsIGJ1ZmZlcl9hdmFpbGFibGUpKQo+ICsJ CQkJewo+ICAJCQkJCWludCBldnRjaG5fZmQgPSB4ZW5ldnRjaG5fZmQoZC0+eGNlX2hhbmRsZSk7 Cj4gIAkJCQkJZC0+eGNlX3BvbGxmZF9pZHggPSBzZXRfZmRzKGV2dGNobl9mZCwKPiAtCQkJCQkJ CQkgICAgUE9MTElOfFBPTExQUkkpOwo+ICsJCQkJCQkJCQkJCQlQT0xMSU58UE9MTFBSSSk7Cgpz cHVyaW91cyBjaGFuZ2UKCgo+ICAJCQkJfQo+ICAJCQl9Cj4gIAo+IC0JCQlpZiAoZC0+bWFzdGVy X2ZkICE9IC0xKSB7Cj4gLQkJCQlzaG9ydCBldmVudHMgPSAwOwo+IC0JCQkJaWYgKCFkLT5pc19k ZWFkICYmIHJpbmdfZnJlZV9ieXRlcyhkKSkKPiAtCQkJCQlldmVudHMgfD0gUE9MTElOOwo+IC0K PiAtCQkJCWlmICghYnVmZmVyX2VtcHR5KCZkLT5idWZmZXIpKQo+IC0JCQkJCWV2ZW50cyB8PSBQ T0xMT1VUOwo+IC0KPiAtCQkJCWlmIChldmVudHMpCj4gLQkJCQkJZC0+bWFzdGVyX3BvbGxmZF9p ZHggPQo+IC0JCQkJCQlzZXRfZmRzKGQtPm1hc3Rlcl9mZCwKPiAtCQkJCQkJCWV2ZW50c3xQT0xM UFJJKTsKPiAtCQkJfQo+ICsJCQljb25zb2xlX2l0ZXJfdm9pZF9hcmcxKGQsIGFkZF9jb25zb2xl X2ZkKTsKPiAgCQl9Cj4gIAo+ICAJCS8qIElmIGFueSBkb21haW4gaGFzIGJlZW4gcmF0ZSBsaW1p dGVkLCB3ZSBuZWVkIHRvIHdvcmsKPiBAQCAtMTE3MCwyMiArMTQ1Myw5IEBAIHZvaWQgaGFuZGxl X2lvKHZvaWQpCj4gIAkJCQkgICAgaGFuZGxlX3JpbmdfcmVhZChkKTsKPiAgCQkJfQo+ICAKPiAt CQkJaWYgKGQtPm1hc3Rlcl9mZCAhPSAtMSAmJiBkLT5tYXN0ZXJfcG9sbGZkX2lkeCAhPSAtMSkg ewo+IC0JCQkJaWYgKGZkc1tkLT5tYXN0ZXJfcG9sbGZkX2lkeF0ucmV2ZW50cyAmCj4gLQkJCQkg ICAgfihQT0xMSU58UE9MTE9VVHxQT0xMUFJJKSkKPiAtCQkJCQlkb21haW5faGFuZGxlX2Jyb2tl bl90dHkoZCwKPiAtCQkJCQkJICAgZG9tYWluX2lzX3ZhbGlkKGQtPmRvbWlkKSk7Cj4gLQkJCQll bHNlIHsKPiAtCQkJCQlpZiAoZmRzW2QtPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKPiAt CQkJCQkgICAgUE9MTElOKQo+IC0JCQkJCQloYW5kbGVfdHR5X3JlYWQoZCk7Cj4gLQkJCQkJaWYg KGZkc1tkLT5tYXN0ZXJfcG9sbGZkX2lkeF0ucmV2ZW50cyAmCj4gLQkJCQkJICAgIFBPTExPVVQp Cj4gLQkJCQkJCWhhbmRsZV90dHlfd3JpdGUoZCk7Cj4gLQkJCQl9Cj4gLQkJCX0KPiArCQkJY29u c29sZV9pdGVyX3ZvaWRfYXJnMShkLCBwcm9jZXNzX2NvbnNvbGUpOwo+ICAKPiAtCQkJZC0+eGNl X3BvbGxmZF9pZHggPSBkLT5tYXN0ZXJfcG9sbGZkX2lkeCA9IC0xOwo+ICsJCQlkLT54Y2VfcG9s bGZkX2lkeCA9IC0xOwo+ICAKPiAgCQkJaWYgKGQtPmxhc3Rfc2VlbiAhPSBlbnVtX3Bhc3MpCj4g IAkJCQlzaHV0ZG93bl9kb21haW4oZCk7CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54 ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK