From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.5 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 10D0FC433E0 for ; Mon, 8 Feb 2021 15:23:27 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 839F864E88 for ; Mon, 8 Feb 2021 15:23:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 839F864E88 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id EC7EA6E906; Mon, 8 Feb 2021 15:23:25 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 95FD66E90A for ; Mon, 8 Feb 2021 15:23:24 +0000 (UTC) IronPort-SDR: +7rxb35JX8+sSCPEDZ3Xpw31rTPQtcahE1wcrmILpwkHzOwPeAzJDoSOqFZvpyUoKMdKkUVTq5 GOzqN7eKFOkw== X-IronPort-AV: E=McAfee;i="6000,8403,9888"; a="245798427" X-IronPort-AV: E=Sophos;i="5.81,162,1610438400"; d="scan'208";a="245798427" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Feb 2021 07:23:22 -0800 IronPort-SDR: 5SqzMKEwja4qWGDy96/X+HvB0cPc7BdMnMfYZZGa0jhNSYH5fq0aUA4t/yb3hklgb4aqrbcoJs EtQar4nlt+RA== X-IronPort-AV: E=Sophos;i="5.81,162,1610438400"; d="scan'208";a="395445311" Received: from dlauner-mobl.ger.corp.intel.com (HELO [10.214.195.182]) ([10.214.195.182]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Feb 2021 07:23:20 -0800 To: Chris Wilson , intel-gfx@lists.freedesktop.org References: <20210208105236.28498-1-chris@chris-wilson.co.uk> <20210208105236.28498-9-chris@chris-wilson.co.uk> From: Tvrtko Ursulin Organization: Intel Corporation UK Plc Message-ID: <9a15139e-14e0-f7cd-0afe-08e7dd7aac2c@linux.intel.com> Date: Mon, 8 Feb 2021 15:23:17 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 MIME-Version: 1.0 In-Reply-To: <20210208105236.28498-9-chris@chris-wilson.co.uk> Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH 09/31] drm/i915: Replace priolist rbtree with a skiplist X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Ck9uIDA4LzAyLzIwMjEgMTA6NTIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBSZXBsYWNlIHRoZSBw cmlvbGlzdCByYnRyZWUgd2l0aCBhIHNraXBsaXN0LiBUaGUgY3J1Y2lhbCBkaWZmZXJlbmNlIGlz Cj4gdGhhdCB3YWxraW5nIGFuZCByZW1vdmluZyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHNraXBs aXN0IGlzIE8oMSksIGJ1dAo+IE8obGdOKSBmb3IgYW4gcmJ0cmVlLCBhcyB3ZSBuZWVkIHRvIHJl YmFsYW5jZSBvbiByZW1vdmUuIFRoaXMgaXMgYQo+IGhpbmRyYW5jZSBmb3Igc3VibWlzc2lvbiBs YXRlbmN5IGFzIGl0IG9jY3VycyBiZXR3ZWVuIHBpY2tpbmcgYSByZXF1ZXN0Cj4gZm9yIHRoZSBw cmlvbGlzdCBhbmQgc3VibWl0dGluZyBpdCB0byBoYXJkd2FyZSwgYXMgd2VsbCBlZmZlY3RpdmVs eQo+IHRyaXBsaW5nIHRoZSBudW1iZXIgb2YgTyhsZ04pIG9wZXJhdGlvbnMgcmVxdWlyZWQgdW5k ZXIgdGhlIGlycW9mZiBsb2NrLgo+IFRoaXMgaXMgY3JpdGljYWwgdG8gcmVkdWNpbmcgdGhlIGxh dGVuY3kgaml0dGVyIHdpdGggbXVsdGlwbGUgY2xpZW50cy4KPiAKPiBUaGUgZG93bnNpZGVzIHRv IHNraXBsaXN0cyBhcmUgdGhhdCBsb29rdXAvaW5zZXJ0aW9uIGlzIG9ubHkKPiBwcm9iYWJpbGlz dGljYWxseSBPKGxnTikgYW5kIHRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgbWVtb3J5IHBlbmFsdHkg dG8KPiBhcyBlYWNoIHNraXAgbm9kZSBpcyBsYXJnZXIgdGhhbiB0aGUgcmJ0cmVlIGVxdWl2YWxl bnQuIEZ1cnRoZXJtb3JlLCB3ZQo+IGRvbid0IHVzZSBkeW5hbWljIGFycmF5cyBmb3IgdGhlIHNr aXBsaXN0LCBzbyB0aGUgYWxsb2NhdGlvbiBpcyBmaXhlZCwKPiBhbmQgaW1wb3NlcyBhbiB1cHBl ciBib3VuZCBvbiB0aGUgc2NhbGFiaWxpdHkgd3J0IHRvIHRoZSBudW1iZXIgb2YKPiBpbmZsaWdo dCByZXF1ZXN0cy4KPiAKPiBJbiB0aGUgZm9sbG93aW5nIHBhdGNoZXMsIHdlIGludHJvZHVjZSBh IG5ldyBzb3J0IGtleSB0byB0aGUgc2NoZWR1bGVyLAo+IGEgdmlydHVhbCBkZWFkbGluZS4gVGhp cyBpbXBvc2VzIGEgZGlmZmVyZW50IHN0cnVjdHVyZSB0byB0aGUgdHJlZS4KPiBVc2luZyBhIHBy aW9yaXR5IHNvcnQsIHdlIGhhdmUgdmVyeSBmZXcgcHJpb3JpdHkgbGV2ZWxzIGFjdGl2ZSBhdCBh bnkKPiB0aW1lLCBtb3N0IGxpa2VseSBqdXN0IHRoZSBkZWZhdWx0IHByaW9yaXR5IGFuZCBzbyB0 aGUgcmJ0cmVlIGRlZ2VuZXJhdGVzCj4gdG8gYSBzaW5nbGUgZWxlbWVudHMgY29udGFpbmluZyB0 aGUgbGlzdCBvZiBhbGwgcmVhZHkgcmVxdWVzdHMuIFRoZQo+IGRlYWRsaW5lcyBpbiBjb250cmFz dCBhcmUgdmVyeSBzcGFyc2UsIGFuZCB0eXBpY2FsbHkgZWFjaCByZXF1ZXN0IGhhcyBhCj4gdW5p cXVlIGRlYWRsaW5lLiBJbnN0ZWFkIG9mIGJlaW5nIGFibGUgdG8gc2ltcGx5IHdhbGsgdGhlIGxp c3QgZHVyaW5nCj4gZGVxdWV1ZSwgd2l0aCB0aGUgZGVhZGxpbmUgc2NoZWR1bGVyIHdlIGhhdmUg dG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBic3QKPiBvbiB0aGUgY3JpdGljYWwgc3VibWlzc2lvbiBw YXRoLiBTa2lwbGlzdHMgYXJlIHZhc3RseSBzdXBlcmlvciBpbiB0aGlzCj4gaW5zdGFuY2UgZHVl IHRvIHRoZSBPKDEpIGl0ZXJhdGlvbiBkdXJpbmcgZGVxdWV1ZSwgd2l0aCB2ZXJ5IHNpbWlsYXIK PiBjaGFyYWN0ZXJpc3RpY3MgW29uIGF2ZXJhZ2VdIHRvIHRoZSByYnRyZWUgZm9yIGluc2VydGlv bi4KPiAKPiBUaGlzIG1lYW5zIHRoYXQgYnkgdXNpbmcgc2tpcGxpc3RzIHdlIGNhbiBpbnRyb2R1 Y2UgYSBzcGFyc2Ugc29ydCBrZXkKPiB3aXRob3V0IGRlZ3JhZGluZyBsYXRlbmN5IG9uIHRoZSBj cml0aWNhbCBzdWJtaXNzaW9uIHBhdGguCj4gCj4gQXMgYW4gZXhhbXBsZSwgb25lIHNpbXBsZSBj YXNlIHdoZXJlIHdlIHRyeSB0byBkbyBsb3RzIG9mCj4gc2VtaS1pbmRlcGVuZGVudCB3b3JrIHdp dGhvdXQgYW55IHByaW9yaXR5IG1hbmFnZW1lbnQgKGdlbV9leGVjX3BhcmFsbGVsKSwKPiB0aGUg bG9jayBob2xkIHRpbWVzIHdlcmU6Cj4gW3dvcnN0XSAgICAgICAgW3RvdGFsXSAgICBbYXZnXQo+ ICAgOTczLjA1ICAgICA2MzAxNTg0Ljg0ICAgICAwLjM1ICMgcGxhaW4gcmJ0cmVlCj4gICA1NTku ODIgICAgIDU0MjQ5MTUuMjUgICAgIDAuMzMgIyBiZXN0IHJidHJlZSB3aXRoIHBydW5pbmcKPiAg IDIwOC4yMSAgICAgMzg5ODc4NC4wOSAgICAgMC4yNCAjIHNraXBsaXN0Cj4gICAgMzQuMDUgICAg IDU3ODQxMDYuMDEgICAgIDAuMzIgIyByYnRyZWUgd2l0aG91dCBkZWFkbGluZXMKPiAgICAyMy4z NSAgICAgNDE1Mjk5OS44MCAgICAgMC4yNCAjIHNraXBsaXN0IHdpdGhvdXQgZGVhZGxpbmVzCj4g Cj4gQmFzZWQgb24gdGhlIHNraXBsaXN0IGltcGxlbWVudGF0aW9uIGJ5IERyIENvbiBLb2xpdmFz IGZvciBNdVFTUy4KPiAKPiBSZWZlcmVuY2VzOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lr aS9Ta2lwX2xpc3QKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdp bHNvbi5jby51az4KPiAtLS0KPiAgIC4uLi9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3Vi bWlzc2lvbi5jICB8IDE2OCArKysrKy0tLS0tCj4gICAuLi4vZ3B1L2RybS9pOTE1L2d0L3VjL2lu dGVsX2d1Y19zdWJtaXNzaW9uLmMgfCAgNDEgKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3ByaW9saXN0X3R5cGVzLmggICAgfCAgNjQgKysrLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9zY2hlZHVsZXIuYyAgICAgICAgIHwgMzA0ICsrKysrKysrKysrKystLS0tLQo+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaCAgICAgICAgIHwgIDE2ICstCj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlcl90eXBlcy5oICAgfCAgIDIgKy0K PiAgIC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oICB8ICAgMSAr Cj4gICAuLi4vZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3NjaGVkdWxlci5jICAgfCAgNTMg KystCj4gICA4IGZpbGVzIGNoYW5nZWQsIDQ1NCBpbnNlcnRpb25zKCspLCAxOTUgZGVsZXRpb25z KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNs aXN0c19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlz dHNfc3VibWlzc2lvbi5jCj4gaW5kZXggNzhmZGE5YjRmNjI2Li40YTAyNTgzNDdjMTAgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Np b24uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJt aXNzaW9uLmMKPiBAQCAtMjU0LDExICsyNTQsNiBAQCBzdGF0aWMgdm9pZCByaW5nX3NldF9wYXVz ZWQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBpbnQgc3RhdGUpCj4gICAJ CXdtYigpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqdG9fcHJp b2xpc3Qoc3RydWN0IHJiX25vZGUgKnJiKQo+IC17Cj4gLQlyZXR1cm4gcmJfZW50cnkocmIsIHN0 cnVjdCBpOTE1X3ByaW9saXN0LCBub2RlKTsKPiAtfQo+IC0KPiAgIHN0YXRpYyBpbnQgcnFfcHJp byhjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAgIHsKPiAgIAlyZXR1cm4gUkVBRF9P TkNFKHJxLT5zY2hlZC5hdHRyLnByaW9yaXR5KTsKPiBAQCAtMjgyLDE1ICsyNzcsMjcgQEAgc3Rh dGljIGludCBlZmZlY3RpdmVfcHJpbyhjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAg IAlyZXR1cm4gcHJpbzsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgc3RydWN0IGk5MTVfcmVxdWVzdCAq Zmlyc3RfcmVxdWVzdChjb25zdCBzdHJ1Y3QgaTkxNV9zY2hlZCAqc2UpCj4gK3sKPiArCXN0cnVj dCBpOTE1X3ByaW9saXN0ICpwbCA9IHNlLT5xdWV1ZS5zZW50aW5lbC5uZXh0WzBdOwo+ICsKPiAr CWlmIChwbCA9PSAmc2UtPnF1ZXVlLnNlbnRpbmVsKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiAr CXJldHVybiBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJnBsLT5yZXF1ZXN0cywKPiArCQkJCQlz dHJ1Y3QgaTkxNV9yZXF1ZXN0LAo+ICsJCQkJCXNjaGVkLmxpbmspOwo+ICt9Cj4gKwo+ICAgc3Rh dGljIGludCBxdWV1ZV9wcmlvKGNvbnN0IHN0cnVjdCBpOTE1X3NjaGVkICpzZSkKPiAgIHsKPiAt CXN0cnVjdCByYl9ub2RlICpyYjsKPiArCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ICAgCj4g LQlyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmc2UtPnF1ZXVlKTsKPiAtCWlmICghcmIpCj4gKwlycSA9 IGZpcnN0X3JlcXVlc3Qoc2UpOwo+ICsJaWYgKCFycSkKPiAgIAkJcmV0dXJuIElOVF9NSU47Cj4g ICAKPiAtCXJldHVybiB0b19wcmlvbGlzdChyYiktPnByaW9yaXR5Owo+ICsJcmV0dXJuIHJxX3By aW8ocnEpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IHZpcnR1YWxfcHJpbyhjb25zdCBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZWwpCj4gQEAgLTMwMCw3ICszMDcsNyBAQCBzdGF0 aWMgaW50IHZpcnR1YWxfcHJpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAq ZWwpCj4gICAJcmV0dXJuIHJiID8gcmJfZW50cnkocmIsIHN0cnVjdCB2ZV9ub2RlLCByYiktPnBy aW8gOiBJTlRfTUlOOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBib29sIG5lZWRfcHJlZW1wdChjb25z dCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gK3N0YXRpYyBib29sIG5lZWRfcHJl ZW1wdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gICAJCQkgY29uc3Qgc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEpCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGk5MTVfc2NoZWQgKnNl ID0gJmVuZ2luZS0+c2NoZWQ7Cj4gQEAgLTExNDQsNyArMTE1MSw5IEBAIHN0YXRpYyB2b2lkIGV4 ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAlzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICoqcG9ydCA9IGV4ZWNsaXN0cy0+cGVuZGluZzsKPiAgIAlzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICoqIGNvbnN0IGxhc3RfcG9ydCA9IHBvcnQgKyBleGVjbGlzdHMtPnBvcnRf bWFzazsKPiAgIAlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpsYXN0LCAqIGNvbnN0ICphY3RpdmU7Cj4g KwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgKnJuOwo+ICAgCXN0cnVjdCB2aXJ0dWFsX2VuZ2lu ZSAqdmU7Cj4gKwlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcGw7Cj4gICAJc3RydWN0IHJiX25vZGUg KnJiOwo+ICAgCWJvb2wgc3VibWl0ID0gZmFsc2U7Cj4gICAKPiBAQCAtMTM1NSw4NyArMTM2NCw3 OSBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gICAJCQlicmVhazsKPiAgIAl9Cj4gICAKPiAtCXdoaWxlICgocmIgPSByYl9m aXJzdF9jYWNoZWQoJnNlLT5xdWV1ZSkpKSB7Cj4gLQkJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnAg PSB0b19wcmlvbGlzdChyYik7Cj4gLQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsICpybjsKPiAr CWk5MTVfc2NoZWRfZGVxdWV1ZShzZSwgcGwsIHJxLCBybikgewo+ICsJCWJvb2wgbWVyZ2UgPSB0 cnVlOwo+ICAgCj4gLQkJcHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdF9jb25zdW1lKHJxLCBybiwg cCkgewo+IC0JCQlib29sIG1lcmdlID0gdHJ1ZTsKPiArCQkvKgo+ICsJCSAqIENhbiB3ZSBjb21i aW5lIHRoaXMgcmVxdWVzdCB3aXRoIHRoZSBjdXJyZW50IHBvcnQ/Cj4gKwkJICogSXQgaGFzIHRv IGJlIHRoZSBzYW1lIGNvbnRleHQvcmluZ2J1ZmZlciBhbmQgbm90Cj4gKwkJICogaGF2ZSBhbnkg ZXhjZXB0aW9ucyAoZS5nLiBHVlQgc2F5aW5nIG5ldmVyIHRvCj4gKwkJICogY29tYmluZSBjb250 ZXh0cykuCj4gKwkJICoKPiArCQkgKiBJZiB3ZSBjYW4gY29tYmluZSB0aGUgcmVxdWVzdHMsIHdl IGNhbiBleGVjdXRlIGJvdGgKPiArCQkgKiBieSB1cGRhdGluZyB0aGUgUklOR19UQUlMIHRvIHBv aW50IHRvIHRoZSBlbmQgb2YgdGhlCj4gKwkJICogc2Vjb25kIHJlcXVlc3QsIGFuZCBzbyB3ZSBu ZXZlciBuZWVkIHRvIHRlbGwgdGhlCj4gKwkJICogaGFyZHdhcmUgYWJvdXQgdGhlIGZpcnN0Lgo+ ICsJCSAqLwo+ICsJCWlmIChsYXN0ICYmICFjYW5fbWVyZ2VfcnEobGFzdCwgcnEpKSB7Cj4gKwkJ CS8qCj4gKwkJCSAqIElmIHdlIGFyZSBvbiB0aGUgc2Vjb25kIHBvcnQgYW5kIGNhbm5vdAo+ICsJ CQkgKiBjb21iaW5lIHRoaXMgcmVxdWVzdCB3aXRoIHRoZSBsYXN0LCB0aGVuIHdlCj4gKwkJCSAq IGFyZSBkb25lLgo+ICsJCQkgKi8KPiArCQkJaWYgKHBvcnQgPT0gbGFzdF9wb3J0KQo+ICsJCQkJ Z290byBkb25lOwo+ICAgCj4gICAJCQkvKgo+IC0JCQkgKiBDYW4gd2UgY29tYmluZSB0aGlzIHJl cXVlc3Qgd2l0aCB0aGUgY3VycmVudCBwb3J0Pwo+IC0JCQkgKiBJdCBoYXMgdG8gYmUgdGhlIHNh bWUgY29udGV4dC9yaW5nYnVmZmVyIGFuZCBub3QKPiAtCQkJICogaGF2ZSBhbnkgZXhjZXB0aW9u cyAoZS5nLiBHVlQgc2F5aW5nIG5ldmVyIHRvCj4gLQkJCSAqIGNvbWJpbmUgY29udGV4dHMpLgo+ IC0JCQkgKgo+IC0JCQkgKiBJZiB3ZSBjYW4gY29tYmluZSB0aGUgcmVxdWVzdHMsIHdlIGNhbiBl eGVjdXRlIGJvdGgKPiAtCQkJICogYnkgdXBkYXRpbmcgdGhlIFJJTkdfVEFJTCB0byBwb2ludCB0 byB0aGUgZW5kIG9mIHRoZQo+IC0JCQkgKiBzZWNvbmQgcmVxdWVzdCwgYW5kIHNvIHdlIG5ldmVy IG5lZWQgdG8gdGVsbCB0aGUKPiAtCQkJICogaGFyZHdhcmUgYWJvdXQgdGhlIGZpcnN0Lgo+ICsJ CQkgKiBXZSBtdXN0IG5vdCBwb3B1bGF0ZSBib3RoIEVMU1BbXSB3aXRoIHRoZQo+ICsJCQkgKiBz YW1lIExSQ0EsIGkuZS4gd2UgbXVzdCBzdWJtaXQgMiBkaWZmZXJlbnQKPiArCQkJICogY29udGV4 dHMgaWYgd2Ugc3VibWl0IDIgRUxTUC4KPiAgIAkJCSAqLwo+IC0JCQlpZiAobGFzdCAmJiAhY2Fu X21lcmdlX3JxKGxhc3QsIHJxKSkgewo+IC0JCQkJLyoKPiAtCQkJCSAqIElmIHdlIGFyZSBvbiB0 aGUgc2Vjb25kIHBvcnQgYW5kIGNhbm5vdAo+IC0JCQkJICogY29tYmluZSB0aGlzIHJlcXVlc3Qg d2l0aCB0aGUgbGFzdCwgdGhlbiB3ZQo+IC0JCQkJICogYXJlIGRvbmUuCj4gLQkJCQkgKi8KPiAt CQkJCWlmIChwb3J0ID09IGxhc3RfcG9ydCkKPiAtCQkJCQlnb3RvIGRvbmU7Cj4gKwkJCWlmIChs YXN0LT5jb250ZXh0ID09IHJxLT5jb250ZXh0KQo+ICsJCQkJZ290byBkb25lOwo+ICAgCj4gLQkJ CQkvKgo+IC0JCQkJICogV2UgbXVzdCBub3QgcG9wdWxhdGUgYm90aCBFTFNQW10gd2l0aCB0aGUK PiAtCQkJCSAqIHNhbWUgTFJDQSwgaS5lLiB3ZSBtdXN0IHN1Ym1pdCAyIGRpZmZlcmVudAo+IC0J CQkJICogY29udGV4dHMgaWYgd2Ugc3VibWl0IDIgRUxTUC4KPiAtCQkJCSAqLwo+IC0JCQkJaWYg KGxhc3QtPmNvbnRleHQgPT0gcnEtPmNvbnRleHQpCj4gLQkJCQkJZ290byBkb25lOwo+ICsJCQlp ZiAoaTkxNV9yZXF1ZXN0X2hhc19zZW50aW5lbChsYXN0KSkKPiArCQkJCWdvdG8gZG9uZTsKPiAg IAo+IC0JCQkJaWYgKGk5MTVfcmVxdWVzdF9oYXNfc2VudGluZWwobGFzdCkpCj4gLQkJCQkJZ290 byBkb25lOwo+ICsJCQkvKgo+ICsJCQkgKiBXZSBhdm9pZCBzdWJtaXR0aW5nIHZpcnR1YWwgcmVx dWVzdHMgaW50bwo+ICsJCQkgKiB0aGUgc2Vjb25kYXJ5IHBvcnRzIHNvIHRoYXQgd2UgY2FuIG1p Z3JhdGUKPiArCQkJICogdGhlIHJlcXVlc3QgaW1tZWRpYXRlbHkgdG8gYW5vdGhlciBlbmdpbmUK PiArCQkJICogcmF0aGVyIHRoYW4gd2FpdCBmb3IgdGhlIHByaW1hcnkgcmVxdWVzdC4KPiArCQkJ ICovCj4gKwkJCWlmIChycS0+ZXhlY3V0aW9uX21hc2sgIT0gZW5naW5lLT5tYXNrKQo+ICsJCQkJ Z290byBkb25lOwo+ICAgCj4gLQkJCQkvKgo+IC0JCQkJICogV2UgYXZvaWQgc3VibWl0dGluZyB2 aXJ0dWFsIHJlcXVlc3RzIGludG8KPiAtCQkJCSAqIHRoZSBzZWNvbmRhcnkgcG9ydHMgc28gdGhh dCB3ZSBjYW4gbWlncmF0ZQo+IC0JCQkJICogdGhlIHJlcXVlc3QgaW1tZWRpYXRlbHkgdG8gYW5v dGhlciBlbmdpbmUKPiAtCQkJCSAqIHJhdGhlciB0aGFuIHdhaXQgZm9yIHRoZSBwcmltYXJ5IHJl cXVlc3QuCj4gLQkJCQkgKi8KPiAtCQkJCWlmIChycS0+ZXhlY3V0aW9uX21hc2sgIT0gZW5naW5l LT5tYXNrKQo+IC0JCQkJCWdvdG8gZG9uZTsKPiArCQkJLyoKPiArCQkJICogSWYgR1ZUIG92ZXJy aWRlcyB1cyB3ZSBvbmx5IGV2ZXIgc3VibWl0Cj4gKwkJCSAqIHBvcnRbMF0sIGxlYXZpbmcgcG9y dFsxXSBlbXB0eS4gTm90ZSB0aGF0IHdlCj4gKwkJCSAqIGFsc28gaGF2ZSB0byBiZSBjYXJlZnVs IHRoYXQgd2UgZG9uJ3QgcXVldWUKPiArCQkJICogdGhlIHNhbWUgY29udGV4dCAoZXZlbiB0aG91 Z2ggYSBkaWZmZXJlbnQKPiArCQkJICogcmVxdWVzdCkgdG8gdGhlIHNlY29uZCBwb3J0Lgo+ICsJ CQkgKi8KPiArCQkJaWYgKGN0eF9zaW5nbGVfcG9ydF9zdWJtaXNzaW9uKGxhc3QtPmNvbnRleHQp IHx8Cj4gKwkJCSAgICBjdHhfc2luZ2xlX3BvcnRfc3VibWlzc2lvbihycS0+Y29udGV4dCkpCj4g KwkJCQlnb3RvIGRvbmU7Cj4gICAKPiAtCQkJCS8qCj4gLQkJCQkgKiBJZiBHVlQgb3ZlcnJpZGVz IHVzIHdlIG9ubHkgZXZlciBzdWJtaXQKPiAtCQkJCSAqIHBvcnRbMF0sIGxlYXZpbmcgcG9ydFsx XSBlbXB0eS4gTm90ZSB0aGF0IHdlCj4gLQkJCQkgKiBhbHNvIGhhdmUgdG8gYmUgY2FyZWZ1bCB0 aGF0IHdlIGRvbid0IHF1ZXVlCj4gLQkJCQkgKiB0aGUgc2FtZSBjb250ZXh0IChldmVuIHRob3Vn aCBhIGRpZmZlcmVudAo+IC0JCQkJICogcmVxdWVzdCkgdG8gdGhlIHNlY29uZCBwb3J0Lgo+IC0J CQkJICovCj4gLQkJCQlpZiAoY3R4X3NpbmdsZV9wb3J0X3N1Ym1pc3Npb24obGFzdC0+Y29udGV4 dCkgfHwKPiAtCQkJCSAgICBjdHhfc2luZ2xlX3BvcnRfc3VibWlzc2lvbihycS0+Y29udGV4dCkp Cj4gLQkJCQkJZ290byBkb25lOwo+IC0KPiAtCQkJCW1lcmdlID0gZmFsc2U7Cj4gLQkJCX0KPiAt Cj4gLQkJCWlmIChfX2k5MTVfcmVxdWVzdF9zdWJtaXQocnEpKSB7Cj4gLQkJCQlpZiAoIW1lcmdl KSB7Cj4gLQkJCQkJKnBvcnQrKyA9IGk5MTVfcmVxdWVzdF9nZXQobGFzdCk7Cj4gLQkJCQkJbGFz dCA9IE5VTEw7Cj4gLQkJCQl9Cj4gLQo+IC0JCQkJR0VNX0JVR19PTihsYXN0ICYmCj4gLQkJCQkJ ICAgIWNhbl9tZXJnZV9jdHgobGFzdC0+Y29udGV4dCwKPiAtCQkJCQkJCSAgcnEtPmNvbnRleHQp KTsKPiAtCQkJCUdFTV9CVUdfT04obGFzdCAmJgo+IC0JCQkJCSAgIGk5MTVfc2Vxbm9fcGFzc2Vk KGxhc3QtPmZlbmNlLnNlcW5vLAo+IC0JCQkJCQkJICAgICBycS0+ZmVuY2Uuc2Vxbm8pKTsKPiAt Cj4gLQkJCQlzdWJtaXQgPSB0cnVlOwo+IC0JCQkJbGFzdCA9IHJxOwo+IC0JCQl9Cj4gKwkJCW1l cmdlID0gZmFsc2U7Cj4gICAJCX0KPiAgIAo+IC0JCXJiX2VyYXNlX2NhY2hlZCgmcC0+bm9kZSwg JnNlLT5xdWV1ZSk7Cj4gLQkJaTkxNV9wcmlvbGlzdF9mcmVlKHApOwo+ICsJCWlmIChfX2k5MTVf cmVxdWVzdF9zdWJtaXQocnEpKSB7Cj4gKwkJCWlmICghbWVyZ2UpIHsKPiArCQkJCSpwb3J0Kysg PSBpOTE1X3JlcXVlc3RfZ2V0KGxhc3QpOwo+ICsJCQkJbGFzdCA9IE5VTEw7Cj4gKwkJCX0KPiAr Cj4gKwkJCUdFTV9CVUdfT04obGFzdCAmJgo+ICsJCQkJICAgIWNhbl9tZXJnZV9jdHgobGFzdC0+ Y29udGV4dCwKPiArCQkJCQkJICBycS0+Y29udGV4dCkpOwo+ICsJCQlHRU1fQlVHX09OKGxhc3Qg JiYKPiArCQkJCSAgIGk5MTVfc2Vxbm9fcGFzc2VkKGxhc3QtPmZlbmNlLnNlcW5vLAo+ICsJCQkJ CQkgICAgIHJxLT5mZW5jZS5zZXFubykpOwo+ICsKPiArCQkJc3VibWl0ID0gdHJ1ZTsKPiArCQkJ bGFzdCA9IHJxOwo+ICsJCX0KPiAgIAl9Cj4gICBkb25lOgo+ICAgCSpwb3J0KysgPSBpOTE1X3Jl cXVlc3RfZ2V0KGxhc3QpOwo+IEBAIC0xNDU2LDcgKzE0NTcsNyBAQCBzdGF0aWMgdm9pZCBleGVj bGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICAJICogcmVx dWVzdCB0cmlnZ2VyaW5nIHByZWVtcHRpb24gb24gdGhlIG5leHQgZGVxdWV1ZSAob3Igc3Vic2Vx dWVudAo+ICAgCSAqIGludGVycnVwdCBmb3Igc2Vjb25kYXJ5IHBvcnRzKS4KPiAgIAkgKi8KPiAt CWV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludCA9IHF1ZXVlX3ByaW8oc2UpOwo+ICsJZXhl Y2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50ID0gcGwtPnByaW9yaXR5Owo+ICAgCXNwaW5fdW5s b2NrKCZzZS0+bG9jayk7Cj4gICAKPiAgIAkvKgo+IEBAIC0yNzE2LDcgKzI3MTcsNiBAQCBzdGF0 aWMgdm9pZCBleGVjbGlzdHNfcmVzZXRfY2FuY2VsKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiAgIAl9Cj4gICAKPiAgIAlleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJ TlRfTUlOOwo+IC0Jc2UtPnF1ZXVlID0gUkJfUk9PVF9DQUNIRUQ7Cj4gICAKPiAgIAlHRU1fQlVH X09OKF9fdGFza2xldF9pc19lbmFibGVkKCZzZS0+dGFza2xldCkpOwo+ICAgCXNlLT50YXNrbGV0 LmNhbGxiYWNrID0gbm9wX3N1Ym1pc3Npb25fdGFza2xldDsKPiBAQCAtMzE3Myw2ICszMTczLDgg QEAgc3RhdGljIHZvaWQgdmlydHVhbF9jb250ZXh0X2V4aXQoc3RydWN0IGludGVsX2NvbnRleHQg KmNlKQo+ICAgCj4gICAJZm9yIChuID0gMDsgbiA8IHZlLT5udW1fc2libGluZ3M7IG4rKykKPiAg IAkJaW50ZWxfZW5naW5lX3BtX3B1dCh2ZS0+c2libGluZ3Nbbl0pOwo+ICsKPiArCWk5MTVfc2No ZWRfcGFyayhpbnRlbF9lbmdpbmVfZ2V0X3NjaGVkdWxlcigmdmUtPmJhc2UpKTsKPiAgIH0KPiAg IAo+ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0X29wcyB2aXJ0dWFsX2NvbnRl eHRfb3BzID0gewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRl bF9ndWNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3Vj X3N1Ym1pc3Npb24uYwo+IGluZGV4IGQxNGI5ZGI3N2RmOC4uYzE2MzkzZGY0MmEwIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5j Cj4gQEAgLTYwLDExICs2MCw2IEBACj4gICAKPiAgICNkZWZpbmUgR1VDX1JFUVVFU1RfU0laRSA2 NCAvKiBieXRlcyAqLwo+ICAgCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfcHJpb2xpc3Qg KnRvX3ByaW9saXN0KHN0cnVjdCByYl9ub2RlICpyYikKPiAtewo+IC0JcmV0dXJuIHJiX2VudHJ5 KHJiLCBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCwgbm9kZSk7Cj4gLX0KPiAtCj4gICBzdGF0aWMgc3Ry dWN0IGd1Y19zdGFnZV9kZXNjICpfX2dldF9zdGFnZV9kZXNjKHN0cnVjdCBpbnRlbF9ndWMgKmd1 YywgdTMyIGlkKQo+ICAgewo+ICAgCXN0cnVjdCBndWNfc3RhZ2VfZGVzYyAqYmFzZSA9IGd1Yy0+ c3RhZ2VfZGVzY19wb29sX3ZhZGRyOwo+IEBAIC0xODYsOSArMTgxLDEwIEBAIHN0YXRpYyB2b2lk IF9fZ3VjX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCXN0cnVj dCBpOTE1X3JlcXVlc3QgKipmaXJzdCA9IGV4ZWNsaXN0cy0+aW5mbGlnaHQ7Cj4gICAJc3RydWN0 IGk5MTVfcmVxdWVzdCAqKiBjb25zdCBsYXN0X3BvcnQgPSBmaXJzdCArIGV4ZWNsaXN0cy0+cG9y dF9tYXNrOwo+ICAgCXN0cnVjdCBpOTE1X3JlcXVlc3QgKmxhc3QgPSBmaXJzdFswXTsKPiArCXN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCAqcm47Cj4gICAJc3RydWN0IGk5MTVfcmVxdWVzdCAqKnBv cnQ7Cj4gKwlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcGw7Cj4gICAJYm9vbCBzdWJtaXQgPSBmYWxz ZTsKPiAtCXN0cnVjdCByYl9ub2RlICpyYjsKPiAgIAo+ICAgCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JnNlLT5sb2NrKTsKPiAgIAo+IEBAIC0yMDUsMzIgKzIwMSwyMiBAQCBzdGF0aWMgdm9pZCBfX2d1 Y19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAkgKiBldmVudC4K PiAgIAkgKi8KPiAgIAlwb3J0ID0gZmlyc3Q7Cj4gLQl3aGlsZSAoKHJiID0gcmJfZmlyc3RfY2Fj aGVkKCZzZS0+cXVldWUpKSkgewo+IC0JCXN0cnVjdCBpOTE1X3ByaW9saXN0ICpwID0gdG9fcHJp b2xpc3QocmIpOwo+IC0JCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCAqcm47Cj4gKwlpOTE1X3Nj aGVkX2RlcXVldWUoc2UsIHBsLCBycSwgcm4pIHsKPiArCQlpZiAobGFzdCAmJiBycS0+Y29udGV4 dCAhPSBsYXN0LT5jb250ZXh0KSB7Cj4gKwkJCWlmIChwb3J0ID09IGxhc3RfcG9ydCkKPiArCQkJ CWdvdG8gZG9uZTsKPiAgIAo+IC0JCXByaW9saXN0X2Zvcl9lYWNoX3JlcXVlc3RfY29uc3VtZShy cSwgcm4sIHApIHsKPiAtCQkJaWYgKGxhc3QgJiYgcnEtPmNvbnRleHQgIT0gbGFzdC0+Y29udGV4 dCkgewo+IC0JCQkJaWYgKHBvcnQgPT0gbGFzdF9wb3J0KQo+IC0JCQkJCWdvdG8gZG9uZTsKPiAt Cj4gLQkJCQkqcG9ydCA9IHNjaGVkdWxlX2luKGxhc3QsCj4gLQkJCQkJCSAgICBwb3J0IC0gZXhl Y2xpc3RzLT5pbmZsaWdodCk7Cj4gLQkJCQlwb3J0Kys7Cj4gLQkJCX0KPiAtCj4gLQkJCWxpc3Rf ZGVsX2luaXQoJnJxLT5zY2hlZC5saW5rKTsKPiAtCQkJX19pOTE1X3JlcXVlc3Rfc3VibWl0KHJx KTsKPiAtCQkJc3VibWl0ID0gdHJ1ZTsKPiAtCQkJbGFzdCA9IHJxOwo+ICsJCQkqcG9ydCA9IHNj aGVkdWxlX2luKGxhc3QsIHBvcnQgLSBleGVjbGlzdHMtPmluZmxpZ2h0KTsKPiArCQkJcG9ydCsr Owo+ICAgCQl9Cj4gICAKPiAtCQlyYl9lcmFzZV9jYWNoZWQoJnAtPm5vZGUsICZzZS0+cXVldWUp Owo+IC0JCWk5MTVfcHJpb2xpc3RfZnJlZShwKTsKPiArCQlsaXN0X2RlbF9pbml0KCZycS0+c2No ZWQubGluayk7Cj4gKwkJX19pOTE1X3JlcXVlc3Rfc3VibWl0KHJxKTsKPiArCQlzdWJtaXQgPSB0 cnVlOwo+ICsJCWxhc3QgPSBycTsKPiAgIAl9Cj4gICBkb25lOgo+IC0JZXhlY2xpc3RzLT5xdWV1 ZV9wcmlvcml0eV9oaW50ID0KPiAtCQlyYiA/IHRvX3ByaW9saXN0KHJiKS0+cHJpb3JpdHkgOiBJ TlRfTUlOOwo+ICsJZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50ID0gcGwtPnByaW9yaXR5 Owo+ICAgCWlmIChzdWJtaXQpIHsKPiAgIAkJKnBvcnQgPSBzY2hlZHVsZV9pbihsYXN0LCBwb3J0 IC0gZXhlY2xpc3RzLT5pbmZsaWdodCk7Cj4gICAJCSorK3BvcnQgPSBOVUxMOwo+IEBAIC0zNjEs NyArMzQ3LDYgQEAgc3RhdGljIHZvaWQgZ3VjX3Jlc2V0X2NhbmNlbChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCj4gICAJX19pOTE1X3NjaGVkX2NhbmNlbF9xdWV1ZShzZSk7Cj4gICAK PiAgIAlleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJTlRfTUlOOwo+IC0Jc2UtPnF1 ZXVlID0gUkJfUk9PVF9DQUNIRUQ7Cj4gICAKPiAgIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZz ZS0+bG9jaywgZmxhZ3MpOwo+ICAgCWludGVsX2VuZ2luZV9zaWduYWxfYnJlYWRjcnVtYnMoZW5n aW5lKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wcmlvbGlzdF90 eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wcmlvbGlzdF90eXBlcy5oCj4gaW5k ZXggYmMyZmE4NGY5OGE4Li5lZTc0ODJiOWM4MTMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9wcmlvbGlzdF90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9wcmlvbGlzdF90eXBlcy5oCj4gQEAgLTM4LDEwICszOCw3MiBAQCBlbnVtIHsKPiAg ICNkZWZpbmUgSTkxNV9QUklPUklUWV9VTlBSRUVNUFRBQkxFIElOVF9NQVgKPiAgICNkZWZpbmUg STkxNV9QUklPUklUWV9CQVJSSUVSIChJOTE1X1BSSU9SSVRZX1VOUFJFRU1QVEFCTEUgLSAxKQo+ ICAgCj4gKy8qCj4gKyAqIFRoZSBzbGFiIHJldHVybnMgcG93ZXItb2YtdHdvIGNodW5rcyBvZiBt ZW1vcnksIHNvIGZpbGwgb3V0IHRoZQo+ICsgKiBub2RlIHRvIHRoZSBuZXh0IGNhY2hlbGluZS4K PiArICoKPiArICogV2UgY2FuIGVzdGltYXRlIGhvdyBtYW55IHJlcXVlc3RzIHRoZSBza2lwbGlz dCB3aWxsIHNjYWxlIHRvIGJhc2VkCj4gKyAqIG9uIGl0cyBoZWlnaHQ6Cj4gKyAqICAgMTEgPT4g IDQgbWlsbGlvbiByZXF1ZXN0cwo+ICsgKiAgIDEyID0+IDE2IG1pbGxpb24gcmVxdWVzdHMKPiAr ICovCj4gKyNpZmRlZiBDT05GSUdfNjRCSVQKPiArI2RlZmluZSBJOTE1X1BSSU9MSVNUX0hFSUdI VCAxMgo+ICsjZWxzZQo+ICsjZGVmaW5lIEk5MTVfUFJJT0xJU1RfSEVJR0hUIDExCj4gKyNlbmRp Zgo+ICsKPiArLyoKPiArICogaTkxNV9wcmlvbGlzdCBmb3JtcyBhIHNraXBsaXN0LiBUaGUgc2tp cGxpc3QgaXMgYnVpbHQgaW4gbGF5ZXJzLAo+ICsgKiBzdGFydGluZyBhdCB0aGUgYmFzZSBbMF0g aXMgYSBzaW5nbHkgbGlua2VkIGxpc3Qgb2YgYWxsIGk5MTVfcHJpb2xpc3QuCj4gKyAqIEVhY2gg aGlnaGVyIGxheWVyIGNvbnRhaW5zIGEgZnJhY3Rpb24gb2YgdGhlIGk5MTVfcHJpb2xpc3QgZnJv bSB0aGUKPiArICogcHJldmlvdXMgbGF5ZXI6Cj4gKyAqCj4gKyAqIFNbMF0gMDEyMzQ1Njc4OUFC Q0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRiBTCj4g KyAqIEVbMV0gPjE+Mz41Pjc+OT5CPkQ+Rj4xPjM+NT43Pjk+Qj5EPkY+MT4zPjU+Nz45PkI+RD5G PjE+Mz41Pjc+OT5CPkQ+RiBFCj4gKyAqIE5bMl0gLS0+My0tPjctLT5CLS0+Ri0tPjMtLT43LS0+ Qi0tPkYtLT4zLS0+Ny0tPkItLT5GLS0+My0tPjctLT5CLS0+RiBOCj4gKyAqIFRbM10gLS0tLS0t PjctLS0tLS0+Ri0tLS0tLS03LS0tLS0tPkYtLS0tLS0+Ny0tLS0tLT5GLS0tLS0tPjctLS0tLS0+ RiBUCj4gKyAqIElbNF0gLS0tLS0tLS0tLS0tLS0+Ri0tLS0tLS0tLS0tLS0tPkYtLS0tLS0tLS0t LS0tLT5GLS0tLS0tLS0tLS0tLS0+RiBJCj4gKyAqIE5bNV0gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tPkYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+RiBOCj4gKyAqIEVbNl0g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPkYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tPiBFCj4gKyAqIExbN10gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiBMCj4gKyAqCj4gKyAqIFRvIGl0ZXJhdGUgdGhy b3VnaCBhbGwgYWN0aXZlIGk5MTVfcHJpb2xpc3QsIHdlIG9ubHkgbmVlZCB0byBmb2xsb3cKPiAr ICogdGhlIGNoYWluIGluIGk5MTVfcHJpb2xpc3QubmV4dFswXSAoc2VlIGZvcl9lYWNoX3ByaW9s aXN0KCkpLgo+ICsgKgo+ICsgKiBUbyBxdWlja2x5IGZpbmQgYSBzcGVjaWZpYyBrZXkgKG9yIGlu c2VydCBwb2ludCksIHdlIGNhbiBwZXJmb3JtIGEgYmluYXJ5Cj4gKyAqIHNlYXJjaCBieSBzdGFy dGluZyBhdCB0aGUgaGlnaGVzdCBsZXZlbCBhbmQgZm9sbG93aW5nIHRoZSBsaW5rZWQgbGlzdAo+ ICsgKiBhdCB0aGF0IGxldmVsIHVudGlsIHdlIGVpdGhlciBmaW5kIHRoZSBub2RlLCBvciBoYXZl IGdvbmUgcGFzc2VkIHRoZSBrZXkuCj4gKyAqIFRoZW4gd2UgZGVzY2VuZCBhIGxldmVsLCBhbmQg c3RhcnQgd2Fsa2luZyB0aGUgbGlzdCBhZ2FpbiBzdGFydGluZyBmcm9tCj4gKyAqIHRoZSBjdXJy ZW50IHBvc2l0aW9uLCB1bnRpbCBldmVudHVhbGx5IHdlIGZpbmQgb3VyIGtleSwgb3Igd2UgcnVu IG91dCBvZgo+ICsgKiBsZXZlbHMuCj4gKyAqCj4gKyAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9y Zy93aWtpL1NraXBfbGlzdAo+ICsgKi8KPiAgIHN0cnVjdCBpOTE1X3ByaW9saXN0IHsKPiAgIAlz dHJ1Y3QgbGlzdF9oZWFkIHJlcXVlc3RzOwo+IC0Jc3RydWN0IHJiX25vZGUgbm9kZTsKPiAgIAlp bnQgcHJpb3JpdHk7Cj4gKwo+ICsJaW50IGxldmVsOwo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3Qg Km5leHRbSTkxNV9QUklPTElTVF9IRUlHSFRdOwo+ICAgfTsKPiAgIAo+ICtzdHJ1Y3QgaTkxNV9w cmlvbGlzdF9yb290IHsKPiArCXN0cnVjdCBpOTE1X3ByaW9saXN0IHNlbnRpbmVsOwo+ICsJdTMy IHBybmc7Cj4gK307Cj4gKwo+ICsjZGVmaW5lIGk5MTVfcHJpb2xpc3RfaXNfZW1wdHkocm9vdCkg KChyb290KS0+c2VudGluZWwubGV2ZWwgPCAwKQo+ICsKPiArI2RlZmluZSBmb3JfZWFjaF9wcmlv bGlzdChwLCByb290KSBcCj4gKwlmb3IgKChwKSA9IChyb290KS0+c2VudGluZWwubmV4dFswXTsg XAo+ICsJICAgICAocCkgIT0gJihyb290KS0+c2VudGluZWw7IFwKPiArCSAgICAgKHApID0gKHAp LT5uZXh0WzBdKQo+ICsKPiArI2RlZmluZSBwcmlvbGlzdF9mb3JfZWFjaF9yZXF1ZXN0KGl0LCBw bGlzdCkgXAo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShpdCwgJihwbGlzdCktPnJlcXVlc3RzLCBz Y2hlZC5saW5rKQo+ICsKPiArI2RlZmluZSBwcmlvbGlzdF9mb3JfZWFjaF9yZXF1ZXN0X3NhZmUo aXQsIG4sIHBsaXN0KSBcCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXQsIG4sICYocGxp c3QpLT5yZXF1ZXN0cywgc2NoZWQubGluaykKPiArCj4gICAjZW5kaWYgLyogX0k5MTVfUFJJT0xJ U1RfVFlQRVNfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9z Y2hlZHVsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMKPiBpbmRl eCAzMTJlMTUzOGQwMDEuLjUxOGVhYzY3OTU5ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9zY2hlZHVsZXIuYwo+IEBAIC00LDcgKzQsOSBAQAo+ICAgICogQ29weXJpZ2h0IMKpIDIwMTgg SW50ZWwgQ29ycG9yYXRpb24KPiAgICAqLwo+ICAgCj4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMu aD4KPiAgICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcHJhbmRv bS5oPgo+ICAgCj4gICAjaW5jbHVkZSAiZ3QvaW50ZWxfcmluZy5oIgo+ICAgI2luY2x1ZGUgImd0 L2ludGVsX2xyY19yZWcuaCIKPiBAQCAtMTY4LDYgKzE3MCwxNiBAQCB2b2lkIGk5MTVfc2NoZWRf c2VsZWN0X21vZGUoc3RydWN0IGk5MTVfc2NoZWQgKnNlLCBlbnVtIGk5MTVfc2NoZWRfbW9kZSBt b2RlKQo+ICAgCX0KPiAgIH0KPiAgIAo+ICtzdGF0aWMgdm9pZCBpbml0X3ByaW9saXN0KHN0cnVj dCBpOTE1X3ByaW9saXN0X3Jvb3QgKmNvbnN0IHJvb3QpCj4gK3sKPiArCXN0cnVjdCBpOTE1X3By aW9saXN0ICpwbCA9ICZyb290LT5zZW50aW5lbDsKPiArCj4gKwltZW1zZXRfcCgodm9pZCAqKilw bC0+bmV4dCwgcGwsIEFSUkFZX1NJWkUocGwtPm5leHQpKTsKPiArCXBsLT5yZXF1ZXN0cy5wcmV2 ID0gTlVMTDsKPiArCXBsLT5wcmlvcml0eSA9IElOVF9NSU47Cj4gKwlwbC0+bGV2ZWwgPSAtMTsK PiArfQo+ICsKPiAgIHZvaWQgaTkxNV9zY2hlZF9pbml0KHN0cnVjdCBpOTE1X3NjaGVkICpzZSwK PiAgIAkJICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gICAJCSAgICAgY29uc3QgY2hhciAqbmFt ZSwKPiBAQCAtMTgzLDkgKzE5NSw5IEBAIHZvaWQgaTkxNV9zY2hlZF9pbml0KHN0cnVjdCBpOTE1 X3NjaGVkICpzZSwKPiAgIAo+ICAgCXNlLT5tYXNrID0gbWFzazsKPiAgIAo+ICsJaW5pdF9wcmlv bGlzdCgmc2UtPnF1ZXVlKTsKPiAgIAlJTklUX0xJU1RfSEVBRCgmc2UtPnJlcXVlc3RzKTsKPiAg IAlJTklUX0xJU1RfSEVBRCgmc2UtPmhvbGQpOwo+IC0Jc2UtPnF1ZXVlID0gUkJfUk9PVF9DQUNI RUQ7Cj4gICAKPiAgIAlpbml0X2lwaSgmc2UtPmlwaSk7Cj4gICAKPiBAQCAtMTk0LDggKzIwNiw2 MCBAQCB2b2lkIGk5MTVfc2NoZWRfaW5pdChzdHJ1Y3QgaTkxNV9zY2hlZCAqc2UsCj4gICAJc2Ut PnJldm9rZV9jb250ZXh0ID0gaTkxNV9zY2hlZF9kZWZhdWx0X3Jldm9rZV9jb250ZXh0Owo+ICAg fQo+ICAgCj4gK19fbWF5YmVfdW51c2VkIHN0YXRpYyBib29sIHByaW9saXN0X2lkbGUoc3RydWN0 IGk5MTVfcHJpb2xpc3Rfcm9vdCAqcm9vdCkKPiArewo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3Qg KnBsID0gJnJvb3QtPnNlbnRpbmVsOwo+ICsJaW50IGx2bDsKPiArCj4gKwlmb3IgKGx2bCA9IDA7 IGx2bCA8IEFSUkFZX1NJWkUocGwtPm5leHQpOyBsdmwrKykgewo+ICsJCWlmIChwbC0+bmV4dFts dmxdICE9IHBsKSB7Cj4gKwkJCUdFTV9UUkFDRV9FUlIoInJvb3RbJWRdIGlzIG5vdCBlbXB0eVxu IiwgbHZsKTsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAocGwt PmxldmVsICE9IC0xKSB7Cj4gKwkJR0VNX1RSQUNFX0VSUigicm9vdCBpcyBub3QgY2xlYXI6ICVk XG4iLCBwbC0+bGV2ZWwpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlyZXR1cm4g dHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgcGxfZW1wdHkoc3RydWN0IGxpc3RfaGVhZCAq c3QpCj4gK3sKPiArCXJldHVybiAhc3QtPnByZXY7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHBs X3B1c2goc3RydWN0IGk5MTVfcHJpb2xpc3QgKnBsLCBzdHJ1Y3QgbGlzdF9oZWFkICpzdCkKPiAr ewo+ICsJLyogS2VlcCBsaXN0X2VtcHR5KCZwbC0+cmVxdWVzdHMpIHZhbGlkIGZvciBjb25jdXJy ZW50IHJlYWRlcnMgKi8KPiArCXBsLT5yZXF1ZXN0cy5wcmV2ID0gc3QtPnByZXY7Cj4gKwlzdC0+ cHJldiA9ICZwbC0+cmVxdWVzdHM7Cj4gKwlHRU1fQlVHX09OKHBsX2VtcHR5KHN0KSk7Cj4gK30K PiArCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcGxfcG9wKHN0cnVjdCBsaXN0X2hl YWQgKnN0KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcGw7Cj4gKwo+ICsJR0VNX0JV R19PTihwbF9lbXB0eShzdCkpOwo+ICsJcGwgPSBjb250YWluZXJfb2Yoc3QtPnByZXYsIHR5cGVv ZigqcGwpLCByZXF1ZXN0cyk7Cj4gKwlzdC0+cHJldiA9IHBsLT5yZXF1ZXN0cy5wcmV2Owo+ICsK PiArCXJldHVybiBwbDsKPiArfQo+ICsKPiAgIHZvaWQgaTkxNV9zY2hlZF9wYXJrKHN0cnVjdCBp OTE1X3NjaGVkICpzZSkKPiAgIHsKPiArCXN0cnVjdCBpOTE1X3ByaW9saXN0X3Jvb3QgKnJvb3Qg PSAmc2UtPnF1ZXVlOwo+ICsJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9ICZyb290LT5zZW50aW5l bC5yZXF1ZXN0czsKPiArCj4gKwlHRU1fQlVHX09OKCFwcmlvbGlzdF9pZGxlKHJvb3QpKTsKPiAr Cj4gKwl3aGlsZSAoIXBsX2VtcHR5KGxpc3QpKQo+ICsJCWttZW1fY2FjaGVfZnJlZShnbG9iYWwu c2xhYl9wcmlvcml0aWVzLCBwbF9wb3AobGlzdCkpOwo+ICsKPiAgIAlHRU1fQlVHX09OKCFpOTE1 X3NjaGVkX2lzX2lkbGUoc2UpKTsKPiAgIAlzZS0+bm9fcHJpb2xpc3QgPSBmYWxzZTsKPiAgIH0K PiBAQCAtMjUxLDcwICszMTUsNzEgQEAgc3RhdGljIGlubGluZSBib29sIG5vZGVfc2lnbmFsZWQo Y29uc3Qgc3RydWN0IGk5MTVfc2NoZWRfbm9kZSAqbm9kZSkKPiAgIAlyZXR1cm4gaTkxNV9yZXF1 ZXN0X2NvbXBsZXRlZChub2RlX3RvX3JlcXVlc3Qobm9kZSkpOwo+ICAgfQo+ICAgCj4gLXN0YXRp YyBpbmxpbmUgc3RydWN0IGk5MTVfcHJpb2xpc3QgKnRvX3ByaW9saXN0KHN0cnVjdCByYl9ub2Rl ICpyYikKPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmFuZG9tX2xldmVsKHN0cnVjdCBp OTE1X3ByaW9saXN0X3Jvb3QgKnJvb3QpCj4gICB7Cj4gLQlyZXR1cm4gcmJfZW50cnkocmIsIHN0 cnVjdCBpOTE1X3ByaW9saXN0LCBub2RlKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgYXNzZXJ0 X3ByaW9saXN0cyhzdHJ1Y3QgaTkxNV9zY2hlZCAqIGNvbnN0IHNlKQo+IC17Cj4gLQlzdHJ1Y3Qg cmJfbm9kZSAqcmI7Cj4gLQlsb25nIGxhc3RfcHJpbzsKPiAtCj4gLQlpZiAoIUlTX0VOQUJMRUQo Q09ORklHX0RSTV9JOTE1X0RFQlVHX0dFTSkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCUdFTV9CVUdf T04ocmJfZmlyc3RfY2FjaGVkKCZzZS0+cXVldWUpICE9Cj4gLQkJICAgcmJfZmlyc3QoJnNlLT5x dWV1ZS5yYl9yb290KSk7Cj4gLQo+IC0JbGFzdF9wcmlvID0gSU5UX01BWDsKPiAtCWZvciAocmIg PSByYl9maXJzdF9jYWNoZWQoJnNlLT5xdWV1ZSk7IHJiOyByYiA9IHJiX25leHQocmIpKSB7Cj4g LQkJY29uc3Qgc3RydWN0IGk5MTVfcHJpb2xpc3QgKnAgPSB0b19wcmlvbGlzdChyYik7Cj4gLQo+ IC0JCUdFTV9CVUdfT04ocC0+cHJpb3JpdHkgPiBsYXN0X3ByaW8pOwo+IC0JCWxhc3RfcHJpbyA9 IHAtPnByaW9yaXR5Owo+IC0JfQo+ICsJLyoKPiArCSAqIEdpdmVuIGEgdW5pZm9ybSBkaXN0cmli dXRpb24gb2YgcmFuZG9tIG51bWJlcnMgb3ZlciB0aGUgdTMyLCB0aGVuCj4gKwkgKiB0aGUgcHJv YmFiaWxpdHkgZWFjaCBiaXQgYmVpbmcgdW5zZXQgaXMgUD0wLjUuIFRoZSBwcm9iYWJpbGl0eSBv ZiBhCj4gKwkgKiBzdWNjZXNzaXZlIHNlcXVlbmNlIG9mIGJpdHMgYmVpbmcgdW5zZXQgaXMgUChu KSA9IDAuNV5uIFtuID4gMF0uCj4gKwkgKiAgIFAobGV2ZWw6MSkgPSAwLjUKPiArCSAqICAgUChs ZXZlbDoyKSA9IDAuMjUKPiArCSAqICAgUChsZXZlbDozKSA9IDAuMTI1Cj4gKwkgKiAgIFAobGV2 ZWw6NCkgPSAwLjA2MjUKPiArCSAqICAgLi4uCj4gKwkgKiBTbyB3ZSBjYW4gdXNlIGZmcygpIG9u IGEgZ29vZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0byBwaWNrIG91cgo+ICsJICogbGV2ZWwu IFdlIGRpdmlkZSBieSB0d28gdG8gcmVkdWNlIHRoZSBwcm9iYWJpbGl0eSBvZiBjaG9vc2luZyBh Cj4gKwkgKiBsZXZlbCB0byAuMjUsIGFzIHRoZSBjb3N0IG9mIGRlc2NlbmRpbmcgYSBsZXZlbCBp cyB0aGUgc2FtZSBhcwo+ICsJICogZm9sbG93aW5nIGFuIGV4dHJhIGxpbmsgaW4gdGhlIGNoYWlu IGF0IHRoYXQgbGV2ZWwgKHNvIHdlIGNhbgo+ICsJICogcGFjayBtb3JlIG5vZGVzIGludG8gZmV3 ZXIgbGV2ZWxzIHdpdGhvdXQgaW5jdXJyaW5nIGV4dHJhIGNvc3QsCj4gKwkgKiBhbmQgYWxsb3cg c2NhbGluZyB0byBoaWdoZXIgdm9sdW1lcyBvZiByZXF1ZXN0cyB3aXRob3V0IGV4cGFuZGluZwo+ ICsJICogdGhlIGhlaWdodCBvZiB0aGUgc2tpcGxpc3QpLgo+ICsJICovCj4gKwlyb290LT5wcm5n ID0gbmV4dF9wc2V1ZG9fcmFuZG9tMzIocm9vdC0+cHJuZyk7Cj4gKwlyZXR1cm4gIF9fZmZzKHJv b3QtPnBybmcpIC8gMjsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKgo+ ICAgbG9va3VwX3ByaW9saXN0KHN0cnVjdCBpOTE1X3NjaGVkICpzZSwgaW50IHByaW8pCj4gICB7 Cj4gLQlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcDsKPiAtCXN0cnVjdCByYl9ub2RlICoqcGFyZW50 LCAqcmI7Cj4gLQlib29sIGZpcnN0ID0gdHJ1ZTsKPiArCXN0cnVjdCBpOTE1X3ByaW9saXN0ICp1 cGRhdGVbSTkxNV9QUklPTElTVF9IRUlHSFRdOwo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3Rfcm9v dCAqY29uc3Qgcm9vdCA9ICZzZS0+cXVldWU7Cj4gKwlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcGws ICp0bXA7Cj4gKwlpbnQgbHZsOwo+ICAgCj4gICAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc2UtPmxv Y2spOwo+IC0JYXNzZXJ0X3ByaW9saXN0cyhzZSk7Cj4gLQo+ICAgCWlmICh1bmxpa2VseShzZS0+ bm9fcHJpb2xpc3QpKQo+ICAgCQlwcmlvID0gSTkxNV9QUklPUklUWV9OT1JNQUw7Cj4gICAKPiAr CWZvcl9lYWNoX3ByaW9saXN0KHBsLCByb290KSB7IC8qIHJlY3ljbGUgYW55IGVtcHR5IGVsZW1l bnRzIGJlZm9yZSB1cyAqLwo+ICsJCWlmIChwbC0+cHJpb3JpdHkgPD0gcHJpbyB8fCAhbGlzdF9l bXB0eSgmcGwtPnJlcXVlc3RzKSkKPiArCQkJYnJlYWs7CgpUaGlzIGxlc3MgcGFydCBvZiB0aGUg bGVzcy1vci1lcXVhbCBjb25kaXRpb24ga2VlcHMgY29uZnVzaW5nIG1lIGFzIGEgCmJyZWFrIGNy aXRlcmlhLiBJZiBwcmVtaXNlIGlzIGNsZWFuaW5nIHVwLCB3aHkgYnJlYWsgb24gZmlyc3Qgc21h bGxlciAKcHJpbz8gV291bGQgdGhlIGlkZWEgYmUgdG8gcHJ1bmUgYWxsIGVtcHR5IGxpc3RzIHVw IHRvLCBub3QgaW5jbHVkaW5nLCAKdGhlIGxvb2t1cCBwcmlvPwoKPiArCj4gKwkJX19pOTE1X3Nj aGVkX2RlcXVldWVfbmV4dChzZSk7Cj4gKwl9Cj4gKwo+ICAgZmluZF9wcmlvbGlzdDoKPiAtCS8q IG1vc3QgcG9zaXRpdmUgcHJpb3JpdHkgaXMgc2NoZWR1bGVkIGZpcnN0LCBlcXVhbCBwcmlvcml0 aWVzIGZpZm8gKi8KPiAtCXJiID0gTlVMTDsKPiAtCXBhcmVudCA9ICZzZS0+cXVldWUucmJfcm9v dC5yYl9ub2RlOwo+IC0Jd2hpbGUgKCpwYXJlbnQpIHsKPiAtCQlyYiA9ICpwYXJlbnQ7Cj4gLQkJ cCA9IHRvX3ByaW9saXN0KHJiKTsKPiAtCQlpZiAocHJpbyA+IHAtPnByaW9yaXR5KSB7Cj4gLQkJ CXBhcmVudCA9ICZyYi0+cmJfbGVmdDsKPiAtCQl9IGVsc2UgaWYgKHByaW8gPCBwLT5wcmlvcml0 eSkgewo+IC0JCQlwYXJlbnQgPSAmcmItPnJiX3JpZ2h0Owo+IC0JCQlmaXJzdCA9IGZhbHNlOwo+ IC0JCX0gZWxzZSB7Cj4gLQkJCXJldHVybiAmcC0+cmVxdWVzdHM7Cj4gLQkJfQo+ICsJcGwgPSAm cm9vdC0+c2VudGluZWw7Cj4gKwlsdmwgPSBwbC0+bGV2ZWw7Cj4gKwl3aGlsZSAobHZsID49IDAp IHsKPiArCQl3aGlsZSAodG1wID0gcGwtPm5leHRbbHZsXSwgdG1wLT5wcmlvcml0eSA+PSBwcmlv KQo+ICsJCQlwbCA9IHRtcDsKPiArCQlpZiAocGwtPnByaW9yaXR5ID09IHByaW8pCj4gKwkJCWdv dG8gb3V0Owo+ICsJCXVwZGF0ZVtsdmwtLV0gPSBwbDsKPiAgIAl9Cj4gICAKPiAgIAlpZiAocHJp byA9PSBJOTE1X1BSSU9SSVRZX05PUk1BTCkgewo+IC0JCXAgPSAmc2UtPmRlZmF1bHRfcHJpb2xp c3Q7Cj4gKwkJcGwgPSAmc2UtPmRlZmF1bHRfcHJpb2xpc3Q7Cj4gKwl9IGVsc2UgaWYgKCFwbF9l bXB0eSgmcm9vdC0+c2VudGluZWwucmVxdWVzdHMpKSB7Cj4gKwkJcGwgPSBwbF9wb3AoJnJvb3Qt PnNlbnRpbmVsLnJlcXVlc3RzKTsKPiAgIAl9IGVsc2Ugewo+IC0JCXAgPSBrbWVtX2NhY2hlX2Fs bG9jKGdsb2JhbC5zbGFiX3ByaW9yaXRpZXMsIEdGUF9BVE9NSUMpOwo+ICsJCXBsID0ga21lbV9j YWNoZV9hbGxvYyhnbG9iYWwuc2xhYl9wcmlvcml0aWVzLCBHRlBfQVRPTUlDKTsKPiAgIAkJLyog Q29udmVydCBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgdG8gYSBwcmlvcml0eSBidW1wICovCj4gLQkJ aWYgKHVubGlrZWx5KCFwKSkgewo+ICsJCWlmICh1bmxpa2VseSghcGwpKSB7Cj4gICAJCQlwcmlv ID0gSTkxNV9QUklPUklUWV9OT1JNQUw7IC8qIHJlY3Vyc2VzIGp1c3Qgb25jZSAqLwo+ICAgCj4g LQkJCS8qIFRvIG1haW50YWluIG9yZGVyaW5nIHdpdGggYWxsIHJlbmRlcmluZywgYWZ0ZXIgYW4K PiArCQkJLyoKPiArCQkJICogVG8gbWFpbnRhaW4gb3JkZXJpbmcgd2l0aCBhbGwgcmVuZGVyaW5n LCBhZnRlciBhbgo+ICAgCQkJICogYWxsb2NhdGlvbiBmYWlsdXJlIHdlIGhhdmUgdG8gZGlzYWJs ZSBhbGwgc2NoZWR1bGluZy4KPiAgIAkJCSAqIFJlcXVlc3RzIHdpbGwgdGhlbiBiZSBleGVjdXRl ZCBpbiBmaWZvLCBhbmQgc2NoZWR1bGUKPiAgIAkJCSAqIHdpbGwgZW5zdXJlIHRoYXQgZGVwZW5k ZW5jaWVzIGFyZSBlbWl0dGVkIGluIGZpZm8uCj4gQEAgLTMyNywxOCArMzkyLDEyMyBAQCBsb29r dXBfcHJpb2xpc3Qoc3RydWN0IGk5MTVfc2NoZWQgKnNlLCBpbnQgcHJpbykKPiAgIAkJfQo+ICAg CX0KPiAgIAo+IC0JcC0+cHJpb3JpdHkgPSBwcmlvOwo+IC0JSU5JVF9MSVNUX0hFQUQoJnAtPnJl cXVlc3RzKTsKPiArCXBsLT5wcmlvcml0eSA9IHByaW87Cj4gKwlJTklUX0xJU1RfSEVBRCgmcGwt PnJlcXVlc3RzKTsKPiAgIAo+IC0JcmJfbGlua19ub2RlKCZwLT5ub2RlLCByYiwgcGFyZW50KTsK PiAtCXJiX2luc2VydF9jb2xvcl9jYWNoZWQoJnAtPm5vZGUsICZzZS0+cXVldWUsIGZpcnN0KTsK PiArCWx2bCA9IHJhbmRvbV9sZXZlbChyb290KTsKPiArCWlmIChsdmwgPiByb290LT5zZW50aW5l bC5sZXZlbCkgewo+ICsJCWlmIChyb290LT5zZW50aW5lbC5sZXZlbCA8IEk5MTVfUFJJT0xJU1Rf SEVJR0hUIC0gMSkgewo+ICsJCQlsdmwgPSArK3Jvb3QtPnNlbnRpbmVsLmxldmVsOwo+ICsJCQl1 cGRhdGVbbHZsXSA9ICZyb290LT5zZW50aW5lbDsKPiArCQl9IGVsc2Ugewo+ICsJCQlsdmwgPSBJ OTE1X1BSSU9MSVNUX0hFSUdIVCAtIDE7Cj4gKwkJfQo+ICsJfQo+ICsJR0VNX0JVR19PTihsdmwg PCAwKTsKPiArCUdFTV9CVUdfT04obHZsID49IEFSUkFZX1NJWkUocGwtPm5leHQpKTsKPiAgIAo+ IC0JcmV0dXJuICZwLT5yZXF1ZXN0czsKPiArCXBsLT5sZXZlbCA9IGx2bDsKPiArCWRvIHsKPiAr CQl0bXAgPSB1cGRhdGVbbHZsXTsKPiArCQlwbC0+bmV4dFtsdmxdID0gdG1wLT5uZXh0W2x2bF07 Cj4gKwkJdG1wLT5uZXh0W2x2bF0gPSBwbDsKPiArCX0gd2hpbGUgKC0tbHZsID49IDApOwo+ICsK PiArCWlmIChJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9ERUJVR19HRU0pKSB7Cj4gKwkJc3Ry dWN0IGk5MTVfcHJpb2xpc3QgKmNoazsKPiArCj4gKwkJY2hrID0gJnJvb3QtPnNlbnRpbmVsOwo+ ICsJCWx2bCA9IGNoay0+bGV2ZWw7Cj4gKwkJZG8gewo+ICsJCQl3aGlsZSAodG1wID0gY2hrLT5u ZXh0W2x2bF0sIHRtcC0+cHJpb3JpdHkgPj0gcHJpbykKPiArCQkJCWNoayA9IHRtcDsKPiArCQl9 IHdoaWxlICgtLWx2bCA+PSAwKTsKPiArCj4gKwkJR0VNX0JVR19PTihjaGsgIT0gcGwpOwo+ICsJ fQo+ICsKPiArb3V0Ogo+ICsJR0VNX0JVR19PTihwbCA9PSAmcm9vdC0+c2VudGluZWwpOwo+ICsJ cmV0dXJuICZwbC0+cmVxdWVzdHM7Cj4gICB9Cj4gICAKPiAtdm9pZCBfX2k5MTVfcHJpb2xpc3Rf ZnJlZShzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcCkKPiArc3RhdGljIHZvaWQgX19yZW1vdmVfcHJp b2xpc3Qoc3RydWN0IGk5MTVfc2NoZWQgKnNlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdCkKPiAg IHsKPiAtCWttZW1fY2FjaGVfZnJlZShnbG9iYWwuc2xhYl9wcmlvcml0aWVzLCBwKTsKPiArCXN0 cnVjdCBpOTE1X3ByaW9saXN0X3Jvb3QgKnJvb3QgPSAmc2UtPnF1ZXVlOwo+ICsJc3RydWN0IGk5 MTVfcHJpb2xpc3QgKnBsLCAqdG1wOwo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3QgKm9sZCA9Cj4g KwkJY29udGFpbmVyX29mKHBsaXN0LCBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCwgcmVxdWVzdHMpOwo+ ICsJaW50IHByaW8gPSBvbGQtPnByaW9yaXR5Owo+ICsJaW50IGx2bDsKPiArCj4gKwlsb2NrZGVw X2Fzc2VydF9oZWxkKCZzZS0+bG9jayk7Cj4gKwlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KHBsaXN0 KSk7Cj4gKwo+ICsJcGwgPSAmcm9vdC0+c2VudGluZWw7Cj4gKwlsdmwgPSBwbC0+bGV2ZWw7Cj4g KwlHRU1fQlVHX09OKGx2bCA8IDApOwo+ICsKPiArCWlmIChwcmlvICE9IEk5MTVfUFJJT1JJVFlf Tk9STUFMKQo+ICsJCXBsX3B1c2gob2xkLCAmcGwtPnJlcXVlc3RzKTsKPiArCj4gKwlkbyB7Cj4g KwkJd2hpbGUgKHRtcCA9IHBsLT5uZXh0W2x2bF0sIHRtcC0+cHJpb3JpdHkgPiBwcmlvKQo+ICsJ CQlwbCA9IHRtcDsKPiArCQlpZiAobHZsIDw9IG9sZC0+bGV2ZWwpIHsKPiArCQkJcGwtPm5leHRb bHZsXSA9IG9sZC0+bmV4dFtsdmxdOwo+ICsJCQlpZiAocGwgPT0gJnJvb3QtPnNlbnRpbmVsICYm IG9sZC0+bmV4dFtsdmxdID09IHBsKSB7Cj4gKwkJCQlHRU1fQlVHX09OKHBsLT5sZXZlbCAhPSBs dmwpOwo+ICsJCQkJcGwtPmxldmVsLS07Cj4gKwkJCX0KPiArCQl9Cj4gKwl9IHdoaWxlICgtLWx2 bCA+PSAwKTsKPiArCUdFTV9CVUdfT04odG1wICE9IG9sZCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHJlbW92ZV9mcm9tX3ByaW9saXN0KHN0cnVjdCBpOTE1X3NjaGVkICpzZSwKPiArCQkJCSBz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiArCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAo+ ICsJCQkJIGJvb2wgdGFpbCkKPiArewo+ICsJc3RydWN0IGxpc3RfaGVhZCAqcHJldiA9IHJxLT5z Y2hlZC5saW5rLnByZXY7Cj4gKwo+ICsJR0VNX0JVR19PTighaTkxNV9yZXF1ZXN0X2luX3ByaW9y aXR5X3F1ZXVlKHJxKSk7Cj4gKwo+ICsJX19saXN0X2RlbF9lbnRyeSgmcnEtPnNjaGVkLmxpbmsp Owo+ICsJaWYgKHRhaWwpCj4gKwkJbGlzdF9hZGRfdGFpbCgmcnEtPnNjaGVkLmxpbmssIGxpc3Qp Owo+ICsJZWxzZQo+ICsJCWxpc3RfYWRkKCZycS0+c2NoZWQubGluaywgbGlzdCk7Cj4gKwo+ICsJ LyogSWYgd2UganVzdCByZW1vdmVkIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIG9sZCBwbGlzdCwg ZGVsZXRlIGl0ICovCj4gKwlpZiAobGlzdF9lbXB0eShwcmV2KSkKPiArCQlfX3JlbW92ZV9wcmlv bGlzdChzZSwgcHJldik7Cj4gK30KPiArCj4gK3N0cnVjdCBpOTE1X3ByaW9saXN0ICpfX2k5MTVf c2NoZWRfZGVxdWV1ZV9uZXh0KHN0cnVjdCBpOTE1X3NjaGVkICpzZSkKPiArewo+ICsJc3RydWN0 IGk5MTVfcHJpb2xpc3QgKiBjb25zdCBzID0gJnNlLT5xdWV1ZS5zZW50aW5lbDsKPiArCXN0cnVj dCBpOTE1X3ByaW9saXN0ICpwbCA9IHMtPm5leHRbMF07Cj4gKwlpbnQgbHZsOwo+ICsKPiArCUdF TV9CVUdfT04oIWxpc3RfZW1wdHkoJnBsLT5yZXF1ZXN0cykpOwo+ICsJR0VNX0JVR19PTihwbCA9 PSBzKTsKPiArCj4gKwkvKiBLZWVwIHBsLT5uZXh0WzBdIHZhbGlkIGZvciBmb3JfZWFjaF9wcmlv bGlzdCBpdGVyYXRpb24gKi8KPiArCWlmIChwbC0+cHJpb3JpdHkgIT0gSTkxNV9QUklPUklUWV9O T1JNQUwpCj4gKwkJcGxfcHVzaChwbCwgJnMtPnJlcXVlc3RzKTsKPiArCj4gKwlsdmwgPSBwbC0+ bGV2ZWw7Cj4gKwlHRU1fQlVHX09OKGx2bCA8IDApOwo+ICsJZG8gewo+ICsJCXMtPm5leHRbbHZs XSA9IHBsLT5uZXh0W2x2bF07Cj4gKwkJaWYgKHBsLT5uZXh0W2x2bF0gPT0gcykgewo+ICsJCQlH RU1fQlVHX09OKHMtPmxldmVsICE9IGx2bCk7Cj4gKwkJCXMtPmxldmVsLS07Cj4gKwkJfQo+ICsJ fSB3aGlsZSAoLS1sdmwgPj0gMCk7Cj4gKwo+ICsJcmV0dXJuIHBsLT5uZXh0WzBdOwo+ICAgfQoK SWYgYm90aCBfX2k5MTVfc2NoZWRfZGVxdWV1ZV9uZXh0IGFuZCBfX3JlbW92ZV9wcmlvbGlzdCBh cmUgcmVtb3ZpbmcgYW4gCmVtcHR5IGxpc3QgZnJvbSB0aGUgaGllYXJhcmNoeSwgd2h5IGNhbid0 IHRoZXkgc2hhcmVkIHNvbWUgY29kZT8KClJlZ2FyZHMsCgpUdnJ0a28KCj4gICAKPiAgIHN0YXRp YyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoKPiBAQCAtNDkxLDcgKzY2MSw3IEBAIHN0YXRpYyB2b2lk IF9faTkxNV9yZXF1ZXN0X3NldF9wcmlvcml0eShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgaW50 IHByaW8pCj4gICAKPiAgIAkJR0VNX0JVR19PTihycS0+ZW5naW5lICE9IGVuZ2luZSk7Cj4gICAJ CWlmIChpOTE1X3JlcXVlc3RfaW5fcHJpb3JpdHlfcXVldWUocnEpKQo+IC0JCQlsaXN0X21vdmVf dGFpbCgmcnEtPnNjaGVkLmxpbmssIHBsaXN0KTsKPiArCQkJcmVtb3ZlX2Zyb21fcHJpb2xpc3Qo c2UsIHJxLCBwbGlzdCwgdHJ1ZSk7Cj4gICAKPiAgIAkJLyogRGVmZXIgKHRhc2tsZXQpIHN1Ym1p c3Npb24gdW50aWwgYWZ0ZXIgYWxsIHVwZGF0ZXMuICovCj4gICAJCWtpY2tfc3VibWlzc2lvbihl bmdpbmUsIHJxLCBwcmlvKTsKPiBAQCAtNjI3LDggKzc5Nyw3IEBAIHZvaWQgX19pOTE1X3NjaGVk X2RlZmVyX3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAgCj4gICAJ CS8qIE5vdGUgbGlzdCBpcyByZXZlcnNlZCBmb3Igd2FpdGVycyB3cnQgc2lnbmFsIGhpZXJhcmNo eSAqLwo+ICAgCQlHRU1fQlVHX09OKHJxLT5lbmdpbmUgIT0gZW5naW5lKTsKPiAtCQlHRU1fQlVH X09OKCFpOTE1X3JlcXVlc3RfaW5fcHJpb3JpdHlfcXVldWUocnEpKTsKPiAtCQlsaXN0X21vdmUo JnJxLT5zY2hlZC5saW5rLCAmZGZzKTsKPiArCQlyZW1vdmVfZnJvbV9wcmlvbGlzdChzZSwgcnEs ICZkZnMsIGZhbHNlKTsKPiAgIAo+ICAgCQkvKiBUcmFjayBvdXIgdmlzaXQsIGFuZCBwcmV2ZW50 IGR1cGxpY2F0ZSBwcm9jZXNzaW5nICovCj4gICAJCWNsZWFyX2JpdChJOTE1X0ZFTkNFX0ZMQUdf UFFVRVVFLCAmcnEtPmZlbmNlLmZsYWdzKTsKPiBAQCAtOTI3LDcgKzEwOTYsNyBAQCB2b2lkIGk5 MTVfc2NoZWRfcmVzdW1lX3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ ICAgdm9pZCBfX2k5MTVfc2NoZWRfY2FuY2VsX3F1ZXVlKHN0cnVjdCBpOTE1X3NjaGVkICpzZSkK PiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgKnJuOwo+IC0Jc3RydWN0IHJiX25v ZGUgKnJiOwo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnBsOwo+ICAgCj4gICAJbG9ja2RlcF9h c3NlcnRfaGVsZCgmc2UtPmxvY2spOwo+ICAgCj4gQEAgLTkzNiwxNiArMTEwNSw5IEBAIHZvaWQg X19pOTE1X3NjaGVkX2NhbmNlbF9xdWV1ZShzdHJ1Y3QgaTkxNV9zY2hlZCAqc2UpCj4gICAJCWk5 MTVfcmVxdWVzdF9wdXQoaTkxNV9yZXF1ZXN0X21hcmtfZWlvKHJxKSk7Cj4gICAKPiAgIAkvKiBG bHVzaCB0aGUgcXVldWVkIHJlcXVlc3RzIHRvIHRoZSB0aW1lbGluZSBsaXN0IChmb3IgcmV0aXJp bmcpLiAqLwo+IC0Jd2hpbGUgKChyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmc2UtPnF1ZXVlKSkpIHsK PiAtCQlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcCA9IHRvX3ByaW9saXN0KHJiKTsKPiAtCj4gLQkJ cHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdF9jb25zdW1lKHJxLCBybiwgcCkgewo+IC0JCQlpOTE1 X3JlcXVlc3RfcHV0KGk5MTVfcmVxdWVzdF9tYXJrX2VpbyhycSkpOwo+IC0JCQlfX2k5MTVfcmVx dWVzdF9zdWJtaXQocnEpOwo+IC0JCX0KPiAtCj4gLQkJcmJfZXJhc2VfY2FjaGVkKCZwLT5ub2Rl LCAmc2UtPnF1ZXVlKTsKPiAtCQlpOTE1X3ByaW9saXN0X2ZyZWUocCk7Cj4gKwlpOTE1X3NjaGVk X2RlcXVldWUoc2UsIHBsLCBycSwgcm4pIHsKPiArCQlpOTE1X3JlcXVlc3RfcHV0KGk5MTVfcmVx dWVzdF9tYXJrX2VpbyhycSkpOwo+ICsJCV9faTkxNV9yZXF1ZXN0X3N1Ym1pdChycSk7Cj4gICAJ fQo+ICAgCUdFTV9CVUdfT04oIWk5MTVfc2NoZWRfaXNfaWRsZShzZSkpOwo+ICAgCj4gQEAgLTEy MjUsOSArMTM4Nyw5IEBAIHZvaWQgaTkxNV9zY2hlZF9zaG93KHN0cnVjdCBkcm1fcHJpbnRlciAq bSwKPiAgIAkJICAgICB1bnNpZ25lZCBpbnQgbWF4KQo+ICAgewo+ICAgCWNvbnN0IHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxLCAqbGFzdDsKPiArCXN0cnVjdCBpOTE1X3ByaW9saXN0ICpwbDsKPiAg IAl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICAgCXVuc2lnbmVkIGludCBjb3VudDsKPiAtCXN0cnVj dCByYl9ub2RlICpyYjsKPiAgIAo+ICAgCXJjdV9yZWFkX2xvY2soKTsKPiAgIAlzcGluX2xvY2tf aXJxc2F2ZSgmc2UtPmxvY2ssIGZsYWdzKTsKPiBAQCAtMTI4MiwxMCArMTQ0NCw4IEBAIHZvaWQg aTkxNV9zY2hlZF9zaG93KHN0cnVjdCBkcm1fcHJpbnRlciAqbSwKPiAgIAo+ICAgCWxhc3QgPSBO VUxMOwo+ICAgCWNvdW50ID0gMDsKPiAtCWZvciAocmIgPSByYl9maXJzdF9jYWNoZWQoJnNlLT5x dWV1ZSk7IHJiOyByYiA9IHJiX25leHQocmIpKSB7Cj4gLQkJc3RydWN0IGk5MTVfcHJpb2xpc3Qg KnAgPSByYl9lbnRyeShyYiwgdHlwZW9mKCpwKSwgbm9kZSk7Cj4gLQo+IC0JCXByaW9saXN0X2Zv cl9lYWNoX3JlcXVlc3QocnEsIHApIHsKPiArCWZvcl9lYWNoX3ByaW9saXN0KHBsLCAmc2UtPnF1 ZXVlKSB7Cj4gKwkJcHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdChycSwgcGwpIHsKPiAgIAkJCWlm IChjb3VudCsrIDwgbWF4IC0gMSkKPiAgIAkJCQlzaG93X3JlcXVlc3QobSwgcnEsICJcdCIsIDAp Owo+ICAgCQkJZWxzZQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Nj aGVkdWxlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaAo+IGluZGV4 IGZlMzkyMTA5YjExMi4uODcyZDIyMWY2YmE3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfc2NoZWR1bGVyLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3NjaGVkdWxlci5oCj4gQEAgLTI0LDEyICsyNCw2IEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3M7 Cj4gICAJCSAgIyNfX1ZBX0FSR1NfXyk7CQkJCQlcCj4gICB9IHdoaWxlICgwKQo+ICAgCj4gLSNk ZWZpbmUgcHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdChpdCwgcGxpc3QpIFwKPiAtCWxpc3RfZm9y X2VhY2hfZW50cnkoaXQsICYocGxpc3QpLT5yZXF1ZXN0cywgc2NoZWQubGluaykKPiAtCj4gLSNk ZWZpbmUgcHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdF9jb25zdW1lKGl0LCBuLCBwbGlzdCkgXAo+ IC0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0LCBuLCAmKHBsaXN0KS0+cmVxdWVzdHMsIHNj aGVkLmxpbmspCj4gLQo+ICAgdm9pZCBpOTE1X3NjaGVkX25vZGVfaW5pdChzdHJ1Y3QgaTkxNV9z Y2hlZF9ub2RlICpub2RlKTsKPiAgIHZvaWQgaTkxNV9zY2hlZF9ub2RlX3JlaW5pdChzdHJ1Y3Qg aTkxNV9zY2hlZF9ub2RlICpub2RlKTsKPiAgIAo+IEBAIC0xMDAsNyArOTQsNyBAQCBzdGF0aWMg aW5saW5lIHZvaWQgaTkxNV9wcmlvbGlzdF9mcmVlKHN0cnVjdCBpOTE1X3ByaW9saXN0ICpwKQo+ ICAgCj4gICBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9zY2hlZF9pc19pZGxlKGNvbnN0IHN0cnVj dCBpOTE1X3NjaGVkICpzZSkKPiAgIHsKPiAtCXJldHVybiBSQl9FTVBUWV9ST09UKCZzZS0+cXVl dWUucmJfcm9vdCk7Cj4gKwlyZXR1cm4gaTkxNV9wcmlvbGlzdF9pc19lbXB0eSgmc2UtPnF1ZXVl KTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGlubGluZSBib29sCj4gQEAgLTE2OCw2ICsxNjIsMTQg QEAgaTkxNV9zY2hlZF9nZXRfYWN0aXZlX3JlcXVlc3QoY29uc3Qgc3RydWN0IGk5MTVfc2NoZWQg KnNlKQo+ICAgCXJldHVybiBOVUxMOwo+ICAgfQo+ICAgCj4gKy8qIFdhbGsgdGhlIHNjaGVkdWxl ciBxdWV1ZSBvZiByZXF1ZXN0cyAoaW4gc3VibWlzc2lvbiBvcmRlcikgYW5kIHJlbW92ZSB0aGVt ICovCj4gK3N0cnVjdCBpOTE1X3ByaW9saXN0ICpfX2k5MTVfc2NoZWRfZGVxdWV1ZV9uZXh0KHN0 cnVjdCBpOTE1X3NjaGVkICpzZSk7Cj4gKyNkZWZpbmUgaTkxNV9zY2hlZF9kZXF1ZXVlKHNlLCBw bCwgcnEsIHJuKSBcCj4gKwlmb3IgKChwbCkgPSAoc2UpLT5xdWV1ZS5zZW50aW5lbC5uZXh0WzBd OyBcCj4gKwkgICAgIChwbCkgIT0gJihzZSktPnF1ZXVlLnNlbnRpbmVsOyBcCj4gKwkgICAgIChw bCkgPSBfX2k5MTVfc2NoZWRfZGVxdWV1ZV9uZXh0KHNlKSkgXAo+ICsJCXByaW9saXN0X2Zvcl9l YWNoX3JlcXVlc3Rfc2FmZShycSwgcm4sIHBsKQo+ICsKPiAgIHZvaWQgaTkxNV9yZXF1ZXN0X3No b3dfd2l0aF9zY2hlZHVsZShzdHJ1Y3QgZHJtX3ByaW50ZXIgKm0sCj4gICAJCQkJICAgICBjb25z dCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgIAkJCQkgICAgIGNvbnN0IGNoYXIgKnByZWZp eCwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXJfdHlw ZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyX3R5cGVzLmgKPiBpbmRl eCA1Y2EyZGMxYjRmYjUuLmJjNjY4ZjM3NTA5NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3NjaGVkdWxlcl90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9zY2hlZHVsZXJfdHlwZXMuaAo+IEBAIC0xMTUsNyArMTE1LDcgQEAgc3RydWN0IGk5 MTVfc2NoZWQgewo+ICAgCSAqIEBxdWV1ZSBpcyBvbmx5IHVzZWQgdG8gdHJhbnNmZXIgcmVxdWVz dHMgZnJvbSB0aGUgc2NoZWR1bGVyCj4gICAJICogZnJvbnRlbmQgdG8gdGhlIGJhY2suCj4gICAJ ICovCj4gLQlzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgcXVldWU7Cj4gKwlzdHJ1Y3QgaTkxNV9wcmlv bGlzdF9yb290IHF1ZXVlOwo+ICAgCj4gICAJLyoqCj4gICAJICogQHRhc2tsZXQ6IHNvZnRpcnEg dGFza2xldCBmb3IgYm90dG9tIGhhbGYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKPiBpbmRleCAzZGIzNGQzZWVhNTguLjk0 NmM5MzQ0MWMxZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaAo+IEBAIC0yNSw2ICsyNSw3IEBAIHNlbGZ0ZXN0KHJp bmcsIGludGVsX3JpbmdfbW9ja19zZWxmdGVzdHMpCj4gICBzZWxmdGVzdChlbmdpbmUsIGludGVs X2VuZ2luZV9jc19tb2NrX3NlbGZ0ZXN0cykKPiAgIHNlbGZ0ZXN0KHRpbWVsaW5lcywgaW50ZWxf dGltZWxpbmVfbW9ja19zZWxmdGVzdHMpCj4gICBzZWxmdGVzdChyZXF1ZXN0cywgaTkxNV9yZXF1 ZXN0X21vY2tfc2VsZnRlc3RzKQo+ICtzZWxmdGVzdChzY2hlZHVsZXIsIGk5MTVfc2NoZWR1bGVy X21vY2tfc2VsZnRlc3RzKQo+ICAgc2VsZnRlc3Qob2JqZWN0cywgaTkxNV9nZW1fb2JqZWN0X21v Y2tfc2VsZnRlc3RzKQo+ICAgc2VsZnRlc3QocGh5cywgaTkxNV9nZW1fcGh5c19tb2NrX3NlbGZ0 ZXN0cykKPiAgIHNlbGZ0ZXN0KGRtYWJ1ZiwgaTkxNV9nZW1fZG1hYnVmX21vY2tfc2VsZnRlc3Rz KQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9zY2hl ZHVsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3NjaGVkdWxlci5j Cj4gaW5kZXggZjU0YmRiZWFhNDhiLi4yYmIyZDNkMDdkMDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfc2NoZWR1bGVyLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9zY2hlZHVsZXIuYwo+IEBAIC0xMiw2ICsxMiw1 NCBAQAo+ICAgI2luY2x1ZGUgInNlbGZ0ZXN0cy9pZ3Rfc3Bpbm5lci5oIgo+ICAgI2luY2x1ZGUg InNlbGZ0ZXN0cy9pOTE1X3JhbmRvbS5oIgo+ICAgCj4gK3N0YXRpYyBpbnQgbW9ja19za2lwbGlz dF9sZXZlbHModm9pZCAqZHVtbXkpCj4gK3sKPiArCXN0cnVjdCBpOTE1X3ByaW9saXN0X3Jvb3Qg cm9vdCA9IHt9Owo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnBsID0gJnJvb3Quc2VudGluZWw7 Cj4gKwlJR1RfVElNRU9VVChlbmRfdGltZSk7Cj4gKwl1bnNpZ25lZCBsb25nIHRvdGFsOwo+ICsJ aW50IGNvdW50LCBsdmw7Cj4gKwo+ICsJdG90YWwgPSAwOwo+ICsJZG8gewo+ICsJCWZvciAoY291 bnQgPSAwOyBjb3VudCA8IDE2Mzg0OyBjb3VudCsrKSB7Cj4gKwkJCWx2bCA9IHJhbmRvbV9sZXZl bCgmcm9vdCk7Cj4gKwkJCWlmIChsdmwgPiBwbC0+bGV2ZWwpIHsKPiArCQkJCWlmIChsdmwgPCBJ OTE1X1BSSU9MSVNUX0hFSUdIVCAtIDEpCj4gKwkJCQkJbHZsID0gKytwbC0+bGV2ZWw7Cj4gKwkJ CQllbHNlCj4gKwkJCQkJbHZsID0gSTkxNV9QUklPTElTVF9IRUlHSFQgLSAxOwo+ICsJCQl9Cj4g Kwo+ICsJCQlwbC0+bmV4dFtsdmxdID0gcHRyX2luYyhwbC0+bmV4dFtsdmxdKTsKPiArCQl9Cj4g KwkJdG90YWwgKz0gY291bnQ7Cj4gKwl9IHdoaWxlICghX19pZ3RfdGltZW91dChlbmRfdGltZSwg TlVMTCkpOwo+ICsKPiArCXByX2luZm8oIlRvdGFsICU5bHVcbiIsIHRvdGFsKTsKPiArCWZvciAo bHZsID0gMDsgbHZsIDw9IHBsLT5sZXZlbDsgbHZsKyspIHsKPiArCQlpbnQgeCA9IGlsb2cyKCh1 bnNpZ25lZCBsb25nKXBsLT5uZXh0W2x2bF0pOwo+ICsJCWNoYXIgcm93WzgwXTsKPiArCj4gKwkJ bWVtc2V0KHJvdywgJyonLCB4KTsKPiArCQlyb3dbeF0gPSAnXDAnOwo+ICsKPiArCQlwcl9pbmZv KCIgWyUyZF0gJTlsdSAlc1xuIiwKPiArCQkJbHZsLCAodW5zaWduZWQgbG9uZylwbC0+bmV4dFts dmxdLCByb3cpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgaTkxNV9z Y2hlZHVsZXJfbW9ja19zZWxmdGVzdHModm9pZCkKPiArewo+ICsJc3RhdGljIGNvbnN0IHN0cnVj dCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKPiArCQlTVUJURVNUKG1vY2tfc2tpcGxpc3RfbGV2 ZWxzKSwKPiArCX07Cj4gKwo+ICsJcmV0dXJuIGk5MTVfc3VidGVzdHModGVzdHMsIE5VTEwpOwo+ ICt9Cj4gKwo+ICAgc3RhdGljIHZvaWQgc2NoZWR1bGluZ19kaXNhYmxlKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAgIAllbmdpbmUtPnByb3BzLnByZWVtcHRfdGltZW91 dF9tcyA9IDA7Cj4gQEAgLTgwLDkgKzEyOCw5IEBAIHN0YXRpYyBpbnQgYWxsX2VuZ2luZXMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gICBzdGF0aWMgYm9vbCBjaGVja19jb250ZXh0 X29yZGVyKHN0cnVjdCBpOTE1X3NjaGVkICpzZSkKPiAgIHsKPiAgIAl1NjQgbGFzdF9zZXFubywg bGFzdF9jb250ZXh0Owo+ICsJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnA7Cj4gICAJdW5zaWduZWQg bG9uZyBjb3VudDsKPiAgIAlib29sIHJlc3VsdCA9IGZhbHNlOwo+IC0Jc3RydWN0IHJiX25vZGUg KnJiOwo+ICAgCWludCBsYXN0X3ByaW87Cj4gICAKPiAgIAkvKiBXZSBleHBlY3QgdGhlIGV4ZWN1 dGlvbiBvcmRlciB0byBmb2xsb3cgYXNjZW5kaW5nIGZlbmNlLWNvbnRleHQgKi8KPiBAQCAtOTIs OCArMTQwLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfY29udGV4dF9vcmRlcihzdHJ1Y3QgaTkxNV9z Y2hlZCAqc2UpCj4gICAJbGFzdF9jb250ZXh0ID0gMDsKPiAgIAlsYXN0X3NlcW5vID0gMDsKPiAg IAlsYXN0X3ByaW8gPSAwOwo+IC0JZm9yIChyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmc2UtPnF1ZXVl KTsgcmI7IHJiID0gcmJfbmV4dChyYikpIHsKPiAtCQlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcCA9 IHJiX2VudHJ5KHJiLCB0eXBlb2YoKnApLCBub2RlKTsKPiArCWZvcl9lYWNoX3ByaW9saXN0KHAs ICZzZS0+cXVldWUpIHsKPiAgIAkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gICAKPiAgIAkJ cHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdChycSwgcCkgewo+IApfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK