From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 28/32] drm/i915: Load balancing across a virtual engine Date: Wed, 17 Apr 2019 12:26:04 +0100 Message-ID: <07522a98-0666-dc95-4e0f-498413315441@linux.intel.com> References: <20190417075657.19456-1-chris@chris-wilson.co.uk> <20190417075657.19456-28-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 mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9B60B89BB0 for ; Wed, 17 Apr 2019 11:26:07 +0000 (UTC) In-Reply-To: <20190417075657.19456-28-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 Ck9uIDE3LzA0LzIwMTkgMDg6NTYsIENocmlzIFdpbHNvbiB3cm90ZToKPiBIYXZpbmcgYWxsb3dl ZCB0aGUgdXNlciB0byBkZWZpbmUgYSBzZXQgb2YgZW5naW5lcyB0aGF0IHRoZXkgd2lsbCB3YW50 Cj4gdG8gb25seSB1c2UsIHdlIGdvIG9uZSBzdGVwIGZ1cnRoZXIgYW5kIGFsbG93IHRoZW0gdG8g YmluZCB0aG9zZSBlbmdpbmVzCj4gaW50byBhIHNpbmdsZSB2aXJ0dWFsIGluc3RhbmNlLiBTdWJt aXR0aW5nIGEgYmF0Y2ggdG8gdGhlIHZpcnR1YWwgZW5naW5lCj4gd2lsbCB0aGVuIGZvcndhcmQg aXQgdG8gYW55IG9uZSBvZiB0aGUgc2V0IGluIGEgbWFubmVyIGFzIGJlc3QgdG8KPiBkaXN0cmli dXRlIGxvYWQuICBUaGUgdmlydHVhbCBlbmdpbmUgaGFzIGEgc2luZ2xlIHRpbWVsaW5lIGFjcm9z cyBhbGwKPiBlbmdpbmVzIChpdCBvcGVyYXRlcyBhcyBhIHNpbmdsZSBxdWV1ZSksIHNvIGl0IGlz IG5vdCBhYmxlIHRvIGNvbmN1cnJlbnRseQo+IHJ1biBiYXRjaGVzIGFjcm9zcyBtdWx0aXBsZSBl bmdpbmVzIGJ5IGl0c2VsZjsgdGhhdCBpcyBsZWZ0IHVwIHRvIHRoZSB1c2VyCj4gdG8gc3VibWl0 IG11bHRpcGxlIGNvbmN1cnJlbnQgYmF0Y2hlcyB0byBtdWx0aXBsZSBxdWV1ZXMuIE11bHRpcGxl IHVzZXJzCj4gd2lsbCBiZSBsb2FkIGJhbGFuY2VkIGFjcm9zcyB0aGUgc3lzdGVtLgo+IAo+IFRo ZSBtZWNoYW5pc20gdXNlZCBmb3IgbG9hZCBiYWxhbmNpbmcgaW4gdGhpcyBwYXRjaCBpcyBhIGxh dGUgZ3JlZWR5Cj4gYmFsYW5jZXIuIFdoZW4gYSByZXF1ZXN0IGlzIHJlYWR5IGZvciBleGVjdXRp b24sIGl0IGlzIGFkZGVkIHRvIGVhY2gKPiBlbmdpbmUncyBxdWV1ZSwgYW5kIHdoZW4gYW4gZW5n aW5lIGlzIHJlYWR5IGZvciBpdHMgbmV4dCByZXF1ZXN0IGl0Cj4gY2xhaW1zIGl0IGZyb20gdGhl IHZpcnR1YWwgZW5naW5lLiBUaGUgZmlyc3QgZW5naW5lIHRvIGRvIHNvLCB3aW5zLCBpLmUuCj4g dGhlIHJlcXVlc3QgaXMgZXhlY3V0ZWQgYXQgdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IChpZGxl IG1vbWVudCkgaW4gdGhlCj4gc3lzdGVtLgo+IAo+IEFzIG5vdCBhbGwgSFcgaXMgY3JlYXRlZCBl cXVhbCwgdGhlIHVzZXIgaXMgc3RpbGwgYWJsZSB0byBza2lwIHRoZQo+IHZpcnR1YWwgZW5naW5l IGFuZCBleGVjdXRlIHRoZSBiYXRjaCBvbiBhIHNwZWNpZmljIGVuZ2luZSwgYWxsIHdpdGhpbiB0 aGUKPiBzYW1lIHF1ZXVlLiBJdCB3aWxsIHRoZW4gYmUgZXhlY3V0ZWQgaW4gb3JkZXIgb24gdGhl IGNvcnJlY3QgZW5naW5lLAo+IHdpdGggZXhlY3V0aW9uIG9uIG90aGVyIHZpcnR1YWwgZW5naW5l cyBiZWluZyBtb3ZlZCBhd2F5IGR1ZSB0byB0aGUgbG9hZAo+IGRldGVjdGlvbi4KPiAKPiBBIGNv dXBsZSBvZiBhcmVhcyBmb3IgcG90ZW50aWFsIGltcHJvdmVtZW50IGxlZnQhCj4gCj4gLSBUaGUg dmlydHVhbCBlbmdpbmUgYWx3YXlzIHRha2UgcHJpb3JpdHkgb3ZlciBlcXVhbC1wcmlvcml0eSB0 YXNrcy4KPiBNb3N0bHkgYnJva2VuIHVwIGJ5IGFwcGx5aW5nIEZRX0NPREVMIHJ1bGVzIGZvciBw cmlvcml0aXNpbmcgbmV3IGNsaWVudHMsCj4gYW5kIGhvcGVmdWxseSB0aGUgdmlydHVhbCBhbmQg cmVhbCBlbmdpbmVzIGFyZSBub3QgdGhlbiBjb25nZXN0ZWQgKGkuZS4KPiBhbGwgd29yayBpcyB2 aWEgdmlydHVhbCBlbmdpbmVzLCBvciBhbGwgd29yayBpcyB0byB0aGUgcmVhbCBlbmdpbmUpLgo+ IAo+IC0gV2UgcmVxdWlyZSB0aGUgYnJlYWRjcnVtYiBpcnEgYXJvdW5kIGV2ZXJ5IHZpcnR1YWwg ZW5naW5lIHJlcXVlc3QuIEZvcgo+IG5vcm1hbCBlbmdpbmVzLCB3ZSBlbGltaW5hdGUgdGhlIG5l ZWQgZm9yIHRoZSBzbG93IHJvdW5kIHRyaXAgdmlhCj4gaW50ZXJydXB0IGJ5IHVzaW5nIHRoZSBz dWJtaXQgZmVuY2UgYW5kIHF1ZXVlaW5nIGluIG9yZGVyLiBGb3IgdmlydHVhbAo+IGVuZ2luZXMs IHdlIGhhdmUgdG8gYWxsb3cgYW55IGpvYiB0byB0cmFuc2ZlciB0byBhIG5ldyByaW5nLCBhbmQg Y2Fubm90Cj4gY29hbGVzY2UgdGhlIHN1Ym1pc3Npb25zLCBzbyByZXF1aXJlIHRoZSBjb21wbGV0 aW9uIGZlbmNlIGluc3RlYWQsCj4gZm9yY2luZyB0aGUgcGVyc2lzdGVudCB1c2Ugb2YgaW50ZXJy dXB0cy4KPiAKPiAtIFdlIG9ubHkgZHJpcCBmZWVkIHNpbmdsZSByZXF1ZXN0cyB0aHJvdWdoIGVh Y2ggdmlydHVhbCBlbmdpbmUgYW5kIG9udG8KPiB0aGUgcGh5c2ljYWwgZW5naW5lcywgZXZlbiBp ZiB0aGVyZSB3YXMgZW5vdWdoIHdvcmsgdG8gZmlsbCBhbGwgRUxTUCwKPiBsZWF2aW5nIHNtYWxs IHN0YWxscyB3aXRoIGFuIGlkbGUgQ1MgZXZlbnQgYXQgdGhlIGVuZCBvZiBldmVyeSByZXF1ZXN0 Lgo+IENvdWxkIHdlIGJlIGdyZWVkeSBhbmQgZmlsbCBib3RoIHNsb3RzPyBCZWluZyBsYXp5IGlz IHZpcnR1b3VzIGZvciBsb2FkCj4gZGlzdHJpYnV0aW9uIG9uIGxlc3MtdGhhbi1mdWxsIHdvcmts b2FkcyB0aG91Z2guCj4gCj4gT3RoZXIgYXJlYXMgb2YgaW1wcm92ZW1lbnQgYXJlIG1vcmUgZ2Vu ZXJhbCwgc3VjaCBhcyByZWR1Y2luZyBsb2NrCj4gY29udGVudGlvbiwgcmVkdWNpbmcgZGlzcGF0 Y2ggb3ZlcmhlYWQsIGxvb2tpbmcgYXQgZGlyZWN0IHN1Ym1pc3Npb24KPiByYXRoZXIgdGhhbiBi b3VuY2luZyBhcm91bmQgdGFza2xldHMgZXRjLgo+IAo+IHNzZXU6IExpZnQgdGhlIHJlc3RyaWN0 aW9uIHRvIGFsbG93IHNzZXUgdG8gYmUgcmVjb25maWd1cmVkIG9uIHZpcnR1YWwKPiBlbmdpbmVz IGNvbXBvc2VkIG9mIFJFTkRFUl9DTEFTUyAocmNzKS4KPiAKPiB2MjogbWFjcm9pemUgY2hlY2tf dXNlcl9tYnooKQo+IHYzOiBDYW5jZWwgdmlydHVhbCBlbmdpbmVzIG9uIHdlZGdpbmcKPiB2NDog Q29tbWVuY2UgY29tbWVudGluZwo+IHY1OiBSZXBsYWNlIDY0YiBzaWJsaW5nX21hc2sgd2l0aCBh IGxpc3Qgb2YgY2xhc3M6aW5zdGFuY2UKPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24g PGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51 cnN1bGluQGludGVsLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2JyZWFkY3J1bWJzLmMgIHwgICA2ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9lbmdpbmVfdHlwZXMuaCB8ICAgOCArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9scmMuYyAgICAgICAgICB8IDYxMSArKysrKysrKysrKysrKysrKystCj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuaCAgICAgICAgICB8ICAgOSArCj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYyAgICAgICB8IDE4MCArKysrKysKPiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmggICAgICAgICAgICAgIHwgICA1ICsKPiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyAgICAgIHwgMTE4ICsrKy0KPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMgICAgICAgIHwgIDE4ICstCj4gICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVsaW5lX3R5cGVzLmggICB8ICAgMSArCj4gICBp bmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAgICAgICAgICAgICAgICB8ICAzOSArKwo+ICAg MTAgZmlsZXMgY2hhbmdlZCwgOTc4IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQo+IAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9icmVhZGNydW1icy5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfYnJlYWRjcnVtYnMuYwo+IGluZGV4IGUx OWY4NGIwMDZjYy4uZjkwMGYwNjgwNjQ3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2JyZWFkY3J1bWJzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9icmVhZGNydW1icy5jCj4gQEAgLTI5MCw4ICsyOTAsMTIgQEAgYm9vbCBpOTE1X3Jl cXVlc3RfZW5hYmxlX2JyZWFkY3J1bWIoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gICAJCQkJ YnJlYWs7Cj4gICAJCX0KPiAgIAkJbGlzdF9hZGQoJnJxLT5zaWduYWxfbGluaywgcG9zKTsKPiAt CQlpZiAocG9zID09ICZjZS0+c2lnbmFscykgLyogY2F0Y2ggdHJhbnNpdGlvbnMgZnJvbSBlbXB0 eSBsaXN0ICovCj4gKwkJaWYgKHBvcyA9PSAmY2UtPnNpZ25hbHMpIHsgLyogY2F0Y2ggdHJhbnNp dGlvbnMgZnJvbSBlbXB0eSAqLwo+ICAgCQkJbGlzdF9tb3ZlX3RhaWwoJmNlLT5zaWduYWxfbGlu aywgJmItPnNpZ25hbGVycyk7Cj4gKwkJfSBlbHNlIGlmIChjZS0+ZW5naW5lICE9IHJxLT5lbmdp bmUpIHsgLyogdmlydHVhbGlzZWQgKi8KPiArCQkJbGlzdF9tb3ZlX3RhaWwoJmNlLT5zaWduYWxf bGluaywgJmItPnNpZ25hbGVycyk7Cj4gKwkJCWludGVsX2VuZ2luZV9xdWV1ZV9icmVhZGNydW1i cyhycS0+ZW5naW5lKTsKCklzIHRoZXJlIHNpZ25pZmljYW5jZSBpbiBjaGVjayBub3QgYmVpbmcg YmFzZWQgb24gZW5naW5lLT5mbGFncyAmIFZJUlRVQUw/CgpBY3R1YWxseSwgdGhlIHNpZ25hbGlu ZyBjYW4gZ2V0IGVuYWJsZWQgZWl0aGVyIG9uIHRoZSB2aXJ0dWFsIG9yIHJlYWwgCmVuZ2luZSwg ZGVwZW5kaW5nIG9uIHRpbWluZy4gSSBkb24ndCBzZWUgdGhhdCBpcnFfZW5hYmxlL2Rpc2FibGUg dmZ1bmNzIAp3aWxsIGJlIHByZXNlbnQgb24gdGhlIHZlbmcgdGhvdWdoLiBTbyBob3cgZG9lcyB0 aGF0IHdvcms/CgpNYXliZSB0aGVyZSBpcyBhIGNsdWUgaW4gcHJlc2VuY2Ugb2YgaW50ZWxfZW5n aW5lX3F1ZXVlX2JyZWFkY3J1bWJzIGJ1dCAKSSBkb24ndCBzZWUgaXQuCgo+ICsJCX0KPiAgIAo+ ICAgCQlzZXRfYml0KEk5MTVfRkVOQ0VfRkxBR19TSUdOQUwsICZycS0+ZmVuY2UuZmxhZ3MpOwo+ ICAgCQlzcGluX3VubG9jaygmYi0+aXJxX2xvY2spOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2VuZ2luZV90eXBlcy5oCj4gaW5kZXggZDk3MmMzMzkzMDljLi42ZGNlYjc4ZTk1 ZDcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5 cGVzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfdHlwZXMu aAo+IEBAIC0yMjcsNiArMjI3LDcgQEAgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgewo+ ICAgCSAqIEBxdWV1ZTogcXVldWUgb2YgcmVxdWVzdHMsIGluIHByaW9yaXR5IGxpc3RzCj4gICAJ ICovCj4gICAJc3RydWN0IHJiX3Jvb3RfY2FjaGVkIHF1ZXVlOwo+ICsJc3RydWN0IHJiX3Jvb3Rf Y2FjaGVkIHZpcnR1YWw7Cj4gICAKPiAgIAkvKioKPiAgIAkgKiBAY3NiX3dyaXRlOiBjb250cm9s IHJlZ2lzdGVyIGZvciBDb250ZXh0IFN3aXRjaCBidWZmZXIKPiBAQCAtNDQ1LDYgKzQ0Niw3IEBA IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mgewo+ICAgI2RlZmluZSBJOTE1X0VOR0lORV9IQVNfUFJF RU1QVElPTiAgIEJJVCgyKQo+ICAgI2RlZmluZSBJOTE1X0VOR0lORV9IQVNfU0VNQVBIT1JFUyAg IEJJVCgzKQo+ICAgI2RlZmluZSBJOTE1X0VOR0lORV9ORUVEU19CUkVBRENSVU1CX1RBU0tMRVQg QklUKDQpCj4gKyNkZWZpbmUgSTkxNV9FTkdJTkVfSVNfVklSVFVBTCAgICAgICBCSVQoNSkKPiAg IAl1bnNpZ25lZCBpbnQgZmxhZ3M7Cj4gICAKPiAgIAkvKgo+IEBAIC01MzQsNiArNTM2LDEyIEBA IGludGVsX2VuZ2luZV9uZWVkc19icmVhZGNydW1iX3Rhc2tsZXQoY29uc3Qgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCXJldHVybiBlbmdpbmUtPmZsYWdzICYgSTkxNV9FTkdJ TkVfTkVFRFNfQlJFQURDUlVNQl9UQVNLTEVUOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbmxpbmUg Ym9vbAo+ICtpbnRlbF9lbmdpbmVfaXNfdmlydHVhbChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gK3sKPiArCXJldHVybiBlbmdpbmUtPmZsYWdzICYgSTkxNV9FTkdJTkVf SVNfVklSVFVBTDsKPiArfQo+ICsKPiAgICNkZWZpbmUgaW5zdGRvbmVfc2xpY2VfbWFzayhkZXZf cHJpdl9fKSBcCj4gICAJKElTX0dFTihkZXZfcHJpdl9fLCA3KSA/IFwKPiAgIAkgMSA6IFJVTlRJ TUVfSU5GTyhkZXZfcHJpdl9fKS0+c3NldS5zbGljZV9tYXNrKQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2xyYy5jCj4gaW5kZXggMDFmNThhMTUyYTllLi5kNmVmZDZhYTY3Y2IgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwo+IEBAIC0xMzYsNiArMTM2LDcgQEAKPiAgICNp bmNsdWRlICJpOTE1X2Rydi5oIgo+ICAgI2luY2x1ZGUgImk5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5o Igo+ICAgI2luY2x1ZGUgImk5MTVfdmdwdS5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZW5naW5lX3Bt LmgiCj4gICAjaW5jbHVkZSAiaW50ZWxfbHJjX3JlZy5oIgo+ICAgI2luY2x1ZGUgImludGVsX21v Y3MuaCIKPiAgICNpbmNsdWRlICJpbnRlbF9yZXNldC5oIgo+IEBAIC0xNjUsNiArMTY2LDQxIEBA Cj4gICAKPiAgICNkZWZpbmUgQUNUSVZFX1BSSU9SSVRZIChJOTE1X1BSSU9SSVRZX05FV0NMSUVO VCB8IEk5MTVfUFJJT1JJVFlfTk9TRU1BUEhPUkUpCj4gICAKPiArc3RydWN0IHZpcnR1YWxfZW5n aW5lIHsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgYmFzZTsKPiArCXN0cnVjdCBpbnRlbF9j b250ZXh0IGNvbnRleHQ7Cj4gKwo+ICsJLyoKPiArCSAqIFdlIGFsbG93IG9ubHkgYSBzaW5nbGUg cmVxdWVzdCB0aHJvdWdoIHRoZSB2aXJ0dWFsIGVuZ2luZSBhdCBhIHRpbWUKPiArCSAqIChlYWNo IHJlcXVlc3QgaW4gdGhlIHRpbWVsaW5lIHdhaXRzIGZvciB0aGUgY29tcGxldGlvbiBmZW5jZSBv Zgo+ICsJICogdGhlIHByZXZpb3VzIGJlZm9yZSBiZWluZyBzdWJtaXR0ZWQpLiBCeSByZXN0cmlj dGluZyBvdXJzZWx2ZXMgdG8KPiArCSAqIG9ubHkgc3VibWl0dGluZyBhIHNpbmdsZSByZXF1ZXN0 LCBlYWNoIHJlcXVlc3QgaXMgcGxhY2VkIG9uIHRvIGEKPiArCSAqIHBoeXNpY2FsIHRvIG1heGlt aXNlIGxvYWQgc3ByZWFkaW5nIChieSB2aXJ0dWUgb2YgdGhlIGxhdGUgZ3JlZWR5Cj4gKwkgKiBz Y2hlZHVsaW5nIC0tIGVhY2ggcmVhbCBlbmdpbmUgdGFrZXMgdGhlIG5leHQgYXZhaWxhYmxlIHJl cXVlc3QKPiArCSAqIHVwb24gaWRsaW5nKS4KPiArCSAqLwo+ICsJc3RydWN0IGk5MTVfcmVxdWVz dCAqcmVxdWVzdDsKPiArCj4gKwkvKgo+ICsJICogV2Uga2VlcCBhIHJidHJlZSBvZiBhdmFpbGFi bGUgdmlydHVhbCBlbmdpbmVzIGluc2lkZSBlYWNoIHBoeXNpY2FsCj4gKwkgKiBlbmdpbmUsIHNv cnRlZCBieSBwcmlvcml0eS4gSGVyZSB3ZSBwcmVhbGxvY2F0ZSB0aGUgbm9kZXMgd2UgbmVlZAo+ ICsJICogZm9yIHRoZSB2aXJ0dWFsIGVuZ2luZSwgaW5kZXhlZCBieSBwaHlzaWNhbF9lbmdpbmUt PmlkLgo+ICsJICovCj4gKwlzdHJ1Y3QgdmVfbm9kZSB7Cj4gKwkJc3RydWN0IHJiX25vZGUgcmI7 Cj4gKwkJaW50IHByaW87Cj4gKwl9IG5vZGVzW0k5MTVfTlVNX0VOR0lORVNdOwo+ICsKPiArCS8q IEFuZCBmaW5hbGx5LCB3aGljaCBwaHlzaWNhbCBlbmdpbmVzIHRoaXMgdmlydHVhbCBlbmdpbmUg bWFwcyBvbnRvLiAqLwo+ICsJdW5zaWduZWQgaW50IG51bV9zaWJsaW5nczsKPiArCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnNpYmxpbmdzWzBdOwo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCB2 aXJ0dWFsX2VuZ2luZSAqdG9fdmlydHVhbF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGVuZ2luZSwgc3RydWN0IHZpcnR1 YWxfZW5naW5lLCBiYXNlKTsKPiArfQo+ICsKPiAgIHN0YXRpYyBpbnQgZXhlY2xpc3RzX2NvbnRl eHRfZGVmZXJyZWRfYWxsb2Moc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICAgCQkJCQkgICAg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgIHN0YXRpYyB2b2lkIGV4ZWNsaXN0 c19pbml0X3JlZ19zdGF0ZSh1MzIgKnJlZ19zdGF0ZSwKPiBAQCAtMjI4LDcgKzI2NCw4IEBAIHN0 YXRpYyBpbnQgcXVldWVfcHJpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAq ZXhlY2xpc3RzKQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9wcmVlbXB0 KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAtCQkJCWNvbnN0IHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxKQo+ICsJCQkJY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEs Cj4gKwkJCQlzdHJ1Y3QgcmJfbm9kZSAqcmIpCj4gICB7Cj4gICAJaW50IGxhc3RfcHJpbzsKPiAg IAo+IEBAIC0yNjMsNiArMzAwLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3ByZWVtcHQo Y29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAgCSAgICBycV9wcmlvKGxp c3RfbmV4dF9lbnRyeShycSwgbGluaykpID4gbGFzdF9wcmlvKQo+ICAgCQlyZXR1cm4gdHJ1ZTsK PiAgIAo+ICsJaWYgKHJiKSB7IC8qIFhYWCB2aXJ0dWFsIHByZWNlZGVuY2UgKi8KPiArCQlzdHJ1 Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0KPiArCQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBu b2Rlc1tlbmdpbmUtPmlkXS5yYik7Cj4gKwkJYm9vbCBwcmVlbXB0ID0gZmFsc2U7Cj4gKwo+ICsJ CWlmIChlbmdpbmUgPT0gdmUtPnNpYmxpbmdzWzBdKSB7IC8qIG9ubHkgcHJlZW1wdCBvbmUgc2li bGluZyAqLwo+ICsJCQlzcGluX2xvY2soJnZlLT5iYXNlLnRpbWVsaW5lLmxvY2spOwo+ICsJCQlp ZiAodmUtPnJlcXVlc3QpCj4gKwkJCQlwcmVlbXB0ID0gcnFfcHJpbyh2ZS0+cmVxdWVzdCkgPiBs YXN0X3ByaW87Cj4gKwkJCXNwaW5fdW5sb2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsKPiAr CQl9Cj4gKwo+ICsJCWlmIChwcmVlbXB0KQo+ICsJCQlyZXR1cm4gcHJlZW1wdDsKPiArCX0KPiAr Cj4gICAJLyoKPiAgIAkgKiBJZiB0aGUgaW5mbGlnaHQgY29udGV4dCBkaWQgbm90IHRyaWdnZXIg dGhlIHByZWVtcHRpb24sIHRoZW4gbWF5YmUKPiAgIAkgKiBpdCB3YXMgdGhlIHNldCBvZiBxdWV1 ZWQgcmVxdWVzdHM/IFBpY2sgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgaW4KPiBAQCAtMzgxLDYgKzQz NCw4IEBAIF9fdW53aW5kX2luY29tcGxldGVfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+ICAgCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKHJxLCBybiwK PiAgIAkJCQkJICZlbmdpbmUtPnRpbWVsaW5lLnJlcXVlc3RzLAo+ICAgCQkJCQkgbGluaykgewo+ ICsJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKm93bmVyOwo+ICsKPiAgIAkJaWYgKGk5MTVfcmVx dWVzdF9jb21wbGV0ZWQocnEpKQo+ICAgCQkJYnJlYWs7Cj4gICAKPiBAQCAtMzg5LDE0ICs0NDQs MzAgQEAgX191bndpbmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gICAKPiAgIAkJR0VNX0JVR19PTihycS0+aHdfY29udGV4dC0+YWN0aXZlKTsK PiAgIAo+IC0JCUdFTV9CVUdfT04ocnFfcHJpbyhycSkgPT0gSTkxNV9QUklPUklUWV9JTlZBTElE KTsKPiAtCQlpZiAocnFfcHJpbyhycSkgIT0gcHJpbykgewo+IC0JCQlwcmlvID0gcnFfcHJpbyhy cSk7Cj4gLQkJCXBsID0gaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3QoZW5naW5lLCBwcmlvKTsK PiAtCQl9Cj4gLQkJR0VNX0JVR19PTihSQl9FTVBUWV9ST09UKCZlbmdpbmUtPmV4ZWNsaXN0cy5x dWV1ZS5yYl9yb290KSk7Cj4gKwkJLyoKPiArCQkgKiBQdXNoIHRoZSByZXF1ZXN0IGJhY2sgaW50 byB0aGUgcXVldWUgZm9yIGxhdGVyIHJlc3VibWlzc2lvbi4KPiArCQkgKiBJZiB0aGlzIHJlcXVl c3QgaXMgbm90IG5hdGl2ZSB0byB0aGlzIHBoeXNpY2FsIGVuZ2luZSAoaS5lLgo+ICsJCSAqIGl0 IGNhbWUgZnJvbSBhIHZpcnR1YWwgc291cmNlKSwgcHVzaCBpdCBiYWNrIG9udG8gdGhlIHZpcnR1 YWwKPiArCQkgKiBlbmdpbmUgc28gdGhhdCBpdCBjYW4gYmUgbW92ZWQgYWNyb3NzIG9udG8gYW5v dGhlciBwaHlzaWNhbAo+ICsJCSAqIGVuZ2luZSBhcyBsb2FkIGRpY3RhdGVzLgo+ICsJCSAqLwo+ ICsJCW93bmVyID0gcnEtPmh3X2NvbnRleHQtPmVuZ2luZTsKPiArCQlpZiAobGlrZWx5KG93bmVy ID09IGVuZ2luZSkpIHsKPiArCQkJR0VNX0JVR19PTihycV9wcmlvKHJxKSA9PSBJOTE1X1BSSU9S SVRZX0lOVkFMSUQpOwo+ICsJCQlpZiAocnFfcHJpbyhycSkgIT0gcHJpbykgewo+ICsJCQkJcHJp byA9IHJxX3ByaW8ocnEpOwo+ICsJCQkJcGwgPSBpOTE1X3NjaGVkX2xvb2t1cF9wcmlvbGlzdChl bmdpbmUsIHByaW8pOwo+ICsJCQl9Cj4gKwkJCUdFTV9CVUdfT04oUkJfRU1QVFlfUk9PVCgmZW5n aW5lLT5leGVjbGlzdHMucXVldWUucmJfcm9vdCkpOwo+ICAgCj4gLQkJbGlzdF9hZGQoJnJxLT5z Y2hlZC5saW5rLCBwbCk7Cj4gKwkJCWxpc3RfYWRkKCZycS0+c2NoZWQubGluaywgcGwpOwo+ICsJ CX0gZWxzZSB7Cj4gKwkJCWlmIChfX2k5MTVfcmVxdWVzdF9oYXNfc3RhcnRlZChycSkpCj4gKwkJ CQlycS0+c2NoZWQuYXR0ci5wcmlvcml0eSB8PSBBQ1RJVkVfUFJJT1JJVFk7Cj4gKwo+ICsJCQly cS0+ZW5naW5lID0gb3duZXI7Cj4gKwkJCW93bmVyLT5zdWJtaXRfcmVxdWVzdChycSk7Cj4gKwkJ fQo+ICAgCj4gICAJCWFjdGl2ZSA9IHJxOwo+ICAgCX0KPiBAQCAtNjU4LDYgKzcyOSw3MiBAQCBz dGF0aWMgdm9pZCBjb21wbGV0ZV9wcmVlbXB0X2NvbnRleHQoc3RydWN0IGludGVsX2VuZ2luZV9l eGVjbGlzdHMgKmV4ZWNsaXN0cykKPiAgIAkJCQkJCSAgZXhlY2xpc3RzKSk7Cj4gICB9Cj4gICAK PiArc3RhdGljIHZvaWQgdmlydHVhbF91cGRhdGVfcmVnaXN0ZXJfb2Zmc2V0cyh1MzIgKnJlZ3Ms Cj4gKwkJCQkJICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJdTMy IGJhc2UgPSBlbmdpbmUtPm1taW9fYmFzZTsKPiArCj4gKwlyZWdzW0NUWF9DT05URVhUX0NPTlRS T0xdID0KPiArCQlpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0NPTlRFWFRfQ09OVFJPTChiYXNl KSk7Cj4gKwlyZWdzW0NUWF9SSU5HX0hFQURdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19I RUFEKGJhc2UpKTsKPiArCXJlZ3NbQ1RYX1JJTkdfVEFJTF0gPSBpOTE1X21taW9fcmVnX29mZnNl dChSSU5HX1RBSUwoYmFzZSkpOwo+ICsJcmVnc1tDVFhfUklOR19CVUZGRVJfU1RBUlRdID0gaTkx NV9tbWlvX3JlZ19vZmZzZXQoUklOR19TVEFSVChiYXNlKSk7Cj4gKwlyZWdzW0NUWF9SSU5HX0JV RkZFUl9DT05UUk9MXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ1RMKGJhc2UpKTsKPiAr Cj4gKwlyZWdzW0NUWF9CQl9IRUFEX1VdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19CQkFE RFJfVURXKGJhc2UpKTsKPiArCXJlZ3NbQ1RYX0JCX0hFQURfTF0gPSBpOTE1X21taW9fcmVnX29m ZnNldChSSU5HX0JCQUREUihiYXNlKSk7Cj4gKwlyZWdzW0NUWF9CQl9TVEFURV0gPSBpOTE1X21t aW9fcmVnX29mZnNldChSSU5HX0JCU1RBVEUoYmFzZSkpOwo+ICsJcmVnc1tDVFhfU0VDT05EX0JC X0hFQURfVV0gPQo+ICsJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfU0JCQUREUl9VRFcoYmFz ZSkpOwo+ICsJcmVnc1tDVFhfU0VDT05EX0JCX0hFQURfTF0gPSBpOTE1X21taW9fcmVnX29mZnNl dChSSU5HX1NCQkFERFIoYmFzZSkpOwo+ICsJcmVnc1tDVFhfU0VDT05EX0JCX1NUQVRFXSA9IGk5 MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfU0JCU1RBVEUoYmFzZSkpOwo+ICsKPiArCXJlZ3NbQ1RY X0NUWF9USU1FU1RBTVBdID0KPiArCQlpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0NUWF9USU1F U1RBTVAoYmFzZSkpOwo+ICsJcmVnc1tDVFhfUERQM19VRFddID0gaTkxNV9tbWlvX3JlZ19vZmZz ZXQoR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMykpOwo+ICsJcmVnc1tDVFhfUERQM19MRFddID0g aTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgMykpOwo+ICsJcmVn c1tDVFhfUERQMl9VRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9VRFco YmFzZSwgMikpOwo+ICsJcmVnc1tDVFhfUERQMl9MRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQo R0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgMikpOwo+ICsJcmVnc1tDVFhfUERQMV9VRFddID0gaTkx NV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMSkpOwo+ICsJcmVnc1tD VFhfUERQMV9MRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9MRFcoYmFz ZSwgMSkpOwo+ICsJcmVnc1tDVFhfUERQMF9VRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VO OF9SSU5HX1BEUF9VRFcoYmFzZSwgMCkpOwo+ICsJcmVnc1tDVFhfUERQMF9MRFddID0gaTkxNV9t bWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgMCkpOwo+ICsKPiArCWlmIChl bmdpbmUtPmNsYXNzID09IFJFTkRFUl9DTEFTUykgewo+ICsJCXJlZ3NbQ1RYX1JDU19JTkRJUkVD VF9DVFhdID0KPiArCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19JTkRJUkVDVF9DVFgoYmFz ZSkpOwo+ICsJCXJlZ3NbQ1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUXSA9Cj4gKwkJCWk5MTVf bW1pb19yZWdfb2Zmc2V0KFJJTkdfSU5ESVJFQ1RfQ1RYX09GRlNFVChiYXNlKSk7Cj4gKwkJcmVn c1tDVFhfQkJfUEVSX0NUWF9QVFJdID0KPiArCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19C Ql9QRVJfQ1RYX1BUUihiYXNlKSk7Cj4gKwo+ICsJCXJlZ3NbQ1RYX1JfUFdSX0NMS19TVEFURV0g PQo+ICsJCQlpOTE1X21taW9fcmVnX29mZnNldChHRU44X1JfUFdSX0NMS19TVEFURSk7Cj4gKwl9 Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHZpcnR1YWxfbWF0Y2hlcyhjb25zdCBzdHJ1Y3Qgdmly dHVhbF9lbmdpbmUgKnZlLAo+ICsJCQkgICAgY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEs Cj4gKwkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiAr CWNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmFjdGl2ZTsKPiArCj4gKwkvKgo+ICsJICog V2UgdHJhY2sgd2hlbiB0aGUgSFcgaGFzIGNvbXBsZXRlZCBzYXZpbmcgdGhlIGNvbnRleHQgaW1h Z2UKPiArCSAqIChpLmUuIHdoZW4gd2UgaGF2ZSBzZWVuIHRoZSBmaW5hbCBDUyBldmVudCBzd2l0 Y2hpbmcgb3V0IG9mCj4gKwkgKiB0aGUgY29udGV4dCkgYW5kIG11c3Qgbm90IG92ZXJ3cml0ZSB0 aGUgY29udGV4dCBpbWFnZSBiZWZvcmUKPiArCSAqIHRoZW4uIFRoaXMgcmVzdHJpY3RzIHVzIHRv IG9ubHkgdXNpbmcgdGhlIGFjdGl2ZSBlbmdpbmUKPiArCSAqIHdoaWxlIHRoZSBwcmV2aW91cyB2 aXJ0dWFsaXplZCByZXF1ZXN0IGlzIGluZmxpZ2h0IChzbwo+ICsJICogd2UgcmV1c2UgdGhlIHJl Z2lzdGVyIG9mZnNldHMpLiBUaGlzIGlzIGEgdmVyeSBzbWFsbAo+ICsJICogaHlzdGVyc2lzIG9u IHRoZSBncmVlZHkgc2VlbGN0aW9uIGFsZ29yaXRobS4KPiArCSAqLwo+ICsJYWN0aXZlID0gUkVB RF9PTkNFKHZlLT5jb250ZXh0LmFjdGl2ZSk7Cj4gKwlpZiAoYWN0aXZlICYmIGFjdGl2ZSAhPSBl bmdpbmUpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ ICAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQo+ICAgewo+ICAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3Qg ZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwo+IEBAIC02OTAsNiArODI3LDI2IEBAIHN0 YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKPiAgIAkgKiBhbmQgY29udGV4dCBzd2l0Y2hlcykgc3VibWlzc2lvbi4KPiAgIAkgKi8KPiAg IAo+ICsJZm9yIChyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT52aXJ0dWFsKTsgcmI7 ICkgewo+ICsJCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUgPQo+ICsJCQlyYl9lbnRyeShyYiwg dHlwZW9mKCp2ZSksIG5vZGVzW2VuZ2luZS0+aWRdLnJiKTsKPiArCQlzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycSA9IFJFQURfT05DRSh2ZS0+cmVxdWVzdCk7Cj4gKwo+ICsJCWlmICghcnEpIHsgLyog bGF6aWx5IGNsZWFudXAgYWZ0ZXIgYW5vdGhlciBlbmdpbmUgaGFuZGxlZCBycSAqLwo+ICsJCQly Yl9lcmFzZV9jYWNoZWQocmIsICZleGVjbGlzdHMtPnZpcnR1YWwpOwo+ICsJCQlSQl9DTEVBUl9O T0RFKHJiKTsKPiArCQkJcmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+dmlydHVhbCk7 Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCj4gKwkJaWYgKCF2aXJ0dWFsX21hdGNoZXModmUs IHJxLCBlbmdpbmUpKSB7Cj4gKwkJCXJiID0gcmJfbmV4dChyYik7Cj4gKwkJCWNvbnRpbnVlOwo+ ICsJCX0KCkNhbiB0aGlzIGNyZWF0ZSBhIHByb2JsZW0gd2hlcmUsIHNpbmNlIHRoZSBxdWV1ZSBp cyBzdXBwb3NlZCB0byBiZSBpbiAKc3VibWlzc2lvbiBvcmRlciwgaGVyZSBpdCBza2lwcyBzb21l IHJlcXVlc3RzIGlmIHRoZSBvd25pbmcgdmVuZyBpcyAKYWxyZWFkeSBleGVjdXRpbmcgc29tZXRo aW5nIGFuZCBzbyBpbnZlcnRzIHRoZSBkZXBlbmRlbmN5IGNoYWluPwoKQmVmb3JlIHNlbWFwaG9y ZSBJIGd1ZXNzIGl0IHdhc24ndCBwb3NzaWJsZSBzaW5jZSBvbmx5IHJ1bm5hYmxlIHJlcXVlc3Rz IAp3b3VsZCBiZSBpbiB0aGUgcXVldWUuIEJ1dCB3aXRoIHNlbWFwaG9yZXMgSSBhbSBub3Qgc3Vy ZS4gUGFyYW5vaWQgdGhpbmcgCndvdWxkIGJlIHRvIG5vdCBkZXF1ZXVlIGFueSBvdGhlciB2ZW5n IHJlcXVlc3QgaWYgZW5naW5lIGlzIGJ1c3kgd2l0aCAKc29tZSB2ZW5nLiBCdXQgbWF5YmUgdGhh dCB3b3VsZCBzZXJpYWxpemUgdGhpbmdzIHRvbyBtdWNoLiBPciBpdCBpcyB0b28gCnBhcmFub2lk PwoKPiArCj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICAgCWlmIChsYXN0KSB7Cj4gICAJCS8qCj4g ICAJCSAqIERvbid0IHJlc3VibWl0IG9yIHN3aXRjaCB1bnRpbCBhbGwgb3V0c3RhbmRpbmcKPiBA QCAtNzExLDcgKzg2OCw3IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAkJaWYgKCFleGVjbGlzdHNfaXNfYWN0aXZlKGV4 ZWNsaXN0cywgRVhFQ0xJU1RTX0FDVElWRV9IV0FDSykpCj4gICAJCQlyZXR1cm47Cj4gICAKPiAt CQlpZiAobmVlZF9wcmVlbXB0KGVuZ2luZSwgbGFzdCkpIHsKPiArCQlpZiAobmVlZF9wcmVlbXB0 KGVuZ2luZSwgbGFzdCwgcmIpKSB7Cj4gICAJCQlpbmplY3RfcHJlZW1wdF9jb250ZXh0KGVuZ2lu ZSk7Cj4gICAJCQlyZXR1cm47Cj4gICAJCX0KPiBAQCAtNzUxLDYgKzkwOCw4OSBAQCBzdGF0aWMg dm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4g ICAJCWxhc3QtPnRhaWwgPSBsYXN0LT53YV90YWlsOwo+ICAgCX0KPiAgIAo+ICsJd2hpbGUgKHJi KSB7IC8qIFhYWCB2aXJ0dWFsIGlzIGFsd2F5cyB0YWtpbmcgcHJlY2VkZW5jZSAqLwo+ICsJCXN0 cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUgPQo+ICsJCQlyYl9lbnRyeShyYiwgdHlwZW9mKCp2ZSks IG5vZGVzW2VuZ2luZS0+aWRdLnJiKTsKPiArCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiAr Cj4gKwkJc3Bpbl9sb2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsKPiArCj4gKwkJcnEgPSB2 ZS0+cmVxdWVzdDsKPiArCQlpZiAodW5saWtlbHkoIXJxKSkgeyAvKiBsb3N0IHRoZSByYWNlIHRv IGEgc2libGluZyAqLwo+ICsJCQlzcGluX3VubG9jaygmdmUtPmJhc2UudGltZWxpbmUubG9jayk7 Cj4gKwkJCXJiX2VyYXNlX2NhY2hlZChyYiwgJmV4ZWNsaXN0cy0+dmlydHVhbCk7Cj4gKwkJCVJC X0NMRUFSX05PREUocmIpOwo+ICsJCQlyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT52 aXJ0dWFsKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlHRU1fQlVHX09OKHJxICE9 IHZlLT5yZXF1ZXN0KTsKPiArCQlHRU1fQlVHX09OKHJxLT5lbmdpbmUgIT0gJnZlLT5iYXNlKTsK PiArCQlHRU1fQlVHX09OKHJxLT5od19jb250ZXh0ICE9ICZ2ZS0+Y29udGV4dCk7Cj4gKwo+ICsJ CWlmIChycV9wcmlvKHJxKSA+PSBxdWV1ZV9wcmlvKGV4ZWNsaXN0cykpIHsKPiArCQkJaWYgKCF2 aXJ0dWFsX21hdGNoZXModmUsIHJxLCBlbmdpbmUpKSB7Cj4gKwkJCQlzcGluX3VubG9jaygmdmUt PmJhc2UudGltZWxpbmUubG9jayk7Cj4gKwkJCQlyYiA9IHJiX25leHQocmIpOwo+ICsJCQkJY29u dGludWU7CgpJcyB0aGlzIG5lZWRlZD8gVGhlIGZpcnN0IHZpcnR1YWxfbWF0Y2hlcyBsb29wIHNr aXBwZWQgYWxsIHJlcXVlc3RzIAp3aGljaCBzaG91bGRuJ3QgYmUgZGVxdWV1ZWQgYW5kIGxlYXZl cyByYiBwb2ludGluZyB0byB0aGUgdG9wIHByaW9yaXR5IApvbmUgd2hpY2ggY2FuLgoKPiArCQkJ fSA+ICsKPiArCQkJaWYgKGxhc3QgJiYgIWNhbl9tZXJnZV9ycShsYXN0LCBycSkpIHsKPiArCQkJ CXNwaW5fdW5sb2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsKPiArCQkJCXJldHVybjsgLyog bGVhdmUgdGhpcyBycSBmb3IgYW5vdGhlciBlbmdpbmUgKi8KPiArCQkJfQo+ICsKPiArCQkJR0VN X1RSQUNFKCIlczogdmlydHVhbCBycT0lbGx4OiVsbGQlcywgbmV3IGVuZ2luZT8gJXNcbiIsCj4g KwkJCQkgIGVuZ2luZS0+bmFtZSwKPiArCQkJCSAgcnEtPmZlbmNlLmNvbnRleHQsCj4gKwkJCQkg IHJxLT5mZW5jZS5zZXFubywKPiArCQkJCSAgaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkgPyAi ISIgOgo+ICsJCQkJICBpOTE1X3JlcXVlc3Rfc3RhcnRlZChycSkgPyAiKiIgOgo+ICsJCQkJICAi IiwKPiArCQkJCSAgeWVzbm8oZW5naW5lICE9IHZlLT5zaWJsaW5nc1swXSkpOwo+ICsKPiArCQkJ dmUtPnJlcXVlc3QgPSBOVUxMOwo+ICsJCQl2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3Jp dHlfaGludCA9IElOVF9NSU47Cj4gKwkJCXJiX2VyYXNlX2NhY2hlZChyYiwgJmV4ZWNsaXN0cy0+ dmlydHVhbCk7Cj4gKwkJCVJCX0NMRUFSX05PREUocmIpOwo+ICsKPiArCQkJcnEtPmVuZ2luZSA9 IGVuZ2luZTsKPiArCj4gKwkJCWlmIChlbmdpbmUgIT0gdmUtPnNpYmxpbmdzWzBdKSB7Cj4gKwkJ CQl1MzIgKnJlZ3MgPSB2ZS0+Y29udGV4dC5scmNfcmVnX3N0YXRlOwo+ICsJCQkJdW5zaWduZWQg aW50IG47Cj4gKwo+ICsJCQkJR0VNX0JVR19PTihSRUFEX09OQ0UodmUtPmNvbnRleHQuYWN0aXZl KSk7Cj4gKwkJCQl2aXJ0dWFsX3VwZGF0ZV9yZWdpc3Rlcl9vZmZzZXRzKHJlZ3MsIGVuZ2luZSk7 Cj4gKwo+ICsJCQkJLyoKPiArCQkJCSAqIE1vdmUgdGhlIGJvdW5kIGVuZ2luZSB0byB0aGUgdG9w IG9mIHRoZSBsaXN0Cj4gKwkJCQkgKiBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4gV2UgdGhlbiBraWNr IHRoaXMKPiArCQkJCSAqIHRhc2tsZXQgZmlyc3QgYmVmb3JlIGNoZWNraW5nIG90aGVycywgc28g dGhhdAo+ICsJCQkJICogd2UgcHJlZmVyZW50aWFsbHkgcmV1c2UgdGhpcyBzZXQgb2YgYm91bmQK PiArCQkJCSAqIHJlZ2lzdGVycy4KPiArCQkJCSAqLwo+ICsJCQkJZm9yIChuID0gMTsgbiA8IHZl LT5udW1fc2libGluZ3M7IG4rKykgewo+ICsJCQkJCWlmICh2ZS0+c2libGluZ3Nbbl0gPT0gZW5n aW5lKSB7Cj4gKwkJCQkJCXN3YXAodmUtPnNpYmxpbmdzW25dLAo+ICsJCQkJCQkgICAgIHZlLT5z aWJsaW5nc1swXSk7Cj4gKwkJCQkJCWJyZWFrOwo+ICsJCQkJCX0KPiArCQkJCX0KPiArCj4gKwkJ CQlHRU1fQlVHX09OKHZlLT5zaWJsaW5nc1swXSAhPSBlbmdpbmUpOwo+ICsJCQl9Cj4gKwo+ICsJ CQlfX2k5MTVfcmVxdWVzdF9zdWJtaXQocnEpOwo+ICsJCQl0cmFjZV9pOTE1X3JlcXVlc3RfaW4o cnEsIHBvcnRfaW5kZXgocG9ydCwgZXhlY2xpc3RzKSk7Cj4gKwkJCXN1Ym1pdCA9IHRydWU7Cj4g KwkJCWxhc3QgPSBycTsKPiArCQl9Cj4gKwo+ICsJCXNwaW5fdW5sb2NrKCZ2ZS0+YmFzZS50aW1l bGluZS5sb2NrKTsKPiArCQlicmVhazsKPiArCX0KPiArCj4gICAJd2hpbGUgKChyYiA9IHJiX2Zp cnN0X2NhY2hlZCgmZXhlY2xpc3RzLT5xdWV1ZSkpKSB7Cj4gICAJCXN0cnVjdCBpOTE1X3ByaW9s aXN0ICpwID0gdG9fcHJpb2xpc3QocmIpOwo+ICAgCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwg KnJuOwo+IEBAIC0yMDQzLDYgKzIyODMsMjYgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2NhbmNl bF9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICAJCWk5MTVfcHJp b2xpc3RfZnJlZShwKTsKPiAgIAl9Cj4gICAKPiArCS8qIENhbmNlbCBhbGwgYXR0YWNoZWQgdmly dHVhbCBlbmdpbmVzICovCj4gKwl3aGlsZSAoKHJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVjbGlz dHMtPnZpcnR1YWwpKSkgewo+ICsJCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUgPQo+ICsJCQly Yl9lbnRyeShyYiwgdHlwZW9mKCp2ZSksIG5vZGVzW2VuZ2luZS0+aWRdLnJiKTsKPiArCj4gKwkJ cmJfZXJhc2VfY2FjaGVkKHJiLCAmZXhlY2xpc3RzLT52aXJ0dWFsKTsKPiArCQlSQl9DTEVBUl9O T0RFKHJiKTsKPiArCj4gKwkJc3Bpbl9sb2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsKPiAr CQlpZiAodmUtPnJlcXVlc3QpIHsKPiArCQkJdmUtPnJlcXVlc3QtPmVuZ2luZSA9IGVuZ2luZTsK PiArCQkJX19pOTE1X3JlcXVlc3Rfc3VibWl0KHZlLT5yZXF1ZXN0KTsKPiArCQkJZG1hX2ZlbmNl X3NldF9lcnJvcigmdmUtPnJlcXVlc3QtPmZlbmNlLCAtRUlPKTsKPiArCQkJaTkxNV9yZXF1ZXN0 X21hcmtfY29tcGxldGUodmUtPnJlcXVlc3QpOwo+ICsJCQl2ZS0+YmFzZS5leGVjbGlzdHMucXVl dWVfcHJpb3JpdHlfaGludCA9IElOVF9NSU47Cj4gKwkJCXZlLT5yZXF1ZXN0ID0gTlVMTDsKPiAr CQl9Cj4gKwkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLnRpbWVsaW5lLmxvY2spOwo+ICsJfQo+ICsK PiAgIAkvKiBSZW1haW5pbmcgX3VucmVhZHlfIHJlcXVlc3RzIHdpbGwgYmUgbm9wJ2VkIHdoZW4g c3VibWl0dGVkICovCj4gICAKPiAgIAlleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJ TlRfTUlOOwo+IEBAIC0yNzc5LDYgKzMwMzksMzE2IEBAIHN0YXRpYyBpbnQgZXhlY2xpc3RzX2Nv bnRleHRfZGVmZXJyZWRfYWxsb2Moc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICAgCXJldHVy biByZXQ7Cj4gICB9Cj4gICAKPiArc3RhdGljIHZvaWQgdmlydHVhbF9jb250ZXh0X2Rlc3Ryb3ko c3RydWN0IGtyZWYgKmtyZWYpCj4gK3sKPiArCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUgPQo+ ICsJCWNvbnRhaW5lcl9vZihrcmVmLCB0eXBlb2YoKnZlKSwgY29udGV4dC5yZWYpOwo+ICsJdW5z aWduZWQgaW50IG47Cj4gKwo+ICsJR0VNX0JVR19PTih2ZS0+cmVxdWVzdCk7Cj4gKwlHRU1fQlVH X09OKHZlLT5jb250ZXh0LmFjdGl2ZSk7Cj4gKwo+ICsJZm9yIChuID0gMDsgbiA8IHZlLT5udW1f c2libGluZ3M7IG4rKykgewo+ICsJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNpYmxpbmcgPSB2 ZS0+c2libGluZ3Nbbl07Cj4gKwkJc3RydWN0IHJiX25vZGUgKm5vZGUgPSAmdmUtPm5vZGVzW3Np YmxpbmctPmlkXS5yYjsKPiArCj4gKwkJaWYgKFJCX0VNUFRZX05PREUobm9kZSkpCj4gKwkJCWNv bnRpbnVlOwo+ICsKPiArCQlzcGluX2xvY2tfaXJxKCZzaWJsaW5nLT50aW1lbGluZS5sb2NrKTsK PiArCj4gKwkJaWYgKCFSQl9FTVBUWV9OT0RFKG5vZGUpKQo+ICsJCQlyYl9lcmFzZV9jYWNoZWQo bm9kZSwgJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsKTsKCkEgY29uc2VxdWVuY2Ugb2YgcnEg ZHVwbGljYXRpb24gYWNyb3NzIHBoeWlzaWNhbCBlbmdpbmVzPyBMZWF2ZSBhIGNvbW1lbnQ/Cgo+ ICsKPiArCQlzcGluX3VubG9ja19pcnEoJnNpYmxpbmctPnRpbWVsaW5lLmxvY2spOwo+ICsJfQo+ ICsJR0VNX0JVR19PTihfX3Rhc2tsZXRfaXNfc2NoZWR1bGVkKCZ2ZS0+YmFzZS5leGVjbGlzdHMu dGFza2xldCkpOwo+ICsKPiArCWlmICh2ZS0+Y29udGV4dC5zdGF0ZSkKPiArCQlfX2V4ZWNsaXN0 c19jb250ZXh0X2ZpbmkoJnZlLT5jb250ZXh0KTsKPiArCj4gKwlpOTE1X3RpbWVsaW5lX2Zpbmko JnZlLT5iYXNlLnRpbWVsaW5lKTsKPiArCWtmcmVlKHZlKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgdmlydHVhbF9lbmdpbmVfaW5pdGlhbF9oaW50KHN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUp Cj4gK3sKPiArCWludCBzd3A7Cj4gKwo+ICsJLyoKPiArCSAqIFBpY2sgYSByYW5kb20gc2libGlu ZyBvbiBzdGFydGluZyB0byBoZWxwIHNwcmVhZCB0aGUgbG9hZCBhcm91bmQuCj4gKwkgKgo+ICsJ ICogTmV3IGNvbnRleHRzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCB3aXRoIGV4YWN0bHkgdGhlIHNh bWUgb3JkZXIKPiArCSAqIG9mIHNpYmxpbmdzLCBhbmQgb2Z0ZW4gc3RhcnRlZCBpbiBiYXRjaGVz LiBEdWUgdG8gdGhlIHdheSB3ZSBpdGVyYXRlCj4gKwkgKiB0aGUgYXJyYXkgb2Ygc2libGluZyB3 aGVuIHN1Ym1pdHRpbmcgcmVxdWVzdHMsIHNpYmxpbmdbMF0gaXMKPiArCSAqIHByaW9yaXRpc2Vk IGZvciBkZXF1ZXVpbmcuIElmIHdlIG1ha2Ugc3VyZSB0aGF0IHNpYmxpbmdbMF0gaXMgZmFpcmx5 Cj4gKwkgKiByYW5kb21pc2VkIGFjcm9zcyB0aGUgc3lzdGVtLCB3ZSBhbHNvIGhlbHAgc3ByZWFk IHRoZSBsb2FkIGJ5IHRoZQo+ICsJICogZmlyc3QgZW5naW5lIHdlIGluc3BlY3QgYmVpbmcgZGlm ZmVyZW50IGVhY2ggdGltZS4KPiArCSAqCj4gKwkgKiBOQiBUaGlzIGRvZXMgbm90IGZvcmNlIHVz IHRvIGV4ZWN1dGUgb24gdGhpcyBlbmdpbmUsIGl0IHdpbGwganVzdAo+ICsJICogdHlwaWNhbGx5 IGJlIHRoZSBmaXJzdCB3ZSBpbnNwZWN0IGZvciBzdWJtaXNzaW9uLgo+ICsJICovCj4gKwlzd3Ag PSBwcmFuZG9tX3UzMl9tYXgodmUtPm51bV9zaWJsaW5ncyk7Cj4gKwlpZiAoIXN3cCkKPiArCQly ZXR1cm47Cj4gKwo+ICsJc3dhcCh2ZS0+c2libGluZ3Nbc3dwXSwgdmUtPnNpYmxpbmdzWzBdKTsK PiArCXZpcnR1YWxfdXBkYXRlX3JlZ2lzdGVyX29mZnNldHModmUtPmNvbnRleHQubHJjX3JlZ19z dGF0ZSwKPiArCQkJCQl2ZS0+c2libGluZ3NbMF0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZp cnR1YWxfY29udGV4dF9waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+ICt7Cj4gKwlzdHJ1 Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0gY29udGFpbmVyX29mKGNlLCB0eXBlb2YoKnZlKSwgY29u dGV4dCk7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCS8qIE5vdGU6IHdlIG11c3QgdXNlIGEgcmVhbCBl bmdpbmUgY2xhc3MgZm9yIHNldHRpbmcgdXAgcmVnIHN0YXRlICovCj4gKwllcnIgPSBfX2V4ZWNs aXN0c19jb250ZXh0X3BpbihjZSwgdmUtPnNpYmxpbmdzWzBdKTsKPiArCWlmIChlcnIpCj4gKwkJ cmV0dXJuIGVycjsKPiArCj4gKwl2aXJ0dWFsX2VuZ2luZV9pbml0aWFsX2hpbnQodmUpOwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZpcnR1YWxfY29udGV4dF9lbnRlcihz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4gK3sKPiArCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAq dmUgPSBjb250YWluZXJfb2YoY2UsIHR5cGVvZigqdmUpLCBjb250ZXh0KTsKPiArCXVuc2lnbmVk IGludCBuOwo+ICsKPiArCWZvciAobiA9IDA7IG4gPCB2ZS0+bnVtX3NpYmxpbmdzOyBuKyspCj4g KwkJaW50ZWxfZW5naW5lX3BtX2dldCh2ZS0+c2libGluZ3Nbbl0pOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCB2aXJ0dWFsX2NvbnRleHRfZXhpdChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4g K3sKPiArCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUgPSBjb250YWluZXJfb2YoY2UsIHR5cGVv ZigqdmUpLCBjb250ZXh0KTsKPiArCXVuc2lnbmVkIGludCBuOwo+ICsKPiArCWZvciAobiA9IDA7 IG4gPCB2ZS0+bnVtX3NpYmxpbmdzOyBuKyspCj4gKwkJaW50ZWxfZW5naW5lX3BtX3B1dCh2ZS0+ c2libGluZ3Nbbl0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2NvbnRl eHRfb3BzIHZpcnR1YWxfY29udGV4dF9vcHMgPSB7Cj4gKwkucGluID0gdmlydHVhbF9jb250ZXh0 X3BpbiwKPiArCS51bnBpbiA9IGV4ZWNsaXN0c19jb250ZXh0X3VucGluLAo+ICsKPiArCS5lbnRl ciA9IHZpcnR1YWxfY29udGV4dF9lbnRlciwKPiArCS5leGl0ID0gdmlydHVhbF9jb250ZXh0X2V4 aXQsCj4gKwo+ICsJLmRlc3Ryb3kgPSB2aXJ0dWFsX2NvbnRleHRfZGVzdHJveSwKPiArfTsKPiAr Cj4gK3N0YXRpYyB2b2lkIHZpcnR1YWxfc3VibWlzc2lvbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcg ZGF0YSkKPiArewo+ICsJc3RydWN0IHZpcnR1YWxfZW5naW5lICogY29uc3QgdmUgPSAoc3RydWN0 IHZpcnR1YWxfZW5naW5lICopZGF0YTsKPiArCWNvbnN0IGludCBwcmlvID0gdmUtPmJhc2UuZXhl Y2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQ7Cj4gKwl1bnNpZ25lZCBpbnQgbjsKPiArCj4gKwls b2NhbF9pcnFfZGlzYWJsZSgpOwo+ICsJZm9yIChuID0gMDsgUkVBRF9PTkNFKHZlLT5yZXF1ZXN0 KSAmJiBuIDwgdmUtPm51bV9zaWJsaW5nczsgbisrKSB7Cj4gKwkJc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqc2libGluZyA9IHZlLT5zaWJsaW5nc1tuXTsKPiArCQlzdHJ1Y3QgdmVfbm9kZSAqIGNv bnN0IG5vZGUgPSAmdmUtPm5vZGVzW3NpYmxpbmctPmlkXTsKPiArCQlzdHJ1Y3QgcmJfbm9kZSAq KnBhcmVudCwgKnJiOwo+ICsJCWJvb2wgZmlyc3Q7Cj4gKwo+ICsJCXNwaW5fbG9jaygmc2libGlu Zy0+dGltZWxpbmUubG9jayk7Cj4gKwo+ICsJCWlmICghUkJfRU1QVFlfTk9ERSgmbm9kZS0+cmIp KSB7Cj4gKwkJCS8qCj4gKwkJCSAqIENoZWF0IGFuZCBhdm9pZCByZWJhbGFuY2luZyB0aGUgdHJl ZSBpZiB3ZSBjYW4KPiArCQkJICogcmV1c2UgdGhpcyBub2RlIGluIHNpdHUuCj4gKwkJCSAqLwo+ ICsJCQlmaXJzdCA9IHJiX2ZpcnN0X2NhY2hlZCgmc2libGluZy0+ZXhlY2xpc3RzLnZpcnR1YWwp ID09Cj4gKwkJCQkmbm9kZS0+cmI7Cj4gKwkJCWlmIChwcmlvID09IG5vZGUtPnByaW8gfHwgKHBy aW8gPiBub2RlLT5wcmlvICYmIGZpcnN0KSkKPiArCQkJCWdvdG8gc3VibWl0X2VuZ2luZTsKPiAr Cj4gKwkJCXJiX2VyYXNlX2NhY2hlZCgmbm9kZS0+cmIsICZzaWJsaW5nLT5leGVjbGlzdHMudmly dHVhbCk7Cj4gKwkJfQo+ICsKPiArCQlyYiA9IE5VTEw7Cj4gKwkJZmlyc3QgPSB0cnVlOwo+ICsJ CXBhcmVudCA9ICZzaWJsaW5nLT5leGVjbGlzdHMudmlydHVhbC5yYl9yb290LnJiX25vZGU7Cj4g KwkJd2hpbGUgKCpwYXJlbnQpIHsKPiArCQkJc3RydWN0IHZlX25vZGUgKm90aGVyOwo+ICsKPiAr CQkJcmIgPSAqcGFyZW50Owo+ICsJCQlvdGhlciA9IHJiX2VudHJ5KHJiLCB0eXBlb2YoKm90aGVy KSwgcmIpOwo+ICsJCQlpZiAocHJpbyA+IG90aGVyLT5wcmlvKSB7Cj4gKwkJCQlwYXJlbnQgPSAm cmItPnJiX2xlZnQ7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlwYXJlbnQgPSAmcmItPnJiX3JpZ2h0 Owo+ICsJCQkJZmlyc3QgPSBmYWxzZTsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJcmJfbGlua19u b2RlKCZub2RlLT5yYiwgcmIsIHBhcmVudCk7Cj4gKwkJcmJfaW5zZXJ0X2NvbG9yX2NhY2hlZCgm bm9kZS0+cmIsCj4gKwkJCQkgICAgICAgJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsLAo+ICsJ CQkJICAgICAgIGZpcnN0KTsKPiArCj4gK3N1Ym1pdF9lbmdpbmU6Cj4gKwkJR0VNX0JVR19PTihS Ql9FTVBUWV9OT0RFKCZub2RlLT5yYikpOwo+ICsJCW5vZGUtPnByaW8gPSBwcmlvOwo+ICsJCWlm IChmaXJzdCAmJiBwcmlvID4gc2libGluZy0+ZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQp IHsKPiArCQkJc2libGluZy0+ZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBwcmlvOwo+ ICsJCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZzaWJsaW5nLT5leGVjbGlzdHMudGFza2xldCk7Cj4g KwkJfQo+ICsKPiArCQlzcGluX3VubG9jaygmc2libGluZy0+dGltZWxpbmUubG9jayk7Cj4gKwl9 Cj4gKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZpcnR1YWxf c3VibWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gK3sKPiArCXN0cnVjdCB2 aXJ0dWFsX2VuZ2luZSAqdmUgPSB0b192aXJ0dWFsX2VuZ2luZShycS0+ZW5naW5lKTsKPiArCj4g KwlHRU1fVFJBQ0UoIiVzOiBycT0lbGx4OiVsbGRcbiIsCj4gKwkJICB2ZS0+YmFzZS5uYW1lLAo+ ICsJCSAgcnEtPmZlbmNlLmNvbnRleHQsCj4gKwkJICBycS0+ZmVuY2Uuc2Vxbm8pOwo+ICsKPiAr CUdFTV9CVUdfT04odmUtPmJhc2Uuc3VibWl0X3JlcXVlc3QgIT0gdmlydHVhbF9zdWJtaXRfcmVx dWVzdCk7Cj4gKwo+ICsJR0VNX0JVR19PTih2ZS0+cmVxdWVzdCk7Cj4gKwl2ZS0+YmFzZS5leGVj bGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9IHJxX3ByaW8ocnEpOwo+ICsJV1JJVEVfT05DRSh2 ZS0+cmVxdWVzdCwgcnEpOwo+ICsKPiArCXRhc2tsZXRfc2NoZWR1bGUoJnZlLT5iYXNlLmV4ZWNs aXN0cy50YXNrbGV0KTsKPiArfQo+ICsKPiArc3RydWN0IGludGVsX2NvbnRleHQgKgo+ICtpbnRl bF9leGVjbGlzdHNfY3JlYXRlX3ZpcnR1YWwoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwK PiArCQkJICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKipzaWJsaW5ncywKPiArCQkJICAg ICAgIHVuc2lnbmVkIGludCBjb3VudCkKPiArewo+ICsJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2 ZTsKPiArCXVuc2lnbmVkIGludCBuOwo+ICsJaW50IGVycjsKPiArCj4gKwlpZiAoY291bnQgPT0g MCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiArCj4gKwlpZiAoY291bnQgPT0gMSkK PiArCQlyZXR1cm4gaW50ZWxfY29udGV4dF9jcmVhdGUoY3R4LCBzaWJsaW5nc1swXSk7Cj4gKwo+ ICsJdmUgPSBremFsbG9jKHN0cnVjdF9zaXplKHZlLCBzaWJsaW5ncywgY291bnQpLCBHRlBfS0VS TkVMKTsKPiArCWlmICghdmUpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJ dmUtPmJhc2UuaTkxNSA9IGN0eC0+aTkxNTsKPiArCXZlLT5iYXNlLmlkID0gLTE7Cj4gKwl2ZS0+ YmFzZS5jbGFzcyA9IE9USEVSX0NMQVNTOwo+ICsJdmUtPmJhc2UudWFiaV9jbGFzcyA9IEk5MTVf RU5HSU5FX0NMQVNTX0lOVkFMSUQ7Cj4gKwl2ZS0+YmFzZS5pbnN0YW5jZSA9IEk5MTVfRU5HSU5F X0NMQVNTX0lOVkFMSURfVklSVFVBTDsKPiArCXZlLT5iYXNlLmZsYWdzID0gSTkxNV9FTkdJTkVf SVNfVklSVFVBTDsKPiArCj4gKwlzbnByaW50Zih2ZS0+YmFzZS5uYW1lLCBzaXplb2YodmUtPmJh c2UubmFtZSksICJ2aXJ0dWFsIik7Cj4gKwo+ICsJZXJyID0gaTkxNV90aW1lbGluZV9pbml0KGN0 eC0+aTkxNSwgJnZlLT5iYXNlLnRpbWVsaW5lLCBOVUxMKTsKPiArCWlmIChlcnIpCj4gKwkJZ290 byBlcnJfcHV0Owo+ICsJaTkxNV90aW1lbGluZV9zZXRfc3ViY2xhc3MoJnZlLT5iYXNlLnRpbWVs aW5lLCBUSU1FTElORV9WSVJUVUFMKTsKPiArCj4gKwl2ZS0+YmFzZS5jb3BzID0gJnZpcnR1YWxf Y29udGV4dF9vcHM7Cj4gKwl2ZS0+YmFzZS5yZXF1ZXN0X2FsbG9jID0gZXhlY2xpc3RzX3JlcXVl c3RfYWxsb2M7Cj4gKwo+ICsJdmUtPmJhc2Uuc2NoZWR1bGUgPSBpOTE1X3NjaGVkdWxlOwo+ICsJ dmUtPmJhc2Uuc3VibWl0X3JlcXVlc3QgPSB2aXJ0dWFsX3N1Ym1pdF9yZXF1ZXN0Owo+ICsKPiAr CXZlLT5iYXNlLmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50ID0gSU5UX01JTjsKPiArCXRh c2tsZXRfaW5pdCgmdmUtPmJhc2UuZXhlY2xpc3RzLnRhc2tsZXQsCj4gKwkJICAgICB2aXJ0dWFs X3N1Ym1pc3Npb25fdGFza2xldCwKPiArCQkgICAgICh1bnNpZ25lZCBsb25nKXZlKTsKPiArCj4g KwlpbnRlbF9jb250ZXh0X2luaXQoJnZlLT5jb250ZXh0LCBjdHgsICZ2ZS0+YmFzZSk7Cj4gKwo+ ICsJZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKPiArCQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpzaWJsaW5nID0gc2libGluZ3Nbbl07Cj4gKwo+ICsJCUdFTV9CVUdfT04oIWlzX3Bvd2Vy X29mXzIoc2libGluZy0+bWFzaykpOwo+ICsJCWlmIChzaWJsaW5nLT5tYXNrICYgdmUtPmJhc2Uu bWFzaykgewo+ICsJCQlEUk1fREVCVUcoImR1cGxpY2F0ZSAlcyBlbnRyeSBpbiBsb2FkIGJhbGFu Y2VyXG4iLAo+ICsJCQkJICBzaWJsaW5nLT5uYW1lKTsKPiArCQkJZXJyID0gLUVJTlZBTDsKPiAr CQkJZ290byBlcnJfcHV0Owo+ICsJCX0KPiArCj4gKwkJLyoKPiArCQkgKiBUaGUgdmlydHVhbCBl bmdpbmUgaW1wbGVtZW50YXRpb24gaXMgdGlnaHRseSBjb3VwbGVkIHRvCj4gKwkJICogdGhlIGV4 ZWNsaXN0cyBiYWNrZW5kIC0tIHdlIHB1c2ggb3V0IHJlcXVlc3QgZGlyZWN0bHkKPiArCQkgKiBp bnRvIGEgdHJlZSBpbnNpZGUgZWFjaCBwaHlzaWNhbCBlbmdpbmUuIFdlIGNvdWxkIHN1cHBvcnQK PiArCQkgKiBsYXllcmluZyBpZiB3ZSBoYW5kbGUgY2xvbmluZyBvZiB0aGUgcmVxdWVzdHMgYW5k Cj4gKwkJICogc3VibWl0dGluZyBhIGNvcHkgaW50byBlYWNoIGJhY2tlbmQuCj4gKwkJICovCj4g KwkJaWYgKHNpYmxpbmctPmV4ZWNsaXN0cy50YXNrbGV0LmZ1bmMgIT0KPiArCQkgICAgZXhlY2xp c3RzX3N1Ym1pc3Npb25fdGFza2xldCkgewo+ICsJCQllcnIgPSAtRU5PREVWOwo+ICsJCQlnb3Rv IGVycl9wdXQ7Cj4gKwkJfQo+ICsKPiArCQlHRU1fQlVHX09OKFJCX0VNUFRZX05PREUoJnZlLT5u b2Rlc1tzaWJsaW5nLT5pZF0ucmIpKTsKPiArCQlSQl9DTEVBUl9OT0RFKCZ2ZS0+bm9kZXNbc2li bGluZy0+aWRdLnJiKTsKPiArCj4gKwkJdmUtPnNpYmxpbmdzW3ZlLT5udW1fc2libGluZ3MrK10g PSBzaWJsaW5nOwo+ICsJCXZlLT5iYXNlLm1hc2sgfD0gc2libGluZy0+bWFzazsKPiArCj4gKwkJ LyoKPiArCQkgKiBBbGwgcGh5c2ljYWwgZW5naW5lcyBtdXN0IGJlIGNvbXBhdGlibGUgZm9yIHRo ZWlyIGVtaXNzaW9uCj4gKwkJICogZnVuY3Rpb25zIChhcyB3ZSBidWlsZCB0aGUgaW5zdHJ1Y3Rp b25zIGR1cmluZyByZXF1ZXN0Cj4gKwkJICogY29uc3RydWN0aW9uIGFuZCBkbyBub3QgYWx0ZXIg dGhlbSBiZWZvcmUgc3VibWlzc2lvbgo+ICsJCSAqIG9uIHRoZSBwaHlzaWNhbCBlbmdpbmUpLiBX ZSB1c2UgdGhlIGVuZ2luZSBjbGFzcyBhcyBhIGd1aWRlCj4gKwkJICogaGVyZSwgYWx0aG91Z2gg dGhhdCBjb3VsZCBiZSByZWZpbmVkLgo+ICsJCSAqLwo+ICsJCWlmICh2ZS0+YmFzZS5jbGFzcyAh PSBPVEhFUl9DTEFTUykgewo+ICsJCQlpZiAodmUtPmJhc2UuY2xhc3MgIT0gc2libGluZy0+Y2xh c3MpIHsKPiArCQkJCURSTV9ERUJVRygiaW52YWxpZCBtaXhpbmcgb2YgZW5naW5lIGNsYXNzLCBz aWJsaW5nICVkLCBhbHJlYWR5ICVkXG4iLAo+ICsJCQkJCSAgc2libGluZy0+Y2xhc3MsIHZlLT5i YXNlLmNsYXNzKTsKPiArCQkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJCQlnb3RvIGVycl9wdXQ7Cj4g KwkJCX0KPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQl2ZS0+YmFzZS5jbGFzcyA9IHNp YmxpbmctPmNsYXNzOwo+ICsJCXZlLT5iYXNlLnVhYmlfY2xhc3MgPSBzaWJsaW5nLT51YWJpX2Ns YXNzOwo+ICsJCXNucHJpbnRmKHZlLT5iYXNlLm5hbWUsIHNpemVvZih2ZS0+YmFzZS5uYW1lKSwK PiArCQkJICJ2JWR4JWQiLCB2ZS0+YmFzZS5jbGFzcywgY291bnQpOwo+ICsJCXZlLT5iYXNlLmNv bnRleHRfc2l6ZSA9IHNpYmxpbmctPmNvbnRleHRfc2l6ZTsKPiArCj4gKwkJdmUtPmJhc2UuZW1p dF9iYl9zdGFydCA9IHNpYmxpbmctPmVtaXRfYmJfc3RhcnQ7Cj4gKwkJdmUtPmJhc2UuZW1pdF9m bHVzaCA9IHNpYmxpbmctPmVtaXRfZmx1c2g7Cj4gKwkJdmUtPmJhc2UuZW1pdF9pbml0X2JyZWFk Y3J1bWIgPSBzaWJsaW5nLT5lbWl0X2luaXRfYnJlYWRjcnVtYjsKPiArCQl2ZS0+YmFzZS5lbWl0 X2ZpbmlfYnJlYWRjcnVtYiA9IHNpYmxpbmctPmVtaXRfZmluaV9icmVhZGNydW1iOwo+ICsJCXZl LT5iYXNlLmVtaXRfZmluaV9icmVhZGNydW1iX2R3ID0KPiArCQkJc2libGluZy0+ZW1pdF9maW5p X2JyZWFkY3J1bWJfZHc7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuICZ2ZS0+Y29udGV4dDsKPiArCj4g K2Vycl9wdXQ6Cj4gKwlpbnRlbF9jb250ZXh0X3B1dCgmdmUtPmNvbnRleHQpOwo+ICsJcmV0dXJu IEVSUl9QVFIoZXJyKTsKPiArfQo+ICsKPiArc3RydWN0IGludGVsX2NvbnRleHQgKgo+ICtpbnRl bF9leGVjbGlzdHNfY2xvbmVfdmlydHVhbChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ ICsJCQkgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzcmMpCj4gK3sKPiArCXN0cnVjdCB2 aXJ0dWFsX2VuZ2luZSAqc2UgPSB0b192aXJ0dWFsX2VuZ2luZShzcmMpOwo+ICsJc3RydWN0IGlu dGVsX2NvbnRleHQgKmRzdDsKPiArCj4gKwlkc3QgPSBpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3Zp cnR1YWwoY3R4LAo+ICsJCQkJCSAgICAgc2UtPnNpYmxpbmdzLAo+ICsJCQkJCSAgICAgc2UtPm51 bV9zaWJsaW5ncyk7Cj4gKwlpZiAoSVNfRVJSKGRzdCkpCj4gKwkJcmV0dXJuIGRzdDsKPiArCj4g KwlyZXR1cm4gZHN0Owo+ICt9Cj4gKwo+ICAgdm9pZCBpbnRlbF9leGVjbGlzdHNfc2hvd19yZXF1 ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gICAJCQkJICAgc3RydWN0IGRy bV9wcmludGVyICptLAo+ICAgCQkJCSAgIHZvaWQgKCpzaG93X3JlcXVlc3QpKHN0cnVjdCBkcm1f cHJpbnRlciAqbSwKPiBAQCAtMjgzNiw2ICszNDA2LDI5IEBAIHZvaWQgaW50ZWxfZXhlY2xpc3Rz X3Nob3dfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAgCQlzaG93 X3JlcXVlc3QobSwgbGFzdCwgIlx0XHRRICIpOwo+ICAgCX0KPiAgIAo+ICsJbGFzdCA9IE5VTEw7 Cj4gKwljb3VudCA9IDA7Cj4gKwlmb3IgKHJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVjbGlzdHMt PnZpcnR1YWwpOyByYjsgcmIgPSByYl9uZXh0KHJiKSkgewo+ICsJCXN0cnVjdCB2aXJ0dWFsX2Vu Z2luZSAqdmUgPQo+ICsJCQlyYl9lbnRyeShyYiwgdHlwZW9mKCp2ZSksIG5vZGVzW2VuZ2luZS0+ aWRdLnJiKTsKPiArCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSA9IFJFQURfT05DRSh2ZS0+cmVx dWVzdCk7Cj4gKwo+ICsJCWlmIChycSkgewo+ICsJCQlpZiAoY291bnQrKyA8IG1heCAtIDEpCj4g KwkJCQlzaG93X3JlcXVlc3QobSwgcnEsICJcdFx0ViAiKTsKPiArCQkJZWxzZQo+ICsJCQkJbGFz dCA9IHJxOwo+ICsJCX0KPiArCX0KPiArCWlmIChsYXN0KSB7Cj4gKwkJaWYgKGNvdW50ID4gbWF4 KSB7Cj4gKwkJCWRybV9wcmludGYobSwKPiArCQkJCSAgICJcdFx0Li4uc2tpcHBpbmcgJWQgdmly dHVhbCByZXF1ZXN0cy4uLlxuIiwKPiArCQkJCSAgIGNvdW50IC0gbWF4KTsKPiArCQl9Cj4gKwkJ c2hvd19yZXF1ZXN0KG0sIGxhc3QsICJcdFx0ViAiKTsKPiArCX0KPiArCj4gICAJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmZW5naW5lLT50aW1lbGluZS5sb2NrLCBmbGFncyk7Cj4gICB9Cj4gICAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuaAo+IGluZGV4IGEwZGM5MDdhNzI0OS4uNTUz MDYwNjA1MmU1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xy Yy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmgKPiBAQCAtMTE0 LDQgKzExNCwxMyBAQCB2b2lkIGludGVsX2V4ZWNsaXN0c19zaG93X3JlcXVlc3RzKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgIAkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgpLAo+ ICAgCQkJCSAgIHVuc2lnbmVkIGludCBtYXgpOwo+ICAgCj4gK3N0cnVjdCBpbnRlbF9jb250ZXh0 ICoKPiAraW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKHN0cnVjdCBpOTE1X2dlbV9jb250 ZXh0ICpjdHgsCj4gKwkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoqc2libGluZ3Ms Cj4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY291bnQpOwo+ICsKPiArc3RydWN0IGludGVsX2Nv bnRleHQgKgo+ICtpbnRlbF9leGVjbGlzdHNfY2xvbmVfdmlydHVhbChzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqY3R4LAo+ICsJCQkgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzcmMpOwo+ ICsKPiAgICNlbmRpZiAvKiBfSU5URUxfTFJDX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv c2VsZnRlc3RfbHJjLmMKPiBpbmRleCA4NDUzOGY2OTE4NWIuLmYzNGFhOWUwNDJhMyAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jCj4gQEAgLTEzMDEsNiArMTMwMSwx ODUgQEAgc3RhdGljIGludCBsaXZlX3ByZWVtcHRfc21va2Uodm9pZCAqYXJnKQo+ICAgCXJldHVy biBlcnI7Cj4gICB9Cj4gICAKPiArc3RhdGljIGludCBub3BfdmlydHVhbF9lbmdpbmUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKipzaWJsaW5ncywKPiArCQkJICAgICAgdW5zaWduZWQgaW50IG5zaWJsaW5nLAo+ICsJCQkg ICAgICB1bnNpZ25lZCBpbnQgbmN0eCwKPiArCQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQo+ ICsjZGVmaW5lIENIQUlOIEJJVCgwKQo+ICt7Cj4gKwlJR1RfVElNRU9VVChlbmRfdGltZSk7Cj4g KwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0WzE2XTsKPiArCXN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICpjdHhbMTZdOwo+ICsJc3RydWN0IGludGVsX2NvbnRleHQgKnZlWzE2XTsKPiArCXVu c2lnbmVkIGxvbmcgbiwgcHJpbWUsIG5jOwo+ICsJc3RydWN0IGlndF9saXZlX3Rlc3QgdDsKPiAr CWt0aW1lX3QgdGltZXNbMl0gPSB7fTsKPiArCWludCBlcnI7Cj4gKwo+ICsJR0VNX0JVR19PTigh bmN0eCB8fCBuY3R4ID4gQVJSQVlfU0laRShjdHgpKTsKPiArCj4gKwlmb3IgKG4gPSAwOyBuIDwg bmN0eDsgbisrKSB7Cj4gKwkJY3R4W25dID0ga2VybmVsX2NvbnRleHQoaTkxNSk7Cj4gKwkJaWYg KCFjdHhbbl0pIHsKPiArCQkJZXJyID0gLUVOT01FTTsKPiArCQkJbmN0eCA9IG47Cj4gKwkJCWdv dG8gb3V0Owo+ICsJCX0KPiArCj4gKwkJdmVbbl0gPSBpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3Zp cnR1YWwoY3R4W25dLAo+ICsJCQkJCQkgICAgICAgc2libGluZ3MsIG5zaWJsaW5nKTsKPiArCQlp ZiAoSVNfRVJSKHZlW25dKSkgewo+ICsJCQlrZXJuZWxfY29udGV4dF9jbG9zZShjdHhbbl0pOwo+ ICsJCQllcnIgPSBQVFJfRVJSKHZlW25dKTsKPiArCQkJbmN0eCA9IG47Cj4gKwkJCWdvdG8gb3V0 Owo+ICsJCX0KPiArCj4gKwkJZXJyID0gaW50ZWxfY29udGV4dF9waW4odmVbbl0pOwo+ICsJCWlm IChlcnIpIHsKPiArCQkJaW50ZWxfY29udGV4dF9wdXQodmVbbl0pOwo+ICsJCQlrZXJuZWxfY29u dGV4dF9jbG9zZShjdHhbbl0pOwo+ICsJCQluY3R4ID0gbjsKPiArCQkJZ290byBvdXQ7Cj4gKwkJ fQo+ICsJfQo+ICsKPiArCWVyciA9IGlndF9saXZlX3Rlc3RfYmVnaW4oJnQsIGk5MTUsIF9fZnVu Y19fLCB2ZVswXS0+ZW5naW5lLT5uYW1lKTsKPiArCWlmIChlcnIpCj4gKwkJZ290byBvdXQ7Cj4g Kwo+ICsJZm9yX2VhY2hfcHJpbWVfbnVtYmVyX2Zyb20ocHJpbWUsIDEsIDgxOTIpIHsKPiArCQl0 aW1lc1sxXSA9IGt0aW1lX2dldF9yYXcoKTsKPiArCj4gKwkJaWYgKGZsYWdzICYgQ0hBSU4pIHsK PiArCQkJZm9yIChuYyA9IDA7IG5jIDwgbmN0eDsgbmMrKykgewo+ICsJCQkJZm9yIChuID0gMDsg biA8IHByaW1lOyBuKyspIHsKPiArCQkJCQlyZXF1ZXN0W25jXSA9Cj4gKwkJCQkJCWk5MTVfcmVx dWVzdF9jcmVhdGUodmVbbmNdKTsKPiArCQkJCQlpZiAoSVNfRVJSKHJlcXVlc3RbbmNdKSkgewo+ ICsJCQkJCQllcnIgPSBQVFJfRVJSKHJlcXVlc3RbbmNdKTsKPiArCQkJCQkJZ290byBvdXQ7Cj4g KwkJCQkJfQo+ICsKPiArCQkJCQlpOTE1X3JlcXVlc3RfYWRkKHJlcXVlc3RbbmNdKTsKPiArCQkJ CX0KPiArCQkJfQo+ICsJCX0gZWxzZSB7Cj4gKwkJCWZvciAobiA9IDA7IG4gPCBwcmltZTsgbisr KSB7Cj4gKwkJCQlmb3IgKG5jID0gMDsgbmMgPCBuY3R4OyBuYysrKSB7Cj4gKwkJCQkJcmVxdWVz dFtuY10gPQo+ICsJCQkJCQlpOTE1X3JlcXVlc3RfY3JlYXRlKHZlW25jXSk7Cj4gKwkJCQkJaWYg KElTX0VSUihyZXF1ZXN0W25jXSkpIHsKPiArCQkJCQkJZXJyID0gUFRSX0VSUihyZXF1ZXN0W25j XSk7Cj4gKwkJCQkJCWdvdG8gb3V0Owo+ICsJCQkJCX0KPiArCj4gKwkJCQkJaTkxNV9yZXF1ZXN0 X2FkZChyZXF1ZXN0W25jXSk7Cj4gKwkJCQl9Cj4gKwkJCX0KPiArCQl9Cj4gKwo+ICsJCWZvciAo bmMgPSAwOyBuYyA8IG5jdHg7IG5jKyspIHsKPiArCQkJaWYgKGk5MTVfcmVxdWVzdF93YWl0KHJl cXVlc3RbbmNdLAo+ICsJCQkJCSAgICAgIEk5MTVfV0FJVF9MT0NLRUQsCj4gKwkJCQkJICAgICAg SFogLyAxMCkgPCAwKSB7Cj4gKwkJCQlwcl9lcnIoIiVzKCVzKTogd2FpdCBmb3IgJWxseDolbGxk IHRpbWVkIG91dFxuIiwKPiArCQkJCSAgICAgICBfX2Z1bmNfXywgdmVbMF0tPmVuZ2luZS0+bmFt ZSwKPiArCQkJCSAgICAgICByZXF1ZXN0W25jXS0+ZmVuY2UuY29udGV4dCwKPiArCQkJCSAgICAg ICByZXF1ZXN0W25jXS0+ZmVuY2Uuc2Vxbm8pOwo+ICsKPiArCQkJCUdFTV9UUkFDRSgiJXMoJXMp IGZhaWxlZCBhdCByZXF1ZXN0ICVsbHg6JWxsZFxuIiwKPiArCQkJCQkgIF9fZnVuY19fLCB2ZVsw XS0+ZW5naW5lLT5uYW1lLAo+ICsJCQkJCSAgcmVxdWVzdFtuY10tPmZlbmNlLmNvbnRleHQsCj4g KwkJCQkJICByZXF1ZXN0W25jXS0+ZmVuY2Uuc2Vxbm8pOwo+ICsJCQkJR0VNX1RSQUNFX0RVTVAo KTsKPiArCQkJCWk5MTVfZ2VtX3NldF93ZWRnZWQoaTkxNSk7Cj4gKwkJCQlicmVhazsKPiArCQkJ fQo+ICsJCX0KPiArCj4gKwkJdGltZXNbMV0gPSBrdGltZV9zdWIoa3RpbWVfZ2V0X3JhdygpLCB0 aW1lc1sxXSk7Cj4gKwkJaWYgKHByaW1lID09IDEpCj4gKwkJCXRpbWVzWzBdID0gdGltZXNbMV07 Cj4gKwo+ICsJCWlmIChfX2lndF90aW1lb3V0KGVuZF90aW1lLCBOVUxMKSkKPiArCQkJYnJlYWs7 Cj4gKwl9Cj4gKwo+ICsJZXJyID0gaWd0X2xpdmVfdGVzdF9lbmQoJnQpOwo+ICsJaWYgKGVycikK PiArCQlnb3RvIG91dDsKPiArCj4gKwlwcl9pbmZvKCJSZXF1ZXN0eCVkIGxhdGVuY2llcyBvbiAl czogMSA9ICVsbHVucywgJWx1ID0gJWxsdW5zXG4iLAo+ICsJCW5jdHgsIHZlWzBdLT5lbmdpbmUt Pm5hbWUsIGt0aW1lX3RvX25zKHRpbWVzWzBdKSwKPiArCQlwcmltZSwgZGl2NjRfdTY0KGt0aW1l X3RvX25zKHRpbWVzWzFdKSwgcHJpbWUpKTsKPiArCj4gK291dDoKPiArCWlmIChpZ3RfZmx1c2hf dGVzdChpOTE1LCBJOTE1X1dBSVRfTE9DS0VEKSkKPiArCQllcnIgPSAtRUlPOwo+ICsKPiArCWZv ciAobmMgPSAwOyBuYyA8IG5jdHg7IG5jKyspIHsKPiArCQlpbnRlbF9jb250ZXh0X3VucGluKHZl W25jXSk7Cj4gKwkJaW50ZWxfY29udGV4dF9wdXQodmVbbmNdKTsKPiArCQlrZXJuZWxfY29udGV4 dF9jbG9zZShjdHhbbmNdKTsKPiArCX0KPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgbGl2ZV92aXJ0dWFsX2VuZ2luZSh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gYXJnOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2li bGluZ3NbTUFYX0VOR0lORV9JTlNUQU5DRSArIDFdOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lOwo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gKwl1bnNpZ25lZCBpbnQg Y2xhc3MsIGluc3Q7Cj4gKwlpbnQgZXJyID0gLUVOT0RFVjsKPiArCj4gKwlpZiAoVVNFU19HVUNf U1VCTUlTU0lPTihpOTE1KSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwltdXRleF9sb2NrKCZpOTE1 LT5kcm0uc3RydWN0X211dGV4KTsKPiArCj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1 LCBpZCkgewo+ICsJCWVyciA9IG5vcF92aXJ0dWFsX2VuZ2luZShpOTE1LCAmZW5naW5lLCAxLCAx LCAwKTsKPiArCQlpZiAoZXJyKSB7Cj4gKwkJCXByX2VycigiRmFpbGVkIHRvIHdyYXAgZW5naW5l ICVzOiBlcnI9JWRcbiIsCj4gKwkJCSAgICAgICBlbmdpbmUtPm5hbWUsIGVycik7Cj4gKwkJCWdv dG8gb3V0X3VubG9jazsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZm9yIChjbGFzcyA9IDA7IGNsYXNz IDw9IE1BWF9FTkdJTkVfQ0xBU1M7IGNsYXNzKyspIHsKPiArCQlpbnQgbnNpYmxpbmcsIG47Cj4g Kwo+ICsJCW5zaWJsaW5nID0gMDsKPiArCQlmb3IgKGluc3QgPSAwOyBpbnN0IDw9IE1BWF9FTkdJ TkVfSU5TVEFOQ0U7IGluc3QrKykgewo+ICsJCQlpZiAoIWk5MTUtPmVuZ2luZV9jbGFzc1tjbGFz c11baW5zdF0pCj4gKwkJCQlicmVhazsKPiArCj4gKwkJCXNpYmxpbmdzW25zaWJsaW5nKytdID0g aTkxNS0+ZW5naW5lX2NsYXNzW2NsYXNzXVtpbnN0XTsKPiArCQl9Cj4gKwkJaWYgKG5zaWJsaW5n IDwgMikKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWZvciAobiA9IDE7IG4gPD0gbnNpYmxpbmcg KyAxOyBuKyspIHsKPiArCQkJZXJyID0gbm9wX3ZpcnR1YWxfZW5naW5lKGk5MTUsIHNpYmxpbmdz LCBuc2libGluZywKPiArCQkJCQkJIG4sIDApOwo+ICsJCQlpZiAoZXJyKQo+ICsJCQkJZ290byBv dXRfdW5sb2NrOwo+ICsJCX0KPiArCj4gKwkJZXJyID0gbm9wX3ZpcnR1YWxfZW5naW5lKGk5MTUs IHNpYmxpbmdzLCBuc2libGluZywgbiwgQ0hBSU4pOwo+ICsJCWlmIChlcnIpCj4gKwkJCWdvdG8g b3V0X3VubG9jazsKPiArCX0KPiArCj4gK291dF91bmxvY2s6Cj4gKwltdXRleF91bmxvY2soJmk5 MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiAgIGludCBp bnRlbF9leGVjbGlzdHNfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUpCj4gICB7Cj4gICAJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9 IHsKPiBAQCAtMTMxMyw2ICsxNDkyLDcgQEAgaW50IGludGVsX2V4ZWNsaXN0c19saXZlX3NlbGZ0 ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIAkJU1VCVEVTVChsaXZlX2No YWluX3ByZWVtcHQpLAo+ICAgCQlTVUJURVNUKGxpdmVfcHJlZW1wdF9oYW5nKSwKPiAgIAkJU1VC VEVTVChsaXZlX3ByZWVtcHRfc21va2UpLAo+ICsJCVNVQlRFU1QobGl2ZV92aXJ0dWFsX2VuZ2lu ZSksCj4gICAJfTsKPiAgIAo+ICAgCWlmICghSEFTX0VYRUNMSVNUUyhpOTE1KSkKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmgKPiBpbmRleCA2N2Y4YTRhODA3YTAuLmZlODJkMzU3MTA3MiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5oCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uaAo+IEBAIC05MSw0ICs5MSw5IEBAIHN0YXRpYyBpbmxpbmUg Ym9vbCBfX3Rhc2tsZXRfZW5hYmxlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKPiAgIAlyZXR1 cm4gYXRvbWljX2RlY19hbmRfdGVzdCgmdC0+Y291bnQpOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBp bmxpbmUgYm9vbCBfX3Rhc2tsZXRfaXNfc2NoZWR1bGVkKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAq dCkKPiArewo+ICsJcmV0dXJuIHRlc3RfYml0KFRBU0tMRVRfU1RBVEVfU0NIRUQsICZ0LT5zdGF0 ZSk7Cj4gK30KPiArCj4gICAjZW5kaWYgLyogX19JOTE1X0dFTV9IX18gKi8KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4gaW5kZXggYmE3NTgyZDk1NWQxLi41N2IwOWY2 MjRiYjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4 dC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4gQEAg LTg2LDYgKzg2LDcgQEAKPiAgICAqLwo+ICAgCj4gICAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgo+ ICsjaW5jbHVkZSA8bGludXgvbm9zcGVjLmg+Cj4gICAKPiAgICNpbmNsdWRlIDxkcm0vaTkxNV9k cm0uaD4KPiAgIAo+IEBAIC0xMjA5LDcgKzEyMTAsNiBAQCBfX2ludGVsX2NvbnRleHRfcmVjb25m aWd1cmVfc3NldShzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4gICAJaW50IHJldDsKPiAgIAo+ ICAgCUdFTV9CVUdfT04oSU5URUxfR0VOKGNlLT5nZW1fY29udGV4dC0+aTkxNSkgPCA4KTsKPiAt CUdFTV9CVUdfT04oY2UtPmVuZ2luZS0+aWQgIT0gUkNTMCk7Cj4gICAKPiAgIAlyZXQgPSBpbnRl bF9jb250ZXh0X2xvY2tfcGlubmVkKGNlKTsKPiAgIAlpZiAocmV0KQo+IEBAIC0xMzk3LDcgKzEz OTcsMTAyIEBAIHN0cnVjdCBzZXRfZW5naW5lcyB7Cj4gICAJc3RydWN0IGk5MTVfZ2VtX2VuZ2lu ZXMgKmVuZ2luZXM7Cj4gICB9Owo+ICAgCj4gK3N0YXRpYyBpbnQKPiArc2V0X2VuZ2luZXNfX2xv YWRfYmFsYW5jZShzdHJ1Y3QgaTkxNV91c2VyX2V4dGVuc2lvbiBfX3VzZXIgKmJhc2UsIHZvaWQg KmRhdGEpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2NvbnRleHRfZW5naW5lc19sb2FkX2JhbGFuY2Ug X191c2VyICpleHQgPQo+ICsJCWNvbnRhaW5lcl9vZl91c2VyKGJhc2UsIHR5cGVvZigqZXh0KSwg YmFzZSk7Cj4gKwljb25zdCBzdHJ1Y3Qgc2V0X2VuZ2luZXMgKnNldCA9IGRhdGE7Cj4gKwlzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICpzdGFja1sxNl07Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICoqc2libGluZ3M7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4gKwl1MTYgbnVtX3Np YmxpbmdzLCBpZHg7Cj4gKwl1bnNpZ25lZCBpbnQgbjsKPiArCWludCBlcnI7Cj4gKwo+ICsJaWYg KCFIQVNfRVhFQ0xJU1RTKHNldC0+Y3R4LT5pOTE1KSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiAr Cj4gKwlpZiAoVVNFU19HVUNfU1VCTUlTU0lPTihzZXQtPmN0eC0+aTkxNSkpCj4gKwkJcmV0dXJu IC1FTk9ERVY7IC8qIG5vdCBpbXBsZW1lbnQgeWV0ICovCj4gKwo+ICsJaWYgKGdldF91c2VyKGlk eCwgJmV4dC0+ZW5naW5lX2luZGV4KSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwlpZiAo aWR4ID49IHNldC0+ZW5naW5lcy0+bnVtX2VuZ2luZXMpIHsKPiArCQlEUk1fREVCVUcoIkludmFs aWQgcGxhY2VtZW50IHZhbHVlLCAlZCA+PSAlZFxuIiwKPiArCQkJICBpZHgsIHNldC0+ZW5naW5l cy0+bnVtX2VuZ2luZXMpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWlkeCA9 IGFycmF5X2luZGV4X25vc3BlYyhpZHgsIHNldC0+ZW5naW5lcy0+bnVtX2VuZ2luZXMpOwo+ICsJ aWYgKHNldC0+ZW5naW5lcy0+ZW5naW5lc1tpZHhdKSB7Cj4gKwkJRFJNX0RFQlVHKCJJbnZhbGlk IHBsYWNlbWVudFslZF0sIGFscmVhZHkgb2NjdXBpZWRcbiIsIGlkeCk7Cj4gKwkJcmV0dXJuIC1F RVhJU1Q7Cj4gKwl9Cj4gKwo+ICsJaWYgKGdldF91c2VyKG51bV9zaWJsaW5ncywgJmV4dC0+bnVt X3NpYmxpbmdzKSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwllcnIgPSBjaGVja191c2Vy X21ieigmZXh0LT5mbGFncyk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJ Zm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUoZXh0LT5tYno2NCk7IG4rKykgewo+ICsJCWVyciA9 IGNoZWNrX3VzZXJfbWJ6KCZleHQtPm1iejY0W25dKTsKPiArCQlpZiAoZXJyKQo+ICsJCQlyZXR1 cm4gZXJyOwo+ICsJfQo+ICsKPiArCXNpYmxpbmdzID0gc3RhY2s7Cj4gKwlpZiAobnVtX3NpYmxp bmdzID4gQVJSQVlfU0laRShzdGFjaykpIHsKPiArCQlzaWJsaW5ncyA9IGttYWxsb2NfYXJyYXko bnVtX3NpYmxpbmdzLAo+ICsJCQkJCSBzaXplb2YoKnNpYmxpbmdzKSwKPiArCQkJCQkgR0ZQX0tF Uk5FTCk7Cj4gKwkJaWYgKCFzaWJsaW5ncykKPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4g Kwo+ICsJZm9yIChuID0gMDsgbiA8IG51bV9zaWJsaW5nczsgbisrKSB7Cj4gKwkJc3RydWN0IGk5 MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlIGNpOwo+ICsKPiArCQlpZiAoY29weV9mcm9tX3VzZXIo JmNpLCAmZXh0LT5lbmdpbmVzW25dLCBzaXplb2YoY2kpKSkgewo+ICsJCQllcnIgPSAtRUZBVUxU Owo+ICsJCQlnb3RvIG91dF9zaWJsaW5nczsKPiArCQl9Cj4gKwo+ICsJCXNpYmxpbmdzW25dID0g aW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKHNldC0+Y3R4LT5pOTE1LAo+ICsJCQkJCQkgICAgICAg Y2kuZW5naW5lX2NsYXNzLAo+ICsJCQkJCQkgICAgICAgY2kuZW5naW5lX2luc3RhbmNlKTsKPiAr CQlpZiAoIXNpYmxpbmdzW25dKSB7Cj4gKwkJCURSTV9ERUJVRygiSW52YWxpZCBzaWJsaW5nWyVk XTogeyBjbGFzczolZCwgaW5zdDolZCB9XG4iLAo+ICsJCQkJICBuLCBjaS5lbmdpbmVfY2xhc3Ms IGNpLmVuZ2luZV9pbnN0YW5jZSk7Cj4gKwkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJCWdvdG8gb3V0 X3NpYmxpbmdzOwo+ICsJCX0KPiArCX0KPiArCj4gKwljZSA9IGludGVsX2V4ZWNsaXN0c19jcmVh dGVfdmlydHVhbChzZXQtPmN0eCwgc2libGluZ3MsIG4pOwo+ICsJaWYgKElTX0VSUihjZSkpIHsK PiArCQllcnIgPSBQVFJfRVJSKGNlKTsKPiArCQlnb3RvIG91dF9zaWJsaW5nczsKPiArCX0KPiAr Cj4gKwlpZiAoY21weGNoZygmc2V0LT5lbmdpbmVzLT5lbmdpbmVzW2lkeF0sIE5VTEwsIGNlKSkg ewo+ICsJCWludGVsX2NvbnRleHRfcHV0KGNlKTsKPiArCQllcnIgPSAtRUVYSVNUOwo+ICsJCWdv dG8gb3V0X3NpYmxpbmdzOwo+ICsJfQo+ICsKPiArb3V0X3NpYmxpbmdzOgo+ICsJaWYgKHNpYmxp bmdzICE9IHN0YWNrKQo+ICsJCWtmcmVlKHNpYmxpbmdzKTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ ICt9Cj4gKwo+ICAgc3RhdGljIGNvbnN0IGk5MTVfdXNlcl9leHRlbnNpb25fZm4gc2V0X2VuZ2lu ZXNfX2V4dGVuc2lvbnNbXSA9IHsKPiArCVtJOTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9C QUxBTkNFXSA9IHNldF9lbmdpbmVzX19sb2FkX2JhbGFuY2UsCj4gICB9Owo+ICAgCj4gICBzdGF0 aWMgaW50Cj4gQEAgLTE2OTYsMTQgKzE3OTEsMjkgQEAgc3RhdGljIGludCBjbG9uZV9lbmdpbmVz KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpkc3QsCj4gICAKPiAgIAljbG9uZS0+aTkxNSA9IGRz dC0+aTkxNTsKPiAgIAlmb3IgKG4gPSAwOyBuIDwgZS0+bnVtX2VuZ2luZXM7IG4rKykgewo+ICsJ CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCj4gICAJCWlmICghZS0+ZW5naW5l c1tuXSkgewo+ICAgCQkJY2xvbmUtPmVuZ2luZXNbbl0gPSBOVUxMOwo+ICAgCQkJY29udGludWU7 Cj4gICAJCX0KPiArCQllbmdpbmUgPSBlLT5lbmdpbmVzW25dLT5lbmdpbmU7Cj4gICAKPiAtCQlj bG9uZS0+ZW5naW5lc1tuXSA9Cj4gLQkJCWludGVsX2NvbnRleHRfY3JlYXRlKGRzdCwgZS0+ZW5n aW5lc1tuXS0+ZW5naW5lKTsKPiAtCQlpZiAoIWNsb25lLT5lbmdpbmVzW25dKSB7Cj4gKwkJLyoK PiArCQkgKiBWaXJ0dWFsIGVuZ2luZXMgYXJlIHNpbmdsZXRvbnM7IHRoZXkgY2FuIG9ubHkgZXhp c3QKPiArCQkgKiBpbnNpZGUgYSBzaW5nbGUgY29udGV4dCwgYmVjYXVzZSB0aGV5IGVtYmVkIHRo ZWlyCj4gKwkJICogSFcgY29udGV4dC4uLiBBcyBlYWNoIHZpcnR1YWwgY29udGV4dCBpbXBsaWVz IGEgc2luZ2xlCj4gKwkJICogdGltZWxpbmUgKGVhY2ggZW5naW5lIGNhbiBvbmx5IGRlcXVldWUg YSBzaW5nbGUgcmVxdWVzdAo+ICsJCSAqIGF0IGFueSB0aW1lKSwgaXQgd291bGQgYmUgc3VycHJp c2luZyBmb3IgdHdvIGNvbnRleHRzCj4gKwkJICogdG8gdXNlIHRoZSBzYW1lIGVuZ2luZS4gU28g bGV0J3MgY3JlYXRlIGEgY29weSBvZgo+ICsJCSAqIHRoZSB2aXJ0dWFsIGVuZ2luZSBpbnN0ZWFk Lgo+ICsJCSAqLwo+ICsJCWlmIChpbnRlbF9lbmdpbmVfaXNfdmlydHVhbChlbmdpbmUpKQo+ICsJ CQljbG9uZS0+ZW5naW5lc1tuXSA9Cj4gKwkJCQlpbnRlbF9leGVjbGlzdHNfY2xvbmVfdmlydHVh bChkc3QsIGVuZ2luZSk7Cj4gKwkJZWxzZQo+ICsJCQljbG9uZS0+ZW5naW5lc1tuXSA9IGludGVs X2NvbnRleHRfY3JlYXRlKGRzdCwgZW5naW5lKTsKPiArCQlpZiAoSVNfRVJSX09SX05VTEwoY2xv bmUtPmVuZ2luZXNbbl0pKSB7Cj4gICAJCQlfX2ZyZWVfZW5naW5lcyhjbG9uZSwgbik7Cj4gICAJ CQlnb3RvIGVycl91bmxvY2s7Cj4gICAJCX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9zY2hlZHVsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1 bGVyLmMKPiBpbmRleCAzOWJjNGY1NGUyNzIuLmI1OGQ5YzIzYTg3NiAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYwo+IEBAIC0yNDgsMTcgKzI0OCwyNiBAQCBzY2hlZF9s b2NrX2VuZ2luZShjb25zdCBzdHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpub2RlLAo+ICAgCQkgIHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmxvY2tlZCwKPiAgIAkJICBzdHJ1Y3Qgc2NoZWRfY2FjaGUg KmNhY2hlKQo+ICAgewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gbm9kZV90 b19yZXF1ZXN0KG5vZGUpLT5lbmdpbmU7Cj4gKwljb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSA9IG5vZGVfdG9fcmVxdWVzdChub2RlKTsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZTsKPiAgIAo+ICAgCUdFTV9CVUdfT04oIWxvY2tlZCk7Cj4gICAKPiAtCWlmIChlbmdpbmUg IT0gbG9ja2VkKSB7Cj4gKwkvKgo+ICsJICogVmlydHVhbCBlbmdpbmVzIGNvbXBsaWNhdGUgYWNx dWlyaW5nIHRoZSBlbmdpbmUgdGltZWxpbmUgbG9jaywKPiArCSAqIGFzIHRoZWlyIHJxLT5lbmdp bmUgcG9pbnRlciBpcyBub3Qgc3RhYmxlIHVudGlsIHVuZGVyIHRoYXQKPiArCSAqIGVuZ2luZSBs b2NrLiBUaGUgc2ltcGxlIHBsb3kgd2UgdXNlIGlzIHRvIHRha2UgdGhlIGxvY2sgdGhlbgo+ICsJ ICogY2hlY2sgdGhhdCB0aGUgcnEgc3RpbGwgYmVsb25ncyB0byB0aGUgbmV3bHkgbG9ja2VkIGVu Z2luZS4KPiArCSAqLwo+ICsJd2hpbGUgKGxvY2tlZCAhPSAoZW5naW5lID0gUkVBRF9PTkNFKHJx LT5lbmdpbmUpKSkgewo+ICAgCQlzcGluX3VubG9jaygmbG9ja2VkLT50aW1lbGluZS5sb2NrKTsK PiAgIAkJbWVtc2V0KGNhY2hlLCAwLCBzaXplb2YoKmNhY2hlKSk7Cj4gICAJCXNwaW5fbG9jaygm ZW5naW5lLT50aW1lbGluZS5sb2NrKTsKPiArCQlsb2NrZWQgPSBlbmdpbmU7Cj4gICAJfQo+ICAg Cj4gLQlyZXR1cm4gZW5naW5lOwo+ICsJR0VNX0JVR19PTihsb2NrZWQgIT0gZW5naW5lKTsKPiAr CXJldHVybiBsb2NrZWQ7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBib29sIGluZmxpZ2h0KGNvbnN0 IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+IEBAIC0zNzEsOCArMzgwLDExIEBAIHN0YXRpYyB2 b2lkIF9faTkxNV9zY2hlZHVsZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgIAkJaWYgKHBy aW8gPD0gbm9kZS0+YXR0ci5wcmlvcml0eSB8fCBub2RlX3NpZ25hbGVkKG5vZGUpKQo+ICAgCQkJ Y29udGludWU7Cj4gICAKPiArCQlHRU1fQlVHX09OKG5vZGVfdG9fcmVxdWVzdChub2RlKS0+ZW5n aW5lICE9IGVuZ2luZSk7Cj4gKwo+ICAgCQlub2RlLT5hdHRyLnByaW9yaXR5ID0gcHJpbzsKPiAg IAkJaWYgKCFsaXN0X2VtcHR5KCZub2RlLT5saW5rKSkgewo+ICsJCQlHRU1fQlVHX09OKGludGVs X2VuZ2luZV9pc192aXJ0dWFsKGVuZ2luZSkpOwo+ICAgCQkJaWYgKCFjYWNoZS5wcmlvbGlzdCkK PiAgIAkJCQljYWNoZS5wcmlvbGlzdCA9Cj4gICAJCQkJCWk5MTVfc2NoZWRfbG9va3VwX3ByaW9s aXN0KGVuZ2luZSwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1l bGluZV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1lbGluZV90eXBlcy5o Cj4gaW5kZXggNTI1NmEwYjVjNWY3Li4xNjg4NzA1ZjRhMmIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV90aW1lbGluZV90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV90aW1lbGluZV90eXBlcy5oCj4gQEAgLTI2LDYgKzI2LDcgQEAgc3RydWN0 IGk5MTVfdGltZWxpbmUgewo+ICAgCXNwaW5sb2NrX3QgbG9jazsKPiAgICNkZWZpbmUgVElNRUxJ TkVfQ0xJRU5UIDAgLyogZGVmYXVsdCBzdWJjbGFzcyAqLwo+ICAgI2RlZmluZSBUSU1FTElORV9F TkdJTkUgMQo+ICsjZGVmaW5lIFRJTUVMSU5FX1ZJUlRVQUwgMgo+ICAgCXN0cnVjdCBtdXRleCBt dXRleDsgLyogcHJvdGVjdHMgdGhlIGZsb3cgb2YgcmVxdWVzdHMgKi8KPiAgIAo+ICAgCXVuc2ln bmVkIGludCBwaW5fY291bnQ7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9k cm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+IGluZGV4IDc2OTQxMTMzNjJkNC4u ZmYyYWJhYmMwOTg0IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+ ICsrKyBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+IEBAIC0xMzcsNiArMTM3LDcgQEAg c3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlIHsKPiAgIAlfX3UxNiBlbmdpbmVfY2xh c3M7IC8qIHNlZSBlbnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3MgKi8KPiAgIAlfX3UxNiBl bmdpbmVfaW5zdGFuY2U7Cj4gICAjZGVmaW5lIEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSURfTk9O RSAtMQo+ICsjZGVmaW5lIEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSURfVklSVFVBTCAtMgo+ICAg fTsKPiAgIAo+ICAgLyoqCj4gQEAgLTE2MDcsOCArMTYwOCw0NiBAQCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2NvbnRleHRfcGFyYW1fc3NldSB7Cj4gICAJX191MzIgcnN2ZDsKPiAgIH07Cj4gICAKPiAr LyoKPiArICogaTkxNV9jb250ZXh0X2VuZ2luZXNfbG9hZF9iYWxhbmNlOgo+ICsgKgo+ICsgKiBF bmFibGUgbG9hZCBiYWxhbmNpbmcgYWNyb3NzIHRoaXMgc2V0IG9mIGVuZ2luZXMuCj4gKyAqCj4g KyAqIEludG8gdGhlIEk5MTVfRVhFQ19ERUZBVUxUIHNsb3QgWzBdLCBhIHZpcnR1YWwgZW5naW5l IGlzIGNyZWF0ZWQgdGhhdCB3aGVuCj4gKyAqIHVzZWQgd2lsbCBwcm94eSB0aGUgZXhlY2J1ZmZl ciByZXF1ZXN0IG9udG8gb25lIG9mIHRoZSBzZXQgb2YgZW5naW5lcwo+ICsgKiBpbiBzdWNoIGEg d2F5IGFzIHRvIGRpc3RyaWJ1dGUgdGhlIGxvYWQgZXZlbmx5IGFjcm9zcyB0aGUgc2V0Lgo+ICsg Kgo+ICsgKiBUaGUgc2V0IG9mIGVuZ2luZXMgbXVzdCBiZSBjb21wYXRpYmxlIChlLmcuIHRoZSBz YW1lIEhXIGNsYXNzKSBhcyB0aGV5Cj4gKyAqIHdpbGwgc2hhcmUgdGhlIHNhbWUgbG9naWNhbCBH UFUgY29udGV4dCBhbmQgcmluZy4KPiArICoKPiArICogVG8gaW50ZXJtaXggcmVuZGVyaW5nIHdp dGggdGhlIHZpcnR1YWwgZW5naW5lIGFuZCBkaXJlY3QgcmVuZGVyaW5nIG9udG8KPiArICogdGhl IGJhY2tpbmcgZW5naW5lcyAoYnlwYXNzaW5nIHRoZSBsb2FkIGJhbGFuY2luZyBwcm94eSksIHRo ZSBjb250ZXh0IG11c3QKPiArICogYmUgZGVmaW5lZCB0byB1c2UgYSBzaW5nbGUgdGltZWxpbmUg Zm9yIGFsbCBlbmdpbmVzLgo+ICsgKi8KPiArc3RydWN0IGk5MTVfY29udGV4dF9lbmdpbmVzX2xv YWRfYmFsYW5jZSB7Cj4gKwlzdHJ1Y3QgaTkxNV91c2VyX2V4dGVuc2lvbiBiYXNlOwo+ICsKPiAr CV9fdTE2IGVuZ2luZV9pbmRleDsKPiArCV9fdTE2IG51bV9zaWJsaW5nczsKPiArCV9fdTMyIGZs YWdzOyAvKiBhbGwgdW5kZWZpbmVkIGZsYWdzIG11c3QgYmUgemVybyAqLwo+ICsKPiArCV9fdTY0 IG1iejY0WzFdOyAvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvICovCgpX aHkgYW4gYXJyYXkgaWYgb25seSBvbmU/IFNob3VsZCB3ZSBhZGQgYSBmZXcgbW9yZSBqdXN0IGlu IGNhc2U/Cgo+ICsKPiArCXN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSBlbmdpbmVz WzBdOwo+ICt9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwo+ICsKPiArI2RlZmluZSBJOTE1X0RF RklORV9DT05URVhUX0VOR0lORVNfTE9BRF9CQUxBTkNFKG5hbWVfXywgTl9fKSBzdHJ1Y3QgeyBc Cj4gKwlzdHJ1Y3QgaTkxNV91c2VyX2V4dGVuc2lvbiBiYXNlOyBcCj4gKwlfX3UxNiBlbmdpbmVf aW5kZXg7IFwKPiArCV9fdTE2IG51bV9zaWJsaW5nczsgXAo+ICsJX191MzIgZmxhZ3M7IFwKPiAr CV9fdTY0IG1iejY0WzFdOyBcCj4gKwlzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2Ug ZW5naW5lc1tOX19dOyBcCj4gK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbmFtZV9fCj4gKwo+ ICAgc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVzIHsKPiAgIAlfX3U2NCBleHRlbnNp b25zOyAvKiBsaW5rZWQgY2hhaW4gb2YgZXh0ZW5zaW9uIGJsb2NrcywgMCB0ZXJtaW5hdGVzICov Cj4gKyNkZWZpbmUgSTkxNV9DT05URVhUX0VOR0lORVNfRVhUX0xPQURfQkFMQU5DRSAwIC8qIHNl ZSBpOTE1X2NvbnRleHRfZW5naW5lc19sb2FkX2JhbGFuY2UgKi8KPiAgIAlzdHJ1Y3QgaTkxNV9l bmdpbmVfY2xhc3NfaW5zdGFuY2UgZW5naW5lc1swXTsKPiAgIH0gX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7Cj4gICAKPiAKClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4