From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v8 03/13] drm/mediatek: Add DSI sub driver
Date: Mon, 4 Jan 2016 18:36:35 +0100
Message-ID: <1451929005-16372-4-git-send-email-p.zabel@pengutronix.de>
References: <1451929005-16372-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: <1451929005-16372-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 , Michael Turquette , Jie Qiu , Cawa Cheng , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Stephen Boyd , Tomasz Figa , Kumar Gala
List-Id: devicetree@vger.kernel.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkIGEgZHJtIGVu
Y29kZXIvY29ubmVjdG9yIGRyaXZlciBmb3IgdGhlIE1JUEkgRFNJIGZ1bmN0aW9uCmJsb2NrIG9m
IHRoZSBNZWRpYXRlayBkaXNwbGF5IHN1YnN5c3RlbSBhbmQgYSBwaHkgZHJpdmVyIGZvciB0aGUg
TUlQSSBUWApELVBIWSBjb250cm9sIG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8
aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56
YWJlbEBwZW5ndXRyb25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2Ugdjc6CiAtIFNlbGVjdCB0aGUg
UEFORUwgYW5kIE1JUElfRFNJIGNvbmZpZyBvcHRpb25zCiAtIFNlcGFyYXRlIGVuYWJsaW5nIE1J
UEkgVFggcGh5IG91dHB1dCBmcm9tIGVuYWJsaW5nIHRoZSBQTEwKIC0gTWFrZSB0aGUgUExMIGNv
bnRyb2xsYWJsZSB2aWEgdGhlIGNvbW1vbiBjbG9jayBmcmFtZXdvcmsgdmlhCiAgIHRoZSBELVBI
WSdzIGhpZ2gtc3BlZWQgY2xvY2sgb3V0cHV0IHRvIHRoZSBEU0kgZW5jb2RlcgotLS0KIGRyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9NYWtlZmlsZSAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9kcnYuYyB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9kcnYuaCB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jICAgICB8
IDg0NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHNpLmggICAgIHwgIDU4ICsrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19taXBpX3R4LmMgfCA0ODcgKysrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2Vk
LCAxNDAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbWlwaV90eC5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZp
ZwppbmRleCA4ZGFkODkyLi5iN2UwNDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpAQCAt
Myw2ICszLDkgQEAgY29uZmlnIERSTV9NRURJQVRFSwogCWRlcGVuZHMgb24gRFJNCiAJZGVwZW5k
cyBvbiBBUkNIX01FRElBVEVLIHx8IChBUk0gJiYgQ09NUElMRV9URVNUKQogCXNlbGVjdCBEUk1f
S01TX0hFTFBFUgorCXNlbGVjdCBEUk1fTUlQSV9EU0kKKwlzZWxlY3QgRFJNX1BBTkVMCisJc2Vs
ZWN0IERSTV9QQU5FTF9TSU1QTEUKIAlzZWxlY3QgSU9NTVVfRE1BCiAJc2VsZWN0IE1US19TTUkK
IAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKaW5kZXggYzdjYzQxYS4uZTFhNDBmNCAx
MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCisrKyBiL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpAQCAtNSw2ICs1LDggQEAgbWVkaWF0ZWstZHJt
LXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAogCQkgIG10a19kcm1fZHJ2Lm8gXAogCQkgIG10a19kcm1f
ZmIubyBcCiAJCSAgbXRrX2RybV9nZW0ubyBcCi0JCSAgbXRrX2RybV9wbGFuZS5vCisJCSAgbXRr
X2RybV9wbGFuZS5vIFwKKwkJICBtdGtfZHNpLm8gXAorCQkgIG10a19taXBpX3R4Lm8KIAogb2Jq
LSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0ZWstZHJtLm8KZGlmZiAtLWdpdCBhL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kcm1fZHJ2LmMKaW5kZXggOWRiMjJiNC4uMzkyNjdmOSAxMDA2NDQKLS0tIGEv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKQEAgLTUzNiw2ICs1MzYsOCBAQCBzdGF0aWMgc3Ry
dWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciA9IHsKIHN0YXRpYyBz
dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICogY29uc3QgbXRrX2RybV9kcml2ZXJzW10gPSB7CiAJJm10
a19kcm1fcGxhdGZvcm1fZHJpdmVyLAogCSZtdGtfZGlzcF9vdmxfZHJpdmVyLAorCSZtdGtfZHNp
X2RyaXZlciwKKwkmbXRrX21pcGlfdHhfZHJpdmVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQg
bXRrX2RybV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCmlu
ZGV4IDc1ZTFiN2QuLmU4NmMxOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ry
di5oCkBAIC00OCw1ICs0OCw3IEBAIHN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgewogfTsKIAogZXh0
ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlcjsKK2V4dGVybiBz
dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kc2lfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0
Zm9ybV9kcml2ZXIgbXRrX21pcGlfdHhfZHJpdmVyOwogCiAjZW5kaWYgLyogTVRLX0RSTV9EUlZf
SCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuYyBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNmFiNWEzMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHNpLmMKQEAgLTAsMCArMSw4NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0v
ZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cisj
aW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4K
KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNp
bmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5j
bHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisjaW5j
bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2Rl
Lmg+CisKKyNpbmNsdWRlICJtdGtfZHNpLmgiCisKKyNkZWZpbmUgRFNJX1ZJREVPX0ZJRk9fREVQ
VEgJKDE5MjAgLyA0KQorI2RlZmluZSBEU0lfSE9TVF9GSUZPX0RFUFRICTY0CisKKyNkZWZpbmUg
RFNJX1NUQVJUCQkweDAwCisKKyNkZWZpbmUgRFNJX0NPTl9DVFJMCQkweDEwCisjZGVmaW5lIERT
SV9SRVNFVAkJCUJJVCgwKQorI2RlZmluZSBEU0lfRU4JCQkJQklUKDEpCisKKyNkZWZpbmUgRFNJ
X01PREVfQ1RSTAkJMHgxNAorI2RlZmluZSBNT0RFCQkJCSgzKQorI2RlZmluZSBDTURfTU9ERQkJ
CTAKKyNkZWZpbmUgU1lOQ19QVUxTRV9NT0RFCQkJMQorI2RlZmluZSBTWU5DX0VWRU5UX01PREUJ
CQkyCisjZGVmaW5lIEJVUlNUX01PREUJCQkzCisjZGVmaW5lIEZSTV9NT0RFCQkJQklUKDE2KQor
I2RlZmluZSBNSVhfTU9ERQkJCUJJVCgxNykKKworI2RlZmluZSBEU0lfVFhSWF9DVFJMCQkweDE4
CisjZGVmaW5lIFZDX05VTQkJCQkoMiA8PCAwKQorI2RlZmluZSBMQU5FX05VTQkJCSgweGYgPDwg
MikKKyNkZWZpbmUgRElTX0VPVAkJCQlCSVQoNikKKyNkZWZpbmUgTlVMTF9FTgkJCQlCSVQoNykK
KyNkZWZpbmUgVEVfRlJFRVJVTgkJCUJJVCg4KQorI2RlZmluZSBFWFRfVEVfRU4JCQlCSVQoOSkK
KyNkZWZpbmUgRVhUX1RFX0VER0UJCQlCSVQoMTApCisjZGVmaW5lIE1BWF9SVE5fU0laRQkJCSgw
eGYgPDwgMTIpCisjZGVmaW5lIEhTVFhfQ0tMUF9FTgkJCUJJVCgxNikKKworI2RlZmluZSBEU0lf
UFNDVFJMCQkweDFjCisjZGVmaW5lIERTSV9QU19XQwkJCTB4M2ZmZgorI2RlZmluZSBEU0lfUFNf
U0VMCQkJKDMgPDwgMTYpCisjZGVmaW5lIFBBQ0tFRF9QU18xNkJJVF9SR0I1NjUJCSgwIDw8IDE2
KQorI2RlZmluZSBMT09TRUxZX1BTXzE4QklUX1JHQjY2NgkJKDEgPDwgMTYpCisjZGVmaW5lIFBB
Q0tFRF9QU18xOEJJVF9SR0I2NjYJCSgyIDw8IDE2KQorI2RlZmluZSBQQUNLRURfUFNfMjRCSVRf
UkdCODg4CQkoMyA8PCAxNikKKworI2RlZmluZSBEU0lfVlNBX05MCQkweDIwCisjZGVmaW5lIERT
SV9WQlBfTkwJCTB4MjQKKyNkZWZpbmUgRFNJX1ZGUF9OTAkJMHgyOAorI2RlZmluZSBEU0lfVkFD
VF9OTAkJMHgyQworI2RlZmluZSBEU0lfSFNBX1dDCQkweDUwCisjZGVmaW5lIERTSV9IQlBfV0MJ
CTB4NTQKKyNkZWZpbmUgRFNJX0hGUF9XQwkJMHg1OAorCisjZGVmaW5lIERTSV9IU1RYX0NLTF9X
QwkJMHg2NAorCisjZGVmaW5lIERTSV9QSFlfTENDT04JCTB4MTA0CisjZGVmaW5lIExDX0hTX1RY
X0VOCQkJQklUKDApCisjZGVmaW5lIExDX1VMUE1fRU4JCQlCSVQoMSkKKyNkZWZpbmUgTENfV0FL
RVVQX0VOCQkJQklUKDIpCisKKyNkZWZpbmUgRFNJX1BIWV9MRDBDT04JCTB4MTA4CisjZGVmaW5l
IExEMF9IU19UWF9FTgkJCUJJVCgwKQorI2RlZmluZSBMRDBfVUxQTV9FTgkJCUJJVCgxKQorI2Rl
ZmluZSBMRDBfV0FLRVVQX0VOCQkJQklUKDIpCisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMAkw
eDExMAorI2RlZmluZSBMUFgJCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgSFNfUFJQUgkJCQkoMHhm
ZiA8PCA4KQorI2RlZmluZSBIU19aRVJPCQkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBIU19UUkFJ
TAkJCSgweGZmIDw8IDI0KQorCisjZGVmaW5lIERTSV9QSFlfVElNRUNPTjEJMHgxMTQKKyNkZWZp
bmUgVEFfR08JCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgVEFfU1VSRQkJCQkoMHhmZiA8PCA4KQor
I2RlZmluZSBUQV9HRVQJCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIERBX0hTX0VYSVQJCQkoMHhm
ZiA8PCAyNCkKKworI2RlZmluZSBEU0lfUEhZX1RJTUVDT04yCTB4MTE4CisjZGVmaW5lIENPTlRf
REVUCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgQ0xLX1pFUk8JCQkoMHhmZiA8PCAxNikKKyNkZWZp
bmUgQ0xLX1RSQUlMCQkJKDB4ZmYgPDwgMjQpCisKKyNkZWZpbmUgRFNJX1BIWV9USU1FQ09OMwkw
eDExYworI2RlZmluZSBDTEtfSFNfUFJQUgkJCSgweGZmIDw8IDApCisjZGVmaW5lIENMS19IU19Q
T1NUCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgQ0xLX0hTX0VYSVQJCQkoMHhmZiA8PCAxNikKKwor
I2RlZmluZSBOU19UT19DWUNMRShuLCBjKSAgICAoKG4pIC8gYyArICgoKG4pICUgYykgPyAxIDog
MCkpCisKK3N0YXRpYyB2b2lkIG10a19kc2lfbWFzayhzdHJ1Y3QgbXRrX2RzaSAqZHNpLCB1MzIg
b2Zmc2V0LCB1MzIgbWFzaywgdTMyIGRhdGEpCit7CisJdTMyIHRlbXAgPSByZWFkbChkc2ktPnJl
Z3MgKyBvZmZzZXQpOworCisJd3JpdGVsKCh0ZW1wICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKSwg
ZHNpLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZHNpX3BoeV90aW1jb25maWco
c3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdGltY29uMCwgdGltY29uMSwgdGltY29uMiwg
dGltY29uMzsKKwl1bnNpZ25lZCBpbnQgdWksIGN5Y2xlX3RpbWU7CisJdW5zaWduZWQgaW50IGxw
eDsKKworCXVpID0gMTAwMCAvIGRzaS0+ZGF0YV9yYXRlICsgMHgwMTsKKwljeWNsZV90aW1lID0g
ODAwMCAvIGRzaS0+ZGF0YV9yYXRlICsgMHgwMTsKKwlscHggPSA1OworCisJdGltY29uMCA9ICg4
IDw8IDI0KSB8ICgweGEgPDwgMTYpIHwgKDB4NiA8PCA4KSB8IGxweDsKKwl0aW1jb24xID0gKDcg
PDwgMjQpIHwgKDUgKiBscHggPDwgMTYpIHwgKCgzICogbHB4KSAvIDIpIDw8IDggfAorCQkgICg0
ICogbHB4KTsKKwl0aW1jb24yID0gKChOU19UT19DWUNMRSgweDY0LCBjeWNsZV90aW1lKSArIDB4
YSkgPDwgMjQpIHwKKwkJICAoTlNfVE9fQ1lDTEUoMHgxNTAsIGN5Y2xlX3RpbWUpIDw8IDE2KTsK
Kwl0aW1jb24zID0gKDIgKiBscHgpIDw8IDE2IHwgTlNfVE9fQ1lDTEUoODAgKyA1MiAqIHVpLCBj
eWNsZV90aW1lKSA8PCA4IHwKKwkJICAgTlNfVE9fQ1lDTEUoMHg0MCwgY3ljbGVfdGltZSk7CisK
Kwl3cml0ZWwodGltY29uMCwgZHNpLT5yZWdzICsgRFNJX1BIWV9USU1FQ09OMCk7CisJd3JpdGVs
KHRpbWNvbjEsIGRzaS0+cmVncyArIERTSV9QSFlfVElNRUNPTjEpOworCXdyaXRlbCh0aW1jb24y
LCBkc2ktPnJlZ3MgKyBEU0lfUEhZX1RJTUVDT04yKTsKKwl3cml0ZWwodGltY29uMywgZHNpLT5y
ZWdzICsgRFNJX1BIWV9USU1FQ09OMyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZW5hYmxl
KHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX0NPTl9DVFJM
LCBEU0lfRU4sIERTSV9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfZGlzYWJsZShzdHJ1
Y3QgbXRrX2RzaSAqZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJ
X0VOLCAwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9yZXNldChzdHJ1Y3QgbXRrX2RzaSAq
ZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCBEU0lf
UkVTRVQpOworCW10a19kc2lfbWFzayhkc2ksIERTSV9DT05fQ1RSTCwgRFNJX1JFU0VULCAwKTsK
K30KKworc3RhdGljIGludCBtdGtfZHNpX3Bvd2Vyb24oc3RydWN0IG10a19kc2kgKmRzaSkKK3sK
KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKKwlpbnQgcmV0OworCisJaWYgKCsrZHNp
LT5yZWZjb3VudCAhPSAxKQorCQlyZXR1cm4gMDsKKworCS8qKgorCSAqIGRhdGFfcmF0ZSA9IChw
aXhlbF9jbG9jayAvIDEwMDApICogcGl4ZWxfZGlwdGggKiBtaXBpX3JhdGlvOworCSAqIHBpeGVs
X2Nsb2NrIHVuaXQgaXMgS2h6LCBkYXRhX3JhdGEgdW5pdCBpcyBNSHosIHNvIG5lZWQgZGl2aWRl
IDEwMDAuCisJICogbWlwaV9yYXRpbyBpcyBtaXBpIGNsayBjb2VmZmljaWVudCBmb3IgYmFsYW5j
ZSB0aGUgcGl4ZWwgY2xrIGluIG1pcGkuCisJICogd2Ugc2V0IG1pcGlfcmF0aW8gaXMgMS4wNS4K
KwkgKi8KKwlkc2ktPmRhdGFfcmF0ZSA9IGRzaS0+dm0ucGl4ZWxjbG9jayAqIDMgKiAyMSAvICgx
ICogMTAwMCAqIDEwKTsKKworCXJldCA9IGNsa19zZXRfcmF0ZShkc2ktPmhzX2NsaywgZHNpLT5k
YXRhX3JhdGUgKiAxMDAwMDAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihkZXYsICJGYWls
ZWQgdG8gc2V0IGRhdGEgcmF0ZTogJWRcbiIsIHJldCk7CisKKwlwaHlfcG93ZXJfb24oZHNpLT5w
aHkpOworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+ZW5naW5lX2Nsayk7CisJaWYg
KHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIGVuZ2luZSBjbG9j
azogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2VuZ2luZV9jbGs7CisJfQorCisJcmV0ID0gY2xr
X3ByZXBhcmVfZW5hYmxlKGRzaS0+ZGlnaXRhbF9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCWRl
dl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBkaWdpdGFsIGNsb2NrOiAlZFxuIiwgcmV0KTsK
KwkJZ290byBlcnJfZGlnaXRhbF9jbGs7CisJfQorCisJbXRrX2RzaV9lbmFibGUoZHNpKTsKKwlt
dGtfZHNpX3Jlc2V0KGRzaSk7CisJZHNpX3BoeV90aW1jb25maWcoZHNpKTsKKworCXJldHVybiAw
OworCitlcnJfZGlnaXRhbF9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZW5naW5l
X2Nsayk7CitlcnJfZW5naW5lX2NsazoKKwlkc2ktPnJlZmNvdW50LS07CisJcmV0dXJuIHJldDsK
K30KKworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9kZV9lbnRlcihzdHJ1Y3QgbXRrX2RzaSAq
ZHNpKQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX0hTX1RYX0VOLCAw
KTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19VTFBNX0VOLCAwKTsKK30K
Kworc3RhdGljIHZvaWQgZHNpX2Nsa191bHBfbW9kZV9sZWF2ZShzdHJ1Y3QgbXRrX2RzaSAqZHNp
KQoreworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1VMUE1fRU4sIDApOwor
CW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTENDT04sIExDX1dBS0VVUF9FTiwgTENfV0FLRVVQ
X0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19XQUtFVVBfRU4sIDAp
OworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBfdWxwX21vZGVfZW50ZXIoc3RydWN0IG10a19k
c2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX0hTX1RY
X0VOLCAwKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX1VMUE1fRU4s
IDApOworfQorCitzdGF0aWMgdm9pZCBkc2lfbGFuZTBfdWxwX21vZGVfbGVhdmUoc3RydWN0IG10
a19kc2kgKmRzaSkKK3sKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwgTEQwX1VM
UE1fRU4sIDApOworCW10a19kc2lfbWFzayhkc2ksIERTSV9QSFlfTEQwQ09OLCBMRDBfV0FLRVVQ
X0VOLCBMRDBfV0FLRVVQX0VOKTsKKwltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xEMENPTiwg
TEQwX1dBS0VVUF9FTiwgMCk7Cit9CisKK3N0YXRpYyBib29sIGRzaV9jbGtfaHNfc3RhdGUoc3Ry
dWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIgdG1wX3JlZzE7CisKKwl0bXBfcmVnMSA9IHJlYWRs
KGRzaS0+cmVncyArIERTSV9QSFlfTENDT04pOworCXJldHVybiAoKHRtcF9yZWcxICYgTENfSFNf
VFhfRU4pID09IDEpID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBkc2lfY2xrX2hz
X21vZGUoc3RydWN0IG10a19kc2kgKmRzaSwgYm9vbCBlbnRlcikKK3sKKwlpZiAoZW50ZXIgJiYg
IWRzaV9jbGtfaHNfc3RhdGUoZHNpKSkKKwkJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX1BIWV9MQ0NP
TiwgTENfSFNfVFhfRU4sIExDX0hTX1RYX0VOKTsKKwllbHNlIGlmICghZW50ZXIgJiYgZHNpX2Ns
a19oc19zdGF0ZShkc2kpKQorCQltdGtfZHNpX21hc2soZHNpLCBEU0lfUEhZX0xDQ09OLCBMQ19I
U19UWF9FTiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9zZXRfbW9kZShzdHJ1Y3QgbXRrX2Rz
aSAqZHNpKQoreworCXUzMiB2aWRfbW9kZSA9IENNRF9NT0RFOworCisJaWYgKGRzaS0+bW9kZV9m
bGFncyAmIE1JUElfRFNJX01PREVfVklERU8pIHsKKwkJdmlkX21vZGUgPSBTWU5DX1BVTFNFX01P
REU7CisKKwkJaWYgKChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNU
KSAmJgorCQkgICAgIShkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNf
UFVMU0UpKQorCQkJdmlkX21vZGUgPSBCVVJTVF9NT0RFOworCX0KKworCXdyaXRlbCh2aWRfbW9k
ZSwgZHNpLT5yZWdzICsgRFNJX01PREVfQ1RSTCk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9wc19j
b250cm9sX3ZhY3Qoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgdmlkZW9tb2RlICp2
bSA9ICZkc2ktPnZtOworCXUzMiBkc2lfYnVmX2JwcCwgcHNfd2M7CisJdTMyIHBzX2JwcF9tb2Rl
OworCisJaWYgKGRzaS0+Zm9ybWF0ID09IE1JUElfRFNJX0ZNVF9SR0I1NjUpCisJCWRzaV9idWZf
YnBwID0gMjsKKwllbHNlCisJCWRzaV9idWZfYnBwID0gMzsKKworCXBzX3djID0gdm0tPmhhY3Rp
dmUgKiBkc2lfYnVmX2JwcDsKKwlwc19icHBfbW9kZSA9IHBzX3djOworCisJc3dpdGNoIChkc2kt
PmZvcm1hdCkgeworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJcHNfYnBwX21vZGUgfD0g
UEFDS0VEX1BTXzI0QklUX1JHQjg4ODsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdC
NjY2OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMThCSVRfUkdCNjY2OworCQlicmVhazsK
KwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQlwc19icHBfbW9kZSB8PSBMT09T
RUxZX1BTXzE4QklUX1JHQjY2NjsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1
OgorCQlwc19icHBfbW9kZSB8PSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1OworCQlicmVhazsKKwl9
CisKKwl3cml0ZWwodm0tPnZhY3RpdmUsIGRzaS0+cmVncyArIERTSV9WQUNUX05MKTsKKwl3cml0
ZWwocHNfYnBwX21vZGUsIGRzaS0+cmVncyArIERTSV9QU0NUUkwpOworCXdyaXRlbChwc193Yywg
ZHNpLT5yZWdzICsgRFNJX0hTVFhfQ0tMX1dDKTsKK30KKworc3RhdGljIHZvaWQgZHNpX3J4dHhf
Y29udHJvbChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXUzMiB0bXBfcmVnOworCisJc3dpdGNo
IChkc2ktPmxhbmVzKSB7CisJY2FzZSAxOgorCQl0bXBfcmVnID0gMSA8PCAyOworCQlicmVhazsK
KwljYXNlIDI6CisJCXRtcF9yZWcgPSAzIDw8IDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdG1w
X3JlZyA9IDcgPDwgMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl0bXBfcmVnID0gMHhmIDw8IDI7
CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRtcF9yZWcgPSAweGYgPDwgMjsKKwkJYnJlYWs7CisJ
fQorCisJd3JpdGVsKHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9UWFJYX0NUUkwpOworfQorCitz
dGF0aWMgdm9pZCBkc2lfcHNfY29udHJvbChzdHJ1Y3QgbXRrX2RzaSAqZHNpKQoreworCXVuc2ln
bmVkIGludCBkc2lfdG1wX2J1Zl9icHA7CisJdTMyIHRtcF9yZWc7CisKKwlzd2l0Y2ggKGRzaS0+
Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQl0bXBfcmVnID0gUEFDS0VE
X1BTXzI0QklUX1JHQjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJY2Fz
ZSBNSVBJX0RTSV9GTVRfUkdCNjY2OgorCQl0bXBfcmVnID0gTE9PU0VMWV9QU18xOEJJVF9SR0I2
NjY7CisJCWRzaV90bXBfYnVmX2JwcCA9IDM7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1U
X1JHQjY2Nl9QQUNLRUQ6CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMThCSVRfUkdCNjY2OworCQlk
c2lfdG1wX2J1Zl9icHAgPSAzOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6
CisJCXRtcF9yZWcgPSBQQUNLRURfUFNfMTZCSVRfUkdCNTY1OworCQlkc2lfdG1wX2J1Zl9icHAg
PSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0bXBfcmVnID0gUEFDS0VEX1BTXzI0QklUX1JH
Qjg4ODsKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwkJYnJlYWs7CisJfQorCisJdG1wX3JlZyAr
PSBkc2ktPnZtLmhhY3RpdmUgKiBkc2lfdG1wX2J1Zl9icHAgJiBEU0lfUFNfV0M7CisJd3JpdGVs
KHRtcF9yZWcsIGRzaS0+cmVncyArIERTSV9QU0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBkc2lf
Y29uZmlnX3Zkb190aW1pbmcoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1bnNpZ25lZCBpbnQg
aG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlOworCXVuc2lnbmVkIGludCBob3Jpem9udGFsX2Jh
Y2twb3JjaF9ieXRlOworCXVuc2lnbmVkIGludCBob3Jpem9udGFsX2Zyb250cG9yY2hfYnl0ZTsK
Kwl1bnNpZ25lZCBpbnQgZHNpX3RtcF9idWZfYnBwOworCisJc3RydWN0IHZpZGVvbW9kZSAqdm0g
PSAmZHNpLT52bTsKKworCWlmIChkc2ktPmZvcm1hdCA9PSBNSVBJX0RTSV9GTVRfUkdCNTY1KQor
CQlkc2lfdG1wX2J1Zl9icHAgPSAyOworCWVsc2UKKwkJZHNpX3RtcF9idWZfYnBwID0gMzsKKwor
CXdyaXRlbCh2bS0+dnN5bmNfbGVuLCBkc2ktPnJlZ3MgKyBEU0lfVlNBX05MKTsKKwl3cml0ZWwo
dm0tPnZiYWNrX3BvcmNoLCBkc2ktPnJlZ3MgKyBEU0lfVkJQX05MKTsKKwl3cml0ZWwodm0tPnZm
cm9udF9wb3JjaCwgZHNpLT5yZWdzICsgRFNJX1ZGUF9OTCk7CisJd3JpdGVsKHZtLT52YWN0aXZl
LCBkc2ktPnJlZ3MgKyBEU0lfVkFDVF9OTCk7CisKKwlob3Jpem9udGFsX3N5bmNfYWN0aXZlX2J5
dGUgPSAodm0tPmhzeW5jX2xlbiAqIGRzaV90bXBfYnVmX2JwcCAtIDEwKTsKKworCWlmIChkc2kt
Pm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpCisJCWhvcml6b250
YWxfYmFja3BvcmNoX2J5dGUgPQorCQkJKHZtLT5oYmFja19wb3JjaCAqIGRzaV90bXBfYnVmX2Jw
cCAtIDEwKTsKKwllbHNlCisJCWhvcml6b250YWxfYmFja3BvcmNoX2J5dGUgPSAoKHZtLT5oYmFj
a19wb3JjaCArIHZtLT5oc3luY19sZW4pICoKKwkJCWRzaV90bXBfYnVmX2JwcCAtIDEwKTsKKwor
CWhvcml6b250YWxfZnJvbnRwb3JjaF9ieXRlID0gKHZtLT5oZnJvbnRfcG9yY2ggKiBkc2lfdG1w
X2J1Zl9icHAgLSAxMik7CisKKwl3cml0ZWwoaG9yaXpvbnRhbF9zeW5jX2FjdGl2ZV9ieXRlLCBk
c2ktPnJlZ3MgKyBEU0lfSFNBX1dDKTsKKwl3cml0ZWwoaG9yaXpvbnRhbF9iYWNrcG9yY2hfYnl0
ZSwgZHNpLT5yZWdzICsgRFNJX0hCUF9XQyk7CisJd3JpdGVsKGhvcml6b250YWxfZnJvbnRwb3Jj
aF9ieXRlLCBkc2ktPnJlZ3MgKyBEU0lfSEZQX1dDKTsKKworCWRzaV9wc19jb250cm9sKGRzaSk7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfc3RhcnQoc3RydWN0IG10a19kc2kgKmRzaSkKK3sK
Kwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRFNJX1NUQVJUKTsKKwl3cml0ZWwoMSwgZHNpLT5yZWdz
ICsgRFNJX1NUQVJUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RzaV9wb3dlcm9mZihzdHJ1Y3Qg
bXRrX2RzaSAqZHNpKQoreworCWlmIChXQVJOX09OKGRzaS0+cmVmY291bnQgPT0gMCkpCisJCXJl
dHVybjsKKworCWlmICgtLWRzaS0+cmVmY291bnQgIT0gMCkKKwkJcmV0dXJuOworCisJZHNpX2xh
bmUwX3VscF9tb2RlX2VudGVyKGRzaSk7CisJZHNpX2Nsa191bHBfbW9kZV9lbnRlcihkc2kpOwor
CisJbXRrX2RzaV9kaXNhYmxlKGRzaSk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5l
bmdpbmVfY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5kaWdpdGFsX2Nsayk7CisK
KwlwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsKK30KKworc3RhdGljIHZvaWQgbXRrX291dHB1dF9k
c2lfZW5hYmxlKHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaW50IHJldDsKKworCWlmIChkc2kt
PmVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChkc2ktPnBhbmVsKSB7CisJCWlmIChkcm1fcGFu
ZWxfcHJlcGFyZShkc2ktPnBhbmVsKSkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0dXAg
dGhlIHBhbmVsXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXJldCA9IG10a19kc2lfcG93
ZXJvbihkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBvd2Vy
IG9uIGRzaVxuIik7CisJCXJldHVybjsKKwl9CisKKwlkc2lfcnh0eF9jb250cm9sKGRzaSk7CisK
Kwlkc2lfY2xrX3VscF9tb2RlX2xlYXZlKGRzaSk7CisJZHNpX2xhbmUwX3VscF9tb2RlX2xlYXZl
KGRzaSk7CisJZHNpX2Nsa19oc19tb2RlKGRzaSwgMCk7CisJZHNpX3NldF9tb2RlKGRzaSk7CisK
Kwlkc2lfcHNfY29udHJvbF92YWN0KGRzaSk7CisJZHNpX2NvbmZpZ192ZG9fdGltaW5nKGRzaSk7
CisKKwlkc2lfc2V0X21vZGUoZHNpKTsKKwlkc2lfY2xrX2hzX21vZGUoZHNpLCAxKTsKKworCW10
a19kc2lfc3RhcnQoZHNpKTsKKworCWRzaS0+ZW5hYmxlZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19vdXRwdXRfZHNpX2Rpc2FibGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlpZiAo
IWRzaS0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKGRzaS0+cGFuZWwpIHsKKwkJaWYgKGRy
bV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpKSB7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byBk
aXNhYmxlIHRoZSBwYW5lbFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwltdGtfZHNpX3Bv
d2Vyb2ZmKGRzaSk7CisKKwlkc2ktPmVuYWJsZWQgPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQg
bXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQorewor
CWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg
ZHJtX2VuY29kZXJfZnVuY3MgbXRrX2RzaV9lbmNvZGVyX2Z1bmNzID0geworCS5kZXN0cm95ID0g
bXRrX2RzaV9lbmNvZGVyX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgYm9vbCBtdGtfZHNpX2VuY29k
ZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICAgIGNv
bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJt
X2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3Rh
dGljIHZvaWQgbXRrX2RzaV9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j
b2RlciwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICAg
c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkKQoreworCXN0cnVjdCBtdGtfZHNpICpk
c2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCWRzaS0+dm0ucGl4ZWxjbG9jayA9IGFk
anVzdGVkLT5jbG9jazsKKwlkc2ktPnZtLmhhY3RpdmUgPSBhZGp1c3RlZC0+aGRpc3BsYXk7CisJ
ZHNpLT52bS5oYmFja19wb3JjaCA9IGFkanVzdGVkLT5odG90YWwgLSBhZGp1c3RlZC0+aHN5bmNf
ZW5kOworCWRzaS0+dm0uaGZyb250X3BvcmNoID0gYWRqdXN0ZWQtPmhzeW5jX3N0YXJ0IC0gYWRq
dXN0ZWQtPmhkaXNwbGF5OworCWRzaS0+dm0uaHN5bmNfbGVuID0gYWRqdXN0ZWQtPmhzeW5jX2Vu
ZCAtIGFkanVzdGVkLT5oc3luY19zdGFydDsKKworCWRzaS0+dm0udmFjdGl2ZSA9IGFkanVzdGVk
LT52ZGlzcGxheTsKKwlkc2ktPnZtLnZiYWNrX3BvcmNoID0gYWRqdXN0ZWQtPnZ0b3RhbCAtIGFk
anVzdGVkLT52c3luY19lbmQ7CisJZHNpLT52bS52ZnJvbnRfcG9yY2ggPSBhZGp1c3RlZC0+dnN5
bmNfc3RhcnQgLSBhZGp1c3RlZC0+dmRpc3BsYXk7CisJZHNpLT52bS52c3luY19sZW4gPSBhZGp1
c3RlZC0+dnN5bmNfZW5kIC0gYWRqdXN0ZWQtPnZzeW5jX3N0YXJ0OworfQorCitzdGF0aWMgdm9p
ZCBtdGtfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7
CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOworCisJbXRr
X291dHB1dF9kc2lfZGlzYWJsZShkc2kpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHNpX2VuY29k
ZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbXRrX2Rz
aSAqZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7CisKKwltdGtfb3V0cHV0X2RzaV9lbmFi
bGUoZHNpKTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgbXRrX2RzaV9j
b25uZWN0b3JfZGV0ZWN0KAorCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wg
Zm9yY2UpCit7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworfQorCitzdGF0
aWMgdm9pZCBtdGtfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj
b25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJZHJt
X2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9j
b25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJ
c3RydWN0IG10a19kc2kgKmRzaSA9IGNvbm5lY3Rvcl90b19kc2koY29ubmVjdG9yKTsKKworCXJl
dHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRzaS0+cGFuZWwpOworfQorCitzdGF0aWMgc3RydWN0
IGRybV9lbmNvZGVyICptdGtfZHNpX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIoCisJCXN0cnVjdCBk
cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNvbm5l
Y3Rvcl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiAmZHNpLT5lbmNvZGVyOworfQorCitz
dGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBtdGtfZHNpX2VuY29k
ZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVwID0gbXRrX2RzaV9lbmNvZGVyX21vZGVf
Zml4dXAsCisJLm1vZGVfc2V0ID0gbXRrX2RzaV9lbmNvZGVyX21vZGVfc2V0LAorCS5kaXNhYmxl
ID0gbXRrX2RzaV9lbmNvZGVyX2Rpc2FibGUsCisJLmVuYWJsZSA9IG10a19kc2lfZW5jb2Rlcl9l
bmFibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgbXRr
X2RzaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25u
ZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gbXRrX2RzaV9jb25uZWN0b3JfZGV0ZWN0LAorCS5maWxs
X21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0
cm95ID0gbXRrX2RzaV9jb25uZWN0b3JfZGVzdHJveSwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hl
bHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRv
bWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9z
dGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKwor
c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcworCW10a19kc2lf
Y29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gbXRrX2RzaV9jb25uZWN0
b3JfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIgPSBtdGtfZHNpX2Nvbm5lY3Rvcl9iZXN0X2Vu
Y29kZXIsCit9OworCitzdGF0aWMgaW50IG10a19kcm1fYXR0YWNoX2xjbV9icmlkZ2Uoc3RydWN0
IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl
cikKK3sKKwlpbnQgcmV0OworCisJZW5jb2Rlci0+YnJpZGdlID0gYnJpZGdlOworCWJyaWRnZS0+
ZW5jb2RlciA9IGVuY29kZXI7CisJcmV0ID0gZHJtX2JyaWRnZV9hdHRhY2goZW5jb2Rlci0+ZGV2
LCBicmlkZ2UpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYXR0YWNoIGJy
aWRnZSB0byBkcm1cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitz
dGF0aWMgaW50IG10a19kc2lfY3JlYXRlX2Nvbm5fZW5jKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0s
IHN0cnVjdCBtdGtfZHNpICpkc2kpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9lbmNvZGVy
X2luaXQoZHJtLCAmZHNpLT5lbmNvZGVyLCAmbXRrX2RzaV9lbmNvZGVyX2Z1bmNzLAorCQkJICAg
ICAgIERSTV9NT0RFX0VOQ09ERVJfRFNJKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFp
bGVkIHRvIGVuY29kZXIgaW5pdCB0byBkcm1cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlkcm1f
ZW5jb2Rlcl9oZWxwZXJfYWRkKCZkc2ktPmVuY29kZXIsICZtdGtfZHNpX2VuY29kZXJfaGVscGVy
X2Z1bmNzKTsKKworCWRzaS0+ZW5jb2Rlci5wb3NzaWJsZV9jcnRjcyA9IDE7CisKKwkvKiBQcmUt
ZW1wdCBEUCBjb25uZWN0b3IgY3JlYXRpb24gaWYgdGhlcmUncyBhIGJyaWRnZSAqLworCXJldCA9
IG10a19kcm1fYXR0YWNoX2xjbV9icmlkZ2UoZHNpLT5icmlkZ2UsICZkc2ktPmVuY29kZXIpOwor
CWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChkcm0s
ICZkc2ktPmNvbm4sICZtdGtfZHNpX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCQkgRFJNX01PREVfQ09O
TkVDVE9SX0RTSSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBjb25uZWN0
b3IgaW5pdCB0byBkcm1cbiIpOworCQlnb3RvIGVycmNvbm5lY3RvcjsKKwl9CisKKwlkcm1fY29u
bmVjdG9yX2hlbHBlcl9hZGQoJmRzaS0+Y29ubiwgJm10a19kc2lfY29ubmVjdG9yX2hlbHBlcl9m
dW5jcyk7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX3JlZ2lzdGVyKCZkc2ktPmNvbm4pOworCWlm
IChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29ubmVjdG9yIHJlZ2lzdGVyIHRvIGRy
bVxuIik7CisJCWdvdG8gZXJyY29ubmVjdG9ycmVnOworCX0KKworCWRzaS0+Y29ubi5kcG1zID0g
RFJNX01PREVfRFBNU19PRkY7CisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZk
c2ktPmNvbm4sICZkc2ktPmVuY29kZXIpOworCisJaWYgKGRzaS0+cGFuZWwpIHsKKwkJcmV0ID0g
ZHJtX3BhbmVsX2F0dGFjaChkc2ktPnBhbmVsLCAmZHNpLT5jb25uKTsKKwkJaWYgKHJldCkgewor
CQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYXR0YWN0IHBhbmVsIHRvIGRybVxuIik7CisJCQlyZXR1
cm4gcmV0OworCQl9CisJfQorCXJldHVybiAwOworCitlcnJjb25uZWN0b3I6CisJZHJtX2VuY29k
ZXJfY2xlYW51cCgmZHNpLT5lbmNvZGVyKTsKK2VycmNvbm5lY3RvcnJlZzoKKwlkcm1fY29ubmVj
dG9yX2NsZWFudXAoJmRzaS0+Y29ubik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9p
ZCBtdGtfZHNpX2Rlc3Ryb3lfY29ubl9lbmMoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwlkcm1f
ZW5jb2Rlcl9jbGVhbnVwKCZkc2ktPmVuY29kZXIpOworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rl
cigmZHNpLT5jb25uKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoJmRzaS0+Y29ubik7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19kc2lfZGRwX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp
Cit7CisJc3RydWN0IG10a19kc2kgKmRzaSA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRr
X2RzaSwgZGRwX2NvbXApOworCisJbXRrX2RzaV9wb3dlcm9uKGRzaSk7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19kc2lfZGRwX3N0b3Aoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1
Y3QgbXRrX2RzaSAqZHNpID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZHNpLCBkZHBf
Y29tcCk7CisKKwltdGtfZHNpX3Bvd2Vyb2ZmKGRzaSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1
Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIG10a19kc2lfZnVuY3MgPSB7CisJLnN0YXJ0ID0gbXRrX2Rz
aV9kZHBfc3RhcnQsCisJLnN0b3AgPSBtdGtfZHNpX2RkcF9zdG9wLAorfTsKKworc3RhdGljIGlu
dCBtdGtfZHNpX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs
IHZvaWQgKmRhdGEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGF0
YTsKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXQg
PSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtLCAmZHNpLT5kZHBfY29tcCk7CisJaWYgKHJldCA8
IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29tcG9uZW50ICVzOiAl
ZFxuIiwKKwkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0Owor
CX0KKworCXJldCA9IG10a19kc2lfY3JlYXRlX2Nvbm5fZW5jKGRybSwgZHNpKTsKKwlpZiAocmV0
KSB7CisJCURSTV9FUlJPUigiRW5jb2RlciBjcmVhdGUgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7
CisJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl91bnJlZ2lz
dGVyOgorCW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybSwgJmRzaS0+ZGRwX2NvbXApOworCXJl
dHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kc2lfdW5iaW5kKHN0cnVjdCBkZXZpY2Ug
KmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1
Y3QgZHJtX2RldmljZSAqZHJtID0gZGF0YTsKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpOworCisJZHNp
ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCW10a19k
c2lfZGVzdHJveV9jb25uX2VuYyhkc2kpOworCW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybSwg
JmRzaS0+ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMg
bXRrX2RzaV9jb21wb25lbnRfb3BzID0geworCS5iaW5kID0gbXRrX2RzaV9iaW5kLAorCS51bmJp
bmQgPSBtdGtfZHNpX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9wcm9iZShzdHJ1
Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfZHNpICpkc2k7CisJc3Ry
dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJlbW90
ZV9ub2RlLCAqZW5kcG9pbnQ7CisJc3RydWN0IHJlc291cmNlICpyZWdzOworCWludCBjb21wX2lk
OworCWludCByZXQ7CisKKwlkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRzaSksIEdG
UF9LRVJORUwpOworCWRzaS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfCBNSVBJ
X0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0U7CisJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRf
UkdCODg4OworCWRzaS0+bGFuZXMgPSA0OworCisJZW5kcG9pbnQgPSBvZl9ncmFwaF9nZXRfbmV4
dF9lbmRwb2ludChkZXYtPm9mX25vZGUsIE5VTEwpOworCWlmIChlbmRwb2ludCkgeworCQlyZW1v
dGVfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZW5kcG9pbnQpOworCQlp
ZiAoIXJlbW90ZV9ub2RlKSB7CisJCQlkZXZfZXJyKGRldiwgIk5vIHBhbmVsIGNvbm5lY3RlZFxu
Iik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCWRzaS0+YnJpZGdlID0gb2ZfZHJtX2Zp
bmRfYnJpZGdlKHJlbW90ZV9ub2RlKTsKKwkJZHNpLT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVs
KHJlbW90ZV9ub2RlKTsKKwkJb2Zfbm9kZV9wdXQocmVtb3RlX25vZGUpOworCQlpZiAoIWRzaS0+
YnJpZGdlICYmICFkc2ktPnBhbmVsKSB7CisJCQlkZXZfaW5mbyhkZXYsICJXYWl0aW5nIGZvciBi
cmlkZ2Ugb3IgcGFuZWwgZHJpdmVyXG4iKTsKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCQl9
CisJfQorCisJZHNpLT5lbmdpbmVfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImVuZ2luZSIpOwor
CWlmIChJU19FUlIoZHNpLT5lbmdpbmVfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+ZW5n
aW5lX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBlbmdpbmUgY2xvY2s6ICVk
XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+ZGlnaXRhbF9jbGsgPSBkZXZt
X2Nsa19nZXQoZGV2LCAiZGlnaXRhbCIpOworCWlmIChJU19FUlIoZHNpLT5kaWdpdGFsX2Nsaykp
IHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPmRpZ2l0YWxfY2xrKTsKKwkJZGV2X2VycihkZXYsICJG
YWlsZWQgdG8gZ2V0IGRpZ2l0YWwgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor
CX0KKworCWRzaS0+aHNfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImhzIik7CisJaWYgKElTX0VS
Uihkc2ktPmhzX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPmhzX2Nsayk7CisJCWRldl9l
cnIoZGV2LCAiRmFpbGVkIHRvIGdldCBocyBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiBy
ZXQ7CisJfQorCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF
X01FTSwgMCk7CisJZHNpLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVncyk7
CisJaWYgKElTX0VSUihkc2ktPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIoZHNpLT5yZWdzKTsK
KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBtZW1vcnk6ICVkXG4iLCByZXQpOwor
CQlyZXR1cm4gcmV0OworCX0KKworCWRzaS0+cGh5ID0gZGV2bV9waHlfZ2V0KGRldiwgImRwaHki
KTsKKwlpZiAoSVNfRVJSKGRzaS0+cGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGh5KTsK
KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IE1JUEktRFBIWTogJWRcbiIsIHJldCk7CisJ
CXJldHVybiByZXQ7CisJfQorCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQoZGV2LT5v
Zl9ub2RlLCBNVEtfRFNJKTsKKwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJG
YWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsKKwkJcmV0dXJuIGNv
bXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBkZXYtPm9mX25vZGUs
ICZkc2ktPmRkcF9jb21wLCBjb21wX2lkLAorCQkJCSZtdGtfZHNpX2Z1bmNzKTsKKwlpZiAocmV0
KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcG9uZW50OiAlZFxu
IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2
LCBkc2kpOworCisJcmV0ID0gY29tcG9uZW50X2FkZCgmcGRldi0+ZGV2LCAmbXRrX2RzaV9jb21w
b25lbnRfb3BzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFkZCBE
U0kgY29tcG9uZW50XG4iKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj
ZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEo
cGRldik7CisKKwltdGtfb3V0cHV0X2RzaV9kaXNhYmxlKGRzaSk7CisJY29tcG9uZW50X2RlbCgm
cGRldi0+ZGV2LCAmbXRrX2RzaV9jb21wb25lbnRfb3BzKTsKKworCXJldHVybiAwOworfQorCisj
aWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG10a19kc2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNl
ICpkZXYpCit7CisJc3RydWN0IG10a19kc2kgKmRzaTsKKworCWRzaSA9IGRldl9nZXRfZHJ2ZGF0
YShkZXYpOworCisJbXRrX291dHB1dF9kc2lfZGlzYWJsZShkc2kpOworCURSTV9ERUJVR19EUklW
RVIoImRzaSBzdXNwZW5kIHN1Y2Nlc3MhXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg
aW50IG10a19kc2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2Rz
aSAqZHNpOworCisJZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwltdGtfb3V0cHV0X2Rz
aV9lbmFibGUoZHNpKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJkc2kgcmVzdW1lIHN1Y2Nlc3MhXG4i
KTsKKworCXJldHVybiAwOworfQorI2VuZGlmCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobXRr
X2RzaV9wbV9vcHMsIG10a19kc2lfc3VzcGVuZCwgbXRrX2RzaV9yZXN1bWUpOworCitzdGF0aWMg
Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZHNpX29mX21hdGNoW10gPSB7CisJeyAuY29t
cGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZHNpIiB9LAorCXsgfSwKK307CisKK3N0cnVjdCBw
bGF0Zm9ybV9kcml2ZXIgbXRrX2RzaV9kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX2RzaV9wcm9i
ZSwKKwkucmVtb3ZlID0gbXRrX2RzaV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAi
bXRrLWRzaSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kc2lfb2ZfbWF0Y2gsCisJCS5wbSA9
ICZtdGtfZHNpX3BtX29wcywKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHNpLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ODBhZmMKLS0tIC9kZXYvbnVsbAor
KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5oCkBAIC0wLDAgKzEsNTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9NVEtfRFNJ
X0hfCisjZGVmaW5lIF9NVEtfRFNJX0hfCisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKwor
I2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworc3RydWN0IHBoeTsKKworc3RydWN0IG10
a19kc2kgeworCXN0cnVjdCBtdGtfZGRwX2NvbXAgZGRwX2NvbXA7CisJc3RydWN0IGRldmljZSAq
ZGV2OworCXN0cnVjdCBkcm1fZW5jb2RlciBlbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9y
IGNvbm47CisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisJc3RydWN0IGRybV9icmlkZ2UgKmJy
aWRnZTsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisKKwlzdHJ1
Y3QgY2xrICplbmdpbmVfY2xrOworCXN0cnVjdCBjbGsgKmRpZ2l0YWxfY2xrOworCXN0cnVjdCBj
bGsgKmhzX2NsazsKKworCXUzMiBkYXRhX3JhdGU7CisKKwl1bnNpZ25lZCBsb25nIG1vZGVfZmxh
Z3M7CisJZW51bSBtaXBpX2RzaV9waXhlbF9mb3JtYXQgZm9ybWF0OworCXVuc2lnbmVkIGludCBs
YW5lczsKKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOworCWludCByZWZjb3VudDsKKwlib29sIGVuYWJs
ZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZHNpICplbmNvZGVyX3RvX2RzaShz
dHJ1Y3QgZHJtX2VuY29kZXIgKmUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihlLCBzdHJ1Y3Qg
bXRrX2RzaSwgZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19kc2kgKmNv
bm5lY3Rvcl90b19kc2koc3RydWN0IGRybV9jb25uZWN0b3IgKmMpCit7CisJcmV0dXJuIGNvbnRh
aW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2RzaSwgY29ubik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19taXBpX3R4LmMgYi9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX21pcGlfdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zYjkxYTM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19taXBpX3R4LmMKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgv
Y2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51
eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRm
b3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKworI2RlZmluZSBNSVBJ
VFhfRFNJX0NPTgkJMHgwMAorI2RlZmluZSBSR19EU0lfTERPQ09SRV9FTgkJQklUKDApCisjZGVm
aW5lIFJHX0RTSV9DS0dfTERPT1VUX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0JDTEtfU0VM
CQkJKDMgPDwgMikKKyNkZWZpbmUgUkdfRFNJX0xEX0lEWF9TRUwJCSg3IDw8IDQpCisjZGVmaW5l
IFJHX0RTSV9QSFlDTEtfU0VMCQkoMiA8PCA4KQorI2RlZmluZSBSR19EU0lfRFNJQ0xLX0ZSRVFf
U0VMCQlCSVQoMTApCisjZGVmaW5lIFJHX0RTSV9MUFRYX0NMTVBfRU4JCUJJVCgxMSkKKworI2Rl
ZmluZSBNSVBJVFhfRFNJX0NMT0NLX0xBTkUJMHgwNAorI2RlZmluZSBSR19EU0lfTE5UQ19MRE9P
VVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UQ19DS0xBTkVfRU4JCUJJVCgxKQorI2Rl
ZmluZSBSR19EU0lfTE5UQ19MUFRYX0lQTFVTMQkJQklUKDIpCisjZGVmaW5lIFJHX0RTSV9MTlRD
X0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xOVENfTFBUWF9JTUlOVVMJCUJJ
VCg0KQorI2RlZmluZSBSR19EU0lfTE5UQ19MUENEX0lQTFVTCQlCSVQoNSkKKyNkZWZpbmUgUkdf
RFNJX0xOVENfTFBDRF9JTUxVUwkJQklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlRDX1JUX0NPREUJ
CSgweGYgPDwgOCkKKworI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTAJMHgwOAorI2RlZmlu
ZSBSR19EU0lfTE5UMF9MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UMF9DS0xB
TkVfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5UMF9MUFRYX0lQTFVTMQkJQklUKDIpCisj
ZGVmaW5lIFJHX0RTSV9MTlQwX0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xO
VDBfTFBUWF9JTUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UMF9MUENEX0lQTFVTCQlC
SVQoNSkKKyNkZWZpbmUgUkdfRFNJX0xOVDBfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBS
R19EU0lfTE5UMF9SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9EQVRB
X0xBTkUxCTB4MGMKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTERPT1VUX0VOCQlCSVQoMCkKKyNkZWZp
bmUgUkdfRFNJX0xOVDFfQ0tMQU5FX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVDFfTFBU
WF9JUExVUzEJCUJJVCgyKQorI2RlZmluZSBSR19EU0lfTE5UMV9MUFRYX0lQTFVTMgkJQklUKDMp
CisjZGVmaW5lIFJHX0RTSV9MTlQxX0xQVFhfSU1JTlVTCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJ
X0xOVDFfTFBDRF9JUExVUwkJQklUKDUpCisjZGVmaW5lIFJHX0RTSV9MTlQxX0xQQ0RfSU1JTlVT
CQlCSVQoNikKKyNkZWZpbmUgUkdfRFNJX0xOVDFfUlRfQ09ERQkJKDB4ZiA8PCA4KQorCisjZGVm
aW5lIE1JUElUWF9EU0lfREFUQV9MQU5FMgkweDEwCisjZGVmaW5lIFJHX0RTSV9MTlQyX0xET09V
VF9FTgkJQklUKDApCisjZGVmaW5lIFJHX0RTSV9MTlQyX0NLTEFORV9FTgkJQklUKDEpCisjZGVm
aW5lIFJHX0RTSV9MTlQyX0xQVFhfSVBMVVMxCQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVDJf
TFBUWF9JUExVUzIJCUJJVCgzKQorI2RlZmluZSBSR19EU0lfTE5UMl9MUFRYX0lNSU5VUwkJQklU
KDQpCisjZGVmaW5lIFJHX0RTSV9MTlQyX0xQQ0RfSVBMVVMJCUJJVCg1KQorI2RlZmluZSBSR19E
U0lfTE5UMl9MUENEX0lNSU5VUwkJQklUKDYpCisjZGVmaW5lIFJHX0RTSV9MTlQyX1JUX0NPREUJ
CSgweGYgPDwgOCkKKworI2RlZmluZSBNSVBJVFhfRFNJX0RBVEFfTEFORTMJMHgxNAorI2RlZmlu
ZSBSR19EU0lfTE5UM19MRE9PVVRfRU4JCUJJVCgwKQorI2RlZmluZSBSR19EU0lfTE5UM19DS0xB
TkVfRU4JCUJJVCgxKQorI2RlZmluZSBSR19EU0lfTE5UM19MUFRYX0lQTFVTMQkJQklUKDIpCisj
ZGVmaW5lIFJHX0RTSV9MTlQzX0xQVFhfSVBMVVMyCQlCSVQoMykKKyNkZWZpbmUgUkdfRFNJX0xO
VDNfTFBUWF9JTUlOVVMJCUJJVCg0KQorI2RlZmluZSBSR19EU0lfTE5UM19MUENEX0lQTFVTCQlC
SVQoNSkKKyNkZWZpbmUgUkdfRFNJX0xOVDNfTFBDRF9JTUlOVVMJCUJJVCg2KQorI2RlZmluZSBS
R19EU0lfTE5UM19SVF9DT0RFCQkoMHhmIDw8IDgpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9UT1Bf
Q09OCTB4NDAKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTlRSX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdf
RFNJX0xOVF9IU19CSUFTX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0xOVF9JTVBfQ0FMX0VO
CQlCSVQoMikKKyNkZWZpbmUgUkdfRFNJX0xOVF9URVNUTU9ERV9FTgkJQklUKDMpCisjZGVmaW5l
IFJHX0RTSV9MTlRfSU1QX0NBTF9DT0RFCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJHX0RTSV9MTlRf
QUlPX1NFTAkJKDcgPDwgOCkKKyNkZWZpbmUgUkdfRFNJX1BBRF9USUVfTE9XX0VOCQlCSVQoMTEp
CisjZGVmaW5lIFJHX0RTSV9ERUJVR19JTlBVVF9FTgkJQklUKDEyKQorI2RlZmluZSBSR19EU0lf
UFJFU0VSVkUJCQkoNyA8PCAxMykKKworI2RlZmluZSBNSVBJVFhfRFNJX0JHX0NPTgkweDQ0Cisj
ZGVmaW5lIFJHX0RTSV9CR19DT1JFX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX0JHX0NLRU4J
CQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX0JHX0RJVgkJCSgweDMgPDwgMikKKyNkZWZpbmUgUkdf
RFNJX0JHX0ZBU1RfQ0hBUkdFCQlCSVQoNCkKKyNkZWZpbmUgUkdfRFNJX1ZPVVRfTVNLCQkJKDB4
M2ZmZmYgPDwgNSkKKyNkZWZpbmUgUkdfRFNJX1YxMl9TRUwJCQkoNyA8PCA1KQorI2RlZmluZSBS
R19EU0lfVjEwX1NFTAkJCSg3IDw8IDgpCisjZGVmaW5lIFJHX0RTSV9WMDcyX1NFTAkJCSg3IDw8
IDExKQorI2RlZmluZSBSR19EU0lfVjA0X1NFTAkJCSg3IDw8IDE0KQorI2RlZmluZSBSR19EU0lf
VjAzMl9TRUwJCQkoNyA8PCAxNykKKyNkZWZpbmUgUkdfRFNJX1YwMl9TRUwJCQkoNyA8PCAyMCkK
KyNkZWZpbmUgUkdfRFNJX0JHX1IxX1RSSU0JCSgweGYgPDwgMjQpCisjZGVmaW5lIFJHX0RTSV9C
R19SMl9UUklNCQkoMHhmIDw8IDI4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfUExMX0NPTjAJMHg1
MAorI2RlZmluZSBSR19EU0lfTVBQTExfUExMX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX01Q
UExMX0RJVl9NU0sJCSgweDFmZiA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQTExfUFJFRElWCQko
MyA8PCAxKQorI2RlZmluZSBSR19EU0lfTVBQTExfVFhESVYwCQkoMyA8PCAzKQorI2RlZmluZSBS
R19EU0lfTVBQTExfVFhESVYxCQkoMyA8PCA1KQorI2RlZmluZSBSR19EU0lfTVBQTExfUE9TRElW
CQkoNyA8PCA3KQorI2RlZmluZSBSR19EU0lfTVBQTExfTU9OVkNfRU4JCUJJVCgxMCkKKyNkZWZp
bmUgUkdfRFNJX01QUExMX01PTlJFRl9FTgkJQklUKDExKQorI2RlZmluZSBSR19EU0lfTVBQTExf
Vk9EX0VOCQlCSVQoMTIpCisKKyNkZWZpbmUgTUlQSVRYX0RTSV9QTExfQ09OMQkweDU0CisjZGVm
aW5lIFJHX0RTSV9NUFBMTF9TRE1fRlJBX0VOCQlCSVQoMCkKKyNkZWZpbmUgUkdfRFNJX01QUExM
X1NETV9TU0NfUEhfSU5JVAlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX01QUExMX1NETV9TU0NfRU4J
CUJJVCgyKQorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1NTQ19QUkQJKDB4ZmZmZiA8PCAxNikK
KworI2RlZmluZSBNSVBJVFhfRFNJX1BMTF9DT04yCTB4NTgKKworI2RlZmluZSBNSVBJVFhfRFNJ
X1BMTF9QV1IJMHg2OAorI2RlZmluZSBSR19EU0lfTVBQTExfU0RNX1BXUl9PTgkJQklUKDApCisj
ZGVmaW5lIFJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOCQlCSVQoMSkKKyNkZWZpbmUgUkdfRFNJX01Q
UExMX1NETV9QV1JfQUNLCUJJVCg4KQorCisjZGVmaW5lIE1JUElUWF9EU0lfU1dfQ1RSTAkweDgw
CisjZGVmaW5lIFNXX0NUUkxfRU4JCQlCSVQoMCkKKworI2RlZmluZSBNSVBJVFhfRFNJX1NXX0NU
UkxfQ09OMAkweDg0CisjZGVmaW5lIFNXX0xOVENfTFBUWF9QUkVfT0UJCUJJVCgwKQorI2RlZmlu
ZSBTV19MTlRDX0xQVFhfT0UJCQlCSVQoMSkKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX1AJCQlCSVQo
MikKKyNkZWZpbmUgU1dfTE5UQ19MUFRYX04JCQlCSVQoMykKKyNkZWZpbmUgU1dfTE5UQ19IU1RY
X1BSRV9PRQkJQklUKDQpCisjZGVmaW5lIFNXX0xOVENfSFNUWF9PRQkJCUJJVCg1KQorI2RlZmlu
ZSBTV19MTlRDX0hTVFhfWkVST0NMSwkJQklUKDYpCisjZGVmaW5lIFNXX0xOVDBfTFBUWF9QUkVf
T0UJCUJJVCg3KQorI2RlZmluZSBTV19MTlQwX0xQVFhfT0UJCQlCSVQoOCkKKyNkZWZpbmUgU1df
TE5UMF9MUFRYX1AJCQlCSVQoOSkKKyNkZWZpbmUgU1dfTE5UMF9MUFRYX04JCQlCSVQoMTApCisj
ZGVmaW5lIFNXX0xOVDBfSFNUWF9QUkVfT0UJCUJJVCgxMSkKKyNkZWZpbmUgU1dfTE5UMF9IU1RY
X09FCQkJQklUKDEyKQorI2RlZmluZSBTV19MTlQwX0xQUlhfRU4JCQlCSVQoMTMpCisjZGVmaW5l
IFNXX0xOVDFfTFBUWF9QUkVfT0UJCUJJVCgxNCkKKyNkZWZpbmUgU1dfTE5UMV9MUFRYX09FCQkJ
QklUKDE1KQorI2RlZmluZSBTV19MTlQxX0xQVFhfUAkJCUJJVCgxNikKKyNkZWZpbmUgU1dfTE5U
MV9MUFRYX04JCQlCSVQoMTcpCisjZGVmaW5lIFNXX0xOVDFfSFNUWF9QUkVfT0UJCUJJVCgxOCkK
KyNkZWZpbmUgU1dfTE5UMV9IU1RYX09FCQkJQklUKDE5KQorI2RlZmluZSBTV19MTlQyX0xQVFhf
UFJFX09FCQlCSVQoMjApCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9PRQkJCUJJVCgyMSkKKyNkZWZp
bmUgU1dfTE5UMl9MUFRYX1AJCQlCSVQoMjIpCisjZGVmaW5lIFNXX0xOVDJfTFBUWF9OCQkJQklU
KDIzKQorI2RlZmluZSBTV19MTlQyX0hTVFhfUFJFX09FCQlCSVQoMjQpCisjZGVmaW5lIFNXX0xO
VDJfSFNUWF9PRQkJCUJJVCgyNSkKKworc3RydWN0IG10a19taXBpX3R4IHsKKwlzdHJ1Y3QgZGV2
aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXVuc2lnbmVkIGludCBkYXRhX3JhdGU7
CisJc3RydWN0IGNsa19odyBwbGxfaHc7CisJc3RydWN0IGNsayAqcGxsOworfTsKKworc3RhdGlj
IHZvaWQgbXRrX21pcGlfdHhfbWFzayhzdHJ1Y3QgbXRrX21pcGlfdHggKm1pcGlfdHgsIHUzMiBv
ZmZzZXQsIHUzMiBtYXNrLAorCQkJICAgICB1MzIgZGF0YSkKK3sKKwl1MzIgdGVtcCA9IHJlYWRs
KG1pcGlfdHgtPnJlZ3MgKyBvZmZzZXQpOworCisJd3JpdGVsKCh0ZW1wICYgfm1hc2spIHwgKGRh
dGEgJiBtYXNrKSwgbWlwaV90eC0+cmVncyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgbXRr
X21pcGlfdHhfcGxsX3ByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCit7CisJc3RydWN0IG10a19t
aXBpX3R4ICptaXBpX3R4ID0gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgbXRrX21pcGlfdHgsCisJ
CQkJCQkgICBwbGxfaHcpOworCXVuc2lnbmVkIGludCB0eGRpdiwgdHhkaXYwLCB0eGRpdjE7CisJ
dTY0IHBjdzsKKworCWRldl9kYmcobWlwaV90eC0+ZGV2LCAicHJlcGFyZTogJXUgSHpcbiIsIG1p
cGlfdHgtPmRhdGFfcmF0ZSk7CisKKwlpZiAobWlwaV90eC0+ZGF0YV9yYXRlID49IDUwMDAwMDAw
MCkgeworCQl0eGRpdiA9IDE7CisJCXR4ZGl2MCA9IDA7CisJCXR4ZGl2MSA9IDA7CisJfSBlbHNl
IGlmIChtaXBpX3R4LT5kYXRhX3JhdGUgPj0gMjUwMDAwMDAwKSB7CisJCXR4ZGl2ID0gMjsKKwkJ
dHhkaXYwID0gMTsKKwkJdHhkaXYxID0gMDsKKwl9IGVsc2UgaWYgKG1pcGlfdHgtPmRhdGFfcmF0
ZSA+PSAxMjUwMDAwMDApIHsKKwkJdHhkaXYgPSA0OworCQl0eGRpdjAgPSAyOworCQl0eGRpdjEg
PSAwOworCX0gZWxzZSBpZiAobWlwaV90eC0+ZGF0YV9yYXRlID4gNjIwMDAwMDApIHsKKwkJdHhk
aXYgPSA4OworCQl0eGRpdjAgPSAyOworCQl0eGRpdjEgPSAxOworCX0gZWxzZSBpZiAobWlwaV90
eC0+ZGF0YV9yYXRlID49IDUwMDAwMDAwKSB7CisJCXR4ZGl2ID0gMTY7CisJCXR4ZGl2MCA9IDI7
CisJCXR4ZGl2MSA9IDI7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXRr
X21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0JHX0NPTiwKKwkJCSBSR19EU0lfVk9V
VF9NU0sgfCBSR19EU0lfQkdfQ0tFTiB8IFJHX0RTSV9CR19DT1JFX0VOLAorCQkJICg0IDw8IDIw
KSB8ICg0IDw8IDE3KSB8ICg0IDw8IDE0KSB8CisJCQkgKDQgPDwgMTEpIHwgKDQgPDwgOCkgfCAo
NCA8PCA1KSB8CisJCQkgUkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09SRV9FTik7CisKKwl1
c2xlZXBfcmFuZ2UoMzAsIDEwMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElU
WF9EU0lfVE9QX0NPTiwKKwkJCSBSR19EU0lfTE5UX0lNUF9DQUxfQ09ERSB8IFJHX0RTSV9MTlRf
SFNfQklBU19FTiwKKwkJCSAoOCA8PCA0KSB8IFJHX0RTSV9MTlRfSFNfQklBU19FTik7CisKKwlt
dGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfQ09OLAorCQkJIFJHX0RTSV9DS0df
TERPT1VUX0VOIHwgUkdfRFNJX0xET0NPUkVfRU4sCisJCQkgUkdfRFNJX0NLR19MRE9PVVRfRU4g
fCBSR19EU0lfTERPQ09SRV9FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElU
WF9EU0lfUExMX1BXUiwKKwkJCSBSR19EU0lfTVBQTExfU0RNX1BXUl9PTiB8IFJHX0RTSV9NUFBM
TF9TRE1fSVNPX0VOLAorCQkJIFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OKTsKKworCW10a19taXBp
X3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMCwgUkdfRFNJX01QUExMX1BMTF9F
TiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAs
CisJCQkgUkdfRFNJX01QUExMX1RYRElWMCB8IFJHX0RTSV9NUFBMTF9UWERJVjEgfAorCQkJIFJH
X0RTSV9NUFBMTF9QUkVESVYsCisJCQkgKHR4ZGl2MCA8PCAzKSB8ICh0eGRpdjEgPDwgNSkpOwor
CisJLyoKKwkgKiBQTEwgUENXIGNvbmZpZworCSAqIFBDVyBiaXQgMjR+MzAgPSBpbnRlZ2VyIHBh
cnQgb2YgcGN3CisJICogUENXIGJpdCAwfjIzID0gZnJhY3Rpb25hbCBwYXJ0IG9mIHBjdworCSAq
IHBjdyA9IGRhdGFfUmF0ZSo0KnR4ZGl2LyhSZWZfY2xrKjIpOworCSAqIFBvc3QgRElWID00LCBz
byBuZWVkIGRhdGFfUmF0ZSo0CisJICogUmVmX2NsayBpcyAyNk1IegorCSAqLworCXBjdyA9ICgo
dTY0KW1pcGlfdHgtPmRhdGFfcmF0ZSAqIDIgKiB0eGRpdikgPDwgMjQ7CisJcGN3IC89IDI2MDAw
MDAwOworCXdyaXRlbChwY3csIG1pcGlfdHgtPnJlZ3MgKyBNSVBJVFhfRFNJX1BMTF9DT04yKTsK
KworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9QTExfQ09OMSwKKwkJCSBS
R19EU0lfTVBQTExfU0RNX0ZSQV9FTiwgUkdfRFNJX01QUExMX1NETV9GUkFfRU4pOworCisJbXRr
X21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04wLAorCQkJIFJHX0RTSV9N
UFBMTF9QTExfRU4sIFJHX0RTSV9NUFBMTF9QTExfRU4pOworCisJdXNsZWVwX3JhbmdlKDIwLCAx
MDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX1BMTF9DT04xLAor
CQkJIFJHX0RTSV9NUFBMTF9TRE1fU1NDX0VOLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0
aWMgdm9pZCBtdGtfbWlwaV90eF9wbGxfdW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQorewor
CXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IG10
a19taXBpX3R4LAorCQkJCQkJICAgcGxsX2h3KTsKKworCWRldl9kYmcobWlwaV90eC0+ZGV2LCAi
dW5wcmVwYXJlXG4iKTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9Q
TExfQ09OMCwgUkdfRFNJX01QUExMX1BMTF9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9tYXNrKG1p
cGlfdHgsIE1JUElUWF9EU0lfUExMX1BXUiwKKwkJCSBSR19EU0lfTVBQTExfU0RNX0lTT19FTiB8
IFJHX0RTSV9NUFBMTF9TRE1fUFdSX09OLAorCQkJIFJHX0RTSV9NUFBMTF9TRE1fSVNPX0VOKTsK
KworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9UT1BfQ09OLCBSR19EU0lf
TE5UX0hTX0JJQVNfRU4sIDApOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhf
RFNJX0NPTiwKKwkJCSBSR19EU0lfQ0tHX0xET09VVF9FTiB8IFJHX0RTSV9MRE9DT1JFX0VOLCAw
KTsKKworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9CR19DT04sCisJCQkg
UkdfRFNJX0JHX0NLRU4gfCBSR19EU0lfQkdfQ09SRV9FTiwgMCk7CisKKwltdGtfbWlwaV90eF9t
YXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfUExMX0NPTjAsIFJHX0RTSV9NUFBMTF9ESVZfTVNLLCAw
KTsKK30KKworc3RhdGljIGxvbmcgbXRrX21pcGlfdHhfcGxsX3JvdW5kX3JhdGUoc3RydWN0IGNs
a19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAq
cHJhdGUpCit7CisJcmV0dXJuIGNsYW1wX3ZhbChyYXRlLCA1MDAwMDAwMCwgMTI1MDAwMDAwMCk7
Cit9CisKK3N0YXRpYyBpbnQgbXRrX21pcGlfdHhfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcg
Kmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3Jh
dGUpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gY29udGFpbmVyX29mKGh3LCBz
dHJ1Y3QgbXRrX21pcGlfdHgsCisJCQkJCQkgICBwbGxfaHcpOworCisJZGV2X2RiZyhtaXBpX3R4
LT5kZXYsICJzZXQgcmF0ZTogJWx1IEh6XG4iLCByYXRlKTsKKworCW1pcGlfdHgtPmRhdGFfcmF0
ZSA9IHJhdGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXRrX21p
cGlfdHhfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCQkJIHVuc2lnbmVk
IGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gY29u
dGFpbmVyX29mKGh3LCBzdHJ1Y3QgbXRrX21pcGlfdHgsCisJCQkJCQkgICBwbGxfaHcpOworCXJl
dHVybiBtaXBpX3R4LT5kYXRhX3JhdGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBtdGtf
bWlwaV90eF9wbGxfb3BzID0geworCS5wcmVwYXJlID0gbXRrX21pcGlfdHhfcGxsX3ByZXBhcmUs
CisJLnVucHJlcGFyZSA9IG10a19taXBpX3R4X3BsbF91bnByZXBhcmUsCisJLnJvdW5kX3JhdGUg
PSBtdGtfbWlwaV90eF9wbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSBtdGtfbWlwaV90eF9w
bGxfc2V0X3JhdGUsCisJLnJlY2FsY19yYXRlID0gbXRrX21pcGlfdHhfcGxsX3JlY2FsY19yYXRl
LAorfTsKKworc3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9vbl9zaWduYWwoc3RydWN0IHBo
eSAqcGh5KQoreworCXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2ZGF0
YShwaHkpOworCisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0NMT0NLX0xB
TkUsCisJCQlSR19EU0lfTE5UQ19MRE9PVVRfRU4sIFJHX0RTSV9MTlRDX0xET09VVF9FTik7CisJ
bXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTAsCisJCQlSR19E
U0lfTE5UMF9MRE9PVVRfRU4sIFJHX0RTSV9MTlQwX0xET09VVF9FTik7CisJbXRrX21pcGlfdHhf
bWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTEsCisJCQlSR19EU0lfTE5UMV9MRE9P
VVRfRU4sIFJHX0RTSV9MTlQxX0xET09VVF9FTik7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4
LCBNSVBJVFhfRFNJX0RBVEFfTEFORTIsCisJCQlSR19EU0lfTE5UMl9MRE9PVVRfRU4sIFJHX0RT
SV9MTlQyX0xET09VVF9FTik7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJ
X0RBVEFfTEFORTMsCisJCQlSR19EU0lfTE5UM19MRE9PVVRfRU4sIFJHX0RTSV9MTlQzX0xET09V
VF9FTik7CisKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwg
UkdfRFNJX1BBRF9USUVfTE9XX0VOLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50
IG10a19taXBpX3R4X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX21p
cGlfdHggKm1pcGlfdHggPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwlpbnQgcmV0OworCisJLyog
UG93ZXIgdXAgY29yZSBhbmQgZW5hYmxlIFBMTCAqLworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJs
ZShtaXBpX3R4LT5wbGwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogRW5h
YmxlIERTSSBMYW5lIExETyBvdXRwdXRzLCBkaXNhYmxlIHBhZCB0aWUgbG93ICovCisJbXRrX21p
cGlfdHhfcG93ZXJfb25fc2lnbmFsKHBoeSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv
aWQgbXRrX21pcGlfdHhfcG93ZXJfb2ZmX3NpZ25hbChzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3Ry
dWN0IG10a19taXBpX3R4ICptaXBpX3R4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisKKwltdGtf
bWlwaV90eF9tYXNrKG1pcGlfdHgsIE1JUElUWF9EU0lfVE9QX0NPTiwgUkdfRFNJX1BBRF9USUVf
TE9XX0VOLAorCQkJUkdfRFNJX1BBRF9USUVfTE9XX0VOKTsKKworCW10a19taXBpX3R4X21hc2so
bWlwaV90eCwgTUlQSVRYX0RTSV9DTE9DS19MQU5FLAorCQkJIFJHX0RTSV9MTlRDX0xET09VVF9F
TiwgMCk7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBNSVBJVFhfRFNJX0RBVEFfTEFORTAs
CisJCQkgUkdfRFNJX0xOVDBfTERPT1VUX0VOLCAwKTsKKwltdGtfbWlwaV90eF9tYXNrKG1pcGlf
dHgsIE1JUElUWF9EU0lfREFUQV9MQU5FMSwKKwkJCSBSR19EU0lfTE5UMV9MRE9PVVRfRU4sIDAp
OworCW10a19taXBpX3R4X21hc2sobWlwaV90eCwgTUlQSVRYX0RTSV9EQVRBX0xBTkUyLAorCQkJ
IFJHX0RTSV9MTlQyX0xET09VVF9FTiwgMCk7CisJbXRrX21pcGlfdHhfbWFzayhtaXBpX3R4LCBN
SVBJVFhfRFNJX0RBVEFfTEFORTMsCisJCQkgUkdfRFNJX0xOVDNfTERPT1VUX0VOLCAwKTsKK30K
Kworc3RhdGljIGludCBtdGtfbWlwaV90eF9wb3dlcl9vZmYoc3RydWN0IHBoeSAqcGh5KQorewor
CXN0cnVjdCBtdGtfbWlwaV90eCAqbWlwaV90eCA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCisJ
LyogRW5hYmxlIHBhZCB0aWUgbG93LCBkaXNhYmxlIERTSSBMYW5lIExETyBvdXRwdXRzICovCisJ
bXRrX21pcGlfdHhfcG93ZXJfb2ZmX3NpZ25hbChwaHkpOworCisJLyogRGlzYWJsZSBQTEwgYW5k
IHBvd2VyIGRvd24gY29yZSAqLworCWNsa19kaXNhYmxlX3VucHJlcGFyZShtaXBpX3R4LT5wbGwp
OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X29wcyBtdGtfbWlwaV90eF9v
cHMgPSB7CisJLnBvd2VyX29uID0gbXRrX21pcGlfdHhfcG93ZXJfb24sCisJLnBvd2VyX29mZiA9
IG10a19taXBpX3R4X3Bvd2VyX29mZiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0
YXRpYyBpbnQgbXRrX21pcGlfdHhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK
K3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfbWlwaV90
eCAqbWlwaV90eDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgY2xrICpyZWZfY2xr
OworCWNvbnN0IGNoYXIgKnJlZl9jbGtfbmFtZTsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBjbGtf
aW5pdCA9IHsKKwkJLm9wcyA9ICZtdGtfbWlwaV90eF9wbGxfb3BzLAorCQkubnVtX3BhcmVudHMg
PSAxLAorCQkucGFyZW50X25hbWVzID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKSZyZWZfY2xrX25h
bWUsCisJCS5mbGFncyA9IENMS19TRVRfUkFURV9HQVRFLAorCX07CisJc3RydWN0IHBoeSAqcGh5
OworCXN0cnVjdCBwaHlfcHJvdmlkZXIgKnBoeV9wcm92aWRlcjsKKwlpbnQgcmV0OworCisJbWlw
aV90eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWlwaV90eCksIEdGUF9LRVJORUwpOwor
CWlmICghbWlwaV90eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRf
cmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCW1pcGlfdHgtPnJlZ3MgPSBkZXZt
X2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIobWlwaV90eC0+cmVncykp
IHsKKwkJcmV0ID0gUFRSX0VSUihtaXBpX3R4LT5yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWls
ZWQgdG8gZ2V0IG1lbW9yeSByZXNvdXJjZTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ
fQorCisJcmVmX2NsayA9IGRldm1fY2xrX2dldChkZXYsIE5VTEwpOworCWlmIChJU19FUlIocmVm
X2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihyZWZfY2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWls
ZWQgdG8gZ2V0IHJlZmVyZW5jZSBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ
fQorCXJlZl9jbGtfbmFtZSA9IF9fY2xrX2dldF9uYW1lKHJlZl9jbGspOworCisJcmV0ID0gb2Zf
cHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LT5vZl9ub2RlLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwK
KwkJCQkgICAgICAmY2xrX2luaXQubmFtZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihk
ZXYsICJGYWlsZWQgdG8gcmVhZCBjbG9jay1vdXRwdXQtbmFtZXM6ICVkXG4iLCByZXQpOworCQly
ZXR1cm4gcmV0OworCX0KKworCW1pcGlfdHgtPnBsbF9ody5pbml0ID0gJmNsa19pbml0OworCW1p
cGlfdHgtPnBsbCA9IGRldm1fY2xrX3JlZ2lzdGVyKGRldiwgJm1pcGlfdHgtPnBsbF9odyk7CisJ
aWYgKElTX0VSUihtaXBpX3R4LT5wbGwpKSB7CisJCXJldCA9IFBUUl9FUlIobWlwaV90eC0+cGxs
KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgUExMOiAlZFxuIiwgcmV0KTsK
KwkJcmV0dXJuIHJldDsKKwl9CisKKwlwaHkgPSBkZXZtX3BoeV9jcmVhdGUoZGV2LCBOVUxMLCAm
bXRrX21pcGlfdHhfb3BzKTsKKwlpZiAoSVNfRVJSKHBoeSkpIHsKKwkJcmV0ID0gUFRSX0VSUihw
aHkpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgTUlQSSBELVBIWTogJWRcbiIs
IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXBoeV9zZXRfZHJ2ZGF0YShwaHksIG1pcGlfdHgp
OworCisJcGh5X3Byb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCBv
Zl9waHlfc2ltcGxlX3hsYXRlKTsKKwlpZiAoSVNfRVJSKHBoeSkpIHsKKwkJcmV0ID0gUFRSX0VS
UihwaHlfcHJvdmlkZXIpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1pcGlfdHgtPmRldiA9IGRl
djsKKworCXJldHVybiBvZl9jbGtfYWRkX3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwgb2ZfY2xrX3Ny
Y19zaW1wbGVfZ2V0LAorCQkJCSAgIG1pcGlfdHgtPnBsbCk7Cit9CisKK3N0YXRpYyBpbnQgbXRr
X21pcGlfdHhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJb2ZfY2xr
X2RlbF9wcm92aWRlcihwZGV2LT5kZXYub2Zfbm9kZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19taXBpX3R4X21hdGNoW10gPSB7CisJeyAu
Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbWlwaS10eCIsIH0sCisJe30sCit9OworCitz
dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19taXBpX3R4X2RyaXZlciA9IHsKKwkucHJvYmUgPSBt
dGtfbWlwaV90eF9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX21pcGlfdHhfcmVtb3ZlLAorCS5kcml2
ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLW1pcGktdHgiLAorCQkub2ZfbWF0Y2hfdGFibGUg
PSBtdGtfbWlwaV90eF9tYXRjaCwKKwl9LAorfTsKLS0gCjIuNi4yCgpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy
aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=