From nobody Sun Feb 8 17:36:37 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 31BEAEB64D8 for ; Wed, 14 Jun 2023 22:31:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237091AbjFNWa7 (ORCPT ); Wed, 14 Jun 2023 18:30:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33046 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236950AbjFNWau (ORCPT ); Wed, 14 Jun 2023 18:30:50 -0400 Received: from mail-qt1-x831.google.com (mail-qt1-x831.google.com [IPv6:2607:f8b0:4864:20::831]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A80892709 for ; Wed, 14 Jun 2023 15:30:42 -0700 (PDT) Received: by mail-qt1-x831.google.com with SMTP id d75a77b69052e-3f9b8f1c2fdso22268161cf.2 for ; Wed, 14 Jun 2023 15:30:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1686781841; x=1689373841; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=sXrMtG+jCpgCYkfQ9v7ybjokU7FONyaHyWpT5Ox0Ar4=; b=LM/sbh7lzJ3f1a5TNoMKiUG10owxBHMF570kiOxk0jTACYkTTymkPWze5AlVe6OY0L /gp9fy4flRg/crowgd7awulRxqO1kJhwF2f6oc+9lLKP0mYqQHgqDPTlO2C47iKSTjZd CrBw4zfSOG1xxlx1CyWSVnkJ/9FgLhCnMVJvg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686781841; x=1689373841; 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=sXrMtG+jCpgCYkfQ9v7ybjokU7FONyaHyWpT5Ox0Ar4=; b=SQlnnYziW1DDvNm3KPOoAm71jho2xcM2dWUMp0xeZVdWNoSbYIz2/hZRdC79FDmuU5 XAtyKC4GpLsHT1dQr+DSi5l1q3uTHCjen2XtEMsxuj/vzZEhesi9gk34bkWmUXm3yJC2 FQczChD9WlhIzTxm62dcOgh1vXpM0J2G79o5gNz/lIgTFDyLnI5rgZ875ErfATtHveH9 AxVfBr2UjTukTcIM7NO97ELIjSfIZyCHP+bZn3+EY+EFFJN++VN3b3L5qLnujgkWGzlj USbVvAQNA+/Yo4m8ky3HCcpH8ewowC8lDfAntU3DfmzKQECJx7J5hcuHNJX56f6O1+lD tL3Q== X-Gm-Message-State: AC+VfDyvdVMsiqzQhYFfgvpYXa21KuvIITmwPqqL6G62z/DmiX876HGw 9MPMgrg5j9AINLR1Xq5rsnALVQ== X-Google-Smtp-Source: ACHHUZ5amvMIKbeZDZNl17o5i9tc+uPX2B54l9UaAt2fSAB2NW1Nxu1BVcKpYY5w4aRT3qip0QRyQQ== X-Received: by 2002:ac8:57ce:0:b0:3f5:1f9c:5b28 with SMTP id w14-20020ac857ce000000b003f51f9c5b28mr4260874qta.42.1686781841192; Wed, 14 Jun 2023 15:30:41 -0700 (PDT) Received: from stbirv-lnx-2.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id d3-20020ac85443000000b003ef2db16e72sm5419360qtq.94.2023.06.14.15.30.38 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 14 Jun 2023 15:30:40 -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 v7 05/11] net: bcmasp: Add support for wake on net filters Date: Wed, 14 Jun 2023 15:30:14 -0700 Message-Id: <1686781820-832-6-git-send-email-justin.chen@broadcom.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1686781820-832-1-git-send-email-justin.chen@broadcom.com> References: <1686781820-832-1-git-send-email-justin.chen@broadcom.com> Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="0000000000007b71c905fe1e808a" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable --0000000000007b71c905fe1e808a MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QWRkIHN1cHBvcnQgZm9yIHdha2Ugb24gbmV0d29yayBmaWx0ZXJzLiBUaGUgbWF4IG1hdGNoIGlz IDI1NiBieXRlcy4KClNpZ25lZC1vZmYtYnk6IEp1c3RpbiBDaGVuIDxqdXN0aW4uY2hlbkBicm9h ZGNvbS5jb20+Ci0tLQogZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3Au YyAgICAgICAgfCA1OTUgKysrKysrKysrKysrKysrKys9CisrKysKIGRyaXZlcnMvbmV0L2V0aGVy bmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmggICAgICAgIHwgIDQwICsrCiAuLi4vbmV0L2V0aGVy bmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2V0aHRvb2wuYyAgICB8IDEzMSArKysrLQogZHJpdmVy cy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jICAgfCAgIDMgKwogNCBm aWxlcyBjaGFuZ2VkLCA3NjggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMgYi9kcml2ZXJz L25ldC9ldGhlPQpybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMKaW5kZXggOWUzOTc3ODU2Yjcx Li5iYTk4NDJjNzYwZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29t L2FzcDIvYmNtYXNwLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9i Y21hc3AuYwpAQCAtMTMwLDYgKzEzMCw1OTcgQEAgdm9pZCBiY21hc3BfZmx1c2hfcnhfcG9ydChz dHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCiAJcnhfY3RybF9jb3JlX3dsKHByaXYsIG1hc2ssIHBy aXYtPmh3X2luZm8tPnJ4X2N0cmxfZmx1c2gpOwogfQo9MjAKK3N0YXRpYyB2b2lkIGJjbWFzcF9u ZXRmaWx0X2h3X2VuX3dha2Uoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAorCQkJCSAgICAgIHN0 cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQpCit7CisJcnhfZmlsdGVyX2NvcmVfd2wocHJp diwgQVNQX1JYX0ZJTFRFUl9ORVRfT0ZGU0VUX0wzXzEoNjQpLAorCQkJICBBU1BfUlhfRklMVEVS X05FVF9PRkZTRVQobmZpbHQtPmh3X2luZGV4KSk7CisKKwlyeF9maWx0ZXJfY29yZV93bChwcml2 LCBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRfTDIoMzIpIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9O RVRfT0ZGU0VUX0wzXzAoMzIpIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfT0ZGU0VUX0wzXzEo OTYpIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfT0ZGU0VUX0w0KDMyKSwKKwkJCSAgQVNQX1JY X0ZJTFRFUl9ORVRfT0ZGU0VUKG5maWx0LT5od19pbmRleCArIDEpKTsKKworCXJ4X2ZpbHRlcl9j b3JlX3dsKHByaXYsIEFTUF9SWF9GSUxURVJfTkVUX0NGR19DSChuZmlsdC0+cG9ydCArIDgpIHwK KwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0VOIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRf Q0ZHX0wyX0VOIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0wzX0VOIHwKKwkJCSAgQVNQ X1JYX0ZJTFRFUl9ORVRfQ0ZHX0w0X0VOIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0wz X0ZSTSgyKSB8CisJCQkgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19MNF9GUk0oMikgfAorCQkJICBB U1BfUlhfRklMVEVSX05FVF9DRkdfVU1DKG5maWx0LT5wb3J0KSwKKwkJCSAgQVNQX1JYX0ZJTFRF Ul9ORVRfQ0ZHKG5maWx0LT5od19pbmRleCkpOworCisJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwg QVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0NIKG5maWx0LT5wb3J0ICsgOCkgfAorCQkJICBBU1BfUlhf RklMVEVSX05FVF9DRkdfRU4gfAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDJfRU4gfAor CQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDNfRU4gfAorCQkJICBBU1BfUlhfRklMVEVSX05F VF9DRkdfTDRfRU4gfAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDNfRlJNKDIpIHwKKwkJ CSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0w0X0ZSTSgyKSB8CisJCQkgIEFTUF9SWF9GSUxURVJf TkVUX0NGR19VTUMobmZpbHQtPnBvcnQpLAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkcobmZp bHQtPmh3X2luZGV4ICsgMSkpOworfQorCisjZGVmaW5lIE1BWF9XQUtFX0ZJTFRFUl9TSVpFCQky NTYKK2VudW0gYXNwX25ldGZpbHRfcmVnX3R5cGUgeworCUFTUF9ORVRGSUxUX01BVENIID0zRCAw LAorCUFTUF9ORVRGSUxUX01BU0ssCisJQVNQX05FVEZJTFRfTUFYCit9OworCitzdGF0aWMgaW50 IGJjbWFzcF9uZXRmaWx0X2dldF9yZWdfb2Zmc2V0KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwK KwkJCQkJIHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQsCisJCQkJCSBlbnVtIGFzcF9u ZXRmaWx0X3JlZ190eXBlIHJlZ190eXBlLAorCQkJCQkgdTMyIG9mZnNldCkKK3sKKwl1MzIgYmxv Y2tfaW5kZXgsIGZpbHRlcl9zZWw7CisKKwlpZiAob2Zmc2V0IDwgMzIpIHsKKwkJYmxvY2tfaW5k ZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0wyOworCQlmaWx0ZXJfc2VsID0zRCBuZmlsdC0+aHdf aW5kZXg7CisJfSBlbHNlIGlmIChvZmZzZXQgPCA2NCkgeworCQlibG9ja19pbmRleCA9M0QgQVNQ X1JYX0ZJTFRFUl9ORVRfTDI7CisJCWZpbHRlcl9zZWwgPTNEIG5maWx0LT5od19pbmRleCArIDE7 CisJfSBlbHNlIGlmIChvZmZzZXQgPCA5NikgeworCQlibG9ja19pbmRleCA9M0QgQVNQX1JYX0ZJ TFRFUl9ORVRfTDNfMDsKKwkJZmlsdGVyX3NlbCA9M0QgbmZpbHQtPmh3X2luZGV4OworCX0gZWxz ZSBpZiAob2Zmc2V0IDwgMTI4KSB7CisJCWJsb2NrX2luZGV4ID0zRCBBU1BfUlhfRklMVEVSX05F VF9MM18wOworCQlmaWx0ZXJfc2VsID0zRCBuZmlsdC0+aHdfaW5kZXggKyAxOworCX0gZWxzZSBp ZiAob2Zmc2V0IDwgMTYwKSB7CisJCWJsb2NrX2luZGV4ID0zRCBBU1BfUlhfRklMVEVSX05FVF9M M18xOworCQlmaWx0ZXJfc2VsID0zRCBuZmlsdC0+aHdfaW5kZXg7CisJfSBlbHNlIGlmIChvZmZz ZXQgPCAxOTIpIHsKKwkJYmxvY2tfaW5kZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0wzXzE7CisJ CWZpbHRlcl9zZWwgPTNEIG5maWx0LT5od19pbmRleCArIDE7CisJfSBlbHNlIGlmIChvZmZzZXQg PCAyMjQpIHsKKwkJYmxvY2tfaW5kZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0w0OworCQlmaWx0 ZXJfc2VsID0zRCBuZmlsdC0+aHdfaW5kZXg7CisJfSBlbHNlIGlmIChvZmZzZXQgPCAyNTYpIHsK KwkJYmxvY2tfaW5kZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0w0OworCQlmaWx0ZXJfc2VsID0z RCBuZmlsdC0+aHdfaW5kZXggKyAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCXN3aXRjaCAocmVnX3R5cGUpIHsKKwljYXNlIEFTUF9ORVRGSUxUX01BVENIOgorCQlyZXR1 cm4gQVNQX1JYX0ZJTFRFUl9ORVRfUEFUKGZpbHRlcl9zZWwsIGJsb2NrX2luZGV4LAorCQkJCQkg ICAgIChvZmZzZXQgJSAzMikpOworCWNhc2UgQVNQX05FVEZJTFRfTUFTSzoKKwkJcmV0dXJuIEFT UF9SWF9GSUxURVJfTkVUX01BU0soZmlsdGVyX3NlbCwgYmxvY2tfaW5kZXgsCisJCQkJCSAgICAg IChvZmZzZXQgJSAzMikpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKwor c3RhdGljIHZvaWQgYmNtYXNwX25ldGZpbHRfd3Ioc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAor CQkJICAgICAgc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyICpuZmlsdCwKKwkJCSAgICAgIGVudW0g YXNwX25ldGZpbHRfcmVnX3R5cGUgcmVnX3R5cGUsCisJCQkgICAgICB1MzIgdmFsLCB1MzIgb2Zm c2V0KQoreworCWludCByZWdfb2Zmc2V0OworCisJLyogSFcgb25seSBhY2NlcHRzIDQgYnl0ZSBh bGlnbmVkIHdyaXRlcyAqLworCWlmICghSVNfQUxJR05FRChvZmZzZXQsIDQpIHx8IG9mZnNldCA+ IE1BWF9XQUtFX0ZJTFRFUl9TSVpFKQorCQlyZXR1cm47CisKKwlyZWdfb2Zmc2V0ID0zRCBiY21h c3BfbmV0ZmlsdF9nZXRfcmVnX29mZnNldChwcml2LCBuZmlsdCwgcmVnX3R5cGUsCisJCQkJCQkg ICBvZmZzZXQpOworCisJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgdmFsLCByZWdfb2Zmc2V0KTsK K30KKworc3RhdGljIHUzMiBiY21hc3BfbmV0ZmlsdF9yZChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnBy aXYsCisJCQkgICAgIHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQsCisJCQkgICAgIGVu dW0gYXNwX25ldGZpbHRfcmVnX3R5cGUgcmVnX3R5cGUsCisJCQkgICAgIHUzMiBvZmZzZXQpCit7 CisJaW50IHJlZ19vZmZzZXQ7CisKKwkvKiBIVyBvbmx5IGFjY2VwdHMgNCBieXRlIGFsaWduZWQg d3JpdGVzICovCisJaWYgKCFJU19BTElHTkVEKG9mZnNldCwgNCkgfHwgb2Zmc2V0ID4gTUFYX1dB S0VfRklMVEVSX1NJWkUpCisJCXJldHVybiAwOworCisJcmVnX29mZnNldCA9M0QgYmNtYXNwX25l dGZpbHRfZ2V0X3JlZ19vZmZzZXQocHJpdiwgbmZpbHQsIHJlZ190eXBlLAorCQkJCQkJICAgb2Zm c2V0KTsKKworCXJldHVybiByeF9maWx0ZXJfY29yZV9ybChwcml2LCByZWdfb2Zmc2V0KTsKK30K Kworc3RhdGljIGludCBiY21hc3BfbmV0ZmlsdF93cl9tX3dha2Uoc3RydWN0IGJjbWFzcF9wcml2 ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgYmNtYXNwX25ldF9maWx0ZXIgKm5maWx0LAorCQkJCSAg ICB1MzIgb2Zmc2V0LCB2b2lkICptYXRjaCwgdm9pZCAqbWFzaywKKwkJCQkgICAgc2l6ZV90IHNp emUpCit7CisJdTMyIHNoaWZ0LCBtYXNrX3ZhbCA9M0QgMCwgbWF0Y2hfdmFsID0zRCAwOworCWJv b2wgZmlyc3RfYnl0ZSA9M0QgdHJ1ZTsKKworCWlmICgob2Zmc2V0ICsgc2l6ZSkgPiBNQVhfV0FL RV9GSUxURVJfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoc2l6ZS0tKSB7CisJ CS8qIFRoZSBIVyBvbmx5IGFjY2VwdHMgNCBieXRlIGFsaWduZWQgd3JpdGVzLCBzbyBpZiB3ZQor CQkgKiBiZWdpbiB1bmFsaWduZWQgb3IgaWYgcmVtYWluaW5nIGJ5dGVzIGxlc3MgdGhhbiA0LAor CQkgKiB3ZSBuZWVkIHRvIHJlYWQgdGhlbiB3cml0ZSB0byBhdm9pZCBsb3NpbmcgY3VycmVudAor CQkgKiByZWdpc3RlciBzdGF0ZQorCQkgKi8KKwkJaWYgKGZpcnN0X2J5dGUgJiYgKCFJU19BTElH TkVEKG9mZnNldCwgNCkgfHwgc2l6ZSA8IDMpKSB7CisJCQltYXRjaF92YWwgPTNEIGJjbWFzcF9u ZXRmaWx0X3JkKHByaXYsIG5maWx0LAorCQkJCQkJICAgICAgQVNQX05FVEZJTFRfTUFUQ0gsCisJ CQkJCQkgICAgICBBTElHTl9ET1dOKG9mZnNldCwgNCkpOworCQkJbWFza192YWwgPTNEIGJjbWFz cF9uZXRmaWx0X3JkKHByaXYsIG5maWx0LAorCQkJCQkJICAgICBBU1BfTkVURklMVF9NQVNLLAor CQkJCQkJICAgICBBTElHTl9ET1dOKG9mZnNldCwgNCkpOworCQl9CisKKwkJc2hpZnQgPTNEICgz IC0gKG9mZnNldCAlIDQpKSAqIDg7CisJCW1hdGNoX3ZhbCAmPTNEIH5HRU5NQVNLKHNoaWZ0ICsg Nywgc2hpZnQpOworCQltYXNrX3ZhbCAmPTNEIH5HRU5NQVNLKHNoaWZ0ICsgNywgc2hpZnQpOwor CQltYXRjaF92YWwgfD0zRCAodTMyKSgqKCh1OCAqKW1hdGNoKSA8PCBzaGlmdCk7CisJCW1hc2tf dmFsIHw9M0QgKHUzMikoKigodTggKiltYXNrKSA8PCBzaGlmdCk7CisKKwkJLyogSWYgbGFzdCBi eXRlIG9yIGxhc3QgYnl0ZSBvZiB3b3JkLCB3cml0ZSB0byByZWcgKi8KKwkJaWYgKCFzaXplIHx8 ICgob2Zmc2V0ICUgNCkgPTNEPTNEIDMpKSB7CisJCQliY21hc3BfbmV0ZmlsdF93cihwcml2LCBu ZmlsdCwgQVNQX05FVEZJTFRfTUFUQ0gsCisJCQkJCSAgbWF0Y2hfdmFsLCBBTElHTl9ET1dOKG9m ZnNldCwgNCkpOworCQkJYmNtYXNwX25ldGZpbHRfd3IocHJpdiwgbmZpbHQsIEFTUF9ORVRGSUxU X01BU0ssCisJCQkJCSAgbWFza192YWwsIEFMSUdOX0RPV04ob2Zmc2V0LCA0KSk7CisJCQlmaXJz dF9ieXRlID0zRCB0cnVlOworCQl9IGVsc2UgeworCQkJZmlyc3RfYnl0ZSA9M0QgZmFsc2U7CisJ CX0KKworCQlvZmZzZXQrKzsKKwkJbWF0Y2grKzsKKwkJbWFzaysrOworCX0KKworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfbmV0ZmlsdF9yZXNldF9odyhzdHJ1Y3QgYmNtYXNw X3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQpCit7 CisJaW50IGk7CisKKwlmb3IgKGkgPTNEIDA7IGkgPCBNQVhfV0FLRV9GSUxURVJfU0laRTsgaSAr PTNEIDQpIHsKKwkJYmNtYXNwX25ldGZpbHRfd3IocHJpdiwgbmZpbHQsIEFTUF9ORVRGSUxUX01B VENILCAwLCBpKTsKKwkJYmNtYXNwX25ldGZpbHRfd3IocHJpdiwgbmZpbHQsIEFTUF9ORVRGSUxU X01BU0ssIDAsIGkpOworCX0KK30KKworc3RhdGljIHZvaWQgYmNtYXNwX25ldGZpbHRfdGNwaXA0 X3dyKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBiY21hc3BfbmV0 X2ZpbHRlciAqbmZpbHQsCisJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYyAqbWF0 Y2gsCisJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYyAqbWFzaywKKwkJCQkgICAg IHUzMiBvZmZzZXQpCit7CisJX19iZTE2IHZhbF8xNiwgbWFza18xNjsKKworCXZhbF8xNiA9M0Qg aHRvbnMoRVRIX1BfSVApOworCW1hc2tfMTYgPTNEIGh0b25zKDB4RkZGRik7CisJYmNtYXNwX25l dGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCAoRVRIX0FMRU4gKiAyKSArIG9mZnNldCwKKwkJ CQkgJnZhbF8xNiwgJm1hc2tfMTYsIHNpemVvZih2YWxfMTYpKTsKKwliY21hc3BfbmV0ZmlsdF93 cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsgb2Zmc2V0ICsgMSwKKwkJCQkgJm1hdGNo LT50b3MsICZtYXNrLT50b3MsCisJCQkJIHNpemVvZihtYXRjaC0+dG9zKSk7CisJYmNtYXNwX25l dGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDEyLAorCQkJ CSAmbWF0Y2gtPmlwNHNyYywgJm1hc2stPmlwNHNyYywKKwkJCQkgc2l6ZW9mKG1hdGNoLT5pcDRz cmMpKTsKKwliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsg b2Zmc2V0ICsgMTYsCisJCQkJICZtYXRjaC0+aXA0ZHN0LCAmbWFzay0+aXA0ZHN0LAorCQkJCSBz aXplb2YobWF0Y2gtPmlwNGRzdCkpOworCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBu ZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQgKyAyMCwKKwkJCQkgJm1hdGNoLT5wc3JjLCAmbWFzay0+ cHNyYywKKwkJCQkgc2l6ZW9mKG1hdGNoLT5wc3JjKSk7CisJYmNtYXNwX25ldGZpbHRfd3JfbV93 YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDIyLAorCQkJCSAmbWF0Y2gtPnBk c3QsICZtYXNrLT5wZHN0LAorCQkJCSBzaXplb2YobWF0Y2gtPnBkc3QpKTsKK30KKworc3RhdGlj IHZvaWQgYmNtYXNwX25ldGZpbHRfdGNwaXA2X3dyKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwK KwkJCQkgICAgIHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQsCisJCQkJICAgICBzdHJ1 Y3QgZXRodG9vbF90Y3BpcDZfc3BlYyAqbWF0Y2gsCisJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF90 Y3BpcDZfc3BlYyAqbWFzaywKKwkJCQkgICAgIHUzMiBvZmZzZXQpCit7CisJX19iZTE2IHZhbF8x NiwgbWFza18xNjsKKworCXZhbF8xNiA9M0QgaHRvbnMoRVRIX1BfSVBWNik7CisJbWFza18xNiA9 M0QgaHRvbnMoMHhGRkZGKTsKKwliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQs IChFVEhfQUxFTiAqIDIpICsgb2Zmc2V0LAorCQkJCSAmdmFsXzE2LCAmbWFza18xNiwgc2l6ZW9m KHZhbF8xNikpOworCXZhbF8xNiA9M0QgaHRvbnMobWF0Y2gtPnRjbGFzcyA8PCA0KTsKKwltYXNr XzE2ID0zRCBodG9ucyhtYXNrLT50Y2xhc3MgPDwgNCk7CisJYmNtYXNwX25ldGZpbHRfd3JfbV93 YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCwKKwkJCQkgJnZhbF8xNiwgJm1hc2tf MTYsIHNpemVvZih2YWxfMTYpKTsKKwliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZp bHQsIEVUSF9ITEVOICsgb2Zmc2V0ICsgOCwKKwkJCQkgJm1hdGNoLT5pcDZzcmMsICZtYXNrLT5p cDZzcmMsCisJCQkJIHNpemVvZihtYXRjaC0+aXA2c3JjKSk7CisJYmNtYXNwX25ldGZpbHRfd3Jf bV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDI0LAorCQkJCSAmbWF0Y2gt PmlwNmRzdCwgJm1hc2stPmlwNmRzdCwKKwkJCQkgc2l6ZW9mKG1hdGNoLT5pcDZkc3QpKTsKKwli Y21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsgb2Zmc2V0ICsg NDAsCisJCQkJICZtYXRjaC0+cHNyYywgJm1hc2stPnBzcmMsCisJCQkJIHNpemVvZihtYXRjaC0+ cHNyYykpOworCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4g KyBvZmZzZXQgKyA0MiwKKwkJCQkgJm1hdGNoLT5wZHN0LCAmbWFzay0+cGRzdCwKKwkJCQkgc2l6 ZW9mKG1hdGNoLT5wZHN0KSk7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX25ldGZpbHRfd3JfdG9f aHcoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAorCQkJCSAgIHN0cnVjdCBiY21hc3BfbmV0X2Zp bHRlciAqbmZpbHQpCit7CisJc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjICpmcyA9M0QgJm5m aWx0LT5mczsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0zRCAwOworCV9fYmUxNiB2YWxfMTYsIG1h c2tfMTY7CisJdTggdmFsXzgsIG1hc2tfODsKKworCS8qIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRz IHdha2UgZmlsdGVycyAqLworCWlmICghbmZpbHQtPndha2VfZmlsdGVyKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCWJjbWFzcF9uZXRmaWx0X3Jlc2V0X2h3KHByaXYsIG5maWx0KTsKKworCWlmIChm cy0+Zmxvd190eXBlICYgRkxPV19NQUNfRVhUKSB7CisJCWJjbWFzcF9uZXRmaWx0X3dyX21fd2Fr ZShwcml2LCBuZmlsdCwgMCwgJmZzLT5oX2V4dC5oX2Rlc3QsCisJCQkJCSAmZnMtPm1fZXh0Lmhf ZGVzdCwKKwkJCQkJIHNpemVvZihmcy0+aF9leHQuaF9kZXN0KSk7CisJfQorCisJaWYgKChmcy0+ Zmxvd190eXBlICYgRkxPV19FWFQpICYmCisJICAgIChmcy0+bV9leHQudmxhbl9ldHlwZSB8fCBm cy0+bV9leHQudmxhbl90Y2kpKSB7CisJCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBu ZmlsdCwgKEVUSF9BTEVOICogMiksCisJCQkJCSAmZnMtPmhfZXh0LnZsYW5fZXR5cGUsCisJCQkJ CSAmZnMtPm1fZXh0LnZsYW5fZXR5cGUsCisJCQkJCSBzaXplb2YoZnMtPmhfZXh0LnZsYW5fZXR5 cGUpKTsKKwkJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCAoKEVUSF9BTEVO ICogMikgKyAyKSwKKwkJCQkJICZmcy0+aF9leHQudmxhbl90Y2ksCisJCQkJCSAmZnMtPm1fZXh0 LnZsYW5fdGNpLAorCQkJCQkgc2l6ZW9mKGZzLT5oX2V4dC52bGFuX3RjaSkpOworCQlvZmZzZXQg Kz0zRCBWTEFOX0hMRU47CisJfQorCisJc3dpdGNoIChmcy0+Zmxvd190eXBlICYgfihGTE9XX0VY VCB8IEZMT1dfTUFDX0VYVCkpIHsKKwljYXNlIEVUSEVSX0ZMT1c6CisJCWJjbWFzcF9uZXRmaWx0 X3dyX21fd2FrZShwcml2LCBuZmlsdCwgMCwKKwkJCQkJICZmcy0+aF91LmV0aGVyX3NwZWMuaF9k ZXN0LAorCQkJCQkgJmZzLT5tX3UuZXRoZXJfc3BlYy5oX2Rlc3QsCisJCQkJCSBzaXplb2YoZnMt PmhfdS5ldGhlcl9zcGVjLmhfZGVzdCkpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJp diwgbmZpbHQsIEVUSF9BTEVOLAorCQkJCQkgJmZzLT5oX3UuZXRoZXJfc3BlYy5oX3NvdXJjZSwK KwkJCQkJICZmcy0+bV91LmV0aGVyX3NwZWMuaF9zb3VyY2UsCisJCQkJCSBzaXplb2YoZnMtPmhf dS5ldGhlcl9zcGVjLmhfc291cmNlKSk7CisJCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2 LCBuZmlsdCwgKEVUSF9BTEVOICogMikgKyBvZmZzZXQsCisJCQkJCSAmZnMtPmhfdS5ldGhlcl9z cGVjLmhfcHJvdG8sCisJCQkJCSAmZnMtPm1fdS5ldGhlcl9zcGVjLmhfcHJvdG8sCisJCQkJCSBz aXplb2YoZnMtPmhfdS5ldGhlcl9zcGVjLmhfcHJvdG8pKTsKKworCQlicmVhazsKKwljYXNlIElQ X1VTRVJfRkxPVzoKKwkJdmFsXzE2ID0zRCBodG9ucyhFVEhfUF9JUCk7CisJCW1hc2tfMTYgPTNE IGh0b25zKDB4RkZGRik7CisJCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwg KEVUSF9BTEVOICogMikgKyBvZmZzZXQsCisJCQkJCSAmdmFsXzE2LCAmbWFza18xNiwgc2l6ZW9m KHZhbF8xNikpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9I TEVOICsgb2Zmc2V0ICsgMSwKKwkJCQkJICZmcy0+aF91LnVzcl9pcDRfc3BlYy50b3MsCisJCQkJ CSAmZnMtPm1fdS51c3JfaXA0X3NwZWMudG9zLAorCQkJCQkgc2l6ZW9mKGZzLT5oX3UudXNyX2lw NF9zcGVjLnRvcykpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVU SF9ITEVOICsgb2Zmc2V0ICsgOSwKKwkJCQkJICZmcy0+aF91LnVzcl9pcDRfc3BlYy5wcm90bywK KwkJCQkJICZmcy0+bV91LnVzcl9pcDRfc3BlYy5wcm90bywKKwkJCQkJIHNpemVvZihmcy0+aF91 LnVzcl9pcDRfc3BlYy5wcm90bykpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwg bmZpbHQsIEVUSF9ITEVOICsgb2Zmc2V0ICsgMTIsCisJCQkJCSAmZnMtPmhfdS51c3JfaXA0X3Nw ZWMuaXA0c3JjLAorCQkJCQkgJmZzLT5tX3UudXNyX2lwNF9zcGVjLmlwNHNyYywKKwkJCQkJIHNp emVvZihmcy0+aF91LnVzcl9pcDRfc3BlYy5pcDRzcmMpKTsKKwkJYmNtYXNwX25ldGZpbHRfd3Jf bV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDE2LAorCQkJCQkgJmZzLT5o X3UudXNyX2lwNF9zcGVjLmlwNGRzdCwKKwkJCQkJICZmcy0+bV91LnVzcl9pcDRfc3BlYy5pcDRk c3QsCisJCQkJCSBzaXplb2YoZnMtPmhfdS51c3JfaXA0X3NwZWMuaXA0ZHN0KSk7CisJCWlmICgh ZnMtPm1fdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcykKKwkJCWJyZWFrOworCisJCS8qIE9ubHkg c3VwcG9ydHMgMjAgYnl0ZSBJUHY0IGhlYWRlciAqLworCQl2YWxfOCA9M0QgMHg0NTsKKwkJbWFz a184ID0zRCAweEZGOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVU SF9ITEVOICsgb2Zmc2V0LAorCQkJCQkgJnZhbF84LCAmbWFza184LCBzaXplb2YodmFsXzgpKTsK KwkJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LAorCQkJCQkgRVRIX0hMRU4g KyAyMCArIG9mZnNldCwKKwkJCQkJICZmcy0+aF91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzLAor CQkJCQkgJmZzLT5tX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMsCisJCQkJCSBzaXplb2YoZnMt PmhfdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcykKKwkJCQkJICk7CisJCWJyZWFrOworCWNhc2Ug VENQX1Y0X0ZMT1c6CisJCXZhbF84ID0zRCBJUFBST1RPX1RDUDsKKwkJbWFza184ID0zRCAweEZG OworCQliY21hc3BfbmV0ZmlsdF90Y3BpcDRfd3IocHJpdiwgbmZpbHQsICZmcy0+aF91LnRjcF9p cDRfc3BlYywKKwkJCQkJICZmcy0+bV91LnRjcF9pcDRfc3BlYywgb2Zmc2V0KTsKKwkJYmNtYXNw X25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDksCisJ CQkJCSAmdmFsXzgsICZtYXNrXzgsIHNpemVvZih2YWxfOCkpOworCQlicmVhazsKKwljYXNlIFVE UF9WNF9GTE9XOgorCQl2YWxfOCA9M0QgSVBQUk9UT19VRFA7CisJCW1hc2tfOCA9M0QgMHhGRjsK KwkJYmNtYXNwX25ldGZpbHRfdGNwaXA0X3dyKHByaXYsIG5maWx0LCAmZnMtPmhfdS51ZHBfaXA0 X3NwZWMsCisJCQkJCSAmZnMtPm1fdS51ZHBfaXA0X3NwZWMsIG9mZnNldCk7CisKKwkJYmNtYXNw X25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDksCisJ CQkJCSAmdmFsXzgsICZtYXNrXzgsIHNpemVvZih2YWxfOCkpOworCQlicmVhazsKKwljYXNlIFRD UF9WNl9GTE9XOgorCQl2YWxfOCA9M0QgSVBQUk9UT19UQ1A7CisJCW1hc2tfOCA9M0QgMHhGRjsK KwkJYmNtYXNwX25ldGZpbHRfdGNwaXA2X3dyKHByaXYsIG5maWx0LCAmZnMtPmhfdS50Y3BfaXA2 X3NwZWMsCisJCQkJCSAmZnMtPm1fdS50Y3BfaXA2X3NwZWMsIG9mZnNldCk7CisJCWJjbWFzcF9u ZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQgKyA2LAorCQkJ CQkgJnZhbF84LCAmbWFza184LCBzaXplb2YodmFsXzgpKTsKKwkJYnJlYWs7CisJY2FzZSBVRFBf VjZfRkxPVzoKKwkJdmFsXzggPTNEIElQUFJPVE9fVURQOworCQltYXNrXzggPTNEIDB4RkY7CisJ CWJjbWFzcF9uZXRmaWx0X3RjcGlwNl93cihwcml2LCBuZmlsdCwgJmZzLT5oX3UudWRwX2lwNl9z cGVjLAorCQkJCQkgJmZzLT5tX3UudWRwX2lwNl9zcGVjLCBvZmZzZXQpOworCQliY21hc3BfbmV0 ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsgb2Zmc2V0ICsgNiwKKwkJCQkJ ICZ2YWxfOCwgJm1hc2tfOCwgc2l6ZW9mKHZhbF84KSk7CisJCWJyZWFrOworCX0KKworCWJjbWFz cF9uZXRmaWx0X2h3X2VuX3dha2UocHJpdiwgbmZpbHQpOworCisJcmV0dXJuIDA7Cit9CisKK3Zv aWQgYmNtYXNwX25ldGZpbHRfc3VzcGVuZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJ c3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJYm9vbCB3cml0ZSA9 M0QgZmFsc2U7CisJaW50IHJldCwgaTsKKworCS8qIFdyaXRlIGFsbCBmaWx0ZXJzIHRvIEhXICov CisJZm9yIChpID0zRCAwOyBpIDwgTlVNX05FVF9GSUxURVJTOyBpKyspIHsKKwkJLyogSWYgdGhl IGZpbHRlciBkb2VzIG5vdCBtYXRjaCB0aGUgcG9ydCwgc2tpcCBwcm9ncmFtbWluZy4gKi8KKwkJ aWYgKCFwcml2LT5uZXRfZmlsdGVyc1tpXS5jbGFpbWVkIHx8CisJCSAgICBwcml2LT5uZXRfZmls dGVyc1tpXS5wb3J0ICE9M0QgaW50Zi0+cG9ydCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpID4g MCAmJiAoaSAlIDIpICYmCisJCSAgICBwcml2LT5uZXRfZmlsdGVyc1tpXS53YWtlX2ZpbHRlciAm JgorCQkgICAgcHJpdi0+bmV0X2ZpbHRlcnNbaSAtIDFdLndha2VfZmlsdGVyKQorCQkJY29udGlu dWU7CisKKwkJcmV0ID0zRCBiY21hc3BfbmV0ZmlsdF93cl90b19odyhwcml2LCAmcHJpdi0+bmV0 X2ZpbHRlcnNbaV0pOworCQlpZiAoIXJldCkKKwkJCXdyaXRlID0zRCB0cnVlOworCX0KKworCS8q IFN1Y2Nlc3NmdWxseSBwcm9ncmFtbWVkIGF0IGxlYXN0IG9uZSB3YWtlIGZpbHRlcgorCSAqIHNv IGVuYWJsZSB0b3AgbGV2ZWwgd2FrZSBjb25maWcKKwkgKi8KKwlpZiAod3JpdGUpCisJCXJ4X2Zp bHRlcl9jb3JlX3dsKHByaXYsIChBU1BfUlhfRklMVEVSX09QVVRfRU4gfAorCQkJCSAgQVNQX1JY X0ZJTFRFUl9MTlJfTUQgfAorCQkJCSAgQVNQX1JYX0ZJTFRFUl9HRU5fV0tfRU4gfAorCQkJCSAg QVNQX1JYX0ZJTFRFUl9OVF9GTFRfRU4pLAorCQkJCSAgQVNQX1JYX0ZJTFRFUl9CTEtfQ1RSTCk7 Cit9CisKK3ZvaWQgYmNtYXNwX25ldGZpbHRfZ2V0X2FsbF9hY3RpdmUoc3RydWN0IGJjbWFzcF9p bnRmICppbnRmLCB1MzIgKnJ1bGVfbG9jPQpzLAorCQkJCSAgIHUzMiAqcnVsZV9jbnQpCit7CisJ c3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJaW50IGogPTNEIDAs IGk7CisKKwlmb3IgKGkgPTNEIDA7IGkgPCBOVU1fTkVUX0ZJTFRFUlM7IGkrKykgeworCQlpZiAo IXByaXYtPm5ldF9maWx0ZXJzW2ldLmNsYWltZWQgfHwKKwkJICAgIHByaXYtPm5ldF9maWx0ZXJz W2ldLnBvcnQgIT0zRCBpbnRmLT5wb3J0KQorCQkJY29udGludWU7CisKKwkJaWYgKGkgPiAwICYm IChpICUgMikgJiYKKwkJICAgIHByaXYtPm5ldF9maWx0ZXJzW2ldLndha2VfZmlsdGVyICYmCisJ CSAgICBwcml2LT5uZXRfZmlsdGVyc1tpIC0gMV0ud2FrZV9maWx0ZXIpCisJCQljb250aW51ZTsK KworCQlydWxlX2xvY3NbaisrXSA9M0QgcHJpdi0+bmV0X2ZpbHRlcnNbaV0uZnMubG9jYXRpb247 CisJfQorCisJKnJ1bGVfY250ID0zRCBqOworfQorCitpbnQgYmNtYXNwX25ldGZpbHRfZ2V0X2Fj dGl2ZShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpw cml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJaW50IGNudCA9M0QgMCwgaTsKKworCWZvciAoaSA9M0Qg MDsgaSA8IE5VTV9ORVRfRklMVEVSUzsgaSsrKSB7CisJCWlmICghcHJpdi0+bmV0X2ZpbHRlcnNb aV0uY2xhaW1lZCB8fAorCQkgICAgcHJpdi0+bmV0X2ZpbHRlcnNbaV0ucG9ydCAhPTNEIGludGYt PnBvcnQpCisJCQljb250aW51ZTsKKworCQkvKiBTa2lwIG92ZXIgYSB3YWtlIGZpbHRlciBwYWly ICovCisJCWlmIChpID4gMCAmJiAoaSAlIDIpICYmCisJCSAgICBwcml2LT5uZXRfZmlsdGVyc1tp XS53YWtlX2ZpbHRlciAmJgorCQkgICAgcHJpdi0+bmV0X2ZpbHRlcnNbaSAtIDFdLndha2VfZmls dGVyKQorCQkJY29udGludWU7CisKKwkJY250Kys7CisJfQorCisJcmV0dXJuIGNudDsKK30KKwor Ym9vbCBiY21hc3BfbmV0ZmlsdF9jaGVja19kdXAoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLAor CQkJICAgICAgc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjICpmcykKK3sKKwlzdHJ1Y3QgYmNt YXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsKKwlzdHJ1Y3QgZXRodG9vbF9yeF9mbG93 X3NwZWMgKmN1cjsKKwlzaXplX3QgZnNfc2l6ZSA9M0QgMDsKKwlpbnQgaTsKKworCWZvciAoaSA9 M0QgMDsgaSA8IE5VTV9ORVRfRklMVEVSUzsgaSsrKSB7CisJCWlmICghcHJpdi0+bmV0X2ZpbHRl cnNbaV0uY2xhaW1lZCB8fAorCQkgICAgcHJpdi0+bmV0X2ZpbHRlcnNbaV0ucG9ydCAhPTNEIGlu dGYtPnBvcnQpCisJCQljb250aW51ZTsKKworCQljdXIgPTNEICZwcml2LT5uZXRfZmlsdGVyc1tp XS5mczsKKworCQlpZiAoY3VyLT5mbG93X3R5cGUgIT0zRCBmcy0+Zmxvd190eXBlIHx8CisJCSAg ICBjdXItPnJpbmdfY29va2llICE9M0QgZnMtPnJpbmdfY29va2llKQorCQkJY29udGludWU7CisK KwkJc3dpdGNoIChmcy0+Zmxvd190eXBlICYgfihGTE9XX0VYVCB8IEZMT1dfTUFDX0VYVCkpIHsK KwkJY2FzZSBFVEhFUl9GTE9XOgorCQkJZnNfc2l6ZSA9M0Qgc2l6ZW9mKHN0cnVjdCBldGhoZHIp OworCQkJYnJlYWs7CisJCWNhc2UgSVBfVVNFUl9GTE9XOgorCQkJZnNfc2l6ZSA9M0Qgc2l6ZW9m KHN0cnVjdCBldGh0b29sX3VzcmlwNF9zcGVjKTsKKwkJCWJyZWFrOworCQljYXNlIFRDUF9WNl9G TE9XOgorCQljYXNlIFVEUF9WNl9GTE9XOgorCQkJZnNfc2l6ZSA9M0Qgc2l6ZW9mKHN0cnVjdCBl dGh0b29sX3RjcGlwNl9zcGVjKTsKKwkJCWJyZWFrOworCQljYXNlIFRDUF9WNF9GTE9XOgorCQlj YXNlIFVEUF9WNF9GTE9XOgorCQkJZnNfc2l6ZSA9M0Qgc2l6ZW9mKHN0cnVjdCBldGh0b29sX3Rj cGlwNF9zcGVjKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29udGludWU7CisJCX0KKwor CQlpZiAobWVtY21wKCZjdXItPmhfdSwgJmZzLT5oX3UsIGZzX3NpemUpIHx8CisJCSAgICBtZW1j bXAoJmN1ci0+bV91LCAmZnMtPm1fdSwgZnNfc2l6ZSkpCisJCQljb250aW51ZTsKKworCQlpZiAo Y3VyLT5mbG93X3R5cGUgJiBGTE9XX0VYVCkgeworCQkJaWYgKGN1ci0+aF9leHQudmxhbl9ldHlw ZSAhPTNEIGZzLT5oX2V4dC52bGFuX2V0eXBlIHx8CisJCQkgICAgY3VyLT5tX2V4dC52bGFuX2V0 eXBlICE9M0QgZnMtPm1fZXh0LnZsYW5fZXR5cGUgfHwKKwkJCSAgICBjdXItPmhfZXh0LnZsYW5f dGNpICE9M0QgZnMtPmhfZXh0LnZsYW5fdGNpIHx8CisJCQkgICAgY3VyLT5tX2V4dC52bGFuX3Rj aSAhPTNEIGZzLT5tX2V4dC52bGFuX3RjaSB8fAorCQkJICAgIGN1ci0+aF9leHQuZGF0YVswXSAh PTNEIGZzLT5oX2V4dC5kYXRhWzBdKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjdXItPmZs b3dfdHlwZSAmIEZMT1dfTUFDX0VYVCkgeworCQkJaWYgKG1lbWNtcCgmY3VyLT5oX2V4dC5oX2Rl c3QsCisJCQkJICAgJmZzLT5oX2V4dC5oX2Rlc3QsIEVUSF9BTEVOKSB8fAorCQkJICAgIG1lbWNt cCgmY3VyLT5tX2V4dC5oX2Rlc3QsCisJCQkJICAgJmZzLT5tX2V4dC5oX2Rlc3QsIEVUSF9BTEVO KSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBm YWxzZTsKK30KKworLyogSWYgbm8gbmV0d29yayBmaWx0ZXIgZm91bmQsIHJldHVybiBvcGVuIGZp bHRlci4KKyAqIElmIG5vIG1vcmUgb3BlbiBmaWx0ZXJzIHJldHVybiBOVUxMCisgKi8KK3N0cnVj dCBiY21hc3BfbmV0X2ZpbHRlciAqYmNtYXNwX25ldGZpbHRfZ2V0X2luaXQoc3RydWN0IGJjbWFz cF9pbnRmICppbnRmLAorCQkJCQkJICBpbnQgbG9jLCBib29sIHdha2VfZmlsdGVyLAorCQkJCQkJ ICBib29sIGluaXQpCit7CisJc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyICpuZmlsdGVyID0zRCBO VUxMOworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+cGFyZW50OworCWludCBp LCBvcGVuX2luZGV4ID0zRCAtMTsKKworCS8qIENoZWNrIHdoZXRoZXIgd2UgZXhjZWVkIHRoZSBm aWx0ZXIgdGFibGUgY2FwYWNpdHkgKi8KKwlpZiAobG9jICE9M0QgUlhfQ0xTX0xPQ19BTlkgJiYg bG9jID49M0QgTlVNX05FVF9GSUxURVJTKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwor CS8qIElmIHRoZSBmaWx0ZXIgbG9jYXRpb24gaXMgYnVzeSAoYWxyZWFkeSBjbGFpbWVkKSBhbmQg d2UgYXJlIGluaXRpYWxpemk9Cm5nCisJICogdGhlIGZpbHRlciAoaW5zZXJ0aW9uKSwgcmV0dXJu IGEgYnVzeSBlcnJvciBjb2RlLgorCSAqLworCWlmIChsb2MgIT0zRCBSWF9DTFNfTE9DX0FOWSAm JiBpbml0ICYmIHByaXYtPm5ldF9maWx0ZXJzW2xvY10uY2xhaW1lZCkKKwkJcmV0dXJuIEVSUl9Q VFIoLUVCVVNZKTsKKworCS8qIFdlIG5lZWQgdHdvIGZpbHRlcnMgZm9yIHdha2UtdXAsIHNvIHdl IGNhbm5vdCB1c2UgYW4gb2RkIGZpbHRlciAqLworCWlmICh3YWtlX2ZpbHRlciAmJiBsb2MgIT0z RCBSWF9DTFNfTE9DX0FOWSAmJiAobG9jICUgMikpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwp OworCisJLyogSW5pdGlhbGl6ZSB0aGUgbG9vcCBpbmRleCBiYXNlZCBvbiB0aGUgZGVzaXJlZCBs b2NhdGlvbiBvciBmcm9tIDAgKi8KKwlpID0zRCBsb2MgPTNEPTNEIFJYX0NMU19MT0NfQU5ZID8g MCA6IGxvYzsKKworCWZvciAoIDsgaSA8IE5VTV9ORVRfRklMVEVSUzsgaSsrKSB7CisJCS8qIEZv dW5kIG1hdGNoaW5nIG5ldHdvcmsgZmlsdGVyICovCisJCWlmICghaW5pdCAmJgorCQkgICAgcHJp di0+bmV0X2ZpbHRlcnNbaV0uY2xhaW1lZCAmJgorCQkgICAgcHJpdi0+bmV0X2ZpbHRlcnNbaV0u aHdfaW5kZXggPTNEPTNEIGkgJiYKKwkJICAgIHByaXYtPm5ldF9maWx0ZXJzW2ldLnBvcnQgPTNE PTNEIGludGYtPnBvcnQpCisJCQlyZXR1cm4gJnByaXYtPm5ldF9maWx0ZXJzW2ldOworCisJCS8q IElmIHdlIGRvbid0IG5lZWQgYSBuZXcgZmlsdGVyIG9yIG5ldyBmaWx0ZXIgYWxyZWFkeSBmb3Vu ZCAqLworCQlpZiAoIWluaXQgfHwgb3Blbl9pbmRleCA+PTNEIDApCisJCQljb250aW51ZTsKKwor CQkvKiBXYWtlIGZpbHRlciBjb25zbGlkYXRlcyB0d28gZmlsdGVycyB0byBjb3ZlciBtb3JlIGJ5 dGVzCisJCSAqIFdha2UgZmlsdGVyIGlzIG9wZW4gaWYuLi4KKwkJICogMS4gSXQgaXMgYW4gZXZl biBmaWx0ZXIKKwkJICogMi4gVGhlIGN1cnJlbnQgYW5kIG5leHQgZmlsdGVyIGlzIG5vdCBjbGFp bWVkCisJCSAqLworCQlpZiAod2FrZV9maWx0ZXIgJiYgIShpICUgMikgJiYgIXByaXYtPm5ldF9m aWx0ZXJzW2ldLmNsYWltZWQgJiYKKwkJICAgICFwcml2LT5uZXRfZmlsdGVyc1tpICsgMV0uY2xh aW1lZCkKKwkJCW9wZW5faW5kZXggPTNEIGk7CisJCWVsc2UgaWYgKCFwcml2LT5uZXRfZmlsdGVy c1tpXS5jbGFpbWVkKQorCQkJb3Blbl9pbmRleCA9M0QgaTsKKwl9CisKKwlpZiAob3Blbl9pbmRl eCA+PTNEIDApIHsKKwkJbmZpbHRlciA9M0QgJnByaXYtPm5ldF9maWx0ZXJzW29wZW5faW5kZXhd OworCQluZmlsdGVyLT5jbGFpbWVkID0zRCB0cnVlOworCQluZmlsdGVyLT5wb3J0ID0zRCBpbnRm LT5wb3J0OworCQluZmlsdGVyLT5od19pbmRleCA9M0Qgb3Blbl9pbmRleDsKKwl9CisKKwlpZiAo d2FrZV9maWx0ZXIgJiYgb3Blbl9pbmRleCA+PTNEIDApIHsKKwkJLyogQ2xhaW0gbmV4dCBmaWx0 ZXIgKi8KKwkJcHJpdi0+bmV0X2ZpbHRlcnNbb3Blbl9pbmRleCArIDFdLmNsYWltZWQgPTNEIHRy dWU7CisJCXByaXYtPm5ldF9maWx0ZXJzW29wZW5faW5kZXggKyAxXS53YWtlX2ZpbHRlciA9M0Qg dHJ1ZTsKKwkJbmZpbHRlci0+d2FrZV9maWx0ZXIgPTNEIHRydWU7CisJfQorCisJcmV0dXJuIG5m aWx0ZXIgPyBuZmlsdGVyIDogRVJSX1BUUigtRUlOVkFMKTsKK30KKwordm9pZCBiY21hc3BfbmV0 ZmlsdF9yZWxlYXNlKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwKKwkJCSAgICBzdHJ1Y3QgYmNt YXNwX25ldF9maWx0ZXIgKm5maWx0KQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0Qg aW50Zi0+cGFyZW50OworCisJaWYgKG5maWx0LT53YWtlX2ZpbHRlcikgeworCQltZW1zZXQoJnBy aXYtPm5ldF9maWx0ZXJzW25maWx0LT5od19pbmRleCArIDFdLCAwLAorCQkgICAgICAgc2l6ZW9m KHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlcikpOworCX0KKworCW1lbXNldChuZmlsdCwgMCwgc2l6 ZW9mKHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlcikpOworfQorCiBzdGF0aWMgdm9pZCBiY21hc3Bf YWRkcl90b191aW50KHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUzMiAqaGlnaCwgdTMyICpsb3cpCiB7 CiAJKmhpZ2ggPTNEICh1MzIpKGFkZHJbMF0gPDwgOCB8IGFkZHJbMV0pOwpAQCAtMzMwLDYgKzky MSw5IEBAIHN0YXRpYyB2b2lkIGJjbWFzcF9jb3JlX2luaXRfZmlsdGVycyhzdHJ1Y3QgYmNtYXNw X3ByaXY9CiAqcHJpdikKIAkJcHJpdi0+bWRhX2ZpbHRlcnNbaV0uZW4gPTNEIDA7CiAJfQo9MjAK Kwlmb3IgKGkgPTNEIDA7IGkgPCBOVU1fTkVUX0ZJTFRFUlM7IGkrKykKKwkJcnhfZmlsdGVyX2Nv cmVfd2wocHJpdiwgMHgwLCBBU1BfUlhfRklMVEVSX05FVF9DRkcoaSkpOworCiAJLyogVG9wIGxl dmVsIGZpbHRlciBlbmFibGUgYml0IHNob3VsZCBiZSBlbmFibGVkIGF0IGFsbCB0aW1lcywgc2V0 CiAJICogR0VOX1dBS0VfQ0xFQVIgdG8gY2xlYXIgdGhlIG5ldHdvcmsgZmlsdGVyIHdha2UtdXAg d2hpY2ggd291bGQKIAkgKiBvdGhlcndpc2UgYmUgc3RpY2t5CkBAIC02NTUsNiArMTI0OSw3IEBA IHN0YXRpYyBpbnQgYmNtYXNwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJ c3Bpbl9sb2NrX2luaXQoJnByaXYtPm1kYV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+ Y2xrX2xvY2spOwogCW11dGV4X2luaXQoJnByaXYtPndvbF9sb2NrKTsKKwltdXRleF9pbml0KCZw cml2LT5uZXRfbG9jayk7Cj0yMAogCXBkYXRhID0zRCBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoJnBk ZXYtPmRldik7CiAJaWYgKCFwZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0 L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmggYi9kcml2ZXJzL25ldC9ldGhlPQpybmV0L2Jyb2FkY29t L2FzcDIvYmNtYXNwLmgKaW5kZXggNzAzNDQxODEwMWE0Li41MjFjOWI0YjcyODggMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmgKKysrIGIvZHJp dmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuaApAQCAtMTA2LDYgKzEwNiwx NCBAQAogI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX09GRlNFVF9MM18xKHZhbCkJKCh2YWwp IDw8IDE2KQogI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX09GRlNFVF9MNCh2YWwpCSgodmFs KSA8PCAyNCkKPTIwCitlbnVtIGFzcF9yeF9uZXRfZmlsdGVyX2Jsb2NrIHsKKwlBU1BfUlhfRklM VEVSX05FVF9MMiA9M0QgMCwKKwlBU1BfUlhfRklMVEVSX05FVF9MM18wLAorCUFTUF9SWF9GSUxU RVJfTkVUX0wzXzEsCisJQVNQX1JYX0ZJTFRFUl9ORVRfTDQsCisJQVNQX1JYX0ZJTFRFUl9ORVRf QkxPQ0tfTUFYCit9OworCiAjZGVmaW5lIEFTUF9FRFBLVF9PRkZTRVQJCQkweDljMDAwCiAjZGVm aW5lICBBU1BfRURQS1RfRU5BQkxFCQkJMHg0CiAjZGVmaW5lICAgQVNQX0VEUEtUX0VOQUJMRV9F TgkJCUJJVCgwKQpAQCAtMzA3LDYgKzMxNSwxNyBAQCBzdHJ1Y3QgYmNtYXNwX2ludGYgewogCXVu c2lnbmVkIGludAkJd29sX2lycV9lbmFibGVkOjE7CiB9Owo9MjAKKyNkZWZpbmUgTlVNX05FVF9G SUxURVJTCQkJCTMyCitzdHJ1Y3QgYmNtYXNwX25ldF9maWx0ZXIgeworCXN0cnVjdCBldGh0b29s X3J4X2Zsb3dfc3BlYwlmczsKKworCWJvb2wJCQkJY2xhaW1lZDsKKwlib29sCQkJCXdha2VfZmls dGVyOworCisJaW50CQkJCXBvcnQ7CisJdW5zaWduZWQgaW50CQkJaHdfaW5kZXg7Cit9OworCiAj ZGVmaW5lIE5VTV9NREFfRklMVEVSUwkJCQkzMgogc3RydWN0IGJjbWFzcF9tZGFfZmlsdGVyIHsK IAkvKiBDdXJyZW50IG93bmVyIG9mIHRoaXMgZmlsdGVyICovCkBAIC0zNjIsNiArMzgxLDExIEBA IHN0cnVjdCBiY21hc3BfcHJpdiB7Cj0yMAogCS8qIFByb3RlY3RzIGFjY2Vzc2VzIHRvIEFTUF9D VFJMX0NMT0NLX0NUUkwgKi8KIAlzcGlubG9ja190CQkJY2xrX2xvY2s7CisKKwlzdHJ1Y3QgYmNt YXNwX25ldF9maWx0ZXIJbmV0X2ZpbHRlcnNbTlVNX05FVF9GSUxURVJTXTsKKworCS8qIE5ldHdv cmsgZmlsdGVyIGxvY2sgKi8KKwlzdHJ1Y3QgbXV0ZXgJCQluZXRfbG9jazsKIH07Cj0yMAogc3Rh dGljIGlubGluZSB1bnNpZ25lZCBsb25nIGJjbWFzcF9pbnRmX3J4X2Rlc2NfcmVhZChzdHJ1Y3Qg YmNtYXNwX2ludGYgKmk9Cm50ZikKQEAgLTUxOSw0ICs1NDMsMjAgQEAgdm9pZCBiY21hc3BfZGlz YWJsZV9hbGxfZmlsdGVycyhzdHJ1Y3QgYmNtYXNwX2ludGYgKmluPQp0Zik7Cj0yMAogdm9pZCBi Y21hc3BfY29yZV9jbG9ja19zZXRfaW50ZihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wg ZW4pOwo9MjAKK3N0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqYmNtYXNwX25ldGZpbHRfZ2V0X2lu aXQoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLAorCQkJCQkJICBpbnQgbG9jLCBib29sIHdha2Vf ZmlsdGVyLAorCQkJCQkJICBib29sIGluaXQpOworCitib29sIGJjbWFzcF9uZXRmaWx0X2NoZWNr X2R1cChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9y eF9mbG93X3NwZWMgKmZzKTsKKwordm9pZCBiY21hc3BfbmV0ZmlsdF9yZWxlYXNlKHN0cnVjdCBi Y21hc3BfaW50ZiAqaW50ZiwKKwkJCSAgICBzdHJ1Y3QgYmNtYXNwX25ldF9maWx0ZXIgKm5maWx0 KTsKKworaW50IGJjbWFzcF9uZXRmaWx0X2dldF9hY3RpdmUoc3RydWN0IGJjbWFzcF9pbnRmICpp bnRmKTsKKwordm9pZCBiY21hc3BfbmV0ZmlsdF9nZXRfYWxsX2FjdGl2ZShzdHJ1Y3QgYmNtYXNw X2ludGYgKmludGYsIHUzMiAqcnVsZV9sb2M9CnMsCisJCQkJICAgdTMyICpydWxlX2NudCk7CisK K3ZvaWQgYmNtYXNwX25ldGZpbHRfc3VzcGVuZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOwog I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2Jj bWFzcF9ldGh0b29sLmMgYi9kcml2ZXJzLz0KbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNt YXNwX2V0aHRvb2wuYwppbmRleCBhZTI0YTFmNzRkNDkuLmVkZGQxYzQzZjAwZSAxMDA2NDQKLS0t IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfZXRodG9vbC5jCisr KyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2V0aHRvb2wuYwpA QCAtMzAsNyArMzAsNyBAQCBzdGF0aWMgdm9pZCBiY21hc3Bfc2V0X21zZ2xldmVsKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYsIHU9CjMyIGxldmVsKQogCWludGYtPm1zZ19lbmFibGUgPTNEIGxldmVs OwogfQo9MjAKLSNkZWZpbmUgQkNNQVNQX1NVUFBPUlRFRF9XQUtFICAgKFdBS0VfTUFHSUMgfCBX QUtFX01BR0lDU0VDVVJFKQorI2RlZmluZSBCQ01BU1BfU1VQUE9SVEVEX1dBS0UgICAoV0FLRV9N QUdJQyB8IFdBS0VfTUFHSUNTRUNVUkUgfCBXQUtFX0ZJTFQ9CkVSKQogc3RhdGljIHZvaWQgYmNt YXNwX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5m byA9Cip3b2wpCiB7CiAJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihk ZXYpOwpAQCAtNjQsNiArNjQsMTMzIEBAIHN0YXRpYyBpbnQgYmNtYXNwX3NldF93b2woc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwgc3RydWM9CnQgZXRodG9vbF93b2xpbmZvICp3b2wpCiAJcmV0dXJu IDA7CiB9Cj0yMAorc3RhdGljIGludCBiY21hc3BfZmxvd19pbnNlcnQoc3RydWN0IG5ldF9kZXZp Y2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcnhuZmM9CiAqY21kKQoreworCXN0cnVjdCBiY21hc3Bf aW50ZiAqaW50ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgYmNtYXNwX25ldF9maWx0 ZXIgKm5maWx0ZXI7CisJdTMyIGxvYyA9M0QgY21kLT5mcy5sb2NhdGlvbjsKKwlib29sIHdha2Ug PTNEIGZhbHNlOworCisJaWYgKGNtZC0+ZnMucmluZ19jb29raWUgPTNEPTNEIFJYX0NMU19GTE9X X1dBS0UpCisJCXdha2UgPTNEIHRydWU7CisKKwkvKiBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBX QUtFIGZpbHRlcnMgKi8KKwlpZiAoIXdha2UpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXN3 aXRjaCAoY21kLT5mcy5mbG93X3R5cGUgJiB+KEZMT1dfRVhUIHwgRkxPV19NQUNfRVhUKSkgewor CWNhc2UgRVRIRVJfRkxPVzoKKwljYXNlIElQX1VTRVJfRkxPVzoKKwljYXNlIFRDUF9WNF9GTE9X OgorCWNhc2UgVURQX1Y0X0ZMT1c6CisJY2FzZSBUQ1BfVjZfRkxPVzoKKwljYXNlIFVEUF9WNl9G TE9XOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJ LyogQ2hlY2sgaWYgZmlsdGVyIGFscmVhZHkgZXhpc3RzICovCisJaWYgKGJjbWFzcF9uZXRmaWx0 X2NoZWNrX2R1cChpbnRmLCAmY21kLT5mcykpCisJCXJldHVybiAtRUlOVkFMOworCisJbmZpbHRl ciA9M0QgYmNtYXNwX25ldGZpbHRfZ2V0X2luaXQoaW50ZiwgbG9jLCB3YWtlLCB0cnVlKTsKKwlp ZiAoSVNfRVJSKG5maWx0ZXIpKQorCQlyZXR1cm4gUFRSX0VSUihuZmlsdGVyKTsKKworCS8qIFJl dHVybiB0aGUgbG9jYXRpb24gd2hlcmUgd2UgZGlkIGluc2VydCB0aGUgZmlsdGVyICovCisJY21k LT5mcy5sb2NhdGlvbiA9M0QgbmZpbHRlci0+aHdfaW5kZXg7CisJbWVtY3B5KCZuZmlsdGVyLT5m cywgJmNtZC0+ZnMsIHNpemVvZihzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMpKTsKKworCS8q IFNpbmNlIHdlIG9ubHkgc3VwcG9ydCB3YWtlIGZpbHRlcnMsIGRlZmVyIHJlZ2lzdGVyIHByb2dy YW1taW5nIHRpbGwKKwkgKiBzdXNwZW5kIHRpbWUuCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgYmNtYXNwX2Zsb3dfZGVsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVj dCBldGh0b29sX3J4bmZjPQogKmNtZCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNE IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyICpuZmlsdGVyOwor CisJbmZpbHRlciA9M0QgYmNtYXNwX25ldGZpbHRfZ2V0X2luaXQoaW50ZiwgY21kLT5mcy5sb2Nh dGlvbiwgZmFsc2UsIGZhbHNlKTsKKwlpZiAoSVNfRVJSKG5maWx0ZXIpKQorCQlyZXR1cm4gUFRS X0VSUihuZmlsdGVyKTsKKworCWJjbWFzcF9uZXRmaWx0X3JlbGVhc2UoaW50ZiwgbmZpbHRlcik7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiY21hc3BfZmxvd19nZXQoc3RydWN0IGJj bWFzcF9pbnRmICppbnRmLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyA9CipjbWQpCit7CisJc3RydWN0 IGJjbWFzcF9uZXRfZmlsdGVyICpuZmlsdGVyOworCisJbmZpbHRlciA9M0QgYmNtYXNwX25ldGZp bHRfZ2V0X2luaXQoaW50ZiwgY21kLT5mcy5sb2NhdGlvbiwgZmFsc2UsIGZhbHNlKTsKKwlpZiAo SVNfRVJSKG5maWx0ZXIpKQorCQlyZXR1cm4gUFRSX0VSUihuZmlsdGVyKTsKKworCW1lbWNweSgm Y21kLT5mcywgJm5maWx0ZXItPmZzLCBzaXplb2YobmZpbHRlci0+ZnMpKTsKKworCWNtZC0+ZGF0 YSA9M0QgTlVNX05FVF9GSUxURVJTOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNt YXNwX3NldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5m YyAqPQpjbWQpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihk ZXYpOworCWludCByZXQgPTNEIC1FT1BOT1RTVVBQOworCisJbXV0ZXhfbG9jaygmaW50Zi0+cGFy ZW50LT5uZXRfbG9jayk7CisKKwlzd2l0Y2ggKGNtZC0+Y21kKSB7CisJY2FzZSBFVEhUT09MX1NS WENMU1JMSU5TOgorCQlyZXQgPTNEIGJjbWFzcF9mbG93X2luc2VydChkZXYsIGNtZCk7CisJCWJy ZWFrOworCWNhc2UgRVRIVE9PTF9TUlhDTFNSTERFTDoKKwkJcmV0ID0zRCBiY21hc3BfZmxvd19k ZWxldGUoZGV2LCBjbWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlt dXRleF91bmxvY2soJmludGYtPnBhcmVudC0+bmV0X2xvY2spOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludCBiY21hc3BfZ2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0 cnVjdCBldGh0b29sX3J4bmZjICo9CmNtZCwKKwkJCSAgICB1MzIgKnJ1bGVfbG9jcykKK3sKKwlz dHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9 M0QgMDsKKworCW11dGV4X2xvY2soJmludGYtPnBhcmVudC0+bmV0X2xvY2spOworCisJc3dpdGNo IChjbWQtPmNtZCkgeworCWNhc2UgRVRIVE9PTF9HUlhDTFNSTENOVDoKKwkJY21kLT5ydWxlX2Nu dCA9M0QgYmNtYXNwX25ldGZpbHRfZ2V0X2FjdGl2ZShpbnRmKTsKKwkJLyogV2Ugc3VwcG9ydCBz cGVjaWZ5aW5nIHJ1bGUgbG9jYXRpb25zICovCisJCWNtZC0+ZGF0YSB8PTNEIFJYX0NMU19MT0Nf U1BFQ0lBTDsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0dSWENMU1JVTEU6CisJCWVyciA9M0Qg YmNtYXNwX2Zsb3dfZ2V0KGludGYsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9HUlhD TFNSTEFMTDoKKwkJYmNtYXNwX25ldGZpbHRfZ2V0X2FsbF9hY3RpdmUoaW50ZiwgcnVsZV9sb2Nz LCAmY21kLT5ydWxlX2NudCk7CisJCWNtZC0+ZGF0YSA9M0QgTlVNX05FVF9GSUxURVJTOworCQli cmVhazsKKwlkZWZhdWx0OgorCQllcnIgPTNEIC1FT1BOT1RTVVBQOworCQlicmVhazsKKwl9CisK KwltdXRleF91bmxvY2soJmludGYtPnBhcmVudC0+bmV0X2xvY2spOworCisJcmV0dXJuIGVycjsK K30KKwogY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJjbWFzcF9ldGh0b29sX29wcyA9M0Qgewog CS5nZXRfZHJ2aW5mbwkJPTNEIGJjbWFzcF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsJCT0zRCBl dGh0b29sX29wX2dldF9saW5rLApAQCAtNzMsNCArMjAwLDYgQEAgY29uc3Qgc3RydWN0IGV0aHRv b2xfb3BzIGJjbWFzcF9ldGh0b29sX29wcyA9M0QgewogCS5zZXRfbXNnbGV2ZWwJCT0zRCBiY21h c3Bfc2V0X21zZ2xldmVsLAogCS5nZXRfd29sCQk9M0QgYmNtYXNwX2dldF93b2wsCiAJLnNldF93 b2wJCT0zRCBiY21hc3Bfc2V0X3dvbCwKKwkuZ2V0X3J4bmZjCQk9M0QgYmNtYXNwX2dldF9yeG5m YywKKwkuc2V0X3J4bmZjCQk9M0QgYmNtYXNwX3NldF9yeG5mYywKIH07CmRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMgYi9kcml2ZXJz L25ldD0KL2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYwppbmRleCAzNWI5ZDYz OTBkYjMuLjBjNTlmNDAyNTk2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJv YWRjb20vYXNwMi9iY21hc3BfaW50Zi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2Fk Y29tL2FzcDIvYmNtYXNwX2ludGYuYwpAQCAtMTMyMCw2ICsxMzIwLDkgQEAgc3RhdGljIHZvaWQg YmNtYXNwX3N1c3BlbmRfdG9fd29sKHN0cnVjdCBiY21hc3BfaW50ZiA9CippbnRmKQogCX0KIAl1 bWFjX3dsKGludGYsIHJlZywgVU1DX01QRF9DVFJMKTsKPTIwCisJaWYgKGludGYtPndvbG9wdHMg JiBXQUtFX0ZJTFRFUikKKwkJYmNtYXNwX25ldGZpbHRfc3VzcGVuZChpbnRmKTsKKwogCS8qIFVu aU1BQyByZWNlaXZlIG5lZWRzIHRvIGJlIHR1cm5lZCBvbiAqLwogCXVtYWNfZW5hYmxlX3NldChp bnRmLCBVTUNfQ01EX1JYX0VOLCAxKTsKPTIwCi0tPTIwCjIuNy40Cg== --0000000000007b71c905fe1e808a Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature 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 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 YIZIAWUDBAIBBQCggdQwLwYJKoZIhvcNAQkEMSIEIGmu35/rhuvbXNhp5JaKUYiy0SpdxQUdkWus ran83m4rMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIzMDYxNDIy MzA0MVowaQYJKoZIhvcNAQkPMVwwWjALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFl AwQBAjAKBggqhkiG9w0DBzALBgkqhkiG9w0BAQowCwYJKoZIhvcNAQEHMAsGCWCGSAFlAwQCATAN BgkqhkiG9w0BAQEFAASCAQB56ieIcE0mGD+zlG4I7AOTZXqM9ivmJPp5GH8d/EgR64fj8FjYHPIj z9lOGMcKqyqYUEDG0tRb8Rgma5DD4WUi2uEm3iDjOxd+/WNoJrysPZ4fZIilE10O2iAd3OF8aeGy lCJP7yljS4Wo95m4kqeyKmT+IVuWlQEUsk+3mVc87OftujmVDS+xY9tt4XctkKmTIVaQbhMbPFOr 4QdnmYUraMhov7IZ2SVweHyBL4UQv129X0/tAz3QuYckfjFW0cljz5IfkyZiFXfRFqILwODD+y0R KnFhLMoOOWKtJ5BepzNIjC50azYSjCLxPeVYEc0v06hkloO+LTYdN+K5DHAm --0000000000007b71c905fe1e808a--