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=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 320D9C4361B for ; Thu, 10 Dec 2020 16:12:59 +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 AFA7C2310B for ; Thu, 10 Dec 2020 16:12:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AFA7C2310B 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 1C45E6EAD4; Thu, 10 Dec 2020 16:12:56 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id B263E6EAA4 for ; Thu, 10 Dec 2020 16:12:54 +0000 (UTC) IronPort-SDR: JS4/IuXOtvk6xoC3Ox0vK4sjULEG6Hab+S+HI/DJXbQdf6I7yFlDP5rpscTvkKwPucprlMCrME thXxpqr0SENg== X-IronPort-AV: E=McAfee;i="6000,8403,9830"; a="173516157" X-IronPort-AV: E=Sophos;i="5.78,408,1599548400"; d="scan'208";a="173516157" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Dec 2020 08:12:54 -0800 IronPort-SDR: OMkjWRYlT5X6CpCQDdJuahpxxqZqVerKVvLAQ/9RRVpa2Fx76pr/av5WnKIQab0Hy+UPuDtWIk 6FPTh4bxCYqQ== X-IronPort-AV: E=Sophos;i="5.78,408,1599548400"; d="scan'208";a="364754760" Received: from yechielg-mobl1.ger.corp.intel.com (HELO localhost) ([10.249.81.29]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Dec 2020 08:12:50 -0800 From: Jani Nikula To: Ville =?utf-8?B?U3lyasOkbMOk?= , Dave Airlie In-Reply-To: Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <20201210041755.29088-1-airlied@gmail.com> <20201210041755.29088-5-airlied@gmail.com> Date: Thu, 10 Dec 2020 18:12:46 +0200 Message-ID: <87r1nx8wsh.fsf@intel.com> MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH 4/9] drm/i915: refactor cursor code out of i915_display.c 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: , Cc: intel-gfx@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gVGh1LCAxMCBEZWMgMjAyMCwgVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4gd3JvdGU6Cj4gT24gVGh1LCBEZWMgMTAsIDIwMjAgYXQgMDI6MTc6NTBQTSAr MTAwMCwgRGF2ZSBBaXJsaWUgd3JvdGU6Cj4+IEZyb206IERhdmUgQWlybGllIDxhaXJsaWVkQHJl ZGhhdC5jb20+Cj4+IAo+PiBUaGlzIGZpbGUgaXMgYSBtb25zdGVyLCBsZXQncyBzdGFydCBzaW1w bGUsIHRoZSBjdXJzb3IgcGxhbmUgY29kZQo+PiBzZWVtcyBwcmV0dHkgc3RhbmRhbG9uZSwgYW5k IHNwbGl0cyBvdXQgZWFzaWx5IGVub3VnaC4KPj4gCj4+IFNpZ25lZC1vZmYtYnk6IERhdmUgQWly bGllIDxhaXJsaWVkQHJlZGhhdC5jb20+Cj4+IC0tLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDEgKwo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9jdXJzb3IuYyAgfCA4MDUgKysrKysrKysrKysrKysrKysrKwo+PiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgfCA3OTYgKy0tLS0tLS0t LS0tLS0tLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXku aCB8ICAxMiArCj4KPiBJIHdvdWxkIGp1c3QgYWRkIHRoZSBpbnRlbF9jdXJzb3IuaCBmb3IgdGhp cy4gaW50ZWxfZGlzcGxheS5oIGlzIGFuCj4gZXZlbiBiaWdnZXIgbWVzcyB0aGFuIGludGVsX2Rp c3BsYXkuYywgYW5kIGNhdXNpbmcgbm8gZW5kIG9mIHJlZHVuZGFudAo+IHJlYnVpbGRzLiBUaGUg c21hbGxlciB3ZSBjYW4gbWFrZSBpdCB0aGUgYmV0dGVyIElNTy4KClNlcGFyYXRlIGhlYWRlciBm b3IgZWFjaCAuYyBpcyB3aGVyZSB3ZSd2ZSBiZWVuIGhlYWRpbmcgc2luY2Ugd2Ugc3RhcnRlZApy ZWZhY3RvcmluZyB0aGUgZHJpdmVyIHRvIG11bHRpcGxlIHN1YmRpcnMgaW5zdGVhZCBvZiB0aGUg ZmxhdApzdHJ1Y3R1cmUsIGFuZCBzdGFydGVkIGNob3BwaW5nIHVwIGZpbGVzIGFzIGEgY29uc2Vx dWVuY2UuCgpBbHNvLCBwbGVhc2UgcHJlZml4IHRoZSBmdW5jdGlvbnMgaW4gaW50ZWxfZm9vLltj aF0gd2l0aAppbnRlbF9mb29fLiBUaGlzIGlzIGFsc28gd2hlcmUgd2UndmUgYmVlbiBoZWFkaW5n IGZvciBhIHdoaWxlIG5vdy4KCkJSLApKYW5pLgoKCgo+Cj4gTG9va3MgbGlrZSBhIG1lY2hhbmlj YWwgbW92ZSwgYW5kIHNlZW1zIHRvIG1hdGNoIG15IGF0dGVtcHQgYXQgaXQgc28KPiBSZXZpZXdl ZC1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPgo+ PiAgNCBmaWxlcyBjaGFuZ2VkLCA4MjQgaW5zZXJ0aW9ucygrKSwgNzkwIGRlbGV0aW9ucygtKQo+ PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf Y3Vyc29yLmMKPj4gCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4+IGluZGV4IGU1NTc0ZTUwNmE1Yy4u OThhMzViOTM5MDUyIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+PiBAQCAtMTk3LDYgKzE5 Nyw3IEBAIGk5MTUteSArPSBcCj4+ICAJZGlzcGxheS9pbnRlbF9jb21ib19waHkubyBcCj4+ICAJ ZGlzcGxheS9pbnRlbF9jb25uZWN0b3IubyBcCj4+ICAJZGlzcGxheS9pbnRlbF9jc3IubyBcCj4+ ICsJZGlzcGxheS9pbnRlbF9jdXJzb3IubyBcCj4+ICAJZGlzcGxheS9pbnRlbF9kaXNwbGF5Lm8g XAo+PiAgCWRpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5vIFwKPj4gIAlkaXNwbGF5L2ludGVs X2RwaW9fcGh5Lm8gXAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9jdXJzb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3Vy c29yLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi44N2E3 YTc0YTI1YWMKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k aXNwbGF5L2ludGVsX2N1cnNvci5jCj4+IEBAIC0wLDAgKzEsODA1IEBACj4+ICsvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogTUlUCj4+ICsvKgo+PiArICogQ29weXJpZ2h0IMKpIDIwMjAgSW50 ZWwgQ29ycG9yYXRpb24KPj4gKyAqLwo+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+PiAr Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4+ICsjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWNfdWFwaS5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fZGFtYWdlX2hlbHBlci5o Pgo+PiArI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4+ICsjaW5jbHVkZSA8ZHJt L2RybV9mb3VyY2MuaD4KPj4gKwo+PiArI2luY2x1ZGUgImludGVsX2F0b21pYy5oIgo+PiArI2lu Y2x1ZGUgImludGVsX2F0b21pY19wbGFuZS5oIgo+PiArI2luY2x1ZGUgImludGVsX2Rpc3BsYXlf dHlwZXMuaCIKPj4gKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5LmgiCj4+ICsKPj4gKyNpbmNsdWRl ICJpbnRlbF9mcm9udGJ1ZmZlci5oIgo+PiArI2luY2x1ZGUgImludGVsX3BtLmgiCj4+ICsjaW5j bHVkZSAiaW50ZWxfcHNyLmgiCj4+ICsjaW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCj4+ICsKPj4g Ky8qIEN1cnNvciBmb3JtYXRzICovCj4+ICtzdGF0aWMgY29uc3QgdTMyIGludGVsX2N1cnNvcl9m b3JtYXRzW10gPSB7Cj4+ICsJRFJNX0ZPUk1BVF9BUkdCODg4OCwKPj4gK307Cj4+ICsKPj4gK3N0 YXRpYyBjb25zdCB1NjQgY3Vyc29yX2Zvcm1hdF9tb2RpZmllcnNbXSA9IHsKPj4gKwlEUk1fRk9S TUFUX01PRF9MSU5FQVIsCj4+ICsJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIHUzMiBpbnRlbF9jdXJzb3JfYmFzZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlKQo+PiArewo+PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9Cj4+ICsJCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Cj4+ ICsJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7 Cj4+ICsJY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2ZiX29i aihmYik7Cj4+ICsJdTMyIGJhc2U7Cj4+ICsKPj4gKwlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdikt PmRpc3BsYXkuY3Vyc29yX25lZWRzX3BoeXNpY2FsKQo+PiArCQliYXNlID0gc2dfZG1hX2FkZHJl c3Mob2JqLT5tbS5wYWdlcy0+c2dsKTsKPj4gKwllbHNlCj4+ICsJCWJhc2UgPSBpbnRlbF9wbGFu ZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSk7Cj4+ICsKPj4gKwlyZXR1cm4gYmFzZSArIHBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1MzIg aW50ZWxfY3Vyc29yX3Bvc2l0aW9uKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCj4+ICt7Cj4+ICsJaW50IHggPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueDE7Cj4+ ICsJaW50IHkgPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueTE7Cj4+ICsJdTMyIHBvcyA9IDA7Cj4+ ICsKPj4gKwlpZiAoeCA8IDApIHsKPj4gKwkJcG9zIHw9IENVUlNPUl9QT1NfU0lHTiA8PCBDVVJT T1JfWF9TSElGVDsKPj4gKwkJeCA9IC14Owo+PiArCX0KPj4gKwlwb3MgfD0geCA8PCBDVVJTT1Jf WF9TSElGVDsKPj4gKwo+PiArCWlmICh5IDwgMCkgewo+PiArCQlwb3MgfD0gQ1VSU09SX1BPU19T SUdOIDw8IENVUlNPUl9ZX1NISUZUOwo+PiArCQl5ID0gLXk7Cj4+ICsJfQo+PiArCXBvcyB8PSB5 IDw8IENVUlNPUl9ZX1NISUZUOwo+PiArCj4+ICsJcmV0dXJuIHBvczsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGJvb2wgaW50ZWxfY3Vyc29yX3NpemVfb2soY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKPj4gK3sKPj4gKwljb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29u ZmlnICpjb25maWcgPQo+PiArCQkmcGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldi0+bW9kZV9j b25maWc7Cj4+ICsJaW50IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBp LmRzdCk7Cj4+ICsJaW50IGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVh cGkuZHN0KTsKPj4gKwo+PiArCXJldHVybiB3aWR0aCA+IDAgJiYgd2lkdGggPD0gY29uZmlnLT5j dXJzb3Jfd2lkdGggJiYKPj4gKwkJaGVpZ2h0ID4gMCAmJiBoZWlnaHQgPD0gY29uZmlnLT5jdXJz b3JfaGVpZ2h0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGludGVsX2N1cnNvcl9jaGVja19z dXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4+ICt7Cj4+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KPj4gKwkJdG9faTkxNShwbGFuZV9z dGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKPj4gKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFu ZV9zdGF0ZS0+aHcucm90YXRpb247Cj4+ICsJaW50IHNyY194LCBzcmNfeTsKPj4gKwl1MzIgb2Zm c2V0Owo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2d0 dChwbGFuZV9zdGF0ZSk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiAr CWlmICghcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsKPj4g KwlzcmNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsKPj4gKwlzcmNfeSA9IHBs YW5lX3N0YXRlLT51YXBpLnNyYy55MSA+PiAxNjsKPj4gKwo+PiArCWludGVsX2FkZF9mYl9vZmZz ZXRzKCZzcmNfeCwgJnNyY195LCBwbGFuZV9zdGF0ZSwgMCk7Cj4+ICsJb2Zmc2V0ID0gaW50ZWxf cGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldCgmc3JjX3gsICZzcmNfeSwKPj4gKwkJCQkJCSAg ICBwbGFuZV9zdGF0ZSwgMCk7Cj4+ICsKPj4gKwlpZiAoc3JjX3ggIT0gMCB8fCBzcmNfeSAhPSAw KSB7Cj4+ICsJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+PiArCQkJICAgICJBcmJpdHJh cnkgY3Vyc29yIHBhbm5pbmcgbm90IHN1cHBvcnRlZFxuIik7Cj4+ICsJCXJldHVybiAtRUlOVkFM Owo+PiArCX0KPj4gKwo+PiArCS8qCj4+ICsJICogUHV0IHRoZSBmaW5hbCBjb29yZGluYXRlcyBi YWNrIHNvIHRoYXQgdGhlIHNyYwo+PiArCSAqIGNvb3JkaW5hdGUgY2hlY2tzIHdpbGwgc2VlIHRo ZSByaWdodCB2YWx1ZXMuCj4+ICsJICovCj4+ICsJZHJtX3JlY3RfdHJhbnNsYXRlX3RvKCZwbGFu ZV9zdGF0ZS0+dWFwaS5zcmMsCj4+ICsJCQkgICAgICBzcmNfeCA8PCAxNiwgc3JjX3kgPDwgMTYp Owo+PiArCj4+ICsJLyogSUxLKyBkbyB0aGlzIGF1dG9tYWdpY2FsbHkgaW4gaGFyZHdhcmUgKi8K Pj4gKwlpZiAoSEFTX0dNQ0goZGV2X3ByaXYpICYmIHJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRF XzE4MCkgewo+PiArCQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0 YXRlLT5ody5mYjsKPj4gKwkJaW50IHNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRl LT51YXBpLnNyYykgPj4gMTY7Cj4+ICsJCWludCBzcmNfaCA9IGRybV9yZWN0X2hlaWdodCgmcGxh bmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKPj4gKwo+PiArCQlvZmZzZXQgKz0gKHNyY19oICog c3JjX3cgLSAxKSAqIGZiLT5mb3JtYXQtPmNwcFswXTsKPj4gKwl9Cj4+ICsKPj4gKwlwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0ID0gb2Zmc2V0Owo+PiArCXBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVswXS54ID0gc3JjX3g7Cj4+ICsJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBd LnkgPSBzcmNfeTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGludGVsX2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwK Pj4gKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4+ICt7 Cj4+ICsJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcu ZmI7Cj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KHBsYW5lX3N0 YXRlLT51YXBpLnBsYW5lLT5kZXYpOwo+PiArCWNvbnN0IHN0cnVjdCBkcm1fcmVjdCBzcmMgPSBw bGFuZV9zdGF0ZS0+dWFwaS5zcmM7Cj4+ICsJY29uc3Qgc3RydWN0IGRybV9yZWN0IGRzdCA9IHBs YW5lX3N0YXRlLT51YXBpLmRzdDsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJaWYgKGZiICYmIGZi LT5tb2RpZmllciAhPSBEUk1fRk9STUFUX01PRF9MSU5FQVIpIHsKPj4gKwkJZHJtX2RiZ19rbXMo Jmk5MTUtPmRybSwgImN1cnNvciBjYW5ub3QgYmUgdGlsZWRcbiIpOwo+PiArCQlyZXR1cm4gLUVJ TlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSBpbnRlbF9hdG9taWNfcGxhbmVfY2hlY2tfY2xp cHBpbmcocGxhbmVfc3RhdGUsIGNydGNfc3RhdGUsCj4+ICsJCQkJCQlEUk1fUExBTkVfSEVMUEVS X05PX1NDQUxJTkcsCj4+ICsJCQkJCQlEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCj4+ICsJ CQkJCQl0cnVlKTsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJLyog VXNlIHRoZSB1bmNsaXBwZWQgc3JjL2RzdCByZWN0YW5nbGVzLCB3aGljaCB3ZSBwcm9ncmFtIHRv IGh3ICovCj4+ICsJcGxhbmVfc3RhdGUtPnVhcGkuc3JjID0gc3JjOwo+PiArCXBsYW5lX3N0YXRl LT51YXBpLmRzdCA9IGRzdDsKPj4gKwo+PiArCXJldCA9IGludGVsX2N1cnNvcl9jaGVja19zdXJm YWNlKHBsYW5lX3N0YXRlKTsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ ICsJaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQo+PiArCQlyZXR1cm4gMDsKPj4gKwo+ PiArCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSk7 Cj4+ICsJaWYgKHJldCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCXJldHVybiAwOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdW5zaWduZWQgaW50Cj4+ICtpODQ1X2N1cnNvcl9tYXhfc3RyaWRl KHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4+ICsJCSAgICAgICB1MzIgcGl4ZWxfZm9ybWF0 LCB1NjQgbW9kaWZpZXIsCj4+ICsJCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCj4+ICt7 Cj4+ICsJcmV0dXJuIDIwNDg7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1MzIgaTg0NV9jdXJzb3Jf Y3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4+ICt7 Cj4+ICsJdTMyIGNudGwgPSAwOwo+PiArCj4+ICsJaWYgKGNydGNfc3RhdGUtPmdhbW1hX2VuYWJs ZSkKPj4gKwkJY250bCB8PSBDVVJTT1JfR0FNTUFfRU5BQkxFOwo+PiArCj4+ICsJcmV0dXJuIGNu dGw7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1MzIgaTg0NV9jdXJzb3JfY3RsKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+PiArCQkJICAgY29uc3Qgc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPj4gK3sKPj4gKwlyZXR1cm4gQ1VSU09SX0VO QUJMRSB8Cj4+ICsJCUNVUlNPUl9GT1JNQVRfQVJHQiB8Cj4+ICsJCUNVUlNPUl9TVFJJREUocGxh bmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBi b29sIGk4NDVfY3Vyc29yX3NpemVfb2soY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKPj4gK3sKPj4gKwlpbnQgd2lkdGggPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVf c3RhdGUtPnVhcGkuZHN0KTsKPj4gKwo+PiArCS8qCj4+ICsJICogODQ1Zy84NjVnIGFyZSBvbmx5 IGxpbWl0ZWQgYnkgdGhlIHdpZHRoIG9mIHRoZWlyIGN1cnNvcnMsCj4+ICsJICogdGhlIGhlaWdo dCBpcyBhcmJpdHJhcnkgdXAgdG8gdGhlIHByZWNpc2lvbiBvZiB0aGUgcmVnaXN0ZXIuCj4+ICsJ ICovCj4+ICsJcmV0dXJuIGludGVsX2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRlKSAmJiBJU19B TElHTkVEKHdpZHRoLCA2NCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgaTg0NV9jaGVja19j dXJzb3Ioc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4+ICsJCQkgICAgIHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4+ICt7Cj4+ICsJY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Cj4+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5l LT5kZXYpOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSBpbnRlbF9jaGVja19jdXJzb3Io Y3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwo+PiArCWlmIChyZXQpCj4+ICsJCXJldHVybiByZXQ7 Cj4+ICsKPj4gKwkvKiBpZiB3ZSB3YW50IHRvIHR1cm4gb2ZmIHRoZSBjdXJzb3IgaWdub3JlIHdp ZHRoIGFuZCBoZWlnaHQgKi8KPj4gKwlpZiAoIWZiKQo+PiArCQlyZXR1cm4gMDsKPj4gKwo+PiAr CS8qIENoZWNrIGZvciB3aGljaCBjdXJzb3IgdHlwZXMgd2Ugc3VwcG9ydCAqLwo+PiArCWlmICgh aTg0NV9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkpIHsKPj4gKwkJZHJtX2RiZ19rbXMoJmk5 MTUtPmRybSwKPj4gKwkJCSAgICAiQ3Vyc29yIGRpbWVuc2lvbiAlZHglZCBub3Qgc3VwcG9ydGVk XG4iLAo+PiArCQkJICAgIGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpLAo+ PiArCQkJICAgIGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSk7Cj4+ICsJ CXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCWRybV9XQVJOX09OKCZpOTE1LT5kcm0s IHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUgJiYKPj4gKwkJICAgIHBsYW5lX3N0YXRlLT5jb2xv cl9wbGFuZVswXS5zdHJpZGUgIT0gZmItPnBpdGNoZXNbMF0pOwo+PiArCj4+ICsJc3dpdGNoIChm Yi0+cGl0Y2hlc1swXSkgewo+PiArCWNhc2UgMjU2Ogo+PiArCWNhc2UgNTEyOgo+PiArCWNhc2Ug MTAyNDoKPj4gKwljYXNlIDIwNDg6Cj4+ICsJCWJyZWFrOwo+PiArCWRlZmF1bHQ6Cj4+ICsJCSBk cm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiSW52YWxpZCBjdXJzb3Igc3RyaWRlICgldSlcbiIsCj4+ ICsJCQkgICAgIGZiLT5waXRjaGVzWzBdKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+ PiArCj4+ICsJcGxhbmVfc3RhdGUtPmN0bCA9IGk4NDVfY3Vyc29yX2N0bChjcnRjX3N0YXRlLCBw bGFuZV9zdGF0ZSk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgaTg0NV91cGRhdGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4+ICsJCQkg ICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4+ICsJCQkg ICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPj4gK3sK Pj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5i YXNlLmRldik7Cj4+ICsJdTMyIGNudGwgPSAwLCBiYXNlID0gMCwgcG9zID0gMCwgc2l6ZSA9IDA7 Cj4+ICsJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPj4gKwo+PiArCWlmIChwbGFuZV9zdGF0ZSAm JiBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKSB7Cj4+ICsJCXVuc2lnbmVkIGludCB3aWR0aCA9 IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwo+PiArCQl1bnNpZ25lZCBp bnQgaGVpZ2h0ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwo+PiAr Cj4+ICsJCWNudGwgPSBwbGFuZV9zdGF0ZS0+Y3RsIHwKPj4gKwkJCWk4NDVfY3Vyc29yX2N0bF9j cnRjKGNydGNfc3RhdGUpOwo+PiArCj4+ICsJCXNpemUgPSAoaGVpZ2h0IDw8IDEyKSB8IHdpZHRo Owo+PiArCj4+ICsJCWJhc2UgPSBpbnRlbF9jdXJzb3JfYmFzZShwbGFuZV9zdGF0ZSk7Cj4+ICsJ CXBvcyA9IGludGVsX2N1cnNvcl9wb3NpdGlvbihwbGFuZV9zdGF0ZSk7Cj4+ICsJfQo+PiArCj4+ ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+ PiArCj4+ICsJLyogT24gdGhlc2UgY2hpcHNldHMgd2UgY2FuIG9ubHkgbW9kaWZ5IHRoZSBiYXNl L3NpemUvc3RyaWRlCj4+ICsJICogd2hpbHN0IHRoZSBjdXJzb3IgaXMgZGlzYWJsZWQuCj4+ICsJ ICovCj4+ICsJaWYgKHBsYW5lLT5jdXJzb3IuYmFzZSAhPSBiYXNlIHx8Cj4+ICsJICAgIHBsYW5l LT5jdXJzb3Iuc2l6ZSAhPSBzaXplIHx8Cj4+ICsJICAgIHBsYW5lLT5jdXJzb3IuY250bCAhPSBj bnRsKSB7Cj4+ICsJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJDTlRSKFBJUEVfQSks IDApOwo+PiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQkFTRShQSVBFX0EpLCBi YXNlKTsKPj4gKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlNJWkUsIHNpemUpOwo+ PiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSUE9TKFBJUEVfQSksIHBvcyk7Cj4+ ICsJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJDTlRSKFBJUEVfQSksIGNudGwpOwo+ PiArCj4+ICsJCXBsYW5lLT5jdXJzb3IuYmFzZSA9IGJhc2U7Cj4+ICsJCXBsYW5lLT5jdXJzb3Iu c2l6ZSA9IHNpemU7Cj4+ICsJCXBsYW5lLT5jdXJzb3IuY250bCA9IGNudGw7Cj4+ICsJfSBlbHNl IHsKPj4gKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlBPUyhQSVBFX0EpLCBwb3Mp Owo+PiArCX0KPj4gKwo+PiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNv cmUubG9jaywgaXJxZmxhZ3MpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBpODQ1X2Rpc2Fi bGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4+ICsJCQkJY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4+ICt7Cj4+ICsJaTg0NV91cGRhdGVfY3Vy c29yKHBsYW5lLCBjcnRjX3N0YXRlLCBOVUxMKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGJvb2wg aTg0NV9jdXJzb3JfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4+ICsJ CQkJICAgICBlbnVtIHBpcGUgKnBpcGUpCj4+ICt7Cj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+PiArCWVudW0gaW50ZWxf ZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJfZG9tYWluOwo+PiArCWludGVsX3dha2VyZWZfdCB3 YWtlcmVmOwo+PiArCWJvb2wgcmV0Owo+PiArCj4+ICsJcG93ZXJfZG9tYWluID0gUE9XRVJfRE9N QUlOX1BJUEUoUElQRV9BKTsKPj4gKwl3YWtlcmVmID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRf aWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKPj4gKwlpZiAoIXdha2VyZWYpCj4+ ICsJCXJldHVybiBmYWxzZTsKPj4gKwo+PiArCXJldCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IENVUkNOVFIoUElQRV9BKSkgJiBDVVJTT1JfRU5BQkxFOwo+PiArCj4+ICsJKnBpcGUgPSBQSVBF X0E7Cj4+ICsKPj4gKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9t YWluLCB3YWtlcmVmKTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyB1bnNpZ25lZCBpbnQKPj4gK2k5eHhfY3Vyc29yX21heF9zdHJpZGUoc3RydWN0IGludGVsX3Bs YW5lICpwbGFuZSwKPj4gKwkJICAgICAgIHUzMiBwaXhlbF9mb3JtYXQsIHU2NCBtb2RpZmllciwK Pj4gKwkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKPj4gK3sKPj4gKwlyZXR1cm4gcGxh bmUtPmJhc2UuZGV2LT5tb2RlX2NvbmZpZy5jdXJzb3Jfd2lkdGggKiA0Owo+PiArfQo+PiArCj4+ ICtzdGF0aWMgdTMyIGk5eHhfY3Vyc29yX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQo+PiArewo+PiArCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0g dG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwo+PiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+PiArCXUzMiBj bnRsID0gMDsKPj4gKwo+PiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQo+PiArCQly ZXR1cm4gY250bDsKPj4gKwo+PiArCWlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFibGUpCj4+ICsJ CWNudGwgPSBNQ1VSU09SX0dBTU1BX0VOQUJMRTsKPj4gKwo+PiArCWlmIChjcnRjX3N0YXRlLT5j c2NfZW5hYmxlKQo+PiArCQljbnRsIHw9IE1DVVJTT1JfUElQRV9DU0NfRU5BQkxFOwo+PiArCj4+ ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA1ICYmICFJU19HNFgoZGV2X3ByaXYpKQo+PiAr CQljbnRsIHw9IE1DVVJTT1JfUElQRV9TRUxFQ1QoY3J0Yy0+cGlwZSk7Cj4+ICsKPj4gKwlyZXR1 cm4gY250bDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHUzMiBpOXh4X2N1cnNvcl9jdGwoY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4+ICsJCQkgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+PiArewo+PiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4+ICsJCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGku cGxhbmUtPmRldik7Cj4+ICsJdTMyIGNudGwgPSAwOwo+PiArCj4+ICsJaWYgKElTX0dFTihkZXZf cHJpdiwgNikgfHwgSVNfSVZZQlJJREdFKGRldl9wcml2KSkKPj4gKwkJY250bCB8PSBNQ1VSU09S X1RSSUNLTEVfRkVFRF9ESVNBQkxFOwo+PiArCj4+ICsJc3dpdGNoIChkcm1fcmVjdF93aWR0aCgm cGxhbmVfc3RhdGUtPnVhcGkuZHN0KSkgewo+PiArCWNhc2UgNjQ6Cj4+ICsJCWNudGwgfD0gTUNV UlNPUl9NT0RFXzY0X0FSR0JfQVg7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgMTI4Ogo+PiArCQlj bnRsIHw9IE1DVVJTT1JfTU9ERV8xMjhfQVJHQl9BWDsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSAy NTY6Cj4+ICsJCWNudGwgfD0gTUNVUlNPUl9NT0RFXzI1Nl9BUkdCX0FYOwo+PiArCQlicmVhazsK Pj4gKwlkZWZhdWx0Ogo+PiArCQlNSVNTSU5HX0NBU0UoZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0 YXRlLT51YXBpLmRzdCkpOwo+PiArCQlyZXR1cm4gMDsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAocGxh bmVfc3RhdGUtPmh3LnJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRFXzE4MCkKPj4gKwkJY250bCB8 PSBNQ1VSU09SX1JPVEFURV8xODA7Cj4+ICsKPj4gKwlyZXR1cm4gY250bDsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGJvb2wgaTl4eF9jdXJzb3Jfc2l6ZV9vayhjb25zdCBzdHJ1Y3QgaW50ZWxfcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+PiArewo+PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9Cj4+ICsJCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7 Cj4+ICsJaW50IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7 Cj4+ICsJaW50IGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0 KTsKPj4gKwo+PiArCWlmICghaW50ZWxfY3Vyc29yX3NpemVfb2socGxhbmVfc3RhdGUpKQo+PiAr CQlyZXR1cm4gZmFsc2U7Cj4+ICsKPj4gKwkvKiBDdXJzb3Igd2lkdGggaXMgbGltaXRlZCB0byBh IGZldyBwb3dlci1vZi10d28gc2l6ZXMgKi8KPj4gKwlzd2l0Y2ggKHdpZHRoKSB7Cj4+ICsJY2Fz ZSAyNTY6Cj4+ICsJY2FzZSAxMjg6Cj4+ICsJY2FzZSA2NDoKPj4gKwkJYnJlYWs7Cj4+ICsJZGVm YXVsdDoKPj4gKwkJcmV0dXJuIGZhbHNlOwo+PiArCX0KPj4gKwo+PiArCS8qCj4+ICsJICogSVZC KyBoYXZlIENVUl9GQkNfQ1RMIHdoaWNoIGFsbG93cyBhbiBhcmJpdHJhcnkgY3Vyc29yCj4+ICsJ ICogaGVpZ2h0IGZyb20gOCBsaW5lcyB1cCB0byB0aGUgY3Vyc29yIHdpZHRoLCB3aGVuIHRoZQo+ PiArCSAqIGN1cnNvciBpcyBub3Qgcm90YXRlZC4gRXZlcnl0aGluZyBlbHNlIHJlcXVpcmVzIHNx dWFyZQo+PiArCSAqIGN1cnNvcnMuCj4+ICsJICovCj4+ICsJaWYgKEhBU19DVVJfRkJDKGRldl9w cml2KSAmJgo+PiArCSAgICBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb24gJiBEUk1fTU9ERV9ST1RB VEVfMCkgewo+PiArCQlpZiAoaGVpZ2h0IDwgOCB8fCBoZWlnaHQgPiB3aWR0aCkKPj4gKwkJCXJl dHVybiBmYWxzZTsKPj4gKwl9IGVsc2Ugewo+PiArCQlpZiAoaGVpZ2h0ICE9IHdpZHRoKQo+PiAr CQkJcmV0dXJuIGZhbHNlOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiB0cnVlOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGk5eHhfY2hlY2tfY3Vyc29yKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlLAo+PiArCQkJICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlKQo+PiArewo+PiArCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9w bGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Cj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+PiArCWNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwo+PiArCWVudW0gcGlw ZSBwaXBlID0gcGxhbmUtPnBpcGU7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCXJldCA9IGludGVs X2NoZWNrX2N1cnNvcihjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Cj4+ICsJaWYgKHJldCkKPj4g KwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCS8qIGlmIHdlIHdhbnQgdG8gdHVybiBvZmYgdGhlIGN1 cnNvciBpZ25vcmUgd2lkdGggYW5kIGhlaWdodCAqLwo+PiArCWlmICghZmIpCj4+ICsJCXJldHVy biAwOwo+PiArCj4+ICsJLyogQ2hlY2sgZm9yIHdoaWNoIGN1cnNvciB0eXBlcyB3ZSBzdXBwb3J0 ICovCj4+ICsJaWYgKCFpOXh4X2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRlKSkgewo+PiArCQlk cm1fZGJnKCZkZXZfcHJpdi0+ZHJtLAo+PiArCQkJIkN1cnNvciBkaW1lbnNpb24gJWR4JWQgbm90 IHN1cHBvcnRlZFxuIiwKPj4gKwkJCWRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5k c3QpLAo+PiArCQkJZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKTsKPj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJZHJtX1dBUk5fT04oJmRldl9wcml2 LT5kcm0sIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUgJiYKPj4gKwkJICAgIHBsYW5lX3N0YXRl LT5jb2xvcl9wbGFuZVswXS5zdHJpZGUgIT0gZmItPnBpdGNoZXNbMF0pOwo+PiArCj4+ICsJaWYg KGZiLT5waXRjaGVzWzBdICE9Cj4+ICsJICAgIGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+ dWFwaS5kc3QpICogZmItPmZvcm1hdC0+Y3BwWzBdKSB7Cj4+ICsJCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLAo+PiArCQkJICAgICJJbnZhbGlkIGN1cnNvciBzdHJpZGUgKCV1KSAoY3Vyc29y IHdpZHRoICVkKVxuIiwKPj4gKwkJCSAgICBmYi0+cGl0Y2hlc1swXSwKPj4gKwkJCSAgICBkcm1f cmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSk7Cj4+ICsJCXJldHVybiAtRUlOVkFM Owo+PiArCX0KPj4gKwo+PiArCS8qCj4+ICsJICogVGhlcmUncyBzb21ldGhpbmcgd3Jvbmcgd2l0 aCB0aGUgY3Vyc29yIG9uIENIViBwaXBlIEMuCj4+ICsJICogSWYgaXQgc3RyYWRkbGVzIHRoZSBs ZWZ0IGVkZ2Ugb2YgdGhlIHNjcmVlbiB0aGVuCj4+ICsJICogbW92aW5nIGl0IGF3YXkgZnJvbSB0 aGUgZWRnZSBvciBkaXNhYmxpbmcgaXQgb2Z0ZW4KPj4gKwkgKiByZXN1bHRzIGluIGEgcGlwZSB1 bmRlcnJ1biwgYW5kIG9mdGVuIHRoYXQgY2FuIGxlYWQgdG8KPj4gKwkgKiBkZWFkIHBpcGUgKGNv bnN0YW50IHVuZGVycnVuIHJlcG9ydGVkLCBhbmQgaXQgc2NhbnMKPj4gKwkgKiBvdXQganVzdCBh IHNvbGlkIGNvbG9yKS4gVG8gcmVjb3ZlciBmcm9tIHRoYXQsIHRoZQo+PiArCSAqIGRpc3BsYXkg cG93ZXIgd2VsbCBtdXN0IGJlIHR1cm5lZCBvZmYgYW5kIG9uIGFnYWluLgo+PiArCSAqIFJlZnVz ZSB0aGUgcHV0IHRoZSBjdXJzb3IgaW50byB0aGF0IGNvbXByb21pc2VkIHBvc2l0aW9uLgo+PiAr CSAqLwo+PiArCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJiBwaXBlID09IFBJUEVfQyAm Jgo+PiArCSAgICBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlICYmIHBsYW5lX3N0YXRlLT51YXBp LmRzdC54MSA8IDApIHsKPj4gKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCj4+ICsJCQkg ICAgIkNIViBjdXJzb3IgQyBub3QgYWxsb3dlZCB0byBzdHJhZGRsZSB0aGUgbGVmdCBzY3JlZW4g ZWRnZVxuIik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCXBsYW5lX3N0 YXRlLT5jdGwgPSBpOXh4X2N1cnNvcl9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwo+PiAr Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGk5eHhfdXBkYXRlX2N1 cnNvcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+PiArCQkJICAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+PiArCQkJICAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4+ICt7Cj4+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+PiArCWVu dW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7Cj4+ICsJdTMyIGNudGwgPSAwLCBiYXNlID0gMCwg cG9zID0gMCwgZmJjX2N0bCA9IDA7Cj4+ICsJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPj4gKwo+ PiArCWlmIChwbGFuZV9zdGF0ZSAmJiBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKSB7Cj4+ICsJ CXVuc2lnbmVkIHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7 Cj4+ICsJCXVuc2lnbmVkIGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVh cGkuZHN0KTsKPj4gKwo+PiArCQljbnRsID0gcGxhbmVfc3RhdGUtPmN0bCB8Cj4+ICsJCQlpOXh4 X2N1cnNvcl9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKPj4gKwo+PiArCQlpZiAod2lkdGggIT0gaGVp Z2h0KQo+PiArCQkJZmJjX2N0bCA9IENVUl9GQkNfQ1RMX0VOIHwgKGhlaWdodCAtIDEpOwo+PiAr Cj4+ICsJCWJhc2UgPSBpbnRlbF9jdXJzb3JfYmFzZShwbGFuZV9zdGF0ZSk7Cj4+ICsJCXBvcyA9 IGludGVsX2N1cnNvcl9wb3NpdGlvbihwbGFuZV9zdGF0ZSk7Cj4+ICsJfQo+PiArCj4+ICsJc3Bp bl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+PiArCj4+ ICsJLyoKPj4gKwkgKiBPbiBzb21lIHBsYXRmb3JtcyB3cml0aW5nIENVUkNOVFIgZmlyc3Qgd2ls bCBhbHNvCj4+ICsJICogY2F1c2UgQ1VSUE9TIHRvIGJlIGFybWVkIGJ5IHRoZSBDVVJCQVNFIHdy aXRlLgo+PiArCSAqIFdpdGhvdXQgdGhlIENVUkNOVFIgd3JpdGUgdGhlIENVUlBPUyB3cml0ZSB3 b3VsZAo+PiArCSAqIGFybSBpdHNlbGYuIFRodXMgd2UgYWx3YXlzIHVwZGF0ZSBDVVJDTlRSIGJl Zm9yZQo+PiArCSAqIENVUlBPUy4KPj4gKwkgKgo+PiArCSAqIE9uIG90aGVyIHBsYXRmb3JtcyBD VVJQT1MgYWx3YXlzIHJlcXVpcmVzIHRoZQo+PiArCSAqIENVUkJBU0Ugd3JpdGUgdG8gYXJtIHRo ZSB1cGRhdGUuIEFkZGl0b25hbGx5Cj4+ICsJICogYSB3cml0ZSB0byBhbnkgb2YgdGhlIGN1cnNv ciByZWdpc3RlciB3aWxsIGNhbmNlbAo+PiArCSAqIGFuIGFscmVhZHkgYXJtZWQgY3Vyc29yIHVw ZGF0ZS4gVGh1cyBsZWF2aW5nIG91dAo+PiArCSAqIHRoZSBDVVJCQVNFIHdyaXRlIGFmdGVyIENV UlBPUyBjb3VsZCBsZWFkIHRvIGEKPj4gKwkgKiBjdXJzb3IgdGhhdCBkb2Vzbid0IGFwcGVhciB0 byBtb3ZlLCBvciBldmVuIGNoYW5nZQo+PiArCSAqIHNoYXBlLiBUaHVzIHdlIGFsd2F5cyB3cml0 ZSBDVVJCQVNFLgo+PiArCSAqCj4+ICsJICogVGhlIG90aGVyIHJlZ2lzdGVycyBhcmUgYXJtZWQg YnkgYnkgdGhlIENVUkJBU0Ugd3JpdGUKPj4gKwkgKiBleGNlcHQgd2hlbiB0aGUgcGxhbmUgaXMg Z2V0dGluZyBlbmFibGVkIGF0IHdoaWNoIHRpbWUKPj4gKwkgKiB0aGUgQ1VSQ05UUiB3cml0ZSBh cm1zIHRoZSB1cGRhdGUuCj4+ICsJICovCj4+ICsKPj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSA5KQo+PiArCQlza2xfd3JpdGVfY3Vyc29yX3dtKHBsYW5lLCBjcnRjX3N0YXRlKTsKPj4g Kwo+PiArCWlmICghaW50ZWxfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpKQo+PiArCQlp bnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2VsX2ZldGNoKHBsYW5lLCBjcnRjX3N0YXRlLCBwbGFu ZV9zdGF0ZSwgMCk7Cj4+ICsKPj4gKwlpZiAocGxhbmUtPmN1cnNvci5iYXNlICE9IGJhc2UgfHwK Pj4gKwkgICAgcGxhbmUtPmN1cnNvci5zaXplICE9IGZiY19jdGwgfHwKPj4gKwkgICAgcGxhbmUt PmN1cnNvci5jbnRsICE9IGNudGwpIHsKPj4gKwkJaWYgKEhBU19DVVJfRkJDKGRldl9wcml2KSkK Pj4gKwkJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJfRkJDX0NUTChwaXBlKSwKPj4g KwkJCQkJICBmYmNfY3RsKTsKPj4gKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkNO VFIocGlwZSksIGNudGwpOwo+PiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSUE9T KHBpcGUpLCBwb3MpOwo+PiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQkFTRShw aXBlKSwgYmFzZSk7Cj4+ICsKPj4gKwkJcGxhbmUtPmN1cnNvci5iYXNlID0gYmFzZTsKPj4gKwkJ cGxhbmUtPmN1cnNvci5zaXplID0gZmJjX2N0bDsKPj4gKwkJcGxhbmUtPmN1cnNvci5jbnRsID0g Y250bDsKPj4gKwl9IGVsc2Ugewo+PiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VS UE9TKHBpcGUpLCBwb3MpOwo+PiArCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQkFT RShwaXBlKSwgYmFzZSk7Cj4+ICsJfQo+PiArCj4+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2 b2lkIGk5eHhfZGlzYWJsZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPj4gKwkJ CQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPj4gK3sKPj4gKwlp OXh4X3VwZGF0ZV9jdXJzb3IocGxhbmUsIGNydGNfc3RhdGUsIE5VTEwpOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgYm9vbCBpOXh4X2N1cnNvcl9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSwKPj4gKwkJCQkgICAgIGVudW0gcGlwZSAqcGlwZSkKPj4gK3sKPj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4+ ICsJZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47Cj4+ICsJaW50 ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4+ICsJYm9vbCByZXQ7Cj4+ICsJdTMyIHZhbDsKPj4gKwo+ PiArCS8qCj4+ICsJICogTm90IDEwMCUgY29ycmVjdCBmb3IgcGxhbmVzIHRoYXQgY2FuIG1vdmUg YmV0d2VlbiBwaXBlcywKPj4gKwkgKiBidXQgdGhhdCdzIG9ubHkgdGhlIGNhc2UgZm9yIGdlbjIt MyB3aGljaCBkb24ndCBoYXZlIGFueQo+PiArCSAqIGRpc3BsYXkgcG93ZXIgd2VsbHMuCj4+ICsJ ICovCj4+ICsJcG93ZXJfZG9tYWluID0gUE9XRVJfRE9NQUlOX1BJUEUocGxhbmUtPnBpcGUpOwo+ PiArCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2 LCBwb3dlcl9kb21haW4pOwo+PiArCWlmICghd2FrZXJlZikKPj4gKwkJcmV0dXJuIGZhbHNlOwo+ PiArCj4+ICsJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgQ1VSQ05UUihwbGFuZS0+cGlw ZSkpOwo+PiArCj4+ICsJcmV0ID0gdmFsICYgTUNVUlNPUl9NT0RFOwo+PiArCj4+ICsJaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gNSB8fCBJU19HNFgoZGV2X3ByaXYpKQo+PiArCQkqcGlwZSA9 IHBsYW5lLT5waXBlOwo+PiArCWVsc2UKPj4gKwkJKnBpcGUgPSAodmFsICYgTUNVUlNPUl9QSVBF X1NFTEVDVF9NQVNLKSA+Pgo+PiArCQkJTUNVUlNPUl9QSVBFX1NFTEVDVF9TSElGVDsKPj4gKwo+ PiArCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21haW4sIHdha2Vy ZWYpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGJvb2wgaW50 ZWxfY3Vyc29yX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwK Pj4gKwkJCQkJICAgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVyKQo+PiArewo+PiArCXJldHVy biBtb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIgJiYKPj4gKwkJZm9ybWF0ID09IERS TV9GT1JNQVRfQVJHQjg4ODg7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQKPj4gK2ludGVsX2xl Z2FjeV9jdXJzb3JfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKPj4gKwkJCSAgIHN0 cnVjdCBkcm1fY3J0YyAqX2NydGMsCj4+ICsJCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwKPj4gKwkJCSAgIGludCBjcnRjX3gsIGludCBjcnRjX3ksCj4+ICsJCQkgICB1bnNpZ25lZCBp bnQgY3J0Y193LCB1bnNpZ25lZCBpbnQgY3J0Y19oLAo+PiArCQkJICAgdTMyIHNyY194LCB1MzIg c3JjX3ksCj4+ICsJCQkgICB1MzIgc3JjX3csIHUzMiBzcmNfaCwKPj4gKwkJCSAgIHN0cnVjdCBk cm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KQo+PiArewo+PiArCXN0cnVjdCBpbnRlbF9wbGFu ZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShfcGxhbmUpOwo+PiArCXN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjID0gdG9faW50ZWxfY3J0YyhfY3J0Yyk7Cj4+ICsJc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpvbGRfcGxhbmVfc3RhdGUgPQo+PiArCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+ YmFzZS5zdGF0ZSk7Cj4+ICsJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpuZXdfcGxhbmVfc3Rh dGU7Cj4+ICsJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPQo+PiArCQl0b19p bnRlbF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOwo+PiArCXN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpuZXdfY3J0Y19zdGF0ZTsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJLyoKPj4gKwkg KiBXaGVuIGNydGMgaXMgaW5hY3RpdmUgb3IgdGhlcmUgaXMgYSBtb2Rlc2V0IHBlbmRpbmcsCj4+ ICsJICogd2FpdCBmb3IgaXQgdG8gY29tcGxldGUgaW4gdGhlIHNsb3dwYXRoCj4+ICsJICoKPj4g KwkgKiBGSVhNRSBiaWdqb2luZXIgZmFzdHBhdGggd291bGQgYmUgZ29vZAo+PiArCSAqLwo+PiAr CWlmICghY3J0Y19zdGF0ZS0+aHcuYWN0aXZlIHx8IGludGVsX2NydGNfbmVlZHNfbW9kZXNldChj cnRjX3N0YXRlKSB8fAo+PiArCSAgICBjcnRjX3N0YXRlLT51cGRhdGVfcGlwZSB8fCBjcnRjX3N0 YXRlLT5iaWdqb2luZXIpCj4+ICsJCWdvdG8gc2xvdzsKPj4gKwo+PiArCS8qCj4+ICsJICogRG9u J3QgZG8gYW4gYXN5bmMgdXBkYXRlIGlmIHRoZXJlIGlzIGFuIG91dHN0YW5kaW5nIGNvbW1pdCBt b2RpZnlpbmcKPj4gKwkgKiB0aGUgcGxhbmUuICBUaGlzIHByZXZlbnRzIG91ciBhc3luYyB1cGRh dGUncyBjaGFuZ2VzIGZyb20gZ2V0dGluZwo+PiArCSAqIG92ZXJyaWRkZW4gYnkgYSBwcmV2aW91 cyBzeW5jaHJvbm91cyB1cGRhdGUncyBzdGF0ZS4KPj4gKwkgKi8KPj4gKwlpZiAob2xkX3BsYW5l X3N0YXRlLT51YXBpLmNvbW1pdCAmJgo+PiArCSAgICAhdHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24o Jm9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jb21taXQtPmh3X2RvbmUpKQo+PiArCQlnb3RvIHNsb3c7 Cj4+ICsKPj4gKwkvKgo+PiArCSAqIElmIGFueSBwYXJhbWV0ZXJzIGNoYW5nZSB0aGF0IG1heSBh ZmZlY3Qgd2F0ZXJtYXJrcywKPj4gKwkgKiB0YWtlIHRoZSBzbG93cGF0aC4gT25seSBjaGFuZ2lu ZyBmYiBvciBwb3NpdGlvbiBzaG91bGQgYmUKPj4gKwkgKiBpbiB0aGUgZmFzdHBhdGguCj4+ICsJ ICovCj4+ICsJaWYgKG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjICE9ICZjcnRjLT5iYXNlIHx8 Cj4+ICsJICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfdyAhPSBzcmNfdyB8fAo+PiArCSAg ICBvbGRfcGxhbmVfc3RhdGUtPnVhcGkuc3JjX2ggIT0gc3JjX2ggfHwKPj4gKwkgICAgb2xkX3Bs YW5lX3N0YXRlLT51YXBpLmNydGNfdyAhPSBjcnRjX3cgfHwKPj4gKwkgICAgb2xkX3BsYW5lX3N0 YXRlLT51YXBpLmNydGNfaCAhPSBjcnRjX2ggfHwKPj4gKwkgICAgIW9sZF9wbGFuZV9zdGF0ZS0+ dWFwaS5mYiAhPSAhZmIpCj4+ICsJCWdvdG8gc2xvdzsKPj4gKwo+PiArCW5ld19wbGFuZV9zdGF0 ZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSgmcGxh bmUtPmJhc2UpKTsKPj4gKwlpZiAoIW5ld19wbGFuZV9zdGF0ZSkKPj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4+ICsKPj4gKwluZXdfY3J0Y19zdGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoaW50ZWxf Y3J0Y19kdXBsaWNhdGVfc3RhdGUoJmNydGMtPmJhc2UpKTsKPj4gKwlpZiAoIW5ld19jcnRjX3N0 YXRlKSB7Cj4+ICsJCXJldCA9IC1FTk9NRU07Cj4+ICsJCWdvdG8gb3V0X2ZyZWU7Cj4+ICsJfQo+ PiArCj4+ICsJZHJtX2F0b21pY19zZXRfZmJfZm9yX3BsYW5lKCZuZXdfcGxhbmVfc3RhdGUtPnVh cGksIGZiKTsKPj4gKwo+PiArCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfeCA9IHNyY194Owo+ PiArCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfeSA9IHNyY195Owo+PiArCW5ld19wbGFuZV9z dGF0ZS0+dWFwaS5zcmNfdyA9IHNyY193Owo+PiArCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5zcmNf aCA9IHNyY19oOwo+PiArCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjX3ggPSBjcnRjX3g7Cj4+ ICsJbmV3X3BsYW5lX3N0YXRlLT51YXBpLmNydGNfeSA9IGNydGNfeTsKPj4gKwluZXdfcGxhbmVf c3RhdGUtPnVhcGkuY3J0Y193ID0gY3J0Y193Owo+PiArCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5j cnRjX2ggPSBjcnRjX2g7Cj4+ICsKPj4gKwlpbnRlbF9wbGFuZV9jb3B5X3VhcGlfdG9faHdfc3Rh dGUobmV3X3BsYW5lX3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUsIGNydGMpOwo+PiArCj4+ICsJcmV0 ID0gaW50ZWxfcGxhbmVfYXRvbWljX2NoZWNrX3dpdGhfc3RhdGUoY3J0Y19zdGF0ZSwgbmV3X2Ny dGNfc3RhdGUsCj4+ICsJCQkJCQkgIG9sZF9wbGFuZV9zdGF0ZSwgbmV3X3BsYW5lX3N0YXRlKTsK Pj4gKwlpZiAocmV0KQo+PiArCQlnb3RvIG91dF9mcmVlOwo+PiArCj4+ICsJcmV0ID0gaW50ZWxf cGxhbmVfcGluX2ZiKG5ld19wbGFuZV9zdGF0ZSk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZ290byBv dXRfZnJlZTsKPj4gKwo+PiArCWludGVsX2Zyb250YnVmZmVyX2ZsdXNoKHRvX2ludGVsX2Zyb250 YnVmZmVyKG5ld19wbGFuZV9zdGF0ZS0+aHcuZmIpLAo+PiArCQkJCU9SSUdJTl9GTElQKTsKPj4g KwlpbnRlbF9mcm9udGJ1ZmZlcl90cmFjayh0b19pbnRlbF9mcm9udGJ1ZmZlcihvbGRfcGxhbmVf c3RhdGUtPmh3LmZiKSwKPj4gKwkJCQl0b19pbnRlbF9mcm9udGJ1ZmZlcihuZXdfcGxhbmVfc3Rh dGUtPmh3LmZiKSwKPj4gKwkJCQlwbGFuZS0+ZnJvbnRidWZmZXJfYml0KTsKPj4gKwo+PiArCS8q IFN3YXAgcGxhbmUgc3RhdGUgKi8KPj4gKwlwbGFuZS0+YmFzZS5zdGF0ZSA9ICZuZXdfcGxhbmVf c3RhdGUtPnVhcGk7Cj4+ICsKPj4gKwkvKgo+PiArCSAqIFdlIGNhbm5vdCBzd2FwIGNydGNfc3Rh dGUgYXMgaXQgbWF5IGJlIGluIHVzZSBieSBhbiBhdG9taWMgY29tbWl0IG9yCj4+ICsJICogcGFn ZSBmbGlwIHRoYXQncyBydW5uaW5nIHNpbXVsdGFuZW91c2x5LiBJZiB3ZSBzd2FwIGNydGNfc3Rh dGUgYW5kCj4+ICsJICogZGVzdHJveSB0aGUgb2xkIHN0YXRlLCB3ZSB3aWxsIGNhdXNlIGEgdXNl LWFmdGVyLWZyZWUgdGhlcmUuCj4+ICsJICoKPj4gKwkgKiBPbmx5IHVwZGF0ZSBhY3RpdmVfcGxh bmVzLCB3aGljaCBpcyBuZWVkZWQgZm9yIG91ciBpbnRlcm5hbAo+PiArCSAqIGJvb2trZWVwaW5n LiBFaXRoZXIgdmFsdWUgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgd2hlbiB1cGRhdGluZwo+PiAr CSAqIHBsYW5lcyBhdG9taWNhbGx5LiBJZiB0aGUgY3Vyc29yIHdhcyBwYXJ0IG9mIHRoZSBhdG9t aWMgdXBkYXRlIHRoZW4KPj4gKwkgKiB3ZSB3b3VsZCBoYXZlIHRha2VuIHRoZSBzbG93cGF0aC4K Pj4gKwkgKi8KPj4gKwljcnRjX3N0YXRlLT5hY3RpdmVfcGxhbmVzID0gbmV3X2NydGNfc3RhdGUt PmFjdGl2ZV9wbGFuZXM7Cj4+ICsKPj4gKwlpZiAobmV3X3BsYW5lX3N0YXRlLT51YXBpLnZpc2li bGUpCj4+ICsJCWludGVsX3VwZGF0ZV9wbGFuZShwbGFuZSwgY3J0Y19zdGF0ZSwgbmV3X3BsYW5l X3N0YXRlKTsKPj4gKwllbHNlCj4+ICsJCWludGVsX2Rpc2FibGVfcGxhbmUocGxhbmUsIGNydGNf c3RhdGUpOwo+PiArCj4+ICsJaW50ZWxfcGxhbmVfdW5waW5fZmIob2xkX3BsYW5lX3N0YXRlKTsK Pj4gKwo+PiArb3V0X2ZyZWU6Cj4+ICsJaWYgKG5ld19jcnRjX3N0YXRlKQo+PiArCQlpbnRlbF9j cnRjX2Rlc3Ryb3lfc3RhdGUoJmNydGMtPmJhc2UsICZuZXdfY3J0Y19zdGF0ZS0+dWFwaSk7Cj4+ ICsJaWYgKHJldCkKPj4gKwkJaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSgmcGxhbmUtPmJhc2Us ICZuZXdfcGxhbmVfc3RhdGUtPnVhcGkpOwo+PiArCWVsc2UKPj4gKwkJaW50ZWxfcGxhbmVfZGVz dHJveV9zdGF0ZSgmcGxhbmUtPmJhc2UsICZvbGRfcGxhbmVfc3RhdGUtPnVhcGkpOwo+PiArCXJl dHVybiByZXQ7Cj4+ICsKPj4gK3Nsb3c6Cj4+ICsJcmV0dXJuIGRybV9hdG9taWNfaGVscGVyX3Vw ZGF0ZV9wbGFuZSgmcGxhbmUtPmJhc2UsICZjcnRjLT5iYXNlLCBmYiwKPj4gKwkJCQkJICAgICAg Y3J0Y194LCBjcnRjX3ksIGNydGNfdywgY3J0Y19oLAo+PiArCQkJCQkgICAgICBzcmNfeCwgc3Jj X3ksIHNyY193LCBzcmNfaCwgY3R4KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fcGxhbmVfZnVuY3MgaW50ZWxfY3Vyc29yX3BsYW5lX2Z1bmNzID0gewo+PiArCS51cGRh dGVfcGxhbmUgPSBpbnRlbF9sZWdhY3lfY3Vyc29yX3VwZGF0ZSwKPj4gKwkuZGlzYWJsZV9wbGFu ZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCj4+ICsJLmRlc3Ryb3kgPSBpbnRl bF9wbGFuZV9kZXN0cm95LAo+PiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcGxh bmVfZHVwbGljYXRlX3N0YXRlLAo+PiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3Bs YW5lX2Rlc3Ryb3lfc3RhdGUsCj4+ICsJLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gaW50ZWxfY3Vy c29yX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAo+PiArfTsKPj4gKwo+PiArc3RydWN0IGludGVsX3Bs YW5lICoKPj4gK2ludGVsX2N1cnNvcl9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+PiArCQkJICBlbnVtIHBpcGUgcGlwZSkKPj4gK3sKPj4gKwlzdHJ1Y3Qg aW50ZWxfcGxhbmUgKmN1cnNvcjsKPj4gKwlpbnQgcmV0LCB6cG9zOwo+PiArCj4+ICsJY3Vyc29y ID0gaW50ZWxfcGxhbmVfYWxsb2MoKTsKPj4gKwlpZiAoSVNfRVJSKGN1cnNvcikpCj4+ICsJCXJl dHVybiBjdXJzb3I7Cj4+ICsKPj4gKwljdXJzb3ItPnBpcGUgPSBwaXBlOwo+PiArCWN1cnNvci0+ aTl4eF9wbGFuZSA9IChlbnVtIGk5eHhfcGxhbmVfaWQpIHBpcGU7Cj4+ICsJY3Vyc29yLT5pZCA9 IFBMQU5FX0NVUlNPUjsKPj4gKwljdXJzb3ItPmZyb250YnVmZmVyX2JpdCA9IElOVEVMX0ZST05U QlVGRkVSKHBpcGUsIGN1cnNvci0+aWQpOwo+PiArCj4+ICsJaWYgKElTX0k4NDVHKGRldl9wcml2 KSB8fCBJU19JODY1RyhkZXZfcHJpdikpIHsKPj4gKwkJY3Vyc29yLT5tYXhfc3RyaWRlID0gaTg0 NV9jdXJzb3JfbWF4X3N0cmlkZTsKPj4gKwkJY3Vyc29yLT51cGRhdGVfcGxhbmUgPSBpODQ1X3Vw ZGF0ZV9jdXJzb3I7Cj4+ICsJCWN1cnNvci0+ZGlzYWJsZV9wbGFuZSA9IGk4NDVfZGlzYWJsZV9j dXJzb3I7Cj4+ICsJCWN1cnNvci0+Z2V0X2h3X3N0YXRlID0gaTg0NV9jdXJzb3JfZ2V0X2h3X3N0 YXRlOwo+PiArCQljdXJzb3ItPmNoZWNrX3BsYW5lID0gaTg0NV9jaGVja19jdXJzb3I7Cj4+ICsJ fSBlbHNlIHsKPj4gKwkJY3Vyc29yLT5tYXhfc3RyaWRlID0gaTl4eF9jdXJzb3JfbWF4X3N0cmlk ZTsKPj4gKwkJY3Vyc29yLT51cGRhdGVfcGxhbmUgPSBpOXh4X3VwZGF0ZV9jdXJzb3I7Cj4+ICsJ CWN1cnNvci0+ZGlzYWJsZV9wbGFuZSA9IGk5eHhfZGlzYWJsZV9jdXJzb3I7Cj4+ICsJCWN1cnNv ci0+Z2V0X2h3X3N0YXRlID0gaTl4eF9jdXJzb3JfZ2V0X2h3X3N0YXRlOwo+PiArCQljdXJzb3It PmNoZWNrX3BsYW5lID0gaTl4eF9jaGVja19jdXJzb3I7Cj4+ICsJfQo+PiArCj4+ICsJY3Vyc29y LT5jdXJzb3IuYmFzZSA9IH4wOwo+PiArCWN1cnNvci0+Y3Vyc29yLmNudGwgPSB+MDsKPj4gKwo+ PiArCWlmIChJU19JODQ1RyhkZXZfcHJpdikgfHwgSVNfSTg2NUcoZGV2X3ByaXYpIHx8IEhBU19D VVJfRkJDKGRldl9wcml2KSkKPj4gKwkJY3Vyc29yLT5jdXJzb3Iuc2l6ZSA9IH4wOwo+PiArCj4+ ICsJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmY3Vyc29y LT5iYXNlLAo+PiArCQkJCSAgICAgICAwLCAmaW50ZWxfY3Vyc29yX3BsYW5lX2Z1bmNzLAo+PiAr CQkJCSAgICAgICBpbnRlbF9jdXJzb3JfZm9ybWF0cywKPj4gKwkJCQkgICAgICAgQVJSQVlfU0la RShpbnRlbF9jdXJzb3JfZm9ybWF0cyksCj4+ICsJCQkJICAgICAgIGN1cnNvcl9mb3JtYXRfbW9k aWZpZXJzLAo+PiArCQkJCSAgICAgICBEUk1fUExBTkVfVFlQRV9DVVJTT1IsCj4+ICsJCQkJICAg ICAgICJjdXJzb3IgJWMiLCBwaXBlX25hbWUocGlwZSkpOwo+PiArCWlmIChyZXQpCj4+ICsJCWdv dG8gZmFpbDsKPj4gKwo+PiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCj4+ICsJCWRy bV9wbGFuZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoJmN1cnNvci0+YmFzZSwKPj4gKwkJCQkJ CSAgIERSTV9NT0RFX1JPVEFURV8wLAo+PiArCQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAgfAo+ PiArCQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzE4MCk7Cj4+ICsKPj4gKwl6cG9zID0gUlVOVElN RV9JTkZPKGRldl9wcml2KS0+bnVtX3Nwcml0ZXNbcGlwZV0gKyAxOwo+PiArCWRybV9wbGFuZV9j cmVhdGVfenBvc19pbW11dGFibGVfcHJvcGVydHkoJmN1cnNvci0+YmFzZSwgenBvcyk7Cj4+ICsK Pj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikKPj4gKwkJZHJtX3BsYW5lX2VuYWJs ZV9mYl9kYW1hZ2VfY2xpcHMoJmN1cnNvci0+YmFzZSk7Cj4+ICsKPj4gKwlkcm1fcGxhbmVfaGVs cGVyX2FkZCgmY3Vyc29yLT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVscGVyX2Z1bmNzKTsKPj4gKwo+ PiArCXJldHVybiBjdXJzb3I7Cj4+ICsKPj4gK2ZhaWw6Cj4+ICsJaW50ZWxfcGxhbmVfZnJlZShj dXJzb3IpOwo+PiArCj4+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4gK30KPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPj4gaW5kZXggNzlkNzQ3OWJl ZWQyLi43MjJhMWNmNjE5NDEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfZGlzcGxheS5jCj4+IEBAIC0xMzcsMTYgKzEzNyw2IEBAIHN0YXRpYyBjb25zdCB1 NjQgaTl4eF9mb3JtYXRfbW9kaWZpZXJzW10gPSB7Cj4+ICAJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJ RAo+PiAgfTsKPj4gIAo+PiAtLyogQ3Vyc29yIGZvcm1hdHMgKi8KPj4gLXN0YXRpYyBjb25zdCB1 MzIgaW50ZWxfY3Vyc29yX2Zvcm1hdHNbXSA9IHsKPj4gLQlEUk1fRk9STUFUX0FSR0I4ODg4LAo+ PiAtfTsKPj4gLQo+PiAtc3RhdGljIGNvbnN0IHU2NCBjdXJzb3JfZm9ybWF0X21vZGlmaWVyc1td ID0gewo+PiAtCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKPj4gLQlEUk1fRk9STUFUX01PRF9JTlZB TElECj4+IC19Owo+PiAtCj4+ICBzdGF0aWMgdm9pZCBpOXh4X2NydGNfY2xvY2tfZ2V0KHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjLAo+PiAgCQkJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBl X2NvbmZpZyk7Cj4+ICBzdGF0aWMgdm9pZCBpbGtfcGNoX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YywKPj4gQEAgLTI1MjgsOSArMjUxOCw5IEBAIHN0YXRpYyB1MzIgaW50ZWxfY29t cHV0ZV9hbGlnbmVkX29mZnNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ ICAJcmV0dXJuIG9mZnNldF9hbGlnbmVkOwo+PiAgfQo+PiAgCj4+IC1zdGF0aWMgdTMyIGludGVs X3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoaW50ICp4LCBpbnQgKnksCj4+IC0JCQkJCSAg ICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUsCj4+IC0JCQkJCSAgICAg IGludCBjb2xvcl9wbGFuZSkKPj4gK3UzMiBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zm c2V0KGludCAqeCwgaW50ICp5LAo+PiArCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxh bmVfc3RhdGUgKnN0YXRlLAo+PiArCQkJCSAgICAgICBpbnQgY29sb3JfcGxhbmUpCj4+ICB7Cj4+ ICAJc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZSA9IHRvX2ludGVsX3BsYW5lKHN0YXRl LT51YXBpLnBsYW5lKTsKPj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KGludGVsX3BsYW5lLT5iYXNlLmRldik7Cj4+IEBAIC0zMjY3LDcgKzMyNTcsNyBAQCBp bnRlbF9wbGFuZV9yZW1hcF9ndHQoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSkKPj4gIAl9Cj4+ICB9Cj4+ICAKPj4gLXN0YXRpYyBpbnQKPj4gK2ludAo+PiAgaW50ZWxfcGxh bmVfY29tcHV0ZV9ndHQoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPj4g IHsKPj4gIAljb25zdCBzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmZiID0KPj4gQEAgLTExNTM2 LDU2OSArMTE1MjYsNiBAQCBzdGF0aWMgYm9vbCBpbnRlbF9jcnRjX2dldF9waXBlX2NvbmZpZyhz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPj4gIAlyZXR1cm4gdHJ1ZTsKPj4g IH0KPj4gIAo+PiAtc3RhdGljIHUzMiBpbnRlbF9jdXJzb3JfYmFzZShjb25zdCBzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+PiAtewo+PiAtCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9Cj4+IC0JCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUt PmRldik7Cj4+IC0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0 ZS0+aHcuZmI7Cj4+IC0JY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGlu dGVsX2ZiX29iaihmYik7Cj4+IC0JdTMyIGJhc2U7Cj4+IC0KPj4gLQlpZiAoSU5URUxfSU5GTyhk ZXZfcHJpdiktPmRpc3BsYXkuY3Vyc29yX25lZWRzX3BoeXNpY2FsKQo+PiAtCQliYXNlID0gc2df ZG1hX2FkZHJlc3Mob2JqLT5tbS5wYWdlcy0+c2dsKTsKPj4gLQllbHNlCj4+IC0JCWJhc2UgPSBp bnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSk7Cj4+IC0KPj4gLQlyZXR1cm4gYmFz ZSArIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQ7Cj4+IC19Cj4+IC0KPj4gLXN0 YXRpYyB1MzIgaW50ZWxfY3Vyc29yX3Bvc2l0aW9uKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCj4+IC17Cj4+IC0JaW50IHggPSBwbGFuZV9zdGF0ZS0+dWFwaS5k c3QueDE7Cj4+IC0JaW50IHkgPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueTE7Cj4+IC0JdTMyIHBv cyA9IDA7Cj4+IC0KPj4gLQlpZiAoeCA8IDApIHsKPj4gLQkJcG9zIHw9IENVUlNPUl9QT1NfU0lH TiA8PCBDVVJTT1JfWF9TSElGVDsKPj4gLQkJeCA9IC14Owo+PiAtCX0KPj4gLQlwb3MgfD0geCA8 PCBDVVJTT1JfWF9TSElGVDsKPj4gLQo+PiAtCWlmICh5IDwgMCkgewo+PiAtCQlwb3MgfD0gQ1VS U09SX1BPU19TSUdOIDw8IENVUlNPUl9ZX1NISUZUOwo+PiAtCQl5ID0gLXk7Cj4+IC0JfQo+PiAt CXBvcyB8PSB5IDw8IENVUlNPUl9ZX1NISUZUOwo+PiAtCj4+IC0JcmV0dXJuIHBvczsKPj4gLX0K Pj4gLQo+PiAtc3RhdGljIGJvb2wgaW50ZWxfY3Vyc29yX3NpemVfb2soY29uc3Qgc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPj4gLXsKPj4gLQljb25zdCBzdHJ1Y3QgZHJt X21vZGVfY29uZmlnICpjb25maWcgPQo+PiAtCQkmcGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRl di0+bW9kZV9jb25maWc7Cj4+IC0JaW50IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0 YXRlLT51YXBpLmRzdCk7Cj4+IC0JaW50IGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVf c3RhdGUtPnVhcGkuZHN0KTsKPj4gLQo+PiAtCXJldHVybiB3aWR0aCA+IDAgJiYgd2lkdGggPD0g Y29uZmlnLT5jdXJzb3Jfd2lkdGggJiYKPj4gLQkJaGVpZ2h0ID4gMCAmJiBoZWlnaHQgPD0gY29u ZmlnLT5jdXJzb3JfaGVpZ2h0Owo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGludGVsX2N1cnNv cl9jaGVja19zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4+ IC17Cj4+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KPj4gLQkJdG9faTkx NShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKPj4gLQl1bnNpZ25lZCBpbnQgcm90YXRp b24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247Cj4+IC0JaW50IHNyY194LCBzcmNfeTsKPj4g LQl1MzIgb2Zmc2V0Owo+PiAtCWludCByZXQ7Cj4+IC0KPj4gLQlyZXQgPSBpbnRlbF9wbGFuZV9j b21wdXRlX2d0dChwbGFuZV9zdGF0ZSk7Cj4+IC0JaWYgKHJldCkKPj4gLQkJcmV0dXJuIHJldDsK Pj4gLQo+PiAtCWlmICghcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKPj4gLQkJcmV0dXJuIDA7 Cj4+IC0KPj4gLQlzcmNfeCA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsKPj4gLQlz cmNfeSA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy55MSA+PiAxNjsKPj4gLQo+PiAtCWludGVsX2Fk ZF9mYl9vZmZzZXRzKCZzcmNfeCwgJnNyY195LCBwbGFuZV9zdGF0ZSwgMCk7Cj4+IC0Jb2Zmc2V0 ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldCgmc3JjX3gsICZzcmNfeSwKPj4g LQkJCQkJCSAgICBwbGFuZV9zdGF0ZSwgMCk7Cj4+IC0KPj4gLQlpZiAoc3JjX3ggIT0gMCB8fCBz cmNfeSAhPSAwKSB7Cj4+IC0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAo+PiAtCQkJICAg ICJBcmJpdHJhcnkgY3Vyc29yIHBhbm5pbmcgbm90IHN1cHBvcnRlZFxuIik7Cj4+IC0JCXJldHVy biAtRUlOVkFMOwo+PiAtCX0KPj4gLQo+PiAtCS8qCj4+IC0JICogUHV0IHRoZSBmaW5hbCBjb29y ZGluYXRlcyBiYWNrIHNvIHRoYXQgdGhlIHNyYwo+PiAtCSAqIGNvb3JkaW5hdGUgY2hlY2tzIHdp bGwgc2VlIHRoZSByaWdodCB2YWx1ZXMuCj4+IC0JICovCj4+IC0JZHJtX3JlY3RfdHJhbnNsYXRl X3RvKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMsCj4+IC0JCQkgICAgICBzcmNfeCA8PCAxNiwgc3Jj X3kgPDwgMTYpOwo+PiAtCj4+IC0JLyogSUxLKyBkbyB0aGlzIGF1dG9tYWdpY2FsbHkgaW4gaGFy ZHdhcmUgKi8KPj4gLQlpZiAoSEFTX0dNQ0goZGV2X3ByaXYpICYmIHJvdGF0aW9uICYgRFJNX01P REVfUk9UQVRFXzE4MCkgewo+PiAtCQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9 IHBsYW5lX3N0YXRlLT5ody5mYjsKPj4gLQkJaW50IHNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBs YW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7Cj4+IC0JCWludCBzcmNfaCA9IGRybV9yZWN0X2hl aWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKPj4gLQo+PiAtCQlvZmZzZXQgKz0g KHNyY19oICogc3JjX3cgLSAxKSAqIGZiLT5mb3JtYXQtPmNwcFswXTsKPj4gLQl9Cj4+IC0KPj4g LQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0ID0gb2Zmc2V0Owo+PiAtCXBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVswXS54ID0gc3JjX3g7Cj4+IC0JcGxhbmVfc3RhdGUtPmNvbG9y X3BsYW5lWzBdLnkgPSBzcmNfeTsKPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1z dGF0aWMgaW50IGludGVsX2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKPj4gLQkJCSAgICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3Rh dGUpCj4+IC17Cj4+IC0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9z dGF0ZS0+aHcuZmI7Cj4+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1 KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwo+PiAtCWNvbnN0IHN0cnVjdCBkcm1fcmVj dCBzcmMgPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmM7Cj4+IC0JY29uc3Qgc3RydWN0IGRybV9yZWN0 IGRzdCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdDsKPj4gLQlpbnQgcmV0Owo+PiAtCj4+IC0JaWYg KGZiICYmIGZiLT5tb2RpZmllciAhPSBEUk1fRk9STUFUX01PRF9MSU5FQVIpIHsKPj4gLQkJZHJt X2RiZ19rbXMoJmk5MTUtPmRybSwgImN1cnNvciBjYW5ub3QgYmUgdGlsZWRcbiIpOwo+PiAtCQly ZXR1cm4gLUVJTlZBTDsKPj4gLQl9Cj4+IC0KPj4gLQlyZXQgPSBpbnRlbF9hdG9taWNfcGxhbmVf Y2hlY2tfY2xpcHBpbmcocGxhbmVfc3RhdGUsIGNydGNfc3RhdGUsCj4+IC0JCQkJCQlEUk1fUExB TkVfSEVMUEVSX05PX1NDQUxJTkcsCj4+IC0JCQkJCQlEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJ TkcsCj4+IC0JCQkJCQl0cnVlKTsKPj4gLQlpZiAocmV0KQo+PiAtCQlyZXR1cm4gcmV0Owo+PiAt Cj4+IC0JLyogVXNlIHRoZSB1bmNsaXBwZWQgc3JjL2RzdCByZWN0YW5nbGVzLCB3aGljaCB3ZSBw cm9ncmFtIHRvIGh3ICovCj4+IC0JcGxhbmVfc3RhdGUtPnVhcGkuc3JjID0gc3JjOwo+PiAtCXBs YW5lX3N0YXRlLT51YXBpLmRzdCA9IGRzdDsKPj4gLQo+PiAtCXJldCA9IGludGVsX2N1cnNvcl9j aGVja19zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPj4gLQlpZiAocmV0KQo+PiAtCQlyZXR1cm4gcmV0 Owo+PiAtCj4+IC0JaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQo+PiAtCQlyZXR1cm4g MDsKPj4gLQo+PiAtCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRlcyhwbGFu ZV9zdGF0ZSk7Cj4+IC0JaWYgKHJldCkKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQo+PiAtCXJldHVy biAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdW5zaWduZWQgaW50Cj4+IC1pODQ1X2N1cnNvcl9t YXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4+IC0JCSAgICAgICB1MzIgcGl4 ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIsCj4+IC0JCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRp b24pCj4+IC17Cj4+IC0JcmV0dXJuIDIwNDg7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB1MzIgaTg0 NV9jdXJzb3JfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpCj4+IC17Cj4+IC0JdTMyIGNudGwgPSAwOwo+PiAtCj4+IC0JaWYgKGNydGNfc3RhdGUtPmdh bW1hX2VuYWJsZSkKPj4gLQkJY250bCB8PSBDVVJTT1JfR0FNTUFfRU5BQkxFOwo+PiAtCj4+IC0J cmV0dXJuIGNudGw7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB1MzIgaTg0NV9jdXJzb3JfY3RsKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+PiAtCQkJICAgY29uc3Qg c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPj4gLXsKPj4gLQlyZXR1cm4g Q1VSU09SX0VOQUJMRSB8Cj4+IC0JCUNVUlNPUl9GT1JNQVRfQVJHQiB8Cj4+IC0JCUNVUlNPUl9T VFJJREUocGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSk7Cj4+IC19Cj4+IC0KPj4g LXN0YXRpYyBib29sIGk4NDVfY3Vyc29yX3NpemVfb2soY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKPj4gLXsKPj4gLQlpbnQgd2lkdGggPSBkcm1fcmVjdF93aWR0 aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKPj4gLQo+PiAtCS8qCj4+IC0JICogODQ1Zy84NjVn IGFyZSBvbmx5IGxpbWl0ZWQgYnkgdGhlIHdpZHRoIG9mIHRoZWlyIGN1cnNvcnMsCj4+IC0JICog dGhlIGhlaWdodCBpcyBhcmJpdHJhcnkgdXAgdG8gdGhlIHByZWNpc2lvbiBvZiB0aGUgcmVnaXN0 ZXIuCj4+IC0JICovCj4+IC0JcmV0dXJuIGludGVsX2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRl KSAmJiBJU19BTElHTkVEKHdpZHRoLCA2NCk7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgaTg0 NV9jaGVja19jdXJzb3Ioc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4+IC0J CQkgICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4+IC17Cj4+IC0J Y29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Cj4+ IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KHBsYW5lX3N0YXRlLT51 YXBpLnBsYW5lLT5kZXYpOwo+PiAtCWludCByZXQ7Cj4+IC0KPj4gLQlyZXQgPSBpbnRlbF9jaGVj a19jdXJzb3IoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOwo+PiAtCWlmIChyZXQpCj4+IC0JCXJl dHVybiByZXQ7Cj4+IC0KPj4gLQkvKiBpZiB3ZSB3YW50IHRvIHR1cm4gb2ZmIHRoZSBjdXJzb3Ig aWdub3JlIHdpZHRoIGFuZCBoZWlnaHQgKi8KPj4gLQlpZiAoIWZiKQo+PiAtCQlyZXR1cm4gMDsK Pj4gLQo+PiAtCS8qIENoZWNrIGZvciB3aGljaCBjdXJzb3IgdHlwZXMgd2Ugc3VwcG9ydCAqLwo+ PiAtCWlmICghaTg0NV9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkpIHsKPj4gLQkJZHJtX2Ri Z19rbXMoJmk5MTUtPmRybSwKPj4gLQkJCSAgICAiQ3Vyc29yIGRpbWVuc2lvbiAlZHglZCBub3Qg c3VwcG9ydGVkXG4iLAo+PiAtCQkJICAgIGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFw aS5kc3QpLAo+PiAtCQkJICAgIGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0 KSk7Cj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCX0KPj4gLQo+PiAtCWRybV9XQVJOX09OKCZp OTE1LT5kcm0sIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUgJiYKPj4gLQkJICAgIHBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUgIT0gZmItPnBpdGNoZXNbMF0pOwo+PiAtCj4+IC0J c3dpdGNoIChmYi0+cGl0Y2hlc1swXSkgewo+PiAtCWNhc2UgMjU2Ogo+PiAtCWNhc2UgNTEyOgo+ PiAtCWNhc2UgMTAyNDoKPj4gLQljYXNlIDIwNDg6Cj4+IC0JCWJyZWFrOwo+PiAtCWRlZmF1bHQ6 Cj4+IC0JCSBkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiSW52YWxpZCBjdXJzb3Igc3RyaWRlICgl dSlcbiIsCj4+IC0JCQkgICAgIGZiLT5waXRjaGVzWzBdKTsKPj4gLQkJcmV0dXJuIC1FSU5WQUw7 Cj4+IC0JfQo+PiAtCj4+IC0JcGxhbmVfc3RhdGUtPmN0bCA9IGk4NDVfY3Vyc29yX2N0bChjcnRj X3N0YXRlLCBwbGFuZV9zdGF0ZSk7Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAt c3RhdGljIHZvaWQgaTg0NV91cGRhdGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUs Cj4+IC0JCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUs Cj4+IC0JCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KHBsYW5lLT5iYXNlLmRldik7Cj4+IC0JdTMyIGNudGwgPSAwLCBiYXNlID0gMCwgcG9zID0gMCwg c2l6ZSA9IDA7Cj4+IC0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPj4gLQo+PiAtCWlmIChwbGFu ZV9zdGF0ZSAmJiBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKSB7Cj4+IC0JCXVuc2lnbmVkIGlu dCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwo+PiAtCQl1 bnNpZ25lZCBpbnQgaGVpZ2h0ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5k c3QpOwo+PiAtCj4+IC0JCWNudGwgPSBwbGFuZV9zdGF0ZS0+Y3RsIHwKPj4gLQkJCWk4NDVfY3Vy c29yX2N0bF9jcnRjKGNydGNfc3RhdGUpOwo+PiAtCj4+IC0JCXNpemUgPSAoaGVpZ2h0IDw8IDEy KSB8IHdpZHRoOwo+PiAtCj4+IC0JCWJhc2UgPSBpbnRlbF9jdXJzb3JfYmFzZShwbGFuZV9zdGF0 ZSk7Cj4+IC0JCXBvcyA9IGludGVsX2N1cnNvcl9wb3NpdGlvbihwbGFuZV9zdGF0ZSk7Cj4+IC0J fQo+PiAtCj4+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJx ZmxhZ3MpOwo+PiAtCj4+IC0JLyogT24gdGhlc2UgY2hpcHNldHMgd2UgY2FuIG9ubHkgbW9kaWZ5 IHRoZSBiYXNlL3NpemUvc3RyaWRlCj4+IC0JICogd2hpbHN0IHRoZSBjdXJzb3IgaXMgZGlzYWJs ZWQuCj4+IC0JICovCj4+IC0JaWYgKHBsYW5lLT5jdXJzb3IuYmFzZSAhPSBiYXNlIHx8Cj4+IC0J ICAgIHBsYW5lLT5jdXJzb3Iuc2l6ZSAhPSBzaXplIHx8Cj4+IC0JICAgIHBsYW5lLT5jdXJzb3Iu Y250bCAhPSBjbnRsKSB7Cj4+IC0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJDTlRS KFBJUEVfQSksIDApOwo+PiAtCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQkFTRShQ SVBFX0EpLCBiYXNlKTsKPj4gLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlNJWkUs IHNpemUpOwo+PiAtCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSUE9TKFBJUEVfQSks IHBvcyk7Cj4+IC0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJDTlRSKFBJUEVfQSks IGNudGwpOwo+PiAtCj4+IC0JCXBsYW5lLT5jdXJzb3IuYmFzZSA9IGJhc2U7Cj4+IC0JCXBsYW5l LT5jdXJzb3Iuc2l6ZSA9IHNpemU7Cj4+IC0JCXBsYW5lLT5jdXJzb3IuY250bCA9IGNudGw7Cj4+ IC0JfSBlbHNlIHsKPj4gLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlBPUyhQSVBF X0EpLCBwb3MpOwo+PiAtCX0KPj4gLQo+PiAtCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9w cml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgdm9pZCBp ODQ1X2Rpc2FibGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4+IC0JCQkJY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4+IC17Cj4+IC0JaTg0NV91 cGRhdGVfY3Vyc29yKHBsYW5lLCBjcnRjX3N0YXRlLCBOVUxMKTsKPj4gLX0KPj4gLQo+PiAtc3Rh dGljIGJvb2wgaTg0NV9jdXJzb3JfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxh bmUsCj4+IC0JCQkJICAgICBlbnVtIHBpcGUgKnBpcGUpCj4+IC17Cj4+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+PiAtCWVu dW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJfZG9tYWluOwo+PiAtCWludGVsX3dh a2VyZWZfdCB3YWtlcmVmOwo+PiAtCWJvb2wgcmV0Owo+PiAtCj4+IC0JcG93ZXJfZG9tYWluID0g UE9XRVJfRE9NQUlOX1BJUEUoUElQRV9BKTsKPj4gLQl3YWtlcmVmID0gaW50ZWxfZGlzcGxheV9w b3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKPj4gLQlpZiAoIXdh a2VyZWYpCj4+IC0JCXJldHVybiBmYWxzZTsKPj4gLQo+PiAtCXJldCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIENVUkNOVFIoUElQRV9BKSkgJiBDVVJTT1JfRU5BQkxFOwo+PiAtCj4+IC0JKnBp cGUgPSBQSVBFX0E7Cj4+IC0KPj4gLQlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwg cG93ZXJfZG9tYWluLCB3YWtlcmVmKTsKPj4gLQo+PiAtCXJldHVybiByZXQ7Cj4+IC19Cj4+IC0K Pj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQKPj4gLWk5eHhfY3Vyc29yX21heF9zdHJpZGUoc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZSwKPj4gLQkJICAgICAgIHUzMiBwaXhlbF9mb3JtYXQsIHU2NCBt b2RpZmllciwKPj4gLQkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKPj4gLXsKPj4gLQly ZXR1cm4gcGxhbmUtPmJhc2UuZGV2LT5tb2RlX2NvbmZpZy5jdXJzb3Jfd2lkdGggKiA0Owo+PiAt fQo+PiAtCj4+IC1zdGF0aWMgdTMyIGk5eHhfY3Vyc29yX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+PiAtewo+PiAtCXN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwo+PiAtCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+ PiAtCXUzMiBjbnRsID0gMDsKPj4gLQo+PiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx KQo+PiAtCQlyZXR1cm4gY250bDsKPj4gLQo+PiAtCWlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFi bGUpCj4+IC0JCWNudGwgPSBNQ1VSU09SX0dBTU1BX0VOQUJMRTsKPj4gLQo+PiAtCWlmIChjcnRj X3N0YXRlLT5jc2NfZW5hYmxlKQo+PiAtCQljbnRsIHw9IE1DVVJTT1JfUElQRV9DU0NfRU5BQkxF Owo+PiAtCj4+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA1ICYmICFJU19HNFgoZGV2X3By aXYpKQo+PiAtCQljbnRsIHw9IE1DVVJTT1JfUElQRV9TRUxFQ1QoY3J0Yy0+cGlwZSk7Cj4+IC0K Pj4gLQlyZXR1cm4gY250bDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHUzMiBpOXh4X2N1cnNvcl9j dGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4+IC0JCQkgICBj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+PiAtewo+PiAtCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4+IC0JCXRvX2k5MTUocGxhbmVfc3Rh dGUtPnVhcGkucGxhbmUtPmRldik7Cj4+IC0JdTMyIGNudGwgPSAwOwo+PiAtCj4+IC0JaWYgKElT X0dFTihkZXZfcHJpdiwgNikgfHwgSVNfSVZZQlJJREdFKGRldl9wcml2KSkKPj4gLQkJY250bCB8 PSBNQ1VSU09SX1RSSUNLTEVfRkVFRF9ESVNBQkxFOwo+PiAtCj4+IC0Jc3dpdGNoIChkcm1fcmVj dF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSkgewo+PiAtCWNhc2UgNjQ6Cj4+IC0JCWNu dGwgfD0gTUNVUlNPUl9NT0RFXzY0X0FSR0JfQVg7Cj4+IC0JCWJyZWFrOwo+PiAtCWNhc2UgMTI4 Ogo+PiAtCQljbnRsIHw9IE1DVVJTT1JfTU9ERV8xMjhfQVJHQl9BWDsKPj4gLQkJYnJlYWs7Cj4+ IC0JY2FzZSAyNTY6Cj4+IC0JCWNudGwgfD0gTUNVUlNPUl9NT0RFXzI1Nl9BUkdCX0FYOwo+PiAt CQlicmVhazsKPj4gLQlkZWZhdWx0Ogo+PiAtCQlNSVNTSU5HX0NBU0UoZHJtX3JlY3Rfd2lkdGgo JnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpOwo+PiAtCQlyZXR1cm4gMDsKPj4gLQl9Cj4+IC0KPj4g LQlpZiAocGxhbmVfc3RhdGUtPmh3LnJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRFXzE4MCkKPj4g LQkJY250bCB8PSBNQ1VSU09SX1JPVEFURV8xODA7Cj4+IC0KPj4gLQlyZXR1cm4gY250bDsKPj4g LX0KPj4gLQo+PiAtc3RhdGljIGJvb2wgaTl4eF9jdXJzb3Jfc2l6ZV9vayhjb25zdCBzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+PiAtewo+PiAtCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9Cj4+IC0JCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxh bmUtPmRldik7Cj4+IC0JaW50IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51 YXBpLmRzdCk7Cj4+IC0JaW50IGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUt PnVhcGkuZHN0KTsKPj4gLQo+PiAtCWlmICghaW50ZWxfY3Vyc29yX3NpemVfb2socGxhbmVfc3Rh dGUpKQo+PiAtCQlyZXR1cm4gZmFsc2U7Cj4+IC0KPj4gLQkvKiBDdXJzb3Igd2lkdGggaXMgbGlt aXRlZCB0byBhIGZldyBwb3dlci1vZi10d28gc2l6ZXMgKi8KPj4gLQlzd2l0Y2ggKHdpZHRoKSB7 Cj4+IC0JY2FzZSAyNTY6Cj4+IC0JY2FzZSAxMjg6Cj4+IC0JY2FzZSA2NDoKPj4gLQkJYnJlYWs7 Cj4+IC0JZGVmYXVsdDoKPj4gLQkJcmV0dXJuIGZhbHNlOwo+PiAtCX0KPj4gLQo+PiAtCS8qCj4+ IC0JICogSVZCKyBoYXZlIENVUl9GQkNfQ1RMIHdoaWNoIGFsbG93cyBhbiBhcmJpdHJhcnkgY3Vy c29yCj4+IC0JICogaGVpZ2h0IGZyb20gOCBsaW5lcyB1cCB0byB0aGUgY3Vyc29yIHdpZHRoLCB3 aGVuIHRoZQo+PiAtCSAqIGN1cnNvciBpcyBub3Qgcm90YXRlZC4gRXZlcnl0aGluZyBlbHNlIHJl cXVpcmVzIHNxdWFyZQo+PiAtCSAqIGN1cnNvcnMuCj4+IC0JICovCj4+IC0JaWYgKEhBU19DVVJf RkJDKGRldl9wcml2KSAmJgo+PiAtCSAgICBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb24gJiBEUk1f TU9ERV9ST1RBVEVfMCkgewo+PiAtCQlpZiAoaGVpZ2h0IDwgOCB8fCBoZWlnaHQgPiB3aWR0aCkK Pj4gLQkJCXJldHVybiBmYWxzZTsKPj4gLQl9IGVsc2Ugewo+PiAtCQlpZiAoaGVpZ2h0ICE9IHdp ZHRoKQo+PiAtCQkJcmV0dXJuIGZhbHNlOwo+PiAtCX0KPj4gLQo+PiAtCXJldHVybiB0cnVlOwo+ PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IGk5eHhfY2hlY2tfY3Vyc29yKHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+PiAtCQkJICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQo+PiAtewo+PiAtCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0 b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7Cj4+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOwo+PiAtCWNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwo+PiAt CWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7Cj4+IC0JaW50IHJldDsKPj4gLQo+PiAtCXJl dCA9IGludGVsX2NoZWNrX2N1cnNvcihjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Cj4+IC0JaWYg KHJldCkKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQo+PiAtCS8qIGlmIHdlIHdhbnQgdG8gdHVybiBv ZmYgdGhlIGN1cnNvciBpZ25vcmUgd2lkdGggYW5kIGhlaWdodCAqLwo+PiAtCWlmICghZmIpCj4+ IC0JCXJldHVybiAwOwo+PiAtCj4+IC0JLyogQ2hlY2sgZm9yIHdoaWNoIGN1cnNvciB0eXBlcyB3 ZSBzdXBwb3J0ICovCj4+IC0JaWYgKCFpOXh4X2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRlKSkg ewo+PiAtCQlkcm1fZGJnKCZkZXZfcHJpdi0+ZHJtLAo+PiAtCQkJIkN1cnNvciBkaW1lbnNpb24g JWR4JWQgbm90IHN1cHBvcnRlZFxuIiwKPj4gLQkJCWRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0 ZS0+dWFwaS5kc3QpLAo+PiAtCQkJZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5k c3QpKTsKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JfQo+PiAtCj4+IC0JZHJtX1dBUk5fT04o JmRldl9wcml2LT5kcm0sIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUgJiYKPj4gLQkJICAgIHBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUgIT0gZmItPnBpdGNoZXNbMF0pOwo+PiAt Cj4+IC0JaWYgKGZiLT5waXRjaGVzWzBdICE9Cj4+IC0JICAgIGRybV9yZWN0X3dpZHRoKCZwbGFu ZV9zdGF0ZS0+dWFwaS5kc3QpICogZmItPmZvcm1hdC0+Y3BwWzBdKSB7Cj4+IC0JCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLAo+PiAtCQkJICAgICJJbnZhbGlkIGN1cnNvciBzdHJpZGUgKCV1 KSAoY3Vyc29yIHdpZHRoICVkKVxuIiwKPj4gLQkJCSAgICBmYi0+cGl0Y2hlc1swXSwKPj4gLQkJ CSAgICBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSk7Cj4+IC0JCXJldHVy biAtRUlOVkFMOwo+PiAtCX0KPj4gLQo+PiAtCS8qCj4+IC0JICogVGhlcmUncyBzb21ldGhpbmcg d3Jvbmcgd2l0aCB0aGUgY3Vyc29yIG9uIENIViBwaXBlIEMuCj4+IC0JICogSWYgaXQgc3RyYWRk bGVzIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHNjcmVlbiB0aGVuCj4+IC0JICogbW92aW5nIGl0IGF3 YXkgZnJvbSB0aGUgZWRnZSBvciBkaXNhYmxpbmcgaXQgb2Z0ZW4KPj4gLQkgKiByZXN1bHRzIGlu IGEgcGlwZSB1bmRlcnJ1biwgYW5kIG9mdGVuIHRoYXQgY2FuIGxlYWQgdG8KPj4gLQkgKiBkZWFk IHBpcGUgKGNvbnN0YW50IHVuZGVycnVuIHJlcG9ydGVkLCBhbmQgaXQgc2NhbnMKPj4gLQkgKiBv dXQganVzdCBhIHNvbGlkIGNvbG9yKS4gVG8gcmVjb3ZlciBmcm9tIHRoYXQsIHRoZQo+PiAtCSAq IGRpc3BsYXkgcG93ZXIgd2VsbCBtdXN0IGJlIHR1cm5lZCBvZmYgYW5kIG9uIGFnYWluLgo+PiAt CSAqIFJlZnVzZSB0aGUgcHV0IHRoZSBjdXJzb3IgaW50byB0aGF0IGNvbXByb21pc2VkIHBvc2l0 aW9uLgo+PiAtCSAqLwo+PiAtCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJiBwaXBlID09 IFBJUEVfQyAmJgo+PiAtCSAgICBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlICYmIHBsYW5lX3N0 YXRlLT51YXBpLmRzdC54MSA8IDApIHsKPj4gLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0s Cj4+IC0JCQkgICAgIkNIViBjdXJzb3IgQyBub3QgYWxsb3dlZCB0byBzdHJhZGRsZSB0aGUgbGVm dCBzY3JlZW4gZWRnZVxuIik7Cj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCX0KPj4gLQo+PiAt CXBsYW5lX3N0YXRlLT5jdGwgPSBpOXh4X2N1cnNvcl9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVfc3Rh dGUpOwo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIGk5eHhf dXBkYXRlX2N1cnNvcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+PiAtCQkJICAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+PiAtCQkJICAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4+IC17Cj4+IC0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYp Owo+PiAtCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7Cj4+IC0JdTMyIGNudGwgPSAwLCBi YXNlID0gMCwgcG9zID0gMCwgZmJjX2N0bCA9IDA7Cj4+IC0JdW5zaWduZWQgbG9uZyBpcnFmbGFn czsKPj4gLQo+PiAtCWlmIChwbGFuZV9zdGF0ZSAmJiBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxl KSB7Cj4+IC0JCXVuc2lnbmVkIHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51 YXBpLmRzdCk7Cj4+IC0JCXVuc2lnbmVkIGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVf c3RhdGUtPnVhcGkuZHN0KTsKPj4gLQo+PiAtCQljbnRsID0gcGxhbmVfc3RhdGUtPmN0bCB8Cj4+ IC0JCQlpOXh4X2N1cnNvcl9jdGxfY3J0YyhjcnRjX3N0YXRlKTsKPj4gLQo+PiAtCQlpZiAod2lk dGggIT0gaGVpZ2h0KQo+PiAtCQkJZmJjX2N0bCA9IENVUl9GQkNfQ1RMX0VOIHwgKGhlaWdodCAt IDEpOwo+PiAtCj4+IC0JCWJhc2UgPSBpbnRlbF9jdXJzb3JfYmFzZShwbGFuZV9zdGF0ZSk7Cj4+ IC0JCXBvcyA9IGludGVsX2N1cnNvcl9wb3NpdGlvbihwbGFuZV9zdGF0ZSk7Cj4+IC0JfQo+PiAt Cj4+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3Mp Owo+PiAtCj4+IC0JLyoKPj4gLQkgKiBPbiBzb21lIHBsYXRmb3JtcyB3cml0aW5nIENVUkNOVFIg Zmlyc3Qgd2lsbCBhbHNvCj4+IC0JICogY2F1c2UgQ1VSUE9TIHRvIGJlIGFybWVkIGJ5IHRoZSBD VVJCQVNFIHdyaXRlLgo+PiAtCSAqIFdpdGhvdXQgdGhlIENVUkNOVFIgd3JpdGUgdGhlIENVUlBP UyB3cml0ZSB3b3VsZAo+PiAtCSAqIGFybSBpdHNlbGYuIFRodXMgd2UgYWx3YXlzIHVwZGF0ZSBD VVJDTlRSIGJlZm9yZQo+PiAtCSAqIENVUlBPUy4KPj4gLQkgKgo+PiAtCSAqIE9uIG90aGVyIHBs YXRmb3JtcyBDVVJQT1MgYWx3YXlzIHJlcXVpcmVzIHRoZQo+PiAtCSAqIENVUkJBU0Ugd3JpdGUg dG8gYXJtIHRoZSB1cGRhdGUuIEFkZGl0b25hbGx5Cj4+IC0JICogYSB3cml0ZSB0byBhbnkgb2Yg dGhlIGN1cnNvciByZWdpc3RlciB3aWxsIGNhbmNlbAo+PiAtCSAqIGFuIGFscmVhZHkgYXJtZWQg Y3Vyc29yIHVwZGF0ZS4gVGh1cyBsZWF2aW5nIG91dAo+PiAtCSAqIHRoZSBDVVJCQVNFIHdyaXRl IGFmdGVyIENVUlBPUyBjb3VsZCBsZWFkIHRvIGEKPj4gLQkgKiBjdXJzb3IgdGhhdCBkb2Vzbid0 IGFwcGVhciB0byBtb3ZlLCBvciBldmVuIGNoYW5nZQo+PiAtCSAqIHNoYXBlLiBUaHVzIHdlIGFs d2F5cyB3cml0ZSBDVVJCQVNFLgo+PiAtCSAqCj4+IC0JICogVGhlIG90aGVyIHJlZ2lzdGVycyBh cmUgYXJtZWQgYnkgYnkgdGhlIENVUkJBU0Ugd3JpdGUKPj4gLQkgKiBleGNlcHQgd2hlbiB0aGUg cGxhbmUgaXMgZ2V0dGluZyBlbmFibGVkIGF0IHdoaWNoIHRpbWUKPj4gLQkgKiB0aGUgQ1VSQ05U UiB3cml0ZSBhcm1zIHRoZSB1cGRhdGUuCj4+IC0JICovCj4+IC0KPj4gLQlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA5KQo+PiAtCQlza2xfd3JpdGVfY3Vyc29yX3dtKHBsYW5lLCBjcnRjX3N0 YXRlKTsKPj4gLQo+PiAtCWlmICghaW50ZWxfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUp KQo+PiAtCQlpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2VsX2ZldGNoKHBsYW5lLCBjcnRjX3N0 YXRlLCBwbGFuZV9zdGF0ZSwgMCk7Cj4+IC0KPj4gLQlpZiAocGxhbmUtPmN1cnNvci5iYXNlICE9 IGJhc2UgfHwKPj4gLQkgICAgcGxhbmUtPmN1cnNvci5zaXplICE9IGZiY19jdGwgfHwKPj4gLQkg ICAgcGxhbmUtPmN1cnNvci5jbnRsICE9IGNudGwpIHsKPj4gLQkJaWYgKEhBU19DVVJfRkJDKGRl dl9wcml2KSkKPj4gLQkJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJfRkJDX0NUTChw aXBlKSwKPj4gLQkJCQkJICBmYmNfY3RsKTsKPj4gLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIENVUkNOVFIocGlwZSksIGNudGwpOwo+PiAtCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgQ1VSUE9TKHBpcGUpLCBwb3MpOwo+PiAtCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwg Q1VSQkFTRShwaXBlKSwgYmFzZSk7Cj4+IC0KPj4gLQkJcGxhbmUtPmN1cnNvci5iYXNlID0gYmFz ZTsKPj4gLQkJcGxhbmUtPmN1cnNvci5zaXplID0gZmJjX2N0bDsKPj4gLQkJcGxhbmUtPmN1cnNv ci5jbnRsID0gY250bDsKPj4gLQl9IGVsc2Ugewo+PiAtCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZf cHJpdiwgQ1VSUE9TKHBpcGUpLCBwb3MpOwo+PiAtCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgQ1VSQkFTRShwaXBlKSwgYmFzZSk7Cj4+IC0JfQo+PiAtCj4+IC0Jc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4+IC19Cj4+IC0KPj4g LXN0YXRpYyB2b2lkIGk5eHhfZGlzYWJsZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFu ZSwKPj4gLQkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPj4g LXsKPj4gLQlpOXh4X3VwZGF0ZV9jdXJzb3IocGxhbmUsIGNydGNfc3RhdGUsIE5VTEwpOwo+PiAt fQo+PiAtCj4+IC1zdGF0aWMgYm9vbCBpOXh4X2N1cnNvcl9nZXRfaHdfc3RhdGUoc3RydWN0IGlu dGVsX3BsYW5lICpwbGFuZSwKPj4gLQkJCQkgICAgIGVudW0gcGlwZSAqcGlwZSkKPj4gLXsKPj4g LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNl LmRldik7Cj4+IC0JZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47 Cj4+IC0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4+IC0JYm9vbCByZXQ7Cj4+IC0JdTMyIHZh bDsKPj4gLQo+PiAtCS8qCj4+IC0JICogTm90IDEwMCUgY29ycmVjdCBmb3IgcGxhbmVzIHRoYXQg Y2FuIG1vdmUgYmV0d2VlbiBwaXBlcywKPj4gLQkgKiBidXQgdGhhdCdzIG9ubHkgdGhlIGNhc2Ug Zm9yIGdlbjItMyB3aGljaCBkb24ndCBoYXZlIGFueQo+PiAtCSAqIGRpc3BsYXkgcG93ZXIgd2Vs bHMuCj4+IC0JICovCj4+IC0JcG93ZXJfZG9tYWluID0gUE9XRVJfRE9NQUlOX1BJUEUocGxhbmUt PnBpcGUpOwo+PiAtCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVk KGRldl9wcml2LCBwb3dlcl9kb21haW4pOwo+PiAtCWlmICghd2FrZXJlZikKPj4gLQkJcmV0dXJu IGZhbHNlOwo+PiAtCj4+IC0JdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgQ1VSQ05UUihw bGFuZS0+cGlwZSkpOwo+PiAtCj4+IC0JcmV0ID0gdmFsICYgTUNVUlNPUl9NT0RFOwo+PiAtCj4+ IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNSB8fCBJU19HNFgoZGV2X3ByaXYpKQo+PiAt CQkqcGlwZSA9IHBsYW5lLT5waXBlOwo+PiAtCWVsc2UKPj4gLQkJKnBpcGUgPSAodmFsICYgTUNV UlNPUl9QSVBFX1NFTEVDVF9NQVNLKSA+Pgo+PiAtCQkJTUNVUlNPUl9QSVBFX1NFTEVDVF9TSElG VDsKPj4gLQo+PiAtCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21h aW4sIHdha2VyZWYpOwo+PiAtCj4+IC0JcmV0dXJuIHJldDsKPj4gLX0KPj4gLQo+PiAgLyogVkVT QSA2NDB4NDgweDcySHogbW9kZSB0byBzZXQgb24gdGhlIHBpcGUgKi8KPj4gIHN0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBsb2FkX2RldGVjdF9tb2RlID0gewo+PiAgCURSTV9N T0RFKCI2NDB4NDgwIiwgRFJNX01PREVfVFlQRV9ERUZBVUxULCAzMTUwMCwgNjQwLCA2NjQsCj4+ IEBAIC0xNjYwOSw3ICsxNjAzNiw3IEBAIHN0YXRpYyB2b2lkIGFkZF9ycHNfYm9vc3RfYWZ0ZXJf dmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPj4gIAlhZGRfd2FpdF9xdWV1ZShkcm1fY3J0 Y192Ymxhbmtfd2FpdHF1ZXVlKGNydGMpLCAmd2FpdC0+d2FpdCk7Cj4+ICB9Cj4+ICAKPj4gLXN0 YXRpYyBpbnQgaW50ZWxfcGxhbmVfcGluX2ZiKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCj4+ICtpbnQgaW50ZWxfcGxhbmVfcGluX2ZiKHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCj4+ICB7Cj4+ICAJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9 IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKPj4gIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4+IEBA IC0xNjYzOSw3ICsxNjA2Niw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfcGxhbmVfcGluX2ZiKHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4+ICAJcmV0dXJuIDA7Cj4+ICB9Cj4+ ICAKPj4gLXN0YXRpYyB2b2lkIGludGVsX3BsYW5lX3VucGluX2ZiKHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqb2xkX3BsYW5lX3N0YXRlKQo+PiArdm9pZCBpbnRlbF9wbGFuZV91bnBpbl9mYihz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZSkKPj4gIHsKPj4gIAlzdHJ1 Y3QgaTkxNV92bWEgKnZtYTsKPj4gIAo+PiBAQCAtMTY4NzUsMTMgKzE2MzAyLDYgQEAgc3RhdGlj IGJvb2wgaTk2NV9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpf cGxhbmUsCj4+ICAJfQo+PiAgfQo+PiAgCj4+IC1zdGF0aWMgYm9vbCBpbnRlbF9jdXJzb3JfZm9y bWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0IGRybV9wbGFuZSAqX3BsYW5lLAo+PiAtCQkJCQkgICAg ICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIpCj4+IC17Cj4+IC0JcmV0dXJuIG1vZGlmaWVyID09 IERSTV9GT1JNQVRfTU9EX0xJTkVBUiAmJgo+PiAtCQlmb3JtYXQgPT0gRFJNX0ZPUk1BVF9BUkdC ODg4ODsKPj4gLX0KPj4gLQo+PiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mg aTk2NV9wbGFuZV9mdW5jcyA9IHsKPj4gIAkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxw ZXJfdXBkYXRlX3BsYW5lLAo+PiAgCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJf ZGlzYWJsZV9wbGFuZSwKPj4gQEAgLTE2OTAwLDE0MiArMTYzMjAsNiBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9wbGFuZV9mdW5jcyBpOHh4X3BsYW5lX2Z1bmNzID0gewo+PiAgCS5mb3JtYXRf bW9kX3N1cHBvcnRlZCA9IGk4eHhfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQsCj4+ICB9Owo+ PiAgCj4+IC1zdGF0aWMgaW50Cj4+IC1pbnRlbF9sZWdhY3lfY3Vyc29yX3VwZGF0ZShzdHJ1Y3Qg ZHJtX3BsYW5lICpfcGxhbmUsCj4+IC0JCQkgICBzdHJ1Y3QgZHJtX2NydGMgKl9jcnRjLAo+PiAt CQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4+IC0JCQkgICBpbnQgY3J0Y194LCBp bnQgY3J0Y195LAo+PiAtCQkJICAgdW5zaWduZWQgaW50IGNydGNfdywgdW5zaWduZWQgaW50IGNy dGNfaCwKPj4gLQkJCSAgIHUzMiBzcmNfeCwgdTMyIHNyY195LAo+PiAtCQkJICAgdTMyIHNyY193 LCB1MzIgc3JjX2gsCj4+IC0JCQkgICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0 eCkKPj4gLXsKPj4gLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUo X3BsYW5lKTsKPj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoX2Ny dGMpOwo+PiAtCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0YXRlID0KPj4g LQkJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPmJhc2Uuc3RhdGUpOwo+PiAtCXN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqbmV3X3BsYW5lX3N0YXRlOwo+PiAtCXN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlID0KPj4gLQkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNl LnN0YXRlKTsKPj4gLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGU7Cj4+ IC0JaW50IHJldDsKPj4gLQo+PiAtCS8qCj4+IC0JICogV2hlbiBjcnRjIGlzIGluYWN0aXZlIG9y IHRoZXJlIGlzIGEgbW9kZXNldCBwZW5kaW5nLAo+PiAtCSAqIHdhaXQgZm9yIGl0IHRvIGNvbXBs ZXRlIGluIHRoZSBzbG93cGF0aAo+PiAtCSAqCj4+IC0JICogRklYTUUgYmlnam9pbmVyIGZhc3Rw YXRoIHdvdWxkIGJlIGdvb2QKPj4gLQkgKi8KPj4gLQlpZiAoIWNydGNfc3RhdGUtPmh3LmFjdGl2 ZSB8fCBpbnRlbF9jcnRjX25lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkgfHwKPj4gLQkgICAgY3J0 Y19zdGF0ZS0+dXBkYXRlX3BpcGUgfHwgY3J0Y19zdGF0ZS0+Ymlnam9pbmVyKQo+PiAtCQlnb3Rv IHNsb3c7Cj4+IC0KPj4gLQkvKgo+PiAtCSAqIERvbid0IGRvIGFuIGFzeW5jIHVwZGF0ZSBpZiB0 aGVyZSBpcyBhbiBvdXRzdGFuZGluZyBjb21taXQgbW9kaWZ5aW5nCj4+IC0JICogdGhlIHBsYW5l LiAgVGhpcyBwcmV2ZW50cyBvdXIgYXN5bmMgdXBkYXRlJ3MgY2hhbmdlcyBmcm9tIGdldHRpbmcK Pj4gLQkgKiBvdmVycmlkZGVuIGJ5IGEgcHJldmlvdXMgc3luY2hyb25vdXMgdXBkYXRlJ3Mgc3Rh dGUuCj4+IC0JICovCj4+IC0JaWYgKG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jb21taXQgJiYKPj4g LQkgICAgIXRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKCZvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY29t bWl0LT5od19kb25lKSkKPj4gLQkJZ290byBzbG93Owo+PiAtCj4+IC0JLyoKPj4gLQkgKiBJZiBh bnkgcGFyYW1ldGVycyBjaGFuZ2UgdGhhdCBtYXkgYWZmZWN0IHdhdGVybWFya3MsCj4+IC0JICog dGFrZSB0aGUgc2xvd3BhdGguIE9ubHkgY2hhbmdpbmcgZmIgb3IgcG9zaXRpb24gc2hvdWxkIGJl Cj4+IC0JICogaW4gdGhlIGZhc3RwYXRoLgo+PiAtCSAqLwo+PiAtCWlmIChvbGRfcGxhbmVfc3Rh dGUtPnVhcGkuY3J0YyAhPSAmY3J0Yy0+YmFzZSB8fAo+PiAtCSAgICBvbGRfcGxhbmVfc3RhdGUt PnVhcGkuc3JjX3cgIT0gc3JjX3cgfHwKPj4gLQkgICAgb2xkX3BsYW5lX3N0YXRlLT51YXBpLnNy Y19oICE9IHNyY19oIHx8Cj4+IC0JICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjX3cgIT0g Y3J0Y193IHx8Cj4+IC0JICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjX2ggIT0gY3J0Y19o IHx8Cj4+IC0JICAgICFvbGRfcGxhbmVfc3RhdGUtPnVhcGkuZmIgIT0gIWZiKQo+PiAtCQlnb3Rv IHNsb3c7Cj4+IC0KPj4gLQluZXdfcGxhbmVfc3RhdGUgPSB0b19pbnRlbF9wbGFuZV9zdGF0ZShp bnRlbF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUoJnBsYW5lLT5iYXNlKSk7Cj4+IC0JaWYgKCFuZXdf cGxhbmVfc3RhdGUpCj4+IC0JCXJldHVybiAtRU5PTUVNOwo+PiAtCj4+IC0JbmV3X2NydGNfc3Rh dGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGludGVsX2NydGNfZHVwbGljYXRlX3N0YXRlKCZjcnRj LT5iYXNlKSk7Cj4+IC0JaWYgKCFuZXdfY3J0Y19zdGF0ZSkgewo+PiAtCQlyZXQgPSAtRU5PTUVN Owo+PiAtCQlnb3RvIG91dF9mcmVlOwo+PiAtCX0KPj4gLQo+PiAtCWRybV9hdG9taWNfc2V0X2Zi X2Zvcl9wbGFuZSgmbmV3X3BsYW5lX3N0YXRlLT51YXBpLCBmYik7Cj4+IC0KPj4gLQluZXdfcGxh bmVfc3RhdGUtPnVhcGkuc3JjX3ggPSBzcmNfeDsKPj4gLQluZXdfcGxhbmVfc3RhdGUtPnVhcGku c3JjX3kgPSBzcmNfeTsKPj4gLQluZXdfcGxhbmVfc3RhdGUtPnVhcGkuc3JjX3cgPSBzcmNfdzsK Pj4gLQluZXdfcGxhbmVfc3RhdGUtPnVhcGkuc3JjX2ggPSBzcmNfaDsKPj4gLQluZXdfcGxhbmVf c3RhdGUtPnVhcGkuY3J0Y194ID0gY3J0Y194Owo+PiAtCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5j cnRjX3kgPSBjcnRjX3k7Cj4+IC0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLmNydGNfdyA9IGNydGNf dzsKPj4gLQluZXdfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y19oID0gY3J0Y19oOwo+PiAtCj4+IC0J aW50ZWxfcGxhbmVfY29weV91YXBpX3RvX2h3X3N0YXRlKG5ld19wbGFuZV9zdGF0ZSwgbmV3X3Bs YW5lX3N0YXRlLCBjcnRjKTsKPj4gLQo+PiAtCXJldCA9IGludGVsX3BsYW5lX2F0b21pY19jaGVj a193aXRoX3N0YXRlKGNydGNfc3RhdGUsIG5ld19jcnRjX3N0YXRlLAo+PiAtCQkJCQkJICBvbGRf cGxhbmVfc3RhdGUsIG5ld19wbGFuZV9zdGF0ZSk7Cj4+IC0JaWYgKHJldCkKPj4gLQkJZ290byBv dXRfZnJlZTsKPj4gLQo+PiAtCXJldCA9IGludGVsX3BsYW5lX3Bpbl9mYihuZXdfcGxhbmVfc3Rh dGUpOwo+PiAtCWlmIChyZXQpCj4+IC0JCWdvdG8gb3V0X2ZyZWU7Cj4+IC0KPj4gLQlpbnRlbF9m cm9udGJ1ZmZlcl9mbHVzaCh0b19pbnRlbF9mcm9udGJ1ZmZlcihuZXdfcGxhbmVfc3RhdGUtPmh3 LmZiKSwKPj4gLQkJCQlPUklHSU5fRkxJUCk7Cj4+IC0JaW50ZWxfZnJvbnRidWZmZXJfdHJhY2so dG9faW50ZWxfZnJvbnRidWZmZXIob2xkX3BsYW5lX3N0YXRlLT5ody5mYiksCj4+IC0JCQkJdG9f aW50ZWxfZnJvbnRidWZmZXIobmV3X3BsYW5lX3N0YXRlLT5ody5mYiksCj4+IC0JCQkJcGxhbmUt PmZyb250YnVmZmVyX2JpdCk7Cj4+IC0KPj4gLQkvKiBTd2FwIHBsYW5lIHN0YXRlICovCj4+IC0J cGxhbmUtPmJhc2Uuc3RhdGUgPSAmbmV3X3BsYW5lX3N0YXRlLT51YXBpOwo+PiAtCj4+IC0JLyoK Pj4gLQkgKiBXZSBjYW5ub3Qgc3dhcCBjcnRjX3N0YXRlIGFzIGl0IG1heSBiZSBpbiB1c2UgYnkg YW4gYXRvbWljIGNvbW1pdCBvcgo+PiAtCSAqIHBhZ2UgZmxpcCB0aGF0J3MgcnVubmluZyBzaW11 bHRhbmVvdXNseS4gSWYgd2Ugc3dhcCBjcnRjX3N0YXRlIGFuZAo+PiAtCSAqIGRlc3Ryb3kgdGhl IG9sZCBzdGF0ZSwgd2Ugd2lsbCBjYXVzZSBhIHVzZS1hZnRlci1mcmVlIHRoZXJlLgo+PiAtCSAq Cj4+IC0JICogT25seSB1cGRhdGUgYWN0aXZlX3BsYW5lcywgd2hpY2ggaXMgbmVlZGVkIGZvciBv dXIgaW50ZXJuYWwKPj4gLQkgKiBib29ra2VlcGluZy4gRWl0aGVyIHZhbHVlIHdpbGwgZG8gdGhl IHJpZ2h0IHRoaW5nIHdoZW4gdXBkYXRpbmcKPj4gLQkgKiBwbGFuZXMgYXRvbWljYWxseS4gSWYg dGhlIGN1cnNvciB3YXMgcGFydCBvZiB0aGUgYXRvbWljIHVwZGF0ZSB0aGVuCj4+IC0JICogd2Ug d291bGQgaGF2ZSB0YWtlbiB0aGUgc2xvd3BhdGguCj4+IC0JICovCj4+IC0JY3J0Y19zdGF0ZS0+ YWN0aXZlX3BsYW5lcyA9IG5ld19jcnRjX3N0YXRlLT5hY3RpdmVfcGxhbmVzOwo+PiAtCj4+IC0J aWYgKG5ld19wbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQo+PiAtCQlpbnRlbF91cGRhdGVfcGxh bmUocGxhbmUsIGNydGNfc3RhdGUsIG5ld19wbGFuZV9zdGF0ZSk7Cj4+IC0JZWxzZQo+PiAtCQlp bnRlbF9kaXNhYmxlX3BsYW5lKHBsYW5lLCBjcnRjX3N0YXRlKTsKPj4gLQo+PiAtCWludGVsX3Bs YW5lX3VucGluX2ZiKG9sZF9wbGFuZV9zdGF0ZSk7Cj4+IC0KPj4gLW91dF9mcmVlOgo+PiAtCWlm IChuZXdfY3J0Y19zdGF0ZSkKPj4gLQkJaW50ZWxfY3J0Y19kZXN0cm95X3N0YXRlKCZjcnRjLT5i YXNlLCAmbmV3X2NydGNfc3RhdGUtPnVhcGkpOwo+PiAtCWlmIChyZXQpCj4+IC0JCWludGVsX3Bs YW5lX2Rlc3Ryb3lfc3RhdGUoJnBsYW5lLT5iYXNlLCAmbmV3X3BsYW5lX3N0YXRlLT51YXBpKTsK Pj4gLQllbHNlCj4+IC0JCWludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoJnBsYW5lLT5iYXNlLCAm b2xkX3BsYW5lX3N0YXRlLT51YXBpKTsKPj4gLQlyZXR1cm4gcmV0Owo+PiAtCj4+IC1zbG93Ogo+ PiAtCXJldHVybiBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUoJnBsYW5lLT5iYXNlLCAm Y3J0Yy0+YmFzZSwgZmIsCj4+IC0JCQkJCSAgICAgIGNydGNfeCwgY3J0Y195LCBjcnRjX3csIGNy dGNfaCwKPj4gLQkJCQkJICAgICAgc3JjX3gsIHNyY195LCBzcmNfdywgc3JjX2gsIGN0eCk7Cj4+ IC19Cj4+IC0KPj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGludGVsX2N1 cnNvcl9wbGFuZV9mdW5jcyA9IHsKPj4gLQkudXBkYXRlX3BsYW5lID0gaW50ZWxfbGVnYWN5X2N1 cnNvcl91cGRhdGUsCj4+IC0JLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNh YmxlX3BsYW5lLAo+PiAtCS5kZXN0cm95ID0gaW50ZWxfcGxhbmVfZGVzdHJveSwKPj4gLQkuYXRv bWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKPj4gLQku YXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlLAo+PiAtCS5m b3JtYXRfbW9kX3N1cHBvcnRlZCA9IGludGVsX2N1cnNvcl9mb3JtYXRfbW9kX3N1cHBvcnRlZCwK Pj4gLX07Cj4+IC0KPj4gIHN0YXRpYyBib29sIGk5eHhfcGxhbmVfaGFzX2ZiYyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ICAJCQkgICAgICAgZW51bSBpOXh4X3BsYW5lX2lk IGk5eHhfcGxhbmUpCj4+ICB7Cj4+IEBAIC0xNzE4Nyw3NCArMTY0NzEsNiBAQCBpbnRlbF9wcmlt YXJ5X3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0g cGlwZSBwaXBlKQo+PiAgCXJldHVybiBFUlJfUFRSKHJldCk7Cj4+ICB9Cj4+ICAKPj4gLXN0YXRp YyBzdHJ1Y3QgaW50ZWxfcGxhbmUgKgo+PiAtaW50ZWxfY3Vyc29yX3BsYW5lX2NyZWF0ZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+IC0JCQkgIGVudW0gcGlwZSBwaXBlKQo+ PiAtewo+PiAtCXN0cnVjdCBpbnRlbF9wbGFuZSAqY3Vyc29yOwo+PiAtCWludCByZXQsIHpwb3M7 Cj4+IC0KPj4gLQljdXJzb3IgPSBpbnRlbF9wbGFuZV9hbGxvYygpOwo+PiAtCWlmIChJU19FUlIo Y3Vyc29yKSkKPj4gLQkJcmV0dXJuIGN1cnNvcjsKPj4gLQo+PiAtCWN1cnNvci0+cGlwZSA9IHBp cGU7Cj4+IC0JY3Vyc29yLT5pOXh4X3BsYW5lID0gKGVudW0gaTl4eF9wbGFuZV9pZCkgcGlwZTsK Pj4gLQljdXJzb3ItPmlkID0gUExBTkVfQ1VSU09SOwo+PiAtCWN1cnNvci0+ZnJvbnRidWZmZXJf Yml0ID0gSU5URUxfRlJPTlRCVUZGRVIocGlwZSwgY3Vyc29yLT5pZCk7Cj4+IC0KPj4gLQlpZiAo SVNfSTg0NUcoZGV2X3ByaXYpIHx8IElTX0k4NjVHKGRldl9wcml2KSkgewo+PiAtCQljdXJzb3It Pm1heF9zdHJpZGUgPSBpODQ1X2N1cnNvcl9tYXhfc3RyaWRlOwo+PiAtCQljdXJzb3ItPnVwZGF0 ZV9wbGFuZSA9IGk4NDVfdXBkYXRlX2N1cnNvcjsKPj4gLQkJY3Vyc29yLT5kaXNhYmxlX3BsYW5l ID0gaTg0NV9kaXNhYmxlX2N1cnNvcjsKPj4gLQkJY3Vyc29yLT5nZXRfaHdfc3RhdGUgPSBpODQ1 X2N1cnNvcl9nZXRfaHdfc3RhdGU7Cj4+IC0JCWN1cnNvci0+Y2hlY2tfcGxhbmUgPSBpODQ1X2No ZWNrX2N1cnNvcjsKPj4gLQl9IGVsc2Ugewo+PiAtCQljdXJzb3ItPm1heF9zdHJpZGUgPSBpOXh4 X2N1cnNvcl9tYXhfc3RyaWRlOwo+PiAtCQljdXJzb3ItPnVwZGF0ZV9wbGFuZSA9IGk5eHhfdXBk YXRlX2N1cnNvcjsKPj4gLQkJY3Vyc29yLT5kaXNhYmxlX3BsYW5lID0gaTl4eF9kaXNhYmxlX2N1 cnNvcjsKPj4gLQkJY3Vyc29yLT5nZXRfaHdfc3RhdGUgPSBpOXh4X2N1cnNvcl9nZXRfaHdfc3Rh dGU7Cj4+IC0JCWN1cnNvci0+Y2hlY2tfcGxhbmUgPSBpOXh4X2NoZWNrX2N1cnNvcjsKPj4gLQl9 Cj4+IC0KPj4gLQljdXJzb3ItPmN1cnNvci5iYXNlID0gfjA7Cj4+IC0JY3Vyc29yLT5jdXJzb3Iu Y250bCA9IH4wOwo+PiAtCj4+IC0JaWYgKElTX0k4NDVHKGRldl9wcml2KSB8fCBJU19JODY1Ryhk ZXZfcHJpdikgfHwgSEFTX0NVUl9GQkMoZGV2X3ByaXYpKQo+PiAtCQljdXJzb3ItPmN1cnNvci5z aXplID0gfjA7Cj4+IC0KPj4gLQlyZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoJmRldl9w cml2LT5kcm0sICZjdXJzb3ItPmJhc2UsCj4+IC0JCQkJICAgICAgIDAsICZpbnRlbF9jdXJzb3Jf cGxhbmVfZnVuY3MsCj4+IC0JCQkJICAgICAgIGludGVsX2N1cnNvcl9mb3JtYXRzLAo+PiAtCQkJ CSAgICAgICBBUlJBWV9TSVpFKGludGVsX2N1cnNvcl9mb3JtYXRzKSwKPj4gLQkJCQkgICAgICAg Y3Vyc29yX2Zvcm1hdF9tb2RpZmllcnMsCj4+IC0JCQkJICAgICAgIERSTV9QTEFORV9UWVBFX0NV UlNPUiwKPj4gLQkJCQkgICAgICAgImN1cnNvciAlYyIsIHBpcGVfbmFtZShwaXBlKSk7Cj4+IC0J aWYgKHJldCkKPj4gLQkJZ290byBmYWlsOwo+PiAtCj4+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gNCkKPj4gLQkJZHJtX3BsYW5lX2NyZWF0ZV9yb3RhdGlvbl9wcm9wZXJ0eSgmY3Vyc29y LT5iYXNlLAo+PiAtCQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAsCj4+IC0JCQkJCQkgICBEUk1f TU9ERV9ST1RBVEVfMCB8Cj4+IC0JCQkJCQkgICBEUk1fTU9ERV9ST1RBVEVfMTgwKTsKPj4gLQo+ PiAtCXpwb3MgPSBSVU5USU1FX0lORk8oZGV2X3ByaXYpLT5udW1fc3ByaXRlc1twaXBlXSArIDE7 Cj4+IC0JZHJtX3BsYW5lX2NyZWF0ZV96cG9zX2ltbXV0YWJsZV9wcm9wZXJ0eSgmY3Vyc29yLT5i YXNlLCB6cG9zKTsKPj4gLQo+PiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEyKQo+PiAt CQlkcm1fcGxhbmVfZW5hYmxlX2ZiX2RhbWFnZV9jbGlwcygmY3Vyc29yLT5iYXNlKTsKPj4gLQo+ PiAtCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZjdXJzb3ItPmJhc2UsICZpbnRlbF9wbGFuZV9oZWxw ZXJfZnVuY3MpOwo+PiAtCj4+IC0JcmV0dXJuIGN1cnNvcjsKPj4gLQo+PiAtZmFpbDoKPj4gLQlp bnRlbF9wbGFuZV9mcmVlKGN1cnNvcik7Cj4+IC0KPj4gLQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ PiAtfQo+PiAtCj4+ICBzdGF0aWMgaW50IGludGVsX2NydGNfbGF0ZV9yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCj4+ICB7Cj4+ICAJaW50ZWxfY3J0Y19kZWJ1Z2ZzX2FkZChjcnRjKTsK Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxh eS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgKPj4gaW5k ZXggYTU3NzFiZmVjYmE2Li5mMGE1YmY2OTY1NmYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCj4+IEBAIC02NDcsNiArNjQ3LDE4IEBAIGJv b2wKPj4gIGludGVsX2Zvcm1hdF9pbmZvX2lzX3l1dl9zZW1pcGxhbmFyKGNvbnN0IHN0cnVjdCBk cm1fZm9ybWF0X2luZm8gKmluZm8sCj4+ICAJCQkJICAgIHVpbnQ2NF90IG1vZGlmaWVyKTsKPj4g IAo+PiAraW50IGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpOwo+PiArdTMyIGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZz ZXQoaW50ICp4LCBpbnQgKnksCj4+ICsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqc3RhdGUsCj4+ICsJCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSk7Cj4+ICtpbnQg aW50ZWxfcGxhbmVfcGluX2ZiKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp Owo+PiArdm9pZCBpbnRlbF9wbGFuZV91bnBpbl9mYihzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg Km9sZF9wbGFuZV9zdGF0ZSk7Cj4+ICsKPj4gKy8qIGN1cnNvciAqLwo+PiArc3RydWN0IGludGVs X3BsYW5lICoKPj4gK2ludGVsX2N1cnNvcl9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+PiArCQkJICBlbnVtIHBpcGUgcGlwZSk7Cj4+ICsKPj4gIC8qIG1v ZGVzZXR0aW5nICovCj4+ICB2b2lkIGludGVsX21vZGVzZXRfaW5pdF9odyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSk7Cj4+ICBpbnQgaW50ZWxfbW9kZXNldF9pbml0X25vaXJxKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPj4gLS0gCj4+IDIuMjcuMAo+PiAKPj4gX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4gSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdAo+PiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+IGh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAKSmFu aSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNlIEdyYXBoaWNzIENlbnRlcgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK