From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v7 02/14] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.
Date: Mon, 30 Nov 2015 22:07:44 +0100
Message-ID: <1448917676-25584-3-git-send-email-p.zabel@pengutronix.de>
References: <1448917676-25584-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: <1448917676-25584-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 , devicetree@vger.kernel.org, Paul Bolle , YT Shen , Jitao Shi , Jie Qiu , Pawel Moll , Ian Campbell , Cawa Cheng , Tomasz Figa , Rob Herring , linux-mediatek@lists.infradead.org, Kumar Gala , Matthias Brugger , kernel@pengutronix.de
List-Id: devicetree@vger.kernel.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0
aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0
IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM
MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln
bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg
U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IFBoaWxpcHAgWmFiZWwg
PHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0tLQpDaGFuZ2VzIHNpbmNlIHY2OgogLSBTcGxpdCBk
aXNwX292bCBkcml2ZXIgZnJvbSBtdGtfZHJtX2NydGMgY29kZQogLSBBZGRlZCBjcnRjIGFuZCBw
bGFuZSBzdGF0ZSBhdG9taWMgcmVzZXQgZnVuY3Rpb25zCiAtIFRvbmVkIGRvd24gZGVidWcgbWVz
c2FnZXMKIC0gSW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcgZm9yIGhhcmR3YXJlIGluaXRpYWxpemF0
aW9uCiAtIEdldC9wdXQgc21pX2xhcmIgaW4gY3J0Y19lbmFibGUvZGlzYWJsZQogLSBBZGRlZCBt
ZW1vcnkgYmFycmllciBiZWZvcmUgbWFya2luZyBjcnRjIHN0YXRlIGFzIHJlYWR5CiAtIENoYW5n
ZWQgY3J0Y19kaXNhYmxlIHRvIHdhaXQgZm9yIHZibGFuawogLSBSZW5hbWVkIGNvbXBvbmVudCBw
b3dlcl9vbi9vZmYgdG8gc3RhcnQvc3RvcAogLSBNYWRlIGNvbXBvbmVudCBvcHMgb3B0aW9uYWwK
IC0gTW92ZWQgY3J0YyBjcmVhdGlvbiBmcm9tIGRpc3Bfb3ZsIGRyaXZlciBiaW5kIGNhbGxiYWNr
IGludG8gbXRrX2RybV9rbXNfaW5pdAogLSBWYXJpb3VzIGZpeGVzCiAtIEFkZGVkIHN1cHBvcnQg
Zm9yIERSSVZFUl9QUklNRSBmZWF0dXJlCiAtIE1vdmVkIERJU1BfT1ZMLCBEU0ksIERQSSBhbmQg
Y29tcG9uZW50IGluaXRpYWxpemF0aW9uIGludG8gdGhlIHJlc3BlY3RpdmUgZHJpdmVycwotLS0K
IGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJp
dmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyAgICAgICAgICAgIHwgIDE2ICsKIGRyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9NYWtlZmlsZSAgICAgICAgICAgfCAgMTEgKwogZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kaXNwX292bC5jICAgICB8IDMwMSArKysrKysrKysrKysrKysKIGRyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYyAgICAgfCA1NjUgKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5o
ICAgICB8ICAzMSArKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgICAg
ICB8IDM1NSArKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cm1fZGRwLmggICAgICB8ICA0MSArKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f
ZGRwX2NvbXAuYyB8IDI3NSArKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fZGRwX2NvbXAuaCB8IDE0OCArKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19kcm1fZHJ2LmMgICAgICB8IDU2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysK
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAgfCAgNTMgKysrCiBk
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwgMTM1ICsrKysrKysK
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmggICAgICAgfCAgMjggKysKIGRy
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jICAgICAgfCAyMjcgKysrKysrKysr
KysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAgNTUgKysr
CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jICAgIHwgMjM4ICsrKysr
KysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCAgICB8ICA1
OCArKysKIDE5IGZpbGVzIGNoYW5nZWQsIDMxMDIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2
NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQg
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCiBjcmVhdGUgbW9kZSAxMDA2
NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCiBjcmVhdGUgbW9kZSAx
MDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBf
Y29tcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cm1fZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2ZiLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9mYi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fZ2VtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9nZW0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX3BsYW5lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tj
b25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCBjNGJmOWExLi44ZmRiMGMyIDEw
MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0v
S2NvbmZpZwpAQCAtMjY2LDMgKzI2Niw1IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2FtZC9h
bWRrZmQvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2lteC9LY29uZmlnIgogCiBz
b3VyY2UgImRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtl
ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCAxZTlmZjRjLi42MDdhNDlmIDEw
MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJt
L01ha2VmaWxlCkBAIC03MSw2ICs3MSw3IEBAIG9iai0kKENPTkZJR19EUk1fTVNNKSArPSBtc20v
CiBvYmotJChDT05GSUdfRFJNX1RFR1JBKSArPSB0ZWdyYS8KIG9iai0kKENPTkZJR19EUk1fU1RJ
KSArPSBzdGkvCiBvYmotJChDT05GSUdfRFJNX0lNWCkgKz0gaW14Lworb2JqLSQoQ09ORklHX0RS
TV9NRURJQVRFSykgKz0gbWVkaWF0ZWsvCiBvYmoteQkJCSs9IGkyYy8KIG9iai15CQkJKz0gcGFu
ZWwvCiBvYmoteQkJCSs9IGJyaWRnZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0M2NmMQotLS0gL2Rldi9udWxsCisrKyBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBAIC0wLDAgKzEsMTYgQEAKK2NvbmZpZyBE
Uk1fTUVESUFURUsKKwl0cmlzdGF0ZSAiRFJNIFN1cHBvcnQgZm9yIE1lZGlhdGVrIFNvQ3MiCisJ
ZGVwZW5kcyBvbiBEUk0KKwlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwgKEFSTSAmJiBDT01Q
SUxFX1RFU1QpCisJc2VsZWN0IE1US19TTUkKKwlzZWxlY3QgRFJNX1BBTkVMCisJc2VsZWN0IERS
TV9NSVBJX0RTSQorCXNlbGVjdCBEUk1fUEFORUxfU0lNUExFCisJc2VsZWN0IERSTV9LTVNfSEVM
UEVSCisJc2VsZWN0IElPTU1VX0RNQQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5
b3UgaGF2ZSBhIE1lZGlhdGVrIFNvQ3MuCisJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1l
ZGlhdGVrLWRybQorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsIG1vZGUgc2V0dGluZyBh
bmQKKwkgIGJ1ZmZlciBtYW5hZ2VtZW50IHRvIHVzZXJzcGFjZS4KKwpkaWZmIC0tZ2l0IGEvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNmU4ZGYKLS0t
IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTAs
MCArMSwxMSBAQAorbWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAorCQkgIG10a19k
cm1fY3J0Yy5vIFwKKwkJICBtdGtfZHJtX2RkcC5vIFwKKwkJICBtdGtfZHJtX2RkcF9jb21wLm8g
XAorCQkgIG10a19kcm1fZHJ2Lm8gXAorCQkgIG10a19kcm1fZmIubyBcCisJCSAgbXRrX2RybV9n
ZW0ubyBcCisJCSAgbXRrX2RybV9wbGFuZS5vCisKK29iai0kKENPTkZJR19EUk1fTUVESUFURUsp
ICs9IG1lZGlhdGVrLWRybS5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZGlzcF9vdmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwu
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDVkYTA2Ci0tLSAvZGV2L251
bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCkBAIC0wLDAg
KzEsMzAxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisg
KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1
ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgv
Y29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu
dXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNs
dWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisKKyNk
ZWZpbmUgRElTUF9SRUdfT1ZMX0lOVEVOCQkJMHgwMDA0CisjZGVmaW5lIE9WTF9GTUVfQ1BMX0lO
VAkJCQkJQklUKDEpCisjZGVmaW5lIERJU1BfUkVHX09WTF9JTlRTVEEJCQkweDAwMDgKKyNkZWZp
bmUgRElTUF9SRUdfT1ZMX0VOCQkJCTB4MDAwYworI2RlZmluZSBESVNQX1JFR19PVkxfUlNUCQkJ
MHgwMDE0CisjZGVmaW5lIERJU1BfUkVHX09WTF9ST0lfU0laRQkJCTB4MDAyMAorI2RlZmluZSBE
SVNQX1JFR19PVkxfUk9JX0JHQ0xSCQkJMHgwMDI4CisjZGVmaW5lIERJU1BfUkVHX09WTF9TUkNf
Q09OCQkJMHgwMDJjCisjZGVmaW5lIERJU1BfUkVHX09WTF9DT04obikJCQkoMHgwMDMwICsgMHgy
MCAqIG4pCisjZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfU0laRShuKQkJKDB4MDAzOCArIDB4MjAg
KiBuKQorI2RlZmluZSBESVNQX1JFR19PVkxfT0ZGU0VUKG4pCQkJKDB4MDAzYyArIDB4MjAgKiBu
KQorI2RlZmluZSBESVNQX1JFR19PVkxfUElUQ0gobikJCQkoMHgwMDQ0ICsgMHgyMCAqIG4pCisj
ZGVmaW5lIERJU1BfUkVHX09WTF9SRE1BX0NUUkwobikJCSgweDAwYzAgKyAweDIwICogbikKKyNk
ZWZpbmUgRElTUF9SRUdfT1ZMX1JETUFfR01DKG4pCQkoMHgwMGM4ICsgMHgyMCAqIG4pCisjZGVm
aW5lIERJU1BfUkVHX09WTF9BRERSKG4pCQkJKDB4MGY0MCArIDB4MjAgKiBuKQorCitlbnVtIE9W
TF9JTlBVVF9GT1JNQVQgeworCU9WTF9JTkZNVF9SR0I1NjUgPSAwLAorCU9WTF9JTkZNVF9SR0I4
ODggPSAxLAorCU9WTF9JTkZNVF9SR0JBODg4OCA9IDIsCisJT1ZMX0lORk1UX0FSR0I4ODg4ID0g
MywKK307CisKKyNkZWZpbmUJT1ZMX1JETUFfTUVNX0dNQwkweDQwNDAyMDIwCisjZGVmaW5lCU9W
TF9BRU4JCQlCSVQoOCkKKyNkZWZpbmUJT1ZMX0FMUEhBCQkweGZmCisKKy8qKgorICogc3RydWN0
IG10a19kaXNwX292bCAtIERJU1BfT1ZMIGRyaXZlciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAt
IHN0cnVjdHVyZSBjb250YWluaW5nIHR5cGUgZW51bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisg
KiBAZHJtX2RldmljZSAtIGJhY2tsaW5rIHRvIGFsbG93IHRoZSBpcnEgaGFuZGxlciB0byBmaW5k
IHRoZSBhc3NvY2lhdGVkIGNydGMKKyAqLworc3RydWN0IG10a19kaXNwX292bCB7CisJc3RydWN0
IG10a19kZHBfY29tcAkJZGRwX2NvbXA7CisJc3RydWN0IGRybV9kZXZpY2UJCSpkcm1fZGV2Owor
fTsKKworc3RhdGljIGlycXJldHVybl90IG10a19kaXNwX292bF9pcnFfaGFuZGxlcihpbnQgaXJx
LCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGRldl9pZDsK
KwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSAmcHJpdi0+ZGRwX2NvbXA7CisKKwkvKiBDbGVh
ciBmcmFtZSBjb21wbGV0aW9uIGludGVycnVwdCAqLworCXdyaXRlbCgweDAsIG92bC0+cmVncyAr
IERJU1BfUkVHX09WTF9JTlRTVEEpOworCisJbXRrX2NydGNfZGRwX2lycShwcml2LT5kcm1fZGV2
LCBvdmwpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3Zs
X2VuYWJsZV92Ymxhbmsodm9pZCBfX2lvbWVtICpkaXNwX2Jhc2UpCit7CisJd3JpdGVsKE9WTF9G
TUVfQ1BMX0lOVCwgZGlzcF9iYXNlICsgRElTUF9SRUdfT1ZMX0lOVEVOKTsKK30KKworc3RhdGlj
IHZvaWQgbXRrX292bF9kaXNhYmxlX3ZibGFuayh2b2lkIF9faW9tZW0gKmRpc3BfYmFzZSkKK3sK
Kwl3cml0ZWwoMHgwLCBkaXNwX2Jhc2UgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQorCitzdGF0
aWMgdm9pZCBtdGtfb3ZsX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3Jp
dGVsKDB4MSwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9FTik7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19vdmxfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbCgweDAs
IGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3Zs
X2NvbmZpZyh2b2lkIF9faW9tZW0gKm92bF9iYXNlLAorCQl1bnNpZ25lZCBpbnQgdywgdW5zaWdu
ZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwlpZiAodyAhPSAwICYmIGggIT0g
MCkKKwkJd3JpdGVsKGggPDwgMTYgfCB3LCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9ST0lfU0la
RSk7CisJd3JpdGVsKDB4MCwgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfUk9JX0JHQ0xSKTsKKwor
CXdyaXRlbCgweDEsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1JTVCk7CisJd3JpdGVsKDB4MCwg
b3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfUlNUKTsKK30KKworc3RhdGljIGJvb2wgaGFzX3JiX3N3
YXBwZWQodW5zaWduZWQgaW50IGZtdCkKK3sKKwlzd2l0Y2ggKGZtdCkgeworCWNhc2UgRFJNX0ZP
Uk1BVF9CR1I4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKKwljYXNlIERSTV9GT1JNQVRf
QUJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9C
R1JBODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6CisJCXJldHVybiB0cnVlOworCWRl
ZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3Zs
X2ZtdF9jb252ZXJ0KHVuc2lnbmVkIGludCBmbXQpCit7CisJc3dpdGNoIChmbXQpIHsKKwljYXNl
IERSTV9GT1JNQVRfUkdCODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6CisJCXJldHVybiBP
VkxfSU5GTVRfUkdCODg4OworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJY2FzZSBEUk1fRk9S
TUFUX0JHUjU2NToKKwkJcmV0dXJuIE9WTF9JTkZNVF9SR0I1NjU7CisJY2FzZSBEUk1fRk9STUFU
X1JHQlg4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwljYXNlIERSTV9GT1JNQVRf
QkdSWDg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4OgorCQlyZXR1cm4gT1ZMX0lORk1U
X0FSR0I4ODg4OworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRf
QVJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9B
QkdSODg4ODoKKwkJcmV0dXJuIE9WTF9JTkZNVF9SR0JBODg4ODsKKwlkZWZhdWx0OgorCQlEUk1f
RVJST1IoInVuc3VwcG9ydGVkIGZvcm1hdFslMDh4XVxuIiwgZm10KTsKKwkJcmV0dXJuIE9WTF9J
TkZNVF9SR0I4ODg7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29uKHZvaWQg
X19pb21lbSAqb3ZsX2Jhc2UsIHVuc2lnbmVkIGludCBpZHgpCit7CisJdW5zaWduZWQgaW50IHJl
ZzsKKworCXdyaXRlbCgweDEsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1JETUFfQ1RSTChpZHgp
KTsKKwl3cml0ZWwoT1ZMX1JETUFfTUVNX0dNQywgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfUkRN
QV9HTUMoaWR4KSk7CisKKwlyZWcgPSByZWFkbChvdmxfYmFzZSArIERJU1BfUkVHX09WTF9TUkNf
Q09OKTsKKwlyZWcgPSByZWcgfCAoMSA8PCBpZHgpOworCXdyaXRlbChyZWcsIG92bF9iYXNlICsg
RElTUF9SRUdfT1ZMX1NSQ19DT04pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29m
Zih2b2lkIF9faW9tZW0gKm92bF9iYXNlLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVuc2lnbmVk
IGludCByZWc7CisKKwlyZWcgPSByZWFkbChvdmxfYmFzZSArIERJU1BfUkVHX09WTF9TUkNfQ09O
KTsKKwlyZWcgPSByZWcgJiB+KDEgPDwgaWR4KTsKKwl3cml0ZWwocmVnLCBvdmxfYmFzZSArIERJ
U1BfUkVHX09WTF9TUkNfQ09OKTsKKworCXdyaXRlbCgweDAsIG92bF9iYXNlICsgRElTUF9SRUdf
T1ZMX1JETUFfQ1RSTChpZHgpKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9jb25m
aWcodm9pZCBfX2lvbWVtICpvdmxfYmFzZSwgdW5zaWduZWQgaW50IGlkeCwKKwkJc3RydWN0IG10
a19wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9wZW5kaW5nX3N0YXRl
ICpwZW5kaW5nID0gJnN0YXRlLT5wZW5kaW5nOworCXVuc2lnbmVkIGludCBhZGRyID0gcGVuZGlu
Zy0+YWRkcjsKKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBwZW5kaW5nLT5waXRjaCAmIDB4ZmZmZjsK
Kwl1bnNpZ25lZCBpbnQgZm10ID0gcGVuZGluZy0+Zm9ybWF0OworCXVuc2lnbmVkIGludCBvZmZz
ZXQgPSAocGVuZGluZy0+eSA8PCAxNikgfCBwZW5kaW5nLT54OworCXVuc2lnbmVkIGludCBzcmNf
c2l6ZSA9IChwZW5kaW5nLT5oZWlnaHQgPDwgMTYpIHwgcGVuZGluZy0+d2lkdGg7CisJdW5zaWdu
ZWQgaW50IGNvbjsKKworCWNvbiA9IGhhc19yYl9zd2FwcGVkKGZtdCkgPDwgMjQgfCBvdmxfZm10
X2NvbnZlcnQoZm10KSA8PCAxMjsKKwlpZiAoaWR4ICE9IDApCisJCWNvbiB8PSBPVkxfQUVOIHwg
T1ZMX0FMUEhBOworCisJd3JpdGVsKGNvbiwgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfQ09OKGlk
eCkpOworCXdyaXRlbChwaXRjaCwgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfUElUQ0goaWR4KSk7
CisJd3JpdGVsKHNyY19zaXplLCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9TUkNfU0laRShpZHgp
KTsKKwl3cml0ZWwob2Zmc2V0LCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9PRkZTRVQoaWR4KSk7
CisJd3JpdGVsKGFkZHIsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX0FERFIoaWR4KSk7Cit9CisK
K3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIG10a19kaXNwX292bF9mdW5j
cyA9IHsKKwkuY29uZmlnID0gbXRrX292bF9jb25maWcsCisJLnN0YXJ0ID0gbXRrX292bF9zdGFy
dCwKKwkuc3RvcCA9IG10a19vdmxfc3RvcCwKKwkuZW5hYmxlX3ZibGFuayA9IG10a19vdmxfZW5h
YmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSBtdGtfb3ZsX2Rpc2FibGVfdmJsYW5rLAor
CS5sYXllcl9vbiA9IG10a19vdmxfbGF5ZXJfb24sCisJLmxheWVyX29mZiA9IG10a19vdmxfbGF5
ZXJfb2ZmLAorCS5sYXllcl9jb25maWcgPSBtdGtfb3ZsX2xheWVyX2NvbmZpZywKK307CisKK3N0
YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2
aWNlICptYXN0ZXIsCisJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJp
diA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0g
ZGF0YTsKKwlpbnQgcmV0OworCisJcHJpdi0+ZHJtX2RldiA9IGRybV9kZXY7CisKKwlyZXQgPSBt
dGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKKwlpZiAocmV0
IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb21wb25lbnQgJXM6
ICVkXG4iLAorCQkJZGV2LT5vZl9ub2RlLT5mdWxsX25hbWUsIHJldCk7CisJCXJldHVybiByZXQ7
CisJfQorCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX3VuYmlu
ZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJdm9pZCAqZGF0
YSkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7
CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCisJbXRrX2RkcF9jb21wX3Vu
cmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKK30KKworc3RhdGljIGNvbnN0IHN0
cnVjdCBjb21wb25lbnRfb3BzIG10a19kaXNwX292bF9jb21wb25lbnRfb3BzID0geworCS5iaW5k
CT0gbXRrX2Rpc3Bfb3ZsX2JpbmQsCisJLnVuYmluZCA9IG10a19kaXNwX292bF91bmJpbmQsCit9
OworCitzdGF0aWMgaW50IG10a19kaXNwX292bF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl
ICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10
a19kaXNwX292bCAqcHJpdjsKKwlpbnQgY29tcF9pZDsKKwlpbnQgaXJxOworCWludCByZXQ7CisK
Kwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJ
aWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEo
cGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisKKwlyZXQgPSBkZXZtX3Jl
cXVlc3RfaXJxKGRldiwgaXJxLCBtdGtfZGlzcF9vdmxfaXJxX2hhbmRsZXIsCisJCQkgICAgICAg
SVJRRl9UUklHR0VSX05PTkUsIGRldl9uYW1lKGRldiksIHByaXYpOworCWlmIChyZXQgPCAwKSB7
CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxuIiwgaXJxLCBy
ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWNvbXBfaWQgPSBtdGtfZGRwX2NvbXBfZ2V0X2lk
KGRldi0+b2Zfbm9kZSwgTVRLX0RJU1BfT1ZMKTsKKwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2
X2VycihkZXYsICJGYWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsK
KwkJcmV0dXJuIGNvbXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBk
ZXYtPm9mX25vZGUsICZwcml2LT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkmbXRrX2Rpc3Bfb3Zs
X2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxp
emUgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9y
bV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKKworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAm
bXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAi
RmFpbGVkIHRvIGFkZCBjb21wb25lbnQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30K
Kworc3RhdGljIGludCBtdGtfZGlzcF9vdmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug
KnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmbXRrX2Rpc3Bfb3ZsX2NvbXBv
bmVudF9vcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2
aWNlX2lkIG10a19kaXNwX292bF9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxl
ID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW92bCIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklD
RV9UQUJMRShvZiwgbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0
Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbXRrX2Rpc3Bf
b3ZsX3Byb2JlLAorCS5yZW1vdmUJCT0gbXRrX2Rpc3Bfb3ZsX3JlbW92ZSwKKwkuZHJpdmVyCQk9
IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZGlzcC1vdmwiLAorCQkub3duZXIJPSBUSElTX01PRFVM
RSwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCwKKwl9
LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMu
YyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzA1NDBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCkBAIC0wLDAgKzEsNTY1IEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0g
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor
ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2
ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGFzbS9iYXJyaWVy
Lmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxw
ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry
bV9wbGFuZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51
eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8c29jL21lZGlhdGVrL3NtaS5oPgorCisjaW5jbHVk
ZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJt
dGtfZHJtX2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJt
dGtfZHJtX2dlbS5oIgorI2luY2x1ZGUgIm10a19kcm1fcGxhbmUuaCIKKworLyoqCisgKiBzdHJ1
Y3QgbXRrX2RybV9jcnRjIC0gTWVkaWFUZWsgc3BlY2lmaWMgY3J0YyBzdHJ1Y3R1cmUuCisgKiBA
YmFzZTogY3J0YyBvYmplY3QuCisgKiBAcGlwZTogYSBjcnRjIGluZGV4IGNyZWF0ZWQgYXQgbG9h
ZCgpIHdpdGggYSBuZXcgY3J0YyBvYmplY3QgY3JlYXRpb24KKyAqCWFuZCB0aGUgY3J0YyBvYmpl
Y3Qgd291bGQgYmUgc2V0IHRvIHByaXZhdGUtPmNydGMgYXJyYXkKKyAqCXRvIGdldCBhIGNydGMg
b2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwaXBlIGZyb20gcHJpdmF0ZS0+Y3J0YworICoJ
YXJyYXkgd2hlbiBpcnEgaW50ZXJydXB0IG9jY3VycmVkLiB0aGUgcmVhc29uIG9mIHVzaW5nIHRo
aXMgcGlwZSBpcyB0aGF0CisgKglkcm0gZnJhbWV3b3JrIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBs
ZSBpcnEgeWV0LgorICoJd2UgY2FuIHJlZmVyIHRvIHRoZSBjcnRjIHRvIGN1cnJlbnQgaGFyZHdh
cmUgaW50ZXJydXB0IG9jY3VycmVkIHRocm91Z2gKKyAqCXRoaXMgcGlwZSB2YWx1ZS4KKyAqIEBl
bmFibGVkOiByZWNvcmRzIHdoZXRoZXIgY3J0Y19lbmFibGUgc3VjY2VlZGVkCisgKiBAZG9fZmx1
c2g6IGVuYWJsZWQgYnkgYXRvbWljX2ZsdXNoLCBjYXVzZXMgcGxhbmUgYXRvbWljX3VwZGF0ZSB0
byBjb21taXQKKyAqICAgICAgICAgICAgY2hhbmdlZCBzdGF0ZSBpbW1lZGlhdGVseS4KKyAqIEBw
bGFuZXM6IGFycmF5IG9mIDQgbXRrX2RybV9wbGFuZSBzdHJ1Y3R1cmVzLCBvbmUgZm9yIGVhY2gg
b3ZlcmxheSBwbGFuZQorICogQGNvbmZpZ19yZWdzOiBtZW1vcnkgbWFwcGVkIG1tc3lzIGNvbmZp
Z3VyYXRpb24gcmVnaXN0ZXIgc3BhY2UKKyAqIEBtdXRleDogaGFuZGxlIHRvIG9uZSBvZiB0aGUg
dGVuIGRpc3BfbXV0ZXggc3RyZWFtcworICogQGRkcF9jb21wX25yOiBudW1iZXIgb2YgY29tcG9u
ZW50cyBpbiBkZHBfY29tcAorICogQGRkcF9jb21wOiBhcnJheSBvZiBwb2ludGVycyB0aGUgbXRr
X2RkcF9jb21wIHN0cnVjdHVyZXMgdXNlZCBieSB0aGlzIGNydGMKKyAqLworc3RydWN0IG10a19k
cm1fY3J0YyB7CisJc3RydWN0IGRybV9jcnRjCQkJYmFzZTsKKwl1bnNpZ25lZCBpbnQJCQlwaXBl
OworCWJvb2wJCQkJZW5hYmxlZDsKKworCWJvb2wJCQkJZG9fZmx1c2g7CisKKwlzdHJ1Y3QgbXRr
X2RybV9wbGFuZQkJcGxhbmVzW09WTF9MQVlFUl9OUl07CisKKwl2b2lkIF9faW9tZW0JCQkqY29u
ZmlnX3JlZ3M7CisJc3RydWN0IG10a19kaXNwX211dGV4CQkqbXV0ZXg7CisJdW5zaWduZWQgaW50
CQkJZGRwX2NvbXBfbnI7CisJc3RydWN0IG10a19kZHBfY29tcAkJKipkZHBfY29tcDsKK307CisK
K3N0cnVjdCBtdGtfY3J0Y19zdGF0ZSB7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlCQliYXNlOwor
CXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQJKmV2ZW50OworCisJYm9vbAkJCQlwZW5k
aW5nX2NvbmZpZzsKKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX3dpZHRoOworCXVuc2lnbmVkIGlu
dAkJCXBlbmRpbmdfaGVpZ2h0OworCXVuc2lnbmVkIGludAkJCXBlbmRpbmdfdnJlZnJlc2g7Cit9
OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHJtX2NydGMgKnRvX210a19jcnRjKHN0cnVj
dCBkcm1fY3J0YyAqYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtdGtfZHJt
X2NydGMsIGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAq
dG9fbXRrX2NydGNfc3RhdGUoc3RydWN0IGRybV9jcnRjX3N0YXRlICpzKQoreworCXJldHVybiBj
b250YWluZXJfb2Yocywgc3RydWN0IG10a19jcnRjX3N0YXRlLCBiYXNlKTsKK30KKworc3RhdGlj
IHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjX2J5X2NvbXAoc3RydWN0IG10a19kcm1fcHJp
dmF0ZSAqcHJpdiwKKwkJCQkJICAgICBzdHJ1Y3QgbXRrX2RkcF9jb21wICpkZHBfY29tcCkKK3sK
KwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7
IGkgPCBNQVhfQ1JUQzsgaSsrKSB7CisJCW10a19jcnRjID0gdG9fbXRrX2NydGMocHJpdi0+Y3J0
Y1tpXSk7CisJCWlmIChtdGtfY3J0Yy0+ZGRwX2NvbXBbMF0gPT0gZGRwX2NvbXApCisJCQlyZXR1
cm4gbXRrX2NydGM7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIG10a19k
cm1fY3J0Y19maW5pc2hfcGFnZV9mbGlwKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQor
eworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZtdGtfY3J0Yy0+YmFzZTsKKwlzdHJ1Y3QgbXRr
X2NydGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCisJ
ZHJtX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMtPmRldiwgc3RhdGUtPmV2ZW50LT5waXBlLCBzdGF0
ZS0+ZXZlbnQpOworCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CisJc3RhdGUtPmV2ZW50ID0g
TlVMTDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9j
cnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2Ny
dGMoY3J0Yyk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21w
X25yOyBpKyspCisJCWNsa191bnByZXBhcmUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOwor
CisJbXRrX2Rpc3BfbXV0ZXhfcHV0KG10a19jcnRjLT5tdXRleCk7CisKKwlkcm1fY3J0Y19jbGVh
bnVwKGNydGMpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfcmVzZXQoc3RydWN0IGRy
bV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGU7CisKKwlpZiAo
Y3J0Yy0+c3RhdGUgJiYgY3J0Yy0+c3RhdGUtPm1vZGVfYmxvYikKKwkJZHJtX3Byb3BlcnR5X3Vu
cmVmZXJlbmNlX2Jsb2IoY3J0Yy0+c3RhdGUtPm1vZGVfYmxvYik7CisKKwlrZnJlZShjcnRjLT5z
dGF0ZSk7CisJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlj
cnRjLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsKKworCWlmIChzdGF0ZSkKKwkJY3J0Yy0+c3RhdGUt
PmNydGMgPSBjcnRjOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jcnRjX3N0YXRlICptdGtfZHJt
X2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3Qg
bXRrX2NydGNfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUp
LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4gTlVMTDsKKworCV9fZHJtX2F0
b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUoY3J0YywgJnN0YXRlLT5iYXNlKTsKKwor
CVdBUk5fT04oc3RhdGUtPmJhc2UuY3J0YyAhPSBjcnRjKTsKKwlzdGF0ZS0+YmFzZS5jcnRjID0g
Y3J0YzsKKworCXJldHVybiAmc3RhdGUtPmJhc2U7Cit9CisKK3N0YXRpYyBib29sIG10a19kcm1f
Y3J0Y19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJY29uc3Qgc3RydWN0IGRy
bV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3Rl
ZF9tb2RlKQoreworCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSwgYnV0IHRoaXMgY2FsbGJhY2sgaXMg
bWFuZGF0b3J5LiAqLworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2Ny
dGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19j
cnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKworCXN0
YXRlLT5wZW5kaW5nX3dpZHRoID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKKwlzdGF0ZS0+cGVuZGlu
Z19oZWlnaHQgPSBjcnRjLT5tb2RlLnZkaXNwbGF5OworCXN0YXRlLT5wZW5kaW5nX3ZyZWZyZXNo
ID0gY3J0Yy0+bW9kZS52cmVmcmVzaDsKKwl3bWIoKTsKKwlzdGF0ZS0+cGVuZGluZ19jb25maWcg
PSB0cnVlOworfQorCitpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9k
ZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0
ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2Ny
dGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21w
ICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRwX2NvbXBfZW5hYmxlX3Zi
bGFuayhvdmwpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGVf
dmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQoreworCXN0
cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBt
dGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMocHJpdi0+Y3J0Y1twaXBlXSk7CisJ
c3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOworCisJbXRr
X2RkcF9jb21wX2Rpc2FibGVfdmJsYW5rKG92bCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2NydGNf
ZGRwX3Bvd2VyX29uKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCWludCByZXQ7
CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWZvciAo
aSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykgeworCQlyZXQgPSBjbGtfZW5h
YmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VS
Uk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNsb2NrICVkOiAlZFxuIiwgaSwgcmV0KTsKKwkJCWdvdG8g
ZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlj
bGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisJcmV0dXJuIHJldDsKK30K
Kworc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX3Bvd2VyX29mZihzdHJ1Y3QgbXRrX2RybV9jcnRj
ICptdGtfY3J0YykKK3sKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1
bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQlj
bGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7Cit9CisKK3N0YXRpYyBpbnQg
bXRrX2NydGNfZGRwX2h3X2luaXQoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJ
c3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOworCXVuc2lnbmVkIGludCB3
aWR0aCwgaGVpZ2h0LCB2cmVmcmVzaDsKKwlpbnQgcmV0OworCWludCBpOworCisJRFJNX0RFQlVH
X0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlpZiAoV0FSTl9PTighY3J0Yy0+c3RhdGUpKQor
CQlyZXR1cm4gLUVJTlZBTDsKKworCXdpZHRoID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUu
aGRpc3BsYXk7CisJaGVpZ2h0ID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUudmRpc3BsYXk7
CisJdnJlZnJlc2ggPSBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52cmVmcmVzaDsKKworCXJl
dCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoY3J0Yy0+ZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKSB7
CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBwb3dlciBkb21haW46ICVkXG4iLCByZXQp
OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG10a19kaXNwX211dGV4X3ByZXBhcmUobXRr
X2NydGMtPm11dGV4KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBl
bmFibGUgbXV0ZXggY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9wbV9ydW50aW1lX3B1
dDsKKwl9CisKKwlyZXQgPSBtdGtfY3J0Y19kZHBfcG93ZXJfb24obXRrX2NydGMpOworCWlmIChy
ZXQgPCAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBjb21wb25lbnQgY2xvY2tz
OiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfbXV0ZXhfdW5wcmVwYXJlOworCX0KKworCURSTV9E
RUJVR19EUklWRVIoIm1lZGlhdGVrX2RkcF9kZHBfcGF0aF9zZXR1cFxuIik7CisJZm9yIChpID0g
MDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7IGkrKykgeworCQltdGtfZGRwX2FkZF9j
b21wX3RvX3BhdGgobXRrX2NydGMtPmNvbmZpZ19yZWdzLAorCQkJCQkgbXRrX2NydGMtPmRkcF9j
b21wW2ldLT5pZCwKKwkJCQkJIG10a19jcnRjLT5kZHBfY29tcFtpICsgMV0tPmlkKTsKKwkJbXRr
X2Rpc3BfbXV0ZXhfYWRkX2NvbXAobXRrX2NydGMtPm11dGV4LAorCQkJCQltdGtfY3J0Yy0+ZGRw
X2NvbXBbaV0tPmlkKTsKKwl9CisJbXRrX2Rpc3BfbXV0ZXhfYWRkX2NvbXAobXRrX2NydGMtPm11
dGV4LCBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwltdGtfZGlzcF9tdXRleF9lbmFibGUo
bXRrX2NydGMtPm11dGV4KTsKKworCURSTV9ERUJVR19EUklWRVIoImRkcF9kaXNwX3BhdGhfcG93
ZXJfb24gJWR4JWRcbiIsIHdpZHRoLCBoZWlnaHQpOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0
Yy0+ZGRwX2NvbXBfbnI7IGkrKykgeworCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wID0gbXRr
X2NydGMtPmRkcF9jb21wW2ldOworCisJCW10a19kZHBfY29tcF9jb25maWcoY29tcCwgd2lkdGgs
IGhlaWdodCwgdnJlZnJlc2gpOworCQltdGtfZGRwX2NvbXBfc3RhcnQoY29tcCk7CisJfQorCisJ
cmV0dXJuIDA7CisKK2Vycl9tdXRleF91bnByZXBhcmU6CisJbXRrX2Rpc3BfbXV0ZXhfdW5wcmVw
YXJlKG10a19jcnRjLT5tdXRleCk7CitlcnJfcG1fcnVudGltZV9wdXQ6CisJcG1fcnVudGltZV9w
dXQoY3J0Yy0+ZGV2LT5kZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19j
cnRjX2RkcF9od19maW5pKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCXN0cnVj
dCBkcm1fZGV2aWNlICpkcm0gPSBtdGtfY3J0Yy0+YmFzZS5kZXY7CisJaW50IGk7CisKKwlEUk1f
REVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0
Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJbXRrX2RkcF9jb21wX3N0b3AobXRrX2NydGMtPmRkcF9j
b21wW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspCisJ
CW10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKG10a19jcnRjLT5tdXRleCwKKwkJCQkJICAgbXRr
X2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJbXRrX2Rpc3BfbXV0ZXhfZGlzYWJsZShtdGtfY3J0
Yy0+bXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnIgLSAxOyBp
KyspIHsKKwkJbXRrX2RkcF9yZW1vdmVfY29tcF9mcm9tX3BhdGgobXRrX2NydGMtPmNvbmZpZ19y
ZWdzLAorCQkJCQkgICAgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkLAorCQkJCQkgICAgICBt
dGtfY3J0Yy0+ZGRwX2NvbXBbaSArIDFdLT5pZCk7CisJCW10a19kaXNwX211dGV4X3JlbW92ZV9j
b21wKG10a19jcnRjLT5tdXRleCwKKwkJCQkJICAgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7
CisJfQorCW10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKG10a19jcnRjLT5tdXRleCwgbXRrX2Ny
dGMtPmRkcF9jb21wW2ldLT5pZCk7CisJbXRrX2NydGNfZGRwX3Bvd2VyX29mZihtdGtfY3J0Yyk7
CisJbXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CisKKwlwbV9ydW50
aW1lX3B1dChkcm0tPmRldik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19lbmFibGUo
c3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRj
ID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2Ny
dGMtPmRkcF9jb21wWzBdOworCWludCByZXQ7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxu
IiwgX19mdW5jX18sIGNydGMtPmJhc2UuaWQpOworCisJcmV0ID0gbXRrX3NtaV9sYXJiX2dldChv
dmwtPmxhcmJfZGV2KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBs
YXJiOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9o
d19pbml0KG10a19jcnRjKTsKKwlpZiAocmV0KSB7CisJCW10a19zbWlfbGFyYl9wdXQob3ZsLT5s
YXJiX2Rldik7CisJCXJldHVybjsKKwl9CisKKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CisJ
bXRrX2NydGMtPmVuYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNf
ZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAq
bXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwg
PSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIl
cyAlZFxuIiwgX19mdW5jX18sIGNydGMtPmJhc2UuaWQpOworCWlmIChXQVJOX09OKCFtdGtfY3J0
Yy0+ZW5hYmxlZCkpCisJCXJldHVybjsKKworCS8qIFNldCBhbGwgcGVuZGluZyBwbGFuZSBzdGF0
ZSB0byBkaXNhYmxlZCAqLworCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgewor
CQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJ
CXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0g
dG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJCXBsYW5lX3N0YXRlLT5wZW5kaW5n
LmVuYWJsZSA9IGZhbHNlOworCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOwor
CX0KKworCS8qIFdhaXQgZm9yIHBsYW5lcyB0byBiZSBkaXNhYmxlZCAqLworCWRybV9jcnRjX3dh
aXRfb25lX3ZibGFuayhjcnRjKTsKKworCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7CisJbXRr
X2NydGNfZGRwX2h3X2ZpbmkobXRrX2NydGMpOworCW10a19zbWlfbGFyYl9wdXQob3ZsLT5sYXJi
X2Rldik7CisKKwltdGtfY3J0Yy0+ZG9fZmx1c2ggPSBmYWxzZTsKKwltdGtfY3J0Yy0+ZW5hYmxl
ZCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luKHN0
cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9s
ZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtf
Y3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisKKwlpZiAoc3RhdGUtPmJhc2UuZXZlbnQpIHsKKwkJ
c3RhdGUtPmJhc2UuZXZlbnQtPnBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRjKTsKKwkJV0FSTl9P
Tihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpICE9IDApOworCQlzdGF0ZS0+ZXZlbnQgPSBzdGF0
ZS0+YmFzZS5ldmVudDsKKwkJc3RhdGUtPmJhc2UuZXZlbnQgPSBOVUxMOworCX0KK30KKwordm9p
ZCBtdGtfZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3Qg
bXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOworCXVuc2lnbmVkIGlu
dCBpOworCisJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBk
cm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10
a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxh
bmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJaWYgKHBsYW5lX3N0YXRlLT5wZW5kaW5nLmRpcnR5
KSB7CisJCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOworCQkJcGxhbmVfc3Rh
dGUtPnBlbmRpbmcuZGlydHkgPSBmYWxzZTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbXRr
X2RybV9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAg
c3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwltdGtfZHJtX2NydGNf
Y29tbWl0KGNydGMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIG10
a19jcnRjX2Z1bmNzID0geworCS5zZXRfY29uZmlnCQk9IGRybV9hdG9taWNfaGVscGVyX3NldF9j
b25maWcsCisJLnBhZ2VfZmxpcAkJPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCisJLmRl
c3Ryb3kJCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3ksCisJLnJlc2V0CQkJPSBtdGtfZHJtX2NydGNf
cmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUJPSBtdGtfZHJtX2NydGNfZHVwbGljYXRl
X3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IGRybV9hdG9taWNfaGVscGVyX2NydGNf
ZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVy
X2Z1bmNzIG10a19jcnRjX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cAk9IG10a19kcm1f
Y3J0Y19tb2RlX2ZpeHVwLAorCS5tb2RlX3NldF9ub2ZiCT0gbXRrX2RybV9jcnRjX21vZGVfc2V0
X25vZmIsCisJLmVuYWJsZQkJPSBtdGtfZHJtX2NydGNfZW5hYmxlLAorCS5kaXNhYmxlCT0gbXRr
X2RybV9jcnRjX2Rpc2FibGUsCisJLmF0b21pY19iZWdpbgk9IG10a19kcm1fY3J0Y19hdG9taWNf
YmVnaW4sCisJLmF0b21pY19mbHVzaAk9IG10a19kcm1fY3J0Y19hdG9taWNfZmx1c2gsCit9Owor
CitzdGF0aWMgaW50IG10a19kcm1fY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJ
CXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjLCBzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5
LAorCQlzdHJ1Y3QgZHJtX3BsYW5lICpjdXJzb3IsIHVuc2lnbmVkIGludCBwaXBlKQoreworCWlu
dCByZXQ7CisKKwlyZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRybSwgJm10a19jcnRj
LT5iYXNlLCBwcmltYXJ5LCBjdXJzb3IsCisJCQkmbXRrX2NydGNfZnVuY3MpOworCWlmIChyZXQp
CisJCWdvdG8gZXJyX2NsZWFudXBfY3J0YzsKKworCWRybV9jcnRjX2hlbHBlcl9hZGQoJm10a19j
cnRjLT5iYXNlLCAmbXRrX2NydGNfaGVscGVyX2Z1bmNzKTsKKworCW10a19jcnRjLT5waXBlID0g
cGlwZTsKKworCXJldHVybiAwOworCitlcnJfY2xlYW51cF9jcnRjOgorCWRybV9jcnRjX2NsZWFu
dXAoJm10a19jcnRjLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG10a19jcnRjX2Rk
cF9pcnEoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsIHN0cnVjdCBtdGtfZGRwX2NvbXAgKm92
bCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtX2Rldi0+ZGV2X3ByaXZh
dGU7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGM7CisJc3RydWN0IG10a19jcnRjX3N0
YXRlICpzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCW10a19jcnRjID0gbXRrX2NydGNfYnlf
Y29tcChwcml2LCBvdmwpOworCWlmIChXQVJOX09OKCFtdGtfY3J0YykpCisJCXJldHVybjsKKwor
CXN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUobXRrX2NydGMtPmJhc2Uuc3RhdGUpOworCisJLyoK
KwkgKiBUT0RPOiBpbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZSByZWdpc3RlcnMgaGVyZSwgd2Ugc2hv
dWxkIHByZXBhcmUKKwkgKiB3b3JraW5nIHJlZ2lzdGVycyBpbiBhdG9taWNfY29tbWl0IGFuZCBs
ZXQgdGhlIGhhcmR3YXJlIGNvbW1hbmQKKwkgKiBxdWV1ZSB1cGRhdGUgbW9kdWxlIHJlZ2lzdGVy
cyBvbiB2YmxhbmsuCisJICovCisJaWYgKHN0YXRlLT5wZW5kaW5nX2NvbmZpZykgeworCQltdGtf
ZGRwX2NvbXBfY29uZmlnKG92bCwgc3RhdGUtPnBlbmRpbmdfd2lkdGgsCisJCQkJICAgIHN0YXRl
LT5wZW5kaW5nX2hlaWdodCwKKwkJCQkgICAgc3RhdGUtPnBlbmRpbmdfdnJlZnJlc2gpOworCisJ
CXN0YXRlLT5wZW5kaW5nX2NvbmZpZyA9IGZhbHNlOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBP
VkxfTEFZRVJfTlI7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0
Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl
OworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisK
KwkJaWYgKHBsYW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZpZykgeworCQkJaWYgKCFwbGFuZV9zdGF0
ZS0+cGVuZGluZy5lbmFibGUpCisJCQkJbXRrX2RkcF9jb21wX2xheWVyX29mZihvdmwsIGkpOwor
CisJCQltdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKG92bCwgaSwgcGxhbmVfc3RhdGUpOworCisJ
CQlpZiAocGxhbmVfc3RhdGUtPnBlbmRpbmcuZW5hYmxlKQorCQkJCW10a19kZHBfY29tcF9sYXll
cl9vbihvdmwsIGkpOworCisJCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSBmYWxzZTsK
KwkJfQorCX0KKworCWRybV9oYW5kbGVfdmJsYW5rKG10a19jcnRjLT5iYXNlLmRldiwgbXRrX2Ny
dGMtPnBpcGUpOworfQorCitpbnQgbXRrX2RybV9jcnRjX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rldmlj
ZSAqZHJtX2RldiwKKwkJCWNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLCB1bnNpZ25l
ZCBpbnQgcGF0aF9sZW4pCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybV9k
ZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRybV9kZXYtPmRldjsKKwlz
dHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YzsKKwllbnVtIGRybV9wbGFuZV90eXBlIHR5cGU7
CisJdW5zaWduZWQgaW50IHpwb3M7CisJaW50IHBpcGUgPSBwcml2LT5udW1fcGlwZXM7CisJaW50
IHJldDsKKwlpbnQgaTsKKworCW10a19jcnRjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpt
dGtfY3J0YyksIEdGUF9LRVJORUwpOworCWlmICghbXRrX2NydGMpCisJCXJldHVybiAtRU5PTUVN
OworCisJbXRrX2NydGMtPmNvbmZpZ19yZWdzID0gcHJpdi0+Y29uZmlnX3JlZ3M7CisJbXRrX2Ny
dGMtPmRkcF9jb21wX25yID0gcGF0aF9sZW47CisJbXRrX2NydGMtPmRkcF9jb21wID0gZGV2bV9r
bWFsbG9jX2FycmF5KGRldiwgbXRrX2NydGMtPmRkcF9jb21wX25yLAorCQkJCQkJc2l6ZW9mKCpt
dGtfY3J0Yy0+ZGRwX2NvbXApLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisKKwltdGtfY3J0Yy0+bXV0
ZXggPSBtdGtfZGlzcF9tdXRleF9nZXQocHJpdi0+bXV0ZXhfZGV2LCBwaXBlKTsKKwlpZiAoSVNf
RVJSKG10a19jcnRjLT5tdXRleCkpIHsKKwkJcmV0ID0gUFRSX0VSUihtdGtfY3J0Yy0+bXV0ZXgp
OworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgbXV0ZXg6ICVkXG4iLCByZXQpOworCQly
ZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7
IGkrKykgeworCQllbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkID0gcGF0aFtpXTsKKwkJc3Ry
dWN0IG10a19kZHBfY29tcCAqY29tcDsKKworCQljb21wID0gcHJpdi0+ZGRwX2NvbXBbY29tcF9p
ZF07CisJCWlmICghY29tcCkgeworCQkJZGV2X2VycihkZXYsICJDb21wb25lbnQgJXMgbm90IGlu
aXRpYWxpemVkXG4iLAorCQkJCXByaXYtPmNvbXBfbm9kZVtjb21wX2lkXS0+ZnVsbF9uYW1lKTsK
KwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIHVucHJlcGFyZTsKKwkJfQorCisJCXJldCA9IGNs
a19wcmVwYXJlKGNvbXAtPmNsayk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LAorCQkJ
CSJGYWlsZWQgdG8gcHJlcGFyZSBjbG9jayBmb3IgY29tcG9uZW50ICVzOiAlZFxuIiwKKwkJCQlw
cml2LT5jb21wX25vZGVbY29tcF9pZF0tPmZ1bGxfbmFtZSwgcmV0KTsKKwkJCWdvdG8gdW5wcmVw
YXJlOworCQl9CisKKwkJbXRrX2NydGMtPmRkcF9jb21wW2ldID0gY29tcDsKKwl9CisKKwlmb3Ig
KHpwb3MgPSAwOyB6cG9zIDwgT1ZMX0xBWUVSX05SOyB6cG9zKyspIHsKKwkJdHlwZSA9ICh6cG9z
ID09IDApID8gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSA6CisJCQkJKHpwb3MgPT0gMSkgPyBEUk1f
UExBTkVfVFlQRV9DVVJTT1IgOgorCQkJCQkJRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKKwkJcmV0
ID0gbXRrX3BsYW5lX2luaXQoZHJtX2RldiwgJm10a19jcnRjLT5wbGFuZXNbenBvc10sCisJCQkJ
ICAgICBCSVQocGlwZSksIHR5cGUsIHpwb3MpOworCQlpZiAocmV0KQorCQkJZ290byB1bnByZXBh
cmU7CisJfQorCisJcmV0ID0gbXRrX2RybV9jcnRjX2luaXQoZHJtX2RldiwgbXRrX2NydGMsICZt
dGtfY3J0Yy0+cGxhbmVzWzBdLmJhc2UsCisJCQkJJm10a19jcnRjLT5wbGFuZXNbMV0uYmFzZSwg
cGlwZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gdW5wcmVwYXJlOworCisJcHJpdi0+Y3J0Y1tw
aXBlXSA9ICZtdGtfY3J0Yy0+YmFzZTsKKwlwcml2LT5udW1fcGlwZXMrKzsKKworCXJldHVybiAw
OworCit1bnByZXBhcmU6CisJd2hpbGUgKC0taSA+PSAwKQorCQljbGtfdW5wcmVwYXJlKG10a19j
cnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmggYi9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9jcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZjA0ODU0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2NydGMuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1
IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKi8KKworI2lmbmRlZiBNVEtfRFJNX0NSVENfSAorI2RlZmluZSBNVEtfRFJNX0NS
VENfSAorCisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSAibXRrX2RybV9kZHBf
Y29tcC5oIgorI2luY2x1ZGUgIm10a19kcm1fcGxhbmUuaCIKKworI2RlZmluZSBPVkxfTEFZRVJf
TlIJNAorCitpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2Ug
KmRybSwgdW5zaWduZWQgaW50IHBpcGUpOwordm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZV92Ymxh
bmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpOwordm9pZCBtdGtf
ZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lkIG10a19jcnRjX2Rk
cF9pcnEoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsIHN0cnVjdCBtdGtfZGRwX2NvbXAgKm92
bCk7CitpbnQgbXRrX2RybV9jcnRjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiwK
KwkJCWNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLAorCQkJdW5zaWduZWQgaW50IHBh
dGhfbGVuKTsKKworI2VuZGlmIC8qIE1US19EUk1fQ1JUQ19IICovCmRpZmYgLS1naXQgYS9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2RkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2
NTg0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9kZHAuYwpAQCAtMCwwICsxLDM1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRp
YVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu
aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y
bV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUgIm10a19k
cm1fZGRwLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1Bf
UkVHX0NPTkZJR19ESVNQX09WTDBfTU9VVF9FTgkweDA0MAorI2RlZmluZSBESVNQX1JFR19DT05G
SUdfRElTUF9PVkwxX01PVVRfRU4JMHgwNDQKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1Bf
T0RfTU9VVF9FTgkJMHgwNDgKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfR0FNTUFfTU9V
VF9FTgkweDA0YworI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9VRk9FX01PVVRfRU4JMHgw
NTAKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IwX1NFTF9JTgkweDA4NAorI2Rl
ZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjFfU0VMX0lOCTB4MDg4CisjZGVmaW5lIERJ
U1BfUkVHX0NPTkZJR19EUElfU0VMX0lOCQkweDBhYworI2RlZmluZSBESVNQX1JFR19DT05GSUdf
RElTUF9SRE1BMV9NT1VUX0VOCTB4MGM4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19NTVNZU19D
R19DT04wCQkweDEwMAorCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX0VOKG4pCSgweDIwICsgMHgy
MCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhfUlNUKG4pCSgweDI4ICsgMHgyMCAqIChu
KSkKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhfTU9EKG4pCSgweDJjICsgMHgyMCAqIChuKSkKKyNk
ZWZpbmUgRElTUF9SRUdfTVVURVhfU09GKG4pCSgweDMwICsgMHgyMCAqIChuKSkKKworI2RlZmlu
ZSBNVVRFWF9NT0RfRElTUF9PVkwwCQlCSVQoMTEpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09W
TDEJCUJJVCgxMikKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRNQTAJCUJJVCgxMykKKyNkZWZp
bmUgTVVURVhfTU9EX0RJU1BfUkRNQTEJCUJJVCgxNCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1Bf
UkRNQTIJCUJJVCgxNSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfV0RNQTAJCUJJVCgxNikKKyNk
ZWZpbmUgTVVURVhfTU9EX0RJU1BfV0RNQTEJCUJJVCgxNykKKyNkZWZpbmUgTVVURVhfTU9EX0RJ
U1BfQ09MT1IwCQlCSVQoMTgpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0NPTE9SMQkJQklUKDE5
KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9BQUwJCUJJVCgyMCkKKyNkZWZpbmUgTVVURVhfTU9E
X0RJU1BfR0FNTUEJCUJJVCgyMSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfVUZPRQkJQklUKDIy
KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9QV00wCQlCSVQoMjMpCisjZGVmaW5lIE1VVEVYX01P
RF9ESVNQX1BXTTEJCUJJVCgyNCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT0QJCUJJVCgyNSkK
KworI2RlZmluZSBNVVRFWF9TT0ZfU0lOR0xFX01PREUJCTAKKyNkZWZpbmUgTVVURVhfU09GX0RT
STAJCQkxCisjZGVmaW5lIE1VVEVYX1NPRl9EU0kxCQkJMgorI2RlZmluZSBNVVRFWF9TT0ZfRFBJ
MAkJCTMKKworI2RlZmluZSBPVkwwX01PVVRfRU5fQ09MT1IwCQkweDEKKyNkZWZpbmUgT0RfTU9V
VF9FTl9SRE1BMAkJMHgxCisjZGVmaW5lIFVGT0VfTU9VVF9FTl9EU0kwCQkweDEKKyNkZWZpbmUg
Q09MT1IwX1NFTF9JTl9PVkwwCQkweDEKKyNkZWZpbmUgT1ZMMV9NT1VUX0VOX0NPTE9SMQkJMHgx
CisjZGVmaW5lIEdBTU1BX01PVVRfRU5fUkRNQTEJCTB4MQorI2RlZmluZSBSRE1BMV9NT1VUX0RQ
STAJCQkweDIKKyNkZWZpbmUgRFBJMF9TRUxfSU5fUkRNQTEJCTB4MQorI2RlZmluZSBDT0xPUjFf
U0VMX0lOX09WTDEJCTB4MQorCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggeworCWludCBpZDsKKwli
b29sIGNsYWltZWQ7Cit9OworCitzdHJ1Y3QgbXRrX2RkcCB7CisJc3RydWN0IGRldmljZQkJCSpk
ZXY7CisJc3RydWN0IGNsawkJCSpjbGs7CisJdm9pZCBfX2lvbWVtCQkJKnJlZ3M7CisJc3RydWN0
IG10a19kaXNwX211dGV4CQltdXRleFsxMF07Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQg
aW50IG11dGV4X21vZFtERFBfQ09NUE9ORU5UX0lEX01BWF0gPSB7CisJW0REUF9DT01QT05FTlRf
QUFMXSA9IE1VVEVYX01PRF9ESVNQX0FBTCwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjBdID0gTVVU
RVhfTU9EX0RJU1BfQ09MT1IwLAorCVtERFBfQ09NUE9ORU5UX0NPTE9SMV0gPSBNVVRFWF9NT0Rf
RElTUF9DT0xPUjEsCisJW0REUF9DT01QT05FTlRfR0FNTUFdID0gTVVURVhfTU9EX0RJU1BfR0FN
TUEsCisJW0REUF9DT01QT05FTlRfT0RdID0gTVVURVhfTU9EX0RJU1BfT0QsCisJW0REUF9DT01Q
T05FTlRfT1ZMMF0gPSBNVVRFWF9NT0RfRElTUF9PVkwwLAorCVtERFBfQ09NUE9ORU5UX09WTDFd
ID0gTVVURVhfTU9EX0RJU1BfT1ZMMSwKKwlbRERQX0NPTVBPTkVOVF9QV00wXSA9IE1VVEVYX01P
RF9ESVNQX1BXTTAsCisJW0REUF9DT01QT05FTlRfUFdNMV0gPSBNVVRFWF9NT0RfRElTUF9QV00x
LAorCVtERFBfQ09NUE9ORU5UX1JETUEwXSA9IE1VVEVYX01PRF9ESVNQX1JETUEwLAorCVtERFBf
Q09NUE9ORU5UX1JETUExXSA9IE1VVEVYX01PRF9ESVNQX1JETUExLAorCVtERFBfQ09NUE9ORU5U
X1JETUEyXSA9IE1VVEVYX01PRF9ESVNQX1JETUEyLAorCVtERFBfQ09NUE9ORU5UX1VGT0VdID0g
TVVURVhfTU9EX0RJU1BfVUZPRSwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMF0gPSBNVVRFWF9NT0Rf
RElTUF9XRE1BMCwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMV0gPSBNVVRFWF9NT0RfRElTUF9XRE1B
MSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9tb3V0X2VuKGVudW0gbXRrX2Rk
cF9jb21wX2lkIGN1ciwKKwkJCQkgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCwKKwkJCQkg
ICAgdW5zaWduZWQgaW50ICphZGRyKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCWlmIChj
dXIgPT0gRERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjAp
IHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwwX01PVVRfRU47CisJCXZhbHVl
ID0gT1ZMMF9NT1VUX0VOX0NPTE9SMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5U
X09EICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9SRE1BMCkgeworCQkqYWRkciA9IERJU1BfUkVH
X0NPTkZJR19ESVNQX09EX01PVVRfRU47CisJCXZhbHVlID0gT0RfTU9VVF9FTl9SRE1BMDsKKwl9
IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1VGT0UgJiYgbmV4dCA9PSBERFBfQ09NUE9O
RU5UX0RTSTApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9VRk9FX01PVVRfRU47
CisJCXZhbHVlID0gVUZPRV9NT1VUX0VOX0RTSTA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NP
TVBPTkVOVF9PVkwxICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEpIHsKKwkJKmFkZHIg
PSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwxX01PVVRfRU47CisJCXZhbHVlID0gT1ZMMV9NT1VU
X0VOX0NPTE9SMTsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX0dBTU1BICYmIG5l
eHQgPT0gRERQX0NPTVBPTkVOVF9SRE1BMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19E
SVNQX0dBTU1BX01PVVRfRU47CisJCXZhbHVlID0gR0FNTUFfTU9VVF9FTl9SRE1BMTsKKwl9IGVs
c2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVO
VF9EUEkwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTjsK
KwkJdmFsdWUgPSBSRE1BMV9NT1VUX0RQSTA7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSAwOworCX0K
KworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtdGtfZGRwX3NlbF9p
bihlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQg
bmV4dCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IHZhbHVl
OworCisJaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDAgJiYgbmV4dCA9PSBERFBfQ09NUE9O
RU5UX0NPTE9SMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxf
SU47CisJCXZhbHVlID0gQ09MT1IwX1NFTF9JTl9PVkwwOworCX0gZWxzZSBpZiAoY3VyID09IERE
UF9DT01QT05FTlRfUkRNQTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQSTApIHsKKwkJKmFk
ZHIgPSBESVNQX1JFR19DT05GSUdfRFBJX1NFTF9JTjsKKwkJdmFsdWUgPSBEUEkwX1NFTF9JTl9S
RE1BMTsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDEgJiYgbmV4dCA9PSBE
RFBfQ09NUE9ORU5UX0NPTE9SMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NP
TE9SMV9TRUxfSU47CisJCXZhbHVlID0gQ09MT1IxX1NFTF9JTl9PVkwxOworCX0gZWxzZSB7CisJ
CXZhbHVlID0gMDsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgbXRrX2RkcF9hZGRf
Y29tcF90b19wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkgICAgICBlbnVtIG10
a19kZHBfY29tcF9pZCBjdXIsCisJCQkgICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0KQor
eworCXVuc2lnbmVkIGludCBhZGRyLCB2YWx1ZSwgcmVnOworCisJdmFsdWUgPSBtdGtfZGRwX21v
dXRfZW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3Jl
bGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSB8IHZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcs
IGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorCisJdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIs
IG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25m
aWdfcmVncyArIGFkZHIpIHwgdmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3Jl
Z3MgKyBhZGRyKTsKKwl9Cit9CisKK3ZvaWQgbXRrX2RkcF9yZW1vdmVfY29tcF9mcm9tX3BhdGgo
dm9pZCBfX2lvbWVtICpjb25maWdfcmVncywKKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBj
dXIsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKK3sKKwl1bnNpZ25lZCBpbnQg
YWRkciwgdmFsdWUsIHJlZzsKKworCXZhbHVlID0gbXRrX2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwg
JmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdz
ICsgYWRkcikgJiB+dmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBh
ZGRyKTsKKwl9CisKKwl2YWx1ZSA9IG10a19kZHBfc2VsX2luKGN1ciwgbmV4dCwgJmFkZHIpOwor
CWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikg
JiB+dmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9
Cit9CisKK3N0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXRrX2Rpc3BfbXV0ZXhfZ2V0KHN0cnVjdCBk
ZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBk
ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChpZCA+PSAxMCkKKwkJcmV0dXJuIEVSUl9QVFIo
LUVJTlZBTCk7CisJaWYgKGRkcC0+bXV0ZXhbaWRdLmNsYWltZWQpCisJCXJldHVybiBFUlJfUFRS
KC1FQlVTWSk7CisKKwlkZHAtPm11dGV4W2lkXS5jbGFpbWVkID0gdHJ1ZTsKKworCXJldHVybiAm
ZGRwLT5tdXRleFtpZF07Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcHV0KHN0cnVjdCBtdGtf
ZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9v
ZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJ
V0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCW11dGV4LT5jbGFp
bWVkID0gZmFsc2U7Cit9CisKK2ludCBtdGtfZGlzcF9tdXRleF9wcmVwYXJlKHN0cnVjdCBtdGtf
ZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9v
ZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCXJl
dHVybiBjbGtfcHJlcGFyZV9lbmFibGUoZGRwLT5jbGspOworfQorCit2b2lkIG10a19kaXNwX211
dGV4X3VucHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBt
dGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkg
ICBtdXRleFttdXRleC0+aWRdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGRwLT5jbGspOwor
fQorCit2b2lkIG10a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAq
bXV0ZXgsCisJCQkgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGlkKQoreworCXN0cnVjdCBtdGtf
ZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBt
dXRleFttdXRleC0+aWRdKTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJV0FSTl9PTigmZGRwLT5t
dXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIEREUF9D
T01QT05FTlRfRFNJMDoKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJCWJyZWFrOworCWNhc2Ug
RERQX0NPTVBPTkVOVF9EU0kxOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsKKwkJYnJlYWs7CisJ
Y2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXJlZyA9IE1VVEVYX1NPRl9EUEkwOworCQlicmVh
azsKKwlkZWZhdWx0OgorCQlyZWcgPSByZWFkbF9yZWxheGVkKGRkcC0+cmVncyArIERJU1BfUkVH
X01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmVnIHw9IG11dGV4X21vZFtpZF07CisJCXdyaXRl
bF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkp
OworCQlyZXR1cm47CisJfQorCisJd3JpdGVsX3JlbGF4ZWQocmVnLCBkZHAtPnJlZ3MgKyBESVNQ
X1JFR19NVVRFWF9TT0YobXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcmVt
b3ZlX2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCQllbnVtIG10a19kZHBf
Y29tcF9pZCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4
LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJdW5zaWduZWQg
aW50IHJlZzsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisK
Kwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJY2FzZSBERFBfQ09N
UE9ORU5UX0RTSTE6CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXdyaXRlbF9yZWxheGVk
KE1VVEVYX1NPRl9TSU5HTEVfTU9ERSwKKwkJCSAgICAgICBkZHAtPnJlZ3MgKyBESVNQX1JFR19N
VVRFWF9TT0YobXV0ZXgtPmlkKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlZyA9IHJlYWRs
X3JlbGF4ZWQoZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQly
ZWcgJj0gfm11dGV4X21vZFtpZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsg
RElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQg
bXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJ
c3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAs
CisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRl
eC0+aWRdICE9IG11dGV4KTsKKworCXdyaXRlbCgxLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRF
WF9FTihtdXRleC0+aWQpKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVj
dCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRh
aW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0p
OworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXdyaXRl
bCgwLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQpKTsKK30KKworc3Rh
dGljIGludCBtdGtfZGRwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ
c3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwOwor
CXN0cnVjdCByZXNvdXJjZSAqcmVnczsKKwlpbnQgaTsKKworCWRkcCA9IGRldm1fa3phbGxvYyhk
ZXYsIHNpemVvZigqZGRwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZHApCisJCXJldHVybiAtRU5P
TUVNOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCWRkcC0+bXV0ZXhbaV0uaWQgPSBp
OworCisJZGRwLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRk
cC0+Y2xrKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgY2xvY2tcbiIpOworCQly
ZXR1cm4gUFRSX0VSUihkZHAtPmNsayk7CisJfQorCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNv
dXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZGRwLT5yZWdzID0gZGV2bV9pb3JlbWFw
X3Jlc291cmNlKGRldiwgcmVncyk7CisJaWYgKElTX0VSUihkZHAtPnJlZ3MpKSB7CisJCWRldl9l
cnIoZGV2LCAiRmFpbGVkIHRvIG1hcCBtdXRleCByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gUFRS
X0VSUihkZHAtPnJlZ3MpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRkcCk7
CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3JlbW92ZShzdHJ1Y3QgcGxh
dGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IG9mX2RldmljZV9pZCBkZHBfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJs
ZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRleCIgfSwKKwl7fSwKK307CitNT0RVTEVfREVW
SUNFX1RBQkxFKG9mLCBkZHBfZHJpdmVyX2R0X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0
Zm9ybV9kcml2ZXIgbXRrX2RkcF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kZHBfcHJvYmUs
CisJLnJlbW92ZQkJPSBtdGtfZGRwX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAi
bWVkaWF0ZWstZGRwIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJs
ZSA9IGRkcF9kcml2ZXJfZHRfbWF0Y2gsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2
ZXIobXRrX2RkcF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fZGRwLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMxMTc1Ci0tLSAvZGV2L251bGwK
KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKQEAgLTAsMCArMSw0
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRL
X0RSTV9ERFBfSAorI2RlZmluZSBNVEtfRFJNX0REUF9ICisKKyNpbmNsdWRlICJtdGtfZHJtX2Rk
cF9jb21wLmgiCisKK3N0cnVjdCByZWdtYXA7CitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IG10a19k
aXNwX211dGV4OworCit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9faW9tZW0g
KmNvbmZpZ19yZWdzLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJICAg
ICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCk7Cit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBf
ZnJvbV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRw
X2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOworCitzdHJ1
Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYs
IHVuc2lnbmVkIGludCBpZCk7CitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShzdHJ1Y3QgbXRr
X2Rpc3BfbXV0ZXggKm11dGV4KTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfYWRkX2NvbXAoc3RydWN0
IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCSAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQp
Owordm9pZCBtdGtfZGlzcF9tdXRleF9lbmFibGUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRl
eCk7Cit2b2lkIG10a19kaXNwX211dGV4X2Rpc2FibGUoc3RydWN0IG10a19kaXNwX211dGV4ICpt
dXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0cnVjdCBtdGtfZGlzcF9t
dXRleCAqbXV0ZXgsCisJCQkJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwordm9pZCBtdGtfZGlz
cF9tdXRleF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10
a19kaXNwX211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsKKworI2VuZGlm
IC8qIE1US19EUk1fRERQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2RkcF9jb21wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k
ZHBfY29tcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YWUxYTMKLS0t
IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29t
cC5jCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVr
IEluYy4KKyAqIEF1dGhvcnM6CisgKglZVCBTaGVuIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4KKyAq
CUNLIEh1IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy
IGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg
KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNs
dWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRl
IDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1
ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5j
bHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisjaW5jbHVk
ZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfUkVHX1JETUFfSU5UX0VOQUJM
RQkJMHgwMDAwCisjZGVmaW5lIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUwkJMHgwMDA0CisjZGVm
aW5lIERJU1BfUkVHX1JETUFfR0xPQkFMX0NPTgkJMHgwMDEwCisjZGVmaW5lIERJU1BfUkVHX1JE
TUFfU0laRV9DT05fMAkJMHgwMDE0CisjZGVmaW5lIERJU1BfUkVHX1JETUFfU0laRV9DT05fMQkJ
MHgwMDE4CisjZGVmaW5lIERJU1BfUkVHX1JETUFfRklGT19DT04JCQkweDAwNDAKKyNkZWZpbmUg
UkRNQV9GSUZPX1VOREVSRkxPV19FTgkJCQlCSVQoMzEpCisjZGVmaW5lIFJETUFfRklGT19QU0VV
RE9fU0laRShieXRlcykJCQkoKChieXRlcykgLyAxNikgPDwgMTYpCisjZGVmaW5lIFJETUFfT1VU
UFVUX1ZBTElEX0ZJRk9fVEhSRVNIT0xEKGJ5dGVzKQkJKChieXRlcykgLyAxNikKKworI2RlZmlu
ZSBESVNQX09EX0VOCQkJCTB4MDAwMAorI2RlZmluZSBESVNQX09EX0lOVEVOCQkJCTB4MDAwOAor
I2RlZmluZSBESVNQX09EX0lOVFNUQQkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9PRF9DRkcJCQkJ
MHgwMDIwCisjZGVmaW5lIERJU1BfT0RfU0laRQkJCQkweDAwMzAKKworI2RlZmluZSBESVNQX1JF
R19VRk9fU1RBUlQJCQkweDAwMDAKKworI2RlZmluZSBESVNQX0NPTE9SX0NGR19NQUlOCQkJMHgw
NDAwCisjZGVmaW5lIERJU1BfQ09MT1JfU1RBUlQJCQkweDBjMDAKKyNkZWZpbmUgRElTUF9DT0xP
Ul9XSURUSAkJCTB4MGM1MAorI2RlZmluZSBESVNQX0NPTE9SX0hFSUdIVAkJCTB4MGM1NAorCisj
ZGVmaW5lCU9EX1JFTEFZX01PREUJCUJJVCgwKQorCisjZGVmaW5lCVVGT19CWVBBU1MJCUJJVCgy
KQorCisjZGVmaW5lCUNPTE9SX0JZUEFTU19BTEwJQklUKDcpCisjZGVmaW5lCUNPTE9SX1NFUV9T
RUwJCUJJVCgxMykKKworc3RhdGljIHZvaWQgbXRrX2NvbG9yX2NvbmZpZyh2b2lkIF9faW9tZW0g
KmNvbG9yX2Jhc2UsIHVuc2lnbmVkIGludCB3LAorCQl1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQg
aW50IHZyZWZyZXNoKQoreworCXdyaXRlbCh3LCBjb2xvcl9iYXNlICsgRElTUF9DT0xPUl9XSURU
SCk7CisJd3JpdGVsKGgsIGNvbG9yX2Jhc2UgKyBESVNQX0NPTE9SX0hFSUdIVCk7Cit9CisKK3N0
YXRpYyB2b2lkIG10a19jb2xvcl9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQorewor
CXdyaXRlbChDT0xPUl9CWVBBU1NfQUxMIHwgQ09MT1JfU0VRX1NFTCwKKwkgICAgICAgY29tcC0+
cmVncyArIERJU1BfQ09MT1JfQ0ZHX01BSU4pOworCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBE
SVNQX0NPTE9SX1NUQVJUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX29kX2NvbmZpZyh2b2lkIF9f
aW9tZW0gKm9kX2Jhc2UsIHVuc2lnbmVkIGludCB3LCB1bnNpZ25lZCBpbnQgaCwKKwkJdW5zaWdu
ZWQgaW50IHZyZWZyZXNoKQoreworCXdyaXRlbCh3IDw8IDE2IHwgaCwgb2RfYmFzZSArIERJU1Bf
T0RfU0laRSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vZF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9j
b21wICpjb21wKQoreworCXdyaXRlbChPRF9SRUxBWV9NT0RFLCBjb21wLT5yZWdzICsgRElTUF9P
RF9DRkcpOworCXdyaXRlbCgxLCBjb21wLT5yZWdzICsgRElTUF9PRF9FTik7Cit9CisKK3N0YXRp
YyB2b2lkIG10a19yZG1hX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJdW5z
aWduZWQgaW50IHJlZzsKKworCXdyaXRlbCgweDQsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19SRE1B
X0lOVF9FTkFCTEUpOworCXJlZyA9IHJlYWRsKGNvbXAtPnJlZ3MgKyBESVNQX1JFR19SRE1BX0dM
T0JBTF9DT04pOworCXJlZyB8PSAxOworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3MgKyBESVNQX1JF
R19SRE1BX0dMT0JBTF9DT04pOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9jb25maWcodm9p
ZCBfX2lvbWVtICpyZG1hX2Jhc2UsCisJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQs
IHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwl1bnNpZ25lZCBpbnQgdGhyZXNob2xkOworCXVu
c2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZWFkbChyZG1hX2Jhc2UgKyBESVNQX1JFR19SRE1B
X1NJWkVfQ09OXzApOworCXJlZyA9IChyZWcgJiB+KDB4ZmZmKSkgfCAod2lkdGggJiAweGZmZik7
CisJd3JpdGVsKHJlZywgcmRtYV9iYXNlICsgRElTUF9SRUdfUkRNQV9TSVpFX0NPTl8wKTsKKwor
CXJlZyA9IHJlYWRsKHJkbWFfYmFzZSArIERJU1BfUkVHX1JETUFfU0laRV9DT05fMSk7CisJcmVn
ID0gKHJlZyAmIH4oMHhmZmZmZikpIHwgKGhlaWdodCAmIDB4ZmZmZmYpOworCXdyaXRlbChyZWcs
IHJkbWFfYmFzZSArIERJU1BfUkVHX1JETUFfU0laRV9DT05fMSk7CisKKwkvKgorCSAqIEVuYWJs
ZSBGSUZPIHVuZGVyZmxvdyBzaW5jZSBEU0kgYW5kIERQSSBjYW4ndCBiZSBibG9ja2VkLgorCSAq
IEtlZXAgdGhlIEZJRk8gcHNldWRvIHNpemUgcmVzZXQgZGVmYXVsdCBvZiA4IEtpQi4gU2V0IHRo
ZQorCSAqIG91dHB1dCB0aHJlc2hvbGQgdG8gNiBtaWNyb3NlY29uZHMgd2l0aCA3LzYgb3Zlcmhl
YWQgdG8KKwkgKiBhY2NvdW50IGZvciBibGFua2luZywgYW5kIHdpdGggYSBwaXhlbCBkZXB0aCBv
ZiA0IGJ5dGVzOgorCSAqLworCXRocmVzaG9sZCA9IHdpZHRoICogaGVpZ2h0ICogdnJlZnJlc2gg
KiA0ICogNyAvIDEwMDAwMDA7CisJcmVnID0gUkRNQV9GSUZPX1VOREVSRkxPV19FTiB8CisJICAg
ICAgUkRNQV9GSUZPX1BTRVVET19TSVpFKFNaXzhLKSB8CisJICAgICAgUkRNQV9PVVRQVVRfVkFM
SURfRklGT19USFJFU0hPTEQodGhyZXNob2xkKTsKKwl3cml0ZWwocmVnLCByZG1hX2Jhc2UgKyBE
SVNQX1JFR19SRE1BX0ZJRk9fQ09OKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3Vmb2Vfc3RhcnQo
c3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwoVUZPX0JZUEFTUywgY29tcC0+
cmVncyArIERJU1BfUkVHX1VGT19TVEFSVCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRr
X2RkcF9jb21wX2Z1bmNzIGRkcF9jb2xvciA9IHsKKwkuY29uZmlnID0gbXRrX2NvbG9yX2NvbmZp
ZywKKwkuc3RhcnQgPSBtdGtfY29sb3Jfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0
IG10a19kZHBfY29tcF9mdW5jcyBkZHBfb2QgPSB7CisJLmNvbmZpZyA9IG10a19vZF9jb25maWcs
CisJLnN0YXJ0ID0gbXRrX29kX3N0YXJ0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtf
ZGRwX2NvbXBfZnVuY3MgZGRwX3JkbWEgPSB7CisJLmNvbmZpZyA9IG10a19yZG1hX2NvbmZpZywK
Kwkuc3RhcnQgPSBtdGtfcmRtYV9zdGFydCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRr
X2RkcF9jb21wX2Z1bmNzIGRkcF91Zm9lID0geworCS5zdGFydCA9IG10a191Zm9lX3N0YXJ0LAor
fTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtdGtfZGRwX2NvbXBfc3RlbVtNVEtfRERQ
X0NPTVBfVFlQRV9NQVhdID0geworCVtNVEtfRElTUF9PVkxdID0gIm92bCIsCisJW01US19ESVNQ
X1JETUFdID0gInJkbWEiLAorCVtNVEtfRElTUF9XRE1BXSA9ICJ3ZG1hIiwKKwlbTVRLX0RJU1Bf
Q09MT1JdID0gImNvbG9yIiwKKwlbTVRLX0RJU1BfQUFMXSA9ICJhYWwiLAorCVtNVEtfRElTUF9H
QU1NQV0gPSAiZ2FtbWEiLAorCVtNVEtfRElTUF9VRk9FXSA9ICJ1Zm9lIiwKKwlbTVRLX0RTSV0g
PSAiZHNpIiwKKwlbTVRLX0RQSV0gPSAiZHBpIiwKKwlbTVRLX0RJU1BfUFdNXSA9ICJwd20iLAor
CVtNVEtfRElTUF9NVVRFWF0gPSAibXV0ZXgiLAorCVtNVEtfRElTUF9PRF0gPSAib2QiLAorfTsK
Kworc3RydWN0IG10a19kZHBfY29tcF9tYXRjaCB7CisJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSB0
eXBlOworCWludCBhbGlhc19pZDsKKwljb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzICpm
dW5jczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIG10a19kZHBfbWF0
Y2hlc1tERFBfQ09NUE9ORU5UX0lEX01BWF0gPSB7CisJW0REUF9DT01QT05FTlRfQUFMXQk9IHsg
TVRLX0RJU1BfQUFMLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfQ09MT1IwXQk9IHsgTVRL
X0RJU1BfQ09MT1IsCTAsICZkZHBfY29sb3IgfSwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjFdCT0g
eyBNVEtfRElTUF9DT0xPUiwJMSwgJmRkcF9jb2xvciB9LAorCVtERFBfQ09NUE9ORU5UX0RQSTBd
CT0geyBNVEtfRFBJLAkJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX0RTSTBdCT0geyBNVEtf
RFNJLAkJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX0RTSTFdCT0geyBNVEtfRFNJLAkJMSwg
TlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX0dBTU1BXQk9IHsgTVRLX0RJU1BfR0FNTUEsCTAsIE5V
TEwgfSwKKwlbRERQX0NPTVBPTkVOVF9PRF0JPSB7IE1US19ESVNQX09ELAkwLCBOVUxMIH0sCisJ
W0REUF9DT01QT05FTlRfT1ZMMF0JPSB7IE1US19ESVNQX09WTCwJMCwgTlVMTCB9LAorCVtERFBf
Q09NUE9ORU5UX09WTDFdCT0geyBNVEtfRElTUF9PVkwsCTEsIE5VTEwgfSwKKwlbRERQX0NPTVBP
TkVOVF9QV00wXQk9IHsgTVRLX0RJU1BfUFdNLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRf
UkRNQTBdCT0geyBNVEtfRElTUF9SRE1BLAkwLCAmZGRwX3JkbWEgfSwKKwlbRERQX0NPTVBPTkVO
VF9SRE1BMV0JPSB7IE1US19ESVNQX1JETUEsCTEsICZkZHBfcmRtYSB9LAorCVtERFBfQ09NUE9O
RU5UX1JETUEyXQk9IHsgTVRLX0RJU1BfUkRNQSwJMiwgJmRkcF9yZG1hIH0sCisJW0REUF9DT01Q
T05FTlRfVUZPRV0JPSB7IE1US19ESVNQX1VGT0UsCTAsICZkZHBfdWZvZSB9LAorCVtERFBfQ09N
UE9ORU5UX1dETUEwXQk9IHsgTVRLX0RJU1BfV0RNQSwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9O
RU5UX1dETUExXQk9IHsgTVRLX0RJU1BfV0RNQSwJMSwgTlVMTCB9LAorfTsKKworaW50IG10a19k
ZHBfY29tcF9nZXRfaWQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJZW51bSBtdGtfZGRw
X2NvbXBfdHlwZSBjb21wX3R5cGUpCit7CisJaW50IGlkID0gb2ZfYWxpYXNfZ2V0X2lkKG5vZGUs
IG10a19kZHBfY29tcF9zdGVtW2NvbXBfdHlwZV0pOworCWludCBpOworCisJZm9yIChpID0gMDsg
aSA8IEFSUkFZX1NJWkUobXRrX2RkcF9tYXRjaGVzKTsgaSsrKSB7CisJCWlmIChjb21wX3R5cGUg
PT0gbXRrX2RkcF9tYXRjaGVzW2ldLnR5cGUgJiYKKwkJICAgIChpZCA8IDAgfHwgaWQgPT0gbXRr
X2RkcF9tYXRjaGVzW2ldLmFsaWFzX2lkKSkKKwkJCXJldHVybiBpOworCX0KKworCXJldHVybiAt
RUlOVkFMOworfQorCitpbnQgbXRrX2RkcF9jb21wX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBz
dHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCSAgICAgIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv
bXAsIGVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBt
dGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzKQoreworCWVudW0gbXRrX2RkcF9jb21wX3R5cGUgdHlw
ZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmxhcmJfbm9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2
aWNlICpsYXJiX3BkZXY7CisKKwlpZiAoY29tcF9pZCA8IDAgfHwgY29tcF9pZCA+PSBERFBfQ09N
UE9ORU5UX0lEX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb21wLT5pZCA9IGNvbXBfaWQ7
CisJY29tcC0+ZnVuY3MgPSBmdW5jcyA/OiBtdGtfZGRwX21hdGNoZXNbY29tcF9pZF0uZnVuY3M7
CisKKwlpZiAoY29tcF9pZCA9PSBERFBfQ09NUE9ORU5UX0RQSTAgfHwKKwkgICAgY29tcF9pZCA9
PSBERFBfQ09NUE9ORU5UX0RTSTAgfHwKKwkgICAgY29tcF9pZCA9PSBERFBfQ09NUE9ORU5UX1BX
TTApIHsKKwkJY29tcC0+cmVncyA9IE5VTEw7CisJCWNvbXAtPmNsayA9IE5VTEw7CisJCWNvbXAt
PmlycSA9IDA7CisJCXJldHVybiAwOworCX0KKworCWNvbXAtPnJlZ3MgPSBvZl9pb21hcChub2Rl
LCAwKTsKKwljb21wLT5pcnEgPSBvZl9pcnFfZ2V0KG5vZGUsIDApOworCWNvbXAtPmNsayA9IG9m
X2Nsa19nZXQobm9kZSwgMCk7CisJaWYgKElTX0VSUihjb21wLT5jbGspKQorCQljb21wLT5jbGsg
PSBOVUxMOworCisJdHlwZSA9IG10a19kZHBfbWF0Y2hlc1tjb21wX2lkXS50eXBlOworCisJLyog
T25seSBETUEgY2FwYWJsZSBjb21wb25lbnRzIG5lZWQgdGhlIExBUkIgcHJvcGVydHkgKi8KKwlj
b21wLT5sYXJiX2RldiA9IE5VTEw7CisJaWYgKHR5cGUgIT0gTVRLX0RJU1BfT1ZMICYmCisJICAg
IHR5cGUgIT0gTVRLX0RJU1BfUkRNQSAmJgorCSAgICB0eXBlICE9IE1US19ESVNQX1dETUEpCisJ
CXJldHVybiAwOworCisJbGFyYl9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShub2RlLCAibWVkaWF0
ZWssbGFyYiIsIDApOworCWlmICghbGFyYl9ub2RlKSB7CisJCWRldl9lcnIoZGV2LAorCQkJIk1p
c3NpbmcgbWVkaWFkZWssbGFyYiBwaGFuZGxlIGluICVzIG5vZGVcbiIsCisJCQlub2RlLT5mdWxs
X25hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsYXJiX3BkZXYgPSBvZl9maW5kX2Rl
dmljZV9ieV9ub2RlKGxhcmJfbm9kZSk7CisJaWYgKCFsYXJiX3BkZXYpIHsKKwkJZGV2X3dhcm4o
ZGV2LCAiV2FpdGluZyBmb3IgbGFyYiBkZXZpY2UgJXNcbiIsCisJCQkgbGFyYl9ub2RlLT5mdWxs
X25hbWUpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwljb21wLT5sYXJiX2RldiA9
ICZsYXJiX3BkZXYtPmRldjsKKworCXJldHVybiAwOworfQorCitpbnQgbXRrX2RkcF9jb21wX3Jl
Z2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp
Cit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRybS0+ZGV2X3ByaXZhdGU7
CisKKwlpZiAocHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdKQorCQlyZXR1cm4gLUVCVVNZOwor
CisJcHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdID0gY29tcDsKKwlyZXR1cm4gMDsKK30KKwor
dm9pZCBtdGtfZGRwX2NvbXBfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1
Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZh
dGUgPSBkcm0tPmRldl9wcml2YXRlOworCisJcHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdID0g
TlVMTDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rk
cF9jb21wLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZjM2MDgKLS0tIC9kZXYvbnVsbAor
KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oCkBAIC0wLDAg
KzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisg
KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRl
ZiBNVEtfRFJNX0REUF9DT01QX0gKKyNkZWZpbmUgTVRLX0RSTV9ERFBfQ09NUF9ICisKKyNpbmNs
dWRlIDxsaW51eC9pby5oPgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRldmljZV9ub2RlOwor
c3RydWN0IGRybV9kZXZpY2U7CitzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlOworCitlbnVtIG10a19k
ZHBfY29tcF90eXBlIHsKKwlNVEtfRElTUF9PVkwsCisJTVRLX0RJU1BfUkRNQSwKKwlNVEtfRElT
UF9XRE1BLAorCU1US19ESVNQX0NPTE9SLAorCU1US19ESVNQX0FBTCwKKwlNVEtfRElTUF9HQU1N
QSwKKwlNVEtfRElTUF9VRk9FLAorCU1US19EU0ksCisJTVRLX0RQSSwKKwlNVEtfRElTUF9QV00s
CisJTVRLX0RJU1BfTVVURVgsCisJTVRLX0RJU1BfT0QsCisJTVRLX0REUF9DT01QX1RZUEVfTUFY
LAorfTsKKworZW51bSBtdGtfZGRwX2NvbXBfaWQgeworCUREUF9DT01QT05FTlRfQUFMLAorCURE
UF9DT01QT05FTlRfQ09MT1IwLAorCUREUF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9DT01QT05F
TlRfRFBJMCwKKwlERFBfQ09NUE9ORU5UX0RTSTAsCisJRERQX0NPTVBPTkVOVF9EU0kxLAorCURE
UF9DT01QT05FTlRfR0FNTUEsCisJRERQX0NPTVBPTkVOVF9PRCwKKwlERFBfQ09NUE9ORU5UX09W
TDAsCisJRERQX0NPTVBPTkVOVF9PVkwxLAorCUREUF9DT01QT05FTlRfUFdNMCwKKwlERFBfQ09N
UE9ORU5UX1BXTTEsCisJRERQX0NPTVBPTkVOVF9SRE1BMCwKKwlERFBfQ09NUE9ORU5UX1JETUEx
LAorCUREUF9DT01QT05FTlRfUkRNQTIsCisJRERQX0NPTVBPTkVOVF9VRk9FLAorCUREUF9DT01Q
T05FTlRfV0RNQTAsCisJRERQX0NPTVBPTkVOVF9XRE1BMSwKKwlERFBfQ09NUE9ORU5UX0lEX01B
WCwKK307CisKK3N0cnVjdCBtdGtfZGRwX2NvbXA7CisKK3N0cnVjdCBtdGtfZGRwX2NvbXBfZnVu
Y3MgeworCXZvaWQgKCpjb25maWcpKHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IHcs
IHVuc2lnbmVkIGludCBoLAorCQkgICAgICAgdW5zaWduZWQgaW50IHZyZWZyZXNoKTsKKwl2b2lk
ICgqc3RhcnQpKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOworCXZvaWQgKCpzdG9wKShzdHJ1
Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKKwl2b2lkICgqZW5hYmxlX3ZibGFuaykodm9pZCBfX2lv
bWVtICpiYXNlKTsKKwl2b2lkICgqZGlzYWJsZV92YmxhbmspKHZvaWQgX19pb21lbSAqYmFzZSk7
CisJdm9pZCAoKmxheWVyX29uKSh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpZHgp
OworCXZvaWQgKCpsYXllcl9vZmYpKHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IGlk
eCk7CisJdm9pZCAoKmxheWVyX2NvbmZpZykodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBp
bnQgaWR4LAorCQkJICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cit9OworCitz
dHJ1Y3QgbXRrX2RkcF9jb21wIHsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICpy
ZWdzOworCWludCBpcnE7CisJc3RydWN0IGRldmljZSAqbGFyYl9kZXY7CisJZW51bSBtdGtfZGRw
X2NvbXBfaWQgaWQ7CisJY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3M7Cit9
OworCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2NvbmZpZyhzdHJ1Y3QgbXRrX2Rk
cF9jb21wICpjb21wLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdywgdW5zaWduZWQgaW50IGgs
CisJCQkJICAgICAgIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwlpZiAoY29tcC0+ZnVuY3Mg
JiYgY29tcC0+ZnVuY3MtPmNvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmNvbmZpZyhjb21wLT5yZWdz
LCB3LCBoLCB2cmVmcmVzaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBf
c3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYg
Y29tcC0+ZnVuY3MtPnN0YXJ0KQorCQljb21wLT5mdW5jcy0+c3RhcnQoY29tcCk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpj
b21wKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+c3RvcCkKKwkJY29tcC0+
ZnVuY3MtPnN0b3AoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBf
ZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5m
dW5jcyAmJiBjb21wLT5mdW5jcy0+ZW5hYmxlX3ZibGFuaykKKwkJY29tcC0+ZnVuY3MtPmVuYWJs
ZV92YmxhbmsoY29tcC0+cmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2Nv
bXBfZGlzYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29t
cC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmRpc2FibGVfdmJsYW5rKQorCQljb21wLT5mdW5jcy0+
ZGlzYWJsZV92YmxhbmsoY29tcC0+cmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtf
ZGRwX2NvbXBfbGF5ZXJfb24oc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJIHVuc2ln
bmVkIGludCBpZHgpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5sYXllcl9v
bikKKwkJY29tcC0+ZnVuY3MtPmxheWVyX29uKGNvbXAtPnJlZ3MsIGlkeCk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfb2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAg
KmNvbXAsCisJCQkJCSAgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYg
Y29tcC0+ZnVuY3MtPmxheWVyX29mZikKKwkJY29tcC0+ZnVuY3MtPmxheWVyX29mZihjb21wLT5y
ZWdzLCBpZHgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2xheWVyX2Nv
bmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBp
ZHgsCisJCQkJCSAgICAgc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKGNv
bXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5sYXllcl9jb25maWcpCisJCWNvbXAtPmZ1bmNzLT5s
YXllcl9jb25maWcoY29tcC0+cmVncywgaWR4LCBzdGF0ZSk7Cit9CisKK2ludCBtdGtfZGRwX2Nv
bXBfZ2V0X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCWVudW0gbXRrX2RkcF9jb21w
X3R5cGUgY29tcF90eXBlKTsKK2ludCBtdGtfZGRwX2NvbXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpk
ZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29tcF9ub2RlLAorCQkgICAgICBzdHJ1Y3QgbXRrX2Rk
cF9jb21wICpjb21wLCBlbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkLAorCQkgICAgICBjb25z
dCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzICpmdW5jcyk7CitpbnQgbXRrX2RkcF9jb21wX3Jl
Z2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp
Owordm9pZCBtdGtfZGRwX2NvbXBfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBz
dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKKworI2VuZGlmIC8qIE1US19EUk1fRERQX0NPTVBf
SCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMg
Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hMzRjNzY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKQEAgLTAsMCArMSw1NjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBZVCBTSEVOIDx5dC5z
aGVuQG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2Ry
bV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRl
IDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNs
dWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtaW9tbXUuaD4KKyNp
bmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0u
aD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Ny
dGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2Nv
bXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIK
KyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJtZWRpYXRl
ayIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIk1lZGlhdGVrIFNvQyBEUk0iCisjZGVmaW5lIERSSVZF
Ul9EQVRFICIyMDE1MDUxMyIKKyNkZWZpbmUgRFJJVkVSX01BSk9SIDEKKyNkZWZpbmUgRFJJVkVS
X01JTk9SIDAKKworc3RhdGljIHZvaWQgbXRrX2F0b21pY19zY2hlZHVsZShzdHJ1Y3QgbXRrX2Ry
bV9wcml2YXRlICpwcml2YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkK
K3sKKwlwcml2YXRlLT5jb21taXQuc3RhdGUgPSBzdGF0ZTsKKwlzY2hlZHVsZV93b3JrKCZwcml2
YXRlLT5jb21taXQud29yayk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfY29tcGxldGUo
c3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSwKKwkJCQlzdHJ1Y3QgZHJtX2F0b21pY19z
dGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsK
KworCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2Rpc2FibGVzKGRybSwgc3RhdGUp
OworCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZHJtLCBzdGF0ZSwgZmFsc2UpOwor
CWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2VuYWJsZXMoZHJtLCBzdGF0ZSk7CisJ
ZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3JfdmJsYW5rcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRv
bWljX2hlbHBlcl9jbGVhbnVwX3BsYW5lcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX3N0YXRl
X2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfYXRvbWljX3dvcmsoc3RydWN0IHdv
cmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBj
b250YWluZXJfb2Yod29yaywKKwkJCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUsIGNvbW1pdC53b3Jr
KTsKKworCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwgcHJpdmF0ZS0+Y29tbWl0LnN0YXRl
KTsKK30KKworc3RhdGljIGludCBtdGtfYXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJtX2RldmljZSAq
ZHJtLAorCQkJICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkgICAgIGJv
b2wgYXN5bmMpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRybS0+ZGV2
X3ByaXZhdGU7CisJaW50IHJldDsKKworCXJldCA9IGRybV9hdG9taWNfaGVscGVyX3ByZXBhcmVf
cGxhbmVzKGRybSwgc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltdXRleF9s
b2NrKCZwcml2YXRlLT5jb21taXQubG9jayk7CisJZmx1c2hfd29yaygmcHJpdmF0ZS0+Y29tbWl0
LndvcmspOworCisJZHJtX2F0b21pY19oZWxwZXJfc3dhcF9zdGF0ZShkcm0sIHN0YXRlKTsKKwor
CWlmIChhc3luYykKKwkJbXRrX2F0b21pY19zY2hlZHVsZShwcml2YXRlLCBzdGF0ZSk7CisJZWxz
ZQorCQltdGtfYXRvbWljX2NvbXBsZXRlKHByaXZhdGUsIHN0YXRlKTsKKworCW11dGV4X3VubG9j
aygmcHJpdmF0ZS0+Y29tbWl0LmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25z
dCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIG10a19kcm1fbW9kZV9jb25maWdfZnVuY3Mg
PSB7CisJLmZiX2NyZWF0ZSA9IG10a19kcm1fbW9kZV9mYl9jcmVhdGUsCisJLmF0b21pY19jaGVj
ayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAorCS5hdG9taWNfY29tbWl0ID0gbXRrX2F0b21p
Y19jb21taXQsCit9OworCitzdGF0aWMgY29uc3QgZW51bSBtdGtfZGRwX2NvbXBfaWQgbXRrX2Rk
cF9tYWluW10gPSB7CisJRERQX0NPTVBPTkVOVF9PVkwwLAorCUREUF9DT01QT05FTlRfQ09MT1Iw
LAorCUREUF9DT01QT05FTlRfQUFMLAorCUREUF9DT01QT05FTlRfT0QsCisJRERQX0NPTVBPTkVO
VF9SRE1BMCwKKwlERFBfQ09NUE9ORU5UX1VGT0UsCisJRERQX0NPTVBPTkVOVF9EU0kwLAorCURE
UF9DT01QT05FTlRfUFdNMCwKK307CisKK3N0YXRpYyBjb25zdCBlbnVtIG10a19kZHBfY29tcF9p
ZCBtdGtfZGRwX2V4dFtdID0geworCUREUF9DT01QT05FTlRfT1ZMMSwKKwlERFBfQ09NUE9ORU5U
X0NPTE9SMSwKKwlERFBfQ09NUE9ORU5UX0dBTU1BLAorCUREUF9DT01QT05FTlRfUkRNQTEsCisJ
RERQX0NPTVBPTkVOVF9EUEkwLAorfTsKKworc3RhdGljIGludCBtdGtfZHJtX2ttc19pbml0KHN0
cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0
ZSA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlp
bnQgcmV0OworCisJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocHJpdmF0ZS0+bXV0ZXhf
bm9kZSk7CisJaWYgKCFwZGV2KSB7CisJCWRldl9lcnIoZHJtLT5kZXYsICJXYWl0aW5nIGZvciBk
aXNwLW11dGV4IGRldmljZSAlc1xuIiwKKwkJCXByaXZhdGUtPm11dGV4X25vZGUtPmZ1bGxfbmFt
ZSk7CisJCW9mX25vZGVfcHV0KHByaXZhdGUtPm11dGV4X25vZGUpOworCQlyZXR1cm4gLUVQUk9C
RV9ERUZFUjsKKwl9CisJcHJpdmF0ZS0+bXV0ZXhfZGV2ID0gJnBkZXYtPmRldjsKKworCWRybV9t
b2RlX2NvbmZpZ19pbml0KGRybSk7CisKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDY0
OworCWRybS0+bW9kZV9jb25maWcubWluX2hlaWdodCA9IDY0OworCisJLyoKKwkgKiBzZXQgbWF4
IHdpZHRoIGFuZCBoZWlnaHQgYXMgZGVmYXVsdCB2YWx1ZSg0MDk2eDQwOTYpLgorCSAqIHRoaXMg
dmFsdWUgd291bGQgYmUgdXNlZCB0byBjaGVjayBmcmFtZWJ1ZmZlciBzaXplIGxpbWl0YXRpb24K
KwkgKiBhdCBkcm1fbW9kZV9hZGRmYigpLgorCSAqLworCWRybS0+bW9kZV9jb25maWcubWF4X3dp
ZHRoID0gNDA5NjsKKwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSA0MDk2OworCWRybS0+
bW9kZV9jb25maWcuZnVuY3MgPSAmbXRrX2RybV9tb2RlX2NvbmZpZ19mdW5jczsKKworCXJldCA9
IGNvbXBvbmVudF9iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy
cl9jb25maWdfY2xlYW51cDsKKworCS8qCisJICogV2UgY3VycmVudGx5IHN1cHBvcnQgdHdvIGZp
eGVkIGRhdGEgc3RyZWFtcywgZWFjaCBzdGF0aWNhbGx5CisJICogYXNzaWduZWQgdG8gYSBjcnRj
OgorCSAqIE9WTDAgLT4gQ09MT1IwIC0+IEFBTCAtPiBPRCAtPiBSRE1BMCAtPiBVRk9FIC0+IERT
STAgLi4uCisJICovCisJcmV0ID0gbXRrX2RybV9jcnRjX2NyZWF0ZShkcm0sIG10a19kZHBfbWFp
biwgQVJSQVlfU0laRShtdGtfZGRwX21haW4pKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJf
Y29tcG9uZW50X3VuYmluZDsKKwkvKiAuLi4gYW5kIE9WTDEgLT4gQ09MT1IxIC0+IEdBTU1BIC0+
IFJETUExIC0+IERQSTAuICovCisJcmV0ID0gbXRrX2RybV9jcnRjX2NyZWF0ZShkcm0sIG10a19k
ZHBfZXh0LCBBUlJBWV9TSVpFKG10a19kZHBfZXh0KSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8g
ZXJyX2NvbXBvbmVudF91bmJpbmQ7CisKKwkvKgorCSAqIFdlIGRvbid0IHVzZSB0aGUgZHJtX2ly
cV9pbnN0YWxsKCkgaGVscGVycyBwcm92aWRlZCBieSB0aGUgRFJNCisJICogY29yZSwgc28gd2Ug
bmVlZCB0byBzZXQgdGhpcyBtYW51YWxseSBpbiBvcmRlciB0byBhbGxvdyB0aGUKKwkgKiBEUk1f
SU9DVExfV0FJVF9WQkxBTksgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCisJICovCisJZHJtLT5pcnFf
ZW5hYmxlZCA9IHRydWU7CisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRybSwgTUFYX0NSVEMpOwor
CWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCisJZHJtX2ttc19o
ZWxwZXJfcG9sbF9pbml0KGRybSk7CisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7CisKKwly
ZXR1cm4gMDsKKworZXJyX2NvbXBvbmVudF91bmJpbmQ6CisJY29tcG9uZW50X3VuYmluZF9hbGwo
ZHJtLT5kZXYsIGRybSk7CitlcnJfY29uZmlnX2NsZWFudXA6CisJZHJtX21vZGVfY29uZmlnX2Ns
ZWFudXAoZHJtKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fa21z
X2RlaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCWRybV9rbXNfaGVscGVyX3BvbGxf
ZmluaShkcm0pOworCisJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7CisJY29tcG9uZW50X3VuYmlu
ZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKK30K
Kworc3RhdGljIGludCBtdGtfZHJtX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQorewor
CW10a19kcm1fa21zX2RlaW5pdChkcm0pOworCWRybS0+ZGV2X3ByaXZhdGUgPSBOVUxMOworCisJ
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qg
bXRrX2RybV9nZW1fdm1fb3BzID0geworCS5vcGVuID0gZHJtX2dlbV92bV9vcGVuLAorCS5jbG9z
ZSA9IGRybV9nZW1fdm1fY2xvc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3Bl
cmF0aW9ucyBtdGtfZHJtX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4g
PSBkcm1fb3BlbiwKKwkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9
IGRybV9pb2N0bCwKKwkubW1hcCA9IG10a19kcm1fZ2VtX21tYXAsCisJLnBvbGwgPSBkcm1fcG9s
bCwKKwkucmVhZCA9IGRybV9yZWFkLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lv
Y3RsID0gZHJtX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBkcm1f
ZHJpdmVyIG10a19kcm1fZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfTU9E
RVNFVCB8IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJTUUgfAorCQkJICAgRFJJVkVSX0FUT01JQywK
KwkudW5sb2FkID0gbXRrX2RybV91bmxvYWQsCisJLnNldF9idXNpZCA9IGRybV9wbGF0Zm9ybV9z
ZXRfYnVzaWQsCisKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gZHJtX3ZibGFua19jb3VudCwKKwku
ZW5hYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3Zi
bGFuayA9IG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuaywKKworCS5nZW1fZnJlZV9vYmplY3Qg
PSBtdGtfZHJtX2dlbV9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcyA9ICZtdGtfZHJtX2dlbV92
bV9vcHMsCisJLmR1bWJfY3JlYXRlID0gbXRrX2RybV9nZW1fZHVtYl9jcmVhdGUsCisJLmR1bWJf
bWFwX29mZnNldCA9IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldCwKKwkuZHVtYl9kZXN0cm95
ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCisKKwkucHJpbWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dl
bV9wcmltZV9oYW5kbGVfdG9fZmQsCisJLnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1fcHJp
bWVfZmRfdG9faGFuZGxlLAorCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBv
cnQsCisJLmdlbV9wcmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3By
aW1lX2dldF9zZ190YWJsZSA9IG10a19nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJp
bWVfbW1hcCA9IG10a19kcm1fZ2VtX21tYXBfYnVmLAorCS5mb3BzID0gJm10a19kcm1fZm9wcywK
KworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmRlc2MgPSBEUklWRVJfREVTQywKKwkuZGF0ZSA9
IERSSVZFUl9EQVRFLAorCS5tYWpvciA9IERSSVZFUl9NQUpPUiwKKwkubWlub3IgPSBEUklWRVJf
TUlOT1IsCit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfb2Yoc3RydWN0IGRldmljZSAqZGV2LCB2
b2lkICpkYXRhKQoreworCXJldHVybiBkZXYtPm9mX25vZGUgPT0gZGF0YTsKK30KKworc3RhdGlj
IGludCBtdGtfZHJtX2JpbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJt
X3ByaXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rl
dmljZSAqZHJtOworCWludCByZXQ7CisKKwlkcm0gPSBkcm1fZGV2X2FsbG9jKCZtdGtfZHJtX2Ry
aXZlciwgZGV2KTsKKwlpZiAoIWRybSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkcm1fZGV2X3Nl
dF91bmlxdWUoZHJtLCBkZXZfbmFtZShkZXYpKTsKKworCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIo
ZHJtLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZnJlZTsKKworCWRybS0+ZGV2X3By
aXZhdGUgPSBwcml2YXRlOworCXByaXZhdGUtPmRybSA9IGRybTsKKworCXJldCA9IG10a19kcm1f
a21zX2luaXQoZHJtKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfdW5yZWdpc3RlcjsKKwor
CXJldHVybiAwOworCitlcnJfdW5yZWdpc3RlcjoKKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsK
K2Vycl9mcmVlOgorCWRybV9kZXZfdW5yZWYoZHJtKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0
aWMgdm9pZCBtdGtfZHJtX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10
a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZHJtX3B1
dF9kZXYocHJpdmF0ZS0+ZHJtKTsKKwlwcml2YXRlLT5kcm0gPSBOVUxMOworfQorCitzdGF0aWMg
Y29uc3Qgc3RydWN0IGNvbXBvbmVudF9tYXN0ZXJfb3BzIG10a19kcm1fb3BzID0geworCS5iaW5k
CQk9IG10a19kcm1fYmluZCwKKwkudW5iaW5kCQk9IG10a19kcm1fdW5iaW5kLAorfTsKKworc3Rh
dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2RkcF9jb21wX2R0X2lkc1tdID0gewor
CXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3Atb3ZsIiwgICAuZGF0YSA9ICh2
b2lkICopTVRLX0RJU1BfT1ZMIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMt
ZGlzcC1yZG1hIiwgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9SRE1BIH0sCisJeyAuY29tcGF0
aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC13ZG1hIiwgIC5kYXRhID0gKHZvaWQgKilNVEtf
RElTUF9XRE1BIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1jb2xv
ciIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9DT0xPUiB9LAorCXsgLmNvbXBhdGlibGUgPSAi
bWVkaWF0ZWssbXQ4MTczLWRpc3AtYWFsIiwgICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfQUFM
fSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWdhbW1hIiwgLmRhdGEg
PSAodm9pZCAqKU1US19ESVNQX0dBTU1BLCB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWss
bXQ4MTczLWRpc3AtdWZvZSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfVUZPRSB9LAorCXsg
LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRzaSIsICAgICAgICAuZGF0YSA9ICh2b2lk
ICopTVRLX0RTSSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRwaSIsICAg
ICAgICAuZGF0YSA9ICh2b2lkICopTVRLX0RQSSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0
ZWssbXQ4MTczLWRpc3AtbXV0ZXgiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfTVVURVggfSwK
Kwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXB3bSIsICAgLmRhdGEgPSAo
dm9pZCAqKU1US19ESVNQX1BXTSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTcz
LWRpc3Atb2QiLCAgICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfT0QgfSwKKwl7IH0KK307CisK
K3N0YXRpYyBpbnQgbXRrX2RybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQor
eworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kcm1fcHJp
dmF0ZSAqcHJpdmF0ZTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgZGV2aWNlX25v
ZGUgKm5vZGU7CisJc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2ggPSBOVUxMOworCWludCBy
ZXQ7CisJaW50IGk7CisKKwlwcml2YXRlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2
YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKwor
CW11dGV4X2luaXQoJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKKwlJTklUX1dPUksoJnByaXZhdGUt
PmNvbW1pdC53b3JrLCBtdGtfYXRvbWljX3dvcmspOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jl
c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlwcml2YXRlLT5jb25maWdfcmVncyA9
IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUihwcml2YXRlLT5j
b25maWdfcmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihwcml2YXRlLT5jb25maWdfcmVncyk7CisJ
CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgbW1zeXMtY29uZmlnIHJlc291cmNlOiAl
ZFxuIiwKKwkJCXJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogSXRlcmF0ZSBvdmVyIHNp
YmxpbmcgRElTUCBmdW5jdGlvbiBibG9ja3MgKi8KKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGRl
di0+b2Zfbm9kZS0+cGFyZW50LCBub2RlKSB7CisJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg
Km9mX2lkOworCQllbnVtIG10a19kZHBfY29tcF90eXBlIGNvbXBfdHlwZTsKKwkJaW50IGNvbXBf
aWQ7CisKKwkJb2ZfaWQgPSBvZl9tYXRjaF9ub2RlKG10a19kZHBfY29tcF9kdF9pZHMsIG5vZGUp
OworCQlpZiAoIW9mX2lkKQorCQkJY29udGludWU7CisKKwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZh
aWxhYmxlKG5vZGUpKSB7CisJCQlkZXZfZGJnKGRldiwgIlNraXBwaW5nIGRpc2FibGVkIGNvbXBv
bmVudCAlc1xuIiwKKwkJCQlub2RlLT5mdWxsX25hbWUpOworCQkJY29udGludWU7CisJCX0KKwor
CQljb21wX3R5cGUgPSAoZW51bSBtdGtfZGRwX2NvbXBfdHlwZSlvZl9pZC0+ZGF0YTsKKworCQlp
ZiAoY29tcF90eXBlID09IE1US19ESVNQX01VVEVYKSB7CisJCQlwcml2YXRlLT5tdXRleF9ub2Rl
ID0gb2Zfbm9kZV9nZXQobm9kZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbXBfaWQgPSBt
dGtfZGRwX2NvbXBfZ2V0X2lkKG5vZGUsIGNvbXBfdHlwZSk7CisJCWlmIChjb21wX2lkIDwgMCkg
eworCQkJZGV2X3dhcm4oZGV2LCAiU2tpcHBpbmcgdW5rbm93biBjb21wb25lbnQgJXNcbiIsCisJ
CQkJIG5vZGUtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXByaXZhdGUtPmNv
bXBfbm9kZVtjb21wX2lkXSA9IG9mX25vZGVfZ2V0KG5vZGUpOworCisJCS8qCisJCSAqIEN1cnJl
bnRseSBvbmx5IHRoZSBPVkwsIERTSSwgYW5kIERQSSBibG9ja3MgaGF2ZSBzZXBhcmF0ZQorCQkg
KiBjb21wb25lbnQgcGxhdGZvcm0gZHJpdmVycyBhbmQgaW5pdGlhbGl6ZSB0aGVpciBvd24gRERQ
CisJCSAqIGNvbXBvbmVudCBzdHJ1Y3R1cmUuIFRoZSBvdGhlcnMgYXJlIGluaXRpYWxpemVkIGhl
cmUuCisJCSAqLworCQlpZiAoY29tcF90eXBlID09IE1US19ESVNQX09WTCB8fAorCQkgICAgY29t
cF90eXBlID09IE1US19EU0kgfHwKKwkJICAgIGNvbXBfdHlwZSA9PSBNVEtfRFBJKSB7CisJCQlk
ZXZfaW5mbyhkZXYsICJBZGRpbmcgY29tcG9uZW50IG1hdGNoIGZvciAlc1xuIiwKKwkJCQkgbm9k
ZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbXBvbmVudF9tYXRjaF9hZGQoZGV2LCAmbWF0Y2gsIGNvbXBh
cmVfb2YsIG5vZGUpOworCQl9IGVsc2UgeworCQkJc3RydWN0IG10a19kZHBfY29tcCAqY29tcDsK
KworCQkJY29tcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY29tcCksIEdGUF9LRVJORUwp
OworCQkJaWYgKCFjb21wKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIGVycjsKKwkJ
CX0KKworCQkJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBub2RlLCBjb21wLCBjb21wX2lk
LCBOVUxMKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnI7CisKKwkJCXByaXZhdGUtPmRkcF9j
b21wW2NvbXBfaWRdID0gY29tcDsKKwkJfQorCX0KKworCWlmICghcHJpdmF0ZS0+bXV0ZXhfbm9k
ZSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIGRpc3AtbXV0ZXggbm9kZVxuIik7
CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxl
KGRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2YXRlKTsKKworCXJldCA9
IGNvbXBvbmVudF9tYXN0ZXJfYWRkX3dpdGhfbWF0Y2goZGV2LCAmbXRrX2RybV9vcHMsIG1hdGNo
KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworCitlcnI6CisJb2Zfbm9k
ZV9wdXQocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJZm9yIChpID0gMDsgaSA8IEREUF9DT01QT05F
TlRfSURfTUFYOyBpKyspCisJCW9mX25vZGVfcHV0KHByaXZhdGUtPmNvbXBfbm9kZVtpXSk7CisJ
cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfZHJtX3JlbW92ZShzdHJ1Y3QgcGxhdGZv
cm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBw
bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgaTsKKworCWNvbXBvbmVudF9tYXN0ZXJf
ZGVsKCZwZGV2LT5kZXYsICZtdGtfZHJtX29wcyk7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2
LT5kZXYpOworCW9mX25vZGVfcHV0KHByaXZhdGUtPm11dGV4X25vZGUpOworCWZvciAoaSA9IDA7
IGkgPCBERFBfQ09NUE9ORU5UX0lEX01BWDsgaSsrKQorCQlvZl9ub2RlX3B1dChwcml2YXRlLT5j
b21wX25vZGVbaV0pOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAK
K3N0YXRpYyBpbnQgbXRrX2RybV9zeXNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJ
c3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwor
CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisJc3RydWN0IGRybV9jb25u
ZWN0b3IgKmNvbm47CisKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2Rpc2FibGUoZHJtKTsKKworCWRy
bV9tb2Rlc2V0X2xvY2tfYWxsKGRybSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCAmZHJt
LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpbnQgb2xkX2RwbXMgPSBj
b25uLT5kcG1zOworCisJCWlmIChjb25uLT5mdW5jcy0+ZHBtcykKKwkJCWNvbm4tPmZ1bmNzLT5k
cG1zKGNvbm4sIERSTV9NT0RFX0RQTVNfT0ZGKTsKKworCQkvKiBTZXQgdGhlIG9sZCBtb2RlIGJh
Y2sgdG8gdGhlIGNvbm5lY3RvciBmb3IgcmVzdW1lICovCisJCWNvbm4tPmRwbXMgPSBvbGRfZHBt
czsKKwl9CisJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkcm0pOworCisJRFJNX0RFQlVHX0RSSVZF
UigibXRrX2RybV9zeXNfc3VzcGVuZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg
bXRrX2RybV9zeXNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2Ry
bV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9k
ZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsK
KworCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRybSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25u
LCAmZHJtLT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpbnQgZGVzaXJl
ZF9tb2RlID0gY29ubi0+ZHBtczsKKworCQkvKgorCQkgKiBhdCBzdXNwZW5kIHRpbWUsIHdlIHNh
dmUgZHBtcyB0byBjb25uZWN0b3ItPmRwbXMsCisJCSAqIHJlc3RvcmUgdGhlIG9sZF9kcG1zLCBh
bmQgYXQgY3VycmVudCB0aW1lLCB0aGUgY29ubmVjdG9yCisJCSAqIGRwbXMgc3RhdHVzIG11c3Qg
YmUgRFJNX01PREVfRFBNU19PRkYuCisJCSAqLworCQljb25uLT5kcG1zID0gRFJNX01PREVfRFBN
U19PRkY7CisKKwkJLyoKKwkJICogSWYgdGhlIGNvbm5lY3RvciBoYXMgYmVlbiBkaXNjb25uZWN0
ZWQgZHVyaW5nIHN1c3BlbmQsCisJCSAqIGRpc2Nvbm5lY3QgaXQgZnJvbSB0aGUgZW5jb2RlciBh
bmQgbGVhdmUgaXQgb2ZmLiBXZSdsbCBub3RpZnkKKwkJICogdXNlcnNwYWNlIGF0IHRoZSBlbmQu
CisJCSAqLworCQlpZiAoY29ubi0+ZnVuY3MtPmRwbXMpCisJCQljb25uLT5mdW5jcy0+ZHBtcyhj
b25uLCBkZXNpcmVkX21vZGUpOworCX0KKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRybSk7CisK
Kwlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShkcm0pOworCisJRFJNX0RFQlVHX0RSSVZFUigi
bXRrX2RybV9zeXNfcmVzdW1lXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIFNJTVBMRV9E
RVZfUE1fT1BTKG10a19kcm1fcG1fb3BzLCBtdGtfZHJtX3N5c19zdXNwZW5kLAorCQkJIG10a19k
cm1fc3lzX3Jlc3VtZSk7CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf
aWQgbXRrX2RybV9vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3
My1tbXN5cyIsIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBt
dGtfZHJtX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUJPSBtdGtfZHJtX3Byb2JlLAorCS5y
ZW1vdmUJPSBtdGtfZHJtX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJtZWRpYXRl
ay1kcm0iLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHJtX29mX2lkcywKKyNpZmRlZiBDT05G
SUdfUE1fU0xFRVAKKwkJLnBtICAgICA9ICZtdGtfZHJtX3BtX29wcywKKyNlbmRpZgorCX0sCit9
OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IG10a19kcm1fZHJpdmVy
c1tdID0geworCSZtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciwKKwkmbXRrX2Rpc3Bfb3ZsX2RyaXZl
ciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19kcm1faW5pdCh2b2lkKQoreworCWludCBy
ZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZHJtX2RyaXZl
cnMpOyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKG10a19kcm1fZHJp
dmVyc1tpXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3Rl
ciAlcyBkcml2ZXI6ICVkXG4iLAorCQkJICAgICAgIG10a19kcm1fZHJpdmVyc1tpXS0+ZHJpdmVy
Lm5hbWUsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnI6
CisJd2hpbGUgKC0taSA+PSAwKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfZHJt
X2RyaXZlcnNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG10
a19kcm1fZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gQVJSQVlfU0laRShtdGtf
ZHJtX2RyaXZlcnMpIC0gMTsgaSA+PSAwOyBpLS0pCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lz
dGVyKG10a19kcm1fZHJpdmVyc1tpXSk7Cit9CisKK21vZHVsZV9pbml0KG10a19kcm1faW5pdCk7
Cittb2R1bGVfZXhpdChtdGtfZHJtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJZVCBTSEVOIDx5
dC5zaGVuQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0ZWsgU29D
IERSTSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kcm1fZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZGY0MjFjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZHJtX2Rydi5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVk
aWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRFJWX0gKKyNkZWZpbmUgTVRLX0RSTV9EUlZfSAor
CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisK
KyNkZWZpbmUgTUFYX0NSVEMJMgorI2RlZmluZSBNQVhfQ09OTkVDVE9SCTIKKworc3RydWN0IGRl
dmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1f
ZGV2aWNlOworc3RydWN0IGRybV9mYl9oZWxwZXI7CitzdHJ1Y3QgZHJtX3Byb3BlcnR5Oworc3Ry
dWN0IHJlZ21hcDsKKworc3RydWN0IG10a19kcm1fcHJpdmF0ZSB7CisJc3RydWN0IGRybV9kZXZp
Y2UgKmRybTsKKworCXN0cnVjdCBkcm1fY3J0YyAqY3J0Y1tNQVhfQ1JUQ107CisJc3RydWN0IGRy
bV9wcm9wZXJ0eSAqcGxhbmVfenBvc19wcm9wZXJ0eTsKKwl1bnNpZ25lZCBpbnQgbnVtX3BpcGVz
OworCisJc3RydWN0IGRldmljZV9ub2RlICptdXRleF9ub2RlOworCXN0cnVjdCBkZXZpY2UgKm11
dGV4X2RldjsKKwl2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzOworCXN0cnVjdCBkZXZpY2Vfbm9k
ZSAqY29tcF9ub2RlW0REUF9DT01QT05FTlRfSURfTUFYXTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21w
ICpkZHBfY29tcFtERFBfQ09NUE9ORU5UX0lEX01BWF07CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qg
ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7CisJCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCQlz
dHJ1Y3QgbXV0ZXggbG9jazsKKwl9IGNvbW1pdDsKK307CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZv
cm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXI7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0RSVl9I
ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iMmFkYTgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy
IGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg
KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1
ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5o
PgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgor
I2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCisvKgor
ICogbXRrIHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVyZS4KKyAqCisgKiBAZmI6IGRybSBm
cmFtZWJ1ZmZlciBvYmplY3QuCisgKiBAZ2VtX29iajogYXJyYXkgb2YgZ2VtIG9iamVjdHMuCisg
Ki8KK3N0cnVjdCBtdGtfZHJtX2ZiIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyCWJhc2U7CisJ
LyogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgcGxhbmUgKi8KKwlzdHJ1Y3QgZHJt
X2dlbV9vYmplY3QJKmdlbV9vYmo7Cit9OworCisjZGVmaW5lIHRvX210a19mYih4KSBjb250YWlu
ZXJfb2YoeCwgc3RydWN0IG10a19kcm1fZmIsIGJhc2UpCisKK3N0cnVjdCBkcm1fZ2VtX29iamVj
dCAqbXRrX2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCXN0
cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJcmV0dXJuIG10a19m
Yi0+Z2VtX29iajsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2ZiX2NyZWF0ZV9oYW5kbGUoc3Ry
dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w
cml2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9m
YiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCXJldHVybiBkcm1fZ2VtX2hhbmRsZV9jcmVh
dGUoZmlsZV9wcml2LCBtdGtfZmItPmdlbV9vYmosIGhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19kcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1
Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCWRybV9mcmFtZWJ1ZmZl
cl9jbGVhbnVwKGZiKTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG10
a19mYi0+Z2VtX29iaik7CisKKwlrZnJlZShtdGtfZmIpOworfQorCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBtdGtfZHJtX2ZiX2Z1bmNzID0geworCS5jcmVhdGVf
aGFuZGxlID0gbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxlLAorCS5kZXN0cm95ID0gbXRrX2RybV9m
Yl9kZXN0cm95LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZHJtX2ZyYW1l
YnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgIHN0cnVjdCBkcm1f
bW9kZV9mYl9jbWQyICptb2RlLAorCQkJCQkJICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmop
Cit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlpbnQgcmV0OworCisJaWYgKGRybV9m
b3JtYXRfbnVtX3BsYW5lcyhtb2RlLT5waXhlbF9mb3JtYXQpICE9IDEpCisJCXJldHVybiBFUlJf
UFRSKC1FSU5WQUwpOworCisJbXRrX2ZiID0ga3phbGxvYyhzaXplb2YoKm10a19mYiksIEdGUF9L
RVJORUwpOworCWlmICghbXRrX2ZiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRy
bV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdCgmbXRrX2ZiLT5iYXNlLCBtb2RlKTsKKworCW10
a19mYi0+Z2VtX29iaiA9IG9iajsKKworCXJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwg
Jm10a19mYi0+YmFzZSwgJm10a19kcm1fZmJfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJRFJNX0VS
Uk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmcmFtZWJ1ZmZlclxuIik7CisJCWtmcmVlKG10a19m
Yik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIG10a19mYjsKK30KKwor
c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbXRrX2RybV9tb2RlX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJt
X2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAorCQkJCQkg
ICAgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9m
YiAqbXRrX2ZiOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOworCXVuc2lnbmVkIGludCB3
aWR0aCA9IGNtZC0+d2lkdGg7CisJdW5zaWduZWQgaW50IGhlaWdodCA9IGNtZC0+aGVpZ2h0Owor
CXVuc2lnbmVkIGludCBzaXplLCBicHA7CisJaW50IHJldDsKKworCWlmIChkcm1fZm9ybWF0X251
bV9wbGFuZXMoY21kLT5waXhlbF9mb3JtYXQpICE9IDEpCisJCXJldHVybiBFUlJfUFRSKC1FSU5W
QUwpOworCisJZ2VtID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgY21kLT5oYW5k
bGVzWzBdKTsKKwlpZiAoIWdlbSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisKKwlicHAg
PSBkcm1fZm9ybWF0X3BsYW5lX2NwcChjbWQtPnBpeGVsX2Zvcm1hdCwgMCk7CisJc2l6ZSA9ICho
ZWlnaHQgLSAxKSAqIGNtZC0+cGl0Y2hlc1swXSArIHdpZHRoICogYnBwOworCXNpemUgKz0gY21k
LT5vZmZzZXRzWzBdOworCisJaWYgKGdlbS0+c2l6ZSA8IHNpemUpIHsKKwkJcmV0ID0gLUVJTlZB
TDsKKwkJZ290byB1bnJlZmVyZW5jZTsKKwl9CisKKwltdGtfZmIgPSBtdGtfZHJtX2ZyYW1lYnVm
ZmVyX2luaXQoZGV2LCBjbWQsIGdlbSk7CisJaWYgKElTX0VSUihtdGtfZmIpKSB7CisJCXJldCA9
IFBUUl9FUlIobXRrX2ZiKTsKKwkJZ290byB1bnJlZmVyZW5jZTsKKwl9CisKKwlyZXR1cm4gJm10
a19mYi0+YmFzZTsKKwordW5yZWZlcmVuY2U6CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Vf
dW5sb2NrZWQoZ2VtKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQpkaWZmIC0tZ2l0IGEvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2ZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Ez
NzhjNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2ZiLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRl
ayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICovCisKKyNpZm5kZWYgTVRLX0RSTV9GQl9ICisjZGVmaW5lIE1US19EUk1fRkJfSAorCisjZGVm
aW5lIE1BWF9GQl9PQkoJMworCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm10a19mYl9nZXRfZ2Vt
X29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7CitzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy
ICptdGtfZHJtX21vZGVfZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAg
ICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCisJCQkJCSAgICAgICBzdHJ1Y3QgZHJtX21vZGVf
ZmJfY21kMiAqY21kKTsKKwordm9pZCBtdGtfZHJtX21vZGVfb3V0cHV0X3BvbGxfY2hhbmdlZChz
dHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBtdGtfZmJkZXZfY3JlYXRlKHN0cnVjdCBkcm1f
ZGV2aWNlICpkZXYpOwordm9pZCBtdGtfZmJkZXZfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAq
ZGV2KTsKKworI2VuZGlmIC8qIE1US19EUk1fRkJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9nZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTVlYWI3
Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2Vt
LmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsg
SW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
LworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorCisj
aW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2dlbV9vYmog
Km10a19kcm1fZ2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCXVuc2lnbmVk
IGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtX29iajsKKwlp
bnQgcmV0OworCisJc2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7CisKKwltdGtfZ2Vt
X29iaiA9IGt6YWxsb2Moc2l6ZW9mKCptdGtfZ2VtX29iaiksIEdGUF9LRVJORUwpOworCWlmICgh
bXRrX2dlbV9vYmopCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gZHJtX2dl
bV9vYmplY3RfaW5pdChkZXYsICZtdGtfZ2VtX29iai0+YmFzZSwgc2l6ZSk7CisJaWYgKHJldCA8
IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBnZW0gb2JqZWN0XG4iKTsK
KwkJa2ZyZWUobXRrX2dlbV9vYmopOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJl
dHVybiBtdGtfZ2VtX29iajsKK30KKworc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9n
ZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcg
c2l6ZSwgYm9vbCBhbGxvY19rbWFwKQoreworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19n
ZW07CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldDsKKworCW10a19nZW0g
PSBtdGtfZHJtX2dlbV9pbml0KGRldiwgc2l6ZSk7CisJaWYgKElTX0VSUihtdGtfZ2VtKSkKKwkJ
cmV0dXJuIEVSUl9DQVNUKG10a19nZW0pOworCisJb2JqID0gJm10a19nZW0tPmJhc2U7CisKKwlp
bml0X2RtYV9hdHRycygmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKwlkbWFfc2V0X2F0dHIoRE1BX0FU
VFJfV1JJVEVfQ09NQklORSwgJm10a19nZW0tPmRtYV9hdHRycyk7CisKKwlpZiAoIWFsbG9jX2tt
YXApCisJCWRtYV9zZXRfYXR0cihETUFfQVRUUl9OT19LRVJORUxfTUFQUElORywgJm10a19nZW0t
PmRtYV9hdHRycyk7CisKKwltdGtfZ2VtLT5jb29raWUgPSBkbWFfYWxsb2NfYXR0cnMoZGV2LT5k
ZXYsIG9iai0+c2l6ZSwKKwkJCQkoZG1hX2FkZHJfdCAqKSZtdGtfZ2VtLT5kbWFfYWRkciwgR0ZQ
X0tFUk5FTCwKKwkJCQkmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKwlpZiAoIW10a19nZW0tPmNvb2tp
ZSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSAlenggYnl0ZSBkbWEgYnVmZmVy
Iiwgb2JqLT5zaXplKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZ2VtX2ZyZWU7CisJ
fQorCisJaWYgKGFsbG9jX2ttYXApCisJCW10a19nZW0tPmt2YWRkciA9IG10a19nZW0tPmNvb2tp
ZTsKKworCURSTV9ERUJVR19EUklWRVIoImNvb2tpZSA9ICVwIGRtYV9hZGRyID0gJWxseFxuIiwK
KwkJCSBtdGtfZ2VtLT5jb29raWUsIG10a19nZW0tPmRtYV9hZGRyKTsKKworCXJldHVybiBtdGtf
Z2VtOworCitlcnJfZ2VtX2ZyZWU6CisJZHJtX2dlbV9vYmplY3RfcmVsZWFzZShvYmopOworCWtm
cmVlKG10a19nZW0pOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3ZvaWQgbXRrX2RybV9n
ZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG10
a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7CisKKwlkbWFfZnJl
ZV9hdHRycyhvYmotPmRldi0+ZGV2LCBvYmotPnNpemUsIG10a19nZW0tPmNvb2tpZSwKKwkJICAg
ICAgIG10a19nZW0tPmRtYV9hZGRyLCAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKworCS8qIHJlbGVh
c2UgZmlsZSBwb2ludGVyIHRvIGdlbSBvYmplY3QuICovCisJZHJtX2dlbV9vYmplY3RfcmVsZWFz
ZShvYmopOworCisJa2ZyZWUobXRrX2dlbSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9kdW1iX2Ny
ZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwK
KwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCit7CisJc3RydWN0IG10
a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlpbnQgcmV0OworCisJYXJncy0+cGl0Y2ggPSBhcmdz
LT53aWR0aCAqIERJVl9ST1VORF9VUChhcmdzLT5icHAsIDgpOworCWFyZ3MtPnNpemUgPSBhcmdz
LT5waXRjaCAqIGFyZ3MtPmhlaWdodDsKKworCW10a19nZW0gPSBtdGtfZHJtX2dlbV9jcmVhdGUo
ZGV2LCBhcmdzLT5zaXplLCBmYWxzZSk7CisJaWYgKElTX0VSUihtdGtfZ2VtKSkKKwkJcmV0dXJu
IFBUUl9FUlIobXRrX2dlbSk7CisKKwkvKgorCSAqIGFsbG9jYXRlIGEgaWQgb2YgaWRyIHRhYmxl
IHdoZXJlIHRoZSBvYmogaXMgcmVnaXN0ZXJlZAorCSAqIGFuZCBoYW5kbGUgaGFzIHRoZSBpZCB3
aGF0IHVzZXIgY2FuIHNlZS4KKwkgKi8KKwlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmls
ZV9wcml2LCAmbXRrX2dlbS0+YmFzZSwgJmFyZ3MtPmhhbmRsZSk7CisJaWYgKHJldCkKKwkJZ290
byBlcnJfaGFuZGxlX2NyZWF0ZTsKKworCS8qIGRyb3AgcmVmZXJlbmNlIGZyb20gYWxsb2NhdGUg
LSBoYW5kbGUgaG9sZHMgaXQgbm93LiAqLworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3Vu
bG9ja2VkKCZtdGtfZ2VtLT5iYXNlKTsKKworCXJldHVybiAwOworCitlcnJfaGFuZGxlX2NyZWF0
ZToKKwltdGtfZHJtX2dlbV9mcmVlX29iamVjdCgmbXRrX2dlbS0+YmFzZSk7CisJcmV0dXJuIHJl
dDsKK30KKworaW50IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUg
KmZpbGVfcHJpdiwKKwkJCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBoYW5kbGUs
CisJCQkJdWludDY0X3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsK
KwlpbnQgcmV0OworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2
LCBoYW5kbGUpOworCWlmICghb2JqKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGxvb2t1cCBn
ZW0gb2JqZWN0LlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGRybV9nZW1f
Y3JlYXRlX21tYXBfb2Zmc2V0KG9iaik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkqb2Zm
c2V0ID0gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZvYmotPnZtYV9ub2RlKTsKKwlEUk1fREVC
VUdfS01TKCJvZmZzZXQgPSAweCVsbHhcbiIsICpvZmZzZXQpOworCitvdXQ6CisJZHJtX2dlbV9v
YmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0
aWMgaW50IG10a19kcm1fZ2VtX29iamVjdF9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq
LAorCQkJCSAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorCit7CisJaW50IHJldDsKKwlz
dHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2JqKTsKKwlz
dHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gb2JqLT5kZXY7CisKKwkvKgorCSAqIGRtYV9hbGxvY19h
dHRycygpIGFsbG9jYXRlZCBhIHN0cnVjdCBwYWdlIHRhYmxlIGZvciBya19vYmosIHNvIGNsZWFy
CisJICogVk1fUEZOTUFQIGZsYWcgdGhhdCB3YXMgc2V0IGJ5IGRybV9nZW1fbW1hcF9vYmooKS9k
cm1fZ2VtX21tYXAoKS4KKwkgKi8KKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7CisJdm1h
LT52bV9wZ29mZiA9IDA7CisKKwlyZXQgPSBkbWFfbW1hcF9hdHRycyhkcm0tPmRldiwgdm1hLCBt
dGtfZ2VtLT5jb29raWUsIG10a19nZW0tPmRtYV9hZGRyLAorCQkJICAgICBvYmotPnNpemUsICZt
dGtfZ2VtLT5kbWFfYXR0cnMpOworCWlmIChyZXQpCisJCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsK
KworCXJldHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3QgZHJt
X2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJl
dDsKKworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJaWYg
KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBtdGtfZHJtX2dlbV9vYmplY3RfbW1hcChv
YmosIHZtYSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBz
dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i
ajsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYgKHJl
dCkKKwkJcmV0dXJuIHJldDsKKworCW9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJcmV0
dXJuIG10a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwgdm1hKTsKK30KKworLyoKKyAqIEFsbG9j
YXRlIGEgc2dfdGFibGUgZm9yIHRoaXMgR0VNIG9iamVjdC4KKyAqIE5vdGU6IEJvdGggdGhlIHRh
YmxlJ3MgY29udGVudHMsIGFuZCB0aGUgc2dfdGFibGUgaXRzZWxmIG11c3QgYmUgZnJlZWQgYnkK
KyAqICAgICAgIHRoZSBjYWxsZXIuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3bHkg
YWxsb2NhdGVkIHNnX3RhYmxlLCBvciBhbiBFUlJfUFRSKCkgZXJyb3IuCisgKi8KK3N0cnVjdCBz
Z190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0
ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1f
b2JqKG9iaik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IG9iai0+ZGV2OworCXN0cnVjdCBz
Z190YWJsZSAqc2d0OworCWludCByZXQ7CisKKwlzZ3QgPSBremFsbG9jKHNpemVvZigqc2d0KSwg
R0ZQX0tFUk5FTCk7CisJaWYgKCFzZ3QpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJ
cmV0ID0gZG1hX2dldF9zZ3RhYmxlX2F0dHJzKGRybS0+ZGV2LCBzZ3QsIG10a19nZW0tPmNvb2tp
ZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9iai0+c2l6ZSwKKwkJCQkgICAgJm10a19n
ZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxv
Y2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJlZShzZ3QpOworCQlyZXR1cm4gRVJSX1BUUihy
ZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2dlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZGVlYjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uaApAQCAt
MCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAq
CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lm
bmRlZiBfTVRLX0RSTV9HRU1fSF8KKyNkZWZpbmUgX01US19EUk1fR0VNX0hfCisKKyNpbmNsdWRl
IDxkcm0vZHJtX2dlbS5oPgorCisvKgorICogbXRrIGRybSBidWZmZXIgc3RydWN0dXJlLgorICoK
KyAqIEBiYXNlOiBhIGdlbSBvYmplY3QuCisgKgktIGEgbmV3IGhhbmRsZSB0byB0aGlzIGdlbSBv
YmplY3Qgd291bGQgYmUgY3JlYXRlZAorICoJYnkgZHJtX2dlbV9oYW5kbGVfY3JlYXRlKCkuCisg
KiBAY29va2llOiB0aGUgcmV0dXJuIHZhbHVlIG9mIGRtYV9hbGxvY19hdHRycygpLCBrZWVwIGl0
IGZvciBkbWFfZnJlZV9hdHRycygpCisgKiBAa3ZhZGRyOiBrZXJuZWwgdmlydHVhbCBhZGRyZXNz
IG9mIGdlbSBidWZmZXIuCisgKiBAZG1hX2FkZHI6IGRtYSBhZGRyZXNzIG9mIGdlbSBidWZmZXIu
CisgKiBAZG1hX2F0dHJzOiBkbWEgYXR0cmlidXRlcyBvZiBnZW0gYnVmZmVyLgorICoKKyAqIFAu
Uy4gdGhpcyBvYmplY3Qgd291bGQgYmUgdHJhbnNmZXJyZWQgdG8gdXNlciBhcyBrbXNfYm8uaGFu
ZGxlIHNvCisgKgl1c2VyIGNhbiBhY2Nlc3MgdGhlIGJ1ZmZlciB0aHJvdWdoIGttc19iby5oYW5k
bGUuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogeworCXN0cnVjdCBkcm1fZ2VtX29iamVj
dAliYXNlOworCXZvaWQJCQkqY29va2llOworCXZvaWQJCQkqa3ZhZGRyOworCWRtYV9hZGRyX3QJ
CWRtYV9hZGRyOworCXN0cnVjdCBkbWFfYXR0cnMJZG1hX2F0dHJzOworfTsKKworI2RlZmluZSB0
b19tdGtfZ2VtX29iaih4KQljb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1fZ2VtX29iaiwg
YmFzZSkKKwordm9pZCBtdGtfZHJtX2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmpl
Y3QgKmdlbSk7CitzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJtX2dlbV9jcmVhdGUoc3Ry
dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJdW5zaWduZWQgbG9uZyBzaXplLCBib29sIGFsbG9jX2tt
YXApOworaW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w
cml2LAorCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1
bWIgKmFyZ3MpOworaW50IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2Zp
bGUgKmZpbGVfcHJpdiwKKwkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgaGFuZGxl
LCB1aW50NjRfdCAqb2Zmc2V0KTsKK2ludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpm
aWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitpbnQgbXRrX2RybV9nZW1fbW1hcF9i
dWYoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq
dm1hKTsKK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0
IGRybV9nZW1fb2JqZWN0ICpvYmopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9wbGFuZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjYy
ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9w
bGFuZS5jCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlh
VGVrIEluYy4KKyAqIEF1dGhvcjogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUg
PGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0v
ZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgor
I2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5o
PgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29t
cC5oIgorI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAibXRrX2RybV9mYi5oIgor
I2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCitz
dGF0aWMgY29uc3QgdWludDMyX3QgZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfWFJHQjg4ODgs
CisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKK307CisKK3N0YXRp
YyB2b2lkIG10a19wbGFuZV9jb25maWcoc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwg
Ym9vbCBlbmFibGUsCisJCQkgICAgIGRtYV9hZGRyX3QgYWRkciwgc3RydWN0IGRybV9yZWN0ICpk
ZXN0KQoreworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19wbGFuZS0+YmFzZTsKKwlz
dHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+
c3RhdGUpOworCXVuc2lnbmVkIGludCBwaXRjaCwgZm9ybWF0OworCWludCB4LCB5OworCisJaWYg
KFdBUk5fT04oIXBsYW5lLT5zdGF0ZSB8fCAoZW5hYmxlICYmICFwbGFuZS0+c3RhdGUtPmZiKSkp
CisJCXJldHVybjsKKworCWlmIChwbGFuZS0+c3RhdGUtPmZiKSB7CisJCXBpdGNoID0gcGxhbmUt
PnN0YXRlLT5mYi0+cGl0Y2hlc1swXTsKKwkJZm9ybWF0ID0gcGxhbmUtPnN0YXRlLT5mYi0+cGl4
ZWxfZm9ybWF0OworCX0gZWxzZSB7CisJCXBpdGNoID0gMDsKKwkJZm9ybWF0ID0gRFJNX0ZPUk1B
VF9SR0JBODg4ODsKKwl9CisKKwl4ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3g7CisJeSA9IHBsYW5l
LT5zdGF0ZS0+Y3J0Y195OworCisJaWYgKHggPCAwKSB7CisJCWFkZHIgLT0geCAqIDQ7CisJCXgg
PSAwOworCX0KKworCWlmICh5IDwgMCkgeworCQlhZGRyIC09IHkgKiBwaXRjaDsKKwkJeSA9IDA7
CisJfQorCisJc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZW5hYmxlOworCXN0YXRlLT5wZW5kaW5n
LnBpdGNoID0gcGl0Y2g7CisJc3RhdGUtPnBlbmRpbmcuZm9ybWF0ID0gZm9ybWF0OworCXN0YXRl
LT5wZW5kaW5nLmFkZHIgPSBhZGRyOworCXN0YXRlLT5wZW5kaW5nLnggPSB4OworCXN0YXRlLT5w
ZW5kaW5nLnkgPSB5OworCXN0YXRlLT5wZW5kaW5nLndpZHRoID0gZGVzdC0+eDIgLSBkZXN0LT54
MTsKKwlzdGF0ZS0+cGVuZGluZy5oZWlnaHQgPSBkZXN0LT55MiAtIGRlc3QtPnkxOworCXN0YXRl
LT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX3BsYW5lX3Jlc2V0
KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0
YXRlOworCisJaWYgKHBsYW5lLT5zdGF0ZSAmJiBwbGFuZS0+c3RhdGUtPmZiKQorCQlkcm1fZnJh
bWVidWZmZXJfdW5yZWZlcmVuY2UocGxhbmUtPnN0YXRlLT5mYik7CisKKwlrZnJlZShwbGFuZS0+
c3RhdGUpOworCXN0YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJ
cGxhbmUtPnN0YXRlID0gJnN0YXRlLT5iYXNlOworCWlmICghc3RhdGUpCisJCXJldHVybjsKKwor
CXBsYW5lLT5zdGF0ZS0+cGxhbmUgPSBwbGFuZTsKKwlzdGF0ZS0+cGVuZGluZy5mb3JtYXQgPSBE
Uk1fRk9STUFUX1JHQjU2NTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm10
a19wbGFuZV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3Ry
dWN0IG10a19wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5l
LT5zdGF0ZSk7CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGt6
YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVy
biBOVUxMOworCisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxh
bmUsICZzdGF0ZS0+YmFzZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLnBsYW5lICE9IHBsYW5l
KTsKKworCXN0YXRlLT5wZW5kaW5nID0gb2xkX3N0YXRlLT5wZW5kaW5nOworCisJcmV0dXJuICZz
dGF0ZS0+YmFzZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgbXRr
X3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRh
dGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3Bs
YW5lLAorCS5kZXN0cm95ID0gZHJtX3BsYW5lX2NsZWFudXAsCisJLnJlc2V0ID0gbXRrX3BsYW5l
X3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gbXRrX3BsYW5lX2R1cGxpY2F0ZV9z
dGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9k
ZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGludCBtdGtfcGxhbmVfYXRvbWljX2NoZWNrKHN0
cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3Rh
dGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJc3RydWN0
IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCWJvb2wgdmlzaWJsZTsKKwlpbnQgcmV0Owor
CXN0cnVjdCBkcm1fcmVjdCBkZXN0ID0geworCQkueDEgPSBzdGF0ZS0+Y3J0Y194LAorCQkueTEg
PSBzdGF0ZS0+Y3J0Y195LAorCQkueDIgPSBzdGF0ZS0+Y3J0Y194ICsgc3RhdGUtPmNydGNfdywK
KwkJLnkyID0gc3RhdGUtPmNydGNfeSArIHN0YXRlLT5jcnRjX2gsCisJfTsKKwlzdHJ1Y3QgZHJt
X3JlY3Qgc3JjID0geworCQkvKiAxNi4xNiBmaXhlZCBwb2ludCAqLworCQkueDEgPSBzdGF0ZS0+
c3JjX3gsCisJCS55MSA9IHN0YXRlLT5zcmNfeSwKKwkJLngyID0gc3RhdGUtPnNyY194ICsgc3Rh
dGUtPnNyY193LAorCQkueTIgPSBzdGF0ZS0+c3JjX3kgKyBzdGF0ZS0+c3JjX2gsCisJfTsKKwlz
dHJ1Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwgfTsKKworCWlmICghZmIpCisJCXJldHVybiAwOwor
CisJaWYgKCFtdGtfZmJfZ2V0X2dlbV9vYmooZmIpKSB7CisJCURSTV9ERUJVR19LTVMoImJ1ZmZl
ciBpcyBudWxsXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKCFzdGF0ZS0+Y3J0
YykKKwkJcmV0dXJuIDA7CisKKwljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0
ZShzdGF0ZS0+c3RhdGUsIHN0YXRlLT5jcnRjKTsKKwlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQor
CQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKKworCWNsaXAueDIgPSBjcnRjX3N0YXRlLT5t
b2RlLmhkaXNwbGF5OworCWNsaXAueTIgPSBjcnRjX3N0YXRlLT5tb2RlLnZkaXNwbGF5OworCisJ
cmV0ID0gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIHN0YXRlLT5jcnRjLCBm
YiwKKwkJCQkJICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJCQkJICAgIERSTV9QTEFORV9IRUxQ
RVJfTk9fU0NBTElORywKKwkJCQkJICAgIERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKKwkJ
CQkJICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9hdG9taWNfdXBkYXRlKHN0
cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpv
bGRfc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUgPSB0b19tdGtfcGxh
bmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+
YmFzZS5jcnRjOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOworCXN0cnVjdCBtdGtfZHJt
X3BsYW5lICptdGtfcGxhbmUgPSB0b19tdGtfcGxhbmUocGxhbmUpOworCXN0cnVjdCBkcm1fcmVj
dCBkZXN0ID0geworCQkueDEgPSBzdGF0ZS0+YmFzZS5jcnRjX3gsCisJCS55MSA9IHN0YXRlLT5i
YXNlLmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmJhc2UuY3J0Y194ICsgc3RhdGUtPmJhc2UuY3J0
Y193LAorCQkueTIgPSBzdGF0ZS0+YmFzZS5jcnRjX3kgKyBzdGF0ZS0+YmFzZS5jcnRjX2gsCisJ
fTsKKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwgfTsKKworCWlmICghY3J0YykKKwkJcmV0
dXJuOworCisJY2xpcC54MiA9IHN0YXRlLT5iYXNlLmNydGMtPnN0YXRlLT5tb2RlLmhkaXNwbGF5
OworCWNsaXAueTIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+bW9kZS52ZGlzcGxheTsKKwlk
cm1fcmVjdF9pbnRlcnNlY3QoJmRlc3QsICZjbGlwKTsKKworCWdlbSA9IG10a19mYl9nZXRfZ2Vt
X29iaihzdGF0ZS0+YmFzZS5mYik7CisJaWYgKGdlbSkKKwkJbXRrX3BsYW5lX2NvbmZpZyhtdGtf
cGxhbmUsIHRydWUsIHRvX210a19nZW1fb2JqKGdlbSktPmRtYV9hZGRyLAorCQkJCSAmZGVzdCk7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3Bs
YW5lICpwbGFuZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkK
K3sKKwlzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5l
KTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBvbGRfc3RhdGUtPmNydGM7CisJc3RydWN0IGRy
bV9yZWN0IGRlc3QgPSB7IDAsIH07CisKKwlpZiAoIWNydGMpCisJCXJldHVybjsKKworCW10a19w
bGFuZV9jb25maWcobXRrX3BsYW5lLCBmYWxzZSwgMCwgJmRlc3QpOworfQorCitzdGF0aWMgY29u
c3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgbXRrX3BsYW5lX2hlbHBlcl9mdW5jcyA9
IHsKKwkuYXRvbWljX2NoZWNrID0gbXRrX3BsYW5lX2F0b21pY19jaGVjaywKKwkuYXRvbWljX3Vw
ZGF0ZSA9IG10a19wbGFuZV9hdG9taWNfdXBkYXRlLAorCS5hdG9taWNfZGlzYWJsZSA9IG10a19w
bGFuZV9hdG9taWNfZGlzYWJsZSwKK307CisKK2ludCBtdGtfcGxhbmVfaW5pdChzdHJ1Y3QgZHJt
X2RldmljZSAqZGV2LCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lLAorCQkgICB1bnNp
Z25lZCBsb25nIHBvc3NpYmxlX2NydGNzLCBlbnVtIGRybV9wbGFuZV90eXBlIHR5cGUsCisJCSAg
IHVuc2lnbmVkIGludCB6cG9zKQoreworCWludCBlcnI7CisKKwllcnIgPSBkcm1fdW5pdmVyc2Fs
X3BsYW5lX2luaXQoZGV2LCAmbXRrX3BsYW5lLT5iYXNlLCBwb3NzaWJsZV9jcnRjcywKKwkJCSZt
dGtfcGxhbmVfZnVuY3MsIGZvcm1hdHMsIEFSUkFZX1NJWkUoZm9ybWF0cyksIHR5cGUpOworCisJ
aWYgKGVycikgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIHBsYW5lXG4iKTsK
KwkJcmV0dXJuIGVycjsKKwl9CisKKwlkcm1fcGxhbmVfaGVscGVyX2FkZCgmbXRrX3BsYW5lLT5i
YXNlLCAmbXRrX3BsYW5lX2hlbHBlcl9mdW5jcyk7CisJbXRrX3BsYW5lLT5pZHggPSB6cG9zOwor
CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTU3YWI3Ci0tLSAvZGV2L251bGwK
KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaApAQCAtMCwwICsx
LDU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhv
cjogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u
IDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK
KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfTVRLX0RSTV9QTEFORV9IXwor
I2RlZmluZSBfTVRLX0RSTV9QTEFORV9IXworCisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisK
K3N0cnVjdCBtdGtfZHJtX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOworCXVuc2ln
bmVkIGludAkJCWlkeDsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSB7CisJ
Ym9vbAkJCQljb25maWc7CisJYm9vbAkJCQllbmFibGU7CisJdW5zaWduZWQgaW50CQkJYWRkcjsK
Kwl1bnNpZ25lZCBpbnQJCQlwaXRjaDsKKwl1bnNpZ25lZCBpbnQJCQlmb3JtYXQ7CisJdW5zaWdu
ZWQgaW50CQkJeDsKKwl1bnNpZ25lZCBpbnQJCQl5OworCXVuc2lnbmVkIGludAkJCXdpZHRoOwor
CXVuc2lnbmVkIGludAkJCWhlaWdodDsKKwlib29sCQkJCWRpcnR5OworfTsKKworc3RydWN0IG10
a19wbGFuZV9zdGF0ZSB7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZQkJYmFzZTsKKwlzdHJ1Y3Qg
bXRrX3BsYW5lX3BlbmRpbmdfc3RhdGUJcGVuZGluZzsKK307CisKK3N0YXRpYyBpbmxpbmUgc3Ry
dWN0IG10a19kcm1fcGxhbmUgKnRvX210a19wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkK
K3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBsYW5lLCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSwgYmFz
ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqCit0b19tdGtf
cGxhbmVfc3RhdGUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJcmV0dXJuIGNv
bnRhaW5lcl9vZihzdGF0ZSwgc3RydWN0IG10a19wbGFuZV9zdGF0ZSwgYmFzZSk7Cit9CisKK2lu
dCBtdGtfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgbXRrX2RybV9w
bGFuZSAqbXRrX3BsYW5lLAorCQkgICB1bnNpZ25lZCBsb25nIHBvc3NpYmxlX2NydGNzLCBlbnVt
IGRybV9wbGFuZV90eXBlIHR5cGUsCisJCSAgIHVuc2lnbmVkIGludCB6cG9zKTsKKworI2VuZGlm
Ci0tIAoyLjYuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn
Cmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK