From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 06/21] drm/i915: Slaughter the thundering i915_wait_request herd Date: Mon, 6 Jun 2016 14:58:00 +0100 Message-ID: <57558168.6020602@linux.intel.com> References: <1464970133-29859-1-git-send-email-chris@chris-wilson.co.uk> <1464970133-29859-7-git-send-email-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 mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id D7D5C6E53D for ; Mon, 6 Jun 2016 13:58:03 +0000 (UTC) In-Reply-To: <1464970133-29859-7-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: "Goel, Akash" List-Id: intel-gfx@lists.freedesktop.org Ck9uIDAzLzA2LzE2IDE3OjA4LCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4gT25lIHBhcnRpY3VsYXJs eSBzdHJlc3NmdWwgc2NlbmFyaW8gY29uc2lzdHMgb2YgbWFueSBpbmRlcGVuZGVudCB0YXNrcwo+ IGFsbCBjb21wZXRpbmcgZm9yIEdQVSB0aW1lIGFuZCB3YWl0aW5nIHVwb24gdGhlIHJlc3VsdHMg KGUuZy4gcmVhbHRpbWUKPiB0cmFuc2NvZGluZyBvZiBtYW55LCBtYW55IHN0cmVhbXMpLiBPbmUg Ym90dGxlbmVjayBpbiBwYXJ0aWN1bGFyIGlzIHRoYXQKPiBlYWNoIGNsaWVudCB3YWl0cyBvbiBp dHMgb3duIHJlc3VsdHMsIGJ1dCBldmVyeSBjbGllbnQgaXMgd29rZW4gdXAgYWZ0ZXIKPiBldmVy eSBiYXRjaGJ1ZmZlciAtIGhlbmNlIHRoZSB0aHVuZGVyIG9mIGhvb3ZlcyBhcyB0aGVuIGV2ZXJ5 IGNsaWVudCBtdXN0Cj4gZG8gaXRzIGhlYXZ5d2VpZ2h0IGRhbmNlIHRvIHJlYWQgYSBjb2hlcmVu dCBzZXFubyB0byBzZWUgaWYgaXQgaXMgdGhlCj4gbHVja3kgb25lLgo+Cj4gSWRlYWxseSwgd2Ug b25seSB3YW50IG9uZSBjbGllbnQgdG8gd2FrZSB1cCBhZnRlciB0aGUgaW50ZXJydXB0IGFuZAo+ IGNoZWNrIGl0cyByZXF1ZXN0IGZvciBjb21wbGV0aW9uLiBTaW5jZSB0aGUgcmVxdWVzdHMgbXVz dCByZXRpcmUgaW4KPiBvcmRlciwgd2UgY2FuIHNlbGVjdCB0aGUgZmlyc3QgY2xpZW50IG9uIHRo ZSBvbGRlc3QgcmVxdWVzdCB0byBiZSB3b2tlbi4KPiBPbmNlIHRoYXQgY2xpZW50IGhhcyBjb21w bGV0ZWQgaGlzIHdhaXQsIHdlIGNhbiB0aGVuIHdha2UgdXAgdGhlCj4gbmV4dCBjbGllbnQgYW5k IHNvIG9uLiBIb3dldmVyLCBhbGwgY2xpZW50cyB0aGVuIGluY3VyIGxhdGVuY3kgYXMgZXZlcnkK PiBwcm9jZXNzIGluIHRoZSBjaGFpbiBtYXkgYmUgZGVsYXllZCBmb3Igc2NoZWR1bGluZyAtIHRo aXMgbWF5IGFsc28gdGhlbgo+IGNhdXNlIHNvbWUgcHJpb3JpdHkgaW52ZXJzaW9uLiBUbyByZWR1 Y2UgdGhlIGxhdGVuY3ksIHdoZW4gYSBjbGllbnQKPiBpcyBhZGRlZCBvciByZW1vdmVkIGZyb20g dGhlIGxpc3QsIHdlIHNjYW4gdGhlIHRyZWUgZm9yIGNvbXBsZXRlZAo+IHNlcW5vIGFuZCB3YWtl IHVwIGFsbCB0aGUgY29tcGxldGVkIHdhaXRlcnMgaW4gcGFyYWxsZWwuCj4KPiBVc2luZyBpZ3Qv YmVuY2htYXJrcy9nZW1fbGF0ZW5jeSwgd2UgY2FuIGRlbW9uc3RyYXRlIHRoaXMgZWZmZWN0LiBU aGUKPiBiZW5jaG1hcmsgbWVhc3VyZXMgdGhlIG51bWJlciBvZiBHUFUgY3ljbGVzIGJldHdlZW4g Y29tcGxldGlvbiBvZiBhCj4gYmF0Y2ggYW5kIHRoZSBjbGllbnQgd2FraW5nIHVwIGZyb20gYSBj YWxsIHRvIHdhaXQtaW9jdGwuIFdpdGggbWFueQo+IGNvbmN1cnJlbnQgd2FpdGVycywgd2l0aCBl YWNoIG9uIGEgZGlmZmVyZW50IHJlcXVlc3QsIHdlIG9ic2VydmUgdGhhdAo+IHRoZSB3YWtldXAg bGF0ZW5jeSBiZWZvcmUgdGhlIHBhdGNoIHNjYWxlcyBuZWFybHkgbGluZWFybHkgd2l0aCB0aGUK PiBudW1iZXIgb2Ygd2FpdGVycyAoYmVmb3JlIGV4dGVybmFsIGZhY3RvcnMga2ljayBpbiBtYWtp bmcgdGhlIHNjYWxpbmcgbXVjaAo+IHdvcnNlKS4gQWZ0ZXIgYXBwbHlpbmcgdGhlIHBhdGNoLCB3 ZSBjYW4gc2VlIHRoYXQgb25seSB0aGUgc2luZ2xlIHdhaXRlcgo+IGZvciB0aGUgcmVxdWVzdCBp cyBiZWluZyB3b2tlbiB1cCwgcHJvdmlkaW5nIGEgY29uc3RhbnQgd2FrZXVwIGxhdGVuY3kKPiBm b3IgZXZlcnkgb3BlcmF0aW9uLiBIb3dldmVyLCB0aGUgc2l0dWF0aW9uIGlzIG5vdCBxdWl0ZSBh cyByb3N5IGZvcgo+IG1hbnkgd2FpdGVycyBvbiB0aGUgc2FtZSByZXF1ZXN0LCB0aG91Z2ggdG8g dGhlIGJlc3Qgb2YgbXkga25vd2xlZGdlIHRoaXMKPiBpcyBtdWNoIGxlc3MgbGlrZWx5IGluIHBy YWN0aWNlLiBIZXJlLCB3ZSBjYW4gb2JzZXJ2ZSB0aGF0IHRoZQo+IGNvbmN1cnJlbnQgd2FpdGVy cyBpbmN1ciBleHRyYSBsYXRlbmN5IGZyb20gYmVpbmcgd29rZW4gdXAgYnkgdGhlCj4gc29saXRh cnkgYm90dG9tLWhhbGYsIHJhdGhlciB0aGFuIGRpcmVjdGx5IGJ5IHRoZSBpbnRlcnJ1cHQuIFRo aXMKPiBhcHBlYXJzIHRvIGJlIHNjaGVkdWxlciBpbmR1Y2VkIChoYXZpbmcgZGlzY291bnRlZCBh ZHZlcnNlIGVmZmVjdHMgZnJvbQo+IGhhdmluZyBhIHJidHJlZSB3YWxrL2VyYXNlIGluIHRoZSB3 YWtldXAgcGF0aCksIGVhY2ggYWRkaXRpb25hbAo+IHdha2VfdXBfcHJvY2VzcygpIGNvc3RzIGFw cHJveGltYXRlbHkgMXVzIG9uIGJpZyBjb3JlLiBBbm90aGVyIGVmZmVjdCBvZgo+IHBlcmZvcm1p bmcgdGhlIHNlY29uZGFyeSB3YWtldXBzIGZyb20gdGhlIGZpcnN0IGJvdHRvbS1oYWxmIGlzIHRo ZQo+IGluY3VycmVkIGRlbGF5IHRoaXMgaW1wb3NlcyBvbiBoaWdoIHByaW9yaXR5IHRocmVhZHMg LSByYXRoZXIgdGhhbgo+IGltbWVkaWF0ZWx5IHJldHVybmluZyB0byB1c2Vyc3BhY2UgYW5kIGxl YXZpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyIHRvCj4gd2FrZSB0aGUgb3RoZXJzLgo+Cj4gVG8g b2Zmc2V0IHRoZSBkZWxheSBpbmN1cnJlZCB3aXRoIGFkZGl0aW9uYWwgd2FpdGVycyBvbiBhIHJl cXVlc3QsIHdlCj4gY291bGQgdXNlIGEgaHlicmlkIHNjaGVtZSB0aGF0IGRpZCBhIHF1aWNrIHJl YWQgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyCj4gYW5kIGRlcXVldWVkIGFsbCB0aGUgY29tcGxl dGVkIHdhaXRlcnMgKGluY3VycmluZyB0aGUgb3ZlcmhlYWQgaW4gdGhlCj4gaW50ZXJydXB0IGhh bmRsZXIsIG5vdCB0aGUgYmVzdCBwbGFuIGVpdGhlciBhcyB3ZSB0aGVuIGluY3VyIEdQVQo+IHN1 Ym1pc3Npb24gbGF0ZW5jeSkgYnV0IHdlIHdvdWxkIHN0aWxsIGhhdmUgdG8gd2FrZSB1cCB0aGUg Ym90dG9tLWhhbGYKPiBldmVyeSB0aW1lIHRvIGRvIHRoZSBoZWF2eXdlaWdodCBzbG93IHJlYWQu IE9yIHdlIGNvdWxkIG9ubHkga2ljayB0aGUKPiB3YWl0ZXJzIG9uIHRoZSBzZXFubyB3aXRoIHRo ZSBzYW1lIHByaW9yaXR5IGFzIHRoZSBjdXJyZW50IHRhc2sgKGkuZS4gaW4KPiB0aGUgcmVhbHRp bWUgd2FpdGVyIHNjZW5hcmlvLCBvbmx5IGl0IGlzIHdva2VuIHVwIGltbWVkaWF0ZWx5IGJ5IHRo ZQo+IGludGVycnVwdCBhbmQgc2ltcGx5IHF1ZXVlcyB0aGUgbmV4dCB3YWl0ZXIgYmVmb3JlIHJl dHVybmluZyB0byB1c2Vyc3BhY2UsCj4gbWluaW1pc2luZyBpdHMgZGVsYXkgYXQgdGhlIGV4cGVu c2Ugb2YgdGhlIGNoYWluLCBhbmQgYWxzbyByZWR1Y2luZwo+IGNvbnRlbnRpb24gb24gaXRzIHNj aGVkdWxlciBydW5xdWV1ZSkuIFRoaXMgaXMgZWZmZWN0aXZlIGF0IGF2b2lkIGxvbmcKPiBwYXVz ZXMgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCBhdCBhdm9pZGluZyB0aGUgZXh0cmEgbGF0 ZW5jeSBpbgo+IHJlYWx0aW1lL2hpZ2gtcHJpb3JpdHkgd2FpdGVycy4KPgo+IHYyOiBDb252ZXJ0 IGZyb20gYSBrd29ya2VyIHBlciBlbmdpbmUgaW50byBhIGRlZGljYXRlZCBrdGhyZWFkIGZvciB0 aGUKPiBib3R0b20taGFsZi4KPiB2MzogUmVuYW1lIHJlcXVlc3QgbWVtYmVycyBhbmQgdHdlYWsg Y29tbWVudHMuCj4gdjQ6IFVzZSBhIHBlci1lbmdpbmUgc3BpbmxvY2sgaW4gdGhlIGJyZWFkY3J1 bWJzIGJvdHRvbS1oYWxmLgo+IHY1OiBGaXggcmFjZSBpbiBsb2NrbGVzc2x5IGNoZWNraW5nIHdh aXRlciBzdGF0dXMgYW5kIGtpY2tpbmcgdGhlIHRhc2sgb24KPiBhZGRpbmcgYSBuZXcgd2FpdGVy Lgo+IHY2OiBGaXggZGVjaWRpbmcgd2hlbiB0byBmb3JjZSB0aGUgdGltZXIgdG8gaGlkZSBtaXNz aW5nIGludGVycnVwdHMuCj4gdjc6IE1vdmUgdGhlIGJvdHRvbS1oYWxmIGZyb20gdGhlIGt0aHJl YWQgdG8gdGhlIGZpcnN0IGNsaWVudCBwcm9jZXNzLgo+IHY4OiBSZXdvcmQgYSBmZXcgY29tbWVu dHMKPiB2OTogQnJlYWsgdGhlIGJ1c3kgbG9vcCB3aGVuIHRoZSBpbnRlcnJ1cHQgaXMgdW5tYXNr ZWQgb3IgaGFzIGZpcmVkLgo+IHYxMDogQ29tbWVudHMsIHVubmVjZXNzYXJ5IGNodXJuLCBiZXR0 ZXIgZGVidWdnaW5nIGZyb20gVHZydGtvCj4gdjExOiBXYWtlIGFsbCBjb21wbGV0ZWQgd2FpdGVy cyBvbiByZW1vdmluZyB0aGUgY3VycmVudCBib3R0b20taGFsZiB0bwo+IHJlZHVjZSB0aGUgbGF0 ZW5jeSBvZiB3YWtpbmcgdXAgYSBoZXJkIG9mIGNsaWVudHMgYWxsIHdhaXRpbmcgb24gdGhlCj4g c2FtZSByZXF1ZXN0Lgo+IHYxMjogUmVhcnJhbmdlIG1pc3NlZC1pbnRlcnJ1cHQgZmF1bHQgaW5q ZWN0aW9uIHNvIHRoYXQgaXQgd29ya3Mgd2l0aAo+IGlndC9kcnZfbWlzc2VkX2lycV9oYW5nCj4g djEzOiBSZW5hbWUgaW50ZWxfYnJlYWRjcnVtYiBhbmQgZnJpZW5kcyB0byBpbnRlbF93YWl0IGlu IHByZXBhcmF0aW9uCj4gZm9yIHNpZ25hbCBoYW5kbGluZy4KPiB2MTQ6IFJDVSBjb21tZW50YXJ5 LCBhc3NlcnRfc3Bpbl9sb2NrZWQKPiB2MTU6IEhpZGUgQlVHX09OIGJlaGluZCB0aGUgY29tcGls ZXI7IHJlcG9ydCBvbiBnZW1fbGF0ZW5jeSBmaW5kaW5ncy4KPiB2MTY6IFNvcnQgc2Vxbm8tZ3Jv dXBzIGJ5IHByaW9yaXR5IHNvIHRoYXQgZmlyc3Qtd2FpdGVyIGhhcyB0aGUgaGlnaGVzdAo+IHRh c2sgcHJpb3JpdHkgKGFuZCBzbyBhdm9pZCBwcmlvcml0eSBpbnZlcnNpb24pLgo+IHYxNzogQWRk IHdhaXRlcnMgdG8gcG9zdC1tb3J0ZW0gR1BVIGhhbmcgc3RhdGUuCj4KPiBUZXN0Y2FzZTogaWd0 L2dlbV9jb25jdXJyZW50X2JsaXQKPiBUZXN0Y2FzZTogaWd0L2JlbmNobWFya3MvZ2VtX2xhdGVu Y3kKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51 az4KPiBDYzogIlJvZ296aGtpbiwgRG1pdHJ5IFYiIDxkbWl0cnkudi5yb2dvemhraW5AaW50ZWwu Y29tPgo+IENjOiAiR29uZywgWmhpcGVuZyIgPHpoaXBlbmcuZ29uZ0BpbnRlbC5jb20+Cj4gQ2M6 IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBsaW51eC5pbnRlbC5jb20+Cj4gQ2M6IERh dmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBpbnRlbC5jb20+Cj4gQ2M6ICJHb2VsLCBBa2FzaCIg PGFrYXNoLmdvZWxAaW50ZWwuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUgICAgICAgICAgICB8ICAgMSArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rl YnVnZnMuYyAgICAgIHwgIDE1ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o ICAgICAgICAgIHwgIDM5ICsrKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMg ICAgICAgICAgfCAxNDEgKysrKystLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dwdV9lcnJvci5jICAgIHwgIDU5ICsrKysrLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9pcnEuYyAgICAgICAgICB8ICAyMCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf YnJlYWRjcnVtYnMuYyB8IDM1NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyAgICAgICAgIHwgICA0ICstCj4gICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgIHwgICAzICstCj4gICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggIHwgIDY4ICsrKysrLQo+ICAgMTAgZmls ZXMgY2hhbmdlZCwgNTk1IGluc2VydGlvbnMoKyksIDEwOSBkZWxldGlvbnMoLSkKPiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9icmVhZGNydW1icy5jCj4K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IDdhZWNkMzA5NjA0Yy4uZjIwMDA3NDQwODIxIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtMzgsNiArMzgsNyBAQCBpOTE1LXkgKz0gaTkx NV9jbWRfcGFyc2VyLm8gXAo+ICAgCSAgaTkxNV9nZW1fdXNlcnB0ci5vIFwKPiAgIAkgIGk5MTVf Z3B1X2Vycm9yLm8gXAo+ICAgCSAgaTkxNV90cmFjZV9wb2ludHMubyBcCj4gKwkgIGludGVsX2Jy ZWFkY3J1bWJzLm8gXAo+ICAgCSAgaW50ZWxfbHJjLm8gXAo+ICAgCSAgaW50ZWxfbW9jcy5vIFwK PiAgIAkgIGludGVsX3JpbmdidWZmZXIubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2Zz LmMKPiBpbmRleCAzYTBiYWJlMzI2MjEuLjQ4NjgzNTM4YjRlMiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZGVidWdmcy5jCj4gQEAgLTc4OCwxMCArNzg4LDIxIEBAIHN0YXRpYyBpbnQgaTkx NV9nZW1fcmVxdWVzdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiAgIHN0 YXRpYyB2b2lkIGk5MTVfcmluZ19zZXFub19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwKPiAgIAkJ CQkgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+ICsJc3RydWN0IGludGVs X2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Cj4gKwlzdHJ1Y3QgcmJfbm9k ZSAqcmI7Cj4gKwo+ICAgCXNlcV9wcmludGYobSwgIkN1cnJlbnQgc2VxdWVuY2UgKCVzKTogJXhc biIsCj4gICAJCSAgIGVuZ2luZS0+bmFtZSwgZW5naW5lLT5nZXRfc2Vxbm8oZW5naW5lKSk7Cj4g ICAJc2VxX3ByaW50ZihtLCAiQ3VycmVudCB1c2VyIGludGVycnVwdHMgKCVzKTogJXhcbiIsCj4g ICAJCSAgIGVuZ2luZS0+bmFtZSwgUkVBRF9PTkNFKGVuZ2luZS0+dXNlcl9pbnRlcnJ1cHRzKSk7 Cj4gKwo+ICsJc3Bpbl9sb2NrKCZiLT5sb2NrKTsKPiArCWZvciAocmIgPSByYl9maXJzdCgmYi0+ d2FpdGVycyk7IHJiICE9IE5VTEw7IHJiID0gcmJfbmV4dChyYikpIHsKPiArCQlzdHJ1Y3QgaW50 ZWxfd2FpdCAqdyA9IGNvbnRhaW5lcl9vZihyYiwgdHlwZW9mKCp3KSwgbm9kZSk7Cj4gKwkJc2Vx X3ByaW50ZihtLCAiV2FpdGluZyAoJXMpOiAlcyBbJWRdIG9uICV4XG4iLAo+ICsJCQkgICBlbmdp bmUtPm5hbWUsIHctPnRhc2stPmNvbW0sIHctPnRhc2stPnBpZCwgdy0+c2Vxbm8pOwo+ICsJfQo+ ICsJc3Bpbl91bmxvY2soJmItPmxvY2spOwo+ICAgfQo+Cj4gICBzdGF0aWMgaW50IGk5MTVfZ2Vt X3NlcW5vX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+IEBAIC0xNDI2LDYg KzE0MzcsOCBAQCBzdGF0aWMgaW50IGk5MTVfaGFuZ2NoZWNrX2luZm8oc3RydWN0IHNlcV9maWxl ICptLCB2b2lkICp1bnVzZWQpCj4gICAJCQkgICBlbmdpbmUtPmhhbmdjaGVjay5zZXFubywKPiAg IAkJCSAgIHNlcW5vW2lkXSwKPiAgIAkJCSAgIGVuZ2luZS0+bGFzdF9zdWJtaXR0ZWRfc2Vxbm8p Owo+ICsJCXNlcV9wcmludGYobSwgIlx0d2FpdGVycz8gJWRcbiIsCj4gKwkJCSAgIGludGVsX2Vu Z2luZV9oYXNfd2FpdGVyKGVuZ2luZSkpOwo+ICAgCQlzZXFfcHJpbnRmKG0sICJcdHVzZXIgaW50 ZXJydXB0cyA9ICV4IFtjdXJyZW50ICV4XVxuIiwKPiAgIAkJCSAgIGVuZ2luZS0+aGFuZ2NoZWNr LnVzZXJfaW50ZXJydXB0cywKPiAgIAkJCSAgIFJFQURfT05DRShlbmdpbmUtPnVzZXJfaW50ZXJy dXB0cykpOwo+IEBAIC0yNDExLDcgKzI0MjQsNyBAQCBzdGF0aWMgaW50IGNvdW50X2lycV93YWl0 ZXJzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgCWludCBjb3VudCA9IDA7Cj4K PiAgIAlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1KQo+IC0JCWNvdW50ICs9IGVuZ2luZS0+ aXJxX3JlZmNvdW50Owo+ICsJCWNvdW50ICs9IGludGVsX2VuZ2luZV9oYXNfd2FpdGVyKGVuZ2lu ZSk7Cj4KPiAgIAlyZXR1cm4gY291bnQ7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4g aW5kZXggZTM5OWU5Nzk2NWUwLi42OGIzODNkOTg0NTcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKPiBAQCAtNTAzLDYgKzUwMyw3IEBAIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZSB7 Cj4gICAJCWJvb2wgdmFsaWQ7Cj4gICAJCS8qIFNvZnR3YXJlIHRyYWNrZWQgc3RhdGUgKi8KPiAg IAkJYm9vbCB3YWl0aW5nOwo+ICsJCWludCBudW1fd2FpdGVyczsKPiAgIAkJaW50IGhhbmdjaGVj a19zY29yZTsKPiAgIAkJZW51bSBpbnRlbF9yaW5nX2hhbmdjaGVja19hY3Rpb24gaGFuZ2NoZWNr X2FjdGlvbjsKPiAgIAkJaW50IG51bV9yZXF1ZXN0czsKPiBAQCAtNTQ4LDYgKzU0OSwxMiBAQCBz dHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGUgewo+ICAgCQkJdTMyIHRhaWw7Cj4gICAJCX0gKnJl cXVlc3RzOwo+Cj4gKwkJc3RydWN0IGRybV9pOTE1X2Vycm9yX3dhaXRlciB7Cj4gKwkJCWNoYXIg Y29tbVtUQVNLX0NPTU1fTEVOXTsKPiArCQkJcGlkX3QgcGlkOwo+ICsJCQl1MzIgc2Vxbm87Cj4g KwkJfSAqd2FpdGVyczsKPiArCj4gICAJCXN0cnVjdCB7Cj4gICAJCQl1MzIgZ2Z4X21vZGU7Cj4g ICAJCQl1bmlvbiB7Cj4gQEAgLTE0MjAsNyArMTQyNyw3IEBAIHN0cnVjdCBpOTE1X2dwdV9lcnJv ciB7Cj4gICAjZGVmaW5lIEk5MTVfU1RPUF9SSU5HX0FMTE9XX1dBUk4gICAgICAoMSA8PCAzMCkK Pgo+ICAgCS8qIEZvciBtaXNzZWQgaXJxL3NlcW5vIHNpbXVsYXRpb24uICovCj4gLQl1bnNpZ25l ZCBpbnQgdGVzdF9pcnFfcmluZ3M7Cj4gKwl1bnNpZ25lZCBsb25nIHRlc3RfaXJxX3JpbmdzOwo+ ICAgfTsKPgo+ICAgZW51bSBtb2Rlc2V0X3Jlc3RvcmUgewo+IEBAIC0zMDEzLDcgKzMwMjAsNiBA QCBpYnhfZGlzYWJsZV9kaXNwbGF5X2ludGVycnVwdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsIHVpbnQzMl90IGJpdHMpCj4gICAJaWJ4X2Rpc3BsYXlfaW50ZXJydXB0X3VwZGF0 ZShkZXZfcHJpdiwgYml0cywgMCk7Cj4gICB9Cj4KPiAtCj4gICAvKiBpOTE1X2dlbS5jICovCj4g ICBpbnQgaTkxNV9nZW1fY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCj4gICAJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKPiBAQCAtMzkwNSw0 ICszOTExLDMzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3RyYWNlX2lycV9nZXQoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAgCQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigm ZW5naW5lLT50cmFjZV9pcnFfcmVxLCByZXEpOwo+ICAgfQo+Cj4gK3N0YXRpYyBpbmxpbmUgYm9v bCBfX2k5MTVfcmVxdWVzdF9pcnFfY29tcGxldGUoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpyZXEpCj4gK3sKPiArCS8qIEVuc3VyZSBvdXIgcmVhZCBvZiB0aGUgc2Vxbm8gaXMgY29oZXJl bnQgc28gdGhhdCB3ZQo+ICsJICogZG8gbm90ICJtaXNzIGFuIGludGVycnVwdCIgKGkuZS4gaWYg dGhpcyBpcyB0aGUgbGFzdAo+ICsJICogcmVxdWVzdCBhbmQgdGhlIHNlcW5vIHdyaXRlIGZyb20g dGhlIEdQVSBpcyBub3QgdmlzaWJsZQo+ICsJICogYnkgdGhlIHRpbWUgdGhlIGludGVycnVwdCBm aXJlcywgd2Ugd2lsbCBzZWUgdGhhdCB0aGUKPiArCSAqIHJlcXVlc3QgaXMgaW5jb21wbGV0ZSBh bmQgZ28gYmFjayB0byBzbGVlcCBhd2FpdGluZwo+ICsJICogYW5vdGhlciBpbnRlcnJ1cHQgdGhh dCB3aWxsIG5ldmVyIGNvbWUuKQo+ICsJICoKPiArCSAqIFN0cmljdGx5LCB3ZSBvbmx5IG5lZWQg dG8gZG8gdGhpcyBvbmNlIGFmdGVyIGFuIGludGVycnVwdCwKPiArCSAqIGJ1dCBpdCBpcyBlYXNp ZXIgYW5kIHNhZmVyIHRvIGRvIGl0IGV2ZXJ5IHRpbWUgdGhlIHdhaXRlcgo+ICsJICogaXMgd29r ZW4uCj4gKwkgKi8KPiArCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEsIGZhbHNl KSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwkvKiBXZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIg YW55IGdwdSByZXNldCBoYXBwZW5lZCBpbiBiZXR3ZWVuCj4gKwkgKiB0aGUgcmVxdWVzdCBiZWlu ZyBzdWJtaXR0ZWQgYW5kIG5vdy4gSWYgYSByZXNldCBoYXMgb2NjdXJyZWQsCj4gKwkgKiB0aGUg cmVxdWVzdCBpcyBlZmZlY3RpdmVseSBjb21wbGV0ZSAod2UgZWl0aGVyIGFyZSBpbiB0aGUKPiAr CSAqIHByb2Nlc3Mgb2Ygb3IgaGF2ZSBkaXNjYXJkZWQgdGhlIHJlbmRlcmluZyBhbmQgY29tcGxl dGVseQo+ICsJICogcmVzZXQgdGhlIEdQVS4gVGhlIHJlc3VsdHMgb2YgdGhlIHJlcXVlc3QgYXJl IGxvc3QgYW5kIHdlCj4gKwkgKiBhcmUgZnJlZSB0byBjb250aW51ZSBvbiB3aXRoIHRoZSBvcmln aW5hbCBvcGVyYXRpb24uCj4gKwkgKi8KPiArCWlmIChyZXEtPnJlc2V0X2NvdW50ZXIgIT0gaTkx NV9yZXNldF9jb3VudGVyKCZyZXEtPmk5MTUtPmdwdV9lcnJvcikpCj4gKwkJcmV0dXJuIHRydWU7 Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICAgI2VuZGlmCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbS5jCj4gaW5kZXggZGU0ZmIzOTMxMmE0Li5kMDhlZGIzZDE2ZjEgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAtMTEyMywxNyArMTEyMyw2IEBAIGk5MTVfZ2VtX2NoZWNr X3dlZGdlKHVuc2lnbmVkIHJlc2V0X2NvdW50ZXIsIGJvb2wgaW50ZXJydXB0aWJsZSkKPiAgIAly ZXR1cm4gMDsKPiAgIH0KPgo+IC1zdGF0aWMgdm9pZCBmYWtlX2lycSh1bnNpZ25lZCBsb25nIGRh dGEpCj4gLXsKPiAtCXdha2VfdXBfcHJvY2Vzcygoc3RydWN0IHRhc2tfc3RydWN0ICopZGF0YSk7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBib29sIG1pc3NlZF9pcnEoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+IC0JCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gLXsKPiAtCXJldHVybiB0ZXN0X2JpdChlbmdpbmUtPmlkLCAmZGV2X3ByaXYtPmdwdV9lcnJv ci5taXNzZWRfaXJxX3JpbmdzKTsKPiAtfQo+IC0KPiAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxv Y2FsX2Nsb2NrX3VzKHVuc2lnbmVkICpjcHUpCj4gICB7Cj4gICAJdW5zaWduZWQgbG9uZyB0Owo+ IEBAIC0xMTY2LDcgKzExNTUsNyBAQCBzdGF0aWMgYm9vbCBidXN5d2FpdF9zdG9wKHVuc2lnbmVk IGxvbmcgdGltZW91dCwgdW5zaWduZWQgY3B1KQo+ICAgCXJldHVybiB0aGlzX2NwdSAhPSBjcHU7 Cj4gICB9Cj4KPiAtc3RhdGljIGludCBfX2k5MTVfc3Bpbl9yZXF1ZXN0KHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxLCBpbnQgc3RhdGUpCj4gK3N0YXRpYyBib29sIF9faTkxNV9zcGlu X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGludCBzdGF0ZSkKPiAg IHsKPiAgIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Cj4gICAJdW5zaWduZWQgY3B1Owo+IEBAIC0x MTgxLDE3ICsxMTcwLDE0IEBAIHN0YXRpYyBpbnQgX19pOTE1X3NwaW5fcmVxdWVzdChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwgaW50IHN0YXRlKQo+ICAgCSAqIHRha2VzIHRvIHNs ZWVwIG9uIGEgcmVxdWVzdCwgb24gdGhlIG9yZGVyIG9mIGEgbWljcm9zZWNvbmQuCj4gICAJICov Cj4KPiAtCWlmIChyZXEtPmVuZ2luZS0+aXJxX3JlZmNvdW50KQo+IC0JCXJldHVybiAtRUJVU1k7 Cj4gLQo+ICAgCS8qIE9ubHkgc3BpbiBpZiB3ZSBrbm93IHRoZSBHUFUgaXMgcHJvY2Vzc2luZyB0 aGlzIHJlcXVlc3QgKi8KPiAgIAlpZiAoIWk5MTVfZ2VtX3JlcXVlc3Rfc3RhcnRlZChyZXEsIHRy dWUpKQo+IC0JCXJldHVybiAtRUFHQUlOOwo+ICsJCXJldHVybiBmYWxzZTsKPgo+ICAgCXRpbWVv dXQgPSBsb2NhbF9jbG9ja191cygmY3B1KSArIDU7Cj4gLQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgp KSB7Cj4gKwlkbyB7Cj4gICAJCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEsIHRy dWUpKQo+IC0JCQlyZXR1cm4gMDsKPiArCQkJcmV0dXJuIHRydWU7Cj4KPiAgIAkJaWYgKHNpZ25h bF9wZW5kaW5nX3N0YXRlKHN0YXRlLCBjdXJyZW50KSkKPiAgIAkJCWJyZWFrOwo+IEBAIC0xMjAw LDEyICsxMTg2LDkgQEAgc3RhdGljIGludCBfX2k5MTVfc3Bpbl9yZXF1ZXN0KHN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqcmVxLCBpbnQgc3RhdGUpCj4gICAJCQlicmVhazsKPgo+ICAgCQlj cHVfcmVsYXhfbG93bGF0ZW5jeSgpOwo+IC0JfQo+IC0KPiAtCWlmIChpOTE1X2dlbV9yZXF1ZXN0 X2NvbXBsZXRlZChyZXEsIGZhbHNlKSkKPiAtCQlyZXR1cm4gMDsKPiArCX0gd2hpbGUgKCFuZWVk X3Jlc2NoZWQoKSk7Cj4KPiAtCXJldHVybiAtRUFHQUlOOwo+ICsJcmV0dXJuIGZhbHNlOwo+ICAg fQo+Cj4gICAvKioKPiBAQCAtMTIyOSwxOCArMTIxMiwxNCBAQCBpbnQgX19pOTE1X3dhaXRfcmVx dWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPiAgIAkJCXM2NCAqdGltZW91 dCwKPiAgIAkJCXN0cnVjdCBpbnRlbF9ycHNfY2xpZW50ICpycHMpCj4gICB7Cj4gLQlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9lbmdpbmUocmVx KTsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJlcS0+aTkxNTsKPiAt CWNvbnN0IGJvb2wgaXJxX3Rlc3RfaW5fcHJvZ3Jlc3MgPQo+IC0JCUFDQ0VTU19PTkNFKGRldl9w cml2LT5ncHVfZXJyb3IudGVzdF9pcnFfcmluZ3MpICYgaW50ZWxfZW5naW5lX2ZsYWcoZW5naW5l KTsKPiAgIAlpbnQgc3RhdGUgPSBpbnRlcnJ1cHRpYmxlID8gVEFTS19JTlRFUlJVUFRJQkxFIDog VEFTS19VTklOVEVSUlVQVElCTEU7Cj4gICAJREVGSU5FX1dBSVQocmVzZXQpOwo+IC0JREVGSU5F X1dBSVQod2FpdCk7Cj4gLQl1bnNpZ25lZCBsb25nIHRpbWVvdXRfZXhwaXJlOwo+ICsJc3RydWN0 IGludGVsX3dhaXQgd2FpdDsKPiArCXVuc2lnbmVkIGxvbmcgdGltZW91dF9yZW1haW47Cj4gICAJ czY0IGJlZm9yZSA9IDA7IC8qIE9ubHkgdG8gc2lsZW5jZSBhIGNvbXBpbGVyIHdhcm5pbmcuICov Cj4gLQlpbnQgcmV0Owo+ICsJaW50IHJldCA9IDA7Cj4KPiAtCVdBUk4oIWludGVsX2lycXNfZW5h YmxlZChkZXZfcHJpdiksICJJUlFzIGRpc2FibGVkIik7Cj4gKwltaWdodF9zbGVlcCgpOwo+Cj4g ICAJaWYgKGxpc3RfZW1wdHkoJnJlcS0+bGlzdCkpCj4gICAJCXJldHVybiAwOwo+IEBAIC0xMjQ4 LDcgKzEyMjcsNyBAQCBpbnQgX19pOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcSwKPiAgIAlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxLCB0 cnVlKSkKPiAgIAkJcmV0dXJuIDA7Cj4KPiAtCXRpbWVvdXRfZXhwaXJlID0gMDsKPiArCXRpbWVv dXRfcmVtYWluID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7Cj4gICAJaWYgKHRpbWVvdXQpIHsKPiAg IAkJaWYgKFdBUk5fT04oKnRpbWVvdXQgPCAwKSkKPiAgIAkJCXJldHVybiAtRUlOVkFMOwo+IEBA IC0xMjU2LDcgKzEyMzUsNyBAQCBpbnQgX19pOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPiAgIAkJaWYgKCp0aW1lb3V0ID09IDApCj4gICAJCQlyZXR1 cm4gLUVUSU1FOwo+Cj4gLQkJdGltZW91dF9leHBpcmUgPSBqaWZmaWVzICsgbnNlY3NfdG9famlm Zmllc190aW1lb3V0KCp0aW1lb3V0KTsKPiArCQl0aW1lb3V0X3JlbWFpbiA9IG5zZWNzX3RvX2pp ZmZpZXNfdGltZW91dCgqdGltZW91dCk7Cj4KPiAgIAkJLyoKPiAgIAkJICogUmVjb3JkIGN1cnJl bnQgdGltZSBpbiBjYXNlIGludGVycnVwdGVkIGJ5IHNpZ25hbCwgb3Igd2VkZ2VkLgo+IEBAIC0x MjY0LDgxICsxMjQzLDU5IEBAIGludCBfX2k5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxLAo+ICAgCQliZWZvcmUgPSBrdGltZV9nZXRfcmF3X25zKCk7Cj4g ICAJfQo+Cj4gLQlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA2KQo+IC0JCWdlbjZf cnBzX2Jvb3N0KGRldl9wcml2LCBycHMsIHJlcS0+ZW1pdHRlZF9qaWZmaWVzKTsKPiAtCj4gICAJ dHJhY2VfaTkxNV9nZW1fcmVxdWVzdF93YWl0X2JlZ2luKHJlcSk7Cj4KPiAtCS8qIE9wdGltaXN0 aWMgc3BpbiBmb3IgdGhlIG5leHQgamlmZmllIGJlZm9yZSB0b3VjaGluZyBJUlFzICovCj4gLQly ZXQgPSBfX2k5MTVfc3Bpbl9yZXF1ZXN0KHJlcSwgc3RhdGUpOwo+IC0JaWYgKHJldCA9PSAwKQo+ IC0JCWdvdG8gb3V0Owo+IC0KPiAtCWlmICghaXJxX3Rlc3RfaW5fcHJvZ3Jlc3MgJiYgV0FSTl9P TighZW5naW5lLT5pcnFfZ2V0KGVuZ2luZSkpKSB7Cj4gLQkJcmV0ID0gLUVOT0RFVjsKPiAtCQln b3RvIG91dDsKPiAtCX0KPiAtCj4gLQlhZGRfd2FpdF9xdWV1ZSgmZGV2X3ByaXYtPmdwdV9lcnJv ci53YWl0X3F1ZXVlLCAmcmVzZXQpOwo+IC0JZm9yICg7Oykgewo+IC0JCXN0cnVjdCB0aW1lcl9s aXN0IHRpbWVyOwo+ICsJaWYgKElOVEVMX0lORk8ocmVxLT5pOTE1KS0+Z2VuID49IDYpCj4gKwkJ Z2VuNl9ycHNfYm9vc3QocmVxLT5pOTE1LCBycHMsIHJlcS0+ZW1pdHRlZF9qaWZmaWVzKTsKPgo+ IC0JCXByZXBhcmVfdG9fd2FpdCgmZW5naW5lLT5pcnFfcXVldWUsICZ3YWl0LCBzdGF0ZSk7Cj4g KwkvKiBPcHRpbWlzdGljIHNwaW4gZm9yIHRoZSBuZXh0IH5qaWZmaWUgYmVmb3JlIHRvdWNoaW5n IElSUXMgKi8KPiArCWlmIChfX2k5MTVfc3Bpbl9yZXF1ZXN0KHJlcSwgc3RhdGUpKQo+ICsJCWdv dG8gY29tcGxldGU7Cj4KPiAtCQkvKiBXZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYW55IGdwdSBy ZXNldCBoYXBwZW5lZCBpbiBiZXR3ZWVuCj4gLQkJICogdGhlIHJlcXVlc3QgYmVpbmcgc3VibWl0 dGVkIGFuZCBub3cuIElmIGEgcmVzZXQgaGFzIG9jY3VycmVkLAo+IC0JCSAqIHRoZSByZXF1ZXN0 IGlzIGVmZmVjdGl2ZWx5IGNvbXBsZXRlICh3ZSBlaXRoZXIgYXJlIGluIHRoZQo+IC0JCSAqIHBy b2Nlc3Mgb2Ygb3IgaGF2ZSBkaXNjYXJkZWQgdGhlIHJlbmRlcmluZyBhbmQgY29tcGxldGVseQo+ IC0JCSAqIHJlc2V0IHRoZSBHUFUuIFRoZSByZXN1bHRzIG9mIHRoZSByZXF1ZXN0IGFyZSBsb3N0 IGFuZCB3ZQo+IC0JCSAqIGFyZSBmcmVlIHRvIGNvbnRpbnVlIG9uIHdpdGggdGhlIG9yaWdpbmFs IG9wZXJhdGlvbi4KPiArCWludGVsX3dhaXRfaW5pdCgmd2FpdCwgcmVxLT5zZXFubyk7Cj4gKwlz ZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7Cj4gKwlpZiAoaW50ZWxfZW5naW5lX2FkZF93YWl0KHJl cS0+ZW5naW5lLCAmd2FpdCkpCj4gKwkJLyogSW4gb3JkZXIgdG8gY2hlY2sgdGhhdCB3ZSBoYXZl bid0IG1pc3NlZCB0aGUgaW50ZXJydXB0Cj4gKwkJICogYXMgd2UgZW5hYmxlZCBpdCwgd2UgbmVl ZCB0byBraWNrIG91cnNlbHZlcyB0byBkbyBhCj4gKwkJICogY29oZXJlbnQgY2hlY2sgb24gdGhl IHNlcW5vIGJlZm9yZSB3ZSBzbGVlcC4KPiAgIAkJICovCj4gLQkJaWYgKHJlcS0+cmVzZXRfY291 bnRlciAhPSBpOTE1X3Jlc2V0X2NvdW50ZXIoJmRldl9wcml2LT5ncHVfZXJyb3IpKSB7Cj4gLQkJ CXJldCA9IDA7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCj4gLQkJaWYgKGk5MTVfZ2VtX3JlcXVl c3RfY29tcGxldGVkKHJlcSwgZmFsc2UpKSB7Cj4gLQkJCXJldCA9IDA7Cj4gLQkJCWJyZWFrOwo+ IC0JCX0KPiArCQlnb3RvIHdha2V1cDsKPgo+ICsJYWRkX3dhaXRfcXVldWUoJnJlcS0+aTkxNS0+ Z3B1X2Vycm9yLndhaXRfcXVldWUsICZyZXNldCk7Cj4gKwlmb3IgKDs7KSB7Cj4gICAJCWlmIChz aWduYWxfcGVuZGluZ19zdGF0ZShzdGF0ZSwgY3VycmVudCkpIHsKPiAgIAkJCXJldCA9IC1FUkVT VEFSVFNZUzsKPiAgIAkJCWJyZWFrOwo+ICAgCQl9Cj4KPiAtCQlpZiAodGltZW91dCAmJiB0aW1l X2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXRfZXhwaXJlKSkgewo+ICsJCS8qIEVuc3VyZSB0aGF0 IGV2ZW4gaWYgdGhlIEdQVSBoYW5ncywgd2UgZ2V0IHdva2VuIHVwLiAqLwo+ICsJCWk5MTVfcXVl dWVfaGFuZ2NoZWNrKHJlcS0+aTkxNSk7Cj4gKwo+ICsJCXRpbWVvdXRfcmVtYWluID0gaW9fc2No ZWR1bGVfdGltZW91dCh0aW1lb3V0X3JlbWFpbik7Cj4gKwkJaWYgKHRpbWVvdXRfcmVtYWluID09 IDApIHsKPiAgIAkJCXJldCA9IC1FVElNRTsKPiAgIAkJCWJyZWFrOwo+ICAgCQl9Cj4KPiAtCQkv KiBFbnN1cmUgdGhhdCBldmVuIGlmIHRoZSBHUFUgaGFuZ3MsIHdlIGdldCB3b2tlbiB1cC4gKi8K PiAtCQlpOTE1X3F1ZXVlX2hhbmdjaGVjayhkZXZfcHJpdik7Cj4gLQo+IC0JCXRpbWVyLmZ1bmN0 aW9uID0gTlVMTDsKPiAtCQlpZiAodGltZW91dCB8fCBtaXNzZWRfaXJxKGRldl9wcml2LCBlbmdp bmUpKSB7Cj4gLQkJCXVuc2lnbmVkIGxvbmcgZXhwaXJlOwo+IC0KPiAtCQkJc2V0dXBfdGltZXJf b25fc3RhY2soJnRpbWVyLCBmYWtlX2lycSwgKHVuc2lnbmVkIGxvbmcpY3VycmVudCk7Cj4gLQkJ CWV4cGlyZSA9IG1pc3NlZF9pcnEoZGV2X3ByaXYsIGVuZ2luZSkgPyBqaWZmaWVzICsgMSA6IHRp bWVvdXRfZXhwaXJlOwo+IC0JCQltb2RfdGltZXIoJnRpbWVyLCBleHBpcmUpOwo+IC0JCX0KPiAr CQlpZiAoaW50ZWxfd2FpdF9jb21wbGV0ZSgmd2FpdCkpCj4gKwkJCWJyZWFrOwo+Cj4gLQkJaW9f c2NoZWR1bGUoKTsKPiArd2FrZXVwOgo+ICsJCXNldF9jdXJyZW50X3N0YXRlKHN0YXRlKTsKPgo+ IC0JCWlmICh0aW1lci5mdW5jdGlvbikgewo+IC0JCQlkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5j KCZ0aW1lcik7Cj4gLQkJCWRlc3Ryb3lfdGltZXJfb25fc3RhY2soJnRpbWVyKTsKPiAtCQl9Cj4g KwkJLyogQ2FyZWZ1bGx5IGNoZWNrIGlmIHRoZSByZXF1ZXN0IGlzIGNvbXBsZXRlLCBnaXZpbmcg dGltZQo+ICsJCSAqIGZvciB0aGUgc2Vxbm8gdG8gYmUgdmlzaWJsZSBmb2xsb3dpbmcgdGhlIGlu dGVycnVwdC4KPiArCQkgKiBXZSBhbHNvIGhhdmUgdG8gY2hlY2sgaW4gY2FzZSB3ZSBhcmUga2lj a2VkIGJ5IHRoZSBHUFUKPiArCQkgKiByZXNldCBpbiBvcmRlciB0byBkcm9wIHRoZSBzdHJ1Y3Rf bXV0ZXguCj4gKwkJICovCj4gKwkJaWYgKF9faTkxNV9yZXF1ZXN0X2lycV9jb21wbGV0ZShyZXEp KQo+ICsJCQlicmVhazsKPiAgIAl9Cj4gLQlyZW1vdmVfd2FpdF9xdWV1ZSgmZGV2X3ByaXYtPmdw dV9lcnJvci53YWl0X3F1ZXVlLCAmcmVzZXQpOwo+ICsJcmVtb3ZlX3dhaXRfcXVldWUoJnJlcS0+ aTkxNS0+Z3B1X2Vycm9yLndhaXRfcXVldWUsICZyZXNldCk7Cj4KPiAtCWlmICghaXJxX3Rlc3Rf aW5fcHJvZ3Jlc3MpCj4gLQkJZW5naW5lLT5pcnFfcHV0KGVuZ2luZSk7Cj4gLQo+IC0JZmluaXNo X3dhaXQoJmVuZ2luZS0+aXJxX3F1ZXVlLCAmd2FpdCk7Cj4gLQo+IC1vdXQ6Cj4gKwlpbnRlbF9l bmdpbmVfcmVtb3ZlX3dhaXQocmVxLT5lbmdpbmUsICZ3YWl0KTsKPiArCV9fc2V0X2N1cnJlbnRf c3RhdGUoVEFTS19SVU5OSU5HKTsKPiArY29tcGxldGU6Cj4gICAJdHJhY2VfaTkxNV9nZW1fcmVx dWVzdF93YWl0X2VuZChyZXEpOwo+Cj4gICAJaWYgKHRpbWVvdXQpIHsKPiBAQCAtMjU0NSw2ICsy NTAyLDEyIEBAIGk5MTVfZ2VtX2luaXRfc2Vxbm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCB1MzIgc2Vxbm8pCj4gICAJfQo+ICAgCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhk ZXZfcHJpdik7Cj4KPiArCS8qIElmIHRoZSBzZXFubyB3cmFwcyBhcm91bmQsIHdlIG5lZWQgdG8g Y2xlYXIgdGhlIGJyZWFkY3J1bWIgcmJ0cmVlICovCj4gKwlpZiAoIWk5MTVfc2Vxbm9fcGFzc2Vk KHNlcW5vLCBkZXZfcHJpdi0+bmV4dF9zZXFubykpIHsKPiArCQl3aGlsZSAoaW50ZWxfa2lja193 YWl0ZXJzKGRldl9wcml2KSkKPiArCQkJeWllbGQoKTsKPiArCX0KPiArCj4gICAJLyogRmluYWxs eSByZXNldCBodyBzdGF0ZSAqLwo+ICAgCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2 KQo+ICAgCQlpbnRlbF9yaW5nX2luaXRfc2Vxbm8oZW5naW5lLCBzZXFubyk7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCj4gaW5kZXggMzRmZjI0NTljZWVhLi44OTI0MWZmY2M2 NzYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiBAQCAtNDYzLDYg KzQ2MywxOCBAQCBpbnQgaTkxNV9lcnJvcl9zdGF0ZV90b19zdHIoc3RydWN0IGRybV9pOTE1X2Vy cm9yX3N0YXRlX2J1ZiAqbSwKPiAgIAkJCX0KPiAgIAkJfQo+Cj4gKwkJaWYgKGVycm9yLT5yaW5n W2ldLm51bV93YWl0ZXJzKSB7Cj4gKwkJCWVycl9wcmludGYobSwgIiVzIC0tLSAlZCB3YWl0ZXJz XG4iLAo+ICsJCQkJICAgZGV2X3ByaXYtPmVuZ2luZVtpXS5uYW1lLAo+ICsJCQkJICAgZXJyb3It PnJpbmdbaV0ubnVtX3dhaXRlcnMpOwo+ICsJCQlmb3IgKGogPSAwOyBqIDwgZXJyb3ItPnJpbmdb aV0ubnVtX3dhaXRlcnM7IGorKykgewo+ICsJCQkJZXJyX3ByaW50ZihtLCAiIHNlcW5vIDB4JTA4 eCBmb3IgJXMgWyVkXVxuIiwKPiArCQkJCQkgICBlcnJvci0+cmluZ1tpXS53YWl0ZXJzW2pdLnNl cW5vLAo+ICsJCQkJCSAgIGVycm9yLT5yaW5nW2ldLndhaXRlcnNbal0uY29tbSwKPiArCQkJCQkg ICBlcnJvci0+cmluZ1tpXS53YWl0ZXJzW2pdLnBpZCk7Cj4gKwkJCX0KPiArCQl9Cj4gKwo+ICAg CQlpZiAoKG9iaiA9IGVycm9yLT5yaW5nW2ldLnJpbmdidWZmZXIpKSB7Cj4gICAJCQllcnJfcHJp bnRmKG0sICIlcyAtLS0gcmluZ2J1ZmZlciA9IDB4JTA4eFxuIiwKPiAgIAkJCQkgICBkZXZfcHJp di0+ZW5naW5lW2ldLm5hbWUsCj4gQEAgLTYwNSw4ICs2MTcsOSBAQCBzdGF0aWMgdm9pZCBpOTE1 X2Vycm9yX3N0YXRlX2ZyZWUoc3RydWN0IGtyZWYgKmVycm9yX3JlZikKPiAgIAkJaTkxNV9lcnJv cl9vYmplY3RfZnJlZShlcnJvci0+cmluZ1tpXS5yaW5nYnVmZmVyKTsKPiAgIAkJaTkxNV9lcnJv cl9vYmplY3RfZnJlZShlcnJvci0+cmluZ1tpXS5od3NfcGFnZSk7Cj4gICAJCWk5MTVfZXJyb3Jf b2JqZWN0X2ZyZWUoZXJyb3ItPnJpbmdbaV0uY3R4KTsKPiAtCQlrZnJlZShlcnJvci0+cmluZ1tp XS5yZXF1ZXN0cyk7Cj4gICAJCWk5MTVfZXJyb3Jfb2JqZWN0X2ZyZWUoZXJyb3ItPnJpbmdbaV0u d2FfY3R4KTsKPiArCQlrZnJlZShlcnJvci0+cmluZ1tpXS5yZXF1ZXN0cyk7Cj4gKwkJa2ZyZWUo ZXJyb3ItPnJpbmdbaV0ud2FpdGVycyk7Cj4gICAJfQo+Cj4gICAJaTkxNV9lcnJvcl9vYmplY3Rf ZnJlZShlcnJvci0+c2VtYXBob3JlX29iaik7Cj4gQEAgLTg5Miw2ICs5MDUsNDcgQEAgc3RhdGlj IHZvaWQgZ2VuNl9yZWNvcmRfc2VtYXBob3JlX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKPiAgIAl9Cj4gICB9Cj4KPiArc3RhdGljIHZvaWQgZW5naW5lX3JlY29yZF93 YWl0ZXJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkJCSAgc3RydWN0IGRy bV9pOTE1X2Vycm9yX3JpbmcgKmVyaW5nKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVt YnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKPiArCXN0cnVjdCBkcm1faTkxNV9lcnJvcl93 YWl0ZXIgKndhaXRlcjsKPiArCXN0cnVjdCByYl9ub2RlICpyYjsKPiArCWludCBjb3VudDsKPiAr Cj4gKwllcmluZy0+bnVtX3dhaXRlcnMgPSAwOwo+ICsJZXJpbmctPndhaXRlcnMgPSBOVUxMOwo+ ICsKPiArCXNwaW5fbG9jaygmYi0+bG9jayk7Cj4gKwljb3VudCA9IDA7Cj4gKwlmb3IgKHJiID0g cmJfZmlyc3QoJmItPndhaXRlcnMpOyByYiAhPSBOVUxMOyByYiA9IHJiX25leHQocmIpKQo+ICsJ CWNvdW50Kys7Cj4gKwlzcGluX3VubG9jaygmYi0+bG9jayk7Cj4gKwo+ICsJd2FpdGVyID0gTlVM TDsKPiArCWlmIChjb3VudCkKPiArCQl3YWl0ZXIgPSBrbWFsbG9jKGNvdW50KnNpemVvZihzdHJ1 Y3QgZHJtX2k5MTVfZXJyb3Jfd2FpdGVyKSwKPiArCQkJCSBHRlBfQVRPTUlDKTsKPiArCWlmICgh d2FpdGVyKQo+ICsJCXJldHVybjsKPiArCj4gKwllcmluZy0+d2FpdGVycyA9IHdhaXRlcjsKPiAr Cj4gKwlzcGluX2xvY2soJmItPmxvY2spOwo+ICsJZm9yIChyYiA9IHJiX2ZpcnN0KCZiLT53YWl0 ZXJzKTsgcmIgIT0gTlVMTDsgcmIgPSByYl9uZXh0KHJiKSkgewo+ICsJCXN0cnVjdCBpbnRlbF93 YWl0ICp3ID0gY29udGFpbmVyX29mKHJiLCB0eXBlb2YoKncpLCBub2RlKTsKPiArCj4gKwkJc3Ry Y3B5KHdhaXRlci0+Y29tbSwgdy0+dGFzay0+Y29tbSk7Cj4gKwkJd2FpdGVyLT5waWQgPSB3LT50 YXNrLT5waWQ7Cj4gKwkJd2FpdGVyLT5zZXFubyA9IHctPnNlcW5vOwo+ICsJCXdhaXRlcisrOwo+ ICsKPiArCQlpZiAoKytlcmluZy0+bnVtX3dhaXRlcnMgPT0gY291bnQpCj4gKwkJCWJyZWFrOwo+ ICsJfQo+ICsJc3Bpbl91bmxvY2soJmItPmxvY2spOwo+ICt9Cj4gKwo+ICAgc3RhdGljIHZvaWQg aTkxNV9yZWNvcmRfcmluZ19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4gICAJCQkJICAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlICplcnJvciwKPiAgIAkJCQkg ICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gQEAgLTkyNiw3ICs5ODAsNyBAQCBz dGF0aWMgdm9pZCBpOTE1X3JlY29yZF9yaW5nX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKPiAgIAkJZXJpbmctPmluc3Rkb25lID0gSTkxNV9SRUFEKEdFTjJfSU5TVERP TkUpOwo+ICAgCX0KPgo+IC0JZXJpbmctPndhaXRpbmcgPSB3YWl0cXVldWVfYWN0aXZlKCZlbmdp bmUtPmlycV9xdWV1ZSk7Cj4gKwllcmluZy0+d2FpdGluZyA9IGludGVsX2VuZ2luZV9oYXNfd2Fp dGVyKGVuZ2luZSk7Cj4gICAJZXJpbmctPmluc3RwbSA9IEk5MTVfUkVBRChSSU5HX0lOU1RQTShl bmdpbmUtPm1taW9fYmFzZSkpOwo+ICAgCWVyaW5nLT5hY3RoZCA9IGludGVsX3JpbmdfZ2V0X2Fj dGl2ZV9oZWFkKGVuZ2luZSk7Cj4gICAJZXJpbmctPnNlcW5vID0gZW5naW5lLT5nZXRfc2Vxbm8o ZW5naW5lKTsKPiBAQCAtMTAzMiw2ICsxMDg2LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVj b3JkX3JpbmdzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAkJZXJyb3It PnJpbmdbaV0udmFsaWQgPSB0cnVlOwo+Cj4gICAJCWk5MTVfcmVjb3JkX3Jpbmdfc3RhdGUoZGV2 X3ByaXYsIGVycm9yLCBlbmdpbmUsICZlcnJvci0+cmluZ1tpXSk7Cj4gKwkJZW5naW5lX3JlY29y ZF93YWl0ZXJzKGVuZ2luZSwgJmVycm9yLT5yaW5nW2ldKTsKPgo+ICAgCQlyZXF1ZXN0ID0gaTkx NV9nZW1fZmluZF9hY3RpdmVfcmVxdWVzdChlbmdpbmUpOwo+ICAgCQlpZiAocmVxdWVzdCkgewo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+IGluZGV4IDMwMTI3Yjk0ZjI2ZS4uMmE3MzZmNGEwZmU1 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gQEAgLTk3NiwxMyArOTc2LDEwIEBAIHN0 YXRpYyB2b2lkIGlyb25sYWtlX3Jwc19jaGFuZ2VfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+Cj4gICBzdGF0aWMgdm9pZCBub3RpZnlfcmluZyhzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICB7Cj4gLQlpZiAoIWludGVsX2VuZ2luZV9pbml0 aWFsaXplZChlbmdpbmUpKQo+IC0JCXJldHVybjsKPiAtCj4gLQl0cmFjZV9pOTE1X2dlbV9yZXF1 ZXN0X25vdGlmeShlbmdpbmUpOwo+IC0JZW5naW5lLT51c2VyX2ludGVycnVwdHMrKzsKPiAtCj4g LQl3YWtlX3VwX2FsbCgmZW5naW5lLT5pcnFfcXVldWUpOwo+ICsJaWYgKGludGVsX2VuZ2luZV93 YWtldXAoZW5naW5lKSkgewo+ICsJCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfbm90aWZ5KGVuZ2lu ZSk7Cj4gKwkJZW5naW5lLT51c2VyX2ludGVycnVwdHMrKzsKPiArCX0KPiAgIH0KPgo+ICAgc3Rh dGljIHZvaWQgdmx2X2MwX3JlYWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ IEBAIC0xMDYzLDcgKzEwNjAsNyBAQCBzdGF0aWMgYm9vbCBhbnlfd2FpdGVycyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lOwo+Cj4gICAJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYpCj4gLQkJaWYgKGVu Z2luZS0+aXJxX3JlZmNvdW50KQo+ICsJCWlmIChpbnRlbF9lbmdpbmVfaGFzX3dhaXRlcihlbmdp bmUpKQo+ICAgCQkJcmV0dXJuIHRydWU7Cj4KPiAgIAlyZXR1cm4gZmFsc2U7Cj4gQEAgLTMwNzMs MTMgKzMwNzAsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGtpY2tfd2FpdGVycyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4KPiAgIAlpZiAoZW5naW5lLT5oYW5nY2hlY2sudXNlcl9pbnRl cnJ1cHRzID09IHVzZXJfaW50ZXJydXB0cyAmJgo+ICAgCSAgICAhdGVzdF9hbmRfc2V0X2JpdChl bmdpbmUtPmlkLCAmaTkxNS0+Z3B1X2Vycm9yLm1pc3NlZF9pcnFfcmluZ3MpKSB7Cj4gLQkJaWYg KCEoaTkxNS0+Z3B1X2Vycm9yLnRlc3RfaXJxX3JpbmdzICYgaW50ZWxfZW5naW5lX2ZsYWcoZW5n aW5lKSkpCj4gKwkJaWYgKCF0ZXN0X2JpdChlbmdpbmUtPmlkLCAmaTkxNS0+Z3B1X2Vycm9yLnRl c3RfaXJxX3JpbmdzKSkKPiAgIAkJCURSTV9FUlJPUigiSGFuZ2NoZWNrIHRpbWVyIGVsYXBzZWQu Li4gJXMgaWRsZVxuIiwKPiAgIAkJCQkgIGVuZ2luZS0+bmFtZSk7Cj4gICAJCWVsc2UKPiAgIAkJ CURSTV9JTkZPKCJGYWtlIG1pc3NlZCBpcnEgb24gJXNcbiIsCj4gICAJCQkJIGVuZ2luZS0+bmFt ZSk7Cj4gLQkJd2FrZV91cF9hbGwoJmVuZ2luZS0+aXJxX3F1ZXVlKTsKPiArCj4gKwkJaW50ZWxf ZW5naW5lX2VuYWJsZV9mYWtlX2lycShlbmdpbmUpOwo+ICAgCX0KPgo+ICAgCXJldHVybiB1c2Vy X2ludGVycnVwdHM7Cj4gQEAgLTMxMjMsNyArMzEyMSw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfaGFu Z2NoZWNrX2VsYXBzZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAgCWludGVsX3VuY29y ZV9hcm1fdW5jbGFpbWVkX21taW9fZGV0ZWN0aW9uKGRldl9wcml2KTsKPgo+ICAgCWZvcl9lYWNo X2VuZ2luZV9pZChlbmdpbmUsIGRldl9wcml2LCBpZCkgewo+IC0JCWJvb2wgYnVzeSA9IHdhaXRx dWV1ZV9hY3RpdmUoJmVuZ2luZS0+aXJxX3F1ZXVlKTsKPiArCQlib29sIGJ1c3kgPSBpbnRlbF9l bmdpbmVfaGFzX3dhaXRlcihlbmdpbmUpOwo+ICAgCQl1NjQgYWN0aGQ7Cj4gICAJCXUzMiBzZXFu bzsKPiAgIAkJdW5zaWduZWQgdXNlcl9pbnRlcnJ1cHRzOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9icmVhZGNydW1icy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfYnJlYWRjcnVtYnMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MDAwMDAwLi5lMDEyMWY3Mjc5MzgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfYnJlYWRjcnVtYnMuYwo+IEBAIC0wLDAgKzEsMzU0IEBACj4gKy8qCj4g KyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ogo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiAr ICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiAr ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUg U09GVFdBUkUuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKwo+ ICtzdGF0aWMgdm9pZCBpbnRlbF9icmVhZGNydW1ic19mYWtlX2lycSh1bnNpZ25lZCBsb25nIGRh dGEpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICopZGF0YTsKPiArCj4gKwkvKgo+ICsJICogVGhlIHRpbWVyIHBlcnNpc3Rz IGluIGNhc2Ugd2UgY2Fubm90IGVuYWJsZSBpbnRlcnJ1cHRzLAo+ICsJICogb3IgaWYgd2UgaGF2 ZSBwcmV2aW91c2x5IHNlZW4gc2Vxbm8vaW50ZXJydXB0IGluY29oZXJlbmN5Cj4gKwkgKiAoIm1p c3NlZCBpbnRlcnJ1cHQiIHN5bmRyb21lKS4gSGVyZSB0aGUgd29ya2VyIHdpbGwgd2FrZSB1cAo+ ICsJICogZXZlcnkgamlmZmllIGluIG9yZGVyIHRvIGtpY2sgdGhlIG9sZGVzdCB3YWl0ZXIgdG8g ZG8gdGhlCj4gKwkgKiBjb2hlcmVudCBzZXFubyBjaGVjay4KPiArCSAqLwo+ICsJcmN1X3JlYWRf bG9jaygpOwo+ICsJaWYgKGludGVsX2VuZ2luZV93YWtldXAoZW5naW5lKSkKPiArCQltb2RfdGlt ZXIoJmVuZ2luZS0+YnJlYWRjcnVtYnMuZmFrZV9pcnEsIGppZmZpZXMgKyAxKTsKPiArCXJjdV9y ZWFkX3VubG9jaygpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpcnFfZW5hYmxlKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJV0FSTl9PTighZW5naW5lLT5pcnFfZ2V0 KGVuZ2luZSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpcnFfZGlzYWJsZShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCWVuZ2luZS0+aXJxX3B1dChlbmdpbmUpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBfX2ludGVsX2JyZWFkY3J1bWJzX2VuYWJsZV9pcnEoc3Ry dWN0IGludGVsX2JyZWFkY3J1bWJzICpiKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUgPQo+ICsJCWNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzLCBi cmVhZGNydW1icyk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGVuZ2luZS0+ aTkxNTsKPiArCWJvb2wgaXJxX3Bvc3RlZCA9IGZhbHNlOwo+ICsKPiArCWFzc2VydF9zcGluX2xv Y2tlZCgmYi0+bG9jayk7Cj4gKwlpZiAoYi0+cnBtX3dha2Vsb2NrKQo+ICsJCXJldHVybiBmYWxz ZTsKPiArCj4gKwkvKiBTaW5jZSB3ZSBhcmUgd2FpdGluZyBvbiBhIHJlcXVlc3QsIHRoZSBHUFUg c2hvdWxkIGJlIGJ1c3kKPiArCSAqIGFuZCBzaG91bGQgaGF2ZSBpdHMgb3duIHJwbSByZWZlcmVu Y2UuIEZvciBjb21wbGV0ZW5lc3MsCj4gKwkgKiByZWNvcmQgYW4gcnBtIHJlZmVyZW5jZSBmb3Ig b3Vyc2VsdmVzIHRvIGNvdmVyIHRoZQo+ICsJICogaW50ZXJydXB0IHdlIHVubWFzay4KPiArCSAq Lwo+ICsJaW50ZWxfcnVudGltZV9wbV9nZXRfbm9yZXN1bWUoaTkxNSk7Cj4gKwliLT5ycG1fd2Fr ZWxvY2sgPSB0cnVlOwo+ICsKPiArCS8qIE5vIGludGVycnVwdHM/IEtpY2sgdGhlIHdhaXRlciBl dmVyeSBqaWZmaWUhICovCj4gKwlpZiAoaW50ZWxfaXJxc19lbmFibGVkKGk5MTUpKSB7Cj4gKwkJ aWYgKCF0ZXN0X2JpdChlbmdpbmUtPmlkLCAmaTkxNS0+Z3B1X2Vycm9yLnRlc3RfaXJxX3Jpbmdz KSkgewo+ICsJCQlpcnFfZW5hYmxlKGVuZ2luZSk7Cj4gKwkJCWlycV9wb3N0ZWQgPSB0cnVlOwo+ ICsJCX0KPiArCQliLT5pcnFfZW5hYmxlZCA9IHRydWU7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFiLT5p cnFfZW5hYmxlZCB8fAo+ICsJICAgIHRlc3RfYml0KGVuZ2luZS0+aWQsICZpOTE1LT5ncHVfZXJy b3IubWlzc2VkX2lycV9yaW5ncykpCj4gKwkJbW9kX3RpbWVyKCZiLT5mYWtlX2lycSwgamlmZmll cyArIDEpOwo+ICsKPiArCXJldHVybiBpcnFfcG9zdGVkOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBfX2ludGVsX2JyZWFkY3J1bWJzX2Rpc2FibGVfaXJxKHN0cnVjdCBpbnRlbF9icmVhZGNydW1i cyAqYikKPiArewo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0KPiArCQljb250 YWluZXJfb2YoYiwgc3RydWN0IGludGVsX2VuZ2luZV9jcywgYnJlYWRjcnVtYnMpOwo+ICsKPiAr CWFzc2VydF9zcGluX2xvY2tlZCgmYi0+bG9jayk7Cj4gKwlpZiAoIWItPnJwbV93YWtlbG9jaykK PiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKGItPmlycV9lbmFibGVkKSB7Cj4gKwkJaXJxX2Rpc2Fi bGUoZW5naW5lKTsKPiArCQliLT5pcnFfZW5hYmxlZCA9IGZhbHNlOwo+ICsJfQo+ICsKPiArCWlu dGVsX3J1bnRpbWVfcG1fcHV0KGVuZ2luZS0+aTkxNSk7Cj4gKwliLT5ycG1fd2FrZWxvY2sgPSBm YWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfd2FpdCAqdG9fd2Fp dChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSkKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihub2Rl LCBzdHJ1Y3QgaW50ZWxfd2FpdCwgbm9kZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9p ZCBfX2ludGVsX2JyZWFkY3J1bWJzX2ZpbmlzaChzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIs Cj4gKwkJCQkJICAgICAgc3RydWN0IGludGVsX3dhaXQgKndhaXQpCj4gK3sKPiArCWFzc2VydF9z cGluX2xvY2tlZCgmYi0+bG9jayk7Cj4gKwo+ICsJLyogVGhpcyByZXF1ZXN0IGlzIGNvbXBsZXRl ZCwgc28gcmVtb3ZlIGl0IGZyb20gdGhlIHRyZWUsIG1hcmsgaXQgYXMKPiArCSAqIGNvbXBsZXRl LCBhbmQgKnRoZW4qIHdha2UgdXAgdGhlIGFzc29jaWF0ZWQgdGFzay4KPiArCSAqLwo+ICsJcmJf ZXJhc2UoJndhaXQtPm5vZGUsICZiLT53YWl0ZXJzKTsKPiArCVJCX0NMRUFSX05PREUoJndhaXQt Pm5vZGUpOwo+ICsKPiArCXdha2VfdXBfcHJvY2Vzcyh3YWl0LT50YXNrKTsgLyogaW1wbGljaXQg c21wX3dtYigpICovCj4gK30KPiArCj4gK2Jvb2wgaW50ZWxfZW5naW5lX2FkZF93YWl0KHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkJICAgc3RydWN0IGludGVsX3dhaXQgKndh aXQpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFk Y3J1bWJzOwo+ICsJc3RydWN0IHJiX25vZGUgKipwLCAqcGFyZW50LCAqY29tcGxldGVkOwo+ICsJ Ym9vbCBmaXJzdDsKPiArCXUzMiBzZXFubzsKPiArCj4gKwlzcGluX2xvY2soJmItPmxvY2spOwo+ ICsKPiArCS8qIEluc2VydCB0aGUgcmVxdWVzdCBpbnRvIHRoZSByZXRpcmVtZW50IG9yZGVyZWQg bGlzdAo+ICsJICogb2Ygd2FpdGVycyBieSB3YWxraW5nIHRoZSByYnRyZWUuIElmIHdlIGFyZSB0 aGUgb2xkZXN0Cj4gKwkgKiBzZXFubyBpbiB0aGUgdHJlZSAodGhlIGZpcnN0IHRvIGJlIHJldGly ZWQpLCB0aGVuCj4gKwkgKiBzZXQgb3Vyc2VsdmVzIGFzIHRoZSBib3R0b20taGFsZi4KPiArCSAq Cj4gKwkgKiBBcyB3ZSBkZXNjZW5kIHRoZSB0cmVlLCBwcnVuZSBjb21wbGV0ZWQgYnJhbmNoZXMg c2luY2Ugd2UgaG9sZCB0aGUKPiArCSAqIHNwaW5sb2NrIHdlIGtub3cgdGhhdCB0aGUgZmlyc3Rf d2FpdGVyIG11c3QgYmUgZGVsYXllZCBhbmQgY2FuCj4gKwkgKiByZWR1Y2Ugc29tZSBvZiB0aGUg c2VxdWVudGlhbCB3YWtlIHVwIGxhdGVuY3kgaWYgd2UgdGFrZSBhY3Rpb24KPiArCSAqIG91cnNl bHZlcyBhbmQgd2FrZSB1cCB0aGUgY29tcGxldGVkIHRhc2tzIGluIHBhcmFsbGVsLiBBbHNvLCBi eQo+ICsJICogcmVtb3Zpbmcgc3RhbGUgZWxlbWVudHMgaW4gdGhlIHRyZWUsIHdlIG1heSBiZSBh YmxlIHRvIHJlZHVjZSB0aGUKPiArCSAqIHBpbmctcG9uZyBiZXR3ZWVuIHRoZSBvbGQgYm90dG9t LWhhbGYgYW5kIG91cnNlbHZlcyBhcyBmaXJzdC13YWl0ZXIuCj4gKwkgKi8KPiArCWZpcnN0ID0g dHJ1ZTsKPiArCXBhcmVudCA9IE5VTEw7Cj4gKwljb21wbGV0ZWQgPSBOVUxMOwo+ICsJc2Vxbm8g PSBlbmdpbmUtPmdldF9zZXFubyhlbmdpbmUpOwo+ICsKPiArCXAgPSAmYi0+d2FpdGVycy5yYl9u b2RlOwo+ICsJd2hpbGUgKCpwKSB7Cj4gKwkJcGFyZW50ID0gKnA7Cj4gKwkJaWYgKHdhaXQtPnNl cW5vID09IHRvX3dhaXQocGFyZW50KS0+c2Vxbm8pIHsKPiArCQkJLyogV2UgaGF2ZSBtdWx0aXBs ZSB3YWl0ZXJzIG9uIHRoZSBzYW1lIHNlcW5vLCBzZWxlY3QKPiArCQkJICogdGhlIGhpZ2hlc3Qg cHJpb3JpdHkgdGFzayAodGhhdCB3aXRoIHRoZSBzbWFsbGVzdAo+ICsJCQkgKiB0YXNrLT5wcmlv KSB0byBzZXJ2ZSBhcyB0aGUgYm90dG9tLWhhbGYgZm9yIHRoaXMKPiArCQkJICogZ3JvdXAuCj4g KwkJCSAqLwo+ICsJCQlpZiAod2FpdC0+dGFzay0+cHJpbyA+IHRvX3dhaXQocGFyZW50KS0+dGFz ay0+cHJpbykgewo+ICsJCQkJcCA9ICZwYXJlbnQtPnJiX3JpZ2h0Owo+ICsJCQkJZmlyc3QgPSBm YWxzZTsKPiArCQkJfSBlbHNlCj4gKwkJCQlwID0gJnBhcmVudC0+cmJfbGVmdDsKPiArCQl9IGVs c2UgaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKHdhaXQtPnNlcW5vLAo+ICsJCQkJCSAgICAgdG9fd2Fp dChwYXJlbnQpLT5zZXFubykpIHsKPiArCQkJcCA9ICZwYXJlbnQtPnJiX3JpZ2h0Owo+ICsJCQlp ZiAoaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sIHRvX3dhaXQocGFyZW50KS0+c2Vxbm8pKQo+ICsJ CQkJY29tcGxldGVkID0gcGFyZW50Owo+ICsJCQllbHNlCj4gKwkJCQlmaXJzdCA9IGZhbHNlOwo+ ICsJCX0gZWxzZQo+ICsJCQlwID0gJnBhcmVudC0+cmJfbGVmdDsKPiArCX0KPiArCXJiX2xpbmtf bm9kZSgmd2FpdC0+bm9kZSwgcGFyZW50LCBwKTsKPiArCXJiX2luc2VydF9jb2xvcigmd2FpdC0+ bm9kZSwgJmItPndhaXRlcnMpOwo+ICsJR0VNX0JVR19PTighZmlyc3QgJiYgIWItPnRhc2tsZXQp Owo+ICsKPiArCWlmIChjb21wbGV0ZWQpIHsKPiArCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJi X25leHQoY29tcGxldGVkKTsKPiArCj4gKwkJR0VNX0JVR19PTighbmV4dCAmJiAhZmlyc3QpOwo+ ICsJCWlmIChuZXh0ICYmIG5leHQgIT0gJndhaXQtPm5vZGUpIHsKPiArCQkJR0VNX0JVR19PTihm aXJzdCk7Cj4gKwkJCWItPmZpcnN0X3dhaXQgPSB0b193YWl0KG5leHQpOwo+ICsJCQlzbXBfc3Rv cmVfbWIoYi0+dGFza2xldCwgYi0+Zmlyc3Rfd2FpdC0+dGFzayk7Cj4gKwkJCS8qIEFzIHRoZXJl IGlzIGEgZGVsYXkgYmV0d2VlbiByZWFkaW5nIHRoZSBjdXJyZW50Cj4gKwkJCSAqIHNlcW5vLCBw cm9jZXNzaW5nIHRoZSBjb21wbGV0ZWQgdGFza3MgYW5kIHNlbGVjdGluZwo+ICsJCQkgKiB0aGUg bmV4dCB3YWl0ZXIsIHdlIG1heSBoYXZlIG1pc3NlZCB0aGUgaW50ZXJydXB0Cj4gKwkJCSAqIGFu ZCBzbyBuZWVkIGZvciB0aGUgbmV4dCBib3R0b20taGFsZiB0byB3YWtldXAuCj4gKwkJCSAqCj4g KwkJCSAqIEFsc28gYXMgd2UgZW5hYmxlIHRoZSBJUlEsIHdlIG1heSBtaXNzIHRoZQo+ICsJCQkg KiBpbnRlcnJ1cHQgZm9yIHRoYXQgc2Vxbm8sIHNvIHdlIGhhdmUgdG8gd2FrZSB1cAo+ICsJCQkg KiB0aGUgbmV4dCBib3R0b20taGFsZiBpbiBvcmRlciB0byBkbyBhIGNvaGVyZW50IGNoZWNrCj4g KwkJCSAqIGluIGNhc2UgdGhlIHNlcW5vIHBhc3NlZC4KPiArCQkJICovCj4gKwkJCV9faW50ZWxf YnJlYWRjcnVtYnNfZW5hYmxlX2lycShiKTsKPiArCQkJd2FrZV91cF9wcm9jZXNzKHRvX3dhaXQo bmV4dCktPnRhc2spOwo+ICsJCX0KPiArCj4gKwkJZG8gewo+ICsJCQlzdHJ1Y3QgaW50ZWxfd2Fp dCAqY3J1bWIgPSB0b193YWl0KGNvbXBsZXRlZCk7Cj4gKwkJCWNvbXBsZXRlZCA9IHJiX3ByZXYo Y29tcGxldGVkKTsKPiArCQkJX19pbnRlbF9icmVhZGNydW1ic19maW5pc2goYiwgY3J1bWIpOwo+ ICsJCX0gd2hpbGUgKGNvbXBsZXRlZCk7Cj4gKwl9Cj4gKwo+ICsJaWYgKGZpcnN0KSB7Cj4gKwkJ R0VNX0JVR19PTihyYl9maXJzdCgmYi0+d2FpdGVycykgIT0gJndhaXQtPm5vZGUpOwo+ICsJCWIt PmZpcnN0X3dhaXQgPSB3YWl0Owo+ICsJCXNtcF9zdG9yZV9tYihiLT50YXNrbGV0LCB3YWl0LT50 YXNrKTsKPiArCQlmaXJzdCA9X19pbnRlbF9icmVhZGNydW1ic19lbmFibGVfaXJxKGIpOwo+ICsJ fQo+ICsJR0VNX0JVR19PTighYi0+dGFza2xldCk7Cj4gKwlHRU1fQlVHX09OKCFiLT5maXJzdF93 YWl0KTsKPiArCUdFTV9CVUdfT04ocmJfZmlyc3QoJmItPndhaXRlcnMpICE9ICZiLT5maXJzdF93 YWl0LT5ub2RlKTsKPiArCj4gKwlzcGluX3VubG9jaygmYi0+bG9jayk7Cj4gKwo+ICsJcmV0dXJu IGZpcnN0Owo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2VuZ2luZV9lbmFibGVfZmFrZV9pcnEoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwltb2RfdGltZXIoJmVuZ2luZS0+ YnJlYWRjcnVtYnMuZmFrZV9pcnEsIGppZmZpZXMgKyAxKTsKPiArfQo+ICsKPiArc3RhdGljIGlu bGluZSBib29sIGNoYWluX3dha2V1cChzdHJ1Y3QgcmJfbm9kZSAqcmIsIGludCBwcmlvcml0eSkK PiArewo+ICsJcmV0dXJuIHJiICYmIHRvX3dhaXQocmIpLT50YXNrLT5wcmlvIDw9IHByaW9yaXR5 Owo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2VuZ2luZV9yZW1vdmVfd2FpdChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCSAgICAgIHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0KQo+ ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1i czsKPiArCj4gKwkvKiBRdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyB3YWl0ZXIgd2FzIGFscmVh ZHkgZGVjb3VwbGVkIGZyb20KPiArCSAqIHRoZSB0cmVlIGJ5IHRoZSBib3R0b20taGFsZiB0byBh dm9pZCBjb250ZW50aW9uIG9uIHRoZSBzcGlubG9jawo+ICsJICogYnkgdGhlIGhlcmQuCj4gKwkg Ki8KPiArCWlmIChSQl9FTVBUWV9OT0RFKCZ3YWl0LT5ub2RlKSkKPiArCQlyZXR1cm47Cj4gKwo+ ICsJc3Bpbl9sb2NrKCZiLT5sb2NrKTsKPiArCj4gKwlpZiAoUkJfRU1QVFlfTk9ERSgmd2FpdC0+ bm9kZSkpCj4gKwkJZ290byBvdXRfdW5sb2NrOwo+ICsKPiArCWlmIChiLT5maXJzdF93YWl0ID09 IHdhaXQpIHsKPiArCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKPiArCQljb25zdCBpbnQgcHJpb3Jp dHkgPSB3YWl0LT50YXNrLT5wcmlvOwo+ICsKPiArCQlHRU1fQlVHX09OKGItPnRhc2tsZXQgIT0g d2FpdC0+dGFzayk7Cj4gKwo+ICsJCS8qIFdlIGFyZSB0aGUgY3VycmVudCBib3R0b20taGFsZi4g RmluZCB0aGUgbmV4dCBjYW5kaWRhdGUsCj4gKwkJICogdGhlIGZpcnN0IHdhaXRlciBpbiB0aGUg cXVldWUgb24gdGhlIHJlbWFpbmluZyBvbGRlc3QKPiArCQkgKiByZXF1ZXN0LiBBcyBtdWx0aXBs ZSBzZXFub3MgbWF5IGNvbXBsZXRlIGluIHRoZSB0aW1lIGl0Cj4gKwkJICogdGFrZXMgdXMgdG8g d2FrZSB1cCBhbmQgZmluZCB0aGUgbmV4dCB3YWl0ZXIsIHdlIGhhdmUgdG8KPiArCQkgKiB3YWtl IHVwIHRoYXQgd2FpdGVyIGZvciBpdCB0byBwZXJmb3JtIGl0cyBvd24gY29oZXJlbnQKPiArCQkg KiBjb21wbGV0aW9uIGNoZWNrLgo+ICsJCSAqLwo+ICsJCW5leHQgPSByYl9uZXh0KCZ3YWl0LT5u b2RlKTsKPiArCQlpZiAoY2hhaW5fd2FrZXVwKG5leHQsIHByaW9yaXR5KSkgewo+ICsJCQkvKiBJ ZiB0aGUgbmV4dCB3YWl0ZXIgaXMgYWxyZWFkeSBjb21wbGV0ZSwKPiArCQkJICogd2FrZSBpdCB1 cCBhbmQgY29udGludWUgb250byB0aGUgbmV4dCB3YWl0ZXIuIFNvCj4gKwkJCSAqIGlmIGhhdmUg YSBzbWFsbCBoZXJkLCB0aGV5IHdpbGwgd2FrZSB1cCBpbiBwYXJhbGxlbAo+ICsJCQkgKiByYXRo ZXIgdGhhbiBzZXF1ZW50aWFsbHksIHdoaWNoIHNob3VsZCByZWR1Y2UKPiArCQkJICogdGhlIG92 ZXJhbGwgbGF0ZW5jeSBpbiB3YWtpbmcgYWxsIHRoZSBjb21wbGV0ZWQKPiArCQkJICogY2xpZW50 cy4KPiArCQkJICoKPiArCQkJICogSG93ZXZlciwgd2FraW5nIHVwIGEgY2hhaW4gYWRkcyBleHRy YSBsYXRlbmN5IHRvCj4gKwkJCSAqIHRoZSBmaXJzdF93YWl0ZXIuIFRoaXMgaXMgdW5kZXNpcmFi bGUgaWYgdGhhdAo+ICsJCQkgKiB3YWl0ZXIgaXMgYSBoaWdoIHByaW9yaXR5IHRhc2suCj4gKwkJ CSAqLwo+ICsJCQl1MzIgc2Vxbm8gPSBlbmdpbmUtPmdldF9zZXFubyhlbmdpbmUpOwo+ICsJCQl3 aGlsZSAoaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sIHRvX3dhaXQobmV4dCktPnNlcW5vKSkgewo+ ICsJCQkJc3RydWN0IHJiX25vZGUgKm4gPSByYl9uZXh0KG5leHQpOwo+ICsJCQkJX19pbnRlbF9i cmVhZGNydW1ic19maW5pc2goYiwgdG9fd2FpdChuZXh0KSk7Cj4gKwkJCQluZXh0ID0gbjsKPiAr CQkJCWlmICghY2hhaW5fd2FrZXVwKG5leHQsIHByaW9yaXR5KSkKPiArCQkJCQlicmVhazsKPiAr CQkJfQo+ICsJCX0KPiArCj4gKwkJaWYgKG5leHQpIHsKPiArCQkJLyogSW4gb3VyIGhhc3RlLCB3 ZSBtYXkgaGF2ZSBjb21wbGV0ZWQgdGhlIGZpcnN0IHdhaXRlcgo+ICsJCQkgKiBiZWZvcmUgd2Ug ZW5hYmxlZCB0aGUgaW50ZXJydXB0LiBEbyBzbyBub3cgYXMgd2UKPiArCQkJICogaGF2ZSBhIHNl Y29uZCB3YWl0ZXIgZm9yIGEgZnV0dXJlIHNlcW5vLiBBZnRlcndhcmRzLAo+ICsJCQkgKiB3ZSBo YXZlIHRvIHdha2UgdXAgdGhhdCB3YWl0ZXIgaW4gY2FzZSB3ZSBtaXNzZWQKPiArCQkJICogdGhl IGludGVycnVwdCwgb3IgaWYgd2UgaGF2ZSB0byBoYW5kbGUgYW4KPiArCQkJICogZXhjZXB0aW9u IHJhdGhlciB0aGFuIGEgc2Vxbm8gY29tcGxldGlvbi4KPiArCQkJICovCj4gKwkJCWItPmZpcnN0 X3dhaXQgPSB0b193YWl0KG5leHQpOwo+ICsJCQlzbXBfc3RvcmVfbWIoYi0+dGFza2xldCwgYi0+ Zmlyc3Rfd2FpdC0+dGFzayk7Cj4gKwkJCWlmIChiLT5maXJzdF93YWl0LT5zZXFubyAhPSB3YWl0 LT5zZXFubykKPiArCQkJCV9faW50ZWxfYnJlYWRjcnVtYnNfZW5hYmxlX2lycShiKTsKPiArCQkJ d2FrZV91cF9wcm9jZXNzKGItPnRhc2tsZXQpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWItPmZpcnN0 X3dhaXQgPSBOVUxMOwo+ICsJCQlXUklURV9PTkNFKGItPnRhc2tsZXQsIE5VTEwpOwo+ICsJCQlf X2ludGVsX2JyZWFkY3J1bWJzX2Rpc2FibGVfaXJxKGIpOwo+ICsJCX0KPiArCX0gZWxzZSB7Cj4g KwkJR0VNX0JVR19PTihyYl9maXJzdCgmYi0+d2FpdGVycykgPT0gJndhaXQtPm5vZGUpOwo+ICsJ fQo+ICsKPiArCUdFTV9CVUdfT04oUkJfRU1QVFlfTk9ERSgmd2FpdC0+bm9kZSkpOwo+ICsJcmJf ZXJhc2UoJndhaXQtPm5vZGUsICZiLT53YWl0ZXJzKTsKPiArCj4gK291dF91bmxvY2s6Cj4gKwlH RU1fQlVHX09OKGItPmZpcnN0X3dhaXQgPT0gd2FpdCk7Cj4gKwlHRU1fQlVHX09OKHJiX2ZpcnN0 KCZiLT53YWl0ZXJzKSAhPSAoYi0+Zmlyc3Rfd2FpdCA/ICZiLT5maXJzdF93YWl0LT5ub2RlIDog TlVMTCkpOwo+ICsJR0VNX0JVR19PTighYi0+dGFza2xldCBeIFJCX0VNUFRZX1JPT1QoJmItPndh aXRlcnMpKTsKPiArCXNwaW5fdW5sb2NrKCZiLT5sb2NrKTsKPiArfQo+ICsKPiArdm9pZCBpbnRl bF9lbmdpbmVfaW5pdF9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gK3sKPiArCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1 bWJzOwo+ICsKPiArCXNwaW5fbG9ja19pbml0KCZiLT5sb2NrKTsKPiArCXNldHVwX3RpbWVyKCZi LT5mYWtlX2lycSwKPiArCQkgICAgaW50ZWxfYnJlYWRjcnVtYnNfZmFrZV9pcnEsCj4gKwkJICAg ICh1bnNpZ25lZCBsb25nKWVuZ2luZSk7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfZW5naW5lX2Zp bmlfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlz dHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKPiArCj4g KwlkZWxfdGltZXJfc3luYygmYi0+ZmFrZV9pcnEpOwo+ICt9Cj4gKwo+ICt1bnNpZ25lZCBpbnRl bF9raWNrX3dhaXRlcnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCXVuc2lnbmVkIG1hc2sgPSAwOwo+ICsK PiArCS8qIFRvIGF2b2lkIHRoZSB0YXNrX3N0cnVjdCBkaXNhcHBlYXJpbmcgYmVuZWF0aCB1cyBh cyB3ZSB3YWtlIHVwCj4gKwkgKiB0aGUgcHJvY2Vzcywgd2UgbXVzdCBmaXJzdCBpbnNwZWN0IHRo ZSB0YXNrX3N0cnVjdC0+c3RhdGUgdW5kZXIgdGhlCj4gKwkgKiBSQ1UgbG9jaywgaS5lLiBhcyB3 ZSBjYWxsIHdha2VfdXBfcHJvY2VzcygpIHdlIG11c3QgYmUgaG9sZGluZyB0aGUKPiArCSAqIHJj dV9yZWFkX2xvY2soKS4KPiArCSAqLwo+ICsJcmN1X3JlYWRfbG9jaygpOwo+ICsJZm9yX2VhY2hf ZW5naW5lKGVuZ2luZSwgaTkxNSkKPiArCQlpZiAodW5saWtlbHkoaW50ZWxfZW5naW5lX3dha2V1 cChlbmdpbmUpKSkKPiArCQkJbWFzayB8PSBpbnRlbF9lbmdpbmVfZmxhZyhlbmdpbmUpOwo+ICsJ cmN1X3JlYWRfdW5sb2NrKCk7Cj4gKwo+ICsJcmV0dXJuIG1hc2s7Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9scmMuYwo+IGluZGV4IDVjMTkxYTFhZmFhZi4uMjcwNDA5ZTlhYzdhIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBAQCAtMTg5MCw2ICsxODkwLDggQEAgdm9pZCBpbnRl bF9sb2dpY2FsX3JpbmdfY2xlYW51cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4g ICAJaTkxNV9jbWRfcGFyc2VyX2ZpbmlfcmluZyhlbmdpbmUpOwo+ICAgCWk5MTVfZ2VtX2JhdGNo X3Bvb2xfZmluaSgmZW5naW5lLT5iYXRjaF9wb29sKTsKPgo+ICsJaW50ZWxfZW5naW5lX2Zpbmlf YnJlYWRjcnVtYnMoZW5naW5lKTsKPiArCj4gICAJaWYgKGVuZ2luZS0+c3RhdHVzX3BhZ2Uub2Jq KSB7Cj4gICAJCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoZW5naW5lLT5zdGF0dXNfcGFnZS5v YmopOwo+ICAgCQllbmdpbmUtPnN0YXR1c19wYWdlLm9iaiA9IE5VTEw7Cj4gQEAgLTE5MjcsNyAr MTkyOSw3IEBAIGxvZ2ljYWxfcmluZ19kZWZhdWx0X2lycXMoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLCB1bnNpZ25lZCBzaGlmdCkKPiAgIHsKPiAgIAllbmdpbmUtPmlycV9lbmFibGVf bWFzayA9IEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCA8PCBzaGlmdDsKPiAgIAllbmdpbmUtPmly cV9rZWVwX21hc2sgPSBHVF9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQgPDwgc2hpZnQ7Cj4gLQlp bml0X3dhaXRxdWV1ZV9oZWFkKCZlbmdpbmUtPmlycV9xdWV1ZSk7Cj4gKwlpbnRlbF9lbmdpbmVf aW5pdF9icmVhZGNydW1icyhlbmdpbmUpOwo+ICAgfQo+Cj4gICBzdGF0aWMgaW50Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwo+IGluZGV4IDFhMzg5ZDBkY2RkMi4uOTVm MDQzNDVkM2VjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jpbmdi dWZmZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwo+ IEBAIC0yMzA5LDcgKzIzMDksNyBAQCBzdGF0aWMgaW50IGludGVsX2luaXRfcmluZ19idWZmZXIo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAltZW1zZXQoZW5naW5lLT5zZW1hcGhvcmUuc3lu Y19zZXFubywgMCwKPiAgIAkgICAgICAgc2l6ZW9mKGVuZ2luZS0+c2VtYXBob3JlLnN5bmNfc2Vx bm8pKTsKPgo+IC0JaW5pdF93YWl0cXVldWVfaGVhZCgmZW5naW5lLT5pcnFfcXVldWUpOwo+ICsJ aW50ZWxfZW5naW5lX2luaXRfYnJlYWRjcnVtYnMoZW5naW5lKTsKPgo+ICAgCS8qIFdlIG1heSBu ZWVkIHRvIGRvIHRoaW5ncyB3aXRoIHRoZSBzaHJpbmtlciB3aGljaAo+ICAgCSAqIHJlcXVpcmUg dXMgdG8gaW1tZWRpYXRlbHkgc3dpdGNoIGJhY2sgdG8gdGhlIGRlZmF1bHQKPiBAQCAtMjM4OSw2 ICsyMzg5LDcgQEAgdm9pZCBpbnRlbF9jbGVhbnVwX2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4KPiAgIAlpOTE1X2NtZF9wYXJzZXJfZmluaV9yaW5nKGVuZ2luZSk7Cj4g ICAJaTkxNV9nZW1fYmF0Y2hfcG9vbF9maW5pKCZlbmdpbmUtPmJhdGNoX3Bvb2wpOwo+ICsJaW50 ZWxfZW5naW5lX2ZpbmlfYnJlYWRjcnVtYnMoZW5naW5lKTsKPgo+ICAgCWludGVsX3JpbmdfY29u dGV4dF91bnBpbihkZXZfcHJpdi0+a2VybmVsX2NvbnRleHQsIGVuZ2luZSk7Cj4KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gaW5kZXggYjMzYzg3NmZlZDIwLi4wNjEw ODgzNjBiODAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4g QEAgLTE2MCw2ICsxNjAsMzIgQEAgc3RydWN0IGludGVsX2VuZ2luZV9jcyB7Cj4gICAJc3RydWN0 IGludGVsX3JpbmdidWZmZXIgKmJ1ZmZlcjsKPiAgIAlzdHJ1Y3QgbGlzdF9oZWFkIGJ1ZmZlcnM7 Cj4KPiArCS8qIFJhdGhlciB0aGFuIGhhdmUgZXZlcnkgY2xpZW50IHdhaXQgdXBvbiBhbGwgdXNl ciBpbnRlcnJ1cHRzLAo+ICsJICogd2l0aCB0aGUgaGVyZCB3YWtpbmcgYWZ0ZXIgZXZlcnkgaW50 ZXJydXB0IGFuZCBlYWNoIGRvaW5nIHRoZQo+ICsJICogaGVhdnl3ZWlnaHQgc2Vxbm8gZGFuY2Us IHdlIGRlbGVnYXRlIHRoZSB0YXNrIChvZiBiZWluZyB0aGUKPiArCSAqIGJvdHRvbS1oYWxmIG9m IHRoZSB1c2VyIGludGVycnVwdCkgdG8gdGhlIGZpcnN0IGNsaWVudC4gQWZ0ZXIKPiArCSAqIGV2 ZXJ5IGludGVycnVwdCwgd2Ugd2FrZSB1cCBvbmUgY2xpZW50LCB3aG8gZG9lcyB0aGUgaGVhdnl3 ZWlnaHQKPiArCSAqIGNvaGVyZW50IHNlcW5vIHJlYWQgYW5kIGVpdGhlciBnb2VzIGJhY2sgdG8g c2xlZXAgKGlmIGluY29tcGxldGUpLAo+ICsJICogb3Igd2FrZXMgdXAgYWxsIHRoZSBjb21wbGV0 ZWQgY2xpZW50cyBpbiBwYXJhbGxlbCwgYmVmb3JlIHRoZW4KPiArCSAqIHRyYW5zZmVycmluZyB0 aGUgYm90dG9tLWhhbGYgc3RhdHVzIHRvIHRoZSBuZXh0IGNsaWVudCBpbiB0aGUgcXVldWUuCj4g KwkgKgo+ICsJICogQ29tcGFyZWQgdG8gd2Fsa2luZyB0aGUgZW50aXJlIGxpc3Qgb2Ygd2FpdGVy cyBpbiBhIHNpbmdsZSBkZWRpY2F0ZWQKPiArCSAqIGJvdHRvbS1oYWxmLCB3ZSByZWR1Y2UgdGhl IGxhdGVuY3kgb2YgdGhlIGZpcnN0IHdhaXRlciBieSBhdm9pZGluZwo+ICsJICogYSBjb250ZXh0 IHN3aXRjaCwgYnV0IGluY3VyIGFkZGl0aW9uYWwgY29oZXJlbnQgc2Vxbm8gcmVhZHMgd2hlbgo+ ICsJICogZm9sbG93aW5nIHRoZSBjaGFpbiBvZiByZXF1ZXN0IGJyZWFkY3J1bWJzLiBTaW5jZSBp dCBpcyBtb3N0IGxpa2VseQo+ICsJICogdGhhdCB3ZSBoYXZlIGEgc2luZ2xlIGNsaWVudCB3YWl0 aW5nIG9uIGVhY2ggc2Vxbm8sIHRoZW4gcmVkdWNpbmcKPiArCSAqIHRoZSBvdmVyaGVhZCBvZiB3 YWtpbmcgdGhhdCBjbGllbnQgaXMgbXVjaCBwcmVmZXJyZWQuCj4gKwkgKi8KPiArCXN0cnVjdCBp bnRlbF9icmVhZGNydW1icyB7Cj4gKwkJc3BpbmxvY2tfdCBsb2NrOyAvKiBwcm90ZWN0cyB0aGUg bGlzdHMgb2YgcmVxdWVzdHMgKi8KPiArCQlzdHJ1Y3QgcmJfcm9vdCB3YWl0ZXJzOyAvKiBzb3J0 ZWQgYnkgcmV0aXJlbWVudCwgcHJpb3JpdHkgKi8KPiArCQlzdHJ1Y3QgaW50ZWxfd2FpdCAqZmly c3Rfd2FpdDsgLyogb2xkZXN0IHdhaXRlciBieSByZXRpcmVtZW50ICovCj4gKwkJc3RydWN0IHRh c2tfc3RydWN0ICp0YXNrbGV0OyAvKiBiaCBmb3IgdXNlciBpbnRlcnJ1cHRzICovCj4gKwkJc3Ry dWN0IHRpbWVyX2xpc3QgZmFrZV9pcnE7IC8qIHVzZWQgYWZ0ZXIgYSBtaXNzZWQgaW50ZXJydXB0 ICovCj4gKwkJYm9vbCBpcnFfZW5hYmxlZDsKPiArCQlib29sIHJwbV93YWtlbG9jazsKPiArCX0g YnJlYWRjcnVtYnM7Cj4gKwo+ICAgCS8qCj4gICAJICogQSBwb29sIG9mIG9iamVjdHMgdG8gdXNl IGFzIHNoYWRvdyBjb3BpZXMgb2YgY2xpZW50IGJhdGNoIGJ1ZmZlcnMKPiAgIAkgKiB3aGVuIHRo ZSBjb21tYW5kIHBhcnNlciBpcyBlbmFibGVkLiBQcmV2ZW50cyB0aGUgY2xpZW50IGZyb20KPiBA QCAtMzA4LDggKzMzNCw2IEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mgewo+Cj4gICAJYm9vbCBn cHVfY2FjaGVzX2RpcnR5Owo+Cj4gLQl3YWl0X3F1ZXVlX2hlYWRfdCBpcnFfcXVldWU7Cj4gLQo+ ICAgCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpsYXN0X2NvbnRleHQ7Cj4KPiAgIAlzdHJ1Y3Qg aW50ZWxfcmluZ19oYW5nY2hlY2sgaGFuZ2NoZWNrOwo+IEBAIC00OTUsNCArNTE5LDQ0IEBAIHN0 YXRpYyBpbmxpbmUgdTMyIGludGVsX2h3c19zZXFub19hZGRyZXNzKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiAgIAlyZXR1cm4gZW5naW5lLT5zdGF0dXNfcGFnZS5nZnhfYWRkciAr IEk5MTVfR0VNX0hXU19JTkRFWF9BRERSOwo+ICAgfQo+Cj4gKy8qIGludGVsX2JyZWFkY3J1bWJz LmMgLS0gdXNlciBpbnRlcnJ1cHQgYm90dG9tLWhhbGYgZm9yIHdhaXRlcnMgKi8KPiArc3RydWN0 IGludGVsX3dhaXQgewo+ICsJc3RydWN0IHJiX25vZGUgbm9kZTsKPiArCXN0cnVjdCB0YXNrX3N0 cnVjdCAqdGFzazsKPiArCXUzMiBzZXFubzsKPiArfTsKPiArdm9pZCBpbnRlbF9lbmdpbmVfaW5p dF9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICtzdGF0aWMg aW5saW5lIHZvaWQgaW50ZWxfd2FpdF9pbml0KHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0LCB1MzIg c2Vxbm8pCj4gK3sKPiArCXdhaXQtPnRhc2sgPSBjdXJyZW50Owo+ICsJd2FpdC0+c2Vxbm8gPSBz ZXFubzsKPiArfQo+ICtzdGF0aWMgaW5saW5lIGJvb2wgaW50ZWxfd2FpdF9jb21wbGV0ZShjb25z dCBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCkKPiArewo+ICsJcmV0dXJuIFJCX0VNUFRZX05PREUo JndhaXQtPm5vZGUpOwo+ICt9Cj4gK2Jvb2wgaW50ZWxfZW5naW5lX2FkZF93YWl0KHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkJICAgc3RydWN0IGludGVsX3dhaXQgKndhaXQp Owo+ICt2b2lkIGludGVsX2VuZ2luZV9yZW1vdmVfd2FpdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsCj4gKwkJCSAgICAgIHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0KTsKPiArc3RhdGlj IGlubGluZSBib29sIGludGVsX2VuZ2luZV9oYXNfd2FpdGVyKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKPiArewo+ICsJcmV0dXJuIFJFQURfT05DRShlbmdpbmUtPmJyZWFkY3J1bWJz LnRhc2tsZXQpOwo+ICt9Cj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF9lbmdpbmVfd2FrZXVw KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJYm9vbCB3YWtldXAgPSBm YWxzZTsKPiArCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IFJFQURfT05DRShlbmdpbmUtPmJy ZWFkY3J1bWJzLnRhc2tsZXQpOwo+ICsJLyogTm90ZSB0aGF0IGZvciB0aGlzIG5vdCB0byBkYW5n ZXJvdXNseSBjaGFzZSBhIGRhbmdsaW5nIHBvaW50ZXIsCj4gKwkgKiB0aGUgY2FsbGVyIGlzIHJl c3BvbnNpYmxlIGZvciBlbnN1cmUgdGhhdCB0aGUgdGFzayByZW1haW4gdmFsaWQgZm9yCj4gKwkg KiB3YWtlX3VwX3Byb2Nlc3MoKSBpLmUuIHRoYXQgdGhlIFJDVSBncmFjZSBwZXJpb2QgY2Fubm90 IGV4cGlyZS4KPiArCSAqLwo+ICsJaWYgKHRhc2spCj4gKwkJd2FrZXVwID0gd2FrZV91cF9wcm9j ZXNzKHRhc2spOwo+ICsJcmV0dXJuIHdha2V1cDsKPiArfQo+ICt2b2lkIGludGVsX2VuZ2luZV9l bmFibGVfZmFrZV9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArdm9pZCBp bnRlbF9lbmdpbmVfZmluaV9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpOwo+ICt1bnNpZ25lZCBpbnRlbF9raWNrX3dhaXRlcnMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUpOwo+ICsKPiAgICNlbmRpZiAvKiBfSU5URUxfUklOR0JVRkZFUl9IXyAqLwo+CgpB ZnRlciB0aGUgbGF0ZXN0IGRpc2N1c3Npb24gcmV2aXZhbCwgSSBjYW5ub3Qgc3BvdCBhbnkgbW9y ZSBpc3N1ZXMgc28gaXQgCmxvb2tzIGdvb2QgdG8gbWUuIEkgZXZlbiBzbW9rZSB0ZXN0ZWQgaXQg YSBiaXQuIEJ1dCBpdCBpcyBhIGNvbXBsZXggCmJlYXN0IHNvIGFub3RoZXIgcGFpciBvZiBleWVz IG9uIGl0IHdvdWxkIGJlIGdvb2QgSSB0aGluay4gRXNwZWNpYWxseSBvbiAKdGhlIEdQVSBlcnJv ciBoYW5kbGluZyB3aGljaCBJIGFtIG5vdCB0aGF0IGZhbWlsaWFyIHdpdGguCgpSZXZpZXdlZC1i eTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClJlZ2FyZHMsCgpU dnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==