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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B6E9FC47DD9 for ; Wed, 28 Feb 2024 12:32:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=l5hW2HlvUryd4KioUUIFWQrModQYGgpplHqpZP8D7II=; b=XmPwh89wqxfJHa oOtVwq/AqzRZeddU6H3DQYHJgGup4HrmsE2Lwz7ttIcU4AKAD4dLvU+5mvuTiAGf6B8cLwyN4Ph23 DbcVOKmVL9fo0n15X+g/73jOv6ph4eVrLjaaUmcuZIkcGlDuDGy/eJOsXOk/LBfBYQhmyuNYhUuqS j6WhF1G16D4nSZkPVwnklXPJHMdaSbUHWRO61TBxSDTUk9DvhHtUoFOTCAFkdRNz34LfBcCWY6J16 QFckmLG/bQ6LuAqNVrguTC4GONdVh6UCzUtv8CrA/luvtWMdJ+0KgmTcrNEK+RbYG/9chd5E2rVBt r370NEaDYWPrmRSgNbOA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rfJ6C-00000009FV3-0t7d; Wed, 28 Feb 2024 12:31:48 +0000 Received: from relay8-d.mail.gandi.net ([217.70.183.201]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rfI6i-00000008yPO-3LQ2 for linux-arm-kernel@lists.infradead.org; Wed, 28 Feb 2024 11:28:23 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 9F9061BF217; Wed, 28 Feb 2024 11:28:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709119695; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PfclauG6FiROWhZPVsgdSsTzW/5hIO8cFkLBtWgRcPU=; b=iEcEB5nvURa4IZu07F9dnfi8xWa31fCk+S6ii3GMLwI3D5cN7v/Gq+Xt35xCbfnzfEOi9C lEUK5VqUPjExoP7vA3+4Yh/pu1EIv9zhm+IocxFmLq/g99wVZcQxI1jObC2Q6vSXLTJ+WF xGc5zg3ViWq4wrj9pkf8/Hs3kh0jh9uEob5ZwNRKJH8/fZH7mIhDdWy4kIDwc6eI9M/DQ8 rqka1f39RWqY3dEluo3wVW9JME558Va+NiRHnGRtO9NOXHM3HsLX0pCFnNBkHwazdZx6kG KGXT+ffRSFAZSt57uLC+1z/eZTsZFU0LxzWKyph8VJwLmvIEa3n2uEKc2PD//A== From: =?utf-8?q?Th=C3=A9o_Lebrun?= Date: Wed, 28 Feb 2024 12:28:04 +0100 Subject: [PATCH v2 06/30] gpio: nomadik: extract GPIO platform driver from drivers/pinctrl/nomadik/ MIME-Version: 1.0 Message-Id: <20240228-mbly-gpio-v2-6-3ba757474006@bootlin.com> References: <20240228-mbly-gpio-v2-0-3ba757474006@bootlin.com> In-Reply-To: <20240228-mbly-gpio-v2-0-3ba757474006@bootlin.com> To: Linus Walleij , Bartosz Golaszewski , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel , Thomas Bogendoerfer Cc: linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, Gregory CLEMENT , Vladimir Kondratiev , Thomas Petazzoni , Tawfik Bayouk , =?utf-8?q?Th=C3=A9o_Lebrun?= X-Mailer: b4 0.13.0 X-GND-Sasl: theo.lebrun@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240228_032817_382285_F439C3B5 X-CRM114-Status: GOOD ( 26.78 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org UHJldmlvdXNseSwgZHJpdmVycy9waW5jdHJsL25vbWFkaWsvcGluY3RybC1ub21hZGlrLmMgcmVn aXN0ZXJlZCB0d28KcGxhdGZvcm0gZHJpdmVyczogcGluY3RybCAmIEdQSU8uIE1vdmUgdGhlIEdQ SU8gYXNwZWN0IHRvIHRoZQpkcml2ZXJzL2dwaW8vIGZvbGRlciwgYXMgd291bGQgYmUgZXhwZWN0 ZWQuCgpCb3RoIGRyaXZlcnMgYXJlIGludGVydHdpbmVkIGZvciBhIHJlYXNvbjsgcGluY3RybCBy ZXF1aXJlcyBhY2Nlc3MgdG8KR1BJTyByZWdpc3RlcnMgZm9yIHBpbm11eGluZywgcHVsbC1kaXNh YmxlLCBkaXNhYmxpbmcgaW50ZXJydXB0cyB3aGlsZQpzZXR0aW5nIHRoZSBtdXhpbmcgYW5kIHdh a2V1cCBjb250cm9sLiBJbmZvcm1hdGlvbiBzaGFyaW5nIGlzIGRvbmUKdGhyb3VnaCBhIHNoYXJl ZCBhcnJheSBjb250YWluaW5nIEdQSU8gY2hpcHMgYW5kIGEgZmV3IGhlbHBlcgpmdW5jdGlvbnMu IFRoYXQgc2hhcmVkIGFycmF5IGlzIG5vdCB0b3VjaGVkIGZyb20gZ3Bpby1ub21hZGlrIHdoZW4K Q09ORklHX1BJTkNUUkxfTk9NQURJSyBpcyBub3QgZGVmaW5lZC4KCk1ha2Ugbm8gY2hhbmdlIHRv IHRoZSBjb2RlIHRoYXQgbW92ZWQgaW50byBncGlvLW5vbWFkaWs7IHRoZXJlIHNob3VsZCBiZQpu byBiZWhhdmlvciBjaGFuZ2UgZm9sbG93aW5nLiBBIGZldyBmdW5jdGlvbnMgYXJlIHNoYXJlZCBh bmQgaGVhZGVyCmNvbW1lbnRzIGFyZSBhZGRlZC4gQ2hlY2twYXRjaCB3YXJuaW5ncyBhcmUgYWRk cmVzc2VkLiBOVU1fQkFOS1MgaXMKcmVuYW1lZCB0byBOTUtfTUFYX0JBTktTLgoKSXQgaXMgc3Vw cG9ydGVkIHRvIGNvbXBpbGUgZ3Bpby1ub21hZGlrIHdpdGhvdXQgcGluY3RybC1ub21hZGlrLiBU aGUKb3Bwb3NpdGUgaXMgbm90IHRydWUuCgpTaWduZWQtb2ZmLWJ5OiBUaMOpbyBMZWJydW4gPHRo ZW8ubGVicnVuQGJvb3RsaW4uY29tPgotLS0KIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3Bpby9LY29uZmlnICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEyICsKIGRyaXZlcnMvZ3Bpby9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3Bpby9ncGlvLW5v bWFkaWsuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgNjYwICsrKysrKysrKysrKysrKysrKysK IGRyaXZlcnMvcGluY3RybC9ub21hZGlrL0tjb25maWcgICAgICAgICAgICAgICAgICAgIHwgICA1 ICstCiBkcml2ZXJzL3BpbmN0cmwvbm9tYWRpay9waW5jdHJsLW5vbWFkaWstZGI4NTAwLmMgICB8 ICAgMyArLQogZHJpdmVycy9waW5jdHJsL25vbWFkaWsvcGluY3RybC1ub21hZGlrLXN0bjg4MTUu YyAgfCAgIDMgKy0KIGRyaXZlcnMvcGluY3RybC9ub21hZGlrL3BpbmN0cmwtbm9tYWRpay5jICAg ICAgICAgIHwgNzIyICstLS0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL2xpbnV4L2dwaW8vZ3Bpby1u b21hZGlrLmggICAgICAgICAgICAgICAgICAgICAgfCAxMjIgKysrLQogOSBmaWxlcyBjaGFuZ2Vk LCA4MDQgaW5zZXJ0aW9ucygrKSwgNzI1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL01BSU5U QUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggODU0YjQxZWU0ZGNjLi41YTIwN2QxOWQ3YzIgMTAw NjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0yNDc0LDYgKzI0NzQs NyBAQCBGOglkcml2ZXJzL2Nsay9jbGstbm9tYWRpay5jCiBGOglkcml2ZXJzL2Nsb2Nrc291cmNl L2Nsa3NyYy1kYng1MDAtcHJjbXUuYwogRjoJZHJpdmVycy9kbWEvc3RlX2RtYTQwKgogRjoJZHJp dmVycy9wbWRvbWFpbi9zdC9zdGUtdXg1MDAtcG0tZG9tYWluLmMKK0Y6CWRyaXZlcnMvZ3Bpby9n cGlvLW5vbWFkaWsuYwogRjoJZHJpdmVycy9od3NwaW5sb2NrL3U4NTAwX2hzZW0uYwogRjoJZHJp dmVycy9pMmMvYnVzc2VzL2kyYy1ub21hZGlrLmMKIEY6CWRyaXZlcnMvaWlvL2FkYy9hYjg1MDAt Z3BhZGMuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL0tjb25maWcgYi9kcml2ZXJzL2dwaW8v S2NvbmZpZwppbmRleCAxMzAxY2VjOTRmMTIuLmZmODMzNzEyNTFjMSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncGlvL0tjb25maWcKQEAgLTQ3OCw2ICs0 NzgsMTggQEAgY29uZmlnIEdQSU9fTVhTCiAJc2VsZWN0IEdQSU9fR0VORVJJQwogCXNlbGVjdCBH RU5FUklDX0lSUV9DSElQCiAKK2NvbmZpZyBHUElPX05PTUFESUsKKwlib29sICJOb21hZGlrIEdQ SU8gZHJpdmVyIgorCWRlcGVuZHMgb24gQVJDSF9VODUwMCB8fCBBUkNIX05PTUFESUsgfHwgQ09N UElMRV9URVNUCisJc2VsZWN0IE9GX0dQSU8KKwlzZWxlY3QgR1BJT0xJQl9JUlFDSElQCisJaGVs cAorCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgdGhlIE5vbWFkaWsgU29DIEdQSU8gYmxvY2su CisKKwkgIEl0IGhhbmRsZXMgdXAgdG8gMzIgR1BJT3MgcGVyIGJhbmssIHRoYXQgY2FuIGFsbCBi ZSBpbnRlcnJ1cHQgc291cmNlcy4KKwkgIEl0IGlzIGRlZXBseSBpbnRlcmNvbm5lY3RlZCB3aXRo IHRoZSBhc3NvY2lhdGVkIHBpbmN0cmwgZHJpdmVyIGFzIEdQSU8KKwkgIHJlZ2lzdGVycyBoYW5k bGUgbXV4aW5nICgiYWx0ZXJuYXRlIGZ1bmN0aW9ucyIpIGFzIHdlbGwuCisKIGNvbmZpZyBHUElP X05QQ01fU0dQSU8KIAlib29sICJOdXZvdG9uIFNHUElPIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBB UkNIX05QQ00gfHwgQ09NUElMRV9URVNUCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vTWFrZWZp bGUgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKaW5kZXggOWU0MGFmMTk2YWFlLi45ZmMyZjU5MzFi MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwaW8v TWFrZWZpbGUKQEAgLTExNiw2ICsxMTYsNyBAQCBvYmotJChDT05GSUdfR1BJT19NVDc2MjEpCQkr PSBncGlvLW10NzYyMS5vCiBvYmotJChDT05GSUdfR1BJT19NVkVCVSkJCSs9IGdwaW8tbXZlYnUu bwogb2JqLSQoQ09ORklHX0dQSU9fTVhDKQkJCSs9IGdwaW8tbXhjLm8KIG9iai0kKENPTkZJR19H UElPX01YUykJCQkrPSBncGlvLW14cy5vCitvYmotJChDT05GSUdfR1BJT19OT01BRElLKQkJKz0g Z3Bpby1ub21hZGlrLm8KIG9iai0kKENPTkZJR19HUElPX05QQ01fU0dQSU8pCQkrPSBncGlvLW5w Y20tc2dwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fT0NURU9OKQkJKz0gZ3Bpby1vY3Rlb24ubwog b2JqLSQoQ09ORklHX0dQSU9fT01BUCkJCQkrPSBncGlvLW9tYXAubwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncGlvL2dwaW8tbm9tYWRpay5jIGIvZHJpdmVycy9ncGlvL2dwaW8tbm9tYWRpay5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTM5NDc3ZTFhNThmCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tbm9tYWRpay5jCkBAIC0wLDAgKzEsNjYw IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICogR1BJ TyBkcml2ZXIgZm9yIHRoZSBJUCBibG9jayBmb3VuZCBpbiB0aGUgTm9tYWRpayBTb0M7IGl0IGlz IGFuIEFNQkEgZGV2aWNlLAorICogbWFuYWdpbmcgMzIgcGlucyB3aXRoIGFsdGVybmF0ZSBmdW5j dGlvbnMuIEl0IGNhbiBhbHNvIGhhbmRsZSB0aGUgU1RBMlgxMQorICogYmxvY2sgZnJvbSBTVC4K KyAqCisgKiBUaGUgR1BJTyBjaGlwcyBhcmUgc2hhcmVkIHdpdGggcGluY3RybC1ub21hZGlrIGlm IHVzZWQ7IGl0IG5lZWRzIGFjY2VzcyBmb3IKKyAqIHBpbm11eGluZyBmdW5jdGlvbmFsaXR5IGFu ZCBvdGhlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMDkgU1RNaWNyb2VsZWN0cm9u aWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWxlc3NhbmRybyBSdWJpbmkgPHJ1YmluaUB1bmlw di5pdD4KKyAqICAgUmV3cml0dGVuIGJhc2VkIG9uIHdvcmsgYnkgUHJhZnVsbGEgV0FEQVNLQVIg PHByYWZ1bGxhLndhZGFza2FyQHN0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIExp bnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4KKyAqLworI2luY2x1ZGUgPGxp bnV4L2NsZWFudXAuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9n cGlvL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxp bnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+Cisj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQu aD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ CisKKyNpbmNsdWRlIDxsaW51eC9ncGlvL2dwaW8tbm9tYWRpay5oPgorCisjaWZuZGVmIENPTkZJ R19QSU5DVFJMX05PTUFESUsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobm1rX2dwaW9fc2xwbV9s b2NrKTsKKyNlbmRpZgorCit2b2lkIF9fbm1rX2dwaW9fc2V0X3NscG0oc3RydWN0IG5ta19ncGlv X2NoaXAgKm5ta19jaGlwLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJIGVudW0gbm1rX2dwaW9f c2xwbSBtb2RlKQoreworCXUzMiBzbHBtOworCisJc2xwbSA9IHJlYWRsKG5ta19jaGlwLT5hZGRy ICsgTk1LX0dQSU9fU0xQQyk7CisJaWYgKG1vZGUgPT0gTk1LX0dQSU9fU0xQTV9OT0NIQU5HRSkK KwkJc2xwbSB8PSBCSVQob2Zmc2V0KTsKKwllbHNlCisJCXNscG0gJj0gfkJJVChvZmZzZXQpOwor CXdyaXRlbChzbHBtLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX1NMUEMpOworfQorCitzdGF0 aWMgdm9pZCBfX25ta19ncGlvX3NldF9vdXRwdXQoc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19j aGlwLAorCQkJCSAgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IHZhbCkKK3sKKwlpZiAodmFsKQor CQl3cml0ZWwoQklUKG9mZnNldCksIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fREFUUyk7CisJ ZWxzZQorCQl3cml0ZWwoQklUKG9mZnNldCksIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fREFU Qyk7Cit9CisKK3ZvaWQgX19ubWtfZ3Bpb19tYWtlX291dHB1dChzdHJ1Y3Qgbm1rX2dwaW9fY2hp cCAqbm1rX2NoaXAsCisJCQkgICAgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IHZhbCkKK3sKKwl3 cml0ZWwoQklUKG9mZnNldCksIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fRElSUyk7CisJX19u bWtfZ3Bpb19zZXRfb3V0cHV0KG5ta19jaGlwLCBvZmZzZXQsIHZhbCk7Cit9CisKKy8qIElSUSBm dW5jdGlvbnMgKi8KKworc3RhdGljIHZvaWQgbm1rX2dwaW9faXJxX2FjayhzdHJ1Y3QgaXJxX2Rh dGEgKmQpCit7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBf ZGF0YShkKTsKKwlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAgPSBncGlvY2hpcF9nZXRf ZGF0YShnYyk7CisKKwljbGtfZW5hYmxlKG5ta19jaGlwLT5jbGspOworCXdyaXRlbChCSVQoZC0+ aHdpcnEpLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0lDKTsKKwljbGtfZGlzYWJsZShubWtf Y2hpcC0+Y2xrKTsKK30KKworZW51bSBubWtfZ3Bpb19pcnFfdHlwZSB7CisJTk9STUFMLAorCVdB S0UsCit9OworCitzdGF0aWMgdm9pZCBfX25ta19ncGlvX2lycV9tb2RpZnkoc3RydWN0IG5ta19n cGlvX2NoaXAgKm5ta19jaGlwLAorCQkJCSAgaW50IG9mZnNldCwgZW51bSBubWtfZ3Bpb19pcnFf dHlwZSB3aGljaCwKKwkJCQkgIGJvb2wgZW5hYmxlKQoreworCXUzMiAqcmltc2N2YWw7CisJdTMy ICpmaW1zY3ZhbDsKKwl1MzIgcmltc2NyZWc7CisJdTMyIGZpbXNjcmVnOworCisJaWYgKHdoaWNo ID09IE5PUk1BTCkgeworCQlyaW1zY3JlZyA9IE5NS19HUElPX1JJTVNDOworCQlmaW1zY3JlZyA9 IE5NS19HUElPX0ZJTVNDOworCQlyaW1zY3ZhbCA9ICZubWtfY2hpcC0+cmltc2M7CisJCWZpbXNj dmFsID0gJm5ta19jaGlwLT5maW1zYzsKKwl9IGVsc2UgIHsKKwkJcmltc2NyZWcgPSBOTUtfR1BJ T19SV0lNU0M7CisJCWZpbXNjcmVnID0gTk1LX0dQSU9fRldJTVNDOworCQlyaW1zY3ZhbCA9ICZu bWtfY2hpcC0+cndpbXNjOworCQlmaW1zY3ZhbCA9ICZubWtfY2hpcC0+ZndpbXNjOworCX0KKwor CS8qIHdlIG11c3QgaW5kaXZpZHVhbGx5IHNldC9jbGVhciB0aGUgdHdvIGVkZ2VzICovCisJaWYg KG5ta19jaGlwLT5lZGdlX3Jpc2luZyAmIEJJVChvZmZzZXQpKSB7CisJCWlmIChlbmFibGUpCisJ CQkqcmltc2N2YWwgfD0gQklUKG9mZnNldCk7CisJCWVsc2UKKwkJCSpyaW1zY3ZhbCAmPSB+QklU KG9mZnNldCk7CisJCXdyaXRlbCgqcmltc2N2YWwsIG5ta19jaGlwLT5hZGRyICsgcmltc2NyZWcp OworCX0KKwlpZiAobm1rX2NoaXAtPmVkZ2VfZmFsbGluZyAmIEJJVChvZmZzZXQpKSB7CisJCWlm IChlbmFibGUpCisJCQkqZmltc2N2YWwgfD0gQklUKG9mZnNldCk7CisJCWVsc2UKKwkJCSpmaW1z Y3ZhbCAmPSB+QklUKG9mZnNldCk7CisJCXdyaXRlbCgqZmltc2N2YWwsIG5ta19jaGlwLT5hZGRy ICsgZmltc2NyZWcpOworCX0KK30KKworc3RhdGljIHZvaWQgX19ubWtfZ3Bpb19zZXRfd2FrZShz dHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAsCisJCQkJaW50IG9mZnNldCwgYm9vbCBvbikK K3sKKwkvKgorCSAqIEVuc3VyZSBXQUtFVVBfRU5BQkxFIGlzIG9uLiAgTm8gbmVlZCB0byBkaXNh YmxlIGl0IGlmIHdha2V1cCBpcworCSAqIGRpc2FibGVkLCBzaW5jZSBzZXR0aW5nIFNMUE0gdG8g MSBpbmNyZWFzZXMgcG93ZXIgY29uc3VtcHRpb24sIGFuZAorCSAqIHdha2V1cCBpcyBhbnlob3cg Y29udHJvbGxlZCBieSB0aGUgUklNU0MgYW5kIEZJTVNDIHJlZ2lzdGVycy4KKwkgKi8KKwlpZiAo bm1rX2NoaXAtPnNsZWVwbW9kZSAmJiBvbikgeworCQlfX25ta19ncGlvX3NldF9zbHBtKG5ta19j aGlwLCBvZmZzZXQsCisJCQkJICAgIE5NS19HUElPX1NMUE1fV0FLRVVQX0VOQUJMRSk7CisJfQor CisJX19ubWtfZ3Bpb19pcnFfbW9kaWZ5KG5ta19jaGlwLCBvZmZzZXQsIFdBS0UsIG9uKTsKK30K Kworc3RhdGljIHZvaWQgbm1rX2dwaW9faXJxX21hc2t1bm1hc2soc3RydWN0IG5ta19ncGlvX2No aXAgKm5ta19jaGlwLAorCQkJCSAgICBzdHJ1Y3QgaXJxX2RhdGEgKmQsIGJvb2wgZW5hYmxlKQor eworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljbGtfZW5hYmxlKG5ta19jaGlwLT5jbGspOwor CXNwaW5fbG9ja19pcnFzYXZlKCZubWtfZ3Bpb19zbHBtX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xv Y2soJm5ta19jaGlwLT5sb2NrKTsKKworCV9fbm1rX2dwaW9faXJxX21vZGlmeShubWtfY2hpcCwg ZC0+aHdpcnEsIE5PUk1BTCwgZW5hYmxlKTsKKworCWlmICghKG5ta19jaGlwLT5yZWFsX3dha2Ug JiBCSVQoZC0+aHdpcnEpKSkKKwkJX19ubWtfZ3Bpb19zZXRfd2FrZShubWtfY2hpcCwgZC0+aHdp cnEsIGVuYWJsZSk7CisKKwlzcGluX3VubG9jaygmbm1rX2NoaXAtPmxvY2spOworCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJm5ta19ncGlvX3NscG1fbG9jaywgZmxhZ3MpOworCWNsa19kaXNhYmxl KG5ta19jaGlwLT5jbGspOworfQorCitzdGF0aWMgdm9pZCBubWtfZ3Bpb19pcnFfbWFzayhzdHJ1 Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRf aXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAgPSBncGlv Y2hpcF9nZXRfZGF0YShnYyk7CisKKwlubWtfZ3Bpb19pcnFfbWFza3VubWFzayhubWtfY2hpcCwg ZCwgZmFsc2UpOworCWdwaW9jaGlwX2Rpc2FibGVfaXJxKGdjLCBpcnFkX3RvX2h3aXJxKGQpKTsK K30KKworc3RhdGljIHZvaWQgbm1rX2dwaW9faXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQp Cit7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShk KTsKKwlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAgPSBncGlvY2hpcF9nZXRfZGF0YShn Yyk7CisKKwlncGlvY2hpcF9lbmFibGVfaXJxKGdjLCBpcnFkX3RvX2h3aXJxKGQpKTsKKwlubWtf Z3Bpb19pcnFfbWFza3VubWFzayhubWtfY2hpcCwgZCwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQg bm1rX2dwaW9faXJxX3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IG9u KQoreworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEo ZCk7CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEo Z2MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljbGtfZW5hYmxlKG5ta19jaGlwLT5jbGsp OworCXNwaW5fbG9ja19pcnFzYXZlKCZubWtfZ3Bpb19zbHBtX2xvY2ssIGZsYWdzKTsKKwlzcGlu X2xvY2soJm5ta19jaGlwLT5sb2NrKTsKKworCWlmIChpcnFkX2lycV9kaXNhYmxlZChkKSkKKwkJ X19ubWtfZ3Bpb19zZXRfd2FrZShubWtfY2hpcCwgZC0+aHdpcnEsIG9uKTsKKworCWlmIChvbikK KwkJbm1rX2NoaXAtPnJlYWxfd2FrZSB8PSBCSVQoZC0+aHdpcnEpOworCWVsc2UKKwkJbm1rX2No aXAtPnJlYWxfd2FrZSAmPSB+QklUKGQtPmh3aXJxKTsKKworCXNwaW5fdW5sb2NrKCZubWtfY2hp cC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbm1rX2dwaW9fc2xwbV9sb2NrLCBm bGFncyk7CisJY2xrX2Rpc2FibGUobm1rX2NoaXAtPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBubWtfZ3Bpb19pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNp Z25lZCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9p cnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9IGdwaW9j aGlwX2dldF9kYXRhKGdjKTsKKwlib29sIGVuYWJsZWQgPSAhaXJxZF9pcnFfZGlzYWJsZWQoZCk7 CisJYm9vbCB3YWtlID0gaXJxZF9pc193YWtldXBfc2V0KGQpOworCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CisKKwlpZiAodHlwZSAmIElSUV9UWVBFX0xFVkVMX0hJR0gpCisJCXJldHVybiAtRUlOVkFM OworCWlmICh0eXBlICYgSVJRX1RZUEVfTEVWRUxfTE9XKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWNsa19lbmFibGUobm1rX2NoaXAtPmNsayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm5ta19jaGlw LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZW5hYmxlZCkKKwkJX19ubWtfZ3Bpb19pcnFfbW9kaWZ5 KG5ta19jaGlwLCBkLT5od2lycSwgTk9STUFMLCBmYWxzZSk7CisKKwlpZiAoZW5hYmxlZCB8fCB3 YWtlKQorCQlfX25ta19ncGlvX2lycV9tb2RpZnkobm1rX2NoaXAsIGQtPmh3aXJxLCBXQUtFLCBm YWxzZSk7CisKKwlubWtfY2hpcC0+ZWRnZV9yaXNpbmcgJj0gfkJJVChkLT5od2lycSk7CisJaWYg KHR5cGUgJiBJUlFfVFlQRV9FREdFX1JJU0lORykKKwkJbm1rX2NoaXAtPmVkZ2VfcmlzaW5nIHw9 IEJJVChkLT5od2lycSk7CisKKwlubWtfY2hpcC0+ZWRnZV9mYWxsaW5nICY9IH5CSVQoZC0+aHdp cnEpOworCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKQorCQlubWtfY2hpcC0+ZWRn ZV9mYWxsaW5nIHw9IEJJVChkLT5od2lycSk7CisKKwlpZiAoZW5hYmxlZCkKKwkJX19ubWtfZ3Bp b19pcnFfbW9kaWZ5KG5ta19jaGlwLCBkLT5od2lycSwgTk9STUFMLCB0cnVlKTsKKworCWlmIChl bmFibGVkIHx8IHdha2UpCisJCV9fbm1rX2dwaW9faXJxX21vZGlmeShubWtfY2hpcCwgZC0+aHdp cnEsIFdBS0UsIHRydWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbm1rX2NoaXAtPmxv Y2ssIGZsYWdzKTsKKwljbGtfZGlzYWJsZShubWtfY2hpcC0+Y2xrKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgdW5zaWduZWQgaW50IG5ta19ncGlvX2lycV9zdGFydHVwKHN0cnVjdCBpcnFf ZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hp cF9kYXRhKGQpOworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9IGdwaW9jaGlwX2dl dF9kYXRhKGdjKTsKKworCWNsa19lbmFibGUobm1rX2NoaXAtPmNsayk7CisJbm1rX2dwaW9faXJx X3VubWFzayhkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbm1rX2dwaW9faXJxX3No dXRkb3duKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGly cV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtf Y2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTsKKworCW5ta19ncGlvX2lycV9tYXNrKGQpOwor CWNsa19kaXNhYmxlKG5ta19jaGlwLT5jbGspOworfQorCitzdGF0aWMgdm9pZCBubWtfZ3Bpb19p cnFfaGFuZGxlcihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IGlycV9jaGlwICpo b3N0X2NoaXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpj aGlwID0gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsKKwlzdHJ1Y3Qgbm1rX2dwaW9f Y2hpcCAqbm1rX2NoaXAgPSBncGlvY2hpcF9nZXRfZGF0YShjaGlwKTsKKwl1MzIgc3RhdHVzOwor CisJY2hhaW5lZF9pcnFfZW50ZXIoaG9zdF9jaGlwLCBkZXNjKTsKKworCWNsa19lbmFibGUobm1r X2NoaXAtPmNsayk7CisJc3RhdHVzID0gcmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19J Uyk7CisJY2xrX2Rpc2FibGUobm1rX2NoaXAtPmNsayk7CisKKwl3aGlsZSAoc3RhdHVzKSB7CisJ CWludCBiaXQgPSBfX2ZmcyhzdGF0dXMpOworCisJCWdlbmVyaWNfaGFuZGxlX2RvbWFpbl9pcnEo Y2hpcC0+aXJxLmRvbWFpbiwgYml0KTsKKwkJc3RhdHVzICY9IH5CSVQoYml0KTsKKwl9CisKKwlj aGFpbmVkX2lycV9leGl0KGhvc3RfY2hpcCwgZGVzYyk7Cit9CisKKy8qIEkvTyBGdW5jdGlvbnMg Ki8KKworc3RhdGljIGludCBubWtfZ3Bpb19nZXRfZGlyKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAs IHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlw ID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoY2hpcCk7CisJaW50IGRpcjsKKworCWNsa19lbmFibGUobm1r X2NoaXAtPmNsayk7CisKKwlkaXIgPSByZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0RJ UikgJiBCSVQob2Zmc2V0KTsKKworCWNsa19kaXNhYmxlKG5ta19jaGlwLT5jbGspOworCisJaWYg KGRpcikKKwkJcmV0dXJuIEdQSU9fTElORV9ESVJFQ1RJT05fT1VUOworCisJcmV0dXJuIEdQSU9f TElORV9ESVJFQ1RJT05fSU47Cit9CisKK3N0YXRpYyBpbnQgbm1rX2dwaW9fbWFrZV9pbnB1dChz dHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXN0cnVjdCBu bWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGNoaXApOworCisJY2xr X2VuYWJsZShubWtfY2hpcC0+Y2xrKTsKKworCXdyaXRlbChCSVQob2Zmc2V0KSwgbm1rX2NoaXAt PmFkZHIgKyBOTUtfR1BJT19ESVJDKTsKKworCWNsa19kaXNhYmxlKG5ta19jaGlwLT5jbGspOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbm1rX2dwaW9fZ2V0X2lucHV0KHN0cnVjdCBn cGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJc3RydWN0IG5ta19ncGlv X2NoaXAgKm5ta19jaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoY2hpcCk7CisJaW50IHZhbHVlOwor CisJY2xrX2VuYWJsZShubWtfY2hpcC0+Y2xrKTsKKworCXZhbHVlID0gISEocmVhZGwobm1rX2No aXAtPmFkZHIgKyBOTUtfR1BJT19EQVQpICYgQklUKG9mZnNldCkpOworCisJY2xrX2Rpc2FibGUo bm1rX2NoaXAtPmNsayk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIG5ta19n cGlvX3NldF9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZnNl dCwKKwkJCQlpbnQgdmFsKQoreworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9IGdw aW9jaGlwX2dldF9kYXRhKGNoaXApOworCisJY2xrX2VuYWJsZShubWtfY2hpcC0+Y2xrKTsKKwor CV9fbm1rX2dwaW9fc2V0X291dHB1dChubWtfY2hpcCwgb2Zmc2V0LCB2YWwpOworCisJY2xrX2Rp c2FibGUobm1rX2NoaXAtPmNsayk7Cit9CisKK3N0YXRpYyBpbnQgbm1rX2dwaW9fbWFrZV9vdXRw dXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCQlpbnQg dmFsKQoreworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9IGdwaW9jaGlwX2dldF9k YXRhKGNoaXApOworCisJY2xrX2VuYWJsZShubWtfY2hpcC0+Y2xrKTsKKworCV9fbm1rX2dwaW9f bWFrZV9vdXRwdXQobm1rX2NoaXAsIG9mZnNldCwgdmFsKTsKKworCWNsa19kaXNhYmxlKG5ta19j aGlwLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwor c3RhdGljIGludCBubWtfZ3Bpb19nZXRfbW9kZShzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2No aXAsIGludCBvZmZzZXQpCit7CisJdTMyIGFmdW5jLCBiZnVuYzsKKworCWNsa19lbmFibGUobm1r X2NoaXAtPmNsayk7CisKKwlhZnVuYyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9f QUZTTEEpICYgQklUKG9mZnNldCk7CisJYmZ1bmMgPSByZWFkbChubWtfY2hpcC0+YWRkciArIE5N S19HUElPX0FGU0xCKSAmIEJJVChvZmZzZXQpOworCisJY2xrX2Rpc2FibGUobm1rX2NoaXAtPmNs ayk7CisKKwlyZXR1cm4gKGFmdW5jID8gTk1LX0dQSU9fQUxUX0EgOiAwKSB8IChiZnVuYyA/IE5N S19HUElPX0FMVF9CIDogMCk7Cit9CisKK3ZvaWQgbm1rX2dwaW9fZGJnX3Nob3dfb25lKHN0cnVj dCBzZXFfZmlsZSAqcywgc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAorCQkJICAgc3RydWN0 IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgIHVuc2lnbmVkIGlu dCBncGlvKQoreworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9IGdwaW9jaGlwX2dl dF9kYXRhKGNoaXApOworCWludCBtb2RlOworCWJvb2wgaXNfb3V0OworCWJvb2wgZGF0YV9vdXQ7 CisJYm9vbCBwdWxsOworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbW9kZXNbXSA9IHsKKwkJ W05NS19HUElPX0FMVF9HUElPXQk9ICJncGlvIiwKKwkJW05NS19HUElPX0FMVF9BXQk9ICJhbHRB IiwKKwkJW05NS19HUElPX0FMVF9CXQk9ICJhbHRCIiwKKwkJW05NS19HUElPX0FMVF9DXQk9ICJh bHRDIiwKKwkJW05NS19HUElPX0FMVF9DICsgMV0JPSAiYWx0QzEiLAorCQlbTk1LX0dQSU9fQUxU X0MgKyAyXQk9ICJhbHRDMiIsCisJCVtOTUtfR1BJT19BTFRfQyArIDNdCT0gImFsdEMzIiwKKwkJ W05NS19HUElPX0FMVF9DICsgNF0JPSAiYWx0QzQiLAorCX07CisKKwljaGFyICpsYWJlbCA9IGdw aW9jaGlwX2R1cF9saW5lX2xhYmVsKGNoaXAsIG9mZnNldCk7CisJaWYgKElTX0VSUihsYWJlbCkp CisJCXJldHVybjsKKworCWNsa19lbmFibGUobm1rX2NoaXAtPmNsayk7CisJaXNfb3V0ID0gISEo cmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19ESVIpICYgQklUKG9mZnNldCkpOworCXB1 bGwgPSAhKHJlYWRsKG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fUERJUykgJiBCSVQob2Zmc2V0 KSk7CisJZGF0YV9vdXQgPSAhIShyZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0RBVCkg JiBCSVQob2Zmc2V0KSk7CisJbW9kZSA9IG5ta19ncGlvX2dldF9tb2RlKG5ta19jaGlwLCBvZmZz ZXQpOworI2lmZGVmIENPTkZJR19QSU5DVFJMX05PTUFESUsKKwlpZiAobW9kZSA9PSBOTUtfR1BJ T19BTFRfQyAmJiBwY3RsZGV2KQorCQltb2RlID0gbm1rX3ByY21fZ3Bpb2NyX2dldF9tb2RlKHBj dGxkZXYsIGdwaW8pOworI2VuZGlmCisKKwlpZiAoaXNfb3V0KSB7CisJCXNlcV9wcmludGYocywg IiBncGlvLSUtM2QgKCUtMjAuMjBzKSBvdXQgJXMgICAgICAgICAgICVzIiwKKwkJCSAgIGdwaW8s CisJCQkgICBsYWJlbCA/OiAiKG5vbmUpIiwKKwkJCSAgIGRhdGFfb3V0ID8gImhpIiA6ICJsbyIs CisJCQkgICAobW9kZSA8IDApID8gInVua25vd24iIDogbW9kZXNbbW9kZV0pOworCX0gZWxzZSB7 CisJCWludCBpcnEgPSBjaGlwLT50b19pcnEoY2hpcCwgb2Zmc2V0KTsKKwkJY29uc3QgaW50IHB1 bGxpZHggPSBwdWxsID8gMSA6IDA7CisJCWludCB2YWw7CisJCXN0YXRpYyBjb25zdCBjaGFyICog Y29uc3QgcHVsbHNbXSA9IHsKKwkJCSJub25lICAgICAgICAiLAorCQkJInB1bGwgZW5hYmxlZCIs CisJCX07CisKKwkJc2VxX3ByaW50ZihzLCAiIGdwaW8tJS0zZCAoJS0yMC4yMHMpIGluICAlcyAl cyIsCisJCQkgICBncGlvLAorCQkJICAgbGFiZWwgPzogIihub25lKSIsCisJCQkgICBwdWxsc1tw dWxsaWR4XSwKKwkJCSAgIChtb2RlIDwgMCkgPyAidW5rbm93biIgOiBtb2Rlc1ttb2RlXSk7CisK KwkJdmFsID0gbm1rX2dwaW9fZ2V0X2lucHV0KGNoaXAsIG9mZnNldCk7CisJCXNlcV9wcmludGYo cywgIiBWQUwgJWQiLCB2YWwpOworCisJCS8qCisJCSAqIFRoaXMgcmFjZXMgd2l0aCByZXF1ZXN0 X2lycSgpLCBzZXRfaXJxX3R5cGUoKSwKKwkJICogYW5kIHNldF9pcnFfd2FrZSgpIC4uLiBidXQg dGhvc2UgYXJlICJyYXJlIi4KKwkJICovCisJCWlmIChpcnEgPiAwICYmIGlycV9oYXNfYWN0aW9u KGlycSkpIHsKKwkJCWNoYXIgKnRyaWdnZXI7CisJCQlib29sIHdha2U7CisKKwkJCWlmIChubWtf Y2hpcC0+ZWRnZV9yaXNpbmcgJiBCSVQob2Zmc2V0KSkKKwkJCQl0cmlnZ2VyID0gImVkZ2Utcmlz aW5nIjsKKwkJCWVsc2UgaWYgKG5ta19jaGlwLT5lZGdlX2ZhbGxpbmcgJiBCSVQob2Zmc2V0KSkK KwkJCQl0cmlnZ2VyID0gImVkZ2UtZmFsbGluZyI7CisJCQllbHNlCisJCQkJdHJpZ2dlciA9ICJl ZGdlLXVuZGVmaW5lZCI7CisKKwkJCXdha2UgPSAhIShubWtfY2hpcC0+cmVhbF93YWtlICYgQklU KG9mZnNldCkpOworCisJCQlzZXFfcHJpbnRmKHMsICIgaXJxLSVkICVzJXMiLAorCQkJCSAgIGly cSwgdHJpZ2dlciwgd2FrZSA/ICIgd2FrZXVwIiA6ICIiKTsKKwkJfQorCX0KKwljbGtfZGlzYWJs ZShubWtfY2hpcC0+Y2xrKTsKK30KKworc3RhdGljIHZvaWQgbm1rX2dwaW9fZGJnX3Nob3coc3Ry dWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKQoreworCXVuc2lnbmVkIGlu dCBpLCBncGlvID0gY2hpcC0+YmFzZTsKKworCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5uZ3Bpbzsg aSsrLCBncGlvKyspIHsKKwkJbm1rX2dwaW9fZGJnX3Nob3dfb25lKHMsIE5VTEwsIGNoaXAsIGks IGdwaW8pOworCQlzZXFfcHV0cyhzLCAiXG4iKTsKKwl9Cit9CisKKyNlbHNlCisKK3N0YXRpYyBp bmxpbmUgdm9pZCBubWtfZ3Bpb19kYmdfc2hvd19vbmUoc3RydWN0IHNlcV9maWxlICpzLAorCQkJ CQkgc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAorCQkJCQkgc3RydWN0IGdwaW9fY2hpcCAq Y2hpcCwKKwkJCQkJIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJCSB1bnNpZ25lZCBpbnQgZ3Bp bykKK3sKK30KKworI2RlZmluZSBubWtfZ3Bpb19kYmdfc2hvdwlOVUxMCisKKyNlbmRpZgorCisv KgorICogV2Ugd2lsbCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBzdGF0ZSBjb250YWluZXIgdXNp bmcgZGV2bSogYWxsb2NhdG9ycworICogYmluZGluZyB0byB0aGUgZmlyc3QgZGV2aWNlIHJlYWNo aW5nIHRoaXMgcG9pbnQsIGl0IGRvZXNuJ3QgbWF0dGVyIGlmCisgKiBpdCBpcyB0aGUgcGluIGNv bnRyb2xsZXIgb3IgR1BJTyBkcml2ZXIuIEhvd2V2ZXIgd2UgbmVlZCB0byB1c2UgdGhlIHJpZ2h0 CisgKiBwbGF0Zm9ybSBkZXZpY2Ugd2hlbiBsb29raW5nIHVwIHJlc291cmNlcyBzbyBwYXkgYXR0 ZW50aW9uIHRvIHBkZXYuCisgKi8KK3N0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfZ3Bpb19wb3B1 bGF0ZV9jaGlwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCSAgICAgc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXA7CisJ c3RydWN0IHBsYXRmb3JtX2RldmljZSAqZ3Bpb19wZGV2OworCXN0cnVjdCBncGlvX2NoaXAgKmNo aXA7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGNsayAqY2xrOworCXZvaWQgX19p b21lbSAqYmFzZTsKKwl1MzIgaWQ7CisKKwlncGlvX3BkZXYgPSBvZl9maW5kX2RldmljZV9ieV9u b2RlKG5wKTsKKwlpZiAoIWdwaW9fcGRldikgeworCQlwcl9lcnIoInBvcHVsYXRlIFwiJXBPRm5c IjogZGV2aWNlIG5vdCBmb3VuZFxuIiwgbnApOworCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsK Kwl9CisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiZ3Bpby1iYW5rIiwgJmlkKSkgewor CQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwb3B1bGF0ZTogZ3Bpby1iYW5rIHByb3BlcnR5IG5vdCBm b3VuZFxuIik7CisJCXBsYXRmb3JtX2RldmljZV9wdXQoZ3Bpb19wZGV2KTsKKwkJcmV0dXJuIEVS Ul9QVFIoLUVJTlZBTCk7CisJfQorCisjaWZkZWYgQ09ORklHX1BJTkNUUkxfTk9NQURJSworCS8q IEFscmVhZHkgcG9wdWxhdGVkPyAqLworCW5ta19jaGlwID0gbm1rX2dwaW9fY2hpcHNbaWRdOwor CWlmIChubWtfY2hpcCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGdwaW9fcGRldik7CisJCXJl dHVybiBubWtfY2hpcDsKKwl9CisjZW5kaWYKKworCW5ta19jaGlwID0gZGV2bV9remFsbG9jKCZw ZGV2LT5kZXYsIHNpemVvZigqbm1rX2NoaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ta19jaGlw KSB7CisJCXBsYXRmb3JtX2RldmljZV9wdXQoZ3Bpb19wZGV2KTsKKwkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7CisJfQorCisJbm1rX2NoaXAtPmJhbmsgPSBpZDsKKwljaGlwID0gJm5ta19jaGlw LT5jaGlwOworCWNoaXAtPmJhc2UgPSBpZCAqIE5NS19HUElPX1BFUl9DSElQOworCWNoaXAtPm5n cGlvID0gTk1LX0dQSU9fUEVSX0NISVA7CisJY2hpcC0+bGFiZWwgPSBkZXZfbmFtZSgmZ3Bpb19w ZGV2LT5kZXYpOworCWNoaXAtPnBhcmVudCA9ICZncGlvX3BkZXYtPmRldjsKKworCXJlcyA9IHBs YXRmb3JtX2dldF9yZXNvdXJjZShncGlvX3BkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwliYXNl ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihi YXNlKSkgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGdwaW9fcGRldik7CisJCXJldHVybiBFUlJf Q0FTVChiYXNlKTsKKwl9CisJbm1rX2NoaXAtPmFkZHIgPSBiYXNlOworCisJY2xrID0gY2xrX2dl dCgmZ3Bpb19wZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlwbGF0Zm9y bV9kZXZpY2VfcHV0KGdwaW9fcGRldik7CisJCXJldHVybiAodm9pZCAqKWNsazsKKwl9CisJY2xr X3ByZXBhcmUoY2xrKTsKKwlubWtfY2hpcC0+Y2xrID0gY2xrOworCisjaWZkZWYgQ09ORklHX1BJ TkNUUkxfTk9NQURJSworCUJVR19PTihubWtfY2hpcC0+YmFuayA+PSBBUlJBWV9TSVpFKG5ta19n cGlvX2NoaXBzKSk7CisJbm1rX2dwaW9fY2hpcHNbaWRdID0gbm1rX2NoaXA7CisjZW5kaWYKKwly ZXR1cm4gbm1rX2NoaXA7Cit9CisKK3N0YXRpYyB2b2lkIG5ta19ncGlvX2lycV9wcmludF9jaGlw KHN0cnVjdCBpcnFfZGF0YSAqZCwgc3RydWN0IHNlcV9maWxlICpwKQoreworCXN0cnVjdCBncGlv X2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IG5ta19n cGlvX2NoaXAgKm5ta19jaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpOworCisJc2VxX3ByaW50 ZihwLCAibm1rJXUtJXUtJXUiLCBubWtfY2hpcC0+YmFuaywKKwkJICAgZ2MtPmJhc2UsIGdjLT5i YXNlICsgZ2MtPm5ncGlvIC0gMSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2NoaXAg bm1rX2lycV9jaGlwID0geworCS5pcnFfYWNrID0gbm1rX2dwaW9faXJxX2FjaywKKwkuaXJxX21h c2sgPSBubWtfZ3Bpb19pcnFfbWFzaywKKwkuaXJxX3VubWFzayA9IG5ta19ncGlvX2lycV91bm1h c2ssCisJLmlycV9zZXRfdHlwZSA9IG5ta19ncGlvX2lycV9zZXRfdHlwZSwKKwkuaXJxX3NldF93 YWtlID0gbm1rX2dwaW9faXJxX3NldF93YWtlLAorCS5pcnFfc3RhcnR1cCA9IG5ta19ncGlvX2ly cV9zdGFydHVwLAorCS5pcnFfc2h1dGRvd24gPSBubWtfZ3Bpb19pcnFfc2h1dGRvd24sCisJLmly cV9wcmludF9jaGlwID0gbm1rX2dwaW9faXJxX3ByaW50X2NoaXAsCisJLmZsYWdzID0gSVJRQ0hJ UF9NQVNLX09OX1NVU1BFTkQgfCBJUlFDSElQX0lNTVVUQUJMRSwKKwlHUElPQ0hJUF9JUlFfUkVT T1VSQ0VfSEVMUEVSUywKK307CisKK3N0YXRpYyBpbnQgbm1rX2dwaW9fcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPmRl di5vZl9ub2RlOworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKKwlzdHJ1Y3QgZ3Bp b19jaGlwICpjaGlwOworCXN0cnVjdCBncGlvX2lycV9jaGlwICpnaXJxOworCWJvb2wgc3VwcG9y dHNfc2xlZXBtb2RlOworCWludCBpcnE7CisJaW50IHJldDsKKworCW5ta19jaGlwID0gbm1rX2dw aW9fcG9wdWxhdGVfY2hpcChucCwgZGV2KTsKKwlpZiAoSVNfRVJSKG5ta19jaGlwKSkgeworCQlk ZXZfZXJyKCZkZXYtPmRldiwgImNvdWxkIG5vdCBwb3B1bGF0ZSBubWsgY2hpcCBzdHJ1Y3RcbiIp OworCQlyZXR1cm4gUFRSX0VSUihubWtfY2hpcCk7CisJfQorCisJc3VwcG9ydHNfc2xlZXBtb2Rl ID0KKwkJb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAic3Qsc3VwcG9ydHMtc2xlZXBtb2RlIik7 CisKKwkvKiBDb3JyZWN0IHBsYXRmb3JtIGRldmljZSBJRCAqLworCWRldi0+aWQgPSBubWtfY2hp cC0+YmFuazsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKKwlpZiAoaXJxIDwg MCkKKwkJcmV0dXJuIGlycTsKKworCS8qCisJICogVGhlIHZpcnQgYWRkcmVzcyBpbiBubWtfY2hp cC0+YWRkciBpcyBpbiB0aGUgbm9tYWRpayByZWdpc3RlciBzcGFjZSwKKwkgKiBzbyB3ZSBjYW4g c2ltcGx5IGNvbnZlcnQgdGhlIHJlc291cmNlIGFkZHJlc3MsIHdpdGhvdXQgcmVtYXBwaW5nCisJ ICovCisJbm1rX2NoaXAtPnNsZWVwbW9kZSA9IHN1cHBvcnRzX3NsZWVwbW9kZTsKKwlzcGluX2xv Y2tfaW5pdCgmbm1rX2NoaXAtPmxvY2spOworCisJY2hpcCA9ICZubWtfY2hpcC0+Y2hpcDsKKwlj aGlwLT5wYXJlbnQgPSAmZGV2LT5kZXY7CisJY2hpcC0+cmVxdWVzdCA9IGdwaW9jaGlwX2dlbmVy aWNfcmVxdWVzdDsKKwljaGlwLT5mcmVlID0gZ3Bpb2NoaXBfZ2VuZXJpY19mcmVlOworCWNoaXAt PmdldF9kaXJlY3Rpb24gPSBubWtfZ3Bpb19nZXRfZGlyOworCWNoaXAtPmRpcmVjdGlvbl9pbnB1 dCA9IG5ta19ncGlvX21ha2VfaW5wdXQ7CisJY2hpcC0+Z2V0ID0gbm1rX2dwaW9fZ2V0X2lucHV0 OworCWNoaXAtPmRpcmVjdGlvbl9vdXRwdXQgPSBubWtfZ3Bpb19tYWtlX291dHB1dDsKKwljaGlw LT5zZXQgPSBubWtfZ3Bpb19zZXRfb3V0cHV0OworCWNoaXAtPmRiZ19zaG93ID0gbm1rX2dwaW9f ZGJnX3Nob3c7CisJY2hpcC0+Y2FuX3NsZWVwID0gZmFsc2U7CisJY2hpcC0+b3duZXIgPSBUSElT X01PRFVMRTsKKworCWdpcnEgPSAmY2hpcC0+aXJxOworCWdwaW9faXJxX2NoaXBfc2V0X2NoaXAo Z2lycSwgJm5ta19pcnFfY2hpcCk7CisJZ2lycS0+cGFyZW50X2hhbmRsZXIgPSBubWtfZ3Bpb19p cnFfaGFuZGxlcjsKKwlnaXJxLT5udW1fcGFyZW50cyA9IDE7CisJZ2lycS0+cGFyZW50cyA9IGRl dm1fa2NhbGxvYygmZGV2LT5kZXYsIDEsCisJCQkJICAgICBzaXplb2YoKmdpcnEtPnBhcmVudHMp LAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFnaXJxLT5wYXJlbnRzKQorCQlyZXR1cm4g LUVOT01FTTsKKwlnaXJxLT5wYXJlbnRzWzBdID0gaXJxOworCWdpcnEtPmRlZmF1bHRfdHlwZSA9 IElSUV9UWVBFX05PTkU7CisJZ2lycS0+aGFuZGxlciA9IGhhbmRsZV9lZGdlX2lycTsKKworCWNs a19lbmFibGUobm1rX2NoaXAtPmNsayk7CisJbm1rX2NoaXAtPmxvd2VtaSA9IHJlYWRsX3JlbGF4 ZWQobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19MT1dFTUkpOworCWNsa19kaXNhYmxlKG5ta19j aGlwLT5jbGspOworCisJcmV0ID0gZ3Bpb2NoaXBfYWRkX2RhdGEoY2hpcCwgbm1rX2NoaXApOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIG5t a19jaGlwKTsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgImNoaXAgcmVnaXN0ZXJlZFxuIik7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbm1rX2dw aW9fbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInN0LG5vbWFkaWstZ3BpbyIsIH0sCisJ e30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG5ta19ncGlvX2RyaXZlciA9 IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJncGlvIiwKKwkJLm9mX21hdGNoX3RhYmxlID0g bm1rX2dwaW9fbWF0Y2gsCisJfSwKKwkucHJvYmUgPSBubWtfZ3Bpb19wcm9iZSwKK307CisKK3N0 YXRpYyBpbnQgX19pbml0IG5ta19ncGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1f ZHJpdmVyX3JlZ2lzdGVyKCZubWtfZ3Bpb19kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKG5t a19ncGlvX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL25vbWFkaWsvS2NvbmZp ZyBiL2RyaXZlcnMvcGluY3RybC9ub21hZGlrL0tjb25maWcKaW5kZXggMGZlYTE2N2MyODNmLi5m NDdmMDc1NWE4MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9ub21hZGlrL0tjb25maWcK KysrIGIvZHJpdmVycy9waW5jdHJsL25vbWFkaWsvS2NvbmZpZwpAQCAtMjIsMTEgKzIyLDEwIEBA IGlmIChBUkNIX1U4NTAwIHx8IEFSQ0hfTk9NQURJSykKIAogY29uZmlnIFBJTkNUUkxfTk9NQURJ SwogCWJvb2wgIk5vbWFkaWsgcGluIGNvbnRyb2xsZXIgZHJpdmVyIgotCWRlcGVuZHMgb24gT0Yg JiYgR1BJT0xJQgorCWRlcGVuZHMgb24gT0YKIAlzZWxlY3QgUElOTVVYCiAJc2VsZWN0IFBJTkNP TkYKLQlzZWxlY3QgT0ZfR1BJTwotCXNlbGVjdCBHUElPTElCX0lSUUNISVAKKwlzZWxlY3QgR1BJ T19OT01BRElLCiAKIGNvbmZpZyBQSU5DVFJMX1NUTjg4MTUKIAlib29sICJTVE44ODE1IHBpbiBj b250cm9sbGVyIGRyaXZlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9ub21hZGlrL3Bp bmN0cmwtbm9tYWRpay1kYjg1MDAuYyBiL2RyaXZlcnMvcGluY3RybC9ub21hZGlrL3BpbmN0cmwt bm9tYWRpay1kYjg1MDAuYwppbmRleCA0OTBlMDk1OWU4YmUuLjBiNGEzZGQ5ZDhjNyAxMDA2NDQK LS0tIGEvZHJpdmVycy9waW5jdHJsL25vbWFkaWsvcGluY3RybC1ub21hZGlrLWRiODUwMC5jCisr KyBiL2RyaXZlcnMvcGluY3RybC9ub21hZGlrL3BpbmN0cmwtbm9tYWRpay1kYjg1MDAuYwpAQCAt Myw4ICszLDkgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSA8bGludXgv cGluY3RybC9waW5jdHJsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9kcml2ZXIuaD4KIAotI2lu Y2x1ZGUgInBpbmN0cmwtbm9tYWRpay5oIgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vZ3Bpby1ub21h ZGlrLmg+CiAKIC8qIEFsbCB0aGUgcGlucyB0aGF0IGNhbiBiZSB1c2VkIGZvciBHUElPIGFuZCBz b21lIG90aGVyIGZ1bmN0aW9ucyAqLwogI2RlZmluZSBfR1BJTyhvZmZzZXQpCQkob2Zmc2V0KQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL25vbWFkaWsvcGluY3RybC1ub21hZGlrLXN0bjg4 MTUuYyBiL2RyaXZlcnMvcGluY3RybC9ub21hZGlrL3BpbmN0cmwtbm9tYWRpay1zdG44ODE1LmMK aW5kZXggMTU1MjIyMmFjNjhlLi5jNWE1MmZjYWJhMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGlu Y3RybC9ub21hZGlrL3BpbmN0cmwtbm9tYWRpay1zdG44ODE1LmMKKysrIGIvZHJpdmVycy9waW5j dHJsL25vbWFkaWsvcGluY3RybC1ub21hZGlrLXN0bjg4MTUuYwpAQCAtMyw4ICszLDkgQEAKICNp bmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJs Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9kcml2ZXIuaD4KIAotI2luY2x1ZGUgInBpbmN0cmwt bm9tYWRpay5oIgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vZ3Bpby1ub21hZGlrLmg+CiAKIC8qIEFs bCB0aGUgcGlucyB0aGF0IGNhbiBiZSB1c2VkIGZvciBHUElPIGFuZCBzb21lIG90aGVyIGZ1bmN0 aW9ucyAqLwogI2RlZmluZSBfR1BJTyhvZmZzZXQpCQkob2Zmc2V0KQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9waW5jdHJsL25vbWFkaWsvcGluY3RybC1ub21hZGlrLmMgYi9kcml2ZXJzL3BpbmN0cmwv bm9tYWRpay9waW5jdHJsLW5vbWFkaWsuYwppbmRleCA0ZjdjNGFmNGY5M2MuLjE2ZDgzNjE1N2Y3 NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL25vbWFkaWsvcGluY3RybC1ub21hZGlrLmMK KysrIGIvZHJpdmVycy9waW5jdHJsL25vbWFkaWsvcGluY3RybC1ub21hZGlrLmMKQEAgLTEsNiAr MSw4IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiAvKgotICog R2VuZXJpYyBHUElPIGRyaXZlciBmb3IgbG9naWMgY2VsbHMgZm91bmQgaW4gdGhlIE5vbWFkaWsg U29DCisgKiBQaW5tdXggJiBwaW5jb25mIGRyaXZlciBmb3IgdGhlIElQIGJsb2NrIGZvdW5kIGlu IHRoZSBOb21hZGlrIFNvQy4gVGhpcworICogZGVwZW5kcyBvbiBncGlvLW5vbWFkaWsgYW5kIHNv bWUgaGFuZGxpbmcgaXMgaW50ZXJ0d2luZWQ7IHNlZSBubWtfZ3Bpb19jaGlwcworICogd2hpY2gg aXMgdXNlZCBieSB0aGlzIGRyaXZlciB0byBhY2Nlc3MgdGhlIEdQSU8gYmFua3MgYXJyYXkuCiAg KgogICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMDkgU1RNaWNyb2VsZWN0cm9uaWNzCiAgKiBDb3B5 cmlnaHQgKEMpIDIwMDkgQWxlc3NhbmRybyBSdWJpbmkgPHJ1YmluaUB1bmlwdi5pdD4KQEAgLTI1 LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+CiAKIC8qIFNpbmNlIHdlIHJlcXVlc3QgR1BJT3MgZnJvbSBvdXJzZWxmICovCiAjaW5j bHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgpAQCAtMzYsMTUgKzM5LDcgQEAKICNpbmNs dWRlICIuLi9jb3JlLmgiCiAjaW5jbHVkZSAiLi4vcGluY3RybC11dGlscy5oIgogCi0jaW5jbHVk ZSAicGluY3RybC1ub21hZGlrLmgiCi0KLS8qCi0gKiBUaGUgR1BJTyBtb2R1bGUgaW4gdGhlIE5v bWFkaWsgZmFtaWx5IG9mIFN5c3RlbXMtb24tQ2hpcCBpcyBhbgotICogQU1CQSBkZXZpY2UsIG1h bmFnaW5nIDMyIHBpbnMgYW5kIGFsdGVybmF0ZSBmdW5jdGlvbnMuICBUaGUgbG9naWMgYmxvY2sK LSAqIGlzIGN1cnJlbnRseSB1c2VkIGluIHRoZSBOb21hZGlrIGFuZCB1eDUwMC4KLSAqCi0gKiBT eW1ib2xzIGluIHRoaXMgZmlsZSBhcmUgY2FsbGVkICJubWtfZ3BpbyIgZm9yICJub21hZGlrIGdw aW8iCi0gKi8KKyNpbmNsdWRlIDxsaW51eC9ncGlvL2dwaW8tbm9tYWRpay5oPgogCiAvKgogICog cGluIGNvbmZpZ3VyYXRpb25zIGFyZSByZXByZXNlbnRlZCBieSAzMi1iaXQgaW50ZWdlcnM6CkBA IC0yMDAsNzUgKzE5NSw2IEBAIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBwaW5fY2ZnX3Q7CiAJKFBJ Tl9DRkdfREVGQVVMVCB8XAogCSAoUElOX05VTShudW0pIHwgUElOXyMjYWx0IHwgUElOX09VVFBV VF8jI3ZhbCkpCiAKLS8qCi0gKiAibm1rX2dwaW8iIGFuZCAiTk1LX0dQSU8iIHN0YW5kIGZvciAi Tm9tYWRpayBHUElPIiwgbGVhdmluZwotICogdGhlICJncGlvIiBuYW1lc3BhY2UgZm9yIGdlbmVy aWMgYW5kIGNyb3NzLW1hY2hpbmUgZnVuY3Rpb25zCi0gKi8KLQotI2RlZmluZSBHUElPX0JMT0NL X1NISUZUIDUKLSNkZWZpbmUgTk1LX0dQSU9fUEVSX0NISVAgKDEgPDwgR1BJT19CTE9DS19TSElG VCkKLSNkZWZpbmUgTk1LX01BWF9CQU5LUyBESVZfUk9VTkRfVVAoNTEyLCBOTUtfR1BJT19QRVJf Q0hJUCkKLQotLyogUmVnaXN0ZXIgaW4gdGhlIGxvZ2ljIGJsb2NrICovCi0jZGVmaW5lIE5NS19H UElPX0RBVAkweDAwCi0jZGVmaW5lIE5NS19HUElPX0RBVFMJMHgwNAotI2RlZmluZSBOTUtfR1BJ T19EQVRDCTB4MDgKLSNkZWZpbmUgTk1LX0dQSU9fUERJUwkweDBjCi0jZGVmaW5lIE5NS19HUElP X0RJUgkweDEwCi0jZGVmaW5lIE5NS19HUElPX0RJUlMJMHgxNAotI2RlZmluZSBOTUtfR1BJT19E SVJDCTB4MTgKLSNkZWZpbmUgTk1LX0dQSU9fU0xQQwkweDFjCi0jZGVmaW5lIE5NS19HUElPX0FG U0xBCTB4MjAKLSNkZWZpbmUgTk1LX0dQSU9fQUZTTEIJMHgyNAotI2RlZmluZSBOTUtfR1BJT19M T1dFTUkJMHgyOAotCi0jZGVmaW5lIE5NS19HUElPX1JJTVNDCTB4NDAKLSNkZWZpbmUgTk1LX0dQ SU9fRklNU0MJMHg0NAotI2RlZmluZSBOTUtfR1BJT19JUwkweDQ4Ci0jZGVmaW5lIE5NS19HUElP X0lDCTB4NGMKLSNkZWZpbmUgTk1LX0dQSU9fUldJTVNDCTB4NTAKLSNkZWZpbmUgTk1LX0dQSU9f RldJTVNDCTB4NTQKLSNkZWZpbmUgTk1LX0dQSU9fV0tTCTB4NTgKLS8qIFRoZXNlIGFwcGVhciBp biBEQjg1NDAgYW5kIGxhdGVyIEFTSUNzICovCi0jZGVmaW5lIE5NS19HUElPX0VER0VMRVZFTCAw eDVDCi0jZGVmaW5lIE5NS19HUElPX0xFVkVMCTB4NjAKLQotCi0vKiBQdWxsIHVwL2Rvd24gdmFs dWVzICovCi1lbnVtIG5ta19ncGlvX3B1bGwgewotCU5NS19HUElPX1BVTExfTk9ORSwKLQlOTUtf R1BJT19QVUxMX1VQLAotCU5NS19HUElPX1BVTExfRE9XTiwKLX07Ci0KLS8qIFNsZWVwIG1vZGUg Ki8KLWVudW0gbm1rX2dwaW9fc2xwbSB7Ci0JTk1LX0dQSU9fU0xQTV9JTlBVVCwKLQlOTUtfR1BJ T19TTFBNX1dBS0VVUF9FTkFCTEUgPSBOTUtfR1BJT19TTFBNX0lOUFVULAotCU5NS19HUElPX1NM UE1fTk9DSEFOR0UsCi0JTk1LX0dQSU9fU0xQTV9XQUtFVVBfRElTQUJMRSA9IE5NS19HUElPX1NM UE1fTk9DSEFOR0UsCi19OwotCi1zdHJ1Y3Qgbm1rX2dwaW9fY2hpcCB7Ci0Jc3RydWN0IGdwaW9f Y2hpcCBjaGlwOwotCXZvaWQgX19pb21lbSAqYWRkcjsKLQlzdHJ1Y3QgY2xrICpjbGs7Ci0JdW5z aWduZWQgaW50IGJhbms7Ci0Jdm9pZCAoKnNldF9pb2ZvcmNlKShib29sIGVuYWJsZSk7Ci0Jc3Bp bmxvY2tfdCBsb2NrOwotCWJvb2wgc2xlZXBtb2RlOwotCS8qIEtlZXAgdHJhY2sgb2YgY29uZmln dXJlZCBlZGdlcyAqLwotCXUzMiBlZGdlX3Jpc2luZzsKLQl1MzIgZWRnZV9mYWxsaW5nOwotCXUz MiByZWFsX3dha2U7Ci0JdTMyIHJ3aW1zYzsKLQl1MzIgZndpbXNjOwotCXUzMiByaW1zYzsKLQl1 MzIgZmltc2M7Ci0JdTMyIHB1bGxfdXA7Ci0JdTMyIGxvd2VtaTsKLX07Ci0KIC8qKgogICogc3Ry dWN0IG5ta19waW5jdHJsIC0gc3RhdGUgY29udGFpbmVyIGZvciB0aGUgTm9tYWRpayBwaW4gY29u dHJvbGxlcgogICogQGRldjogY29udGFpbmluZyBkZXZpY2UgcG9pbnRlcgpAQCAtMjgzLDExICsy MDksMTAgQEAgc3RydWN0IG5ta19waW5jdHJsIHsKIAl2b2lkIF9faW9tZW0gKnByY21fYmFzZTsK IH07CiAKLXN0YXRpYyBzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2dwaW9fY2hpcHNbTk1LX01B WF9CQU5LU107CisvKiBTZWUgbm1rX2dwaW9fcG9wdWxhdGVfY2hpcCgpIHRoYXQgZmlsbHMgdGhp cyBhcnJheS4gKi8KK3N0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfZ3Bpb19jaGlwc1tOTUtfTUFY X0JBTktTXTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhubWtfZ3Bpb19zbHBtX2xvY2spOwot Ci0jZGVmaW5lIE5VTV9CQU5LUyBBUlJBWV9TSVpFKG5ta19ncGlvX2NoaXBzKQorREVGSU5FX1NQ SU5MT0NLKG5ta19ncGlvX3NscG1fbG9jayk7CiAKIHN0YXRpYyB2b2lkIF9fbm1rX2dwaW9fc2V0 X21vZGUoc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwLAogCQkJCXVuc2lnbmVkIG9mZnNl dCwgaW50IGdwaW9fbW9kZSkKQEAgLTMwNCwxOSArMjI5LDYgQEAgc3RhdGljIHZvaWQgX19ubWtf Z3Bpb19zZXRfbW9kZShzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAsCiAJd3JpdGVsKGJm dW5jLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0FGU0xCKTsKIH0KIAotc3RhdGljIHZvaWQg X19ubWtfZ3Bpb19zZXRfc2xwbShzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAsCi0JCQkJ dW5zaWduZWQgb2Zmc2V0LCBlbnVtIG5ta19ncGlvX3NscG0gbW9kZSkKLXsKLQl1MzIgc2xwbTsK LQotCXNscG0gPSByZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX1NMUEMpOwotCWlmICht b2RlID09IE5NS19HUElPX1NMUE1fTk9DSEFOR0UpCi0JCXNscG0gfD0gQklUKG9mZnNldCk7Ci0J ZWxzZQotCQlzbHBtICY9IH5CSVQob2Zmc2V0KTsKLQl3cml0ZWwoc2xwbSwgbm1rX2NoaXAtPmFk ZHIgKyBOTUtfR1BJT19TTFBDKTsKLX0KLQogc3RhdGljIHZvaWQgX19ubWtfZ3Bpb19zZXRfcHVs bChzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAsCiAJCQkJdW5zaWduZWQgb2Zmc2V0LCBl bnVtIG5ta19ncGlvX3B1bGwgcHVsbCkKIHsKQEAgLTM2NCwyMiArMjc2LDYgQEAgc3RhdGljIHZv aWQgX19ubWtfZ3Bpb19tYWtlX2lucHV0KHN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCwK IAl3cml0ZWwoQklUKG9mZnNldCksIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fRElSQyk7CiB9 CiAKLXN0YXRpYyB2b2lkIF9fbm1rX2dwaW9fc2V0X291dHB1dChzdHJ1Y3Qgbm1rX2dwaW9fY2hp cCAqbm1rX2NoaXAsCi0JCQkJICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCi17Ci0JaWYgKHZh bCkKLQkJd3JpdGVsKEJJVChvZmZzZXQpLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0RBVFMp OwotCWVsc2UKLQkJd3JpdGVsKEJJVChvZmZzZXQpLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElP X0RBVEMpOwotfQotCi1zdGF0aWMgdm9pZCBfX25ta19ncGlvX21ha2Vfb3V0cHV0KHN0cnVjdCBu bWtfZ3Bpb19jaGlwICpubWtfY2hpcCwKLQkJCQkgIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkK LXsKLQl3cml0ZWwoQklUKG9mZnNldCksIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fRElSUyk7 Ci0JX19ubWtfZ3Bpb19zZXRfb3V0cHV0KG5ta19jaGlwLCBvZmZzZXQsIHZhbCk7Ci19Ci0KIHN0 YXRpYyB2b2lkIF9fbm1rX2dwaW9fc2V0X21vZGVfc2FmZShzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAq bm1rX2NoaXAsCiAJCQkJICAgICB1bnNpZ25lZCBvZmZzZXQsIGludCBncGlvX21vZGUsCiAJCQkJ ICAgICBib29sIGdsaXRjaCkKQEAgLTU0OCw3ICs0NDQsNyBAQCBzdGF0aWMgdm9pZCBubWtfZ3Bp b19nbGl0Y2hfc2xwbV9pbml0KHVuc2lnbmVkIGludCAqc2xwbSkKIHsKIAlpbnQgaTsKIAotCWZv ciAoaSA9IDA7IGkgPCBOVU1fQkFOS1M7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBOTUtfTUFY X0JBTktTOyBpKyspIHsKIAkJc3RydWN0IG5ta19ncGlvX2NoaXAgKmNoaXAgPSBubWtfZ3Bpb19j aGlwc1tpXTsKIAkJdW5zaWduZWQgaW50IHRlbXAgPSBzbHBtW2ldOwogCkBAIC01NjYsNyArNDYy LDcgQEAgc3RhdGljIHZvaWQgbm1rX2dwaW9fZ2xpdGNoX3NscG1fcmVzdG9yZSh1bnNpZ25lZCBp bnQgKnNscG0pCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0JBTktTOyBpKysp IHsKKwlmb3IgKGkgPSAwOyBpIDwgTk1LX01BWF9CQU5LUzsgaSsrKSB7CiAJCXN0cnVjdCBubWtf Z3Bpb19jaGlwICpjaGlwID0gbm1rX2dwaW9fY2hpcHNbaV07CiAKIAkJaWYgKCFjaGlwKQpAQCAt NTc4LDcgKzQ3NCw4IEBAIHN0YXRpYyB2b2lkIG5ta19ncGlvX2dsaXRjaF9zbHBtX3Jlc3RvcmUo dW5zaWduZWQgaW50ICpzbHBtKQogCX0KIH0KIAotc3RhdGljIGludCBfX21heWJlX3VudXNlZCBu bWtfcHJjbV9ncGlvY3JfZ2V0X21vZGUoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LCBpbnQg Z3BpbykKKy8qIE9ubHkgY2FsbGVkIGJ5IGdwaW8tbm9tYWRpayBidXQgcmVxdWlyZXMga25vd2xl ZGdlIG9mIHN0cnVjdCBubWtfcGluY3RybC4gKi8KK2ludCBfX21heWJlX3VudXNlZCBubWtfcHJj bV9ncGlvY3JfZ2V0X21vZGUoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LCBpbnQgZ3BpbykK IHsKIAlpbnQgaTsKIAl1MTYgcmVnOwpAQCAtNjEwLDU3NiArNTA3LDYgQEAgc3RhdGljIGludCBf X21heWJlX3VudXNlZCBubWtfcHJjbV9ncGlvY3JfZ2V0X21vZGUoc3RydWN0IHBpbmN0cmxfZGV2 ICpwY3RsZGV2LAogCXJldHVybiBOTUtfR1BJT19BTFRfQzsKIH0KIAotLyogSVJRIGZ1bmN0aW9u cyAqLwotCi1zdGF0aWMgdm9pZCBubWtfZ3Bpb19pcnFfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkK LXsKLQlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQp OwotCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGdj KTsKLQotCWNsa19lbmFibGUobm1rX2NoaXAtPmNsayk7Ci0Jd3JpdGVsKEJJVChkLT5od2lycSks IG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fSUMpOwotCWNsa19kaXNhYmxlKG5ta19jaGlwLT5j bGspOwotfQotCi1lbnVtIG5ta19ncGlvX2lycV90eXBlIHsKLQlOT1JNQUwsCi0JV0FLRSwKLX07 Ci0KLXN0YXRpYyB2b2lkIF9fbm1rX2dwaW9faXJxX21vZGlmeShzdHJ1Y3Qgbm1rX2dwaW9fY2hp cCAqbm1rX2NoaXAsCi0JCQkJICBpbnQgb2Zmc2V0LCBlbnVtIG5ta19ncGlvX2lycV90eXBlIHdo aWNoLAotCQkJCSAgYm9vbCBlbmFibGUpCi17Ci0JdTMyICpyaW1zY3ZhbDsKLQl1MzIgKmZpbXNj dmFsOwotCXUzMiByaW1zY3JlZzsKLQl1MzIgZmltc2NyZWc7Ci0KLQlpZiAod2hpY2ggPT0gTk9S TUFMKSB7Ci0JCXJpbXNjcmVnID0gTk1LX0dQSU9fUklNU0M7Ci0JCWZpbXNjcmVnID0gTk1LX0dQ SU9fRklNU0M7Ci0JCXJpbXNjdmFsID0gJm5ta19jaGlwLT5yaW1zYzsKLQkJZmltc2N2YWwgPSAm bm1rX2NoaXAtPmZpbXNjOwotCX0gZWxzZSAgewotCQlyaW1zY3JlZyA9IE5NS19HUElPX1JXSU1T QzsKLQkJZmltc2NyZWcgPSBOTUtfR1BJT19GV0lNU0M7Ci0JCXJpbXNjdmFsID0gJm5ta19jaGlw LT5yd2ltc2M7Ci0JCWZpbXNjdmFsID0gJm5ta19jaGlwLT5md2ltc2M7Ci0JfQotCi0JLyogd2Ug bXVzdCBpbmRpdmlkdWFsbHkgc2V0L2NsZWFyIHRoZSB0d28gZWRnZXMgKi8KLQlpZiAobm1rX2No aXAtPmVkZ2VfcmlzaW5nICYgQklUKG9mZnNldCkpIHsKLQkJaWYgKGVuYWJsZSkKLQkJCSpyaW1z Y3ZhbCB8PSBCSVQob2Zmc2V0KTsKLQkJZWxzZQotCQkJKnJpbXNjdmFsICY9IH5CSVQob2Zmc2V0 KTsKLQkJd3JpdGVsKCpyaW1zY3ZhbCwgbm1rX2NoaXAtPmFkZHIgKyByaW1zY3JlZyk7Ci0JfQot CWlmIChubWtfY2hpcC0+ZWRnZV9mYWxsaW5nICYgQklUKG9mZnNldCkpIHsKLQkJaWYgKGVuYWJs ZSkKLQkJCSpmaW1zY3ZhbCB8PSBCSVQob2Zmc2V0KTsKLQkJZWxzZQotCQkJKmZpbXNjdmFsICY9 IH5CSVQob2Zmc2V0KTsKLQkJd3JpdGVsKCpmaW1zY3ZhbCwgbm1rX2NoaXAtPmFkZHIgKyBmaW1z Y3JlZyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX25ta19ncGlvX3NldF93YWtlKHN0cnVjdCBu bWtfZ3Bpb19jaGlwICpubWtfY2hpcCwKLQkJCQlpbnQgb2Zmc2V0LCBib29sIG9uKQotewotCS8q Ci0JICogRW5zdXJlIFdBS0VVUF9FTkFCTEUgaXMgb24uICBObyBuZWVkIHRvIGRpc2FibGUgaXQg aWYgd2FrZXVwIGlzCi0JICogZGlzYWJsZWQsIHNpbmNlIHNldHRpbmcgU0xQTSB0byAxIGluY3Jl YXNlcyBwb3dlciBjb25zdW1wdGlvbiwgYW5kCi0JICogd2FrZXVwIGlzIGFueWhvdyBjb250cm9s bGVkIGJ5IHRoZSBSSU1TQyBhbmQgRklNU0MgcmVnaXN0ZXJzLgotCSAqLwotCWlmIChubWtfY2hp cC0+c2xlZXBtb2RlICYmIG9uKSB7Ci0JCV9fbm1rX2dwaW9fc2V0X3NscG0obm1rX2NoaXAsIG9m ZnNldCwKLQkJCQkgICAgTk1LX0dQSU9fU0xQTV9XQUtFVVBfRU5BQkxFKTsKLQl9Ci0KLQlfX25t a19ncGlvX2lycV9tb2RpZnkobm1rX2NoaXAsIG9mZnNldCwgV0FLRSwgb24pOwotfQotCi1zdGF0 aWMgdm9pZCBubWtfZ3Bpb19pcnFfbWFza3VubWFzayhzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1r X2NoaXAsCi0JCQkJICAgIHN0cnVjdCBpcnFfZGF0YSAqZCwgYm9vbCBlbmFibGUpCi17Ci0JdW5z aWduZWQgbG9uZyBmbGFnczsKLQotCWNsa19lbmFibGUobm1rX2NoaXAtPmNsayk7Ci0Jc3Bpbl9s b2NrX2lycXNhdmUoJm5ta19ncGlvX3NscG1fbG9jaywgZmxhZ3MpOwotCXNwaW5fbG9jaygmbm1r X2NoaXAtPmxvY2spOwotCi0JX19ubWtfZ3Bpb19pcnFfbW9kaWZ5KG5ta19jaGlwLCBkLT5od2ly cSwgTk9STUFMLCBlbmFibGUpOwotCi0JaWYgKCEobm1rX2NoaXAtPnJlYWxfd2FrZSAmIEJJVChk LT5od2lycSkpKQotCQlfX25ta19ncGlvX3NldF93YWtlKG5ta19jaGlwLCBkLT5od2lycSwgZW5h YmxlKTsKLQotCXNwaW5fdW5sb2NrKCZubWtfY2hpcC0+bG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmbm1rX2dwaW9fc2xwbV9sb2NrLCBmbGFncyk7Ci0JY2xrX2Rpc2FibGUobm1rX2No aXAtPmNsayk7Ci19Ci0KLXN0YXRpYyB2b2lkIG5ta19ncGlvX2lycV9tYXNrKHN0cnVjdCBpcnFf ZGF0YSAqZCkKLXsKLQlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hp cF9kYXRhKGQpOwotCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9IGdwaW9jaGlwX2dl dF9kYXRhKGdjKTsKLQotCW5ta19ncGlvX2lycV9tYXNrdW5tYXNrKG5ta19jaGlwLCBkLCBmYWxz ZSk7Ci0JZ3Bpb2NoaXBfZGlzYWJsZV9pcnEoZ2MsIGlycWRfdG9faHdpcnEoZCkpOwotfQotCi1z dGF0aWMgdm9pZCBubWtfZ3Bpb19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQlz dHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCXN0 cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTsKLQot CWdwaW9jaGlwX2VuYWJsZV9pcnEoZ2MsIGlycWRfdG9faHdpcnEoZCkpOwotCW5ta19ncGlvX2ly cV9tYXNrdW5tYXNrKG5ta19jaGlwLCBkLCB0cnVlKTsKLX0KLQotc3RhdGljIGludCBubWtfZ3Bp b19pcnFfc2V0X3dha2Uoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgb24pCi17Ci0J c3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKLQlz dHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAgPSBncGlvY2hpcF9nZXRfZGF0YShnYyk7Ci0J dW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWNsa19lbmFibGUobm1rX2NoaXAtPmNsayk7Ci0Jc3Bp bl9sb2NrX2lycXNhdmUoJm5ta19ncGlvX3NscG1fbG9jaywgZmxhZ3MpOwotCXNwaW5fbG9jaygm bm1rX2NoaXAtPmxvY2spOwotCi0JaWYgKGlycWRfaXJxX2Rpc2FibGVkKGQpKQotCQlfX25ta19n cGlvX3NldF93YWtlKG5ta19jaGlwLCBkLT5od2lycSwgb24pOwotCi0JaWYgKG9uKQotCQlubWtf Y2hpcC0+cmVhbF93YWtlIHw9IEJJVChkLT5od2lycSk7Ci0JZWxzZQotCQlubWtfY2hpcC0+cmVh bF93YWtlICY9IH5CSVQoZC0+aHdpcnEpOwotCi0Jc3Bpbl91bmxvY2soJm5ta19jaGlwLT5sb2Nr KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZubWtfZ3Bpb19zbHBtX2xvY2ssIGZsYWdzKTsK LQljbGtfZGlzYWJsZShubWtfY2hpcC0+Y2xrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMg aW50IG5ta19ncGlvX2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGlu dCB0eXBlKQotewotCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlw X2RhdGEoZCk7Ci0Jc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwID0gZ3Bpb2NoaXBfZ2V0 X2RhdGEoZ2MpOwotCWJvb2wgZW5hYmxlZCA9ICFpcnFkX2lycV9kaXNhYmxlZChkKTsKLQlib29s IHdha2UgPSBpcnFkX2lzX3dha2V1cF9zZXQoZCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQot CWlmICh0eXBlICYgSVJRX1RZUEVfTEVWRUxfSElHSCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYg KHR5cGUgJiBJUlFfVFlQRV9MRVZFTF9MT1cpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2xrX2Vu YWJsZShubWtfY2hpcC0+Y2xrKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbm1rX2NoaXAtPmxvY2ss IGZsYWdzKTsKLQotCWlmIChlbmFibGVkKQotCQlfX25ta19ncGlvX2lycV9tb2RpZnkobm1rX2No aXAsIGQtPmh3aXJxLCBOT1JNQUwsIGZhbHNlKTsKLQotCWlmIChlbmFibGVkIHx8IHdha2UpCi0J CV9fbm1rX2dwaW9faXJxX21vZGlmeShubWtfY2hpcCwgZC0+aHdpcnEsIFdBS0UsIGZhbHNlKTsK LQotCW5ta19jaGlwLT5lZGdlX3Jpc2luZyAmPSB+QklUKGQtPmh3aXJxKTsKLQlpZiAodHlwZSAm IElSUV9UWVBFX0VER0VfUklTSU5HKQotCQlubWtfY2hpcC0+ZWRnZV9yaXNpbmcgfD0gQklUKGQt Pmh3aXJxKTsKLQotCW5ta19jaGlwLT5lZGdlX2ZhbGxpbmcgJj0gfkJJVChkLT5od2lycSk7Ci0J aWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCi0JCW5ta19jaGlwLT5lZGdlX2ZhbGxp bmcgfD0gQklUKGQtPmh3aXJxKTsKLQotCWlmIChlbmFibGVkKQotCQlfX25ta19ncGlvX2lycV9t b2RpZnkobm1rX2NoaXAsIGQtPmh3aXJxLCBOT1JNQUwsIHRydWUpOwotCi0JaWYgKGVuYWJsZWQg fHwgd2FrZSkKLQkJX19ubWtfZ3Bpb19pcnFfbW9kaWZ5KG5ta19jaGlwLCBkLT5od2lycSwgV0FL RSwgdHJ1ZSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZubWtfY2hpcC0+bG9jaywgZmxh Z3MpOwotCWNsa19kaXNhYmxlKG5ta19jaGlwLT5jbGspOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyB1bnNpZ25lZCBpbnQgbm1rX2dwaW9faXJxX3N0YXJ0dXAoc3RydWN0IGlycV9kYXRhICpk KQotewotCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEo ZCk7Ci0Jc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEo Z2MpOwotCi0JY2xrX2VuYWJsZShubWtfY2hpcC0+Y2xrKTsKLQlubWtfZ3Bpb19pcnFfdW5tYXNr KGQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBubWtfZ3Bpb19pcnFfc2h1dGRvd24o c3RydWN0IGlycV9kYXRhICpkKQotewotCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFf Z2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0Jc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwID0g Z3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpOwotCi0Jbm1rX2dwaW9faXJxX21hc2soZCk7Ci0JY2xrX2Rp c2FibGUobm1rX2NoaXAtPmNsayk7Ci19Ci0KLXN0YXRpYyB2b2lkIG5ta19ncGlvX2lycV9oYW5k bGVyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzdHJ1Y3QgaXJxX2NoaXAgKmhvc3RfY2hp cCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOwotCXN0cnVjdCBncGlvX2NoaXAgKmNoaXAgPSBp cnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOwotCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpu bWtfY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGNoaXApOwotCXUzMiBzdGF0dXM7Ci0KLQljaGFp bmVkX2lycV9lbnRlcihob3N0X2NoaXAsIGRlc2MpOwotCi0JY2xrX2VuYWJsZShubWtfY2hpcC0+ Y2xrKTsKLQlzdGF0dXMgPSByZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0lTKTsKLQlj bGtfZGlzYWJsZShubWtfY2hpcC0+Y2xrKTsKLQotCXdoaWxlIChzdGF0dXMpIHsKLQkJaW50IGJp dCA9IF9fZmZzKHN0YXR1cyk7Ci0KLQkJZ2VuZXJpY19oYW5kbGVfZG9tYWluX2lycShjaGlwLT5p cnEuZG9tYWluLCBiaXQpOwotCQlzdGF0dXMgJj0gfkJJVChiaXQpOwotCX0KLQotCWNoYWluZWRf aXJxX2V4aXQoaG9zdF9jaGlwLCBkZXNjKTsKLX0KLQotLyogSS9PIEZ1bmN0aW9ucyAqLwotCi1z dGF0aWMgaW50IG5ta19ncGlvX2dldF9kaXIoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWdu ZWQgb2Zmc2V0KQotewotCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9IGdwaW9jaGlw X2dldF9kYXRhKGNoaXApOwotCWludCBkaXI7Ci0KLQljbGtfZW5hYmxlKG5ta19jaGlwLT5jbGsp OwotCi0JZGlyID0gcmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19ESVIpICYgQklUKG9m ZnNldCk7Ci0KLQljbGtfZGlzYWJsZShubWtfY2hpcC0+Y2xrKTsKLQotCWlmIChkaXIpCi0JCXJl dHVybiBHUElPX0xJTkVfRElSRUNUSU9OX09VVDsKLQotCXJldHVybiBHUElPX0xJTkVfRElSRUNU SU9OX0lOOwotfQotCi1zdGF0aWMgaW50IG5ta19ncGlvX21ha2VfaW5wdXQoc3RydWN0IGdwaW9f Y2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpu bWtfY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGNoaXApOwotCi0JY2xrX2VuYWJsZShubWtfY2hp cC0+Y2xrKTsKLQotCXdyaXRlbChCSVQob2Zmc2V0KSwgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJ T19ESVJDKTsKLQotCWNsa19kaXNhYmxlKG5ta19jaGlwLT5jbGspOwotCi0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyBpbnQgbm1rX2dwaW9fZ2V0X2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAs IHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAgPSBn cGlvY2hpcF9nZXRfZGF0YShjaGlwKTsKLQlpbnQgdmFsdWU7Ci0KLQljbGtfZW5hYmxlKG5ta19j aGlwLT5jbGspOwotCi0JdmFsdWUgPSAhIShyZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElP X0RBVCkgJiBCSVQob2Zmc2V0KSk7Ci0KLQljbGtfZGlzYWJsZShubWtfY2hpcC0+Y2xrKTsKLQot CXJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIHZvaWQgbm1rX2dwaW9fc2V0X291dHB1dChzdHJ1 Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsCi0JCQkJaW50IHZhbCkKLXsKLQlz dHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAgPSBncGlvY2hpcF9nZXRfZGF0YShjaGlwKTsK LQotCWNsa19lbmFibGUobm1rX2NoaXAtPmNsayk7Ci0KLQlfX25ta19ncGlvX3NldF9vdXRwdXQo bm1rX2NoaXAsIG9mZnNldCwgdmFsKTsKLQotCWNsa19kaXNhYmxlKG5ta19jaGlwLT5jbGspOwot fQotCi1zdGF0aWMgaW50IG5ta19ncGlvX21ha2Vfb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNo aXAsIHVuc2lnbmVkIG9mZnNldCwKLQkJCQlpbnQgdmFsKQotewotCXN0cnVjdCBubWtfZ3Bpb19j aGlwICpubWtfY2hpcCA9IGdwaW9jaGlwX2dldF9kYXRhKGNoaXApOwotCi0JY2xrX2VuYWJsZShu bWtfY2hpcC0+Y2xrKTsKLQotCV9fbm1rX2dwaW9fbWFrZV9vdXRwdXQobm1rX2NoaXAsIG9mZnNl dCwgdmFsKTsKLQotCWNsa19kaXNhYmxlKG5ta19jaGlwLT5jbGspOwotCi0JcmV0dXJuIDA7Ci19 Ci0KLSNpZmRlZiBDT05GSUdfREVCVUdfRlMKLXN0YXRpYyBpbnQgbm1rX2dwaW9fZ2V0X21vZGUo c3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwLCBpbnQgb2Zmc2V0KQotewotCXUzMiBhZnVu YywgYmZ1bmM7Ci0KLQljbGtfZW5hYmxlKG5ta19jaGlwLT5jbGspOwotCi0JYWZ1bmMgPSByZWFk bChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0FGU0xBKSAmIEJJVChvZmZzZXQpOwotCWJmdW5j ID0gcmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19BRlNMQikgJiBCSVQob2Zmc2V0KTsK LQotCWNsa19kaXNhYmxlKG5ta19jaGlwLT5jbGspOwotCi0JcmV0dXJuIChhZnVuYyA/IE5NS19H UElPX0FMVF9BIDogMCkgfCAoYmZ1bmMgPyBOTUtfR1BJT19BTFRfQiA6IDApOwotfQotCi1zdGF0 aWMgdm9pZCBubWtfZ3Bpb19kYmdfc2hvd19vbmUoc3RydWN0IHNlcV9maWxlICpzLAotCXN0cnVj dCBwaW5jdHJsX2RldiAqcGN0bGRldiwgc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKLQl1bnNpZ25l ZCBvZmZzZXQsIHVuc2lnbmVkIGdwaW8pCi17Ci0Jc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19j aGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoY2hpcCk7Ci0JaW50IG1vZGU7Ci0JYm9vbCBpc19vdXQ7 Ci0JYm9vbCBkYXRhX291dDsKLQlib29sIHB1bGw7Ci0JY29uc3QgY2hhciAqbW9kZXNbXSA9IHsK LQkJW05NS19HUElPX0FMVF9HUElPXQk9ICJncGlvIiwKLQkJW05NS19HUElPX0FMVF9BXQk9ICJh bHRBIiwKLQkJW05NS19HUElPX0FMVF9CXQk9ICJhbHRCIiwKLQkJW05NS19HUElPX0FMVF9DXQk9 ICJhbHRDIiwKLQkJW05NS19HUElPX0FMVF9DKzFdCT0gImFsdEMxIiwKLQkJW05NS19HUElPX0FM VF9DKzJdCT0gImFsdEMyIiwKLQkJW05NS19HUElPX0FMVF9DKzNdCT0gImFsdEMzIiwKLQkJW05N S19HUElPX0FMVF9DKzRdCT0gImFsdEM0IiwKLQl9OwotCi0JY2hhciAqbGFiZWwgPSBncGlvY2hp cF9kdXBfbGluZV9sYWJlbChjaGlwLCBvZmZzZXQpOwotCWlmIChJU19FUlIobGFiZWwpKQotCQly ZXR1cm47Ci0KLQljbGtfZW5hYmxlKG5ta19jaGlwLT5jbGspOwotCWlzX291dCA9ICEhKHJlYWRs KG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fRElSKSAmIEJJVChvZmZzZXQpKTsKLQlwdWxsID0g IShyZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX1BESVMpICYgQklUKG9mZnNldCkpOwot CWRhdGFfb3V0ID0gISEocmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19EQVQpICYgQklU KG9mZnNldCkpOwotCW1vZGUgPSBubWtfZ3Bpb19nZXRfbW9kZShubWtfY2hpcCwgb2Zmc2V0KTsK LQlpZiAoKG1vZGUgPT0gTk1LX0dQSU9fQUxUX0MpICYmIHBjdGxkZXYpCi0JCW1vZGUgPSBubWtf cHJjbV9ncGlvY3JfZ2V0X21vZGUocGN0bGRldiwgZ3Bpbyk7Ci0KLQlpZiAoaXNfb3V0KSB7Ci0J CXNlcV9wcmludGYocywgIiBncGlvLSUtM2QgKCUtMjAuMjBzKSBvdXQgJXMgICAgICAgICAgICVz IiwKLQkJCSAgIGdwaW8sCi0JCQkgICBsYWJlbCA/OiAiKG5vbmUpIiwKLQkJCSAgIGRhdGFfb3V0 ID8gImhpIiA6ICJsbyIsCi0JCQkgICAobW9kZSA8IDApID8gInVua25vd24iIDogbW9kZXNbbW9k ZV0pOwotCX0gZWxzZSB7Ci0JCWludCBpcnEgPSBjaGlwLT50b19pcnEoY2hpcCwgb2Zmc2V0KTsK LQkJY29uc3QgaW50IHB1bGxpZHggPSBwdWxsID8gMSA6IDA7Ci0JCWludCB2YWw7Ci0JCXN0YXRp YyBjb25zdCBjaGFyICogY29uc3QgcHVsbHNbXSA9IHsKLQkJCSJub25lICAgICAgICAiLAotCQkJ InB1bGwgZW5hYmxlZCIsCi0JCX07Ci0KLQkJc2VxX3ByaW50ZihzLCAiIGdwaW8tJS0zZCAoJS0y MC4yMHMpIGluICAlcyAlcyIsCi0JCQkgICBncGlvLAotCQkJICAgbGFiZWwgPzogIihub25lKSIs Ci0JCQkgICBwdWxsc1twdWxsaWR4XSwKLQkJCSAgIChtb2RlIDwgMCkgPyAidW5rbm93biIgOiBt b2Rlc1ttb2RlXSk7Ci0KLQkJdmFsID0gbm1rX2dwaW9fZ2V0X2lucHV0KGNoaXAsIG9mZnNldCk7 Ci0JCXNlcV9wcmludGYocywgIiBWQUwgJWQiLCB2YWwpOwotCi0JCS8qCi0JCSAqIFRoaXMgcmFj ZXMgd2l0aCByZXF1ZXN0X2lycSgpLCBzZXRfaXJxX3R5cGUoKSwKLQkJICogYW5kIHNldF9pcnFf d2FrZSgpIC4uLiBidXQgdGhvc2UgYXJlICJyYXJlIi4KLQkJICovCi0JCWlmIChpcnEgPiAwICYm IGlycV9oYXNfYWN0aW9uKGlycSkpIHsKLQkJCWNoYXIgKnRyaWdnZXI7Ci0JCQlib29sIHdha2U7 Ci0KLQkJCWlmIChubWtfY2hpcC0+ZWRnZV9yaXNpbmcgJiBCSVQob2Zmc2V0KSkKLQkJCQl0cmln Z2VyID0gImVkZ2UtcmlzaW5nIjsKLQkJCWVsc2UgaWYgKG5ta19jaGlwLT5lZGdlX2ZhbGxpbmcg JiBCSVQob2Zmc2V0KSkKLQkJCQl0cmlnZ2VyID0gImVkZ2UtZmFsbGluZyI7Ci0JCQllbHNlCi0J CQkJdHJpZ2dlciA9ICJlZGdlLXVuZGVmaW5lZCI7Ci0KLQkJCXdha2UgPSAhIShubWtfY2hpcC0+ cmVhbF93YWtlICYgQklUKG9mZnNldCkpOwotCi0JCQlzZXFfcHJpbnRmKHMsICIgaXJxLSVkICVz JXMiLAotCQkJCSAgIGlycSwgdHJpZ2dlciwgd2FrZSA/ICIgd2FrZXVwIiA6ICIiKTsKLQkJfQot CX0KLQljbGtfZGlzYWJsZShubWtfY2hpcC0+Y2xrKTsKLX0KLQotc3RhdGljIHZvaWQgbm1rX2dw aW9fZGJnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKQot ewotCXVuc2lnbmVkCQlpOwotCXVuc2lnbmVkCQlncGlvID0gY2hpcC0+YmFzZTsKLQotCWZvciAo aSA9IDA7IGkgPCBjaGlwLT5uZ3BpbzsgaSsrLCBncGlvKyspIHsKLQkJbm1rX2dwaW9fZGJnX3No b3dfb25lKHMsIE5VTEwsIGNoaXAsIGksIGdwaW8pOwotCQlzZXFfcHJpbnRmKHMsICJcbiIpOwot CX0KLX0KLQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBubWtfZ3Bpb19kYmdfc2hvd19vbmUo c3RydWN0IHNlcV9maWxlICpzLAotCQkJCQkgc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAot CQkJCQkgc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKLQkJCQkJIHVuc2lnbmVkIG9mZnNldCwgdW5z aWduZWQgZ3BpbykKLXsKLX0KLSNkZWZpbmUgbm1rX2dwaW9fZGJnX3Nob3cJTlVMTAotI2VuZGlm Ci0KLS8qCi0gKiBXZSB3aWxsIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHN0YXRlIGNvbnRhaW5l ciB1c2luZyBkZXZtKiBhbGxvY2F0b3JzCi0gKiBiaW5kaW5nIHRvIHRoZSBmaXJzdCBkZXZpY2Ug cmVhY2hpbmcgdGhpcyBwb2ludCwgaXQgZG9lc24ndCBtYXR0ZXIgaWYKLSAqIGl0IGlzIHRoZSBw aW4gY29udHJvbGxlciBvciBHUElPIGRyaXZlci4gSG93ZXZlciB3ZSBuZWVkIHRvIHVzZSB0aGUg cmlnaHQKLSAqIHBsYXRmb3JtIGRldmljZSB3aGVuIGxvb2tpbmcgdXAgcmVzb3VyY2VzIHNvIHBh eSBhdHRlbnRpb24gdG8gcGRldi4KLSAqLwotc3RhdGljIHN0cnVjdCBubWtfZ3Bpb19jaGlwICpu bWtfZ3Bpb19wb3B1bGF0ZV9jaGlwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJCQlzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtf Y2hpcDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpncGlvX3BkZXY7Ci0Jc3RydWN0IGdwaW9f Y2hpcCAqY2hpcDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3QgY2xrICpjbGs7Ci0J dm9pZCBfX2lvbWVtICpiYXNlOwotCXUzMiBpZDsKLQotCWdwaW9fcGRldiA9IG9mX2ZpbmRfZGV2 aWNlX2J5X25vZGUobnApOwotCWlmICghZ3Bpb19wZGV2KSB7Ci0JCXByX2VycigicG9wdWxhdGUg XCIlcE9GblwiOiBkZXZpY2Ugbm90IGZvdW5kXG4iLCBucCk7Ci0JCXJldHVybiBFUlJfUFRSKC1F Tk9ERVYpOwotCX0KLQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJncGlvLWJhbmsiLCAm aWQpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInBvcHVsYXRlOiBncGlvLWJhbmsgcHJvcGVy dHkgbm90IGZvdW5kXG4iKTsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChncGlvX3BkZXYpOwotCQly ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQkvKiBBbHJlYWR5IHBvcHVsYXRlZD8gKi8K LQlubWtfY2hpcCA9IG5ta19ncGlvX2NoaXBzW2lkXTsKLQlpZiAobm1rX2NoaXApIHsKLQkJcGxh dGZvcm1fZGV2aWNlX3B1dChncGlvX3BkZXYpOwotCQlyZXR1cm4gbm1rX2NoaXA7Ci0JfQotCi0J bm1rX2NoaXAgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpubWtfY2hpcCksIEdG UF9LRVJORUwpOwotCWlmICghbm1rX2NoaXApIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChncGlv X3BkZXYpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0KLQlubWtfY2hpcC0+YmFu ayA9IGlkOwotCWNoaXAgPSAmbm1rX2NoaXAtPmNoaXA7Ci0JY2hpcC0+YmFzZSA9IGlkICogTk1L X0dQSU9fUEVSX0NISVA7Ci0JY2hpcC0+bmdwaW8gPSBOTUtfR1BJT19QRVJfQ0hJUDsKLQljaGlw LT5sYWJlbCA9IGRldl9uYW1lKCZncGlvX3BkZXYtPmRldik7Ci0JY2hpcC0+cGFyZW50ID0gJmdw aW9fcGRldi0+ZGV2OwotCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGdwaW9fcGRldiwg SU9SRVNPVVJDRV9NRU0sIDApOwotCWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYt PmRldiwgcmVzKTsKLQlpZiAoSVNfRVJSKGJhc2UpKSB7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQo Z3Bpb19wZGV2KTsKLQkJcmV0dXJuIEVSUl9DQVNUKGJhc2UpOwotCX0KLQlubWtfY2hpcC0+YWRk ciA9IGJhc2U7Ci0KLQljbGsgPSBjbGtfZ2V0KCZncGlvX3BkZXYtPmRldiwgTlVMTCk7Ci0JaWYg KElTX0VSUihjbGspKSB7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQoZ3Bpb19wZGV2KTsKLQkJcmV0 dXJuICh2b2lkICopIGNsazsKLQl9Ci0JY2xrX3ByZXBhcmUoY2xrKTsKLQlubWtfY2hpcC0+Y2xr ID0gY2xrOwotCi0JQlVHX09OKG5ta19jaGlwLT5iYW5rID49IEFSUkFZX1NJWkUobm1rX2dwaW9f Y2hpcHMpKTsKLQlubWtfZ3Bpb19jaGlwc1tpZF0gPSBubWtfY2hpcDsKLQlyZXR1cm4gbm1rX2No aXA7Ci19Ci0KLXN0YXRpYyB2b2lkIG5ta19ncGlvX2lycV9wcmludF9jaGlwKHN0cnVjdCBpcnFf ZGF0YSAqZCwgc3RydWN0IHNlcV9maWxlICpwKQotewotCXN0cnVjdCBncGlvX2NoaXAgKmdjID0g aXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0Jc3RydWN0IG5ta19ncGlvX2NoaXAgKm5t a19jaGlwID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpOwotCi0Jc2VxX3ByaW50ZihwLCAibm1rJXUt JXUtJXUiLCBubWtfY2hpcC0+YmFuaywKLQkJICAgZ2MtPmJhc2UsIGdjLT5iYXNlICsgZ2MtPm5n cGlvIC0gMSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2NoaXAgbm1rX2lycV9jaGlw ID0gewotCS5pcnFfYWNrID0gbm1rX2dwaW9faXJxX2FjaywKLQkuaXJxX21hc2sgPSBubWtfZ3Bp b19pcnFfbWFzaywKLQkuaXJxX3VubWFzayA9IG5ta19ncGlvX2lycV91bm1hc2ssCi0JLmlycV9z ZXRfdHlwZSA9IG5ta19ncGlvX2lycV9zZXRfdHlwZSwKLQkuaXJxX3NldF93YWtlID0gbm1rX2dw aW9faXJxX3NldF93YWtlLAotCS5pcnFfc3RhcnR1cCA9IG5ta19ncGlvX2lycV9zdGFydHVwLAot CS5pcnFfc2h1dGRvd24gPSBubWtfZ3Bpb19pcnFfc2h1dGRvd24sCi0JLmlycV9wcmludF9jaGlw ID0gbm1rX2dwaW9faXJxX3ByaW50X2NoaXAsCi0JLmZsYWdzID0gSVJRQ0hJUF9NQVNLX09OX1NV U1BFTkQgfCBJUlFDSElQX0lNTVVUQUJMRSwKLQlHUElPQ0hJUF9JUlFfUkVTT1VSQ0VfSEVMUEVS UywKLX07Ci0KLXN0YXRpYyBpbnQgbm1rX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqZGV2KQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPmRldi5vZl9ub2RlOwot CXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKLQlzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlw OwotCXN0cnVjdCBncGlvX2lycV9jaGlwICpnaXJxOwotCWJvb2wgc3VwcG9ydHNfc2xlZXBtb2Rl OwotCWludCBpcnE7Ci0JaW50IHJldDsKLQotCW5ta19jaGlwID0gbm1rX2dwaW9fcG9wdWxhdGVf Y2hpcChucCwgZGV2KTsKLQlpZiAoSVNfRVJSKG5ta19jaGlwKSkgewotCQlkZXZfZXJyKCZkZXYt PmRldiwgImNvdWxkIG5vdCBwb3B1bGF0ZSBubWsgY2hpcCBzdHJ1Y3RcbiIpOwotCQlyZXR1cm4g UFRSX0VSUihubWtfY2hpcCk7Ci0JfQotCi0Jc3VwcG9ydHNfc2xlZXBtb2RlID0KLQkJb2ZfcHJv cGVydHlfcmVhZF9ib29sKG5wLCAic3Qsc3VwcG9ydHMtc2xlZXBtb2RlIik7Ci0KLQkvKiBDb3Jy ZWN0IHBsYXRmb3JtIGRldmljZSBJRCAqLwotCWRldi0+aWQgPSBubWtfY2hpcC0+YmFuazsKLQot CWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKLQlpZiAoaXJxIDwgMCkKLQkJcmV0dXJu IGlycTsKLQotCS8qCi0JICogVGhlIHZpcnQgYWRkcmVzcyBpbiBubWtfY2hpcC0+YWRkciBpcyBp biB0aGUgbm9tYWRpayByZWdpc3RlciBzcGFjZSwKLQkgKiBzbyB3ZSBjYW4gc2ltcGx5IGNvbnZl cnQgdGhlIHJlc291cmNlIGFkZHJlc3MsIHdpdGhvdXQgcmVtYXBwaW5nCi0JICovCi0Jbm1rX2No aXAtPnNsZWVwbW9kZSA9IHN1cHBvcnRzX3NsZWVwbW9kZTsKLQlzcGluX2xvY2tfaW5pdCgmbm1r X2NoaXAtPmxvY2spOwotCi0JY2hpcCA9ICZubWtfY2hpcC0+Y2hpcDsKLQljaGlwLT5wYXJlbnQg PSAmZGV2LT5kZXY7Ci0JY2hpcC0+cmVxdWVzdCA9IGdwaW9jaGlwX2dlbmVyaWNfcmVxdWVzdDsK LQljaGlwLT5mcmVlID0gZ3Bpb2NoaXBfZ2VuZXJpY19mcmVlOwotCWNoaXAtPmdldF9kaXJlY3Rp b24gPSBubWtfZ3Bpb19nZXRfZGlyOwotCWNoaXAtPmRpcmVjdGlvbl9pbnB1dCA9IG5ta19ncGlv X21ha2VfaW5wdXQ7Ci0JY2hpcC0+Z2V0ID0gbm1rX2dwaW9fZ2V0X2lucHV0OwotCWNoaXAtPmRp cmVjdGlvbl9vdXRwdXQgPSBubWtfZ3Bpb19tYWtlX291dHB1dDsKLQljaGlwLT5zZXQgPSBubWtf Z3Bpb19zZXRfb3V0cHV0OwotCWNoaXAtPmRiZ19zaG93ID0gbm1rX2dwaW9fZGJnX3Nob3c7Ci0J Y2hpcC0+Y2FuX3NsZWVwID0gZmFsc2U7Ci0JY2hpcC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQot CWdpcnEgPSAmY2hpcC0+aXJxOwotCWdwaW9faXJxX2NoaXBfc2V0X2NoaXAoZ2lycSwgJm5ta19p cnFfY2hpcCk7Ci0JZ2lycS0+cGFyZW50X2hhbmRsZXIgPSBubWtfZ3Bpb19pcnFfaGFuZGxlcjsK LQlnaXJxLT5udW1fcGFyZW50cyA9IDE7Ci0JZ2lycS0+cGFyZW50cyA9IGRldm1fa2NhbGxvYygm ZGV2LT5kZXYsIDEsCi0JCQkJICAgICBzaXplb2YoKmdpcnEtPnBhcmVudHMpLAotCQkJCSAgICAg R0ZQX0tFUk5FTCk7Ci0JaWYgKCFnaXJxLT5wYXJlbnRzKQotCQlyZXR1cm4gLUVOT01FTTsKLQln aXJxLT5wYXJlbnRzWzBdID0gaXJxOwotCWdpcnEtPmRlZmF1bHRfdHlwZSA9IElSUV9UWVBFX05P TkU7Ci0JZ2lycS0+aGFuZGxlciA9IGhhbmRsZV9lZGdlX2lycTsKLQotCWNsa19lbmFibGUobm1r X2NoaXAtPmNsayk7Ci0Jbm1rX2NoaXAtPmxvd2VtaSA9IHJlYWRsX3JlbGF4ZWQobm1rX2NoaXAt PmFkZHIgKyBOTUtfR1BJT19MT1dFTUkpOwotCWNsa19kaXNhYmxlKG5ta19jaGlwLT5jbGspOwot Ci0JcmV0ID0gZ3Bpb2NoaXBfYWRkX2RhdGEoY2hpcCwgbm1rX2NoaXApOwotCWlmIChyZXQpCi0J CXJldHVybiByZXQ7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIG5ta19jaGlwKTsKLQot CWRldl9pbmZvKCZkZXYtPmRldiwgImNoaXAgcmVnaXN0ZXJlZFxuIik7Ci0KLQlyZXR1cm4gMDsK LX0KLQogc3RhdGljIGludCBubWtfZ2V0X2dyb3Vwc19jbnQoc3RydWN0IHBpbmN0cmxfZGV2ICpw Y3RsZGV2KQogewogCXN0cnVjdCBubWtfcGluY3RybCAqbnBjdCA9IHBpbmN0cmxfZGV2X2dldF9k cnZkYXRhKHBjdGxkZXYpOwpAQCAtMTE5NywxMiArNTI0LDEyIEBAIHN0YXRpYyBjb25zdCBjaGFy ICpubWtfZ2V0X2dyb3VwX25hbWUoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAogCiBzdGF0 aWMgaW50IG5ta19nZXRfZ3JvdXBfcGlucyhzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsIHVu c2lnbmVkIHNlbGVjdG9yLAogCQkJICAgICAgY29uc3QgdW5zaWduZWQgKipwaW5zLAotCQkJICAg ICAgdW5zaWduZWQgKm5waW5zKQorCQkJICAgICAgdW5zaWduZWQgaW50ICpudW1fcGlucykKIHsK IAlzdHJ1Y3Qgbm1rX3BpbmN0cmwgKm5wY3QgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3Rs ZGV2KTsKIAogCSpwaW5zID0gbnBjdC0+c29jLT5ncm91cHNbc2VsZWN0b3JdLmdycC5waW5zOwot CSpucGlucyA9IG5wY3QtPnNvYy0+Z3JvdXBzW3NlbGVjdG9yXS5ncnAubnBpbnM7CisJKm51bV9w aW5zID0gbnBjdC0+c29jLT5ncm91cHNbc2VsZWN0b3JdLmdycC5ucGluczsKIAlyZXR1cm4gMDsK IH0KIApAQCAtMTUzMyw3ICs4NjAsNyBAQCBzdGF0aWMgaW50IG5ta19wbXhfc2V0KHN0cnVjdCBw aW5jdHJsX2RldiAqcGN0bGRldiwgdW5zaWduZWQgZnVuY3Rpb24sCiB7CiAJc3RydWN0IG5ta19w aW5jdHJsICpucGN0ID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7CiAJY29uc3Qg c3RydWN0IG5ta19waW5ncm91cCAqZzsKLQlzdGF0aWMgdW5zaWduZWQgaW50IHNscG1bTlVNX0JB TktTXTsKKwlzdGF0aWMgdW5zaWduZWQgaW50IHNscG1bTk1LX01BWF9CQU5LU107CiAJdW5zaWdu ZWQgbG9uZyBmbGFncyA9IDA7CiAJYm9vbCBnbGl0Y2g7CiAJaW50IHJldCA9IC1FSU5WQUw7CkBA IC0xOTIxLDE5ICsxMjQ4LDYgQEAgc3RhdGljIGludCBubWtfcGluY3RybF9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCBubWtfZ3Bpb19tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAi c3Qsbm9tYWRpay1ncGlvIiwgfSwKLQl7fQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgbm1rX2dwaW9fZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImdwaW8i LAotCQkub2ZfbWF0Y2hfdGFibGUgPSBubWtfZ3Bpb19tYXRjaCwKLQl9LAotCS5wcm9iZSA9IG5t a19ncGlvX3Byb2JlLAotfTsKLQogc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG5ta19waW5jdHJs X3BtX29wcywKIAkJCW5ta19waW5jdHJsX3N1c3BlbmQsCiAJCQlubWtfcGluY3RybF9yZXN1bWUp OwpAQCAtMTk0NywxMiArMTI2MSw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG5t a19waW5jdHJsX2RyaXZlciA9IHsKIAkucHJvYmUgPSBubWtfcGluY3RybF9wcm9iZSwKIH07CiAK LXN0YXRpYyBpbnQgX19pbml0IG5ta19ncGlvX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGxhdGZv cm1fZHJpdmVyX3JlZ2lzdGVyKCZubWtfZ3Bpb19kcml2ZXIpOwotfQotc3Vic3lzX2luaXRjYWxs KG5ta19ncGlvX2luaXQpOwotCiBzdGF0aWMgaW50IF9faW5pdCBubWtfcGluY3RybF9pbml0KHZv aWQpCiB7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmbm1rX3BpbmN0cmxfZHJp dmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9ub21hZGlrL3BpbmN0cmwtbm9tYWRp ay5oIGIvaW5jbHVkZS9saW51eC9ncGlvL2dwaW8tbm9tYWRpay5oCnNpbWlsYXJpdHkgaW5kZXgg NjElCnJlbmFtZSBmcm9tIGRyaXZlcnMvcGluY3RybC9ub21hZGlrL3BpbmN0cmwtbm9tYWRpay5o CnJlbmFtZSB0byBpbmNsdWRlL2xpbnV4L2dwaW8vZ3Bpby1ub21hZGlrLmgKaW5kZXggMWVmMjU1 OWJjNTcxLi4wMTY2ZGRiNzFmNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9ub21hZGlr L3BpbmN0cmwtbm9tYWRpay5oCisrKyBiL2luY2x1ZGUvbGludXgvZ3Bpby9ncGlvLW5vbWFkaWsu aApAQCAtMSwxNiArMSw3NCBAQAogLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAg Ki8KLSNpZm5kZWYgUElOQ1RSTF9QSU5DVFJMX05PTUFESUtfSAotI2RlZmluZSBQSU5DVFJMX1BJ TkNUUkxfTk9NQURJS19ICi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxs aW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+CisjaWZu ZGVmIF9fTElOVVhfR1BJT19OT01BRElLX0gKKyNkZWZpbmUgX19MSU5VWF9HUElPX05PTUFESUtf SAogCiAvKiBQYWNrYWdlIGRlZmluaXRpb25zICovCiAjZGVmaW5lIFBJTkNUUkxfTk1LX1NUTjg4 MTUJMAogI2RlZmluZSBQSU5DVFJMX05NS19EQjg1MDAJMQogCisjZGVmaW5lIEdQSU9fQkxPQ0tf U0hJRlQgNQorI2RlZmluZSBOTUtfR1BJT19QRVJfQ0hJUCBCSVQoR1BJT19CTE9DS19TSElGVCkK KyNkZWZpbmUgTk1LX01BWF9CQU5LUyBESVZfUk9VTkRfVVAoNTEyLCBOTUtfR1BJT19QRVJfQ0hJ UCkKKworLyogUmVnaXN0ZXIgaW4gdGhlIGxvZ2ljIGJsb2NrICovCisjZGVmaW5lIE5NS19HUElP X0RBVAkweDAwCisjZGVmaW5lIE5NS19HUElPX0RBVFMJMHgwNAorI2RlZmluZSBOTUtfR1BJT19E QVRDCTB4MDgKKyNkZWZpbmUgTk1LX0dQSU9fUERJUwkweDBjCisjZGVmaW5lIE5NS19HUElPX0RJ UgkweDEwCisjZGVmaW5lIE5NS19HUElPX0RJUlMJMHgxNAorI2RlZmluZSBOTUtfR1BJT19ESVJD CTB4MTgKKyNkZWZpbmUgTk1LX0dQSU9fU0xQQwkweDFjCisjZGVmaW5lIE5NS19HUElPX0FGU0xB CTB4MjAKKyNkZWZpbmUgTk1LX0dQSU9fQUZTTEIJMHgyNAorI2RlZmluZSBOTUtfR1BJT19MT1dF TUkJMHgyOAorCisjZGVmaW5lIE5NS19HUElPX1JJTVNDCTB4NDAKKyNkZWZpbmUgTk1LX0dQSU9f RklNU0MJMHg0NAorI2RlZmluZSBOTUtfR1BJT19JUwkweDQ4CisjZGVmaW5lIE5NS19HUElPX0lD CTB4NGMKKyNkZWZpbmUgTk1LX0dQSU9fUldJTVNDCTB4NTAKKyNkZWZpbmUgTk1LX0dQSU9fRldJ TVNDCTB4NTQKKyNkZWZpbmUgTk1LX0dQSU9fV0tTCTB4NTgKKy8qIFRoZXNlIGFwcGVhciBpbiBE Qjg1NDAgYW5kIGxhdGVyIEFTSUNzICovCisjZGVmaW5lIE5NS19HUElPX0VER0VMRVZFTCAweDVD CisjZGVmaW5lIE5NS19HUElPX0xFVkVMCTB4NjAKKworLyogUHVsbCB1cC9kb3duIHZhbHVlcyAq LworZW51bSBubWtfZ3Bpb19wdWxsIHsKKwlOTUtfR1BJT19QVUxMX05PTkUsCisJTk1LX0dQSU9f UFVMTF9VUCwKKwlOTUtfR1BJT19QVUxMX0RPV04sCit9OworCisvKiBTbGVlcCBtb2RlICovCitl bnVtIG5ta19ncGlvX3NscG0geworCU5NS19HUElPX1NMUE1fSU5QVVQsCisJTk1LX0dQSU9fU0xQ TV9XQUtFVVBfRU5BQkxFID0gTk1LX0dQSU9fU0xQTV9JTlBVVCwKKwlOTUtfR1BJT19TTFBNX05P Q0hBTkdFLAorCU5NS19HUElPX1NMUE1fV0FLRVVQX0RJU0FCTEUgPSBOTUtfR1BJT19TTFBNX05P Q0hBTkdFLAorfTsKKworc3RydWN0IG5ta19ncGlvX2NoaXAgeworCXN0cnVjdCBncGlvX2NoaXAg Y2hpcDsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJc3RydWN0IGNsayAqY2xrOworCXVuc2lnbmVk IGludCBiYW5rOworCXZvaWQgKCpzZXRfaW9mb3JjZSkoYm9vbCBlbmFibGUpOworCXNwaW5sb2Nr X3QgbG9jazsKKwlib29sIHNsZWVwbW9kZTsKKwkvKiBLZWVwIHRyYWNrIG9mIGNvbmZpZ3VyZWQg ZWRnZXMgKi8KKwl1MzIgZWRnZV9yaXNpbmc7CisJdTMyIGVkZ2VfZmFsbGluZzsKKwl1MzIgcmVh bF93YWtlOworCXUzMiByd2ltc2M7CisJdTMyIGZ3aW1zYzsKKwl1MzIgcmltc2M7CisJdTMyIGZp bXNjOworCXUzMiBwdWxsX3VwOworCXUzMiBsb3dlbWk7Cit9OworCiAvKiBBbHRlcm5hdGUgZnVu Y3Rpb25zOiBmdW5jdGlvbiBDIGlzIHNldCBpbiBodyBieSBzZXR0aW5nIGJvdGggQSBhbmQgQiAq LwogI2RlZmluZSBOTUtfR1BJT19BTFRfR1BJTwkwCiAjZGVmaW5lIE5NS19HUElPX0FMVF9BCTEK QEAgLTEwNCw3ICsxNjIsNyBAQCBzdHJ1Y3QgcHJjbV9ncGlvY3JfYWx0Y3hfcGluX2Rlc2Mgewog c3RydWN0IG5ta19mdW5jdGlvbiB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBjaGFyICog Y29uc3QgKmdyb3VwczsKLQl1bnNpZ25lZCBuZ3JvdXBzOworCXVuc2lnbmVkIGludCBuZ3JvdXBz OwogfTsKIAogLyoqCkBAIC0xNDEsMTMgKzE5OSwxMyBAQCBzdHJ1Y3Qgbm1rX3Bpbmdyb3VwIHsK ICAqLwogc3RydWN0IG5ta19waW5jdHJsX3NvY19kYXRhIHsKIAljb25zdCBzdHJ1Y3QgcGluY3Ry bF9waW5fZGVzYyAqcGluczsKLQl1bnNpZ25lZCBucGluczsKKwl1bnNpZ25lZCBpbnQgbnBpbnM7 CiAJY29uc3Qgc3RydWN0IG5ta19mdW5jdGlvbiAqZnVuY3Rpb25zOwotCXVuc2lnbmVkIG5mdW5j dGlvbnM7CisJdW5zaWduZWQgaW50IG5mdW5jdGlvbnM7CiAJY29uc3Qgc3RydWN0IG5ta19waW5n cm91cCAqZ3JvdXBzOwotCXVuc2lnbmVkIG5ncm91cHM7CisJdW5zaWduZWQgaW50IG5ncm91cHM7 CiAJY29uc3Qgc3RydWN0IHByY21fZ3Bpb2NyX2FsdGN4X3Bpbl9kZXNjICphbHRjeF9waW5zOwot CXVuc2lnbmVkIG5waW5zX2FsdGN4OworCXVuc2lnbmVkIGludCBucGluc19hbHRjeDsKIAljb25z dCB1MTYgKnByY21fZ3Bpb2NyX3JlZ2lzdGVyczsKIH07CiAKQEAgLTE3Nyw0ICsyMzUsNDIgQEAg bm1rX3BpbmN0cmxfZGI4NTAwX2luaXQoY29uc3Qgc3RydWN0IG5ta19waW5jdHJsX3NvY19kYXRh ICoqc29jKQogCiAjZW5kaWYKIAotI2VuZGlmIC8qIFBJTkNUUkxfUElOQ1RSTF9OT01BRElLX0gg Ki8KKyNpZmRlZiBDT05GSUdfUElOQ1RSTF9EQjg1NDAKKwordm9pZCBubWtfcGluY3RybF9kYjg1 NDBfaW5pdChjb25zdCBzdHJ1Y3Qgbm1rX3BpbmN0cmxfc29jX2RhdGEgKipzb2MpOworCisjZWxz ZQorCitzdGF0aWMgaW5saW5lIHZvaWQKK25ta19waW5jdHJsX2RiODU0MF9pbml0KGNvbnN0IHN0 cnVjdCBubWtfcGluY3RybF9zb2NfZGF0YSAqKnNvYykKK3sKK30KKworI2VuZGlmCisKK3N0cnVj dCBwbGF0Zm9ybV9kZXZpY2U7CisKKy8qCisgKiBTeW1ib2xzIGRlY2xhcmVkIGluIGdwaW8tbm9t YWRpayB1c2VkIGJ5IHBpbmN0cmwtbm9tYWRpay4gSWYgcGluY3RybC1ub21hZGlrCisgKiBpcyBl bmFibGVkLCB0aGVuIGdwaW8tbm9tYWRpayBpcyBlbmFibGVkIGFzIHdlbGw7IHRoZSByZXZlcnNl IGlmIG5vdCBhbHdheXMKKyAqIHRydWUuCisgKi8KK3ZvaWQgbm1rX2dwaW9fZGJnX3Nob3dfb25l KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAorCQkJICAg c3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgIHVuc2ln bmVkIGludCBncGlvKTsKK3ZvaWQgX19ubWtfZ3Bpb19tYWtlX291dHB1dChzdHJ1Y3Qgbm1rX2dw aW9fY2hpcCAqbm1rX2NoaXAsCisJCQkgICAgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IHZhbCk7 Cit2b2lkIF9fbm1rX2dwaW9fc2V0X3NscG0oc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlw LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJIGVudW0gbm1rX2dwaW9fc2xwbSBtb2RlKTsKK3N0 cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfZ3Bpb19wb3B1bGF0ZV9jaGlwKHN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAsCisJCQkJCSAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisKKy8q IFN5bWJvbHMgZGVjbGFyZWQgaW4gcGluY3RybC1ub21hZGlrIHVzZWQgYnkgZ3Bpby1ub21hZGlr LiAqLworI2lmZGVmIENPTkZJR19QSU5DVFJMX05PTUFESUsKK2V4dGVybiBzdHJ1Y3Qgbm1rX2dw aW9fY2hpcCAqbm1rX2dwaW9fY2hpcHNbTk1LX01BWF9CQU5LU107CitleHRlcm4gc3BpbmxvY2tf dCBubWtfZ3Bpb19zbHBtX2xvY2s7CitpbnQgX19tYXliZV91bnVzZWQgbm1rX3ByY21fZ3Bpb2Ny X2dldF9tb2RlKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKKwkJCQkJICAgIGludCBncGlv KTsKKyNlbmRpZgorCisjZW5kaWYgLyogX19MSU5VWF9HUElPX05PTUFESUtfSCAqLwoKLS0gCjIu NDQuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LWFybS1rZXJuZWwK