From nobody Sun Feb 8 17:36:21 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 81FAFEB64D8 for ; Fri, 16 Jun 2023 22:15:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345200AbjFPWPI (ORCPT ); Fri, 16 Jun 2023 18:15:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54342 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345783AbjFPWOs (ORCPT ); Fri, 16 Jun 2023 18:14:48 -0400 Received: from mail-pf1-x42b.google.com (mail-pf1-x42b.google.com [IPv6:2607:f8b0:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E5E902110 for ; Fri, 16 Jun 2023 15:14:38 -0700 (PDT) Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-6667c54839bso1239516b3a.3 for ; Fri, 16 Jun 2023 15:14:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1686953678; x=1689545678; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=wUwYhBkZapu3MFbBXC/Dzli+AjUgNsT7jYKNKpSl0Gc=; b=Tj9tqBDxf9b/ZEKJ9aaxP2iS8oamCY0KIC38NEBl8pDSY7ojwqp3AWjviMjCI5Y2rs TbHv0FZEM5YP8FI4NRZwTxVPbX/nKpWIB3EclHc9lDPXhbEv6iCKDg162YOmGdbQAhj3 YNI1NO3GqdaRqAgJyC6GpqybmBGCrYDX+vWvM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686953678; x=1689545678; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=wUwYhBkZapu3MFbBXC/Dzli+AjUgNsT7jYKNKpSl0Gc=; b=LIdPzw6M0TUJxpnw3MUc3ZO7HNrk5cIfxrcL3IYGtXR2Bq2gRexqlIsxVlNgKpdGGw JE7jjNmV9IPo50XQeLddDGcR1lCj92FmW1iEvW+dMu5xq5fyGpBAWsmQ3Ucw7dKnZ9L7 zpRtLwwZi4lmTq3VkhKBuGQS7zged9sdvKZSYcvubGWlsouUlk3jJ4MhNEikAnsqGyf/ rUZRdBQYtiYUFKCqjuLCaj9aVBxed8wAcjLxj31BO7j5ekjm0dcNLwvQ5RwKQ7JBysE+ wkSpWy+l9BaQlDWgI0D00AO42iDdzBNizZkhtQD1xEnBiclIS8Jh5MkL96qcVwSTxFOF 9qDA== X-Gm-Message-State: AC+VfDyS8gspG0RnDMhK2J4+PjqdiEZiAY9Q5FwiQIoFmP/q0Yc4JMc1 Oax3KJ/EhKzZN/8gcCjko+f0GA== X-Google-Smtp-Source: ACHHUZ65JPTO4UdRDdu4sSJkPxvHfTDvXn/TNyBOVKH+2FZu1qn3sDZvjOFMhDAWcChXr48c2rUJaw== X-Received: by 2002:a17:902:e843:b0:1ac:7405:d3ba with SMTP id t3-20020a170902e84300b001ac7405d3bamr4034092plg.40.1686953677702; Fri, 16 Jun 2023 15:14:37 -0700 (PDT) Received: from stbirv-lnx-2.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id f12-20020a170902ab8c00b001aaed524541sm16220860plr.227.2023.06.16.15.14.35 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 16 Jun 2023 15:14:37 -0700 (PDT) From: Justin Chen To: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, bcm-kernel-feedback-list@broadcom.com Cc: florian.fainelli@broadcom.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, opendmb@gmail.com, andrew@lunn.ch, hkallweit1@gmail.com, linux@armlinux.org.uk, richardcochran@gmail.com, sumit.semwal@linaro.org, christian.koenig@amd.com, simon.horman@corigine.com, Justin Chen Subject: [PATCH net-next v8 03/11] net: bcmasp: Add support for ASP2.0 Ethernet controller Date: Fri, 16 Jun 2023 15:14:16 -0700 Message-Id: <1686953664-17498-4-git-send-email-justin.chen@broadcom.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1686953664-17498-1-git-send-email-justin.chen@broadcom.com> References: <1686953664-17498-1-git-send-email-justin.chen@broadcom.com> Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="000000000000c29ef705fe4682ba" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable --000000000000c29ef705fe4682ba MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QWRkIHN1cHBvcnQgZm9yIHRoZSBCcm9hZGNvbSBBU1AgMi4wIEV0aGVybmV0IGNvbnRyb2xsZXIg d2hpY2ggaXMgZmlyc3QKaW50cm9kdWNlZCB3aXRoIDcyMTY1LiBUaGlzIGNvbnRyb2xsZXIgZmVh dHVyZXMgdHdvIGRpc3RpbmN0IEV0aGVybmV0CnBvcnRzIHRoYXQgY2FuIGJlIGluZGVwZW5kZW50 bHkgb3BlcmF0ZWQuCgpSZXZpZXdlZC1ieTogU2ltb24gSG9ybWFuIDxzaW1vbi5ob3JtYW5AY29y aWdpbmUuY29tPgpTaWduZWQtb2ZmLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuLmZhaW5l bGxpQGJyb2FkY29tLmNvbT4KU2lnbmVkLW9mZi1ieTogSnVzdGluIENoZW4gPGp1c3Rpbi5jaGVu QGJyb2FkY29tLmNvbT4KLS0tCnY4CgktIEFkZHJlc3Mgc29tZSBjaGVja3BhdGNoIHdhcm5pbmdz Cgp2NwoJLSBGaXhlZCBsZWFraW5nIHBvcnRzX25vZGUgZGV2aWNlIG5vZGUuCgktIFNwbGl0IG91 dCB0byBzbWFsbGVyIGNvbW1pdHMKCnY2CgktIEZpeGVkIGEgcmVzZXJ2ZWQgbWFjIGZpbHRlciBp bmRleGluZyBlcnJvcgoJLSBSZW1vdmVkIHR4X2xvY2sKCS0gU2ltcGxpZmllZCB0eF90aW1lb3V0 IGhvb2sKCS0gUmVtb3ZlZCBnZXRfc3RhdHMKCS0gRml4ZWQgcGh5IGlvY3RsCgktIEZpeGVkIGRl diAtPiBuZGV2IHR5cG8KCS0gRml4ZWQgc2V0X3dvbCBkb3VibGUgZGlzYWJsZQoKdjUKCS0gUmVt b3ZlIHVubmVjZXNzYXJ5IHBhcmVudGhlc2lzCgktIFVzZSBib29sIGZvciBiY21hc3BfbmV0Zmls dF9jaGVja19kdXAoKQoKdjQKICAgICAgICAtIEFkZHJlc3Mgc3BhcnNlIHdhcm5pbmdzCiAgICAg ICAgLSBGaXggb25lIG1vcmUgcmV2ZXJzZSB4bWFzIHRyZWUgdmlvbGF0aW9uCiAgICAgICAgLSBJ bXByb3ZlIGVycm9yIGxvZ2ljIGZvciBiY21hc3BfbmV0ZmlsdF9nZXRfcmVnX29mZnNldCgpCgkt IFJlbW92ZSBpbmxpbmVzCgp2MwogICAgICAgIC0gRml4IGxvZ2ljIGVycm9yIHdpdGggbmV0IHN0 YXRzIHdoZXJlIHNvbWUgc3RhdHMgd2VyZSBtaXNzaW5nCiAgICAgICAgLSBHZW5lcmFsIGNsZWFu IHVwIGFkZHJlc3NpbmcgZm9ybWF0dGluZy9zcGVsbGluZy9jb25zaXN0ZW5jeQogICAgICAgIC0g VXNlIGRldl9lcnJfcHJvYmUgdG8gc2F2ZSBhIGZldyBMb0NzCiAgICAgICAgLSBVc2UgcHV0X3Vu YWxpZ25lZCB3aGVuIHVwZGF0aW5nIG5ldCBzdGF0cwoKdjIKICAgICAgICAtIFJlcGxhY2UgYSBj b3VwbGUgZnVuY3Rpb25zIHdpdGggaGVscGVyIGZ1bmN0aW9ucwogICAgICAgIC0gRml4IGEgZmV3 IFdvTCBpc3N1ZXMKCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnICAgICAg ICAgICAgICB8ICAgMTEgKwogZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vTWFrZWZpbGUg ICAgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIv TWFrZWZpbGUgICAgICAgIHwgICAgMiArCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9h c3AyL2JjbWFzcC5jICAgICAgICB8ICA3MjYgKysrKysrKysrKysKIGRyaXZlcnMvbmV0L2V0aGVy bmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmggICAgICAgIHwgIDUwNCArKysrKysrKwogLi4uL25l dC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9ldGh0b29sLmMgICAgfCAgIDQwICsKIGRy aXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYyAgIHwgMTM1OCAr KysrKysrKysrKysrKysrPQorKysrCiAuLi4vbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNt YXNwX2ludGZfZGVmcy5oICB8ICAxOTYgKysrCiA4IGZpbGVzIGNoYW5nZWQsIDI4MzggaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29t L2FzcDIvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9i cm9hZGNvbS9hc3AyL2JjbWFzcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRo ZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv bmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2V0aHRvb2wuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNt YXNwX2ludGZfZGVmcy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRj b20vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2I9CnJvYWRjb20vS2NvbmZpZwppbmRl eCA5NDg1ODZiZjFiNWIuLmQ0MTY2MTQxMTQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRo ZXJuZXQvYnJvYWRjb20vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNv bS9LY29uZmlnCkBAIC0yNTUsNCArMjU1LDE1IEBAIGNvbmZpZyBCTlhUX0hXTU9OCiAJICBTYXkg WSBpZiB5b3Ugd2FudCB0byBleHBvc2UgdGhlIHRoZXJtYWwgc2Vuc29yIGRhdGEgb24gTmV0WHRy ZW1lLUMvRQogCSAgZGV2aWNlcywgdmlhIHRoZSBod21vbiBzeXNmcyBpbnRlcmZhY2UuCj0yMAor Y29uZmlnIEJDTUFTUAorCXRyaXN0YXRlICJCcm9hZGNvbSBBU1AgMi4wIEV0aGVybmV0IHN1cHBv cnQiCisJZGVmYXVsdCBBUkNIX0JSQ01TVEIKKwlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IE1JSQor CXNlbGVjdCBQSFlMSUIKKwlzZWxlY3QgTURJT19CQ01fVU5JTUFDCisJaGVscAorCSAgVGhpcyBj b25maWd1cmF0aW9uIGVuYWJsZXMgdGhlIEJyb2FkY29tIEFTUCAyLjAgRXRoZXJuZXQgY29udHJv bGxlcgorCSAgZHJpdmVyIHdoaWNoIGlzIHByZXNlbnQgaW4gQnJvYWRjb20gU1RCIFNvQ3Mgc3Vj aCBhcyA3MjE2NS4KKwogZW5kaWYgIyBORVRfVkVORE9SX0JST0FEQ09NCmRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVy bmV0Lz0KYnJvYWRjb20vTWFrZWZpbGUKaW5kZXggMGRkZmI1YjVkNTNjLi5iYWM1Y2I2YWQwY2Qg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL01ha2VmaWxlCisrKyBi L2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL01ha2VmaWxlCkBAIC0xNywzICsxNyw0IEBA IG9iai0kKENPTkZJR19CR01BQ19CQ01BKSArPTNEIGJnbWFjLWJjbWEubyBiZ21hYy1iY21hLW1k aT0Kby5vCiBvYmotJChDT05GSUdfQkdNQUNfUExBVEZPUk0pICs9M0QgYmdtYWMtcGxhdGZvcm0u bwogb2JqLSQoQ09ORklHX1NZU1RFTVBPUlQpICs9M0QgYmNtc3lzcG9ydC5vCiBvYmotJChDT05G SUdfQk5YVCkgKz0zRCBibnh0Lworb2JqLSQoQ09ORklHX0JDTUFTUCkgKz0zRCBhc3AyLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9NYWtlZmlsZSBiL2Ry aXZlcnMvbmV0L2V0aGU9CnJuZXQvYnJvYWRjb20vYXNwMi9NYWtlZmlsZQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmUwNzU1MDMxNWY4MwotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvTWFrZWZpbGUKQEAgLTAsMCAr MSwyIEBACitvYmotJChDT05GSUdfQkNNQVNQKSArPTNEIGJjbS1hc3AubworYmNtLWFzcC1vYmpz IDo9M0QgYmNtYXNwLm8gYmNtYXNwX2ludGYubyBiY21hc3BfZXRodG9vbC5vCmRpZmYgLS1naXQg YS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jIGIvZHJpdmVycy9u ZXQvZXRoZT0Kcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uMzRhMGM3NTQ1ZWJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuYwpAQCAtMCwwICsxLDcyNiBA QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBCcm9hZGNvbSBT VEIgQVNQIDIuMCBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjMgQnJvYWRjb20KKyAq LworI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxh bi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQu aD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4K KyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5o PgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0 Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSAiYmNtYXNwLmgiCisj aW5jbHVkZSAiYmNtYXNwX2ludGZfZGVmcy5oIgorCitzdGF0aWMgdm9pZCBfaW50cjJfbWFza19j bGVhcihzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsIHUzMiBtYXNrKQoreworCWludHIyX2NvcmVf d2wocHJpdiwgbWFzaywgQVNQX0lOVFIyX01BU0tfQ0xFQVIpOworCXByaXYtPmlycV9tYXNrICY9 M0Qgfm1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIF9pbnRyMl9tYXNrX3NldChzdHJ1Y3QgYmNtYXNw X3ByaXYgKnByaXYsIHUzMiBtYXNrKQoreworCWludHIyX2NvcmVfd2wocHJpdiwgbWFzaywgQVNQ X0lOVFIyX01BU0tfU0VUKTsKKwlwcml2LT5pcnFfbWFzayB8PTNEIG1hc2s7Cit9CisKK3ZvaWQg YmNtYXNwX2VuYWJsZV90eF9pcnEoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBpbnQgZW4pCit7 CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisKKwlpZiAoZW4p CisJCV9pbnRyMl9tYXNrX2NsZWFyKHByaXYsIEFTUF9JTlRSMl9UWF9ERVNDKGludGYtPmNoYW5u ZWwpKTsKKwllbHNlCisJCV9pbnRyMl9tYXNrX3NldChwcml2LCBBU1BfSU5UUjJfVFhfREVTQyhp bnRmLT5jaGFubmVsKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChiY21hc3BfZW5hYmxlX3R4X2ly cSk7CisKK3ZvaWQgYmNtYXNwX2VuYWJsZV9yeF9pcnEoc3RydWN0IGJjbWFzcF9pbnRmICppbnRm LCBpbnQgZW4pCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7 CisKKwlpZiAoZW4pCisJCV9pbnRyMl9tYXNrX2NsZWFyKHByaXYsIEFTUF9JTlRSMl9SWF9FQ0go aW50Zi0+Y2hhbm5lbCkpOworCWVsc2UKKwkJX2ludHIyX21hc2tfc2V0KHByaXYsIEFTUF9JTlRS Ml9SWF9FQ0goaW50Zi0+Y2hhbm5lbCkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmNtYXNwX2Vu YWJsZV9yeF9pcnEpOworCitzdGF0aWMgdm9pZCBiY21hc3BfaW50cjJfbWFza19zZXRfYWxsKHN0 cnVjdCBiY21hc3BfcHJpdiAqcHJpdikKK3sKKwlfaW50cjJfbWFza19zZXQocHJpdiwgMHhmZmZm ZmZmZik7CisJcHJpdi0+aXJxX21hc2sgPTNEIDB4ZmZmZmZmZmY7Cit9CisKK3N0YXRpYyB2b2lk IGJjbWFzcF9pbnRyMl9jbGVhcl9hbGwoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2KQoreworCWlu dHIyX2NvcmVfd2wocHJpdiwgMHhmZmZmZmZmZiwgQVNQX0lOVFIyX0NMRUFSKTsKK30KKworc3Rh dGljIHZvaWQgYmNtYXNwX2ludHIyX2hhbmRsaW5nKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Ziwg dTMyIHN0YXR1cykKK3sKKwlpZiAoc3RhdHVzICYgQVNQX0lOVFIyX1JYX0VDSChpbnRmLT5jaGFu bmVsKSkgeworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmaW50Zi0+cnhfbmFwaSkp KSB7CisJCQliY21hc3BfZW5hYmxlX3J4X2lycShpbnRmLCAwKTsKKwkJCV9fbmFwaV9zY2hlZHVs ZV9pcnFvZmYoJmludGYtPnJ4X25hcGkpOworCQl9CisJfQorCisJaWYgKHN0YXR1cyAmIEFTUF9J TlRSMl9UWF9ERVNDKGludGYtPmNoYW5uZWwpKSB7CisJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVs ZV9wcmVwKCZpbnRmLT50eF9uYXBpKSkpIHsKKwkJCWJjbWFzcF9lbmFibGVfdHhfaXJxKGludGYs IDApOworCQkJX19uYXBpX3NjaGVkdWxlX2lycW9mZigmaW50Zi0+dHhfbmFwaSk7CisJCX0KKwl9 Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBiY21hc3BfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEp Cit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBkYXRhOworCXN0cnVjdCBiY21hc3Bf aW50ZiAqaW50ZjsKKwl1MzIgc3RhdHVzOworCWludCBpOworCisJc3RhdHVzID0zRCBpbnRyMl9j b3JlX3JsKHByaXYsIEFTUF9JTlRSMl9TVEFUVVMpICYKKwkJfmludHIyX2NvcmVfcmwocHJpdiwg QVNQX0lOVFIyX01BU0tfU1RBVFVTKTsKKworCWludHIyX2NvcmVfd2wocHJpdiwgc3RhdHVzLCBB U1BfSU5UUjJfQ0xFQVIpOworCisJaWYgKHVubGlrZWx5KHN0YXR1cyA9M0Q9M0QgMCkpIHsKKwkJ ZGV2X3dhcm4oJnByaXYtPnBkZXYtPmRldiwgImwyIHNwdXJpb3VzIGludGVycnVwdFxuIik7CisJ CXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBIYW5kbGUgaW50ZmVyZmFjZXMgKi8KKwlmb3Ig KGkgPTNEIDA7IGkgPCBwcml2LT5pbnRmX2NvdW50OyBpKyspIHsKKwkJaW50ZiA9M0QgcHJpdi0+ aW50ZnNbaV07CisJCWJjbWFzcF9pbnRyMl9oYW5kbGluZyhpbnRmLCBzdGF0dXMpOworCX0KKwor CXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBiY21hc3BfZmx1c2hfcnhfcG9ydChzdHJ1 Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBp bnRmLT5wYXJlbnQ7CisJdTMyIG1hc2s7CisKKwlzd2l0Y2ggKGludGYtPnBvcnQpIHsKKwljYXNl IDA6CisJCW1hc2sgPTNEIEFTUF9DVFJMX1VNQUMwX0ZMVVNIX01BU0s7CisJCWJyZWFrOworCWNh c2UgMToKKwkJbWFzayA9M0QgQVNQX0NUUkxfVU1BQzFfRkxVU0hfTUFTSzsKKwkJYnJlYWs7CisJ Y2FzZSAyOgorCQltYXNrID0zRCBBU1BfQ1RSTF9TUEJfRkxVU0hfTUFTSzsKKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJLyogTm90IHZhbGlkIHBvcnQgKi8KKwkJcmV0dXJuOworCX0KKworCXJ4X2N0 cmxfY29yZV93bChwcml2LCBtYXNrLCBwcml2LT5od19pbmZvLT5yeF9jdHJsX2ZsdXNoKTsKK30K Kworc3RhdGljIHZvaWQgYmNtYXNwX2FkZHJfdG9fdWludCh1bnNpZ25lZCBjaGFyICphZGRyLCB1 MzIgKmhpZ2gsIHUzMiAqbG93KQoreworCSpoaWdoID0zRCAodTMyKShhZGRyWzBdIDw8IDggfCBh ZGRyWzFdKTsKKwkqbG93ID0zRCAodTMyKShhZGRyWzJdIDw8IDI0IHwgYWRkclszXSA8PCAxNiB8 IGFkZHJbNF0gPDwgOCB8CisJCSAgICAgYWRkcls1XSk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFz cF9zZXRfbWRhX2ZpbHRlcihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkJICBjb25zdCB1 bnNpZ25lZCBjaGFyICphZGRyLAorCQkJCSAgdW5zaWduZWQgY2hhciAqbWFzaywKKwkJCQkgIHVu c2lnbmVkIGludCBpKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+cGFy ZW50OworCXUzMiBhZGRyX2gsIGFkZHJfbCwgbWFza19oLCBtYXNrX2w7CisKKwkvKiBTZXQgbG9j YWwgY29weSAqLworCWV0aGVyX2FkZHJfY29weShwcml2LT5tZGFfZmlsdGVyc1tpXS5tYXNrLCBt YXNrKTsKKwlldGhlcl9hZGRyX2NvcHkocHJpdi0+bWRhX2ZpbHRlcnNbaV0uYWRkciwgYWRkcik7 CisKKwkvKiBXcml0ZSB0byBIVyAqLworCWJjbWFzcF9hZGRyX3RvX3VpbnQocHJpdi0+bWRhX2Zp bHRlcnNbaV0ubWFzaywgJm1hc2tfaCwgJm1hc2tfbCk7CisJYmNtYXNwX2FkZHJfdG9fdWludChw cml2LT5tZGFfZmlsdGVyc1tpXS5hZGRyLCAmYWRkcl9oLCAmYWRkcl9sKTsKKwlyeF9maWx0ZXJf Y29yZV93bChwcml2LCBhZGRyX2gsIEFTUF9SWF9GSUxURVJfTURBX1BBVF9IKGkpKTsKKwlyeF9m aWx0ZXJfY29yZV93bChwcml2LCBhZGRyX2wsIEFTUF9SWF9GSUxURVJfTURBX1BBVF9MKGkpKTsK KwlyeF9maWx0ZXJfY29yZV93bChwcml2LCBtYXNrX2gsIEFTUF9SWF9GSUxURVJfTURBX01TS19I KGkpKTsKKwlyeF9maWx0ZXJfY29yZV93bChwcml2LCBtYXNrX2wsIEFTUF9SWF9GSUxURVJfTURB X01TS19MKGkpKTsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2VuX21kYV9maWx0ZXIoc3RydWN0 IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuLAorCQkJCSB1bnNpZ25lZCBpbnQgaSkKK3sKKwlz dHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsKKworCWlmIChwcml2LT5t ZGFfZmlsdGVyc1tpXS5lbiA9M0Q9M0QgZW4pCisJCXJldHVybjsKKworCXByaXYtPm1kYV9maWx0 ZXJzW2ldLmVuID0zRCBlbjsKKwlwcml2LT5tZGFfZmlsdGVyc1tpXS5wb3J0ID0zRCBpbnRmLT5w b3J0OworCisJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgKChpbnRmLT5jaGFubmVsICsgOCkgfAor CQkJICAoZW4gPDwgQVNQX1JYX0ZJTFRFUl9NREFfQ0ZHX0VOX1NISUZUKSB8CisJCQkgIEFTUF9S WF9GSUxURVJfTURBX0NGR19VTUNfU0VMKGludGYtPnBvcnQpKSwKKwkJCSAgQVNQX1JYX0ZJTFRF Ul9NREFfQ0ZHKGkpKTsKK30KKworLyogVGhlcmUgYXJlIDMyIE1EQSBmaWx0ZXJzIHNoYXJlZCBi ZXR3ZWVuIGFsbCBwb3J0cywgd2UgcmVzZXJ2ZSA0IGZpbHRlcnM9CiBwZXIKKyAqIHBvcnQgZm9y IHRoZSBmb2xsb3dpbmcuCisgKiAtIFByb21pc2M6IEZpbHRlciB0byBhbGxvdyBhbGwgcGFja2V0 cyB3aGVuIHByb21pc2MgaXMgZW5hYmxlZAorICogLSBBbGwgTXVsdGljYXN0CisgKiAtIEJyb2Fk Y2FzdAorICogLSBPd24gYWRkcmVzcworICoKKyAqIFRoZSByZXNlcnZlZCBmaWx0ZXJzIGFyZSBp ZGVudGlmaWVkIGFzIHNvLgorICogLSBQcm9taXNjOiAoaW5kZXggKiA0KSArIDAKKyAqIC0gQWxs IE11bHRpY2FzdDogKGluZGV4ICogNCkgKyAxCisgKiAtIEJyb2FkY2FzdDogKGluZGV4ICogNCkg KyAyCisgKiAtIE93biBhZGRyZXNzOiAoaW5kZXggKiA0KSArIDMKKyAqLworZW51bSBhc3Bfcnhf ZmlsdGVyX2lkIHsKKwlBU1BfUlhfRklMVEVSX01EQV9QUk9NSVNDID0zRCAwLAorCUFTUF9SWF9G SUxURVJfTURBX0FMTE1VTFRJLAorCUFTUF9SWF9GSUxURVJfTURBX0JST0FEQ0FTVCwKKwlBU1Bf UlhfRklMVEVSX01EQV9PV05fQUREUiwKKwlBU1BfUlhfRklMVEVSX01EQV9SRVNfQ09VTlQsCit9 OworCisjZGVmaW5lIEFTUF9SWF9GSUxUX01EQV9SRVNfQ09VTlQoaW50ZikJKChpbnRmKS0+cGFy ZW50LT5pbnRmX2NvdW50IFwKKwkJCQkJICogQVNQX1JYX0ZJTFRFUl9NREFfUkVTX0NPVU5UKQor CisjZGVmaW5lIEFTUF9SWF9GSUxUX01EQShpbnRmLCBuYW1lKQkoKChpbnRmKS0+aW5kZXggKiBc CisJCQkJCSAgQVNQX1JYX0ZJTFRFUl9NREFfUkVTX0NPVU5UKSBcCisJCQkJCSArIEFTUF9SWF9G SUxURVJfTURBXyMjbmFtZSkKKwordm9pZCBiY21hc3Bfc2V0X3Byb21pc2Moc3RydWN0IGJjbWFz cF9pbnRmICppbnRmLCBib29sIGVuKQoreworCXVuc2lnbmVkIGludCBpID0zRCBBU1BfUlhfRklM VF9NREEoaW50ZiwgUFJPTUlTQyk7CisJdW5zaWduZWQgY2hhciBwcm9taXNjW0VUSF9BTEVOXTsK KworCWV0aF96ZXJvX2FkZHIocHJvbWlzYyk7CisJLyogU2V0IG1hc2sgdG8gMDA6MDA6MDA6MDA6 MDA6MDAgdG8gbWF0Y2ggYWxsIHBhY2tldHMgKi8KKwliY21hc3Bfc2V0X21kYV9maWx0ZXIoaW50 ZiwgcHJvbWlzYywgcHJvbWlzYywgaSk7CisJYmNtYXNwX2VuX21kYV9maWx0ZXIoaW50ZiwgZW4s IGkpOworfQorCit2b2lkIGJjbWFzcF9zZXRfYWxsbXVsdGkoc3RydWN0IGJjbWFzcF9pbnRmICpp bnRmLCBib29sIGVuKQoreworCXVuc2lnbmVkIGNoYXIgYWxsbXVsdGlbXSA9M0QgezB4MDEsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCXVuc2lnbmVkIGludCBpID0zRCBBU1BfUlhf RklMVF9NREEoaW50ZiwgQUxMTVVMVEkpOworCisJLyogU2V0IG1hc2sgdG8gMDE6MDA6MDA6MDA6 MDA6MDAgdG8gbWF0Y2ggYWxsIG11bHRpY2FzdCAqLworCWJjbWFzcF9zZXRfbWRhX2ZpbHRlcihp bnRmLCBhbGxtdWx0aSwgYWxsbXVsdGksIGkpOworCWJjbWFzcF9lbl9tZGFfZmlsdGVyKGludGYs IGVuLCBpKTsKK30KKwordm9pZCBiY21hc3Bfc2V0X2Jyb2FkKHN0cnVjdCBiY21hc3BfaW50ZiAq aW50ZiwgYm9vbCBlbikKK3sKKwl1bnNpZ25lZCBpbnQgaSA9M0QgQVNQX1JYX0ZJTFRfTURBKGlu dGYsIEJST0FEQ0FTVCk7CisJdW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVOXTsKKworCWV0aF9i cm9hZGNhc3RfYWRkcihhZGRyKTsKKwliY21hc3Bfc2V0X21kYV9maWx0ZXIoaW50ZiwgYWRkciwg YWRkciwgaSk7CisJYmNtYXNwX2VuX21kYV9maWx0ZXIoaW50ZiwgZW4sIGkpOworfQorCit2b2lk IGJjbWFzcF9zZXRfb2FkZHIoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBjb25zdCB1bnNpZ25l ZCBjaGFyICphZGRyLAorCQkgICAgICBib29sIGVuKQoreworCXVuc2lnbmVkIGNoYXIgbWFza1td ID0zRCB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CisJdW5zaWduZWQgaW50 IGkgPTNEIEFTUF9SWF9GSUxUX01EQShpbnRmLCBPV05fQUREUik7CisKKwliY21hc3Bfc2V0X21k YV9maWx0ZXIoaW50ZiwgYWRkciwgbWFzaywgaSk7CisJYmNtYXNwX2VuX21kYV9maWx0ZXIoaW50 ZiwgZW4sIGkpOworfQorCit2b2lkIGJjbWFzcF9kaXNhYmxlX2FsbF9maWx0ZXJzKHN0cnVjdCBi Y21hc3BfaW50ZiAqaW50ZikKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGludGYt PnBhcmVudDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIERpc2FibGUgYWxsIGZpbHRlcnMgaGVs ZCBieSB0aGlzIHBvcnQgKi8KKwlmb3IgKGkgPTNEIEFTUF9SWF9GSUxUX01EQV9SRVNfQ09VTlQo aW50Zik7IGkgPCBOVU1fTURBX0ZJTFRFUlM7IGkrKykgeworCQlpZiAocHJpdi0+bWRhX2ZpbHRl cnNbaV0uZW4gJiYKKwkJICAgIHByaXYtPm1kYV9maWx0ZXJzW2ldLnBvcnQgPTNEPTNEIGludGYt PnBvcnQpCisJCQliY21hc3BfZW5fbWRhX2ZpbHRlcihpbnRmLCAwLCBpKTsKKwl9Cit9CisKK3N0 YXRpYyBpbnQgYmNtYXNwX2NvbWJpbmVfc2V0X2ZpbHRlcihzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYsCisJCQkJICAgICB1bnNpZ25lZCBjaGFyICphZGRyLCB1bnNpZ25lZCBjaGFyICptYXNrLAor CQkJCSAgICAgaW50IGkpCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5w YXJlbnQ7CisJdTY0IGFkZHIxLCBhZGRyMiwgbWFzazEsIG1hc2syLCBtYXNrMzsKKworCS8qIFN3 aXRjaCB0byB1NjQgdG8gaGVscCB3aXRoIHRoZSBjYWxjdWxhdGlvbnMgKi8KKwlhZGRyMSA9M0Qg ZXRoZXJfYWRkcl90b191NjQocHJpdi0+bWRhX2ZpbHRlcnNbaV0uYWRkcik7CisJbWFzazEgPTNE IGV0aGVyX2FkZHJfdG9fdTY0KHByaXYtPm1kYV9maWx0ZXJzW2ldLm1hc2spOworCWFkZHIyID0z RCBldGhlcl9hZGRyX3RvX3U2NChhZGRyKTsKKwltYXNrMiA9M0QgZXRoZXJfYWRkcl90b191NjQo bWFzayk7CisKKwkvKiBDaGVjayBpZiBvbmUgZmlsdGVyIHJlc2lkZXMgd2l0aGluIHRoZSBvdGhl ciAqLworCW1hc2szID0zRCBtYXNrMSAmIG1hc2syOworCWlmIChtYXNrMyA9M0Q9M0QgbWFzazEg JiYgKChhZGRyMSAmIG1hc2sxKSA9M0Q9M0QgKGFkZHIyICYgbWFzazEpKSkgeworCQkvKiBGaWx0 ZXIgMiByZXNpZGVzIHdpdGhpbiBmaWx0ZXIgMSwgc28gZXZlcnl0aGluZyBpcyBnb29kICovCisJ CXJldHVybiAwOworCX0gZWxzZSBpZiAobWFzazMgPTNEPTNEIG1hc2syICYmICgoYWRkcjEgJiBt YXNrMikgPTNEPTNEIChhZGRyMiAmIG1hc2syKSk9CikgeworCQkvKiBGaWx0ZXIgMSByZXNpZGVz IHdpdGhpbiBmaWx0ZXIgMiwgc28gc3dhcCBmaWx0ZXJzICovCisJCWJjbWFzcF9zZXRfbWRhX2Zp bHRlcihpbnRmLCBhZGRyLCBtYXNrLCBpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVW5hYmxl IHRvIGNvbWJpbmUgKi8KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IGJjbWFzcF9zZXRfZW5f bWRhX2ZpbHRlcihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHVuc2lnbmVkIGNoYXIgKmFkZHIs CisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKm1hc2spCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpw cml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJaW50IGksIHJldDsKKworCWZvciAoaSA9M0QgQVNQX1JY X0ZJTFRfTURBX1JFU19DT1VOVChpbnRmKTsgaSA8IE5VTV9NREFfRklMVEVSUzsgaSsrKSB7CisJ CS8qIElmIGZpbHRlciBub3QgZW5hYmxlZCBvciBiZWxvbmdzIHRvIGFub3RoZXIgcG9ydCBza2lw ICovCisJCWlmICghcHJpdi0+bWRhX2ZpbHRlcnNbaV0uZW4gfHwKKwkJICAgIHByaXYtPm1kYV9m aWx0ZXJzW2ldLnBvcnQgIT0zRCBpbnRmLT5wb3J0KQorCQkJY29udGludWU7CisKKwkJLyogQXR0 ZW1wdCB0byBjb21iaW5lIGZpbHRlcnMgKi8KKwkJcmV0ID0zRCBiY21hc3BfY29tYmluZV9zZXRf ZmlsdGVyKGludGYsIGFkZHIsIG1hc2ssIGkpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiAwOwor CX0KKworCS8qIENyZWF0ZSBuZXcgZmlsdGVyIGlmIHBvc3NpYmxlICovCisJZm9yIChpID0zRCBB U1BfUlhfRklMVF9NREFfUkVTX0NPVU5UKGludGYpOyBpIDwgTlVNX01EQV9GSUxURVJTOyBpKysp IHsKKwkJaWYgKHByaXYtPm1kYV9maWx0ZXJzW2ldLmVuKQorCQkJY29udGludWU7CisKKwkJYmNt YXNwX3NldF9tZGFfZmlsdGVyKGludGYsIGFkZHIsIG1hc2ssIGkpOworCQliY21hc3BfZW5fbWRh X2ZpbHRlcihpbnRmLCAxLCBpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTm8gcm9vbSBmb3Ig bmV3IGZpbHRlciAqLworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBiY21hc3Bf Y29yZV9pbml0X2ZpbHRlcnMoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2KQoreworCWludCBpOwor CisJLyogRGlzYWJsZSBhbGwgZmlsdGVycyBhbmQgcmVzZXQgc29mdHdhcmUgdmlldyBzaW5jZSB0 aGUgSFcKKwkgKiBjYW4gbG9zZSBjb250ZXh0IHdoaWxlIGluIGRlZXAgc2xlZXAgc3VzcGVuZCBz dGF0ZXMKKwkgKi8KKwlmb3IgKGkgPTNEIDA7IGkgPCBOVU1fTURBX0ZJTFRFUlM7IGkrKykgewor CQlyeF9maWx0ZXJfY29yZV93bChwcml2LCAweDAsIEFTUF9SWF9GSUxURVJfTURBX0NGRyhpKSk7 CisJCXByaXYtPm1kYV9maWx0ZXJzW2ldLmVuID0zRCAwOworCX0KKworCS8qIFRvcCBsZXZlbCBm aWx0ZXIgZW5hYmxlIGJpdCBzaG91bGQgYmUgZW5hYmxlZCBhdCBhbGwgdGltZXMsIHNldAorCSAq IEdFTl9XQUtFX0NMRUFSIHRvIGNsZWFyIHRoZSBuZXR3b3JrIGZpbHRlciB3YWtlLXVwIHdoaWNo IHdvdWxkCisJICogb3RoZXJ3aXNlIGJlIHN0aWNreQorCSAqLworCXJ4X2ZpbHRlcl9jb3JlX3ds KHByaXYsIChBU1BfUlhfRklMVEVSX09QVVRfRU4gfAorCQkJICBBU1BfUlhfRklMVEVSX01EQV9F TiB8CisJCQkgIEFTUF9SWF9GSUxURVJfR0VOX1dLX0NMUiB8CisJCQkgIEFTUF9SWF9GSUxURVJf TlRfRkxUX0VOKSwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9CTEtfQ1RSTCk7Cit9CisKKy8qIEFTUCBj b3JlIGluaXRpYWxpemF0aW9uICovCitzdGF0aWMgdm9pZCBiY21hc3BfY29yZV9pbml0KHN0cnVj dCBiY21hc3BfcHJpdiAqcHJpdikKK3sKKwl0eF9hbmFseXRpY3NfY29yZV93bChwcml2LCAweDAs IEFTUF9UWF9BTkFMWVRJQ1NfQ1RSTCk7CisJcnhfYW5hbHl0aWNzX2NvcmVfd2wocHJpdiwgMHg0 LCBBU1BfUlhfQU5BTFlUSUNTX0NUUkwpOworCisJcnhfZWRwa3RfY29yZV93bChwcml2LCAoQVNQ X0VEUEtUX0hEUl9TWl8xMjggPDwgQVNQX0VEUEtUX0hEUl9TWl9TSElGVCksCisJCQkgQVNQX0VE UEtUX0hEUl9DRkcpOworCXJ4X2VkcGt0X2NvcmVfd2wocHJpdiwKKwkJCSAoQVNQX0VEUEtUX0VO RElfQlRfU1dQX1dEIDw8IEFTUF9FRFBLVF9FTkRJX0RFU0NfU0hJRlQpLAorCQkJIEFTUF9FRFBL VF9FTkRJKTsKKworCXJ4X2VkcGt0X2NvcmVfd2wocHJpdiwgMHgxYiwgQVNQX0VEUEtUX0JVUlNU X0JVRl9QU0NBTF9UT1VUKTsKKwlyeF9lZHBrdF9jb3JlX3dsKHByaXYsIDB4M2U4LCBBU1BfRURQ S1RfQlVSU1RfQlVGX1dSSVRFX1RPVVQpOworCXJ4X2VkcGt0X2NvcmVfd2wocHJpdiwgMHgzZTgs IEFTUF9FRFBLVF9CVVJTVF9CVUZfUkVBRF9UT1VUKTsKKworCXJ4X2VkcGt0X2NvcmVfd2wocHJp diwgQVNQX0VEUEtUX0VOQUJMRV9FTiwgQVNQX0VEUEtUX0VOQUJMRSk7CisKKwkvKiBEaXNhYmxl IGFuZCBjbGVhciBib3RoIFVuaU1BQydzIHdha2UtdXAgaW50ZXJydXB0cyB0byBhdm9pZAorCSAq IHN0aWNreSBpbnRlcnJ1cHRzLgorCSAqLworCV9pbnRyMl9tYXNrX3NldChwcml2LCBBU1BfSU5U UjJfVU1DMF9XQUtFIHwgQVNQX0lOVFIyX1VNQzFfV0FLRSk7CisJaW50cjJfY29yZV93bChwcml2 LCBBU1BfSU5UUjJfVU1DMF9XQUtFIHwgQVNQX0lOVFIyX1VNQzFfV0FLRSwKKwkJICAgICAgQVNQ X0lOVFIyX0NMRUFSKTsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2NvcmVfY2xvY2tfc2VsZWN0 KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwgYm9vbCBzbG93KQoreworCXUzMiByZWc7CisKKwly ZWcgPTNEIGN0cmxfY29yZV9ybChwcml2LCBBU1BfQ1RSTF9DT1JFX0NMT0NLX1NFTEVDVCk7CisJ aWYgKHNsb3cpCisJCXJlZyAmPTNEIH5BU1BfQ1RSTF9DT1JFX0NMT0NLX1NFTEVDVF9NQUlOOwor CWVsc2UKKwkJcmVnIHw9M0QgQVNQX0NUUkxfQ09SRV9DTE9DS19TRUxFQ1RfTUFJTjsKKwljdHJs X2NvcmVfd2wocHJpdiwgcmVnLCBBU1BfQ1RSTF9DT1JFX0NMT0NLX1NFTEVDVCk7Cit9CisKK3N0 YXRpYyB2b2lkIGJjbWFzcF9jb3JlX2Nsb2NrX3NldF9sbChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnBy aXYsIHUzMiBjbHIsIHUzPQoyIHNldCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0zRCBjdHJsX2Nv cmVfcmwocHJpdiwgQVNQX0NUUkxfQ0xPQ0tfQ1RSTCk7CisJcmVnICY9M0QgfmNscjsKKwlyZWcg fD0zRCBzZXQ7CisJY3RybF9jb3JlX3dsKHByaXYsIHJlZywgQVNQX0NUUkxfQ0xPQ0tfQ1RSTCk7 CisKKwlyZWcgPTNEIGN0cmxfY29yZV9ybChwcml2LCBBU1BfQ1RSTF9TQ1JBVENIXzApOworCXJl ZyAmPTNEIH5jbHI7CisJcmVnIHw9M0Qgc2V0OworCWN0cmxfY29yZV93bChwcml2LCByZWcsIEFT UF9DVFJMX1NDUkFUQ0hfMCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9jb3JlX2Nsb2NrX3Nl dChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsIHUzMiBjbHIsIHUzMiBzPQpldCkKK3sKKwl1bnNp Z25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmNsa19sb2NrLCBm bGFncyk7CisJYmNtYXNwX2NvcmVfY2xvY2tfc2V0X2xsKHByaXYsIGNsciwgc2V0KTsKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5jbGtfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIGJj bWFzcF9jb3JlX2Nsb2NrX3NldF9pbnRmKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgYm9vbCBl bikKK3sKKwl1MzIgaW50Zl9tYXNrID0zRCBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9SR01JSV9E SVMoaW50Zi0+cG9ydCk7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJl bnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcmVnOworCisJLyogV2hlbiBlbmFibGlu ZyBhbiBpbnRlcmZhY2UsIGlmIHRoZSBSWCBvciBUWCBjbG9ja3Mgd2VyZSBub3QgZW5hYmxlZCwK KwkgKiBlbmFibGUgdGhlbS4gQ29udmVyc2VseSwgd2hpbGUgZGlzYWJsaW5nIGFuIGludGVyZmFj ZSwgaWYgdGhpcyBpcworCSAqIHRoZSBsYXN0IG9uZSBlbmFibGVkLCB3ZSBjYW4gdHVybiBvZmYg dGhlIHNoYXJlZCBSWCBhbmQgVFggY2xvY2tzIGFzCisJICogd2VsbC4gV2UgY29udHJvbCBlbmFi bGUgYml0cyB3aGljaCBpcyB3aHkgd2UgdGVzdCBmb3IgZXF1YWxpdHkgb24KKwkgKiB0aGUgUkdN SUkgY2xvY2sgYml0IG1hc2suCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmNsa19s b2NrLCBmbGFncyk7CisJaWYgKGVuKSB7CisJCWludGZfbWFzayB8PTNEIEFTUF9DVFJMX0NMT0NL X0NUUkxfQVNQX1RYX0RJU0FCTEUgfAorCQkJICAgICBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9S WF9ESVNBQkxFOworCQliY21hc3BfY29yZV9jbG9ja19zZXRfbGwocHJpdiwgaW50Zl9tYXNrLCAw KTsKKwl9IGVsc2UgeworCQlyZWcgPTNEIGN0cmxfY29yZV9ybChwcml2LCBBU1BfQ1RSTF9TQ1JB VENIXzApIHwgaW50Zl9tYXNrOworCQlpZiAoKHJlZyAmIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQ X1JHTUlJX01BU0spID0zRD0zRAorCQkgICAgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfUkdNSUlf TUFTSykKKwkJCWludGZfbWFzayB8PTNEIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1RYX0RJU0FC TEUgfAorCQkJCSAgICAgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfUlhfRElTQUJMRTsKKwkJYmNt YXNwX2NvcmVfY2xvY2tfc2V0X2xsKHByaXYsIDAsIGludGZfbWFzayk7CisJfQorCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnByaXYtPmNsa19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQg YmNtYXNwX2lzX3BvcnRfdmFsaWQoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LCBpbnQgcG9ydCkK K3sKKwkvKiBRdWljayBzYW5pdHkgY2hlY2sKKwkgKiAgIFBvcnRzIDAvMSByZXNlcnZlZCBmb3Ig dW5pbWFjCisJICogICBNYXggc3VwcG9ydGVkIHBvcnRzIGlzIDIKKwkgKi8KKwlyZXR1cm4gcG9y dCA9M0Q9M0QgMCB8fCBwb3J0ID0zRD0zRCAxOworfQorCitzdGF0aWMgc3RydWN0IGJjbWFzcF9o d19pbmZvIHYyMF9od19pbmZvID0zRCB7CisJLnJ4X2N0cmxfZmx1c2ggPTNEIEFTUF9SWF9DVFJM X0ZMVVNILAorCS51bWFjMmZiID0zRCBVTUFDMkZCX09GRlNFVCwKKwkucnhfY3RybF9mYl9vdXRf ZnJhbWVfY291bnQgPTNEIEFTUF9SWF9DVFJMX0ZCX09VVF9GUkFNRV9DT1VOVCwKKwkucnhfY3Ry bF9mYl9maWx0X291dF9mcmFtZV9jb3VudCA9M0QgQVNQX1JYX0NUUkxfRkJfRklMVF9PVVRfRlJB TUVfQ09VTlQsCisJLnJ4X2N0cmxfZmJfcnhfZmlmb19kZXB0aCA9M0QgQVNQX1JYX0NUUkxfRkJf UlhfRklGT19ERVBUSCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmNtYXNwX3BsYXRfZGF0 YSB2MjBfcGxhdF9kYXRhID0zRCB7CisJLmh3X2luZm8gPTNEICZ2MjBfaHdfaW5mbywKK307CisK K3N0YXRpYyBzdHJ1Y3QgYmNtYXNwX2h3X2luZm8gdjIxX2h3X2luZm8gPTNEIHsKKwkucnhfY3Ry bF9mbHVzaCA9M0QgQVNQX1JYX0NUUkxfRkxVU0hfMl8xLAorCS51bWFjMmZiID0zRCBVTUFDMkZC X09GRlNFVF8yXzEsCisJLnJ4X2N0cmxfZmJfb3V0X2ZyYW1lX2NvdW50ID0zRCBBU1BfUlhfQ1RS TF9GQl9PVVRfRlJBTUVfQ09VTlRfMl8xLAorCS5yeF9jdHJsX2ZiX2ZpbHRfb3V0X2ZyYW1lX2Nv dW50ID0zRAorCQlBU1BfUlhfQ1RSTF9GQl9GSUxUX09VVF9GUkFNRV9DT1VOVF8yXzEsCisJLnJ4 X2N0cmxfZmJfcnhfZmlmb19kZXB0aCA9M0QgQVNQX1JYX0NUUkxfRkJfUlhfRklGT19ERVBUSF8y XzEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJjbWFzcF9wbGF0X2RhdGEgdjIxX3BsYXRf ZGF0YSA9M0QgeworCS5od19pbmZvID0zRCAmdjIxX2h3X2luZm8sCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCBiY21hc3Bfb2ZfbWF0Y2hbXSA9M0QgeworCXsgLmNvbXBh dGlibGUgPTNEICJicmNtLGFzcC12Mi4wIiwgLmRhdGEgPTNEICZ2MjBfcGxhdF9kYXRhIH0sCisJ eyAuY29tcGF0aWJsZSA9M0QgImJyY20sYXNwLXYyLjEiLCAuZGF0YSA9M0QgJnYyMV9wbGF0X2Rh dGEgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg YmNtYXNwX29mX21hdGNoKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmNt YXNwX21kaW9fb2ZfbWF0Y2hbXSA9M0QgeworCXsgLmNvbXBhdGlibGUgPTNEICJicmNtLGFzcC12 Mi4xLW1kaW8iLCB9LAorCXsgLmNvbXBhdGlibGUgPTNEICJicmNtLGFzcC12Mi4wLW1kaW8iLCB9 LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBiY21h c3BfbWRpb19vZl9tYXRjaCk7CisKK3N0YXRpYyBpbnQgYmNtYXNwX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwb3J0c19ub2RlLCAq aW50Zl9ub2RlOworCWNvbnN0IHN0cnVjdCBiY21hc3BfcGxhdF9kYXRhICpwZGF0YTsKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPTNEICZwZGV2LT5kZXY7CisJaW50IHJldCA9M0QgMCwgaSwgY291bnQg PTNEIDAsIHBvcnQ7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2OworCXN0cnVjdCBiY21hc3Bf aW50ZiAqaW50ZjsKKworCXByaXYgPTNEIGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiks IEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5p cnEgPTNEIHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHByaXYtPmlycSA8PTNEIDAp CisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgImludmFsaWQgaW50ZXJydXB0 XG4iKTsKKworCXByaXYtPmNsayA9M0QgZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoZGV2 LCAic3dfYXNwIik7CisJaWYgKElTX0VSUihwcml2LT5jbGspKQorCQlyZXR1cm4gZGV2X2Vycl9w cm9iZShkZXYsIFBUUl9FUlIocHJpdi0+Y2xrKSwKKwkJCQkJCQkgImZhaWxlZCB0byByZXF1ZXN0 IGNsb2NrXG4iKTsKKworCS8qIEJhc2UgZnJvbSBwYXJlbnQgbm9kZSAqLworCXByaXYtPmJhc2Ug PTNEIGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsKKwlpZiAoSVNfRVJS KHByaXYtPmJhc2UpKQorCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0+ YmFzZSksICJmYWlsZWQgdG8gaW9tYXBcbiIpOworCisJcmV0ID0zRCBkbWFfc2V0X21hc2tfYW5k X2NvaGVyZW50KCZwZGV2LT5kZXYsIERNQV9CSVRfTUFTSyg0MCkpOworCWlmIChyZXQpCisJCXJl dHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAidW5hYmxlIHRvIHNldCBETUEgbWFzazogJWRc biIsIHJldCk7CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgcHJpdik7CisJcHJpdi0+ cGRldiA9M0QgcGRldjsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bWRhX2xvY2spOworCXNwaW5f bG9ja19pbml0KCZwcml2LT5jbGtfbG9jayk7CisKKwlwZGF0YSA9M0QgZGV2aWNlX2dldF9tYXRj aF9kYXRhKCZwZGV2LT5kZXYpOworCWlmICghcGRhdGEpCisJCXJldHVybiBkZXZfZXJyX3Byb2Jl KGRldiwgLUVJTlZBTCwgInVuYWJsZSB0byBmaW5kIHBsYXRmb3JtIGRhdGFcbiIpOworCisJcHJp di0+aHdfaW5mbyA9M0QgcGRhdGEtPmh3X2luZm87CisKKwkvKiBFbmFibGUgYWxsIGNsb2NrcyB0 byBlbnN1cmUgc3VjY2Vzc2Z1bCBwcm9iaW5nICovCisJYmNtYXNwX2NvcmVfY2xvY2tfc2V0KHBy aXYsIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX0FMTF9ESVNBQkxFLCAwKTsKKworCS8qIFN3aXRj aCB0byB0aGUgbWFpbiBjbG9jayAqLworCWJjbWFzcF9jb3JlX2Nsb2NrX3NlbGVjdChwcml2LCBm YWxzZSk7CisKKwliY21hc3BfaW50cjJfbWFza19zZXRfYWxsKHByaXYpOworCWJjbWFzcF9pbnRy Ml9jbGVhcl9hbGwocHJpdik7CisKKwlyZXQgPTNEIGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRl diwgcHJpdi0+aXJxLCBiY21hc3BfaXNyLCAwLAorCQkJICAgICAgIHBkZXYtPm5hbWUsIHByaXYp OworCWlmIChyZXQpCisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiZmFpbGVkIHRv IHJlcXVlc3QgQVNQIGludGVycnVwdDogJWQiLCByZT0KdCk7CisKKwkvKiBSZWdpc3RlciBtZGlv IGNoaWxkIG5vZGVzICovCisJb2ZfcGxhdGZvcm1fcG9wdWxhdGUoZGV2LT5vZl9ub2RlLCBiY21h c3BfbWRpb19vZl9tYXRjaCwgTlVMTCwgZGV2KTsKKworCS8qIEFTUCBzcGVjaWZpYyBpbml0aWFs aXphdGlvbiwgTmVlZHMgdG8gYmUgZG9uZSByZWdhcmRsZXNzIG9mCisJICogaG93IG1hbnkgaW50 ZXJmYWNlcyBjb21lIHVwLgorCSAqLworCWJjbWFzcF9jb3JlX2luaXQocHJpdik7CisJYmNtYXNw X2NvcmVfaW5pdF9maWx0ZXJzKHByaXYpOworCisJcG9ydHNfbm9kZSA9M0Qgb2ZfZmluZF9ub2Rl X2J5X25hbWUoZGV2LT5vZl9ub2RlLCAiZXRoZXJuZXQtcG9ydHMiKTsKKwlpZiAoIXBvcnRzX25v ZGUpIHsKKwkJZGV2X3dhcm4oZGV2LCAiTm8gcG9ydHMgZm91bmRcbiIpOworCQlyZXR1cm4gMDsK Kwl9CisKKwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShwb3J0c19ub2RlLCBpbnRm X25vZGUpIHsKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIoaW50Zl9ub2RlLCAicmVnIiwgJnBvcnQp OworCQlpZiAoIWJjbWFzcF9pc19wb3J0X3ZhbGlkKHByaXYsIHBvcnQpKSB7CisJCQlkZXZfd2Fy bihkZXYsICIlcE9GOiAlZCBpcyBhbiBpbnZhbGlkIHBvcnRcbiIsCisJCQkJIGludGZfbm9kZSwg cG9ydCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXByaXYtPmludGZfY291bnQrKzsKKwl9CisK Kwlwcml2LT5pbnRmcyA9M0QgZGV2bV9rY2FsbG9jKGRldiwgcHJpdi0+aW50Zl9jb3VudCwKKwkJ CQkgICBzaXplb2Yoc3RydWN0IGJjbWFzcF9pbnRmICopLAorCQkJCSAgIEdGUF9LRVJORUwpOwor CWlmICghcHJpdi0+aW50ZnMpIHsKKwkJcmV0ID0zRCAtRU5PTUVNOworCQlnb3RvIG9mX3B1dF9l eGl0OworCX0KKworCS8qIFByb2JlIGVhY2ggaW50ZXJmYWNlIChJbml0aWFsaXphdGlvbiBzaG91 bGQgY29udGludWUgZXZlbiBpZgorCSAqIGludGVyZmFjZXMgYXJlIHVuYWJsZSB0byBjb21lIHVw KQorCSAqLworCWkgPTNEIDA7CisJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUocG9y dHNfbm9kZSwgaW50Zl9ub2RlKSB7CisJCXByaXYtPmludGZzW2ldID0zRCBiY21hc3BfaW50ZXJm YWNlX2NyZWF0ZShwcml2LCBpbnRmX25vZGUsIGkpOworCQlpKys7CisJfQorCisJLyogRHJvcCB0 aGUgY2xvY2sgcmVmZXJlbmNlIGNvdW50IG5vdyBhbmQgbGV0IG5kb19vcGVuKCkvbmRvX2Nsb3Nl KCkKKwkgKiBtYW5hZ2UgaXQgZm9yIHVzIGZyb20gbm93IG9uLgorCSAqLworCWJjbWFzcF9jb3Jl X2Nsb2NrX3NldChwcml2LCAwLCBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9BTExfRElTQUJMRSk7 CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrKTsKKworCS8qIE5vdyBkbyB0aGUg cmVnaXN0cmF0aW9uIG9mIHRoZSBuZXR3b3JrIHBvcnRzIHdoaWNoIHdpbGwgdGFrZSBjYXJlCisJ ICogb2YgbWFuYWdpbmcgdGhlIGNsb2NrIHByb3Blcmx5LgorCSAqLworCWZvciAoaSA9M0QgMDsg aSA8IHByaXYtPmludGZfY291bnQ7IGkrKykgeworCQlpbnRmID0zRCBwcml2LT5pbnRmc1tpXTsK KwkJaWYgKCFpbnRmKQorCQkJY29udGludWU7CisKKwkJcmV0ID0zRCByZWdpc3Rlcl9uZXRkZXYo aW50Zi0+bmRldik7CisJCWlmIChyZXQpIHsKKwkJCW5ldGRldl9lcnIoaW50Zi0+bmRldiwKKwkJ CQkgICAiZmFpbGVkIHRvIHJlZ2lzdGVyIG5ldF9kZXZpY2U6ICVkXG4iLCByZXQpOworCQkJYmNt YXNwX2ludGVyZmFjZV9kZXN0cm95KGludGYsIGZhbHNlKTsKKwkJCWNvbnRpbnVlOworCQl9CisJ CWNvdW50Kys7CisJfQorCisJZGV2X2luZm8oZGV2LCAiSW5pdGlhbGl6ZWQgJWQgcG9ydChzKVxu IiwgY291bnQpOworCitvZl9wdXRfZXhpdDoKKwlvZl9ub2RlX3B1dChwb3J0c19ub2RlKTsKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJjbWFzcF9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGRldl9nZXRf ZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGY7CisJaW50IGk7 CisKKwlmb3IgKGkgPTNEIDA7IGkgPCBwcml2LT5pbnRmX2NvdW50OyBpKyspIHsKKwkJaW50ZiA9 M0QgcHJpdi0+aW50ZnNbaV07CisJCWlmICghaW50ZikKKwkJCWNvbnRpbnVlOworCisJCWJjbWFz cF9pbnRlcmZhY2VfZGVzdHJveShpbnRmLCB0cnVlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgYmNtYXNwX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cit7CisJaW50IHJldDsKKworCXJldCA9M0QgYmNtYXNwX3JlbW92ZShwZGV2KTsKKwlpZiAocmV0 KQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtb3ZlOiAlZFxuIiwgcmV0KTsK K30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCBiY21hc3Bfc3VzcGVuZChzdHJ1Y3QgZGV2 aWNlICpkKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgZGV2X2dldF9kcnZkYXRh KGQpOworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZjsKKwlpbnQgaSwgcmV0OworCisJZm9yIChp ID0zRCAwOyBpIDwgcHJpdi0+aW50Zl9jb3VudDsgaSsrKSB7CisJCWludGYgPTNEIHByaXYtPmlu dGZzW2ldOworCQlpZiAoIWludGYpCisJCQljb250aW51ZTsKKworCQlyZXQgPTNEIGJjbWFzcF9p bnRlcmZhY2Vfc3VzcGVuZChpbnRmKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCXJl dCA9M0QgY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmNsayk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCS8qIFdoZXRoZXIgV2FrZS1vbi1MQU4gaXMgZW5hYmxlZCBvciBub3QsIHdlIGNh biBhbHdheXMgZGlzYWJsZQorCSAqIHRoZSBzaGFyZWQgVFggY2xvY2sKKwkgKi8KKwliY21hc3Bf Y29yZV9jbG9ja19zZXQocHJpdiwgMCwgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfVFhfRElTQUJM RSk7CisKKwliY21hc3BfY29yZV9jbG9ja19zZWxlY3QocHJpdiwgdHJ1ZSk7CisKKwljbGtfZGlz YWJsZV91bnByZXBhcmUocHJpdi0+Y2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp bnQgX19tYXliZV91bnVzZWQgYmNtYXNwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkKQoreworCXN0 cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBi Y21hc3BfaW50ZiAqaW50ZjsKKwlpbnQgaSwgcmV0OworCisJcmV0ID0zRCBjbGtfcHJlcGFyZV9l bmFibGUocHJpdi0+Y2xrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU3dpdGNo IHRvIHRoZSBtYWluIGNsb2NrIGRvbWFpbiAqLworCWJjbWFzcF9jb3JlX2Nsb2NrX3NlbGVjdChw cml2LCBmYWxzZSk7CisKKwkvKiBSZS1lbmFibGUgYWxsIGNsb2NrcyBmb3IgcmUtaW5pdGlhbGl6 YXRpb24gKi8KKwliY21hc3BfY29yZV9jbG9ja19zZXQocHJpdiwgQVNQX0NUUkxfQ0xPQ0tfQ1RS TF9BU1BfQUxMX0RJU0FCTEUsIDApOworCisJYmNtYXNwX2NvcmVfaW5pdChwcml2KTsKKwliY21h c3BfY29yZV9pbml0X2ZpbHRlcnMocHJpdik7CisKKwkvKiBBbmQgZGlzYWJsZSB0aGVtIHRvIGxl dCB0aGUgbmV0d29yayBkZXZpY2VzIHRha2UgY2FyZSBvZiB0aGVtICovCisJYmNtYXNwX2NvcmVf Y2xvY2tfc2V0KHByaXYsIDAsIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX0FMTF9ESVNBQkxFKTsK KworCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5jbGspOworCisJZm9yIChpID0zRCAwOyBp IDwgcHJpdi0+aW50Zl9jb3VudDsgaSsrKSB7CisJCWludGYgPTNEIHByaXYtPmludGZzW2ldOwor CQlpZiAoIWludGYpCisJCQljb250aW51ZTsKKworCQlyZXQgPTNEIGJjbWFzcF9pbnRlcmZhY2Vf cmVzdW1lKGludGYpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGJjbWFzcF9wbV9vcHMsCisJCQkgYmNtYXNw X3N1c3BlbmQsIGJjbWFzcF9yZXN1bWUpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBiY21hc3BfZHJpdmVyID0zRCB7CisJLnByb2JlID0zRCBiY21hc3BfcHJvYmUsCisJLnJlbW92 ZSA9M0QgYmNtYXNwX3JlbW92ZSwKKwkuc2h1dGRvd24gPTNEIGJjbWFzcF9zaHV0ZG93biwKKwku ZHJpdmVyID0zRCB7CisJCS5uYW1lID0zRCAiYnJjbSxhc3AtdjIiLAorCQkub2ZfbWF0Y2hfdGFi bGUgPTNEIGJjbWFzcF9vZl9tYXRjaCwKKwkJLnBtID0zRCAmYmNtYXNwX3BtX29wcywKKwl9LAor fTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYmNtYXNwX2RyaXZlcik7CisKK01PRFVMRV9BVVRI T1IoIkJyb2FkY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIEFTUCAyLjAgRXRo ZXJuZXQgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06YnJjbSxh c3AtdjIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0 L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmggYi9kcml2ZXJzL25ldC9ldGhlPQpybmV0 L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi4wZjVjMjg1YzYxODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5oCkBAIC0wLDAgKzEsNTA0IEBACisvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworI2lmbmRlZiBfX0JDTUFTUF9ICisjZGVmaW5l IF9fQkNNQVNQX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxp bnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLTY0LW5vbmF0b21pYy1oaS1sby5oPgorI2lu Y2x1ZGUgPHVhcGkvbGludXgvZXRodG9vbC5oPgorCisjZGVmaW5lIEFTUF9JTlRSMl9PRkZTRVQJ CQkweDEwMDAKKyNkZWZpbmUgIEFTUF9JTlRSMl9TVEFUVVMJCQkweDAKKyNkZWZpbmUgIEFTUF9J TlRSMl9TRVQJCQkJMHg0CisjZGVmaW5lICBBU1BfSU5UUjJfQ0xFQVIJCQkweDgKKyNkZWZpbmUg IEFTUF9JTlRSMl9NQVNLX1NUQVRVUwkJCTB4YworI2RlZmluZSAgQVNQX0lOVFIyX01BU0tfU0VU CQkJMHgxMAorI2RlZmluZSAgQVNQX0lOVFIyX01BU0tfQ0xFQVIJCQkweDE0CisKKyNkZWZpbmUg QVNQX0lOVFIyX1JYX0VDSChpbnRyKQkJCUJJVChpbnRyKQorI2RlZmluZSBBU1BfSU5UUjJfVFhf REVTQyhpbnRyKQkJCUJJVCgoaW50cikgKyAxNCkKKyNkZWZpbmUgQVNQX0lOVFIyX1VNQzBfV0FL RQkJCUJJVCgyMikKKyNkZWZpbmUgQVNQX0lOVFIyX1VNQzFfV0FLRQkJCUJJVCgyOCkKKworI2Rl ZmluZSBBU1BfV0FLRVVQX0lOVFIyX09GRlNFVAkJCTB4MTIwMAorI2RlZmluZSAgQVNQX1dBS0VV UF9JTlRSMl9TVEFUVVMJCTB4MAorI2RlZmluZSAgQVNQX1dBS0VVUF9JTlRSMl9TRVQJCQkweDQK KyNkZWZpbmUgIEFTUF9XQUtFVVBfSU5UUjJfQ0xFQVIJCQkweDgKKyNkZWZpbmUgIEFTUF9XQUtF VVBfSU5UUjJfTUFTS19TVEFUVVMJCTB4YworI2RlZmluZSAgQVNQX1dBS0VVUF9JTlRSMl9NQVNL X1NFVAkJMHgxMAorI2RlZmluZSAgQVNQX1dBS0VVUF9JTlRSMl9NQVNLX0NMRUFSCQkweDE0Cisj ZGVmaW5lIEFTUF9XQUtFVVBfSU5UUjJfTVBEXzAJCQlCSVQoMCkKKyNkZWZpbmUgQVNQX1dBS0VV UF9JTlRSMl9NUERfMQkJCUJJVCgxKQorI2RlZmluZSBBU1BfV0FLRVVQX0lOVFIyX0ZJTFRfMAkJ CUJJVCgyKQorI2RlZmluZSBBU1BfV0FLRVVQX0lOVFIyX0ZJTFRfMQkJCUJJVCgzKQorI2RlZmlu ZSBBU1BfV0FLRVVQX0lOVFIyX0ZXCQkJQklUKDQpCisKKyNkZWZpbmUgQVNQX1RYX0FOQUxZVElD U19PRkZTRVQJCQkweDRjMDAwCisjZGVmaW5lICBBU1BfVFhfQU5BTFlUSUNTX0NUUkwJCQkweDAK KworI2RlZmluZSBBU1BfUlhfQU5BTFlUSUNTX09GRlNFVAkJCTB4OTgwMDAKKyNkZWZpbmUgIEFT UF9SWF9BTkFMWVRJQ1NfQ1RSTAkJCTB4MAorCisjZGVmaW5lIEFTUF9SWF9DVFJMX09GRlNFVAkJ CTB4OWYwMDAKKyNkZWZpbmUgQVNQX1JYX0NUUkxfVU1BQ18wX0ZSQU1FX0NPVU5UCQkweDgKKyNk ZWZpbmUgQVNQX1JYX0NUUkxfVU1BQ18xX0ZSQU1FX0NPVU5UCQkweGMKKyNkZWZpbmUgQVNQX1JY X0NUUkxfRkJfMF9GUkFNRV9DT1VOVAkJMHgxNAorI2RlZmluZSBBU1BfUlhfQ1RSTF9GQl8xX0ZS QU1FX0NPVU5UCQkweDE4CisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCXzhfRlJBTUVfQ09VTlQJCTB4 MWMKKy8qIGFzcDIuMSBkaXZlcmdlcyBvZmZzZXRzIGhlcmUgKi8KKy8qIEFTUDIuMCAqLworI2Rl ZmluZSBBU1BfUlhfQ1RSTF9GQl9PVVRfRlJBTUVfQ09VTlQJCTB4MjAKKyNkZWZpbmUgQVNQX1JY X0NUUkxfRkJfRklMVF9PVVRfRlJBTUVfQ09VTlQJMHgyNAorI2RlZmluZSBBU1BfUlhfQ1RSTF9G TFVTSAkJCTB4MjgKKyNkZWZpbmUgIEFTUF9DVFJMX1VNQUMwX0ZMVVNIX01BU0sJCShCSVQoMCkg fCBCSVQoMTIpKQorI2RlZmluZSAgQVNQX0NUUkxfVU1BQzFfRkxVU0hfTUFTSwkJKEJJVCgxKSB8 IEJJVCgxMykpCisjZGVmaW5lICBBU1BfQ1RSTF9TUEJfRkxVU0hfTUFTSwkJKEJJVCg4KSB8IEJJ VCgyMCkpCisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCX1JYX0ZJRk9fREVQVEgJCTB4MzAKKy8qIEFT UDIuMSAqLworI2RlZmluZSBBU1BfUlhfQ1RSTF9GQl85X0ZSQU1FX0NPVU5UXzJfMQkweDIwCisj ZGVmaW5lIEFTUF9SWF9DVFJMX0ZCXzEwX0ZSQU1FX0NPVU5UXzJfMQkweDI0CisjZGVmaW5lIEFT UF9SWF9DVFJMX0ZCX09VVF9GUkFNRV9DT1VOVF8yXzEJMHgyOAorI2RlZmluZSBBU1BfUlhfQ1RS TF9GQl9GSUxUX09VVF9GUkFNRV9DT1VOVF8yXzEJMHgyYworI2RlZmluZSBBU1BfUlhfQ1RSTF9G TFVTSF8yXzEJCQkweDMwCisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCX1JYX0ZJRk9fREVQVEhfMl8x CTB4MzgKKworI2RlZmluZSBBU1BfUlhfRklMVEVSX09GRlNFVAkJCTB4ODAwMDAKKyNkZWZpbmUg IEFTUF9SWF9GSUxURVJfQkxLX0NUUkwJCQkweDAKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX09Q VVRfRU4JCQlCSVQoMCkKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX01EQV9FTgkJCUJJVCgxKQor I2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTE5SX01ECQkJQklUKDIpCisjZGVmaW5lICAgQVNQX1JY X0ZJTFRFUl9HRU5fV0tfRU4JCUJJVCgzKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfR0VOX1dL X0NMUgkJQklUKDQpCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9OVF9GTFRfRU4JCUJJVCg1KQor I2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9NREFfQ0ZHKHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4 MTAwKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTURBX0NGR19FTl9TSElGVAk4CisjZGVmaW5l ICAgQVNQX1JYX0ZJTFRFUl9NREFfQ0ZHX1VNQ19TRUwoc2VsKQkoKHNlbCkgPiAxID8gQklUKDE3 KSA6IFwKKwkJCQkJCSBCSVQoKHNlbCkgKyA5KSkKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTURB X1BBVF9IKHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4MTA0KQorI2RlZmluZSAgQVNQX1JYX0ZJ TFRFUl9NREFfUEFUX0woc2VsKQkJKCgoc2VsKSAqIDB4MTQpICsgMHgxMDgpCisjZGVmaW5lICBB U1BfUlhfRklMVEVSX01EQV9NU0tfSChzZWwpCQkoKChzZWwpICogMHgxNCkgKyAweDEwYykKKyNk ZWZpbmUgIEFTUF9SWF9GSUxURVJfTURBX01TS19MKHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4 MTEwKQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9NREFfQ0ZHKHNlbCkJCSgoKHNlbCkgKiAweDE0 KSArIDB4MTAwKQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9NREFfUEFUX0goc2VsKQkJKCgoc2Vs KSAqIDB4MTQpICsgMHgxMDQpCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX01EQV9QQVRfTChzZWwp CQkoKChzZWwpICogMHgxNCkgKyAweDEwOCkKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTURBX01T S19IKHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4MTBjKQorI2RlZmluZSAgQVNQX1JYX0ZJTFRF Ul9NREFfTVNLX0woc2VsKQkJKCgoc2VsKSAqIDB4MTQpICsgMHgxMTApCisjZGVmaW5lICBBU1Bf UlhfRklMVEVSX05FVF9DRkcoc2VsKQkJKCgoc2VsKSAqIDB4YTA0KSArIDB4NDAwKQorI2RlZmlu ZSAgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19DSChzZWwpCQkoKHNlbCkgPDwgMCkKKyNkZWZpbmUg ICBBU1BfUlhfRklMVEVSX05FVF9DRkdfRU4JCUJJVCg5KQorI2RlZmluZSAgIEFTUF9SWF9GSUxU RVJfTkVUX0NGR19MMl9FTgkJQklUKDEwKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX0NG R19MM19FTgkJQklUKDExKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19MNF9FTgkJ QklUKDEyKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19MM19GUk0oc2VsKQkoKHNl bCkgPDwgMTMpCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0w0X0ZSTShzZWwpCSgo c2VsKSA8PCAxNSkKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX05FVF9DRkdfVU1DKHNlbCkJQklU KChzZWwpICsgMTkpCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0RNQV9FTgkJQklU KDI3KQorCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRfTUFYCQkzMgorI2RlZmlu ZSAgQVNQX1JYX0ZJTFRFUl9ORVRfUEFUKHNlbCwgYmxvY2ssIG9mZikgXAorCQkoKChzZWwpICog MHhhMDQpICsgKChibG9jaykgKiAweDIwMCkgKyAob2ZmKSArIDB4NjAwKQorI2RlZmluZSAgQVNQ X1JYX0ZJTFRFUl9ORVRfTUFTSyhzZWwsIGJsb2NrLCBvZmYpIFwKKwkJKCgoc2VsKSAqIDB4YTA0 KSArICgoYmxvY2spICogMHgyMDApICsgKG9mZikgKyAweDcwMCkKKworI2RlZmluZSAgQVNQX1JY X0ZJTFRFUl9ORVRfT0ZGU0VUKHNlbCkJCSgoKHNlbCkgKiAweGEwNCkgKyAweGUwMCkKKyNkZWZp bmUgICBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRfTDIodmFsKQkoKHZhbCkgPDwgMCkKKyNkZWZp bmUgICBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRfTDNfMCh2YWwpCSgodmFsKSA8PCA4KQorI2Rl ZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX09GRlNFVF9MM18xKHZhbCkJKCh2YWwpIDw8IDE2KQor I2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX09GRlNFVF9MNCh2YWwpCSgodmFsKSA8PCAyNCkK KworI2RlZmluZSBBU1BfRURQS1RfT0ZGU0VUCQkJMHg5YzAwMAorI2RlZmluZSAgQVNQX0VEUEtU X0VOQUJMRQkJCTB4NAorI2RlZmluZSAgIEFTUF9FRFBLVF9FTkFCTEVfRU4JCQlCSVQoMCkKKyNk ZWZpbmUgIEFTUF9FRFBLVF9IRFJfQ0ZHCQkJMHhjCisjZGVmaW5lICAgQVNQX0VEUEtUX0hEUl9T Wl9TSElGVAkJMgorI2RlZmluZSAgIEFTUF9FRFBLVF9IRFJfU1pfMzIJCQkwCisjZGVmaW5lICAg QVNQX0VEUEtUX0hEUl9TWl82NAkJCTEKKyNkZWZpbmUgICBBU1BfRURQS1RfSERSX1NaXzk2CQkJ MgorI2RlZmluZSAgIEFTUF9FRFBLVF9IRFJfU1pfMTI4CQkJMworI2RlZmluZSBBU1BfRURQS1Rf QlVSU1RfQlVGX1BTQ0FMX1RPVVQJCTB4MTAKKyNkZWZpbmUgQVNQX0VEUEtUX0JVUlNUX0JVRl9X UklURV9UT1VUCQkweDE0CisjZGVmaW5lIEFTUF9FRFBLVF9CVVJTVF9CVUZfUkVBRF9UT1VUCQkw eDE4CisjZGVmaW5lIEFTUF9FRFBLVF9SWF9UU19DT1VOVEVSCQkJMHgzOAorI2RlZmluZSAgQVNQ X0VEUEtUX0VOREkJCQkJMHg0OAorI2RlZmluZSAgIEFTUF9FRFBLVF9FTkRJX0RFU0NfU0hJRlQJ CTgKKyNkZWZpbmUgICBBU1BfRURQS1RfRU5ESV9OT19CVF9TV1AJCTAKKyNkZWZpbmUgICBBU1Bf RURQS1RfRU5ESV9CVF9TV1BfV0QJCTEKKyNkZWZpbmUgQVNQX0VEUEtUX1JYX1BLVF9DTlQJCQkw eDEzOAorI2RlZmluZSBBU1BfRURQS1RfSERSX0VYVFJfQ05UCQkJMHgxM2MKKyNkZWZpbmUgQVNQ X0VEUEtUX0hEUl9PVVRfQ05UCQkJMHgxNDAKKworI2RlZmluZSBBU1BfQ1RSTAkJCQkweDEwMTAw MAorI2RlZmluZSAgQVNQX0NUUkxfQVNQX1NXX0lOSVQJCQkweDA0CisjZGVmaW5lICAgQVNQX0NU UkxfQVNQX1NXX0lOSVRfQUNQVVNTX0NPUkUJQklUKDApCisjZGVmaW5lICAgQVNQX0NUUkxfQVNQ X1NXX0lOSVRfQVNQX1RYCQlCSVQoMSkKKyNkZWZpbmUgICBBU1BfQ1RSTF9BU1BfU1dfSU5JVF9B U19SWAkJQklUKDIpCisjZGVmaW5lICAgQVNQX0NUUkxfQVNQX1NXX0lOSVRfQVNQX1JHTUlJX1VN QUMwCUJJVCgzKQorI2RlZmluZSAgIEFTUF9DVFJMX0FTUF9TV19JTklUX0FTUF9SR01JSV9VTUFD MQlCSVQoNCkKKyNkZWZpbmUgICBBU1BfQ1RSTF9BU1BfU1dfSU5JVF9BU1BfWE1FTUlGCUJJVCg1 KQorI2RlZmluZSAgQVNQX0NUUkxfQ0xPQ0tfQ1RSTAkJCTB4MDQKKyNkZWZpbmUgICBBU1BfQ1RS TF9DTE9DS19DVFJMX0FTUF9UWF9ESVNBQkxFCUJJVCgwKQorI2RlZmluZSAgIEFTUF9DVFJMX0NM T0NLX0NUUkxfQVNQX1JYX0RJU0FCTEUJQklUKDEpCisjZGVmaW5lICAgQVNQX0NUUkxfQ0xPQ0tf Q1RSTF9BU1BfUkdNSUlfU0hJRlQJMgorI2RlZmluZSAgIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQ X1JHTUlJX01BU0sJKDB4NyA8PCBBU1BfQ1RSTF9DTE9DS19DVFJMX0E9ClNQX1JHTUlJX1NISUZU KQorI2RlZmluZSAgIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1JHTUlJX0RJUyh4KQlCSVQoQVNQ X0NUUkxfQ0xPQ0tfQ1RSTF9BU1A9Cl9SR01JSV9TSElGVCArICh4KSkKKyNkZWZpbmUgICBBU1Bf Q1RSTF9DTE9DS19DVFJMX0FTUF9BTExfRElTQUJMRQlHRU5NQVNLKDQsIDApCisjZGVmaW5lICBB U1BfQ1RSTF9DT1JFX0NMT0NLX1NFTEVDVAkJMHgwOAorI2RlZmluZSAgIEFTUF9DVFJMX0NPUkVf Q0xPQ0tfU0VMRUNUX01BSU4JQklUKDApCisjZGVmaW5lICBBU1BfQ1RSTF9TQ1JBVENIXzAJCQkw eDBjCisKK3N0cnVjdCBiY21hc3BfdHhfY2IgeworCXN0cnVjdCBza19idWZmCQkqc2tiOworCXVu c2lnbmVkIGludAkJYnl0ZXNfc2VudDsKKwlib29sCQkJbGFzdDsKKworCURFRklORV9ETUFfVU5N QVBfQUREUihkbWFfYWRkcik7CisJREVGSU5FX0RNQV9VTk1BUF9MRU4oZG1hX2xlbik7Cit9Owor CitzdHJ1Y3QgYmNtYXNwX3JlcyB7CisJLyogUGVyIGludGVyZmFjZSByZXNvdXJjZXMgKi8KKwkv KiBQb3J0ICovCisJdm9pZCBfX2lvbWVtCQkqdW1hYzsKKwl2b2lkIF9faW9tZW0JCSp1bWFjMmZi OworCXZvaWQgX19pb21lbQkJKnJnbWlpOworCisJLyogVFggc2xvd3BhdGgvY29uZmlndXJhdGlv biAqLworCXZvaWQgX19pb21lbQkJKnR4X3NwYl9jdHJsOworCXZvaWQgX19pb21lbQkJKnR4X3Nw Yl90b3A7CisJdm9pZCBfX2lvbWVtCQkqdHhfZXBrdF9jb3JlOworCXZvaWQgX19pb21lbQkJKnR4 X3BhdXNlX2N0cmw7Cit9OworCisjZGVmaW5lIERFU0NfQUREUih4KQkJKCh4KSAmIEdFTk1BU0tf VUxMKDM5LCAwKSkKKyNkZWZpbmUgREVTQ19GTEFHUyh4KQkJKCh4KSAmIEdFTk1BU0tfVUxMKDYz LCA0MCkpCisKK3N0cnVjdCBiY21hc3BfZGVzYyB7CisJdTY0CQlidWY7CisJI2RlZmluZSBERVND X0NIS1NVTQlCSVRfVUxMKDQwKQorCSNkZWZpbmUgREVTQ19DUkNfRVJSCUJJVF9VTEwoNDEpCisJ I2RlZmluZSBERVNDX1JYX1NZTV9FUlIJQklUX1VMTCg0MikKKwkjZGVmaW5lIERFU0NfTk9fT0NU X0FMTiBCSVRfVUxMKDQzKQorCSNkZWZpbmUgREVTQ19QS1RfVFJVQwlCSVRfVUxMKDQ0KQorCS8q ICAzOTowIChUWC9SWCkgYml0cyAwLTM5IG9mIGJ1ZiBhZGRyCisJICogICAgNDAgKFJYKSBjaGVj a3N1bQorCSAqICAgIDQxIChSWCkgY3JjX2Vycm9yCisJICogICAgNDIgKFJYKSByeF9zeW1ib2xf ZXJyb3IKKwkgKiAgICA0MyAoUlgpIG5vbl9vY3RldF9hbGlnbmVkCisJICogICAgNDQgKFJYKSBw a3RfdHJ1bmNhdGVkCisJICogICAgNDUgUmVzZXJ2ZWQKKwkgKiA1Njo0NiAoUlgpIG1hY19maWx0 ZXJfaWQKKwkgKiA2MDo1NyAoUlgpIHJ4X3BvcnRfbnVtICgwLXVuaWNtYWMwLCAxLXVuaW1hYzEp CisJICogICAgNjEgUmVzZXJ2ZWQKKwkgKiA2Mzo2MiAoVFgpIGZvcndhcmQgQ1JDLCBvdmVyd3Jp dGUgQ1JDCisJICovCisJdTMyCQlzaXplOworCXUzMgkJZmxhZ3M7CisJI2RlZmluZSBERVNDX0lO VF9FTiAgICAgQklUKDApCisJI2RlZmluZSBERVNDX1NPRglCSVQoMSkKKwkjZGVmaW5lIERFU0Nf RU9GCUJJVCgyKQorCSNkZWZpbmUgREVTQ19FUEtUX0NNRCAgIEJJVCgzKQorCSNkZWZpbmUgREVT Q19TQ1JBTV9TVCAgIEJJVCg4KQorCSNkZWZpbmUgREVTQ19TQ1JBTV9FTkQgIEJJVCg5KQorCSNk ZWZpbmUgREVTQ19QQ1BQICAgICAgIEJJVCgxMCkKKwkjZGVmaW5lIERFU0NfUFBQUCAgICAgICBC SVQoMTEpCisJLyogICAgIDAgKFRYKSB0eF9pbnRfZW4KKwkgKiAgICAgMSAoVFgvUlgpIFNPRgor CSAqICAgICAyIChUWC9SWCkgRU9GCisJICogICAgIDMgKFRYKSBlcGt0X2NvbW1hbmQKKwkgKiAg IDY6NCAoVFgpIFBBCisJICogICAgIDcgKFRYKSBwYXVzZSBhdCBkZXNjIGVuZAorCSAqICAgICA4 IChUWCkgc2NyYW1fc3RhcnQKKwkgKiAgICAgOSAoVFgpIHNjcmFtX2VuZAorCSAqICAgIDEwIChU WCkgUENQUAorCSAqICAgIDExIChUWCkgUFBQUAorCSAqIDE0OjEyIFJlc2VydmVkCisJICogICAg MTUgKFRYKSBwaWQgY2ggVmFsaWQKKwkgKiAxOToxNiAoVFgpIGRhdGFfcGt0X3R5cGUKKwkgKiAz MjoyMCAoVFgpIHBpZF9jaGFubmVsIChSWCkgbndfZmlsdGVyX2lkCisJICovCit9OworCitzdHJ1 Y3QgYmNtYXNwX2ludGY7CisKK3N0cnVjdCBiY21hc3BfaW50Zl9zdGF0czY0IHsKKwkvKiBSeCBT dGF0cyAqLworCXU2NF9zdGF0c190CXJ4X3BhY2tldHM7CisJdTY0X3N0YXRzX3QJcnhfYnl0ZXM7 CisJdTY0X3N0YXRzX3QJcnhfZXJyb3JzOworCXU2NF9zdGF0c190CXJ4X2Ryb3BwZWQ7CisJdTY0 X3N0YXRzX3QJcnhfY3JjX2VycnM7CisJdTY0X3N0YXRzX3QJcnhfc3ltX2VycnM7CisKKwkvKiBU eCBTdGF0cyovCisJdTY0X3N0YXRzX3QJdHhfcGFja2V0czsKKwl1NjRfc3RhdHNfdAl0eF9ieXRl czsKKwl1NjRfc3RhdHNfdAl0eF9lcnJvcnM7CisKKwlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMJCXN5 bmNwOworfTsKKworc3RydWN0IGJjbWFzcF9pbnRmX29wcyB7CisJdW5zaWduZWQgbG9uZyAoKnJ4 X2Rlc2NfcmVhZCkoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKTsKKwl2b2lkICgqcnhfYnVmZmVy X3dyaXRlKShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGRtYV9hZGRyX3QgYWRkcik7CisJdm9p ZCAoKnJ4X2Rlc2Nfd3JpdGUpKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgZG1hX2FkZHJfdCBh ZGRyKTsKKwl1bnNpZ25lZCBsb25nICgqdHhfcmVhZCkoc3RydWN0IGJjbWFzcF9pbnRmICppbnRm KTsKKwl2b2lkICgqdHhfd3JpdGUpKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgZG1hX2FkZHJf dCBhZGRyKTsKK307CisKK3N0cnVjdCBiY21hc3BfaW50ZiB7CisJc3RydWN0IG5ldF9kZXZpY2UJ CSpuZGV2OworCXN0cnVjdCBiY21hc3BfcHJpdgkJKnBhcmVudDsKKworCS8qIEFTUCBDaCAqLwor CWludAkJCQljaGFubmVsOworCWludAkJCQlwb3J0OworCWNvbnN0IHN0cnVjdCBiY21hc3BfaW50 Zl9vcHMJKm9wczsKKworCS8qIFVzZWQgZm9yIHNwbGl0dGluZyBzaGFyZWQgcmVzb3VyY2VzICov CisJaW50CQkJCWluZGV4OworCisJc3RydWN0IG5hcGlfc3RydWN0CXR4X25hcGk7CisJLyogVFgg cmluZywgc3RhcnRzIG9uIGEgbmV3IGNhY2hlbGluZSBib3VuZGFyeSAqLworCXZvaWQgX19pb21l bQkJCSp0eF9zcGJfZG1hOworCWludAkJCQl0eF9zcGJfaW5kZXg7CisJaW50CQkJCXR4X3NwYl9j bGVhbl9pbmRleDsKKwlzdHJ1Y3QgYmNtYXNwX2Rlc2MJCSp0eF9zcGJfY3B1OworCWRtYV9hZGRy X3QJCQl0eF9zcGJfZG1hX2FkZHI7CisJZG1hX2FkZHJfdAkJCXR4X3NwYl9kbWFfdmFsaWQ7CisJ ZG1hX2FkZHJfdAkJCXR4X3NwYl9kbWFfcmVhZDsKKwlzdHJ1Y3QgYmNtYXNwX3R4X2NiCQkqdHhf Y2JzOworCisJLyogUlggcmluZywgc3RhcnRzIG9uIGEgbmV3IGNhY2hlbGluZSBib3VuZGFyeSAq LworCXZvaWQgX19pb21lbQkJCSpyeF9lZHBrdF9jZmc7CisJdm9pZCBfX2lvbWVtCQkJKnJ4X2Vk cGt0X2RtYTsKKwlpbnQJCQkJcnhfZWRwa3RfaW5kZXg7CisJaW50CQkJCXJ4X2J1Zl9vcmRlcjsK KwlzdHJ1Y3QgYmNtYXNwX2Rlc2MJCSpyeF9lZHBrdF9jcHU7CisJZG1hX2FkZHJfdAkJCXJ4X2Vk cGt0X2RtYV9hZGRyOworCWRtYV9hZGRyX3QJCQlyeF9lZHBrdF9kbWFfcmVhZDsKKworCS8qIFJY IGJ1ZmZlciBwcmVmZXRjaGVyIHJpbmcqLworCXZvaWQJCQkJKnJ4X3JpbmdfY3B1OworCWRtYV9h ZGRyX3QJCQlyeF9yaW5nX2RtYTsKKwlkbWFfYWRkcl90CQkJcnhfcmluZ19kbWFfdmFsaWQ7CisJ c3RydWN0IG5hcGlfc3RydWN0CQlyeF9uYXBpOworCisJc3RydWN0IGJjbWFzcF9yZXMJCXJlczsK Kwl1bnNpZ25lZCBpbnQJCQljcmNfZndkOworCisJLyogUEhZIGRldmljZSAqLworCXN0cnVjdCBk ZXZpY2Vfbm9kZQkJKnBoeV9kbjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUJCSpuZGV2X2RuOworCXBo eV9pbnRlcmZhY2VfdAkJCXBoeV9pbnRlcmZhY2U7CisJYm9vbAkJCQlpbnRlcm5hbF9waHk7CisJ aW50CQkJCW9sZF9wYXVzZTsKKwlpbnQJCQkJb2xkX2xpbms7CisJaW50CQkJCW9sZF9kdXBsZXg7 CisKKwl1MzIJCQkJbXNnX2VuYWJsZTsKKworCS8qIFN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QgYmNt YXNwX2ludGZfc3RhdHM2NAlzdGF0czY0OworfTsKKworI2RlZmluZSBOVU1fTURBX0ZJTFRFUlMJ CQkJMzIKK3N0cnVjdCBiY21hc3BfbWRhX2ZpbHRlciB7CisJLyogQ3VycmVudCBvd25lciBvZiB0 aGlzIGZpbHRlciAqLworCWludAkJcG9ydDsKKwlib29sCQllbjsKKwl1OAkJYWRkcltFVEhfQUxF Tl07CisJdTgJCW1hc2tbRVRIX0FMRU5dOworfTsKKworc3RydWN0IGJjbWFzcF9wcml2OworCitz dHJ1Y3QgYmNtYXNwX2h3X2luZm8geworCXUzMgkJcnhfY3RybF9mbHVzaDsKKwl1MzIJCXVtYWMy ZmI7CisJdTMyCQlyeF9jdHJsX2ZiX291dF9mcmFtZV9jb3VudDsKKwl1MzIJCXJ4X2N0cmxfZmJf ZmlsdF9vdXRfZnJhbWVfY291bnQ7CisJdTMyCQlyeF9jdHJsX2ZiX3J4X2ZpZm9fZGVwdGg7Cit9 OworCitzdHJ1Y3QgYmNtYXNwX3BsYXRfZGF0YSB7CisJc3RydWN0IGJjbWFzcF9od19pbmZvCQkq aHdfaW5mbzsKK307CisKK3N0cnVjdCBiY21hc3BfcHJpdiB7CisJc3RydWN0IHBsYXRmb3JtX2Rl dmljZQkJKnBkZXY7CisJc3RydWN0IGNsawkJCSpjbGs7CisKKwlpbnQJCQkJaXJxOworCXUzMgkJ CQlpcnFfbWFzazsKKworCXZvaWQgX19pb21lbQkJCSpiYXNlOworCXN0cnVjdAliY21hc3BfaHdf aW5mbwkJKmh3X2luZm87CisKKwl1bnNpZ25lZCBpbnQJCQlpbnRmX2NvdW50OworCXN0cnVjdCBi Y21hc3BfaW50ZgkJKippbnRmczsKKworCXN0cnVjdCBiY21hc3BfbWRhX2ZpbHRlcgltZGFfZmls dGVyc1tOVU1fTURBX0ZJTFRFUlNdOworCisJLyogTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3MgZmls dGVycyBsb2NrICovCisJc3BpbmxvY2tfdAkJCW1kYV9sb2NrOworCisJLyogUHJvdGVjdHMgYWNj ZXNzZXMgdG8gQVNQX0NUUkxfQ0xPQ0tfQ1RSTCAqLworCXNwaW5sb2NrX3QJCQljbGtfbG9jazsK K307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBiY21hc3BfaW50Zl9yeF9kZXNjX3Jl YWQoc3RydWN0IGJjbWFzcF9pbnRmICppPQpudGYpCit7CisJcmV0dXJuIGludGYtPm9wcy0+cnhf ZGVzY19yZWFkKGludGYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmNtYXNwX2ludGZfcnhf YnVmZmVyX3dyaXRlKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwKKwkJCQkJICAgICAgIGRtYV9h ZGRyX3QgYWRkcikKK3sKKwlpbnRmLT5vcHMtPnJ4X2J1ZmZlcl93cml0ZShpbnRmLCBhZGRyKTsK K30KKworc3RhdGljIGlubGluZSB2b2lkIGJjbWFzcF9pbnRmX3J4X2Rlc2Nfd3JpdGUoc3RydWN0 IGJjbWFzcF9pbnRmICppbnRmLAorCQkJCQkgICAgIGRtYV9hZGRyX3QgYWRkcikKK3sKKwlpbnRm LT5vcHMtPnJ4X2Rlc2Nfd3JpdGUoaW50ZiwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5z aWduZWQgbG9uZyBiY21hc3BfaW50Zl90eF9yZWFkKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikK K3sKKwlyZXR1cm4gaW50Zi0+b3BzLT50eF9yZWFkKGludGYpOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQgYmNtYXNwX2ludGZfdHhfd3JpdGUoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLAorCQkJ CQlkbWFfYWRkcl90IGFkZHIpCit7CisJaW50Zi0+b3BzLT50eF93cml0ZShpbnRmLCBhZGRyKTsK K30KKworI2RlZmluZSBfX0JDTUFTUF9JT19NQUNSTyhuYW1lLCBtKQkJCQkJXAorc3RhdGljIGlu bGluZSB1MzIgbmFtZSMjX3JsKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgdTMyIG9mZikJCVwK K3sJCQkJCQkJCQlcCisJdTMyIHJlZyA9M0QgcmVhZGxfcmVsYXhlZChpbnRmLT5tICsgb2ZmKTsJ CQkJXAorCXJldHVybiByZWc7CQkJCQkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZv aWQgbmFtZSMjX3dsKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgdTMyIHZhbCwgdTMyIG9mZilc Cit7CQkJCQkJCQkJXAorCXdyaXRlbF9yZWxheGVkKHZhbCwgaW50Zi0+bSArIG9mZik7CQkJCVwK K30KKworI2RlZmluZSBCQ01BU1BfSU9fTUFDUk8obmFtZSkJCV9fQkNNQVNQX0lPX01BQ1JPKG5h bWUsIHJlcy5uYW1lKQorI2RlZmluZSBCQ01BU1BfRlBfSU9fTUFDUk8obmFtZSkJX19CQ01BU1Bf SU9fTUFDUk8obmFtZSwgbmFtZSkKKworQkNNQVNQX0lPX01BQ1JPKHVtYWMpOworQkNNQVNQX0lP X01BQ1JPKHVtYWMyZmIpOworQkNNQVNQX0lPX01BQ1JPKHJnbWlpKTsKK0JDTUFTUF9GUF9JT19N QUNSTyh0eF9zcGJfZG1hKTsKK0JDTUFTUF9JT19NQUNSTyh0eF9zcGJfY3RybCk7CitCQ01BU1Bf SU9fTUFDUk8odHhfc3BiX3RvcCk7CitCQ01BU1BfSU9fTUFDUk8odHhfZXBrdF9jb3JlKTsKK0JD TUFTUF9JT19NQUNSTyh0eF9wYXVzZV9jdHJsKTsKK0JDTUFTUF9GUF9JT19NQUNSTyhyeF9lZHBr dF9kbWEpOworQkNNQVNQX0ZQX0lPX01BQ1JPKHJ4X2VkcGt0X2NmZyk7CisKKyNkZWZpbmUgX19C Q01BU1BfRlBfSU9fTUFDUk9fUShuYW1lLCBtKQkJCQkJXAorc3RhdGljIGlubGluZSB1NjQgbmFt ZSMjX3JxKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgdTMyIG9mZikJCVwKK3sJCQkJCQkJCQlc CisJdTY0IHJlZyA9M0QgcmVhZHFfcmVsYXhlZChpbnRmLT5tICsgb2ZmKTsJCQkJXAorCXJldHVy biByZWc7CQkJCQkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgbmFtZSMjX3dx KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgdTY0IHZhbCwgdTMyIG9mZilcCit7CQkJCQkJCQkJ XAorCXdyaXRlcV9yZWxheGVkKHZhbCwgaW50Zi0+bSArIG9mZik7CQkJCVwKK30KKworI2RlZmlu ZSBCQ01BU1BfRlBfSU9fTUFDUk9fUShuYW1lKQlfX0JDTUFTUF9GUF9JT19NQUNST19RKG5hbWUs IG5hbWUpCisKK0JDTUFTUF9GUF9JT19NQUNST19RKHR4X3NwYl9kbWEpOworQkNNQVNQX0ZQX0lP X01BQ1JPX1EocnhfZWRwa3RfZG1hKTsKK0JDTUFTUF9GUF9JT19NQUNST19RKHJ4X2VkcGt0X2Nm Zyk7CisKKyNkZWZpbmUgUEtUX09GRkxPQURfTk9QCQkJKDAgPDwgMjgpCisjZGVmaW5lIFBLVF9P RkZMT0FEX0hEUl9PUAkJKDEgPDwgMjgpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9IRFJfV1JCQUNL CQlCSVQoMTkpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9IRFJfQ09VTlQoeCkJKCh4KSA8PCAxNikK KyNkZWZpbmUgIFBLVF9PRkZMT0FEX0hEUl9TSVpFXzEoeCkJKCh4KSA8PCA0KQorI2RlZmluZSAg UEtUX09GRkxPQURfSERSX1NJWkVfMih4KQkoeCkKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0hEUjJf U0laRV8yKHgpCSgoeCkgPDwgMjQpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9IRFIyX1NJWkVfMyh4 KQkoKHgpIDw8IDEyKQorI2RlZmluZSAgUEtUX09GRkxPQURfSERSMl9TSVpFXzQoeCkJKHgpCisj ZGVmaW5lIFBLVF9PRkZMT0FEX0VQS1RfT1AJCSgyIDw8IDI4KQorI2RlZmluZSAgUEtUX09GRkxP QURfRVBLVF9XUkJBQ0sJQklUKDIzKQorI2RlZmluZSAgUEtUX09GRkxPQURfRVBLVF9JUCh4KQkJ KCh4KSA8PCAyMSkKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0VQS1RfVFAoeCkJCSgoeCkgPDwgMTkp CisjZGVmaW5lICBQS1RfT0ZGTE9BRF9FUEtUX0xFTih4KQkoKHgpIDw8IDE2KQorI2RlZmluZSAg UEtUX09GRkxPQURfRVBLVF9DU1VNX0wzCUJJVCgxNSkKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0VQ S1RfQ1NVTV9MMglCSVQoMTQpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9FUEtUX0lEKHgpCQkoKHgp IDw8IDEyKQorI2RlZmluZSAgUEtUX09GRkxPQURfRVBLVF9TRVEoeCkJKCh4KSA8PCAxMCkKKyNk ZWZpbmUgIFBLVF9PRkZMT0FEX0VQS1RfVFMoeCkJCSgoeCkgPDwgOCkKKyNkZWZpbmUgIFBLVF9P RkZMT0FEX0VQS1RfQkxPQyh4KQkoeCkKKyNkZWZpbmUgUEtUX09GRkxPQURfRU5EX09QCQkoNyA8 PCAyOCkKKworc3RydWN0IGJjbWFzcF9wa3Rfb2ZmbG9hZCB7CisJX19iZTMyCQlub3A7CisJX19i ZTMyCQloZWFkZXI7CisJX19iZTMyCQloZWFkZXIyOworCV9fYmUzMgkJZXBrdDsKKwlfX2JlMzIJ CWVuZDsKK307CisKKyNkZWZpbmUgQkNNQVNQX0NPUkVfSU9fTUFDUk8obmFtZSwgb2Zmc2V0KQkJ CQlcCitzdGF0aWMgaW5saW5lIHUzMiBuYW1lIyNfY29yZV9ybChzdHJ1Y3QgYmNtYXNwX3ByaXYg KnByaXYsCQlcCisJCQkJIHUzMiBvZmYpCQkJCVwKK3sJCQkJCQkJCQlcCisJdTMyIHJlZyA9M0Qg cmVhZGxfcmVsYXhlZChwcml2LT5iYXNlICsgKG9mZnNldCkgKyBvZmYpOwkJXAorCXJldHVybiBy ZWc7CQkJCQkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgbmFtZSMjX2NvcmVf d2woc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAkJXAorCQkJCSAgdTMyIHZhbCwgdTMyIG9mZikJ CQlcCit7CQkJCQkJCQkJXAorCXdyaXRlbF9yZWxheGVkKHZhbCwgcHJpdi0+YmFzZSArIChvZmZz ZXQpICsgb2ZmKTsJCVwKK30KKworQkNNQVNQX0NPUkVfSU9fTUFDUk8oaW50cjIsIEFTUF9JTlRS Ml9PRkZTRVQpOworQkNNQVNQX0NPUkVfSU9fTUFDUk8od2FrZXVwX2ludHIyLCBBU1BfV0FLRVVQ X0lOVFIyX09GRlNFVCk7CitCQ01BU1BfQ09SRV9JT19NQUNSTyh0eF9hbmFseXRpY3MsIEFTUF9U WF9BTkFMWVRJQ1NfT0ZGU0VUKTsKK0JDTUFTUF9DT1JFX0lPX01BQ1JPKHJ4X2FuYWx5dGljcywg QVNQX1JYX0FOQUxZVElDU19PRkZTRVQpOworQkNNQVNQX0NPUkVfSU9fTUFDUk8ocnhfY3RybCwg QVNQX1JYX0NUUkxfT0ZGU0VUKTsKK0JDTUFTUF9DT1JFX0lPX01BQ1JPKHJ4X2ZpbHRlciwgQVNQ X1JYX0ZJTFRFUl9PRkZTRVQpOworQkNNQVNQX0NPUkVfSU9fTUFDUk8ocnhfZWRwa3QsIEFTUF9F RFBLVF9PRkZTRVQpOworQkNNQVNQX0NPUkVfSU9fTUFDUk8oY3RybCwgQVNQX0NUUkwpOworCitz dHJ1Y3QgYmNtYXNwX2ludGYgKmJjbWFzcF9pbnRlcmZhY2VfY3JlYXRlKHN0cnVjdCBiY21hc3Bf cHJpdiAqcHJpdiwKKwkJCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbmRldl9kbiwgaW50IGkp OworCit2b2lkIGJjbWFzcF9pbnRlcmZhY2VfZGVzdHJveShzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYsIGJvb2wgdW5yZWdpc3Rlcik7CisKK3ZvaWQgYmNtYXNwX2VuYWJsZV90eF9pcnEoc3RydWN0 IGJjbWFzcF9pbnRmICppbnRmLCBpbnQgZW4pOworCit2b2lkIGJjbWFzcF9lbmFibGVfcnhfaXJx KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgaW50IGVuKTsKKwordm9pZCBiY21hc3BfZmx1c2hf cnhfcG9ydChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCitleHRlcm4gY29uc3Qgc3RydWN0 IGV0aHRvb2xfb3BzIGJjbWFzcF9ldGh0b29sX29wczsKKworaW50IGJjbWFzcF9pbnRlcmZhY2Vf c3VzcGVuZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCitpbnQgYmNtYXNwX2ludGVyZmFj ZV9yZXN1bWUoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKTsKKwordm9pZCBiY21hc3Bfc2V0X3By b21pc2Moc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuKTsKKwordm9pZCBiY21hc3Bf c2V0X2FsbG11bHRpKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgYm9vbCBlbik7CisKK3ZvaWQg YmNtYXNwX3NldF9icm9hZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wgZW4pOworCit2 b2lkIGJjbWFzcF9zZXRfb2FkZHIoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBjb25zdCB1bnNp Z25lZCBjaGFyICphZGRyLAorCQkgICAgICBib29sIGVuKTsKKworaW50IGJjbWFzcF9zZXRfZW5f bWRhX2ZpbHRlcihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHVuc2lnbmVkIGNoYXIgKmFkZHIs CisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKm1hc2spOworCit2b2lkIGJjbWFzcF9kaXNhYmxlX2Fs bF9maWx0ZXJzKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Zik7CisKK3ZvaWQgYmNtYXNwX2NvcmVf Y2xvY2tfc2V0X2ludGYoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuKTsKKworI2Vu ZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFz cF9ldGh0b29sLmMgYi9kcml2ZXJzLz0KbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNw X2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM5NGMw ZTFjYjAyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29t L2FzcDIvYmNtYXNwX2V0aHRvb2wuYwpAQCAtMCwwICsxLDQwIEBACisvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMAorI2RlZmluZSBwcl9mbXQoZm10KQkJCQkiYmNtYXNwX2V0aHRv b2w6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgv bmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNs dWRlICJiY21hc3AuaCIKKyNpbmNsdWRlICJiY21hc3BfaW50Zl9kZWZzLmgiCisKK3N0YXRpYyB2 b2lkIGJjbWFzcF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAg IHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3Ryc2NweShpbmZvLT5kcml2ZXIs ICJiY21hc3AiLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CisJc3Ryc2NweShpbmZvLT5idXNfaW5m bywgZGV2X25hbWUoZGV2LT5kZXYucGFyZW50KSwKKwkJc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7 Cit9CisKK3N0YXRpYyB1MzIgYmNtYXNwX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2KQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsK KworCXJldHVybiBpbnRmLT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCBiY21hc3Bfc2V0 X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3Qg YmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisKKwlpbnRmLT5tc2dfZW5h YmxlID0zRCBsZXZlbDsKK30KKworY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJjbWFzcF9ldGh0 b29sX29wcyA9M0QgeworCS5nZXRfZHJ2aW5mbwkJPTNEIGJjbWFzcF9nZXRfZHJ2aW5mbywKKwku Z2V0X2xpbmsJCT0zRCBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfbGlua19rc2V0dGluZ3MJ PTNEIHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncywKKwkuc2V0X2xpbmtfa3NldHRpbmdz CT0zRCBwaHlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MsCisJLmdldF9tc2dsZXZlbAkJPTNE IGJjbWFzcF9nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbAkJPTNEIGJjbWFzcF9zZXRfbXNn bGV2ZWwsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNw Mi9iY21hc3BfaW50Zi5jIGIvZHJpdmVycy9uZXQ9Ci9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2Jj bWFzcF9pbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zODgy ZDY1NTQxYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNv bS9hc3AyL2JjbWFzcF9pbnRmLmMKQEAgLTAsMCArMSwxMzU4IEBACisvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMAorI2RlZmluZSBwcl9mbXQoZm10KQkJCSJiY21hc3BfaW50Zjog IiBmbXQKKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9icmNt cGh5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4K KyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmlj ZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX21kaW8u aD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHlfZml4ZWQuaD4K KyNpbmNsdWRlIDxsaW51eC9wdHBfY2xhc3NpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgor CisjaW5jbHVkZSAiYmNtYXNwLmgiCisjaW5jbHVkZSAiYmNtYXNwX2ludGZfZGVmcy5oIgorCitz dGF0aWMgaW50IGluY3JfcmluZyhpbnQgaW5kZXgsIGludCByaW5nX2NvdW50KQoreworCWluZGV4 Kys7CisJaWYgKGluZGV4ID0zRD0zRCByaW5nX2NvdW50KQorCQlyZXR1cm4gMDsKKworCXJldHVy biBpbmRleDsKK30KKworLyogUG9pbnRzIHRvIGxhc3QgYnl0ZSBvZiBkZXNjcmlwdG9yICovCitz dGF0aWMgZG1hX2FkZHJfdCBpbmNyX2xhc3RfYnl0ZShkbWFfYWRkcl90IGFkZHIsIGRtYV9hZGRy X3QgYmVnLAorCQkJCSBpbnQgcmluZ19jb3VudCkKK3sKKwlkbWFfYWRkcl90IGVuZCA9M0QgYmVn ICsgKHJpbmdfY291bnQgKiBERVNDX1NJWkUpOworCisJYWRkciArPTNEIERFU0NfU0laRTsKKwlp ZiAoYWRkciA+IGVuZCkKKwkJcmV0dXJuIGJlZyArIERFU0NfU0laRSAtIDE7CisKKwlyZXR1cm4g YWRkcjsKK30KKworLyogUG9pbnRzIHRvIGZpcnN0IGJ5dGUgb2YgZGVzY3JpcHRvciAqLworc3Rh dGljIGRtYV9hZGRyX3QgaW5jcl9maXJzdF9ieXRlKGRtYV9hZGRyX3QgYWRkciwgZG1hX2FkZHJf dCBiZWcsCisJCQkJICBpbnQgcmluZ19jb3VudCkKK3sKKwlkbWFfYWRkcl90IGVuZCA9M0QgYmVn ICsgKHJpbmdfY291bnQgKiBERVNDX1NJWkUpOworCisJYWRkciArPTNEIERFU0NfU0laRTsKKwlp ZiAoYWRkciA+PTNEIGVuZCkKKwkJcmV0dXJuIGJlZzsKKworCXJldHVybiBhZGRyOworfQorCitz dGF0aWMgdm9pZCBiY21hc3BfZW5hYmxlX3R4KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgaW50 IGVuKQoreworCWlmIChlbikgeworCQl0eF9zcGJfY3RybF93bChpbnRmLCBUWF9TUEJfQ1RSTF9F TkFCTEVfRU4sIFRYX1NQQl9DVFJMX0VOQUJMRSk7CisJCXR4X2Vwa3RfY29yZV93bChpbnRmLCAo VFhfRVBLVF9DX0NGR19NSVNDX0VOIHwKKwkJCQlUWF9FUEtUX0NfQ0ZHX01JU0NfUFQgfAorCQkJ CShpbnRmLT5wb3J0IDw8IFRYX0VQS1RfQ19DRkdfTUlTQ19QU19TSElGVCkpLAorCQkJCVRYX0VQ S1RfQ19DRkdfTUlTQyk7CisJfSBlbHNlIHsKKwkJdHhfc3BiX2N0cmxfd2woaW50ZiwgMHgwLCBU WF9TUEJfQ1RSTF9FTkFCTEUpOworCQl0eF9lcGt0X2NvcmVfd2woaW50ZiwgMHgwLCBUWF9FUEtU X0NfQ0ZHX01JU0MpOworCX0KK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2VuYWJsZV9yeChzdHJ1 Y3QgYmNtYXNwX2ludGYgKmludGYsIGludCBlbikKK3sKKwlpZiAoZW4pCisJCXJ4X2VkcGt0X2Nm Z193bChpbnRmLCBSWF9FRFBLVF9DRkdfRU5BQkxFX0VOLAorCQkJCVJYX0VEUEtUX0NGR19FTkFC TEUpOworCWVsc2UKKwkJcnhfZWRwa3RfY2ZnX3dsKGludGYsIDB4MCwgUlhfRURQS1RfQ0ZHX0VO QUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KQoreworCXVuc2lnbmVkIGNoYXIgbWFza1tdID0zRCB7MHhmZiwgMHhmZiwgMHhm ZiwgMHhmZiwgMHhmZiwgMHhmZn07CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRk ZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CisJaW50IHJldDsKKwor CXNwaW5fbG9ja19iaCgmaW50Zi0+cGFyZW50LT5tZGFfbG9jayk7CisKKwliY21hc3BfZGlzYWJs ZV9hbGxfZmlsdGVycyhpbnRmKTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJ CWdvdG8gc2V0X3Byb21pc2M7CisKKwliY21hc3Bfc2V0X3Byb21pc2MoaW50ZiwgMCk7CisKKwli Y21hc3Bfc2V0X2Jyb2FkKGludGYsIDEpOworCisJYmNtYXNwX3NldF9vYWRkcihpbnRmLCBkZXYt PmRldl9hZGRyLCAxKTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCWJj bWFzcF9zZXRfYWxsbXVsdGkoaW50ZiwgMSk7CisJfSBlbHNlIHsKKwkJYmNtYXNwX3NldF9hbGxt dWx0aShpbnRmLCAwKTsKKworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7CisJ CQlyZXQgPTNEIGJjbWFzcF9zZXRfZW5fbWRhX2ZpbHRlcihpbnRmLCBoYS0+YWRkciwgbWFzayk7 CisJCQlpZiAocmV0KQorCQkJCWdvdG8gc2V0X3Byb21pc2M7CisJCX0KKwl9CisKKwluZXRkZXZf Zm9yX2VhY2hfdWNfYWRkcihoYSwgZGV2KSB7CisJCXJldCA9M0QgYmNtYXNwX3NldF9lbl9tZGFf ZmlsdGVyKGludGYsIGhhLT5hZGRyLCBtYXNrKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gc2V0X3By b21pc2M7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJmludGYtPnBhcmVudC0+bWRhX2xvY2spOwor CXJldHVybjsKKworc2V0X3Byb21pc2M6CisJYmNtYXNwX3NldF9wcm9taXNjKGludGYsIDEpOwor CisJLyogZGlzYWJsZSBhbGwgZmlsdGVycyB1c2VkIGJ5IHRoaXMgcG9ydCAqLworCWJjbWFzcF9k aXNhYmxlX2FsbF9maWx0ZXJzKGludGYpOworCisJc3Bpbl91bmxvY2tfYmgoJmludGYtPnBhcmVu dC0+bWRhX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfY2xlYW5fdHhjYihzdHJ1Y3Qg YmNtYXNwX2ludGYgKmludGYsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX3R4X2NiICp0 eGNiID0zRCAmaW50Zi0+dHhfY2JzW2luZGV4XTsKKworCXR4Y2ItPnNrYiA9M0QgTlVMTDsKKwlk bWFfdW5tYXBfYWRkcl9zZXQodHhjYiwgZG1hX2FkZHIsIDApOworCWRtYV91bm1hcF9sZW5fc2V0 KHR4Y2IsIGRtYV9sZW4sIDApOworCXR4Y2ItPmxhc3QgPTNEIGZhbHNlOworfQorCitzdGF0aWMg aW50IHR4X3NwYl9yaW5nX2Z1bGwoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBpbnQgY250KQor eworCWludCBuZXh0X2luZGV4LCBpOworCisJLyogQ2hlY2sgaWYgd2UgaGF2ZSBlbm91Z2ggcm9v bSBmb3IgY250IGRlc2NyaXB0b3JzICovCisJZm9yIChpID0zRCAwOyBpIDwgY250OyBpKyspIHsK KwkJbmV4dF9pbmRleCA9M0QgaW5jcl9yaW5nKGludGYtPnR4X3NwYl9pbmRleCwgREVTQ19SSU5H X0NPVU5UKTsKKwkJaWYgKG5leHRfaW5kZXggPTNEPTNEIGludGYtPnR4X3NwYl9jbGVhbl9pbmRl eCkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNr X2J1ZmYgKmJjbWFzcF9jc3VtX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJ ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgYm9vbCAqY3N1bV9odykKK3sKKwl1MzIg aGVhZGVyID0zRCAwLCBoZWFkZXIyID0zRCAwLCBlcGt0ID0zRCAwOworCXN0cnVjdCBiY21hc3Bf cGt0X29mZmxvYWQgKm9mZmxvYWQ7CisJdW5zaWduZWQgaW50IGhlYWRlcl9jbnQgPTNEIDA7CisJ c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CisJdTggaXBfcHJvdG87CisKKwlpZiAoc2tiLT5pcF9z dW1tZWQgIT0zRCBDSEVDS1NVTV9QQVJUSUFMKQorCQlyZXR1cm4gc2tiOworCisJaWYgKHVubGlr ZWx5KHNrYl9oZWFkcm9vbShza2IpIDwgc2l6ZW9mKCpvZmZsb2FkKSkpIHsKKwkJbmV3X3NrYiA9 M0Qgc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBzaXplb2YoKm9mZmxvYWQpKTsKKwkJaWYgKCFu ZXdfc2tiKQorCQkJZ290byBoZWxwOworCisJCWRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTsKKwkJ c2tiID0zRCBuZXdfc2tiOworCX0KKworCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgeworCWNhc2Ug aHRvbnMoRVRIX1BfSVApOgorCQloZWFkZXIgfD0zRCBQS1RfT0ZGTE9BRF9IRFJfU0laRV8yKChp cF9oZHJsZW4oc2tiKSA+PiA4KSAmIDB4Zik7CisJCWhlYWRlcjIgfD0zRCBQS1RfT0ZGTE9BRF9I RFIyX1NJWkVfMihpcF9oZHJsZW4oc2tiKSAmIDB4ZmYpOworCQllcGt0IHw9M0QgUEtUX09GRkxP QURfRVBLVF9JUCgwKSB8IFBLVF9PRkZMT0FEX0VQS1RfQ1NVTV9MMjsKKwkJaXBfcHJvdG8gPTNE IGlwX2hkcihza2IpLT5wcm90b2NvbDsKKwkJaGVhZGVyX2NudCArPTNEIDI7CisJCWJyZWFrOwor CWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CisJCWhlYWRlciB8PTNEIFBLVF9PRkZMT0FEX0hEUl9T SVpFXzIoKElQNl9ITEVOID4+IDgpICYgMHhmKTsKKwkJaGVhZGVyMiB8PTNEIFBLVF9PRkZMT0FE X0hEUjJfU0laRV8yKElQNl9ITEVOICYgMHhmZik7CisJCWVwa3QgfD0zRCBQS1RfT0ZGTE9BRF9F UEtUX0lQKDEpIHwgUEtUX09GRkxPQURfRVBLVF9DU1VNX0wyOworCQlpcF9wcm90byA9M0QgaXB2 Nl9oZHIoc2tiKS0+bmV4dGhkcjsKKwkJaGVhZGVyX2NudCArPTNEIDI7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCWdvdG8gaGVscDsKKwl9CisKKwlzd2l0Y2ggKGlwX3Byb3RvKSB7CisJY2FzZSBJ UFBST1RPX1RDUDoKKwkJaGVhZGVyMiB8PTNEIFBLVF9PRkZMT0FEX0hEUjJfU0laRV8zKHRjcF9o ZHJsZW4oc2tiKSk7CisJCWVwa3QgfD0zRCBQS1RfT0ZGTE9BRF9FUEtUX1RQKDApIHwgUEtUX09G RkxPQURfRVBLVF9DU1VNX0wzOworCQloZWFkZXJfY250Kys7CisJCWJyZWFrOworCWNhc2UgSVBQ Uk9UT19VRFA6CisJCWhlYWRlcjIgfD0zRCBQS1RfT0ZGTE9BRF9IRFIyX1NJWkVfMyhVRFBfSExF Tik7CisJCWVwa3QgfD0zRCBQS1RfT0ZGTE9BRF9FUEtUX1RQKDEpIHwgUEtUX09GRkxPQURfRVBL VF9DU1VNX0wzOworCQloZWFkZXJfY250Kys7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8g aGVscDsKKwl9CisKKwlvZmZsb2FkID0zRCAoc3RydWN0IGJjbWFzcF9wa3Rfb2ZmbG9hZCAqKXNr Yl9wdXNoKHNrYiwgc2l6ZW9mKCpvZmZsb2FkKSk7CisKKwloZWFkZXIgfD0zRCBQS1RfT0ZGTE9B RF9IRFJfT1AgfCBQS1RfT0ZGTE9BRF9IRFJfQ09VTlQoaGVhZGVyX2NudCkgfAorCQkgIFBLVF9P RkZMT0FEX0hEUl9TSVpFXzEoRVRIX0hMRU4pOworCWVwa3QgfD0zRCBQS1RfT0ZGTE9BRF9FUEtU X09QOworCisJb2ZmbG9hZC0+bm9wID0zRCBodG9ubChQS1RfT0ZGTE9BRF9OT1ApOworCW9mZmxv YWQtPmhlYWRlciA9M0QgaHRvbmwoaGVhZGVyKTsKKwlvZmZsb2FkLT5oZWFkZXIyID0zRCBodG9u bChoZWFkZXIyKTsKKwlvZmZsb2FkLT5lcGt0ID0zRCBodG9ubChlcGt0KTsKKwlvZmZsb2FkLT5l bmQgPTNEIGh0b25sKFBLVF9PRkZMT0FEX0VORF9PUCk7CisJKmNzdW1faHcgPTNEIHRydWU7CisK KwlyZXR1cm4gc2tiOworCitoZWxwOgorCXNrYl9jaGVja3N1bV9oZWxwKHNrYik7CisKKwlyZXR1 cm4gc2tiOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiY21hc3BfcnhfZWRwa3RfZG1hX3Jx KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwlyZXR1cm4gcnhfZWRwa3RfZG1hX3JxKGlu dGYsIFJYX0VEUEtUX0RNQV9WQUxJRCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9yeF9lZHBr dF9jZmdfd3Eoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBkbWFfYWRkcl90IGFkPQpkcikKK3sK KwlyeF9lZHBrdF9jZmdfd3EoaW50ZiwgYWRkciwgUlhfRURQS1RfUklOR19CVUZGRVJfUkVBRCk7 Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9yeF9lZHBrdF9kbWFfd3Eoc3RydWN0IGJjbWFzcF9p bnRmICppbnRmLCBkbWFfYWRkcl90IGFkPQpkcikKK3sKKwlyeF9lZHBrdF9kbWFfd3EoaW50Ziwg YWRkciwgUlhfRURQS1RfRE1BX1JFQUQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiY21h c3BfdHhfc3BiX2RtYV9ycShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJcmV0dXJuIHR4 X3NwYl9kbWFfcnEoaW50ZiwgVFhfU1BCX0RNQV9SRUFEKTsKK30KKworc3RhdGljIHZvaWQgYmNt YXNwX3R4X3NwYl9kbWFfd3Eoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBkbWFfYWRkcl90IGFk ZHIpCit7CisJdHhfc3BiX2RtYV93cShpbnRmLCBhZGRyLCBUWF9TUEJfRE1BX1ZBTElEKTsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBiY21hc3BfaW50Zl9vcHMgYmNtYXNwX2ludGZfb3BzID0z RCB7CisJLnJ4X2Rlc2NfcmVhZCA9M0QgYmNtYXNwX3J4X2VkcGt0X2RtYV9ycSwKKwkucnhfYnVm ZmVyX3dyaXRlID0zRCBiY21hc3BfcnhfZWRwa3RfY2ZnX3dxLAorCS5yeF9kZXNjX3dyaXRlID0z RCBiY21hc3BfcnhfZWRwa3RfZG1hX3dxLAorCS50eF9yZWFkID0zRCBiY21hc3BfdHhfc3BiX2Rt YV9ycSwKKwkudHhfd3JpdGUgPTNEIGJjbWFzcF90eF9zcGJfZG1hX3dxLAorfTsKKworc3RhdGlj IG5ldGRldl90eF90IGJjbWFzcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJp dihkZXYpOworCXVuc2lnbmVkIGludCB0b3RhbF9ieXRlcywgc2l6ZTsKKwlpbnQgc3BiX2luZGV4 LCBucl9mcmFncywgaSwgajsKKwlzdHJ1Y3QgYmNtYXNwX3R4X2NiICp0eGNiOworCWRtYV9hZGRy X3QgbWFwcGluZywgdmFsaWQ7CisJc3RydWN0IGJjbWFzcF9kZXNjICpkZXNjOworCWJvb2wgY3N1 bV9odyA9M0QgZmFsc2U7CisJc3RydWN0IGRldmljZSAqa2RldjsKKwlza2JfZnJhZ190ICpmcmFn OworCisJa2RldiA9M0QgJmludGYtPnBhcmVudC0+cGRldi0+ZGV2OworCisJbnJfZnJhZ3MgPTNE IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisKKwlpZiAodHhfc3BiX3JpbmdfZnVsbChpbnRm LCBucl9mcmFncyArIDEpKSB7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJbmV0ZGV2X2Vy cihkZXYsICJUeCBSaW5nIEZ1bGwhXG4iKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0K KworCS8qIFNhdmUgc2tiIGxlbiBiZWZvcmUgYWRkaW5nIGNzdW0gb2ZmbG9hZCBoZWFkZXIgKi8K Kwl0b3RhbF9ieXRlcyA9M0Qgc2tiLT5sZW47CisJc2tiID0zRCBiY21hc3BfY3N1bV9vZmZsb2Fk KGRldiwgc2tiLCAmY3N1bV9odyk7CisJaWYgKCFza2IpCisJCXJldHVybiBORVRERVZfVFhfT0s7 CisKKwlzcGJfaW5kZXggPTNEIGludGYtPnR4X3NwYl9pbmRleDsKKwl2YWxpZCA9M0QgaW50Zi0+ dHhfc3BiX2RtYV92YWxpZDsKKwlmb3IgKGkgPTNEIDA7IGkgPD0zRCBucl9mcmFnczsgaSsrKSB7 CisJCWlmICghaSkgeworCQkJc2l6ZSA9M0Qgc2tiX2hlYWRsZW4oc2tiKTsKKwkJCWlmICghbnJf ZnJhZ3MgJiYgc2l6ZSA8IChFVEhfWkxFTiArIEVUSF9GQ1NfTEVOKSkgeworCQkJCWlmIChza2Jf cHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4gKyBFVEhfRkNTX0xFTikpCisJCQkJCXJldHVybiBORVRE RVZfVFhfT0s7CisJCQkJc2l6ZSA9M0Qgc2tiLT5sZW47CisJCQl9CisJCQltYXBwaW5nID0zRCBk bWFfbWFwX3NpbmdsZShrZGV2LCBza2ItPmRhdGEsIHNpemUsCisJCQkJCQkgRE1BX1RPX0RFVklD RSk7CisJCX0gZWxzZSB7CisJCQlmcmFnID0zRCAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpIC0g MV07CisJCQlzaXplID0zRCBza2JfZnJhZ19zaXplKGZyYWcpOworCQkJbWFwcGluZyA9M0Qgc2ti X2ZyYWdfZG1hX21hcChrZGV2LCBmcmFnLCAwLCBzaXplLAorCQkJCQkJICAgRE1BX1RPX0RFVklD RSk7CisJCX0KKworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3Ioa2RldiwgbWFwcGluZykpIHsKKwkJ CXNwYl9pbmRleCA9M0QgaW50Zi0+dHhfc3BiX2luZGV4OworCQkJZm9yIChqID0zRCAwOyBqIDwg aTsgaisrKSB7CisJCQkJYmNtYXNwX2NsZWFuX3R4Y2IoaW50Ziwgc3BiX2luZGV4KTsKKwkJCQlz cGJfaW5kZXggPTNEIGluY3JfcmluZyhzcGJfaW5kZXgsCisJCQkJCQkgICAgICBERVNDX1JJTkdf Q09VTlQpOworCQkJfQorCQkJLyogUmV3aW5kIHNvIHdlIGRvIG5vdCBoYXZlIGEgaG9sZSAqLwor CQkJc3BiX2luZGV4ID0zRCBpbnRmLT50eF9zcGJfaW5kZXg7CisJCQlyZXR1cm4gTkVUREVWX1RY X09LOworCQl9CisKKwkJdHhjYiA9M0QgJmludGYtPnR4X2Nic1tzcGJfaW5kZXhdOworCQlkZXNj ID0zRCAmaW50Zi0+dHhfc3BiX2NwdVtzcGJfaW5kZXhdOworCQltZW1zZXQoZGVzYywgMCwgc2l6 ZW9mKCpkZXNjKSk7CisJCXR4Y2ItPnNrYiA9M0Qgc2tiOworCQl0eGNiLT5ieXRlc19zZW50ID0z RCB0b3RhbF9ieXRlczsKKwkJZG1hX3VubWFwX2FkZHJfc2V0KHR4Y2IsIGRtYV9hZGRyLCBtYXBw aW5nKTsKKwkJZG1hX3VubWFwX2xlbl9zZXQodHhjYiwgZG1hX2xlbiwgc2l6ZSk7CisJCWlmICgh aSkgeworCQkJZGVzYy0+ZmxhZ3MgfD0zRCBERVNDX1NPRjsKKwkJCWlmIChjc3VtX2h3KQorCQkJ CWRlc2MtPmZsYWdzIHw9M0QgREVTQ19FUEtUX0NNRDsKKwkJfQorCisJCWlmIChpID0zRD0zRCBu cl9mcmFncykgeworCQkJZGVzYy0+ZmxhZ3MgfD0zRCBERVNDX0VPRjsKKwkJCXR4Y2ItPmxhc3Qg PTNEIHRydWU7CisJCX0KKworCQlkZXNjLT5idWYgPTNEIG1hcHBpbmc7CisJCWRlc2MtPnNpemUg PTNEIHNpemU7CisJCWRlc2MtPmZsYWdzIHw9M0QgREVTQ19JTlRfRU47CisKKwkJbmV0aWZfZGJn KGludGYsIHR4X3F1ZXVlZCwgZGV2LAorCQkJICAiJXMgZG1hX2J1Zj0zRCVwYWQgZG1hX2xlbj0z RDB4JXggZmxhZ3M9M0QweCV4IGluZGV4PTNEMHgleFxuIiwKKwkJCSAgX19mdW5jX18sICZtYXBw aW5nLCBkZXNjLT5zaXplLCBkZXNjLT5mbGFncywKKwkJCSAgc3BiX2luZGV4KTsKKworCQlzcGJf aW5kZXggPTNEIGluY3JfcmluZyhzcGJfaW5kZXgsIERFU0NfUklOR19DT1VOVCk7CisJCXZhbGlk ID0zRCBpbmNyX2xhc3RfYnl0ZSh2YWxpZCwgaW50Zi0+dHhfc3BiX2RtYV9hZGRyLAorCQkJCSAg ICAgICBERVNDX1JJTkdfQ09VTlQpOworCX0KKworCS8qIEVuc3VyZSBhbGwgZGVzY3JpcHRvcnMg aGF2ZSBiZWVuIHdyaXR0ZW4gdG8gRFJBTSBmb3IgdGhlCisJICogaGFyZHdhcmUgdG8gc2VlIHVw LXRvLWRhdGUgY29udGVudHMuCisJICovCisJd21iKCk7CisKKwlpbnRmLT50eF9zcGJfaW5kZXgg PTNEIHNwYl9pbmRleDsKKwlpbnRmLT50eF9zcGJfZG1hX3ZhbGlkID0zRCB2YWxpZDsKKwliY21h c3BfaW50Zl90eF93cml0ZShpbnRmLCBpbnRmLT50eF9zcGJfZG1hX3ZhbGlkKTsKKworCWlmICh0 eF9zcGJfcmluZ19mdWxsKGludGYsIE1BWF9TS0JfRlJBR1MgKyAxKSkKKwkJbmV0aWZfc3RvcF9x dWV1ZShkZXYpOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIHZvaWQgYmNt YXNwX25ldGlmX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJjbWFz cF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOworCisJYmNtYXNwX3NldF9yeF9tb2Rl KGRldik7CisJbmFwaV9lbmFibGUoJmludGYtPnR4X25hcGkpOworCW5hcGlfZW5hYmxlKCZpbnRm LT5yeF9uYXBpKTsKKworCWJjbWFzcF9lbmFibGVfcnhfaXJxKGludGYsIDEpOworCWJjbWFzcF9l bmFibGVfdHhfaXJxKGludGYsIDEpOworCisJcGh5X3N0YXJ0KGRldi0+cGh5ZGV2KTsKK30KKwor c3RhdGljIHZvaWQgdW1hY19yZXNldChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJdW1h Y193bChpbnRmLCAweDAsIFVNQ19DTUQpOworCXVtYWNfd2woaW50ZiwgVU1DX0NNRF9TV19SRVNF VCwgVU1DX0NNRCk7CisJdXNsZWVwX3JhbmdlKDEwLCAxMDApOworCXVtYWNfd2woaW50ZiwgMHgw LCBVTUNfQ01EKTsKK30KKworc3RhdGljIHZvaWQgdW1hY19zZXRfaHdfYWRkcihzdHJ1Y3QgYmNt YXNwX2ludGYgKmludGYsCisJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCit7CisJ dTMyIG1hYzAgPTNEIChhZGRyWzBdIDw8IDI0KSB8IChhZGRyWzFdIDw8IDE2KSB8IChhZGRyWzJd IDw8IDgpIHwKKwkJICAgIGFkZHJbM107CisJdTMyIG1hYzEgPTNEIChhZGRyWzRdIDw8IDgpIHwg YWRkcls1XTsKKworCXVtYWNfd2woaW50ZiwgbWFjMCwgVU1DX01BQzApOworCXVtYWNfd2woaW50 ZiwgbWFjMSwgVU1DX01BQzEpOworfQorCitzdGF0aWMgdm9pZCB1bWFjX2VuYWJsZV9zZXQoc3Ry dWN0IGJjbWFzcF9pbnRmICppbnRmLCB1MzIgbWFzaywKKwkJCSAgICB1bnNpZ25lZCBpbnQgZW5h YmxlKQoreworCXUzMiByZWc7CisKKwlyZWcgPTNEIHVtYWNfcmwoaW50ZiwgVU1DX0NNRCk7CisJ aWYgKGVuYWJsZSkKKwkJcmVnIHw9M0QgbWFzazsKKwllbHNlCisJCXJlZyAmPTNEIH5tYXNrOwor CXVtYWNfd2woaW50ZiwgcmVnLCBVTUNfQ01EKTsKKworCS8qIFVuaU1BQyBzdG9wcyBvbiBhIHBh Y2tldCBib3VuZGFyeSwgd2FpdCBmb3IgYSBmdWxsLXNpemVkIHBhY2tldAorCSAqIHRvIGJlIHBy b2Nlc3NlZCAoMSBtc2VjKS4KKwkgKi8KKwlpZiAoZW5hYmxlID0zRD0zRCAwKQorCQl1c2xlZXBf cmFuZ2UoMTAwMCwgMjAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHVtYWNfaW5pdChzdHJ1Y3QgYmNt YXNwX2ludGYgKmludGYpCit7CisJdW1hY193bChpbnRmLCAweDgwMCwgVU1DX0ZSTV9MRU4pOwor CXVtYWNfd2woaW50ZiwgMHhmZmZmLCBVTUNfUEFVU0VfQ05UUkwpOworCXVtYWNfd2woaW50Ziwg MHg4MDAsIFVNQ19SWF9NQVhfUEtUX1NaKTsKKwl1bWFjX2VuYWJsZV9zZXQoaW50ZiwgVU1DX0NN RF9QUk9NSVNDLCAxKTsKK30KKworc3RhdGljIGludCBiY21hc3BfdHhfcG9sbChzdHJ1Y3QgbmFw aV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRm ID0zRAorCQljb250YWluZXJfb2YobmFwaSwgc3RydWN0IGJjbWFzcF9pbnRmLCB0eF9uYXBpKTsK KwlzdHJ1Y3QgYmNtYXNwX2ludGZfc3RhdHM2NCAqc3RhdHMgPTNEICZpbnRmLT5zdGF0czY0Owor CXN0cnVjdCBkZXZpY2UgKmtkZXYgPTNEICZpbnRmLT5wYXJlbnQtPnBkZXYtPmRldjsKKwl1bnNp Z25lZCBsb25nIHJlYWQsIHJlbGVhc2VkID0zRCAwOworCXN0cnVjdCBiY21hc3BfdHhfY2IgKnR4 Y2I7CisJc3RydWN0IGJjbWFzcF9kZXNjICpkZXNjOworCWRtYV9hZGRyX3QgbWFwcGluZzsKKwor CXJlYWQgPTNEIGJjbWFzcF9pbnRmX3R4X3JlYWQoaW50Zik7CisJd2hpbGUgKGludGYtPnR4X3Nw Yl9kbWFfcmVhZCAhPTNEIHJlYWQpIHsKKwkJdHhjYiA9M0QgJmludGYtPnR4X2Nic1tpbnRmLT50 eF9zcGJfY2xlYW5faW5kZXhdOworCQltYXBwaW5nID0zRCBkbWFfdW5tYXBfYWRkcih0eGNiLCBk bWFfYWRkcik7CisKKwkJZG1hX3VubWFwX3NpbmdsZShrZGV2LCBtYXBwaW5nLAorCQkJCSBkbWFf dW5tYXBfbGVuKHR4Y2IsIGRtYV9sZW4pLAorCQkJCSBETUFfVE9fREVWSUNFKTsKKworCQlpZiAo dHhjYi0+bGFzdCkgeworCQkJZGV2X2NvbnN1bWVfc2tiX2FueSh0eGNiLT5za2IpOworCisJCQl1 NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZzdGF0cy0+c3luY3ApOworCQkJdTY0X3N0YXRzX2luYygm c3RhdHMtPnR4X3BhY2tldHMpOworCQkJdTY0X3N0YXRzX2FkZCgmc3RhdHMtPnR4X2J5dGVzLCB0 eGNiLT5ieXRlc19zZW50KTsKKwkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZzdGF0cy0+c3luY3Ap OworCQl9CisKKwkJZGVzYyA9M0QgJmludGYtPnR4X3NwYl9jcHVbaW50Zi0+dHhfc3BiX2NsZWFu X2luZGV4XTsKKworCQluZXRpZl9kYmcoaW50ZiwgdHhfZG9uZSwgaW50Zi0+bmRldiwKKwkJCSAg IiVzIGRtYV9idWY9M0QlcGFkIGRtYV9sZW49M0QweCV4IGZsYWdzPTNEMHgleCBjX2luZGV4PTNE MHgleFxuIiwKKwkJCSAgX19mdW5jX18sICZtYXBwaW5nLCBkZXNjLT5zaXplLCBkZXNjLT5mbGFn cywKKwkJCSAgaW50Zi0+dHhfc3BiX2NsZWFuX2luZGV4KTsKKworCQliY21hc3BfY2xlYW5fdHhj YihpbnRmLCBpbnRmLT50eF9zcGJfY2xlYW5faW5kZXgpOworCQlyZWxlYXNlZCsrOworCisJCWlu dGYtPnR4X3NwYl9jbGVhbl9pbmRleCA9M0QgaW5jcl9yaW5nKGludGYtPnR4X3NwYl9jbGVhbl9p bmRleCwKKwkJCQkJCSAgICAgREVTQ19SSU5HX0NPVU5UKTsKKwkJaW50Zi0+dHhfc3BiX2RtYV9y ZWFkID0zRCBpbmNyX2ZpcnN0X2J5dGUoaW50Zi0+dHhfc3BiX2RtYV9yZWFkLAorCQkJCQkJCWlu dGYtPnR4X3NwYl9kbWFfYWRkciwKKwkJCQkJCQlERVNDX1JJTkdfQ09VTlQpOworCX0KKworCS8q IEVuc3VyZSBhbGwgZGVzY3JpcHRvcnMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gRFJBTSBmb3IgdGhl IGhhcmR3YXJlCisJICogdG8gc2VlIHVwZGF0ZWQgY29udGVudHMuCisJICovCisJd21iKCk7CisK KwluYXBpX2NvbXBsZXRlKCZpbnRmLT50eF9uYXBpKTsKKworCWJjbWFzcF9lbmFibGVfdHhfaXJx KGludGYsIDEpOworCisJaWYgKHJlbGVhc2VkKQorCQluZXRpZl93YWtlX3F1ZXVlKGludGYtPm5k ZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX3J4X3BvbGwoc3RydWN0 IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAq aW50ZiA9M0QKKwkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBiY21hc3BfaW50ZiwgcnhfbmFw aSk7CisJc3RydWN0IGJjbWFzcF9pbnRmX3N0YXRzNjQgKnN0YXRzID0zRCAmaW50Zi0+c3RhdHM2 NDsKKwlzdHJ1Y3QgZGV2aWNlICprZGV2ID0zRCAmaW50Zi0+cGFyZW50LT5wZGV2LT5kZXY7CisJ dW5zaWduZWQgbG9uZyBwcm9jZXNzZWQgPTNEIDA7CisJc3RydWN0IGJjbWFzcF9kZXNjICpkZXNj OworCXN0cnVjdCBza19idWZmICpza2I7CisJZG1hX2FkZHJfdCB2YWxpZDsKKwl2b2lkICpkYXRh OworCXU2NCBmbGFnczsKKwl1MzIgbGVuOworCisJdmFsaWQgPTNEIGJjbWFzcF9pbnRmX3J4X2Rl c2NfcmVhZChpbnRmKSArIDE7CisJaWYgKHZhbGlkID0zRD0zRCBpbnRmLT5yeF9lZHBrdF9kbWFf YWRkciArIERFU0NfUklOR19TSVpFKQorCQl2YWxpZCA9M0QgaW50Zi0+cnhfZWRwa3RfZG1hX2Fk ZHI7CisKKwl3aGlsZSAoKHByb2Nlc3NlZCA8IGJ1ZGdldCkgJiYgKHZhbGlkICE9M0QgaW50Zi0+ cnhfZWRwa3RfZG1hX3JlYWQpKSB7CisJCWRlc2MgPTNEICZpbnRmLT5yeF9lZHBrdF9jcHVbaW50 Zi0+cnhfZWRwa3RfaW5kZXhdOworCisJCS8qIEVuc3VyZSB0aGF0IGRlc2NyaXB0b3IgaGFzIGJl ZW4gZnVsbHkgd3JpdHRlbiB0byBEUkFNIGJ5CisJCSAqIGhhcmR3YXJlIGJlZm9yZSByZWFkaW5n IGJ5IHRoZSBDUFUKKwkJICovCisJCXJtYigpOworCisJCS8qIENhbGN1bGF0ZSB2aXJ0IGFkZHIg Ynkgb2Zmc2V0dGluZyBmcm9tIHBoeXNpY2FsIGFkZHIgKi8KKwkJZGF0YSA9M0QgaW50Zi0+cnhf cmluZ19jcHUgKworCQkJKERFU0NfQUREUihkZXNjLT5idWYpIC0gaW50Zi0+cnhfcmluZ19kbWEp OworCisJCWZsYWdzID0zRCBERVNDX0ZMQUdTKGRlc2MtPmJ1Zik7CisJCWlmICh1bmxpa2VseShm bGFncyAmIChERVNDX0NSQ19FUlIgfCBERVNDX1JYX1NZTV9FUlIpKSkgeworCQkJbmV0aWZfZXJy KGludGYsIHJ4X3N0YXR1cywgaW50Zi0+bmRldiwgImZsYWdzPTNEMHglbGx4XG4iLAorCQkJCSAg ZmxhZ3MpOworCisJCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZzdGF0cy0+c3luY3ApOworCQkJ aWYgKGZsYWdzICYgREVTQ19DUkNfRVJSKQorCQkJCXU2NF9zdGF0c19pbmMoJnN0YXRzLT5yeF9j cmNfZXJycyk7CisJCQlpZiAoZmxhZ3MgJiBERVNDX1JYX1NZTV9FUlIpCisJCQkJdTY0X3N0YXRz X2luYygmc3RhdHMtPnJ4X3N5bV9lcnJzKTsKKwkJCXU2NF9zdGF0c19pbmMoJnN0YXRzLT5yeF9k cm9wcGVkKTsKKwkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZzdGF0cy0+c3luY3ApOworCisJCQln b3RvIG5leHQ7CisJCX0KKworCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShrZGV2LCBERVNDX0FE RFIoZGVzYy0+YnVmKSwgZGVzYy0+c2l6ZSwKKwkJCQkJRE1BX0ZST01fREVWSUNFKTsKKworCQls ZW4gPTNEIGRlc2MtPnNpemU7CisKKwkJc2tiID0zRCBfX25ldGRldl9hbGxvY19za2IoaW50Zi0+ bmRldiwgbGVuLAorCQkJCQkgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7CisJCWlmICghc2ti KSB7CisJCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZzdGF0cy0+c3luY3ApOworCQkJdTY0X3N0 YXRzX2luYygmc3RhdHMtPnJ4X2Vycm9ycyk7CisJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmc3Rh dHMtPnN5bmNwKTsKKworCQkJbmV0aWZfd2FybihpbnRmLCByeF9lcnIsIGludGYtPm5kZXYsCisJ CQkJICAgIlNLQiBhbGxvYyBmYWlsZWRcbiIpOworCQkJZ290byBuZXh0OworCQl9CisKKwkJc2ti X3B1dChza2IsIGxlbik7CisJCW1lbWNweShza2ItPmRhdGEsIGRhdGEsIGxlbik7CisKKwkJc2ti X3B1bGwoc2tiLCAyKTsKKwkJbGVuIC09M0QgMjsKKwkJaWYgKGxpa2VseShpbnRmLT5jcmNfZndk KSkgeworCQkJc2tiX3RyaW0oc2tiLCBsZW4gLSBFVEhfRkNTX0xFTik7CisJCQlsZW4gLT0zRCBF VEhfRkNTX0xFTjsKKwkJfQorCisJCWlmICgoaW50Zi0+bmRldi0+ZmVhdHVyZXMgJiBORVRJRl9G X1JYQ1NVTSkgJiYKKwkJICAgIChkZXNjLT5idWYgJiBERVNDX0NIS1NVTSkpCisJCQlza2ItPmlw X3N1bW1lZCA9M0QgQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisKKwkJc2tiLT5wcm90b2NvbCA9M0Qg ZXRoX3R5cGVfdHJhbnMoc2tiLCBpbnRmLT5uZGV2KTsKKworCQluYXBpX2dyb19yZWNlaXZlKG5h cGksIHNrYik7CisKKwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmc3RhdHMtPnN5bmNwKTsKKwkJ dTY0X3N0YXRzX2luYygmc3RhdHMtPnJ4X3BhY2tldHMpOworCQl1NjRfc3RhdHNfYWRkKCZzdGF0 cy0+cnhfYnl0ZXMsIGxlbik7CisJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZzdGF0cy0+c3luY3Ap OworCituZXh0OgorCQliY21hc3BfaW50Zl9yeF9idWZmZXJfd3JpdGUoaW50ZiwgKERFU0NfQURE UihkZXNjLT5idWYpICsKKwkJCQkJICAgIGRlc2MtPnNpemUpKTsKKworCQlwcm9jZXNzZWQrKzsK KwkJaW50Zi0+cnhfZWRwa3RfZG1hX3JlYWQgPTNECisJCQlpbmNyX2ZpcnN0X2J5dGUoaW50Zi0+ cnhfZWRwa3RfZG1hX3JlYWQsCisJCQkJCWludGYtPnJ4X2VkcGt0X2RtYV9hZGRyLAorCQkJCQlE RVNDX1JJTkdfQ09VTlQpOworCQlpbnRmLT5yeF9lZHBrdF9pbmRleCA9M0QgaW5jcl9yaW5nKGlu dGYtPnJ4X2VkcGt0X2luZGV4LAorCQkJCQkJIERFU0NfUklOR19DT1VOVCk7CisJfQorCisJYmNt YXNwX2ludGZfcnhfZGVzY193cml0ZShpbnRmLCBpbnRmLT5yeF9lZHBrdF9kbWFfcmVhZCk7CisK KwlpZiAocHJvY2Vzc2VkIDwgYnVkZ2V0KSB7CisJCW5hcGlfY29tcGxldGVfZG9uZSgmaW50Zi0+ cnhfbmFwaSwgcHJvY2Vzc2VkKTsKKwkJYmNtYXNwX2VuYWJsZV9yeF9pcnEoaW50ZiwgMSk7CisJ fQorCisJcmV0dXJuIHByb2Nlc3NlZDsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2Fkal9saW5r KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0z RCBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPTNEIGRldi0+ cGh5ZGV2OworCXUzMiBjbWRfYml0cyA9M0QgMCwgcmVnOworCWludCBjaGFuZ2VkID0zRCAwOwor CisJaWYgKGludGYtPm9sZF9saW5rICE9M0QgcGh5ZGV2LT5saW5rKSB7CisJCWNoYW5nZWQgPTNE IDE7CisJCWludGYtPm9sZF9saW5rID0zRCBwaHlkZXYtPmxpbms7CisJfQorCisJaWYgKGludGYt Pm9sZF9kdXBsZXggIT0zRCBwaHlkZXYtPmR1cGxleCkgeworCQljaGFuZ2VkID0zRCAxOworCQlp bnRmLT5vbGRfZHVwbGV4ID0zRCBwaHlkZXYtPmR1cGxleDsKKwl9CisKKwlzd2l0Y2ggKHBoeWRl di0+c3BlZWQpIHsKKwljYXNlIFNQRUVEXzI1MDA6CisJCWNtZF9iaXRzID0zRCBVTUNfQ01EX1NQ RUVEXzI1MDA7CisJCWJyZWFrOworCWNhc2UgU1BFRURfMTAwMDoKKwkJY21kX2JpdHMgPTNEIFVN Q19DTURfU1BFRURfMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBTUEVFRF8xMDA6CisJCWNtZF9iaXRz ID0zRCBVTUNfQ01EX1NQRUVEXzEwMDsKKwkJYnJlYWs7CisJY2FzZSBTUEVFRF8xMDoKKwkJY21k X2JpdHMgPTNEIFVNQ19DTURfU1BFRURfMTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFr OworCX0KKwljbWRfYml0cyA8PD0zRCBVTUNfQ01EX1NQRUVEX1NISUZUOworCisJaWYgKHBoeWRl di0+ZHVwbGV4ID0zRD0zRCBEVVBMRVhfSEFMRikKKwkJY21kX2JpdHMgfD0zRCBVTUNfQ01EX0hE X0VOOworCisJaWYgKGludGYtPm9sZF9wYXVzZSAhPTNEIHBoeWRldi0+cGF1c2UpIHsKKwkJY2hh bmdlZCA9M0QgMTsKKwkJaW50Zi0+b2xkX3BhdXNlID0zRCBwaHlkZXYtPnBhdXNlOworCX0KKwor CWlmICghcGh5ZGV2LT5wYXVzZSkKKwkJY21kX2JpdHMgfD0zRCBVTUNfQ01EX1JYX1BBVVNFX0lH Tk9SRSB8IFVNQ19DTURfVFhfUEFVU0VfSUdOT1JFOworCisJaWYgKCFjaGFuZ2VkKQorCQlyZXR1 cm47CisKKwlpZiAocGh5ZGV2LT5saW5rKSB7CisJCXJlZyA9M0QgdW1hY19ybChpbnRmLCBVTUNf Q01EKTsKKwkJcmVnICY9M0QgfigoVU1DX0NNRF9TUEVFRF9NQVNLIDw8IFVNQ19DTURfU1BFRURf U0hJRlQpIHwKKwkJCVVNQ19DTURfSERfRU4gfCBVTUNfQ01EX1JYX1BBVVNFX0lHTk9SRSB8CisJ CQlVTUNfQ01EX1RYX1BBVVNFX0lHTk9SRSk7CisJCXJlZyB8PTNEIGNtZF9iaXRzOworCQl1bWFj X3dsKGludGYsIHJlZywgVU1DX0NNRCk7CisJfQorCisJcmVnID0zRCByZ21paV9ybChpbnRmLCBS R01JSV9PT0JfQ05UUkwpOworCWlmIChwaHlkZXYtPmxpbmspCisJCXJlZyB8PTNEIFJHTUlJX0xJ Tks7CisJZWxzZQorCQlyZWcgJj0zRCB+UkdNSUlfTElOSzsKKwlyZ21paV93bChpbnRmLCByZWcs IFJHTUlJX09PQl9DTlRSTCk7CisKKwlpZiAoY2hhbmdlZCkKKwkJcGh5X3ByaW50X3N0YXR1cyhw aHlkZXYpOworfQorCitzdGF0aWMgaW50IGJjbWFzcF9pbml0X3J4KHN0cnVjdCBiY21hc3BfaW50 ZiAqaW50ZikKK3sKKwlzdHJ1Y3QgZGV2aWNlICprZGV2ID0zRCAmaW50Zi0+cGFyZW50LT5wZGV2 LT5kZXY7CisJc3RydWN0IHBhZ2UgKmJ1ZmZlcl9wZzsKKwlkbWFfYWRkcl90IGRtYTsKKwl2b2lk ICpwOworCXUzMiByZWc7CisJaW50IHJldDsKKworCWludGYtPnJ4X2J1Zl9vcmRlciA9M0QgZ2V0 X29yZGVyKFJJTkdfQlVGRkVSX1NJWkUpOworCWJ1ZmZlcl9wZyA9M0QgYWxsb2NfcGFnZXMoR0ZQ X0tFUk5FTCwgaW50Zi0+cnhfYnVmX29yZGVyKTsKKworCWRtYSA9M0QgZG1hX21hcF9wYWdlKGtk ZXYsIGJ1ZmZlcl9wZywgMCwgUklOR19CVUZGRVJfU0laRSwKKwkJCSAgIERNQV9GUk9NX0RFVklD RSk7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGtkZXYsIGRtYSkpIHsKKwkJX19mcmVlX3BhZ2Vz KGJ1ZmZlcl9wZywgaW50Zi0+cnhfYnVmX29yZGVyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQor CWludGYtPnJ4X3JpbmdfY3B1ID0zRCBwYWdlX3RvX3ZpcnQoYnVmZmVyX3BnKTsKKwlpbnRmLT5y eF9yaW5nX2RtYSA9M0QgZG1hOworCWludGYtPnJ4X3JpbmdfZG1hX3ZhbGlkID0zRCBpbnRmLT5y eF9yaW5nX2RtYSArIFJJTkdfQlVGRkVSX1NJWkUgLSAxOworCisJcCA9M0QgZG1hX2FsbG9jX2Nv aGVyZW50KGtkZXYsIERFU0NfUklOR19TSVpFLCAmaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHIsCisJ CQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwKSB7CisJCXJldCA9M0QgLUVOT01FTTsKKwkJ Z290byBmcmVlX3J4X3Jpbmc7CisJfQorCWludGYtPnJ4X2VkcGt0X2NwdSA9M0QgcDsKKworCW5l dGlmX25hcGlfYWRkKGludGYtPm5kZXYsICZpbnRmLT5yeF9uYXBpLCBiY21hc3BfcnhfcG9sbCk7 CisKKwlpbnRmLT5yeF9lZHBrdF9kbWFfcmVhZCA9M0QgaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHI7 CisJaW50Zi0+cnhfZWRwa3RfaW5kZXggPTNEIDA7CisKKwkvKiBNYWtlIHN1cmUgY2hhbm5lbHMg YXJlIGRpc2FibGVkICovCisJcnhfZWRwa3RfY2ZnX3dsKGludGYsIDB4MCwgUlhfRURQS1RfQ0ZH X0VOQUJMRSk7CisKKwkvKiBSeCBTUEIgKi8KKwlyeF9lZHBrdF9jZmdfd3EoaW50ZiwgaW50Zi0+ cnhfcmluZ19kbWEsIFJYX0VEUEtUX1JJTkdfQlVGRkVSX1JFQUQpOworCXJ4X2VkcGt0X2NmZ193 cShpbnRmLCBpbnRmLT5yeF9yaW5nX2RtYSwgUlhfRURQS1RfUklOR19CVUZGRVJfV1JJVEUpOwor CXJ4X2VkcGt0X2NmZ193cShpbnRmLCBpbnRmLT5yeF9yaW5nX2RtYSwgUlhfRURQS1RfUklOR19C VUZGRVJfQkFTRSk7CisJcnhfZWRwa3RfY2ZnX3dxKGludGYsIGludGYtPnJ4X3JpbmdfZG1hX3Zh bGlkLAorCQkJUlhfRURQS1RfUklOR19CVUZGRVJfRU5EKTsKKwlyeF9lZHBrdF9jZmdfd3EoaW50 ZiwgaW50Zi0+cnhfcmluZ19kbWFfdmFsaWQsCisJCQlSWF9FRFBLVF9SSU5HX0JVRkZFUl9WQUxJ RCk7CisKKwkvKiBFRFBLVCAqLworCXJ4X2VkcGt0X2NmZ193bChpbnRmLCAoUlhfRURQS1RfQ0ZH X0NGRzBfUkJVRl80SyA8PAorCQkJUlhfRURQS1RfQ0ZHX0NGRzBfREJVRl9TSElGVCkgfAorCQkg ICAgICAgKFJYX0VEUEtUX0NGR19DRkcwXzY0X0FMTiA8PAorCQkJUlhfRURQS1RfQ0ZHX0NGRzBf QkFMTl9TSElGVCkgfAorCQkgICAgICAgKFJYX0VEUEtUX0NGR19DRkcwX0VGUk1fU1RVRiksCisJ CQlSWF9FRFBLVF9DRkdfQ0ZHMCk7CisJcnhfZWRwa3RfZG1hX3dxKGludGYsIGludGYtPnJ4X2Vk cGt0X2RtYV9hZGRyLCBSWF9FRFBLVF9ETUFfV1JJVEUpOworCXJ4X2VkcGt0X2RtYV93cShpbnRm LCBpbnRmLT5yeF9lZHBrdF9kbWFfYWRkciwgUlhfRURQS1RfRE1BX1JFQUQpOworCXJ4X2VkcGt0 X2RtYV93cShpbnRmLCBpbnRmLT5yeF9lZHBrdF9kbWFfYWRkciwgUlhfRURQS1RfRE1BX0JBU0Up OworCXJ4X2VkcGt0X2RtYV93cShpbnRmLCBpbnRmLT5yeF9lZHBrdF9kbWFfYWRkciArIChERVND X1JJTkdfU0laRSAtIDEpLAorCQkJUlhfRURQS1RfRE1BX0VORCk7CisJcnhfZWRwa3RfZG1hX3dx KGludGYsIGludGYtPnJ4X2VkcGt0X2RtYV9hZGRyICsgKERFU0NfUklOR19TSVpFIC0gMSksCisJ CQlSWF9FRFBLVF9ETUFfVkFMSUQpOworCisJcmVnID0zRCBVTUFDMkZCX0NGR19ERUZBVUxUX0VO IHwKKwkgICAgICAoKGludGYtPmNoYW5uZWwgKyAxMSkgPDwgVU1BQzJGQl9DRkdfQ0hJRF9TSElG VCk7CisJcmVnIHw9M0QgKDB4ZCA8PCBVTUFDMkZCX0NGR19PS19TRU5EX1NISUZUKTsKKwl1bWFj MmZiX3dsKGludGYsIHJlZywgVU1BQzJGQl9DRkcpOworCisJcmV0dXJuIDA7CisKK2ZyZWVfcnhf cmluZzoKKwlkbWFfdW5tYXBfcGFnZShrZGV2LCBpbnRmLT5yeF9yaW5nX2RtYSwgUklOR19CVUZG RVJfU0laRSwKKwkJICAgICAgIERNQV9GUk9NX0RFVklDRSk7CisJX19mcmVlX3BhZ2VzKHZpcnRf dG9fcGFnZShpbnRmLT5yeF9yaW5nX2NwdSksIGludGYtPnJ4X2J1Zl9vcmRlcik7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfcmVjbGFpbV9mcmVlX2FsbF9yeChzdHJ1 Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJc3RydWN0IGRldmljZSAqa2RldiA9M0QgJmludGYt PnBhcmVudC0+cGRldi0+ZGV2OworCisJZG1hX2ZyZWVfY29oZXJlbnQoa2RldiwgREVTQ19SSU5H X1NJWkUsIGludGYtPnJ4X2VkcGt0X2NwdSwKKwkJCSAgaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHIp OworCWRtYV91bm1hcF9wYWdlKGtkZXYsIGludGYtPnJ4X3JpbmdfZG1hLCBSSU5HX0JVRkZFUl9T SVpFLAorCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKKwlfX2ZyZWVfcGFnZXModmlydF90b19w YWdlKGludGYtPnJ4X3JpbmdfY3B1KSwgaW50Zi0+cnhfYnVmX29yZGVyKTsKK30KKworc3RhdGlj IGludCBiY21hc3BfaW5pdF90eChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJc3RydWN0 IGRldmljZSAqa2RldiA9M0QgJmludGYtPnBhcmVudC0+cGRldi0+ZGV2OworCXZvaWQgKnA7CisJ aW50IHJldDsKKworCXAgPTNEIGRtYV9hbGxvY19jb2hlcmVudChrZGV2LCBERVNDX1JJTkdfU0la RSwgJmludGYtPnR4X3NwYl9kbWFfYWRkciwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAo IXApCisJCXJldHVybiAtRU5PTUVNOworCisJaW50Zi0+dHhfc3BiX2NwdSA9M0QgcDsKKwlpbnRm LT50eF9zcGJfZG1hX3ZhbGlkID0zRCBpbnRmLT50eF9zcGJfZG1hX2FkZHIgKyBERVNDX1JJTkdf U0laRSAtIDE7CisJaW50Zi0+dHhfc3BiX2RtYV9yZWFkID0zRCBpbnRmLT50eF9zcGJfZG1hX2Fk ZHI7CisKKwlpbnRmLT50eF9jYnMgPTNEIGtjYWxsb2MoREVTQ19SSU5HX0NPVU5ULCBzaXplb2Yo c3RydWN0IGJjbWFzcF90eF9jYiksCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnRm LT50eF9jYnMpIHsKKwkJcmV0ID0zRCAtRU5PTUVNOworCQlnb3RvIGZyZWVfdHhfc3BiOworCX0K KworCWludGYtPnR4X3NwYl9pbmRleCA9M0QgMDsKKwlpbnRmLT50eF9zcGJfY2xlYW5faW5kZXgg PTNEIDA7CisKKwluZXRpZl9uYXBpX2FkZF90eChpbnRmLT5uZGV2LCAmaW50Zi0+dHhfbmFwaSwg YmNtYXNwX3R4X3BvbGwpOworCisJLyogTWFrZSBzdXJlIGNoYW5uZWxzIGFyZSBkaXNhYmxlZCAq LworCXR4X3NwYl9jdHJsX3dsKGludGYsIDB4MCwgVFhfU1BCX0NUUkxfRU5BQkxFKTsKKwl0eF9l cGt0X2NvcmVfd2woaW50ZiwgMHgwLCBUWF9FUEtUX0NfQ0ZHX01JU0MpOworCisJLyogVHggU1BC ICovCisJdHhfc3BiX2N0cmxfd2woaW50ZiwgKChpbnRmLT5jaGFubmVsICsgOCkgPDwgVFhfU1BC X0NUUkxfWEZfQklEX1NISUZUKSwKKwkJICAgICAgIFRYX1NQQl9DVFJMX1hGX0NUUkwyKTsKKwl0 eF9wYXVzZV9jdHJsX3dsKGludGYsICgxIDw8IChpbnRmLT5jaGFubmVsICsgOCkpLCBUWF9QQVVT RV9NQVBfVkVDVE9SKTsKKwl0eF9zcGJfdG9wX3dsKGludGYsIDB4MWUsIFRYX1NQQl9UT1BfQkxL T1VUKTsKKwl0eF9zcGJfdG9wX3dsKGludGYsIDB4MCwgVFhfU1BCX1RPUF9TUFJFX0JXX0NUUkwp OworCisJdHhfc3BiX2RtYV93cShpbnRmLCBpbnRmLT50eF9zcGJfZG1hX2FkZHIsIFRYX1NQQl9E TUFfUkVBRCk7CisJdHhfc3BiX2RtYV93cShpbnRmLCBpbnRmLT50eF9zcGJfZG1hX2FkZHIsIFRY X1NQQl9ETUFfQkFTRSk7CisJdHhfc3BiX2RtYV93cShpbnRmLCBpbnRmLT50eF9zcGJfZG1hX3Zh bGlkLCBUWF9TUEJfRE1BX0VORCk7CisJdHhfc3BiX2RtYV93cShpbnRmLCBpbnRmLT50eF9zcGJf ZG1hX3ZhbGlkLCBUWF9TUEJfRE1BX1ZBTElEKTsKKworCXJldHVybiAwOworCitmcmVlX3R4X3Nw YjoKKwlkbWFfZnJlZV9jb2hlcmVudChrZGV2LCBERVNDX1JJTkdfU0laRSwgaW50Zi0+dHhfc3Bi X2NwdSwKKwkJCSAgaW50Zi0+dHhfc3BiX2RtYV9hZGRyKTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyB2b2lkIGJjbWFzcF9yZWNsYWltX2ZyZWVfYWxsX3R4KHN0cnVjdCBiY21hc3BfaW50 ZiAqaW50ZikKK3sKKwlzdHJ1Y3QgZGV2aWNlICprZGV2ID0zRCAmaW50Zi0+cGFyZW50LT5wZGV2 LT5kZXY7CisKKwkvKiBGcmVlIGRlc2NyaXB0b3JzICovCisJZG1hX2ZyZWVfY29oZXJlbnQoa2Rl diwgREVTQ19SSU5HX1NJWkUsIGludGYtPnR4X3NwYl9jcHUsCisJCQkgIGludGYtPnR4X3NwYl9k bWFfYWRkcik7CisKKwkvKiBGcmVlIGNicyAqLworCWtmcmVlKGludGYtPnR4X2Nicyk7Cit9CisK K3N0YXRpYyB2b2lkIGJjbWFzcF9lcGh5X2VuYWJsZV9zZXQoc3RydWN0IGJjbWFzcF9pbnRmICpp bnRmLCBib29sIGVuYWJsZSkKK3sKKwl1MzIgbWFzayA9M0QgUkdNSUlfRVBIWV9DRkdfSUREUV9C SUFTIHwgUkdNSUlfRVBIWV9DRkdfRVhUX1BXUkRPV04gfAorCQkgICBSR01JSV9FUEhZX0NGR19J RERRX0dMT0JBTDsKKwl1MzIgcmVnOworCisJcmVnID0zRCByZ21paV9ybChpbnRmLCBSR01JSV9F UEhZX0NOVFJMKTsKKwlpZiAoZW5hYmxlKSB7CisJCXJlZyAmPTNEIH5SR01JSV9FUEhZX0NLMjVf RElTOworCQlyZ21paV93bChpbnRmLCByZWcsIFJHTUlJX0VQSFlfQ05UUkwpOworCQltZGVsYXko MSk7CisKKwkJcmVnICY9M0Qgfm1hc2s7CisJCXJlZyB8PTNEIFJHTUlJX0VQSFlfUkVTRVQ7CisJ CXJnbWlpX3dsKGludGYsIHJlZywgUkdNSUlfRVBIWV9DTlRSTCk7CisJCW1kZWxheSgxKTsKKwor CQlyZWcgJj0zRCB+UkdNSUlfRVBIWV9SRVNFVDsKKwl9IGVsc2UgeworCQlyZWcgfD0zRCBtYXNr IHwgUkdNSUlfRVBIWV9SRVNFVDsKKwkJcmdtaWlfd2woaW50ZiwgcmVnLCBSR01JSV9FUEhZX0NO VFJMKTsKKwkJbWRlbGF5KDEpOworCQlyZWcgfD0zRCBSR01JSV9FUEhZX0NLMjVfRElTOworCX0K KwlyZ21paV93bChpbnRmLCByZWcsIFJHTUlJX0VQSFlfQ05UUkwpOworCW1kZWxheSgxKTsKKwor CS8qIFNldCBvciBjbGVhciB0aGUgTEVEIGNvbnRyb2wgb3ZlcnJpZGUgdG8gYXZvaWQgbGlnaHRp bmcgdXAgTEVEcworCSAqIHdoaWxlIHRoZSBFUEhZIGlzIHBvd2VyZWQgb2ZmIGFuZCBkcmF3aW5n IHVubmVjZXNzYXJ5IGN1cnJlbnQuCisJICovCisJcmVnID0zRCByZ21paV9ybChpbnRmLCBSR01J SV9TWVNfTEVEX0NOVFJMKTsKKwlpZiAoZW5hYmxlKQorCQlyZWcgJj0zRCB+UkdNSUlfU1lTX0xF RF9DTlRSTF9MSU5LX09WUkQ7CisJZWxzZQorCQlyZWcgfD0zRCBSR01JSV9TWVNfTEVEX0NOVFJM X0xJTktfT1ZSRDsKKwlyZ21paV93bChpbnRmLCByZWcsIFJHTUlJX1NZU19MRURfQ05UUkwpOwor fQorCitzdGF0aWMgdm9pZCBiY21hc3BfcmdtaWlfbW9kZV9lbl9zZXQoc3RydWN0IGJjbWFzcF9p bnRmICppbnRmLCBib29sIGVuYWJsZSkKK3sKKwl1MzIgcmVnOworCisJcmVnID0zRCByZ21paV9y bChpbnRmLCBSR01JSV9PT0JfQ05UUkwpOworCXJlZyAmPTNEIH5SR01JSV9PT0JfRElTOworCWlm IChlbmFibGUpCisJCXJlZyB8PTNEIFJHTUlJX01PREVfRU47CisJZWxzZQorCQlyZWcgJj0zRCB+ UkdNSUlfTU9ERV9FTjsKKwlyZ21paV93bChpbnRmLCByZWcsIFJHTUlJX09PQl9DTlRSTCk7Cit9 CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9uZXRpZl9kZWluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJ dTMyIHJlZywgdGltZW91dCA9M0QgMTAwMDsKKworCW5hcGlfZGlzYWJsZSgmaW50Zi0+dHhfbmFw aSk7CisKKwliY21hc3BfZW5hYmxlX3R4KGludGYsIDApOworCisJLyogRmx1c2ggYW55IFRYIHBh Y2tldHMgaW4gdGhlIHBpcGUgKi8KKwl0eF9zcGJfZG1hX3dsKGludGYsIFRYX1NQQl9ETUFfRklG T19GTFVTSCwgVFhfU1BCX0RNQV9GSUZPX0NUUkwpOworCWRvIHsKKwkJcmVnID0zRCB0eF9zcGJf ZG1hX3JsKGludGYsIFRYX1NQQl9ETUFfRklGT19TVEFUVVMpOworCQlpZiAoIShyZWcgJiBUWF9T UEJfRE1BX0ZJRk9fRkxVU0gpKQorCQkJYnJlYWs7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAw KTsKKwl9IHdoaWxlICh0aW1lb3V0LS0gPiAwKTsKKwl0eF9zcGJfZG1hX3dsKGludGYsIDB4MCwg VFhfU1BCX0RNQV9GSUZPX0NUUkwpOworCisJdW1hY19lbmFibGVfc2V0KGludGYsIFVNQ19DTURf VFhfRU4sIDApOworCisJcGh5X3N0b3AoZGV2LT5waHlkZXYpOworCisJdW1hY19lbmFibGVfc2V0 KGludGYsIFVNQ19DTURfUlhfRU4sIDApOworCisJYmNtYXNwX2ZsdXNoX3J4X3BvcnQoaW50Zik7 CisJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOworCWJjbWFzcF9lbmFibGVfcngoaW50ZiwgMCk7 CisKKwluYXBpX2Rpc2FibGUoJmludGYtPnJ4X25hcGkpOworCisJLyogRGlzYWJsZSBpbnRlcnJ1 cHRzICovCisJYmNtYXNwX2VuYWJsZV90eF9pcnEoaW50ZiwgMCk7CisJYmNtYXNwX2VuYWJsZV9y eF9pcnEoaW50ZiwgMCk7CisKKwluZXRpZl9uYXBpX2RlbCgmaW50Zi0+dHhfbmFwaSk7CisJYmNt YXNwX3JlY2xhaW1fZnJlZV9hbGxfdHgoaW50Zik7CisKKwluZXRpZl9uYXBpX2RlbCgmaW50Zi0+ cnhfbmFwaSk7CisJYmNtYXNwX3JlY2xhaW1fZnJlZV9hbGxfcngoaW50Zik7Cit9CisKK3N0YXRp YyBpbnQgYmNtYXNwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYmNt YXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisKKwluZXRpZl9kYmcoaW50Ziwg aWZkb3duLCBkZXYsICJiY21hc3Agc3RvcFxuIik7CisKKwkvKiBTdG9wIHR4IGZyb20gdXBkYXRp bmcgSFcgKi8KKwluZXRpZl90eF9kaXNhYmxlKGRldik7CisKKwliY21hc3BfbmV0aWZfZGVpbml0 KGRldik7CisKKwlwaHlfZGlzY29ubmVjdChkZXYtPnBoeWRldik7CisKKwkvKiBEaXNhYmxlIGlu dGVybmFsIEVQSFkgb3IgZXh0ZXJuYWwgUEhZICovCisJaWYgKGludGYtPmludGVybmFsX3BoeSkK KwkJYmNtYXNwX2VwaHlfZW5hYmxlX3NldChpbnRmLCBmYWxzZSk7CisJZWxzZQorCQliY21hc3Bf cmdtaWlfbW9kZV9lbl9zZXQoaW50ZiwgZmFsc2UpOworCisJLyogRGlzYWJsZSB0aGUgaW50ZXJm YWNlIGNsb2NrcyAqLworCWJjbWFzcF9jb3JlX2Nsb2NrX3NldF9pbnRmKGludGYsIGZhbHNlKTsK KworCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbnRmLT5wYXJlbnQtPmNsayk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2NvbmZpZ3VyZV9wb3J0KHN0cnVjdCBiY21hc3Bf aW50ZiAqaW50ZikKK3sKKwl1MzIgcmVnLCBpZF9tb2RlX2RpcyA9M0QgMDsKKworCXJlZyA9M0Qg cmdtaWlfcmwoaW50ZiwgUkdNSUlfUE9SVF9DTlRSTCk7CisJcmVnICY9M0QgflJHTUlJX1BPUlRf TU9ERV9NQVNLOworCisJc3dpdGNoIChpbnRmLT5waHlfaW50ZXJmYWNlKSB7CisJY2FzZSBQSFlf SU5URVJGQUNFX01PREVfUkdNSUk6CisJCS8qIFJHTUlJX05PX0lEOiBUWEMgdHJhbnNpdGlvbnMg YXQgdGhlIHNhbWUgdGltZSBhcyBUWEQKKwkJICoJCShyZXF1aXJlcyBQQ0Igb3IgcmVjZWl2ZXIt c2lkZSBkZWxheSkKKwkJICogUkdNSUk6CUFkZCAybnMgZGVsYXkgb24gVFhDICg5MCBkZWdyZWUg c2hpZnQpCisJCSAqCisJCSAqIElEIGlzIGltcGxpY2l0bHkgZGlzYWJsZWQgZm9yIDEwME1icHMg KFJHKU1JSSBvcGVyYXRpb24uCisJCSAqLworCQlpZF9tb2RlX2RpcyA9M0QgUkdNSUlfSURfTU9E RV9ESVM7CisJCWZhbGx0aHJvdWdoOworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RY SUQ6CisJCXJlZyB8PTNEIFJHTUlJX1BPUlRfTU9ERV9FWFRfR1BIWTsKKwkJYnJlYWs7CisJY2Fz ZSBQSFlfSU5URVJGQUNFX01PREVfTUlJOgorCQlyZWcgfD0zRCBSR01JSV9QT1JUX01PREVfRVhU X0VQSFk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChpbnRmLT5p bnRlcm5hbF9waHkpCisJCXJlZyB8PTNEIFJHTUlJX1BPUlRfTU9ERV9FUEhZOworCisJcmdtaWlf d2woaW50ZiwgcmVnLCBSR01JSV9QT1JUX0NOVFJMKTsKKworCXJlZyA9M0QgcmdtaWlfcmwoaW50 ZiwgUkdNSUlfT09CX0NOVFJMKTsKKwlyZWcgJj0zRCB+UkdNSUlfSURfTU9ERV9ESVM7CisJcmVn IHw9M0QgaWRfbW9kZV9kaXM7CisJcmdtaWlfd2woaW50ZiwgcmVnLCBSR01JSV9PT0JfQ05UUkwp OworfQorCitzdGF0aWMgaW50IGJjbWFzcF9uZXRpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYsIGJvb2wgcGh5X2Nvbm5lY3QpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBu ZXRkZXZfcHJpdihkZXYpOworCXBoeV9pbnRlcmZhY2VfdCBwaHlfaWZhY2UgPTNEIGludGYtPnBo eV9pbnRlcmZhY2U7CisJdTMyIHBoeV9mbGFncyA9M0QgUEhZX0JSQ01fQVVUT19QV1JEV05fRU5B QkxFIHwKKwkJCVBIWV9CUkNNX0RJU19UWENSWENfTk9FTlJHWSB8CisJCQlQSFlfQlJDTV9JRERR X1NVU1BFTkQ7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9M0QgTlVMTDsKKwlpbnQgcmV0 OworCisJLyogQWx3YXlzIGVuYWJsZSBpbnRlcmZhY2UgY2xvY2tzICovCisJYmNtYXNwX2NvcmVf Y2xvY2tfc2V0X2ludGYoaW50ZiwgdHJ1ZSk7CisKKwkvKiBFbmFibGUgaW50ZXJuYWwgUEhZIG9y IGV4dGVybmFsIFBIWSBiZWZvcmUgYW55IE1BQyBhY3Rpdml0eSAqLworCWlmIChpbnRmLT5pbnRl cm5hbF9waHkpCisJCWJjbWFzcF9lcGh5X2VuYWJsZV9zZXQoaW50ZiwgdHJ1ZSk7CisJZWxzZQor CQliY21hc3BfcmdtaWlfbW9kZV9lbl9zZXQoaW50ZiwgdHJ1ZSk7CisJYmNtYXNwX2NvbmZpZ3Vy ZV9wb3J0KGludGYpOworCisJLyogVGhpcyBpcyBhbiB1Z2x5IHF1aXJrIGJ1dCB3ZSBoYXZlIG5v dCBiZWVuIGNvcnJlY3RseQorCSAqIGludGVycHJldGluZyB0aGUgcGh5X2ludGVyZmFjZSB2YWx1 ZXMgYW5kIHdlIGhhdmUgZG9uZSB0aGF0CisJICogYWNyb3NzIGRpZmZlcmVudCBkcml2ZXJzLCBz byBhdCBsZWFzdCB3ZSBhcmUgY29uc2lzdGVudCBpbgorCSAqIG91ciBtaXN0YWtlcy4KKwkgKgor CSAqIFdoZW4gdGhlIEdlbmVyaWMgUEhZIGRyaXZlciBpcyBpbiB1c2UgZWl0aGVyIHRoZSBQSFkg aGFzCisJICogYmVlbiBzdHJhcHBlZCBvciBwcm9ncmFtbWVkIGNvcnJlY3RseSBieSB0aGUgYm9v dCBsb2FkZXIgc28KKwkgKiB3ZSBzaG91bGQgc3RpY2sgdG8gb3VyIGluY29ycmVjdCBpbnRlcnBy ZXRhdGlvbiBzaW5jZSB3ZQorCSAqIGhhdmUgdmFsaWRhdGVkIGl0LgorCSAqCisJICogTm93IHdo ZW4gYSBkZWRpY2F0ZWQgUEhZIGRyaXZlciBpcyBpbiB1c2UsIHdlIG5lZWQgdG8KKwkgKiByZXZl cnNlIHRoZSBtZWFuaW5nIG9mIHRoZSBwaHlfaW50ZXJmYWNlX21vZGUgdmFsdWVzIHRvCisJICog c29tZXRoaW5nIHRoYXQgdGhlIFBIWSBkcml2ZXIgd2lsbCBpbnRlcnByZXQgYW5kIGFjdCBvbiBz dWNoCisJICogdGhhdCB3ZSBoYXZlIHR3byBtaXN0YWtlcyBjYW5jZWxpbmcgdGhlbXNlbHZlcyBz byB0byBzcGVhay4KKwkgKiBXZSBvbmx5IGRvIHRoaXMgZm9yIHRoZSB0d28gbW9kZXMgdGhhdCBH RU5FVCBkcml2ZXIKKwkgKiBvZmZpY2lhbGx5IHN1cHBvcnRzIG9uIEJyb2FkY29tIFNUQiBjaGlw czoKKwkgKiBQSFlfSU5URVJGQUNFX01PREVfUkdNSUkgYW5kIFBIWV9JTlRFUkZBQ0VfTU9ERV9S R01JSV9UWElELgorCSAqIE90aGVyIG1vZGVzIGFyZSBub3QgKm9mZmljaWFsbHkqIHN1cHBvcnRl ZCB3aXRoIHRoZSBib290CisJICogbG9hZGVyIGFuZCB0aGUgc2NyaXB0ZWQgZW52aXJvbm1lbnQg Z2VuZXJhdGluZyBEZXZpY2UgVHJlZQorCSAqIGJsb2JzIGZvciB0aG9zZSBwbGF0Zm9ybXMuCisJ ICoKKwkgKiBOb3RlIHRoYXQgaW50ZXJuYWwgUEhZIGFuZCBmaXhlZC1saW5rIGNvbmZpZ3VyYXRp b25zIGFyZSBub3QKKwkgKiBhZmZlY3RlZCBiZWNhdXNlIHRoZXkgdXNlIGRpZmZlcmVudCBwaHlf aW50ZXJmYWNlX3QgdmFsdWVzCisJICogb3IgdGhlIEdlbmVyaWMgUEhZIGRyaXZlci4KKwkgKi8K Kwlzd2l0Y2ggKHBoeV9pZmFjZSkgeworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOgor CQlwaHlfaWZhY2UgPTNEIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9JRDsKKwkJYnJlYWs7CisJ Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRDoKKwkJcGh5X2lmYWNlID0zRCBQSFlf SU5URVJGQUNFX01PREVfUkdNSUlfUlhJRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7 CisJfQorCisJaWYgKHBoeV9jb25uZWN0KSB7CisJCXBoeWRldiA9M0Qgb2ZfcGh5X2Nvbm5lY3Qo ZGV2LCBpbnRmLT5waHlfZG4sCisJCQkJCWJjbWFzcF9hZGpfbGluaywgcGh5X2ZsYWdzLAorCQkJ CQlwaHlfaWZhY2UpOworCQlpZiAoIXBoeWRldikgeworCQkJcmV0ID0zRCAtRU5PREVWOworCQkJ bmV0ZGV2X2VycihkZXYsICJjb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIik7CisJCQlnb3RvIGVy cl9waHlfZGlzYWJsZTsKKwkJfQorCX0gZWxzZSB7CisJCXJldCA9M0QgcGh5X3Jlc3VtZShkZXYt PnBoeWRldik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9waHlfZGlzYWJsZTsKKwl9CisKKwl1 bWFjX3Jlc2V0KGludGYpOworCisJdW1hY19pbml0KGludGYpOworCisJLyogRGlzYWJsZSB0aGUg VW5pTUFDIFJYL1RYICovCisJdW1hY19lbmFibGVfc2V0KGludGYsIChVTUNfQ01EX1JYX0VOIHwg VU1DX0NNRF9UWF9FTiksIDApOworCisJdW1hY19zZXRfaHdfYWRkcihpbnRmLCBkZXYtPmRldl9h ZGRyKTsKKworCWludGYtPm9sZF9kdXBsZXggPTNEIC0xOworCWludGYtPm9sZF9saW5rID0zRCAt MTsKKwlpbnRmLT5vbGRfcGF1c2UgPTNEIC0xOworCisJcmV0ID0zRCBiY21hc3BfaW5pdF90eChp bnRmKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9waHlfZGlzY29ubmVjdDsKKworCS8qIFR1cm4g b24gYXNwICovCisJYmNtYXNwX2VuYWJsZV90eChpbnRmLCAxKTsKKworCXJldCA9M0QgYmNtYXNw X2luaXRfcngoaW50Zik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVjbGFpbV90eDsKKworCWJj bWFzcF9lbmFibGVfcngoaW50ZiwgMSk7CisKKwkvKiBUdXJuIG9uIFVuaU1BQyBUWC9SWCAqLwor CXVtYWNfZW5hYmxlX3NldChpbnRmLCAoVU1DX0NNRF9SWF9FTiB8IFVNQ19DTURfVFhfRU4pLCAx KTsKKworCWludGYtPmNyY19md2QgPTNEICEhKHVtYWNfcmwoaW50ZiwgVU1DX0NNRCkgJiBVTUNf Q01EX0NSQ19GV0QpOworCisJYmNtYXNwX25ldGlmX3N0YXJ0KGRldik7CisKKwluZXRpZl9zdGFy dF9xdWV1ZShkZXYpOworCisJcmV0dXJuIDA7CisKK2Vycl9yZWNsYWltX3R4OgorCWJjbWFzcF9y ZWNsYWltX2ZyZWVfYWxsX3R4KGludGYpOworZXJyX3BoeV9kaXNjb25uZWN0OgorCWlmIChwaHlk ZXYpCisJCXBoeV9kaXNjb25uZWN0KHBoeWRldik7CitlcnJfcGh5X2Rpc2FibGU6CisJaWYgKGlu dGYtPmludGVybmFsX3BoeSkKKwkJYmNtYXNwX2VwaHlfZW5hYmxlX3NldChpbnRmLCBmYWxzZSk7 CisJZWxzZQorCQliY21hc3BfcmdtaWlfbW9kZV9lbl9zZXQoaW50ZiwgZmFsc2UpOworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJ aW50IHJldDsKKworCW5ldGlmX2RiZyhpbnRmLCBpZnVwLCBkZXYsICJiY21hc3Agb3BlblxuIik7 CisKKwlyZXQgPTNEIGNsa19wcmVwYXJlX2VuYWJsZShpbnRmLT5wYXJlbnQtPmNsayk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9M0QgYmNtYXNwX25ldGlmX2luaXQoZGV2LCB0 cnVlKTsKKwlpZiAocmV0KQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaW50Zi0+cGFyZW50LT5j bGspOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX3R4X3RpbWVvdXQo c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpCit7CisJc3RydWN0 IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBiY21hc3Bf aW50Zl9zdGF0czY0ICpzdGF0czsKKworCXN0YXRzID0zRCAmaW50Zi0+c3RhdHM2NDsKKworCW5l dGlmX2RiZyhpbnRmLCB0eF9lcnIsIGRldiwgInRyYW5zbWl0IHRpbWVvdXQhXG4iKTsKKworCXU2 NF9zdGF0c191cGRhdGVfYmVnaW4oJnN0YXRzLT5zeW5jcCk7CisJdTY0X3N0YXRzX2luYygmc3Rh dHMtPnJ4X2Vycm9ycyk7CisJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnN0YXRzLT5zeW5jcCk7Cit9 CisKK3N0YXRpYyBpbnQgYmNtYXNwX2dldF9waHlzX3BvcnRfbmFtZShzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2LAorCQkJCSAgICAgY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgYmNt YXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoc25wcmludGYobmFt ZSwgbGVuLCAicCVkIiwgaW50Zi0+cG9ydCkgPj0zRCBsZW4pCisJCXJldHVybiAtRUlOVkFMOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9nZXRfc3RhdHM2NChzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3Rh dHMpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOwor CXN0cnVjdCBiY21hc3BfaW50Zl9zdGF0czY0ICpsc3RhdHM7CisJdW5zaWduZWQgaW50IHN0YXJ0 OworCisJbHN0YXRzID0zRCAmaW50Zi0+c3RhdHM2NDsKKworCWRvIHsKKwkJc3RhcnQgPTNEIHU2 NF9zdGF0c19mZXRjaF9iZWdpbigmbHN0YXRzLT5zeW5jcCk7CisJCXN0YXRzLT5yeF9wYWNrZXRz ID0zRCB1NjRfc3RhdHNfcmVhZCgmbHN0YXRzLT5yeF9wYWNrZXRzKTsKKwkJc3RhdHMtPnJ4X2J5 dGVzID0zRCB1NjRfc3RhdHNfcmVhZCgmbHN0YXRzLT5yeF9ieXRlcyk7CisJCXN0YXRzLT5yeF9k cm9wcGVkID0zRCB1NjRfc3RhdHNfcmVhZCgmbHN0YXRzLT5yeF9kcm9wcGVkKTsKKwkJc3RhdHMt PnJ4X2NyY19lcnJvcnMgPTNEIHU2NF9zdGF0c19yZWFkKCZsc3RhdHMtPnJ4X2NyY19lcnJzKTsK KwkJc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyA9M0QgdTY0X3N0YXRzX3JlYWQoJmxzdGF0cy0+cnhf c3ltX2VycnMpOworCQlzdGF0cy0+cnhfZXJyb3JzID0zRCB1NjRfc3RhdHNfcmVhZCgmbHN0YXRz LT5yeF9lcnJvcnMpICsKKwkJCQkgICBzdGF0cy0+cnhfY3JjX2Vycm9ycyArIHN0YXRzLT5yeF9m cmFtZV9lcnJvcnM7CisKKwkJc3RhdHMtPnR4X3BhY2tldHMgPTNEIHU2NF9zdGF0c19yZWFkKCZs c3RhdHMtPnR4X3BhY2tldHMpOworCQlzdGF0cy0+dHhfYnl0ZXMgPTNEIHU2NF9zdGF0c19yZWFk KCZsc3RhdHMtPnR4X2J5dGVzKTsKKwkJc3RhdHMtPnR4X2Vycm9ycyA9M0QgdTY0X3N0YXRzX3Jl YWQoJmxzdGF0cy0+dHhfZXJyb3JzKTsKKwl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnko JmxzdGF0cy0+c3luY3AsIHN0YXJ0KSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2Rl dmljZV9vcHMgYmNtYXNwX25ldGRldl9vcHMgPTNEIHsKKwkubmRvX29wZW4JCT0zRCBiY21hc3Bf b3BlbiwKKwkubmRvX3N0b3AJCT0zRCBiY21hc3Bfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0z RCBiY21hc3BfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0zRCBiY21hc3BfdHhfdGltZW91dCwK KwkubmRvX3NldF9yeF9tb2RlCT0zRCBiY21hc3Bfc2V0X3J4X21vZGUsCisJLm5kb19nZXRfcGh5 c19wb3J0X25hbWUJPTNEIGJjbWFzcF9nZXRfcGh5c19wb3J0X25hbWUsCisJLm5kb19ldGhfaW9j dGwJCT0zRCBwaHlfZG9faW9jdGxfcnVubmluZywKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9M0Qg ZXRoX21hY19hZGRyLAorCS5uZG9fZ2V0X3N0YXRzNjQJPTNEIGJjbWFzcF9nZXRfc3RhdHM2NCwK K307CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9tYXBfcmVzKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJp diwgc3RydWN0IGJjbWFzcF9pbnRmICppPQpudGYpCit7CisJLyogUGVyIHBvcnQgKi8KKwlpbnRm LT5yZXMudW1hYyA9M0QgcHJpdi0+YmFzZSArIFVNQ19PRkZTRVQoaW50Zik7CisJaW50Zi0+cmVz LnVtYWMyZmIgPTNEIHByaXYtPmJhc2UgKyAocHJpdi0+aHdfaW5mby0+dW1hYzJmYiArCisJCQkJ CSAgKGludGYtPnBvcnQgKiAweDQpKTsKKwlpbnRmLT5yZXMucmdtaWkgPTNEIHByaXYtPmJhc2Ug KyBSR01JSV9PRkZTRVQoaW50Zik7CisKKwkvKiBQZXIgY2ggKi8KKwlpbnRmLT50eF9zcGJfZG1h ID0zRCBwcml2LT5iYXNlICsgVFhfU1BCX0RNQV9PRkZTRVQoaW50Zik7CisJaW50Zi0+cmVzLnR4 X3NwYl9jdHJsID0zRCBwcml2LT5iYXNlICsgVFhfU1BCX0NUUkxfT0ZGU0VUKGludGYpOworCWlu dGYtPnJlcy50eF9zcGJfdG9wID0zRCBwcml2LT5iYXNlICsgVFhfU1BCX1RPUF9PRkZTRVQoaW50 Zik7CisJaW50Zi0+cmVzLnR4X2Vwa3RfY29yZSA9M0QgcHJpdi0+YmFzZSArIFRYX0VQS1RfQ19P RkZTRVQoaW50Zik7CisJaW50Zi0+cmVzLnR4X3BhdXNlX2N0cmwgPTNEIHByaXYtPmJhc2UgKyBU WF9QQVVTRV9DVFJMX09GRlNFVChpbnRmKTsKKworCWludGYtPnJ4X2VkcGt0X2RtYSA9M0QgcHJp di0+YmFzZSArIFJYX0VEUEtUX0RNQV9PRkZTRVQoaW50Zik7CisJaW50Zi0+cnhfZWRwa3RfY2Zn ID0zRCBwcml2LT5iYXNlICsgUlhfRURQS1RfQ0ZHX09GRlNFVChpbnRmKTsKK30KKworI2RlZmlu ZSBNQVhfSVJRX1NUUl9MRU4JCTY0CitzdHJ1Y3QgYmNtYXNwX2ludGYgKmJjbWFzcF9pbnRlcmZh Y2VfY3JlYXRlKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwKKwkJCQkJICAgIHN0cnVjdCBkZXZp Y2Vfbm9kZSAqbmRldl9kbiwgaW50IGkpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0zRCAmcHJp di0+cGRldi0+ZGV2OworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZjsKKwlzdHJ1Y3QgbmV0X2Rl dmljZSAqbmRldjsKKwlpbnQgY2gsIHBvcnQsIHJldDsKKworCWlmIChvZl9wcm9wZXJ0eV9yZWFk X3UzMihuZGV2X2RuLCAicmVnIiwgJnBvcnQpKSB7CisJCWRldl93YXJuKGRldiwgIiVzOiBpbnZh bGlkIGNoIG51bWJlclxuIiwgbmRldl9kbi0+bmFtZSk7CisJCWdvdG8gZXJyOworCX0KKworCWlm IChvZl9wcm9wZXJ0eV9yZWFkX3UzMihuZGV2X2RuLCAiYnJjbSxjaGFubmVsIiwgJmNoKSkgewor CQlkZXZfd2FybihkZXYsICIlczogaW52YWxpZCBjaCBudW1iZXJcbiIsIG5kZXZfZG4tPm5hbWUp OworCQlnb3RvIGVycjsKKwl9CisKKwluZGV2ID0zRCBhbGxvY19ldGhlcmRldihzaXplb2Yoc3Ry dWN0IGJjbWFzcF9pbnRmKSk7CisJaWYgKCFuZGV2KSB7CisJCWRldl93YXJuKGRldiwgIiVzOiB1 bmFibGUgdG8gYWxsb2MgbmRldlxuIiwgbmRldl9kbi0+bmFtZSk7CisJCWdvdG8gZXJyOworCX0K KwlpbnRmID0zRCBuZXRkZXZfcHJpdihuZGV2KTsKKworCWludGYtPnBhcmVudCA9M0QgcHJpdjsK KwlpbnRmLT5uZGV2ID0zRCBuZGV2OworCWludGYtPmNoYW5uZWwgPTNEIGNoOworCWludGYtPnBv cnQgPTNEIHBvcnQ7CisJaW50Zi0+bmRldl9kbiA9M0QgbmRldl9kbjsKKwlpbnRmLT5pbmRleCA9 M0QgaTsKKworCXJldCA9M0Qgb2ZfZ2V0X3BoeV9tb2RlKG5kZXZfZG4sICZpbnRmLT5waHlfaW50 ZXJmYWNlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImludmFsaWQgUEhZIG1v ZGUgcHJvcGVydHlcbiIpOworCQlnb3RvIGVycl9mcmVlX25ldGRldjsKKwl9CisKKwlpZiAoaW50 Zi0+cGh5X2ludGVyZmFjZSA9M0Q9M0QgUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKQorCQlp bnRmLT5pbnRlcm5hbF9waHkgPTNEIHRydWU7CisKKwlpbnRmLT5waHlfZG4gPTNEIG9mX3BhcnNl X3BoYW5kbGUobmRldl9kbiwgInBoeS1oYW5kbGUiLCAwKTsKKwlpZiAoIWludGYtPnBoeV9kbiAm JiBvZl9waHlfaXNfZml4ZWRfbGluayhuZGV2X2RuKSkgeworCQlyZXQgPTNEIG9mX3BoeV9yZWdp c3Rlcl9maXhlZF9saW5rKG5kZXZfZG4pOworCQlpZiAocmV0KSB7CisJCQlkZXZfd2FybihkZXYs ICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIGZpeGVkIFBIWVxuIiwKKwkJCQkgbmRldl9kbi0+bmFt ZSk7CisJCQlnb3RvIGVycl9mcmVlX25ldGRldjsKKwkJfQorCQlpbnRmLT5waHlfZG4gPTNEIG5k ZXZfZG47CisJfQorCisJLyogTWFwIHJlc291cmNlICovCisJYmNtYXNwX21hcF9yZXMocHJpdiwg aW50Zik7CisKKwlpZiAoKCFwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoaW50Zi0+cGh5X2lu dGVyZmFjZSkgJiYKKwkgICAgIGludGYtPnBoeV9pbnRlcmZhY2UgIT0zRCBQSFlfSU5URVJGQUNF X01PREVfTUlJICYmCisJICAgICBpbnRmLT5waHlfaW50ZXJmYWNlICE9M0QgUEhZX0lOVEVSRkFD RV9NT0RFX0lOVEVSTkFMKSB8fAorCSAgICAoaW50Zi0+cG9ydCAhPTNEIDEgJiYgaW50Zi0+aW50 ZXJuYWxfcGh5KSkgeworCQluZXRkZXZfZXJyKGludGYtPm5kZXYsICJpbnZhbGlkIFBIWSBtb2Rl OiAlcyBmb3IgcG9ydCAlZFxuIiwKKwkJCSAgIHBoeV9tb2RlcyhpbnRmLT5waHlfaW50ZXJmYWNl KSwgaW50Zi0+cG9ydCk7CisJCXJldCA9M0QgLUVJTlZBTDsKKwkJZ290byBlcnJfZnJlZV9uZXRk ZXY7CisJfQorCisJcmV0ID0zRCBvZl9nZXRfZXRoZGV2X2FkZHJlc3MobmRldl9kbiwgbmRldik7 CisJaWYgKHJldCkgeworCQluZXRkZXZfd2FybihuZGV2LCAidXNpbmcgcmFuZG9tIEV0aGVybmV0 IE1BQ1xuIik7CisJCWV0aF9od19hZGRyX3JhbmRvbShuZGV2KTsKKwl9CisKKwlTRVRfTkVUREVW X0RFVihuZGV2LCBkZXYpOworCWludGYtPm9wcyA9M0QgJmJjbWFzcF9pbnRmX29wczsKKwluZGV2 LT5uZXRkZXZfb3BzID0zRCAmYmNtYXNwX25ldGRldl9vcHM7CisJbmRldi0+ZXRodG9vbF9vcHMg PTNEICZiY21hc3BfZXRodG9vbF9vcHM7CisJaW50Zi0+bXNnX2VuYWJsZSA9M0QgbmV0aWZfbXNn X2luaXQoLTEsIE5FVElGX01TR19EUlYgfAorCQkJCQkgIE5FVElGX01TR19QUk9CRSB8CisJCQkJ CSAgTkVUSUZfTVNHX0xJTkspOworCW5kZXYtPmZlYXR1cmVzIHw9M0QgTkVUSUZfRl9JUF9DU1VN IHwgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1NHIHwKKwkJCSAgTkVUSUZfRl9SWENTVU07 CisJbmRldi0+aHdfZmVhdHVyZXMgfD0zRCBuZGV2LT5mZWF0dXJlczsKKwluZGV2LT5uZWVkZWRf aGVhZHJvb20gKz0zRCBzaXplb2Yoc3RydWN0IGJjbWFzcF9wa3Rfb2ZmbG9hZCk7CisKKwlyZXR1 cm4gaW50ZjsKKworZXJyX2ZyZWVfbmV0ZGV2OgorCWZyZWVfbmV0ZGV2KG5kZXYpOworZXJyOgor CXJldHVybiBOVUxMOworfQorCit2b2lkIGJjbWFzcF9pbnRlcmZhY2VfZGVzdHJveShzdHJ1Y3Qg YmNtYXNwX2ludGYgKmludGYsIGJvb2wgdW5yZWdpc3RlcikKK3sKKwlpZiAodW5yZWdpc3RlcikK KwkJdW5yZWdpc3Rlcl9uZXRkZXYoaW50Zi0+bmRldik7CisJaWYgKG9mX3BoeV9pc19maXhlZF9s aW5rKGludGYtPm5kZXZfZG4pKQorCQlvZl9waHlfZGVyZWdpc3Rlcl9maXhlZF9saW5rKGludGYt Pm5kZXZfZG4pOworCWZyZWVfbmV0ZGV2KGludGYtPm5kZXYpOworfQorCitpbnQgYmNtYXNwX2lu dGVyZmFjZV9zdXNwZW5kKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwlzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2ID0zRCBpbnRmLT5uZGV2OworCWludCByZXQgPTNEIDA7CisKKwlpZiAoIW5l dGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIDA7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKGRl dik7CisKKwliY21hc3BfbmV0aWZfZGVpbml0KGRldik7CisKKwlyZXQgPTNEIHBoeV9zdXNwZW5k KGRldi0+cGh5ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWlmIChpbnRmLT5pbnRl cm5hbF9waHkpCisJCWJjbWFzcF9lcGh5X2VuYWJsZV9zZXQoaW50ZiwgZmFsc2UpOworCWVsc2UK KwkJYmNtYXNwX3JnbWlpX21vZGVfZW5fc2V0KGludGYsIGZhbHNlKTsKKworCS8qIElmIFdha2Ut b24tTEFOIGlzIGRpc2FibGVkLCB3ZSBjYW4gc2FmZWx5CisJICogZGlzYWJsZSB0aGUgbmV0d29y ayBpbnRlcmZhY2UgY2xvY2tzLgorCSAqLworCWJjbWFzcF9jb3JlX2Nsb2NrX3NldF9pbnRmKGlu dGYsIGZhbHNlKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbnRmLT5wYXJlbnQtPmNsayk7 CisKKwlyZXR1cm4gcmV0OworCitvdXQ6CisJYmNtYXNwX25ldGlmX2luaXQoZGV2LCBmYWxzZSk7 CisJcmV0dXJuIHJldDsKK30KKworaW50IGJjbWFzcF9pbnRlcmZhY2VfcmVzdW1lKHN0cnVjdCBi Y21hc3BfaW50ZiAqaW50ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0zRCBpbnRmLT5u ZGV2OworCWludCByZXQ7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIDA7 CisKKwlyZXQgPTNEIGNsa19wcmVwYXJlX2VuYWJsZShpbnRmLT5wYXJlbnQtPmNsayk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9M0QgYmNtYXNwX25ldGlmX2luaXQoZGV2LCBm YWxzZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKGRl dik7CisKKwlyZXR1cm4gMDsKKworb3V0OgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbnRmLT5w YXJlbnQtPmNsayk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0 aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGZfZGVmcy5oIGIvZHJpdmVyPQpzL25ldC9l dGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIyNTlhNDc1MjA3ZgotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGZfZGVmcy5oCkBA IC0wLDAgKzEsMTk2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwor I2lmbmRlZiBfX0JDTUFTUF9JTlRGX0RFRlNfSAorI2RlZmluZSBfX0JDTUFTUF9JTlRGX0RFRlNf SAorCisjZGVmaW5lIFVNQ19PRkZTRVQoaW50ZikJCVwKKwkoKCgoaW50ZiktPnBvcnQpICogMHg4 MDApICsgMHhjMDAwKQorI2RlZmluZSAgVU1DX0NNRAkJCTB4MDA4CisjZGVmaW5lICAgVU1DX0NN RF9UWF9FTgkJCUJJVCgwKQorI2RlZmluZSAgIFVNQ19DTURfUlhfRU4JCQlCSVQoMSkKKyNkZWZp bmUgICBVTUNfQ01EX1NQRUVEX1NISUZUCQkweDIKKyNkZWZpbmUgICAgVU1DX0NNRF9TUEVFRF9N QVNLCQkweDMKKyNkZWZpbmUgICAgVU1DX0NNRF9TUEVFRF8xMAkJMHgwCisjZGVmaW5lICAgIFVN Q19DTURfU1BFRURfMTAwCQkweDEKKyNkZWZpbmUgICAgVU1DX0NNRF9TUEVFRF8xMDAwCQkweDIK KyNkZWZpbmUgICAgVU1DX0NNRF9TUEVFRF8yNTAwCQkweDMKKyNkZWZpbmUgICBVTUNfQ01EX1BS T01JU0MJCUJJVCg0KQorI2RlZmluZSAgIFVNQ19DTURfUEFEX0VOCQlCSVQoNSkKKyNkZWZpbmUg ICBVTUNfQ01EX0NSQ19GV0QJCUJJVCg2KQorI2RlZmluZSAgIFVNQ19DTURfUEFVU0VfRldECQlC SVQoNykKKyNkZWZpbmUgICBVTUNfQ01EX1JYX1BBVVNFX0lHTk9SRQlCSVQoOCkKKyNkZWZpbmUg ICBVTUNfQ01EX1RYX0FERFJfSU5TCQlCSVQoOSkKKyNkZWZpbmUgICBVTUNfQ01EX0hEX0VOCQkJ QklUKDEwKQorI2RlZmluZSAgIFVNQ19DTURfU1dfUkVTRVQJCUJJVCgxMykKKyNkZWZpbmUgICBV TUNfQ01EX0xDTF9MT09QX0VOCQlCSVQoMTUpCisjZGVmaW5lICAgVU1DX0NNRF9BVVRPX0NPTkZJ RwkJQklUKDIyKQorI2RlZmluZSAgIFVNQ19DTURfQ05UTF9GUk1fRU4JCUJJVCgyMykKKyNkZWZp bmUgICBVTUNfQ01EX05PX0xFTl9DSEsJCUJJVCgyNCkKKyNkZWZpbmUgICBVTUNfQ01EX1JNVF9M T09QX0VOCQlCSVQoMjUpCisjZGVmaW5lICAgVU1DX0NNRF9QUkJMX0VOCQlCSVQoMjcpCisjZGVm aW5lICAgVU1DX0NNRF9UWF9QQVVTRV9JR05PUkUJQklUKDI4KQorI2RlZmluZSAgIFVNQ19DTURf VFhfUlhfRU4JCUJJVCgyOSkKKyNkZWZpbmUgICBVTUNfQ01EX1JVTlRfRklMVEVSX0RJUwlCSVQo MzApCisjZGVmaW5lICBVTUNfTUFDMAkJCTB4MGMKKyNkZWZpbmUgIFVNQ19NQUMxCQkJMHgxMAor I2RlZmluZSAgVU1DX0ZSTV9MRU4JCQkweDE0CisjZGVmaW5lICBVTUNfRUVFX0NUUkwJCQkweDY0 CisjZGVmaW5lICAgRU5fTFBJX1JYX1BBVVNFCQlCSVQoMCkKKyNkZWZpbmUgICBFTl9MUElfVFhf UEZDCQkJQklUKDEpCisjZGVmaW5lICAgRU5fTFBJX1RYX1BBVVNFCQlCSVQoMikKKyNkZWZpbmUg ICBFRUVfRU4JCQlCSVQoMykKKyNkZWZpbmUgICBSWF9GSUZPX0NIRUNLCQkJQklUKDQpCisjZGVm aW5lICAgRUVFX1RYX0NMS19ESVMJCUJJVCg1KQorI2RlZmluZSAgIERJU19FRUVfMTBNCQkJQklU KDYpCisjZGVmaW5lICAgTFBfSURMRV9QUkVESUNUSU9OX01PREUJQklUKDcpCisjZGVmaW5lICBV TUNfRUVFX0xQSV9USU1FUgkJMHg2OAorI2RlZmluZSAgVU1DX1BBVVNFX0NOVFJMCQkweDMzMAor I2RlZmluZSAgVU1DX1RYX0ZMVVNICQkJMHgzMzQKKyNkZWZpbmUgIFVNQ19NSUJfU1RBUlQJCQkw eDQwMAorI2RlZmluZSAgVU1DX01JQl9DTlRSTAkJCTB4NTgwCisjZGVmaW5lICAgVU1DX01JQl9D TlRSTF9SWF9DTlRfUlNUCUJJVCgwKQorI2RlZmluZSAgIFVNQ19NSUJfQ05UUkxfUlVOVF9DTlRf UlNUCUJJVCgxKQorI2RlZmluZSAgIFVNQ19NSUJfQ05UUkxfVFhfQ05UX1JTVAlCSVQoMikKKyNk ZWZpbmUgIFVNQ19SWF9NQVhfUEtUX1NaCQkweDYwOAorI2RlZmluZSAgVU1DX01QRF9DVFJMCQkJ MHg2MjAKKyNkZWZpbmUgICBVTUNfTVBEX0NUUkxfTVBEX0VOCQlCSVQoMCkKKyNkZWZpbmUgICBV TUNfTVBEX0NUUkxfUFNXX0VOCQlCSVQoMjcpCisjZGVmaW5lICBVTUNfUFNXX01TCQkJMHg2MjQK KyNkZWZpbmUgIFVNQ19QU1dfTFMJCQkweDYyOAorCisjZGVmaW5lIFVNQUMyRkJfT0ZGU0VUXzJf MQkJMHg5ZjA0NAorI2RlZmluZSBVTUFDMkZCX09GRlNFVAkJCTB4OWYwM2MKKyNkZWZpbmUgIFVN QUMyRkJfQ0ZHCQkJMHgwCisjZGVmaW5lICAgVU1BQzJGQl9DRkdfT1BVVF9FTgkJQklUKDApCisj ZGVmaW5lICAgVU1BQzJGQl9DRkdfVkxBTl9FTgkJQklUKDEpCisjZGVmaW5lICAgVU1BQzJGQl9D RkdfU05BUF9FTgkJQklUKDIpCisjZGVmaW5lICAgVU1BQzJGQl9DRkdfQkNNX1RHX0VOCQlCSVQo MykKKyNkZWZpbmUgICBVTUFDMkZCX0NGR19JUFVUX0VOCQlCSVQoNCkKKyNkZWZpbmUgICBVTUFD MkZCX0NGR19DSElEX1NISUZUCTgKKyNkZWZpbmUgICBVTUFDMkZCX0NGR19PS19TRU5EX1NISUZU CTI0CisjZGVmaW5lICAgVU1BQzJGQl9DRkdfREVGQVVMVF9FTglcCisJCShVTUFDMkZCX0NGR19P UFVUX0VOIHwgVU1BQzJGQl9DRkdfVkxBTl9FTiBcCisJCXwgVU1BQzJGQl9DRkdfU05BUF9FTiB8 IFVNQUMyRkJfQ0ZHX0lQVVRfRU4pCisKKyNkZWZpbmUgUkdNSUlfT0ZGU0VUKGludGYpCVwKKwko KCgoaW50ZiktPnBvcnQpICogMHgxMDApICsgMHhkMDAwKQorI2RlZmluZSAgUkdNSUlfRVBIWV9D TlRSTAkJMHgwMAorI2RlZmluZSAgICBSR01JSV9FUEhZX0NGR19JRERRX0JJQVMJQklUKDApCisj ZGVmaW5lICAgIFJHTUlJX0VQSFlfQ0ZHX0VYVF9QV1JET1dOCUJJVCgxKQorI2RlZmluZSAgICBS R01JSV9FUEhZX0NGR19GT1JDRV9ETExfRU4JQklUKDIpCisjZGVmaW5lICAgIFJHTUlJX0VQSFlf Q0ZHX0lERFFfR0xPQkFMCUJJVCgzKQorI2RlZmluZSAgICBSR01JSV9FUEhZX0NLMjVfRElTCQlC SVQoNCkKKyNkZWZpbmUgICAgUkdNSUlfRVBIWV9SRVNFVAkJQklUKDcpCisjZGVmaW5lICBSR01J SV9PT0JfQ05UUkwJCTB4MGMKKyNkZWZpbmUgICBSR01JSV9MSU5LCQkJQklUKDQpCisjZGVmaW5l ICAgUkdNSUlfT09CX0RJUwkJCUJJVCg1KQorI2RlZmluZSAgIFJHTUlJX01PREVfRU4JCQlCSVQo NikKKyNkZWZpbmUgICBSR01JSV9JRF9NT0RFX0RJUwkJQklUKDE2KQorCisjZGVmaW5lIFJHTUlJ X1BPUlRfQ05UUkwJCTB4NjAKKyNkZWZpbmUgICBSR01JSV9QT1JUX01PREVfRVBIWQkJMAorI2Rl ZmluZSAgIFJHTUlJX1BPUlRfTU9ERV9HUEhZCQkxCisjZGVmaW5lICAgUkdNSUlfUE9SVF9NT0RF X0VYVF9FUEhZCTIKKyNkZWZpbmUgICBSR01JSV9QT1JUX01PREVfRVhUX0dQSFkJMworI2RlZmlu ZSAgIFJHTUlJX1BPUlRfTU9ERV9FWFRfUlZNSUkJNAorI2RlZmluZSAgIFJHTUlJX1BPUlRfTU9E RV9NQVNLCQlHRU5NQVNLKDIsIDApCisKKyNkZWZpbmUgUkdNSUlfU1lTX0xFRF9DTlRSTAkJMHg3 NAorI2RlZmluZSAgUkdNSUlfU1lTX0xFRF9DTlRSTF9MSU5LX09WUkQJQklUKDE1KQorCisjZGVm aW5lIFRYX1NQQl9ETUFfT0ZGU0VUKGludGYpIFwKKwkoKCgoaW50ZiktPmNoYW5uZWwpICogMHgz MCkgKyAweDQ4MTgwKQorI2RlZmluZSAgVFhfU1BCX0RNQV9SRUFECQkweDAwCisjZGVmaW5lICBU WF9TUEJfRE1BX0JBU0UJCTB4MDgKKyNkZWZpbmUgIFRYX1NQQl9ETUFfRU5ECQkJMHgxMAorI2Rl ZmluZSAgVFhfU1BCX0RNQV9WQUxJRAkJMHgxOAorI2RlZmluZSAgVFhfU1BCX0RNQV9GSUZPX0NU UkwJCTB4MjAKKyNkZWZpbmUgICBUWF9TUEJfRE1BX0ZJRk9fRkxVU0gJCUJJVCgwKQorI2RlZmlu ZSAgVFhfU1BCX0RNQV9GSUZPX1NUQVRVUwkJMHgyNAorCisjZGVmaW5lIFRYX1NQQl9DVFJMX09G RlNFVChpbnRmKSBcCisJKCgoKGludGYpLT5jaGFubmVsKSAqIDB4NjgpICsgMHg0OTM0MCkKKyNk ZWZpbmUgIFRYX1NQQl9DVFJMX0VOQUJMRQkJMHgwCisjZGVmaW5lICAgVFhfU1BCX0NUUkxfRU5B QkxFX0VOCQlCSVQoMCkKKyNkZWZpbmUgIFRYX1NQQl9DVFJMX1hGX0NUUkwyCQkweDIwCisjZGVm aW5lICAgVFhfU1BCX0NUUkxfWEZfQklEX1NISUZUCTE2CisKKyNkZWZpbmUgVFhfU1BCX1RPUF9P RkZTRVQoaW50ZikgXAorCSgoKChpbnRmKS0+Y2hhbm5lbCkgKiAweDFjKSArIDB4NGEwZTApCisj ZGVmaW5lIFRYX1NQQl9UT1BfQkxLT1VUCQkweDAKKyNkZWZpbmUgVFhfU1BCX1RPUF9TUFJFX0JX X0NUUkwJCTB4NAorCisjZGVmaW5lIFRYX0VQS1RfQ19PRkZTRVQoaW50ZikgXAorCSgoKChpbnRm KS0+Y2hhbm5lbCkgKiAweDEyMCkgKyAweDQwOTAwKQorI2RlZmluZSAgVFhfRVBLVF9DX0NGR19N SVNDCQkweDAKKyNkZWZpbmUgICBUWF9FUEtUX0NfQ0ZHX01JU0NfRU4JCUJJVCgwKQorI2RlZmlu ZSAgIFRYX0VQS1RfQ19DRkdfTUlTQ19QVAkJQklUKDEpCisjZGVmaW5lICAgVFhfRVBLVF9DX0NG R19NSVNDX1BTX1NISUZUCTE0CisjZGVmaW5lICAgVFhfRVBLVF9DX0NGR19NSVNDX0ZEX1NISUZU CTIwCisKKyNkZWZpbmUgVFhfUEFVU0VfQ1RSTF9PRkZTRVQoaW50ZikgXAorCSgoKChpbnRmKS0+ Y2hhbm5lbCAqIDB4YykgKyAweDQ5YTIwKSkKKyNkZWZpbmUgIFRYX1BBVVNFX01BUF9WRUNUT1IJ CTB4OAorCisjZGVmaW5lIFJYX0VEUEtUX0RNQV9PRkZTRVQoaW50ZikgXAorCSgoKChpbnRmKS0+ Y2hhbm5lbCkgKiAweDM4KSArIDB4OWNhMDApCisjZGVmaW5lICBSWF9FRFBLVF9ETUFfV1JJVEUJ CTB4MDAKKyNkZWZpbmUgIFJYX0VEUEtUX0RNQV9SRUFECQkweDA4CisjZGVmaW5lICBSWF9FRFBL VF9ETUFfQkFTRQkJMHgxMAorI2RlZmluZSAgUlhfRURQS1RfRE1BX0VORAkJMHgxOAorI2RlZmlu ZSAgUlhfRURQS1RfRE1BX1ZBTElECQkweDIwCisjZGVmaW5lICBSWF9FRFBLVF9ETUFfRlVMTE5F U1MJCTB4MjgKKyNkZWZpbmUgIFJYX0VEUEtUX0RNQV9NSU5fVEhSRVMJCTB4MmMKKyNkZWZpbmUg IFJYX0VEUEtUX0RNQV9DSF9YT05PRkYJCTB4MzAKKworI2RlZmluZSBSWF9FRFBLVF9DRkdfT0ZG U0VUKGludGYpIFwKKwkoKCgoaW50ZiktPmNoYW5uZWwpICogMHg3MCkgKyAweDljNjAwKQorI2Rl ZmluZSAgUlhfRURQS1RfQ0ZHX0NGRzAJCTB4MAorI2RlZmluZSAgIFJYX0VEUEtUX0NGR19DRkcw X0RCVUZfU0hJRlQJOQorI2RlZmluZSAgICBSWF9FRFBLVF9DRkdfQ0ZHMF9SQlVGCTB4MAorI2Rl ZmluZSAgICBSWF9FRFBLVF9DRkdfQ0ZHMF9SQlVGXzRLCTB4MQorI2RlZmluZSAgICBSWF9FRFBL VF9DRkdfQ0ZHMF9CVUZfNEsJMHgyCisvKiBFRlJNIFNUVUZGLCAwID0zRCBubyBieXRlIHN0dWZm LCAxID0zRCB0d28gYnl0ZSBzdHVmZiAqLworI2RlZmluZSAgIFJYX0VEUEtUX0NGR19DRkcwX0VG Uk1fU1RVRglCSVQoMTEpCisjZGVmaW5lICAgUlhfRURQS1RfQ0ZHX0NGRzBfQkFMTl9TSElGVAkx MgorI2RlZmluZSAgICBSWF9FRFBLVF9DRkdfQ0ZHMF9OT19BTE4JMAorI2RlZmluZSAgICBSWF9F RFBLVF9DRkdfQ0ZHMF80X0FMTgkyCisjZGVmaW5lICAgIFJYX0VEUEtUX0NGR19DRkcwXzY0X0FM Tgk2CisjZGVmaW5lICBSWF9FRFBLVF9SSU5HX0JVRkZFUl9XUklURQkweDM4CisjZGVmaW5lICBS WF9FRFBLVF9SSU5HX0JVRkZFUl9SRUFECTB4NDAKKyNkZWZpbmUgIFJYX0VEUEtUX1JJTkdfQlVG RkVSX0JBU0UJMHg0OAorI2RlZmluZSAgUlhfRURQS1RfUklOR19CVUZGRVJfRU5ECTB4NTAKKyNk ZWZpbmUgIFJYX0VEUEtUX1JJTkdfQlVGRkVSX1ZBTElECTB4NTgKKyNkZWZpbmUgIFJYX0VEUEtU X0NGR19FTkFCTEUJCTB4NmMKKyNkZWZpbmUgICBSWF9FRFBLVF9DRkdfRU5BQkxFX0VOCUJJVCgw KQorCisjZGVmaW5lIFJYX1NQQl9ETUFfT0ZGU0VUKGludGYpIFwKKwkoKCgoaW50ZiktPmNoYW5u ZWwpICogMHgzMCkgKyAweGEwMDAwKQorI2RlZmluZSAgUlhfU1BCX0RNQV9SRUFECQkweDAwCisj ZGVmaW5lICBSWF9TUEJfRE1BX0JBU0UJCTB4MDgKKyNkZWZpbmUgIFJYX1NQQl9ETUFfRU5ECQkJ MHgxMAorI2RlZmluZSAgUlhfU1BCX0RNQV9WQUxJRAkJMHgxOAorI2RlZmluZSAgUlhfU1BCX0RN QV9GSUZPX0NUUkwJCTB4MjAKKyNkZWZpbmUgICBSWF9TUEJfRE1BX0ZJRk9fRkxVU0gJCUJJVCgw KQorI2RlZmluZSAgUlhfU1BCX0RNQV9GSUZPX1NUQVRVUwkJMHgyNAorCisjZGVmaW5lIFJYX1NQ Ql9DVFJMX09GRlNFVChpbnRmKSBcCisJKCgoKGludGYpLT5jaGFubmVsIC0gNikgKiAweDY4KSAr IDB4YTEwMDApCisjZGVmaW5lICBSWF9TUEJfQ1RSTF9FTkFCTEUJCTB4MDAKKyNkZWZpbmUgICBS WF9TUEJfQ1RSTF9FTkFCTEVfRU4JCUJJVCgwKQorCisjZGVmaW5lIFJYX1BBVVNFX0NUUkxfT0ZG U0VUKGludGYpIFwKKwkoKCgoaW50ZiktPmNoYW5uZWwgLSA2KSAqIDB4NCkgKyAweGExMTM4KQor I2RlZmluZSAgUlhfUEFVU0VfTUFQX1ZFQ1RPUgkJMHgwMAorCisjZGVmaW5lIFJYX1NQQl9UT1Bf Q1RSTF9PRkZTRVQoaW50ZikgXAorCSgoKChpbnRmKS0+Y2hhbm5lbCAtIDYpICogMHgxNCkgKyAw eGEyMDAwKQorI2RlZmluZSAgUlhfU1BCX1RPUF9CTEtPVVQJCTB4MDAKKworI2RlZmluZSBOVU1f NEtfQlVGRkVSUwkJCTMyCisjZGVmaW5lIFJJTkdfQlVGRkVSX1NJWkUJCShQQUdFX1NJWkUgKiBO VU1fNEtfQlVGRkVSUykKKworI2RlZmluZSBERVNDX1JJTkdfQ09VTlQJCQkoNjQgKiBOVU1fNEtf QlVGRkVSUykKKyNkZWZpbmUgREVTQ19TSVpFCQkJMTYKKyNkZWZpbmUgREVTQ19SSU5HX1NJWkUJ CQkoREVTQ19SSU5HX0NPVU5UICogREVTQ19TSVpFKQorCisjZW5kaWYKLS09MjAKMi43LjQK --000000000000c29ef705fe4682ba Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIIQagYJKoZIhvcNAQcCoIIQWzCCEFcCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGg gg3BMIIFDTCCA/WgAwIBAgIQeEqpED+lv77edQixNJMdADANBgkqhkiG9w0BAQsFADBMMSAwHgYD VQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UE AxMKR2xvYmFsU2lnbjAeFw0yMDA5MTYwMDAwMDBaFw0yODA5MTYwMDAwMDBaMFsxCzAJBgNVBAYT AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIEdDQyBS MyBQZXJzb25hbFNpZ24gMiBDQSAyMDIwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA vbCmXCcsbZ/a0fRIQMBxp4gJnnyeneFYpEtNydrZZ+GeKSMdHiDgXD1UnRSIudKo+moQ6YlCOu4t rVWO/EiXfYnK7zeop26ry1RpKtogB7/O115zultAz64ydQYLe+a1e/czkALg3sgTcOOcFZTXk38e aqsXsipoX1vsNurqPtnC27TWsA7pk4uKXscFjkeUE8JZu9BDKaswZygxBOPBQBwrA5+20Wxlk6k1 e6EKaaNaNZUy30q3ArEf30ZDpXyfCtiXnupjSK8WU2cK4qsEtj09JS4+mhi0CTCrCnXAzum3tgcH cHRg0prcSzzEUDQWoFxyuqwiwhHu3sPQNmFOMwIDAQABo4IB2jCCAdYwDgYDVR0PAQH/BAQDAgGG MGAGA1UdJQRZMFcGCCsGAQUFBwMCBggrBgEFBQcDBAYKKwYBBAGCNxQCAgYKKwYBBAGCNwoDBAYJ KwYBBAGCNxUGBgorBgEEAYI3CgMMBggrBgEFBQcDBwYIKwYBBQUHAxEwEgYDVR0TAQH/BAgwBgEB /wIBADAdBgNVHQ4EFgQUljPR5lgXWzR1ioFWZNW+SN6hj88wHwYDVR0jBBgwFoAUj/BLf6guRSSu TVD6Y5qL3uLdG7wwegYIKwYBBQUHAQEEbjBsMC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9i YWxzaWduLmNvbS9yb290cjMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5j b20vY2FjZXJ0L3Jvb3QtcjMuY3J0MDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFs c2lnbi5jb20vcm9vdC1yMy5jcmwwWgYDVR0gBFMwUTALBgkrBgEEAaAyASgwQgYKKwYBBAGgMgEo CjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAN BgkqhkiG9w0BAQsFAAOCAQEAdAXk/XCnDeAOd9nNEUvWPxblOQ/5o/q6OIeTYvoEvUUi2qHUOtbf jBGdTptFsXXe4RgjVF9b6DuizgYfy+cILmvi5hfk3Iq8MAZsgtW+A/otQsJvK2wRatLE61RbzkX8 9/OXEZ1zT7t/q2RiJqzpvV8NChxIj+P7WTtepPm9AIj0Keue+gS2qvzAZAY34ZZeRHgA7g5O4TPJ /oTd+4rgiU++wLDlcZYd/slFkaT3xg4qWDepEMjT4T1qFOQIL+ijUArYS4owpPg9NISTKa1qqKWJ jFoyms0d0GwOniIIbBvhI2MJ7BSY9MYtWVT5jJO3tsVHwj4cp92CSFuGwunFMzCCA18wggJHoAMC AQICCwQAAAAAASFYUwiiMA0GCSqGSIb3DQEBCwUAMEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9v dCBDQSAtIFIzMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTA5 MDMxODEwMDAwMFoXDTI5MDMxODEwMDAwMFowTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENB IC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMJXaQeQZ4Ihb1wIO2hMoonv0FdhHFrYhy/EYCQ8eyip0E XyTLLkvhYIJG4VKrDIFHcGzdZNHr9SyjD4I9DCuul9e2FIYQebs7E4B3jAjhSdJqYi8fXvqWaN+J J5U4nwbXPsnLJlkNc96wyOkmDoMVxu9bi9IEYMpJpij2aTv2y8gokeWdimFXN6x0FNx04Druci8u nPvQu7/1PQDhBjPogiuuU6Y6FnOM3UEOIDrAtKeh6bJPkC4yYOlXy7kEkmho5TgmYHWyn3f/kRTv riBJ/K1AFUjRAjFhGV64l++td7dkmnq/X8ET75ti+w1s4FRpFqkD2m7pg5NxdsZphYIXAgMBAAGj QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSP8Et/qC5FJK5N UPpjmove4t0bvDANBgkqhkiG9w0BAQsFAAOCAQEAS0DbwFCq/sgM7/eWVEVJu5YACUGssxOGhigH M8pr5nS5ugAtrqQK0/Xx8Q+Kv3NnSoPHRHt44K9ubG8DKY4zOUXDjuS5V2yq/BKW7FPGLeQkbLmU Y/vcU2hnVj6DuM81IcPJaP7O2sJTqsyQiunwXUaMld16WCgaLx3ezQA3QY/tRG3XUyiXfvNnBB4V 14qWtNPeTCekTBtzc3b0F5nCH3oO4y0IrQocLP88q1UOD5F+NuvDV0m+4S4tfGCLw0FREyOdzvcy a5QBqJnnLDMfOjsl0oZAzjsshnjJYS8Uuu7bVW/fhO4FCU29KNhyztNiUGUe65KXgzHZs7XKR1g/ XzCCBUkwggQxoAMCAQICDCPwEotc2kAt96Z1EDANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJC RTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTExMC8GA1UEAxMoR2xvYmFsU2lnbiBHQ0MgUjMg UGVyc29uYWxTaWduIDIgQ0EgMjAyMDAeFw0yMjA5MTAxMjM5NTBaFw0yNTA5MTAxMjM5NTBaMIGM MQswCQYDVQQGEwJJTjESMBAGA1UECBMJS2FybmF0YWthMRIwEAYDVQQHEwlCYW5nYWxvcmUxFjAU BgNVBAoTDUJyb2FkY29tIEluYy4xFDASBgNVBAMTC0p1c3RpbiBDaGVuMScwJQYJKoZIhvcNAQkB FhhqdXN0aW4uY2hlbkBicm9hZGNvbS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQDKX7oyRqaeT81UCy+OTzAUHJeHABD6GDVZu7IJxt8GWSGx+ebFexFz/gnRO/sgwnPzzrC2DwM1 kaDgYe+pI1lMzUZvAB5DfS1qXKNGoeeNv7FoNFlv3iD4bvOykX/K/voKtjS3QNs0EDnwkvETUWWu yiXtMiGENBBJcbGirKuFTT3U/2iPoSL5OeMSEqKLdkNTT9O79KN+Rf7Zi4Duz0LUqqpz9hZl4zGc NhTY3E+cXCB11wty89QStajwXdhGJTYEvUgvsq1h8CwJj9w/38ldAQf5WjhPmApYeJR2ewFrBMCM 4lHkdRJ6TDc9nXoEkypUfjJkJHe7Eal06tosh6JpAgMBAAGjggHZMIIB1TAOBgNVHQ8BAf8EBAMC BaAwgaMGCCsGAQUFBwEBBIGWMIGTME4GCCsGAQUFBzAChkJodHRwOi8vc2VjdXJlLmdsb2JhbHNp Z24uY29tL2NhY2VydC9nc2djY3IzcGVyc29uYWxzaWduMmNhMjAyMC5jcnQwQQYIKwYBBQUHMAGG NWh0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL2dzZ2NjcjNwZXJzb25hbHNpZ24yY2EyMDIwME0G A1UdIARGMEQwQgYKKwYBBAGgMgEoCjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxz aWduLmNvbS9yZXBvc2l0b3J5LzAJBgNVHRMEAjAAMEkGA1UdHwRCMEAwPqA8oDqGOGh0dHA6Ly9j cmwuZ2xvYmFsc2lnbi5jb20vZ3NnY2NyM3BlcnNvbmFsc2lnbjJjYTIwMjAuY3JsMCMGA1UdEQQc MBqBGGp1c3Rpbi5jaGVuQGJyb2FkY29tLmNvbTATBgNVHSUEDDAKBggrBgEFBQcDBDAfBgNVHSME GDAWgBSWM9HmWBdbNHWKgVZk1b5I3qGPzzAdBgNVHQ4EFgQUIWGeYuaTsnIada5Xx8TR3cheUbgw DQYJKoZIhvcNAQELBQADggEBAHNQlMqQOFYPYFO71A+8t+qWMmtOdd2iGswSOvpSZ/pmGlfw8ZvY dRTkl27m37la84AxRkiVMes14JyOZJoMh/g7fbgPlU14eBc6WQWkIA6AmNkduFWTr1pRezkjpeo6 xVmdBLM4VY1TFDYj7S8H2adPuypd62uHMY/MZi+BIUys4uAFA+N3NuUBNjcVZXYPplYxxKEuIFq6 sDL+OV16G+F9CkNMN3txsym8Nnx5WAYZb6+rBUIhMGz70V05xsHQfzvo2s7f0J1tJ5BoRlPPhL0h VOnWA3h71u9TfSsv+PXVm3P21TfOS2uc1hbzEqyENCP4i5XQ0rv0TmPW42GZ0o4xggJtMIICaQIB ATBrMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhH bG9iYWxTaWduIEdDQyBSMyBQZXJzb25hbFNpZ24gMiBDQSAyMDIwAgwj8BKLXNpALfemdRAwDQYJ YIZIAWUDBAIBBQCggdQwLwYJKoZIhvcNAQkEMSIEIIiu9gMNzTIM7v63hArGYE9y3Jae3YochliQ HOyUWd+BMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIzMDYxNjIy MTQzOFowaQYJKoZIhvcNAQkPMVwwWjALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFl AwQBAjAKBggqhkiG9w0DBzALBgkqhkiG9w0BAQowCwYJKoZIhvcNAQEHMAsGCWCGSAFlAwQCATAN BgkqhkiG9w0BAQEFAASCAQB32f+sGK4VYcby88cXgTVWrM1WLXn9vA+43X20Cp4Mpp+wcHdnW4jJ 15t/RI3qZuRZA46EYpbe/FVPQpaAAAxp0ZvhHXfCaJc1QGdl013xeXV2fay8t2Aj/yfNKqNvIXWy gGA6B2Oiv5B8Z95BCMEV0c9Zfr3zQdeZMFIzdsHESKze9L4s5qPTMHZSLTbQFdMLRz1m5rR/D1mB yr48Mi/oRM5oiG1LaBsL+ys2Ncc5Yo1d85/E0EB8Y+JsIGT/BuryDwje59+VJYNREu7ukJ2HpMUE xUZTqq9T9hx8NxSgs9SzT2rZyYElgRX2snro7Ygfw6hGLW0Y56RuHSBjZPNQ --000000000000c29ef705fe4682ba--