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.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT 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 50C7AC2D0A8 for ; Mon, 28 Sep 2020 20:11:28 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 B9F68205ED for ; Mon, 28 Sep 2020 20:11:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ep2u1TwG"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=google.com header.i=@google.com header.b="pt/131yI" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B9F68205ED Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:From:Subject:Mime-Version:Message-Id:Date: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=4JwwfadzTKw+og6JmjUCejflmUOBtQMjw9dDLkLftb4=; b=ep2u1TwGOQHb8GGnkxsP7fB/wa /U149oCC7jaYqcPCDeoJAp8tCTOIcPR9Wti2A+nBUCa8a3SAD9UhTlX+zJsxB2LmArjuJ2FuqHane ODqVNHplh105yff75L8an99BbNy2tVknaxSVmTBtNf7tFCzPLePYZSKkFmAsVlBy/zGvbV7XzYXLz z3WCLRjikvj9QANba+HfM4nsQcZD1Sy1/jU6bgdLYOdwKd5wXQgPTZY1/ndYXSDX9rr5gQTEg0kCy RQbkQB7xI0nWbSzjV1u0NNWrtA8cOBdNbpGebY9Ndx3tkchbbbg1b7No9ztnAyKRpcv5JmV8BOfG5 NukQp33g==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kMzSW-0000Rd-48; Mon, 28 Sep 2020 20:09:16 +0000 Received: from mail-qk1-x749.google.com ([2607:f8b0:4864:20::749]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kMzSS-0000QQ-Qf for linux-arm-kernel@lists.infradead.org; Mon, 28 Sep 2020 20:09:14 +0000 Received: by mail-qk1-x749.google.com with SMTP id u23so1322518qku.17 for ; Mon, 28 Sep 2020 13:09:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:message-id:mime-version:subject:from:to:cc :content-transfer-encoding; bh=vieAWHVSIXR5Uks+957/3es6cqNP+7WeNdcirDn1mSE=; b=pt/131yIrD3GaoaXQwMD0fJ0m/4F6XdxQLOSMtBjeE3b43OLUTgEjqLTj8IMA/scZI 8U8Lm08Z0zo9CGRrqjh6v72AuUGlcZNesdkGSCcn/h5dqLKwSlO5NwotvTT+Yx0s4e0W d448WFBlVTaX9xs+r/ADHJc65nj/59qLGDlbXjyvWcJbwCH48/4KgEV344aRBGT+D23S rroUCrCraa6l55coSWSGkphqClP/4hbDsfkhVuVODYo+xU9QMpqyWZGs81bsivZ1Xnqs 0WndvlnRoX5qIWJMDy1HkgSgiDv0GLdK69Ct26zFYhXfpf5OgqX2CjZO0vx8VdL97Y1x LrEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:message-id:mime-version:subject:from :to:cc:content-transfer-encoding; bh=vieAWHVSIXR5Uks+957/3es6cqNP+7WeNdcirDn1mSE=; b=rsZAcm64JoNPvu4XKqb6p94N2iL7bN5kV2NkSW6LCj7uOeCoQLpO89fjikE0gF/nla A1EtB+ZUEpjPMjN76f7d08e2CzzAZbxSdWV3tg/abexFhiegqX7YEmqXgllk5qn0mkEM NAjaguTMGYu+34lHg+RMm4/dVDdr4BVWKyi21HI0Zsa3QDGG1NOIY5Rzw0h9tKPbU0Cl Xm839v6rcPtBeAOsEzq+sBJYHKz6IH2p63k5XFFHvwL9ZEKc7L7muuH51mDgjTLxCYCK EdTIX7Ayzsg5dFH0N0ZOfHWGs2oLjSZodVmskzTUBNWpVZGAwaI+qdSihbfTjkHkD05Y c/1Q== X-Gm-Message-State: AOAM531MbgHNJVWPq06ZRtm1QLLmU026PJ2vjdufBzP1iJDm3NbLHkk7 /VM3yObW6bbjtmyhdiZvMMWkTPY= X-Google-Smtp-Source: ABdhPJy6kcDYOjcWggXsRFDxE2WMxbB2eNI972ifdYFAJ6XEq/IkHuVlpjem6cyeUFjgb2OxJpiYs/s= X-Received: from pcc-desktop.svl.corp.google.com ([2620:15c:2ce:0:7220:84ff:fe09:385a]) (user=pcc job=sendgmr) by 2002:a0c:fe49:: with SMTP id u9mr1177570qvs.40.1601323748679; Mon, 28 Sep 2020 13:09:08 -0700 (PDT) Date: Mon, 28 Sep 2020 13:08:56 -0700 Message-Id: <20200928200856.1897023-1-pcc@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.28.0.681.g6f77f65b4e-goog Subject: [PATCH] Revert "video: fbdev: amba-clcd: Retire elder CLCD driver" From: Peter Collingbourne To: Linus Walleij , Eric Anholt X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200928_160912_900790_9C7E71C9 X-CRM114-Status: GOOD ( 30.25 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Collingbourne , Kevin Brodsky , Maarten Lankhorst , Russell King , Maxime Ripard , John Stultz , ML dri-devel , Sean Paul , Linux ARM 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 QWxzbyByZXZlcnQgdGhlIGZvbGxvdy11cCBjaGFuZ2UgImRybTogcGwxMTE6IEFic29yYiB0aGUg ZXh0ZXJuYWwKcmVnaXN0ZXIgaGVhZGVyIi4KClRoaXMgcmV2ZXJ0cyBjb21taXRzIDdlNGU1ODlk Yjc2YTNjZjRjMWY1MzRlYjVhMDljYzY0MjI3NjZiOTMKYW5kIDBmYjgxMjU2MzVlOGViNTQ4M2Zi MDk1Zjk4ZGNmMDY1MTIwNmE3YjguCgpUaGUgZmJkZXYgZHJpdmVyIGlzIHVzZWQgYnkgQW5kcm9p ZCdzIEZWUCBjb25maWd1cmF0aW9uLiBVc2luZyB0aGUKRFJNIGRyaXZlciB0b2dldGhlciB3aXRo IERSTSdzIGZiZGV2IGVtdWxhdGlvbiByZXN1bHRzIGluIGEgZmFpbHVyZQp0byBib290IEFuZHJv aWQuIFRoZSByb290IGNhdXNlIGlzIHRoYXQgQW5kcm9pZCdzIGdlbmVyaWMgZmJkZXYKdXNlcnNw YWNlIGRyaXZlciByZWxpZXMgb24gdGhlIGFiaWxpdHkgdG8gc2V0IHRoZSBwaXhlbCBmb3JtYXQg dmlhCkZCSU9QVVRfVlNDUkVFTklORk8sIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZmJkZXYg ZW11bGF0aW9uLgoKVGhlcmUgaGF2ZSBiZWVuIG90aGVyIGxlc3MgY3JpdGljYWwgYmVoYXZpb3Jh bCBkaWZmZXJlbmNlcyBpZGVudGlmaWVkCmJldHdlZW4gdGhlIGZiZGV2IGRyaXZlciBhbmQgdGhl IERSTSBkcml2ZXIgd2l0aCBmYmRldiBlbXVsYXRpb24uIFRoZQpEUk0gZHJpdmVyIGV4cG9zZXMg ZGlmZmVyZW50IHZhbHVlcyBmb3IgdGhlIHBhbmVsJ3Mgd2lkdGgsIGhlaWdodCBhbmQKcmVmcmVz aCByYXRlLCBhbmQgdGhlIERSTSBkcml2ZXIgZmFpbHMgYSBGQklPUFVUX1ZTQ1JFRU5JTkZPIHN5 c2NhbGwKd2l0aCB5cmVzX3ZpcnR1YWwgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHN1cHBvcnRl ZCB2YWx1ZSBpbnN0ZWFkCm9mIGxldHRpbmcgdGhlIHN5c2NhbGwgc3VjY2VlZCBhbmQgc2V0dGlu ZyB5cmVzX3ZpcnR1YWwgYmFzZWQgb24geXJlcy4KClNpZ25lZC1vZmYtYnk6IFBldGVyIENvbGxp bmdib3VybmUgPHBjY0Bnb29nbGUuY29tPgotLS0KVmlldyB0aGlzIGNoYW5nZSBpbiBHZXJyaXQ6 IGh0dHBzOi8vbGludXgtcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20vcS9JMmQ3ZTU5YjBlNjkzZDlm ZWMyMDZkNDBkZjE5MGM1YWEwMjg0NGI1NgoKIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgNSArCiBkcml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwxMTFfZGVidWdmcy5j ICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rpc3BsYXkuYyAgIHwgICAx ICsKIGRyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV9kcm0uaCAgICAgICB8ICA3MyAtLQogZHJp dmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rydi5jICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1 L2RybS9wbDExMS9wbDExMV92ZXJzYXRpbGUuYyB8ICAgMSArCiBkcml2ZXJzL3ZpZGVvL2ZiZGV2 L0tjb25maWcgICAgICAgICAgICAgfCAgMjAgKwogZHJpdmVycy92aWRlby9mYmRldi9NYWtlZmls ZSAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvdmlkZW8vZmJkZXYvYW1iYS1jbGNkLmMgICAg ICAgICB8IDk4NiArKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvYW1iYS9j bGNkLXJlZ3MuaCAgICAgICAgICB8ICA4NyArKysKIGluY2x1ZGUvbGludXgvYW1iYS9jbGNkLmgg ICAgICAgICAgICAgICB8IDI5MCArKysrKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMzkzIGluc2Vy dGlvbnMoKyksIDczIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdmlk ZW8vZmJkZXYvYW1iYS1jbGNkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L2Ft YmEvY2xjZC1yZWdzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L2FtYmEvY2xj ZC5oCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAxOTBjN2Zh MmVhMDEuLjY3MWMxZmE3OWU2NCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRB SU5FUlMKQEAgLTE0NjAsNiArMTQ2MCwxMSBAQCBTOglPZGQgRml4ZXMKIEY6CWRyaXZlcnMvYW1i YS8KIEY6CWluY2x1ZGUvbGludXgvYW1iYS9idXMuaAogCitBUk0gUFJJTUVDRUxMIENMQ0QgUEwx MTAgRFJJVkVSCitNOglSdXNzZWxsIEtpbmcgPGxpbnV4QGFybWxpbnV4Lm9yZy51az4KK1M6CU9k ZCBGaXhlcworRjoJZHJpdmVycy92aWRlby9mYmRldi9hbWJhLWNsY2QuKgorCiBBUk0gUFJJTUVD RUxMIEtNSSBQTDA1MCBEUklWRVIKIE06CVJ1c3NlbGwgS2luZyA8bGludXhAYXJtbGludXgub3Jn LnVrPgogUzoJT2RkIEZpeGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwx MTFfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2RlYnVnZnMuYwppbmRl eCAzMTdmNjhhYmYxOGIuLjI2Y2E4Y2RmM2U2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L3BsMTExL3BsMTExX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwxMTFf ZGVidWdmcy5jCkBAIC0zLDYgKzMsNyBAQAogICogIENvcHlyaWdodCDCqSAyMDE3IEJyb2FkY29t CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2FtYmEvY2xjZC1yZWdzLmg+CiAjaW5jbHVkZSA8bGlu dXgvc2VxX2ZpbGUuaD4KIAogI2luY2x1ZGUgPGRybS9kcm1fZGVidWdmcy5oPgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9wbDExMS9wbDExMV9kaXNwbGF5LmMKaW5kZXggYjNlODY5N2NhZmNmLi43MDNkZGM4MDNjNTUg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV9kaXNwbGF5LmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rpc3BsYXkuYwpAQCAtOSw2ICs5LDcgQEAKICAq IENvcHlyaWdodCAoQykgMjAxMSBUZXhhcyBJbnN0cnVtZW50cwogICovCiAKKyNpbmNsdWRlIDxs aW51eC9hbWJhL2NsY2QtcmVncy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUg PGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2RybS5oIGIvZHJpdmVycy9ncHUvZHJtL3BsMTEx L3BsMTExX2RybS5oCmluZGV4IDJhNDZiNWJkODU3Ni4uYmEzOTliY2I3OTJmIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwxMTFfZHJtLmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L3BsMTExL3BsMTExX2RybS5oCkBAIC0yMyw3OSArMjMsNiBAQAogI2luY2x1ZGUgPGRybS9kcm1f cGFuZWwuaD4KICNpbmNsdWRlIDxkcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmg+CiAKLS8qCi0g KiBDTENEIENvbnRyb2xsZXIgSW50ZXJuYWwgUmVnaXN0ZXIgYWRkcmVzc2VzCi0gKi8KLSNkZWZp bmUgQ0xDRF9USU0wCQkweDAwMDAwMDAwCi0jZGVmaW5lIENMQ0RfVElNMQkJMHgwMDAwMDAwNAot I2RlZmluZSBDTENEX1RJTTIJCTB4MDAwMDAwMDgKLSNkZWZpbmUgQ0xDRF9USU0zCQkweDAwMDAw MDBjCi0jZGVmaW5lIENMQ0RfVUJBUwkJMHgwMDAwMDAxMAotI2RlZmluZSBDTENEX0xCQVMJCTB4 MDAwMDAwMTQKLQotI2RlZmluZSBDTENEX1BMMTEwX0lFTkIJCTB4MDAwMDAwMTgKLSNkZWZpbmUg Q0xDRF9QTDExMF9DTlRMCQkweDAwMDAwMDFjCi0jZGVmaW5lIENMQ0RfUEwxMTBfU1RBVAkJMHgw MDAwMDAyMAotI2RlZmluZSBDTENEX1BMMTEwX0lOVFIJCTB4MDAwMDAwMjQKLSNkZWZpbmUgQ0xD RF9QTDExMF9VQ1VSCQkweDAwMDAwMDI4Ci0jZGVmaW5lIENMQ0RfUEwxMTBfTENVUgkJMHgwMDAw MDAyQwotCi0jZGVmaW5lIENMQ0RfUEwxMTFfQ05UTAkJMHgwMDAwMDAxOAotI2RlZmluZSBDTENE X1BMMTExX0lFTkIJCTB4MDAwMDAwMWMKLSNkZWZpbmUgQ0xDRF9QTDExMV9SSVMJCTB4MDAwMDAw MjAKLSNkZWZpbmUgQ0xDRF9QTDExMV9NSVMJCTB4MDAwMDAwMjQKLSNkZWZpbmUgQ0xDRF9QTDEx MV9JQ1IJCTB4MDAwMDAwMjgKLSNkZWZpbmUgQ0xDRF9QTDExMV9VQ1VSCQkweDAwMDAwMDJjCi0j ZGVmaW5lIENMQ0RfUEwxMTFfTENVUgkJMHgwMDAwMDAzMAotCi0jZGVmaW5lIENMQ0RfUEFMTAkJ MHgwMDAwMDIwMAotI2RlZmluZSBDTENEX1BBTEVUVEUJCTB4MDAwMDAyMDAKLQotI2RlZmluZSBU SU0yX1BDRF9MT19NQVNLCUdFTk1BU0soNCwgMCkKLSNkZWZpbmUgVElNMl9QQ0RfTE9fQklUUwk1 Ci0jZGVmaW5lIFRJTTJfQ0xLU0VMCQkoMSA8PCA1KQotI2RlZmluZSBUSU0yX0FDQl9NQVNLCQlH RU5NQVNLKDEwLCA2KQotI2RlZmluZSBUSU0yX0lWUwkJKDEgPDwgMTEpCi0jZGVmaW5lIFRJTTJf SUhTCQkoMSA8PCAxMikKLSNkZWZpbmUgVElNMl9JUEMJCSgxIDw8IDEzKQotI2RlZmluZSBUSU0y X0lPRQkJKDEgPDwgMTQpCi0jZGVmaW5lIFRJTTJfQkNECQkoMSA8PCAyNikKLSNkZWZpbmUgVElN Ml9QQ0RfSElfTUFTSwlHRU5NQVNLKDMxLCAyNykKLSNkZWZpbmUgVElNMl9QQ0RfSElfQklUUwk1 Ci0jZGVmaW5lIFRJTTJfUENEX0hJX1NISUZUCTI3Ci0KLSNkZWZpbmUgQ05UTF9MQ0RFTgkJKDEg PDwgMCkKLSNkZWZpbmUgQ05UTF9MQ0RCUFAxCQkoMCA8PCAxKQotI2RlZmluZSBDTlRMX0xDREJQ UDIJCSgxIDw8IDEpCi0jZGVmaW5lIENOVExfTENEQlBQNAkJKDIgPDwgMSkKLSNkZWZpbmUgQ05U TF9MQ0RCUFA4CQkoMyA8PCAxKQotI2RlZmluZSBDTlRMX0xDREJQUDE2CQkoNCA8PCAxKQotI2Rl ZmluZSBDTlRMX0xDREJQUDE2XzU2NQkoNiA8PCAxKQotI2RlZmluZSBDTlRMX0xDREJQUDE2XzQ0 NAkoNyA8PCAxKQotI2RlZmluZSBDTlRMX0xDREJQUDI0CQkoNSA8PCAxKQotI2RlZmluZSBDTlRM X0xDREJXCQkoMSA8PCA0KQotI2RlZmluZSBDTlRMX0xDRFRGVAkJKDEgPDwgNSkKLSNkZWZpbmUg Q05UTF9MQ0RNT05POAkJKDEgPDwgNikKLSNkZWZpbmUgQ05UTF9MQ0REVUFMCQkoMSA8PCA3KQot I2RlZmluZSBDTlRMX0JHUgkJKDEgPDwgOCkKLSNkZWZpbmUgQ05UTF9CRUJPCQkoMSA8PCA5KQot I2RlZmluZSBDTlRMX0JFUE8JCSgxIDw8IDEwKQotI2RlZmluZSBDTlRMX0xDRFBXUgkJKDEgPDwg MTEpCi0jZGVmaW5lIENOVExfTENEVkNPTVAoeCkJKCh4KSA8PCAxMikKLSNkZWZpbmUgQ05UTF9M RE1BRklGT1RJTUUJKDEgPDwgMTUpCi0jZGVmaW5lIENOVExfV0FURVJNQVJLCQkoMSA8PCAxNikK LQotLyogU1QgTWljcm9lbGVjdHJvbmljcyB2YXJpYW50IGJpdHMgKi8KLSNkZWZpbmUgQ05UTF9T VF8xWEJQUF80NDQJMHgwCi0jZGVmaW5lIENOVExfU1RfMVhCUFBfNTU1MQkoMSA8PCAxNykKLSNk ZWZpbmUgQ05UTF9TVF8xWEJQUF81NjUJKDEgPDwgMTgpCi0jZGVmaW5lIENOVExfU1RfQ0RXSURf MTIJMHgwCi0jZGVmaW5lIENOVExfU1RfQ0RXSURfMTYJKDEgPDwgMTkpCi0jZGVmaW5lIENOVExf U1RfQ0RXSURfMTgJKDEgPDwgMjApCi0jZGVmaW5lIENOVExfU1RfQ0RXSURfMjQJKCgxIDw8IDE5 KSB8ICgxIDw8IDIwKSkKLSNkZWZpbmUgQ05UTF9TVF9DRUFFTgkJKDEgPDwgMjEpCi0jZGVmaW5l IENOVExfU1RfTENEQlBQMjRfUEFDS0VECSg2IDw8IDEpCi0KICNkZWZpbmUgQ0xDRF9JUlFfTkVY VEJBU0VfVVBEQVRFIEJJVCgyKQogCiBzdHJ1Y3QgZHJtX21pbm9yOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3BsMTExL3Bs MTExX2Rydi5jCmluZGV4IDk2ZTU4ZmRhNzVkOC4uZGEwYzM5ZGFlODc0IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwxMTFfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Bs MTExL3BsMTExX2Rydi5jCkBAIC00Nyw2ICs0Nyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4 L2FtYmEvYnVzLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9jbGNkLXJlZ3MuaD4KICNpbmNsdWRl IDxsaW51eC9kbWEtYnVmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8 bGludXgvb2YuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV92ZXJz YXRpbGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV92ZXJzYXRpbGUuYwppbmRleCBi ZGQ4ODNmNGYwZGEuLjExMjcwODJlOWE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Bs MTExL3BsMTExX3ZlcnNhdGlsZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV92 ZXJzYXRpbGUuYwpAQCAtOSw2ICs5LDcgQEAKICAqIE1ham9yIGNvbnRyaWJ1dGlvbnMgYW5kIGRp c2NvdmVyaWVzIGJ5IFJ1c3NlbGwgS2luZy4KICAqLwogCisjaW5jbHVkZSA8bGludXgvYW1iYS9j bGNkLXJlZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9k ZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CmRpZmYgLS1naXQgYS9kcml2 ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWcKaW5k ZXggYjJjOWRkNGYwY2I1Li40MDJlODU0NTBiYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8v ZmJkZXYvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWcKQEAgLTI3Miw2 ICsyNzIsMjYgQEAgY29uZmlnIEZCX1BNMl9GSUZPX0RJU0NPTk5FQ1QKIAloZWxwCiAJICBTdXBw b3J0IHRoZSBQZXJtZWRpYTIgRklGTyBkaXNjb25uZWN0IGZlYXR1cmUuCiAKK2NvbmZpZyBGQl9B Uk1DTENECisJdHJpc3RhdGUgIkFSTSBQcmltZUNlbGwgUEwxMTAgc3VwcG9ydCIKKwlkZXBlbmRz IG9uIEFSTSB8fCBBUk02NCB8fCBDT01QSUxFX1RFU1QKKwlkZXBlbmRzIG9uIEZCICYmIEFSTV9B TUJBICYmIEhBU19JT01FTQorCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZC X0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwlzZWxlY3QgRkJfTU9ERV9IRUxQ RVJTIGlmIE9GCisJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTIGlmIE9GCisJc2VsZWN0IEJBQ0tM SUdIVF9DTEFTU19ERVZJQ0UgaWYgT0YKKwloZWxwCisJICBUaGlzIGZyYW1lYnVmZmVyIGRldmlj ZSBkcml2ZXIgaXMgZm9yIHRoZSBBUk0gUHJpbWVDZWxsIFBMMTEwCisJICBDb2xvdXIgTENEIGNv bnRyb2xsZXIuICBBUk0gUHJpbWVDZWxscyBwcm92aWRlIHRoZSBidWlsZGluZworCSAgYmxvY2tz IGZvciBTeXN0ZW0gb24gYSBDaGlwIGRldmljZXMuCisKKwkgIElmIHlvdSB3YW50IHRvIGNvbXBp bGUgdGhpcyBhcyBhIG1vZHVsZSAoPWNvZGUgd2hpY2ggY2FuIGJlCisJICBpbnNlcnRlZCBpbnRv IGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsKSwgc2F5IE0KKwkgIGhlcmUgYW5k IHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy5yc3Q+LiAgVGhlIG1vZHVs ZQorCSAgd2lsbCBiZSBjYWxsZWQgYW1iYS1jbGNkLgorCiBjb25maWcgRkJfQUNPUk4KIAlib29s ICJBY29ybiBWSURDIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBBUk0gJiYgQVJD SF9BQ09STgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9NYWtlZmlsZSBiL2RyaXZl cnMvdmlkZW8vZmJkZXYvTWFrZWZpbGUKaW5kZXggY2FkNGZiNjQ0NDJhLi5hMDcwNWI5OWU2NDMg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92 aWRlby9mYmRldi9NYWtlZmlsZQpAQCAtNzUsNiArNzUsNyBAQCBvYmotJChDT05GSUdfRkJfSElU KSAgICAgICAgICAgICAgKz0gaGl0ZmIubwogb2JqLSQoQ09ORklHX0ZCX0FUTUVMKQkJICArPSBh dG1lbF9sY2RmYi5vCiBvYmotJChDT05GSUdfRkJfUFZSMikgICAgICAgICAgICAgKz0gcHZyMmZi Lm8KIG9iai0kKENPTkZJR19GQl9WT09ET08xKSAgICAgICAgICArPSBzc3RmYi5vCitvYmotJChD T05GSUdfRkJfQVJNQ0xDRCkJICArPSBhbWJhLWNsY2Qubwogb2JqLSQoQ09ORklHX0ZCX0dPTERG SVNIKSAgICAgICAgICs9IGdvbGRmaXNoZmIubwogb2JqLSQoQ09ORklHX0ZCXzY4MzI4KSAgICAg ICAgICAgICs9IDY4MzI4ZmIubwogb2JqLSQoQ09ORklHX0ZCX0dCRSkgICAgICAgICAgICAgICs9 IGdiZWZiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvYW1iYS1jbGNkLmMgYi9k cml2ZXJzL3ZpZGVvL2ZiZGV2L2FtYmEtY2xjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uYjc2ODJkZTQxMmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92 aWRlby9mYmRldi9hbWJhLWNsY2QuYwpAQCAtMCwwICsxLDk4NiBAQAorLyoKKyAqICBsaW51eC9k cml2ZXJzL3ZpZGVvL2FtYmEtY2xjZC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEFSTSBM aW1pdGVkLCBieSBEYXZpZCBBIFJ1c2xpbmcKKyAqIFVwZGF0ZWQgdG8gMi41LCBEZWVwIEJsdWUg U29sdXRpb25zIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMg YW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNl ZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUK KyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIEFSTSBQcmltZUNlbGwgUEwxMTAgQ29sb3Ig TENEIENvbnRyb2xsZXIKKyAqLworI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisjaW5jbHVk ZSA8bGludXgvYW1iYS9jbGNkLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5j bHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxs aW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGlu dXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2xp c3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgor I2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5o PgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNp bmNsdWRlIDx2aWRlby9kaXNwbGF5X3RpbWluZy5oPgorI2luY2x1ZGUgPHZpZGVvL29mX2Rpc3Bs YXlfdGltaW5nLmg+CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+CisKKyNkZWZpbmUgdG9f Y2xjZChpbmZvKQljb250YWluZXJfb2YoaW5mbywgc3RydWN0IGNsY2RfZmIsIGZiKQorCisvKiBU aGlzIGlzIGxpbWl0ZWQgdG8gMTYgY2hhcmFjdGVycyB3aGVuIGRpc3BsYXllZCBieSBYIHN0YXJ0 dXAgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjbGNkX25hbWUgPSAiQ0xDRCBGQiI7CisKKy8qCisg KiBVbmZvcnR1bmF0ZWx5LCB0aGUgZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25zIG1heSBiZSBjYWxs ZWQgZWl0aGVyIGZyb20KKyAqIHByb2Nlc3Mgb3IgSVJRIGNvbnRleHQsIGFuZCB3ZSBfbmVlZF8g dG8gZGVsYXkuICBUaGlzIGlzIF9ub3RfIGdvb2QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBj bGNkZmJfc2xlZXAodW5zaWduZWQgaW50IG1zKQoreworCWlmIChpbl9hdG9taWMoKSkgeworCQlt ZGVsYXkobXMpOworCX0gZWxzZSB7CisJCW1zbGVlcChtcyk7CisJfQorfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgY2xjZGZiX3NldF9zdGFydChzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJdW5zaWdu ZWQgbG9uZyB1c3RhcnQgPSBmYi0+ZmIuZml4LnNtZW1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBs c3RhcnQ7CisKKwl1c3RhcnQgKz0gZmItPmZiLnZhci55b2Zmc2V0ICogZmItPmZiLmZpeC5saW5l X2xlbmd0aDsKKwlsc3RhcnQgPSB1c3RhcnQgKyBmYi0+ZmIudmFyLnlyZXMgKiBmYi0+ZmIuZml4 LmxpbmVfbGVuZ3RoIC8gMjsKKworCXdyaXRlbCh1c3RhcnQsIGZiLT5yZWdzICsgQ0xDRF9VQkFT KTsKKwl3cml0ZWwobHN0YXJ0LCBmYi0+cmVncyArIENMQ0RfTEJBUyk7Cit9CisKK3N0YXRpYyB2 b2lkIGNsY2RmYl9kaXNhYmxlKHN0cnVjdCBjbGNkX2ZiICpmYikKK3sKKwl1MzIgdmFsOworCisJ aWYgKGZiLT5ib2FyZC0+ZGlzYWJsZSkKKwkJZmItPmJvYXJkLT5kaXNhYmxlKGZiKTsKKworCWlm IChmYi0+cGFuZWwtPmJhY2tsaWdodCkgeworCQlmYi0+cGFuZWwtPmJhY2tsaWdodC0+cHJvcHMu cG93ZXIgPSBGQl9CTEFOS19QT1dFUkRPV047CisJCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGZi LT5wYW5lbC0+YmFja2xpZ2h0KTsKKwl9CisKKwl2YWwgPSByZWFkbChmYi0+cmVncyArIGZiLT5v ZmZfY250bCk7CisJaWYgKHZhbCAmIENOVExfTENEUFdSKSB7CisJCXZhbCAmPSB+Q05UTF9MQ0RQ V1I7CisJCXdyaXRlbCh2YWwsIGZiLT5yZWdzICsgZmItPm9mZl9jbnRsKTsKKworCQljbGNkZmJf c2xlZXAoMjApOworCX0KKwlpZiAodmFsICYgQ05UTF9MQ0RFTikgeworCQl2YWwgJj0gfkNOVExf TENERU47CisJCXdyaXRlbCh2YWwsIGZiLT5yZWdzICsgZmItPm9mZl9jbnRsKTsKKwl9CisKKwkv KgorCSAqIERpc2FibGUgQ0xDRCBjbG9jayBzb3VyY2UuCisJICovCisJaWYgKGZiLT5jbGtfZW5h YmxlZCkgeworCQlmYi0+Y2xrX2VuYWJsZWQgPSBmYWxzZTsKKwkJY2xrX2Rpc2FibGUoZmItPmNs ayk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjbGNkZmJfZW5hYmxlKHN0cnVjdCBjbGNkX2ZiICpm YiwgdTMyIGNudGwpCit7CisJLyoKKwkgKiBFbmFibGUgdGhlIENMQ0QgY2xvY2sgc291cmNlLgor CSAqLworCWlmICghZmItPmNsa19lbmFibGVkKSB7CisJCWZiLT5jbGtfZW5hYmxlZCA9IHRydWU7 CisJCWNsa19lbmFibGUoZmItPmNsayk7CisJfQorCisJLyoKKwkgKiBCcmluZyB1cCBieSBmaXJz dCBlbmFibGluZy4uCisJICovCisJY250bCB8PSBDTlRMX0xDREVOOworCXdyaXRlbChjbnRsLCBm Yi0+cmVncyArIGZiLT5vZmZfY250bCk7CisKKwljbGNkZmJfc2xlZXAoMjApOworCisJLyoKKwkg KiBhbmQgbm93IGFwcGx5IHBvd2VyLgorCSAqLworCWNudGwgfD0gQ05UTF9MQ0RQV1I7CisJd3Jp dGVsKGNudGwsIGZiLT5yZWdzICsgZmItPm9mZl9jbnRsKTsKKworCS8qCisJICogVHVybiBvbiBi YWNrbGlnaHQKKwkgKi8KKwlpZiAoZmItPnBhbmVsLT5iYWNrbGlnaHQpIHsKKwkJZmItPnBhbmVs LT5iYWNrbGlnaHQtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwkJYmFja2xpZ2h0 X3VwZGF0ZV9zdGF0dXMoZmItPnBhbmVsLT5iYWNrbGlnaHQpOworCX0KKworCS8qCisJICogZmlu YWxseSwgZW5hYmxlIHRoZSBpbnRlcmZhY2UuCisJICovCisJaWYgKGZiLT5ib2FyZC0+ZW5hYmxl KQorCQlmYi0+Ym9hcmQtPmVuYWJsZShmYik7Cit9CisKK3N0YXRpYyBpbnQKK2NsY2RmYl9zZXRf Yml0ZmllbGRzKHN0cnVjdCBjbGNkX2ZiICpmYiwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2 YXIpCit7CisJdTMyIGNhcHM7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZmItPnBhbmVsLT5jYXBz ICYmIGZiLT5ib2FyZC0+Y2FwcykKKwkJY2FwcyA9IGZiLT5wYW5lbC0+Y2FwcyAmIGZiLT5ib2Fy ZC0+Y2FwczsKKwllbHNlIHsKKwkJLyogT2xkIHdheSBvZiBzcGVjaWZ5aW5nIHdoYXQgY2FuIGJl IHVzZWQgKi8KKwkJY2FwcyA9IGZiLT5wYW5lbC0+Y250bCAmIENOVExfQkdSID8KKwkJCUNMQ0Rf Q0FQX0JHUiA6IENMQ0RfQ0FQX1JHQjsKKwkJLyogQnV0IG1hc2sgb3V0IDQ0NCBtb2RlcyBhcyB0 aGV5IHdlcmVuJ3Qgc3VwcG9ydGVkICovCisJCWNhcHMgJj0gfkNMQ0RfQ0FQXzQ0NDsKKwl9CisK KwkvKiBPbmx5IFRGVCBwYW5lbHMgY2FuIGRvIFJHQjg4OC9CR1I4ODggKi8KKwlpZiAoIShmYi0+ cGFuZWwtPmNudGwgJiBDTlRMX0xDRFRGVCkpCisJCWNhcHMgJj0gfkNMQ0RfQ0FQXzg4ODsKKwor CW1lbXNldCgmdmFyLT50cmFuc3AsIDAsIHNpemVvZih2YXItPnRyYW5zcCkpOworCisJdmFyLT5y ZWQubXNiX3JpZ2h0ID0gMDsKKwl2YXItPmdyZWVuLm1zYl9yaWdodCA9IDA7CisJdmFyLT5ibHVl Lm1zYl9yaWdodCA9IDA7CisKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNl IDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwljYXNlIDg6CisJCS8qIElmIHdlIGNhbid0IGRvIDU1 NTEsIHJlamVjdCAqLworCQljYXBzICY9IENMQ0RfQ0FQXzU1NTE7CisJCWlmICghY2Fwcykgewor CQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJdmFyLT5yZWQubGVuZ3RoCQk9 IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCXZhci0+cmVkLm9mZnNldAkJPSAwOworCQl2YXItPmdy ZWVuLmxlbmd0aAk9IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCXZhci0+Z3JlZW4ub2Zmc2V0CT0g MDsKKwkJdmFyLT5ibHVlLmxlbmd0aAk9IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCXZhci0+Ymx1 ZS5vZmZzZXQJPSAwOworCQlicmVhazsKKworCWNhc2UgMTY6CisJCS8qIElmIHdlIGNhbid0IGRv IDQ0NCwgNTU1MSBvciA1NjUsIHJlamVjdCAqLworCQlpZiAoIShjYXBzICYgKENMQ0RfQ0FQXzQ0 NCB8IENMQ0RfQ0FQXzU1NTEgfCBDTENEX0NBUF81NjUpKSkgeworCQkJcmV0ID0gLUVJTlZBTDsK KwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogR3JlZW4gbGVuZ3RoIGNhbiBiZSA0LCA1IG9y IDYgZGVwZW5kaW5nIHdoZXRoZXIKKwkJICogd2UncmUgb3BlcmF0aW5nIGluIDQ0NCwgNTU1MSBv ciA1NjUgbW9kZS4KKwkJICovCisJCWlmICh2YXItPmdyZWVuLmxlbmd0aCA9PSA0ICYmIGNhcHMg JiBDTENEX0NBUF80NDQpCisJCQljYXBzICY9IENMQ0RfQ0FQXzQ0NDsKKwkJaWYgKHZhci0+Z3Jl ZW4ubGVuZ3RoID09IDUgJiYgY2FwcyAmIENMQ0RfQ0FQXzU1NTEpCisJCQljYXBzICY9IENMQ0Rf Q0FQXzU1NTE7CisJCWVsc2UgaWYgKHZhci0+Z3JlZW4ubGVuZ3RoID09IDYgJiYgY2FwcyAmIENM Q0RfQ0FQXzU2NSkKKwkJCWNhcHMgJj0gQ0xDRF9DQVBfNTY1OworCQllbHNlIHsKKwkJCS8qCisJ CQkgKiBQTDExMCBvZmZpY2lhbGx5IG9ubHkgc3VwcG9ydHMgUkdCNTU1LAorCQkJICogYnV0IG1h eSBiZSB3aXJlZCB1cCB0byBhbGxvdyBSR0I1NjUuCisJCQkgKi8KKwkJCWlmIChjYXBzICYgQ0xD RF9DQVBfNTY1KSB7CisJCQkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OworCQkJCWNhcHMgJj0gQ0xD RF9DQVBfNTY1OworCQkJfSBlbHNlIGlmIChjYXBzICYgQ0xDRF9DQVBfNTU1MSkgeworCQkJCXZh ci0+Z3JlZW4ubGVuZ3RoID0gNTsKKwkJCQljYXBzICY9IENMQ0RfQ0FQXzU1NTE7CisJCQl9IGVs c2UgeworCQkJCXZhci0+Z3JlZW4ubGVuZ3RoID0gNDsKKwkJCQljYXBzICY9IENMQ0RfQ0FQXzQ0 NDsKKwkJCX0KKwkJfQorCisJCWlmICh2YXItPmdyZWVuLmxlbmd0aCA+PSA1KSB7CisJCQl2YXIt PnJlZC5sZW5ndGggPSA1OworCQkJdmFyLT5ibHVlLmxlbmd0aCA9IDU7CisJCX0gZWxzZSB7CisJ CQl2YXItPnJlZC5sZW5ndGggPSA0OworCQkJdmFyLT5ibHVlLmxlbmd0aCA9IDQ7CisJCX0KKwkJ YnJlYWs7CisJY2FzZSAzMjoKKwkJLyogSWYgd2UgY2FuJ3QgZG8gODg4LCByZWplY3QgKi8KKwkJ Y2FwcyAmPSBDTENEX0NBUF84ODg7CisJCWlmICghY2FwcykgeworCQkJcmV0ID0gLUVJTlZBTDsK KwkJCWJyZWFrOworCQl9CisKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5ncmVlbi5s ZW5ndGggPSA4OworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiA+PSAxNmJwcCBkaXNw bGF5cyBoYXZlIHNlcGFyYXRlIGNvbG91ciBjb21wb25lbnQgYml0ZmllbGRzCisJICogZW5jb2Rl ZCBpbiB0aGUgcGl4ZWwgZGF0YS4gIENhbGN1bGF0ZSB0aGVpciBwb3NpdGlvbiBmcm9tCisJICog dGhlIGJpdGZpZWxkIGxlbmd0aCBkZWZpbmVkIGFib3ZlLgorCSAqLworCWlmIChyZXQgPT0gMCAm JiB2YXItPmJpdHNfcGVyX3BpeGVsID49IDE2KSB7CisJCWJvb2wgYmdyLCByZ2I7CisKKwkJYmdy ID0gY2FwcyAmIENMQ0RfQ0FQX0JHUiAmJiB2YXItPmJsdWUub2Zmc2V0ID09IDA7CisJCXJnYiA9 IGNhcHMgJiBDTENEX0NBUF9SR0IgJiYgdmFyLT5yZWQub2Zmc2V0ID09IDA7CisKKwkJaWYgKCFi Z3IgJiYgIXJnYikKKwkJCS8qCisJCQkgKiBUaGUgcmVxdWVzdGVkIGZvcm1hdCB3YXMgbm90IHBv c3NpYmxlLCB0cnkganVzdAorCQkJICogb3VyIGNhcGFiaWxpdGllcy4gIE9uZSBvZiBCR1Igb3Ig UkdCIG11c3QgYmUKKwkJCSAqIHN1cHBvcnRlZC4KKwkJCSAqLworCQkJYmdyID0gY2FwcyAmIENM Q0RfQ0FQX0JHUjsKKworCQlpZiAoYmdyKSB7CisJCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJ CXZhci0+Z3JlZW4ub2Zmc2V0ID0gdmFyLT5ibHVlLm9mZnNldCArIHZhci0+Ymx1ZS5sZW5ndGg7 CisJCQl2YXItPnJlZC5vZmZzZXQgPSB2YXItPmdyZWVuLm9mZnNldCArIHZhci0+Z3JlZW4ubGVu Z3RoOworCQl9IGVsc2UgeworCQkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKKwkJCXZhci0+Z3JlZW4u b2Zmc2V0ID0gdmFyLT5yZWQub2Zmc2V0ICsgdmFyLT5yZWQubGVuZ3RoOworCQkJdmFyLT5ibHVl Lm9mZnNldCA9IHZhci0+Z3JlZW4ub2Zmc2V0ICsgdmFyLT5ncmVlbi5sZW5ndGg7CisJCX0KKwl9 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNsY2RmYl9jaGVja192YXIoc3RydWN0 IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVj dCBjbGNkX2ZiICpmYiA9IHRvX2NsY2QoaW5mbyk7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlp ZiAoZmItPmJvYXJkLT5jaGVjaykKKwkJcmV0ID0gZmItPmJvYXJkLT5jaGVjayhmYiwgdmFyKTsK KworCWlmIChyZXQgPT0gMCAmJgorCSAgICB2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19w ZXJfcGl4ZWwgLyA4ICoKKwkgICAgdmFyLT55cmVzX3ZpcnR1YWwgPiBmYi0+ZmIuZml4LnNtZW1f bGVuKQorCQlyZXQgPSAtRUlOVkFMOworCisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBjbGNkZmJf c2V0X2JpdGZpZWxkcyhmYiwgdmFyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQg Y2xjZGZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNsY2RfZmIg KmZiID0gdG9fY2xjZChpbmZvKTsKKwlzdHJ1Y3QgY2xjZF9yZWdzIHJlZ3M7CisKKwlmYi0+ZmIu Zml4LmxpbmVfbGVuZ3RoID0gZmItPmZiLnZhci54cmVzX3ZpcnR1YWwgKgorCQkJCSBmYi0+ZmIu dmFyLmJpdHNfcGVyX3BpeGVsIC8gODsKKworCWlmIChmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVs IDw9IDgpCisJCWZiLT5mYi5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOworCWVs c2UKKwkJZmItPmZiLmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCisJZmItPmJv YXJkLT5kZWNvZGUoZmIsICZyZWdzKTsKKworCWNsY2RmYl9kaXNhYmxlKGZiKTsKKworCXdyaXRl bChyZWdzLnRpbTAsIGZiLT5yZWdzICsgQ0xDRF9USU0wKTsKKwl3cml0ZWwocmVncy50aW0xLCBm Yi0+cmVncyArIENMQ0RfVElNMSk7CisJd3JpdGVsKHJlZ3MudGltMiwgZmItPnJlZ3MgKyBDTENE X1RJTTIpOworCXdyaXRlbChyZWdzLnRpbTMsIGZiLT5yZWdzICsgQ0xDRF9USU0zKTsKKworCWNs Y2RmYl9zZXRfc3RhcnQoZmIpOworCisJY2xrX3NldF9yYXRlKGZiLT5jbGssICgxMDAwMDAwMDAw IC8gcmVncy5waXhjbG9jaykgKiAxMDAwKTsKKworCWZiLT5jbGNkX2NudGwgPSByZWdzLmNudGw7 CisKKwljbGNkZmJfZW5hYmxlKGZiLCByZWdzLmNudGwpOworCisjaWZkZWYgREVCVUcKKwlwcmlu dGsoS0VSTl9JTkZPCisJICAgICAgICJDTENEOiBSZWdpc3RlcnMgc2V0IHRvXG4iCisJICAgICAg ICIgICUwOHggJTA4eCAlMDh4ICUwOHhcbiIKKwkgICAgICAgIiAgJTA4eCAlMDh4ICUwOHggJTA4 eFxuIiwKKwkJcmVhZGwoZmItPnJlZ3MgKyBDTENEX1RJTTApLCByZWFkbChmYi0+cmVncyArIENM Q0RfVElNMSksCisJCXJlYWRsKGZiLT5yZWdzICsgQ0xDRF9USU0yKSwgcmVhZGwoZmItPnJlZ3Mg KyBDTENEX1RJTTMpLAorCQlyZWFkbChmYi0+cmVncyArIENMQ0RfVUJBUyksIHJlYWRsKGZiLT5y ZWdzICsgQ0xDRF9MQkFTKSwKKwkJcmVhZGwoZmItPnJlZ3MgKyBmYi0+b2ZmX2llbmIpLCByZWFk bChmYi0+cmVncyArIGZiLT5vZmZfY250bCkpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGlubGluZSB1MzIgY29udmVydF9iaXRmaWVsZChpbnQgdmFsLCBzdHJ1Y3QgZmJfYml0 ZmllbGQgKmJmKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gKDEgPDwgYmYtPmxlbmd0aCkgLSAx OworCisJcmV0dXJuICh2YWwgPj4gKDE2IC0gYmYtPmxlbmd0aCkgJiBtYXNrKSA8PCBiZi0+b2Zm c2V0OworfQorCisvKgorICogIFNldCBhIHNpbmdsZSBjb2xvciByZWdpc3Rlci4gVGhlIHZhbHVl cyBzdXBwbGllZCBoYXZlIGEgMTYgYml0CisgKiAgbWFnbml0dWRlLiAgUmV0dXJuICE9IDAgZm9y IGludmFsaWQgcmVnbm8uCisgKi8KK3N0YXRpYyBpbnQKK2NsY2RmYl9zZXRjb2xyZWcodW5zaWdu ZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLCB1bnNpZ25lZCBpbnQgZ3JlZW4sCisJCSB1 bnNpZ25lZCBpbnQgYmx1ZSwgdW5zaWduZWQgaW50IHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmlu Zm8pCit7CisJc3RydWN0IGNsY2RfZmIgKmZiID0gdG9fY2xjZChpbmZvKTsKKworCWlmIChyZWdu byA8IDE2KQorCQlmYi0+Y21hcFtyZWdub10gPSBjb252ZXJ0X2JpdGZpZWxkKHRyYW5zcCwgJmZi LT5mYi52YXIudHJhbnNwKSB8CisJCQkJICBjb252ZXJ0X2JpdGZpZWxkKGJsdWUsICZmYi0+ZmIu dmFyLmJsdWUpIHwKKwkJCQkgIGNvbnZlcnRfYml0ZmllbGQoZ3JlZW4sICZmYi0+ZmIudmFyLmdy ZWVuKSB8CisJCQkJICBjb252ZXJ0X2JpdGZpZWxkKHJlZCwgJmZiLT5mYi52YXIucmVkKTsKKwor CWlmIChmYi0+ZmIuZml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfUFNFVURPQ09MT1IgJiYgcmVnbm8g PCAyNTYpIHsKKwkJaW50IGh3X3JlZyA9IENMQ0RfUEFMRVRURSArICgocmVnbm8gKiAyKSAmIH4z KTsKKwkJdTMyIHZhbCwgbWFzaywgbmV3dmFsOworCisJCW5ld3ZhbCAgPSAocmVkID4+IDExKSAg JiAweDAwMWY7CisJCW5ld3ZhbCB8PSAoZ3JlZW4gPj4gNikgJiAweDAzZTA7CisJCW5ld3ZhbCB8 PSAoYmx1ZSA+PiAxKSAgJiAweDdjMDA7CisKKwkJLyoKKwkJICogMy4yLjExOiBpZiB3ZSdyZSBj b25maWd1cmVkIGZvciBiaWcgZW5kaWFuCisJCSAqIGJ5dGUgb3JkZXIsIHRoZSBwYWxldHRlIGVu dHJpZXMgYXJlIHN3YXBwZWQuCisJCSAqLworCQlpZiAoZmItPmNsY2RfY250bCAmIENOVExfQkVC TykKKwkJCXJlZ25vIF49IDE7CisKKwkJaWYgKHJlZ25vICYgMSkgeworCQkJbmV3dmFsIDw8PSAx NjsKKwkJCW1hc2sgPSAweDAwMDBmZmZmOworCQl9IGVsc2UgeworCQkJbWFzayA9IDB4ZmZmZjAw MDA7CisJCX0KKworCQl2YWwgPSByZWFkbChmYi0+cmVncyArIGh3X3JlZykgJiBtYXNrOworCQl3 cml0ZWwodmFsIHwgbmV3dmFsLCBmYi0+cmVncyArIGh3X3JlZyk7CisJfQorCisJcmV0dXJuIHJl Z25vID4gMjU1OworfQorCisvKgorICogIEJsYW5rIHRoZSBzY3JlZW4gaWYgYmxhbmtfbW9kZSAh PSAwLCBlbHNlIHVuYmxhbmsuIElmIGJsYW5rID09IE5VTEwKKyAqICB0aGVuIHRoZSBjYWxsZXIg YmxhbmtzIGJ5IHNldHRpbmcgdGhlIENMVVQgKENvbG9yIExvb2sgVXAgVGFibGUpIHRvIGFsbAor ICogIGJsYWNrLiBSZXR1cm4gMCBpZiBibGFua2luZyBzdWNjZWVkZWQsICE9IDAgaWYgdW4tL2Js YW5raW5nIGZhaWxlZCBkdWUKKyAqICB0byBlLmcuIGEgdmlkZW8gbW9kZSB3aGljaCBkb2Vzbid0 IHN1cHBvcnQgaXQuIEltcGxlbWVudHMgVkVTQSBzdXNwZW5kCisgKiAgYW5kIHBvd2VyZG93biBt b2RlcyBvbiBoYXJkd2FyZSB0aGF0IHN1cHBvcnRzIGRpc2FibGluZyBoc3luYy92c3luYzoKKyAq ICAgIGJsYW5rX21vZGUgPT0gMjogc3VzcGVuZCB2c3luYworICogICAgYmxhbmtfbW9kZSA9PSAz OiBzdXNwZW5kIGhzeW5jCisgKiAgICBibGFua19tb2RlID09IDQ6IHBvd2VyZG93bgorICovCitz dGF0aWMgaW50IGNsY2RmYl9ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmlu Zm8pCit7CisJc3RydWN0IGNsY2RfZmIgKmZiID0gdG9fY2xjZChpbmZvKTsKKworCWlmIChibGFu a19tb2RlICE9IDApIHsKKwkJY2xjZGZiX2Rpc2FibGUoZmIpOworCX0gZWxzZSB7CisJCWNsY2Rm Yl9lbmFibGUoZmIsIGZiLT5jbGNkX2NudGwpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBjbGNkZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJICAgICAgIHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBjbGNkX2ZiICpmYiA9IHRvX2NsY2QoaW5m byk7CisJdW5zaWduZWQgbG9uZyBsZW4sIG9mZiA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElG VDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWxlbiA9IGluZm8tPmZpeC5zbWVtX2xlbjsKKwor CWlmIChvZmYgPD0gbGVuICYmIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCA8PSBsZW4gLSBv ZmYgJiYKKwkgICAgZmItPmJvYXJkLT5tbWFwKQorCQlyZXQgPSBmYi0+Ym9hcmQtPm1tYXAoZmIs IHZtYSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZiX29wcyBj bGNkZmJfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyCT0g Y2xjZGZiX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3Bhcgk9IGNsY2RmYl9zZXRfcGFyLAorCS5mYl9z ZXRjb2xyZWcJPSBjbGNkZmJfc2V0Y29scmVnLAorCS5mYl9ibGFuawk9IGNsY2RmYl9ibGFuaywK KwkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCT0gY2ZiX2NvcHlh cmVhLAorCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAorCS5mYl9tbWFwCT0gY2xjZGZi X21tYXAsCit9OworCitzdGF0aWMgaW50IGNsY2RmYl9yZWdpc3RlcihzdHJ1Y3QgY2xjZF9mYiAq ZmIpCit7CisJaW50IHJldDsKKworCS8qCisJICogQVJNIFBMMTExIGFsd2F5cyBoYXMgSUVOQiBh dCAweDFjOyBpdCdzIG9ubHkgUEwxMTAKKwkgKiB3aGljaCBpcyByZXZlcnNlZCBvbiBzb21lIHBs YXRmb3Jtcy4KKwkgKi8KKwlpZiAoYW1iYV9tYW5mKGZiLT5kZXYpID09IDB4NDEgJiYgYW1iYV9w YXJ0KGZiLT5kZXYpID09IDB4MTExKSB7CisJCWZiLT5vZmZfaWVuYiA9IENMQ0RfUEwxMTFfSUVO QjsKKwkJZmItPm9mZl9jbnRsID0gQ0xDRF9QTDExMV9DTlRMOworCX0gZWxzZSB7CisJCWZiLT5v ZmZfaWVuYiA9IENMQ0RfUEwxMTBfSUVOQjsKKwkJZmItPm9mZl9jbnRsID0gQ0xDRF9QTDExMF9D TlRMOworCX0KKworCWZiLT5jbGsgPSBjbGtfZ2V0KCZmYi0+ZGV2LT5kZXYsIE5VTEwpOworCWlm IChJU19FUlIoZmItPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihmYi0+Y2xrKTsKKwkJZ290byBv dXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmUoZmItPmNsayk7CisJaWYgKHJldCkKKwkJZ290 byBmcmVlX2NsazsKKworCWZiLT5mYi5kZXZpY2UJCT0gJmZiLT5kZXYtPmRldjsKKworCWZiLT5m Yi5maXgubW1pb19zdGFydAk9IGZiLT5kZXYtPnJlcy5zdGFydDsKKwlmYi0+ZmIuZml4Lm1taW9f bGVuCT0gcmVzb3VyY2Vfc2l6ZSgmZmItPmRldi0+cmVzKTsKKworCWZiLT5yZWdzID0gaW9yZW1h cChmYi0+ZmIuZml4Lm1taW9fc3RhcnQsIGZiLT5mYi5maXgubW1pb19sZW4pOworCWlmICghZmIt PnJlZ3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDTENEOiB1bmFibGUgdG8gcmVtYXAgcmVnaXN0 ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBjbGtfdW5wcmVwOworCX0KKworCWZi LT5mYi5mYm9wcwkJPSAmY2xjZGZiX29wczsKKwlmYi0+ZmIuZmxhZ3MJCT0gRkJJTkZPX0ZMQUdf REVGQVVMVDsKKwlmYi0+ZmIucHNldWRvX3BhbGV0dGUJPSBmYi0+Y21hcDsKKworCXN0cm5jcHko ZmItPmZiLmZpeC5pZCwgY2xjZF9uYW1lLCBzaXplb2YoZmItPmZiLmZpeC5pZCkpOworCWZiLT5m Yi5maXgudHlwZQkJPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJZmItPmZiLmZpeC50eXBlX2F1 eAk9IDA7CisJZmItPmZiLmZpeC54cGFuc3RlcAk9IDA7CisJZmItPmZiLmZpeC55cGFuc3RlcAk9 IDA7CisJZmItPmZiLmZpeC55d3JhcHN0ZXAJPSAwOworCWZiLT5mYi5maXguYWNjZWwJPSBGQl9B Q0NFTF9OT05FOworCisJZmItPmZiLnZhci54cmVzCQk9IGZiLT5wYW5lbC0+bW9kZS54cmVzOwor CWZiLT5mYi52YXIueXJlcwkJPSBmYi0+cGFuZWwtPm1vZGUueXJlczsKKwlmYi0+ZmIudmFyLnhy ZXNfdmlydHVhbAk9IGZiLT5wYW5lbC0+bW9kZS54cmVzOworCWZiLT5mYi52YXIueXJlc192aXJ0 dWFsCT0gZmItPnBhbmVsLT5tb2RlLnlyZXM7CisJZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9 IGZiLT5wYW5lbC0+YnBwOworCWZiLT5mYi52YXIuZ3JheXNjYWxlCT0gZmItPnBhbmVsLT5ncmF5 c2NhbGU7CisJZmItPmZiLnZhci5waXhjbG9jawk9IGZiLT5wYW5lbC0+bW9kZS5waXhjbG9jazsK KwlmYi0+ZmIudmFyLmxlZnRfbWFyZ2luCT0gZmItPnBhbmVsLT5tb2RlLmxlZnRfbWFyZ2luOwor CWZiLT5mYi52YXIucmlnaHRfbWFyZ2luCT0gZmItPnBhbmVsLT5tb2RlLnJpZ2h0X21hcmdpbjsK KwlmYi0+ZmIudmFyLnVwcGVyX21hcmdpbgk9IGZiLT5wYW5lbC0+bW9kZS51cHBlcl9tYXJnaW47 CisJZmItPmZiLnZhci5sb3dlcl9tYXJnaW4JPSBmYi0+cGFuZWwtPm1vZGUubG93ZXJfbWFyZ2lu OworCWZiLT5mYi52YXIuaHN5bmNfbGVuCT0gZmItPnBhbmVsLT5tb2RlLmhzeW5jX2xlbjsKKwlm Yi0+ZmIudmFyLnZzeW5jX2xlbgk9IGZiLT5wYW5lbC0+bW9kZS52c3luY19sZW47CisJZmItPmZi LnZhci5zeW5jCQk9IGZiLT5wYW5lbC0+bW9kZS5zeW5jOworCWZiLT5mYi52YXIudm1vZGUJPSBm Yi0+cGFuZWwtPm1vZGUudm1vZGU7CisJZmItPmZiLnZhci5hY3RpdmF0ZQk9IEZCX0FDVElWQVRF X05PVzsKKwlmYi0+ZmIudmFyLm5vbnN0ZAk9IDA7CisJZmItPmZiLnZhci5oZWlnaHQJPSBmYi0+ cGFuZWwtPmhlaWdodDsKKwlmYi0+ZmIudmFyLndpZHRoCT0gZmItPnBhbmVsLT53aWR0aDsKKwlm Yi0+ZmIudmFyLmFjY2VsX2ZsYWdzCT0gMDsKKworCWZiLT5mYi5tb25zcGVjcy5oZm1pbgk9IDA7 CisJZmItPmZiLm1vbnNwZWNzLmhmbWF4ICAgPSAxMDAwMDA7CisJZmItPmZiLm1vbnNwZWNzLnZm bWluCT0gMDsKKwlmYi0+ZmIubW9uc3BlY3MudmZtYXgJPSA0MDA7CisJZmItPmZiLm1vbnNwZWNz LmRjbGttaW4gPSAxMDAwMDAwOworCWZiLT5mYi5tb25zcGVjcy5kY2xrbWF4CT0gMTAwMDAwMDAw OworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgYml0ZmllbGRzIGFyZSBzZXQgYXBwcm9w cmlhdGVseS4KKwkgKi8KKwljbGNkZmJfc2V0X2JpdGZpZWxkcyhmYiwgJmZiLT5mYi52YXIpOwor CisJLyoKKwkgKiBBbGxvY2F0ZSBjb2xvdXJtYXAuCisJICovCisJcmV0ID0gZmJfYWxsb2NfY21h cCgmZmItPmZiLmNtYXAsIDI1NiwgMCk7CisJaWYgKHJldCkKKwkJZ290byB1bm1hcDsKKworCS8q CisJICogRW5zdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLgorCSAqLworCXdyaXRlbCgwLCBm Yi0+cmVncyArIGZiLT5vZmZfaWVuYik7CisKKwlmYl9zZXRfdmFyKCZmYi0+ZmIsICZmYi0+ZmIu dmFyKTsKKworCWRldl9pbmZvKCZmYi0+ZGV2LT5kZXYsICIlcyBoYXJkd2FyZSwgJXMgZGlzcGxh eVxuIiwKKwkgICAgICAgICBmYi0+Ym9hcmQtPm5hbWUsIGZiLT5wYW5lbC0+bW9kZS5uYW1lKTsK KworCXJldCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYi0+ZmIpOworCWlmIChyZXQgPT0gMCkK KwkJZ290byBvdXQ7CisKKwlwcmludGsoS0VSTl9FUlIgIkNMQ0Q6IGNhbm5vdCByZWdpc3RlciBm cmFtZWJ1ZmZlciAoJWQpXG4iLCByZXQpOworCisJZmJfZGVhbGxvY19jbWFwKCZmYi0+ZmIuY21h cCk7CisgdW5tYXA6CisJaW91bm1hcChmYi0+cmVncyk7CisgY2xrX3VucHJlcDoKKwljbGtfdW5w cmVwYXJlKGZiLT5jbGspOworIGZyZWVfY2xrOgorCWNsa19wdXQoZmItPmNsayk7Cisgb3V0Ogor CXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBpbnQgY2xjZGZiX29m X2dldF9kcGlfcGFuZWxfbW9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCXN0cnVjdCBj bGNkX3BhbmVsICpjbGNkX3BhbmVsKQoreworCWludCBlcnI7CisJc3RydWN0IGRpc3BsYXlfdGlt aW5nIHRpbWluZzsKKwlzdHJ1Y3QgdmlkZW9tb2RlIHZpZGVvOworCisJZXJyID0gb2ZfZ2V0X2Rp c3BsYXlfdGltaW5nKG5vZGUsICJwYW5lbC10aW1pbmciLCAmdGltaW5nKTsKKwlpZiAoZXJyKSB7 CisJCXByX2VycigiJXBPRjogcHJvYmxlbXMgcGFyc2luZyBwYW5lbC10aW1pbmcgKCVkKVxuIiwg bm9kZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl2aWRlb21vZGVfZnJvbV90aW1pbmco JnRpbWluZywgJnZpZGVvKTsKKworCWVyciA9IGZiX3ZpZGVvbW9kZV9mcm9tX3ZpZGVvbW9kZSgm dmlkZW8sICZjbGNkX3BhbmVsLT5tb2RlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJ LyogU2V0IHVwIHNvbWUgaW52ZXJzaW9uIGZsYWdzICovCisJaWYgKHRpbWluZy5mbGFncyAmIERJ U1BMQVlfRkxBR1NfUElYREFUQV9ORUdFREdFKQorCQljbGNkX3BhbmVsLT50aW0yIHw9IFRJTTJf SVBDOworCWVsc2UgaWYgKCEodGltaW5nLmZsYWdzICYgRElTUExBWV9GTEFHU19QSVhEQVRBX1BP U0VER0UpKQorCQkvKgorCQkgKiBUbyBwcmVzZXJ2ZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwg dGhlIElQQyAoaW52ZXJ0ZWQKKwkJICogcGl4ZWwgY2xvY2spIGZsYWcgbmVlZHMgdG8gYmUgc2V0 IG9uIGFueSBkaXNwbGF5IHRoYXQKKwkJICogZG9lc24ndCBleHBsaWNpdGx5IHNwZWNpZnkgdGhh dCB0aGUgcGl4ZWwgY2xvY2sgaXMKKwkJICogYWN0aXZlIG9uIHRoZSBuZWdhdGl2ZSBvciBwb3Np dGl2ZSBlZGdlLgorCQkgKi8KKwkJY2xjZF9wYW5lbC0+dGltMiB8PSBUSU0yX0lQQzsKKworCWlm ICh0aW1pbmcuZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0hTWU5DX0xPVykKKwkJY2xjZF9wYW5lbC0+ dGltMiB8PSBUSU0yX0lIUzsKKworCWlmICh0aW1pbmcuZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX1ZT WU5DX0xPVykKKwkJY2xjZF9wYW5lbC0+dGltMiB8PSBUSU0yX0lWUzsKKworCWlmICh0aW1pbmcu ZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0RFX0xPVykKKwkJY2xjZF9wYW5lbC0+dGltMiB8PSBUSU0y X0lPRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNsY2RmYl9zbnByaW50Zl9tb2Rl KGNoYXIgKmJ1ZiwgaW50IHNpemUsIHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUpCit7CisJcmV0 dXJuIHNucHJpbnRmKGJ1Ziwgc2l6ZSwgIiV1eCV1QCV1IiwgbW9kZS0+eHJlcywgbW9kZS0+eXJl cywKKwkJCW1vZGUtPnJlZnJlc2gpOworfQorCitzdGF0aWMgaW50IGNsY2RmYl9vZl9nZXRfYmFj a2xpZ2h0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgY2xjZF9wYW5lbCAqY2xj ZF9wYW5lbCkKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0OworCisJLyog TG9vayB1cCB0aGUgb3B0aW9uYWwgYmFja2xpZ2h0IGRldmljZSAqLworCWJhY2tsaWdodCA9IGRl dm1fb2ZfZmluZF9iYWNrbGlnaHQoZGV2KTsKKwlpZiAoSVNfRVJSKGJhY2tsaWdodCkpCisJCXJl dHVybiBQVFJfRVJSKGJhY2tsaWdodCk7CisKKwljbGNkX3BhbmVsLT5iYWNrbGlnaHQgPSBiYWNr bGlnaHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xjZGZiX29mX2dldF9tb2RlKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpwYW5lbCwKKwkJCSAgICAgIHN0 cnVjdCBjbGNkX3BhbmVsICpjbGNkX3BhbmVsKQoreworCWludCBlcnI7CisJc3RydWN0IGZiX3Zp ZGVvbW9kZSAqbW9kZTsKKwljaGFyICpuYW1lOworCWludCBsZW47CisKKwkvKiBPbmx5IGRpcmVj dGx5IGNvbm5lY3RlZCBEUEkgcGFuZWxzIHN1cHBvcnRlZCBmb3Igbm93ICovCisJaWYgKG9mX2Rl dmljZV9pc19jb21wYXRpYmxlKHBhbmVsLCAicGFuZWwtZHBpIikpCisJCWVyciA9IGNsY2RmYl9v Zl9nZXRfZHBpX3BhbmVsX21vZGUocGFuZWwsIGNsY2RfcGFuZWwpOworCWVsc2UKKwkJZXJyID0g LUVOT0VOVDsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCW1vZGUgPSAmY2xjZF9wYW5lbC0+ bW9kZTsKKworCWxlbiA9IGNsY2RmYl9zbnByaW50Zl9tb2RlKE5VTEwsIDAsIG1vZGUpOworCW5h bWUgPSBkZXZtX2t6YWxsb2MoZGV2LCBsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5hbWUp CisJCXJldHVybiAtRU5PTUVNOworCisJY2xjZGZiX3NucHJpbnRmX21vZGUobmFtZSwgbGVuICsg MSwgbW9kZSk7CisJbW9kZS0+bmFtZSA9IG5hbWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBjbGNkZmJfb2ZfaW5pdF90ZnRfcGFuZWwoc3RydWN0IGNsY2RfZmIgKmZiLCB1MzIgcjAs IHUzMiBnMCwgdTMyIGIwKQoreworCXN0YXRpYyBzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgcGFy dDsKKwkJdTMyIHIwLCBnMCwgYjA7CisJCXUzMiBjYXBzOworCX0gcGFuZWxzW10gPSB7CisJCXsg MHgxMTAsIDEsICA3LCAxMywgQ0xDRF9DQVBfNTU1MSB9LAorCQl7IDB4MTEwLCAwLCAgOCwgMTYs IENMQ0RfQ0FQXzg4OCB9LAorCQl7IDB4MTEwLCAxNiwgOCwgMCwgIENMQ0RfQ0FQXzg4OCB9LAor CQl7IDB4MTExLCA0LCAxNCwgMjAsIENMQ0RfQ0FQXzQ0NCB9LAorCQl7IDB4MTExLCAzLCAxMSwg MTksIENMQ0RfQ0FQXzQ0NCB8IENMQ0RfQ0FQXzU1NTEgfSwKKwkJeyAweDExMSwgMywgMTAsIDE5 LCBDTENEX0NBUF80NDQgfCBDTENEX0NBUF81NTUxIHwKKwkJCQkgICAgQ0xDRF9DQVBfNTY1IH0s CisJCXsgMHgxMTEsIDAsICA4LCAxNiwgQ0xDRF9DQVBfNDQ0IHwgQ0xDRF9DQVBfNTU1MSB8CisJ CQkJICAgIENMQ0RfQ0FQXzU2NSB8IENMQ0RfQ0FQXzg4OCB9LAorCX07CisJaW50IGk7CisKKwkv KiBCeXBhc3MgcGl4ZWwgY2xvY2sgZGl2aWRlciAqLworCWZiLT5wYW5lbC0+dGltMiB8PSBUSU0y X0JDRDsKKworCS8qIFRGVCBkaXNwbGF5LCB2ZXJ0LiBjb21wLiBpbnRlcnJ1cHQgYXQgdGhlIHN0 YXJ0IG9mIHRoZSBiYWNrIHBvcmNoICovCisJZmItPnBhbmVsLT5jbnRsIHw9IENOVExfTENEVEZU IHwgQ05UTF9MQ0RWQ09NUCgxKTsKKworCWZiLT5wYW5lbC0+Y2FwcyA9IDA7CisKKwkvKiBNYXRj aCB0aGUgc2V0dXAgd2l0aCBrbm93biB2YXJpYW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKHBhbmVscykgJiYgIWZiLT5wYW5lbC0+Y2FwczsgaSsrKSB7CisJCWlmIChhbWJhX3Bh cnQoZmItPmRldikgIT0gcGFuZWxzW2ldLnBhcnQpCisJCQljb250aW51ZTsKKwkJaWYgKGcwICE9 IHBhbmVsc1tpXS5nMCkKKwkJCWNvbnRpbnVlOworCQlpZiAocjAgPT0gcGFuZWxzW2ldLnIwICYm IGIwID09IHBhbmVsc1tpXS5iMCkKKwkJCWZiLT5wYW5lbC0+Y2FwcyA9IHBhbmVsc1tpXS5jYXBz OworCX0KKworCS8qCisJICogSWYgd2UgYWN0dWFsbHkgcGh5c2ljYWxseSBjb25uZWN0ZWQgdGhl IFIgbGluZXMgdG8gQiBhbmQKKwkgKiB2aWNlIHZlcnNhCisJICovCisJaWYgKHIwICE9IDAgJiYg YjAgPT0gMCkKKwkJZmItPnBhbmVsLT5iZ3JfY29ubmVjdGlvbiA9IHRydWU7CisKKwlyZXR1cm4g ZmItPnBhbmVsLT5jYXBzID8gMCA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgY2xjZGZiX29m X2luaXRfZGlzcGxheShzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJc3RydWN0IGRldmljZV9ub2Rl ICplbmRwb2ludCwgKnBhbmVsOworCWludCBlcnI7CisJdW5zaWduZWQgaW50IGJwcDsKKwl1MzIg bWF4X2JhbmR3aWR0aDsKKwl1MzIgdGZ0X3IwYjBnMFszXTsKKworCWZiLT5wYW5lbCA9IGRldm1f a3phbGxvYygmZmItPmRldi0+ZGV2LCBzaXplb2YoKmZiLT5wYW5lbCksIEdGUF9LRVJORUwpOwor CWlmICghZmItPnBhbmVsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogRmV0Y2ggdGhl IHBhbmVsIGVuZHBvaW50LgorCSAqLworCWVuZHBvaW50ID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5k cG9pbnQoZmItPmRldi0+ZGV2Lm9mX25vZGUsIE5VTEwpOworCWlmICghZW5kcG9pbnQpCisJCXJl dHVybiAtRU5PREVWOworCisJcGFuZWwgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50 KGVuZHBvaW50KTsKKwlpZiAoIXBhbmVsKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVyciA9IGNs Y2RmYl9vZl9nZXRfYmFja2xpZ2h0KCZmYi0+ZGV2LT5kZXYsIGZiLT5wYW5lbCk7CisJaWYgKGVy cikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGNsY2RmYl9vZl9nZXRfbW9kZSgmZmItPmRldi0+ ZGV2LCBwYW5lbCwgZmItPnBhbmVsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJy ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZmItPmRldi0+ZGV2Lm9mX25vZGUsICJtYXgtbWVtb3J5 LWJhbmR3aWR0aCIsCisJCQkmbWF4X2JhbmR3aWR0aCk7CisJaWYgKCFlcnIpIHsKKwkJLyoKKwkJ ICogbWF4X2JhbmR3aWR0aCBpcyBpbiBieXRlcyBwZXIgc2Vjb25kIGFuZCBwaXhjbG9jayBpbgor CQkgKiBwaWNvLXNlY29uZHMsIHNvIHRoZSBtYXhpbXVtIGFsbG93ZWQgYml0cyBwZXIgcGl4ZWwg aXMKKwkJICogICA4ICogbWF4X2JhbmR3aWR0aCAvIChQSUNPUzJLSFoocGl4Y2xvY2spICogMTAw MCkKKwkJICogUmVhcnJhbmdlIHRoaXMgY2FsY3VsYXRpb24gdG8gYXZvaWQgb3ZlcmZsb3cgYW5k IHRoZW4gZW5zdXJlCisJCSAqIHJlc3VsdCBpcyBhIHZhbGlkIGZvcm1hdC4KKwkJICovCisJCWJw cCA9IG1heF9iYW5kd2lkdGggLyAoMTAwMCAvIDgpCisJCQkvIFBJQ09TMktIWihmYi0+cGFuZWwt Pm1vZGUucGl4Y2xvY2spOworCQlicHAgPSByb3VuZGRvd25fcG93X29mX3R3byhicHApOworCQlp ZiAoYnBwID4gMzIpCisJCQlicHAgPSAzMjsKKwl9IGVsc2UKKwkJYnBwID0gMzI7CisJZmItPnBh bmVsLT5icHAgPSBicHA7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0JJR19FTkRJQU4KKwlmYi0+cGFu ZWwtPmNudGwgfD0gQ05UTF9CRUJPOworI2VuZGlmCisJZmItPnBhbmVsLT53aWR0aCA9IC0xOwor CWZiLT5wYW5lbC0+aGVpZ2h0ID0gLTE7CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzJfYXJy YXkoZW5kcG9pbnQsCisJCQkiYXJtLHBsMTF4LHRmdC1yMGcwYjAtcGFkcyIsCisJCQl0ZnRfcjBi MGcwLCBBUlJBWV9TSVpFKHRmdF9yMGIwZzApKSAhPSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKwor CXJldHVybiBjbGNkZmJfb2ZfaW5pdF90ZnRfcGFuZWwoZmIsIHRmdF9yMGIwZzBbMF0sCisJCQkJ CXRmdF9yMGIwZzBbMV0sICB0ZnRfcjBiMGcwWzJdKTsKK30KKworc3RhdGljIGludCBjbGNkZmJf b2ZfdnJhbV9zZXR1cChzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm1lbW9yeTsKKwl1NjQgc2l6ZTsKKworCWVyciA9IGNsY2RmYl9vZl9pbml0 X2Rpc3BsYXkoZmIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltZW1vcnkgPSBvZl9w YXJzZV9waGFuZGxlKGZiLT5kZXYtPmRldi5vZl9ub2RlLCAibWVtb3J5LXJlZ2lvbiIsIDApOwor CWlmICghbWVtb3J5KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZiLT5mYi5zY3JlZW5fYmFzZSA9 IG9mX2lvbWFwKG1lbW9yeSwgMCk7CisJaWYgKCFmYi0+ZmIuc2NyZWVuX2Jhc2UpCisJCXJldHVy biAtRU5PTUVNOworCisJZmItPmZiLmZpeC5zbWVtX3N0YXJ0ID0gb2ZfdHJhbnNsYXRlX2FkZHJl c3MobWVtb3J5LAorCQkJb2ZfZ2V0X2FkZHJlc3MobWVtb3J5LCAwLCAmc2l6ZSwgTlVMTCkpOwor CWZiLT5mYi5maXguc21lbV9sZW4gPSBzaXplOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgY2xjZGZiX29mX3ZyYW1fbW1hcChzdHJ1Y3QgY2xjZF9mYiAqZmIsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQoreworCXVuc2lnbmVkIGxvbmcgb2ZmLCB1c2VyX3NpemUsIGtlcm5lbF9z aXplOworCisKKwlvZmYgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJdXNlcl9zaXpl ID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OworCWtlcm5lbF9zaXplID0gZmItPmZiLmZp eC5zbWVtX2xlbjsKKworCWlmIChvZmYgPj0ga2VybmVsX3NpemUgfHwgdXNlcl9zaXplID4gKGtl cm5lbF9zaXplIC0gb2ZmKSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCXJldHVybiByZW1hcF9wZm5f cmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LAorCQkJX19waHlzX3RvX3BmbihmYi0+ZmIuZml4LnNt ZW1fc3RhcnQpICsgdm1hLT52bV9wZ29mZiwKKwkJCXVzZXJfc2l6ZSwKKwkJCXBncHJvdF93cml0 ZWNvbWJpbmUodm1hLT52bV9wYWdlX3Byb3QpKTsKK30KKworc3RhdGljIHZvaWQgY2xjZGZiX29m X3ZyYW1fcmVtb3ZlKHN0cnVjdCBjbGNkX2ZiICpmYikKK3sKKwlpb3VubWFwKGZiLT5mYi5zY3Jl ZW5fYmFzZSk7Cit9CisKK3N0YXRpYyBpbnQgY2xjZGZiX29mX2RtYV9zZXR1cChzdHJ1Y3QgY2xj ZF9mYiAqZmIpCit7CisJdW5zaWduZWQgbG9uZyBmcmFtZXNpemU7CisJZG1hX2FkZHJfdCBkbWE7 CisJaW50IGVycjsKKworCWVyciA9IGNsY2RmYl9vZl9pbml0X2Rpc3BsYXkoZmIpOworCWlmIChl cnIpCisJCXJldHVybiBlcnI7CisKKwlmcmFtZXNpemUgPSBQQUdFX0FMSUdOKGZiLT5wYW5lbC0+ bW9kZS54cmVzICogZmItPnBhbmVsLT5tb2RlLnlyZXMgKgorCQkJZmItPnBhbmVsLT5icHAgLyA4 KTsKKwlmYi0+ZmIuc2NyZWVuX2Jhc2UgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmZiLT5kZXYtPmRl diwgZnJhbWVzaXplLAorCQkJJmRtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmYi0+ZmIuc2NyZWVu X2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJZmItPmZiLmZpeC5zbWVtX3N0YXJ0ID0gZG1h OworCWZiLT5mYi5maXguc21lbV9sZW4gPSBmcmFtZXNpemU7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBjbGNkZmJfb2ZfZG1hX21tYXAoc3RydWN0IGNsY2RfZmIgKmZiLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlyZXR1cm4gZG1hX21tYXBfd2MoJmZiLT5kZXYtPmRl diwgdm1hLCBmYi0+ZmIuc2NyZWVuX2Jhc2UsCisJCQkgICBmYi0+ZmIuZml4LnNtZW1fc3RhcnQs IGZiLT5mYi5maXguc21lbV9sZW4pOworfQorCitzdGF0aWMgdm9pZCBjbGNkZmJfb2ZfZG1hX3Jl bW92ZShzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmZiLT5kZXYt PmRldiwgZmItPmZiLmZpeC5zbWVtX2xlbiwKKwkJCWZiLT5mYi5zY3JlZW5fYmFzZSwgZmItPmZi LmZpeC5zbWVtX3N0YXJ0KTsKK30KKworc3RhdGljIHN0cnVjdCBjbGNkX2JvYXJkICpjbGNkZmJf b2ZfZ2V0X2JvYXJkKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjbGNkX2Jv YXJkICpib2FyZCA9IGRldm1fa3phbGxvYygmZGV2LT5kZXYsIHNpemVvZigqYm9hcmQpLAorCQkJ R0ZQX0tFUk5FTCk7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gZGV2LT5kZXYub2Zfbm9k ZTsKKworCWlmICghYm9hcmQpCisJCXJldHVybiBOVUxMOworCisJYm9hcmQtPm5hbWUgPSBvZl9u b2RlX2Z1bGxfbmFtZShub2RlKTsKKwlib2FyZC0+Y2FwcyA9IENMQ0RfQ0FQX0FMTDsKKwlib2Fy ZC0+Y2hlY2sgPSBjbGNkZmJfY2hlY2s7CisJYm9hcmQtPmRlY29kZSA9IGNsY2RmYl9kZWNvZGU7 CisJaWYgKG9mX2ZpbmRfcHJvcGVydHkobm9kZSwgIm1lbW9yeS1yZWdpb24iLCBOVUxMKSkgewor CQlib2FyZC0+c2V0dXAgPSBjbGNkZmJfb2ZfdnJhbV9zZXR1cDsKKwkJYm9hcmQtPm1tYXAgPSBj bGNkZmJfb2ZfdnJhbV9tbWFwOworCQlib2FyZC0+cmVtb3ZlID0gY2xjZGZiX29mX3ZyYW1fcmVt b3ZlOworCX0gZWxzZSB7CisJCWJvYXJkLT5zZXR1cCA9IGNsY2RmYl9vZl9kbWFfc2V0dXA7CisJ CWJvYXJkLT5tbWFwID0gY2xjZGZiX29mX2RtYV9tbWFwOworCQlib2FyZC0+cmVtb3ZlID0gY2xj ZGZiX29mX2RtYV9yZW1vdmU7CisJfQorCisJcmV0dXJuIGJvYXJkOworfQorI2Vsc2UKK3N0YXRp YyBzdHJ1Y3QgY2xjZF9ib2FyZCAqY2xjZGZiX29mX2dldF9ib2FyZChzdHJ1Y3QgYW1iYV9kZXZp Y2UgKmRldikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGNsY2Rm Yl9wcm9iZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGFtYmFfaWQgKmlk KQoreworCXN0cnVjdCBjbGNkX2JvYXJkICpib2FyZCA9IGRldl9nZXRfcGxhdGRhdGEoJmRldi0+ ZGV2KTsKKwlzdHJ1Y3QgY2xjZF9mYiAqZmI7CisJaW50IHJldDsKKworCWlmICghYm9hcmQpCisJ CWJvYXJkID0gY2xjZGZiX29mX2dldF9ib2FyZChkZXYpOworCisJaWYgKCFib2FyZCkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZkZXYtPmRl diwgRE1BX0JJVF9NQVNLKDMyKSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBh bWJhX3JlcXVlc3RfcmVnaW9ucyhkZXYsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtF Uk5fRVJSICJDTENEOiB1bmFibGUgdG8gcmVzZXJ2ZSByZWdzIHJlZ2lvblxuIik7CisJCWdvdG8g b3V0OworCX0KKworCWZiID0ga3phbGxvYyhzaXplb2YoKmZiKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFmYikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfcmVnaW9uOworCX0KKworCWZi LT5kZXYgPSBkZXY7CisJZmItPmJvYXJkID0gYm9hcmQ7CisKKwlkZXZfaW5mbygmZmItPmRldi0+ ZGV2LCAiUEwlMDN4IGRlc2lnbmVyICUwMnggcmV2JXUgYXQgMHglMDhsbHhcbiIsCisJCWFtYmFf cGFydChkZXYpLCBhbWJhX21hbmYoZGV2KSwgYW1iYV9yZXYoZGV2KSwKKwkJKHVuc2lnbmVkIGxv bmcgbG9uZylkZXYtPnJlcy5zdGFydCk7CisKKwlyZXQgPSBmYi0+Ym9hcmQtPnNldHVwKGZiKTsK KwlpZiAocmV0KQorCQlnb3RvIGZyZWVfZmI7CisKKwlyZXQgPSBjbGNkZmJfcmVnaXN0ZXIoZmIp OworCWlmIChyZXQgPT0gMCkgeworCQlhbWJhX3NldF9kcnZkYXRhKGRldiwgZmIpOworCQlnb3Rv IG91dDsKKwl9CisKKwlmYi0+Ym9hcmQtPnJlbW92ZShmYik7CisgZnJlZV9mYjoKKwlrZnJlZShm Yik7CisgZnJlZV9yZWdpb246CisJYW1iYV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKyBvdXQ6CisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbGNkZmJfcmVtb3ZlKHN0cnVjdCBhbWJhX2Rl dmljZSAqZGV2KQoreworCXN0cnVjdCBjbGNkX2ZiICpmYiA9IGFtYmFfZ2V0X2RydmRhdGEoZGV2 KTsKKworCWNsY2RmYl9kaXNhYmxlKGZiKTsKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYi0+ ZmIpOworCWlmIChmYi0+ZmIuY21hcC5sZW4pCisJCWZiX2RlYWxsb2NfY21hcCgmZmItPmZiLmNt YXApOworCWlvdW5tYXAoZmItPnJlZ3MpOworCWNsa191bnByZXBhcmUoZmItPmNsayk7CisJY2xr X3B1dChmYi0+Y2xrKTsKKworCWZiLT5ib2FyZC0+cmVtb3ZlKGZiKTsKKworCWtmcmVlKGZiKTsK KworCWFtYmFfcmVsZWFzZV9yZWdpb25zKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBhbWJhX2lkIGNsY2RmYl9pZF90YWJsZVtdID0geworCXsKKwkJLmlkCT0g MHgwMDA0MTExMCwKKwkJLm1hc2sJPSAweDAwMGZmZmZlLAorCX0sCisJeyAwLCAwIH0sCit9Owor CitNT0RVTEVfREVWSUNFX1RBQkxFKGFtYmEsIGNsY2RmYl9pZF90YWJsZSk7CisKK3N0YXRpYyBz dHJ1Y3QgYW1iYV9kcml2ZXIgY2xjZF9kcml2ZXIgPSB7CisJLmRydiAJCT0geworCQkubmFtZQk9 ICJjbGNkLXBsMTF4IiwKKwl9LAorCS5wcm9iZQkJPSBjbGNkZmJfcHJvYmUsCisJLnJlbW92ZQkJ PSBjbGNkZmJfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGNsY2RmYl9pZF90YWJsZSwKK307CisKK3N0 YXRpYyBpbnQgX19pbml0IGFtYmFfY2xjZGZiX2luaXQodm9pZCkKK3sKKwlpZiAoZmJfZ2V0X29w dGlvbnMoImFtYmFmYiIsIE5VTEwpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBhbWJh X2RyaXZlcl9yZWdpc3RlcigmY2xjZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhbWJhX2Ns Y2RmYl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGFtYmFfY2xjZGZiX2V4aXQodm9pZCkK K3sKKwlhbWJhX2RyaXZlcl91bnJlZ2lzdGVyKCZjbGNkX2RyaXZlcik7Cit9CisKK21vZHVsZV9l eGl0KGFtYmFfY2xjZGZiX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFSTSBQcmltZUNl bGwgUEwxMTAgQ0xDRCBjb3JlIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZm IC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hbWJhL2NsY2QtcmVncy5oIGIvaW5jbHVkZS9saW51eC9h bWJhL2NsY2QtcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u NDIxYjBmYTkwZDZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hbWJhL2NsY2Qt cmVncy5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBEYXZpZCBBIFJ1c2xpbmcKKyAqCisgKiBD b3B5cmlnaHQgKEMpIDIwMDEgQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVj dCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwor ICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBv ZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBBTUJB X0NMQ0RfUkVHU19ICisjZGVmaW5lIEFNQkFfQ0xDRF9SRUdTX0gKKworLyoKKyAqIENMQ0QgQ29u dHJvbGxlciBJbnRlcm5hbCBSZWdpc3RlciBhZGRyZXNzZXMKKyAqLworI2RlZmluZSBDTENEX1RJ TTAJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0xDRF9USU0xIAkJMHgwMDAwMDAwNAorI2RlZmluZSBD TENEX1RJTTIgCQkweDAwMDAwMDA4CisjZGVmaW5lIENMQ0RfVElNMyAJCTB4MDAwMDAwMGMKKyNk ZWZpbmUgQ0xDRF9VQkFTIAkJMHgwMDAwMDAxMAorI2RlZmluZSBDTENEX0xCQVMgCQkweDAwMDAw MDE0CisKKyNkZWZpbmUgQ0xDRF9QTDExMF9JRU5CCQkweDAwMDAwMDE4CisjZGVmaW5lIENMQ0Rf UEwxMTBfQ05UTAkJMHgwMDAwMDAxYworI2RlZmluZSBDTENEX1BMMTEwX1NUQVQJCTB4MDAwMDAw MjAKKyNkZWZpbmUgQ0xDRF9QTDExMF9JTlRSIAkweDAwMDAwMDI0CisjZGVmaW5lIENMQ0RfUEwx MTBfVUNVUgkJMHgwMDAwMDAyOAorI2RlZmluZSBDTENEX1BMMTEwX0xDVVIJCTB4MDAwMDAwMkMK KworI2RlZmluZSBDTENEX1BMMTExX0NOVEwJCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0xDRF9QTDEx MV9JRU5CCQkweDAwMDAwMDFjCisjZGVmaW5lIENMQ0RfUEwxMTFfUklTCQkweDAwMDAwMDIwCisj ZGVmaW5lIENMQ0RfUEwxMTFfTUlTCQkweDAwMDAwMDI0CisjZGVmaW5lIENMQ0RfUEwxMTFfSUNS CQkweDAwMDAwMDI4CisjZGVmaW5lIENMQ0RfUEwxMTFfVUNVUgkJMHgwMDAwMDAyYworI2RlZmlu ZSBDTENEX1BMMTExX0xDVVIJCTB4MDAwMDAwMzAKKworI2RlZmluZSBDTENEX1BBTEwgCQkweDAw MDAwMjAwCisjZGVmaW5lIENMQ0RfUEFMRVRURQkJMHgwMDAwMDIwMAorCisjZGVmaW5lIFRJTTJf UENEX0xPX01BU0sJR0VOTUFTSyg0LCAwKQorI2RlZmluZSBUSU0yX1BDRF9MT19CSVRTCTUKKyNk ZWZpbmUgVElNMl9DTEtTRUwJCSgxIDw8IDUpCisjZGVmaW5lIFRJTTJfQUNCX01BU0sJCUdFTk1B U0soMTAsIDYpCisjZGVmaW5lIFRJTTJfSVZTCQkoMSA8PCAxMSkKKyNkZWZpbmUgVElNMl9JSFMJ CSgxIDw8IDEyKQorI2RlZmluZSBUSU0yX0lQQwkJKDEgPDwgMTMpCisjZGVmaW5lIFRJTTJfSU9F CQkoMSA8PCAxNCkKKyNkZWZpbmUgVElNMl9CQ0QJCSgxIDw8IDI2KQorI2RlZmluZSBUSU0yX1BD RF9ISV9NQVNLCUdFTk1BU0soMzEsIDI3KQorI2RlZmluZSBUSU0yX1BDRF9ISV9CSVRTCTUKKyNk ZWZpbmUgVElNMl9QQ0RfSElfU0hJRlQJMjcKKworI2RlZmluZSBDTlRMX0xDREVOCQkoMSA8PCAw KQorI2RlZmluZSBDTlRMX0xDREJQUDEJCSgwIDw8IDEpCisjZGVmaW5lIENOVExfTENEQlBQMgkJ KDEgPDwgMSkKKyNkZWZpbmUgQ05UTF9MQ0RCUFA0CQkoMiA8PCAxKQorI2RlZmluZSBDTlRMX0xD REJQUDgJCSgzIDw8IDEpCisjZGVmaW5lIENOVExfTENEQlBQMTYJCSg0IDw8IDEpCisjZGVmaW5l IENOVExfTENEQlBQMTZfNTY1CSg2IDw8IDEpCisjZGVmaW5lIENOVExfTENEQlBQMTZfNDQ0CSg3 IDw8IDEpCisjZGVmaW5lIENOVExfTENEQlBQMjQJCSg1IDw8IDEpCisjZGVmaW5lIENOVExfTENE QlcJCSgxIDw8IDQpCisjZGVmaW5lIENOVExfTENEVEZUCQkoMSA8PCA1KQorI2RlZmluZSBDTlRM X0xDRE1PTk84CQkoMSA8PCA2KQorI2RlZmluZSBDTlRMX0xDRERVQUwJCSgxIDw8IDcpCisjZGVm aW5lIENOVExfQkdSCQkoMSA8PCA4KQorI2RlZmluZSBDTlRMX0JFQk8JCSgxIDw8IDkpCisjZGVm aW5lIENOVExfQkVQTwkJKDEgPDwgMTApCisjZGVmaW5lIENOVExfTENEUFdSCQkoMSA8PCAxMSkK KyNkZWZpbmUgQ05UTF9MQ0RWQ09NUCh4KQkoKHgpIDw8IDEyKQorI2RlZmluZSBDTlRMX0xETUFG SUZPVElNRQkoMSA8PCAxNSkKKyNkZWZpbmUgQ05UTF9XQVRFUk1BUksJCSgxIDw8IDE2KQorCisv KiBTVCBNaWNyb2VsZWN0cm9uaWNzIHZhcmlhbnQgYml0cyAqLworI2RlZmluZSBDTlRMX1NUXzFY QlBQXzQ0NAkweDAKKyNkZWZpbmUgQ05UTF9TVF8xWEJQUF81NTUxCSgxIDw8IDE3KQorI2RlZmlu ZSBDTlRMX1NUXzFYQlBQXzU2NQkoMSA8PCAxOCkKKyNkZWZpbmUgQ05UTF9TVF9DRFdJRF8xMgkw eDAKKyNkZWZpbmUgQ05UTF9TVF9DRFdJRF8xNgkoMSA8PCAxOSkKKyNkZWZpbmUgQ05UTF9TVF9D RFdJRF8xOAkoMSA8PCAyMCkKKyNkZWZpbmUgQ05UTF9TVF9DRFdJRF8yNAkoKDEgPDwgMTkpfCgx IDw8IDIwKSkKKyNkZWZpbmUgQ05UTF9TVF9DRUFFTgkJKDEgPDwgMjEpCisjZGVmaW5lIENOVExf U1RfTENEQlBQMjRfUEFDS0VECSg2IDw8IDEpCisKKyNlbmRpZiAvKiBBTUJBX0NMQ0RfUkVHU19I ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtYmEvY2xjZC5oIGIvaW5jbHVkZS9saW51 eC9hbWJhL2NsY2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmI2 ZTBjYmVhZjUzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9jbGNkLmgK QEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUv YW1iYV9jbGNkLmggLS0gSW50ZWdyYXRvciBMQ0QgcGFuZWwuCisgKgorICogRGF2aWQgQSBSdXNs aW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBm aWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFp biBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisj aW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QtcmVncy5oPgor CitlbnVtIHsKKwkvKiBpbmRpdmlkdWFsIGZvcm1hdHMgKi8KKwlDTENEX0NBUF9SR0I0NDQJCT0g KDEgPDwgMCksCisJQ0xDRF9DQVBfUkdCNTU1MQk9ICgxIDw8IDEpLAorCUNMQ0RfQ0FQX1JHQjU2 NQkJPSAoMSA8PCAyKSwKKwlDTENEX0NBUF9SR0I4ODgJCT0gKDEgPDwgMyksCisJQ0xDRF9DQVBf QkdSNDQ0CQk9ICgxIDw8IDQpLAorCUNMQ0RfQ0FQX0JHUjU1NTEJPSAoMSA8PCA1KSwKKwlDTENE X0NBUF9CR1I1NjUJCT0gKDEgPDwgNiksCisJQ0xDRF9DQVBfQkdSODg4CQk9ICgxIDw8IDcpLAor CisJLyogY29ubmVjdGlvbiBsYXlvdXRzICovCisJQ0xDRF9DQVBfNDQ0CQk9IENMQ0RfQ0FQX1JH QjQ0NCB8IENMQ0RfQ0FQX0JHUjQ0NCwKKwlDTENEX0NBUF81NTUxCQk9IENMQ0RfQ0FQX1JHQjU1 NTEgfCBDTENEX0NBUF9CR1I1NTUxLAorCUNMQ0RfQ0FQXzU2NQkJPSBDTENEX0NBUF9SR0I1NjUg fCBDTENEX0NBUF9CR1I1NjUsCisJQ0xDRF9DQVBfODg4CQk9IENMQ0RfQ0FQX1JHQjg4OCB8IENM Q0RfQ0FQX0JHUjg4OCwKKworCS8qIHJlZC9ibHVlIG9yZGVyaW5nICovCisJQ0xDRF9DQVBfUkdC CQk9IENMQ0RfQ0FQX1JHQjQ0NCB8IENMQ0RfQ0FQX1JHQjU1NTEgfAorCQkJCSAgQ0xDRF9DQVBf UkdCNTY1IHwgQ0xDRF9DQVBfUkdCODg4LAorCUNMQ0RfQ0FQX0JHUgkJPSBDTENEX0NBUF9CR1I0 NDQgfCBDTENEX0NBUF9CR1I1NTUxIHwKKwkJCQkgIENMQ0RfQ0FQX0JHUjU2NSB8IENMQ0RfQ0FQ X0JHUjg4OCwKKworCUNMQ0RfQ0FQX0FMTAkJPSBDTENEX0NBUF9CR1IgfCBDTENEX0NBUF9SR0Is Cit9OworCitzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZTsKKworc3RydWN0IGNsY2RfcGFuZWwgewor CXN0cnVjdCBmYl92aWRlb21vZGUJbW9kZTsKKwlzaWduZWQgc2hvcnQJCXdpZHRoOwkvKiB3aWR0 aCBpbiBtbSAqLworCXNpZ25lZCBzaG9ydAkJaGVpZ2h0OwkvKiBoZWlnaHQgaW4gbW0gKi8KKwl1 MzIJCQl0aW0yOworCXUzMgkJCXRpbTM7CisJdTMyCQkJY250bDsKKwl1MzIJCQljYXBzOworCXVu c2lnbmVkIGludAkJYnBwOjgsCisJCQkJZml4ZWR0aW1pbmdzOjEsCisJCQkJZ3JheXNjYWxlOjE7 CisJdW5zaWduZWQgaW50CQljb25uZWN0b3I7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UJKmJh Y2tsaWdodDsKKwkvKgorCSAqIElmIHRoZSBCL1IgbGluZXMgYXJlIHN3aXRjaGVkIGJldHdlZW4g dGhlIENMQ0QKKwkgKiBhbmQgdGhlIHBhbmVsIHdlIG5lZWQgdG8ga25vdyB0aGlzIGFuZCBub3Qg dHJ5IHRvCisJICogY29tcGVuc2F0ZSB3aXRoIHRoZSBCR1IgYml0IGluIHRoZSBjb250cm9sIHJl Z2lzdGVyLgorCSAqLworCWJvb2wJCQliZ3JfY29ubmVjdGlvbjsKK307CisKK3N0cnVjdCBjbGNk X3JlZ3MgeworCXUzMgkJCXRpbTA7CisJdTMyCQkJdGltMTsKKwl1MzIJCQl0aW0yOworCXUzMgkJ CXRpbTM7CisJdTMyCQkJY250bDsKKwl1bnNpZ25lZCBsb25nCQlwaXhjbG9jazsKK307CisKK3N0 cnVjdCBjbGNkX2ZiOworCisvKgorICogdGhlIGJvYXJkLXR5cGUgc3BlY2lmaWMgcm91dGluZXMK KyAqLworc3RydWN0IGNsY2RfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkvKgorCSAq IE9wdGlvbmFsLiAgSGFyZHdhcmUgY2FwYWJpbGl0eSBmbGFncy4KKwkgKi8KKwl1MzIJY2FwczsK KworCS8qCisJICogT3B0aW9uYWwuICBDaGVjayB3aGV0aGVyIHRoZSB2YXIgc3RydWN0dXJlIGlz IGFjY2VwdGFibGUKKwkgKiBmb3IgdGhpcyBkaXNwbGF5LgorCSAqLworCWludAkoKmNoZWNrKShz dHJ1Y3QgY2xjZF9mYiAqZmIsIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKTsKKworCS8q CisJICogQ29tcHVsc29yeS4gIERlY29kZSBmYi0+ZmIudmFyIGludG8gcmVncy0+Ki4gIEluIHRo ZSBjYXNlIG9mCisJICogZml4ZWQgdGltaW5nLCBzZXQgcmVncy0+KiB0byB0aGUgcmVnaXN0ZXIg dmFsdWVzIHJlcXVpcmVkLgorCSAqLworCXZvaWQJKCpkZWNvZGUpKHN0cnVjdCBjbGNkX2ZiICpm Yiwgc3RydWN0IGNsY2RfcmVncyAqcmVncyk7CisKKwkvKgorCSAqIE9wdGlvbmFsLiAgRGlzYWJs ZSBhbnkgZXh0cmEgZGlzcGxheSBoYXJkd2FyZS4KKwkgKi8KKwl2b2lkCSgqZGlzYWJsZSkoc3Ry dWN0IGNsY2RfZmIgKik7CisKKwkvKgorCSAqIE9wdGlvbmFsLiAgRW5hYmxlIGFueSBleHRyYSBk aXNwbGF5IGhhcmR3YXJlLgorCSAqLworCXZvaWQJKCplbmFibGUpKHN0cnVjdCBjbGNkX2ZiICop OworCisJLyoKKwkgKiBTZXR1cCBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJ0cyBvZiBDTENEIGRyaXZl cgorCSAqLworCWludAkoKnNldHVwKShzdHJ1Y3QgY2xjZF9mYiAqKTsKKworCS8qCisJICogbW1h cCB0aGUgZnJhbWVidWZmZXIgbWVtb3J5CisJICovCisJaW50CSgqbW1hcCkoc3RydWN0IGNsY2Rf ZmIgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOworCisJLyoKKwkgKiBSZW1vdmUgcGxhdGZv cm0gc3BlY2lmaWMgcGFydHMgb2YgQ0xDRCBkcml2ZXIKKwkgKi8KKwl2b2lkCSgqcmVtb3ZlKShz dHJ1Y3QgY2xjZF9mYiAqKTsKK307CisKK3N0cnVjdCBhbWJhX2RldmljZTsKK3N0cnVjdCBjbGs7 CisKKy8qIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGVhY2ggZnJhbWUgYnVmZmVyIGRl dmljZSB3ZSBmaW5kICovCitzdHJ1Y3QgY2xjZF9mYiB7CisJc3RydWN0IGZiX2luZm8JCWZiOwor CXN0cnVjdCBhbWJhX2RldmljZQkqZGV2OworCXN0cnVjdCBjbGsJCSpjbGs7CisJc3RydWN0IGNs Y2RfcGFuZWwJKnBhbmVsOworCXN0cnVjdCBjbGNkX2JvYXJkCSpib2FyZDsKKwl2b2lkCQkJKmJv YXJkX2RhdGE7CisJdm9pZCBfX2lvbWVtCQkqcmVnczsKKwl1MTYJCQlvZmZfaWVuYjsKKwl1MTYJ CQlvZmZfY250bDsKKwl1MzIJCQljbGNkX2NudGw7CisJdTMyCQkJY21hcFsxNl07CisJYm9vbAkJ CWNsa19lbmFibGVkOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsY2RmYl9kZWNvZGUoc3Ry dWN0IGNsY2RfZmIgKmZiLCBzdHJ1Y3QgY2xjZF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBmYl92 YXJfc2NyZWVuaW5mbyAqdmFyID0gJmZiLT5mYi52YXI7CisJdTMyIHZhbCwgY3BsOworCisJLyoK KwkgKiBQcm9ncmFtIHRoZSBDTENEIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGFuZCBzdGFydCB0aGUg Q0xDRAorCSAqLworCXZhbCA9ICgodmFyLT54cmVzIC8gMTYpIC0gMSkgPDwgMjsKKwl2YWwgfD0g KHZhci0+aHN5bmNfbGVuIC0gMSkgPDwgODsKKwl2YWwgfD0gKHZhci0+cmlnaHRfbWFyZ2luIC0g MSkgPDwgMTY7CisJdmFsIHw9ICh2YXItPmxlZnRfbWFyZ2luIC0gMSkgPDwgMjQ7CisJcmVncy0+ dGltMCA9IHZhbDsKKworCXZhbCA9IHZhci0+eXJlczsKKwlpZiAoZmItPnBhbmVsLT5jbnRsICYg Q05UTF9MQ0REVUFMKQorCQl2YWwgLz0gMjsKKwl2YWwgLT0gMTsKKwl2YWwgfD0gKHZhci0+dnN5 bmNfbGVuIC0gMSkgPDwgMTA7CisJdmFsIHw9IHZhci0+bG93ZXJfbWFyZ2luIDw8IDE2OworCXZh bCB8PSB2YXItPnVwcGVyX21hcmdpbiA8PCAyNDsKKwlyZWdzLT50aW0xID0gdmFsOworCisJdmFs ID0gZmItPnBhbmVsLT50aW0yOworCXZhbCB8PSB2YXItPnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdI X0FDVCAgPyAwIDogVElNMl9JSFM7CisJdmFsIHw9IHZhci0+c3luYyAmIEZCX1NZTkNfVkVSVF9I SUdIX0FDVCA/IDAgOiBUSU0yX0lWUzsKKworCWNwbCA9IHZhci0+eHJlc192aXJ0dWFsOworCWlm IChmYi0+cGFuZWwtPmNudGwgJiBDTlRMX0xDRFRGVCkJICAvKiBURlQgKi8KKwkJLyogLyAxICov OworCWVsc2UgaWYgKCF2YXItPmdyYXlzY2FsZSkJCSAgLyogU1ROIGNvbG9yICovCisJCWNwbCA9 IGNwbCAqIDggLyAzOworCWVsc2UgaWYgKGZiLT5wYW5lbC0+Y250bCAmIENOVExfTENETU9OTzgp IC8qIFNUTiBtb25vY2hyb21lLCA4Yml0ICovCisJCWNwbCAvPSA4OworCWVsc2UJCQkJCSAgLyog U1ROIG1vbm9jaHJvbWUsIDRiaXQgKi8KKwkJY3BsIC89IDQ7CisKKwlyZWdzLT50aW0yID0gdmFs IHwgKChjcGwgLSAxKSA8PCAxNik7CisKKwlyZWdzLT50aW0zID0gZmItPnBhbmVsLT50aW0zOwor CisJdmFsID0gZmItPnBhbmVsLT5jbnRsOworCWlmICh2YXItPmdyYXlzY2FsZSkKKwkJdmFsIHw9 IENOVExfTENEQlc7CisKKwlpZiAoZmItPnBhbmVsLT5jYXBzICYmIGZiLT5ib2FyZC0+Y2FwcyAm JiB2YXItPmJpdHNfcGVyX3BpeGVsID49IDE2KSB7CisJCS8qCisJCSAqIGlmIGJvYXJkIGFuZCBw YW5lbCBzdXBwbHkgY2FwYWJpbGl0aWVzLCB3ZSBjYW4gc3VwcG9ydAorCQkgKiBjaGFuZ2luZyBC R1IvUkdCIGRlcGVuZGluZyBvbiBzdXBwbGllZCBwYXJhbWV0ZXJzLiBIZXJlCisJCSAqIHdlIHN3 aXRjaCB0byB3aGF0IHRoZSBmcmFtZWJ1ZmZlciBpcyBwcm92aWRpbmcgaWYgbmVlZAorCQkgKiBi ZSwgc28gaWYgdGhlIGZyYW1lYnVmZmVyIGlzIEJHUiBidXQgdGhlIGRpc3BsYXkgY29ubmVjdGlv bgorCQkgKiBpcyBSR0IgKGZpcnN0IGNhc2UpIHdlIHN3aXRjaCBpdCBhcm91bmQuIFZpY2UgdmVy c2EgbXV0YXRpcworCQkgKiBtdXRhbmRpcyBpZiB0aGUgZnJhbWVidWZmZXIgaXMgUkdCIGJ1dCB0 aGUgZGlzcGxheSBjb25uZWN0aW9uCisJCSAqIGlzIEJHUiwgd2UgZmxpcCBpdCBhcm91bmQuCisJ CSAqLworCQlpZiAodmFyLT5yZWQub2Zmc2V0ID09IDApCisJCQl2YWwgJj0gfkNOVExfQkdSOwor CQllbHNlCisJCQl2YWwgfD0gQ05UTF9CR1I7CisJCWlmIChmYi0+cGFuZWwtPmJncl9jb25uZWN0 aW9uKQorCQkJdmFsIF49IENOVExfQkdSOworCX0KKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9w aXhlbCkgeworCWNhc2UgMToKKwkJdmFsIHw9IENOVExfTENEQlBQMTsKKwkJYnJlYWs7CisJY2Fz ZSAyOgorCQl2YWwgfD0gQ05UTF9MQ0RCUFAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXZhbCB8 PSBDTlRMX0xDREJQUDQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJdmFsIHw9IENOVExfTENEQlBQ ODsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJLyoKKwkJICogUEwxMTAgY2Fubm90IGNob29zZSBi ZXR3ZWVuIDU1NTEgYW5kIDU2NSBtb2RlcyBpbiBpdHMKKwkJICogY29udHJvbCByZWdpc3Rlci4g IEl0IGlzIHBvc3NpYmxlIHRvIHVzZSA1NjUgd2l0aAorCQkgKiBjdXN0b20gZXh0ZXJuYWwgd2ly aW5nLgorCQkgKi8KKwkJaWYgKGFtYmFfcGFydChmYi0+ZGV2KSA9PSAweDExMCB8fAorCQkgICAg dmFyLT5ncmVlbi5sZW5ndGggPT0gNSkKKwkJCXZhbCB8PSBDTlRMX0xDREJQUDE2OworCQllbHNl IGlmICh2YXItPmdyZWVuLmxlbmd0aCA9PSA2KQorCQkJdmFsIHw9IENOVExfTENEQlBQMTZfNTY1 OworCQllbHNlCisJCQl2YWwgfD0gQ05UTF9MQ0RCUFAxNl80NDQ7CisJCWJyZWFrOworCWNhc2Ug MzI6CisJCXZhbCB8PSBDTlRMX0xDREJQUDI0OworCQlicmVhazsKKwl9CisKKwlyZWdzLT5jbnRs ID0gdmFsOworCXJlZ3MtPnBpeGNsb2NrID0gdmFyLT5waXhjbG9jazsKK30KKworc3RhdGljIGlu bGluZSBpbnQgY2xjZGZiX2NoZWNrKHN0cnVjdCBjbGNkX2ZiICpmYiwgc3RydWN0IGZiX3Zhcl9z Y3JlZW5pbmZvICp2YXIpCit7CisJdmFyLT54cmVzX3ZpcnR1YWwgPSB2YXItPnhyZXMgPSAodmFy LT54cmVzICsgMTUpICYgfjE1OworCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzID0gKHZh ci0+eXJlcyArIDEpICYgfjE7CisKKyNkZWZpbmUgQ0hFQ0soZSxsLGgpICh2YXItPmUgPCBsIHx8 IHZhci0+ZSA+IGgpCisJaWYgKENIRUNLKHJpZ2h0X21hcmdpbiwgKDUrMSksIDI1NikgfHwJLyog YmFjayBwb3JjaCAqLworCSAgICBDSEVDSyhsZWZ0X21hcmdpbiwgKDUrMSksIDI1NikgfHwJLyog ZnJvbnQgcG9yY2ggKi8KKwkgICAgQ0hFQ0soaHN5bmNfbGVuLCAoNSsxKSwgMjU2KSB8fAorCSAg ICB2YXItPnhyZXMgPiA0MDk2IHx8CisJICAgIHZhci0+bG93ZXJfbWFyZ2luID4gMjU1IHx8CQkv KiBiYWNrIHBvcmNoICovCisJICAgIHZhci0+dXBwZXJfbWFyZ2luID4gMjU1IHx8CQkvKiBmcm9u dCBwb3JjaCAqLworCSAgICB2YXItPnZzeW5jX2xlbiA+IDMyIHx8CisJICAgIHZhci0+eXJlcyA+ IDEwMjQpCisJCXJldHVybiAtRUlOVkFMOworI3VuZGVmIENIRUNLCisKKwkvKiBzaW5nbGUgcGFu ZWwgbW9kZTogUENEID0gbWF4KFBDRCwgMSkgKi8KKwkvKiBkdWFsIHBhbmVsIG1vZGU6IFBDRCA9 IG1heChQQ0QsIDUpICovCisKKwkvKgorCSAqIFlvdSBjYW4ndCBjaGFuZ2UgdGhlIGdyYXlzY2Fs ZSBzZXR0aW5nLCBhbmQKKwkgKiB3ZSBjYW4gb25seSBkbyBub24taW50ZXJsYWNlZCB2aWRlby4K KwkgKi8KKwlpZiAodmFyLT5ncmF5c2NhbGUgIT0gZmItPmZiLnZhci5ncmF5c2NhbGUgfHwKKwkg ICAgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9NQVNLKSAhPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VE KQorCQlyZXR1cm4gLUVJTlZBTDsKKworI2RlZmluZSBDSEVDSyhlKSAodmFyLT5lICE9IGZiLT5m Yi52YXIuZSkKKwlpZiAoZmItPnBhbmVsLT5maXhlZHRpbWluZ3MgJiYKKwkgICAgKENIRUNLKHhy ZXMpCQl8fAorCSAgICAgQ0hFQ0soeXJlcykJCXx8CisJICAgICBDSEVDSyhiaXRzX3Blcl9waXhl bCkJfHwKKwkgICAgIENIRUNLKHBpeGNsb2NrKQkJfHwKKwkgICAgIENIRUNLKGxlZnRfbWFyZ2lu KQkJfHwKKwkgICAgIENIRUNLKHJpZ2h0X21hcmdpbikJfHwKKwkgICAgIENIRUNLKHVwcGVyX21h cmdpbikJfHwKKwkgICAgIENIRUNLKGxvd2VyX21hcmdpbikJfHwKKwkgICAgIENIRUNLKGhzeW5j X2xlbikJCXx8CisJICAgICBDSEVDSyh2c3luY19sZW4pCQl8fAorCSAgICAgQ0hFQ0soc3luYykp KQorCQlyZXR1cm4gLUVJTlZBTDsKKyN1bmRlZiBDSEVDSworCisJdmFyLT5ub25zdGQgPSAwOwor CXZhci0+YWNjZWxfZmxhZ3MgPSAwOworCisJcmV0dXJuIDA7Cit9Ci0tIAoyLjI4LjAuNjgxLmc2 Zjc3ZjY1YjRlLWdvb2cKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg== 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=-12.6 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 BFD13C4346E for ; Tue, 29 Sep 2020 07:14:34 +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 74B8720754 for ; Tue, 29 Sep 2020 07:14:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=google.com header.i=@google.com header.b="pt/131yI" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 74B8720754 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 08FC489BF3; Tue, 29 Sep 2020 07:14:28 +0000 (UTC) Received: from mail-qv1-xf4a.google.com (mail-qv1-xf4a.google.com [IPv6:2607:f8b0:4864:20::f4a]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0BA4089A76 for ; Mon, 28 Sep 2020 20:09:09 +0000 (UTC) Received: by mail-qv1-xf4a.google.com with SMTP id a20so1286706qvk.17 for ; Mon, 28 Sep 2020 13:09:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:message-id:mime-version:subject:from:to:cc :content-transfer-encoding; bh=vieAWHVSIXR5Uks+957/3es6cqNP+7WeNdcirDn1mSE=; b=pt/131yIrD3GaoaXQwMD0fJ0m/4F6XdxQLOSMtBjeE3b43OLUTgEjqLTj8IMA/scZI 8U8Lm08Z0zo9CGRrqjh6v72AuUGlcZNesdkGSCcn/h5dqLKwSlO5NwotvTT+Yx0s4e0W d448WFBlVTaX9xs+r/ADHJc65nj/59qLGDlbXjyvWcJbwCH48/4KgEV344aRBGT+D23S rroUCrCraa6l55coSWSGkphqClP/4hbDsfkhVuVODYo+xU9QMpqyWZGs81bsivZ1Xnqs 0WndvlnRoX5qIWJMDy1HkgSgiDv0GLdK69Ct26zFYhXfpf5OgqX2CjZO0vx8VdL97Y1x LrEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:message-id:mime-version:subject:from :to:cc:content-transfer-encoding; bh=vieAWHVSIXR5Uks+957/3es6cqNP+7WeNdcirDn1mSE=; b=jQvgJHTs/R/LH3Bmnd7AVpDHzbrO2/vykMdf5A8gEFJm0hGqR2EIjiSMYGUF2A28pX eRxYGPjW3pMrNRf3U3ymUvnQb+JOF2dp96XRlwLrtrV8CFWNyf/7ukZys56ibu2Z09ZD wItWGNKzdZz2U0RJWrQHWcXIrhICuCNJyoqofF+izOqDKfijEQ9foPtwB+1GzGUtoJIm 6wNDLazGJHW2+3velIiyIZ3ZvjAKlcXd+R9+FjbpyQfLJ/1xFcgPdDW3RuxI5b2B4L/A jyiSyiM2nrU8BxBWFDp0r2i4YoVnQ7+rtU8fQ0YHtONIB3obaIRInNuffV8kTqXwfMC1 XRCw== X-Gm-Message-State: AOAM530IZqrpxDeiDqEezqWHp1Ch5YwCNHaXCXiQNvNUrwii3bEhUzA5 Ym3UMKDWi4RHhgJlQzqmw/deQns= X-Google-Smtp-Source: ABdhPJy6kcDYOjcWggXsRFDxE2WMxbB2eNI972ifdYFAJ6XEq/IkHuVlpjem6cyeUFjgb2OxJpiYs/s= X-Received: from pcc-desktop.svl.corp.google.com ([2620:15c:2ce:0:7220:84ff:fe09:385a]) (user=pcc job=sendgmr) by 2002:a0c:fe49:: with SMTP id u9mr1177570qvs.40.1601323748679; Mon, 28 Sep 2020 13:09:08 -0700 (PDT) Date: Mon, 28 Sep 2020 13:08:56 -0700 Message-Id: <20200928200856.1897023-1-pcc@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.28.0.681.g6f77f65b4e-goog Subject: [PATCH] Revert "video: fbdev: amba-clcd: Retire elder CLCD driver" From: Peter Collingbourne To: Linus Walleij , Eric Anholt X-Mailman-Approved-At: Tue, 29 Sep 2020 07:12:58 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Collingbourne , Kevin Brodsky , Russell King , ML dri-devel , Sean Paul , Linux ARM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" QWxzbyByZXZlcnQgdGhlIGZvbGxvdy11cCBjaGFuZ2UgImRybTogcGwxMTE6IEFic29yYiB0aGUg ZXh0ZXJuYWwKcmVnaXN0ZXIgaGVhZGVyIi4KClRoaXMgcmV2ZXJ0cyBjb21taXRzIDdlNGU1ODlk Yjc2YTNjZjRjMWY1MzRlYjVhMDljYzY0MjI3NjZiOTMKYW5kIDBmYjgxMjU2MzVlOGViNTQ4M2Zi MDk1Zjk4ZGNmMDY1MTIwNmE3YjguCgpUaGUgZmJkZXYgZHJpdmVyIGlzIHVzZWQgYnkgQW5kcm9p ZCdzIEZWUCBjb25maWd1cmF0aW9uLiBVc2luZyB0aGUKRFJNIGRyaXZlciB0b2dldGhlciB3aXRo IERSTSdzIGZiZGV2IGVtdWxhdGlvbiByZXN1bHRzIGluIGEgZmFpbHVyZQp0byBib290IEFuZHJv aWQuIFRoZSByb290IGNhdXNlIGlzIHRoYXQgQW5kcm9pZCdzIGdlbmVyaWMgZmJkZXYKdXNlcnNw YWNlIGRyaXZlciByZWxpZXMgb24gdGhlIGFiaWxpdHkgdG8gc2V0IHRoZSBwaXhlbCBmb3JtYXQg dmlhCkZCSU9QVVRfVlNDUkVFTklORk8sIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZmJkZXYg ZW11bGF0aW9uLgoKVGhlcmUgaGF2ZSBiZWVuIG90aGVyIGxlc3MgY3JpdGljYWwgYmVoYXZpb3Jh bCBkaWZmZXJlbmNlcyBpZGVudGlmaWVkCmJldHdlZW4gdGhlIGZiZGV2IGRyaXZlciBhbmQgdGhl IERSTSBkcml2ZXIgd2l0aCBmYmRldiBlbXVsYXRpb24uIFRoZQpEUk0gZHJpdmVyIGV4cG9zZXMg ZGlmZmVyZW50IHZhbHVlcyBmb3IgdGhlIHBhbmVsJ3Mgd2lkdGgsIGhlaWdodCBhbmQKcmVmcmVz aCByYXRlLCBhbmQgdGhlIERSTSBkcml2ZXIgZmFpbHMgYSBGQklPUFVUX1ZTQ1JFRU5JTkZPIHN5 c2NhbGwKd2l0aCB5cmVzX3ZpcnR1YWwgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHN1cHBvcnRl ZCB2YWx1ZSBpbnN0ZWFkCm9mIGxldHRpbmcgdGhlIHN5c2NhbGwgc3VjY2VlZCBhbmQgc2V0dGlu ZyB5cmVzX3ZpcnR1YWwgYmFzZWQgb24geXJlcy4KClNpZ25lZC1vZmYtYnk6IFBldGVyIENvbGxp bmdib3VybmUgPHBjY0Bnb29nbGUuY29tPgotLS0KVmlldyB0aGlzIGNoYW5nZSBpbiBHZXJyaXQ6 IGh0dHBzOi8vbGludXgtcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20vcS9JMmQ3ZTU5YjBlNjkzZDlm ZWMyMDZkNDBkZjE5MGM1YWEwMjg0NGI1NgoKIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgNSArCiBkcml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwxMTFfZGVidWdmcy5j ICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rpc3BsYXkuYyAgIHwgICAx ICsKIGRyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV9kcm0uaCAgICAgICB8ICA3MyAtLQogZHJp dmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rydi5jICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1 L2RybS9wbDExMS9wbDExMV92ZXJzYXRpbGUuYyB8ICAgMSArCiBkcml2ZXJzL3ZpZGVvL2ZiZGV2 L0tjb25maWcgICAgICAgICAgICAgfCAgMjAgKwogZHJpdmVycy92aWRlby9mYmRldi9NYWtlZmls ZSAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvdmlkZW8vZmJkZXYvYW1iYS1jbGNkLmMgICAg ICAgICB8IDk4NiArKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvYW1iYS9j bGNkLXJlZ3MuaCAgICAgICAgICB8ICA4NyArKysKIGluY2x1ZGUvbGludXgvYW1iYS9jbGNkLmgg ICAgICAgICAgICAgICB8IDI5MCArKysrKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMzkzIGluc2Vy dGlvbnMoKyksIDczIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdmlk ZW8vZmJkZXYvYW1iYS1jbGNkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L2Ft YmEvY2xjZC1yZWdzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L2FtYmEvY2xj ZC5oCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAxOTBjN2Zh MmVhMDEuLjY3MWMxZmE3OWU2NCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRB SU5FUlMKQEAgLTE0NjAsNiArMTQ2MCwxMSBAQCBTOglPZGQgRml4ZXMKIEY6CWRyaXZlcnMvYW1i YS8KIEY6CWluY2x1ZGUvbGludXgvYW1iYS9idXMuaAogCitBUk0gUFJJTUVDRUxMIENMQ0QgUEwx MTAgRFJJVkVSCitNOglSdXNzZWxsIEtpbmcgPGxpbnV4QGFybWxpbnV4Lm9yZy51az4KK1M6CU9k ZCBGaXhlcworRjoJZHJpdmVycy92aWRlby9mYmRldi9hbWJhLWNsY2QuKgorCiBBUk0gUFJJTUVD RUxMIEtNSSBQTDA1MCBEUklWRVIKIE06CVJ1c3NlbGwgS2luZyA8bGludXhAYXJtbGludXgub3Jn LnVrPgogUzoJT2RkIEZpeGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwx MTFfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2RlYnVnZnMuYwppbmRl eCAzMTdmNjhhYmYxOGIuLjI2Y2E4Y2RmM2U2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L3BsMTExL3BsMTExX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwxMTFf ZGVidWdmcy5jCkBAIC0zLDYgKzMsNyBAQAogICogIENvcHlyaWdodCDCqSAyMDE3IEJyb2FkY29t CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2FtYmEvY2xjZC1yZWdzLmg+CiAjaW5jbHVkZSA8bGlu dXgvc2VxX2ZpbGUuaD4KIAogI2luY2x1ZGUgPGRybS9kcm1fZGVidWdmcy5oPgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9wbDExMS9wbDExMV9kaXNwbGF5LmMKaW5kZXggYjNlODY5N2NhZmNmLi43MDNkZGM4MDNjNTUg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV9kaXNwbGF5LmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rpc3BsYXkuYwpAQCAtOSw2ICs5LDcgQEAKICAq IENvcHlyaWdodCAoQykgMjAxMSBUZXhhcyBJbnN0cnVtZW50cwogICovCiAKKyNpbmNsdWRlIDxs aW51eC9hbWJhL2NsY2QtcmVncy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUg PGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2RybS5oIGIvZHJpdmVycy9ncHUvZHJtL3BsMTEx L3BsMTExX2RybS5oCmluZGV4IDJhNDZiNWJkODU3Ni4uYmEzOTliY2I3OTJmIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwxMTFfZHJtLmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L3BsMTExL3BsMTExX2RybS5oCkBAIC0yMyw3OSArMjMsNiBAQAogI2luY2x1ZGUgPGRybS9kcm1f cGFuZWwuaD4KICNpbmNsdWRlIDxkcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmg+CiAKLS8qCi0g KiBDTENEIENvbnRyb2xsZXIgSW50ZXJuYWwgUmVnaXN0ZXIgYWRkcmVzc2VzCi0gKi8KLSNkZWZp bmUgQ0xDRF9USU0wCQkweDAwMDAwMDAwCi0jZGVmaW5lIENMQ0RfVElNMQkJMHgwMDAwMDAwNAot I2RlZmluZSBDTENEX1RJTTIJCTB4MDAwMDAwMDgKLSNkZWZpbmUgQ0xDRF9USU0zCQkweDAwMDAw MDBjCi0jZGVmaW5lIENMQ0RfVUJBUwkJMHgwMDAwMDAxMAotI2RlZmluZSBDTENEX0xCQVMJCTB4 MDAwMDAwMTQKLQotI2RlZmluZSBDTENEX1BMMTEwX0lFTkIJCTB4MDAwMDAwMTgKLSNkZWZpbmUg Q0xDRF9QTDExMF9DTlRMCQkweDAwMDAwMDFjCi0jZGVmaW5lIENMQ0RfUEwxMTBfU1RBVAkJMHgw MDAwMDAyMAotI2RlZmluZSBDTENEX1BMMTEwX0lOVFIJCTB4MDAwMDAwMjQKLSNkZWZpbmUgQ0xD RF9QTDExMF9VQ1VSCQkweDAwMDAwMDI4Ci0jZGVmaW5lIENMQ0RfUEwxMTBfTENVUgkJMHgwMDAw MDAyQwotCi0jZGVmaW5lIENMQ0RfUEwxMTFfQ05UTAkJMHgwMDAwMDAxOAotI2RlZmluZSBDTENE X1BMMTExX0lFTkIJCTB4MDAwMDAwMWMKLSNkZWZpbmUgQ0xDRF9QTDExMV9SSVMJCTB4MDAwMDAw MjAKLSNkZWZpbmUgQ0xDRF9QTDExMV9NSVMJCTB4MDAwMDAwMjQKLSNkZWZpbmUgQ0xDRF9QTDEx MV9JQ1IJCTB4MDAwMDAwMjgKLSNkZWZpbmUgQ0xDRF9QTDExMV9VQ1VSCQkweDAwMDAwMDJjCi0j ZGVmaW5lIENMQ0RfUEwxMTFfTENVUgkJMHgwMDAwMDAzMAotCi0jZGVmaW5lIENMQ0RfUEFMTAkJ MHgwMDAwMDIwMAotI2RlZmluZSBDTENEX1BBTEVUVEUJCTB4MDAwMDAyMDAKLQotI2RlZmluZSBU SU0yX1BDRF9MT19NQVNLCUdFTk1BU0soNCwgMCkKLSNkZWZpbmUgVElNMl9QQ0RfTE9fQklUUwk1 Ci0jZGVmaW5lIFRJTTJfQ0xLU0VMCQkoMSA8PCA1KQotI2RlZmluZSBUSU0yX0FDQl9NQVNLCQlH RU5NQVNLKDEwLCA2KQotI2RlZmluZSBUSU0yX0lWUwkJKDEgPDwgMTEpCi0jZGVmaW5lIFRJTTJf SUhTCQkoMSA8PCAxMikKLSNkZWZpbmUgVElNMl9JUEMJCSgxIDw8IDEzKQotI2RlZmluZSBUSU0y X0lPRQkJKDEgPDwgMTQpCi0jZGVmaW5lIFRJTTJfQkNECQkoMSA8PCAyNikKLSNkZWZpbmUgVElN Ml9QQ0RfSElfTUFTSwlHRU5NQVNLKDMxLCAyNykKLSNkZWZpbmUgVElNMl9QQ0RfSElfQklUUwk1 Ci0jZGVmaW5lIFRJTTJfUENEX0hJX1NISUZUCTI3Ci0KLSNkZWZpbmUgQ05UTF9MQ0RFTgkJKDEg PDwgMCkKLSNkZWZpbmUgQ05UTF9MQ0RCUFAxCQkoMCA8PCAxKQotI2RlZmluZSBDTlRMX0xDREJQ UDIJCSgxIDw8IDEpCi0jZGVmaW5lIENOVExfTENEQlBQNAkJKDIgPDwgMSkKLSNkZWZpbmUgQ05U TF9MQ0RCUFA4CQkoMyA8PCAxKQotI2RlZmluZSBDTlRMX0xDREJQUDE2CQkoNCA8PCAxKQotI2Rl ZmluZSBDTlRMX0xDREJQUDE2XzU2NQkoNiA8PCAxKQotI2RlZmluZSBDTlRMX0xDREJQUDE2XzQ0 NAkoNyA8PCAxKQotI2RlZmluZSBDTlRMX0xDREJQUDI0CQkoNSA8PCAxKQotI2RlZmluZSBDTlRM X0xDREJXCQkoMSA8PCA0KQotI2RlZmluZSBDTlRMX0xDRFRGVAkJKDEgPDwgNSkKLSNkZWZpbmUg Q05UTF9MQ0RNT05POAkJKDEgPDwgNikKLSNkZWZpbmUgQ05UTF9MQ0REVUFMCQkoMSA8PCA3KQot I2RlZmluZSBDTlRMX0JHUgkJKDEgPDwgOCkKLSNkZWZpbmUgQ05UTF9CRUJPCQkoMSA8PCA5KQot I2RlZmluZSBDTlRMX0JFUE8JCSgxIDw8IDEwKQotI2RlZmluZSBDTlRMX0xDRFBXUgkJKDEgPDwg MTEpCi0jZGVmaW5lIENOVExfTENEVkNPTVAoeCkJKCh4KSA8PCAxMikKLSNkZWZpbmUgQ05UTF9M RE1BRklGT1RJTUUJKDEgPDwgMTUpCi0jZGVmaW5lIENOVExfV0FURVJNQVJLCQkoMSA8PCAxNikK LQotLyogU1QgTWljcm9lbGVjdHJvbmljcyB2YXJpYW50IGJpdHMgKi8KLSNkZWZpbmUgQ05UTF9T VF8xWEJQUF80NDQJMHgwCi0jZGVmaW5lIENOVExfU1RfMVhCUFBfNTU1MQkoMSA8PCAxNykKLSNk ZWZpbmUgQ05UTF9TVF8xWEJQUF81NjUJKDEgPDwgMTgpCi0jZGVmaW5lIENOVExfU1RfQ0RXSURf MTIJMHgwCi0jZGVmaW5lIENOVExfU1RfQ0RXSURfMTYJKDEgPDwgMTkpCi0jZGVmaW5lIENOVExf U1RfQ0RXSURfMTgJKDEgPDwgMjApCi0jZGVmaW5lIENOVExfU1RfQ0RXSURfMjQJKCgxIDw8IDE5 KSB8ICgxIDw8IDIwKSkKLSNkZWZpbmUgQ05UTF9TVF9DRUFFTgkJKDEgPDwgMjEpCi0jZGVmaW5l IENOVExfU1RfTENEQlBQMjRfUEFDS0VECSg2IDw8IDEpCi0KICNkZWZpbmUgQ0xDRF9JUlFfTkVY VEJBU0VfVVBEQVRFIEJJVCgyKQogCiBzdHJ1Y3QgZHJtX21pbm9yOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3BsMTExL3Bs MTExX2Rydi5jCmluZGV4IDk2ZTU4ZmRhNzVkOC4uZGEwYzM5ZGFlODc0IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwxMTFfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Bs MTExL3BsMTExX2Rydi5jCkBAIC00Nyw2ICs0Nyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4 L2FtYmEvYnVzLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9jbGNkLXJlZ3MuaD4KICNpbmNsdWRl IDxsaW51eC9kbWEtYnVmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8 bGludXgvb2YuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV92ZXJz YXRpbGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV92ZXJzYXRpbGUuYwppbmRleCBi ZGQ4ODNmNGYwZGEuLjExMjcwODJlOWE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Bs MTExL3BsMTExX3ZlcnNhdGlsZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV92 ZXJzYXRpbGUuYwpAQCAtOSw2ICs5LDcgQEAKICAqIE1ham9yIGNvbnRyaWJ1dGlvbnMgYW5kIGRp c2NvdmVyaWVzIGJ5IFJ1c3NlbGwgS2luZy4KICAqLwogCisjaW5jbHVkZSA8bGludXgvYW1iYS9j bGNkLXJlZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9k ZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CmRpZmYgLS1naXQgYS9kcml2 ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWcKaW5k ZXggYjJjOWRkNGYwY2I1Li40MDJlODU0NTBiYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8v ZmJkZXYvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWcKQEAgLTI3Miw2 ICsyNzIsMjYgQEAgY29uZmlnIEZCX1BNMl9GSUZPX0RJU0NPTk5FQ1QKIAloZWxwCiAJICBTdXBw b3J0IHRoZSBQZXJtZWRpYTIgRklGTyBkaXNjb25uZWN0IGZlYXR1cmUuCiAKK2NvbmZpZyBGQl9B Uk1DTENECisJdHJpc3RhdGUgIkFSTSBQcmltZUNlbGwgUEwxMTAgc3VwcG9ydCIKKwlkZXBlbmRz IG9uIEFSTSB8fCBBUk02NCB8fCBDT01QSUxFX1RFU1QKKwlkZXBlbmRzIG9uIEZCICYmIEFSTV9B TUJBICYmIEhBU19JT01FTQorCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZC X0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwlzZWxlY3QgRkJfTU9ERV9IRUxQ RVJTIGlmIE9GCisJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTIGlmIE9GCisJc2VsZWN0IEJBQ0tM SUdIVF9DTEFTU19ERVZJQ0UgaWYgT0YKKwloZWxwCisJICBUaGlzIGZyYW1lYnVmZmVyIGRldmlj ZSBkcml2ZXIgaXMgZm9yIHRoZSBBUk0gUHJpbWVDZWxsIFBMMTEwCisJICBDb2xvdXIgTENEIGNv bnRyb2xsZXIuICBBUk0gUHJpbWVDZWxscyBwcm92aWRlIHRoZSBidWlsZGluZworCSAgYmxvY2tz IGZvciBTeXN0ZW0gb24gYSBDaGlwIGRldmljZXMuCisKKwkgIElmIHlvdSB3YW50IHRvIGNvbXBp bGUgdGhpcyBhcyBhIG1vZHVsZSAoPWNvZGUgd2hpY2ggY2FuIGJlCisJICBpbnNlcnRlZCBpbnRv IGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsKSwgc2F5IE0KKwkgIGhlcmUgYW5k IHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy5yc3Q+LiAgVGhlIG1vZHVs ZQorCSAgd2lsbCBiZSBjYWxsZWQgYW1iYS1jbGNkLgorCiBjb25maWcgRkJfQUNPUk4KIAlib29s ICJBY29ybiBWSURDIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBBUk0gJiYgQVJD SF9BQ09STgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9NYWtlZmlsZSBiL2RyaXZl cnMvdmlkZW8vZmJkZXYvTWFrZWZpbGUKaW5kZXggY2FkNGZiNjQ0NDJhLi5hMDcwNWI5OWU2NDMg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92 aWRlby9mYmRldi9NYWtlZmlsZQpAQCAtNzUsNiArNzUsNyBAQCBvYmotJChDT05GSUdfRkJfSElU KSAgICAgICAgICAgICAgKz0gaGl0ZmIubwogb2JqLSQoQ09ORklHX0ZCX0FUTUVMKQkJICArPSBh dG1lbF9sY2RmYi5vCiBvYmotJChDT05GSUdfRkJfUFZSMikgICAgICAgICAgICAgKz0gcHZyMmZi Lm8KIG9iai0kKENPTkZJR19GQl9WT09ET08xKSAgICAgICAgICArPSBzc3RmYi5vCitvYmotJChD T05GSUdfRkJfQVJNQ0xDRCkJICArPSBhbWJhLWNsY2Qubwogb2JqLSQoQ09ORklHX0ZCX0dPTERG SVNIKSAgICAgICAgICs9IGdvbGRmaXNoZmIubwogb2JqLSQoQ09ORklHX0ZCXzY4MzI4KSAgICAg ICAgICAgICs9IDY4MzI4ZmIubwogb2JqLSQoQ09ORklHX0ZCX0dCRSkgICAgICAgICAgICAgICs9 IGdiZWZiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvYW1iYS1jbGNkLmMgYi9k cml2ZXJzL3ZpZGVvL2ZiZGV2L2FtYmEtY2xjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uYjc2ODJkZTQxMmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92 aWRlby9mYmRldi9hbWJhLWNsY2QuYwpAQCAtMCwwICsxLDk4NiBAQAorLyoKKyAqICBsaW51eC9k cml2ZXJzL3ZpZGVvL2FtYmEtY2xjZC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEFSTSBM aW1pdGVkLCBieSBEYXZpZCBBIFJ1c2xpbmcKKyAqIFVwZGF0ZWQgdG8gMi41LCBEZWVwIEJsdWUg U29sdXRpb25zIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMg YW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNl ZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUK KyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIEFSTSBQcmltZUNlbGwgUEwxMTAgQ29sb3Ig TENEIENvbnRyb2xsZXIKKyAqLworI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisjaW5jbHVk ZSA8bGludXgvYW1iYS9jbGNkLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5j bHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxs aW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGlu dXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2xp c3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgor I2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5o PgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNp bmNsdWRlIDx2aWRlby9kaXNwbGF5X3RpbWluZy5oPgorI2luY2x1ZGUgPHZpZGVvL29mX2Rpc3Bs YXlfdGltaW5nLmg+CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+CisKKyNkZWZpbmUgdG9f Y2xjZChpbmZvKQljb250YWluZXJfb2YoaW5mbywgc3RydWN0IGNsY2RfZmIsIGZiKQorCisvKiBU aGlzIGlzIGxpbWl0ZWQgdG8gMTYgY2hhcmFjdGVycyB3aGVuIGRpc3BsYXllZCBieSBYIHN0YXJ0 dXAgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjbGNkX25hbWUgPSAiQ0xDRCBGQiI7CisKKy8qCisg KiBVbmZvcnR1bmF0ZWx5LCB0aGUgZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25zIG1heSBiZSBjYWxs ZWQgZWl0aGVyIGZyb20KKyAqIHByb2Nlc3Mgb3IgSVJRIGNvbnRleHQsIGFuZCB3ZSBfbmVlZF8g dG8gZGVsYXkuICBUaGlzIGlzIF9ub3RfIGdvb2QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBj bGNkZmJfc2xlZXAodW5zaWduZWQgaW50IG1zKQoreworCWlmIChpbl9hdG9taWMoKSkgeworCQlt ZGVsYXkobXMpOworCX0gZWxzZSB7CisJCW1zbGVlcChtcyk7CisJfQorfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgY2xjZGZiX3NldF9zdGFydChzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJdW5zaWdu ZWQgbG9uZyB1c3RhcnQgPSBmYi0+ZmIuZml4LnNtZW1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBs c3RhcnQ7CisKKwl1c3RhcnQgKz0gZmItPmZiLnZhci55b2Zmc2V0ICogZmItPmZiLmZpeC5saW5l X2xlbmd0aDsKKwlsc3RhcnQgPSB1c3RhcnQgKyBmYi0+ZmIudmFyLnlyZXMgKiBmYi0+ZmIuZml4 LmxpbmVfbGVuZ3RoIC8gMjsKKworCXdyaXRlbCh1c3RhcnQsIGZiLT5yZWdzICsgQ0xDRF9VQkFT KTsKKwl3cml0ZWwobHN0YXJ0LCBmYi0+cmVncyArIENMQ0RfTEJBUyk7Cit9CisKK3N0YXRpYyB2 b2lkIGNsY2RmYl9kaXNhYmxlKHN0cnVjdCBjbGNkX2ZiICpmYikKK3sKKwl1MzIgdmFsOworCisJ aWYgKGZiLT5ib2FyZC0+ZGlzYWJsZSkKKwkJZmItPmJvYXJkLT5kaXNhYmxlKGZiKTsKKworCWlm IChmYi0+cGFuZWwtPmJhY2tsaWdodCkgeworCQlmYi0+cGFuZWwtPmJhY2tsaWdodC0+cHJvcHMu cG93ZXIgPSBGQl9CTEFOS19QT1dFUkRPV047CisJCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGZi LT5wYW5lbC0+YmFja2xpZ2h0KTsKKwl9CisKKwl2YWwgPSByZWFkbChmYi0+cmVncyArIGZiLT5v ZmZfY250bCk7CisJaWYgKHZhbCAmIENOVExfTENEUFdSKSB7CisJCXZhbCAmPSB+Q05UTF9MQ0RQ V1I7CisJCXdyaXRlbCh2YWwsIGZiLT5yZWdzICsgZmItPm9mZl9jbnRsKTsKKworCQljbGNkZmJf c2xlZXAoMjApOworCX0KKwlpZiAodmFsICYgQ05UTF9MQ0RFTikgeworCQl2YWwgJj0gfkNOVExf TENERU47CisJCXdyaXRlbCh2YWwsIGZiLT5yZWdzICsgZmItPm9mZl9jbnRsKTsKKwl9CisKKwkv KgorCSAqIERpc2FibGUgQ0xDRCBjbG9jayBzb3VyY2UuCisJICovCisJaWYgKGZiLT5jbGtfZW5h YmxlZCkgeworCQlmYi0+Y2xrX2VuYWJsZWQgPSBmYWxzZTsKKwkJY2xrX2Rpc2FibGUoZmItPmNs ayk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjbGNkZmJfZW5hYmxlKHN0cnVjdCBjbGNkX2ZiICpm YiwgdTMyIGNudGwpCit7CisJLyoKKwkgKiBFbmFibGUgdGhlIENMQ0QgY2xvY2sgc291cmNlLgor CSAqLworCWlmICghZmItPmNsa19lbmFibGVkKSB7CisJCWZiLT5jbGtfZW5hYmxlZCA9IHRydWU7 CisJCWNsa19lbmFibGUoZmItPmNsayk7CisJfQorCisJLyoKKwkgKiBCcmluZyB1cCBieSBmaXJz dCBlbmFibGluZy4uCisJICovCisJY250bCB8PSBDTlRMX0xDREVOOworCXdyaXRlbChjbnRsLCBm Yi0+cmVncyArIGZiLT5vZmZfY250bCk7CisKKwljbGNkZmJfc2xlZXAoMjApOworCisJLyoKKwkg KiBhbmQgbm93IGFwcGx5IHBvd2VyLgorCSAqLworCWNudGwgfD0gQ05UTF9MQ0RQV1I7CisJd3Jp dGVsKGNudGwsIGZiLT5yZWdzICsgZmItPm9mZl9jbnRsKTsKKworCS8qCisJICogVHVybiBvbiBi YWNrbGlnaHQKKwkgKi8KKwlpZiAoZmItPnBhbmVsLT5iYWNrbGlnaHQpIHsKKwkJZmItPnBhbmVs LT5iYWNrbGlnaHQtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwkJYmFja2xpZ2h0 X3VwZGF0ZV9zdGF0dXMoZmItPnBhbmVsLT5iYWNrbGlnaHQpOworCX0KKworCS8qCisJICogZmlu YWxseSwgZW5hYmxlIHRoZSBpbnRlcmZhY2UuCisJICovCisJaWYgKGZiLT5ib2FyZC0+ZW5hYmxl KQorCQlmYi0+Ym9hcmQtPmVuYWJsZShmYik7Cit9CisKK3N0YXRpYyBpbnQKK2NsY2RmYl9zZXRf Yml0ZmllbGRzKHN0cnVjdCBjbGNkX2ZiICpmYiwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2 YXIpCit7CisJdTMyIGNhcHM7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZmItPnBhbmVsLT5jYXBz ICYmIGZiLT5ib2FyZC0+Y2FwcykKKwkJY2FwcyA9IGZiLT5wYW5lbC0+Y2FwcyAmIGZiLT5ib2Fy ZC0+Y2FwczsKKwllbHNlIHsKKwkJLyogT2xkIHdheSBvZiBzcGVjaWZ5aW5nIHdoYXQgY2FuIGJl IHVzZWQgKi8KKwkJY2FwcyA9IGZiLT5wYW5lbC0+Y250bCAmIENOVExfQkdSID8KKwkJCUNMQ0Rf Q0FQX0JHUiA6IENMQ0RfQ0FQX1JHQjsKKwkJLyogQnV0IG1hc2sgb3V0IDQ0NCBtb2RlcyBhcyB0 aGV5IHdlcmVuJ3Qgc3VwcG9ydGVkICovCisJCWNhcHMgJj0gfkNMQ0RfQ0FQXzQ0NDsKKwl9CisK KwkvKiBPbmx5IFRGVCBwYW5lbHMgY2FuIGRvIFJHQjg4OC9CR1I4ODggKi8KKwlpZiAoIShmYi0+ cGFuZWwtPmNudGwgJiBDTlRMX0xDRFRGVCkpCisJCWNhcHMgJj0gfkNMQ0RfQ0FQXzg4ODsKKwor CW1lbXNldCgmdmFyLT50cmFuc3AsIDAsIHNpemVvZih2YXItPnRyYW5zcCkpOworCisJdmFyLT5y ZWQubXNiX3JpZ2h0ID0gMDsKKwl2YXItPmdyZWVuLm1zYl9yaWdodCA9IDA7CisJdmFyLT5ibHVl Lm1zYl9yaWdodCA9IDA7CisKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNl IDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwljYXNlIDg6CisJCS8qIElmIHdlIGNhbid0IGRvIDU1 NTEsIHJlamVjdCAqLworCQljYXBzICY9IENMQ0RfQ0FQXzU1NTE7CisJCWlmICghY2Fwcykgewor CQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJdmFyLT5yZWQubGVuZ3RoCQk9 IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCXZhci0+cmVkLm9mZnNldAkJPSAwOworCQl2YXItPmdy ZWVuLmxlbmd0aAk9IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCXZhci0+Z3JlZW4ub2Zmc2V0CT0g MDsKKwkJdmFyLT5ibHVlLmxlbmd0aAk9IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCXZhci0+Ymx1 ZS5vZmZzZXQJPSAwOworCQlicmVhazsKKworCWNhc2UgMTY6CisJCS8qIElmIHdlIGNhbid0IGRv IDQ0NCwgNTU1MSBvciA1NjUsIHJlamVjdCAqLworCQlpZiAoIShjYXBzICYgKENMQ0RfQ0FQXzQ0 NCB8IENMQ0RfQ0FQXzU1NTEgfCBDTENEX0NBUF81NjUpKSkgeworCQkJcmV0ID0gLUVJTlZBTDsK KwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogR3JlZW4gbGVuZ3RoIGNhbiBiZSA0LCA1IG9y IDYgZGVwZW5kaW5nIHdoZXRoZXIKKwkJICogd2UncmUgb3BlcmF0aW5nIGluIDQ0NCwgNTU1MSBv ciA1NjUgbW9kZS4KKwkJICovCisJCWlmICh2YXItPmdyZWVuLmxlbmd0aCA9PSA0ICYmIGNhcHMg JiBDTENEX0NBUF80NDQpCisJCQljYXBzICY9IENMQ0RfQ0FQXzQ0NDsKKwkJaWYgKHZhci0+Z3Jl ZW4ubGVuZ3RoID09IDUgJiYgY2FwcyAmIENMQ0RfQ0FQXzU1NTEpCisJCQljYXBzICY9IENMQ0Rf Q0FQXzU1NTE7CisJCWVsc2UgaWYgKHZhci0+Z3JlZW4ubGVuZ3RoID09IDYgJiYgY2FwcyAmIENM Q0RfQ0FQXzU2NSkKKwkJCWNhcHMgJj0gQ0xDRF9DQVBfNTY1OworCQllbHNlIHsKKwkJCS8qCisJ CQkgKiBQTDExMCBvZmZpY2lhbGx5IG9ubHkgc3VwcG9ydHMgUkdCNTU1LAorCQkJICogYnV0IG1h eSBiZSB3aXJlZCB1cCB0byBhbGxvdyBSR0I1NjUuCisJCQkgKi8KKwkJCWlmIChjYXBzICYgQ0xD RF9DQVBfNTY1KSB7CisJCQkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OworCQkJCWNhcHMgJj0gQ0xD RF9DQVBfNTY1OworCQkJfSBlbHNlIGlmIChjYXBzICYgQ0xDRF9DQVBfNTU1MSkgeworCQkJCXZh ci0+Z3JlZW4ubGVuZ3RoID0gNTsKKwkJCQljYXBzICY9IENMQ0RfQ0FQXzU1NTE7CisJCQl9IGVs c2UgeworCQkJCXZhci0+Z3JlZW4ubGVuZ3RoID0gNDsKKwkJCQljYXBzICY9IENMQ0RfQ0FQXzQ0 NDsKKwkJCX0KKwkJfQorCisJCWlmICh2YXItPmdyZWVuLmxlbmd0aCA+PSA1KSB7CisJCQl2YXIt PnJlZC5sZW5ndGggPSA1OworCQkJdmFyLT5ibHVlLmxlbmd0aCA9IDU7CisJCX0gZWxzZSB7CisJ CQl2YXItPnJlZC5sZW5ndGggPSA0OworCQkJdmFyLT5ibHVlLmxlbmd0aCA9IDQ7CisJCX0KKwkJ YnJlYWs7CisJY2FzZSAzMjoKKwkJLyogSWYgd2UgY2FuJ3QgZG8gODg4LCByZWplY3QgKi8KKwkJ Y2FwcyAmPSBDTENEX0NBUF84ODg7CisJCWlmICghY2FwcykgeworCQkJcmV0ID0gLUVJTlZBTDsK KwkJCWJyZWFrOworCQl9CisKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5ncmVlbi5s ZW5ndGggPSA4OworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiA+PSAxNmJwcCBkaXNw bGF5cyBoYXZlIHNlcGFyYXRlIGNvbG91ciBjb21wb25lbnQgYml0ZmllbGRzCisJICogZW5jb2Rl ZCBpbiB0aGUgcGl4ZWwgZGF0YS4gIENhbGN1bGF0ZSB0aGVpciBwb3NpdGlvbiBmcm9tCisJICog dGhlIGJpdGZpZWxkIGxlbmd0aCBkZWZpbmVkIGFib3ZlLgorCSAqLworCWlmIChyZXQgPT0gMCAm JiB2YXItPmJpdHNfcGVyX3BpeGVsID49IDE2KSB7CisJCWJvb2wgYmdyLCByZ2I7CisKKwkJYmdy ID0gY2FwcyAmIENMQ0RfQ0FQX0JHUiAmJiB2YXItPmJsdWUub2Zmc2V0ID09IDA7CisJCXJnYiA9 IGNhcHMgJiBDTENEX0NBUF9SR0IgJiYgdmFyLT5yZWQub2Zmc2V0ID09IDA7CisKKwkJaWYgKCFi Z3IgJiYgIXJnYikKKwkJCS8qCisJCQkgKiBUaGUgcmVxdWVzdGVkIGZvcm1hdCB3YXMgbm90IHBv c3NpYmxlLCB0cnkganVzdAorCQkJICogb3VyIGNhcGFiaWxpdGllcy4gIE9uZSBvZiBCR1Igb3Ig UkdCIG11c3QgYmUKKwkJCSAqIHN1cHBvcnRlZC4KKwkJCSAqLworCQkJYmdyID0gY2FwcyAmIENM Q0RfQ0FQX0JHUjsKKworCQlpZiAoYmdyKSB7CisJCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJ CXZhci0+Z3JlZW4ub2Zmc2V0ID0gdmFyLT5ibHVlLm9mZnNldCArIHZhci0+Ymx1ZS5sZW5ndGg7 CisJCQl2YXItPnJlZC5vZmZzZXQgPSB2YXItPmdyZWVuLm9mZnNldCArIHZhci0+Z3JlZW4ubGVu Z3RoOworCQl9IGVsc2UgeworCQkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKKwkJCXZhci0+Z3JlZW4u b2Zmc2V0ID0gdmFyLT5yZWQub2Zmc2V0ICsgdmFyLT5yZWQubGVuZ3RoOworCQkJdmFyLT5ibHVl Lm9mZnNldCA9IHZhci0+Z3JlZW4ub2Zmc2V0ICsgdmFyLT5ncmVlbi5sZW5ndGg7CisJCX0KKwl9 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNsY2RmYl9jaGVja192YXIoc3RydWN0 IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVj dCBjbGNkX2ZiICpmYiA9IHRvX2NsY2QoaW5mbyk7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlp ZiAoZmItPmJvYXJkLT5jaGVjaykKKwkJcmV0ID0gZmItPmJvYXJkLT5jaGVjayhmYiwgdmFyKTsK KworCWlmIChyZXQgPT0gMCAmJgorCSAgICB2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19w ZXJfcGl4ZWwgLyA4ICoKKwkgICAgdmFyLT55cmVzX3ZpcnR1YWwgPiBmYi0+ZmIuZml4LnNtZW1f bGVuKQorCQlyZXQgPSAtRUlOVkFMOworCisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBjbGNkZmJf c2V0X2JpdGZpZWxkcyhmYiwgdmFyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQg Y2xjZGZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNsY2RfZmIg KmZiID0gdG9fY2xjZChpbmZvKTsKKwlzdHJ1Y3QgY2xjZF9yZWdzIHJlZ3M7CisKKwlmYi0+ZmIu Zml4LmxpbmVfbGVuZ3RoID0gZmItPmZiLnZhci54cmVzX3ZpcnR1YWwgKgorCQkJCSBmYi0+ZmIu dmFyLmJpdHNfcGVyX3BpeGVsIC8gODsKKworCWlmIChmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVs IDw9IDgpCisJCWZiLT5mYi5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOworCWVs c2UKKwkJZmItPmZiLmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCisJZmItPmJv YXJkLT5kZWNvZGUoZmIsICZyZWdzKTsKKworCWNsY2RmYl9kaXNhYmxlKGZiKTsKKworCXdyaXRl bChyZWdzLnRpbTAsIGZiLT5yZWdzICsgQ0xDRF9USU0wKTsKKwl3cml0ZWwocmVncy50aW0xLCBm Yi0+cmVncyArIENMQ0RfVElNMSk7CisJd3JpdGVsKHJlZ3MudGltMiwgZmItPnJlZ3MgKyBDTENE X1RJTTIpOworCXdyaXRlbChyZWdzLnRpbTMsIGZiLT5yZWdzICsgQ0xDRF9USU0zKTsKKworCWNs Y2RmYl9zZXRfc3RhcnQoZmIpOworCisJY2xrX3NldF9yYXRlKGZiLT5jbGssICgxMDAwMDAwMDAw IC8gcmVncy5waXhjbG9jaykgKiAxMDAwKTsKKworCWZiLT5jbGNkX2NudGwgPSByZWdzLmNudGw7 CisKKwljbGNkZmJfZW5hYmxlKGZiLCByZWdzLmNudGwpOworCisjaWZkZWYgREVCVUcKKwlwcmlu dGsoS0VSTl9JTkZPCisJICAgICAgICJDTENEOiBSZWdpc3RlcnMgc2V0IHRvXG4iCisJICAgICAg ICIgICUwOHggJTA4eCAlMDh4ICUwOHhcbiIKKwkgICAgICAgIiAgJTA4eCAlMDh4ICUwOHggJTA4 eFxuIiwKKwkJcmVhZGwoZmItPnJlZ3MgKyBDTENEX1RJTTApLCByZWFkbChmYi0+cmVncyArIENM Q0RfVElNMSksCisJCXJlYWRsKGZiLT5yZWdzICsgQ0xDRF9USU0yKSwgcmVhZGwoZmItPnJlZ3Mg KyBDTENEX1RJTTMpLAorCQlyZWFkbChmYi0+cmVncyArIENMQ0RfVUJBUyksIHJlYWRsKGZiLT5y ZWdzICsgQ0xDRF9MQkFTKSwKKwkJcmVhZGwoZmItPnJlZ3MgKyBmYi0+b2ZmX2llbmIpLCByZWFk bChmYi0+cmVncyArIGZiLT5vZmZfY250bCkpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGlubGluZSB1MzIgY29udmVydF9iaXRmaWVsZChpbnQgdmFsLCBzdHJ1Y3QgZmJfYml0 ZmllbGQgKmJmKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gKDEgPDwgYmYtPmxlbmd0aCkgLSAx OworCisJcmV0dXJuICh2YWwgPj4gKDE2IC0gYmYtPmxlbmd0aCkgJiBtYXNrKSA8PCBiZi0+b2Zm c2V0OworfQorCisvKgorICogIFNldCBhIHNpbmdsZSBjb2xvciByZWdpc3Rlci4gVGhlIHZhbHVl cyBzdXBwbGllZCBoYXZlIGEgMTYgYml0CisgKiAgbWFnbml0dWRlLiAgUmV0dXJuICE9IDAgZm9y IGludmFsaWQgcmVnbm8uCisgKi8KK3N0YXRpYyBpbnQKK2NsY2RmYl9zZXRjb2xyZWcodW5zaWdu ZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLCB1bnNpZ25lZCBpbnQgZ3JlZW4sCisJCSB1 bnNpZ25lZCBpbnQgYmx1ZSwgdW5zaWduZWQgaW50IHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmlu Zm8pCit7CisJc3RydWN0IGNsY2RfZmIgKmZiID0gdG9fY2xjZChpbmZvKTsKKworCWlmIChyZWdu byA8IDE2KQorCQlmYi0+Y21hcFtyZWdub10gPSBjb252ZXJ0X2JpdGZpZWxkKHRyYW5zcCwgJmZi LT5mYi52YXIudHJhbnNwKSB8CisJCQkJICBjb252ZXJ0X2JpdGZpZWxkKGJsdWUsICZmYi0+ZmIu dmFyLmJsdWUpIHwKKwkJCQkgIGNvbnZlcnRfYml0ZmllbGQoZ3JlZW4sICZmYi0+ZmIudmFyLmdy ZWVuKSB8CisJCQkJICBjb252ZXJ0X2JpdGZpZWxkKHJlZCwgJmZiLT5mYi52YXIucmVkKTsKKwor CWlmIChmYi0+ZmIuZml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfUFNFVURPQ09MT1IgJiYgcmVnbm8g PCAyNTYpIHsKKwkJaW50IGh3X3JlZyA9IENMQ0RfUEFMRVRURSArICgocmVnbm8gKiAyKSAmIH4z KTsKKwkJdTMyIHZhbCwgbWFzaywgbmV3dmFsOworCisJCW5ld3ZhbCAgPSAocmVkID4+IDExKSAg JiAweDAwMWY7CisJCW5ld3ZhbCB8PSAoZ3JlZW4gPj4gNikgJiAweDAzZTA7CisJCW5ld3ZhbCB8 PSAoYmx1ZSA+PiAxKSAgJiAweDdjMDA7CisKKwkJLyoKKwkJICogMy4yLjExOiBpZiB3ZSdyZSBj b25maWd1cmVkIGZvciBiaWcgZW5kaWFuCisJCSAqIGJ5dGUgb3JkZXIsIHRoZSBwYWxldHRlIGVu dHJpZXMgYXJlIHN3YXBwZWQuCisJCSAqLworCQlpZiAoZmItPmNsY2RfY250bCAmIENOVExfQkVC TykKKwkJCXJlZ25vIF49IDE7CisKKwkJaWYgKHJlZ25vICYgMSkgeworCQkJbmV3dmFsIDw8PSAx NjsKKwkJCW1hc2sgPSAweDAwMDBmZmZmOworCQl9IGVsc2UgeworCQkJbWFzayA9IDB4ZmZmZjAw MDA7CisJCX0KKworCQl2YWwgPSByZWFkbChmYi0+cmVncyArIGh3X3JlZykgJiBtYXNrOworCQl3 cml0ZWwodmFsIHwgbmV3dmFsLCBmYi0+cmVncyArIGh3X3JlZyk7CisJfQorCisJcmV0dXJuIHJl Z25vID4gMjU1OworfQorCisvKgorICogIEJsYW5rIHRoZSBzY3JlZW4gaWYgYmxhbmtfbW9kZSAh PSAwLCBlbHNlIHVuYmxhbmsuIElmIGJsYW5rID09IE5VTEwKKyAqICB0aGVuIHRoZSBjYWxsZXIg YmxhbmtzIGJ5IHNldHRpbmcgdGhlIENMVVQgKENvbG9yIExvb2sgVXAgVGFibGUpIHRvIGFsbAor ICogIGJsYWNrLiBSZXR1cm4gMCBpZiBibGFua2luZyBzdWNjZWVkZWQsICE9IDAgaWYgdW4tL2Js YW5raW5nIGZhaWxlZCBkdWUKKyAqICB0byBlLmcuIGEgdmlkZW8gbW9kZSB3aGljaCBkb2Vzbid0 IHN1cHBvcnQgaXQuIEltcGxlbWVudHMgVkVTQSBzdXNwZW5kCisgKiAgYW5kIHBvd2VyZG93biBt b2RlcyBvbiBoYXJkd2FyZSB0aGF0IHN1cHBvcnRzIGRpc2FibGluZyBoc3luYy92c3luYzoKKyAq ICAgIGJsYW5rX21vZGUgPT0gMjogc3VzcGVuZCB2c3luYworICogICAgYmxhbmtfbW9kZSA9PSAz OiBzdXNwZW5kIGhzeW5jCisgKiAgICBibGFua19tb2RlID09IDQ6IHBvd2VyZG93bgorICovCitz dGF0aWMgaW50IGNsY2RmYl9ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmlu Zm8pCit7CisJc3RydWN0IGNsY2RfZmIgKmZiID0gdG9fY2xjZChpbmZvKTsKKworCWlmIChibGFu a19tb2RlICE9IDApIHsKKwkJY2xjZGZiX2Rpc2FibGUoZmIpOworCX0gZWxzZSB7CisJCWNsY2Rm Yl9lbmFibGUoZmIsIGZiLT5jbGNkX2NudGwpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBjbGNkZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJICAgICAgIHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBjbGNkX2ZiICpmYiA9IHRvX2NsY2QoaW5m byk7CisJdW5zaWduZWQgbG9uZyBsZW4sIG9mZiA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElG VDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWxlbiA9IGluZm8tPmZpeC5zbWVtX2xlbjsKKwor CWlmIChvZmYgPD0gbGVuICYmIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCA8PSBsZW4gLSBv ZmYgJiYKKwkgICAgZmItPmJvYXJkLT5tbWFwKQorCQlyZXQgPSBmYi0+Ym9hcmQtPm1tYXAoZmIs IHZtYSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZiX29wcyBj bGNkZmJfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyCT0g Y2xjZGZiX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3Bhcgk9IGNsY2RmYl9zZXRfcGFyLAorCS5mYl9z ZXRjb2xyZWcJPSBjbGNkZmJfc2V0Y29scmVnLAorCS5mYl9ibGFuawk9IGNsY2RmYl9ibGFuaywK KwkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCT0gY2ZiX2NvcHlh cmVhLAorCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAorCS5mYl9tbWFwCT0gY2xjZGZi X21tYXAsCit9OworCitzdGF0aWMgaW50IGNsY2RmYl9yZWdpc3RlcihzdHJ1Y3QgY2xjZF9mYiAq ZmIpCit7CisJaW50IHJldDsKKworCS8qCisJICogQVJNIFBMMTExIGFsd2F5cyBoYXMgSUVOQiBh dCAweDFjOyBpdCdzIG9ubHkgUEwxMTAKKwkgKiB3aGljaCBpcyByZXZlcnNlZCBvbiBzb21lIHBs YXRmb3Jtcy4KKwkgKi8KKwlpZiAoYW1iYV9tYW5mKGZiLT5kZXYpID09IDB4NDEgJiYgYW1iYV9w YXJ0KGZiLT5kZXYpID09IDB4MTExKSB7CisJCWZiLT5vZmZfaWVuYiA9IENMQ0RfUEwxMTFfSUVO QjsKKwkJZmItPm9mZl9jbnRsID0gQ0xDRF9QTDExMV9DTlRMOworCX0gZWxzZSB7CisJCWZiLT5v ZmZfaWVuYiA9IENMQ0RfUEwxMTBfSUVOQjsKKwkJZmItPm9mZl9jbnRsID0gQ0xDRF9QTDExMF9D TlRMOworCX0KKworCWZiLT5jbGsgPSBjbGtfZ2V0KCZmYi0+ZGV2LT5kZXYsIE5VTEwpOworCWlm IChJU19FUlIoZmItPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihmYi0+Y2xrKTsKKwkJZ290byBv dXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmUoZmItPmNsayk7CisJaWYgKHJldCkKKwkJZ290 byBmcmVlX2NsazsKKworCWZiLT5mYi5kZXZpY2UJCT0gJmZiLT5kZXYtPmRldjsKKworCWZiLT5m Yi5maXgubW1pb19zdGFydAk9IGZiLT5kZXYtPnJlcy5zdGFydDsKKwlmYi0+ZmIuZml4Lm1taW9f bGVuCT0gcmVzb3VyY2Vfc2l6ZSgmZmItPmRldi0+cmVzKTsKKworCWZiLT5yZWdzID0gaW9yZW1h cChmYi0+ZmIuZml4Lm1taW9fc3RhcnQsIGZiLT5mYi5maXgubW1pb19sZW4pOworCWlmICghZmIt PnJlZ3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDTENEOiB1bmFibGUgdG8gcmVtYXAgcmVnaXN0 ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBjbGtfdW5wcmVwOworCX0KKworCWZi LT5mYi5mYm9wcwkJPSAmY2xjZGZiX29wczsKKwlmYi0+ZmIuZmxhZ3MJCT0gRkJJTkZPX0ZMQUdf REVGQVVMVDsKKwlmYi0+ZmIucHNldWRvX3BhbGV0dGUJPSBmYi0+Y21hcDsKKworCXN0cm5jcHko ZmItPmZiLmZpeC5pZCwgY2xjZF9uYW1lLCBzaXplb2YoZmItPmZiLmZpeC5pZCkpOworCWZiLT5m Yi5maXgudHlwZQkJPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJZmItPmZiLmZpeC50eXBlX2F1 eAk9IDA7CisJZmItPmZiLmZpeC54cGFuc3RlcAk9IDA7CisJZmItPmZiLmZpeC55cGFuc3RlcAk9 IDA7CisJZmItPmZiLmZpeC55d3JhcHN0ZXAJPSAwOworCWZiLT5mYi5maXguYWNjZWwJPSBGQl9B Q0NFTF9OT05FOworCisJZmItPmZiLnZhci54cmVzCQk9IGZiLT5wYW5lbC0+bW9kZS54cmVzOwor CWZiLT5mYi52YXIueXJlcwkJPSBmYi0+cGFuZWwtPm1vZGUueXJlczsKKwlmYi0+ZmIudmFyLnhy ZXNfdmlydHVhbAk9IGZiLT5wYW5lbC0+bW9kZS54cmVzOworCWZiLT5mYi52YXIueXJlc192aXJ0 dWFsCT0gZmItPnBhbmVsLT5tb2RlLnlyZXM7CisJZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9 IGZiLT5wYW5lbC0+YnBwOworCWZiLT5mYi52YXIuZ3JheXNjYWxlCT0gZmItPnBhbmVsLT5ncmF5 c2NhbGU7CisJZmItPmZiLnZhci5waXhjbG9jawk9IGZiLT5wYW5lbC0+bW9kZS5waXhjbG9jazsK KwlmYi0+ZmIudmFyLmxlZnRfbWFyZ2luCT0gZmItPnBhbmVsLT5tb2RlLmxlZnRfbWFyZ2luOwor CWZiLT5mYi52YXIucmlnaHRfbWFyZ2luCT0gZmItPnBhbmVsLT5tb2RlLnJpZ2h0X21hcmdpbjsK KwlmYi0+ZmIudmFyLnVwcGVyX21hcmdpbgk9IGZiLT5wYW5lbC0+bW9kZS51cHBlcl9tYXJnaW47 CisJZmItPmZiLnZhci5sb3dlcl9tYXJnaW4JPSBmYi0+cGFuZWwtPm1vZGUubG93ZXJfbWFyZ2lu OworCWZiLT5mYi52YXIuaHN5bmNfbGVuCT0gZmItPnBhbmVsLT5tb2RlLmhzeW5jX2xlbjsKKwlm Yi0+ZmIudmFyLnZzeW5jX2xlbgk9IGZiLT5wYW5lbC0+bW9kZS52c3luY19sZW47CisJZmItPmZi LnZhci5zeW5jCQk9IGZiLT5wYW5lbC0+bW9kZS5zeW5jOworCWZiLT5mYi52YXIudm1vZGUJPSBm Yi0+cGFuZWwtPm1vZGUudm1vZGU7CisJZmItPmZiLnZhci5hY3RpdmF0ZQk9IEZCX0FDVElWQVRF X05PVzsKKwlmYi0+ZmIudmFyLm5vbnN0ZAk9IDA7CisJZmItPmZiLnZhci5oZWlnaHQJPSBmYi0+ cGFuZWwtPmhlaWdodDsKKwlmYi0+ZmIudmFyLndpZHRoCT0gZmItPnBhbmVsLT53aWR0aDsKKwlm Yi0+ZmIudmFyLmFjY2VsX2ZsYWdzCT0gMDsKKworCWZiLT5mYi5tb25zcGVjcy5oZm1pbgk9IDA7 CisJZmItPmZiLm1vbnNwZWNzLmhmbWF4ICAgPSAxMDAwMDA7CisJZmItPmZiLm1vbnNwZWNzLnZm bWluCT0gMDsKKwlmYi0+ZmIubW9uc3BlY3MudmZtYXgJPSA0MDA7CisJZmItPmZiLm1vbnNwZWNz LmRjbGttaW4gPSAxMDAwMDAwOworCWZiLT5mYi5tb25zcGVjcy5kY2xrbWF4CT0gMTAwMDAwMDAw OworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgYml0ZmllbGRzIGFyZSBzZXQgYXBwcm9w cmlhdGVseS4KKwkgKi8KKwljbGNkZmJfc2V0X2JpdGZpZWxkcyhmYiwgJmZiLT5mYi52YXIpOwor CisJLyoKKwkgKiBBbGxvY2F0ZSBjb2xvdXJtYXAuCisJICovCisJcmV0ID0gZmJfYWxsb2NfY21h cCgmZmItPmZiLmNtYXAsIDI1NiwgMCk7CisJaWYgKHJldCkKKwkJZ290byB1bm1hcDsKKworCS8q CisJICogRW5zdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLgorCSAqLworCXdyaXRlbCgwLCBm Yi0+cmVncyArIGZiLT5vZmZfaWVuYik7CisKKwlmYl9zZXRfdmFyKCZmYi0+ZmIsICZmYi0+ZmIu dmFyKTsKKworCWRldl9pbmZvKCZmYi0+ZGV2LT5kZXYsICIlcyBoYXJkd2FyZSwgJXMgZGlzcGxh eVxuIiwKKwkgICAgICAgICBmYi0+Ym9hcmQtPm5hbWUsIGZiLT5wYW5lbC0+bW9kZS5uYW1lKTsK KworCXJldCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYi0+ZmIpOworCWlmIChyZXQgPT0gMCkK KwkJZ290byBvdXQ7CisKKwlwcmludGsoS0VSTl9FUlIgIkNMQ0Q6IGNhbm5vdCByZWdpc3RlciBm cmFtZWJ1ZmZlciAoJWQpXG4iLCByZXQpOworCisJZmJfZGVhbGxvY19jbWFwKCZmYi0+ZmIuY21h cCk7CisgdW5tYXA6CisJaW91bm1hcChmYi0+cmVncyk7CisgY2xrX3VucHJlcDoKKwljbGtfdW5w cmVwYXJlKGZiLT5jbGspOworIGZyZWVfY2xrOgorCWNsa19wdXQoZmItPmNsayk7Cisgb3V0Ogor CXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBpbnQgY2xjZGZiX29m X2dldF9kcGlfcGFuZWxfbW9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCXN0cnVjdCBj bGNkX3BhbmVsICpjbGNkX3BhbmVsKQoreworCWludCBlcnI7CisJc3RydWN0IGRpc3BsYXlfdGlt aW5nIHRpbWluZzsKKwlzdHJ1Y3QgdmlkZW9tb2RlIHZpZGVvOworCisJZXJyID0gb2ZfZ2V0X2Rp c3BsYXlfdGltaW5nKG5vZGUsICJwYW5lbC10aW1pbmciLCAmdGltaW5nKTsKKwlpZiAoZXJyKSB7 CisJCXByX2VycigiJXBPRjogcHJvYmxlbXMgcGFyc2luZyBwYW5lbC10aW1pbmcgKCVkKVxuIiwg bm9kZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl2aWRlb21vZGVfZnJvbV90aW1pbmco JnRpbWluZywgJnZpZGVvKTsKKworCWVyciA9IGZiX3ZpZGVvbW9kZV9mcm9tX3ZpZGVvbW9kZSgm dmlkZW8sICZjbGNkX3BhbmVsLT5tb2RlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJ LyogU2V0IHVwIHNvbWUgaW52ZXJzaW9uIGZsYWdzICovCisJaWYgKHRpbWluZy5mbGFncyAmIERJ U1BMQVlfRkxBR1NfUElYREFUQV9ORUdFREdFKQorCQljbGNkX3BhbmVsLT50aW0yIHw9IFRJTTJf SVBDOworCWVsc2UgaWYgKCEodGltaW5nLmZsYWdzICYgRElTUExBWV9GTEFHU19QSVhEQVRBX1BP U0VER0UpKQorCQkvKgorCQkgKiBUbyBwcmVzZXJ2ZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwg dGhlIElQQyAoaW52ZXJ0ZWQKKwkJICogcGl4ZWwgY2xvY2spIGZsYWcgbmVlZHMgdG8gYmUgc2V0 IG9uIGFueSBkaXNwbGF5IHRoYXQKKwkJICogZG9lc24ndCBleHBsaWNpdGx5IHNwZWNpZnkgdGhh dCB0aGUgcGl4ZWwgY2xvY2sgaXMKKwkJICogYWN0aXZlIG9uIHRoZSBuZWdhdGl2ZSBvciBwb3Np dGl2ZSBlZGdlLgorCQkgKi8KKwkJY2xjZF9wYW5lbC0+dGltMiB8PSBUSU0yX0lQQzsKKworCWlm ICh0aW1pbmcuZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0hTWU5DX0xPVykKKwkJY2xjZF9wYW5lbC0+ dGltMiB8PSBUSU0yX0lIUzsKKworCWlmICh0aW1pbmcuZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX1ZT WU5DX0xPVykKKwkJY2xjZF9wYW5lbC0+dGltMiB8PSBUSU0yX0lWUzsKKworCWlmICh0aW1pbmcu ZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0RFX0xPVykKKwkJY2xjZF9wYW5lbC0+dGltMiB8PSBUSU0y X0lPRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNsY2RmYl9zbnByaW50Zl9tb2Rl KGNoYXIgKmJ1ZiwgaW50IHNpemUsIHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUpCit7CisJcmV0 dXJuIHNucHJpbnRmKGJ1Ziwgc2l6ZSwgIiV1eCV1QCV1IiwgbW9kZS0+eHJlcywgbW9kZS0+eXJl cywKKwkJCW1vZGUtPnJlZnJlc2gpOworfQorCitzdGF0aWMgaW50IGNsY2RmYl9vZl9nZXRfYmFj a2xpZ2h0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgY2xjZF9wYW5lbCAqY2xj ZF9wYW5lbCkKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0OworCisJLyog TG9vayB1cCB0aGUgb3B0aW9uYWwgYmFja2xpZ2h0IGRldmljZSAqLworCWJhY2tsaWdodCA9IGRl dm1fb2ZfZmluZF9iYWNrbGlnaHQoZGV2KTsKKwlpZiAoSVNfRVJSKGJhY2tsaWdodCkpCisJCXJl dHVybiBQVFJfRVJSKGJhY2tsaWdodCk7CisKKwljbGNkX3BhbmVsLT5iYWNrbGlnaHQgPSBiYWNr bGlnaHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xjZGZiX29mX2dldF9tb2RlKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpwYW5lbCwKKwkJCSAgICAgIHN0 cnVjdCBjbGNkX3BhbmVsICpjbGNkX3BhbmVsKQoreworCWludCBlcnI7CisJc3RydWN0IGZiX3Zp ZGVvbW9kZSAqbW9kZTsKKwljaGFyICpuYW1lOworCWludCBsZW47CisKKwkvKiBPbmx5IGRpcmVj dGx5IGNvbm5lY3RlZCBEUEkgcGFuZWxzIHN1cHBvcnRlZCBmb3Igbm93ICovCisJaWYgKG9mX2Rl dmljZV9pc19jb21wYXRpYmxlKHBhbmVsLCAicGFuZWwtZHBpIikpCisJCWVyciA9IGNsY2RmYl9v Zl9nZXRfZHBpX3BhbmVsX21vZGUocGFuZWwsIGNsY2RfcGFuZWwpOworCWVsc2UKKwkJZXJyID0g LUVOT0VOVDsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCW1vZGUgPSAmY2xjZF9wYW5lbC0+ bW9kZTsKKworCWxlbiA9IGNsY2RmYl9zbnByaW50Zl9tb2RlKE5VTEwsIDAsIG1vZGUpOworCW5h bWUgPSBkZXZtX2t6YWxsb2MoZGV2LCBsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5hbWUp CisJCXJldHVybiAtRU5PTUVNOworCisJY2xjZGZiX3NucHJpbnRmX21vZGUobmFtZSwgbGVuICsg MSwgbW9kZSk7CisJbW9kZS0+bmFtZSA9IG5hbWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBjbGNkZmJfb2ZfaW5pdF90ZnRfcGFuZWwoc3RydWN0IGNsY2RfZmIgKmZiLCB1MzIgcjAs IHUzMiBnMCwgdTMyIGIwKQoreworCXN0YXRpYyBzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgcGFy dDsKKwkJdTMyIHIwLCBnMCwgYjA7CisJCXUzMiBjYXBzOworCX0gcGFuZWxzW10gPSB7CisJCXsg MHgxMTAsIDEsICA3LCAxMywgQ0xDRF9DQVBfNTU1MSB9LAorCQl7IDB4MTEwLCAwLCAgOCwgMTYs IENMQ0RfQ0FQXzg4OCB9LAorCQl7IDB4MTEwLCAxNiwgOCwgMCwgIENMQ0RfQ0FQXzg4OCB9LAor CQl7IDB4MTExLCA0LCAxNCwgMjAsIENMQ0RfQ0FQXzQ0NCB9LAorCQl7IDB4MTExLCAzLCAxMSwg MTksIENMQ0RfQ0FQXzQ0NCB8IENMQ0RfQ0FQXzU1NTEgfSwKKwkJeyAweDExMSwgMywgMTAsIDE5 LCBDTENEX0NBUF80NDQgfCBDTENEX0NBUF81NTUxIHwKKwkJCQkgICAgQ0xDRF9DQVBfNTY1IH0s CisJCXsgMHgxMTEsIDAsICA4LCAxNiwgQ0xDRF9DQVBfNDQ0IHwgQ0xDRF9DQVBfNTU1MSB8CisJ CQkJICAgIENMQ0RfQ0FQXzU2NSB8IENMQ0RfQ0FQXzg4OCB9LAorCX07CisJaW50IGk7CisKKwkv KiBCeXBhc3MgcGl4ZWwgY2xvY2sgZGl2aWRlciAqLworCWZiLT5wYW5lbC0+dGltMiB8PSBUSU0y X0JDRDsKKworCS8qIFRGVCBkaXNwbGF5LCB2ZXJ0LiBjb21wLiBpbnRlcnJ1cHQgYXQgdGhlIHN0 YXJ0IG9mIHRoZSBiYWNrIHBvcmNoICovCisJZmItPnBhbmVsLT5jbnRsIHw9IENOVExfTENEVEZU IHwgQ05UTF9MQ0RWQ09NUCgxKTsKKworCWZiLT5wYW5lbC0+Y2FwcyA9IDA7CisKKwkvKiBNYXRj aCB0aGUgc2V0dXAgd2l0aCBrbm93biB2YXJpYW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKHBhbmVscykgJiYgIWZiLT5wYW5lbC0+Y2FwczsgaSsrKSB7CisJCWlmIChhbWJhX3Bh cnQoZmItPmRldikgIT0gcGFuZWxzW2ldLnBhcnQpCisJCQljb250aW51ZTsKKwkJaWYgKGcwICE9 IHBhbmVsc1tpXS5nMCkKKwkJCWNvbnRpbnVlOworCQlpZiAocjAgPT0gcGFuZWxzW2ldLnIwICYm IGIwID09IHBhbmVsc1tpXS5iMCkKKwkJCWZiLT5wYW5lbC0+Y2FwcyA9IHBhbmVsc1tpXS5jYXBz OworCX0KKworCS8qCisJICogSWYgd2UgYWN0dWFsbHkgcGh5c2ljYWxseSBjb25uZWN0ZWQgdGhl IFIgbGluZXMgdG8gQiBhbmQKKwkgKiB2aWNlIHZlcnNhCisJICovCisJaWYgKHIwICE9IDAgJiYg YjAgPT0gMCkKKwkJZmItPnBhbmVsLT5iZ3JfY29ubmVjdGlvbiA9IHRydWU7CisKKwlyZXR1cm4g ZmItPnBhbmVsLT5jYXBzID8gMCA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgY2xjZGZiX29m X2luaXRfZGlzcGxheShzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJc3RydWN0IGRldmljZV9ub2Rl ICplbmRwb2ludCwgKnBhbmVsOworCWludCBlcnI7CisJdW5zaWduZWQgaW50IGJwcDsKKwl1MzIg bWF4X2JhbmR3aWR0aDsKKwl1MzIgdGZ0X3IwYjBnMFszXTsKKworCWZiLT5wYW5lbCA9IGRldm1f a3phbGxvYygmZmItPmRldi0+ZGV2LCBzaXplb2YoKmZiLT5wYW5lbCksIEdGUF9LRVJORUwpOwor CWlmICghZmItPnBhbmVsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogRmV0Y2ggdGhl IHBhbmVsIGVuZHBvaW50LgorCSAqLworCWVuZHBvaW50ID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5k cG9pbnQoZmItPmRldi0+ZGV2Lm9mX25vZGUsIE5VTEwpOworCWlmICghZW5kcG9pbnQpCisJCXJl dHVybiAtRU5PREVWOworCisJcGFuZWwgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50 KGVuZHBvaW50KTsKKwlpZiAoIXBhbmVsKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVyciA9IGNs Y2RmYl9vZl9nZXRfYmFja2xpZ2h0KCZmYi0+ZGV2LT5kZXYsIGZiLT5wYW5lbCk7CisJaWYgKGVy cikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGNsY2RmYl9vZl9nZXRfbW9kZSgmZmItPmRldi0+ ZGV2LCBwYW5lbCwgZmItPnBhbmVsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJy ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZmItPmRldi0+ZGV2Lm9mX25vZGUsICJtYXgtbWVtb3J5 LWJhbmR3aWR0aCIsCisJCQkmbWF4X2JhbmR3aWR0aCk7CisJaWYgKCFlcnIpIHsKKwkJLyoKKwkJ ICogbWF4X2JhbmR3aWR0aCBpcyBpbiBieXRlcyBwZXIgc2Vjb25kIGFuZCBwaXhjbG9jayBpbgor CQkgKiBwaWNvLXNlY29uZHMsIHNvIHRoZSBtYXhpbXVtIGFsbG93ZWQgYml0cyBwZXIgcGl4ZWwg aXMKKwkJICogICA4ICogbWF4X2JhbmR3aWR0aCAvIChQSUNPUzJLSFoocGl4Y2xvY2spICogMTAw MCkKKwkJICogUmVhcnJhbmdlIHRoaXMgY2FsY3VsYXRpb24gdG8gYXZvaWQgb3ZlcmZsb3cgYW5k IHRoZW4gZW5zdXJlCisJCSAqIHJlc3VsdCBpcyBhIHZhbGlkIGZvcm1hdC4KKwkJICovCisJCWJw cCA9IG1heF9iYW5kd2lkdGggLyAoMTAwMCAvIDgpCisJCQkvIFBJQ09TMktIWihmYi0+cGFuZWwt Pm1vZGUucGl4Y2xvY2spOworCQlicHAgPSByb3VuZGRvd25fcG93X29mX3R3byhicHApOworCQlp ZiAoYnBwID4gMzIpCisJCQlicHAgPSAzMjsKKwl9IGVsc2UKKwkJYnBwID0gMzI7CisJZmItPnBh bmVsLT5icHAgPSBicHA7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0JJR19FTkRJQU4KKwlmYi0+cGFu ZWwtPmNudGwgfD0gQ05UTF9CRUJPOworI2VuZGlmCisJZmItPnBhbmVsLT53aWR0aCA9IC0xOwor CWZiLT5wYW5lbC0+aGVpZ2h0ID0gLTE7CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzJfYXJy YXkoZW5kcG9pbnQsCisJCQkiYXJtLHBsMTF4LHRmdC1yMGcwYjAtcGFkcyIsCisJCQl0ZnRfcjBi MGcwLCBBUlJBWV9TSVpFKHRmdF9yMGIwZzApKSAhPSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKwor CXJldHVybiBjbGNkZmJfb2ZfaW5pdF90ZnRfcGFuZWwoZmIsIHRmdF9yMGIwZzBbMF0sCisJCQkJ CXRmdF9yMGIwZzBbMV0sICB0ZnRfcjBiMGcwWzJdKTsKK30KKworc3RhdGljIGludCBjbGNkZmJf b2ZfdnJhbV9zZXR1cChzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm1lbW9yeTsKKwl1NjQgc2l6ZTsKKworCWVyciA9IGNsY2RmYl9vZl9pbml0 X2Rpc3BsYXkoZmIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltZW1vcnkgPSBvZl9w YXJzZV9waGFuZGxlKGZiLT5kZXYtPmRldi5vZl9ub2RlLCAibWVtb3J5LXJlZ2lvbiIsIDApOwor CWlmICghbWVtb3J5KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZiLT5mYi5zY3JlZW5fYmFzZSA9 IG9mX2lvbWFwKG1lbW9yeSwgMCk7CisJaWYgKCFmYi0+ZmIuc2NyZWVuX2Jhc2UpCisJCXJldHVy biAtRU5PTUVNOworCisJZmItPmZiLmZpeC5zbWVtX3N0YXJ0ID0gb2ZfdHJhbnNsYXRlX2FkZHJl c3MobWVtb3J5LAorCQkJb2ZfZ2V0X2FkZHJlc3MobWVtb3J5LCAwLCAmc2l6ZSwgTlVMTCkpOwor CWZiLT5mYi5maXguc21lbV9sZW4gPSBzaXplOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgY2xjZGZiX29mX3ZyYW1fbW1hcChzdHJ1Y3QgY2xjZF9mYiAqZmIsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQoreworCXVuc2lnbmVkIGxvbmcgb2ZmLCB1c2VyX3NpemUsIGtlcm5lbF9z aXplOworCisKKwlvZmYgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJdXNlcl9zaXpl ID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OworCWtlcm5lbF9zaXplID0gZmItPmZiLmZp eC5zbWVtX2xlbjsKKworCWlmIChvZmYgPj0ga2VybmVsX3NpemUgfHwgdXNlcl9zaXplID4gKGtl cm5lbF9zaXplIC0gb2ZmKSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCXJldHVybiByZW1hcF9wZm5f cmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LAorCQkJX19waHlzX3RvX3BmbihmYi0+ZmIuZml4LnNt ZW1fc3RhcnQpICsgdm1hLT52bV9wZ29mZiwKKwkJCXVzZXJfc2l6ZSwKKwkJCXBncHJvdF93cml0 ZWNvbWJpbmUodm1hLT52bV9wYWdlX3Byb3QpKTsKK30KKworc3RhdGljIHZvaWQgY2xjZGZiX29m X3ZyYW1fcmVtb3ZlKHN0cnVjdCBjbGNkX2ZiICpmYikKK3sKKwlpb3VubWFwKGZiLT5mYi5zY3Jl ZW5fYmFzZSk7Cit9CisKK3N0YXRpYyBpbnQgY2xjZGZiX29mX2RtYV9zZXR1cChzdHJ1Y3QgY2xj ZF9mYiAqZmIpCit7CisJdW5zaWduZWQgbG9uZyBmcmFtZXNpemU7CisJZG1hX2FkZHJfdCBkbWE7 CisJaW50IGVycjsKKworCWVyciA9IGNsY2RmYl9vZl9pbml0X2Rpc3BsYXkoZmIpOworCWlmIChl cnIpCisJCXJldHVybiBlcnI7CisKKwlmcmFtZXNpemUgPSBQQUdFX0FMSUdOKGZiLT5wYW5lbC0+ bW9kZS54cmVzICogZmItPnBhbmVsLT5tb2RlLnlyZXMgKgorCQkJZmItPnBhbmVsLT5icHAgLyA4 KTsKKwlmYi0+ZmIuc2NyZWVuX2Jhc2UgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmZiLT5kZXYtPmRl diwgZnJhbWVzaXplLAorCQkJJmRtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmYi0+ZmIuc2NyZWVu X2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJZmItPmZiLmZpeC5zbWVtX3N0YXJ0ID0gZG1h OworCWZiLT5mYi5maXguc21lbV9sZW4gPSBmcmFtZXNpemU7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBjbGNkZmJfb2ZfZG1hX21tYXAoc3RydWN0IGNsY2RfZmIgKmZiLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlyZXR1cm4gZG1hX21tYXBfd2MoJmZiLT5kZXYtPmRl diwgdm1hLCBmYi0+ZmIuc2NyZWVuX2Jhc2UsCisJCQkgICBmYi0+ZmIuZml4LnNtZW1fc3RhcnQs IGZiLT5mYi5maXguc21lbV9sZW4pOworfQorCitzdGF0aWMgdm9pZCBjbGNkZmJfb2ZfZG1hX3Jl bW92ZShzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmZiLT5kZXYt PmRldiwgZmItPmZiLmZpeC5zbWVtX2xlbiwKKwkJCWZiLT5mYi5zY3JlZW5fYmFzZSwgZmItPmZi LmZpeC5zbWVtX3N0YXJ0KTsKK30KKworc3RhdGljIHN0cnVjdCBjbGNkX2JvYXJkICpjbGNkZmJf b2ZfZ2V0X2JvYXJkKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjbGNkX2Jv YXJkICpib2FyZCA9IGRldm1fa3phbGxvYygmZGV2LT5kZXYsIHNpemVvZigqYm9hcmQpLAorCQkJ R0ZQX0tFUk5FTCk7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gZGV2LT5kZXYub2Zfbm9k ZTsKKworCWlmICghYm9hcmQpCisJCXJldHVybiBOVUxMOworCisJYm9hcmQtPm5hbWUgPSBvZl9u b2RlX2Z1bGxfbmFtZShub2RlKTsKKwlib2FyZC0+Y2FwcyA9IENMQ0RfQ0FQX0FMTDsKKwlib2Fy ZC0+Y2hlY2sgPSBjbGNkZmJfY2hlY2s7CisJYm9hcmQtPmRlY29kZSA9IGNsY2RmYl9kZWNvZGU7 CisJaWYgKG9mX2ZpbmRfcHJvcGVydHkobm9kZSwgIm1lbW9yeS1yZWdpb24iLCBOVUxMKSkgewor CQlib2FyZC0+c2V0dXAgPSBjbGNkZmJfb2ZfdnJhbV9zZXR1cDsKKwkJYm9hcmQtPm1tYXAgPSBj bGNkZmJfb2ZfdnJhbV9tbWFwOworCQlib2FyZC0+cmVtb3ZlID0gY2xjZGZiX29mX3ZyYW1fcmVt b3ZlOworCX0gZWxzZSB7CisJCWJvYXJkLT5zZXR1cCA9IGNsY2RmYl9vZl9kbWFfc2V0dXA7CisJ CWJvYXJkLT5tbWFwID0gY2xjZGZiX29mX2RtYV9tbWFwOworCQlib2FyZC0+cmVtb3ZlID0gY2xj ZGZiX29mX2RtYV9yZW1vdmU7CisJfQorCisJcmV0dXJuIGJvYXJkOworfQorI2Vsc2UKK3N0YXRp YyBzdHJ1Y3QgY2xjZF9ib2FyZCAqY2xjZGZiX29mX2dldF9ib2FyZChzdHJ1Y3QgYW1iYV9kZXZp Y2UgKmRldikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGNsY2Rm Yl9wcm9iZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGFtYmFfaWQgKmlk KQoreworCXN0cnVjdCBjbGNkX2JvYXJkICpib2FyZCA9IGRldl9nZXRfcGxhdGRhdGEoJmRldi0+ ZGV2KTsKKwlzdHJ1Y3QgY2xjZF9mYiAqZmI7CisJaW50IHJldDsKKworCWlmICghYm9hcmQpCisJ CWJvYXJkID0gY2xjZGZiX29mX2dldF9ib2FyZChkZXYpOworCisJaWYgKCFib2FyZCkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZkZXYtPmRl diwgRE1BX0JJVF9NQVNLKDMyKSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBh bWJhX3JlcXVlc3RfcmVnaW9ucyhkZXYsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtF Uk5fRVJSICJDTENEOiB1bmFibGUgdG8gcmVzZXJ2ZSByZWdzIHJlZ2lvblxuIik7CisJCWdvdG8g b3V0OworCX0KKworCWZiID0ga3phbGxvYyhzaXplb2YoKmZiKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFmYikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfcmVnaW9uOworCX0KKworCWZi LT5kZXYgPSBkZXY7CisJZmItPmJvYXJkID0gYm9hcmQ7CisKKwlkZXZfaW5mbygmZmItPmRldi0+ ZGV2LCAiUEwlMDN4IGRlc2lnbmVyICUwMnggcmV2JXUgYXQgMHglMDhsbHhcbiIsCisJCWFtYmFf cGFydChkZXYpLCBhbWJhX21hbmYoZGV2KSwgYW1iYV9yZXYoZGV2KSwKKwkJKHVuc2lnbmVkIGxv bmcgbG9uZylkZXYtPnJlcy5zdGFydCk7CisKKwlyZXQgPSBmYi0+Ym9hcmQtPnNldHVwKGZiKTsK KwlpZiAocmV0KQorCQlnb3RvIGZyZWVfZmI7CisKKwlyZXQgPSBjbGNkZmJfcmVnaXN0ZXIoZmIp OworCWlmIChyZXQgPT0gMCkgeworCQlhbWJhX3NldF9kcnZkYXRhKGRldiwgZmIpOworCQlnb3Rv IG91dDsKKwl9CisKKwlmYi0+Ym9hcmQtPnJlbW92ZShmYik7CisgZnJlZV9mYjoKKwlrZnJlZShm Yik7CisgZnJlZV9yZWdpb246CisJYW1iYV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKyBvdXQ6CisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbGNkZmJfcmVtb3ZlKHN0cnVjdCBhbWJhX2Rl dmljZSAqZGV2KQoreworCXN0cnVjdCBjbGNkX2ZiICpmYiA9IGFtYmFfZ2V0X2RydmRhdGEoZGV2 KTsKKworCWNsY2RmYl9kaXNhYmxlKGZiKTsKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYi0+ ZmIpOworCWlmIChmYi0+ZmIuY21hcC5sZW4pCisJCWZiX2RlYWxsb2NfY21hcCgmZmItPmZiLmNt YXApOworCWlvdW5tYXAoZmItPnJlZ3MpOworCWNsa191bnByZXBhcmUoZmItPmNsayk7CisJY2xr X3B1dChmYi0+Y2xrKTsKKworCWZiLT5ib2FyZC0+cmVtb3ZlKGZiKTsKKworCWtmcmVlKGZiKTsK KworCWFtYmFfcmVsZWFzZV9yZWdpb25zKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBhbWJhX2lkIGNsY2RmYl9pZF90YWJsZVtdID0geworCXsKKwkJLmlkCT0g MHgwMDA0MTExMCwKKwkJLm1hc2sJPSAweDAwMGZmZmZlLAorCX0sCisJeyAwLCAwIH0sCit9Owor CitNT0RVTEVfREVWSUNFX1RBQkxFKGFtYmEsIGNsY2RmYl9pZF90YWJsZSk7CisKK3N0YXRpYyBz dHJ1Y3QgYW1iYV9kcml2ZXIgY2xjZF9kcml2ZXIgPSB7CisJLmRydiAJCT0geworCQkubmFtZQk9 ICJjbGNkLXBsMTF4IiwKKwl9LAorCS5wcm9iZQkJPSBjbGNkZmJfcHJvYmUsCisJLnJlbW92ZQkJ PSBjbGNkZmJfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGNsY2RmYl9pZF90YWJsZSwKK307CisKK3N0 YXRpYyBpbnQgX19pbml0IGFtYmFfY2xjZGZiX2luaXQodm9pZCkKK3sKKwlpZiAoZmJfZ2V0X29w dGlvbnMoImFtYmFmYiIsIE5VTEwpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBhbWJh X2RyaXZlcl9yZWdpc3RlcigmY2xjZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhbWJhX2Ns Y2RmYl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGFtYmFfY2xjZGZiX2V4aXQodm9pZCkK K3sKKwlhbWJhX2RyaXZlcl91bnJlZ2lzdGVyKCZjbGNkX2RyaXZlcik7Cit9CisKK21vZHVsZV9l eGl0KGFtYmFfY2xjZGZiX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFSTSBQcmltZUNl bGwgUEwxMTAgQ0xDRCBjb3JlIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZm IC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hbWJhL2NsY2QtcmVncy5oIGIvaW5jbHVkZS9saW51eC9h bWJhL2NsY2QtcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u NDIxYjBmYTkwZDZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hbWJhL2NsY2Qt cmVncy5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBEYXZpZCBBIFJ1c2xpbmcKKyAqCisgKiBD b3B5cmlnaHQgKEMpIDIwMDEgQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVj dCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwor ICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBv ZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBBTUJB X0NMQ0RfUkVHU19ICisjZGVmaW5lIEFNQkFfQ0xDRF9SRUdTX0gKKworLyoKKyAqIENMQ0QgQ29u dHJvbGxlciBJbnRlcm5hbCBSZWdpc3RlciBhZGRyZXNzZXMKKyAqLworI2RlZmluZSBDTENEX1RJ TTAJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0xDRF9USU0xIAkJMHgwMDAwMDAwNAorI2RlZmluZSBD TENEX1RJTTIgCQkweDAwMDAwMDA4CisjZGVmaW5lIENMQ0RfVElNMyAJCTB4MDAwMDAwMGMKKyNk ZWZpbmUgQ0xDRF9VQkFTIAkJMHgwMDAwMDAxMAorI2RlZmluZSBDTENEX0xCQVMgCQkweDAwMDAw MDE0CisKKyNkZWZpbmUgQ0xDRF9QTDExMF9JRU5CCQkweDAwMDAwMDE4CisjZGVmaW5lIENMQ0Rf UEwxMTBfQ05UTAkJMHgwMDAwMDAxYworI2RlZmluZSBDTENEX1BMMTEwX1NUQVQJCTB4MDAwMDAw MjAKKyNkZWZpbmUgQ0xDRF9QTDExMF9JTlRSIAkweDAwMDAwMDI0CisjZGVmaW5lIENMQ0RfUEwx MTBfVUNVUgkJMHgwMDAwMDAyOAorI2RlZmluZSBDTENEX1BMMTEwX0xDVVIJCTB4MDAwMDAwMkMK KworI2RlZmluZSBDTENEX1BMMTExX0NOVEwJCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0xDRF9QTDEx MV9JRU5CCQkweDAwMDAwMDFjCisjZGVmaW5lIENMQ0RfUEwxMTFfUklTCQkweDAwMDAwMDIwCisj ZGVmaW5lIENMQ0RfUEwxMTFfTUlTCQkweDAwMDAwMDI0CisjZGVmaW5lIENMQ0RfUEwxMTFfSUNS CQkweDAwMDAwMDI4CisjZGVmaW5lIENMQ0RfUEwxMTFfVUNVUgkJMHgwMDAwMDAyYworI2RlZmlu ZSBDTENEX1BMMTExX0xDVVIJCTB4MDAwMDAwMzAKKworI2RlZmluZSBDTENEX1BBTEwgCQkweDAw MDAwMjAwCisjZGVmaW5lIENMQ0RfUEFMRVRURQkJMHgwMDAwMDIwMAorCisjZGVmaW5lIFRJTTJf UENEX0xPX01BU0sJR0VOTUFTSyg0LCAwKQorI2RlZmluZSBUSU0yX1BDRF9MT19CSVRTCTUKKyNk ZWZpbmUgVElNMl9DTEtTRUwJCSgxIDw8IDUpCisjZGVmaW5lIFRJTTJfQUNCX01BU0sJCUdFTk1B U0soMTAsIDYpCisjZGVmaW5lIFRJTTJfSVZTCQkoMSA8PCAxMSkKKyNkZWZpbmUgVElNMl9JSFMJ CSgxIDw8IDEyKQorI2RlZmluZSBUSU0yX0lQQwkJKDEgPDwgMTMpCisjZGVmaW5lIFRJTTJfSU9F CQkoMSA8PCAxNCkKKyNkZWZpbmUgVElNMl9CQ0QJCSgxIDw8IDI2KQorI2RlZmluZSBUSU0yX1BD RF9ISV9NQVNLCUdFTk1BU0soMzEsIDI3KQorI2RlZmluZSBUSU0yX1BDRF9ISV9CSVRTCTUKKyNk ZWZpbmUgVElNMl9QQ0RfSElfU0hJRlQJMjcKKworI2RlZmluZSBDTlRMX0xDREVOCQkoMSA8PCAw KQorI2RlZmluZSBDTlRMX0xDREJQUDEJCSgwIDw8IDEpCisjZGVmaW5lIENOVExfTENEQlBQMgkJ KDEgPDwgMSkKKyNkZWZpbmUgQ05UTF9MQ0RCUFA0CQkoMiA8PCAxKQorI2RlZmluZSBDTlRMX0xD REJQUDgJCSgzIDw8IDEpCisjZGVmaW5lIENOVExfTENEQlBQMTYJCSg0IDw8IDEpCisjZGVmaW5l IENOVExfTENEQlBQMTZfNTY1CSg2IDw8IDEpCisjZGVmaW5lIENOVExfTENEQlBQMTZfNDQ0CSg3 IDw8IDEpCisjZGVmaW5lIENOVExfTENEQlBQMjQJCSg1IDw8IDEpCisjZGVmaW5lIENOVExfTENE QlcJCSgxIDw8IDQpCisjZGVmaW5lIENOVExfTENEVEZUCQkoMSA8PCA1KQorI2RlZmluZSBDTlRM X0xDRE1PTk84CQkoMSA8PCA2KQorI2RlZmluZSBDTlRMX0xDRERVQUwJCSgxIDw8IDcpCisjZGVm aW5lIENOVExfQkdSCQkoMSA8PCA4KQorI2RlZmluZSBDTlRMX0JFQk8JCSgxIDw8IDkpCisjZGVm aW5lIENOVExfQkVQTwkJKDEgPDwgMTApCisjZGVmaW5lIENOVExfTENEUFdSCQkoMSA8PCAxMSkK KyNkZWZpbmUgQ05UTF9MQ0RWQ09NUCh4KQkoKHgpIDw8IDEyKQorI2RlZmluZSBDTlRMX0xETUFG SUZPVElNRQkoMSA8PCAxNSkKKyNkZWZpbmUgQ05UTF9XQVRFUk1BUksJCSgxIDw8IDE2KQorCisv KiBTVCBNaWNyb2VsZWN0cm9uaWNzIHZhcmlhbnQgYml0cyAqLworI2RlZmluZSBDTlRMX1NUXzFY QlBQXzQ0NAkweDAKKyNkZWZpbmUgQ05UTF9TVF8xWEJQUF81NTUxCSgxIDw8IDE3KQorI2RlZmlu ZSBDTlRMX1NUXzFYQlBQXzU2NQkoMSA8PCAxOCkKKyNkZWZpbmUgQ05UTF9TVF9DRFdJRF8xMgkw eDAKKyNkZWZpbmUgQ05UTF9TVF9DRFdJRF8xNgkoMSA8PCAxOSkKKyNkZWZpbmUgQ05UTF9TVF9D RFdJRF8xOAkoMSA8PCAyMCkKKyNkZWZpbmUgQ05UTF9TVF9DRFdJRF8yNAkoKDEgPDwgMTkpfCgx IDw8IDIwKSkKKyNkZWZpbmUgQ05UTF9TVF9DRUFFTgkJKDEgPDwgMjEpCisjZGVmaW5lIENOVExf U1RfTENEQlBQMjRfUEFDS0VECSg2IDw8IDEpCisKKyNlbmRpZiAvKiBBTUJBX0NMQ0RfUkVHU19I ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtYmEvY2xjZC5oIGIvaW5jbHVkZS9saW51 eC9hbWJhL2NsY2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmI2 ZTBjYmVhZjUzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9jbGNkLmgK QEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUv YW1iYV9jbGNkLmggLS0gSW50ZWdyYXRvciBMQ0QgcGFuZWwuCisgKgorICogRGF2aWQgQSBSdXNs aW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBm aWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFp biBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisj aW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QtcmVncy5oPgor CitlbnVtIHsKKwkvKiBpbmRpdmlkdWFsIGZvcm1hdHMgKi8KKwlDTENEX0NBUF9SR0I0NDQJCT0g KDEgPDwgMCksCisJQ0xDRF9DQVBfUkdCNTU1MQk9ICgxIDw8IDEpLAorCUNMQ0RfQ0FQX1JHQjU2 NQkJPSAoMSA8PCAyKSwKKwlDTENEX0NBUF9SR0I4ODgJCT0gKDEgPDwgMyksCisJQ0xDRF9DQVBf QkdSNDQ0CQk9ICgxIDw8IDQpLAorCUNMQ0RfQ0FQX0JHUjU1NTEJPSAoMSA8PCA1KSwKKwlDTENE X0NBUF9CR1I1NjUJCT0gKDEgPDwgNiksCisJQ0xDRF9DQVBfQkdSODg4CQk9ICgxIDw8IDcpLAor CisJLyogY29ubmVjdGlvbiBsYXlvdXRzICovCisJQ0xDRF9DQVBfNDQ0CQk9IENMQ0RfQ0FQX1JH QjQ0NCB8IENMQ0RfQ0FQX0JHUjQ0NCwKKwlDTENEX0NBUF81NTUxCQk9IENMQ0RfQ0FQX1JHQjU1 NTEgfCBDTENEX0NBUF9CR1I1NTUxLAorCUNMQ0RfQ0FQXzU2NQkJPSBDTENEX0NBUF9SR0I1NjUg fCBDTENEX0NBUF9CR1I1NjUsCisJQ0xDRF9DQVBfODg4CQk9IENMQ0RfQ0FQX1JHQjg4OCB8IENM Q0RfQ0FQX0JHUjg4OCwKKworCS8qIHJlZC9ibHVlIG9yZGVyaW5nICovCisJQ0xDRF9DQVBfUkdC CQk9IENMQ0RfQ0FQX1JHQjQ0NCB8IENMQ0RfQ0FQX1JHQjU1NTEgfAorCQkJCSAgQ0xDRF9DQVBf UkdCNTY1IHwgQ0xDRF9DQVBfUkdCODg4LAorCUNMQ0RfQ0FQX0JHUgkJPSBDTENEX0NBUF9CR1I0 NDQgfCBDTENEX0NBUF9CR1I1NTUxIHwKKwkJCQkgIENMQ0RfQ0FQX0JHUjU2NSB8IENMQ0RfQ0FQ X0JHUjg4OCwKKworCUNMQ0RfQ0FQX0FMTAkJPSBDTENEX0NBUF9CR1IgfCBDTENEX0NBUF9SR0Is Cit9OworCitzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZTsKKworc3RydWN0IGNsY2RfcGFuZWwgewor CXN0cnVjdCBmYl92aWRlb21vZGUJbW9kZTsKKwlzaWduZWQgc2hvcnQJCXdpZHRoOwkvKiB3aWR0 aCBpbiBtbSAqLworCXNpZ25lZCBzaG9ydAkJaGVpZ2h0OwkvKiBoZWlnaHQgaW4gbW0gKi8KKwl1 MzIJCQl0aW0yOworCXUzMgkJCXRpbTM7CisJdTMyCQkJY250bDsKKwl1MzIJCQljYXBzOworCXVu c2lnbmVkIGludAkJYnBwOjgsCisJCQkJZml4ZWR0aW1pbmdzOjEsCisJCQkJZ3JheXNjYWxlOjE7 CisJdW5zaWduZWQgaW50CQljb25uZWN0b3I7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UJKmJh Y2tsaWdodDsKKwkvKgorCSAqIElmIHRoZSBCL1IgbGluZXMgYXJlIHN3aXRjaGVkIGJldHdlZW4g dGhlIENMQ0QKKwkgKiBhbmQgdGhlIHBhbmVsIHdlIG5lZWQgdG8ga25vdyB0aGlzIGFuZCBub3Qg dHJ5IHRvCisJICogY29tcGVuc2F0ZSB3aXRoIHRoZSBCR1IgYml0IGluIHRoZSBjb250cm9sIHJl Z2lzdGVyLgorCSAqLworCWJvb2wJCQliZ3JfY29ubmVjdGlvbjsKK307CisKK3N0cnVjdCBjbGNk X3JlZ3MgeworCXUzMgkJCXRpbTA7CisJdTMyCQkJdGltMTsKKwl1MzIJCQl0aW0yOworCXUzMgkJ CXRpbTM7CisJdTMyCQkJY250bDsKKwl1bnNpZ25lZCBsb25nCQlwaXhjbG9jazsKK307CisKK3N0 cnVjdCBjbGNkX2ZiOworCisvKgorICogdGhlIGJvYXJkLXR5cGUgc3BlY2lmaWMgcm91dGluZXMK KyAqLworc3RydWN0IGNsY2RfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkvKgorCSAq IE9wdGlvbmFsLiAgSGFyZHdhcmUgY2FwYWJpbGl0eSBmbGFncy4KKwkgKi8KKwl1MzIJY2FwczsK KworCS8qCisJICogT3B0aW9uYWwuICBDaGVjayB3aGV0aGVyIHRoZSB2YXIgc3RydWN0dXJlIGlz IGFjY2VwdGFibGUKKwkgKiBmb3IgdGhpcyBkaXNwbGF5LgorCSAqLworCWludAkoKmNoZWNrKShz dHJ1Y3QgY2xjZF9mYiAqZmIsIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKTsKKworCS8q CisJICogQ29tcHVsc29yeS4gIERlY29kZSBmYi0+ZmIudmFyIGludG8gcmVncy0+Ki4gIEluIHRo ZSBjYXNlIG9mCisJICogZml4ZWQgdGltaW5nLCBzZXQgcmVncy0+KiB0byB0aGUgcmVnaXN0ZXIg dmFsdWVzIHJlcXVpcmVkLgorCSAqLworCXZvaWQJKCpkZWNvZGUpKHN0cnVjdCBjbGNkX2ZiICpm Yiwgc3RydWN0IGNsY2RfcmVncyAqcmVncyk7CisKKwkvKgorCSAqIE9wdGlvbmFsLiAgRGlzYWJs ZSBhbnkgZXh0cmEgZGlzcGxheSBoYXJkd2FyZS4KKwkgKi8KKwl2b2lkCSgqZGlzYWJsZSkoc3Ry dWN0IGNsY2RfZmIgKik7CisKKwkvKgorCSAqIE9wdGlvbmFsLiAgRW5hYmxlIGFueSBleHRyYSBk aXNwbGF5IGhhcmR3YXJlLgorCSAqLworCXZvaWQJKCplbmFibGUpKHN0cnVjdCBjbGNkX2ZiICop OworCisJLyoKKwkgKiBTZXR1cCBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJ0cyBvZiBDTENEIGRyaXZl cgorCSAqLworCWludAkoKnNldHVwKShzdHJ1Y3QgY2xjZF9mYiAqKTsKKworCS8qCisJICogbW1h cCB0aGUgZnJhbWVidWZmZXIgbWVtb3J5CisJICovCisJaW50CSgqbW1hcCkoc3RydWN0IGNsY2Rf ZmIgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOworCisJLyoKKwkgKiBSZW1vdmUgcGxhdGZv cm0gc3BlY2lmaWMgcGFydHMgb2YgQ0xDRCBkcml2ZXIKKwkgKi8KKwl2b2lkCSgqcmVtb3ZlKShz dHJ1Y3QgY2xjZF9mYiAqKTsKK307CisKK3N0cnVjdCBhbWJhX2RldmljZTsKK3N0cnVjdCBjbGs7 CisKKy8qIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGVhY2ggZnJhbWUgYnVmZmVyIGRl dmljZSB3ZSBmaW5kICovCitzdHJ1Y3QgY2xjZF9mYiB7CisJc3RydWN0IGZiX2luZm8JCWZiOwor CXN0cnVjdCBhbWJhX2RldmljZQkqZGV2OworCXN0cnVjdCBjbGsJCSpjbGs7CisJc3RydWN0IGNs Y2RfcGFuZWwJKnBhbmVsOworCXN0cnVjdCBjbGNkX2JvYXJkCSpib2FyZDsKKwl2b2lkCQkJKmJv YXJkX2RhdGE7CisJdm9pZCBfX2lvbWVtCQkqcmVnczsKKwl1MTYJCQlvZmZfaWVuYjsKKwl1MTYJ CQlvZmZfY250bDsKKwl1MzIJCQljbGNkX2NudGw7CisJdTMyCQkJY21hcFsxNl07CisJYm9vbAkJ CWNsa19lbmFibGVkOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsY2RmYl9kZWNvZGUoc3Ry dWN0IGNsY2RfZmIgKmZiLCBzdHJ1Y3QgY2xjZF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBmYl92 YXJfc2NyZWVuaW5mbyAqdmFyID0gJmZiLT5mYi52YXI7CisJdTMyIHZhbCwgY3BsOworCisJLyoK KwkgKiBQcm9ncmFtIHRoZSBDTENEIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGFuZCBzdGFydCB0aGUg Q0xDRAorCSAqLworCXZhbCA9ICgodmFyLT54cmVzIC8gMTYpIC0gMSkgPDwgMjsKKwl2YWwgfD0g KHZhci0+aHN5bmNfbGVuIC0gMSkgPDwgODsKKwl2YWwgfD0gKHZhci0+cmlnaHRfbWFyZ2luIC0g MSkgPDwgMTY7CisJdmFsIHw9ICh2YXItPmxlZnRfbWFyZ2luIC0gMSkgPDwgMjQ7CisJcmVncy0+ dGltMCA9IHZhbDsKKworCXZhbCA9IHZhci0+eXJlczsKKwlpZiAoZmItPnBhbmVsLT5jbnRsICYg Q05UTF9MQ0REVUFMKQorCQl2YWwgLz0gMjsKKwl2YWwgLT0gMTsKKwl2YWwgfD0gKHZhci0+dnN5 bmNfbGVuIC0gMSkgPDwgMTA7CisJdmFsIHw9IHZhci0+bG93ZXJfbWFyZ2luIDw8IDE2OworCXZh bCB8PSB2YXItPnVwcGVyX21hcmdpbiA8PCAyNDsKKwlyZWdzLT50aW0xID0gdmFsOworCisJdmFs ID0gZmItPnBhbmVsLT50aW0yOworCXZhbCB8PSB2YXItPnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdI X0FDVCAgPyAwIDogVElNMl9JSFM7CisJdmFsIHw9IHZhci0+c3luYyAmIEZCX1NZTkNfVkVSVF9I SUdIX0FDVCA/IDAgOiBUSU0yX0lWUzsKKworCWNwbCA9IHZhci0+eHJlc192aXJ0dWFsOworCWlm IChmYi0+cGFuZWwtPmNudGwgJiBDTlRMX0xDRFRGVCkJICAvKiBURlQgKi8KKwkJLyogLyAxICov OworCWVsc2UgaWYgKCF2YXItPmdyYXlzY2FsZSkJCSAgLyogU1ROIGNvbG9yICovCisJCWNwbCA9 IGNwbCAqIDggLyAzOworCWVsc2UgaWYgKGZiLT5wYW5lbC0+Y250bCAmIENOVExfTENETU9OTzgp IC8qIFNUTiBtb25vY2hyb21lLCA4Yml0ICovCisJCWNwbCAvPSA4OworCWVsc2UJCQkJCSAgLyog U1ROIG1vbm9jaHJvbWUsIDRiaXQgKi8KKwkJY3BsIC89IDQ7CisKKwlyZWdzLT50aW0yID0gdmFs IHwgKChjcGwgLSAxKSA8PCAxNik7CisKKwlyZWdzLT50aW0zID0gZmItPnBhbmVsLT50aW0zOwor CisJdmFsID0gZmItPnBhbmVsLT5jbnRsOworCWlmICh2YXItPmdyYXlzY2FsZSkKKwkJdmFsIHw9 IENOVExfTENEQlc7CisKKwlpZiAoZmItPnBhbmVsLT5jYXBzICYmIGZiLT5ib2FyZC0+Y2FwcyAm JiB2YXItPmJpdHNfcGVyX3BpeGVsID49IDE2KSB7CisJCS8qCisJCSAqIGlmIGJvYXJkIGFuZCBw YW5lbCBzdXBwbHkgY2FwYWJpbGl0aWVzLCB3ZSBjYW4gc3VwcG9ydAorCQkgKiBjaGFuZ2luZyBC R1IvUkdCIGRlcGVuZGluZyBvbiBzdXBwbGllZCBwYXJhbWV0ZXJzLiBIZXJlCisJCSAqIHdlIHN3 aXRjaCB0byB3aGF0IHRoZSBmcmFtZWJ1ZmZlciBpcyBwcm92aWRpbmcgaWYgbmVlZAorCQkgKiBi ZSwgc28gaWYgdGhlIGZyYW1lYnVmZmVyIGlzIEJHUiBidXQgdGhlIGRpc3BsYXkgY29ubmVjdGlv bgorCQkgKiBpcyBSR0IgKGZpcnN0IGNhc2UpIHdlIHN3aXRjaCBpdCBhcm91bmQuIFZpY2UgdmVy c2EgbXV0YXRpcworCQkgKiBtdXRhbmRpcyBpZiB0aGUgZnJhbWVidWZmZXIgaXMgUkdCIGJ1dCB0 aGUgZGlzcGxheSBjb25uZWN0aW9uCisJCSAqIGlzIEJHUiwgd2UgZmxpcCBpdCBhcm91bmQuCisJ CSAqLworCQlpZiAodmFyLT5yZWQub2Zmc2V0ID09IDApCisJCQl2YWwgJj0gfkNOVExfQkdSOwor CQllbHNlCisJCQl2YWwgfD0gQ05UTF9CR1I7CisJCWlmIChmYi0+cGFuZWwtPmJncl9jb25uZWN0 aW9uKQorCQkJdmFsIF49IENOVExfQkdSOworCX0KKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9w aXhlbCkgeworCWNhc2UgMToKKwkJdmFsIHw9IENOVExfTENEQlBQMTsKKwkJYnJlYWs7CisJY2Fz ZSAyOgorCQl2YWwgfD0gQ05UTF9MQ0RCUFAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXZhbCB8 PSBDTlRMX0xDREJQUDQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJdmFsIHw9IENOVExfTENEQlBQ ODsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJLyoKKwkJICogUEwxMTAgY2Fubm90IGNob29zZSBi ZXR3ZWVuIDU1NTEgYW5kIDU2NSBtb2RlcyBpbiBpdHMKKwkJICogY29udHJvbCByZWdpc3Rlci4g IEl0IGlzIHBvc3NpYmxlIHRvIHVzZSA1NjUgd2l0aAorCQkgKiBjdXN0b20gZXh0ZXJuYWwgd2ly aW5nLgorCQkgKi8KKwkJaWYgKGFtYmFfcGFydChmYi0+ZGV2KSA9PSAweDExMCB8fAorCQkgICAg dmFyLT5ncmVlbi5sZW5ndGggPT0gNSkKKwkJCXZhbCB8PSBDTlRMX0xDREJQUDE2OworCQllbHNl IGlmICh2YXItPmdyZWVuLmxlbmd0aCA9PSA2KQorCQkJdmFsIHw9IENOVExfTENEQlBQMTZfNTY1 OworCQllbHNlCisJCQl2YWwgfD0gQ05UTF9MQ0RCUFAxNl80NDQ7CisJCWJyZWFrOworCWNhc2Ug MzI6CisJCXZhbCB8PSBDTlRMX0xDREJQUDI0OworCQlicmVhazsKKwl9CisKKwlyZWdzLT5jbnRs ID0gdmFsOworCXJlZ3MtPnBpeGNsb2NrID0gdmFyLT5waXhjbG9jazsKK30KKworc3RhdGljIGlu bGluZSBpbnQgY2xjZGZiX2NoZWNrKHN0cnVjdCBjbGNkX2ZiICpmYiwgc3RydWN0IGZiX3Zhcl9z Y3JlZW5pbmZvICp2YXIpCit7CisJdmFyLT54cmVzX3ZpcnR1YWwgPSB2YXItPnhyZXMgPSAodmFy LT54cmVzICsgMTUpICYgfjE1OworCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzID0gKHZh ci0+eXJlcyArIDEpICYgfjE7CisKKyNkZWZpbmUgQ0hFQ0soZSxsLGgpICh2YXItPmUgPCBsIHx8 IHZhci0+ZSA+IGgpCisJaWYgKENIRUNLKHJpZ2h0X21hcmdpbiwgKDUrMSksIDI1NikgfHwJLyog YmFjayBwb3JjaCAqLworCSAgICBDSEVDSyhsZWZ0X21hcmdpbiwgKDUrMSksIDI1NikgfHwJLyog ZnJvbnQgcG9yY2ggKi8KKwkgICAgQ0hFQ0soaHN5bmNfbGVuLCAoNSsxKSwgMjU2KSB8fAorCSAg ICB2YXItPnhyZXMgPiA0MDk2IHx8CisJICAgIHZhci0+bG93ZXJfbWFyZ2luID4gMjU1IHx8CQkv KiBiYWNrIHBvcmNoICovCisJICAgIHZhci0+dXBwZXJfbWFyZ2luID4gMjU1IHx8CQkvKiBmcm9u dCBwb3JjaCAqLworCSAgICB2YXItPnZzeW5jX2xlbiA+IDMyIHx8CisJICAgIHZhci0+eXJlcyA+ IDEwMjQpCisJCXJldHVybiAtRUlOVkFMOworI3VuZGVmIENIRUNLCisKKwkvKiBzaW5nbGUgcGFu ZWwgbW9kZTogUENEID0gbWF4KFBDRCwgMSkgKi8KKwkvKiBkdWFsIHBhbmVsIG1vZGU6IFBDRCA9 IG1heChQQ0QsIDUpICovCisKKwkvKgorCSAqIFlvdSBjYW4ndCBjaGFuZ2UgdGhlIGdyYXlzY2Fs ZSBzZXR0aW5nLCBhbmQKKwkgKiB3ZSBjYW4gb25seSBkbyBub24taW50ZXJsYWNlZCB2aWRlby4K KwkgKi8KKwlpZiAodmFyLT5ncmF5c2NhbGUgIT0gZmItPmZiLnZhci5ncmF5c2NhbGUgfHwKKwkg ICAgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9NQVNLKSAhPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VE KQorCQlyZXR1cm4gLUVJTlZBTDsKKworI2RlZmluZSBDSEVDSyhlKSAodmFyLT5lICE9IGZiLT5m Yi52YXIuZSkKKwlpZiAoZmItPnBhbmVsLT5maXhlZHRpbWluZ3MgJiYKKwkgICAgKENIRUNLKHhy ZXMpCQl8fAorCSAgICAgQ0hFQ0soeXJlcykJCXx8CisJICAgICBDSEVDSyhiaXRzX3Blcl9waXhl bCkJfHwKKwkgICAgIENIRUNLKHBpeGNsb2NrKQkJfHwKKwkgICAgIENIRUNLKGxlZnRfbWFyZ2lu KQkJfHwKKwkgICAgIENIRUNLKHJpZ2h0X21hcmdpbikJfHwKKwkgICAgIENIRUNLKHVwcGVyX21h cmdpbikJfHwKKwkgICAgIENIRUNLKGxvd2VyX21hcmdpbikJfHwKKwkgICAgIENIRUNLKGhzeW5j X2xlbikJCXx8CisJICAgICBDSEVDSyh2c3luY19sZW4pCQl8fAorCSAgICAgQ0hFQ0soc3luYykp KQorCQlyZXR1cm4gLUVJTlZBTDsKKyN1bmRlZiBDSEVDSworCisJdmFyLT5ub25zdGQgPSAwOwor CXZhci0+YWNjZWxfZmxhZ3MgPSAwOworCisJcmV0dXJuIDA7Cit9Ci0tIAoyLjI4LjAuNjgxLmc2 Zjc3ZjY1YjRlLWdvb2cKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=