From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v16 3/8] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.
Date: Fri, 6 May 2016 15:05:49 +0200
Message-ID: <1462539954-26158-4-git-send-email-p.zabel@pengutronix.de>
References: <1462539954-26158-1-git-send-email-p.zabel@pengutronix.de>
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Return-path:
In-Reply-To: <1462539954-26158-1-git-send-email-p.zabel@pengutronix.de>
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: dri-devel-bounces@lists.freedesktop.org
Sender: "dri-devel"
To: dri-devel@lists.freedesktop.org
Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , Mao Huang , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala
List-Id: devicetree@vger.kernel.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0
aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0
IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM
MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln
bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg
U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8
ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IEJpYmJ5IEhzaWVoIDxiaWJieS5o
c2llaEBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IE1hbyBIdWFuZyA8bGl0dGxlY3ZyQGNo
cm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRy
b25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjE1OgogLSBSZWJhc2VkIG9udG8gZHJtLW5leHQK
IC0gVXNlIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KCkgaW5zdGVhZCBvZiBkcm1fc2VuZF92
YmxhbmtfZXZlbnQoKQogLSBPcmRlciBtdGtfZHJtX2RyaXZlcnMgYWxwaGFiZXRpY2FsbHkKLS0t
CiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIGRy
aXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgICAgICAgICAgICB8ICAxNCArCiBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgIHwgIDExICsKIGRyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYyAgICAgfCAzMDIgKysrKysrKysrKysrKysrCiBkcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jICAgIHwgMjQwICsrKysrKysrKysr
KwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jICAgICB8IDU4MiArKysr
KysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9jcnRjLmggICAgIHwgIDMyICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k
ZHAuYyAgICAgIHwgMzUzICsrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9kZHAuaCAgICAgIHwgIDQxICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9kZHBfY29tcC5jIHwgMjI1ICsrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oIHwgMTUwICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX2Rydi5jICAgICAgfCA1NTggKysrKysrKysrKysrKysrKysrKysrKysr
KysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAgfCAgNTcgKysr
CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwgMTY1ICsrKysr
KysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oICAgICAgIHwgIDIzICsr
CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyAgICAgIHwgMjY5ICsrKysr
KysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAg
NTkgKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jICAgIHwgMjQw
ICsrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCAg
ICB8ICA1OSArKysKIDIwIGZpbGVzIGNoYW5nZWQsIDMzODMgaW5zZXJ0aW9ucygrKQogY3JlYXRl
IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAx
MDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYwogY3JlYXRl
IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5j
CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRw
LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k
ZHBfY29tcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcm1fZGRwX2NvbXAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kcm1fZHJ2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9mYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kcm1fZmIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv
Z3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggMTZlNGMyMS4u
ZmMzNTczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVy
cy9ncHUvZHJtL0tjb25maWcKQEAgLTI4OCwzICsyODgsNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1
L2RybS9ldG5hdml2L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hcmMvS2NvbmZp
ZyIKIAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL0tjb25maWciCisKK3NvdXJj
ZSAiZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJz
L2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggNDNjMmFi
Zi4uMmJkM2U1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2Ry
aXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtNzQsNiArNzQsNyBAQCBvYmotJChDT05GSUdfRFJN
X01TTSkgKz0gbXNtLwogb2JqLSQoQ09ORklHX0RSTV9URUdSQSkgKz0gdGVncmEvCiBvYmotJChD
T05GSUdfRFJNX1NUSSkgKz0gc3RpLwogb2JqLSQoQ09ORklHX0RSTV9JTVgpICs9IGlteC8KK29i
ai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLwogb2JqLXkJCQkrPSBpMmMvCiBv
YmoteQkJCSs9IHBhbmVsLwogb2JqLXkJCQkrPSBicmlkZ2UvCmRpZmYgLS1naXQgYS9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29u
ZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZTUzNzEKLS0tIC9kZXYv
bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpAQCAtMCwwICsxLDE0
IEBACitjb25maWcgRFJNX01FRElBVEVLCisJdHJpc3RhdGUgIkRSTSBTdXBwb3J0IGZvciBNZWRp
YXRlayBTb0NzIgorCWRlcGVuZHMgb24gRFJNCisJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8
IChBUk0gJiYgQ09NUElMRV9URVNUKQorCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIKKwlzZWxl
Y3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgSU9NTVVfRE1BCisJc2VsZWN0IE1FTU9SWQorCXNl
bGVjdCBNVEtfU01JCisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEg
TWVkaWF0ZWsgU29Dcy4KKwkgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWVkaWF0ZWstZHJt
CisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBrZXJuZWwgbW9kZSBzZXR0aW5nIGFuZAorCSAgYnVm
ZmVyIG1hbmFnZW1lbnQgdG8gdXNlcnNwYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YmRlN2MKLS0tIC9kZXYvbnVsbAor
KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAor
bWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAorCQkgIG10a19kaXNwX3JkbWEubyBc
CisJCSAgbXRrX2RybV9jcnRjLm8gXAorCQkgIG10a19kcm1fZGRwLm8gXAorCQkgIG10a19kcm1f
ZGRwX2NvbXAubyBcCisJCSAgbXRrX2RybV9kcnYubyBcCisJCSAgbXRrX2RybV9mYi5vIFwKKwkJ
ICBtdGtfZHJtX2dlbS5vIFwKKwkJICBtdGtfZHJtX3BsYW5lLm8KKworb2JqLSQoQ09ORklHX0RS
TV9NRURJQVRFSykgKz0gbWVkaWF0ZWstZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZGlzcF9vdmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjYyNjcxZgot
LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwu
YwpAQCAtMCwwICsxLDMwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ
bmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov
CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1
ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2lu
Y2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5o
PgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29t
cC5oIgorCisjZGVmaW5lIERJU1BfUkVHX09WTF9JTlRFTgkJCTB4MDAwNAorI2RlZmluZSBPVkxf
Rk1FX0NQTF9JTlQJCQkJCUJJVCgxKQorI2RlZmluZSBESVNQX1JFR19PVkxfSU5UU1RBCQkJMHgw
MDA4CisjZGVmaW5lIERJU1BfUkVHX09WTF9FTgkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9SRUdf
T1ZMX1JTVAkJCTB4MDAxNAorI2RlZmluZSBESVNQX1JFR19PVkxfUk9JX1NJWkUJCQkweDAwMjAK
KyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JPSV9CR0NMUgkJCTB4MDAyOAorI2RlZmluZSBESVNQX1JF
R19PVkxfU1JDX0NPTgkJCTB4MDAyYworI2RlZmluZSBESVNQX1JFR19PVkxfQ09OKG4pCQkJKDB4
MDAzMCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfU0laRShuKQkJKDB4
MDAzOCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9PRkZTRVQobikJCQkoMHgw
MDNjICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1BJVENIKG4pCQkJKDB4MDA0
NCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9SRE1BX0NUUkwobikJCSgweDAw
YzAgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfUkRNQV9HTUMobikJCSgweDAw
YzggKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfQUREUihuKQkJCSgweDBmNDAg
KyAweDIwICogKG4pKQorCisjZGVmaW5lCU9WTF9SRE1BX01FTV9HTUMJMHg0MDQwMjAyMAorCisj
ZGVmaW5lIE9WTF9DT05fQllURV9TV0FQCUJJVCgyNCkKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRf
UkdCNTY1CSgwIDw8IDEyKQorI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9SR0I4ODgJKDEgPDwgMTIp
CisjZGVmaW5lIE9WTF9DT05fQ0xSRk1UX1JHQkE4ODg4CSgyIDw8IDEyKQorI2RlZmluZSBPVkxf
Q09OX0NMUkZNVF9BUkdCODg4OAkoMyA8PCAxMikKKyNkZWZpbmUJT1ZMX0NPTl9BRU4JCUJJVCg4
KQorI2RlZmluZQlPVkxfQ09OX0FMUEhBCQkweGZmCisKKy8qKgorICogc3RydWN0IG10a19kaXNw
X292bCAtIERJU1BfT1ZMIGRyaXZlciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAtIHN0cnVjdHVy
ZSBjb250YWluaW5nIHR5cGUgZW51bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisgKiBAY3J0YyAt
IGFzc29jaWF0ZWQgY3J0YyB0byByZXBvcnQgdmJsYW5rIGV2ZW50cyB0bworICovCitzdHJ1Y3Qg
bXRrX2Rpc3Bfb3ZsIHsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wCQlkZHBfY29tcDsKKwlzdHJ1Y3Qg
ZHJtX2NydGMJCQkqY3J0YzsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZGlzcF9vdmxf
aXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtdGtfZGlzcF9v
dmwgKnByaXYgPSBkZXZfaWQ7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gJnByaXYtPmRk
cF9jb21wOworCisJLyogQ2xlYXIgZnJhbWUgY29tcGxldGlvbiBpbnRlcnJ1cHQgKi8KKwl3cml0
ZWwoMHgwLCBvdmwtPnJlZ3MgKyBESVNQX1JFR19PVkxfSU5UU1RBKTsKKworCWlmICghcHJpdi0+
Y3J0YykKKwkJcmV0dXJuIElSUV9OT05FOworCisJbXRrX2NydGNfZGRwX2lycShwcml2LT5jcnRj
LCBvdmwpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3Zs
X2VuYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkgIHN0cnVjdCBk
cm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gY29udGFpbmVy
X29mKGNvbXAsIHN0cnVjdCBtdGtfZGlzcF9vdmwsCisJCQkJCQkgZGRwX2NvbXApOworCisJcHJp
di0+Y3J0YyA9IGNydGM7CisJd3JpdGVsX3JlbGF4ZWQoT1ZMX0ZNRV9DUExfSU5ULCBjb21wLT5y
ZWdzICsgRElTUF9SRUdfT1ZMX0lOVEVOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9kaXNh
YmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZGlz
cF9vdmwgKnByaXYgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kaXNwX292bCwKKwkJ
CQkJCSBkZHBfY29tcCk7CisKKwlwcml2LT5jcnRjID0gTlVMTDsKKwl3cml0ZWxfcmVsYXhlZCgw
eDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQorCitzdGF0aWMgdm9pZCBt
dGtfb3ZsX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsX3JlbGF4
ZWQoMHgxLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQg
bXRrX292bF9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsX3JlbGF4
ZWQoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQg
bXRrX292bF9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcs
CisJCQkgICB1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZyZWZyZXNoKQoreworCWlmICh3
ICE9IDAgJiYgaCAhPSAwKQorCQl3cml0ZWxfcmVsYXhlZChoIDw8IDE2IHwgdywgY29tcC0+cmVn
cyArIERJU1BfUkVHX09WTF9ST0lfU0laRSk7CisJd3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5y
ZWdzICsgRElTUF9SRUdfT1ZMX1JPSV9CR0NMUik7CisKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdz
ICsgRElTUF9SRUdfT1ZMX1JTVCk7CisJd3JpdGVsKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVH
X09WTF9SU1QpOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29uKHN0cnVjdCBtdGtf
ZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpCit7CisJdW5zaWduZWQgaW50IHJlZzsK
KworCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUkRNQV9DVFJMKGlkeCkp
OworCXdyaXRlbChPVkxfUkRNQV9NRU1fR01DLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JE
TUFfR01DKGlkeCkpOworCisJcmVnID0gcmVhZGwoY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9T
UkNfQ09OKTsKKwlyZWcgPSByZWcgfCBCSVQoaWR4KTsKKwl3cml0ZWwocmVnLCBjb21wLT5yZWdz
ICsgRElTUF9SRUdfT1ZMX1NSQ19DT04pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVy
X29mZihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVu
c2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZWFkbChjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZM
X1NSQ19DT04pOworCXJlZyA9IHJlZyAmIH5CSVQoaWR4KTsKKwl3cml0ZWwocmVnLCBjb21wLT5y
ZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19DT04pOworCisJd3JpdGVsKDB4MCwgY29tcC0+cmVncyAr
IERJU1BfUkVHX09WTF9SRE1BX0NUUkwoaWR4KSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQg
b3ZsX2ZtdF9jb252ZXJ0KHVuc2lnbmVkIGludCBmbXQpCit7CisJc3dpdGNoIChmbXQpIHsKKwlk
ZWZhdWx0OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCXJldHVybiBPVkxfQ09OX0NMUkZN
VF9SR0I1NjU7CisJY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKKwkJcmV0dXJuIE9WTF9DT05fQ0xS
Rk1UX1JHQjU2NSB8IE9WTF9DT05fQllURV9TV0FQOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6
CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0I4ODg7CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4
ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjg4OCB8IE9WTF9DT05fQllURV9TV0FQOwor
CWNhc2UgRFJNX0ZPUk1BVF9SR0JYODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJ
CXJldHVybiBPVkxfQ09OX0NMUkZNVF9BUkdCODg4ODsKKwljYXNlIERSTV9GT1JNQVRfQkdSWDg4
ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRf
QVJHQjg4ODggfCBPVkxfQ09OX0JZVEVfU1dBUDsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6
CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdC
QTg4ODg7CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdS
ODg4ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQkE4ODg4IHwgT1ZMX0NPTl9CWVRFX1NX
QVA7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX2NvbmZpZyhzdHJ1Y3QgbXRr
X2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4LAorCQkJCSBzdHJ1Y3QgbXRrX3BsYW5l
X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3BlbmRpbmdfc3RhdGUgKnBlbmRp
bmcgPSAmc3RhdGUtPnBlbmRpbmc7CisJdW5zaWduZWQgaW50IGFkZHIgPSBwZW5kaW5nLT5hZGRy
OworCXVuc2lnbmVkIGludCBwaXRjaCA9IHBlbmRpbmctPnBpdGNoICYgMHhmZmZmOworCXVuc2ln
bmVkIGludCBmbXQgPSBwZW5kaW5nLT5mb3JtYXQ7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IChw
ZW5kaW5nLT55IDw8IDE2KSB8IHBlbmRpbmctPng7CisJdW5zaWduZWQgaW50IHNyY19zaXplID0g
KHBlbmRpbmctPmhlaWdodCA8PCAxNikgfCBwZW5kaW5nLT53aWR0aDsKKwl1bnNpZ25lZCBpbnQg
Y29uOworCisJaWYgKCFwZW5kaW5nLT5lbmFibGUpCisJCW10a19vdmxfbGF5ZXJfb2ZmKGNvbXAs
IGlkeCk7CisKKwljb24gPSBvdmxfZm10X2NvbnZlcnQoZm10KTsKKwlpZiAoaWR4ICE9IDApCisJ
CWNvbiB8PSBPVkxfQ09OX0FFTiB8IE9WTF9DT05fQUxQSEE7CisKKwl3cml0ZWxfcmVsYXhlZChj
b24sIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfQ09OKGlkeCkpOworCXdyaXRlbF9yZWxheGVk
KHBpdGNoLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1BJVENIKGlkeCkpOworCXdyaXRlbF9y
ZWxheGVkKHNyY19zaXplLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19TSVpFKGlkeCkp
OworCXdyaXRlbF9yZWxheGVkKG9mZnNldCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9PRkZT
RVQoaWR4KSk7CisJd3JpdGVsX3JlbGF4ZWQoYWRkciwgY29tcC0+cmVncyArIERJU1BfUkVHX09W
TF9BRERSKGlkeCkpOworCisJaWYgKHBlbmRpbmctPmVuYWJsZSkKKwkJbXRrX292bF9sYXllcl9v
bihjb21wLCBpZHgpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5j
cyBtdGtfZGlzcF9vdmxfZnVuY3MgPSB7CisJLmNvbmZpZyA9IG10a19vdmxfY29uZmlnLAorCS5z
dGFydCA9IG10a19vdmxfc3RhcnQsCisJLnN0b3AgPSBtdGtfb3ZsX3N0b3AsCisJLmVuYWJsZV92
YmxhbmsgPSBtdGtfb3ZsX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX292
bF9kaXNhYmxlX3ZibGFuaywKKwkubGF5ZXJfb24gPSBtdGtfb3ZsX2xheWVyX29uLAorCS5sYXll
cl9vZmYgPSBtdGtfb3ZsX2xheWVyX29mZiwKKwkubGF5ZXJfY29uZmlnID0gbXRrX292bF9sYXll
cl9jb25maWcsCit9OworCitzdGF0aWMgaW50IG10a19kaXNwX292bF9iaW5kKHN0cnVjdCBkZXZp
Y2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgICB2b2lkICpkYXRhKQorewor
CXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1
Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IG10a19k
ZHBfY29tcF9yZWdpc3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2NvbXApOworCWlmIChyZXQgPCAw
KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudCAlczogJWRc
biIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9
CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX3VuYmluZChzdHJ1
Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCQl2b2lkICpkYXRhKQor
eworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlz
dHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7CisKKwltdGtfZGRwX2NvbXBfdW5yZWdp
c3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0
IGNvbXBvbmVudF9vcHMgbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQJPSBt
dGtfZGlzcF9vdmxfYmluZCwKKwkudW5iaW5kID0gbXRrX2Rpc3Bfb3ZsX3VuYmluZCwKK307CisK
K3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk
ZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2Rp
c3Bfb3ZsICpwcml2OworCWludCBjb21wX2lkOworCWludCBpcnE7CisJaW50IHJldDsKKworCXBy
aXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAo
IXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2
LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCXJldCA9IGRldm1fcmVxdWVz
dF9pcnEoZGV2LCBpcnEsIG10a19kaXNwX292bF9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJUlFG
X1RSSUdHRVJfTk9ORSwgZGV2X25hbWUoZGV2KSwgcHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJ
ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4iLCBpcnEsIHJldCk7
CisJCXJldHVybiByZXQ7CisJfQorCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQoZGV2
LT5vZl9ub2RlLCBNVEtfRElTUF9PVkwpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJy
KGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQly
ZXR1cm4gY29tcF9pZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+
b2Zfbm9kZSwgJnByaXYtPmRkcF9jb21wLCBjb21wX2lkLAorCQkJCSZtdGtfZGlzcF9vdmxfZnVu
Y3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBj
b21wb25lbnQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3Nl
dF9kcnZkYXRhKHBkZXYsIHByaXYpOworCisJcmV0ID0gY29tcG9uZW50X2FkZChkZXYsICZtdGtf
ZGlzcF9vdmxfY29tcG9uZW50X29wcyk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkZXYsICJGYWls
ZWQgdG8gYWRkIGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitz
dGF0aWMgaW50IG10a19kaXNwX292bF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl
dikKK3sKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZtdGtfZGlzcF9vdmxfY29tcG9uZW50
X29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf
aWQgbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAi
bWVkaWF0ZWssbXQ4MTczLWRpc3Atb3ZsIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RB
QkxFKG9mLCBtdGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNoKTsKKworc3RydWN0IHBsYXRmb3Jt
X2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtfZGlzcF9vdmxf
cHJvYmUsCisJLnJlbW92ZQkJPSBtdGtfZGlzcF9vdmxfcmVtb3ZlLAorCS5kcml2ZXIJCT0gewor
CQkubmFtZQk9ICJtZWRpYXRlay1kaXNwLW92bCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAor
CQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9
OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYyBi
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiODBjYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg
KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl
cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4K
KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNp
bmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNp
bmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0
Yy5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JFR19S
RE1BX0lOVF9FTkFCTEUJCTB4MDAwMAorI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMJ
CTB4MDAwNAorI2RlZmluZSBSRE1BX1RBUkdFVF9MSU5FX0lOVAkJCQlCSVQoNSkKKyNkZWZpbmUg
UkRNQV9GSUZPX1VOREVSRkxPV19JTlQJCQkJQklUKDQpCisjZGVmaW5lIFJETUFfRU9GX0FCTk9S
TUFMX0lOVAkJCQlCSVQoMykKKyNkZWZpbmUgUkRNQV9GUkFNRV9FTkRfSU5UCQkJCUJJVCgyKQor
I2RlZmluZSBSRE1BX0ZSQU1FX1NUQVJUX0lOVAkJCQlCSVQoMSkKKyNkZWZpbmUgUkRNQV9SRUdf
VVBEQVRFX0lOVAkJCQlCSVQoMCkKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OCQkw
eDAwMTAKKyNkZWZpbmUgUkRNQV9FTkdJTkVfRU4JCQkJCUJJVCgwKQorI2RlZmluZSBESVNQX1JF
R19SRE1BX1NJWkVfQ09OXzAJCTB4MDAxNAorI2RlZmluZSBESVNQX1JFR19SRE1BX1NJWkVfQ09O
XzEJCTB4MDAxOAorI2RlZmluZSBESVNQX1JFR19SRE1BX1RBUkdFVF9MSU5FCQkweDAwMWMKKyNk
ZWZpbmUgRElTUF9SRUdfUkRNQV9GSUZPX0NPTgkJCTB4MDA0MAorI2RlZmluZSBSRE1BX0ZJRk9f
VU5ERVJGTE9XX0VOCQkJCUJJVCgzMSkKKyNkZWZpbmUgUkRNQV9GSUZPX1BTRVVET19TSVpFKGJ5
dGVzKQkJCSgoKGJ5dGVzKSAvIDE2KSA8PCAxNikKKyNkZWZpbmUgUkRNQV9PVVRQVVRfVkFMSURf
RklGT19USFJFU0hPTEQoYnl0ZXMpCQkoKGJ5dGVzKSAvIDE2KQorCisvKioKKyAqIHN0cnVjdCBt
dGtfZGlzcF9yZG1hIC0gRElTUF9SRE1BIGRyaXZlciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAt
IHN0cnVjdHVyZSBjb250YWluaW5nIHR5cGUgZW51bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisg
KiBAY3J0YyAtIGFzc29jaWF0ZWQgY3J0YyB0byByZXBvcnQgaXJxIGV2ZW50cyB0bworICovCitz
dHJ1Y3QgbXRrX2Rpc3BfcmRtYSB7CisJc3RydWN0IG10a19kZHBfY29tcAkJZGRwX2NvbXA7CisJ
c3RydWN0IGRybV9jcnRjCQkJKmNydGM7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2Rp
c3BfcmRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG10
a19kaXNwX3JkbWEgKnByaXYgPSBkZXZfaWQ7CisJc3RydWN0IG10a19kZHBfY29tcCAqcmRtYSA9
ICZwcml2LT5kZHBfY29tcDsKKworCS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24gaW50ZXJydXB0
ICovCisJd3JpdGVsKDB4MCwgcmRtYS0+cmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7
CisKKwlpZiAoIXByaXYtPmNydGMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCW10a19jcnRjX2Rk
cF9pcnEocHJpdi0+Y3J0YywgcmRtYSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0
YXRpYyB2b2lkIHJkbWFfdXBkYXRlX2JpdHMoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5z
aWduZWQgaW50IHJlZywKKwkJCSAgICAgdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2
YWwpCit7CisJdW5zaWduZWQgaW50IHRtcCA9IHJlYWRsKGNvbXAtPnJlZ3MgKyByZWcpOworCisJ
dG1wID0gKHRtcCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKKwl3cml0ZWwodG1wLCBjb21wLT5y
ZWdzICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfZW5hYmxlX3ZibGFuayhzdHJ1
Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sK
KwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3Qg
bXRrX2Rpc3BfcmRtYSwKKwkJCQkJCSAgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IGNydGM7
CisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUsIFJETUFf
RlJBTUVfRU5EX0lOVCwKKwkJCSBSRE1BX0ZSQU1FX0VORF9JTlQpOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfcmRtYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQorewor
CXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBt
dGtfZGlzcF9yZG1hLAorCQkJCQkJICBkZHBfY29tcCk7CisKKwlwcml2LT5jcnRjID0gTlVMTDsK
KwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSwgUkRNQV9G
UkFNRV9FTkRfSU5ULCAwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfc3RhcnQoc3RydWN0
IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVH
X1JETUFfR0xPQkFMX0NPTiwgUkRNQV9FTkdJTkVfRU4sCisJCQkgUkRNQV9FTkdJTkVfRU4pOwor
fQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp
Cit7CisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04sIFJE
TUFfRU5HSU5FX0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfY29uZmlnKHN0cnVj
dCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCB3aWR0aCwKKwkJCSAgICB1bnNpZ25l
ZCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCit7CisJdW5zaWduZWQgaW50IHRo
cmVzaG9sZDsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBE
SVNQX1JFR19SRE1BX1NJWkVfQ09OXzAsIDB4ZmZmLCB3aWR0aCk7CisJcmRtYV91cGRhdGVfYml0
cyhjb21wLCBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzEsIDB4ZmZmZmYsIGhlaWdodCk7CisKKwkv
KgorCSAqIEVuYWJsZSBGSUZPIHVuZGVyZmxvdyBzaW5jZSBEU0kgYW5kIERQSSBjYW4ndCBiZSBi
bG9ja2VkLgorCSAqIEtlZXAgdGhlIEZJRk8gcHNldWRvIHNpemUgcmVzZXQgZGVmYXVsdCBvZiA4
IEtpQi4gU2V0IHRoZQorCSAqIG91dHB1dCB0aHJlc2hvbGQgdG8gNiBtaWNyb3NlY29uZHMgd2l0
aCA3LzYgb3ZlcmhlYWQgdG8KKwkgKiBhY2NvdW50IGZvciBibGFua2luZywgYW5kIHdpdGggYSBw
aXhlbCBkZXB0aCBvZiA0IGJ5dGVzOgorCSAqLworCXRocmVzaG9sZCA9IHdpZHRoICogaGVpZ2h0
ICogdnJlZnJlc2ggKiA0ICogNyAvIDEwMDAwMDA7CisJcmVnID0gUkRNQV9GSUZPX1VOREVSRkxP
V19FTiB8CisJICAgICAgUkRNQV9GSUZPX1BTRVVET19TSVpFKFNaXzhLKSB8CisJICAgICAgUkRN
QV9PVVRQVVRfVkFMSURfRklGT19USFJFU0hPTEQodGhyZXNob2xkKTsKKwl3cml0ZWwocmVnLCBj
b21wLT5yZWdzICsgRElTUF9SRUdfUkRNQV9GSUZPX0NPTik7Cit9CisKK3N0YXRpYyBjb25zdCBz
dHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIG10a19kaXNwX3JkbWFfZnVuY3MgPSB7CisJLmNvbmZp
ZyA9IG10a19yZG1hX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfcmRtYV9zdGFydCwKKwkuc3RvcCA9
IG10a19yZG1hX3N0b3AsCisJLmVuYWJsZV92YmxhbmsgPSBtdGtfcmRtYV9lbmFibGVfdmJsYW5r
LAorCS5kaXNhYmxlX3ZibGFuayA9IG10a19yZG1hX2Rpc2FibGVfdmJsYW5rLAorfTsKKworc3Rh
dGljIGludCBtdGtfZGlzcF9yZG1hX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2
aWNlICptYXN0ZXIsCisJCQkgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZGlzcF9y
ZG1hICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRy
bV9kZXYgPSBkYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIo
ZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byByZWdpc3RlciBjb21wb25lbnQgJXM6ICVkXG4iLAorCQkJZGV2LT5vZl9u
b2RlLT5mdWxsX25hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CisK
K30KKworc3RhdGljIHZvaWQgbXRrX2Rpc3BfcmRtYV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2
LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkJIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10
a19kaXNwX3JkbWEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rl
dmljZSAqZHJtX2RldiA9IGRhdGE7CisKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm1fZGV2
LCAmcHJpdi0+ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9v
cHMgbXRrX2Rpc3BfcmRtYV9jb21wb25lbnRfb3BzID0geworCS5iaW5kCT0gbXRrX2Rpc3BfcmRt
YV9iaW5kLAorCS51bmJpbmQgPSBtdGtfZGlzcF9yZG1hX3VuYmluZCwKK307CisKK3N0YXRpYyBp
bnQgbXRrX2Rpc3BfcmRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor
CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kaXNwX3JkbWEg
KnByaXY7CisJaW50IGNvbXBfaWQ7CisJaW50IGlycTsKKwlpbnQgcmV0OworCisJcHJpdiA9IGRl
dm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikK
KwkJcmV0dXJuIC1FTk9NRU07CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwor
CWlmIChpcnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9n
ZXRfaWQoZGV2LT5vZl9ub2RlLCBNVEtfRElTUF9SRE1BKTsKKwlpZiAoY29tcF9pZCA8IDApIHsK
KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21w
X2lkKTsKKwkJcmV0dXJuIGNvbXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQo
ZGV2LCBkZXYtPm9mX25vZGUsICZwcml2LT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkmbXRrX2Rp
c3BfcmRtYV9mdW5jcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBp
bml0aWFsaXplIGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ
LyogRGlzYWJsZSBhbmQgY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJd3JpdGVsKDB4MCwg
cHJpdi0+ZGRwX2NvbXAucmVncyArIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSk7CisJd3JpdGVs
KDB4MCwgcHJpdi0+ZGRwX2NvbXAucmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7CisK
KwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBtdGtfZGlzcF9yZG1hX2lycV9oYW5k
bGVyLAorCQkJICAgICAgIElSUUZfVFJJR0dFUl9OT05FLCBkZXZfbmFtZShkZXYpLCBwcml2KTsK
KwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGlycSAl
ZDogJWRcbiIsIGlycSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRf
ZHJ2ZGF0YShwZGV2LCBwcml2KTsKKworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAmbXRrX2Rp
c3BfcmRtYV9jb21wb25lbnRfb3BzKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRldiwgIkZhaWxl
ZCB0byBhZGQgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0
YXRpYyBpbnQgbXRrX2Rpc3BfcmRtYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl
dikKK3sKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZtdGtfZGlzcF9yZG1hX2NvbXBvbmVu
dF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl
X2lkIG10a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9
ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1yZG1hIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNF
X1RBQkxFKG9mLCBtdGtfZGlzcF9yZG1hX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0
Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kaXNw
X3JkbWFfcHJvYmUsCisJLnJlbW92ZQkJPSBtdGtfZGlzcF9yZG1hX3JlbW92ZSwKKwkuZHJpdmVy
CQk9IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZGlzcC1yZG1hIiwKKwkJLm93bmVyCT0gVEhJU19N
T0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNo
LAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f
Y3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOTVmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKQEAgLTAsMCArMSw1ODIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YXNtL2Jh
cnJpZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj
X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk
cm0vZHJtX3BsYW5lX2hlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUg
PGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxzb2MvbWVkaWF0ZWsvc21pLmg+CisKKyNp
bmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1
ZGUgIm10a19kcm1fZGRwLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1
ZGUgIm10a19kcm1fZ2VtLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisvKioKKyAq
IHN0cnVjdCBtdGtfZHJtX2NydGMgLSBNZWRpYVRlayBzcGVjaWZpYyBjcnRjIHN0cnVjdHVyZS4K
KyAqIEBiYXNlOiBjcnRjIG9iamVjdC4KKyAqIEBlbmFibGVkOiByZWNvcmRzIHdoZXRoZXIgY3J0
Y19lbmFibGUgc3VjY2VlZGVkCisgKiBAcGxhbmVzOiBhcnJheSBvZiA0IG10a19kcm1fcGxhbmUg
c3RydWN0dXJlcywgb25lIGZvciBlYWNoIG92ZXJsYXkgcGxhbmUKKyAqIEBwZW5kaW5nX3BsYW5l
czogd2hldGhlciBhbnkgcGxhbmUgaGFzIHBlbmRpbmcgY2hhbmdlcyB0byBiZSBhcHBsaWVkCisg
KiBAY29uZmlnX3JlZ3M6IG1lbW9yeSBtYXBwZWQgbW1zeXMgY29uZmlndXJhdGlvbiByZWdpc3Rl
ciBzcGFjZQorICogQG11dGV4OiBoYW5kbGUgdG8gb25lIG9mIHRoZSB0ZW4gZGlzcF9tdXRleCBz
dHJlYW1zCisgKiBAZGRwX2NvbXBfbnI6IG51bWJlciBvZiBjb21wb25lbnRzIGluIGRkcF9jb21w
CisgKiBAZGRwX2NvbXA6IGFycmF5IG9mIHBvaW50ZXJzIHRoZSBtdGtfZGRwX2NvbXAgc3RydWN0
dXJlcyB1c2VkIGJ5IHRoaXMgY3J0YworICovCitzdHJ1Y3QgbXRrX2RybV9jcnRjIHsKKwlzdHJ1
Y3QgZHJtX2NydGMJCQliYXNlOworCWJvb2wJCQkJZW5hYmxlZDsKKworCWJvb2wJCQkJcGVuZGlu
Z19uZWVkc192Ymxhbms7CisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudAkqZXZlbnQ7
CisKKwlzdHJ1Y3QgbXRrX2RybV9wbGFuZQkJcGxhbmVzW09WTF9MQVlFUl9OUl07CisJYm9vbAkJ
CQlwZW5kaW5nX3BsYW5lczsKKworCXZvaWQgX19pb21lbQkJCSpjb25maWdfcmVnczsKKwlzdHJ1
Y3QgbXRrX2Rpc3BfbXV0ZXgJCSptdXRleDsKKwl1bnNpZ25lZCBpbnQJCQlkZHBfY29tcF9ucjsK
KwlzdHJ1Y3QgbXRrX2RkcF9jb21wCQkqKmRkcF9jb21wOworfTsKKworc3RydWN0IG10a19jcnRj
X3N0YXRlIHsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUJCWJhc2U7CisKKwlib29sCQkJCXBlbmRp
bmdfY29uZmlnOworCXVuc2lnbmVkIGludAkJCXBlbmRpbmdfd2lkdGg7CisJdW5zaWduZWQgaW50
CQkJcGVuZGluZ19oZWlnaHQ7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ192cmVmcmVzaDsKK307
CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19kcm1fY3J0YyAqdG9fbXRrX2NydGMoc3RydWN0
IGRybV9jcnRjICpjKQoreworCXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IG10a19kcm1f
Y3J0YywgYmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19jcnRjX3N0YXRlICp0
b19tdGtfY3J0Y19zdGF0ZShzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnMpCit7CisJcmV0dXJuIGNv
bnRhaW5lcl9vZihzLCBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUsIGJhc2UpOworfQorCitzdGF0aWMg
dm9pZCBtdGtfZHJtX2NydGNfZmluaXNoX3BhZ2VfZmxpcChzdHJ1Y3QgbXRrX2RybV9jcnRjICpt
dGtfY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmbXRrX2NydGMtPmJhc2U7CisJ
dW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcnRjLT5kZXYtPmV2
ZW50X2xvY2ssIGZsYWdzKTsKKwlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBtdGtf
Y3J0Yy0+ZXZlbnQpOworCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CisJbXRrX2NydGMtPmV2
ZW50ID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcnRjLT5kZXYtPmV2ZW50X2xv
Y2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9maW5pc2hfcGFnZV9mbGlwKHN0
cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCWRybV9jcnRjX2hhbmRsZV92Ymxhbmso
Jm10a19jcnRjLT5iYXNlKTsKKwlpZiAobXRrX2NydGMtPnBlbmRpbmdfbmVlZHNfdmJsYW5rKSB7
CisJCW10a19kcm1fY3J0Y19maW5pc2hfcGFnZV9mbGlwKG10a19jcnRjKTsKKwkJbXRrX2NydGMt
PnBlbmRpbmdfbmVlZHNfdmJsYW5rID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtf
ZHJtX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19k
cm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlpbnQgaTsKKworCWZvciAo
aSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJY2xrX3VucHJlcGFyZSht
dGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisKKwltdGtfZGlzcF9tdXRleF9wdXQobXRrX2Ny
dGMtPm11dGV4KTsKKworCWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19kcm1fY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10
a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCWlmIChjcnRjLT5zdGF0ZSkgeworCQlpZiAoY3J0Yy0+
c3RhdGUtPm1vZGVfYmxvYikKKwkJCWRybV9wcm9wZXJ0eV91bnJlZmVyZW5jZV9ibG9iKGNydGMt
PnN0YXRlLT5tb2RlX2Jsb2IpOworCisJCXN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+
c3RhdGUpOworCQltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKwl9IGVsc2Ugewor
CQlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0
YXRlKQorCQkJcmV0dXJuOworCQljcnRjLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsKKwl9CisKKwlz
dGF0ZS0+YmFzZS5jcnRjID0gY3J0YzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19zdGF0
ZSAqbXRrX2RybV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7
CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga3phbGxvYyhzaXpl
b2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisK
KwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKGNydGMsICZzdGF0ZS0+
YmFzZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLmNydGMgIT0gY3J0Yyk7CisJc3RhdGUtPmJh
c2UuY3J0YyA9IGNydGM7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNlOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfZHJtX2NydGNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJ
ICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJX19kcm1fYXRvbWljX2hl
bHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoY3J0Yywgc3RhdGUpOworCWtmcmVlKHRvX210a19jcnRj
X3N0YXRlKHN0YXRlKSk7Cit9CisKK3N0YXRpYyBib29sIG10a19kcm1fY3J0Y19tb2RlX2ZpeHVw
KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5
X21vZGUgKm1vZGUsCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9t
b2RlKQoreworCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSwgYnV0IHRoaXMgY2FsbGJhY2sgaXMgbWFu
ZGF0b3J5LiAqLworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNf
bW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19jcnRj
X3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKworCXN0YXRl
LT5wZW5kaW5nX3dpZHRoID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKKwlzdGF0ZS0+cGVuZGluZ19o
ZWlnaHQgPSBjcnRjLT5tb2RlLnZkaXNwbGF5OworCXN0YXRlLT5wZW5kaW5nX3ZyZWZyZXNoID0g
Y3J0Yy0+bW9kZS52cmVmcmVzaDsKKwl3bWIoKTsJLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBwYXJh
bWV0ZXJzIGFyZSBzZXQgYmVmb3JlIHVwZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nX2NvbmZpZyA9
IHRydWU7Cit9CisKK2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2Rl
dmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRl
ICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0
YyA9IHRvX210a19jcnRjKHByaXYtPmNydGNbcGlwZV0pOworCXN0cnVjdCBtdGtfZGRwX2NvbXAg
Km92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKworCW10a19kZHBfY29tcF9lbmFibGVfdmJs
YW5rKG92bCwgJm10a19jcnRjLT5iYXNlKTsKKworCXJldHVybiAwOworfQorCit2b2lkIG10a19k
cm1fY3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBp
bnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZfcHJp
dmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKHByaXYt
PmNydGNbcGlwZV0pOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBf
Y29tcFswXTsKKworCW10a19kZHBfY29tcF9kaXNhYmxlX3ZibGFuayhvdmwpOworfQorCitzdGF0
aWMgaW50IG10a19jcnRjX2RkcF9jbGtfZW5hYmxlKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19j
cnRjKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwg
X19mdW5jX18pOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykg
eworCQlyZXQgPSBjbGtfZW5hYmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKKwkJaWYg
KHJldCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNsb2NrICVkOiAlZFxuIiwg
aSwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJd2hp
bGUgKC0taSA+PSAwKQorCQljbGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7
CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX2Nsa19kaXNhYmxl
KHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCWludCBpOworCisJRFJNX0RFQlVH
X0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRk
cF9jb21wX25yOyBpKyspCisJCWNsa19kaXNhYmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xr
KTsKK30KKworc3RhdGljIGludCBtdGtfY3J0Y19kZHBfaHdfaW5pdChzdHJ1Y3QgbXRrX2RybV9j
cnRjICptdGtfY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmbXRrX2NydGMtPmJh
c2U7CisJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQsIHZyZWZyZXNoOworCWludCByZXQ7CisJ
aW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWlmIChXQVJO
X09OKCFjcnRjLT5zdGF0ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJd2lkdGggPSBjcnRjLT5z
dGF0ZS0+YWRqdXN0ZWRfbW9kZS5oZGlzcGxheTsKKwloZWlnaHQgPSBjcnRjLT5zdGF0ZS0+YWRq
dXN0ZWRfbW9kZS52ZGlzcGxheTsKKwl2cmVmcmVzaCA9IGNydGMtPnN0YXRlLT5hZGp1c3RlZF9t
b2RlLnZyZWZyZXNoOworCisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhjcnRjLT5kZXYtPmRl
dik7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIHBvd2Vy
IGRvbWFpbjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbXRrX2Rp
c3BfbXV0ZXhfcHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgpOworCWlmIChyZXQgPCAwKSB7CisJCURS
TV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBtdXRleCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdv
dG8gZXJyX3BtX3J1bnRpbWVfcHV0OworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9jbGtfZW5h
YmxlKG10a19jcnRjKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBl
bmFibGUgY29tcG9uZW50IGNsb2NrczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX211dGV4X3Vu
cHJlcGFyZTsKKwl9CisKKwlEUk1fREVCVUdfRFJJVkVSKCJtZWRpYXRla19kZHBfZGRwX3BhdGhf
c2V0dXBcbiIpOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnIgLSAxOyBp
KyspIHsKKwkJbXRrX2RkcF9hZGRfY29tcF90b19wYXRoKG10a19jcnRjLT5jb25maWdfcmVncywK
KwkJCQkJIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQsCisJCQkJCSBtdGtfY3J0Yy0+ZGRwX2Nv
bXBbaSArIDFdLT5pZCk7CisJCW10a19kaXNwX211dGV4X2FkZF9jb21wKG10a19jcnRjLT5tdXRl
eCwKKwkJCQkJbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJfQorCW10a19kaXNwX211dGV4
X2FkZF9jb21wKG10a19jcnRjLT5tdXRleCwgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJ
bXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKG10a19jcnRjLT5tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBp
IDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJc3RydWN0IG10a19kZHBfY29tcCAq
Y29tcCA9IG10a19jcnRjLT5kZHBfY29tcFtpXTsKKworCQltdGtfZGRwX2NvbXBfY29uZmlnKGNv
bXAsIHdpZHRoLCBoZWlnaHQsIHZyZWZyZXNoKTsKKwkJbXRrX2RkcF9jb21wX3N0YXJ0KGNvbXAp
OworCX0KKworCS8qIEluaXRpYWxseSBjb25maWd1cmUgYWxsIHBsYW5lcyAqLworCWZvciAoaSA9
IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9
ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBs
YW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5z
dGF0ZSk7CisJCW10a19kZHBfY29tcF9sYXllcl9jb25maWcobXRrX2NydGMtPmRkcF9jb21wWzBd
LCBpLAorCQkJCQkgIHBsYW5lX3N0YXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX211dGV4
X3VucHJlcGFyZToKKwltdGtfZGlzcF9tdXRleF91bnByZXBhcmUobXRrX2NydGMtPm11dGV4KTsK
K2Vycl9wbV9ydW50aW1lX3B1dDoKKwlwbV9ydW50aW1lX3B1dChjcnRjLT5kZXYtPmRldik7CisJ
cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX2h3X2Zpbmkoc3RydWN0
IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IG10
a19jcnRjLT5iYXNlLmRldjsKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBf
X2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQor
CQltdGtfZGRwX2NvbXBfc3RvcChtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0pOworCWZvciAoaSA9IDA7
IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJbXRrX2Rpc3BfbXV0ZXhfcmVtb3Zl
X2NvbXAobXRrX2NydGMtPm11dGV4LAorCQkJCQkgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlk
KTsKKwltdGtfZGlzcF9tdXRleF9kaXNhYmxlKG10a19jcnRjLT5tdXRleCk7CisJZm9yIChpID0g
MDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7IGkrKykgeworCQltdGtfZGRwX3JlbW92
ZV9jb21wX2Zyb21fcGF0aChtdGtfY3J0Yy0+Y29uZmlnX3JlZ3MsCisJCQkJCSAgICAgIG10a19j
cnRjLT5kZHBfY29tcFtpXS0+aWQsCisJCQkJCSAgICAgIG10a19jcnRjLT5kZHBfY29tcFtpICsg
MV0tPmlkKTsKKwkJbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LAor
CQkJCQkgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwl9CisJbXRrX2Rpc3BfbXV0ZXhf
cmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LCBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsK
KwltdGtfY3J0Y19kZHBfY2xrX2Rpc2FibGUobXRrX2NydGMpOworCW10a19kaXNwX211dGV4X3Vu
cHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgpOworCisJcG1fcnVudGltZV9wdXQoZHJtLT5kZXYpOwor
fQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0
YykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMp
OworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKwlp
bnQgcmV0OworCisJRFJNX0RFQlVHX0RSSVZFUigiJXMgJWRcbiIsIF9fZnVuY19fLCBjcnRjLT5i
YXNlLmlkKTsKKworCXJldCA9IG10a19zbWlfbGFyYl9nZXQob3ZsLT5sYXJiX2Rldik7CisJaWYg
KHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgbGFyYjogJWRcbiIsIHJldCk7CisJ
CXJldHVybjsKKwl9CisKKwlyZXQgPSBtdGtfY3J0Y19kZHBfaHdfaW5pdChtdGtfY3J0Yyk7CisJ
aWYgKHJldCkgeworCQltdGtfc21pX2xhcmJfcHV0KG92bC0+bGFyYl9kZXYpOworCQlyZXR1cm47
CisJfQorCisJZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOworCW10a19jcnRjLT5lbmFibGVkID0g
dHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9j
cnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2Ny
dGMoY3J0Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21w
WzBdOworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXMgJWRcbiIsIF9fZnVuY19fLCBj
cnRjLT5iYXNlLmlkKTsKKwlpZiAoIW10a19jcnRjLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwkv
KiBTZXQgYWxsIHBlbmRpbmcgcGxhbmUgc3RhdGUgdG8gZGlzYWJsZWQgKi8KKwlmb3IgKGkgPSAw
OyBpIDwgT1ZMX0xBWUVSX05SOyBpKyspIHsKKwkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAm
bXRrX2NydGMtPnBsYW5lc1tpXS5iYXNlOworCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFu
ZV9zdGF0ZTsKKworCQlwbGFuZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3Rh
dGUpOworCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBmYWxzZTsKKwkJcGxhbmVfc3Rh
dGUtPnBlbmRpbmcuY29uZmlnID0gdHJ1ZTsKKwl9CisJbXRrX2NydGMtPnBlbmRpbmdfcGxhbmVz
ID0gdHJ1ZTsKKworCS8qIFdhaXQgZm9yIHBsYW5lcyB0byBiZSBkaXNhYmxlZCAqLworCWRybV9j
cnRjX3dhaXRfb25lX3ZibGFuayhjcnRjKTsKKworCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7
CisJbXRrX2NydGNfZGRwX2h3X2ZpbmkobXRrX2NydGMpOworCW10a19zbWlfbGFyYl9wdXQob3Zs
LT5sYXJiX2Rldik7CisKKwltdGtfY3J0Yy0+ZW5hYmxlZCA9IGZhbHNlOworfQorCitzdGF0aWMg
dm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJ
CQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0cnVj
dCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7
CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwor
CWlmIChtdGtfY3J0Yy0+ZXZlbnQgJiYgc3RhdGUtPmJhc2UuZXZlbnQpCisJCURSTV9FUlJPUigi
bmV3IGV2ZW50IHdoaWxlIHRoZXJlIGlzIHN0aWxsIGEgcGVuZGluZyBldmVudFxuIik7CisKKwlp
ZiAoc3RhdGUtPmJhc2UuZXZlbnQpIHsKKwkJc3RhdGUtPmJhc2UuZXZlbnQtPnBpcGUgPSBkcm1f
Y3J0Y19pbmRleChjcnRjKTsKKwkJV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpICE9
IDApOworCQltdGtfY3J0Yy0+ZXZlbnQgPSBzdGF0ZS0+YmFzZS5ldmVudDsKKwkJc3RhdGUtPmJh
c2UuZXZlbnQgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2F0b21p
Y19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAgc3RydWN0IGRybV9jcnRj
X3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0
YyA9IHRvX210a19jcnRjKGNydGMpOworCXVuc2lnbmVkIGludCBwZW5kaW5nX3BsYW5lcyA9IDA7
CisJaW50IGk7CisKKwlpZiAobXRrX2NydGMtPmV2ZW50KQorCQltdGtfY3J0Yy0+cGVuZGluZ19u
ZWVkc192YmxhbmsgPSB0cnVlOworCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykg
eworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7
CisJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRl
ID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJCWlmIChwbGFuZV9zdGF0ZS0+
cGVuZGluZy5kaXJ0eSkgeworCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0gdHJ1ZTsK
KwkJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmRpcnR5ID0gZmFsc2U7CisJCQlwZW5kaW5nX3BsYW5l
cyB8PSBCSVQoaSk7CisJCX0KKwl9CisJaWYgKHBlbmRpbmdfcGxhbmVzKQorCQltdGtfY3J0Yy0+
cGVuZGluZ19wbGFuZXMgPSB0cnVlOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRj
X2Z1bmNzIG10a19jcnRjX2Z1bmNzID0geworCS5zZXRfY29uZmlnCQk9IGRybV9hdG9taWNfaGVs
cGVyX3NldF9jb25maWcsCisJLnBhZ2VfZmxpcAkJPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2Zs
aXAsCisJLmRlc3Ryb3kJCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3ksCisJLnJlc2V0CQkJPSBtdGtf
ZHJtX2NydGNfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUJPSBtdGtfZHJtX2NydGNf
ZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IG10a19kcm1fY3J0Y19k
ZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJf
ZnVuY3MgbXRrX2NydGNfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVwCT0gbXRrX2RybV9j
cnRjX21vZGVfZml4dXAsCisJLm1vZGVfc2V0X25vZmIJPSBtdGtfZHJtX2NydGNfbW9kZV9zZXRf
bm9mYiwKKwkuZW5hYmxlCQk9IG10a19kcm1fY3J0Y19lbmFibGUsCisJLmRpc2FibGUJPSBtdGtf
ZHJtX2NydGNfZGlzYWJsZSwKKwkuYXRvbWljX2JlZ2luCT0gbXRrX2RybV9jcnRjX2F0b21pY19i
ZWdpbiwKKwkuYXRvbWljX2ZsdXNoCT0gbXRrX2RybV9jcnRjX2F0b21pY19mbHVzaCwKK307CisK
K3N0YXRpYyBpbnQgbXRrX2RybV9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKKwkJ
CSAgICAgc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMsCisJCQkgICAgIHN0cnVjdCBkcm1f
cGxhbmUgKnByaW1hcnksCisJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmUgKmN1cnNvciwgdW5zaWdu
ZWQgaW50IHBpcGUpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9w
bGFuZXMoZHJtLCAmbXRrX2NydGMtPmJhc2UsIHByaW1hcnksIGN1cnNvciwKKwkJCQkJJm10a19j
cnRjX2Z1bmNzLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jbGVhbnVwX2NydGM7CisK
Kwlkcm1fY3J0Y19oZWxwZXJfYWRkKCZtdGtfY3J0Yy0+YmFzZSwgJm10a19jcnRjX2hlbHBlcl9m
dW5jcyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2NsZWFudXBfY3J0YzoKKwlkcm1fY3J0Y19jbGVh
bnVwKCZtdGtfY3J0Yy0+YmFzZSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBtdGtfY3J0Y19k
ZHBfaXJxKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IG10a19kZHBfY29tcCAqb3ZsKQor
eworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJ
c3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKG10a19jcnRj
LT5iYXNlLnN0YXRlKTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qCisJICogVE9ETzogaW5zdGVh
ZCBvZiB1cGRhdGluZyB0aGUgcmVnaXN0ZXJzIGhlcmUsIHdlIHNob3VsZCBwcmVwYXJlCisJICog
d29ya2luZyByZWdpc3RlcnMgaW4gYXRvbWljX2NvbW1pdCBhbmQgbGV0IHRoZSBoYXJkd2FyZSBj
b21tYW5kCisJICogcXVldWUgdXBkYXRlIG1vZHVsZSByZWdpc3RlcnMgb24gdmJsYW5rLgorCSAq
LworCWlmIChzdGF0ZS0+cGVuZGluZ19jb25maWcpIHsKKwkJbXRrX2RkcF9jb21wX2NvbmZpZyhv
dmwsIHN0YXRlLT5wZW5kaW5nX3dpZHRoLAorCQkJCSAgICBzdGF0ZS0+cGVuZGluZ19oZWlnaHQs
CisJCQkJICAgIHN0YXRlLT5wZW5kaW5nX3ZyZWZyZXNoKTsKKworCQlzdGF0ZS0+cGVuZGluZ19j
b25maWcgPSBmYWxzZTsKKwl9CisKKwlpZiAobXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzKSB7CisJ
CWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQkJc3RydWN0IGRybV9wbGFu
ZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXS5iYXNlOworCQkJc3RydWN0IG10a19wbGFu
ZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0
YXRlKHBsYW5lLT5zdGF0ZSk7CisKKwkJCWlmIChwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcp
IHsKKwkJCQltdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKG92bCwgaSwgcGxhbmVfc3RhdGUpOwor
CQkJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZpZyA9IGZhbHNlOworCQkJfQorCQl9CisJCW10
a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IGZhbHNlOworCX0KKworCW10a19kcm1fZmluaXNoX3Bh
Z2VfZmxpcChtdGtfY3J0Yyk7Cit9CisKK2ludCBtdGtfZHJtX2NydGNfY3JlYXRlKHN0cnVjdCBk
cm1fZGV2aWNlICpkcm1fZGV2LAorCQkJY29uc3QgZW51bSBtdGtfZGRwX2NvbXBfaWQgKnBhdGgs
IHVuc2lnbmVkIGludCBwYXRoX2xlbikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2
ID0gZHJtX2Rldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHJtX2Rldi0+
ZGV2OworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjOworCWVudW0gZHJtX3BsYW5lX3R5
cGUgdHlwZTsKKwl1bnNpZ25lZCBpbnQgenBvczsKKwlpbnQgcGlwZSA9IHByaXYtPm51bV9waXBl
czsKKwlpbnQgcmV0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBhdGhfbGVuOyBpKysp
IHsKKwkJZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCA9IHBhdGhbaV07CisJCXN0cnVjdCBk
ZXZpY2Vfbm9kZSAqbm9kZTsKKworCQlub2RlID0gcHJpdi0+Y29tcF9ub2RlW2NvbXBfaWRdOwor
CQlpZiAoIW5vZGUpIHsKKwkJCWRldl9pbmZvKGRldiwKKwkJCQkgIk5vdCBjcmVhdGluZyBjcnRj
ICVkIGJlY2F1c2UgY29tcG9uZW50ICVkIGlzIGRpc2FibGVkIG9yIG1pc3NpbmdcbiIsCisJCQkJ
IHBpcGUsIGNvbXBfaWQpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwltdGtfY3J0YyA9IGRl
dm1fa3phbGxvYyhkZXYsIHNpemVvZigqbXRrX2NydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10
a19jcnRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW10a19jcnRjLT5jb25maWdfcmVncyA9IHBy
aXYtPmNvbmZpZ19yZWdzOworCW10a19jcnRjLT5kZHBfY29tcF9uciA9IHBhdGhfbGVuOworCW10
a19jcnRjLT5kZHBfY29tcCA9IGRldm1fa21hbGxvY19hcnJheShkZXYsIG10a19jcnRjLT5kZHBf
Y29tcF9uciwKKwkJCQkJCXNpemVvZigqbXRrX2NydGMtPmRkcF9jb21wKSwKKwkJCQkJCUdGUF9L
RVJORUwpOworCisJbXRrX2NydGMtPm11dGV4ID0gbXRrX2Rpc3BfbXV0ZXhfZ2V0KHByaXYtPm11
dGV4X2RldiwgcGlwZSk7CisJaWYgKElTX0VSUihtdGtfY3J0Yy0+bXV0ZXgpKSB7CisJCXJldCA9
IFBUUl9FUlIobXRrX2NydGMtPm11dGV4KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0
IG11dGV4OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBp
IDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJZW51bSBtdGtfZGRwX2NvbXBfaWQg
Y29tcF9pZCA9IHBhdGhbaV07CisJCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXA7CisJCXN0cnVj
dCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCQlub2RlID0gcHJpdi0+Y29tcF9ub2RlW2NvbXBfaWRd
OworCQljb21wID0gcHJpdi0+ZGRwX2NvbXBbY29tcF9pZF07CisJCWlmICghY29tcCkgeworCQkJ
ZGV2X2VycihkZXYsICJDb21wb25lbnQgJXMgbm90IGluaXRpYWxpemVkXG4iLAorCQkJCW5vZGUt
PmZ1bGxfbmFtZSk7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byB1bnByZXBhcmU7CisJCX0K
KworCQlyZXQgPSBjbGtfcHJlcGFyZShjb21wLT5jbGspOworCQlpZiAocmV0KSB7CisJCQlkZXZf
ZXJyKGRldiwKKwkJCQkiRmFpbGVkIHRvIHByZXBhcmUgY2xvY2sgZm9yIGNvbXBvbmVudCAlczog
JWRcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lLCByZXQpOworCQkJZ290byB1bnByZXBhcmU7CisJ
CX0KKworCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0gPSBjb21wOworCX0KKworCWZvciAoenBvcyA9
IDA7IHpwb3MgPCBPVkxfTEFZRVJfTlI7IHpwb3MrKykgeworCQl0eXBlID0gKHpwb3MgPT0gMCkg
PyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDoKKwkJCQkoenBvcyA9PSAxKSA/IERSTV9QTEFORV9U
WVBFX0NVUlNPUiA6CisJCQkJCQlEUk1fUExBTkVfVFlQRV9PVkVSTEFZOworCQlyZXQgPSBtdGtf
cGxhbmVfaW5pdChkcm1fZGV2LCAmbXRrX2NydGMtPnBsYW5lc1t6cG9zXSwKKwkJCQkgICAgIEJJ
VChwaXBlKSwgdHlwZSwgenBvcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVucHJlcGFyZTsKKwl9
CisKKwlyZXQgPSBtdGtfZHJtX2NydGNfaW5pdChkcm1fZGV2LCBtdGtfY3J0YywgJm10a19jcnRj
LT5wbGFuZXNbMF0uYmFzZSwKKwkJCQkmbXRrX2NydGMtPnBsYW5lc1sxXS5iYXNlLCBwaXBlKTsK
KwlpZiAocmV0IDwgMCkKKwkJZ290byB1bnByZXBhcmU7CisKKwlwcml2LT5jcnRjW3BpcGVdID0g
Jm10a19jcnRjLT5iYXNlOworCXByaXYtPm51bV9waXBlcysrOworCisJcmV0dXJuIDA7CisKK3Vu
cHJlcGFyZToKKwl3aGlsZSAoLS1pID49IDApCisJCWNsa191bnByZXBhcmUobXRrX2NydGMtPmRk
cF9jb21wW2ldLT5jbGspOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2NydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWU1
NTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f
Y3J0Yy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFU
ZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqLworCisjaWZuZGVmIE1US19EUk1fQ1JUQ19ICisjZGVmaW5lIE1US19EUk1fQ1JUQ19ICisK
KyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgi
CisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisjZGVmaW5lIE9WTF9MQVlFUl9OUgk0CisK
K2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1
bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1
Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1fY3J0
Y19jaGVja19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwordm9pZCBtdGtfZHJtX2NydGNf
Y29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lkIG10a19jcnRjX2RkcF9pcnEoc3Ry
dWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwpOworaW50IG10a19k
cm1fY3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCisJCQljb25zdCBlbnVt
IG10a19kZHBfY29tcF9pZCAqcGF0aCwKKwkJCXVuc2lnbmVkIGludCBwYXRoX2xlbik7CisKKyNl
bmRpZiAvKiBNVEtfRFJNX0NSVENfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kcm1fZGRwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k
ZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2JhOTM1NQotLS0gL2Rl
di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jCkBAIC0w
LDAgKzEsMzUzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAq
CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lu
Y2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg
PGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgor
I2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKKyNp
bmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJ
U1BfT1ZMMF9NT1VUX0VOCTB4MDQwCisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX09WTDFf
TU9VVF9FTgkweDA0NAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9PRF9NT1VUX0VOCQkw
eDA0OAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9HQU1NQV9NT1VUX0VOCTB4MDRjCisj
ZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX1VGT0VfTU9VVF9FTgkweDA1MAorI2RlZmluZSBE
SVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjBfU0VMX0lOCTB4MDg0CisjZGVmaW5lIERJU1BfUkVH
X0NPTkZJR19ESVNQX0NPTE9SMV9TRUxfSU4JMHgwODgKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklH
X0RQSV9TRUxfSU4JCTB4MGFjCisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUExX01P
VVRfRU4JMHgwYzgKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX01NU1lTX0NHX0NPTjAJCTB4MTAw
CisKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhfRU4obikJKDB4MjAgKyAweDIwICogKG4pKQorI2Rl
ZmluZSBESVNQX1JFR19NVVRFWF9SU1QobikJKDB4MjggKyAweDIwICogKG4pKQorI2RlZmluZSBE
SVNQX1JFR19NVVRFWF9NT0QobikJKDB4MmMgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JF
R19NVVRFWF9TT0YobikJKDB4MzAgKyAweDIwICogKG4pKQorCisjZGVmaW5lIE1VVEVYX01PRF9E
SVNQX09WTDAJCUJJVCgxMSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT1ZMMQkJQklUKDEyKQor
I2RlZmluZSBNVVRFWF9NT0RfRElTUF9SRE1BMAkJQklUKDEzKQorI2RlZmluZSBNVVRFWF9NT0Rf
RElTUF9SRE1BMQkJQklUKDE0KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9SRE1BMgkJQklUKDE1
KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9XRE1BMAkJQklUKDE2KQorI2RlZmluZSBNVVRFWF9N
T0RfRElTUF9XRE1BMQkJQklUKDE3KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9DT0xPUjAJCUJJ
VCgxOCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQ09MT1IxCQlCSVQoMTkpCisjZGVmaW5lIE1V
VEVYX01PRF9ESVNQX0FBTAkJQklUKDIwKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9HQU1NQQkJ
QklUKDIxKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9VRk9FCQlCSVQoMjIpCisjZGVmaW5lIE1V
VEVYX01PRF9ESVNQX1BXTTAJCUJJVCgyMykKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUFdNMQkJ
QklUKDI0KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9PRAkJQklUKDI1KQorCisjZGVmaW5lIE1V
VEVYX1NPRl9TSU5HTEVfTU9ERQkJMAorI2RlZmluZSBNVVRFWF9TT0ZfRFNJMAkJCTEKKyNkZWZp
bmUgTVVURVhfU09GX0RTSTEJCQkyCisjZGVmaW5lIE1VVEVYX1NPRl9EUEkwCQkJMworCisjZGVm
aW5lIE9WTDBfTU9VVF9FTl9DT0xPUjAJCTB4MQorI2RlZmluZSBPRF9NT1VUX0VOX1JETUEwCQkw
eDEKKyNkZWZpbmUgVUZPRV9NT1VUX0VOX0RTSTAJCTB4MQorI2RlZmluZSBDT0xPUjBfU0VMX0lO
X09WTDAJCTB4MQorI2RlZmluZSBPVkwxX01PVVRfRU5fQ09MT1IxCQkweDEKKyNkZWZpbmUgR0FN
TUFfTU9VVF9FTl9SRE1BMQkJMHgxCisjZGVmaW5lIFJETUExX01PVVRfRFBJMAkJCTB4MgorI2Rl
ZmluZSBEUEkwX1NFTF9JTl9SRE1BMQkJMHgxCisjZGVmaW5lIENPTE9SMV9TRUxfSU5fT1ZMMQkJ
MHgxCisKK3N0cnVjdCBtdGtfZGlzcF9tdXRleCB7CisJaW50IGlkOworCWJvb2wgY2xhaW1lZDsK
K307CisKK3N0cnVjdCBtdGtfZGRwIHsKKwlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKKwlzdHJ1Y3Qg
Y2xrCQkJKmNsazsKKwl2b2lkIF9faW9tZW0JCQkqcmVnczsKKwlzdHJ1Y3QgbXRrX2Rpc3BfbXV0
ZXgJCW11dGV4WzEwXTsKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbXV0ZXhfbW9k
W0REUF9DT01QT05FTlRfSURfTUFYXSA9IHsKKwlbRERQX0NPTVBPTkVOVF9BQUxdID0gTVVURVhf
TU9EX0RJU1BfQUFMLAorCVtERFBfQ09NUE9ORU5UX0NPTE9SMF0gPSBNVVRFWF9NT0RfRElTUF9D
T0xPUjAsCisJW0REUF9DT01QT05FTlRfQ09MT1IxXSA9IE1VVEVYX01PRF9ESVNQX0NPTE9SMSwK
KwlbRERQX0NPTVBPTkVOVF9HQU1NQV0gPSBNVVRFWF9NT0RfRElTUF9HQU1NQSwKKwlbRERQX0NP
TVBPTkVOVF9PRF0gPSBNVVRFWF9NT0RfRElTUF9PRCwKKwlbRERQX0NPTVBPTkVOVF9PVkwwXSA9
IE1VVEVYX01PRF9ESVNQX09WTDAsCisJW0REUF9DT01QT05FTlRfT1ZMMV0gPSBNVVRFWF9NT0Rf
RElTUF9PVkwxLAorCVtERFBfQ09NUE9ORU5UX1BXTTBdID0gTVVURVhfTU9EX0RJU1BfUFdNMCwK
KwlbRERQX0NPTVBPTkVOVF9QV00xXSA9IE1VVEVYX01PRF9ESVNQX1BXTTEsCisJW0REUF9DT01Q
T05FTlRfUkRNQTBdID0gTVVURVhfTU9EX0RJU1BfUkRNQTAsCisJW0REUF9DT01QT05FTlRfUkRN
QTFdID0gTVVURVhfTU9EX0RJU1BfUkRNQTEsCisJW0REUF9DT01QT05FTlRfUkRNQTJdID0gTVVU
RVhfTU9EX0RJU1BfUkRNQTIsCisJW0REUF9DT01QT05FTlRfVUZPRV0gPSBNVVRFWF9NT0RfRElT
UF9VRk9FLAorCVtERFBfQ09NUE9ORU5UX1dETUEwXSA9IE1VVEVYX01PRF9ESVNQX1dETUEwLAor
CVtERFBfQ09NUE9ORU5UX1dETUExXSA9IE1VVEVYX01PRF9ESVNQX1dETUExLAorfTsKKworc3Rh
dGljIHVuc2lnbmVkIGludCBtdGtfZGRwX21vdXRfZW4oZW51bSBtdGtfZGRwX2NvbXBfaWQgY3Vy
LAorCQkJCSAgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0LAorCQkJCSAgICB1bnNpZ25lZCBp
bnQgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJaWYgKGN1ciA9PSBERFBfQ09N
UE9ORU5UX09WTDAgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0NPTE9SMCkgeworCQkqYWRkciA9
IERJU1BfUkVHX0NPTkZJR19ESVNQX09WTDBfTU9VVF9FTjsKKwkJdmFsdWUgPSBPVkwwX01PVVRf
RU5fQ09MT1IwOworCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfT0QgJiYgbmV4dCA9
PSBERFBfQ09NUE9ORU5UX1JETUEwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1Bf
T0RfTU9VVF9FTjsKKwkJdmFsdWUgPSBPRF9NT1VUX0VOX1JETUEwOworCX0gZWxzZSBpZiAoY3Vy
ID09IEREUF9DT01QT05FTlRfVUZPRSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfRFNJMCkgewor
CQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX1VGT0VfTU9VVF9FTjsKKwkJdmFsdWUgPSBV
Rk9FX01PVVRfRU5fRFNJMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDEg
JiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0NPTE9SMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NP
TkZJR19ESVNQX09WTDFfTU9VVF9FTjsKKwkJdmFsdWUgPSBPVkwxX01PVVRfRU5fQ09MT1IxOwor
CX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfR0FNTUEgJiYgbmV4dCA9PSBERFBfQ09N
UE9ORU5UX1JETUExKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfR0FNTUFfTU9V
VF9FTjsKKwkJdmFsdWUgPSBHQU1NQV9NT1VUX0VOX1JETUExOworCX0gZWxzZSBpZiAoY3VyID09
IEREUF9DT01QT05FTlRfUkRNQTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQSTApIHsKKwkJ
KmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9SRE1BMV9NT1VUX0VOOworCQl2YWx1ZSA9IFJE
TUExX01PVVRfRFBJMDsKKwl9IGVsc2UgeworCQl2YWx1ZSA9IDA7CisJfQorCisJcmV0dXJuIHZh
bHVlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG10a19kZHBfc2VsX2luKGVudW0gbXRrX2Rk
cF9jb21wX2lkIGN1ciwKKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0LAorCQkJCSAg
IHVuc2lnbmVkIGludCAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwlpZiAoY3Vy
ID09IEREUF9DT01QT05FTlRfT1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IwKSB7
CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IwX1NFTF9JTjsKKwkJdmFsdWUg
PSBDT0xPUjBfU0VMX0lOX09WTDA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9S
RE1BMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfRFBJMCkgeworCQkqYWRkciA9IERJU1BfUkVH
X0NPTkZJR19EUElfU0VMX0lOOworCQl2YWx1ZSA9IERQSTBfU0VMX0lOX1JETUExOworCX0gZWxz
ZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZMMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRf
Q09MT1IxKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IxX1NFTF9JTjsK
KwkJdmFsdWUgPSBDT0xPUjFfU0VMX0lOX09WTDE7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSAwOwor
CX0KKworCXJldHVybiB2YWx1ZTsKK30KKwordm9pZCBtdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgo
dm9pZCBfX2lvbWVtICpjb25maWdfcmVncywKKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lk
IGN1ciwKKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCit7CisJdW5zaWduZWQg
aW50IGFkZHIsIHZhbHVlLCByZWc7CisKKwl2YWx1ZSA9IG10a19kZHBfbW91dF9lbihjdXIsIG5l
eHQsICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdf
cmVncyArIGFkZHIpIHwgdmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3Mg
KyBhZGRyKTsKKwl9CisKKwl2YWx1ZSA9IG10a19kZHBfc2VsX2luKGN1ciwgbmV4dCwgJmFkZHIp
OworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRk
cikgfCB2YWx1ZTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIpOwor
CX0KK30KKwordm9pZCBtdGtfZGRwX3JlbW92ZV9jb21wX2Zyb21fcGF0aCh2b2lkIF9faW9tZW0g
KmNvbmZpZ19yZWdzLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCQkgICBl
bnVtIG10a19kZHBfY29tcF9pZCBuZXh0KQoreworCXVuc2lnbmVkIGludCBhZGRyLCB2YWx1ZSwg
cmVnOworCisJdmFsdWUgPSBtdGtfZGRwX21vdXRfZW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYg
KHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSAmIH52
YWx1ZTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIpOworCX0KKwor
CXZhbHVlID0gbXRrX2RkcF9zZWxfaW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7
CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSAmIH52YWx1ZTsKKwkJ
d3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIpOworCX0KK30KKworc3RydWN0
IG10a19kaXNwX211dGV4ICptdGtfZGlzcF9tdXRleF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCB1
bnNpZ25lZCBpbnQgaWQpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGRldl9nZXRfZHJ2ZGF0
YShkZXYpOworCisJaWYgKGlkID49IDEwKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwlp
ZiAoZGRwLT5tdXRleFtpZF0uY2xhaW1lZCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwor
CWRkcC0+bXV0ZXhbaWRdLmNsYWltZWQgPSB0cnVlOworCisJcmV0dXJuICZkZHAtPm11dGV4W2lk
XTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9wdXQoc3RydWN0IG10a19kaXNwX211dGV4ICpt
dXRleCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1
Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisKKwlXQVJOX09OKCZkZHAt
Pm11dGV4W211dGV4LT5pZF0gIT0gbXV0ZXgpOworCisJbXV0ZXgtPmNsYWltZWQgPSBmYWxzZTsK
K30KKworaW50IG10a19kaXNwX211dGV4X3ByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICpt
dXRleCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1
Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJcmV0dXJuIGNsa19wcmVw
YXJlX2VuYWJsZShkZHAtPmNsayk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJl
KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9
IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4
LT5pZF0pOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkZHAtPmNsayk7Cit9CisKK3ZvaWQgbXRr
X2Rpc3BfbXV0ZXhfYWRkX2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCSAg
ICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNv
bnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5p
ZF0pOworCXVuc2lnbmVkIGludCByZWc7CisKKwlXQVJOX09OKCZkZHAtPm11dGV4W211dGV4LT5p
ZF0gIT0gbXV0ZXgpOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kw
OgorCQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsKKwkJYnJlYWs7CisJY2FzZSBERFBfQ09NUE9ORU5U
X0RTSTE6CisJCXJlZyA9IE1VVEVYX1NPRl9EU0kwOworCQlicmVhazsKKwljYXNlIEREUF9DT01Q
T05FTlRfRFBJMDoKKwkJcmVnID0gTVVURVhfU09GX0RQSTA7CisJCWJyZWFrOworCWRlZmF1bHQ6
CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11
dGV4LT5pZCkpOworCQlyZWcgfD0gbXV0ZXhfbW9kW2lkXTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVn
LCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9NT0QobXV0ZXgtPmlkKSk7CisJCXJldHVybjsK
Kwl9CisKKwl3cml0ZWxfcmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX1NP
RihtdXRleC0+aWQpKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChzdHJ1
Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4LAorCQkJCWVudW0gbXRrX2RkcF9jb21wX2lkIGlkKQor
eworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtf
ZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJ
V0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXN3aXRjaCAoaWQp
IHsKKwljYXNlIEREUF9DT01QT05FTlRfRFNJMDoKKwljYXNlIEREUF9DT01QT05FTlRfRFNJMToK
KwljYXNlIEREUF9DT01QT05FTlRfRFBJMDoKKwkJd3JpdGVsX3JlbGF4ZWQoTVVURVhfU09GX1NJ
TkdMRV9NT0RFLAorCQkJICAgICAgIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX1NPRihtdXRl
eC0+aWQpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChkZHAt
PnJlZ3MgKyBESVNQX1JFR19NVVRFWF9NT0QobXV0ZXgtPmlkKSk7CisJCXJlZyAmPSB+bXV0ZXhf
bW9kW2lkXTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRF
WF9NT0QobXV0ZXgtPmlkKSk7CisJCWJyZWFrOworCX0KK30KKwordm9pZCBtdGtfZGlzcF9tdXRl
eF9lbmFibGUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCkKK3sKKwlzdHJ1Y3QgbXRrX2Rk
cCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0
ZXhbbXV0ZXgtPmlkXSk7CisKKwlXQVJOX09OKCZkZHAtPm11dGV4W211dGV4LT5pZF0gIT0gbXV0
ZXgpOworCisJd3JpdGVsKDEsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX0VOKG11dGV4LT5p
ZCkpOworfQorCit2b2lkIG10a19kaXNwX211dGV4X2Rpc2FibGUoc3RydWN0IG10a19kaXNwX211
dGV4ICptdXRleCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4
LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisKKwlXQVJOX09O
KCZkZHAtPm11dGV4W211dGV4LT5pZF0gIT0gbXV0ZXgpOworCisJd3JpdGVsKDAsIGRkcC0+cmVn
cyArIERJU1BfUkVHX01VVEVYX0VOKG11dGV4LT5pZCkpOworfQorCitzdGF0aWMgaW50IG10a19k
ZHBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNl
ICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZGRwICpkZHA7CisJc3RydWN0IHJlc291
cmNlICpyZWdzOworCWludCBpOworCisJZGRwID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpk
ZHApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRkcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3Ig
KGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJZGRwLT5tdXRleFtpXS5pZCA9IGk7CisKKwlkZHAtPmNs
ayA9IGRldm1fY2xrX2dldChkZXYsIE5VTEwpOworCWlmIChJU19FUlIoZGRwLT5jbGspKSB7CisJ
CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJS
KGRkcC0+Y2xrKTsKKwl9CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElP
UkVTT1VSQ0VfTUVNLCAwKTsKKwlkZHAtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2
LCByZWdzKTsKKwlpZiAoSVNfRVJSKGRkcC0+cmVncykpIHsKKwkJZGV2X2VycihkZXYsICJGYWls
ZWQgdG8gbWFwIG11dGV4IHJlZ2lzdGVyc1xuIik7CisJCXJldHVybiBQVFJfRVJSKGRkcC0+cmVn
cyk7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGRwKTsKKworCXJldHVybiAw
OworfQorCitzdGF0aWMgaW50IG10a19kZHBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug
KnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl
X2lkIGRkcF9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVr
LG10ODE3My1kaXNwLW11dGV4IiB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys
IGRkcF9kcml2ZXJfZHRfbWF0Y2gpOworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kZHBf
ZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtfZGRwX3Byb2JlLAorCS5yZW1vdmUJCT0gbXRrX2Rk
cF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1lZGlhdGVrLWRkcCIsCisJCS5v
d25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBkZHBfZHJpdmVyX2R0X21h
dGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cm1fZGRwLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMxMTc1Ci0tLSAvZGV2L251bGwKKysrIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKQEAgLTAsMCArMSw0MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9E
RFBfSAorI2RlZmluZSBNVEtfRFJNX0REUF9ICisKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21w
LmgiCisKK3N0cnVjdCByZWdtYXA7CitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IG10a19kaXNwX211
dGV4OworCit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZp
Z19yZWdzLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJICAgICAgZW51
bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCk7Cit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9w
YXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBf
aWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOworCitzdHJ1Y3QgbXRr
X2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2ln
bmVkIGludCBpZCk7CitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3Bf
bXV0ZXggKm11dGV4KTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfYWRkX2NvbXAoc3RydWN0IG10a19k
aXNwX211dGV4ICptdXRleCwKKwkJCSAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwordm9p
ZCBtdGtfZGlzcF9tdXRleF9lbmFibGUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2
b2lkIG10a19kaXNwX211dGV4X2Rpc2FibGUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7
Cit2b2lkIG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAq
bXV0ZXgsCisJCQkJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwordm9pZCBtdGtfZGlzcF9tdXRl
eF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNw
X211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsKKworI2VuZGlmIC8qIE1U
S19EUk1fRERQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZHJtX2RkcF9jb21wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29t
cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzBmY2YKLS0tIC9kZXYv
bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jCkBA
IC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4K
KyAqIEF1dGhvcnM6CisgKglZVCBTaGVuIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4KKyAqCUNLIEh1
IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg
KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxs
aW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51
eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxp
bnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSAi
bXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisjaW5jbHVkZSAibXRr
X2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfT0RfRU4JCQkJMHgwMDAwCisjZGVmaW5l
IERJU1BfT0RfSU5URU4JCQkJMHgwMDA4CisjZGVmaW5lIERJU1BfT0RfSU5UU1RBCQkJCTB4MDAw
YworI2RlZmluZSBESVNQX09EX0NGRwkJCQkweDAwMjAKKyNkZWZpbmUgRElTUF9PRF9TSVpFCQkJ
CTB4MDAzMAorCisjZGVmaW5lIERJU1BfUkVHX1VGT19TVEFSVAkJCTB4MDAwMAorCisjZGVmaW5l
IERJU1BfQ09MT1JfQ0ZHX01BSU4JCQkweDA0MDAKKyNkZWZpbmUgRElTUF9DT0xPUl9TVEFSVAkJ
CTB4MGMwMAorI2RlZmluZSBESVNQX0NPTE9SX1dJRFRICQkJMHgwYzUwCisjZGVmaW5lIERJU1Bf
Q09MT1JfSEVJR0hUCQkJMHgwYzU0CisKKyNkZWZpbmUJT0RfUkVMQVlfTU9ERQkJQklUKDApCisK
KyNkZWZpbmUJVUZPX0JZUEFTUwkJQklUKDIpCisKKyNkZWZpbmUJQ09MT1JfQllQQVNTX0FMTAlC
SVQoNykKKyNkZWZpbmUJQ09MT1JfU0VRX1NFTAkJQklUKDEzKQorCitzdGF0aWMgdm9pZCBtdGtf
Y29sb3JfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCB3LAor
CQkJICAgICB1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZyZWZyZXNoKQoreworCXdyaXRl
bCh3LCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9XSURUSCk7CisJd3JpdGVsKGgsIGNvbXAtPnJl
Z3MgKyBESVNQX0NPTE9SX0hFSUdIVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jb2xvcl9zdGFy
dChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbChDT0xPUl9CWVBBU1NfQUxM
IHwgQ09MT1JfU0VRX1NFTCwKKwkgICAgICAgY29tcC0+cmVncyArIERJU1BfQ09MT1JfQ0ZHX01B
SU4pOworCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX0NPTE9SX1NUQVJUKTsKK30KKwor
c3RhdGljIHZvaWQgbXRrX29kX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNp
Z25lZCBpbnQgdywKKwkJCSAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkK
K3sKKwl3cml0ZWwodyA8PCAxNiB8IGgsIGNvbXAtPnJlZ3MgKyBESVNQX09EX1NJWkUpOworfQor
CitzdGF0aWMgdm9pZCBtdGtfb2Rfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sK
Kwl3cml0ZWwoT0RfUkVMQVlfTU9ERSwgY29tcC0+cmVncyArIERJU1BfT0RfQ0ZHKTsKKwl3cml0
ZWwoMSwgY29tcC0+cmVncyArIERJU1BfT0RfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfdWZv
ZV9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbChVRk9fQllQQVNT
LCBjb21wLT5yZWdzICsgRElTUF9SRUdfVUZPX1NUQVJUKTsKK30KKworc3RhdGljIGNvbnN0IHN0
cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX2NvbG9yID0geworCS5jb25maWcgPSBtdGtfY29s
b3JfY29uZmlnLAorCS5zdGFydCA9IG10a19jb2xvcl9zdGFydCwKK307CisKK3N0YXRpYyBjb25z
dCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9vZCA9IHsKKwkuY29uZmlnID0gbXRrX29k
X2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfb2Rfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfdWZvZSA9IHsKKwkuc3RhcnQgPSBtdGtfdWZvZV9z
dGFydCwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbXRrX2RkcF9jb21wX3N0ZW1b
TVRLX0REUF9DT01QX1RZUEVfTUFYXSA9IHsKKwlbTVRLX0RJU1BfT1ZMXSA9ICJvdmwiLAorCVtN
VEtfRElTUF9SRE1BXSA9ICJyZG1hIiwKKwlbTVRLX0RJU1BfV0RNQV0gPSAid2RtYSIsCisJW01U
S19ESVNQX0NPTE9SXSA9ICJjb2xvciIsCisJW01US19ESVNQX0FBTF0gPSAiYWFsIiwKKwlbTVRL
X0RJU1BfR0FNTUFdID0gImdhbW1hIiwKKwlbTVRLX0RJU1BfVUZPRV0gPSAidWZvZSIsCisJW01U
S19EU0ldID0gImRzaSIsCisJW01US19EUEldID0gImRwaSIsCisJW01US19ESVNQX1BXTV0gPSAi
cHdtIiwKKwlbTVRLX0RJU1BfTVVURVhdID0gIm11dGV4IiwKKwlbTVRLX0RJU1BfT0RdID0gIm9k
IiwKK307CisKK3N0cnVjdCBtdGtfZGRwX2NvbXBfbWF0Y2ggeworCWVudW0gbXRrX2RkcF9jb21w
X3R5cGUgdHlwZTsKKwlpbnQgYWxpYXNfaWQ7CisJY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9m
dW5jcyAqZnVuY3M7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9tYXRj
aCBtdGtfZGRwX21hdGNoZXNbRERQX0NPTVBPTkVOVF9JRF9NQVhdID0geworCVtERFBfQ09NUE9O
RU5UX0FBTF0JPSB7IE1US19ESVNQX0FBTCwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX0NP
TE9SMF0JPSB7IE1US19ESVNQX0NPTE9SLAkwLCAmZGRwX2NvbG9yIH0sCisJW0REUF9DT01QT05F
TlRfQ09MT1IxXQk9IHsgTVRLX0RJU1BfQ09MT1IsCTEsICZkZHBfY29sb3IgfSwKKwlbRERQX0NP
TVBPTkVOVF9EUEkwXQk9IHsgTVRLX0RQSSwJCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9E
U0kwXQk9IHsgTVRLX0RTSSwJCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9EU0kxXQk9IHsg
TVRLX0RTSSwJCTEsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9HQU1NQV0JPSB7IE1US19ESVNQ
X0dBTU1BLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfT0RdCT0geyBNVEtfRElTUF9PRCwJ
MCwgJmRkcF9vZCB9LAorCVtERFBfQ09NUE9ORU5UX09WTDBdCT0geyBNVEtfRElTUF9PVkwsCTAs
IE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwxXQk9IHsgTVRLX0RJU1BfT1ZMLAkxLCBOVUxM
IH0sCisJW0REUF9DT01QT05FTlRfUFdNMF0JPSB7IE1US19ESVNQX1BXTSwJMCwgTlVMTCB9LAor
CVtERFBfQ09NUE9ORU5UX1JETUEwXQk9IHsgTVRLX0RJU1BfUkRNQSwJMCwgTlVMTCB9LAorCVtE
RFBfQ09NUE9ORU5UX1JETUExXQk9IHsgTVRLX0RJU1BfUkRNQSwJMSwgTlVMTCB9LAorCVtERFBf
Q09NUE9ORU5UX1JETUEyXQk9IHsgTVRLX0RJU1BfUkRNQSwJMiwgTlVMTCB9LAorCVtERFBfQ09N
UE9ORU5UX1VGT0VdCT0geyBNVEtfRElTUF9VRk9FLAkwLCAmZGRwX3Vmb2UgfSwKKwlbRERQX0NP
TVBPTkVOVF9XRE1BMF0JPSB7IE1US19ESVNQX1dETUEsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBP
TkVOVF9XRE1BMV0JPSB7IE1US19ESVNQX1dETUEsCTEsIE5VTEwgfSwKK307CisKK2ludCBtdGtf
ZGRwX2NvbXBfZ2V0X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCWVudW0gbXRrX2Rk
cF9jb21wX3R5cGUgY29tcF90eXBlKQoreworCWludCBpZCA9IG9mX2FsaWFzX2dldF9pZChub2Rl
LCBtdGtfZGRwX2NvbXBfc3RlbVtjb21wX3R5cGVdKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7
IGkgPCBBUlJBWV9TSVpFKG10a19kZHBfbWF0Y2hlcyk7IGkrKykgeworCQlpZiAoY29tcF90eXBl
ID09IG10a19kZHBfbWF0Y2hlc1tpXS50eXBlICYmCisJCSAgICAoaWQgPCAwIHx8IGlkID09IG10
a19kZHBfbWF0Y2hlc1tpXS5hbGlhc19pZCkpCisJCQlyZXR1cm4gaTsKKwl9CisKKwlyZXR1cm4g
LUVJTlZBTDsKK30KKworaW50IG10a19kZHBfY29tcF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwg
c3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkgICAgICBzdHJ1Y3QgbXRrX2RkcF9jb21wICpj
b21wLCBlbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkLAorCQkgICAgICBjb25zdCBzdHJ1Y3Qg
bXRrX2RkcF9jb21wX2Z1bmNzICpmdW5jcykKK3sKKwllbnVtIG10a19kZHBfY29tcF90eXBlIHR5
cGU7CisJc3RydWN0IGRldmljZV9ub2RlICpsYXJiX25vZGU7CisJc3RydWN0IHBsYXRmb3JtX2Rl
dmljZSAqbGFyYl9wZGV2OworCisJaWYgKGNvbXBfaWQgPCAwIHx8IGNvbXBfaWQgPj0gRERQX0NP
TVBPTkVOVF9JRF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJY29tcC0+aWQgPSBjb21wX2lk
OworCWNvbXAtPmZ1bmNzID0gZnVuY3MgPzogbXRrX2RkcF9tYXRjaGVzW2NvbXBfaWRdLmZ1bmNz
OworCisJaWYgKGNvbXBfaWQgPT0gRERQX0NPTVBPTkVOVF9EUEkwIHx8CisJICAgIGNvbXBfaWQg
PT0gRERQX0NPTVBPTkVOVF9EU0kwIHx8CisJICAgIGNvbXBfaWQgPT0gRERQX0NPTVBPTkVOVF9Q
V00wKSB7CisJCWNvbXAtPnJlZ3MgPSBOVUxMOworCQljb21wLT5jbGsgPSBOVUxMOworCQljb21w
LT5pcnEgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwljb21wLT5yZWdzID0gb2ZfaW9tYXAobm9k
ZSwgMCk7CisJY29tcC0+aXJxID0gb2ZfaXJxX2dldChub2RlLCAwKTsKKwljb21wLT5jbGsgPSBv
Zl9jbGtfZ2V0KG5vZGUsIDApOworCWlmIChJU19FUlIoY29tcC0+Y2xrKSkKKwkJY29tcC0+Y2xr
ID0gTlVMTDsKKworCXR5cGUgPSBtdGtfZGRwX21hdGNoZXNbY29tcF9pZF0udHlwZTsKKworCS8q
IE9ubHkgRE1BIGNhcGFibGUgY29tcG9uZW50cyBuZWVkIHRoZSBMQVJCIHByb3BlcnR5ICovCisJ
Y29tcC0+bGFyYl9kZXYgPSBOVUxMOworCWlmICh0eXBlICE9IE1US19ESVNQX09WTCAmJgorCSAg
ICB0eXBlICE9IE1US19ESVNQX1JETUEgJiYKKwkgICAgdHlwZSAhPSBNVEtfRElTUF9XRE1BKQor
CQlyZXR1cm4gMDsKKworCWxhcmJfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobm9kZSwgIm1lZGlh
dGVrLGxhcmIiLCAwKTsKKwlpZiAoIWxhcmJfbm9kZSkgeworCQlkZXZfZXJyKGRldiwKKwkJCSJN
aXNzaW5nIG1lZGlhZGVrLGxhcmIgcGhhbmRsZSBpbiAlcyBub2RlXG4iLAorCQkJbm9kZS0+ZnVs
bF9uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGFyYl9wZGV2ID0gb2ZfZmluZF9k
ZXZpY2VfYnlfbm9kZShsYXJiX25vZGUpOworCWlmICghbGFyYl9wZGV2KSB7CisJCWRldl93YXJu
KGRldiwgIldhaXRpbmcgZm9yIGxhcmIgZGV2aWNlICVzXG4iLAorCQkJIGxhcmJfbm9kZS0+ZnVs
bF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQobGFyYl9ub2RlKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVG
RVI7CisJfQorCW9mX25vZGVfcHV0KGxhcmJfbm9kZSk7CisKKwljb21wLT5sYXJiX2RldiA9ICZs
YXJiX3BkZXYtPmRldjsKKworCXJldHVybiAwOworfQorCitpbnQgbXRrX2RkcF9jb21wX3JlZ2lz
dGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7
CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRybS0+ZGV2X3ByaXZhdGU7CisK
KwlpZiAocHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdKQorCQlyZXR1cm4gLUVCVVNZOworCisJ
cHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdID0gY29tcDsKKwlyZXR1cm4gMDsKK30KKwordm9p
ZCBtdGtfZGRwX2NvbXBfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3Qg
bXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUg
PSBkcm0tPmRldl9wcml2YXRlOworCisJcHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdID0gTlVM
TDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9j
b21wLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMTNiYTkKLS0tIC9kZXYvbnVsbAorKysg
Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oCkBAIC0wLDAgKzEs
MTUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBN
VEtfRFJNX0REUF9DT01QX0gKKyNkZWZpbmUgTVRLX0RSTV9ERFBfQ09NUF9ICisKKyNpbmNsdWRl
IDxsaW51eC9pby5oPgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRldmljZV9ub2RlOworc3Ry
dWN0IGRybV9jcnRjOworc3RydWN0IGRybV9kZXZpY2U7CitzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRl
OworCitlbnVtIG10a19kZHBfY29tcF90eXBlIHsKKwlNVEtfRElTUF9PVkwsCisJTVRLX0RJU1Bf
UkRNQSwKKwlNVEtfRElTUF9XRE1BLAorCU1US19ESVNQX0NPTE9SLAorCU1US19ESVNQX0FBTCwK
KwlNVEtfRElTUF9HQU1NQSwKKwlNVEtfRElTUF9VRk9FLAorCU1US19EU0ksCisJTVRLX0RQSSwK
KwlNVEtfRElTUF9QV00sCisJTVRLX0RJU1BfTVVURVgsCisJTVRLX0RJU1BfT0QsCisJTVRLX0RE
UF9DT01QX1RZUEVfTUFYLAorfTsKKworZW51bSBtdGtfZGRwX2NvbXBfaWQgeworCUREUF9DT01Q
T05FTlRfQUFMLAorCUREUF9DT01QT05FTlRfQ09MT1IwLAorCUREUF9DT01QT05FTlRfQ09MT1Ix
LAorCUREUF9DT01QT05FTlRfRFBJMCwKKwlERFBfQ09NUE9ORU5UX0RTSTAsCisJRERQX0NPTVBP
TkVOVF9EU0kxLAorCUREUF9DT01QT05FTlRfR0FNTUEsCisJRERQX0NPTVBPTkVOVF9PRCwKKwlE
RFBfQ09NUE9ORU5UX09WTDAsCisJRERQX0NPTVBPTkVOVF9PVkwxLAorCUREUF9DT01QT05FTlRf
UFdNMCwKKwlERFBfQ09NUE9ORU5UX1BXTTEsCisJRERQX0NPTVBPTkVOVF9SRE1BMCwKKwlERFBf
Q09NUE9ORU5UX1JETUExLAorCUREUF9DT01QT05FTlRfUkRNQTIsCisJRERQX0NPTVBPTkVOVF9V
Rk9FLAorCUREUF9DT01QT05FTlRfV0RNQTAsCisJRERQX0NPTVBPTkVOVF9XRE1BMSwKKwlERFBf
Q09NUE9ORU5UX0lEX01BWCwKK307CisKK3N0cnVjdCBtdGtfZGRwX2NvbXA7CisKK3N0cnVjdCBt
dGtfZGRwX2NvbXBfZnVuY3MgeworCXZvaWQgKCpjb25maWcpKHN0cnVjdCBtdGtfZGRwX2NvbXAg
KmNvbXAsIHVuc2lnbmVkIGludCB3LAorCQkgICAgICAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVk
IGludCB2cmVmcmVzaCk7CisJdm9pZCAoKnN0YXJ0KShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w
KTsKKwl2b2lkICgqc3RvcCkoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7CisJdm9pZCAoKmVu
YWJsZV92YmxhbmspKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHN0cnVjdCBkcm1fY3J0YyAq
Y3J0Yyk7CisJdm9pZCAoKmRpc2FibGVfdmJsYW5rKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w
KTsKKwl2b2lkICgqbGF5ZXJfb24pKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVk
IGludCBpZHgpOworCXZvaWQgKCpsYXllcl9vZmYpKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs
IHVuc2lnbmVkIGludCBpZHgpOworCXZvaWQgKCpsYXllcl9jb25maWcpKHN0cnVjdCBtdGtfZGRw
X2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgsCisJCQkgICAgIHN0cnVjdCBtdGtfcGxhbmVf
c3RhdGUgKnN0YXRlKTsKK307CisKK3N0cnVjdCBtdGtfZGRwX2NvbXAgeworCXN0cnVjdCBjbGsg
KmNsazsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJaW50IGlycTsKKwlzdHJ1Y3QgZGV2aWNlICps
YXJiX2RldjsKKwllbnVtIG10a19kZHBfY29tcF9pZCBpZDsKKwljb25zdCBzdHJ1Y3QgbXRrX2Rk
cF9jb21wX2Z1bmNzICpmdW5jczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2Nv
bXBfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJICAgICAgIHVuc2lnbmVk
IGludCB3LCB1bnNpZ25lZCBpbnQgaCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHZyZWZyZXNo
KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+Y29uZmlnKQorCQljb21wLT5m
dW5jcy0+Y29uZmlnKGNvbXAsIHcsIGgsIHZyZWZyZXNoKTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIG10a19kZHBfY29tcF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlm
IChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+c3RhcnQpCisJCWNvbXAtPmZ1bmNzLT5zdGFy
dChjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9zdG9wKHN0cnVj
dCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNz
LT5zdG9wKQorCQljb21wLT5mdW5jcy0+c3RvcChjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIG10a19kZHBfY29tcF9lbmFibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs
CisJCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlpZiAoY29tcC0+ZnVuY3Mg
JiYgY29tcC0+ZnVuY3MtPmVuYWJsZV92YmxhbmspCisJCWNvbXAtPmZ1bmNzLT5lbmFibGVfdmJs
YW5rKGNvbXAsIGNydGMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2Rp
c2FibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJaWYgKGNvbXAtPmZ1
bmNzICYmIGNvbXAtPmZ1bmNzLT5kaXNhYmxlX3ZibGFuaykKKwkJY29tcC0+ZnVuY3MtPmRpc2Fi
bGVfdmJsYW5rKGNvbXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2xh
eWVyX29uKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJCSB1bnNpZ25lZCBpbnQgaWR4
KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+bGF5ZXJfb24pCisJCWNvbXAt
PmZ1bmNzLT5sYXllcl9vbihjb21wLCBpZHgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRr
X2RkcF9jb21wX2xheWVyX29mZihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkgIHVu
c2lnbmVkIGludCBpZHgpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5sYXll
cl9vZmYpCisJCWNvbXAtPmZ1bmNzLT5sYXllcl9vZmYoY29tcCwgaWR4KTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIG10a19kZHBfY29tcF9sYXllcl9jb25maWcoc3RydWN0IG10a19kZHBfY29t
cCAqY29tcCwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgaWR4LAorCQkJCQkgICAgIHN0cnVjdCBt
dGtfcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5j
cy0+bGF5ZXJfY29uZmlnKQorCQljb21wLT5mdW5jcy0+bGF5ZXJfY29uZmlnKGNvbXAsIGlkeCwg
c3RhdGUpOworfQorCitpbnQgbXRrX2RkcF9jb21wX2dldF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUg
Km5vZGUsCisJCQllbnVtIG10a19kZHBfY29tcF90eXBlIGNvbXBfdHlwZSk7CitpbnQgbXRrX2Rk
cF9jb21wX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbXBf
bm9kZSwKKwkJICAgICAgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgZW51bSBtdGtfZGRwX2Nv
bXBfaWQgY29tcF9pZCwKKwkJICAgICAgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAq
ZnVuY3MpOworaW50IG10a19kZHBfY29tcF9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJt
LCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKK3ZvaWQgbXRrX2RkcF9jb21wX3VucmVnaXN0
ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7CisK
KyNlbmRpZiAvKiBNVEtfRFJNX0REUF9DT01QX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcm1fZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlNTY1NAot
LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5j
CkBAIC0wLDAgKzEsNTU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIElu
Yy4KKyAqIEF1dGhvcjogWVQgU0hFTiA8eXQuc2hlbkBtZWRpYXRlay5jb20+CisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxk
cm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2Ry
bV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2lu
Y2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5o
PgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+
CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRm
b3JtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSAibXRrX2Ry
bV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rk
cF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Zi
LmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAibWVk
aWF0ZWsiCisjZGVmaW5lIERSSVZFUl9ERVNDICJNZWRpYXRlayBTb0MgRFJNIgorI2RlZmluZSBE
UklWRVJfREFURSAiMjAxNTA1MTMiCisjZGVmaW5lIERSSVZFUl9NQUpPUiAxCisjZGVmaW5lIERS
SVZFUl9NSU5PUiAwCisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfc2NoZWR1bGUoc3RydWN0IG10
a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSwKKwkJCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh
dGUpCit7CisJcHJpdmF0ZS0+Y29tbWl0LnN0YXRlID0gc3RhdGU7CisJc2NoZWR1bGVfd29yaygm
cHJpdmF0ZS0+Y29tbWl0LndvcmspOworfQorCitzdGF0aWMgdm9pZCBtdGtfYXRvbWljX3dhaXRf
Zm9yX2ZlbmNlcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRy
bV9wbGFuZSAqcGxhbmU7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisJ
aW50IGk7CisKKwlmb3JfZWFjaF9wbGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIHBsYW5lX3N0
YXRlLCBpKQorCQltdGtfZmJfd2FpdChwbGFuZS0+c3RhdGUtPmZiKTsKK30KKworc3RhdGljIHZv
aWQgbXRrX2F0b21pY19jb21wbGV0ZShzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlLAor
CQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2Rldmlj
ZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCisJbXRrX2F0b21pY193YWl0X2Zvcl9mZW5jZXMoc3Rh
dGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZGlzYWJsZXMoZHJtLCBz
dGF0ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lcyhkcm0sIHN0YXRlLCBmYWxz
ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZW5hYmxlcyhkcm0sIHN0YXRl
KTsKKwlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92YmxhbmtzKGRybSwgc3RhdGUpOworCWRy
bV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNf
c3RhdGVfZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfd29yayhzdHJ1
Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0
ZSA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJc3RydWN0IG10a19kcm1fcHJpdmF0ZSwgY29tbWl0
LndvcmspOworCisJbXRrX2F0b21pY19jb21wbGV0ZShwcml2YXRlLCBwcml2YXRlLT5jb21taXQu
c3RhdGUpOworfQorCitzdGF0aWMgaW50IG10a19hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2
aWNlICpkcm0sCisJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAg
ICAgYm9vbCBhc3luYykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJt
LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJl
cGFyZV9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW11
dGV4X2xvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKKwlmbHVzaF93b3JrKCZwcml2YXRlLT5j
b21taXQud29yayk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9zd2FwX3N0YXRlKGRybSwgc3RhdGUp
OworCisJaWYgKGFzeW5jKQorCQltdGtfYXRvbWljX3NjaGVkdWxlKHByaXZhdGUsIHN0YXRlKTsK
KwllbHNlCisJCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwgc3RhdGUpOworCisJbXV0ZXhf
dW5sb2NrKCZwcml2YXRlLT5jb21taXQubG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj
IGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbXRrX2RybV9tb2RlX2NvbmZpZ19m
dW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gbXRrX2RybV9tb2RlX2ZiX2NyZWF0ZSwKKwkuYXRvbWlj
X2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21taXQgPSBtdGtf
YXRvbWljX2NvbW1pdCwKK307CisKK3N0YXRpYyBjb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCBt
dGtfZGRwX21haW5bXSA9IHsKKwlERFBfQ09NUE9ORU5UX09WTDAsCisJRERQX0NPTVBPTkVOVF9D
T0xPUjAsCisJRERQX0NPTVBPTkVOVF9BQUwsCisJRERQX0NPTVBPTkVOVF9PRCwKKwlERFBfQ09N
UE9ORU5UX1JETUEwLAorCUREUF9DT01QT05FTlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX0RTSTAs
CisJRERQX0NPTVBPTkVOVF9QV00wLAorfTsKKworc3RhdGljIGNvbnN0IGVudW0gbXRrX2RkcF9j
b21wX2lkIG10a19kZHBfZXh0W10gPSB7CisJRERQX0NPTVBPTkVOVF9PVkwxLAorCUREUF9DT01Q
T05FTlRfQ09MT1IxLAorCUREUF9DT01QT05FTlRfR0FNTUEsCisJRERQX0NPTVBPTkVOVF9SRE1B
MSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCit9OworCitzdGF0aWMgaW50IG10a19kcm1fa21zX2lu
aXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpw
cml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2
OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHJldDsKKworCWlmICghaW9tbXVfcHJl
c2VudCgmcGxhdGZvcm1fYnVzX3R5cGUpKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKworCXBk
ZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHByaXZhdGUtPm11dGV4X25vZGUpOworCWlmICgh
cGRldikgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiV2FpdGluZyBmb3IgZGlzcC1tdXRleCBkZXZp
Y2UgJXNcbiIsCisJCQlwcml2YXRlLT5tdXRleF9ub2RlLT5mdWxsX25hbWUpOworCQlvZl9ub2Rl
X3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQor
CXByaXZhdGUtPm11dGV4X2RldiA9ICZwZGV2LT5kZXY7CisKKwlkcm1fbW9kZV9jb25maWdfaW5p
dChkcm0pOworCisJZHJtLT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSA2NDsKKwlkcm0tPm1vZGVf
Y29uZmlnLm1pbl9oZWlnaHQgPSA2NDsKKworCS8qCisJICogc2V0IG1heCB3aWR0aCBhbmQgaGVp
Z2h0IGFzIGRlZmF1bHQgdmFsdWUoNDA5Nng0MDk2KS4KKwkgKiB0aGlzIHZhbHVlIHdvdWxkIGJl
IHVzZWQgdG8gY2hlY2sgZnJhbWVidWZmZXIgc2l6ZSBsaW1pdGF0aW9uCisJICogYXQgZHJtX21v
ZGVfYWRkZmIoKS4KKwkgKi8KKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IDQwOTY7CisJ
ZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gNDA5NjsKKwlkcm0tPm1vZGVfY29uZmlnLmZ1
bmNzID0gJm10a19kcm1fbW9kZV9jb25maWdfZnVuY3M7CisKKwlyZXQgPSBjb21wb25lbnRfYmlu
ZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY29uZmlnX2NsZWFu
dXA7CisKKwkvKgorCSAqIFdlIGN1cnJlbnRseSBzdXBwb3J0IHR3byBmaXhlZCBkYXRhIHN0cmVh
bXMsIGVhY2ggb3B0aW9uYWwsCisJICogYW5kIGVhY2ggc3RhdGljYWxseSBhc3NpZ25lZCB0byBh
IGNydGM6CisJICogT1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJETUEwIC0+IFVGT0Ug
LT4gRFNJMCAuLi4KKwkgKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2Rk
cF9tYWluLCBBUlJBWV9TSVpFKG10a19kZHBfbWFpbikpOworCWlmIChyZXQgPCAwKQorCQlnb3Rv
IGVycl9jb21wb25lbnRfdW5iaW5kOworCS8qIC4uLiBhbmQgT1ZMMSAtPiBDT0xPUjEgLT4gR0FN
TUEgLT4gUkRNQTEgLT4gRFBJMC4gKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwg
bXRrX2RkcF9leHQsIEFSUkFZX1NJWkUobXRrX2RkcF9leHQpKTsKKwlpZiAocmV0IDwgMCkKKwkJ
Z290byBlcnJfY29tcG9uZW50X3VuYmluZDsKKworCS8qIFVzZSBPVkwgZGV2aWNlIGZvciBhbGwg
RE1BIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworCW5wID0gcHJpdmF0ZS0+Y29tcF9ub2RlW210a19k
ZHBfbWFpblswXV0gPzoKKwkgICAgIHByaXZhdGUtPmNvbXBfbm9kZVttdGtfZGRwX2V4dFswXV07
CisJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobnApOworCWlmICghcGRldikgeworCQly
ZXQgPSAtRU5PREVWOworCQlkZXZfZXJyKGRybS0+ZGV2LCAiTmVlZCBhdCBsZWFzdCBvbmUgT1ZM
IGRldmljZVxuIik7CisJCWdvdG8gZXJyX2NvbXBvbmVudF91bmJpbmQ7CisJfQorCisJcHJpdmF0
ZS0+ZG1hX2RldiA9ICZwZGV2LT5kZXY7CisKKwkvKgorCSAqIFdlIGRvbid0IHVzZSB0aGUgZHJt
X2lycV9pbnN0YWxsKCkgaGVscGVycyBwcm92aWRlZCBieSB0aGUgRFJNCisJICogY29yZSwgc28g
d2UgbmVlZCB0byBzZXQgdGhpcyBtYW51YWxseSBpbiBvcmRlciB0byBhbGxvdyB0aGUKKwkgKiBE
Uk1fSU9DVExfV0FJVF9WQkxBTksgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCisJICovCisJZHJtLT5p
cnFfZW5hYmxlZCA9IHRydWU7CisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRybSwgTUFYX0NSVEMp
OworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCisJZHJtX2tt
c19oZWxwZXJfcG9sbF9pbml0KGRybSk7CisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7CisK
KwlyZXR1cm4gMDsKKworZXJyX2NvbXBvbmVudF91bmJpbmQ6CisJY29tcG9uZW50X3VuYmluZF9h
bGwoZHJtLT5kZXYsIGRybSk7CitlcnJfY29uZmlnX2NsZWFudXA6CisJZHJtX21vZGVfY29uZmln
X2NsZWFudXAoZHJtKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1f
a21zX2RlaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCWRybV9rbXNfaGVscGVyX3Bv
bGxfZmluaShkcm0pOworCisJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7CisJY29tcG9uZW50X3Vu
YmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsK
K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXRrX2RybV9mb3BzID0g
eworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX29wZW4sCisJLnJlbGVhc2Ug
PSBkcm1fcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCisJLm1tYXAgPSBt
dGtfZHJtX2dlbV9tbWFwLAorCS5wb2xsID0gZHJtX3BvbGwsCisJLnJlYWQgPSBkcm1fcmVhZCwK
KyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGws
CisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBtdGtfZHJtX2RyaXZlciA9
IHsKKwkuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX01PREVTRVQgfCBEUklWRVJfR0VNIHwgRFJJ
VkVSX1BSSU1FIHwKKwkJCSAgIERSSVZFUl9BVE9NSUMsCisKKwkuZ2V0X3ZibGFua19jb3VudGVy
ID0gZHJtX3ZibGFua19jb3VudCwKKwkuZW5hYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19lbmFi
bGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFu
aywKKworCS5nZW1fZnJlZV9vYmplY3QgPSBtdGtfZHJtX2dlbV9mcmVlX29iamVjdCwKKwkuZ2Vt
X3ZtX29wcyA9ICZkcm1fZ2VtX2NtYV92bV9vcHMsCisJLmR1bWJfY3JlYXRlID0gbXRrX2RybV9n
ZW1fZHVtYl9jcmVhdGUsCisJLmR1bWJfbWFwX29mZnNldCA9IG10a19kcm1fZ2VtX2R1bWJfbWFw
X29mZnNldCwKKwkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCisKKwkucHJp
bWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCisJLnByaW1lX2Zk
X3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAorCS5nZW1fcHJpbWVfZXhw
b3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCisJLmdlbV9wcmltZV9pbXBvcnQgPSBkcm1fZ2Vt
X3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZSA9IG10a19nZW1fcHJpbWVf
Z2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gbXRrX2dlbV9wcmlt
ZV9pbXBvcnRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9tbWFwID0gbXRrX2RybV9nZW1fbW1hcF9i
dWYsCisJLmZvcHMgPSAmbXRrX2RybV9mb3BzLAorCisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwku
ZGVzYyA9IERSSVZFUl9ERVNDLAorCS5kYXRlID0gRFJJVkVSX0RBVEUsCisJLm1ham9yID0gRFJJ
VkVSX01BSk9SLAorCS5taW5vciA9IERSSVZFUl9NSU5PUiwKK307CisKK3N0YXRpYyBpbnQgY29t
cGFyZV9vZihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGRldi0+
b2Zfbm9kZSA9PSBkYXRhOworfQorCitzdGF0aWMgaW50IG10a19kcm1fYmluZChzdHJ1Y3QgZGV2
aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRf
ZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJaW50IHJldDsKKworCWRy
bSA9IGRybV9kZXZfYWxsb2MoJm10a19kcm1fZHJpdmVyLCBkZXYpOworCWlmICghZHJtKQorCQly
ZXR1cm4gLUVOT01FTTsKKworCWRybV9kZXZfc2V0X3VuaXF1ZShkcm0sIGRldl9uYW1lKGRldikp
OworCisJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOworCWlmIChyZXQgPCAwKQorCQln
b3RvIGVycl9mcmVlOworCisJZHJtLT5kZXZfcHJpdmF0ZSA9IHByaXZhdGU7CisJcHJpdmF0ZS0+
ZHJtID0gZHJtOworCisJcmV0ID0gbXRrX2RybV9rbXNfaW5pdChkcm0pOworCWlmIChyZXQgPCAw
KQorCQlnb3RvIGVycl91bnJlZ2lzdGVyOworCisJcmV0dXJuIDA7CisKK2Vycl91bnJlZ2lzdGVy
OgorCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOworZXJyX2ZyZWU6CisJZHJtX2Rldl91bnJlZihk
cm0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fdW5iaW5kKHN0cnVj
dCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2
X2dldF9kcnZkYXRhKGRldik7CisKKwlkcm1fcHV0X2Rldihwcml2YXRlLT5kcm0pOworCXByaXZh
dGUtPmRybSA9IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rl
cl9vcHMgbXRrX2RybV9vcHMgPSB7CisJLmJpbmQJCT0gbXRrX2RybV9iaW5kLAorCS51bmJpbmQJ
CT0gbXRrX2RybV91bmJpbmQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p
ZCBtdGtfZGRwX2NvbXBfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxt
dDgxNzMtZGlzcC1vdmwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9PVkwgfSwKKwl7IC5j
b21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXJkbWEiLCAgLmRhdGEgPSAodm9pZCAq
KU1US19ESVNQX1JETUEgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNw
LXdkbWEiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1dETUEgfSwKKwl7IC5jb21wYXRpYmxl
ID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWNvbG9yIiwgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQ
X0NPTE9SIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1hYWwiLCAg
IC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9BQUx9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0
ZWssbXQ4MTczLWRpc3AtZ2FtbWEiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfR0FNTUEsIH0s
CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC11Zm9lIiwgIC5kYXRhID0g
KHZvaWQgKilNVEtfRElTUF9VRk9FIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgx
NzMtZHNpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRFNJIH0sCisJeyAuY29tcGF0aWJs
ZSA9ICJtZWRpYXRlayxtdDgxNzMtZHBpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRFBJ
IH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRleCIsIC5kYXRh
ID0gKHZvaWQgKilNVEtfRElTUF9NVVRFWCB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWss
bXQ4MTczLWRpc3AtcHdtIiwgICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfUFdNIH0sCisJeyAu
Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vZCIsICAgIC5kYXRhID0gKHZvaWQg
KilNVEtfRElTUF9PRCB9LAorCXsgfQorfTsKKworc3RhdGljIGludCBtdGtfZHJtX3Byb2JlKHN0
cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBk
ZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlOworCXN0cnVjdCByZXNv
dXJjZSAqbWVtOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgY29tcG9uZW50
X21hdGNoICptYXRjaCA9IE5VTEw7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXByaXZhdGUgPSBk
ZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBy
aXZhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmcHJpdmF0ZS0+Y29tbWl0
LmxvY2spOworCUlOSVRfV09SSygmcHJpdmF0ZS0+Y29tbWl0LndvcmssIG10a19hdG9taWNfd29y
ayk7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0s
IDApOworCXByaXZhdGUtPmNvbmZpZ19yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwg
bWVtKTsKKwlpZiAoSVNfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKSkgeworCQlyZXQgPSBQVFJf
RVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9y
ZW1hcCBtbXN5cy1jb25maWcgcmVzb3VyY2U6ICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJl
dDsKKwl9CisKKwkvKiBJdGVyYXRlIG92ZXIgc2libGluZyBESVNQIGZ1bmN0aW9uIGJsb2NrcyAq
LworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoZGV2LT5vZl9ub2RlLT5wYXJlbnQsIG5vZGUpIHsK
KwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CisJCWVudW0gbXRrX2RkcF9jb21w
X3R5cGUgY29tcF90eXBlOworCQlpbnQgY29tcF9pZDsKKworCQlvZl9pZCA9IG9mX21hdGNoX25v
ZGUobXRrX2RkcF9jb21wX2R0X2lkcywgbm9kZSk7CisJCWlmICghb2ZfaWQpCisJCQljb250aW51
ZTsKKworCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpIHsKKwkJCWRldl9kYmco
ZGV2LCAiU2tpcHBpbmcgZGlzYWJsZWQgY29tcG9uZW50ICVzXG4iLAorCQkJCW5vZGUtPmZ1bGxf
bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbXBfdHlwZSA9IChlbnVtIG10a19kZHBf
Y29tcF90eXBlKW9mX2lkLT5kYXRhOworCisJCWlmIChjb21wX3R5cGUgPT0gTVRLX0RJU1BfTVVU
RVgpIHsKKwkJCXByaXZhdGUtPm11dGV4X25vZGUgPSBvZl9ub2RlX2dldChub2RlKTsKKwkJCWNv
bnRpbnVlOworCQl9CisKKwkJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQobm9kZSwgY29t
cF90eXBlKTsKKwkJaWYgKGNvbXBfaWQgPCAwKSB7CisJCQlkZXZfd2FybihkZXYsICJTa2lwcGlu
ZyB1bmtub3duIGNvbXBvbmVudCAlc1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNv
bnRpbnVlOworCQl9CisKKwkJcHJpdmF0ZS0+Y29tcF9ub2RlW2NvbXBfaWRdID0gb2Zfbm9kZV9n
ZXQobm9kZSk7CisKKwkJLyoKKwkJICogQ3VycmVudGx5IG9ubHkgdGhlIE9WTCwgUkRNQSwgRFNJ
LCBhbmQgRFBJIGJsb2NrcyBoYXZlCisJCSAqIHNlcGFyYXRlIGNvbXBvbmVudCBwbGF0Zm9ybSBk
cml2ZXJzIGFuZCBpbml0aWFsaXplIHRoZWlyIG93bgorCQkgKiBERFAgY29tcG9uZW50IHN0cnVj
dHVyZS4gVGhlIG90aGVycyBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4KKwkJICovCisJCWlmIChjb21w
X3R5cGUgPT0gTVRLX0RJU1BfT1ZMIHx8CisJCSAgICBjb21wX3R5cGUgPT0gTVRLX0RJU1BfUkRN
QSB8fAorCQkgICAgY29tcF90eXBlID09IE1US19EU0kgfHwKKwkJICAgIGNvbXBfdHlwZSA9PSBN
VEtfRFBJKSB7CisJCQlkZXZfaW5mbyhkZXYsICJBZGRpbmcgY29tcG9uZW50IG1hdGNoIGZvciAl
c1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbXBvbmVudF9tYXRjaF9hZGQoZGV2
LCAmbWF0Y2gsIGNvbXBhcmVfb2YsIG5vZGUpOworCQl9IGVsc2UgeworCQkJc3RydWN0IG10a19k
ZHBfY29tcCAqY29tcDsKKworCQkJY29tcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY29t
cCksIEdGUF9LRVJORUwpOworCQkJaWYgKCFjb21wKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJ
CQlnb3RvIGVycl9ub2RlOworCQkJfQorCisJCQlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYs
IG5vZGUsIGNvbXAsIGNvbXBfaWQsIE5VTEwpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycl9u
b2RlOworCisJCQlwcml2YXRlLT5kZHBfY29tcFtjb21wX2lkXSA9IGNvbXA7CisJCX0KKwl9CisK
KwlpZiAoIXByaXZhdGUtPm11dGV4X25vZGUpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g
ZmluZCBkaXNwLW11dGV4IG5vZGVcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9u
b2RlOworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2
ZGF0YShwZGV2LCBwcml2YXRlKTsKKworCXJldCA9IGNvbXBvbmVudF9tYXN0ZXJfYWRkX3dpdGhf
bWF0Y2goZGV2LCAmbXRrX2RybV9vcHMsIG1hdGNoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9w
bTsKKworCXJldHVybiAwOworCitlcnJfcG06CisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7Citl
cnJfbm9kZToKKwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlmb3IgKGkgPSAw
OyBpIDwgRERQX0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+
Y29tcF9ub2RlW2ldKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kcm1fcmVt
b3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJp
dmF0ZSAqcHJpdmF0ZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkcm1f
ZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisJaW50IGk7CisKKwlkcm1fY29ubmVjdG9yX3Vu
cmVnaXN0ZXJfYWxsKGRybSk7CisJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CisJbXRrX2RybV9r
bXNfZGVpbml0KGRybSk7CisJZHJtX2Rldl91bnJlZihkcm0pOworCisJY29tcG9uZW50X21hc3Rl
cl9kZWwoJnBkZXYtPmRldiwgJm10a19kcm1fb3BzKTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBk
ZXYtPmRldik7CisJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJZm9yIChpID0g
MDsgaSA8IEREUF9DT01QT05FTlRfSURfTUFYOyBpKyspCisJCW9mX25vZGVfcHV0KHByaXZhdGUt
PmNvbXBfbm9kZVtpXSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVF
UAorc3RhdGljIGludCBtdGtfZHJtX3N5c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sK
KwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7
CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKKworCWRybV9rbXNfaGVs
cGVyX3BvbGxfZGlzYWJsZShkcm0pOworCisJcHJpdmF0ZS0+c3VzcGVuZF9zdGF0ZSA9IGRybV9h
dG9taWNfaGVscGVyX3N1c3BlbmQoZHJtKTsKKwlpZiAoSVNfRVJSKHByaXZhdGUtPnN1c3BlbmRf
c3RhdGUpKSB7CisJCWRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxlKGRybSk7CisJCXJldHVybiBQ
VFJfRVJSKHByaXZhdGUtPnN1c3BlbmRfc3RhdGUpOworCX0KKworCURSTV9ERUJVR19EUklWRVIo
Im10a19kcm1fc3lzX3N1c3BlbmRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10
a19kcm1fc3lzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1f
cHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2
aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisKKwlkcm1fYXRvbWljX2hlbHBlcl9yZXN1bWUoZHJt
LCBwcml2YXRlLT5zdXNwZW5kX3N0YXRlKTsKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShk
cm0pOworCisJRFJNX0RFQlVHX0RSSVZFUigibXRrX2RybV9zeXNfcmVzdW1lXG4iKTsKKwlyZXR1
cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobXRrX2RybV9wbV9v
cHMsIG10a19kcm1fc3lzX3N1c3BlbmQsCisJCQkgbXRrX2RybV9zeXNfcmVzdW1lKTsKKworc3Rh
dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2RybV9vZl9pZHNbXSA9IHsKKwl7IC5j
b21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1tbXN5cyIsIH0sCisJeyB9Cit9OworCitzdGF0
aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciA9IHsKKwku
cHJvYmUJPSBtdGtfZHJtX3Byb2JlLAorCS5yZW1vdmUJPSBtdGtfZHJtX3JlbW92ZSwKKwkuZHJp
dmVyCT0geworCQkubmFtZQk9ICJtZWRpYXRlay1kcm0iLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBt
dGtfZHJtX29mX2lkcywKKwkJLnBtICAgICA9ICZtdGtfZHJtX3BtX29wcywKKwl9LAorfTsKKwor
c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9
IHsKKwkmbXRrX2RkcF9kcml2ZXIsCisJJm10a19kaXNwX292bF9kcml2ZXIsCisJJm10a19kaXNw
X3JkbWFfZHJpdmVyLAorCSZtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciwKK307CisKK3N0YXRpYyBp
bnQgX19pbml0IG10a19kcm1faW5pdCh2b2lkKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlm
b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZHJtX2RyaXZlcnMpOyBpKyspIHsKKwkJcmV0
ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKG10a19kcm1fZHJpdmVyc1tpXSk7CisJCWlmIChy
ZXQgPCAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciAlcyBkcml2ZXI6ICVkXG4i
LAorCQkJICAgICAgIG10a19kcm1fZHJpdmVyc1tpXS0+ZHJpdmVyLm5hbWUsIHJldCk7CisJCQln
b3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnI6CisJd2hpbGUgKC0taSA+PSAw
KQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfZHJtX2RyaXZlcnNbaV0pOworCisJ
cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG10a19kcm1fZXhpdCh2b2lkKQor
eworCWludCBpOworCisJZm9yIChpID0gQVJSQVlfU0laRShtdGtfZHJtX2RyaXZlcnMpIC0gMTsg
aSA+PSAwOyBpLS0pCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKG10a19kcm1fZHJpdmVy
c1tpXSk7Cit9CisKK21vZHVsZV9pbml0KG10a19kcm1faW5pdCk7Cittb2R1bGVfZXhpdChtdGtf
ZHJtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJZVCBTSEVOIDx5dC5zaGVuQG1lZGlhdGVrLmNv
bT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0ZWsgU29DIERSTSBkcml2ZXIiKTsKK01P
RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkYzhmYQotLS0gL2Rldi9u
dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCkBAIC0wLDAg
KzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVm
IE1US19EUk1fRFJWX0gKKyNkZWZpbmUgTVRLX0RSTV9EUlZfSAorCisjaW5jbHVkZSA8bGludXgv
aW8uaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgTUFYX0NSVEMJ
MgorI2RlZmluZSBNQVhfQ09OTkVDVE9SCTIKKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZp
Y2Vfbm9kZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1fZGV2aWNlOworc3RydWN0IGRy
bV9mYl9oZWxwZXI7CitzdHJ1Y3QgZHJtX3Byb3BlcnR5Oworc3RydWN0IHJlZ21hcDsKKworc3Ry
dWN0IG10a19kcm1fcHJpdmF0ZSB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlzdHJ1Y3Qg
ZGV2aWNlICpkbWFfZGV2OworCisJc3RydWN0IGRybV9jcnRjICpjcnRjW01BWF9DUlRDXTsKKwl1
bnNpZ25lZCBpbnQgbnVtX3BpcGVzOworCisJc3RydWN0IGRldmljZV9ub2RlICptdXRleF9ub2Rl
OworCXN0cnVjdCBkZXZpY2UgKm11dGV4X2RldjsKKwl2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdz
OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY29tcF9ub2RlW0REUF9DT01QT05FTlRfSURfTUFYXTsK
KwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpkZHBfY29tcFtERFBfQ09NUE9ORU5UX0lEX01BWF07CisK
KwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7CisJCXN0cnVjdCB3
b3JrX3N0cnVjdCB3b3JrOworCQlzdHJ1Y3QgbXV0ZXggbG9jazsKKwl9IGNvbW1pdDsKKworCXN0
cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdXNwZW5kX3N0YXRlOworfTsKKworZXh0ZXJuIHN0cnVj
dCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RkcF9kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3Jt
X2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2
ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXI7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0RSVl9IICovCmRp
ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jIGIvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4zM2QzMGMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kcm1fZmIuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg
KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRy
bS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2lu
Y2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1
ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2lu
Y2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCisvKgorICog
bXRrIHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVyZS4KKyAqCisgKiBAZmI6IGRybSBmcmFt
ZWJ1ZmZlciBvYmplY3QuCisgKiBAZ2VtX29iajogYXJyYXkgb2YgZ2VtIG9iamVjdHMuCisgKi8K
K3N0cnVjdCBtdGtfZHJtX2ZiIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyCWJhc2U7CisJLyog
Rm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgcGxhbmUgKi8KKwlzdHJ1Y3QgZHJtX2dl
bV9vYmplY3QJKmdlbV9vYmo7Cit9OworCisjZGVmaW5lIHRvX210a19mYih4KSBjb250YWluZXJf
b2YoeCwgc3RydWN0IG10a19kcm1fZmIsIGJhc2UpCisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAq
bXRrX2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVj
dCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJcmV0dXJuIG10a19mYi0+
Z2VtX29iajsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2ZiX2NyZWF0ZV9oYW5kbGUoc3RydWN0
IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2
LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAq
bXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCXJldHVybiBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUo
ZmlsZV9wcml2LCBtdGtfZmItPmdlbV9vYmosIGhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10
a19kcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3Qg
bXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCWRybV9mcmFtZWJ1ZmZlcl9j
bGVhbnVwKGZiKTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG10a19m
Yi0+Z2VtX29iaik7CisKKwlrZnJlZShtdGtfZmIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0
IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBtdGtfZHJtX2ZiX2Z1bmNzID0geworCS5jcmVhdGVfaGFu
ZGxlID0gbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxlLAorCS5kZXN0cm95ID0gbXRrX2RybV9mYl9k
ZXN0cm95LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZHJtX2ZyYW1lYnVm
ZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJY29uc3Qgc3RydWN0IGRybV9t
b2RlX2ZiX2NtZDIgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQorewor
CXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmI7CisJaW50IHJldDsKKworCWlmIChkcm1fZm9ybWF0
X251bV9wbGFuZXMobW9kZS0+cGl4ZWxfZm9ybWF0KSAhPSAxKQorCQlyZXR1cm4gRVJSX1BUUigt
RUlOVkFMKTsKKworCW10a19mYiA9IGt6YWxsb2Moc2l6ZW9mKCptdGtfZmIpLCBHRlBfS0VSTkVM
KTsKKwlpZiAoIW10a19mYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlkcm1faGVs
cGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJm10a19mYi0+YmFzZSwgbW9kZSk7CisKKwltdGtfZmIt
PmdlbV9vYmogPSBvYmo7CisKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZtdGtf
ZmItPmJhc2UsICZtdGtfZHJtX2ZiX2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigi
ZmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXJcbiIpOworCQlrZnJlZShtdGtfZmIpOwor
CQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBtdGtfZmI7Cit9CisKKy8qCisg
KiBXYWl0IGZvciBhbnkgZXhjbHVzaXZlIGZlbmNlIGluIGZiJ3MgZ2VtIG9iamVjdCdzIHJlc2Vy
dmF0aW9uIG9iamVjdC4KKyAqCisgKiBSZXR1cm5zIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRl
ZCwgZWxzZSAwLgorICovCitpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq
ZmIpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07CisJc3RydWN0IHJlc2VydmF0aW9u
X29iamVjdCAqcmVzdjsKKwlsb25nIHJldDsKKworCWlmICghZmIpCisJCXJldHVybiAwOworCisJ
Z2VtID0gbXRrX2ZiX2dldF9nZW1fb2JqKGZiKTsKKwlpZiAoIWdlbSB8fCAhZ2VtLT5kbWFfYnVm
IHx8ICFnZW0tPmRtYV9idWYtPnJlc3YpCisJCXJldHVybiAwOworCisJcmVzdiA9IGdlbS0+ZG1h
X2J1Zi0+cmVzdjsKKwlyZXQgPSByZXNlcnZhdGlvbl9vYmplY3Rfd2FpdF90aW1lb3V0X3JjdShy
ZXN2LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCS8qIE1B
WF9TQ0hFRFVMRV9USU1FT1VUIG9uIHN1Y2Nlc3MsIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRl
ZCAqLworCWlmIChXQVJOX09OKHJldCA8IDApKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7
Cit9CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9kZV9mYl9jcmVhdGUoc3Ry
dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwK
KwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQpCit7CisJc3Ry
dWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKKwl1
bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQgPSBj
bWQtPmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgYnBwOworCWludCByZXQ7CisKKwlpZiAo
ZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGNtZC0+cGl4ZWxfZm9ybWF0KSAhPSAxKQorCQlyZXR1cm4g
RVJSX1BUUigtRUlOVkFMKTsKKworCWdlbSA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZp
bGUsIGNtZC0+aGFuZGxlc1swXSk7CisJaWYgKCFnZW0pCisJCXJldHVybiBFUlJfUFRSKC1FTk9F
TlQpOworCisJYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoY21kLT5waXhlbF9mb3JtYXQsIDAp
OworCXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQtPnBpdGNoZXNbMF0gKyB3aWR0aCAqIGJwcDsK
KwlzaXplICs9IGNtZC0+b2Zmc2V0c1swXTsKKworCWlmIChnZW0tPnNpemUgPCBzaXplKSB7CisJ
CXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQorCisJbXRrX2ZiID0gbXRr
X2RybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgY21kLCBnZW0pOworCWlmIChJU19FUlIobXRrX2Zi
KSkgeworCQlyZXQgPSBQVFJfRVJSKG10a19mYik7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQor
CisJcmV0dXJuICZtdGtfZmItPmJhc2U7CisKK3VucmVmZXJlbmNlOgorCWRybV9nZW1fb2JqZWN0
X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlm
ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmggYi9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjliMmFlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2RybV9mYi5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRkJfSAorI2RlZmluZSBNVEtfRFJN
X0ZCX0gKKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZmJfZ2V0X2dlbV9vYmooc3RydWN0
IGRybV9mcmFtZWJ1ZmZlciAqZmIpOworaW50IG10a19mYl93YWl0KHN0cnVjdCBkcm1fZnJhbWVi
dWZmZXIgKmZiKTsKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9kZV9mYl9jcmVh
dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAq
ZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQpOwor
CisjZW5kaWYgLyogTVRLX0RSTV9GQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NzNiZmEKLS0tIC9k
ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwpAQCAt
MCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg
KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNp
bmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8
bGludXgvZG1hLWJ1Zi5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJt
dGtfZHJtX2dlbS5oIgorCitzdGF0aWMgc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9n
ZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJdW5zaWduZWQgbG9uZyBzaXpl
KQoreworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW1fb2JqOworCWludCByZXQ7CisK
KwlzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKTsKKworCW10a19nZW1fb2JqID0ga3ph
bGxvYyhzaXplb2YoKm10a19nZW1fb2JqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtdGtfZ2VtX29i
aikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyZXQgPSBkcm1fZ2VtX29iamVjdF9p
bml0KGRldiwgJm10a19nZW1fb2JqLT5iYXNlLCBzaXplKTsKKwlpZiAocmV0IDwgMCkgeworCQlE
Uk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGdlbSBvYmplY3RcbiIpOworCQlrZnJlZSht
dGtfZ2VtX29iaik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIG10a19n
ZW1fb2JqOworfQorCitzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJtX2dlbV9jcmVhdGUo
c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgc2l6ZV90IHNpemUsIGJvb2wgYWxsb2Nf
a21hcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0
ZTsKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCXN0cnVjdCBkcm1fZ2VtX29i
amVjdCAqb2JqOworCWludCByZXQ7CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYs
IHNpemUpOworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBFUlJfQ0FTVChtdGtfZ2Vt
KTsKKworCW9iaiA9ICZtdGtfZ2VtLT5iYXNlOworCisJaW5pdF9kbWFfYXR0cnMoJm10a19nZW0t
PmRtYV9hdHRycyk7CisJZG1hX3NldF9hdHRyKERNQV9BVFRSX1dSSVRFX0NPTUJJTkUsICZtdGtf
Z2VtLT5kbWFfYXR0cnMpOworCisJaWYgKCFhbGxvY19rbWFwKQorCQlkbWFfc2V0X2F0dHIoRE1B
X0FUVFJfTk9fS0VSTkVMX01BUFBJTkcsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJbXRrX2dl
bS0+Y29va2llID0gZG1hX2FsbG9jX2F0dHJzKHByaXYtPmRtYV9kZXYsIG9iai0+c2l6ZSwKKwkJ
CQkJICAmbXRrX2dlbS0+ZG1hX2FkZHIsIEdGUF9LRVJORUwsCisJCQkJCSAgJm10a19nZW0tPmRt
YV9hdHRycyk7CisJaWYgKCFtdGtfZ2VtLT5jb29raWUpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQg
dG8gYWxsb2NhdGUgJXp4IGJ5dGUgZG1hIGJ1ZmZlciIsIG9iai0+c2l6ZSk7CisJCXJldCA9IC1F
Tk9NRU07CisJCWdvdG8gZXJyX2dlbV9mcmVlOworCX0KKworCWlmIChhbGxvY19rbWFwKQorCQlt
dGtfZ2VtLT5rdmFkZHIgPSBtdGtfZ2VtLT5jb29raWU7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJj
b29raWUgPSAlcCBkbWFfYWRkciA9ICVwYWQgc2l6ZSA9ICV6dVxuIiwKKwkJCSBtdGtfZ2VtLT5j
b29raWUsICZtdGtfZ2VtLT5kbWFfYWRkciwKKwkJCSBzaXplKTsKKworCXJldHVybiBtdGtfZ2Vt
OworCitlcnJfZ2VtX2ZyZWU6CisJZHJtX2dlbV9vYmplY3RfcmVsZWFzZShvYmopOworCWtmcmVl
KG10a19nZW0pOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3ZvaWQgbXRrX2RybV9nZW1f
ZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG10a19k
cm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7CisJc3RydWN0IG10a19k
cm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChtdGtfZ2Vt
LT5zZykKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgbXRrX2dlbS0+c2cpOworCWVsc2UK
KwkJZG1hX2ZyZWVfYXR0cnMocHJpdi0+ZG1hX2Rldiwgb2JqLT5zaXplLCBtdGtfZ2VtLT5jb29r
aWUsCisJCQkgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOwor
CisJLyogcmVsZWFzZSBmaWxlIHBvaW50ZXIgdG8gZ2VtIG9iamVjdC4gKi8KKwlkcm1fZ2VtX29i
amVjdF9yZWxlYXNlKG9iaik7CisKKwlrZnJlZShtdGtfZ2VtKTsKK30KKworaW50IG10a19kcm1f
Z2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2Rl
dmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKK3sK
KwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7CisKKwlhcmdzLT5w
aXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJwcCwgOCk7CisJYXJncy0+
c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0OworCisJbXRrX2dlbSA9IG10a19kcm1f
Z2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUsIGZhbHNlKTsKKwlpZiAoSVNfRVJSKG10a19nZW0p
KQorCQlyZXR1cm4gUFRSX0VSUihtdGtfZ2VtKTsKKworCS8qCisJICogYWxsb2NhdGUgYSBpZCBv
ZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBpcyByZWdpc3RlcmVkCisJICogYW5kIGhhbmRsZSBo
YXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2VlLgorCSAqLworCXJldCA9IGRybV9nZW1faGFuZGxl
X2NyZWF0ZShmaWxlX3ByaXYsICZtdGtfZ2VtLT5iYXNlLCAmYXJncy0+aGFuZGxlKTsKKwlpZiAo
cmV0KQorCQlnb3RvIGVycl9oYW5kbGVfY3JlYXRlOworCisJLyogZHJvcCByZWZlcmVuY2UgZnJv
bSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cuICovCisJZHJtX2dlbV9vYmplY3RfdW5y
ZWZlcmVuY2VfdW5sb2NrZWQoJm10a19nZW0tPmJhc2UpOworCisJcmV0dXJuIDA7CisKK2Vycl9o
YW5kbGVfY3JlYXRlOgorCW10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KCZtdGtfZ2VtLT5iYXNlKTsK
KwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRrX2RybV9nZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVj
dCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQz
Ml90IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVjdCBkcm1fZ2VtX29i
amVjdCAqb2JqOworCWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2
LCBmaWxlX3ByaXYsIGhhbmRsZSk7CisJaWYgKCFvYmopIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQg
dG8gbG9va3VwIGdlbSBvYmplY3QuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0
ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIG91
dDsKKworCSpvZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJm9iai0+dm1hX25vZGUp
OworCURSTV9ERUJVR19LTVMoIm9mZnNldCA9IDB4JWxseFxuIiwgKm9mZnNldCk7CisKK291dDoK
Kwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOworCXJldHVybiByZXQ7
Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9nZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1f
b2JqZWN0ICpvYmosCisJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCisKK3sKKwlp
bnQgcmV0OworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0gPSB0b19tdGtfZ2VtX29i
aihvYmopOworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBvYmotPmRldi0+ZGV2X3By
aXZhdGU7CisKKwkvKgorCSAqIGRtYV9hbGxvY19hdHRycygpIGFsbG9jYXRlZCBhIHN0cnVjdCBw
YWdlIHRhYmxlIGZvciBtdGtfZ2VtLCBzbyBjbGVhcgorCSAqIFZNX1BGTk1BUCBmbGFnIHRoYXQg
d2FzIHNldCBieSBkcm1fZ2VtX21tYXBfb2JqKCkvZHJtX2dlbV9tbWFwKCkuCisJICovCisJdm1h
LT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQOworCXZtYS0+dm1fcGdvZmYgPSAwOworCisJcmV0ID0g
ZG1hX21tYXBfYXR0cnMocHJpdi0+ZG1hX2Rldiwgdm1hLCBtdGtfZ2VtLT5jb29raWUsCisJCQkg
ICAgIG10a19nZW0tPmRtYV9hZGRyLCBvYmotPnNpemUsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOwor
CWlmIChyZXQpCisJCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsKKworCXJldHVybiByZXQ7Cit9CisK
K2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3Ry
dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9nZW1f
bW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK
KworCXJldHVybiBtdGtfZHJtX2dlbV9vYmplY3RfbW1hcChvYmosIHZtYSk7Cit9CisKK2ludCBt
dGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg
KnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJcmV0
ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor
CW9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIG10a19kcm1fZ2VtX29iamVj
dF9tbWFwKG9iaiwgdm1hKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgc2dfdGFibGUgZm9yIHRo
aXMgR0VNIG9iamVjdC4KKyAqIE5vdGU6IEJvdGggdGhlIHRhYmxlJ3MgY29udGVudHMsIGFuZCB0
aGUgc2dfdGFibGUgaXRzZWxmIG11c3QgYmUgZnJlZWQgYnkKKyAqICAgICAgIHRoZSBjYWxsZXIu
CisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHNnX3RhYmxlLCBv
ciBhbiBFUlJfUFRSKCkgZXJyb3IuCisgKi8KK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmlt
ZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG10
a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7CisJc3RydWN0IG10
a19kcm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgc2df
dGFibGUgKnNndDsKKwlpbnQgcmV0OworCisJc2d0ID0ga3phbGxvYyhzaXplb2YoKnNndCksIEdG
UF9LRVJORUwpOworCWlmICghc2d0KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXJl
dCA9IGRtYV9nZXRfc2d0YWJsZV9hdHRycyhwcml2LT5kbWFfZGV2LCBzZ3QsIG10a19nZW0tPmNv
b2tpZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9iai0+c2l6ZSwKKwkJCQkgICAgJm10
a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBh
bGxvY2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJlZShzZ3QpOworCQlyZXR1cm4gRVJSX1BU
UihyZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAq
bXRrX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ
CXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0IHNnX3RhYmxlICpzZykK
K3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7CisJc3RydWN0
IHNjYXR0ZXJsaXN0ICpzOworCXVuc2lnbmVkIGludCBpOworCWRtYV9hZGRyX3QgZXhwZWN0ZWQ7
CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYsIGF0dGFjaC0+ZG1hYnVmLT5zaXpl
KTsKKworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIobXRr
X2dlbSkpOworCisJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwlmb3JfZWFj
aF9zZyhzZy0+c2dsLCBzLCBzZy0+bmVudHMsIGkpIHsKKwkJaWYgKHNnX2RtYV9hZGRyZXNzKHMp
ICE9IGV4cGVjdGVkKSB7CisJCQlEUk1fRVJST1IoInNnX3RhYmxlIGlzIG5vdCBjb250aWd1b3Vz
Iik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJfZ2VtX2ZyZWU7CisJCX0KKwkJZXhw
ZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzKSArIHNnX2RtYV9sZW4ocyk7CisJfQorCisJbXRrX2dl
bS0+ZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwltdGtfZ2VtLT5zZyA9IHNn
OworCisJcmV0dXJuICZtdGtfZ2VtLT5iYXNlOworCitlcnJfZ2VtX2ZyZWU6CisJa2ZyZWUobXRr
X2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcm1fZ2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyYTU2Mgot
LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5o
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5j
LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLwor
CisjaWZuZGVmIF9NVEtfRFJNX0dFTV9IXworI2RlZmluZSBfTVRLX0RSTV9HRU1fSF8KKworI2lu
Y2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKy8qCisgKiBtdGsgZHJtIGJ1ZmZlciBzdHJ1Y3R1cmUu
CisgKgorICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KKyAqCS0gYSBuZXcgaGFuZGxlIHRvIHRoaXMg
Z2VtIG9iamVjdCB3b3VsZCBiZSBjcmVhdGVkCisgKglieSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUo
KS4KKyAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUgb2YgZG1hX2FsbG9jX2F0dHJzKCksIGtl
ZXAgaXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKKyAqIEBrdmFkZHI6IGtlcm5lbCB2aXJ0dWFsIGFk
ZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYWRkcjogZG1hIGFkZHJlc3Mgb2YgZ2VtIGJ1
ZmZlci4KKyAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1dGVzIG9mIGdlbSBidWZmZXIuCisgKgor
ICogUC5TLiB0aGlzIG9iamVjdCB3b3VsZCBiZSB0cmFuc2ZlcnJlZCB0byB1c2VyIGFzIGttc19i
by5oYW5kbGUgc28KKyAqCXVzZXIgY2FuIGFjY2VzcyB0aGUgYnVmZmVyIHRocm91Z2gga21zX2Jv
LmhhbmRsZS4KKyAqLworc3RydWN0IG10a19kcm1fZ2VtX29iaiB7CisJc3RydWN0IGRybV9nZW1f
b2JqZWN0CWJhc2U7CisJdm9pZAkJCSpjb29raWU7CisJdm9pZAkJCSprdmFkZHI7CisJZG1hX2Fk
ZHJfdAkJZG1hX2FkZHI7CisJc3RydWN0IGRtYV9hdHRycwlkbWFfYXR0cnM7CisJc3RydWN0IHNn
X3RhYmxlCQkqc2c7Cit9OworCisjZGVmaW5lIHRvX210a19nZW1fb2JqKHgpCWNvbnRhaW5lcl9v
Zih4LCBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqLCBiYXNlKQorCit2b2lkIG10a19kcm1fZ2VtX2Zy
ZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKTsKK3N0cnVjdCBtdGtfZHJtX2dl
bV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qg
c2l6ZSwKKwkJCQkJICAgYm9vbCBhbGxvY19rbWFwKTsKK2ludCBtdGtfZHJtX2dlbV9kdW1iX2Ny
ZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwK
KwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOworaW50IG10a19kcm1f
Z2VtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQlzdHJ1
Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBoYW5kbGUsCisJCQkJdWludDY0X3QgKm9mZnNl
dCk7CitpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2Fy
ZWFfc3RydWN0ICp2bWEpOworaW50IG10a19kcm1fZ2VtX21tYXBfYnVmKHN0cnVjdCBkcm1fZ2Vt
X29iamVjdCAqb2JqLAorCQkJIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK3N0cnVjdCBz
Z190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0
ICpvYmopOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZ2VtX3ByaW1lX2ltcG9ydF9zZ190
YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJc3RydWN0IGRtYV9idWZfYXR0YWNobWVu
dCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jODk4Nzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fcGxhbmUuYwpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRpYXRlay5jb20+
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK
KyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5j
bHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9o
ZWxwZXIuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19kcm1f
ZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1f
ZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorI2luY2x1ZGUgIm10a19kcm1fcGxhbmUu
aCIKKworc3RhdGljIGNvbnN0IHUzMiBmb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9YUkdCODg4
OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfUkdCNTY1LAorfTsKKworc3Rh
dGljIHZvaWQgbXRrX3BsYW5lX2VuYWJsZShzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5l
LCBib29sIGVuYWJsZSwKKwkJCSAgICAgZG1hX2FkZHJfdCBhZGRyLCBzdHJ1Y3QgZHJtX3JlY3Qg
KmRlc3QpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX3BsYW5lLT5iYXNlOwor
CXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5l
LT5zdGF0ZSk7CisJdW5zaWduZWQgaW50IHBpdGNoLCBmb3JtYXQ7CisJaW50IHgsIHk7CisKKwlp
ZiAoV0FSTl9PTighcGxhbmUtPnN0YXRlIHx8IChlbmFibGUgJiYgIXBsYW5lLT5zdGF0ZS0+ZmIp
KSkKKwkJcmV0dXJuOworCisJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpIHsKKwkJcGl0Y2ggPSBwbGFu
ZS0+c3RhdGUtPmZiLT5waXRjaGVzWzBdOworCQlmb3JtYXQgPSBwbGFuZS0+c3RhdGUtPmZiLT5w
aXhlbF9mb3JtYXQ7CisJfSBlbHNlIHsKKwkJcGl0Y2ggPSAwOworCQlmb3JtYXQgPSBEUk1fRk9S
TUFUX1JHQkE4ODg4OworCX0KKworCXggPSBwbGFuZS0+c3RhdGUtPmNydGNfeDsKKwl5ID0gcGxh
bmUtPnN0YXRlLT5jcnRjX3k7CisKKwlpZiAoeCA8IDApIHsKKwkJYWRkciAtPSB4ICogNDsKKwkJ
eCA9IDA7CisJfQorCisJaWYgKHkgPCAwKSB7CisJCWFkZHIgLT0geSAqIHBpdGNoOworCQl5ID0g
MDsKKwl9CisKKwlzdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBlbmFibGU7CisJc3RhdGUtPnBlbmRp
bmcucGl0Y2ggPSBwaXRjaDsKKwlzdGF0ZS0+cGVuZGluZy5mb3JtYXQgPSBmb3JtYXQ7CisJc3Rh
dGUtPnBlbmRpbmcuYWRkciA9IGFkZHI7CisJc3RhdGUtPnBlbmRpbmcueCA9IHg7CisJc3RhdGUt
PnBlbmRpbmcueSA9IHk7CisJc3RhdGUtPnBlbmRpbmcud2lkdGggPSBkZXN0LT54MiAtIGRlc3Qt
PngxOworCXN0YXRlLT5wZW5kaW5nLmhlaWdodCA9IGRlc3QtPnkyIC0gZGVzdC0+eTE7CisJd21i
KCk7IC8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcGFyYW1ldGVycyBhcmUgc2V0IGJlZm9yZSB1cGRh
dGUgKi8KKwlzdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIG10
a19wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgbXRrX3Bs
YW5lX3N0YXRlICpzdGF0ZTsKKworCWlmIChwbGFuZS0+c3RhdGUpIHsKKwkJaWYgKHBsYW5lLT5z
dGF0ZS0+ZmIpCisJCQlkcm1fZnJhbWVidWZmZXJfdW5yZWZlcmVuY2UocGxhbmUtPnN0YXRlLT5m
Yik7CisKKwkJc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJbWVt
c2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJfSBlbHNlIHsKKwkJc3RhdGUgPSBremFs
bG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzdGF0ZSkKKwkJCXJldHVy
bjsKKwkJcGxhbmUtPnN0YXRlID0gJnN0YXRlLT5iYXNlOworCX0KKworCXN0YXRlLT5iYXNlLnBs
YW5lID0gcGxhbmU7CisJc3RhdGUtPnBlbmRpbmcuZm9ybWF0ID0gRFJNX0ZPUk1BVF9SR0I1NjU7
Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICptdGtfcGxhbmVfZHVwbGljYXRl
X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCBtdGtfcGxhbmVfc3Rh
dGUgKm9sZF9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCXN0cnVj
dCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3Rh
dGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4gTlVMTDsKKworCV9fZHJt
X2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHBsYW5lLCAmc3RhdGUtPmJhc2Up
OworCisJV0FSTl9PTihzdGF0ZS0+YmFzZS5wbGFuZSAhPSBwbGFuZSk7CisKKwlzdGF0ZS0+cGVu
ZGluZyA9IG9sZF9zdGF0ZS0+cGVuZGluZzsKKworCXJldHVybiAmc3RhdGUtPmJhc2U7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19kcm1fcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5l
ICpwbGFuZSwKKwkJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJX19kcm1f
YXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKHBsYW5lLCBzdGF0ZSk7CisJa2ZyZWUo
dG9fbXRrX3BsYW5lX3N0YXRlKHN0YXRlKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt
X3BsYW5lX2Z1bmNzIG10a19wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0
b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19o
ZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGRybV9wbGFuZV9jbGVhbnVwLAorCS5y
ZXNldCA9IG10a19wbGFuZV9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IG10a19w
bGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gbXRrX2RybV9w
bGFuZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGludCBtdGtfcGxhbmVfYXRvbWljX2No
ZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgc3RydWN0IGRybV9wbGFuZV9zdGF0
ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJ
c3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCWJvb2wgdmlzaWJsZTsKKwlzdHJ1
Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUtPmNydGNfeCwKKwkJLnkxID0gc3Rh
dGUtPmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmNydGNfeCArIHN0YXRlLT5jcnRjX3csCisJCS55
MiA9IHN0YXRlLT5jcnRjX3kgKyBzdGF0ZS0+Y3J0Y19oLAorCX07CisJc3RydWN0IGRybV9yZWN0
IHNyYyA9IHsKKwkJLyogMTYuMTYgZml4ZWQgcG9pbnQgKi8KKwkJLngxID0gc3RhdGUtPnNyY194
LAorCQkueTEgPSBzdGF0ZS0+c3JjX3ksCisJCS54MiA9IHN0YXRlLT5zcmNfeCArIHN0YXRlLT5z
cmNfdywKKwkJLnkyID0gc3RhdGUtPnNyY195ICsgc3RhdGUtPnNyY19oLAorCX07CisJc3RydWN0
IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWZiKQorCQlyZXR1cm4gMDsKKworCWlm
ICghbXRrX2ZiX2dldF9nZW1fb2JqKGZiKSkgeworCQlEUk1fREVCVUdfS01TKCJidWZmZXIgaXMg
bnVsbFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICghc3RhdGUtPmNydGMpCisJ
CXJldHVybiAwOworCisJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3Rh
dGUtPnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7CisJaWYgKElTX0VSUihjcnRjX3N0YXRlKSkKKwkJcmV0
dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisKKwljbGlwLngyID0gY3J0Y19zdGF0ZS0+bW9kZS5o
ZGlzcGxheTsKKwljbGlwLnkyID0gY3J0Y19zdGF0ZS0+bW9kZS52ZGlzcGxheTsKKworCXJldHVy
biBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShwbGFuZSwgc3RhdGUtPmNydGMsIGZiLAor
CQkJCQkgICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJCQkJICAgICBEUk1fUExBTkVfSEVMUEVS
X05PX1NDQUxJTkcsCisJCQkJCSAgICAgRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAorCQkJ
CQkgICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3BsYW5l
X2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgIHN0cnVjdCBk
cm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpz
dGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCXN0cnVjdCBkcm1fY3J0
YyAqY3J0YyA9IHN0YXRlLT5iYXNlLmNydGM7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07
CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlzdHJ1Y3QgbXRrX2RybV9wbGFu
ZSAqbXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5lKTsKKwlzdHJ1Y3QgZHJtX3JlY3QgZGVz
dCA9IHsKKwkJLngxID0gc3RhdGUtPmJhc2UuY3J0Y194LAorCQkueTEgPSBzdGF0ZS0+YmFzZS5j
cnRjX3ksCisJCS54MiA9IHN0YXRlLT5iYXNlLmNydGNfeCArIHN0YXRlLT5iYXNlLmNydGNfdywK
KwkJLnkyID0gc3RhdGUtPmJhc2UuY3J0Y195ICsgc3RhdGUtPmJhc2UuY3J0Y19oLAorCX07CisJ
c3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWNydGMpCisJCXJldHVybjsK
KworCWNsaXAueDIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+bW9kZS5oZGlzcGxheTsKKwlj
bGlwLnkyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUtPm1vZGUudmRpc3BsYXk7CisJZHJtX3Jl
Y3RfaW50ZXJzZWN0KCZkZXN0LCAmY2xpcCk7CisKKwlnZW0gPSBtdGtfZmJfZ2V0X2dlbV9vYmoo
c3RhdGUtPmJhc2UuZmIpOworCW10a19nZW0gPSB0b19tdGtfZ2VtX29iaihnZW0pOworCW10a19w
bGFuZV9lbmFibGUobXRrX3BsYW5lLCB0cnVlLCBtdGtfZ2VtLT5kbWFfYWRkciwgJmRlc3QpOwor
fQorCitzdGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFu
ZSAqcGxhbmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7
CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxh
bmUtPnN0YXRlKTsKKworCXN0YXRlLT5wZW5kaW5nLmVuYWJsZSA9IGZhbHNlOworCXdtYigpOyAv
KiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlciBpcyBzZXQgYmVmb3JlIHVwZGF0ZSAqLwor
CXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBk
cm1fcGxhbmVfaGVscGVyX2Z1bmNzIG10a19wbGFuZV9oZWxwZXJfZnVuY3MgPSB7CisJLmF0b21p
Y19jaGVjayA9IG10a19wbGFuZV9hdG9taWNfY2hlY2ssCisJLmF0b21pY191cGRhdGUgPSBtdGtf
cGxhbmVfYXRvbWljX3VwZGF0ZSwKKwkuYXRvbWljX2Rpc2FibGUgPSBtdGtfcGxhbmVfYXRvbWlj
X2Rpc2FibGUsCit9OworCitpbnQgbXRrX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl
diwgc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBw
b3NzaWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBp
bnQgenBvcykKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0
KGRldiwgJm10a19wbGFuZS0+YmFzZSwgcG9zc2libGVfY3J0Y3MsCisJCQkJICAgICAgICZtdGtf
cGxhbmVfZnVuY3MsIGZvcm1hdHMsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoZm9ybWF0cyksIHR5
cGUsIE5VTEwpOworCWlmIChlcnIpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6
ZSBwbGFuZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZHJtX3BsYW5lX2hlbHBlcl9hZGQo
Jm10a19wbGFuZS0+YmFzZSwgJm10a19wbGFuZV9oZWxwZXJfZnVuY3MpOworCW10a19wbGFuZS0+
aWR4ID0genBvczsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kcm1fcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZHJtX3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhN2IzZQot
LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5l
LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ
bmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX01US19E
Uk1fUExBTkVfSF8KKyNkZWZpbmUgX01US19EUk1fUExBTkVfSF8KKworI2luY2x1ZGUgPGRybS9k
cm1fY3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBtdGtfZHJtX3Bs
YW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOworCXVuc2lnbmVkIGludAkJCWlkeDsKK307
CisKK3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSB7CisJYm9vbAkJCQljb25maWc7CisJ
Ym9vbAkJCQllbmFibGU7CisJZG1hX2FkZHJfdAkJCWFkZHI7CisJdW5zaWduZWQgaW50CQkJcGl0
Y2g7CisJdW5zaWduZWQgaW50CQkJZm9ybWF0OworCXVuc2lnbmVkIGludAkJCXg7CisJdW5zaWdu
ZWQgaW50CQkJeTsKKwl1bnNpZ25lZCBpbnQJCQl3aWR0aDsKKwl1bnNpZ25lZCBpbnQJCQloZWln
aHQ7CisJYm9vbAkJCQlkaXJ0eTsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfc3RhdGUgeworCXN0
cnVjdCBkcm1fcGxhbmVfc3RhdGUJCWJhc2U7CisJc3RydWN0IG10a19wbGFuZV9wZW5kaW5nX3N0
YXRlCXBlbmRpbmc7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHJtX3BsYW5lICp0
b19tdGtfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJcmV0dXJuIGNvbnRhaW5l
cl9vZihwbGFuZSwgc3RydWN0IG10a19kcm1fcGxhbmUsIGJhc2UpOworfQorCitzdGF0aWMgaW5s
aW5lIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKgordG9fbXRrX3BsYW5lX3N0YXRlKHN0cnVjdCBk
cm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc3RhdGUsIHN0
cnVjdCBtdGtfcGxhbmVfc3RhdGUsIGJhc2UpOworfQorCitpbnQgbXRrX3BsYW5lX2luaXQoc3Ry
dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwKKwkJ
ICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBl
LAorCQkgICB1bnNpZ25lZCBpbnQgenBvcyk7CisKKyNlbmRpZgotLSAKMi44LjAucmMzCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFp
bGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m
cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK