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 B745CC47080 for ; Tue, 1 Jun 2021 16:58:42 +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 608AC610C9 for ; Tue, 1 Jun 2021 16:58:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 608AC610C9 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=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 D3D756EABB; Tue, 1 Jun 2021 16:58:41 +0000 (UTC) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8BC346EABB for ; Tue, 1 Jun 2021 16:58:40 +0000 (UTC) IronPort-SDR: Ku+eK6lYrjssZprCDGAn2waKKBHwOW15qqvv6PUsSkaHMMFM1z/xmi82PFTHVmpUvC1QM5x0Uh Jdhfb7Bi7mpw== X-IronPort-AV: E=McAfee;i="6200,9189,10002"; a="203583717" X-IronPort-AV: E=Sophos;i="5.83,240,1616482800"; d="scan'208";a="203583717" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jun 2021 09:58:37 -0700 IronPort-SDR: O0cAvopafF1k3Op2MokAJ98XJMJlNTCXlgSw13jpEnr4JeONzcUmR9Pan7wxoCLmcVMHvCfhnz BBIwuZhscEGg== X-IronPort-AV: E=Sophos;i="5.83,240,1616482800"; d="scan'208";a="549791037" Received: from mdroper-desk1.fm.intel.com (HELO mdroper-desk1.amr.corp.intel.com) ([10.1.27.134]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jun 2021 09:58:36 -0700 Date: Tue, 1 Jun 2021 09:58:34 -0700 From: Matt Roper To: Lucas De Marchi Message-ID: <20210601165834.GA6936@mdroper-desk1.amr.corp.intel.com> References: <20210527181700.1676790-1-lucas.demarchi@intel.com> <20210527181700.1676790-2-lucas.demarchi@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20210527181700.1676790-2-lucas.demarchi@intel.com> Subject: Re: [Intel-gfx] [PATCH 1/7] drm/i915/gt: replace IS_GEN and friends with IS_GRAPHICS_VER 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" T24gVGh1LCBNYXkgMjcsIDIwMjEgYXQgMTE6MTY6NTRBTSAtMDcwMCwgTHVjYXMgRGUgTWFyY2hp IHdyb3RlOgo+IFRoaXMgd2FzIGRvbmUgYnkgdGhlIGZvbGxvd2luZyBzZW1hbnRpYyBwYXRjaDoK CklzIHRoZSBjb21taXQgbWVzc2FnZSBoZXJlIG91dC1vZi1kYXRlPyAgVGhlIGNvY2NpIGRvZXNu J3QgYXBwZWFyIHRvCm1hdGNoIHRoZSBkaWZmIGFueW1vcmUuICBJU19HUkFQSElDU19WRVIoKSBp cyB0aGUgcmFuZ2UgbWFjcm8gbm93IGFuZApJU19HRU4gaXMgYmVpbmcgcmVwbGFjZWQgd2l0aCBh IGRpcmVjdCAiPT0iIGNvbXBhcmlzb24uCgoKTWF0dAoKPiAKPiAJQEAgZXhwcmVzc2lvbiBkZXZf cHJpdiwgRTsgQEAKPiAJLSBJTlRFTF9HRU4oZGV2X3ByaXYpID09IEUKPiAJKyBJU19HUkFQSElD U19WRVIoZGV2X3ByaXYsIEUpCj4gCj4gCUBAIGV4cHJlc3Npb24gZGV2X3ByaXY7IEBACj4gCS0g SU5URUxfR0VOKGRldl9wcml2KQo+IAkrIEdSQVBISUNTX1ZFUihkZXZfcHJpdikKPiAKPiAJQEAg ZXhwcmVzc2lvbiBkZXZfcHJpdjsgZXhwcmVzc2lvbiBFOyBAQAo+IAktIElTX0dFTihkZXZfcHJp diwgRSkKPiAJKyBJU19HUkFQSElDU19WRVIoZGV2X3ByaXYsIEUpCj4gCj4gCUBACj4gCWV4cHJl c3Npb24gZGV2X3ByaXY7Cj4gCWV4cHJlc3Npb24gZnJvbSwgdW50aWw7Cj4gCUBACj4gCS0gSVNf R0VOX1JBTkdFKGRldl9wcml2LCBmcm9tLCB1bnRpbCkKPiAJKyBJU19HUkFQSElDU19SQU5HRShk ZXZfcHJpdiwgZnJvbSwgdW50aWwpCj4gCj4gCUBkZWZACj4gCWV4cHJlc3Npb24gRTsKPiAJaWRl bnRpZmllciBpZCA9fiAiXmdlbiQiOwo+IAlAQAo+IAktIGlkID0gR1JBUEhJQ1NfVkVSKEUpCj4g CSsgdmVyID0gR1JBUEhJQ1NfVkVSKEUpCj4gCj4gCUBACj4gCWlkZW50aWZpZXIgZGVmLmlkOwo+ IAlAQAo+IAktIGlkCj4gCSsgdmVyCj4gCj4gSXQgYWxzbyB0YWtlcyBjYXJlIG9mIHJlbmFtaW5n IHRoZSB2YXJpYWJsZSB3ZSBhc3NpZ24gdG8gR1JBUEhJQ1NfVkVSKCkKPiBzbyB0byB1c2UgInZl ciIgcmF0aGVyIHRoYW4gImdlbiIuCj4gCj4gU2lnbmVkLW9mZi1ieTogTHVjYXMgRGUgTWFyY2hp IDxsdWNhcy5kZW1hcmNoaUBpbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2RlYnVnZnNfZ3RfcG0uYyAgICAgICB8IDM4ICsrKysrLS0tLS0tCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2dlbjJfZW5naW5lX2NzLmMgICAgICB8ICAyICstCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2dlbjhfZW5naW5lX2NzLmMgICAgICB8ICAyICstCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2dlbjhfcHBndHQuYyAgICAgICAgICB8ICAyICstCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHRfc3NldS5jICB8ICAyICstCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jICAgICB8IDU0ICsrKysrKystLS0tLS0tLQo+ ICAuLi4vZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYyAgfCAxOCArKy0t LQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9nZ3R0LmMgICAgICAgICAgfCAxOCAr Ky0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9nZ3R0X2ZlbmNpbmcuYyAgfCAz NCArKysrKy0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMgICAgICAg ICAgICB8IDI3ICsrKystLS0tCj4gIC4uLi9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfY2xvY2tf dXRpbHMuYyAgICB8IDEyICsrLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3Rf aXJxLmMgICAgICAgIHwgIDYgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3Rf cG1faXJxLmMgICAgIHwgMTAgKy0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0 dC5jICAgICAgICAgICB8IDE0ICsrLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf bGxjLmMgICAgICAgICAgIHwgIDYgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf bHJjLmMgICAgICAgICAgIHwgNDYgKysrKysrLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9tb2NzLmMgICAgICAgICAgfCAgOCArLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfcHBndHQuYyAgICAgICAgIHwgIDYgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfcmM2LmMgICAgICAgICAgIHwgMTYgKystLS0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfcmVuZGVyc3RhdGUuYyAgIHwgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfcmVzZXQuYyAgICAgICAgIHwgMTIgKystLQo+ICAuLi4vZ3B1L2RybS9p OTE1L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lvbi5jICAgfCA2NCArKysrKysrKystLS0tLS0tLS0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmMgICAgICAgICAgIHwgNjAgKysr KysrKystLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfc3NldS5jICAg ICAgICAgIHwgMTQgKystLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF93b3JrYXJv dW5kcy5jICAgfCA2NiArKysrKysrKystLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L3NlbGZ0ZXN0X2VuZ2luZV9jcy5jICB8ICA2ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L3NlbGZ0ZXN0X2VuZ2luZV9wbS5jICB8ICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jICB8ICA0ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L3NlbGZ0ZXN0X2d0X3BtLmMgICAgICB8ICA4ICstLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9zZWxmdGVzdF9oYW5nY2hlY2suYyAgfCAgOCArLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Qvc2VsZnRlc3RfbGxjLmMgICAgICAgIHwgIDQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Qvc2VsZnRlc3RfbHJjLmMgICAgICAgIHwgIDggKy0tCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L3NlbGZ0ZXN0X21vY3MuYyAgICAgICB8ICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L3NlbGZ0ZXN0X3JjNi5jICAgICAgICB8ICA0ICstCj4gIC4uLi9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9yaW5nX3N1Ym1pc3Npb24uYyAgICB8ICA2ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L3NlbGZ0ZXN0X3Jwcy5jICAgICAgICB8IDE2ICsrLS0tCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L3NlbGZ0ZXN0X3RpbWVsaW5lLmMgICB8ICA2ICstCj4gIC4uLi9ncHUvZHJtL2k5 MTUvZ3Qvc2VsZnRlc3Rfd29ya2Fyb3VuZHMuYyAgICB8ICA4ICstLQo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMuYyAgICAgICAgfCAgNCArLQo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfYWRzLmMgICAgfCAgMiArLQo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfZncuYyAgICAgfCAgMiArLQo+ICAuLi4vZ3B1L2RybS9p OTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMgfCAxMCArLS0KPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvdWMvaW50ZWxfaHVjLmMgICAgICAgIHwgIDIgKy0KPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvdWMvaW50ZWxfdWMuYyAgICAgICAgIHwgIDQgKy0KPiAgNDQgZmlsZXMgY2hh bmdlZCwgMzIzIGluc2VydGlvbnMoKyksIDMyMiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZGVidWdmc19ndF9wbS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvZGVidWdmc19ndF9wbS5jCj4gaW5kZXggZDRmNDQ1MmNlNWVkLi4wMzg5YmNl ZWJkMDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZGVidWdmc19ndF9w bS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZGVidWdmc19ndF9wbS5jCj4gQEAg LTg1LDE0ICs4NSwxNCBAQCBzdGF0aWMgaW50IGdlbjZfZHJwYyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0p Cj4gIAlndF9jb3JlX3N0YXR1cyA9IGludGVsX3VuY29yZV9yZWFkX2Z3KHVuY29yZSwgR0VONl9H VF9DT1JFX1NUQVRVUyk7Cj4gIAo+ICAJcmNjdGwxID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3Jl LCBHRU42X1JDX0NPTlRST0wpOwo+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KSB7Cj4gKwlp ZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDkpIHsKPiAgCQlnZW45X3Bvd2VyZ2F0ZV9lbmFibGUg PQo+ICAJCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjlfUEdfRU5BQkxFKTsKPiAgCQln ZW45X3Bvd2VyZ2F0ZV9zdGF0dXMgPQo+ICAJCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdF TjlfUFdSR1RfRE9NQUlOX1NUQVRVUyk7Cj4gIAl9Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihpOTE1 KSA8PSA3KQo+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8PSA3KQo+ICAJCXNhbmR5YnJpZGdl X3Bjb2RlX3JlYWQoaTkxNSwgR0VONl9QQ09ERV9SRUFEX1JDNlZJRFMsCj4gIAkJCQkgICAgICAg JnJjNnZpZHMsIE5VTEwpOwo+ICAKPiBAQCAtMTAwLDcgKzEwMCw3IEBAIHN0YXRpYyBpbnQgZ2Vu Nl9kcnBjKHN0cnVjdCBzZXFfZmlsZSAqbSkKPiAgCQkgICB5ZXNubyhyY2N0bDEgJiBHRU42X1JD X0NUTF9SQzFlX0VOQUJMRSkpOwo+ICAJc2VxX3ByaW50ZihtLCAiUkM2IEVuYWJsZWQ6ICVzXG4i LAo+ICAJCSAgIHllc25vKHJjY3RsMSAmIEdFTjZfUkNfQ1RMX1JDNl9FTkFCTEUpKTsKPiAtCWlm IChJTlRFTF9HRU4oaTkxNSkgPj0gOSkgewo+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5 KSB7Cj4gIAkJc2VxX3ByaW50ZihtLCAiUmVuZGVyIFdlbGwgR2F0aW5nIEVuYWJsZWQ6ICVzXG4i LAo+ICAJCQkgICB5ZXNubyhnZW45X3Bvd2VyZ2F0ZV9lbmFibGUgJiBHRU45X1JFTkRFUl9QR19F TkFCTEUpKTsKPiAgCQlzZXFfcHJpbnRmKG0sICJNZWRpYSBXZWxsIEdhdGluZyBFbmFibGVkOiAl c1xuIiwKPiBAQCAtMTM0LDcgKzEzNCw3IEBAIHN0YXRpYyBpbnQgZ2VuNl9kcnBjKHN0cnVjdCBz ZXFfZmlsZSAqbSkKPiAgCj4gIAlzZXFfcHJpbnRmKG0sICJDb3JlIFBvd2VyIERvd246ICVzXG4i LAo+ICAJCSAgIHllc25vKGd0X2NvcmVfc3RhdHVzICYgR0VONl9DT1JFX0NQRF9TVEFURV9NQVNL KSk7Cj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpIHsKPiArCWlmIChHUkFQSElDU19WRVIo aTkxNSkgPj0gOSkgewo+ICAJCXNlcV9wcmludGYobSwgIlJlbmRlciBQb3dlciBXZWxsOiAlc1xu IiwKPiAgCQkJICAgKGdlbjlfcG93ZXJnYXRlX3N0YXR1cyAmCj4gIAkJCSAgICBHRU45X1BXUkdU X1JFTkRFUl9TVEFUVVNfTUFTSykgPyAiVXAiIDogIkRvd24iKTsKPiBAQCAtMTUwLDcgKzE1MCw3 IEBAIHN0YXRpYyBpbnQgZ2VuNl9kcnBjKHN0cnVjdCBzZXFfZmlsZSAqbSkKPiAgCXByaW50X3Jj Nl9yZXMobSwgIlJDNisgcmVzaWRlbmN5IHNpbmNlIGJvb3Q6IiwgR0VONl9HVF9HRlhfUkM2cCk7 Cj4gIAlwcmludF9yYzZfcmVzKG0sICJSQzYrKyByZXNpZGVuY3kgc2luY2UgYm9vdDoiLCBHRU42 X0dUX0dGWF9SQzZwcCk7Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA8PSA3KSB7Cj4gKwlp ZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDw9IDcpIHsKPiAgCQlzZXFfcHJpbnRmKG0sICJSQzYgICB2 b2x0YWdlOiAlZG1WXG4iLAo+ICAJCQkgICBHRU42X0RFQ09ERV9SQzZfVklEKCgocmM2dmlkcyA+ PiAwKSAmIDB4ZmYpKSk7Cj4gIAkJc2VxX3ByaW50ZihtLCAiUkM2KyAgdm9sdGFnZTogJWRtVlxu IiwKPiBAQCAtMjUwLDcgKzI1MCw3IEBAIHN0YXRpYyBpbnQgZnJlcXVlbmN5X3Nob3coc3RydWN0 IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIAo+ICAJd2FrZXJlZiA9IGludGVsX3J1bnRp bWVfcG1fZ2V0KHVuY29yZS0+cnBtKTsKPiAgCj4gLQlpZiAoSVNfR0VOKGk5MTUsIDUpKSB7Cj4g KwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDUpIHsKPiAgCQl1MTYgcmd2c3djdGwgPSBpbnRl bF91bmNvcmVfcmVhZDE2KHVuY29yZSwgTUVNU1dDVEwpOwo+ICAJCXUxNiByZ3ZzdGF0ID0gaW50 ZWxfdW5jb3JlX3JlYWQxNih1bmNvcmUsIE1FTVNUQVRfSUxLKTsKPiAgCj4gQEAgLTI5Niw3ICsy OTYsNyBAQCBzdGF0aWMgaW50IGZyZXF1ZW5jeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9p ZCAqdW51c2VkKQo+ICAKPiAgCQlzZXFfcHJpbnRmKG0sICJlZmZpY2llbnQgKFJQZSkgZnJlcXVl bmN5OiAlZCBNSHpcbiIsCj4gIAkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5lZmZpY2ll bnRfZnJlcSkpOwo+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikgewo+ICsJfSBl bHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNikgewo+ICAJCXUzMiBycF9zdGF0ZV9saW1p dHM7Cj4gIAkJdTMyIGd0X3BlcmZfc3RhdHVzOwo+ICAJCXUzMiBycF9zdGF0ZV9jYXA7Cj4gQEAg LTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgaW50IGZyZXF1ZW5jeV9zaG93KHN0cnVjdCBzZXFfZmls ZSAqbSwgdm9pZCAqdW51c2VkKQo+ICAJCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KHVuY29y ZSwgRk9SQ0VXQUtFX0FMTCk7Cj4gIAo+ICAJCXJlcWYgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNv cmUsIEdFTjZfUlBOU1dSRVEpOwo+IC0JCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkgewo+ICsJ CWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkgewo+ICAJCQlyZXFmID4+PSAyMzsKPiAgCQl9 IGVsc2Ugewo+ICAJCQlyZXFmICY9IH5HRU42X1RVUkJPX0RJU0FCTEU7Cj4gQEAgLTM1NCw3ICsz NTQsNyBAQCBzdGF0aWMgaW50IGZyZXF1ZW5jeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9p ZCAqdW51c2VkKQo+ICAKPiAgCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCh1bmNvcmUsIEZP UkNFV0FLRV9BTEwpOwo+ICAKPiAtCQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDExKSB7Cj4gKwkJ aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMSkgewo+ICAJCQlwbV9pZXIgPSBpbnRlbF91bmNv cmVfcmVhZCh1bmNvcmUsIEdFTjExX0dQTV9XR0JPWFBFUkZfSU5UUl9FTkFCTEUpOwo+ICAJCQlw bV9pbXIgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjExX0dQTV9XR0JPWFBFUkZfSU5U Ul9NQVNLKTsKPiAgCQkJLyoKPiBAQCAtMzYzLDcgKzM2Myw3IEBAIHN0YXRpYyBpbnQgZnJlcXVl bmN5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIAkJCSAqLwo+ICAJ CQlwbV9pc3IgPSAwOwo+ICAJCQlwbV9paXIgPSAwOwo+IC0JCX0gZWxzZSBpZiAoSU5URUxfR0VO KGk5MTUpID49IDgpIHsKPiArCQl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4KSB7 Cj4gIAkJCXBtX2llciA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VOOF9HVF9JRVIoMikp Owo+ICAJCQlwbV9pbXIgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjhfR1RfSU1SKDIp KTsKPiAgCQkJcG1faXNyID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU44X0dUX0lTUigy KSk7Cj4gQEAgLTM4NiwxNCArMzg2LDE0IEBAIHN0YXRpYyBpbnQgZnJlcXVlbmN5X3Nob3coc3Ry dWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIAo+ICAJCXNlcV9wcmludGYobSwgIlBN IElFUj0weCUwOHggSU1SPTB4JTA4eCwgTUFTSz0weCUwOHhcbiIsCj4gIAkJCSAgIHBtX2llciwg cG1faW1yLCBwbV9tYXNrKTsKPiAtCQlpZiAoSU5URUxfR0VOKGk5MTUpIDw9IDEwKQo+ICsJCWlm IChHUkFQSElDU19WRVIoaTkxNSkgPD0gMTApCj4gIAkJCXNlcV9wcmludGYobSwgIlBNIElTUj0w eCUwOHggSUlSPTB4JTA4eFxuIiwKPiAgCQkJCSAgIHBtX2lzciwgcG1faWlyKTsKPiAgCQlzZXFf cHJpbnRmKG0sICJwbV9pbnRybXNrX21iejogMHglMDh4XG4iLAo+ICAJCQkgICBycHMtPnBtX2lu dHJtc2tfbWJ6KTsKPiAgCQlzZXFfcHJpbnRmKG0sICJHVF9QRVJGX1NUQVRVUzogMHglMDh4XG4i LCBndF9wZXJmX3N0YXR1cyk7Cj4gIAkJc2VxX3ByaW50ZihtLCAiUmVuZGVyIHAtc3RhdGUgcmF0 aW86ICVkXG4iLAo+IC0JCQkgICAoZ3RfcGVyZl9zdGF0dXMgJiAoSU5URUxfR0VOKGk5MTUpID49 IDkgPyAweDFmZjAwIDogMHhmZjAwKSkgPj4gOCk7Cj4gKwkJCSAgIChndF9wZXJmX3N0YXR1cyAm IChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSA/IDB4MWZmMDAgOiAweGZmMDApKSA+PiA4KTsKPiAg CQlzZXFfcHJpbnRmKG0sICJSZW5kZXIgcC1zdGF0ZSBWSUQ6ICVkXG4iLAo+ICAJCQkgICBndF9w ZXJmX3N0YXR1cyAmIDB4ZmYpOwo+ICAJCXNlcV9wcmludGYobSwgIlJlbmRlciBwLXN0YXRlIGxp bWl0OiAlZFxuIiwKPiBAQCAtNDM3LDIwICs0MzcsMjAgQEAgc3RhdGljIGludCBmcmVxdWVuY3lf c2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKPiAgCQltYXhfZnJlcSA9IChJ U19HRU45X0xQKGk5MTUpID8gcnBfc3RhdGVfY2FwID4+IDAgOgo+ICAJCQkgICAgcnBfc3RhdGVf Y2FwID4+IDE2KSAmIDB4ZmY7Cj4gIAkJbWF4X2ZyZXEgKj0gKElTX0dFTjlfQkMoaTkxNSkgfHwK PiAtCQkJICAgICBJTlRFTF9HRU4oaTkxNSkgPj0gMTAgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSk7 Cj4gKwkJCSAgICAgR1JBUEhJQ1NfVkVSKGk5MTUpID49IDEwID8gR0VOOV9GUkVRX1NDQUxFUiA6 IDEpOwo+ICAJCXNlcV9wcmludGYobSwgIkxvd2VzdCAoUlBOKSBmcmVxdWVuY3k6ICVkTUh6XG4i LAo+ICAJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIG1heF9mcmVxKSk7Cj4gIAo+ICAJCW1heF9m cmVxID0gKHJwX3N0YXRlX2NhcCAmIDB4ZmYwMCkgPj4gODsKPiAgCQltYXhfZnJlcSAqPSAoSVNf R0VOOV9CQyhpOTE1KSB8fAo+IC0JCQkgICAgIElOVEVMX0dFTihpOTE1KSA+PSAxMCA/IEdFTjlf RlJFUV9TQ0FMRVIgOiAxKTsKPiArCQkJICAgICBHUkFQSElDU19WRVIoaTkxNSkgPj0gMTAgPyBH RU45X0ZSRVFfU0NBTEVSIDogMSk7Cj4gIAkJc2VxX3ByaW50ZihtLCAiTm9taW5hbCAoUlAxKSBm cmVxdWVuY3k6ICVkTUh6XG4iLAo+ICAJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIG1heF9mcmVx KSk7Cj4gIAo+ICAJCW1heF9mcmVxID0gKElTX0dFTjlfTFAoaTkxNSkgPyBycF9zdGF0ZV9jYXAg Pj4gMTYgOgo+ICAJCQkgICAgcnBfc3RhdGVfY2FwID4+IDApICYgMHhmZjsKPiAgCQltYXhfZnJl cSAqPSAoSVNfR0VOOV9CQyhpOTE1KSB8fAo+IC0JCQkgICAgIElOVEVMX0dFTihpOTE1KSA+PSAx MCA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKTsKPiArCQkJICAgICBHUkFQSElDU19WRVIoaTkxNSkg Pj0gMTAgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSk7Cj4gIAkJc2VxX3ByaW50ZihtLCAiTWF4IG5v bi1vdmVyY2xvY2tlZCAoUlAwKSBmcmVxdWVuY3k6ICVkTUh6XG4iLAo+ICAJCQkgICBpbnRlbF9n cHVfZnJlcShycHMsIG1heF9mcmVxKSk7Cj4gIAkJc2VxX3ByaW50ZihtLCAiTWF4IG92ZXJjbG9j a2VkIGZyZXF1ZW5jeTogJWRNSHpcbiIsCj4gQEAgLTQ4OCw3ICs0ODgsNyBAQCBzdGF0aWMgaW50 IGxsY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPiAgewo+ICAJc3RydWN0 IGludGVsX2d0ICpndCA9IG0tPnByaXZhdGU7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9IGd0LT5pOTE1Owo+IC0JY29uc3QgYm9vbCBlZHJhbSA9IElOVEVMX0dFTihpOTE1KSA+ IDg7Cj4gKwljb25zdCBib29sIGVkcmFtID0gR1JBUEhJQ1NfVkVSKGk5MTUpID4gODsKPiAgCXN0 cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZndC0+cnBzOwo+ICAJdW5zaWduZWQgaW50IG1heF9ncHVf ZnJlcSwgbWluX2dwdV9mcmVxOwo+ICAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gQEAgLTUw MCw3ICs1MDAsNyBAQCBzdGF0aWMgaW50IGxsY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9p ZCAqZGF0YSkKPiAgCj4gIAltaW5fZ3B1X2ZyZXEgPSBycHMtPm1pbl9mcmVxOwo+ICAJbWF4X2dw dV9mcmVxID0gcnBzLT5tYXhfZnJlcTsKPiAtCWlmIChJU19HRU45X0JDKGk5MTUpIHx8IElOVEVM X0dFTihpOTE1KSA+PSAxMCkgewo+ICsJaWYgKElTX0dFTjlfQkMoaTkxNSkgfHwgR1JBUEhJQ1Nf VkVSKGk5MTUpID49IDEwKSB7Cj4gIAkJLyogQ29udmVydCBHVCBmcmVxdWVuY3kgdG8gNTAgSFog dW5pdHMgKi8KPiAgCQltaW5fZ3B1X2ZyZXEgLz0gR0VOOV9GUkVRX1NDQUxFUjsKPiAgCQltYXhf Z3B1X2ZyZXEgLz0gR0VOOV9GUkVRX1NDQUxFUjsKPiBAQCAtNTE4LDcgKzUxOCw3IEBAIHN0YXRp YyBpbnQgbGxjX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAJCQkgICBp bnRlbF9ncHVfZnJlcShycHMsCj4gIAkJCQkJICAoZ3B1X2ZyZXEgKgo+ICAJCQkJCSAgIChJU19H RU45X0JDKGk5MTUpIHx8Cj4gLQkJCQkJICAgIElOVEVMX0dFTihpOTE1KSA+PSAxMCA/Cj4gKwkJ CQkJICAgIEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMCA/Cj4gIAkJCQkJICAgIEdFTjlfRlJFUV9T Q0FMRVIgOiAxKSkpLAo+ICAJCQkgICAoKGlhX2ZyZXEgPj4gMCkgJiAweGZmKSAqIDEwMCwKPiAg CQkJICAgKChpYV9mcmVxID4+IDgpICYgMHhmZikgKiAxMDApOwo+IEBAIC01ODAsNyArNTgwLDcg QEAgc3RhdGljIGludCBycHNfYm9vc3Rfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRh dGEpCj4gIAo+ICAJc2VxX3ByaW50ZihtLCAiV2FpdCBib29zdHM6ICVkXG4iLCBSRUFEX09OQ0Uo cnBzLT5ib29zdHMpKTsKPiAgCj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDYgJiYgaW50ZWxf cnBzX2lzX2FjdGl2ZShycHMpKSB7Cj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYgJiYg aW50ZWxfcnBzX2lzX2FjdGl2ZShycHMpKSB7Cj4gIAkJc3RydWN0IGludGVsX3VuY29yZSAqdW5j b3JlID0gZ3QtPnVuY29yZTsKPiAgCQl1MzIgcnB1cCwgcnB1cGVpOwo+ICAJCXUzMiBycGRvd24s IHJwZG93bmVpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW4yX2Vu Z2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuMl9lbmdpbmVfY3MuYwo+IGlu ZGV4IDk2NDYyMDBkMjc5Mi4uNjEzODM4MzA1MDVlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2dlbjJfZW5naW5lX2NzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9nZW4yX2VuZ2luZV9jcy5jCj4gQEAgLTc0LDcgKzc0LDcgQEAgaW50IGdlbjRfZW1pdF9m bHVzaF9yY3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBtb2RlKQo+ICAJY21kID0gTUlf RkxVU0g7Cj4gIAlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkgewo+ICAJCWNtZCB8PSBNSV9F WEVfRkxVU0g7Cj4gLQkJaWYgKElTX0c0WChycS0+ZW5naW5lLT5pOTE1KSB8fCBJU19HRU4ocnEt PmVuZ2luZS0+aTkxNSwgNSkpCj4gKwkJaWYgKElTX0c0WChycS0+ZW5naW5lLT5pOTE1KSB8fCBH UkFQSElDU19WRVIocnEtPmVuZ2luZS0+aTkxNSkgPT0gNSkKPiAgCQkJY21kIHw9IE1JX0lOVkFM SURBVEVfSVNQOwo+ICAJfQo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvZ2VuOF9lbmdpbmVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjhfZW5naW5l X2NzLmMKPiBpbmRleCA3MzJjMmVkMWQ5MzMuLjk0ZTBhNTY2OWY5MCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvZ2VuOF9lbmdpbmVfY3MuYwo+IEBAIC0zOCw3ICszOCw3IEBAIGludCBn ZW44X2VtaXRfZmx1c2hfcmNzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgbW9kZSkKPiAg CQkgKiBPbiBHRU45OiBiZWZvcmUgVkZfQ0FDSEVfSU5WQUxJREFURSB3ZSBuZWVkIHRvIGVtaXQg YSBOVUxMCj4gIAkJICogcGlwZSBjb250cm9sLgo+ICAJCSAqLwo+IC0JCWlmIChJU19HRU4ocnEt PmVuZ2luZS0+aTkxNSwgOSkpCj4gKwkJaWYgKEdSQVBISUNTX1ZFUihycS0+ZW5naW5lLT5pOTE1 KSA9PSA5KQo+ICAJCQl2Zl9mbHVzaF93YSA9IHRydWU7Cj4gIAo+ICAJCS8qIFdhRm9yR0FNSGFu ZzprYmwgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuOF9wcGd0 dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuOF9wcGd0dC5jCj4gaW5kZXggZTNhODky NGQyMjg2Li4yMWM4YjczNTBiN2EgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvZ2VuOF9wcGd0dC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuOF9wcGd0 dC5jCj4gQEAgLTcwOSw3ICs3MDksNyBAQCBzdHJ1Y3QgaTkxNV9wcGd0dCAqZ2VuOF9wcGd0dF9j cmVhdGUoc3RydWN0IGludGVsX2d0ICpndCkKPiAgCSAqCj4gIAkgKiBHZW4xMiBoYXMgaW5oZXJp dGVkIHRoZSBzYW1lIHJlYWQtb25seSBmYXVsdCBpc3N1ZSBmcm9tIGdlbjExLgo+ICAJICovCj4g LQlwcGd0dC0+dm0uaGFzX3JlYWRfb25seSA9ICFJU19HRU5fUkFOR0UoZ3QtPmk5MTUsIDExLCAx Mik7Cj4gKwlwcGd0dC0+dm0uaGFzX3JlYWRfb25seSA9ICFJU19HUkFQSElDU19WRVIoZ3QtPmk5 MTUsIDExLCAxMik7Cj4gIAo+ICAJaWYgKEhBU19MTUVNKGd0LT5pOTE1KSkKPiAgCQlwcGd0dC0+ dm0uYWxsb2NfcHRfZG1hID0gYWxsb2NfcHRfbG1lbTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dF9zc2V1LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9jb250ZXh0X3NzZXUuYwo+IGluZGV4IDhkZmQ4ZjY1NmFhYS4uZTg2ZDgyNTVm ZWVjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHRf c3NldS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dF9zc2V1 LmMKPiBAQCAtNzYsNyArNzYsNyBAQCBpbnRlbF9jb250ZXh0X3JlY29uZmlndXJlX3NzZXUoc3Ry dWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICB7Cj4gIAlpbnQgcmV0Owo+ICAKPiAtCUdFTV9CVUdf T04oSU5URUxfR0VOKGNlLT5lbmdpbmUtPmk5MTUpIDwgOCk7Cj4gKwlHRU1fQlVHX09OKEdSQVBI SUNTX1ZFUihjZS0+ZW5naW5lLT5pOTE1KSA8IDgpOwo+ICAKPiAgCXJldCA9IGludGVsX2NvbnRl eHRfbG9ja19waW5uZWQoY2UpOwo+ICAJaWYgKHJldCkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9lbmdpbmVfY3MuYwo+IGluZGV4IDNmOWE4MTFlYjAyYi4uNTRiYWYxN2I4MWI2IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX2NzLmMKPiBAQCAtMjQw LDEwICsyNDAsMTAgQEAgdm9pZCBpbnRlbF9lbmdpbmVfc2V0X2h3c3Bfd3JpdGVtYXNrKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIG1hc2spCj4gIAkgKiBUaG91Z2ggdGhleSBh ZGRlZCBtb3JlIHJpbmdzIG9uIGc0eC9pbGssIHRoZXkgZGlkIG5vdCBhZGQKPiAgCSAqIHBlci1l bmdpbmUgSFdTVEFNIHVudGlsIGdlbjYuCj4gIAkgKi8KPiAtCWlmIChJTlRFTF9HRU4oZW5naW5l LT5pOTE1KSA8IDYgJiYgZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4gKwlpZiAoR1JB UEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPCA2ICYmIGVuZ2luZS0+Y2xhc3MgIT0gUkVOREVSX0NM QVNTKQo+ICAJCXJldHVybjsKPiAgCj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0g MykKPiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAzKQo+ICAJCUVOR0lORV9X UklURShlbmdpbmUsIFJJTkdfSFdTVEFNLCBtYXNrKTsKPiAgCWVsc2UKPiAgCQlFTkdJTkVfV1JJ VEUxNihlbmdpbmUsIFJJTkdfSFdTVEFNLCBtYXNrKTsKPiBAQCAtMzE1LDcgKzMxNSw3IEBAIHN0 YXRpYyBpbnQgaW50ZWxfZW5naW5lX3NldHVwKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIGVudW0gaW50 ZWxfZW5naW5lX2lkIGlkKQo+ICAJCUNPTkZJR19EUk1fSTkxNV9USU1FU0xJQ0VfRFVSQVRJT047 Cj4gIAo+ICAJLyogT3ZlcnJpZGUgdG8gdW5pbnRlcnJ1cHRpYmxlIGZvciBPcGVuQ0wgd29ya2xv YWRzLiAqLwo+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA9PSAxMiAmJiBlbmdpbmUtPmNsYXNzID09 IFJFTkRFUl9DTEFTUykKPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gMTIgJiYgZW5naW5l LT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1MpCj4gIAkJZW5naW5lLT5wcm9wcy5wcmVlbXB0X3RpbWVv dXRfbXMgPSAwOwo+ICAKPiAgCWVuZ2luZS0+ZGVmYXVsdHMgPSBlbmdpbmUtPnByb3BzOyAvKiBu ZXZlciB0byBjaGFuZ2UgYWdhaW4gKi8KPiBAQCAtMzUyLDggKzM1Miw4IEBAIHN0YXRpYyB2b2lk IF9fc2V0dXBfZW5naW5lX2NhcGFiaWxpdGllcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCj4gIAkJICogSEVWQyBzdXBwb3J0IGlzIHByZXNlbnQgb24gZmlyc3QgZW5naW5lIGluc3Rh bmNlCj4gIAkJICogYmVmb3JlIEdlbjExIGFuZCBvbiBhbGwgaW5zdGFuY2VzIGFmdGVyd2FyZHMu Cj4gIAkJICovCj4gLQkJaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMSB8fAo+IC0JCSAgICAoSU5U RUxfR0VOKGk5MTUpID49IDkgJiYgZW5naW5lLT5pbnN0YW5jZSA9PSAwKSkKPiArCQlpZiAoR1JB UEhJQ1NfVkVSKGk5MTUpID49IDExIHx8Cj4gKwkJICAgIChHUkFQSElDU19WRVIoaTkxNSkgPj0g OSAmJiBlbmdpbmUtPmluc3RhbmNlID09IDApKQo+ICAJCQllbmdpbmUtPnVhYmlfY2FwYWJpbGl0 aWVzIHw9Cj4gIAkJCQlJOTE1X1ZJREVPX0NMQVNTX0NBUEFCSUxJVFlfSEVWQzsKPiAgCj4gQEAg LTM2MSwxNCArMzYxLDE0IEBAIHN0YXRpYyB2b2lkIF9fc2V0dXBfZW5naW5lX2NhcGFiaWxpdGll cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkJICogU0ZDIGJsb2NrIGlzIHBy ZXNlbnQgb25seSBvbiBldmVuIGxvZ2ljYWwgZW5naW5lCj4gIAkJICogaW5zdGFuY2VzLgo+ICAJ CSAqLwo+IC0JCWlmICgoSU5URUxfR0VOKGk5MTUpID49IDExICYmCj4gKwkJaWYgKChHUkFQSElD U19WRVIoaTkxNSkgPj0gMTEgJiYKPiAgCQkgICAgIChlbmdpbmUtPmd0LT5pbmZvLnZkYm94X3Nm Y19hY2Nlc3MgJgo+ICAJCSAgICAgIEJJVChlbmdpbmUtPmluc3RhbmNlKSkpIHx8Cj4gLQkJICAg IChJTlRFTF9HRU4oaTkxNSkgPj0gOSAmJiBlbmdpbmUtPmluc3RhbmNlID09IDApKQo+ICsJCSAg ICAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDkgJiYgZW5naW5lLT5pbnN0YW5jZSA9PSAwKSkKPiAg CQkJZW5naW5lLT51YWJpX2NhcGFiaWxpdGllcyB8PQo+ICAJCQkJSTkxNV9WSURFT19BTkRfRU5I QU5DRV9DTEFTU19DQVBBQklMSVRZX1NGQzsKPiAgCX0gZWxzZSBpZiAoZW5naW5lLT5jbGFzcyA9 PSBWSURFT19FTkhBTkNFTUVOVF9DTEFTUykgewo+IC0JCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0g OSkKPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDkpCj4gIAkJCWVuZ2luZS0+dWFiaV9j YXBhYmlsaXRpZXMgfD0KPiAgCQkJCUk5MTVfVklERU9fQU5EX0VOSEFOQ0VfQ0xBU1NfQ0FQQUJJ TElUWV9TRkM7Cj4gIAl9Cj4gQEAgLTQ2Niw3ICs0NjYsNyBAQCBzdGF0aWMgaW50ZWxfZW5naW5l X21hc2tfdCBpbml0X2VuZ2luZV9tYXNrKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIAo+ICAJaW5m by0+ZW5naW5lX21hc2sgPSBJTlRFTF9JTkZPKGk5MTUpLT5wbGF0Zm9ybV9lbmdpbmVfbWFzazsK PiAgCj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgMTEpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5 MTUpIDwgMTEpCj4gIAkJcmV0dXJuIGluZm8tPmVuZ2luZV9tYXNrOwo+ICAKPiAgCW1lZGlhX2Z1 c2UgPSB+aW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU4xMV9HVF9WRUJPWF9WREJPWF9ESVNB QkxFKTsKPiBAQCAtNDkyLDcgKzQ5Miw3IEBAIHN0YXRpYyBpbnRlbF9lbmdpbmVfbWFza190IGlu aXRfZW5naW5lX21hc2soc3RydWN0IGludGVsX2d0ICpndCkKPiAgCQkgKiBob29rZWQgdXAgdG8g YW4gU0ZDIChTY2FsZXIgJiBGb3JtYXQgQ29udmVydGVyKSB1bml0Lgo+ICAJCSAqIEluIFRHTCBl YWNoIFZEQk9YIGhhcyBhY2Nlc3MgdG8gYW4gU0ZDLgo+ICAJCSAqLwo+IC0JCWlmIChJTlRFTF9H RU4oaTkxNSkgPj0gMTIgfHwgbG9naWNhbF92ZGJveCsrICUgMiA9PSAwKQo+ICsJCWlmIChHUkFQ SElDU19WRVIoaTkxNSkgPj0gMTIgfHwgbG9naWNhbF92ZGJveCsrICUgMiA9PSAwKQo+ICAJCQln dC0+aW5mby52ZGJveF9zZmNfYWNjZXNzIHw9IEJJVChpKTsKPiAgCX0KPiAgCWRybV9kYmcoJmk5 MTUtPmRybSwgInZkYm94IGVuYWJsZTogJTA0eCwgaW5zdGFuY2VzOiAlMDRseFxuIiwKPiBAQCAt NzI5LDcgKzcyOSw3IEBAIHN0YXRpYyBpbnQgZW5naW5lX3NldHVwX2NvbW1vbihzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAlpbnRlbF9lbmdpbmVfaW5pdF93aGl0ZWxpc3QoZW5n aW5lKTsKPiAgCWludGVsX2VuZ2luZV9pbml0X2N0eF93YShlbmdpbmUpOwo+ICAKPiAtCWlmIChJ TlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKPiArCWlmIChHUkFQSElDU19WRVIoZW5naW5l LT5pOTE1KSA+PSAxMikKPiAgCQllbmdpbmUtPmZsYWdzIHw9IEk5MTVfRU5HSU5FX0hBU19SRUxB VElWRV9NTUlPOwo+ICAKPiAgCXJldHVybiAwOwo+IEBAIC05OTcsOSArOTk3LDkgQEAgdTY0IGlu dGVsX2VuZ2luZV9nZXRfYWN0aXZlX2hlYWQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQo+ICAKPiAgCXU2NCBhY3RoZDsKPiAgCj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49 IDgpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDgpCj4gIAkJYWN0aGQgPSBFTkdJTkVf UkVBRDY0KGVuZ2luZSwgUklOR19BQ1RIRCwgUklOR19BQ1RIRF9VRFcpOwo+IC0JZWxzZSBpZiAo SU5URUxfR0VOKGk5MTUpID49IDQpCj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0g NCkKPiAgCQlhY3RoZCA9IEVOR0lORV9SRUFEKGVuZ2luZSwgUklOR19BQ1RIRCk7Cj4gIAllbHNl Cj4gIAkJYWN0aGQgPSBFTkdJTkVfUkVBRChlbmdpbmUsIEFDVEhEKTsKPiBAQCAtMTAxMSw3ICsx MDExLDcgQEAgdTY0IGludGVsX2VuZ2luZV9nZXRfbGFzdF9iYXRjaF9oZWFkKGNvbnN0IHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+ICAJdTY0IGJiYWRkcjsKPiAgCj4gLQlp ZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gOCkKPiArCWlmIChHUkFQSElDU19WRVIoZW5n aW5lLT5pOTE1KSA+PSA4KQo+ICAJCWJiYWRkciA9IEVOR0lORV9SRUFENjQoZW5naW5lLCBSSU5H X0JCQUREUiwgUklOR19CQkFERFJfVURXKTsKPiAgCWVsc2UKPiAgCQliYmFkZHIgPSBFTkdJTkVf UkVBRChlbmdpbmUsIFJJTkdfQkJBRERSKTsKPiBAQCAtMTA1OCw3ICsxMDU4LDcgQEAgaW50IGlu dGVsX2VuZ2luZV9zdG9wX2NzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+ ICAJaW50IGVyciA9IDA7Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpIDwgMykK PiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA8IDMpCj4gIAkJcmV0dXJuIC1FTk9E RVY7Cj4gIAo+ICAJRU5HSU5FX1RSQUNFKGVuZ2luZSwgIlxuIik7Cj4gQEAgLTExMDgsNyArMTEw OCw3IEBAIHJlYWRfc3Vic2xpY2VfcmVnKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKPiAgCXUzMiBtY3JfbWFzaywgbWNyX3NzLCBtY3IsIG9sZF9tY3IsIHZhbDsKPiAgCWVu dW0gZm9yY2V3YWtlX2RvbWFpbnMgZndfZG9tYWluczsKPiAgCj4gLQlpZiAoSU5URUxfR0VOKGk5 MTUpID49IDExKSB7Cj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDExKSB7Cj4gIAkJbWNy X21hc2sgPSBHRU4xMV9NQ1JfU0xJQ0VfTUFTSyB8IEdFTjExX01DUl9TVUJTTElDRV9NQVNLOwo+ ICAJCW1jcl9zcyA9IEdFTjExX01DUl9TTElDRShzbGljZSkgfCBHRU4xMV9NQ1JfU1VCU0xJQ0Uo c3Vic2xpY2UpOwo+ICAJfSBlbHNlIHsKPiBAQCAtMTE1Nyw3ICsxMTU3LDcgQEAgdm9pZCBpbnRl bF9lbmdpbmVfZ2V0X2luc3Rkb25lKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwKPiAgCj4gIAltZW1zZXQoaW5zdGRvbmUsIDAsIHNpemVvZigqaW5zdGRvbmUpKTsKPiAgCj4g LQlzd2l0Y2ggKElOVEVMX0dFTihpOTE1KSkgewo+ICsJc3dpdGNoIChHUkFQSElDU19WRVIoaTkx NSkpIHsKPiAgCWRlZmF1bHQ6Cj4gIAkJaW5zdGRvbmUtPmluc3Rkb25lID0KPiAgCQkJaW50ZWxf dW5jb3JlX3JlYWQodW5jb3JlLCBSSU5HX0lOU1RET05FKG1taW9fYmFzZSkpOwo+IEBAIC0xMTY3 LDcgKzExNjcsNyBAQCB2b2lkIGludGVsX2VuZ2luZV9nZXRfaW5zdGRvbmUoY29uc3Qgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAKPiAgCQlpbnN0ZG9uZS0+c2xpY2VfY29tbW9u ID0KPiAgCQkJaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU43X1NDX0lOU1RET05FKTsKPiAt CQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDEyKSB7Cj4gKwkJaWYgKEdSQVBISUNTX1ZFUihpOTE1 KSA+PSAxMikgewo+ICAJCQlpbnN0ZG9uZS0+c2xpY2VfY29tbW9uX2V4dHJhWzBdID0KPiAgCQkJ CWludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VOMTJfU0NfSU5TVERPTkVfRVhUUkEpOwo+ICAJ CQlpbnN0ZG9uZS0+c2xpY2VfY29tbW9uX2V4dHJhWzFdID0KPiBAQCAtMTIzMCw3ICsxMjMwLDcg QEAgc3RhdGljIGJvb2wgcmluZ19pc19pZGxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKPiAgCQlpZGxlID0gZmFsc2U7Cj4gIAo+ICAJLyogTm8gYml0IGZvciBnZW4yLCBzbyBhc3N1 bWUgdGhlIENTIHBhcnNlciBpcyBpZGxlICovCj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkx NSkgPiAyICYmCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPiAyICYmCj4gIAkg ICAgIShFTkdJTkVfUkVBRChlbmdpbmUsIFJJTkdfTUlfTU9ERSkgJiBNT0RFX0lETEUpKQo+ICAJ CWlkbGUgPSBmYWxzZTsKPiAgCj4gQEAgLTEzMjcsNyArMTMyNyw3IEBAIHZvaWQgaW50ZWxfZW5n aW5lc19yZXNldF9kZWZhdWx0X3N1Ym1pc3Npb24oc3RydWN0IGludGVsX2d0ICpndCkKPiAgCj4g IGJvb2wgaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gIHsKPiAtCXN3aXRjaCAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpIHsKPiAr CXN3aXRjaCAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkpIHsKPiAgCWNhc2UgMjoKPiAgCQly ZXR1cm4gZmFsc2U7IC8qIHVzZXMgcGh5c2ljYWwgbm90IHZpcnR1YWwgYWRkcmVzc2VzICovCj4g IAljYXNlIDM6Cj4gQEAgLTE0MzIsNyArMTQzMiw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2VuZ2lu ZV9wcmludF9yZWdpc3RlcnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAJc3Ry dWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5l eGVjbGlzdHM7Cj4gIAl1NjQgYWRkcjsKPiAgCj4gLQlpZiAoZW5naW5lLT5pZCA9PSBSRU5ERVJf Q0xBU1MgJiYgSVNfR0VOX1JBTkdFKGRldl9wcml2LCA0LCA3KSkKPiArCWlmIChlbmdpbmUtPmlk ID09IFJFTkRFUl9DTEFTUyAmJiBJU19HUkFQSElDU19WRVIoZGV2X3ByaXYsIDQsIDcpKQo+ICAJ CWRybV9wcmludGYobSwgIlx0Q0NJRDogMHglMDh4XG4iLCBFTkdJTkVfUkVBRChlbmdpbmUsIEND SUQpKTsKPiAgCWlmIChIQVNfRVhFQ0xJU1RTKGRldl9wcml2KSkgewo+ICAJCWRybV9wcmludGYo bSwgIlx0RUxfU1RBVF9ISTogMHglMDh4XG4iLAo+IEBAIC0xNDQ5LDEzICsxNDQ5LDEzIEBAIHN0 YXRpYyB2b2lkIGludGVsX2VuZ2luZV9wcmludF9yZWdpc3RlcnMoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAo+ICAJZHJtX3ByaW50ZihtLCAiXHRSSU5HX0NUTDogICAweCUwOHglc1xu IiwKPiAgCQkgICBFTkdJTkVfUkVBRChlbmdpbmUsIFJJTkdfQ1RMKSwKPiAgCQkgICBFTkdJTkVf UkVBRChlbmdpbmUsIFJJTkdfQ1RMKSAmIChSSU5HX1dBSVQgfCBSSU5HX1dBSVRfU0VNQVBIT1JF KSA/ICIgW3dhaXRpbmddIiA6ICIiKTsKPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+ IDIpIHsKPiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+IDIpIHsKPiAgCQlkcm1f cHJpbnRmKG0sICJcdFJJTkdfTU9ERTogIDB4JTA4eCVzXG4iLAo+ICAJCQkgICBFTkdJTkVfUkVB RChlbmdpbmUsIFJJTkdfTUlfTU9ERSksCj4gIAkJCSAgIEVOR0lORV9SRUFEKGVuZ2luZSwgUklO R19NSV9NT0RFKSAmIChNT0RFX0lETEUpID8gIiBbaWRsZV0iIDogIiIpOwo+ICAJfQo+ICAKPiAt CWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDYpIHsKPiArCWlmIChHUkFQSElDU19WRVIoZGV2 X3ByaXYpID49IDYpIHsKPiAgCQlkcm1fcHJpbnRmKG0sICJcdFJJTkdfSU1SOiAgIDB4JTA4eFxu IiwKPiAgCQkJICAgRU5HSU5FX1JFQUQoZW5naW5lLCBSSU5HX0lNUikpOwo+ICAJCWRybV9wcmlu dGYobSwgIlx0UklOR19FU1I6ICAgMHglMDh4XG4iLAo+IEBAIC0xNDcyLDE1ICsxNDcyLDE1IEBA IHN0YXRpYyB2b2lkIGludGVsX2VuZ2luZV9wcmludF9yZWdpc3RlcnMoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAo+ICAJYWRkciA9IGludGVsX2VuZ2luZV9nZXRfbGFzdF9iYXRjaF9o ZWFkKGVuZ2luZSk7Cj4gIAlkcm1fcHJpbnRmKG0sICJcdEJCQUREUjogMHglMDh4XyUwOHhcbiIs Cj4gIAkJICAgdXBwZXJfMzJfYml0cyhhZGRyKSwgbG93ZXJfMzJfYml0cyhhZGRyKSk7Cj4gLQlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA4KQo+ICsJaWYgKEdSQVBISUNTX1ZFUihkZXZfcHJp dikgPj0gOCkKPiAgCQlhZGRyID0gRU5HSU5FX1JFQUQ2NChlbmdpbmUsIFJJTkdfRE1BX0ZBREQs IFJJTkdfRE1BX0ZBRERfVURXKTsKPiAtCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g NCkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihkZXZfcHJpdikgPj0gNCkKPiAgCQlhZGRyID0g RU5HSU5FX1JFQUQoZW5naW5lLCBSSU5HX0RNQV9GQUREKTsKPiAgCWVsc2UKPiAgCQlhZGRyID0g RU5HSU5FX1JFQUQoZW5naW5lLCBETUFfRkFERF9JOFhYKTsKPiAgCWRybV9wcmludGYobSwgIlx0 RE1BX0ZBRERSOiAweCUwOHhfJTA4eFxuIiwKPiAgCQkgICB1cHBlcl8zMl9iaXRzKGFkZHIpLCBs b3dlcl8zMl9iaXRzKGFkZHIpKTsKPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpIHsK PiArCWlmIChHUkFQSElDU19WRVIoZGV2X3ByaXYpID49IDQpIHsKPiAgCQlkcm1fcHJpbnRmKG0s ICJcdElQRUlSOiAweCUwOHhcbiIsCj4gIAkJCSAgIEVOR0lORV9SRUFEKGVuZ2luZSwgUklOR19J UEVJUikpOwo+ICAJCWRybV9wcmludGYobSwgIlx0SVBFSFI6IDB4JTA4eFxuIiwKPiBAQCAtMTU1 OSw3ICsxNTU5LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfZW5naW5lX3ByaW50X3JlZ2lzdGVycyhz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gIAkJfQo+ICAJCXJjdV9yZWFkX3VubG9j aygpOwo+ICAJCWV4ZWNsaXN0c19hY3RpdmVfdW5sb2NrX2JoKGV4ZWNsaXN0cyk7Cj4gLQl9IGVs c2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPiA2KSB7Cj4gKwl9IGVsc2UgaWYgKEdSQVBISUNT X1ZFUihkZXZfcHJpdikgPiA2KSB7Cj4gIAkJZHJtX3ByaW50ZihtLCAiXHRQUF9ESVJfQkFTRTog MHglMDh4XG4iLAo+ICAJCQkgICBFTkdJTkVfUkVBRChlbmdpbmUsIFJJTkdfUFBfRElSX0JBU0Up KTsKPiAgCQlkcm1fcHJpbnRmKG0sICJcdFBQX0RJUl9CQVNFX1JFQUQ6IDB4JTA4eFxuIiwKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1p c3Npb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0c19zdWJtaXNz aW9uLmMKPiBpbmRleCA4ZGIyMDA0MjI5NTAuLmZjNzc1OTJkODhhOSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYwo+ IEBAIC0xODQ3LDcgKzE4NDcsNyBAQCBwcm9jZXNzX2NzYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsIHN0cnVjdCBpOTE1X3JlcXVlc3QgKippbmFjdGl2ZSkKPiAgCQlFTkdJTkVfVFJB Q0UoZW5naW5lLCAiY3NiWyVkXTogc3RhdHVzPTB4JTA4eDoweCUwOHhcbiIsCj4gIAkJCSAgICAg aGVhZCwgdXBwZXJfMzJfYml0cyhjc2IpLCBsb3dlcl8zMl9iaXRzKGNzYikpOwo+ICAKPiAtCQlp ZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4gKwkJaWYgKEdSQVBISUNTX1ZFUihl bmdpbmUtPmk5MTUpID49IDEyKQo+ICAJCQlwcm9tb3RlID0gZ2VuMTJfY3NiX3BhcnNlKGNzYik7 Cj4gIAkJZWxzZQo+ICAJCQlwcm9tb3RlID0gZ2VuOF9jc2JfcGFyc2UoY3NiKTsKPiBAQCAtMjc3 Miw3ICsyNzcyLDcgQEAgc3RhdGljIHZvaWQgZW5hYmxlX2V4ZWNsaXN0cyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gIAo+ICAJaW50ZWxfZW5naW5lX3NldF9od3NwX3dyaXRlbWFz ayhlbmdpbmUsIH4wdSk7IC8qIEhXU1RBTSAqLwo+ICAKPiAtCWlmIChJTlRFTF9HRU4oZW5naW5l LT5pOTE1KSA+PSAxMSkKPiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMSkK PiAgCQltb2RlID0gX01BU0tFRF9CSVRfRU5BQkxFKEdFTjExX0dGWF9ESVNBQkxFX0xFR0FDWV9N T0RFKTsKPiAgCWVsc2UKPiAgCQltb2RlID0gX01BU0tFRF9CSVRfRU5BQkxFKEdGWF9SVU5fTElT VF9FTkFCTEUpOwo+IEBAIC0zMTAzLDcgKzMxMDMsNyBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNf cGFyayhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAo+ICBzdGF0aWMgYm9vbCBj YW5fcHJlZW1wdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIHsKPiAtCWlmIChJ TlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+IDgpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+ aTkxNSkgPiA4KQo+ICAJCXJldHVybiB0cnVlOwo+ICAKPiAgCS8qIEdQR1BVIG9uIGJkdyByZXF1 aXJlcyBleHRyYSB3L2E7IG5vdCBpbXBsZW1lbnRlZCAqLwo+IEBAIC0zMTU2LDEzICszMTU2LDEz IEBAIGxvZ2ljYWxfcmluZ19kZWZhdWx0X3ZmdW5jcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCj4gIAllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW44X2VtaXRfZmx1c2hfeGNzOwo+ICAJ ZW5naW5lLT5lbWl0X2luaXRfYnJlYWRjcnVtYiA9IGdlbjhfZW1pdF9pbml0X2JyZWFkY3J1bWI7 Cj4gIAllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuOF9lbWl0X2ZpbmlfYnJlYWRj cnVtYl94Y3M7Cj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpIHsKPiArCWlm IChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMikgewo+ICAJCWVuZ2luZS0+ZW1pdF9m aW5pX2JyZWFkY3J1bWIgPSBnZW4xMl9lbWl0X2ZpbmlfYnJlYWRjcnVtYl94Y3M7Cj4gIAkJZW5n aW5lLT5lbWl0X2ZsdXNoID0gZ2VuMTJfZW1pdF9mbHVzaF94Y3M7Cj4gIAl9Cj4gIAllbmdpbmUt PnNldF9kZWZhdWx0X3N1Ym1pc3Npb24gPSBleGVjbGlzdHNfc2V0X2RlZmF1bHRfc3VibWlzc2lv bjsKPiAgCj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPCAxMSkgewo+ICsJaWYgKEdS QVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpIDwgMTEpIHsKPiAgCQllbmdpbmUtPmlycV9lbmFibGUg PSBnZW44X2xvZ2ljYWxfcmluZ19lbmFibGVfaXJxOwo+ICAJCWVuZ2luZS0+aXJxX2Rpc2FibGUg PSBnZW44X2xvZ2ljYWxfcmluZ19kaXNhYmxlX2lycTsKPiAgCX0gZWxzZSB7Cj4gQEAgLTMxOTUs NyArMzE5NSw3IEBAIHN0YXRpYyB2b2lkIGxvZ2ljYWxfcmluZ19kZWZhdWx0X2lycXMoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4gIAl1bnNpZ25lZCBpbnQgc2hpZnQgPSAw Owo+ICAKPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8IDExKSB7Cj4gKwlpZiAoR1JB UEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPCAxMSkgewo+ICAJCWNvbnN0IHU4IGlycV9zaGlmdHNb XSA9IHsKPiAgCQkJW1JDUzBdICA9IEdFTjhfUkNTX0lSUV9TSElGVCwKPiAgCQkJW0JDUzBdICA9 IEdFTjhfQkNTX0lSUV9TSElGVCwKPiBAQCAtMzIxNSw3ICszMjE1LDcgQEAgc3RhdGljIHZvaWQg bG9naWNhbF9yaW5nX2RlZmF1bHRfaXJxcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gIAo+ICBzdGF0aWMgdm9pZCByY3Nfc3VibWlzc2lvbl9vdmVycmlkZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gIHsKPiAtCXN3aXRjaCAoSU5URUxfR0VOKGVuZ2luZS0+aTkx NSkpIHsKPiArCXN3aXRjaCAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkpIHsKPiAgCWNhc2Ug MTI6Cj4gIAkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuMTJfZW1pdF9mbHVzaF9yY3M7Cj4gIAkJ ZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjEyX2VtaXRfZmluaV9icmVhZGNydW1i X3JjczsKPiBAQCAtMzI2NiwxMyArMzI2NiwxMyBAQCBpbnQgaW50ZWxfZXhlY2xpc3RzX3N1Ym1p c3Npb25fc2V0dXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJZXhlY2xpc3Rz LT5jc2Jfd3JpdGUgPQo+ICAJCSZlbmdpbmUtPnN0YXR1c19wYWdlLmFkZHJbaW50ZWxfaHdzX2Nz Yl93cml0ZV9pbmRleChpOTE1KV07Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA8IDExKQo+ ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8IDExKQo+ICAJCWV4ZWNsaXN0cy0+Y3NiX3NpemUg PSBHRU44X0NTQl9FTlRSSUVTOwo+ICAJZWxzZQo+ICAJCWV4ZWNsaXN0cy0+Y3NiX3NpemUgPSBH RU4xMV9DU0JfRU5UUklFUzsKPiAgCj4gIAllbmdpbmUtPmNvbnRleHRfdGFnID0gR0VOTUFTSyhC SVRTX1BFUl9MT05HIC0gMiwgMCk7Cj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0g MTEpIHsKPiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMSkgewo+ICAJCWV4 ZWNsaXN0cy0+Y2NpZCB8PSBlbmdpbmUtPmluc3RhbmNlIDw8IChHRU4xMV9FTkdJTkVfSU5TVEFO Q0VfU0hJRlQgLSAzMik7Cj4gIAkJZXhlY2xpc3RzLT5jY2lkIHw9IGVuZ2luZS0+Y2xhc3MgPDwg KEdFTjExX0VOR0lORV9DTEFTU19TSElGVCAtIDMyKTsKPiAgCX0KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ2d0dC5jCj4gaW5kZXggMzUwNjljYTVkN2RlLi4xOWJkODg1NmNlODQgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ2d0dC5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ2d0dC5jCj4gQEAgLTEwNywxMCArMTA3LDEwIEBA IHN0YXRpYyBib29sIG5lZWRzX2lkbGVfbWFwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKPiAgCWlmICghaW50ZWxfdnRkX2FjdGl2ZSgpKQo+ICAJCXJldHVybiBmYWxzZTsKPiAgCj4g LQlpZiAoSVNfR0VOKGk5MTUsIDUpICYmIElTX01PQklMRShpOTE1KSkKPiArCWlmIChHUkFQSElD U19WRVIoaTkxNSkgPT0gNSAmJiBJU19NT0JJTEUoaTkxNSkpCj4gIAkJcmV0dXJuIHRydWU7Cj4g IAo+IC0JaWYgKElTX0dFTihpOTE1LCAxMikpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09 IDEyKQo+ICAJCXJldHVybiB0cnVlOyAvKiBYWFggRE1BUiBmYXVsdCByZWFzb24gNyAqLwo+ICAK PiAgCXJldHVybiBmYWxzZTsKPiBAQCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyB2b2lkIGd1Y19n Z3R0X2ludmFsaWRhdGUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkKPiAgCj4gIAlnZW44X2dndHRf aW52YWxpZGF0ZShnZ3R0KTsKPiAgCj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDEyKQo+ICsJ aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMikKPiAgCQlpbnRlbF91bmNvcmVfd3JpdGVfZnco dW5jb3JlLCBHRU4xMl9HVUNfVExCX0lOVl9DUiwKPiAgCQkJCSAgICAgIEdFTjEyX0dVQ19UTEJf SU5WX0NSX0lOVkFMSURBVEUpOwo+ICAJZWxzZQo+IEBAIC04MjAsNyArODIwLDcgQEAgc3RhdGlj IGludCBnZ3R0X3Byb2JlX2NvbW1vbihzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0LCB1NjQgc2l6ZSkK PiAgCSAqIHJlc29ydCB0byBhbiB1bmNhY2hlZCBtYXBwaW5nLiBUaGUgV0MgaXNzdWUgaXMgZWFz aWx5IGNhdWdodCBieSB0aGUKPiAgCSAqIHJlYWRiYWNrIGNoZWNrIHdoZW4gd3JpdGluZyBHVFQg UFRFIGVudHJpZXMuCj4gIAkgKi8KPiAtCWlmIChJU19HRU45X0xQKGk5MTUpIHx8IElOVEVMX0dF TihpOTE1KSA+PSAxMCkKPiArCWlmIChJU19HRU45X0xQKGk5MTUpIHx8IEdSQVBISUNTX1ZFUihp OTE1KSA+PSAxMCkKPiAgCQlnZ3R0LT5nc20gPSBpb3JlbWFwKHBoeXNfYWRkciwgc2l6ZSk7Cj4g IAllbHNlCj4gIAkJZ2d0dC0+Z3NtID0gaW9yZW1hcF93YyhwaHlzX2FkZHIsIHNpemUpOwo+IEBA IC0xMDY1LDcgKzEwNjUsNyBAQCBzdGF0aWMgaW50IGdlbjZfZ21jaF9wcm9iZShzdHJ1Y3QgaTkx NV9nZ3R0ICpnZ3R0KQo+ICAJCWdndHQtPnZtLnB0ZV9lbmNvZGUgPSBoc3dfcHRlX2VuY29kZTsK PiAgCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCj4gIAkJZ2d0dC0+dm0ucHRlX2VuY29k ZSA9IGJ5dF9wdGVfZW5jb2RlOwo+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDcpCj4g KwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNykKPiAgCQlnZ3R0LT52bS5wdGVfZW5j b2RlID0gaXZiX3B0ZV9lbmNvZGU7Cj4gIAllbHNlCj4gIAkJZ2d0dC0+dm0ucHRlX2VuY29kZSA9 IHNuYl9wdGVfZW5jb2RlOwo+IEBAIC0xMTM3LDkgKzExMzcsOSBAQCBzdGF0aWMgaW50IGdndHRf cHJvYmVfaHcoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCwgc3RydWN0IGludGVsX2d0ICpndCkKPiAg CWdndHQtPnZtLmRtYSA9IGk5MTUtPmRybS5kZXY7Cj4gIAlkbWFfcmVzdl9pbml0KCZnZ3R0LT52 bS5yZXN2KTsKPiAgCj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpIDw9IDUpCj4gKwlpZiAoR1JBUEhJ Q1NfVkVSKGk5MTUpIDw9IDUpCj4gIAkJcmV0ID0gaTkxNV9nbWNoX3Byb2JlKGdndHQpOwo+IC0J ZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpIDwgOCkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA8IDgpCj4gIAkJcmV0ID0gZ2VuNl9nbWNoX3Byb2JlKGdndHQpOwo+ICAJZWxzZQo+ICAJ CXJldCA9IGdlbjhfZ21jaF9wcm9iZShnZ3R0KTsKPiBAQCAtMTE5Niw3ICsxMTk2LDcgQEAgaW50 IGk5MTVfZ2d0dF9wcm9iZV9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgCj4g IGludCBpOTE1X2dndHRfZW5hYmxlX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ ICB7Cj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgNiAmJiAhaW50ZWxfZW5hYmxlX2d0dCgpKQo+ ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8IDYgJiYgIWludGVsX2VuYWJsZV9ndHQoKSkKPiAg CQlyZXR1cm4gLUVJTzsKPiAgCj4gIAlyZXR1cm4gMDsKPiBAQCAtMTI2MSw3ICsxMjYxLDcgQEAg dm9pZCBpOTE1X2dndHRfcmVzdW1lKHN0cnVjdCBpOTE1X2dndHQgKmdndHQpCj4gIAlpZiAoZmx1 c2gpCj4gIAkJd2JpbnZkX29uX2FsbF9jcHVzKCk7Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihnZ3R0 LT52bS5pOTE1KSA+PSA4KQo+ICsJaWYgKEdSQVBISUNTX1ZFUihnZ3R0LT52bS5pOTE1KSA+PSA4 KQo+ICAJCXNldHVwX3ByaXZhdGVfcGF0KGdndHQtPnZtLmd0LT51bmNvcmUpOwo+ICAKPiAgCWlu dGVsX2dndHRfcmVzdG9yZV9mZW5jZXMoZ2d0dCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2dndHRfZmVuY2luZy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ2d0dF9mZW5jaW5nLmMKPiBpbmRleCA3YmY4NGNkMjE1NDMuLmNhYzdmM2Y0NDY0 MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9nZ3R0X2ZlbmNp bmcuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dndHRfZmVuY2luZy5j Cj4gQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIHZvaWQgaTk2NV93cml0ZV9mZW5jZV9yZWcoc3Ry dWN0IGk5MTVfZmVuY2VfcmVnICpmZW5jZSkKPiAgCWludCBmZW5jZV9waXRjaF9zaGlmdDsKPiAg CXU2NCB2YWw7Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihmZW5jZV90b19pOTE1KGZlbmNlKSkgPj0g Nikgewo+ICsJaWYgKEdSQVBISUNTX1ZFUihmZW5jZV90b19pOTE1KGZlbmNlKSkgPj0gNikgewo+ ICAJCWZlbmNlX3JlZ19sbyA9IEZFTkNFX1JFR19HRU42X0xPKGZlbmNlLT5pZCk7Cj4gIAkJZmVu Y2VfcmVnX2hpID0gRkVOQ0VfUkVHX0dFTjZfSEkoZmVuY2UtPmlkKTsKPiAgCQlmZW5jZV9waXRj aF9zaGlmdCA9IEdFTjZfRkVOQ0VfUElUQ0hfU0hJRlQ7Cj4gQEAgLTE3Myw5ICsxNzMsOSBAQCBz dGF0aWMgdm9pZCBmZW5jZV93cml0ZShzdHJ1Y3QgaTkxNV9mZW5jZV9yZWcgKmZlbmNlKQo+ICAJ ICogYW5kIGV4cGxpY2l0bHkgbWFuYWdlZCBmb3IgaW50ZXJuYWwgdXNlcnMuCj4gIAkgKi8KPiAg Cj4gLQlpZiAoSVNfR0VOKGk5MTUsIDIpKQo+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAy KQo+ICAJCWk4MzBfd3JpdGVfZmVuY2VfcmVnKGZlbmNlKTsKPiAtCWVsc2UgaWYgKElTX0dFTihp OTE1LCAzKSkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAzKQo+ICAJCWk5MTVf d3JpdGVfZmVuY2VfcmVnKGZlbmNlKTsKPiAgCWVsc2UKPiAgCQlpOTY1X3dyaXRlX2ZlbmNlX3Jl ZyhmZW5jZSk7Cj4gQEAgLTE4OCw3ICsxODgsNyBAQCBzdGF0aWMgdm9pZCBmZW5jZV93cml0ZShz dHJ1Y3QgaTkxNV9mZW5jZV9yZWcgKmZlbmNlKQo+ICAKPiAgc3RhdGljIGJvb2wgZ3B1X3VzZXNf ZmVuY2VfcmVnaXN0ZXJzKHN0cnVjdCBpOTE1X2ZlbmNlX3JlZyAqZmVuY2UpCj4gIHsKPiAtCXJl dHVybiBJTlRFTF9HRU4oZmVuY2VfdG9faTkxNShmZW5jZSkpIDwgNDsKPiArCXJldHVybiBHUkFQ SElDU19WRVIoZmVuY2VfdG9faTkxNShmZW5jZSkpIDwgNDsKPiAgfQo+ICAKPiAgc3RhdGljIGlu dCBmZW5jZV91cGRhdGUoc3RydWN0IGk5MTVfZmVuY2VfcmVnICpmZW5jZSwKPiBAQCAtNTY5LDcg KzU2OSw3IEBAIHN0YXRpYyB2b2lkIGRldGVjdF9iaXRfNl9zd2l6emxlKHN0cnVjdCBpOTE1X2dn dHQgKmdndHQpCj4gIAl1MzIgc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047 Cj4gIAl1MzIgc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047Cj4gIAo+IC0J aWYgKElOVEVMX0dFTihpOTE1KSA+PSA4IHx8IElTX1ZBTExFWVZJRVcoaTkxNSkpIHsKPiArCWlm IChHUkFQSElDU19WRVIoaTkxNSkgPj0gOCB8fCBJU19WQUxMRVlWSUVXKGk5MTUpKSB7Cj4gIAkJ LyoKPiAgCQkgKiBPbiBCRFcrLCBzd2l6emxpbmcgaXMgbm90IHVzZWQuIFdlIGxlYXZlIHRoZSBD UFUgbWVtb3J5Cj4gIAkJICogY29udHJvbGxlciBpbiBjaGFyZ2Ugb2Ygb3B0aW1pemluZyBtZW1v cnkgYWNjZXNzZXMgd2l0aG91dAo+IEBAIC01NzksNyArNTc5LDcgQEAgc3RhdGljIHZvaWQgZGV0 ZWN0X2JpdF82X3N3aXp6bGUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkKPiAgCQkgKi8KPiAgCQlz d2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKPiAgCQlzd2l6emxlX3kgPSBJOTE1 X0JJVF82X1NXSVpaTEVfTk9ORTsKPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYp IHsKPiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpIHsKPiAgCQlpZiAoaTkx NS0+cHJlc2VydmVfYmlvc19zd2l6emxlKSB7Cj4gIAkJCWlmIChpbnRlbF91bmNvcmVfcmVhZCh1 bmNvcmUsIERJU1BfQVJCX0NUTCkgJgo+ICAJCQkgICAgRElTUF9USUxFX1NVUkZBQ0VfU1dJWlpM SU5HKSB7Cj4gQEAgLTYxMSwxNCArNjExLDE0IEBAIHN0YXRpYyB2b2lkIGRldGVjdF9iaXRfNl9z d2l6emxlKHN0cnVjdCBpOTE1X2dndHQgKmdndHQpCj4gIAkJCQlzd2l6emxlX3kgPSBJOTE1X0JJ VF82X1NXSVpaTEVfTk9ORTsKPiAgCQkJfQo+ICAJCX0KPiAtCX0gZWxzZSBpZiAoSVNfR0VOKGk5 MTUsIDUpKSB7Cj4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA1KSB7Cj4gIAkJ LyoKPiAgCQkgKiBPbiBJcm9ubGFrZSB3aGF0ZXZlciBEUkFNIGNvbmZpZywgR1BVIGFsd2F5cyBk bwo+ICAJCSAqIHNhbWUgc3dpenpsaW5nIHNldHVwLgo+ICAJCSAqLwo+ICAJCXN3aXp6bGVfeCA9 IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwOwo+ICAJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJ WlpMRV85Owo+IC0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwgMikpIHsKPiArCX0gZWxzZSBpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID09IDIpIHsKPiAgCQkvKgo+ICAJCSAqIEFzIGZhciBhcyB3ZSBr bm93LCB0aGUgODY1IGRvZXNuJ3QgaGF2ZSB0aGVzZSBiaXQgNgo+ICAJCSAqIHN3aXp6bGluZyBp c3N1ZXMuCj4gQEAgLTY5Nyw3ICs2OTcsNyBAQCBzdGF0aWMgdm9pZCBkZXRlY3RfYml0XzZfc3dp enpsZShzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+ICAJCX0KPiAgCj4gIAkJLyogY2hlY2sgZm9y IEwtc2hhcGVkIG1lbW9yeSBha2EgbW9kaWZpZWQgZW5oYW5jZWQgYWRkcmVzc2luZyAqLwo+IC0J CWlmIChJU19HRU4oaTkxNSwgNCkgJiYKPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDQg JiYKPiAgCQkgICAgIShpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERDQzIpICYgRENDMl9NT0RJ RklFRF9FTkhBTkNFRF9ESVNBQkxFKSkgewo+ICAJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NX SVpaTEVfVU5LTk9XTjsKPiAgCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05P V047Cj4gQEAgLTg0NCwxMCArODQ0LDEwIEBAIHZvaWQgaW50ZWxfZ2d0dF9pbml0X2ZlbmNlcyhz dHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+ICAKPiAgCWlmICghaTkxNV9nZ3R0X2hhc19hcGVydHVy ZShnZ3R0KSkKPiAgCQludW1fZmVuY2VzID0gMDsKPiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1 KSA+PSA3ICYmCj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNyAmJgo+ICAJCSAh KElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNfQ0hFUlJZVklFVyhpOTE1KSkpCj4gIAkJbnVtX2Zl bmNlcyA9IDMyOwo+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDQgfHwKPiArCWVsc2Ug aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA0IHx8Cj4gIAkJIElTX0k5NDVHKGk5MTUpIHx8IElT X0k5NDVHTShpOTE1KSB8fAo+ICAJCSBJU19HMzMoaTkxNSkgfHwgSVNfUElORVZJRVcoaTkxNSkp Cj4gIAkJbnVtX2ZlbmNlcyA9IDE2Owo+IEBAIC04OTUsMjkgKzg5NSwyOSBAQCB2b2lkIGludGVs X2d0X2luaXRfc3dpenpsaW5nKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IGd0LT5pOTE1Owo+ICAJc3RydWN0IGludGVsX3VuY29yZSAqdW5j b3JlID0gZ3QtPnVuY29yZTsKPiAgCj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgNSB8fAo+ICsJ aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8IDUgfHwKPiAgCSAgICBpOTE1LT5nZ3R0LmJpdF82X3N3 aXp6bGVfeCA9PSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORSkKPiAgCQlyZXR1cm47Cj4gIAo+ICAJ aW50ZWxfdW5jb3JlX3Jtdyh1bmNvcmUsIERJU1BfQVJCX0NUTCwgMCwgRElTUF9USUxFX1NVUkZB Q0VfU1dJWlpMSU5HKTsKPiAgCj4gLQlpZiAoSVNfR0VOKGk5MTUsIDUpKQo+ICsJaWYgKEdSQVBI SUNTX1ZFUihpOTE1KSA9PSA1KQo+ICAJCXJldHVybjsKPiAgCj4gIAlpbnRlbF91bmNvcmVfcm13 KHVuY29yZSwgVElMRUNUTCwgMCwgVElMRUNUTF9TV1pDVEwpOwo+ICAKPiAtCWlmIChJU19HRU4o aTkxNSwgNikpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDYpCj4gIAkJaW50ZWxfdW5j b3JlX3dyaXRlKHVuY29yZSwKPiAgCQkJCSAgIEFSQl9NT0RFLAo+ICAJCQkJICAgX01BU0tFRF9C SVRfRU5BQkxFKEFSQl9NT0RFX1NXSVpaTEVfU05CKSk7Cj4gLQllbHNlIGlmIChJU19HRU4oaTkx NSwgNykpCj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNykKPiAgCQlpbnRlbF91 bmNvcmVfd3JpdGUodW5jb3JlLAo+ICAJCQkJICAgQVJCX01PREUsCj4gIAkJCQkgICBfTUFTS0VE X0JJVF9FTkFCTEUoQVJCX01PREVfU1dJWlpMRV9JVkIpKTsKPiAtCWVsc2UgaWYgKElTX0dFTihp OTE1LCA4KSkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA4KQo+ICAJCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsCj4gIAkJCQkgICBHQU1UQVJCTU9ERSwKPiAgCQkJCSAgIF9N QVNLRURfQklUX0VOQUJMRShBUkJfTU9ERV9TV0laWkxFX0JEVykpOwo+ICAJZWxzZQo+IC0JCU1J U1NJTkdfQ0FTRShJTlRFTF9HRU4oaTkxNSkpOwo+ICsJCU1JU1NJTkdfQ0FTRShHUkFQSElDU19W RVIoaTkxNSkpOwo+ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2d0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jCj4gaW5kZXggOGQ3 N2RjYmFkMDU5Li43ZjI0MzAxY2VmMTggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0 LmMKPiBAQCAtMTE1LDEwICsxMTUsMTAgQEAgc3RhdGljIHZvaWQgaW5pdF91bnVzZWRfcmluZ3Mo c3RydWN0IGludGVsX2d0ICpndCkKPiAgCQlpbml0X3VudXNlZF9yaW5nKGd0LCBTUkIxX0JBU0Up Owo+ICAJCWluaXRfdW51c2VkX3JpbmcoZ3QsIFNSQjJfQkFTRSk7Cj4gIAkJaW5pdF91bnVzZWRf cmluZyhndCwgU1JCM19CQVNFKTsKPiAtCX0gZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDIpKSB7Cj4g Kwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAyKSB7Cj4gIAkJaW5pdF91bnVzZWRf cmluZyhndCwgU1JCMF9CQVNFKTsKPiAgCQlpbml0X3VudXNlZF9yaW5nKGd0LCBTUkIxX0JBU0Up Owo+IC0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwgMykpIHsKPiArCX0gZWxzZSBpZiAoR1JBUEhJ Q1NfVkVSKGk5MTUpID09IDMpIHsKPiAgCQlpbml0X3VudXNlZF9yaW5nKGd0LCBQUkIxX0JBU0Up Owo+ICAJCWluaXRfdW51c2VkX3JpbmcoZ3QsIFBSQjJfQkFTRSk7Cj4gIAl9Cj4gQEAgLTEzNSw3 ICsxMzUsNyBAQCBpbnQgaW50ZWxfZ3RfaW5pdF9odyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ICAJ LyogRG91YmxlIGxheWVyIHNlY3VyaXR5IGJsYW5rZXQsIHNlZSBpOTE1X2dlbV9pbml0KCkgKi8K PiAgCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KHVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4g IAo+IC0JaWYgKEhBU19FRFJBTShpOTE1KSAmJiBJTlRFTF9HRU4oaTkxNSkgPCA5KQo+ICsJaWYg KEhBU19FRFJBTShpOTE1KSAmJiBHUkFQSElDU19WRVIoaTkxNSkgPCA5KQo+ICAJCWludGVsX3Vu Y29yZV9ybXcodW5jb3JlLCBIU1dfSURJQ1IsIDAsIElESUhBU0hNU0soMHhmKSk7Cj4gIAo+ICAJ aWYgKElTX0hBU1dFTEwoaTkxNSkpCj4gQEAgLTIwOCwxMCArMjA4LDEwIEBAIGludGVsX2d0X2Ns ZWFyX2Vycm9yX3JlZ2lzdGVycyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0LAo+ICAJc3RydWN0IGludGVs X3VuY29yZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKPiAgCXUzMiBlaXI7Cj4gIAo+IC0JaWYgKCFJ U19HRU4oaTkxNSwgMikpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpICE9IDIpCj4gIAkJY2xl YXJfcmVnaXN0ZXIodW5jb3JlLCBQR1RCTF9FUik7Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihpOTE1 KSA8IDQpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDwgNCkKPiAgCQljbGVhcl9yZWdpc3Rl cih1bmNvcmUsIElQRUlSKFJFTkRFUl9SSU5HX0JBU0UpKTsKPiAgCWVsc2UKPiAgCQljbGVhcl9y ZWdpc3Rlcih1bmNvcmUsIElQRUlSX0k5NjUpOwo+IEBAIC0yMjksMTMgKzIyOSwxMyBAQCBpbnRl bF9ndF9jbGVhcl9lcnJvcl9yZWdpc3RlcnMoc3RydWN0IGludGVsX2d0ICpndCwKPiAgCQkJCSAg IEk5MTVfTUFTVEVSX0VSUk9SX0lOVEVSUlVQVCk7Cj4gIAl9Cj4gIAo+IC0JaWYgKElOVEVMX0dF TihpOTE1KSA+PSAxMikgewo+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMikgewo+ICAJ CXJtd19jbGVhcih1bmNvcmUsIEdFTjEyX1JJTkdfRkFVTFRfUkVHLCBSSU5HX0ZBVUxUX1ZBTElE KTsKPiAgCQlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkKHVuY29yZSwgR0VOMTJfUklOR19GQVVM VF9SRUcpOwo+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkgewo+ICsJfSBlbHNl IGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOCkgewo+ICAJCXJtd19jbGVhcih1bmNvcmUsIEdF TjhfUklOR19GQVVMVF9SRUcsIFJJTkdfRkFVTFRfVkFMSUQpOwo+ICAJCWludGVsX3VuY29yZV9w b3N0aW5nX3JlYWQodW5jb3JlLCBHRU44X1JJTkdfRkFVTFRfUkVHKTsKPiAtCX0gZWxzZSBpZiAo SU5URUxfR0VOKGk5MTUpID49IDYpIHsKPiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp ID49IDYpIHsKPiAgCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gIAkJZW51bSBp bnRlbF9lbmdpbmVfaWQgaWQ7Cj4gIAo+IEBAIC0yNzMsNyArMjczLDcgQEAgc3RhdGljIHZvaWQg Z2VuOF9jaGVja19mYXVsdHMoc3RydWN0IGludGVsX2d0ICpndCkKPiAgCWk5MTVfcmVnX3QgZmF1 bHRfcmVnLCBmYXVsdF9kYXRhMF9yZWcsIGZhdWx0X2RhdGExX3JlZzsKPiAgCXUzMiBmYXVsdDsK PiAgCj4gLQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA+PSAxMikgewo+ICsJaWYgKEdSQVBISUNT X1ZFUihndC0+aTkxNSkgPj0gMTIpIHsKPiAgCQlmYXVsdF9yZWcgPSBHRU4xMl9SSU5HX0ZBVUxU X1JFRzsKPiAgCQlmYXVsdF9kYXRhMF9yZWcgPSBHRU4xMl9GQVVMVF9UTEJfREFUQTA7Cj4gIAkJ ZmF1bHRfZGF0YTFfcmVnID0gR0VOMTJfRkFVTFRfVExCX0RBVEExOwo+IEBAIC0zMTMsOSArMzEz LDkgQEAgdm9pZCBpbnRlbF9ndF9jaGVja19hbmRfY2xlYXJfZmF1bHRzKHN0cnVjdCBpbnRlbF9n dCAqZ3QpCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGd0LT5pOTE1Owo+ICAK PiAgCS8qIEZyb20gR0VOOCBvbndhcmRzIHdlIG9ubHkgaGF2ZSBvbmUgJ0FsbCBFbmdpbmUgRmF1 bHQgUmVnaXN0ZXInICovCj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDgpCj4gKwlpZiAoR1JB UEhJQ1NfVkVSKGk5MTUpID49IDgpCj4gIAkJZ2VuOF9jaGVja19mYXVsdHMoZ3QpOwo+IC0JZWxz ZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkx NSkgPj0gNikKPiAgCQlnZW42X2NoZWNrX2ZhdWx0cyhndCk7Cj4gIAllbHNlCj4gIAkJcmV0dXJu Owo+IEBAIC0zNjcsNyArMzY3LDcgQEAgdm9pZCBpbnRlbF9ndF9mbHVzaF9nZ3R0X3dyaXRlcyhz dHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ICB2b2lkIGludGVsX2d0X2NoaXBzZXRfZmx1c2goc3RydWN0 IGludGVsX2d0ICpndCkKPiAgewo+ICAJd21iKCk7Cj4gLQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1 KSA8IDYpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8IDYpCj4gIAkJaW50ZWxfZ3R0 X2NoaXBzZXRfZmx1c2goKTsKPiAgfQo+ICAKPiBAQCAtNTkxLDcgKzU5MSw4IEBAIGludCBpbnRl bF9ndF9pbml0KHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIAkgKi8KPiAgCWludGVsX3VuY29yZV9m b3JjZXdha2VfZ2V0KGd0LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwo+ICAKPiAtCWVyciA9IGlu dGVsX2d0X2luaXRfc2NyYXRjaChndCwgSVNfR0VOKGd0LT5pOTE1LCAyKSA/IFNaXzI1NksgOiBT Wl80Syk7Cj4gKwllcnIgPSBpbnRlbF9ndF9pbml0X3NjcmF0Y2goZ3QsCj4gKwkJCQkgICAgR1JB UEhJQ1NfVkVSKGd0LT5pOTE1KSA9PSAyID8gU1pfMjU2SyA6IFNaXzRLKTsKPiAgCWlmIChlcnIp Cj4gIAkJZ290byBvdXRfZnc7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9ndF9jbG9ja191dGlscy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3RfY2xvY2tfdXRpbHMuYwo+IGluZGV4IDU4MmZjYWVlMTFhYS4uOWYwZTcyOWQyZDE1IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X2Nsb2NrX3V0aWxz LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9jbG9ja191dGlscy5j Cj4gQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIHUzMiByZWFkX2Nsb2NrX2ZyZXF1ZW5jeShzdHJ1 Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUpCj4gIAl1MzIgZjE5XzJfbWh6ID0gMTkyMDAwMDA7Cj4g IAl1MzIgZjI0X21oeiA9IDI0MDAwMDAwOwo+ICAKPiAtCWlmIChJTlRFTF9HRU4odW5jb3JlLT5p OTE1KSA8PSA0KSB7Cj4gKwlpZiAoR1JBUEhJQ1NfVkVSKHVuY29yZS0+aTkxNSkgPD0gNCkgewo+ ICAJCS8qCj4gIAkJICogUFJNcyBzYXk6Cj4gIAkJICoKPiBAQCAtODUsNyArODUsNyBAQCBzdGF0 aWMgdTMyIHJlYWRfY2xvY2tfZnJlcXVlbmN5KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkK PiAgCQkgKiAgICAgICjigJxDTEtDRkfigJ0pIE1DSEJBUiByZWdpc3RlcikKPiAgCQkgKi8KPiAg CQlyZXR1cm4gUlVOVElNRV9JTkZPKHVuY29yZS0+aTkxNSktPnJhd2Nsa19mcmVxICogMTAwMCAv IDE2Owo+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4odW5jb3JlLT5pOTE1KSA8PSA4KSB7Cj4gKwl9 IGVsc2UgaWYgKEdSQVBISUNTX1ZFUih1bmNvcmUtPmk5MTUpIDw9IDgpIHsKPiAgCQkvKgo+ICAJ CSAqIFBSTXMgc2F5Ogo+ICAJCSAqCj4gQEAgLTk0LDcgKzk0LDcgQEAgc3RhdGljIHUzMiByZWFk X2Nsb2NrX2ZyZXF1ZW5jeShzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUpCj4gIAkJICogICAg ICByb2xsaW5nIG92ZXIgZXZlcnkgMS41IGhvdXJzKS4KPiAgCQkgKi8KPiAgCQlyZXR1cm4gZjEy XzVfbWh6Owo+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4odW5jb3JlLT5pOTE1KSA8PSA5KSB7Cj4g Kwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUih1bmNvcmUtPmk5MTUpIDw9IDkpIHsKPiAgCQl1MzIg Y3RjX3JlZyA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgQ1RDX01PREUpOwo+ICAJCXUzMiBm cmVxID0gMDsKPiAgCj4gQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMgdTMyIHJlYWRfY2xvY2tf ZnJlcXVlbmN5KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKPiAgCQl9Cj4gIAo+ICAJCXJl dHVybiBmcmVxOwo+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4odW5jb3JlLT5pOTE1KSA8PSAxMikg ewo+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIodW5jb3JlLT5pOTE1KSA8PSAxMikgewo+ICAJ CXUzMiBjdGNfcmVnID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBDVENfTU9ERSk7Cj4gIAkJ dTMyIGZyZXEgPSAwOwo+ICAKPiBAQCAtMTI4LDcgKzEyOCw3IEBAIHN0YXRpYyB1MzIgcmVhZF9j bG9ja19mcmVxdWVuY3koc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlKQo+ICAJCX0gZWxzZSB7 Cj4gIAkJCXUzMiBjMCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUlBNX0NPTkZJRzApOwo+ ICAKPiAtCQkJaWYgKElOVEVMX0dFTih1bmNvcmUtPmk5MTUpIDw9IDEwKQo+ICsJCQlpZiAoR1JB UEhJQ1NfVkVSKHVuY29yZS0+aTkxNSkgPD0gMTApCj4gIAkJCQlmcmVxID0gZ2VuMTBfZ2V0X2Ny eXN0YWxfY2xvY2tfZnJlcSh1bmNvcmUsIGMwKTsKPiAgCQkJZWxzZQo+ICAJCQkJZnJlcSA9IGdl bjExX2dldF9jcnlzdGFsX2Nsb2NrX2ZyZXEodW5jb3JlLCBjMCk7Cj4gQEAgLTIxMSw3ICsyMTEs NyBAQCB1NjQgaW50ZWxfZ3RfbnNfdG9fcG1faW50ZXJ2YWwoY29uc3Qgc3RydWN0IGludGVsX2d0 ICpndCwgdTY0IG5zKQo+ICAJICogZnJvemVuIG1hY2hpbmUuCj4gIAkgKi8KPiAgCXZhbCA9IGRp dl91NjRfcm91bmR1cChpbnRlbF9ndF9uc190b19jbG9ja19pbnRlcnZhbChndCwgbnMpLCAxNik7 Cj4gLQlpZiAoSVNfR0VOKGd0LT5pOTE1LCA2KSkKPiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5 MTUpID09IDYpCj4gIAkJdmFsID0gZGl2X3U2NF9yb3VuZHVwKHZhbCwgMjUpICogMjU7Cj4gIAo+ ICAJcmV0dXJuIHZhbDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3RfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYwo+IGlu ZGV4IGQyOTEyNmM0NThiYS4uMWVjNjNjY2VhYmY2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2d0X2lycS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ3RfaXJxLmMKPiBAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgZ2VuNV9ndF9pcnFf cmVzZXQoc3RydWN0IGludGVsX2d0ICpndCkKPiAgCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29y ZSA9IGd0LT51bmNvcmU7Cj4gIAo+ICAJR0VOM19JUlFfUkVTRVQodW5jb3JlLCBHVCk7Cj4gLQlp ZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA+PSA2KQo+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkx NSkgPj0gNikKPiAgCQlHRU4zX0lSUV9SRVNFVCh1bmNvcmUsIEdFTjZfUE0pOwo+ICB9Cj4gIAo+ IEBAIC00MTMsMTQgKzQxMywxNCBAQCB2b2lkIGdlbjVfZ3RfaXJxX3Bvc3RpbnN0YWxsKHN0cnVj dCBpbnRlbF9ndCAqZ3QpCj4gIAl9Cj4gIAo+ICAJZ3RfaXJxcyB8PSBHVF9SRU5ERVJfVVNFUl9J TlRFUlJVUFQ7Cj4gLQlpZiAoSVNfR0VOKGd0LT5pOTE1LCA1KSkKPiArCWlmIChHUkFQSElDU19W RVIoZ3QtPmk5MTUpID09IDUpCj4gIAkJZ3RfaXJxcyB8PSBJTEtfQlNEX1VTRVJfSU5URVJSVVBU Owo+ICAJZWxzZQo+ICAJCWd0X2lycXMgfD0gR1RfQkxUX1VTRVJfSU5URVJSVVBUIHwgR1RfQlNE X1VTRVJfSU5URVJSVVBUOwo+ICAKPiAgCUdFTjNfSVJRX0lOSVQodW5jb3JlLCBHVCwgZ3QtPmd0 X2ltciwgZ3RfaXJxcyk7Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPj0gNikgewo+ ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPj0gNikgewo+ICAJCS8qCj4gIAkJICogUlBT IGludGVycnVwdHMgd2lsbCBnZXQgZW5hYmxlZC9kaXNhYmxlZCBvbiBkZW1hbmQgd2hlbiBSUFMK PiAgCQkgKiBpdHNlbGYgaXMgZW5hYmxlZC9kaXNhYmxlZC4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG1faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9ndF9wbV9pcnEuYwo+IGluZGV4IDgxMWExMWVkMTgxYy4uZmU1MWY4OTRiMDcz IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtX2lycS5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG1faXJxLmMKPiBAQCAt MTYsMTAgKzE2LDEwIEBAIHN0YXRpYyB2b2lkIHdyaXRlX3BtX2ltcihzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0KQo+ICAJdTMyIG1hc2sgPSBndC0+cG1faW1yOwo+ICAJaTkxNV9yZWdfdCByZWc7Cj4gIAo+ IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMSkgewo+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1 KSA+PSAxMSkgewo+ICAJCXJlZyA9IEdFTjExX0dQTV9XR0JPWFBFUkZfSU5UUl9NQVNLOwo+ICAJ CW1hc2sgPDw9IDE2OyAvKiBwbSBpcyBpbiB1cHBlciBoYWxmICovCj4gLQl9IGVsc2UgaWYgKElO VEVMX0dFTihpOTE1KSA+PSA4KSB7Cj4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+ PSA4KSB7Cj4gIAkJcmVnID0gR0VOOF9HVF9JTVIoMik7Cj4gIAl9IGVsc2Ugewo+ICAJCXJlZyA9 IEdFTjZfUE1JTVI7Cj4gQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBnZW42X2d0X3BtX21hc2tfaXJx KHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiBtYXNrKQo+ICB2b2lkIGdlbjZfZ3RfcG1fcmVzZXRf aWlyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiByZXNldF9tYXNrKQo+ICB7Cj4gIAlzdHJ1Y3Qg aW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwo+IC0JaTkxNV9yZWdfdCByZWcgPSBJ TlRFTF9HRU4oZ3QtPmk5MTUpID49IDggPyBHRU44X0dUX0lJUigyKSA6IEdFTjZfUE1JSVI7Cj4g KwlpOTE1X3JlZ190IHJlZyA9IEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPj0gOCA/IEdFTjhfR1Rf SUlSKDIpIDogR0VONl9QTUlJUjsKPiAgCj4gIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZndC0+aXJx X2xvY2spOwo+ICAKPiBAQCAtNzcsMTAgKzc3LDEwIEBAIHN0YXRpYyB2b2lkIHdyaXRlX3BtX2ll cihzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ICAJdTMyIG1hc2sgPSBndC0+cG1faWVyOwo+ICAJaTkx NV9yZWdfdCByZWc7Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMSkgewo+ICsJaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMSkgewo+ICAJCXJlZyA9IEdFTjExX0dQTV9XR0JPWFBF UkZfSU5UUl9FTkFCTEU7Cj4gIAkJbWFzayA8PD0gMTY7IC8qIHBtIGlzIGluIHVwcGVyIGhhbGYg Ki8KPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDgpIHsKPiArCX0gZWxzZSBpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID49IDgpIHsKPiAgCQlyZWcgPSBHRU44X0dUX0lFUigyKTsKPiAg CX0gZWxzZSB7Cj4gIAkJcmVnID0gR0VONl9QTUlFUjsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ndHQuYwo+IGluZGV4IDliOThmOWQ5ZmFhMy4uYjljOTk5MzU3M2VjIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0dC5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfZ3R0LmMKPiBAQCAtMzI3LDcgKzMyNyw3IEBAIHZvaWQgZ3R0X3dy aXRlX3dvcmthcm91bmRzKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIAkJaW50ZWxfdW5jb3JlX3dy aXRlKHVuY29yZSwKPiAgCQkJCSAgIEdFTjhfTDNfTFJBXzFfR1BHUFUsCj4gIAkJCQkgICBHRU45 X0wzX0xSQV8xX0dQR1BVX0RFRkFVTFRfVkFMVUVfQlhUKTsKPiAtCWVsc2UgaWYgKElOVEVMX0dF TihpOTE1KSA+PSA5ICYmIElOVEVMX0dFTihpOTE1KSA8PSAxMSkKPiArCWVsc2UgaWYgKEdSQVBI SUNTX1ZFUihpOTE1KSA+PSA5ICYmIEdSQVBISUNTX1ZFUihpOTE1KSA8PSAxMSkKPiAgCQlpbnRl bF91bmNvcmVfd3JpdGUodW5jb3JlLAo+ICAJCQkJICAgR0VOOF9MM19MUkFfMV9HUEdQVSwKPiAg CQkJCSAgIEdFTjlfTDNfTFJBXzFfR1BHUFVfREVGQVVMVF9WQUxVRV9TS0wpOwo+IEBAIC0zNDQs MTMgKzM0NCwxMyBAQCB2b2lkIGd0dF93cml0ZV93b3JrYXJvdW5kcyhzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0KQo+ICAJICogZHJpdmVyLgo+ICAJICovCj4gIAlpZiAoSEFTX1BBR0VfU0laRVMoaTkxNSwg STkxNV9HVFRfUEFHRV9TSVpFXzY0SykgJiYKPiAtCSAgICBJTlRFTF9HRU4oaTkxNSkgPD0gMTAp Cj4gKwkgICAgR1JBUEhJQ1NfVkVSKGk5MTUpIDw9IDEwKQo+ICAJCWludGVsX3VuY29yZV9ybXco dW5jb3JlLAo+ICAJCQkJIEdFTjhfR0FNV19FQ09fREVWX1JXX0lBLAo+ICAJCQkJIDAsCj4gIAkJ CQkgR0FNV19FQ09fRU5BQkxFXzY0S19JUFNfRklFTEQpOwo+ICAKPiAtCWlmIChJU19HRU5fUkFO R0UoaTkxNSwgOCwgMTEpKSB7Cj4gKwlpZiAoSVNfR1JBUEhJQ1NfVkVSKGk5MTUsIDgsIDExKSkg ewo+ICAJCWJvb2wgY2FuX3VzZV9ndHRfY2FjaGUgPSB0cnVlOwo+ICAKPiAgCQkvKgo+IEBAIC00 MzIsNyArNDMyLDcgQEAgc3RhdGljIHZvaWQgYmR3X3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3Qg aW50ZWxfdW5jb3JlICp1bmNvcmUpCj4gIAkgICAgICBHRU44X1BQQVQoNywgR0VOOF9QUEFUX1dC IHwgR0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDMpKTsKPiAgCj4gIAkvKiBmb3Ig c2Nhbm91dCB3aXRoIGVMTEMgKi8KPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKPiArCWlm IChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkKPiAgCQlwYXQgfD0gR0VOOF9QUEFUKDIsIEdFTjhf UFBBVF9XQiB8IEdFTjhfUFBBVF9FTExDX09WRVJSSURFKTsKPiAgCWVsc2UKPiAgCQlwYXQgfD0g R0VOOF9QUEFUKDIsIEdFTjhfUFBBVF9XVCB8IEdFTjhfUFBBVF9MTENFTExDKTsKPiBAQCAtNDgx LDExICs0ODEsMTEgQEAgdm9pZCBzZXR1cF9wcml2YXRlX3BhdChzdHJ1Y3QgaW50ZWxfdW5jb3Jl ICp1bmNvcmUpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdW5jb3Jl LT5pOTE1Owo+ICAKPiAtCUdFTV9CVUdfT04oSU5URUxfR0VOKGk5MTUpIDwgOCk7Cj4gKwlHRU1f QlVHX09OKEdSQVBISUNTX1ZFUihpOTE1KSA8IDgpOwo+ICAKPiAtCWlmIChJTlRFTF9HRU4oaTkx NSkgPj0gMTIpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDEyKQo+ICAJCXRnbF9zZXR1 cF9wcml2YXRlX3BwYXQodW5jb3JlKTsKPiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSAx MCkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMCkKPiAgCQljbmxfc2V0dXBf cHJpdmF0ZV9wcGF0KHVuY29yZSk7Cj4gIAllbHNlIGlmIChJU19DSEVSUllWSUVXKGk5MTUpIHx8 IElTX0dFTjlfTFAoaTkxNSkpCj4gIAkJY2h2X3NldHVwX3ByaXZhdGVfcHBhdCh1bmNvcmUpOwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xsYy5jCj4gaW5kZXggMDc1ZDc0MTY0NGFlLi5lYjFh MTVkZWVkMjIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbGxj LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYwo+IEBAIC02NCw3 ICs2NCw3IEBAIHN0YXRpYyBib29sIGdldF9pYV9jb25zdGFudHMoc3RydWN0IGludGVsX2xsYyAq bGxjLAo+ICAKPiAgCWNvbnN0cy0+bWluX2dwdV9mcmVxID0gcnBzLT5taW5fZnJlcTsKPiAgCWNv bnN0cy0+bWF4X2dwdV9mcmVxID0gcnBzLT5tYXhfZnJlcTsKPiAtCWlmIChJTlRFTF9HRU4oaTkx NSkgPj0gOSkgewo+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KSB7Cj4gIAkJLyogQ29u dmVydCBHVCBmcmVxdWVuY3kgdG8gNTAgSFogdW5pdHMgKi8KPiAgCQljb25zdHMtPm1pbl9ncHVf ZnJlcSAvPSBHRU45X0ZSRVFfU0NBTEVSOwo+ICAJCWNvbnN0cy0+bWF4X2dwdV9mcmVxIC89IEdF TjlfRlJFUV9TQ0FMRVI7Cj4gQEAgLTgzLDEzICs4MywxMyBAQCBzdGF0aWMgdm9pZCBjYWxjX2lh X2ZyZXEoc3RydWN0IGludGVsX2xsYyAqbGxjLAo+ICAJY29uc3QgaW50IGRpZmYgPSBjb25zdHMt Pm1heF9ncHVfZnJlcSAtIGdwdV9mcmVxOwo+ICAJdW5zaWduZWQgaW50IGlhX2ZyZXEgPSAwLCBy aW5nX2ZyZXEgPSAwOwo+ICAKPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkgewo+ICsJaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KSB7Cj4gIAkJLyoKPiAgCQkgKiByaW5nX2ZyZXEgPSAy ICogR1QuIHJpbmdfZnJlcSBpcyBpbiAxMDBNSHogdW5pdHMKPiAgCQkgKiBObyBmbG9vciByZXF1 aXJlZCBmb3IgcmluZyBmcmVxdWVuY3kgb24gU0tMLgo+ICAJCSAqLwo+ICAJCXJpbmdfZnJlcSA9 IGdwdV9mcmVxOwo+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkgewo+ICsJfSBl bHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOCkgewo+ICAJCS8qIG1heCgyICogR1QsIERE UikuIE5COiBHVCBpcyA1ME1IeiB1bml0cyAqLwo+ICAJCXJpbmdfZnJlcSA9IG1heChjb25zdHMt Pm1pbl9yaW5nX2ZyZXEsIGdwdV9mcmVxKTsKPiAgCX0gZWxzZSBpZiAoSVNfSEFTV0VMTChpOTE1 KSkgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCj4gaW5kZXggYWFmZTJhNGRmNDk2 Li5hMjdiYWMwYTRiZmIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfbHJjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwo+IEBA IC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyB2b2lkIHNldF9vZmZzZXRzKHUzMiAqcmVncywKPiAgCQkq cmVncyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKGNvdW50KTsKPiAgCQlpZiAoZmxhZ3MgJiBQT1NU RUQpCj4gIAkJCSpyZWdzIHw9IE1JX0xSSV9GT1JDRV9QT1NURUQ7Cj4gLQkJaWYgKElOVEVMX0dF TihlbmdpbmUtPmk5MTUpID49IDExKQo+ICsJCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1 KSA+PSAxMSkKPiAgCQkJKnJlZ3MgfD0gTUlfTFJJX0xSTV9DU19NTUlPOwo+ICAJCXJlZ3MrKzsK PiAgCj4gQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIHZvaWQgc2V0X29mZnNldHModTMyICpyZWdz LAo+ICAJaWYgKGNsb3NlKSB7Cj4gIAkJLyogQ2xvc2UgdGhlIGJhdGNoOyB1c2VkIG1haW5seSBi eSBsaXZlX2xyY19sYXlvdXQoKSAqLwo+ICAJCSpyZWdzID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsK PiAtCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTApCj4gKwkJaWYgKEdSQVBISUNT X1ZFUihlbmdpbmUtPmk5MTUpID49IDEwKQo+ICAJCQkqcmVncyB8PSBCSVQoMCk7Cj4gIAl9Cj4g IH0KPiBAQCAtNDk4LDIyICs0OTgsMjIgQEAgc3RhdGljIGNvbnN0IHU4ICpyZWdfb2Zmc2V0cyhj b25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkgKiBhZGRyZXNzaW5nIHRv IGF1dG9tYXRpYyBmaXh1cCB0aGUgcmVnaXN0ZXIgc3RhdGUgYmV0d2VlbiB0aGUKPiAgCSAqIHBo eXNpY2FsIGVuZ2luZXMgZm9yIHZpcnR1YWwgZW5naW5lLgo+ICAJICovCj4gLQlHRU1fQlVHX09O KElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEyICYmCj4gKwlHRU1fQlVHX09OKEdSQVBISUNT X1ZFUihlbmdpbmUtPmk5MTUpID49IDEyICYmCj4gIAkJICAgIWludGVsX2VuZ2luZV9oYXNfcmVs YXRpdmVfbW1pbyhlbmdpbmUpKTsKPiAgCj4gIAlpZiAoZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJf Q0xBU1MpIHsKPiAtCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4gKwkJaWYg KEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDEyKQo+ICAJCQlyZXR1cm4gZ2VuMTJfcmNz X29mZnNldHM7Cj4gLQkJZWxzZSBpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTEpCj4g KwkJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gMTEpCj4gIAkJCXJldHVy biBnZW4xMV9yY3Nfb2Zmc2V0czsKPiAtCQllbHNlIGlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1 KSA+PSA5KQo+ICsJCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDkpCj4g IAkJCXJldHVybiBnZW45X3Jjc19vZmZzZXRzOwo+ICAJCWVsc2UKPiAgCQkJcmV0dXJuIGdlbjhf cmNzX29mZnNldHM7Cj4gIAl9IGVsc2Ugewo+IC0JCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1 KSA+PSAxMikKPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4gIAkJ CXJldHVybiBnZW4xMl94Y3Nfb2Zmc2V0czsKPiAtCQllbHNlIGlmIChJTlRFTF9HRU4oZW5naW5l LT5pOTE1KSA+PSA5KQo+ICsJCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49 IDkpCj4gIAkJCXJldHVybiBnZW45X3hjc19vZmZzZXRzOwo+ICAJCWVsc2UKPiAgCQkJcmV0dXJu IGdlbjhfeGNzX29mZnNldHM7Cj4gQEAgLTUyMiw5ICs1MjIsOSBAQCBzdGF0aWMgY29uc3QgdTgg KnJlZ19vZmZzZXRzKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCj4g IHN0YXRpYyBpbnQgbHJjX3JpbmdfbWlfbW9kZShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gIHsKPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKPiAr CWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMikKPiAgCQlyZXR1cm4gMHg2MDsK PiAtCWVsc2UgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDkpCj4gKwllbHNlIGlmIChH UkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSA5KQo+ICAJCXJldHVybiAweDU0Owo+ICAJZWxz ZSBpZiAoZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1MpCj4gIAkJcmV0dXJuIDB4NTg7Cj4g QEAgLTUzNCw5ICs1MzQsOSBAQCBzdGF0aWMgaW50IGxyY19yaW5nX21pX21vZGUoY29uc3Qgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAKPiAgc3RhdGljIGludCBscmNfcmluZ19n cHIwKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+IC0JaWYgKElO VEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEyKQo+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUt Pmk5MTUpID49IDEyKQo+ICAJCXJldHVybiAweDc0Owo+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGVu Z2luZS0+aTkxNSkgPj0gOSkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUp ID49IDkpCj4gIAkJcmV0dXJuIDB4Njg7Cj4gIAllbHNlIGlmIChlbmdpbmUtPmNsYXNzID09IFJF TkRFUl9DTEFTUykKPiAgCQlyZXR1cm4gMHhkODsKPiBAQCAtNTQ2LDkgKzU0Niw5IEBAIHN0YXRp YyBpbnQgbHJjX3JpbmdfZ3ByMChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gIAo+ICBzdGF0aWMgaW50IGxyY19yaW5nX3dhX2JiX3Blcl9jdHgoY29uc3Qgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkx NSkgPj0gMTIpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4gIAkJ cmV0dXJuIDB4MTI7Cj4gLQllbHNlIGlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA5IHx8 IGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKQo+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVS KGVuZ2luZS0+aTkxNSkgPj0gOSB8fCBlbmdpbmUtPmNsYXNzID09IFJFTkRFUl9DTEFTUykKPiAg CQlyZXR1cm4gMHgxODsKPiAgCWVsc2UKPiAgCQlyZXR1cm4gLTE7Cj4gQEAgLTU4MSw5ICs1ODEs OSBAQCBzdGF0aWMgaW50IGxyY19yaW5nX2NtZF9idWZfY2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gIAlpZiAoZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1Mp Cj4gIAkJcmV0dXJuIC0xOwo+ICAKPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAx MikKPiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMikKPiAgCQlyZXR1cm4g MHhiNjsKPiAtCWVsc2UgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDExKQo+ICsJZWxz ZSBpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gMTEpCj4gIAkJcmV0dXJuIDB4YWE7 Cj4gIAllbHNlCj4gIAkJcmV0dXJuIC0xOwo+IEBAIC01OTIsOSArNTkyLDkgQEAgc3RhdGljIGlu dCBscmNfcmluZ19jbWRfYnVmX2NjdGwoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+ICBzdGF0aWMgdTMyCj4gIGxyY19yaW5nX2luZGlyZWN0X29mZnNldF9kZWZhdWx0KGNv bnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+IC0Jc3dpdGNoIChJTlRF TF9HRU4oZW5naW5lLT5pOTE1KSkgewo+ICsJc3dpdGNoIChHUkFQSElDU19WRVIoZW5naW5lLT5p OTE1KSkgewo+ICAJZGVmYXVsdDoKPiAtCQlNSVNTSU5HX0NBU0UoSU5URUxfR0VOKGVuZ2luZS0+ aTkxNSkpOwo+ICsJCU1JU1NJTkdfQ0FTRShHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSk7Cj4g IAkJZmFsbHRocm91Z2g7Cj4gIAljYXNlIDEyOgo+ICAJCXJldHVybiBHRU4xMl9DVFhfUkNTX0lO RElSRUNUX0NUWF9PRkZTRVRfREVGQVVMVDsKPiBAQCAtNjM3LDcgKzYzNyw3IEBAIHN0YXRpYyB2 b2lkIGluaXRfY29tbW9uX3JlZ3ModTMyICogY29uc3QgcmVncywKPiAgCWN0bCB8PSBfTUFTS0VE X0JJVF9ESVNBQkxFKENUWF9DVFJMX0VOR0lORV9DVFhfUkVTVE9SRV9JTkhJQklUKTsKPiAgCWlm IChpbmhpYml0KQo+ICAJCWN0bCB8PSBDVFhfQ1RSTF9FTkdJTkVfQ1RYX1JFU1RPUkVfSU5ISUJJ VDsKPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8IDExKQo+ICsJaWYgKEdSQVBISUNT X1ZFUihlbmdpbmUtPmk5MTUpIDwgMTEpCj4gIAkJY3RsIHw9IF9NQVNLRURfQklUX0RJU0FCTEUo Q1RYX0NUUkxfRU5HSU5FX0NUWF9TQVZFX0lOSElCSVQgfAo+ICAJCQkJCSAgIENUWF9DVFJMX1JT X0NUWF9FTkFCTEUpOwo+ICAJcmVnc1tDVFhfQ09OVEVYVF9DT05UUk9MXSA9IGN0bDsKPiBAQCAt ODA1LDcgKzgwNSw3IEBAIF9fbHJjX2FsbG9jX3N0YXRlKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSwgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJaWYgKElTX0VOQUJMRUQoQ09O RklHX0RSTV9JOTE1X0RFQlVHX0dFTSkpCj4gIAkJY29udGV4dF9zaXplICs9IEk5MTVfR1RUX1BB R0VfU0laRTsgLyogZm9yIHJlZHpvbmUgKi8KPiAgCj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+ aTkxNSkgPT0gMTIpIHsKPiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA9PSAxMikg ewo+ICAJCWNlLT53YV9iYl9wYWdlID0gY29udGV4dF9zaXplIC8gUEFHRV9TSVpFOwo+ICAJCWNv bnRleHRfc2l6ZSArPSBQQUdFX1NJWkU7Cj4gIAl9Cj4gQEAgLTExMTQsNyArMTExNCw3IEBAIHN0 YXRpYyB1MzIgbHJjX2Rlc2NyaXB0b3IoY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+ ICAJZGVzYyA8PD0gR0VOOF9DVFhfQUREUkVTU0lOR19NT0RFX1NISUZUOwo+ICAKPiAgCWRlc2Mg fD0gR0VOOF9DVFhfVkFMSUQgfCBHRU44X0NUWF9QUklWSUxFR0U7Cj4gLQlpZiAoSVNfR0VOKGNl LT52bS0+aTkxNSwgOCkpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGNlLT52bS0+aTkxNSkgPT0gOCkK PiAgCQlkZXNjIHw9IEdFTjhfQ1RYX0wzTExDX0NPSEVSRU5UOwo+ICAKPiAgCXJldHVybiBpOTE1 X2dndHRfb2Zmc2V0KGNlLT5zdGF0ZSkgfCBkZXNjOwo+IEBAIC0xNDY5LDcgKzE0NjksNyBAQCB2 b2lkIGxyY19pbml0X3dhX2N0eChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAlp ZiAoZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4gIAkJcmV0dXJuOwo+ICAKPiAtCXN3 aXRjaCAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpIHsKPiArCXN3aXRjaCAoR1JBUEhJQ1NfVkVS KGVuZ2luZS0+aTkxNSkpIHsKPiAgCWNhc2UgMTI6Cj4gIAljYXNlIDExOgo+ICAJCXJldHVybjsK PiBAQCAtMTQ4Niw3ICsxNDg2LDcgQEAgdm9pZCBscmNfaW5pdF93YV9jdHgoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJCXdhX2JiX2ZuWzFdID0gTlVMTDsKPiAgCQlicmVhazsK PiAgCWRlZmF1bHQ6Cj4gLQkJTUlTU0lOR19DQVNFKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKTsK PiArCQlNSVNTSU5HX0NBU0UoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkpOwo+ICAJCXJldHVy bjsKPiAgCX0KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X21vY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX21vY3MuYwo+IGluZGV4IGIx NDEzOGZkNTA1Yy4uMTc4NDg4MDdmMTExIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX21vY3MuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X21vY3MuYwo+IEBAIC0zNDQsMTEgKzM0NCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9t b2NzX3NldHRpbmdzKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAJCXRh YmxlLT5zaXplID0gQVJSQVlfU0laRShkZzFfbW9jc190YWJsZSk7Cj4gIAkJdGFibGUtPnRhYmxl ID0gZGcxX21vY3NfdGFibGU7Cj4gIAkJdGFibGUtPm5fZW50cmllcyA9IEdFTjlfTlVNX01PQ1Nf RU5UUklFUzsKPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDEyKSB7Cj4gKwl9IGVs c2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMikgewo+ICAJCXRhYmxlLT5zaXplICA9IEFS UkFZX1NJWkUodGdsX21vY3NfdGFibGUpOwo+ICAJCXRhYmxlLT50YWJsZSA9IHRnbF9tb2NzX3Rh YmxlOwo+ICAJCXRhYmxlLT5uX2VudHJpZXMgPSBHRU45X05VTV9NT0NTX0VOVFJJRVM7Cj4gLQl9 IGVsc2UgaWYgKElTX0dFTihpOTE1LCAxMSkpIHsKPiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVS KGk5MTUpID09IDExKSB7Cj4gIAkJdGFibGUtPnNpemUgID0gQVJSQVlfU0laRShpY2xfbW9jc190 YWJsZSk7Cj4gIAkJdGFibGUtPnRhYmxlID0gaWNsX21vY3NfdGFibGU7Cj4gIAkJdGFibGUtPm5f ZW50cmllcyA9IEdFTjlfTlVNX01PQ1NfRU5UUklFUzsKPiBAQCAtMzYxLDcgKzM2MSw3IEBAIHN0 YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X21vY3Nfc2V0dGluZ3MoY29uc3Qgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsCj4gIAkJdGFibGUtPm5fZW50cmllcyA9IEdFTjlfTlVNX01PQ1NfRU5U UklFUzsKPiAgCQl0YWJsZS0+dGFibGUgPSBicm94dG9uX21vY3NfdGFibGU7Cj4gIAl9IGVsc2Ug ewo+IC0JCWRybV9XQVJOX09OQ0UoJmk5MTUtPmRybSwgSU5URUxfR0VOKGk5MTUpID49IDksCj4g KwkJZHJtX1dBUk5fT05DRSgmaTkxNS0+ZHJtLCBHUkFQSElDU19WRVIoaTkxNSkgPj0gOSwKPiAg CQkJICAgICAgIlBsYXRmb3JtIHRoYXQgc2hvdWxkIGhhdmUgYSBNT0NTIHRhYmxlIGRvZXMgbm90 LlxuIik7Cj4gIAkJcmV0dXJuIDA7Cj4gIAl9Cj4gQEAgLTM3MCw3ICszNzAsNyBAQCBzdGF0aWMg dW5zaWduZWQgaW50IGdldF9tb2NzX3NldHRpbmdzKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1LAo+ICAJCXJldHVybiAwOwo+ICAKPiAgCS8qIFdhRGlzYWJsZVNraXBDYWNoaW5n OnNrbCxieHQsa2JsLGdsayAqLwo+IC0JaWYgKElTX0dFTihpOTE1LCA5KSkgewo+ICsJaWYgKEdS QVBISUNTX1ZFUihpOTE1KSA9PSA5KSB7Cj4gIAkJaW50IGk7Cj4gIAo+ICAJCWZvciAoaSA9IDA7 IGkgPCB0YWJsZS0+c2l6ZTsgaSsrKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9wcGd0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcHBndHQu Ywo+IGluZGV4IDRlM2Q4MGMyMjk1Yy4uMzg5MWMwNzg5MDZlIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3BwZ3R0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9wcGd0dC5jCj4gQEAgLTE0Niw5ICsxNDYsOSBAQCBpbnQgaTkxNV9wcGd0 dF9pbml0X2h3KHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIAo+ICAJZ3R0X3dyaXRlX3dvcmthcm91 bmRzKGd0KTsKPiAgCj4gLQlpZiAoSVNfR0VOKGk5MTUsIDYpKQo+ICsJaWYgKEdSQVBISUNTX1ZF UihpOTE1KSA9PSA2KQo+ICAJCWdlbjZfcHBndHRfZW5hYmxlKGd0KTsKPiAtCWVsc2UgaWYgKElT X0dFTihpOTE1LCA3KSkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA3KQo+ICAJ CWdlbjdfcHBndHRfZW5hYmxlKGd0KTsKPiAgCj4gIAlyZXR1cm4gMDsKPiBAQCAtMTU3LDcgKzE1 Nyw3IEBAIGludCBpOTE1X3BwZ3R0X2luaXRfaHcoc3RydWN0IGludGVsX2d0ICpndCkKPiAgc3Rh dGljIHN0cnVjdCBpOTE1X3BwZ3R0ICoKPiAgX19wcGd0dF9jcmVhdGUoc3RydWN0IGludGVsX2d0 ICpndCkKPiAgewo+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPCA4KQo+ICsJaWYgKEdSQVBI SUNTX1ZFUihndC0+aTkxNSkgPCA4KQo+ICAJCXJldHVybiBnZW42X3BwZ3R0X2NyZWF0ZShndCk7 Cj4gIAllbHNlCj4gIAkJcmV0dXJuIGdlbjhfcHBndHRfY3JlYXRlKGd0KTsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmM2LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9yYzYuYwo+IGluZGV4IDNiN2U2MmRlYmU3ZS4uMjU5ZDdlYjRlMTY1IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JjNi5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmM2LmMKPiBAQCAtMTA5LDcgKzEwOSw3IEBA IHN0YXRpYyB2b2lkIGdlbjExX3JjNl9lbmFibGUoc3RydWN0IGludGVsX3JjNiAqcmM2KQo+ICAJ CUdFTjlfTUVESUFfUEdfRU5BQkxFIHwKPiAgCQlHRU4xMV9NRURJQV9TQU1QTEVSX1BHX0VOQUJM RTsKPiAgCj4gLQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA+PSAxMikgewo+ICsJaWYgKEdSQVBI SUNTX1ZFUihndC0+aTkxNSkgPj0gMTIpIHsKPiAgCQlmb3IgKGkgPSAwOyBpIDwgSTkxNV9NQVhf VkNTOyBpKyspCj4gIAkJCWlmIChIQVNfRU5HSU5FKGd0LCBfVkNTKGkpKSkKPiAgCQkJCXBnX2Vu YWJsZSB8PSAoVkROX0hDUF9QT1dFUkdBVEVfRU5BQkxFKGkpIHwKPiBAQCAtMTI2LDcgKzEyNiw3 IEBAIHN0YXRpYyB2b2lkIGdlbjlfcmM2X2VuYWJsZShzdHJ1Y3QgaW50ZWxfcmM2ICpyYzYpCj4g IAllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiAgCj4gIAkvKiAyYjogUHJvZ3JhbSBSQzYgdGhy ZXNob2xkcy4qLwo+IC0JaWYgKElOVEVMX0dFTihyYzZfdG9faTkxNShyYzYpKSA+PSAxMCkgewo+ ICsJaWYgKEdSQVBISUNTX1ZFUihyYzZfdG9faTkxNShyYzYpKSA+PSAxMCkgewo+ICAJCXNldCh1 bmNvcmUsIEdFTjZfUkM2X1dBS0VfUkFURV9MSU1JVCwgNTQgPDwgMTYgfCA4NSk7Cj4gIAkJc2V0 KHVuY29yZSwgR0VOMTBfTUVESUFfV0FLRV9SQVRFX0xJTUlULCAxNTApOwo+ICAJfSBlbHNlIGlm IChJU19TS1lMQUtFKHJjNl90b19pOTE1KHJjNikpKSB7Cj4gQEAgLTI0OSw5ICsyNDksOSBAQCBz dGF0aWMgdm9pZCBnZW42X3JjNl9lbmFibGUoc3RydWN0IGludGVsX3JjNiAqcmM2KQo+ICAJcmM2 dmlkcyA9IDA7Cj4gIAlyZXQgPSBzYW5keWJyaWRnZV9wY29kZV9yZWFkKGk5MTUsIEdFTjZfUENP REVfUkVBRF9SQzZWSURTLAo+ICAJCQkJICAgICAmcmM2dmlkcywgTlVMTCk7Cj4gLQlpZiAoSVNf R0VOKGk5MTUsIDYpICYmIHJldCkgewo+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2ICYm IHJldCkgewo+ICAJCWRybV9kYmcoJmk5MTUtPmRybSwgIkNvdWxkbid0IGNoZWNrIGZvciBCSU9T IHdvcmthcm91bmRcbiIpOwo+IC0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwgNikgJiYKPiArCX0g ZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDYgJiYKPiAgCQkgICAoR0VONl9ERUNPREVf UkM2X1ZJRChyYzZ2aWRzICYgMHhmZikgPCA0NTApKSB7Cj4gIAkJZHJtX2RiZygmaTkxNS0+ZHJt LAo+ICAJCQkiWW91IHNob3VsZCB1cGRhdGUgeW91ciBCSU9TLiBDb3JyZWN0aW5nIG1pbmltdW0g cmM2IHZvbHRhZ2UgKCVkbVYtPiVkbVYpXG4iLAo+IEBAIC01MTUsNyArNTE1LDcgQEAgc3RhdGlj IHZvaWQgX19pbnRlbF9yYzZfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfcmM2ICpyYzYpCj4gIAlzdHJ1 Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSByYzZfdG9fdW5jb3JlKHJjNik7Cj4gIAo+ICAJaW50 ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQodW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKPiAtCWlmIChJ TlRFTF9HRU4oaTkxNSkgPj0gOSkKPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkKPiAg CQlzZXQodW5jb3JlLCBHRU45X1BHX0VOQUJMRSwgMCk7Cj4gIAlzZXQodW5jb3JlLCBHRU42X1JD X0NPTlRST0wsIDApOwo+ICAJc2V0KHVuY29yZSwgR0VONl9SQ19TVEFURSwgMCk7Cj4gQEAgLTU3 NSwxMyArNTc1LDEzIEBAIHZvaWQgaW50ZWxfcmM2X2VuYWJsZShzdHJ1Y3QgaW50ZWxfcmM2ICpy YzYpCj4gIAkJY2h2X3JjNl9lbmFibGUocmM2KTsKPiAgCWVsc2UgaWYgKElTX1ZBTExFWVZJRVco aTkxNSkpCj4gIAkJdmx2X3JjNl9lbmFibGUocmM2KTsKPiAtCWVsc2UgaWYgKElOVEVMX0dFTihp OTE1KSA+PSAxMSkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMSkKPiAgCQln ZW4xMV9yYzZfZW5hYmxlKHJjNik7Cj4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkK PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KQo+ICAJCWdlbjlfcmM2X2VuYWJs ZShyYzYpOwo+ICAJZWxzZSBpZiAoSVNfQlJPQURXRUxMKGk5MTUpKQo+ICAJCWdlbjhfcmM2X2Vu YWJsZShyYzYpOwo+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCj4gKwllbHNlIGlm IChHUkFQSElDU19WRVIoaTkxNSkgPj0gNikKPiAgCQlnZW42X3JjNl9lbmFibGUocmM2KTsKPiAg Cj4gIAlyYzYtPm1hbnVhbCA9IHJjNi0+Y3RsX2VuYWJsZSAmIEdFTjZfUkNfQ1RMX1JDNl9FTkFC TEU7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JlbmRlcnN0 YXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZW5kZXJzdGF0ZS5jCj4gaW5k ZXggYjAzZTE5N2IxZDk5Li5iNTc1Y2Q2ZTBiN2EgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfcmVuZGVyc3RhdGUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX3JlbmRlcnN0YXRlLmMKPiBAQCAtMTUsNyArMTUsNyBAQCByZW5kZXJfc3Rh dGVfZ2V0X3JvZGF0YShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAlp ZiAoZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4gIAkJcmV0dXJuIE5VTEw7Cj4gIAo+ IC0Jc3dpdGNoIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSkgewo+ICsJc3dpdGNoIChHUkFQSElD U19WRVIoZW5naW5lLT5pOTE1KSkgewo+ICAJY2FzZSA2Ogo+ICAJCXJldHVybiAmZ2VuNl9udWxs X3N0YXRlOwo+ICAJY2FzZSA3Ogo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9yZXNldC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYwo+ IGluZGV4IGQ1MDk0YmU2ZDkwZi4uMjczMTVkN2Y4OTM1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9yZXNldC5jCj4gQEAgLTU2NSw3ICs1NjUsNyBAQCBzdGF0aWMgaW50IGdlbjhf cmVzZXRfZW5naW5lcyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0LAo+ICAJCSAqLwo+ICAJfQo+ICAKPiAt CWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpID49IDExKQo+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+ aTkxNSkgPj0gMTEpCj4gIAkJcmV0ID0gZ2VuMTFfcmVzZXRfZW5naW5lcyhndCwgZW5naW5lX21h c2ssIHJldHJ5KTsKPiAgCWVsc2UKPiAgCQlyZXQgPSBnZW42X3Jlc2V0X2VuZ2luZXMoZ3QsIGVu Z2luZV9tYXNrLCByZXRyeSk7Cj4gQEAgLTU5NCwxNyArNTk0LDE3IEBAIHN0YXRpYyByZXNldF9m dW5jIGludGVsX2dldF9ncHVfcmVzZXQoY29uc3Qgc3RydWN0IGludGVsX2d0ICpndCkKPiAgCj4g IAlpZiAoaXNfbW9ja19ndChndCkpCj4gIAkJcmV0dXJuIG1vY2tfcmVzZXQ7Cj4gLQllbHNlIGlm IChJTlRFTF9HRU4oaTkxNSkgPj0gOCkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+ PSA4KQo+ICAJCXJldHVybiBnZW44X3Jlc2V0X2VuZ2luZXM7Cj4gLQllbHNlIGlmIChJTlRFTF9H RU4oaTkxNSkgPj0gNikKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KQo+ICAJ CXJldHVybiBnZW42X3Jlc2V0X2VuZ2luZXM7Cj4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkg Pj0gNSkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA1KQo+ICAJCXJldHVybiBp bGtfZG9fcmVzZXQ7Cj4gIAllbHNlIGlmIChJU19HNFgoaTkxNSkpCj4gIAkJcmV0dXJuIGc0eF9k b19yZXNldDsKPiAgCWVsc2UgaWYgKElTX0czMyhpOTE1KSB8fCBJU19QSU5FVklFVyhpOTE1KSkK PiAgCQlyZXR1cm4gZzMzX2RvX3Jlc2V0Owo+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49 IDMpCj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMykKPiAgCQlyZXR1cm4gaTkx NV9kb19yZXNldDsKPiAgCWVsc2UKPiAgCQlyZXR1cm4gTlVMTDsKPiBAQCAtNjU2LDcgKzY1Niw3 IEBAIGJvb2wgaW50ZWxfaGFzX3Jlc2V0X2VuZ2luZShjb25zdCBzdHJ1Y3QgaW50ZWxfZ3QgKmd0 KQo+ICBpbnQgaW50ZWxfcmVzZXRfZ3VjKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIHsKPiAgCXUz MiBndWNfZG9tYWluID0KPiAtCQlJTlRFTF9HRU4oZ3QtPmk5MTUpID49IDExID8gR0VOMTFfR1JE T01fR1VDIDogR0VOOV9HUkRPTV9HVUM7Cj4gKwkJR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA+PSAx MSA/IEdFTjExX0dSRE9NX0dVQyA6IEdFTjlfR1JET01fR1VDOwo+ICAJaW50IHJldDsKPiAgCj4g IAlHRU1fQlVHX09OKCFIQVNfR1RfVUMoZ3QtPmk5MTUpKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYwo+IGluZGV4IDJiNmRmZmNjMjI2Mi4u MGM0MjNmMDk2ZTJiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X3Jpbmdfc3VibWlzc2lvbi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf cmluZ19zdWJtaXNzaW9uLmMKPiBAQCAtMjksNyArMjksNyBAQCBzdGF0aWMgdm9pZCBzZXRfaHdz dGFtKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIG1hc2spCj4gIAkgKiBsb3N0 IGludGVycnVwdHMgZm9sbG93aW5nIGEgcmVzZXQuCj4gIAkgKi8KPiAgCWlmIChlbmdpbmUtPmNs YXNzID09IFJFTkRFUl9DTEFTUykgewo+IC0JCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+ PSA2KQo+ICsJCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSA2KQo+ICAJCQltYXNr ICY9IH5CSVQoMCk7Cj4gIAkJZWxzZQo+ICAJCQltYXNrICY9IH5JOTE1X1VTRVJfSU5URVJSVVBU Owo+IEBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyB2b2lkIHNldF9od3NfcGdhKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwgcGh5c19hZGRyX3QgcGh5cykKPiAgCXUzMiBhZGRyOwo+ICAK PiAgCWFkZHIgPSBsb3dlcl8zMl9iaXRzKHBoeXMpOwo+IC0JaWYgKElOVEVMX0dFTihlbmdpbmUt Pmk5MTUpID49IDQpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gNCkKPiAg CQlhZGRyIHw9IChwaHlzID4+IDI4KSAmIDB4ZjA7Cj4gIAo+ICAJaW50ZWxfdW5jb3JlX3dyaXRl KGVuZ2luZS0+dW5jb3JlLCBIV1NfUEdBLCBhZGRyKTsKPiBAQCAtNzEsNyArNzEsNyBAQCBzdGF0 aWMgdm9pZCBzZXRfaHdzcChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiBvZmZz ZXQpCj4gIAkgKiBUaGUgcmluZyBzdGF0dXMgcGFnZSBhZGRyZXNzZXMgYXJlIG5vIGxvbmdlciBu ZXh0IHRvIHRoZSByZXN0IG9mCj4gIAkgKiB0aGUgcmluZyByZWdpc3RlcnMgYXMgb2YgZ2VuNy4K PiAgCSAqLwo+IC0JaWYgKElTX0dFTihlbmdpbmUtPmk5MTUsIDcpKSB7Cj4gKwlpZiAoR1JBUEhJ Q1NfVkVSKGVuZ2luZS0+aTkxNSkgPT0gNykgewo+ICAJCXN3aXRjaCAoZW5naW5lLT5pZCkgewo+ ICAJCS8qCj4gIAkJICogTm8gbW9yZSByaW5ncyBleGlzdCBvbiBHZW43LiBEZWZhdWx0IGNhc2Ug aXMgb25seSB0byBzaHV0IHVwCj4gQEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIHZvaWQgc2V0X2h3 c3Aoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgb2Zmc2V0KQo+ICAJCQlod3Nw ID0gVkVCT1hfSFdTX1BHQV9HRU43Owo+ICAJCQlicmVhazsKPiAgCQl9Cj4gLQl9IGVsc2UgaWYg KElTX0dFTihlbmdpbmUtPmk5MTUsIDYpKSB7Cj4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihl bmdpbmUtPmk5MTUpID09IDYpIHsKPiAgCQlod3NwID0gUklOR19IV1NfUEdBX0dFTjYoZW5naW5l LT5tbWlvX2Jhc2UpOwo+ICAJfSBlbHNlIHsKPiAgCQlod3NwID0gUklOR19IV1NfUEdBKGVuZ2lu ZS0+bW1pb19iYXNlKTsKPiBAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyB2b2lkIHNldF9od3Nw KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIG9mZnNldCkKPiAgCj4gIHN0YXRp YyB2b2lkIGZsdXNoX2NzX3RsYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIHsK PiAtCWlmICghSVNfR0VOX1JBTkdFKGVuZ2luZS0+aTkxNSwgNiwgNykpCj4gKwlpZiAoIUlTX0dS QVBISUNTX1ZFUihlbmdpbmUtPmk5MTUsIDYsIDcpKQo+ICAJCXJldHVybjsKPiAgCj4gIAkvKiBy aW5nIHNob3VsZCBiZSBpZGxlIGJlZm9yZSBpc3N1aW5nIGEgc3luYyBmbHVzaCovCj4gQEAgLTE1 Myw3ICsxNTMsNyBAQCBzdGF0aWMgdm9pZCBzZXRfcHBfZGlyKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKPiAgCUVOR0lORV9XUklURV9GVyhlbmdpbmUsIFJJTkdfUFBfRElSX0RDTFYs IFBQX0RJUl9EQ0xWXzJHKTsKPiAgCUVOR0lORV9XUklURV9GVyhlbmdpbmUsIFJJTkdfUFBfRElS X0JBU0UsIHBwX2Rpcih2bSkpOwo+ICAKPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+ PSA3KSB7Cj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gNykgewo+ICAJCUVO R0lORV9XUklURV9GVyhlbmdpbmUsCj4gIAkJCQlSSU5HX01PREVfR0VONywKPiAgCQkJCV9NQVNL RURfQklUX0VOQUJMRShHRlhfUFBHVFRfRU5BQkxFKSk7Cj4gQEAgLTIyOSw3ICsyMjksNyBAQCBz dGF0aWMgaW50IHhjc19yZXN1bWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJ CQkJCSA1MDAwLCAwLCBOVUxMKSkKPiAgCQlnb3RvIGVycjsKPiAgCj4gLQlpZiAoSU5URUxfR0VO KGVuZ2luZS0+aTkxNSkgPiAyKQo+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID4g MikKPiAgCQlFTkdJTkVfV1JJVEVfRlcoZW5naW5lLAo+ICAJCQkJUklOR19NSV9NT0RFLCBfTUFT S0VEX0JJVF9ESVNBQkxFKFNUT1BfUklORykpOwo+ICAKPiBAQCAtNjQ2LDkgKzY0Niw5IEBAIHN0 YXRpYyBpbnQgbWlfc2V0X2NvbnRleHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gIAl1MzIg KmNzOwo+ICAKPiAgCWxlbiA9IDQ7Cj4gLQlpZiAoSVNfR0VOKGk5MTUsIDcpKQo+ICsJaWYgKEdS QVBISUNTX1ZFUihpOTE1KSA9PSA3KQo+ICAJCWxlbiArPSAyICsgKG51bV9lbmdpbmVzID8gNCAq IG51bV9lbmdpbmVzICsgNiA6IDApOwo+IC0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDUpKQo+ICsJ ZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDUpCj4gIAkJbGVuICs9IDI7Cj4gIAlpZiAo ZmxhZ3MgJiBNSV9GT1JDRV9SRVNUT1JFKSB7Cj4gIAkJR0VNX0JVR19PTihmbGFncyAmIE1JX1JF U1RPUkVfSU5ISUJJVCk7Cj4gQEAgLTY2Miw3ICs2NjIsNyBAQCBzdGF0aWMgaW50IG1pX3NldF9j b250ZXh0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+ICAJCXJldHVybiBQVFJfRVJSKGNzKTsK PiAgCj4gIAkvKiBXYVByb2dyYW1NaUFyYk9uT2ZmQXJvdW5kTWlTZXRDb250ZXh0Oml2Yix2bHYs aHN3LGJkdyxjaHYgKi8KPiAtCWlmIChJU19HRU4oaTkxNSwgNykpIHsKPiArCWlmIChHUkFQSElD U19WRVIoaTkxNSkgPT0gNykgewo+ICAJCSpjcysrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9E SVNBQkxFOwo+ICAJCWlmIChudW1fZW5naW5lcykgewo+ICAJCQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpzaWduYWxsZXI7Cj4gQEAgLTY3OCw3ICs2NzgsNyBAQCBzdGF0aWMgaW50IG1pX3NldF9j b250ZXh0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+ICAJCQkJCQlHRU42X1BTTUlfU0xFRVBf TVNHX0RJU0FCTEUpOwo+ICAJCQl9Cj4gIAkJfQo+IC0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwg NSkpIHsKPiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDUpIHsKPiAgCQkvKgo+ ICAJCSAqIFRoaXMgdy9hIGlzIG9ubHkgbGlzdGVkIGZvciBwcmUtcHJvZHVjdGlvbiBpbGsgYS9i IHN0ZXBwaW5ncywKPiAgCQkgKiBidXQgaXMgYWxzbyBtZW50aW9uZWQgZm9yIHByb2dyYW1taW5n IHRoZSBwb3dlcmN0eC4gVG8gYmUKPiBAQCAtNzE2LDcgKzcxNiw3IEBAIHN0YXRpYyBpbnQgbWlf c2V0X2NvbnRleHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gIAkgKi8KPiAgCSpjcysrID0g TUlfTk9PUDsKPiAgCj4gLQlpZiAoSVNfR0VOKGk5MTUsIDcpKSB7Cj4gKwlpZiAoR1JBUEhJQ1Nf VkVSKGk5MTUpID09IDcpIHsKPiAgCQlpZiAobnVtX2VuZ2luZXMpIHsKPiAgCQkJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqc2lnbmFsbGVyOwo+ICAJCQlpOTE1X3JlZ190IGxhc3RfcmVnID0ge307 IC8qIGtlZXAgZ2NjIHF1aWV0ICovCj4gQEAgLTc0MCw3ICs3NDAsNyBAQCBzdGF0aWMgaW50IG1p X3NldF9jb250ZXh0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+ICAJCQkqY3MrKyA9IE1JX05P T1A7Cj4gIAkJfQo+ICAJCSpjcysrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9FTkFCTEU7Cj4g LQl9IGVsc2UgaWYgKElTX0dFTihpOTE1LCA1KSkgewo+ICsJfSBlbHNlIGlmIChHUkFQSElDU19W RVIoaTkxNSkgPT0gNSkgewo+ICAJCSpjcysrID0gTUlfU1VTUEVORF9GTFVTSDsKPiAgCX0KPiAg Cj4gQEAgLTEwMDEsNyArMTAwMSw3IEBAIHN0YXRpYyB2b2lkIHJpbmdfcmVsZWFzZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiAgCj4gLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYt PmRybSwgSU5URUxfR0VOKGRldl9wcml2KSA+IDIgJiYKPiArCWRybV9XQVJOX09OKCZkZXZfcHJp di0+ZHJtLCBHUkFQSElDU19WRVIoZGV2X3ByaXYpID4gMiAmJgo+ICAJCSAgICAoRU5HSU5FX1JF QUQoZW5naW5lLCBSSU5HX01JX01PREUpICYgTU9ERV9JRExFKSA9PSAwKTsKPiAgCj4gIAlpbnRl bF9lbmdpbmVfY2xlYW51cF9jb21tb24oZW5naW5lKTsKPiBAQCAtMTAyOSwxMyArMTAyOSwxMyBA QCBzdGF0aWMgdm9pZCBzZXR1cF9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ ICAKPiAgCWludGVsX2VuZ2luZV9zZXRfaXJxX2hhbmRsZXIoZW5naW5lLCBpcnFfaGFuZGxlcik7 Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KSB7Cj4gKwlpZiAoR1JBUEhJQ1NfVkVS KGk5MTUpID49IDYpIHsKPiAgCQllbmdpbmUtPmlycV9lbmFibGUgPSBnZW42X2lycV9lbmFibGU7 Cj4gIAkJZW5naW5lLT5pcnFfZGlzYWJsZSA9IGdlbjZfaXJxX2Rpc2FibGU7Cj4gLQl9IGVsc2Ug aWYgKElOVEVMX0dFTihpOTE1KSA+PSA1KSB7Cj4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA+PSA1KSB7Cj4gIAkJZW5naW5lLT5pcnFfZW5hYmxlID0gZ2VuNV9pcnFfZW5hYmxlOwo+ ICAJCWVuZ2luZS0+aXJxX2Rpc2FibGUgPSBnZW41X2lycV9kaXNhYmxlOwo+IC0JfSBlbHNlIGlm IChJTlRFTF9HRU4oaTkxNSkgPj0gMykgewo+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkx NSkgPj0gMykgewo+ICAJCWVuZ2luZS0+aXJxX2VuYWJsZSA9IGdlbjNfaXJxX2VuYWJsZTsKPiAg CQllbmdpbmUtPmlycV9kaXNhYmxlID0gZ2VuM19pcnFfZGlzYWJsZTsKPiAgCX0gZWxzZSB7Cj4g QEAgLTEwNDksNyArMTA0OSw3IEBAIHN0YXRpYyB2b2lkIHNldHVwX2NvbW1vbihzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 IGVuZ2luZS0+aTkxNTsKPiAgCj4gIAkvKiBnZW44KyBhcmUgb25seSBzdXBwb3J0ZWQgd2l0aCBl eGVjbGlzdHMgKi8KPiAtCUdFTV9CVUdfT04oSU5URUxfR0VOKGk5MTUpID49IDgpOwo+ICsJR0VN X0JVR19PTihHUkFQSElDU19WRVIoaTkxNSkgPj0gOCk7Cj4gIAo+ICAJc2V0dXBfaXJxKGVuZ2lu ZSk7Cj4gIAo+IEBAIC0xMDcwLDE0ICsxMDcwLDE0IEBAIHN0YXRpYyB2b2lkIHNldHVwX2NvbW1v bihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkgKiBlbmdpbmUtPmVtaXRfaW5p dF9icmVhZGNydW1iKCkuCj4gIAkgKi8KPiAgCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIg PSBnZW4zX2VtaXRfYnJlYWRjcnVtYjsKPiAtCWlmIChJU19HRU4oaTkxNSwgNSkpCj4gKwlpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID09IDUpCj4gIAkJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVt YiA9IGdlbjVfZW1pdF9icmVhZGNydW1iOwo+ICAKPiAgCWVuZ2luZS0+c2V0X2RlZmF1bHRfc3Vi bWlzc2lvbiA9IGk5eHhfc2V0X2RlZmF1bHRfc3VibWlzc2lvbjsKPiAgCj4gLQlpZiAoSU5URUxf R0VOKGk5MTUpID49IDYpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCj4gIAkJZW5n aW5lLT5lbWl0X2JiX3N0YXJ0ID0gZ2VuNl9lbWl0X2JiX3N0YXJ0Owo+IC0JZWxzZSBpZiAoSU5U RUxfR0VOKGk5MTUpID49IDQpCj4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNCkK PiAgCQllbmdpbmUtPmVtaXRfYmJfc3RhcnQgPSBnZW40X2VtaXRfYmJfc3RhcnQ7Cj4gIAllbHNl IGlmIChJU19JODMwKGk5MTUpIHx8IElTX0k4NDVHKGk5MTUpKQo+ICAJCWVuZ2luZS0+ZW1pdF9i Yl9zdGFydCA9IGk4MzBfZW1pdF9iYl9zdGFydDsKPiBAQCAtMTA5NCwxNiArMTA5NCwxNiBAQCBz dGF0aWMgdm9pZCBzZXR1cF9yY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAK PiAgCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUOwo+ ICAKPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNykgewo+ICsJaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA+PSA3KSB7Cj4gIAkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuN19lbWl0X2ZsdXNoX3Jj czsKPiAgCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuN19lbWl0X2JyZWFkY3J1 bWJfcmNzOwo+IC0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwgNikpIHsKPiArCX0gZWxzZSBpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID09IDYpIHsKPiAgCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW42 X2VtaXRfZmx1c2hfcmNzOwo+ICAJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW42 X2VtaXRfYnJlYWRjcnVtYl9yY3M7Cj4gLQl9IGVsc2UgaWYgKElTX0dFTihpOTE1LCA1KSkgewo+ ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNSkgewo+ICAJCWVuZ2luZS0+ZW1p dF9mbHVzaCA9IGdlbjRfZW1pdF9mbHVzaF9yY3M7Cj4gIAl9IGVsc2Ugewo+IC0JCWlmIChJTlRF TF9HRU4oaTkxNSkgPCA0KQo+ICsJCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPCA0KQo+ICAJCQll bmdpbmUtPmVtaXRfZmx1c2ggPSBnZW4yX2VtaXRfZmx1c2g7Cj4gIAkJZWxzZQo+ICAJCQllbmdp bmUtPmVtaXRfZmx1c2ggPSBnZW40X2VtaXRfZmx1c2hfcmNzOwo+IEBAIC0xMTE4LDIwICsxMTE4 LDIwIEBAIHN0YXRpYyB2b2lkIHNldHVwX3ZjcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZW5naW5lLT5pOTE1 Owo+ICAKPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikgewo+ICsJaWYgKEdSQVBISUNTX1ZF UihpOTE1KSA+PSA2KSB7Cj4gIAkJLyogZ2VuNiBic2QgbmVlZHMgYSBzcGVjaWFsIHdhIGZvciB0 YWlsIHVwZGF0ZXMgKi8KPiAtCQlpZiAoSVNfR0VOKGk5MTUsIDYpKQo+ICsJCWlmIChHUkFQSElD U19WRVIoaTkxNSkgPT0gNikKPiAgCQkJZW5naW5lLT5zZXRfZGVmYXVsdF9zdWJtaXNzaW9uID0g Z2VuNl9ic2Rfc2V0X2RlZmF1bHRfc3VibWlzc2lvbjsKPiAgCQllbmdpbmUtPmVtaXRfZmx1c2gg PSBnZW42X2VtaXRfZmx1c2hfdmNzOwo+ICAJCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gR1Rf QlNEX1VTRVJfSU5URVJSVVBUOwo+ICAKPiAtCQlpZiAoSVNfR0VOKGk5MTUsIDYpKQo+ICsJCWlm IChHUkFQSElDU19WRVIoaTkxNSkgPT0gNikKPiAgCQkJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRj cnVtYiA9IGdlbjZfZW1pdF9icmVhZGNydW1iX3hjczsKPiAgCQllbHNlCj4gIAkJCWVuZ2luZS0+ ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW43X2VtaXRfYnJlYWRjcnVtYl94Y3M7Cj4gIAl9IGVs c2Ugewo+ICAJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjRfZW1pdF9mbHVzaF92Y3M7Cj4gLQkJ aWYgKElTX0dFTihpOTE1LCA1KSkKPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDUpCj4g IAkJCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gSUxLX0JTRF9VU0VSX0lOVEVSUlVQVDsKPiAg CQllbHNlCj4gIAkJCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gSTkxNV9CU0RfVVNFUl9JTlRF UlJVUFQ7Cj4gQEAgLTExNDUsNyArMTE0NSw3IEBAIHN0YXRpYyB2b2lkIHNldHVwX2JjcyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW42 X2VtaXRfZmx1c2hfeGNzOwo+ICAJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPSBHVF9CTFRfVVNF Ul9JTlRFUlJVUFQ7Cj4gIAo+IC0JaWYgKElTX0dFTihpOTE1LCA2KSkKPiArCWlmIChHUkFQSElD U19WRVIoaTkxNSkgPT0gNikKPiAgCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2Vu Nl9lbWl0X2JyZWFkY3J1bWJfeGNzOwo+ICAJZWxzZQo+ICAJCWVuZ2luZS0+ZW1pdF9maW5pX2Jy ZWFkY3J1bWIgPSBnZW43X2VtaXRfYnJlYWRjcnVtYl94Y3M7Cj4gQEAgLTExNTUsNyArMTE1NSw3 IEBAIHN0YXRpYyB2b2lkIHNldHVwX3ZlY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGVuZ2luZS0+aTkxNTsK PiAgCj4gLQlHRU1fQlVHX09OKElOVEVMX0dFTihpOTE1KSA8IDcpOwo+ICsJR0VNX0JVR19PTihH UkFQSElDU19WRVIoaTkxNSkgPCA3KTsKPiAgCj4gIAllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW42 X2VtaXRfZmx1c2hfeGNzOwo+ICAJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPSBQTV9WRUJPWF9V U0VSX0lOVEVSUlVQVDsKPiBAQCAtMTIwMyw3ICsxMjAzLDcgQEAgc3RhdGljIHN0cnVjdCBpOTE1 X3ZtYSAqZ2VuN19jdHhfdm1hKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCXN0 cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAJaW50IHNpemUsIGVycjsKPiAgCj4gLQlpZiAoIUlTX0dF TihlbmdpbmUtPmk5MTUsIDcpIHx8IGVuZ2luZS0+Y2xhc3MgIT0gUkVOREVSX0NMQVNTKQo+ICsJ aWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpICE9IDcgfHwgZW5naW5lLT5jbGFzcyAhPSBS RU5ERVJfQ0xBU1MpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+ICAJZXJyID0gZ2VuN19jdHhfc3dpdGNo X2JiX3NldHVwKGVuZ2luZSwgTlVMTCAvKiBwcm9iZSBzaXplICovKTsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9ycHMuYwo+IGluZGV4IDk3Y2FiMWI5OTg3MS4uMDZlOWE4ZWQ0ZTAzIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmMKPiBAQCAtMTk2LDcgKzE5Niw3IEBAIHN0 YXRpYyB2b2lkIHJwc19yZXNldF9pbnRlcnJ1cHRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiAg CXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBzKTsKPiAgCj4gIAlzcGluX2xvY2tf aXJxKCZndC0+aXJxX2xvY2spOwo+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPj0gMTEpCj4g KwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA+PSAxMSkKPiAgCQlnZW4xMV9ycHNfcmVzZXRf aW50ZXJydXB0cyhycHMpOwo+ICAJZWxzZQo+ICAJCWdlbjZfcnBzX3Jlc2V0X2ludGVycnVwdHMo cnBzKTsKPiBAQCAtNjMwLDcgKzYzMCw3IEBAIHN0YXRpYyB1MzIgcnBzX2xpbWl0cyhzdHJ1Y3Qg aW50ZWxfcnBzICpycHMsIHU4IHZhbCkKPiAgCSAqIGZyZXF1ZW5jeSwgaWYgdGhlIGRvd24gdGhy ZXNob2xkIGV4cGlyZXMgaW4gdGhhdCB3aW5kb3cgd2Ugd2lsbCBub3QKPiAgCSAqIHJlY2VpdmUg YSBkb3duIGludGVycnVwdC4KPiAgCSAqLwo+IC0JaWYgKElOVEVMX0dFTihycHNfdG9faTkxNShy cHMpKSA+PSA5KSB7Cj4gKwlpZiAoR1JBUEhJQ1NfVkVSKHJwc190b19pOTE1KHJwcykpID49IDkp IHsKPiAgCQlsaW1pdHMgPSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCA8PCAyMzsKPiAgCQlpZiAo dmFsIDw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQo+ICAJCQlsaW1pdHMgfD0gcnBzLT5taW5f ZnJlcV9zb2Z0bGltaXQgPDwgMTQ7Cj4gQEAgLTY5Nyw3ICs2OTcsNyBAQCBzdGF0aWMgdm9pZCBy cHNfc2V0X3Bvd2VyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgaW50IG5ld19wb3dlcikKPiAgCSAg ICBpbnRlbF9ndF9uc190b19wbV9pbnRlcnZhbChndCwgZWlfZG93biAqIHRocmVzaG9sZF9kb3du ICogMTApKTsKPiAgCj4gIAlzZXQodW5jb3JlLCBHRU42X1JQX0NPTlRST0wsCj4gLQkgICAgKElO VEVMX0dFTihndC0+aTkxNSkgPiA5ID8gMCA6IEdFTjZfUlBfTUVESUFfVFVSQk8pIHwKPiArCSAg ICAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA+IDkgPyAwIDogR0VONl9SUF9NRURJQV9UVVJCTykg fAo+ICAJICAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAo+ICAJICAgIEdFTjZfUlBf TUVESUFfSVNfR0ZYIHwKPiAgCSAgICBHRU42X1JQX0VOQUJMRSB8Cj4gQEAgLTc3MSw3ICs3NzEs NyBAQCBzdGF0aWMgaW50IGdlbjZfcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZh bCkKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsK PiAgCXUzMiBzd3JlcTsKPiAgCj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCj4gKwlpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID49IDkpCj4gIAkJc3dyZXEgPSBHRU45X0ZSRVFVRU5DWSh2YWwp Owo+ICAJZWxzZSBpZiAoSVNfSEFTV0VMTChpOTE1KSB8fCBJU19CUk9BRFdFTEwoaTkxNSkpCj4g IAkJc3dyZXEgPSBIU1dfRlJFUVVFTkNZKHZhbCk7Cj4gQEAgLTgxMiwxNCArODEyLDE0IEBAIHN0 YXRpYyBpbnQgcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCwgYm9vbCB1cGRh dGUpCj4gIAo+ICAJaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNfQ0hFUlJZVklFVyhpOTE1 KSkKPiAgCQllcnIgPSB2bHZfcnBzX3NldChycHMsIHZhbCk7Cj4gLQllbHNlIGlmIChJTlRFTF9H RU4oaTkxNSkgPj0gNikKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KQo+ICAJ CWVyciA9IGdlbjZfcnBzX3NldChycHMsIHZhbCk7Cj4gIAllbHNlCj4gIAkJZXJyID0gZ2VuNV9y cHNfc2V0KHJwcywgdmFsKTsKPiAgCWlmIChlcnIpCj4gIAkJcmV0dXJuIGVycjsKPiAgCj4gLQlp ZiAodXBkYXRlICYmIElOVEVMX0dFTihpOTE1KSA+PSA2KQo+ICsJaWYgKHVwZGF0ZSAmJiBHUkFQ SElDU19WRVIoaTkxNSkgPj0gNikKPiAgCQlnZW42X3Jwc19zZXRfdGhyZXNob2xkcyhycHMsIHZh bCk7Cj4gIAlycHMtPmxhc3RfZnJlcSA9IHZhbDsKPiAgCj4gQEAgLTg1Myw3ICs4NTMsNyBAQCB2 b2lkIGludGVsX3Jwc191bnBhcmsoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ICAJaWYgKGludGVs X3Jwc191c2VzX3RpbWVyKHJwcykpCj4gIAkJcnBzX3N0YXJ0X3RpbWVyKHJwcyk7Cj4gIAo+IC0J aWYgKElTX0dFTihycHNfdG9faTkxNShycHMpLCA1KSkKPiArCWlmIChHUkFQSElDU19WRVIocnBz X3RvX2k5MTUocnBzKSkgPT0gNSkKPiAgCQlnZW41X3Jwc191cGRhdGUocnBzKTsKPiAgfQo+ICAK PiBAQCAtOTk5LDcgKzk5OSw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfcnBzX2luaXQoc3RydWN0IGlu dGVsX3JwcyAqcnBzKQo+ICAKPiAgCXJwcy0+ZWZmaWNpZW50X2ZyZXEgPSBycHMtPnJwMV9mcmVx Owo+ICAJaWYgKElTX0hBU1dFTEwoaTkxNSkgfHwgSVNfQlJPQURXRUxMKGk5MTUpIHx8Cj4gLQkg ICAgSVNfR0VOOV9CQyhpOTE1KSB8fCBJTlRFTF9HRU4oaTkxNSkgPj0gMTApIHsKPiArCSAgICBJ U19HRU45X0JDKGk5MTUpIHx8IEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMCkgewo+ICAJCXUzMiBk ZGNjX3N0YXR1cyA9IDA7Cj4gIAo+ICAJCWlmIChzYW5keWJyaWRnZV9wY29kZV9yZWFkKGk5MTUs Cj4gQEAgLTEwMTIsNyArMTAxMiw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfcnBzX2luaXQoc3RydWN0 IGludGVsX3JwcyAqcnBzKQo+ICAJCQkJCXJwcy0+bWF4X2ZyZXEpOwo+ICAJfQo+ICAKPiAtCWlm IChJU19HRU45X0JDKGk5MTUpIHx8IElOVEVMX0dFTihpOTE1KSA+PSAxMCkgewo+ICsJaWYgKElT X0dFTjlfQkMoaTkxNSkgfHwgR1JBUEhJQ1NfVkVSKGk5MTUpID49IDEwKSB7Cj4gIAkJLyogU3Rv cmUgdGhlIGZyZXF1ZW5jeSB2YWx1ZXMgaW4gMTYuNjYgTUhaIHVuaXRzLCB3aGljaCBpcwo+ICAJ CSAqIHRoZSBuYXR1cmFsIGhhcmR3YXJlIHVuaXQgZm9yIFNLTAo+ICAJCSAqLwo+IEBAIC0xMDQ4 LDcgKzEwNDgsNyBAQCBzdGF0aWMgYm9vbCBnZW45X3Jwc19lbmFibGUoc3RydWN0IGludGVsX3Jw cyAqcnBzKQo+ICAJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKPiAg Cj4gIAkvKiBQcm9ncmFtIGRlZmF1bHRzIGFuZCB0aHJlc2hvbGRzIGZvciBSUFMgKi8KPiAtCWlm IChJU19HRU4oZ3QtPmk5MTUsIDkpKQo+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPT0g OSkKPiAgCQlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDX1ZJREVPX0ZSRVEs Cj4gIAkJCQkgICAgICBHRU45X0ZSRVFVRU5DWShycHMtPnJwMV9mcmVxKSk7Cj4gIAo+IEBAIC0x MzY1LDE2ICsxMzY1LDE2IEBAIHZvaWQgaW50ZWxfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfcnBz ICpycHMpCj4gIAkJZW5hYmxlZCA9IGNodl9ycHNfZW5hYmxlKHJwcyk7Cj4gIAllbHNlIGlmIChJ U19WQUxMRVlWSUVXKGk5MTUpKQo+ICAJCWVuYWJsZWQgPSB2bHZfcnBzX2VuYWJsZShycHMpOwo+ IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCj4gKwllbHNlIGlmIChHUkFQSElDU19W RVIoaTkxNSkgPj0gOSkKPiAgCQllbmFibGVkID0gZ2VuOV9ycHNfZW5hYmxlKHJwcyk7Cj4gLQll bHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA+PSA4KQo+ICAJCWVuYWJsZWQgPSBnZW44X3Jwc19lbmFibGUocnBzKTsKPiAtCWVsc2Ug aWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQo+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp ID49IDYpCj4gIAkJZW5hYmxlZCA9IGdlbjZfcnBzX2VuYWJsZShycHMpOwo+ICAJZWxzZSBpZiAo SVNfSVJPTkxBS0VfTShpOTE1KSkKPiAgCQllbmFibGVkID0gZ2VuNV9ycHNfZW5hYmxlKHJwcyk7 Cj4gIAllbHNlCj4gLQkJTUlTU0lOR19DQVNFKElOVEVMX0dFTihpOTE1KSk7Cj4gKwkJTUlTU0lO R19DQVNFKEdSQVBISUNTX1ZFUihpOTE1KSk7Cj4gIAlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1 dCh1bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwo+ICAJaWYgKCFlbmFibGVkKQo+ICAJCXJldHVybjsK PiBAQCAtMTM5Myw3ICsxMzkzLDcgQEAgdm9pZCBpbnRlbF9ycHNfZW5hYmxlKHN0cnVjdCBpbnRl bF9ycHMgKnJwcykKPiAgCj4gIAlpZiAoaGFzX2J1c3lfc3RhdHMocnBzKSkKPiAgCQlpbnRlbF9y cHNfc2V0X3RpbWVyKHJwcyk7Cj4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKPiAr CWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KQo+ICAJCWludGVsX3Jwc19zZXRfaW50 ZXJydXB0cyhycHMpOwo+ICAJZWxzZQo+ICAJCS8qIElyb25sYWtlIGN1cnJlbnRseSB1c2VzIGlu dGVsX2lwcy5rbyAqLyB7fQo+IEBAIC0xNDE0LDcgKzE0MTQsNyBAQCB2b2lkIGludGVsX3Jwc19k aXNhYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiAgCWludGVsX3Jwc19jbGVhcl9pbnRlcnJ1 cHRzKHJwcyk7Cj4gIAlpbnRlbF9ycHNfY2xlYXJfdGltZXIocnBzKTsKPiAgCj4gLQlpZiAoSU5U RUxfR0VOKGk5MTUpID49IDYpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCj4gIAkJ Z2VuNl9ycHNfZGlzYWJsZShycHMpOwo+ICAJZWxzZSBpZiAoSVNfSVJPTkxBS0VfTShpOTE1KSkK PiAgCQlnZW41X3Jwc19kaXNhYmxlKHJwcyk7Cj4gQEAgLTE0NTMsMTQgKzE0NTMsMTQgQEAgaW50 IGludGVsX2dwdV9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgaW50IHZhbCkKPiAgewo+ICAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICAKPiAt CWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0g OSkKPiAgCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsICogR1RfRlJFUVVFTkNZX01VTFRJ UExJRVIsCj4gIAkJCQkJIEdFTjlfRlJFUV9TQ0FMRVIpOwo+ICAJZWxzZSBpZiAoSVNfQ0hFUlJZ VklFVyhpOTE1KSkKPiAgCQlyZXR1cm4gY2h2X2dwdV9mcmVxKHJwcywgdmFsKTsKPiAgCWVsc2Ug aWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCj4gIAkJcmV0dXJuIGJ5dF9ncHVfZnJlcShycHMsIHZh bCk7Cj4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKPiArCWVsc2UgaWYgKEdSQVBI SUNTX1ZFUihpOTE1KSA+PSA2KQo+ICAJCXJldHVybiB2YWwgKiBHVF9GUkVRVUVOQ1lfTVVMVElQ TElFUjsKPiAgCWVsc2UKPiAgCQlyZXR1cm4gdmFsOwo+IEBAIC0xNDcwLDE0ICsxNDcwLDE0IEBA IGludCBpbnRlbF9mcmVxX29wY29kZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwpCj4g IHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsK PiAgCj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5 MTUpID49IDkpCj4gIAkJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZhbCAqIEdFTjlfRlJFUV9T Q0FMRVIsCj4gIAkJCQkJIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSKTsKPiAgCWVsc2UgaWYgKElT X0NIRVJSWVZJRVcoaTkxNSkpCj4gIAkJcmV0dXJuIGNodl9mcmVxX29wY29kZShycHMsIHZhbCk7 Cj4gIAllbHNlIGlmIChJU19WQUxMRVlWSUVXKGk5MTUpKQo+ICAJCXJldHVybiBieXRfZnJlcV9v cGNvZGUocnBzLCB2YWwpOwo+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCj4gKwll bHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNikKPiAgCQlyZXR1cm4gRElWX1JPVU5EX0NM T1NFU1QodmFsLCBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUik7Cj4gIAllbHNlCj4gIAkJcmV0dXJu IHZhbDsKPiBAQCAtMTc3MCw3ICsxNzcwLDcgQEAgdm9pZCBnZW42X3Jwc19pcnFfaGFuZGxlcihz dHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBwbV9paXIpCj4gIAkJc3Bpbl91bmxvY2soJmd0LT5p cnFfbG9jayk7Cj4gIAl9Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPj0gOCkKPiAr CWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpID49IDgpCj4gIAkJcmV0dXJuOwo+ICAKPiAgCWlm IChwbV9paXIgJiBQTV9WRUJPWF9VU0VSX0lOVEVSUlVQVCkKPiBAQCAtMTgzMyw3ICsxODMzLDcg QEAgdm9pZCBpbnRlbF9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gIAkJY2h2X3Jw c19pbml0KHJwcyk7Cj4gIAllbHNlIGlmIChJU19WQUxMRVlWSUVXKGk5MTUpKQo+ICAJCXZsdl9y cHNfaW5pdChycHMpOwo+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCj4gKwllbHNl IGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNikKPiAgCQlnZW42X3Jwc19pbml0KHJwcyk7Cj4g IAllbHNlIGlmIChJU19JUk9OTEFLRV9NKGk5MTUpKQo+ICAJCWdlbjVfcnBzX2luaXQocnBzKTsK PiBAQCAtMTg0Myw3ICsxODQzLDcgQEAgdm9pZCBpbnRlbF9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxf cnBzICpycHMpCj4gIAlycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCA9IHJwcy0+bWluX2ZyZXE7Cj4g IAo+ICAJLyogQWZ0ZXIgc2V0dGluZyBtYXgtc29mdGxpbWl0LCBmaW5kIHRoZSBvdmVyY2xvY2sg bWF4IGZyZXEgKi8KPiAtCWlmIChJU19HRU4oaTkxNSwgNikgfHwgSVNfSVZZQlJJREdFKGk5MTUp IHx8IElTX0hBU1dFTEwoaTkxNSkpIHsKPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNiB8 fCBJU19JVllCUklER0UoaTkxNSkgfHwgSVNfSEFTV0VMTChpOTE1KSkgewo+ICAJCXUzMiBwYXJh bXMgPSAwOwo+ICAKPiAgCQlzYW5keWJyaWRnZV9wY29kZV9yZWFkKGk5MTUsIEdFTjZfUkVBRF9P Q19QQVJBTVMsCj4gQEAgLTE4NzIsMTYgKzE4NzIsMTYgQEAgdm9pZCBpbnRlbF9ycHNfaW5pdChz dHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gIAkgKgo+ICAJICogVE9ETzogdmVyaWZ5IGlmIHRoaXMg Y2FuIGJlIHJlcHJvZHVjZWQgb24gVkxWLENIVi4KPiAgCSAqLwo+IC0JaWYgKElOVEVMX0dFTihp OTE1KSA8PSA3KQo+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8PSA3KQo+ICAJCXJwcy0+cG1f aW50cm1za19tYnogfD0gR0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEOwo+ICAKPiAtCWlmIChJTlRF TF9HRU4oaTkxNSkgPj0gOCAmJiBJTlRFTF9HRU4oaTkxNSkgPCAxMSkKPiArCWlmIChHUkFQSElD U19WRVIoaTkxNSkgPj0gOCAmJiBHUkFQSElDU19WRVIoaTkxNSkgPCAxMSkKPiAgCQlycHMtPnBt X2ludHJtc2tfbWJ6IHw9IEdFTjhfUE1JTlRSX0RJU0FCTEVfUkVESVJFQ1RfVE9fR1VDOwo+ICB9 Cj4gIAo+ICB2b2lkIGludGVsX3Jwc19zYW5pdGl6ZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4g IHsKPiAtCWlmIChJTlRFTF9HRU4ocnBzX3RvX2k5MTUocnBzKSkgPj0gNikKPiArCWlmIChHUkFQ SElDU19WRVIocnBzX3RvX2k5MTUocnBzKSkgPj0gNikKPiAgCQlycHNfZGlzYWJsZV9pbnRlcnJ1 cHRzKHJwcyk7Cj4gIH0KPiAgCj4gQEAgLTE4OTIsMTEgKzE4OTIsMTEgQEAgdTMyIGludGVsX3Jw c19nZXRfY2FnZihzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBycHN0YXQpCj4gIAo+ICAJaWYg KElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNfQ0hFUlJZVklFVyhpOTE1KSkKPiAgCQljYWdmID0g KHJwc3RhdCA+PiA4KSAmIDB4ZmY7Cj4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkK PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KQo+ICAJCWNhZ2YgPSAocnBzdGF0 ICYgR0VOOV9DQUdGX01BU0spID4+IEdFTjlfQ0FHRl9TSElGVDsKPiAgCWVsc2UgaWYgKElTX0hB U1dFTEwoaTkxNSkgfHwgSVNfQlJPQURXRUxMKGk5MTUpKQo+ICAJCWNhZ2YgPSAocnBzdGF0ICYg SFNXX0NBR0ZfTUFTSykgPj4gSFNXX0NBR0ZfU0hJRlQ7Cj4gLQllbHNlIGlmIChJTlRFTF9HRU4o aTkxNSkgPj0gNikKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KQo+ICAJCWNh Z2YgPSAocnBzdGF0ICYgR0VONl9DQUdGX01BU0spID4+IEdFTjZfQ0FHRl9TSElGVDsKPiAgCWVs c2UKPiAgCQljYWdmID0gZ2VuNV9pbnZlcnRfZnJlcShycHMsIChycHN0YXQgJiBNRU1TVEFUX1BT VEFURV9NQVNLKSA+Pgo+IEBAIC0xOTE1LDcgKzE5MTUsNyBAQCBzdGF0aWMgdTMyIHJlYWRfY2Fn ZihzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gIAkJdmx2X3B1bml0X2dldChpOTE1KTsKPiAgCQlm cmVxID0gdmx2X3B1bml0X3JlYWQoaTkxNSwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7Cj4gIAkJ dmx2X3B1bml0X3B1dChpOTE1KTsKPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYp IHsKPiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpIHsKPiAgCQlmcmVxID0g aW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU42X1JQU1RBVDEpOwo+ICAJfSBlbHNlIHsKPiAg CQlmcmVxID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1TVEFUX0lMSyk7Cj4gQEAgLTE5 NjgsNyArMTk2OCw3IEBAIHZvaWQgaW50ZWxfcnBzX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgaW50 ZWxfcnBzICpycHMpCj4gIAkgKiBXZSBvbmx5IHJlZ2lzdGVyIHRoZSBpOTE1IGlwcyBwYXJ0IHdp dGggaW50ZWwtaXBzIG9uY2UgZXZlcnl0aGluZyBpcwo+ICAJICogc2V0IHVwLCB0byBhdm9pZCBp bnRlbC1pcHMgc25lYWtpbmcgaW4gYW5kIHJlYWRpbmcgYm9ndXMgdmFsdWVzLgo+ICAJICovCj4g LQlpZiAoSVNfR0VOKGd0LT5pOTE1LCA1KSkgewo+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkx NSkgPT0gNSkgewo+ICAJCUdFTV9CVUdfT04oaXBzX21jaGRldik7Cj4gIAkJcmN1X2Fzc2lnbl9w b2ludGVyKGlwc19tY2hkZXYsIGd0LT5pOTE1KTsKPiAgCQlpcHNfcGluZ19mb3JfaTkxNV9sb2Fk KCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3NzZXUuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3NzZXUuYwo+IGluZGV4IDBkOWY3NGFlYzhm ZS4uMzY3ZmQ0NGI4MWM4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX3NzZXUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3NzZXUuYwo+ IEBAIC01OTAsMTMgKzU5MCwxMyBAQCB2b2lkIGludGVsX3NzZXVfaW5mb19pbml0KHN0cnVjdCBp bnRlbF9ndCAqZ3QpCj4gIAkJY2hlcnJ5dmlld19zc2V1X2luZm9faW5pdChndCk7Cj4gIAllbHNl IGlmIChJU19CUk9BRFdFTEwoaTkxNSkpCj4gIAkJYmR3X3NzZXVfaW5mb19pbml0KGd0KTsKPiAt CWVsc2UgaWYgKElTX0dFTihpOTE1LCA5KSkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1 KSA9PSA5KQo+ICAJCWdlbjlfc3NldV9pbmZvX2luaXQoZ3QpOwo+IC0JZWxzZSBpZiAoSVNfR0VO KGk5MTUsIDEwKSkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAxMCkKPiAgCQln ZW4xMF9zc2V1X2luZm9faW5pdChndCk7Cj4gLQllbHNlIGlmIChJU19HRU4oaTkxNSwgMTEpKQo+ ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDExKQo+ICAJCWdlbjExX3NzZXVfaW5m b19pbml0KGd0KTsKPiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMikKPiArCWVsc2Ug aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMikKPiAgCQlnZW4xMl9zc2V1X2luZm9faW5pdChn dCk7Cj4gIH0KPiAgCj4gQEAgLTYxMyw3ICs2MTMsNyBAQCB1MzIgaW50ZWxfc3NldV9tYWtlX3Jw Y3Moc3RydWN0IGludGVsX2d0ICpndCwKPiAgCSAqIE5vIGV4cGxpY2l0IFJQQ1MgcmVxdWVzdCBp cyBuZWVkZWQgdG8gZW5zdXJlIGZ1bGwKPiAgCSAqIHNsaWNlL3N1YnNsaWNlL0VVIGVuYWJsZW1l bnQgcHJpb3IgdG8gR2VuOS4KPiAgCSAqLwo+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA8IDkpCj4g KwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDwgOSkKPiAgCQlyZXR1cm4gMDsKPiAgCj4gIAkvKgo+ IEBAIC02NTEsNyArNjUxLDcgQEAgdTMyIGludGVsX3NzZXVfbWFrZV9ycGNzKHN0cnVjdCBpbnRl bF9ndCAqZ3QsCj4gIAkgKiBzdWJzbGljZXMgYXJlIGVuYWJsZWQsIG9yIGEgY291bnQgYmV0d2Vl biBvbmUgYW5kIGZvdXIgb24gdGhlIGZpcnN0Cj4gIAkgKiBzbGljZS4KPiAgCSAqLwo+IC0JaWYg KElTX0dFTihpOTE1LCAxMSkgJiYKPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gMTEgJiYK PiAgCSAgICBzbGljZXMgPT0gMSAmJgo+ICAJICAgIHN1YnNsaWNlcyA+IG1pbl90KHU4LCA0LCBo d2VpZ2h0OChzc2V1LT5zdWJzbGljZV9tYXNrWzBdKSAvIDIpKSB7Cj4gIAkJR0VNX0JVR19PTihz dWJzbGljZXMgJiAxKTsKPiBAQCAtNjY5LDcgKzY2OSw3IEBAIHUzMiBpbnRlbF9zc2V1X21ha2Vf cnBjcyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0LAo+ICAJaWYgKHNzZXUtPmhhc19zbGljZV9wZykgewo+ ICAJCXUzMiBtYXNrLCB2YWwgPSBzbGljZXM7Cj4gIAo+IC0JCWlmIChJTlRFTF9HRU4oaTkxNSkg Pj0gMTEpIHsKPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDExKSB7Cj4gIAkJCW1hc2sg PSBHRU4xMV9SUENTX1NfQ05UX01BU0s7Cj4gIAkJCXZhbCA8PD0gR0VOMTFfUlBDU19TX0NOVF9T SElGVDsKPiAgCQl9IGVsc2Ugewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF93b3JrYXJvdW5kcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfd29y a2Fyb3VuZHMuYwo+IGluZGV4IDYyY2I5ZWU1YmZjMy4uYjYyZDFlMzFhNjQ1IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3dvcmthcm91bmRzLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF93b3JrYXJvdW5kcy5jCj4gQEAgLTY5OSw5ICs2 OTksOSBAQCBfX2ludGVsX2VuZ2luZV9pbml0X2N0eF93YShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsCj4gIAo+ICAJaWYgKElTX0RHMShpOTE1KSkKPiAgCQlkZzFfY3R4X3dvcmthcm91 bmRzX2luaXQoZW5naW5lLCB3YWwpOwo+IC0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDEyKSkKPiAr CWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAxMikKPiAgCQlnZW4xMl9jdHhfd29ya2Fy b3VuZHNfaW5pdChlbmdpbmUsIHdhbCk7Cj4gLQllbHNlIGlmIChJU19HRU4oaTkxNSwgMTEpKQo+ ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDExKQo+ICAJCWljbF9jdHhfd29ya2Fy b3VuZHNfaW5pdChlbmdpbmUsIHdhbCk7Cj4gIAllbHNlIGlmIChJU19DQU5OT05MQUtFKGk5MTUp KQo+ICAJCWNubF9jdHhfd29ya2Fyb3VuZHNfaW5pdChlbmdpbmUsIHdhbCk7Cj4gQEAgLTcxOSwx NCArNzE5LDE0IEBAIF9faW50ZWxfZW5naW5lX2luaXRfY3R4X3dhKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKPiAgCQljaHZfY3R4X3dvcmthcm91bmRzX2luaXQoZW5naW5lLCB3YWwp Owo+ICAJZWxzZSBpZiAoSVNfQlJPQURXRUxMKGk5MTUpKQo+ICAJCWJkd19jdHhfd29ya2Fyb3Vu ZHNfaW5pdChlbmdpbmUsIHdhbCk7Cj4gLQllbHNlIGlmIChJU19HRU4oaTkxNSwgNykpCj4gKwll bHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNykKPiAgCQlnZW43X2N0eF93b3JrYXJvdW5k c19pbml0KGVuZ2luZSwgd2FsKTsKPiAtCWVsc2UgaWYgKElTX0dFTihpOTE1LCA2KSkKPiArCWVs c2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2KQo+ICAJCWdlbjZfY3R4X3dvcmthcm91bmRz X2luaXQoZW5naW5lLCB3YWwpOwo+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpIDwgOCkKPiAr CWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8IDgpCj4gIAkJOwo+ICAJZWxzZQo+IC0JCU1J U1NJTkdfQ0FTRShJTlRFTF9HRU4oaTkxNSkpOwo+ICsJCU1JU1NJTkdfQ0FTRShHUkFQSElDU19W RVIoaTkxNSkpOwo+ICAKPiAgCXdhX2luaXRfZmluaXNoKHdhbCk7Cj4gIH0KPiBAQCAtOTUwLDcg Kzk1MCw3IEBAIHdhX2luaXRfbWNyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBzdHJ1 Y3QgaTkxNV93YV9saXN0ICp3YWwpCj4gIAl1bnNpZ25lZCBpbnQgc2xpY2UsIHN1YnNsaWNlOwo+ ICAJdTMyIGwzX2VuLCBtY3IsIG1jcl9tYXNrOwo+ICAKPiAtCUdFTV9CVUdfT04oSU5URUxfR0VO KGk5MTUpIDwgMTApOwo+ICsJR0VNX0JVR19PTihHUkFQSElDU19WRVIoaTkxNSkgPCAxMCk7Cj4g IAo+ICAJLyoKPiAgCSAqIFdhUHJvZ3JhbU1nc3JGb3JMM0JhbmtTcGVjaWZpY01taW9SZWFkczog Y25sLGljbAo+IEBAIC05ODAsNyArOTgwLDcgQEAgd2FfaW5pdF9tY3Ioc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsIHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCkKPiAgCSAqIG9mIGV2ZXJ5 IE1NSU8gcmVhZC4KPiAgCSAqLwo+ICAKPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTAgJiYg aXNfcG93ZXJfb2ZfMihzc2V1LT5zbGljZV9tYXNrKSkgewo+ICsJaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA+PSAxMCAmJiBpc19wb3dlcl9vZl8yKHNzZXUtPnNsaWNlX21hc2spKSB7Cj4gIAkJdTMy IGwzX2Z1c2UgPQo+ICAJCQlpbnRlbF91bmNvcmVfcmVhZCgmaTkxNS0+dW5jb3JlLCBHRU4xMF9N SVJST1JfRlVTRTMpICYKPiAgCQkJR0VOMTBfTDNCQU5LX01BU0s7Cj4gQEAgLTEwMDIsNyArMTAw Miw3IEBAIHdhX2luaXRfbWNyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBzdHJ1Y3Qg aTkxNV93YV9saXN0ICp3YWwpCj4gIAl9Cj4gIAlzdWJzbGljZS0tOwo+ICAKPiAtCWlmIChJTlRF TF9HRU4oaTkxNSkgPj0gMTEpIHsKPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTEpIHsK PiAgCQltY3IgPSBHRU4xMV9NQ1JfU0xJQ0Uoc2xpY2UpIHwgR0VOMTFfTUNSX1NVQlNMSUNFKHN1 YnNsaWNlKTsKPiAgCQltY3JfbWFzayA9IEdFTjExX01DUl9TTElDRV9NQVNLIHwgR0VOMTFfTUNS X1NVQlNMSUNFX01BU0s7Cj4gIAl9IGVsc2Ugewo+IEBAIC0xMTcxLDkgKzExNzEsOSBAQCBndF9p bml0X3dvcmthcm91bmRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBzdHJ1Y3QgaTkx NV93YV9saXN0ICp3YWwpCj4gIAkJZGcxX2d0X3dvcmthcm91bmRzX2luaXQoaTkxNSwgd2FsKTsK PiAgCWVsc2UgaWYgKElTX1RJR0VSTEFLRShpOTE1KSkKPiAgCQl0Z2xfZ3Rfd29ya2Fyb3VuZHNf aW5pdChpOTE1LCB3YWwpOwo+IC0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDEyKSkKPiArCWVsc2Ug aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAxMikKPiAgCQlnZW4xMl9ndF93b3JrYXJvdW5kc19p bml0KGk5MTUsIHdhbCk7Cj4gLQllbHNlIGlmIChJU19HRU4oaTkxNSwgMTEpKQo+ICsJZWxzZSBp ZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDExKQo+ICAJCWljbF9ndF93b3JrYXJvdW5kc19pbml0 KGk5MTUsIHdhbCk7Cj4gIAllbHNlIGlmIChJU19DQU5OT05MQUtFKGk5MTUpKQo+ICAJCWNubF9n dF93b3JrYXJvdW5kc19pbml0KGk5MTUsIHdhbCk7Cj4gQEAgLTExOTMsMTggKzExOTMsMTggQEAg Z3RfaW5pdF93b3JrYXJvdW5kcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgc3RydWN0 IGk5MTVfd2FfbGlzdCAqd2FsKQo+ICAJCXZsdl9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUsIHdh bCk7Cj4gIAllbHNlIGlmIChJU19JVllCUklER0UoaTkxNSkpCj4gIAkJaXZiX2d0X3dvcmthcm91 bmRzX2luaXQoaTkxNSwgd2FsKTsKPiAtCWVsc2UgaWYgKElTX0dFTihpOTE1LCA2KSkKPiArCWVs c2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2KQo+ICAJCXNuYl9ndF93b3JrYXJvdW5kc19p bml0KGk5MTUsIHdhbCk7Cj4gLQllbHNlIGlmIChJU19HRU4oaTkxNSwgNSkpCj4gKwllbHNlIGlm IChHUkFQSElDU19WRVIoaTkxNSkgPT0gNSkKPiAgCQlpbGtfZ3Rfd29ya2Fyb3VuZHNfaW5pdChp OTE1LCB3YWwpOwo+ICAJZWxzZSBpZiAoSVNfRzRYKGk5MTUpKQo+ICAJCWc0eF9ndF93b3JrYXJv dW5kc19pbml0KGk5MTUsIHdhbCk7Cj4gLQllbHNlIGlmIChJU19HRU4oaTkxNSwgNCkpCj4gKwll bHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNCkKPiAgCQlnZW40X2d0X3dvcmthcm91bmRz X2luaXQoaTkxNSwgd2FsKTsKPiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA8PSA4KQo+ICsJ ZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDw9IDgpCj4gIAkJOwo+ICAJZWxzZQo+IC0JCU1J U1NJTkdfQ0FTRShJTlRFTF9HRU4oaTkxNSkpOwo+ICsJCU1JU1NJTkdfQ0FTRShHUkFQSElDU19W RVIoaTkxNSkpOwo+ICB9Cj4gIAo+ICB2b2lkIGludGVsX2d0X2luaXRfd29ya2Fyb3VuZHMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gQEAgLTE1NTgsOSArMTU1OCw5IEBAIHZvaWQg aW50ZWxfZW5naW5lX2luaXRfd2hpdGVsaXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKPiAgCj4gIAlpZiAoSVNfREcxKGk5MTUpKQo+ICAJCWRnMV93aGl0ZWxpc3RfYnVpbGQoZW5n aW5lKTsKPiAtCWVsc2UgaWYgKElTX0dFTihpOTE1LCAxMikpCj4gKwllbHNlIGlmIChHUkFQSElD U19WRVIoaTkxNSkgPT0gMTIpCj4gIAkJdGdsX3doaXRlbGlzdF9idWlsZChlbmdpbmUpOwo+IC0J ZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDExKSkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1 KSA9PSAxMSkKPiAgCQlpY2xfd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSk7Cj4gIAllbHNlIGlmIChJ U19DQU5OT05MQUtFKGk5MTUpKQo+ICAJCWNubF93aGl0ZWxpc3RfYnVpbGQoZW5naW5lKTsKPiBA QCAtMTU3NiwxMCArMTU3NiwxMCBAQCB2b2lkIGludGVsX2VuZ2luZV9pbml0X3doaXRlbGlzdChz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkJYnh0X3doaXRlbGlzdF9idWlsZChl bmdpbmUpOwo+ICAJZWxzZSBpZiAoSVNfU0tZTEFLRShpOTE1KSkKPiAgCQlza2xfd2hpdGVsaXN0 X2J1aWxkKGVuZ2luZSk7Cj4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPD0gOCkKPiArCWVs c2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8PSA4KQo+ICAJCTsKPiAgCWVsc2UKPiAtCQlNSVNT SU5HX0NBU0UoSU5URUxfR0VOKGk5MTUpKTsKPiArCQlNSVNTSU5HX0NBU0UoR1JBUEhJQ1NfVkVS KGk5MTUpKTsKPiAgCj4gIAl3YV9pbml0X2ZpbmlzaCh3KTsKPiAgfQo+IEBAIC0xNjk1LDcgKzE2 OTUsNyBAQCByY3NfZW5naW5lX3dhX2luaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwpCj4gIAkJCSAgICAgRU5BQkxFX1NNQUxMUEwpOwo+ ICAJfQo+ICAKPiAtCWlmIChJU19HRU4oaTkxNSwgMTEpKSB7Cj4gKwlpZiAoR1JBUEhJQ1NfVkVS KGk5MTUpID09IDExKSB7Cj4gIAkJLyogVGhpcyBpcyBub3QgYW4gV2EuIEVuYWJsZSBmb3IgYmV0 dGVyIGltYWdlIHF1YWxpdHkgKi8KPiAgCQl3YV9tYXNrZWRfZW4od2FsLAo+ICAJCQkgICAgIF8z RF9DSElDS0VOMywKPiBAQCAtMTc5Myw3ICsxNzkzLDcgQEAgcmNzX2VuZ2luZV93YV9pbml0KHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQo+ ICAJCQkgICAgIEZGX0RPUF9DTE9DS19HQVRFX0RJU0FCTEUpOwo+ICAJfQo+ICAKPiAtCWlmIChJ U19HRU5fUkFOR0UoaTkxNSwgOSwgMTIpKSB7Cj4gKwlpZiAoSVNfR1JBUEhJQ1NfVkVSKGk5MTUs IDksIDEyKSkgewo+ICAJCS8qIEZ0clBlckN0eHRQcmVlbXB0aW9uR3JhbnVsYXJpdHlDb250cm9s OnNrbCxieHQsa2JsLGNmbCxjbmwsaWNsLHRnbCAqLwo+ICAJCXdhX21hc2tlZF9lbih3YWwsCj4g IAkJCSAgICAgR0VON19GRl9TTElDRV9DU19DSElDS0VOMSwKPiBAQCAtMTgxNyw3ICsxODE3LDcg QEAgcmNzX2VuZ2luZV93YV9pbml0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3Ry dWN0IGk5MTVfd2FfbGlzdCAqd2FsKQo+ICAJCQkgICAgIEdFTjlfUE9PTEVEX0VVX0xPQURfQkFM QU5DSU5HX0ZJWF9ESVNBQkxFKTsKPiAgCX0KPiAgCj4gLQlpZiAoSVNfR0VOKGk5MTUsIDkpKSB7 Cj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDkpIHsKPiAgCQkvKiBXYUNvbnRleHRTd2l0 Y2hXaXRoQ29uY3VycmVudFRMQkludmFsaWRhdGU6c2tsLGJ4dCxrYmwsZ2xrLGNmbCAqLwo+ICAJ CXdhX21hc2tlZF9lbih3YWwsCj4gIAkJCSAgICAgR0VOOV9DU0ZFX0NISUNLRU4xX1JDUywKPiBA QCAtMTkyMSw3ICsxOTIxLDcgQEAgcmNzX2VuZ2luZV93YV9pbml0KHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQo+ICAJCQkJICAgICBHRU43 X1BTRF9TSU5HTEVfUE9SVF9ESVNQQVRDSF9FTkFCTEUpOwo+ICAJfQo+ICAKPiAtCWlmIChJU19H RU4oaTkxNSwgNykpIHsKPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNykgewo+ICAJCS8q IFdhQkNTVkNTVGxiSW52YWxpZGF0aW9uTW9kZTppdmIsdmx2LGhzdyAqLwo+ICAJCXdhX21hc2tl ZF9lbih3YWwsCj4gIAkJCSAgICAgR0ZYX01PREVfR0VONywKPiBAQCAtMTk1Myw3ICsxOTUzLDcg QEAgcmNzX2VuZ2luZV93YV9pbml0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3Ry dWN0IGk5MTVfd2FfbGlzdCAqd2FsKQo+ICAJCSAgICAgICBHRU42X1dJWl9IQVNISU5HXzE2eDQp Owo+ICAJfQo+ICAKPiAtCWlmIChJU19HRU5fUkFOR0UoaTkxNSwgNiwgNykpCj4gKwlpZiAoSVNf R1JBUEhJQ1NfVkVSKGk5MTUsIDYsIDcpKQo+ICAJCS8qCj4gIAkJICogV2UgbmVlZCB0byBkaXNh YmxlIHRoZSBBc3luY0ZsaXAgcGVyZm9ybWFuY2Ugb3B0aW1pc2F0aW9ucyBpbgo+ICAJCSAqIG9y ZGVyIHRvIHVzZSBNSV9XQUlUX0ZPUl9FVkVOVCB3aXRoaW4gdGhlIENTLiBJdCBzaG91bGQKPiBA QCAtMTk2NSw3ICsxOTY1LDcgQEAgcmNzX2VuZ2luZV93YV9pbml0KHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQo+ICAJCQkgICAgIE1JX01P REUsCj4gIAkJCSAgICAgQVNZTkNfRkxJUF9QRVJGX0RJU0FCTEUpOwo+ICAKPiAtCWlmIChJU19H RU4oaTkxNSwgNikpIHsKPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNikgewo+ICAJCS8q Cj4gIAkJICogUmVxdWlyZWQgZm9yIHRoZSBoYXJkd2FyZSB0byBwcm9ncmFtIHNjYW5saW5lIHZh bHVlcyBmb3IKPiAgCQkgKiB3YWl0aW5nCj4gQEAgLTIwMTksMTQgKzIwMTksMTQgQEAgcmNzX2Vu Z2luZV93YV9pbml0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVf d2FfbGlzdCAqd2FsKQo+ICAJCQkgICAgICBDTTBfU1RDX0VWSUNUX0RJU0FCTEVfTFJBX1NOQik7 Cj4gIAl9Cj4gIAo+IC0JaWYgKElTX0dFTl9SQU5HRShpOTE1LCA0LCA2KSkKPiArCWlmIChJU19H UkFQSElDU19WRVIoaTkxNSwgNCwgNikpCj4gIAkJLyogV2FUaW1lZFNpbmdsZVZlcnRleERpc3Bh dGNoOmNsLGJ3LGN0ZyxlbGssaWxrLHNuYiAqLwo+ICAJCXdhX2FkZCh3YWwsIE1JX01PREUsCj4g IAkJICAgICAgIDAsIF9NQVNLRURfQklUX0VOQUJMRShWU19USU1FUl9ESVNQQVRDSCksCj4gIAkJ ICAgICAgIC8qIFhYWCBiaXQgZG9lc24ndCBzdGljayBvbiBCcm9hZHdhdGVyICovCj4gIAkJICAg ICAgIElTX0k5NjVHKGk5MTUpID8gMCA6IFZTX1RJTUVSX0RJU1BBVENIKTsKPiAgCj4gLQlpZiAo SVNfR0VOKGk5MTUsIDQpKQo+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA0KQo+ICAJCS8q Cj4gIAkJICogRGlzYWJsZSBDT05TVEFOVF9CVUZGRVIgYmVmb3JlIGl0IGlzIGxvYWRlZCBmcm9t IHRoZSBjb250ZXh0Cj4gIAkJICogaW1hZ2UuIEZvciBhcyBpdCBpcyBsb2FkZWQsIGl0IGlzIGV4 ZWN1dGVkIGFuZCB0aGUgc3RvcmVkCj4gQEAgLTIwNTgsNyArMjA1OCw3IEBAIHhjc19lbmdpbmVf d2FfaW5pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVjdCBpOTE1X3dhX2xp c3QgKndhbCkKPiAgc3RhdGljIHZvaWQKPiAgZW5naW5lX2luaXRfd29ya2Fyb3VuZHMoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwpCj4gIHsK PiAtCWlmIChJOTE1X1NFTEZURVNUX09OTFkoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPCA0KSkK PiArCWlmIChJOTE1X1NFTEZURVNUX09OTFkoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPCA0 KSkKPiAgCQlyZXR1cm47Cj4gIAo+ICAJaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNT KQo+IEBAIC0yMDcxLDcgKzIwNzEsNyBAQCB2b2lkIGludGVsX2VuZ2luZV9pbml0X3dvcmthcm91 bmRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+ICAJc3RydWN0IGk5MTVf d2FfbGlzdCAqd2FsID0gJmVuZ2luZS0+d2FfbGlzdDsKPiAgCj4gLQlpZiAoSU5URUxfR0VOKGVu Z2luZS0+aTkxNSkgPCA0KQo+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpIDwgNCkK PiAgCQlyZXR1cm47Cj4gIAo+ICAJd2FfaW5pdF9zdGFydCh3YWwsICJlbmdpbmUiLCBlbmdpbmUt Pm5hbWUpOwo+IEBAIC0yMTEyLDkgKzIxMTIsOSBAQCBzdGF0aWMgYm9vbCBtY3JfcmFuZ2Uoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHUzMiBvZmZzZXQpCj4gIAljb25zdCBzdHJ1Y3Qg bWNyX3JhbmdlICptY3JfcmFuZ2VzOwo+ICAJaW50IGk7Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihp OTE1KSA+PSAxMikKPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTIpCj4gIAkJbWNyX3Jh bmdlcyA9IG1jcl9yYW5nZXNfZ2VuMTI7Cj4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0g OCkKPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4KQo+ICAJCW1jcl9yYW5nZXMg PSBtY3JfcmFuZ2VzX2dlbjg7Cj4gIAllbHNlCj4gIAkJcmV0dXJuIGZhbHNlOwo+IEBAIC0yMTQz LDcgKzIxNDMsNyBAQCB3YV9saXN0X3NybShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgCXUz MiBzcm0sICpjczsKPiAgCj4gIAlzcm0gPSBNSV9TVE9SRV9SRUdJU1RFUl9NRU0gfCBNSV9TUk1f TFJNX0dMT0JBTF9HVFQ7Cj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDgpCj4gKwlpZiAoR1JB UEhJQ1NfVkVSKGk5MTUpID49IDgpCj4gIAkJc3JtKys7Cj4gIAo+ICAJZm9yIChpID0gMCwgd2Eg PSB3YWwtPmxpc3Q7IGkgPCB3YWwtPmNvdW50OyBpKyssIHdhKyspIHsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX2NzLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfY3MuYwo+IGluZGV4IDM0NTNlYjc3YzQ5OC4u NjRhYmY1ZmVhYmZhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0 ZXN0X2VuZ2luZV9jcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rf ZW5naW5lX2NzLmMKPiBAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgaW50IHdyaXRlX3RpbWVzdGFt cChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgaW50IHNsb3QpCj4gIAkJcmV0dXJuIFBUUl9FUlIo Y3MpOwo+ICAKPiAgCWNtZCA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTSB8IE1JX1VTRV9HR1RUOwo+ IC0JaWYgKElOVEVMX0dFTihycS0+ZW5naW5lLT5pOTE1KSA+PSA4KQo+ICsJaWYgKEdSQVBISUNT X1ZFUihycS0+ZW5naW5lLT5pOTE1KSA+PSA4KQo+ICAJCWNtZCsrOwo+ICAJKmNzKysgPSBjbWQ7 Cj4gIAkqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfVElNRVNUQU1QKHJxLT5lbmdp bmUtPm1taW9fYmFzZSkpOwo+IEBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIGludCBwZXJmX21p X2JiX3N0YXJ0KHZvaWQgKmFyZykKPiAgCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+ICAJaW50 IGVyciA9IDA7Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPCA3KSAvKiBmb3IgcGVy LWVuZ2luZSBDU19USU1FU1RBTVAgKi8KPiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwg NykgLyogZm9yIHBlci1lbmdpbmUgQ1NfVElNRVNUQU1QICovCj4gIAkJcmV0dXJuIDA7Cj4gIAo+ ICAJcGVyZl9iZWdpbihndCk7Cj4gQEAgLTI0OSw3ICsyNDksNyBAQCBzdGF0aWMgaW50IHBlcmZf bWlfbm9vcCh2b2lkICphcmcpCj4gIAllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiAgCWludCBl cnIgPSAwOwo+ICAKPiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgNykgLyogZm9yIHBlci1l bmdpbmUgQ1NfVElNRVNUQU1QICovCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8IDcp IC8qIGZvciBwZXItZW5naW5lIENTX1RJTUVTVEFNUCAqLwo+ICAJCXJldHVybiAwOwo+ICAKPiAg CXBlcmZfYmVnaW4oZ3QpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9lbmdpbmVfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2Vu Z2luZV9wbS5jCj4gaW5kZXggMmM4OTg2MjJiZGZiLi43MmNjYTNmMGRhMjEgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX3BtLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYwo+IEBAIC0xOTgsNyAr MTk4LDcgQEAgc3RhdGljIGludCBsaXZlX2VuZ2luZV90aW1lc3RhbXBzKHZvaWQgKmFyZykKPiAg CSAqIHRoZSBzYW1lIENTIGNsb2NrLgo+ICAJICovCj4gIAo+IC0JaWYgKElOVEVMX0dFTihndC0+ aTkxNSkgPCA4KQo+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCA4KQo+ICAJCXJldHVy biAwOwo+ICAKPiAgCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGd0LCBpZCkgewo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jCj4gaW5kZXggMWY5MzU5MWE4 YzY5Li5lYTIyMDNhZjA3NjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv c2VsZnRlc3RfZXhlY2xpc3RzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxm dGVzdF9leGVjbGlzdHMuYwo+IEBAIC0zMjY5LDcgKzMyNjksNyBAQCBzdGF0aWMgaW50IGxpdmVf cHJlZW1wdF91c2VyKHZvaWQgKmFyZykKPiAgCQlpZiAoIWludGVsX2VuZ2luZV9oYXNfcHJlZW1w dGlvbihlbmdpbmUpKQo+ICAJCQljb250aW51ZTsKPiAgCj4gLQkJaWYgKElTX0dFTihndC0+aTkx NSwgOCkgJiYgZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4gKwkJaWYgKEdSQVBISUNT X1ZFUihndC0+aTkxNSkgPT0gOCAmJiBlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKPiAg CQkJY29udGludWU7IC8qIHdlIG5lZWQgcGVyLWNvbnRleHQgR1BSICovCj4gIAo+ICAJCWlmIChp Z3RfbGl2ZV90ZXN0X2JlZ2luKCZ0LCBndC0+aTkxNSwgX19mdW5jX18sIGVuZ2luZS0+bmFtZSkp IHsKPiBAQCAtNDI5Myw3ICs0MjkzLDcgQEAgc3RhdGljIGludCBsaXZlX3ZpcnR1YWxfcHJlc2Vy dmVkKHZvaWQgKmFyZykKPiAgCQlyZXR1cm4gMDsKPiAgCj4gIAkvKiBBcyB3ZSB1c2UgQ1NfR1BS IHdlIGNhbm5vdCBydW4gYmVmb3JlIHRoZXkgZXhpc3RlZCBvbiBhbGwgZW5naW5lcy4gKi8KPiAt CWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgOSkKPiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5 MTUpIDwgOSkKPiAgCQlyZXR1cm4gMDsKPiAgCj4gIAlmb3IgKGNsYXNzID0gMDsgY2xhc3MgPD0g TUFYX0VOR0lORV9DTEFTUzsgY2xhc3MrKykgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9zZWxmdGVzdF9ndF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2Vs ZnRlc3RfZ3RfcG0uYwo+IGluZGV4IGMwODQ1YmY3MmRkMy4uYjk0NDEyMTdjYTNkIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2d0X3BtLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9ndF9wbS5jCj4gQEAgLTc0LDEwICs3NCwx MCBAQCBzdGF0aWMgaW50IGxpdmVfZ3RfY2xvY2tzKHZvaWQgKmFyZykKPiAgCQlyZXR1cm4gMDsK PiAgCX0KPiAgCj4gLQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA8IDQpIC8qIEFueSBDU19USU1F U1RBTVA/ICovCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8IDQpIC8qIEFueSBDU19U SU1FU1RBTVA/ICovCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0JaWYgKElTX0dFTihndC0+aTkxNSwg NSkpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA9PSA1KQo+ICAJCS8qCj4gIAkJICog WFhYIENTX1RJTUVTVEFNUCBsb3cgZHdvcmQgaXMgZHlzZnVuY3Rpb25hbD8KPiAgCQkgKgo+IEBA IC04Niw3ICs4Niw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9ndF9jbG9ja3Modm9pZCAqYXJnKQo+ICAJ CSAqLwo+ICAJCXJldHVybiAwOwo+ICAKPiAtCWlmIChJU19HRU4oZ3QtPmk5MTUsIDQpKQo+ICsJ aWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPT0gNCkKPiAgCQkvKgo+ICAJCSAqIFhYWCBDU19U SU1FU1RBTVAgYXBwZWFycyBnaWJiZXJpc2gKPiAgCQkgKgo+IEBAIC0xMDUsNyArMTA1LDcgQEAg c3RhdGljIGludCBsaXZlX2d0X2Nsb2Nrcyh2b2lkICphcmcpCj4gIAkJdTY0IHRpbWU7Cj4gIAkJ dTY0IGR0Owo+ICAKPiAtCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPCA3ICYmIGVuZ2lu ZS0+aWQgIT0gUkNTMCkKPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPCA3ICYm IGVuZ2luZS0+aWQgIT0gUkNTMCkKPiAgCQkJY29udGludWU7Cj4gIAo+ICAJCW1lYXN1cmVfY2xv Y2tzKGVuZ2luZSwgJmN5Y2xlcywgJmR0KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2NoZWNrLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9oYW5nY2hlY2suYwo+IGluZGV4IDViNjNkNGRmOGM5My4uODUzMjQ2ZmFkMDVmIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2hhbmdjaGVjay5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2NoZWNrLmMKPiBA QCAtMTgwLDcgKzE4MCw3IEBAIGhhbmdfY3JlYXRlX3JlcXVlc3Qoc3RydWN0IGhhbmcgKmgsIHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCQlnb3RvIGNhbmNlbF9ycTsKPiAgCj4g IAliYXRjaCA9IGgtPmJhdGNoOwo+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPj0gOCkgewo+ ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPj0gOCkgewo+ICAJCSpiYXRjaCsrID0gTUlf U1RPUkVfRFdPUkRfSU1NX0dFTjQ7Cj4gIAkJKmJhdGNoKysgPSBsb3dlcl8zMl9iaXRzKGh3c19h ZGRyZXNzKGh3cywgcnEpKTsKPiAgCQkqYmF0Y2grKyA9IHVwcGVyXzMyX2JpdHMoaHdzX2FkZHJl c3MoaHdzLCBycSkpOwo+IEBAIC0xOTQsNyArMTk0LDcgQEAgaGFuZ19jcmVhdGVfcmVxdWVzdChz dHJ1Y3QgaGFuZyAqaCwgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJCSpiYXRj aCsrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMSA8PCA4IHwgMTsKPiAgCQkqYmF0Y2grKyA9 IGxvd2VyXzMyX2JpdHModm1hLT5ub2RlLnN0YXJ0KTsKPiAgCQkqYmF0Y2grKyA9IHVwcGVyXzMy X2JpdHModm1hLT5ub2RlLnN0YXJ0KTsKPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGd0LT5pOTE1 KSA+PSA2KSB7Cj4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPj0gNikgewo+ ICAJCSpiYXRjaCsrID0gTUlfU1RPUkVfRFdPUkRfSU1NX0dFTjQ7Cj4gIAkJKmJhdGNoKysgPSAw Owo+ICAJCSpiYXRjaCsrID0gbG93ZXJfMzJfYml0cyhod3NfYWRkcmVzcyhod3MsIHJxKSk7Cj4g QEAgLTIwNyw3ICsyMDcsNyBAQCBoYW5nX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCBoYW5nICpoLCBz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkJKmJhdGNoKysgPSBNSV9OT09QOwo+ ICAJCSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMSA8PCA4Owo+ICAJCSpiYXRj aCsrID0gbG93ZXJfMzJfYml0cyh2bWEtPm5vZGUuc3RhcnQpOwo+IC0JfSBlbHNlIGlmIChJTlRF TF9HRU4oZ3QtPmk5MTUpID49IDQpIHsKPiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGd0LT5p OTE1KSA+PSA0KSB7Cj4gIAkJKmJhdGNoKysgPSBNSV9TVE9SRV9EV09SRF9JTU1fR0VONCB8IE1J X1VTRV9HR1RUOwo+ICAJCSpiYXRjaCsrID0gMDsKPiAgCQkqYmF0Y2grKyA9IGxvd2VyXzMyX2Jp dHMoaHdzX2FkZHJlc3MoaHdzLCBycSkpOwo+IEBAIC0yNDMsNyArMjQzLDcgQEAgaGFuZ19jcmVh dGVfcmVxdWVzdChzdHJ1Y3QgaGFuZyAqaCwgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICAJfQo+ICAKPiAgCWZsYWdzID0gMDsKPiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDw9 IDUpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8PSA1KQo+ICAJCWZsYWdzIHw9IEk5 MTVfRElTUEFUQ0hfU0VDVVJFOwo+ICAKPiAgCWVyciA9IHJxLT5lbmdpbmUtPmVtaXRfYmJfc3Rh cnQocnEsIHZtYS0+bm9kZS5zdGFydCwgUEFHRV9TSVpFLCBmbGFncyk7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xsYy5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Qvc2VsZnRlc3RfbGxjLmMKPiBpbmRleCA5NDAwNmYxMTdiYmQuLjQ1OWI3NzVmMTYz YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9sbGMuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xsYy5jCj4gQEAgLTQ0LDcg KzQ0LDcgQEAgc3RhdGljIGludCBnZW42X3ZlcmlmeV9yaW5nX2ZyZXEoc3RydWN0IGludGVsX2xs YyAqbGxjKQo+ICAJCWlmIChmb3VuZCAhPSBpYV9mcmVxKSB7Cj4gIAkJCXByX2VycigiTWluIGZy ZXEgdGFibGUoJWQvWyVkLCAlZF0pOiVkTUh6IGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgQ1BVIGZy ZXEsIGZvdW5kICVkLCBleHBlY3RlZCAlZFxuIiwKPiAgCQkJICAgICAgIGdwdV9mcmVxLCBjb25z dHMubWluX2dwdV9mcmVxLCBjb25zdHMubWF4X2dwdV9mcmVxLAo+IC0JCQkgICAgICAgaW50ZWxf Z3B1X2ZyZXEocnBzLCBncHVfZnJlcSAqIChJTlRFTF9HRU4oaTkxNSkgPj0gOSA/IEdFTjlfRlJF UV9TQ0FMRVIgOiAxKSksCj4gKwkJCSAgICAgICBpbnRlbF9ncHVfZnJlcShycHMsIGdwdV9mcmVx ICogKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5ID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEpKSwKPiAg CQkJICAgICAgIGZvdW5kLCBpYV9mcmVxKTsKPiAgCQkJZXJyID0gLUVJTlZBTDsKPiAgCQkJYnJl YWs7Cj4gQEAgLTU0LDcgKzU0LDcgQEAgc3RhdGljIGludCBnZW42X3ZlcmlmeV9yaW5nX2ZyZXEo c3RydWN0IGludGVsX2xsYyAqbGxjKQo+ICAJCWlmIChmb3VuZCAhPSByaW5nX2ZyZXEpIHsKPiAg CQkJcHJfZXJyKCJNaW4gZnJlcSB0YWJsZSglZC9bJWQsICVkXSk6JWRNSHogZGlkIG5vdCBtYXRj aCBleHBlY3RlZCByaW5nIGZyZXEsIGZvdW5kICVkLCBleHBlY3RlZCAlZFxuIiwKPiAgCQkJICAg ICAgIGdwdV9mcmVxLCBjb25zdHMubWluX2dwdV9mcmVxLCBjb25zdHMubWF4X2dwdV9mcmVxLAo+ IC0JCQkgICAgICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBncHVfZnJlcSAqIChJTlRFTF9HRU4oaTkx NSkgPj0gOSA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSksCj4gKwkJCSAgICAgICBpbnRlbF9ncHVf ZnJlcShycHMsIGdwdV9mcmVxICogKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5ID8gR0VOOV9GUkVR X1NDQUxFUiA6IDEpKSwKPiAgCQkJICAgICAgIGZvdW5kLCByaW5nX2ZyZXEpOwo+ICAJCQllcnIg PSAtRUlOVkFMOwo+ICAJCQlicmVhazsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Qvc2VsZnRlc3RfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9s cmMuYwo+IGluZGV4IGQ4ZjY2MjM1MjRlOC4uMzExOTAxNmQ5OTEwIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMKPiBAQCAtNTg0LDcgKzU4NCw3IEBAIHN0YXRpYyBp bnQgX19saXZlX2xyY19ncHIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAJaW50 IGVycjsKPiAgCWludCBuOwo+ICAKPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8IDkg JiYgZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVu Z2luZS0+aTkxNSkgPCA5ICYmIGVuZ2luZS0+Y2xhc3MgIT0gUkVOREVSX0NMQVNTKQo+ICAJCXJl dHVybiAwOyAvKiBHUFIgb25seSBvbiByY3MwIGZvciBnZW44ICovCj4gIAo+ICAJZXJyID0gZ3By X21ha2VfZGlydHkoZW5naW5lLT5rZXJuZWxfY29udGV4dCk7Cj4gQEAgLTEzODksMTAgKzEzODks MTAgQEAgc3RhdGljIGludCBfX2xyY19pc29sYXRpb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLCB1MzIgcG9pc29uKQo+ICAKPiAgc3RhdGljIGJvb2wgc2tpcF9pc29sYXRpb24oY29u c3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4gLQlpZiAoZW5naW5lLT5j bGFzcyA9PSBDT1BZX0VOR0lORV9DTEFTUyAmJiBJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA9PSA5 KQo+ICsJaWYgKGVuZ2luZS0+Y2xhc3MgPT0gQ09QWV9FTkdJTkVfQ0xBU1MgJiYgR1JBUEhJQ1Nf VkVSKGVuZ2luZS0+aTkxNSkgPT0gOSkKPiAgCQlyZXR1cm4gdHJ1ZTsKPiAgCj4gLQlpZiAoZW5n aW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1MgJiYgSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPT0g MTEpCj4gKwlpZiAoZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1MgJiYgR1JBUEhJQ1NfVkVS KGVuZ2luZS0+aTkxNSkgPT0gMTEpCj4gIAkJcmV0dXJuIHRydWU7Cj4gIAo+ICAJcmV0dXJuIGZh bHNlOwo+IEBAIC0xNTUxLDcgKzE1NTEsNyBAQCBzdGF0aWMgaW50IF9fbGl2ZV9scmNfaW5kaXJl Y3RfY3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCS8qIFdlIHVzZSB0 aGUgYWxyZWFkeSByZXNlcnZlZCBleHRyYSBwYWdlIGluIGNvbnRleHQgc3RhdGUgKi8KPiAgCWlm ICghYS0+d2FfYmJfcGFnZSkgewo+ICAJCUdFTV9CVUdfT04oYi0+d2FfYmJfcGFnZSk7Cj4gLQkJ R0VNX0JVR19PTihJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA9PSAxMik7Cj4gKwkJR0VNX0JVR19P TihHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA9PSAxMik7Cj4gIAkJZ290byB1bnBpbl9iOwo+ ICAJfQo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rf bW9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbW9jcy5jCj4gaW5kZXgg ZTU1YTg4N2QxMWUyLi5iOWJiMGU2ZTk3ZjcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Qvc2VsZnRlc3RfbW9jcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv c2VsZnRlc3RfbW9jcy5jCj4gQEAgLTE4Myw3ICsxODMsNyBAQCBzdGF0aWMgYm9vbCBtY3JfcmFu Z2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHUzMiBvZmZzZXQpCj4gIAkgKiB3aGlj aCBvbmx5IGNvbnRyb2xzIENQVSBpbml0aWF0ZWQgTU1JTy4gUm91dGluZyBkb2VzIG5vdAo+ICAJ ICogd29yayBmb3IgQ1MgYWNjZXNzIHNvIHdlIGNhbm5vdCB2ZXJpZnkgdGhlbSBvbiB0aGlzIHBh dGguCj4gIAkgKi8KPiAtCXJldHVybiBJTlRFTF9HRU4oaTkxNSkgPj0gOCAmJiBvZmZzZXQgPj0g MHhiMDAwICYmIG9mZnNldCA8PSAweGI0ZmY7Cj4gKwlyZXR1cm4gR1JBUEhJQ1NfVkVSKGk5MTUp ID49IDggJiYgb2Zmc2V0ID49IDB4YjAwMCAmJiBvZmZzZXQgPD0gMHhiNGZmOwo+ICB9Cj4gIAo+ ICBzdGF0aWMgaW50IGNoZWNrX2wzY2NfdGFibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yYzYu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3JjNi5jCj4gaW5kZXggNzEwZjgy NWY2ZTVhLi44YzcwYjdlMTIwNzQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Qvc2VsZnRlc3RfcmM2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVz dF9yYzYuYwo+IEBAIC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIGNvbnN0IHUzMiAqX19saXZlX3Jj Nl9jdHgoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+ICAJfQo+ICAKPiAgCWNtZCA9IE1JX1NU T1JFX1JFR0lTVEVSX01FTSB8IE1JX1VTRV9HR1RUOwo+IC0JaWYgKElOVEVMX0dFTihycS0+ZW5n aW5lLT5pOTE1KSA+PSA4KQo+ICsJaWYgKEdSQVBISUNTX1ZFUihycS0+ZW5naW5lLT5pOTE1KSA+ PSA4KQo+ICAJCWNtZCsrOwo+ICAKPiAgCSpjcysrID0gY21kOwo+IEBAIC0xOTMsNyArMTkzLDcg QEAgaW50IGxpdmVfcmM2X2N0eF93YSh2b2lkICphcmcpCj4gIAlpbnQgZXJyID0gMDsKPiAgCj4g IAkvKiBBIHJlYWQgb2YgQ1RYX0lORk8gdXBzZXRzIHJjNi4gUG9rZSB0aGUgYmVhciEgKi8KPiAt CWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgOCkKPiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5 MTUpIDwgOCkKPiAgCQlyZXR1cm4gMDsKPiAgCj4gIAllbmdpbmVzID0gcmFuZG9taXNlZF9lbmdp bmVzKGd0LCAmcHJuZywgJmNvdW50KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Qvc2VsZnRlc3RfcmluZ19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9zZWxmdGVzdF9yaW5nX3N1Ym1pc3Npb24uYwo+IGluZGV4IGMxMmU3NDE3MWI2My4uMDQxOTU0 NDA4ZDBmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3Jp bmdfc3VibWlzc2lvbi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rf cmluZ19zdWJtaXNzaW9uLmMKPiBAQCAtNDEsMTAgKzQxLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaTkx NV92bWEgKmNyZWF0ZV93YWxseShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkJ cmV0dXJuIEVSUl9DQVNUKGNzKTsKPiAgCX0KPiAgCj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+ aTkxNSkgPj0gNikgewo+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDYpIHsK PiAgCQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lNTV9HRU40Owo+ICAJCSpjcysrID0gMDsKPiAt CX0gZWxzZSBpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gNCkgewo+ICsJfSBlbHNlIGlm IChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSA0KSB7Cj4gIAkJKmNzKysgPSBNSV9TVE9S RV9EV09SRF9JTU1fR0VONCB8IE1JX1VTRV9HR1RUOwo+ICAJCSpjcysrID0gMDsKPiAgCX0gZWxz ZSB7Cj4gQEAgLTI2Niw3ICsyNjYsNyBAQCBzdGF0aWMgaW50IGxpdmVfY3R4X3N3aXRjaF93YSh2 b2lkICphcmcpCj4gIAkJaWYgKCFpbnRlbF9lbmdpbmVfY2FuX3N0b3JlX2R3b3JkKGVuZ2luZSkp Cj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAtCQlpZiAoSVNfR0VOX1JBTkdFKGd0LT5pOTE1LCA0LCA1 KSkKPiArCQlpZiAoSVNfR1JBUEhJQ1NfVkVSKGd0LT5pOTE1LCA0LCA1KSkKPiAgCQkJY29udGlu dWU7IC8qIE1JX1NUT1JFX0RXT1JEIGlzIHByaXZpbGVnZWQhICovCj4gIAo+ICAJCXNhdmVkX3dh ID0gZmV0Y2hfYW5kX3plcm8oJmVuZ2luZS0+d2FfY3R4LnZtYSk7Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3Jwcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Qvc2VsZnRlc3RfcnBzLmMKPiBpbmRleCAzY2ExYmQ1NzkzYzMuLjdlZTI1MTNlMTVmOSAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9ycHMuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3Jwcy5jCj4gQEAgLTIwNCw3ICsy MDQsNyBAQCBzdGF0aWMgdm9pZCBzaG93X3BzdGF0ZV9saW1pdHMoc3RydWN0IGludGVsX3JwcyAq cnBzKQo+ICAJCQlpOTE1X21taW9fcmVnX29mZnNldChCWFRfUlBfU1RBVEVfQ0FQKSwKPiAgCQkJ aW50ZWxfdW5jb3JlX3JlYWQocnBzX3RvX3VuY29yZShycHMpLAo+ICAJCQkJCSAgQlhUX1JQX1NU QVRFX0NBUCkpOwo+IC0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwgOSkpIHsKPiArCX0gZWxzZSBp ZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDkpIHsKPiAgCQlwcl9pbmZvKCJQX1NUQVRFX0xJTUlU U1sleF06IDB4JTA4eFxuIiwKPiAgCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOV9SUF9TVEFU RV9MSU1JVFMpLAo+ICAJCQlpbnRlbF91bmNvcmVfcmVhZChycHNfdG9fdW5jb3JlKHJwcyksCj4g QEAgLTIyMiw3ICsyMjIsNyBAQCBpbnQgbGl2ZV9ycHNfY2xvY2tfaW50ZXJ2YWwodm9pZCAqYXJn KQo+ICAJc3RydWN0IGlndF9zcGlubmVyIHNwaW47Cj4gIAlpbnQgZXJyID0gMDsKPiAgCj4gLQlp ZiAoIWludGVsX3Jwc19pc19lbmFibGVkKHJwcykgfHwgSU5URUxfR0VOKGd0LT5pOTE1KSA8IDYp Cj4gKwlpZiAoIWludGVsX3Jwc19pc19lbmFibGVkKHJwcykgfHwgR1JBUEhJQ1NfVkVSKGd0LT5p OTE1KSA8IDYpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+ICAJaWYgKGlndF9zcGlubmVyX2luaXQoJnNw aW4sIGd0KSkKPiBAQCAtNTA2LDcgKzUwNiw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcGN1X2NvbmZp ZyhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gIAo+ICAJbWluX2dwdV9mcmVxID0gcnBzLT5taW5f ZnJlcTsKPiAgCW1heF9ncHVfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7Cj4gLQlpZiAoSU5URUxfR0VO KGk5MTUpID49IDkpIHsKPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkgewo+ICAJCS8q IENvbnZlcnQgR1QgZnJlcXVlbmN5IHRvIDUwIEhaIHVuaXRzICovCj4gIAkJbWluX2dwdV9mcmVx IC89IEdFTjlfRlJFUV9TQ0FMRVI7Cj4gIAkJbWF4X2dwdV9mcmVxIC89IEdFTjlfRlJFUV9TQ0FM RVI7Cj4gQEAgLTYxNCw3ICs2MTQsNyBAQCBpbnQgbGl2ZV9ycHNfZnJlcXVlbmN5X2NzKHZvaWQg KmFyZykKPiAgCWlmICghaW50ZWxfcnBzX2lzX2VuYWJsZWQocnBzKSkKPiAgCQlyZXR1cm4gMDsK PiAgCj4gLQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA8IDgpIC8qIGZvciBDUyBzaW1wbGljaXR5 ICovCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8IDgpIC8qIGZvciBDUyBzaW1wbGlj aXR5ICovCj4gIAkJcmV0dXJuIDA7Cj4gIAo+ICAJaWYgKENQVV9MQVRFTkNZID49IDApCj4gQEAg LTc1NSw3ICs3NTUsNyBAQCBpbnQgbGl2ZV9ycHNfZnJlcXVlbmN5X3NybSh2b2lkICphcmcpCj4g IAlpZiAoIWludGVsX3Jwc19pc19lbmFibGVkKHJwcykpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0J aWYgKElOVEVMX0dFTihndC0+aTkxNSkgPCA4KSAvKiBmb3IgQ1Mgc2ltcGxpY2l0eSAqLwo+ICsJ aWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCA4KSAvKiBmb3IgQ1Mgc2ltcGxpY2l0eSAqLwo+ ICAJCXJldHVybiAwOwo+ICAKPiAgCWlmIChDUFVfTEFURU5DWSA+PSAwKQo+IEBAIC0xMDMxLDcg KzEwMzEsNyBAQCBpbnQgbGl2ZV9ycHNfaW50ZXJydXB0KHZvaWQgKmFyZykKPiAgCSAqIEZpcnN0 LCBsZXQncyBjaGVjayB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgcmVjZWl2aW5nIGludGVycnVwdHMu Cj4gIAkgKi8KPiAgCj4gLQlpZiAoIWludGVsX3Jwc19oYXNfaW50ZXJydXB0cyhycHMpIHx8IElO VEVMX0dFTihndC0+aTkxNSkgPCA2KQo+ICsJaWYgKCFpbnRlbF9ycHNfaGFzX2ludGVycnVwdHMo cnBzKSB8fCBHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgNikKPiAgCQlyZXR1cm4gMDsKPiAgCj4g IAlpbnRlbF9ndF9wbV9nZXQoZ3QpOwo+IEBAIC0xMTM2LDcgKzExMzYsNyBAQCBpbnQgbGl2ZV9y cHNfcG93ZXIodm9pZCAqYXJnKQo+ICAJICogdGhhdCB0aGVvcnkuCj4gIAkgKi8KPiAgCj4gLQlp ZiAoIWludGVsX3Jwc19pc19lbmFibGVkKHJwcykgfHwgSU5URUxfR0VOKGd0LT5pOTE1KSA8IDYp Cj4gKwlpZiAoIWludGVsX3Jwc19pc19lbmFibGVkKHJwcykgfHwgR1JBUEhJQ1NfVkVSKGd0LT5p OTE1KSA8IDYpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+ICAJaWYgKCFsaWJyYXBsX3N1cHBvcnRlZChn dC0+aTkxNSkpCj4gQEAgLTEyNDAsNyArMTI0MCw3IEBAIGludCBsaXZlX3Jwc19keW5hbWljKHZv aWQgKmFyZykKPiAgCSAqIG1vdmluZyBwYXJ0cyBpbnRvIGR5bmFtaWMgcmVjbG9ja2luZyBiYXNl ZCBvbiBsb2FkLgo+ICAJICovCj4gIAo+IC0JaWYgKCFpbnRlbF9ycHNfaXNfZW5hYmxlZChycHMp IHx8IElOVEVMX0dFTihndC0+aTkxNSkgPCA2KQo+ICsJaWYgKCFpbnRlbF9ycHNfaXNfZW5hYmxl ZChycHMpIHx8IEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCA2KQo+ICAJCXJldHVybiAwOwo+ICAK PiAgCWlmIChpZ3Rfc3Bpbm5lcl9pbml0KCZzcGluLCBndCkpCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3RpbWVsaW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9zZWxmdGVzdF90aW1lbGluZS5jCj4gaW5kZXggOWFkYmQ5ZDE0N2JlLi42NGRhMGM5 MWRlYzEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGlt ZWxpbmUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3RpbWVsaW5l LmMKPiBAQCAtNDU3LDEyICs0NTcsMTIgQEAgc3RhdGljIGludCBlbWl0X2dndHRfc3RvcmVfZHco c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBhZGRyLCB1MzIgdmFsdWUpCj4gIAlpZiAoSVNf RVJSKGNzKSkKPiAgCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihy cS0+ZW5naW5lLT5pOTE1KSA+PSA4KSB7Cj4gKwlpZiAoR1JBUEhJQ1NfVkVSKHJxLT5lbmdpbmUt Pmk5MTUpID49IDgpIHsKPiAgCQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lNTV9HRU40IHwgTUlf VVNFX0dHVFQ7Cj4gIAkJKmNzKysgPSBhZGRyOwo+ICAJCSpjcysrID0gMDsKPiAgCQkqY3MrKyA9 IHZhbHVlOwo+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4ocnEtPmVuZ2luZS0+aTkxNSkgPj0gNCkg ewo+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIocnEtPmVuZ2luZS0+aTkxNSkgPj0gNCkgewo+ ICAJCSpjcysrID0gTUlfU1RPUkVfRFdPUkRfSU1NX0dFTjQgfCBNSV9VU0VfR0dUVDsKPiAgCQkq Y3MrKyA9IDA7Cj4gIAkJKmNzKysgPSBhZGRyOwo+IEBAIC05OTIsNyArOTkyLDcgQEAgc3RhdGlj IGludCBsaXZlX2h3c3BfcmVhZCh2b2lkICphcmcpCj4gIAkgKiBldmVuIGFjcm9zcyBtdWx0aXBs ZSB3cmFwcy4KPiAgCSAqLwo+ICAKPiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgOCkgLyog Q1MgY29udmVuaWVuY2UgW1NSTS9MUk1dICovCj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1 KSA8IDgpIC8qIENTIGNvbnZlbmllbmNlIFtTUk0vTFJNXSAqLwo+ICAJCXJldHVybiAwOwo+ICAK PiAgCXRsID0gaW50ZWxfdGltZWxpbmVfY3JlYXRlKGd0KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rfd29ya2Fyb3VuZHMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L3NlbGZ0ZXN0X3dvcmthcm91bmRzLmMKPiBpbmRleCA2NDkzN2VjM2YyZGMuLmMz MDc1NGRhZjRiMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVz dF93b3JrYXJvdW5kcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rf d29ya2Fyb3VuZHMuYwo+IEBAIC0xNDUsNyArMTQ1LDcgQEAgcmVhZF9ub25wcml2cyhzdHJ1Y3Qg aW50ZWxfY29udGV4dCAqY2UpCj4gIAkJZ290byBlcnJfcmVxOwo+ICAKPiAgCXNybSA9IE1JX1NU T1JFX1JFR0lTVEVSX01FTSB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVDsKPiAtCWlmIChJTlRFTF9H RU4oZW5naW5lLT5pOTE1KSA+PSA4KQo+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUp ID49IDgpCj4gIAkJc3JtKys7Cj4gIAo+ICAJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0ICog UklOR19NQVhfTk9OUFJJVl9TTE9UUyk7Cj4gQEAgLTU0Niw3ICs1NDYsNyBAQCBzdGF0aWMgaW50 IGNoZWNrX2RpcnR5X3doaXRlbGlzdChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4gIAo+ICAJ CXNybSA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTTsKPiAgCQlscm0gPSBNSV9MT0FEX1JFR0lTVEVS X01FTTsKPiAtCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gOCkKPiArCQlpZiAoR1JB UEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gOCkKPiAgCQkJbHJtKyssIHNybSsrOwo+ICAKPiAg CQlwcl9kZWJ1ZygiJXM6IFdyaXRpbmcgZ2FyYmFnZSB0byAleFxuIiwKPiBAQCAtNzQ5LDcgKzc0 OSw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9kaXJ0eV93aGl0ZWxpc3Qodm9pZCAqYXJnKQo+ICAKPiAg CS8qIENhbiB0aGUgdXNlciB3cml0ZSB0byB0aGUgd2hpdGVsaXN0ZWQgcmVnaXN0ZXJzPyAqLwo+ ICAKPiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgNykgLyogbWluaW11bSByZXF1aXJlbWVu dCBmb3IgTFJJLCBTUk0sIExSTSAqLwo+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCA3 KSAvKiBtaW5pbXVtIHJlcXVpcmVtZW50IGZvciBMUkksIFNSTSwgTFJNICovCj4gIAkJcmV0dXJu IDA7Cj4gIAo+ICAJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZ3QsIGlkKSB7Cj4gQEAgLTgyOSw3 ICs4MjksNyBAQCBzdGF0aWMgaW50IHJlYWRfd2hpdGVsaXN0ZWRfcmVnaXN0ZXJzKHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZSwKPiAgCQlnb3RvIGVycl9yZXE7Cj4gIAo+ICAJc3JtID0gTUlfU1RP UkVfUkVHSVNURVJfTUVNOwo+IC0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDgpCj4g KwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gOCkKPiAgCQlzcm0rKzsKPiAgCj4g IAljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQgKiBlbmdpbmUtPndoaXRlbGlzdC5jb3VudCk7 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Yy5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmMKPiBpbmRleCBhZGFlMDRjNDdh YWIuLjg0ZjgwNjkxMTM3MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91 Yy9pbnRlbF9ndWMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1 Yy5jCj4gQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBpbnRlbF9ndWNfaW5pdF9zZW5kX3JlZ3Moc3Ry dWN0IGludGVsX2d1YyAqZ3VjKQo+ICAJZW51bSBmb3JjZXdha2VfZG9tYWlucyBmd19kb21haW5z ID0gMDsKPiAgCXVuc2lnbmVkIGludCBpOwo+ICAKPiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUp ID49IDExKSB7Cj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA+PSAxMSkgewo+ICAJCWd1 Yy0+c2VuZF9yZWdzLmJhc2UgPQo+ICAJCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOMTFfU09G VF9TQ1JBVENIKDApKTsKPiAgCQlndWMtPnNlbmRfcmVncy5jb3VudCA9IEdFTjExX1NPRlRfU0NS QVRDSF9DT1VOVDsKPiBAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgaW50ZWxfZ3VjX2luaXRfZWFy bHkoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+ICAKPiAgCW11dGV4X2luaXQoJmd1Yy0+c2VuZF9t dXRleCk7Cj4gIAlzcGluX2xvY2tfaW5pdCgmZ3VjLT5pcnFfbG9jayk7Cj4gLQlpZiAoSU5URUxf R0VOKGk5MTUpID49IDExKSB7Cj4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDExKSB7Cj4g IAkJZ3VjLT5ub3RpZnlfcmVnID0gR0VOMTFfR1VDX0hPU1RfSU5URVJSVVBUOwo+ICAJCWd1Yy0+ aW50ZXJydXB0cy5yZXNldCA9IGdlbjExX3Jlc2V0X2d1Y19pbnRlcnJ1cHRzOwo+ICAJCWd1Yy0+ aW50ZXJydXB0cy5lbmFibGUgPSBnZW4xMV9lbmFibGVfZ3VjX2ludGVycnVwdHM7Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19hZHMuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19hZHMuYwo+IGluZGV4IDE3NTI2NzE3MzY4 Yy4uYjMyZmFmYmEyYTkwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3Vj L2ludGVsX2d1Y19hZHMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVs X2d1Y19hZHMuYwo+IEBAIC0xNjIsNyArMTYyLDcgQEAgc3RhdGljIHZvaWQgX19ndWNfYWRzX2lu aXQoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+ICAJYmxvYi0+c3lzdGVtX2luZm8uZ2VuZXJpY19n dF9zeXNpbmZvW0dVQ19HRU5FUklDX0dUX1NZU0lORk9fVkRCT1hfU0ZDX1NVUFBPUlRfTUFTS10g PQo+ICAJCWd0LT5pbmZvLnZkYm94X3NmY19hY2Nlc3M7Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihp OTE1KSA+PSAxMiAmJiAhSVNfREdGWChpOTE1KSkgewo+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1 KSA+PSAxMiAmJiAhSVNfREdGWChpOTE1KSkgewo+ICAJCXUzMiBkaXN0ZGJyZWcgPSBpbnRlbF91 bmNvcmVfcmVhZChndC0+dW5jb3JlLAo+ICAJCQkJCQkgIEdFTjEyX0RJU1RfREJTX1BPUFVMQVRF RCk7Cj4gIAkJYmxvYi0+c3lzdGVtX2luZm8uZ2VuZXJpY19ndF9zeXNpbmZvW0dVQ19HRU5FUklD X0dUX1NZU0lORk9fRE9PUkJFTExfQ09VTlRfUEVSX1NRSURJXSA9Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19mdy5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2Z3LmMKPiBpbmRleCAyMjcwZDZiM2IyNzIuLjc2ZmU3NjZh ZDFiYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNf ZncuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19mdy5jCj4g QEAgLTMwLDcgKzMwLDcgQEAgc3RhdGljIHZvaWQgZ3VjX3ByZXBhcmVfeGZlcihzdHJ1Y3QgaW50 ZWxfdW5jb3JlICp1bmNvcmUpCj4gIAllbHNlCj4gIAkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwgR0VOOV9HVF9QTV9DT05GSUcsIEdUX0RPT1JCRUxMX0VOQUJMRSk7Cj4gIAo+IC0JaWYgKElT X0dFTih1bmNvcmUtPmk5MTUsIDkpKSB7Cj4gKwlpZiAoR1JBUEhJQ1NfVkVSKHVuY29yZS0+aTkx NSkgPT0gOSkgewo+ICAJCS8qIERPUCBDbG9jayBHYXRpbmcgRW5hYmxlIGZvciBHdUMgY2xvY2tz ICovCj4gIAkJaW50ZWxfdW5jb3JlX3Jtdyh1bmNvcmUsIEdFTjdfTUlTQ0NQQ1RMLAo+ICAJCQkJ IDAsIEdFTjhfRE9QX0NMT0NLX0dBVEVfR1VDX0VOQUJMRSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jCj4gaW5kZXggMzM1NzE5ZjE3 NDkwLi41NDFmNmRhMWVjNDcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv dWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKPiBAQCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyB2 b2lkIGd1Y19pbnRlcnJ1cHRzX2NhcHR1cmUoc3RydWN0IGludGVsX2d0ICpndCkKPiAgCXUzMiBp cnFzID0gR1RfQ09OVEVYVF9TV0lUQ0hfSU5URVJSVVBUOwo+ICAJdTMyIGRtYXNrID0gaXJxcyA8 PCAxNiB8IGlycXM7Cj4gIAo+IC0JR0VNX0JVR19PTihJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgMTEp Owo+ICsJR0VNX0JVR19PTihHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgMTEpOwo+ICAKPiAgCS8q IERvbid0IGhhbmRsZSB0aGUgY3R4IHN3aXRjaCBpbnRlcnJ1cHQgaW4gR3VDIHN1Ym1pc3Npb24g bW9kZSAqLwo+ICAJaW50ZWxfdW5jb3JlX3Jtdyh1bmNvcmUsIEdFTjExX1JFTkRFUl9DT1BZX0lO VFJfRU5BQkxFLCBkbWFzaywgMCk7Cj4gQEAgLTQ1MSw3ICs0NTEsNyBAQCBzdGF0aWMgdm9pZCBn dWNfaW50ZXJydXB0c19yZWxlYXNlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIAl1MzIgaXJxcyA9 IEdUX0NPTlRFWFRfU1dJVENIX0lOVEVSUlVQVDsKPiAgCXUzMiBkbWFzayA9IGlycXMgPDwgMTYg fCBpcnFzOwo+ICAKPiAtCUdFTV9CVUdfT04oSU5URUxfR0VOKGd0LT5pOTE1KSA8IDExKTsKPiAr CUdFTV9CVUdfT04oR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8IDExKTsKPiAgCj4gIAkvKiBIYW5k bGUgY3R4IHN3aXRjaCBpbnRlcnJ1cHRzIGFnYWluICovCj4gIAlpbnRlbF91bmNvcmVfcm13KHVu Y29yZSwgR0VOMTFfUkVOREVSX0NPUFlfSU5UUl9FTkFCTEUsIDAsIGRtYXNrKTsKPiBAQCAtNjQ4 LDcgKzY0OCw3IEBAIHN0YXRpYyB2b2lkIGd1Y19kZWZhdWx0X3ZmdW5jcyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gIAllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW44X2VtaXRfZmx1 c2hfeGNzOwo+ICAJZW5naW5lLT5lbWl0X2luaXRfYnJlYWRjcnVtYiA9IGdlbjhfZW1pdF9pbml0 X2JyZWFkY3J1bWI7Cj4gIAllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuOF9lbWl0 X2ZpbmlfYnJlYWRjcnVtYl94Y3M7Cj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0g MTIpIHsKPiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMikgewo+ICAJCWVu Z2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW4xMl9lbWl0X2ZpbmlfYnJlYWRjcnVtYl94 Y3M7Cj4gIAkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuMTJfZW1pdF9mbHVzaF94Y3M7Cj4gIAl9 Cj4gQEAgLTY3MCw3ICs2NzAsNyBAQCBzdGF0aWMgdm9pZCBndWNfZGVmYXVsdF92ZnVuY3Moc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAKPiAgc3RhdGljIHZvaWQgcmNzX3N1Ym1p c3Npb25fb3ZlcnJpZGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4gLQlz d2l0Y2ggKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKSB7Cj4gKwlzd2l0Y2ggKEdSQVBISUNTX1ZF UihlbmdpbmUtPmk5MTUpKSB7Cj4gIAljYXNlIDEyOgo+ICAJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9 IGdlbjEyX2VtaXRfZmx1c2hfcmNzOwo+ICAJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIg PSBnZW4xMl9lbWl0X2ZpbmlfYnJlYWRjcnVtYl9yY3M7Cj4gQEAgLTcwMCw3ICs3MDAsNyBAQCBp bnQgaW50ZWxfZ3VjX3N1Ym1pc3Npb25fc2V0dXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+ICAJICogVGhlIHNldHVwIHJlbGllcyBvbiBzZXZlcmFsIGFzc3VtcHRpb25zIChlLmcu IGlycXMgYWx3YXlzIGVuYWJsZWQpCj4gIAkgKiB0aGF0IGFyZSBvbmx5IHZhbGlkIG9uIGdlbjEx Kwo+ICAJICovCj4gLQlHRU1fQlVHX09OKElOVEVMX0dFTihpOTE1KSA8IDExKTsKPiArCUdFTV9C VUdfT04oR1JBUEhJQ1NfVkVSKGk5MTUpIDwgMTEpOwo+ICAKPiAgCXRhc2tsZXRfc2V0dXAoJmVu Z2luZS0+ZXhlY2xpc3RzLnRhc2tsZXQsIGd1Y19zdWJtaXNzaW9uX3Rhc2tsZXQpOwo+ICAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfaHVjLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9odWMuYwo+IGluZGV4IDU2ZDIxNDRkYzZhMC4u ZmM1Mzg3YjQxMGEyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2lu dGVsX2h1Yy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfaHVjLmMK PiBAQCAtNDMsNyArNDMsNyBAQCB2b2lkIGludGVsX2h1Y19pbml0X2Vhcmx5KHN0cnVjdCBpbnRl bF9odWMgKmh1YykKPiAgCj4gIAlpbnRlbF91Y19md19pbml0X2Vhcmx5KCZodWMtPmZ3LCBJTlRF TF9VQ19GV19UWVBFX0hVQyk7Cj4gIAo+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMSkgewo+ ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMSkgewo+ICAJCWh1Yy0+c3RhdHVzLnJlZyA9 IEdFTjExX0hVQ19LRVJORUxfTE9BRF9JTkZPOwo+ICAJCWh1Yy0+c3RhdHVzLm1hc2sgPSBIVUNf TE9BRF9TVUNDRVNTRlVMOwo+ICAJCWh1Yy0+c3RhdHVzLnZhbHVlID0gSFVDX0xPQURfU1VDQ0VT U0ZVTDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfdWMu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX3VjLmMKPiBpbmRleCA2YWJiOGYy ZGMzM2QuLjZjMmJmNGI2YmMxMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC91Yy9pbnRlbF91Yy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxf dWMuYwo+IEBAIC0yMyw3ICsyMyw3IEBAIHN0YXRpYyB2b2lkIHVjX2V4cGFuZF9kZWZhdWx0X29w dGlvbnMoc3RydWN0IGludGVsX3VjICp1YykKPiAgCQlyZXR1cm47Cj4gIAo+ICAJLyogRG9uJ3Qg ZW5hYmxlIEd1Qy9IdUMgb24gcHJlLUdlbjEyICovCj4gLQlpZiAoSU5URUxfR0VOKGk5MTUpIDwg MTIpIHsKPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPCAxMikgewo+ICAJCWk5MTUtPnBhcmFt cy5lbmFibGVfZ3VjID0gMDsKPiAgCQlyZXR1cm47Cj4gIAl9Cj4gQEAgLTQ2Nyw3ICs0NjcsNyBA QCBzdGF0aWMgaW50IF9fdWNfaW5pdF9odyhzdHJ1Y3QgaW50ZWxfdWMgKnVjKQo+ICAKPiAgCS8q IFdhRW5hYmxldUtlcm5lbEhlYWRlclZhbGlkRml4OnNrbCAqLwo+ICAJLyogV2FFbmFibGVHdUNC b290SGFzaENoZWNrTm90U2V0OnNrbCxieHQsa2JsICovCj4gLQlpZiAoSVNfR0VOKGk5MTUsIDkp KQo+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA5KQo+ICAJCWF0dGVtcHRzID0gMzsKPiAg CWVsc2UKPiAgCQlhdHRlbXB0cyA9IDE7Cj4gLS0gCj4gMi4zMS4xCj4gCgotLSAKTWF0dCBSb3Bl cgpHcmFwaGljcyBTb2Z0d2FyZSBFbmdpbmVlcgpWVFQtT1NHQyBQbGF0Zm9ybSBFbmFibGVtZW50 CkludGVsIENvcnBvcmF0aW9uCig5MTYpIDM1Ni0yNzk1Cl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=