Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 31 Mar 2017 16:05:07 +0200
From:      Marcin Wojtas <mw@semihalf.com>
To:        freebsd-arm@freebsd.org
Subject:   Re: Coherent bus_dma for ARMv7
Message-ID:  <CAPv3WKcG_Y=5zPk-2vGbQfCpiNcWvuUymY8EHRnWsM2FUzcG4Q@mail.gmail.com>
In-Reply-To: <CAPv3WKejupH4JG1=_XV6PknnKifxbF0qoVubtMRVtZWEoBZ7xg@mail.gmail.com>
References:  <CAPv3WKejupH4JG1=_XV6PknnKifxbF0qoVubtMRVtZWEoBZ7xg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--001a113ec89c0de2a2054c074ca8
Content-Type: text/plain; charset=UTF-8

Patch with the coherent bus_dma support attached.

Marcin

2017-03-31 16:01 GMT+02:00 Marcin Wojtas <mw@semihalf.com>:
> Hi,
>
> In current FreeBSD-HEAD ARMv7 platforms, which support hardware IO
> cache coherency cannot make use of this feature. In our project we
> implemented coherent variant bus_dma, which is basing on x86 and arm64
> approach. Using of above solution is not obligatory and depends on
> setting newly added option for that purpose.
>
> Needless to say, our platform (Marvell Armada 38x) IO performance
> boosted after switching to it. Do you wish to enable such option in
> HEAD?
>
> Regards,
> Marcin

--001a113ec89c0de2a2054c074ca8
Content-Type: application/octet-stream; 
	name="0001-Introduce-preliminary-version-of-coherent-DMA-for-AR.patch"
Content-Disposition: attachment; 
	filename="0001-Introduce-preliminary-version-of-coherent-DMA-for-AR.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_j0xwi9m40

RnJvbSBlMjJiZTYzNTQ0MGEwYzNiNWY3OTdjMmNkNGNkOThmODUxNmMyZjE1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBaYmlnbmlldyBCb2RlayA8emJiQHNlbWloYWxmLmNvbT4KRGF0
ZTogV2VkLCAyNCBBdWcgMjAxNiAyMTowMTowOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEludHJv
ZHVjZSBwcmVsaW1pbmFyeSB2ZXJzaW9uIG9mIGNvaGVyZW50IERNQSBmb3IgQVJNCgotIEJhc2Vk
IG9uIHg4NiBpbXBsZW1lbnRhdGlvbiB3aXRoIGJ1c19kbWFtYXBfc3luYygpCiAgaW5zcGlyZWQg
YnkgYXJtNjQgb25lLgotIE5vdCBzdXJlIHdoeSBEU0Igd2FzIHVzZWQgaW5zdGVhZCBvZiBETUIg
YnV0IHRoaXMgc2hvdWxkCiAgbm90IGNhdXNlIGFueSBpbXBhY3Qgb24gZGF0YSB2YWxpZGl0eSBi
dXQgcmF0aGVyIG9uIHNwZWVkLgotLS0KIHN5cy9hcm0vYXJtL2J1c2RtYV9ib3VuY2UuYyAgICAg
ICAgICAgfCAxMDg4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3lzL2FybS9h
cm0vYnVzZG1hX21hY2hkZXAtY29oZXJlbnQuYyB8ICAzNTkgKysrKysrKysrKysKIHN5cy9hcm0v
aW5jbHVkZS9idXNkbWFfaW1wbC5oICAgICAgICAgfCAgIDk2ICsrKwogc3lzL2NvbmYvZmlsZXMu
YXJtICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KIHN5cy9jb25mL29wdGlvbnMuYXJtICAg
ICAgICAgICAgICAgICAgfCAgICAxICsKIDUgZmlsZXMgY2hhbmdlZCwgMTU0OCBpbnNlcnRpb25z
KCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN5cy9hcm0vYXJtL2J1c2Rt
YV9ib3VuY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN5cy9hcm0vYXJtL2J1c2RtYV9tYWNoZGVw
LWNvaGVyZW50LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXMvYXJtL2luY2x1ZGUvYnVzZG1hX2lt
cGwuaAoKZGlmZiAtLWdpdCBhL3N5cy9hcm0vYXJtL2J1c2RtYV9ib3VuY2UuYyBiL3N5cy9hcm0v
YXJtL2J1c2RtYV9ib3VuY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
M2Q3OTdhCi0tLSAvZGV2L251bGwKKysrIGIvc3lzL2FybS9hcm0vYnVzZG1hX2JvdW5jZS5jCkBA
IC0wLDAgKzEsMTA4OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTggSnVzdGlu
IFQuIEdpYmJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAg
d2l0aG91dCBtb2RpZmljYXRpb24sIGltbWVkaWF0ZWx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl
IGZpbGUuCisgKiAyLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICog
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9j
ZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+
CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1
ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8c3lz
L2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9rdHIuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgor
I2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL21lbWRlc2MuaD4KKyNpbmNsdWRl
IDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3Vp
by5oPgorCisjaW5jbHVkZSA8dm0vdm0uaD4KKyNpbmNsdWRlIDx2bS92bV9leHRlcm4uaD4KKyNp
bmNsdWRlIDx2bS92bV9rZXJuLmg+CisjaW5jbHVkZSA8dm0vdm1fcGFnZS5oPgorI2luY2x1ZGUg
PHZtL3ZtX21hcC5oPgorCisjaW5jbHVkZSA8bWFjaGluZS9hdG9taWMuaD4KKyNpbmNsdWRlIDxt
YWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvbWRfdmFyLmg+CisjaW5jbHVkZSA8bWFj
aGluZS9idXNkbWFfaW1wbC5oPgorCisjZGVmaW5lIE1BWF9CUEFHRVMgNjQKKworZW51bSB7CisJ
QlVTX0RNQV9DT1VMRF9CT1VOQ0UJPSAweDAxLAorCUJVU19ETUFfTUlOX0FMTE9DX0NPTVAJPSAw
eDAyLAorCUJVU19ETUFfS01FTV9BTExPQwk9IDB4MDQsCit9OworCitzdHJ1Y3QgYm91bmNlX3pv
bmU7CisKK3N0cnVjdCBidXNfZG1hX3RhZyB7CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiBj
b21tb247CisJaW50CQkJbWFwX2NvdW50OworCWludAkJCWJvdW5jZV9mbGFnczsKKwlidXNfZG1h
X3NlZ21lbnRfdAkqc2VnbWVudHM7CisJc3RydWN0IGJvdW5jZV96b25lCSpib3VuY2Vfem9uZTsK
K307CisKK3N0cnVjdCBib3VuY2VfcGFnZSB7CisJdm1fb2Zmc2V0X3QJdmFkZHI7CQkvKiBrdmEg
b2YgYm91bmNlIGJ1ZmZlciAqLworCWJ1c19hZGRyX3QJYnVzYWRkcjsJLyogUGh5c2ljYWwgYWRk
cmVzcyAqLworCXZtX29mZnNldF90CWRhdGF2YWRkcjsJLyoga3ZhIG9mIGNsaWVudCBkYXRhICov
CisJYnVzX2FkZHJfdAlkYXRhYWRkcjsJLyogY2xpZW50IHBoeXNpY2FsIGFkZHJlc3MgKi8KKwli
dXNfc2l6ZV90CWRhdGFjb3VudDsJLyogY2xpZW50IGRhdGEgY291bnQgKi8KKwlTVEFJTFFfRU5U
UlkoYm91bmNlX3BhZ2UpIGxpbmtzOworfTsKKworaW50IGJ1c2RtYV9zd2lfcGVuZGluZzsKKwor
c3RydWN0IGJvdW5jZV96b25lIHsKKwlTVEFJTFFfRU5UUlkoYm91bmNlX3pvbmUpIGxpbmtzOwor
CVNUQUlMUV9IRUFEKGJwX2xpc3QsIGJvdW5jZV9wYWdlKSBib3VuY2VfcGFnZV9saXN0OworCWlu
dAkJdG90YWxfYnBhZ2VzOworCWludAkJZnJlZV9icGFnZXM7CisJaW50CQlyZXNlcnZlZF9icGFn
ZXM7CisJaW50CQlhY3RpdmVfYnBhZ2VzOworCWludAkJdG90YWxfYm91bmNlZDsKKwlpbnQJCXRv
dGFsX2RlZmVycmVkOworCWludAkJbWFwX2NvdW50OworCWJ1c19zaXplX3QJYWxpZ25tZW50Owor
CWJ1c19hZGRyX3QJbG93YWRkcjsKKwljaGFyCQl6b25laWRbOF07CisJY2hhcgkJbG93YWRkcmlk
WzIwXTsKKwlzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0IHN5c2N0bF90cmVlOworCXN0cnVjdCBzeXNj
dGxfb2lkICpzeXNjdGxfdHJlZV90b3A7Cit9OworCitzdGF0aWMgc3RydWN0IG10eCBib3VuY2Vf
bG9jazsKK3N0YXRpYyBpbnQgdG90YWxfYnBhZ2VzOworc3RhdGljIGludCBidXNkbWFfem9uZWNv
dW50Oworc3RhdGljIFNUQUlMUV9IRUFEKCwgYm91bmNlX3pvbmUpIGJvdW5jZV96b25lX2xpc3Q7
CisKK3N0YXRpYyBTWVNDVExfTk9ERShfaHcsIE9JRF9BVVRPLCBidXNkbWEsIENUTEZMQUdfUkQs
IDAsICJCdXNkbWEgcGFyYW1ldGVycyIpOworU1lTQ1RMX0lOVChfaHdfYnVzZG1hLCBPSURfQVVU
TywgdG90YWxfYnBhZ2VzLCBDVExGTEFHX1JELCAmdG90YWxfYnBhZ2VzLCAwLAorCSAgICJUb3Rh
bCBib3VuY2UgcGFnZXMiKTsKKworc3RydWN0IGJ1c19kbWFtYXAgeworCXN0cnVjdCBicF9saXN0
CSAgICAgICBicGFnZXM7CisJaW50CQkgICAgICAgcGFnZXNuZWVkZWQ7CisJaW50CQkgICAgICAg
cGFnZXNyZXNlcnZlZDsKKwlidXNfZG1hX3RhZ190CSAgICAgICBkbWF0OworCXN0cnVjdCBtZW1k
ZXNjCSAgICAgICBtZW07CisJYnVzX2RtYW1hcF9jYWxsYmFja190ICpjYWxsYmFjazsKKwl2b2lk
CQkgICAgICAqY2FsbGJhY2tfYXJnOworCVNUQUlMUV9FTlRSWShidXNfZG1hbWFwKSBsaW5rczsK
K307CisKK3N0YXRpYyBTVEFJTFFfSEVBRCgsIGJ1c19kbWFtYXApIGJvdW5jZV9tYXBfd2FpdGlu
Z2xpc3Q7CitzdGF0aWMgU1RBSUxRX0hFQUQoLCBidXNfZG1hbWFwKSBib3VuY2VfbWFwX2NhbGxi
YWNrbGlzdDsKK3N0YXRpYyBzdHJ1Y3QgYnVzX2RtYW1hcCBub2JvdW5jZV9kbWFtYXA7CisKK3N0
YXRpYyB2b2lkIGluaXRfYm91bmNlX3BhZ2VzKHZvaWQgKmR1bW15KTsKK3N0YXRpYyBpbnQgYWxs
b2NfYm91bmNlX3pvbmUoYnVzX2RtYV90YWdfdCBkbWF0KTsKK3N0YXRpYyBpbnQgYWxsb2NfYm91
bmNlX3BhZ2VzKGJ1c19kbWFfdGFnX3QgZG1hdCwgdV9pbnQgbnVtcGFnZXMpOworc3RhdGljIGlu
dCByZXNlcnZlX2JvdW5jZV9wYWdlcyhidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBt
YXAsCisJCQkJaW50IGNvbW1pdCk7CitzdGF0aWMgYnVzX2FkZHJfdCBhZGRfYm91bmNlX3BhZ2Uo
YnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorCQkJCSAgdm1fb2Zmc2V0X3Qg
dmFkZHIsIGJ1c19hZGRyX3QgYWRkciwKKwkJCQkgIGJ1c19zaXplX3Qgc2l6ZSk7CitzdGF0aWMg
dm9pZCBmcmVlX2JvdW5jZV9wYWdlKGJ1c19kbWFfdGFnX3QgZG1hdCwgc3RydWN0IGJvdW5jZV9w
YWdlICpicGFnZSk7CitpbnQgcnVuX2ZpbHRlcihidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19hZGRy
X3QgcGFkZHIpOworc3RhdGljIHZvaWQgX2J1c19kbWFtYXBfY291bnRfcGFnZXMoYnVzX2RtYV90
YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorCQkJCSAgICBwbWFwX3QgcG1hcCwgdm9pZCAq
YnVmLCBidXNfc2l6ZV90IGJ1ZmxlbiwKKwkJCQkgICAgaW50IGZsYWdzKTsKK3N0YXRpYyB2b2lk
IF9idXNfZG1hbWFwX2NvdW50X3BoeXMoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3Qg
bWFwLAorCQkJCSAgIHZtX3BhZGRyX3QgYnVmLCBidXNfc2l6ZV90IGJ1ZmxlbiwKKwkJCQkgICBp
bnQgZmxhZ3MpOworc3RhdGljIGludCBfYnVzX2RtYW1hcF9yZXNlcnZlX3BhZ2VzKGJ1c19kbWFf
dGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKwkJCQkgICAgIGludCBmbGFncyk7CisvKgor
ICogQWxsb2NhdGUgYSBkZXZpY2Ugc3BlY2lmaWMgZG1hX3RhZy4KKyAqLworc3RhdGljIGludAor
Ym91bmNlX2J1c19kbWFfdGFnX2NyZWF0ZShidXNfZG1hX3RhZ190IHBhcmVudCwgYnVzX3NpemVf
dCBhbGlnbm1lbnQsCisgICAgYnVzX2FkZHJfdCBib3VuZGFyeSwgYnVzX2FkZHJfdCBsb3dhZGRy
LCBidXNfYWRkcl90IGhpZ2hhZGRyLAorICAgIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlciwgdm9p
ZCAqZmlsdGVyYXJnLCBidXNfc2l6ZV90IG1heHNpemUsCisgICAgaW50IG5zZWdtZW50cywgYnVz
X3NpemVfdCBtYXhzZWdzeiwgaW50IGZsYWdzLCBidXNfZG1hX2xvY2tfdCAqbG9ja2Z1bmMsCisg
ICAgdm9pZCAqbG9ja2Z1bmNhcmcsIGJ1c19kbWFfdGFnX3QgKmRtYXQpCit7CisJYnVzX2RtYV90
YWdfdCBuZXd0YWc7CisJaW50IGVycm9yOworCisJKmRtYXQgPSBOVUxMOworCWVycm9yID0gY29t
bW9uX2J1c19kbWFfdGFnX2NyZWF0ZShwYXJlbnQgIT0gTlVMTCA/ICZwYXJlbnQtPmNvbW1vbiA6
CisJICAgIE5VTEwsIGFsaWdubWVudCwgYm91bmRhcnksIGxvd2FkZHIsIGhpZ2hhZGRyLCBmaWx0
ZXIsIGZpbHRlcmFyZywKKwkgICAgbWF4c2l6ZSwgbnNlZ21lbnRzLCBtYXhzZWdzeiwgZmxhZ3Ms
IGxvY2tmdW5jLCBsb2NrZnVuY2FyZywKKwkgICAgc2l6ZW9mIChzdHJ1Y3QgYnVzX2RtYV90YWcp
LCAodm9pZCAqKikmbmV3dGFnKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChlcnJvcik7
CisKKwluZXd0YWctPmNvbW1vbi5pbXBsID0gJmJ1c19kbWFfYm91bmNlX2ltcGw7CisJbmV3dGFn
LT5tYXBfY291bnQgPSAwOworCW5ld3RhZy0+c2VnbWVudHMgPSBOVUxMOworCisJaWYgKHBhcmVu
dCAhPSBOVUxMICYmICgobmV3dGFnLT5jb21tb24uZmlsdGVyICE9IE5VTEwpIHx8CisJICAgICgo
cGFyZW50LT5ib3VuY2VfZmxhZ3MgJiBCVVNfRE1BX0NPVUxEX0JPVU5DRSkgIT0gMCkpKQorCQlu
ZXd0YWctPmJvdW5jZV9mbGFncyB8PSBCVVNfRE1BX0NPVUxEX0JPVU5DRTsKKworCWlmIChuZXd0
YWctPmNvbW1vbi5sb3dhZGRyIDwgcHRvYSgodm1fcGFkZHJfdClNYXhtZW0pIHx8CisJICAgIG5l
d3RhZy0+Y29tbW9uLmFsaWdubWVudCA+IDEpCisJCW5ld3RhZy0+Ym91bmNlX2ZsYWdzIHw9IEJV
U19ETUFfQ09VTERfQk9VTkNFOworCisJaWYgKCgobmV3dGFnLT5ib3VuY2VfZmxhZ3MgJiBCVVNf
RE1BX0NPVUxEX0JPVU5DRSkgIT0gMCkgJiYKKwkgICAgKGZsYWdzICYgQlVTX0RNQV9BTExPQ05P
VykgIT0gMCkgeworCQlzdHJ1Y3QgYm91bmNlX3pvbmUgKmJ6OworCisJCS8qIE11c3QgYm91bmNl
ICovCisJCWlmICgoZXJyb3IgPSBhbGxvY19ib3VuY2Vfem9uZShuZXd0YWcpKSAhPSAwKSB7CisJ
CQlmcmVlKG5ld3RhZywgTV9ERVZCVUYpOworCQkJcmV0dXJuIChlcnJvcik7CisJCX0KKwkJYnog
PSBuZXd0YWctPmJvdW5jZV96b25lOworCisJCWlmIChwdG9hKGJ6LT50b3RhbF9icGFnZXMpIDwg
bWF4c2l6ZSkgeworCQkJaW50IHBhZ2VzOworCisJCQlwYWdlcyA9IGF0b3AobWF4c2l6ZSkgLSBi
ei0+dG90YWxfYnBhZ2VzOworCisJCQkvKiBBZGQgcGFnZXMgdG8gb3VyIGJvdW5jZSBwb29sICov
CisJCQlpZiAoYWxsb2NfYm91bmNlX3BhZ2VzKG5ld3RhZywgcGFnZXMpIDwgcGFnZXMpCisJCQkJ
ZXJyb3IgPSBFTk9NRU07CisJCX0KKwkJLyogUGVyZm9ybWVkIGluaXRpYWwgYWxsb2NhdGlvbiAq
LworCQluZXd0YWctPmJvdW5jZV9mbGFncyB8PSBCVVNfRE1BX01JTl9BTExPQ19DT01QOworCX0g
ZWxzZQorCQllcnJvciA9IDA7CisJCisJaWYgKGVycm9yICE9IDApCisJCWZyZWUobmV3dGFnLCBN
X0RFVkJVRik7CisJZWxzZQorCQkqZG1hdCA9IG5ld3RhZzsKKwlDVFI0KEtUUl9CVVNETUEsICIl
cyByZXR1cm5lZCB0YWcgJXAgdGFnIGZsYWdzIDB4JXggZXJyb3IgJWQiLAorCSAgICBfX2Z1bmNf
XywgbmV3dGFnLCAobmV3dGFnICE9IE5VTEwgPyBuZXd0YWctPmNvbW1vbi5mbGFncyA6IDApLAor
CSAgICBlcnJvcik7CisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQKK2JvdW5jZV9i
dXNfZG1hX3RhZ19kZXN0cm95KGJ1c19kbWFfdGFnX3QgZG1hdCkKK3sKKwlidXNfZG1hX3RhZ190
IGRtYXRfY29weSwgcGFyZW50OworCWludCBlcnJvcjsKKworCWVycm9yID0gMDsKKwlkbWF0X2Nv
cHkgPSBkbWF0OworCisJaWYgKGRtYXQgIT0gTlVMTCkgeworCQlpZiAoZG1hdC0+bWFwX2NvdW50
ICE9IDApIHsKKwkJCWVycm9yID0gRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCQl3aGlsZSAo
ZG1hdCAhPSBOVUxMKSB7CisJCQlwYXJlbnQgPSAoYnVzX2RtYV90YWdfdClkbWF0LT5jb21tb24u
cGFyZW50OworCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmZG1hdC0+Y29tbW9uLnJlZl9jb3VudCwg
MSk7CisJCQlpZiAoZG1hdC0+Y29tbW9uLnJlZl9jb3VudCA9PSAwKSB7CisJCQkJaWYgKGRtYXQt
PnNlZ21lbnRzICE9IE5VTEwpCisJCQkJCWZyZWUoZG1hdC0+c2VnbWVudHMsIE1fREVWQlVGKTsK
KwkJCQlmcmVlKGRtYXQsIE1fREVWQlVGKTsKKwkJCQkvKgorCQkJCSAqIExhc3QgcmVmZXJlbmNl
IGNvdW50LCBzbworCQkJCSAqIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZQorCQkJCSAqIGNvdW50IG9u
IG91ciBwYXJlbnQuCisJCQkJICovCisJCQkJZG1hdCA9IHBhcmVudDsKKwkJCX0gZWxzZQorCQkJ
CWRtYXQgPSBOVUxMOworCQl9CisJfQorb3V0OgorCUNUUjMoS1RSX0JVU0RNQSwgIiVzIHRhZyAl
cCBlcnJvciAlZCIsIF9fZnVuY19fLCBkbWF0X2NvcHksIGVycm9yKTsKKwlyZXR1cm4gKGVycm9y
KTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgaGFuZGxlIGZvciBtYXBwaW5nIGZyb20ga3ZhL3V2
YS9waHlzaWNhbAorICogYWRkcmVzcyBzcGFjZSBpbnRvIGJ1cyBkZXZpY2Ugc3BhY2UuCisgKi8K
K3N0YXRpYyBpbnQKK2JvdW5jZV9idXNfZG1hbWFwX2NyZWF0ZShidXNfZG1hX3RhZ190IGRtYXQs
IGludCBmbGFncywgYnVzX2RtYW1hcF90ICptYXBwKQoreworCXN0cnVjdCBib3VuY2Vfem9uZSAq
Yno7CisJaW50IGVycm9yLCBtYXhwYWdlcywgcGFnZXM7CisKKwllcnJvciA9IDA7CisKKwlpZiAo
ZG1hdC0+c2VnbWVudHMgPT0gTlVMTCkgeworCQlkbWF0LT5zZWdtZW50cyA9IChidXNfZG1hX3Nl
Z21lbnRfdCAqKW1hbGxvYygKKwkJICAgIHNpemVvZihidXNfZG1hX3NlZ21lbnRfdCkgKiBkbWF0
LT5jb21tb24ubnNlZ21lbnRzLAorCQkgICAgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwkJaWYgKGRt
YXQtPnNlZ21lbnRzID09IE5VTEwpIHsKKwkJCUNUUjMoS1RSX0JVU0RNQSwgIiVzOiB0YWcgJXAg
ZXJyb3IgJWQiLAorCQkJICAgIF9fZnVuY19fLCBkbWF0LCBFTk9NRU0pOworCQkJcmV0dXJuIChF
Tk9NRU0pOworCQl9CisJfQorCisJLyoKKwkgKiBCb3VuY2luZyBtaWdodCBiZSByZXF1aXJlZCBp
ZiB0aGUgZHJpdmVyIGFza3MgZm9yIGFuIGFjdGl2ZQorCSAqIGV4Y2x1c2lvbiByZWdpb24sIGEg
ZGF0YSBhbGlnbm1lbnQgdGhhdCBpcyBzdHJpY3RlciB0aGFuIDEsIGFuZC9vcgorCSAqIGFuIGFj
dGl2ZSBhZGRyZXNzIGJvdW5kYXJ5LgorCSAqLworCWlmIChkbWF0LT5ib3VuY2VfZmxhZ3MgJiBC
VVNfRE1BX0NPVUxEX0JPVU5DRSkgeworCQkvKiBNdXN0IGJvdW5jZSAqLworCQlpZiAoZG1hdC0+
Ym91bmNlX3pvbmUgPT0gTlVMTCkgeworCQkJaWYgKChlcnJvciA9IGFsbG9jX2JvdW5jZV96b25l
KGRtYXQpKSAhPSAwKQorCQkJCXJldHVybiAoZXJyb3IpOworCQl9CisJCWJ6ID0gZG1hdC0+Ym91
bmNlX3pvbmU7CisKKwkJKm1hcHAgPSAoYnVzX2RtYW1hcF90KW1hbGxvYyhzaXplb2YoKiptYXBw
KSwgTV9ERVZCVUYsCisJCSAgICBNX05PV0FJVCB8IE1fWkVSTyk7CisJCWlmICgqbWFwcCA9PSBO
VUxMKSB7CisJCQlDVFIzKEtUUl9CVVNETUEsICIlczogdGFnICVwIGVycm9yICVkIiwKKwkJCSAg
ICBfX2Z1bmNfXywgZG1hdCwgRU5PTUVNKTsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQorCisJ
CS8qIEluaXRpYWxpemUgdGhlIG5ldyBtYXAgKi8KKwkJU1RBSUxRX0lOSVQoJigoKm1hcHApLT5i
cGFnZXMpKTsKKworCQkvKgorCQkgKiBBdHRlbXB0IHRvIGFkZCBwYWdlcyB0byBvdXIgcG9vbCBv
biBhIHBlci1pbnN0YW5jZQorCQkgKiBiYXNpcyB1cCB0byBhIHNhbmUgbGltaXQuCisJCSAqLwor
CQlpZiAoZG1hdC0+Y29tbW9uLmFsaWdubWVudCA+IDEpCisJCQltYXhwYWdlcyA9IE1BWF9CUEFH
RVM7CisJCWVsc2UKKwkJCW1heHBhZ2VzID0gTUlOKE1BWF9CUEFHRVMsIE1heG1lbSAtCisJCQkg
ICAgYXRvcChkbWF0LT5jb21tb24ubG93YWRkcikpOworCQlpZiAoKGRtYXQtPmJvdW5jZV9mbGFn
cyAmIEJVU19ETUFfTUlOX0FMTE9DX0NPTVApID09IDAgfHwKKwkJICAgIChiei0+bWFwX2NvdW50
ID4gMCAmJiBiei0+dG90YWxfYnBhZ2VzIDwgbWF4cGFnZXMpKSB7CisJCQlwYWdlcyA9IE1BWChh
dG9wKGRtYXQtPmNvbW1vbi5tYXhzaXplKSwgMSk7CisJCQlwYWdlcyA9IE1JTihtYXhwYWdlcyAt
IGJ6LT50b3RhbF9icGFnZXMsIHBhZ2VzKTsKKwkJCXBhZ2VzID0gTUFYKHBhZ2VzLCAxKTsKKwkJ
CWlmIChhbGxvY19ib3VuY2VfcGFnZXMoZG1hdCwgcGFnZXMpIDwgcGFnZXMpCisJCQkJZXJyb3Ig
PSBFTk9NRU07CisJCQlpZiAoKGRtYXQtPmJvdW5jZV9mbGFncyAmIEJVU19ETUFfTUlOX0FMTE9D
X0NPTVApCisJCQkgICAgPT0gMCkgeworCQkJCWlmIChlcnJvciA9PSAwKSB7CisJCQkJCWRtYXQt
PmJvdW5jZV9mbGFncyB8PQorCQkJCQkgICAgQlVTX0RNQV9NSU5fQUxMT0NfQ09NUDsKKwkJCQl9
CisJCQl9IGVsc2UKKwkJCQllcnJvciA9IDA7CisJCX0KKwkJYnotPm1hcF9jb3VudCsrOworCX0g
ZWxzZSB7CisJCSptYXBwID0gTlVMTDsKKwl9CisJaWYgKGVycm9yID09IDApCisJCWRtYXQtPm1h
cF9jb3VudCsrOworCUNUUjQoS1RSX0JVU0RNQSwgIiVzOiB0YWcgJXAgdGFnIGZsYWdzIDB4JXgg
ZXJyb3IgJWQiLAorCSAgICBfX2Z1bmNfXywgZG1hdCwgZG1hdC0+Y29tbW9uLmZsYWdzLCBlcnJv
cik7CisJcmV0dXJuIChlcnJvcik7Cit9CisKKy8qCisgKiBEZXN0cm95IGEgaGFuZGxlIGZvciBt
YXBwaW5nIGZyb20ga3ZhL3V2YS9waHlzaWNhbAorICogYWRkcmVzcyBzcGFjZSBpbnRvIGJ1cyBk
ZXZpY2Ugc3BhY2UuCisgKi8KK3N0YXRpYyBpbnQKK2JvdW5jZV9idXNfZG1hbWFwX2Rlc3Ryb3ko
YnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwKQoreworCisJaWYgKG1hcCAhPSBO
VUxMICYmIG1hcCAhPSAmbm9ib3VuY2VfZG1hbWFwKSB7CisJCWlmIChTVEFJTFFfRklSU1QoJm1h
cC0+YnBhZ2VzKSAhPSBOVUxMKSB7CisJCQlDVFIzKEtUUl9CVVNETUEsICIlczogdGFnICVwIGVy
cm9yICVkIiwKKwkJCSAgICBfX2Z1bmNfXywgZG1hdCwgRUJVU1kpOworCQkJcmV0dXJuIChFQlVT
WSk7CisJCX0KKwkJaWYgKGRtYXQtPmJvdW5jZV96b25lKQorCQkJZG1hdC0+Ym91bmNlX3pvbmUt
Pm1hcF9jb3VudC0tOworCQlmcmVlKG1hcCwgTV9ERVZCVUYpOworCX0KKwlkbWF0LT5tYXBfY291
bnQtLTsKKwlDVFIyKEtUUl9CVVNETUEsICIlczogdGFnICVwIGVycm9yIDAiLCBfX2Z1bmNfXywg
ZG1hdCk7CisJcmV0dXJuICgwKTsKK30KKworCisvKgorICogQWxsb2NhdGUgYSBwaWVjZSBvZiBt
ZW1vcnkgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkgbWFwcGVkIGludG8KKyAqIGJ1cyBkZXZpY2Ug
c3BhY2UgYmFzZWQgb24gdGhlIGNvbnN0cmFpbnRzIGxpdGVkIGluIHRoZSBkbWEgdGFnLgorICog
QSBkbWFtYXAgdG8gZm9yIHVzZSB3aXRoIGRtYW1hcF9sb2FkIGlzIGFsc28gYWxsb2NhdGVkLgor
ICovCitzdGF0aWMgaW50Citib3VuY2VfYnVzX2RtYW1lbV9hbGxvYyhidXNfZG1hX3RhZ190IGRt
YXQsIHZvaWQqKiB2YWRkciwgaW50IGZsYWdzLAorICAgIGJ1c19kbWFtYXBfdCAqbWFwcCkKK3sK
Kwl2bV9tZW1hdHRyX3QgYXR0cjsKKwlpbnQgbWZsYWdzOworCisJaWYgKGZsYWdzICYgQlVTX0RN
QV9OT1dBSVQpCisJCW1mbGFncyA9IE1fTk9XQUlUOworCWVsc2UKKwkJbWZsYWdzID0gTV9XQUlU
T0s7CisKKwkvKiBJZiB3ZSBzdWNjZWVkLCBubyBtYXBwaW5nL2JvdW5jaW5nIHdpbGwgYmUgcmVx
dWlyZWQgKi8KKwkqbWFwcCA9IE5VTEw7CisKKwlpZiAoZG1hdC0+c2VnbWVudHMgPT0gTlVMTCkg
eworCQlkbWF0LT5zZWdtZW50cyA9IChidXNfZG1hX3NlZ21lbnRfdCAqKW1hbGxvYygKKwkJICAg
IHNpemVvZihidXNfZG1hX3NlZ21lbnRfdCkgKiBkbWF0LT5jb21tb24ubnNlZ21lbnRzLAorCQkg
ICAgTV9ERVZCVUYsIG1mbGFncyk7CisJCWlmIChkbWF0LT5zZWdtZW50cyA9PSBOVUxMKSB7CisJ
CQlDVFI0KEtUUl9CVVNETUEsICIlczogdGFnICVwIHRhZyBmbGFncyAweCV4IGVycm9yICVkIiwK
KwkJCSAgICBfX2Z1bmNfXywgZG1hdCwgZG1hdC0+Y29tbW9uLmZsYWdzLCBFTk9NRU0pOworCQkJ
cmV0dXJuIChFTk9NRU0pOworCQl9CisJfQorCWlmIChmbGFncyAmIEJVU19ETUFfWkVSTykKKwkJ
bWZsYWdzIHw9IE1fWkVSTzsKKwlpZiAoZmxhZ3MgJiBCVVNfRE1BX05PQ0FDSEUpCisJCWF0dHIg
PSBWTV9NRU1BVFRSX1VOQ0FDSEVBQkxFOworCWVsc2UKKwkJYXR0ciA9IFZNX01FTUFUVFJfREVG
QVVMVDsKKworCS8qIAorCSAqIFhYWDoKKwkgKiAoZG1hdC0+YWxpZ25tZW50IDw9IGRtYXQtPm1h
eHNpemUpIGlzIGp1c3QgYSBxdWljayBoYWNrOyB0aGUgZXhhY3QKKwkgKiBhbGlnbm1lbnQgZ3Vh
cmFudGVlcyBvZiBtYWxsb2MgbmVlZCB0byBiZSBuYWlsZWQgZG93biwgYW5kIHRoZQorCSAqIGNv
ZGUgYmVsb3cgc2hvdWxkIGJlIHJld3JpdHRlbiB0byB0YWtlIHRoYXQgaW50byBhY2NvdW50Lgor
CSAqCisJICogSW4gdGhlIG1lYW50aW1lLCB3ZSdsbCB3YXJuIHRoZSB1c2VyIGlmIG1hbGxvYyBn
ZXRzIGl0IHdyb25nLgorCSAqLworCWlmICgoZG1hdC0+Y29tbW9uLm1heHNpemUgPD0gUEFHRV9T
SVpFKSAmJgorCSAgIChkbWF0LT5jb21tb24uYWxpZ25tZW50IDw9IGRtYXQtPmNvbW1vbi5tYXhz
aXplKSAmJgorCSAgICBkbWF0LT5jb21tb24ubG93YWRkciA+PSBwdG9hKCh2bV9wYWRkcl90KU1h
eG1lbSkgJiYKKwkgICAgYXR0ciA9PSBWTV9NRU1BVFRSX0RFRkFVTFQpIHsKKwkJKnZhZGRyID0g
bWFsbG9jKGRtYXQtPmNvbW1vbi5tYXhzaXplLCBNX0RFVkJVRiwgbWZsYWdzKTsKKwl9IGVsc2Ug
aWYgKGRtYXQtPmNvbW1vbi5uc2VnbWVudHMgPj0gYnRvYyhkbWF0LT5jb21tb24ubWF4c2l6ZSkg
JiYKKwkgICAgZG1hdC0+Y29tbW9uLmFsaWdubWVudCA8PSBQQUdFX1NJWkUgJiYKKwkgICAgKGRt
YXQtPmNvbW1vbi5ib3VuZGFyeSA9PSAwIHx8CisJICAgIGRtYXQtPmNvbW1vbi5ib3VuZGFyeSA+
PSBkbWF0LT5jb21tb24ubG93YWRkcikpIHsKKwkJLyogUGFnZS1iYXNlZCBtdWx0aS1zZWdtZW50
IGFsbG9jYXRpb25zIGFsbG93ZWQgKi8KKwkJKnZhZGRyID0gKHZvaWQgKilrbWVtX2FsbG9jX2F0
dHIoa2VybmVsX2FyZW5hLAorCQkgICAgZG1hdC0+Y29tbW9uLm1heHNpemUsIG1mbGFncywgMHVs
LCBkbWF0LT5jb21tb24ubG93YWRkciwKKwkJICAgIGF0dHIpOworCQlkbWF0LT5ib3VuY2VfZmxh
Z3MgfD0gQlVTX0RNQV9LTUVNX0FMTE9DOworCX0gZWxzZSB7CisJCSp2YWRkciA9ICh2b2lkICop
a21lbV9hbGxvY19jb250aWcoa2VybmVsX2FyZW5hLAorCQkgICAgZG1hdC0+Y29tbW9uLm1heHNp
emUsIG1mbGFncywgMHVsLCBkbWF0LT5jb21tb24ubG93YWRkciwKKwkJICAgIGRtYXQtPmNvbW1v
bi5hbGlnbm1lbnQgIT0gMCA/IGRtYXQtPmNvbW1vbi5hbGlnbm1lbnQgOiAxdWwsCisJCSAgICBk
bWF0LT5jb21tb24uYm91bmRhcnksIGF0dHIpOworCQlkbWF0LT5ib3VuY2VfZmxhZ3MgfD0gQlVT
X0RNQV9LTUVNX0FMTE9DOworCX0KKwlpZiAoKnZhZGRyID09IE5VTEwpIHsKKwkJQ1RSNChLVFJf
QlVTRE1BLCAiJXM6IHRhZyAlcCB0YWcgZmxhZ3MgMHgleCBlcnJvciAlZCIsCisJCSAgICBfX2Z1
bmNfXywgZG1hdCwgZG1hdC0+Y29tbW9uLmZsYWdzLCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01F
TSk7CisJfSBlbHNlIGlmICh2dG9waHlzKCp2YWRkcikgJiAoZG1hdC0+Y29tbW9uLmFsaWdubWVu
dCAtIDEpKSB7CisJCXByaW50ZigiYnVzX2RtYW1lbV9hbGxvYyBmYWlsZWQgdG8gYWxpZ24gbWVt
b3J5IHByb3Blcmx5LlxuIik7CisJfQorCUNUUjQoS1RSX0JVU0RNQSwgIiVzOiB0YWcgJXAgdGFn
IGZsYWdzIDB4JXggZXJyb3IgJWQiLAorCSAgICBfX2Z1bmNfXywgZG1hdCwgZG1hdC0+Y29tbW9u
LmZsYWdzLCAwKTsKKwlyZXR1cm4gKDApOworfQorCisvKgorICogRnJlZSBhIHBpZWNlIG9mIG1l
bW9yeSBhbmQgaXQncyBhbGxvY2lhdGVkIGRtYW1hcCwgdGhhdCB3YXMgYWxsb2NhdGVkCisgKiB2
aWEgYnVzX2RtYW1lbV9hbGxvYy4gIE1ha2UgdGhlIHNhbWUgY2hvaWNlIGZvciBmcmVlL2NvbnRp
Z2ZyZWUuCisgKi8KK3N0YXRpYyB2b2lkCitib3VuY2VfYnVzX2RtYW1lbV9mcmVlKGJ1c19kbWFf
dGFnX3QgZG1hdCwgdm9pZCAqdmFkZHIsIGJ1c19kbWFtYXBfdCBtYXApCit7CisJLyoKKwkgKiBk
bWFtZW0gZG9lcyBub3QgbmVlZCB0byBiZSBib3VuY2VkLCBzbyB0aGUgbWFwIHNob3VsZCBiZQor
CSAqIE5VTEwgYW5kIHRoZSBCVVNfRE1BX0tNRU1fQUxMT0MgZmxhZyBjbGVhcmVkIGlmIG1hbGxv
YygpCisJICogd2FzIHVzZWQgYW5kIHNldCBpZiBrbWVtX2FsbG9jX2NvbnRpZygpIHdhcyB1c2Vk
LgorCSAqLworCWlmIChtYXAgIT0gTlVMTCkKKwkJcGFuaWMoImJ1c19kbWFtZW1fZnJlZTogSW52
YWxpZCBtYXAgZnJlZWRcbiIpOworCWlmICgoZG1hdC0+Ym91bmNlX2ZsYWdzICYgQlVTX0RNQV9L
TUVNX0FMTE9DKSA9PSAwKQorCQlmcmVlKHZhZGRyLCBNX0RFVkJVRik7CisJZWxzZQorCQlrbWVt
X2ZyZWUoa2VybmVsX2FyZW5hLCAodm1fb2Zmc2V0X3QpdmFkZHIsCisJCSAgICBkbWF0LT5jb21t
b24ubWF4c2l6ZSk7CisJQ1RSMyhLVFJfQlVTRE1BLCAiJXM6IHRhZyAlcCBmbGFncyAweCV4Iiwg
X19mdW5jX18sIGRtYXQsCisJICAgIGRtYXQtPmJvdW5jZV9mbGFncyk7Cit9CisKK3N0YXRpYyB2
b2lkCitfYnVzX2RtYW1hcF9jb3VudF9waHlzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1h
cF90IG1hcCwgdm1fcGFkZHJfdCBidWYsCisgICAgYnVzX3NpemVfdCBidWZsZW4sIGludCBmbGFn
cykKK3sKKwlidXNfYWRkcl90IGN1cmFkZHI7CisJYnVzX3NpemVfdCBzZ3NpemU7CisKKwlpZiAo
KG1hcCAhPSAmbm9ib3VuY2VfZG1hbWFwICYmIG1hcC0+cGFnZXNuZWVkZWQgPT0gMCkpIHsKKwkJ
LyoKKwkJICogQ291bnQgdGhlIG51bWJlciBvZiBib3VuY2UgcGFnZXMKKwkJICogbmVlZGVkIGlu
IG9yZGVyIHRvIGNvbXBsZXRlIHRoaXMgdHJhbnNmZXIKKwkJICovCisJCWN1cmFkZHIgPSBidWY7
CisJCXdoaWxlIChidWZsZW4gIT0gMCkgeworCQkJc2dzaXplID0gTUlOKGJ1ZmxlbiwgZG1hdC0+
Y29tbW9uLm1heHNlZ3N6KTsKKwkJCWlmIChidXNfZG1hX3J1bl9maWx0ZXIoJmRtYXQtPmNvbW1v
biwgY3VyYWRkcikpIHsKKwkJCQlzZ3NpemUgPSBNSU4oc2dzaXplLCBQQUdFX1NJWkUpOworCQkJ
CW1hcC0+cGFnZXNuZWVkZWQrKzsKKwkJCX0KKwkJCWN1cmFkZHIgKz0gc2dzaXplOworCQkJYnVm
bGVuIC09IHNnc2l6ZTsKKwkJfQorCQlDVFIxKEtUUl9CVVNETUEsICJwYWdlc25lZWRlZD0gJWRc
biIsIG1hcC0+cGFnZXNuZWVkZWQpOworCX0KK30KKworc3RhdGljIHZvaWQKK19idXNfZG1hbWFw
X2NvdW50X3BhZ2VzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgcG1hcF90
IHBtYXAsCisgICAgdm9pZCAqYnVmLCBidXNfc2l6ZV90IGJ1ZmxlbiwgaW50IGZsYWdzKQorewor
CXZtX29mZnNldF90IHZhZGRyOworCXZtX29mZnNldF90IHZlbmRhZGRyOworCWJ1c19hZGRyX3Qg
cGFkZHI7CisJYnVzX3NpemVfdCBzZ19sZW47CisKKwlpZiAoKG1hcCAhPSAmbm9ib3VuY2VfZG1h
bWFwICYmIG1hcC0+cGFnZXNuZWVkZWQgPT0gMCkpIHsKKwkJQ1RSNChLVFJfQlVTRE1BLCAibG93
YWRkcj0gJWQgTWF4bWVtPSAlZCwgYm91bmRhcnk9ICVkLCAiCisJCSAgICAiYWxpZ25tZW50PSAl
ZCIsIGRtYXQtPmNvbW1vbi5sb3dhZGRyLAorCQkgICAgcHRvYSgodm1fcGFkZHJfdClNYXhtZW0p
LAorCQkgICAgZG1hdC0+Y29tbW9uLmJvdW5kYXJ5LCBkbWF0LT5jb21tb24uYWxpZ25tZW50KTsK
KwkJQ1RSMyhLVFJfQlVTRE1BLCAibWFwPSAlcCwgbm9ib3VuY2VtYXA9ICVwLCBwYWdlc25lZWRl
ZD0gJWQiLAorCQkgICAgbWFwLCAmbm9ib3VuY2VfZG1hbWFwLCBtYXAtPnBhZ2VzbmVlZGVkKTsK
KwkJLyoKKwkJICogQ291bnQgdGhlIG51bWJlciBvZiBib3VuY2UgcGFnZXMKKwkJICogbmVlZGVk
IGluIG9yZGVyIHRvIGNvbXBsZXRlIHRoaXMgdHJhbnNmZXIKKwkJICovCisJCXZhZGRyID0gKHZt
X29mZnNldF90KWJ1ZjsKKwkJdmVuZGFkZHIgPSAodm1fb2Zmc2V0X3QpYnVmICsgYnVmbGVuOwor
CisJCXdoaWxlICh2YWRkciA8IHZlbmRhZGRyKSB7CisJCQlzZ19sZW4gPSBQQUdFX1NJWkUgLSAo
KHZtX29mZnNldF90KXZhZGRyICYgUEFHRV9NQVNLKTsKKwkJCWlmIChwbWFwID09IGtlcm5lbF9w
bWFwKQorCQkJCXBhZGRyID0gcG1hcF9rZXh0cmFjdCh2YWRkcik7CisJCQllbHNlCisJCQkJcGFk
ZHIgPSBwbWFwX2V4dHJhY3QocG1hcCwgdmFkZHIpOworCQkJaWYgKGJ1c19kbWFfcnVuX2ZpbHRl
cigmZG1hdC0+Y29tbW9uLCBwYWRkcikgIT0gMCkgeworCQkJCXNnX2xlbiA9IHJvdW5kdXAyKHNn
X2xlbiwKKwkJCQkgICAgZG1hdC0+Y29tbW9uLmFsaWdubWVudCk7CisJCQkJbWFwLT5wYWdlc25l
ZWRlZCsrOworCQkJfQorCQkJdmFkZHIgKz0gc2dfbGVuOworCQl9CisJCUNUUjEoS1RSX0JVU0RN
QSwgInBhZ2VzbmVlZGVkPSAlZFxuIiwgbWFwLT5wYWdlc25lZWRlZCk7CisJfQorfQorCitzdGF0
aWMgaW50CitfYnVzX2RtYW1hcF9yZXNlcnZlX3BhZ2VzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVz
X2RtYW1hcF90IG1hcCwgaW50IGZsYWdzKQoreworCisJLyogUmVzZXJ2ZSBOZWNlc3NhcnkgQm91
bmNlIFBhZ2VzICovCisJbXR4X2xvY2soJmJvdW5jZV9sb2NrKTsKKwlpZiAoZmxhZ3MgJiBCVVNf
RE1BX05PV0FJVCkgeworCQlpZiAocmVzZXJ2ZV9ib3VuY2VfcGFnZXMoZG1hdCwgbWFwLCAwKSAh
PSAwKSB7CisJCQltdHhfdW5sb2NrKCZib3VuY2VfbG9jayk7CisJCQlyZXR1cm4gKEVOT01FTSk7
CisJCX0KKwl9IGVsc2UgeworCQlpZiAocmVzZXJ2ZV9ib3VuY2VfcGFnZXMoZG1hdCwgbWFwLCAx
KSAhPSAwKSB7CisJCQkvKiBRdWV1ZSB1cyBmb3IgcmVzb3VyY2VzICovCisJCQlTVEFJTFFfSU5T
RVJUX1RBSUwoJmJvdW5jZV9tYXBfd2FpdGluZ2xpc3QsIG1hcCwgbGlua3MpOworCQkJbXR4X3Vu
bG9jaygmYm91bmNlX2xvY2spOworCQkJcmV0dXJuIChFSU5QUk9HUkVTUyk7CisJCX0KKwl9CisJ
bXR4X3VubG9jaygmYm91bmNlX2xvY2spOworCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIEFk
ZCBhIHNpbmdsZSBjb250aWd1b3VzIHBoeXNpY2FsIHJhbmdlIHRvIHRoZSBzZWdtZW50IGxpc3Qu
CisgKi8KK3N0YXRpYyBpbnQKK19idXNfZG1hbWFwX2FkZHNlZyhidXNfZG1hX3RhZ190IGRtYXQs
IGJ1c19kbWFtYXBfdCBtYXAsIGJ1c19hZGRyX3QgY3VyYWRkciwKKyAgICBidXNfc2l6ZV90IHNn
c2l6ZSwgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCAqc2VncCkKK3sKKwlidXNfYWRkcl90
IGJhZGRyLCBibWFzazsKKwlpbnQgc2VnOworCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgZG9uJ3Qg
Y3Jvc3MgYW55IGJvdW5kYXJpZXMuCisJICovCisJYm1hc2sgPSB+KGRtYXQtPmNvbW1vbi5ib3Vu
ZGFyeSAtIDEpOworCWlmIChkbWF0LT5jb21tb24uYm91bmRhcnkgPiAwKSB7CisJCWJhZGRyID0g
KGN1cmFkZHIgKyBkbWF0LT5jb21tb24uYm91bmRhcnkpICYgYm1hc2s7CisJCWlmIChzZ3NpemUg
PiAoYmFkZHIgLSBjdXJhZGRyKSkKKwkJCXNnc2l6ZSA9IChiYWRkciAtIGN1cmFkZHIpOworCX0K
KworCS8qCisJICogSW5zZXJ0IGNodW5rIGludG8gYSBzZWdtZW50LCBjb2FsZXNjaW5nIHdpdGgK
KwkgKiBwcmV2aW91cyBzZWdtZW50IGlmIHBvc3NpYmxlLgorCSAqLworCXNlZyA9ICpzZWdwOwor
CWlmIChzZWcgPT0gLTEpIHsKKwkJc2VnID0gMDsKKwkJc2Vnc1tzZWddLmRzX2FkZHIgPSBjdXJh
ZGRyOworCQlzZWdzW3NlZ10uZHNfbGVuID0gc2dzaXplOworCX0gZWxzZSB7CisJCWlmIChjdXJh
ZGRyID09IHNlZ3Nbc2VnXS5kc19hZGRyICsgc2Vnc1tzZWddLmRzX2xlbiAmJgorCQkgICAgKHNl
Z3Nbc2VnXS5kc19sZW4gKyBzZ3NpemUpIDw9IGRtYXQtPmNvbW1vbi5tYXhzZWdzeiAmJgorCQkg
ICAgKGRtYXQtPmNvbW1vbi5ib3VuZGFyeSA9PSAwIHx8CisJCSAgICAgKHNlZ3Nbc2VnXS5kc19h
ZGRyICYgYm1hc2spID09IChjdXJhZGRyICYgYm1hc2spKSkKKwkJCXNlZ3Nbc2VnXS5kc19sZW4g
Kz0gc2dzaXplOworCQllbHNlIHsKKwkJCWlmICgrK3NlZyA+PSBkbWF0LT5jb21tb24ubnNlZ21l
bnRzKQorCQkJCXJldHVybiAoMCk7CisJCQlzZWdzW3NlZ10uZHNfYWRkciA9IGN1cmFkZHI7CisJ
CQlzZWdzW3NlZ10uZHNfbGVuID0gc2dzaXplOworCQl9CisJfQorCSpzZWdwID0gc2VnOworCXJl
dHVybiAoc2dzaXplKTsKK30KKworLyoKKyAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gbG9hZCBhIHBo
eXNpY2FsIGJ1ZmZlci4gIHNlZ3AgY29udGFpbnMKKyAqIHRoZSBzdGFydGluZyBzZWdtZW50IG9u
IGVudHJhY2UsIGFuZCB0aGUgZW5kaW5nIHNlZ21lbnQgb24gZXhpdC4KKyAqLworc3RhdGljIGlu
dAorYm91bmNlX2J1c19kbWFtYXBfbG9hZF9waHlzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2Rt
YW1hcF90IG1hcCwKKyAgICB2bV9wYWRkcl90IGJ1ZiwgYnVzX3NpemVfdCBidWZsZW4sIGludCBm
bGFncywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsCisgICAgaW50ICpzZWdwKQoreworCWJ1c19z
aXplX3Qgc2dzaXplOworCWJ1c19hZGRyX3QgY3VyYWRkcjsKKwlpbnQgZXJyb3I7CisKKwlpZiAo
bWFwID09IE5VTEwpCisJCW1hcCA9ICZub2JvdW5jZV9kbWFtYXA7CisKKwlpZiAoc2VncyA9PSBO
VUxMKQorCQlzZWdzID0gZG1hdC0+c2VnbWVudHM7CisKKwlpZiAoKGRtYXQtPmJvdW5jZV9mbGFn
cyAmIEJVU19ETUFfQ09VTERfQk9VTkNFKSAhPSAwKSB7CisJCV9idXNfZG1hbWFwX2NvdW50X3Bo
eXMoZG1hdCwgbWFwLCBidWYsIGJ1ZmxlbiwgZmxhZ3MpOworCQlpZiAobWFwLT5wYWdlc25lZWRl
ZCAhPSAwKSB7CisJCQllcnJvciA9IF9idXNfZG1hbWFwX3Jlc2VydmVfcGFnZXMoZG1hdCwgbWFw
LCBmbGFncyk7CisJCQlpZiAoZXJyb3IpCisJCQkJcmV0dXJuIChlcnJvcik7CisJCX0KKwl9CisK
Kwl3aGlsZSAoYnVmbGVuID4gMCkgeworCQljdXJhZGRyID0gYnVmOworCQlzZ3NpemUgPSBNSU4o
YnVmbGVuLCBkbWF0LT5jb21tb24ubWF4c2Vnc3opOworCQlpZiAoKChkbWF0LT5ib3VuY2VfZmxh
Z3MgJiBCVVNfRE1BX0NPVUxEX0JPVU5DRSkgIT0gMCkgJiYKKwkJICAgIG1hcC0+cGFnZXNuZWVk
ZWQgIT0gMCAmJgorCQkgICAgYnVzX2RtYV9ydW5fZmlsdGVyKCZkbWF0LT5jb21tb24sIGN1cmFk
ZHIpKSB7CisJCQlzZ3NpemUgPSBNSU4oc2dzaXplLCBQQUdFX1NJWkUpOworCQkJY3VyYWRkciA9
IGFkZF9ib3VuY2VfcGFnZShkbWF0LCBtYXAsIDAsIGN1cmFkZHIsCisJCQkgICAgc2dzaXplKTsK
KwkJfQorCQlzZ3NpemUgPSBfYnVzX2RtYW1hcF9hZGRzZWcoZG1hdCwgbWFwLCBjdXJhZGRyLCBz
Z3NpemUsIHNlZ3MsCisJCSAgICBzZWdwKTsKKwkJaWYgKHNnc2l6ZSA9PSAwKQorCQkJYnJlYWs7
CisJCWJ1ZiArPSBzZ3NpemU7CisJCWJ1ZmxlbiAtPSBzZ3NpemU7CisJfQorCisJLyoKKwkgKiBE
aWQgd2UgZml0PworCSAqLworCXJldHVybiAoYnVmbGVuICE9IDAgPyBFRkJJRyA6IDApOyAvKiBY
WFggYmV0dGVyIHJldHVybiB2YWx1ZSBoZXJlPyAqLworfQorCisvKgorICogVXRpbGl0eSBmdW5j
dGlvbiB0byBsb2FkIGEgbGluZWFyIGJ1ZmZlci4gIHNlZ3AgY29udGFpbnMKKyAqIHRoZSBzdGFy
dGluZyBzZWdtZW50IG9uIGVudHJhY2UsIGFuZCB0aGUgZW5kaW5nIHNlZ21lbnQgb24gZXhpdC4K
KyAqLworc3RhdGljIGludAorYm91bmNlX2J1c19kbWFtYXBfbG9hZF9idWZmZXIoYnVzX2RtYV90
YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLCB2b2lkICpidWYsCisgICAgYnVzX3NpemVfdCBi
dWZsZW4sIHBtYXBfdCBwbWFwLCBpbnQgZmxhZ3MsIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLAor
ICAgIGludCAqc2VncCkKK3sKKwlidXNfc2l6ZV90IHNnc2l6ZSwgbWF4X3Nnc2l6ZTsKKwlidXNf
YWRkcl90IGN1cmFkZHI7CisJdm1fb2Zmc2V0X3QgdmFkZHI7CisJaW50IGVycm9yOworCisJaWYg
KG1hcCA9PSBOVUxMKQorCQltYXAgPSAmbm9ib3VuY2VfZG1hbWFwOworCisJaWYgKHNlZ3MgPT0g
TlVMTCkKKwkJc2VncyA9IGRtYXQtPnNlZ21lbnRzOworCisJaWYgKChkbWF0LT5ib3VuY2VfZmxh
Z3MgJiBCVVNfRE1BX0NPVUxEX0JPVU5DRSkgIT0gMCkgeworCQlfYnVzX2RtYW1hcF9jb3VudF9w
YWdlcyhkbWF0LCBtYXAsIHBtYXAsIGJ1ZiwgYnVmbGVuLCBmbGFncyk7CisJCWlmIChtYXAtPnBh
Z2VzbmVlZGVkICE9IDApIHsKKwkJCWVycm9yID0gX2J1c19kbWFtYXBfcmVzZXJ2ZV9wYWdlcyhk
bWF0LCBtYXAsIGZsYWdzKTsKKwkJCWlmIChlcnJvcikKKwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJ
fQorCX0KKworCXZhZGRyID0gKHZtX29mZnNldF90KWJ1ZjsKKwl3aGlsZSAoYnVmbGVuID4gMCkg
eworCQkvKgorCQkgKiBHZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MgZm9yIHRoaXMgc2VnbWVudC4K
KwkJICovCisJCWlmIChwbWFwID09IGtlcm5lbF9wbWFwKQorCQkJY3VyYWRkciA9IHBtYXBfa2V4
dHJhY3QodmFkZHIpOworCQllbHNlCisJCQljdXJhZGRyID0gcG1hcF9leHRyYWN0KHBtYXAsIHZh
ZGRyKTsKKworCQkvKgorCQkgKiBDb21wdXRlIHRoZSBzZWdtZW50IHNpemUsIGFuZCBhZGp1c3Qg
Y291bnRzLgorCQkgKi8KKwkJbWF4X3Nnc2l6ZSA9IE1JTihidWZsZW4sIGRtYXQtPmNvbW1vbi5t
YXhzZWdzeik7CisJCXNnc2l6ZSA9IFBBR0VfU0laRSAtICgodm1fb2Zmc2V0X3QpY3VyYWRkciAm
IFBBR0VfTUFTSyk7CisJCWlmICgoKGRtYXQtPmJvdW5jZV9mbGFncyAmIEJVU19ETUFfQ09VTERf
Qk9VTkNFKSAhPSAwKSAmJgorCQkgICAgbWFwLT5wYWdlc25lZWRlZCAhPSAwICYmCisJCSAgICBi
dXNfZG1hX3J1bl9maWx0ZXIoJmRtYXQtPmNvbW1vbiwgY3VyYWRkcikpIHsKKwkJCXNnc2l6ZSA9
IHJvdW5kdXAyKHNnc2l6ZSwgZG1hdC0+Y29tbW9uLmFsaWdubWVudCk7CisJCQlzZ3NpemUgPSBN
SU4oc2dzaXplLCBtYXhfc2dzaXplKTsKKwkJCWN1cmFkZHIgPSBhZGRfYm91bmNlX3BhZ2UoZG1h
dCwgbWFwLCB2YWRkciwgY3VyYWRkciwKKwkJCSAgICBzZ3NpemUpOworCQl9IGVsc2UgeworCQkJ
c2dzaXplID0gTUlOKHNnc2l6ZSwgbWF4X3Nnc2l6ZSk7CisJCX0KKwkJc2dzaXplID0gX2J1c19k
bWFtYXBfYWRkc2VnKGRtYXQsIG1hcCwgY3VyYWRkciwgc2dzaXplLCBzZWdzLAorCQkgICAgc2Vn
cCk7CisJCWlmIChzZ3NpemUgPT0gMCkKKwkJCWJyZWFrOworCQl2YWRkciArPSBzZ3NpemU7CisJ
CWJ1ZmxlbiAtPSBzZ3NpemU7CisJfQorCisJLyoKKwkgKiBEaWQgd2UgZml0PworCSAqLworCXJl
dHVybiAoYnVmbGVuICE9IDAgPyBFRkJJRyA6IDApOyAvKiBYWFggYmV0dGVyIHJldHVybiB2YWx1
ZSBoZXJlPyAqLworfQorCitzdGF0aWMgdm9pZAorYm91bmNlX2J1c19kbWFtYXBfd2FpdG9rKGJ1
c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKyAgICBzdHJ1Y3QgbWVtZGVzYyAq
bWVtLCBidXNfZG1hbWFwX2NhbGxiYWNrX3QgKmNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19hcmcp
Cit7CisKKwlpZiAobWFwID09IE5VTEwpCisJCXJldHVybjsKKwltYXAtPm1lbSA9ICptZW07CisJ
bWFwLT5kbWF0ID0gZG1hdDsKKwltYXAtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJbWFwLT5jYWxs
YmFja19hcmcgPSBjYWxsYmFja19hcmc7Cit9CisKK3N0YXRpYyBidXNfZG1hX3NlZ21lbnRfdCAq
Citib3VuY2VfYnVzX2RtYW1hcF9jb21wbGV0ZShidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFt
YXBfdCBtYXAsCisgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVy
cm9yKQoreworCisJaWYgKHNlZ3MgPT0gTlVMTCkKKwkJc2VncyA9IGRtYXQtPnNlZ21lbnRzOwor
CXJldHVybiAoc2Vncyk7Cit9CisKKy8qCisgKiBSZWxlYXNlIHRoZSBtYXBwaW5nIGhlbGQgYnkg
bWFwLgorICovCitzdGF0aWMgdm9pZAorYm91bmNlX2J1c19kbWFtYXBfdW5sb2FkKGJ1c19kbWFf
dGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCkKK3sKKwlzdHJ1Y3QgYm91bmNlX3BhZ2UgKmJw
YWdlOworCisJaWYgKG1hcCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl3aGlsZSAoKGJwYWdlID0g
U1RBSUxRX0ZJUlNUKCZtYXAtPmJwYWdlcykpICE9IE5VTEwpIHsKKwkJU1RBSUxRX1JFTU9WRV9I
RUFEKCZtYXAtPmJwYWdlcywgbGlua3MpOworCQlmcmVlX2JvdW5jZV9wYWdlKGRtYXQsIGJwYWdl
KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitib3VuY2VfYnVzX2RtYW1hcF9zeW5jKGJ1c19kbWFf
dGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKyAgICBidXNfZG1hc3luY19vcF90IG9wKQor
eworCXN0cnVjdCBib3VuY2VfcGFnZSAqYnBhZ2U7CisJLyoKKwkgKiBYWFg6CisJICogVGhpcyBi
dXNfZG1hIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIElPLUNvaGVyZW50IGFyY2hpdGVjdXRyZS4K
KwkgKiBJZiBJTy1Db2hlcmVuY3kgaXMgbm90IGd1YXJhbnRlZWQsIGNhY2hlIG9wZXJhdGlvbnMg
aGF2ZSB0byBiZQorCSAqIGFkZGVkIHRvIHRoaXMgZnVuY3Rpb24uCisJICovCisKKwlpZiAob3Ag
PT0gQlVTX0RNQVNZTkNfUE9TVFdSSVRFKQorCQlyZXR1cm47CisKKwlpZiAoKG9wICYgQlVTX0RN
QVNZTkNfUE9TVFJFQUQpICE9IDApIHsKKwkJLyoKKwkJICogV2FpdCBmb3IgYW55IERNQSBvcGVy
YXRpb25zIHRvIGNvbXBsZXRlIGJlZm9yZSB0aGUgYmNvcHkuCisJCSAqLworCQlkc2IoKTsKKwl9
CisKKwlpZiAoKGJwYWdlID0gU1RBSUxRX0ZJUlNUKCZtYXAtPmJwYWdlcykpICE9IE5VTEwpIHsK
KwkJQ1RSNChLVFJfQlVTRE1BLCAiJXM6IHRhZyAlcCB0YWcgZmxhZ3MgMHgleCBvcCAweCV4ICIK
KwkJICAgICJwZXJmb3JtaW5nIGJvdW5jZSIsIF9fZnVuY19fLCBkbWF0LCBkbWF0LT5jb21tb24u
ZmxhZ3MsCisJCSAgICBvcCk7CisJCWlmICgob3AgJiBCVVNfRE1BU1lOQ19QUkVXUklURSkgIT0g
MCkgeworCQkJd2hpbGUgKGJwYWdlICE9IE5VTEwpIHsKKwkJCQlpZiAoYnBhZ2UtPmRhdGF2YWRk
ciAhPSAwKSB7CisJCQkJCWJjb3B5KCh2b2lkICopYnBhZ2UtPmRhdGF2YWRkciwKKwkJCQkJICAg
ICh2b2lkICopYnBhZ2UtPnZhZGRyLAorCQkJCQkgICAgYnBhZ2UtPmRhdGFjb3VudCk7CisJCQkJ
fSBlbHNlIHsKKwkJCQkJcGh5c2NvcHlvdXQoYnBhZ2UtPmRhdGFhZGRyLAorCQkJCQkgICAgKHZv
aWQgKilicGFnZS0+dmFkZHIsCisJCQkJCSAgICBicGFnZS0+ZGF0YWNvdW50KTsKKwkJCQl9CisJ
CQkJYnBhZ2UgPSBTVEFJTFFfTkVYVChicGFnZSwgbGlua3MpOworCQkJfQorCQkJZG1hdC0+Ym91
bmNlX3pvbmUtPnRvdGFsX2JvdW5jZWQrKzsKKwkJfQorCisJCWlmICgob3AgJiBCVVNfRE1BU1lO
Q19QT1NUUkVBRCkgIT0gMCkgeworCQkJd2hpbGUgKGJwYWdlICE9IE5VTEwpIHsKKwkJCQlpZiAo
YnBhZ2UtPmRhdGF2YWRkciAhPSAwKSB7CisJCQkJCWJjb3B5KCh2b2lkICopYnBhZ2UtPnZhZGRy
LAorCQkJCQkgICAgKHZvaWQgKilicGFnZS0+ZGF0YXZhZGRyLAorCQkJCQkgICAgYnBhZ2UtPmRh
dGFjb3VudCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcGh5c2NvcHlpbigodm9pZCAqKWJwYWdlLT52
YWRkciwKKwkJCQkJICAgIGJwYWdlLT5kYXRhYWRkciwgYnBhZ2UtPmRhdGFjb3VudCk7CisJCQkJ
fQorCQkJCWJwYWdlID0gU1RBSUxRX05FWFQoYnBhZ2UsIGxpbmtzKTsKKwkJCX0KKwkJCWRtYXQt
PmJvdW5jZV96b25lLT50b3RhbF9ib3VuY2VkKys7CisJCX0KKwl9CisKKwlpZiAoKG9wICYgQlVT
X0RNQVNZTkNfUFJFV1JJVEUpICE9IDApIHsKKwkJLyoKKwkJICogV2FpdCBmb3IgdGhlIGJjb3B5
IHRvIGNvbXBsZXRlIGJlZm9yZSBhbnkgRE1BIG9wZXJhdGlvbnMuCisJCSAqLworCQlkc2IoKTsK
Kwl9Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X2JvdW5jZV9wYWdlcyh2b2lkICpkdW1teSBfX3Vu
dXNlZCkKK3sKKworCXRvdGFsX2JwYWdlcyA9IDA7CisJU1RBSUxRX0lOSVQoJmJvdW5jZV96b25l
X2xpc3QpOworCVNUQUlMUV9JTklUKCZib3VuY2VfbWFwX3dhaXRpbmdsaXN0KTsKKwlTVEFJTFFf
SU5JVCgmYm91bmNlX21hcF9jYWxsYmFja2xpc3QpOworCW10eF9pbml0KCZib3VuY2VfbG9jaywg
ImJvdW5jZSBwYWdlcyBsb2NrIiwgTlVMTCwgTVRYX0RFRik7Cit9CitTWVNJTklUKGJwYWdlcywg
U0lfU1VCX0xPQ0ssIFNJX09SREVSX0FOWSwgaW5pdF9ib3VuY2VfcGFnZXMsIE5VTEwpOworCitz
dGF0aWMgc3RydWN0IHN5c2N0bF9jdHhfbGlzdCAqCitidXNkbWFfc3lzY3RsX3RyZWUoc3RydWN0
IGJvdW5jZV96b25lICpieikKK3sKKworCXJldHVybiAoJmJ6LT5zeXNjdGxfdHJlZSk7Cit9CisK
K3N0YXRpYyBzdHJ1Y3Qgc3lzY3RsX29pZCAqCitidXNkbWFfc3lzY3RsX3RyZWVfdG9wKHN0cnVj
dCBib3VuY2Vfem9uZSAqYnopCit7CisKKwlyZXR1cm4gKGJ6LT5zeXNjdGxfdHJlZV90b3ApOwor
fQorCitzdGF0aWMgaW50CithbGxvY19ib3VuY2Vfem9uZShidXNfZG1hX3RhZ190IGRtYXQpCit7
CisJc3RydWN0IGJvdW5jZV96b25lICpiejsKKworCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBhbHJl
YWR5IGhhdmUgYSBzdWl0YWJsZSB6b25lICovCisJU1RBSUxRX0ZPUkVBQ0goYnosICZib3VuY2Vf
em9uZV9saXN0LCBsaW5rcykgeworCQlpZiAoKGRtYXQtPmNvbW1vbi5hbGlnbm1lbnQgPD0gYnot
PmFsaWdubWVudCkgJiYKKwkJICAgIChkbWF0LT5jb21tb24ubG93YWRkciA+PSBiei0+bG93YWRk
cikpIHsKKwkJCWRtYXQtPmJvdW5jZV96b25lID0gYno7CisJCQlyZXR1cm4gKDApOworCQl9CisJ
fQorCisJaWYgKChieiA9IChzdHJ1Y3QgYm91bmNlX3pvbmUgKiltYWxsb2Moc2l6ZW9mKCpieiks
IE1fREVWQlVGLAorCSAgICBNX05PV0FJVCB8IE1fWkVSTykpID09IE5VTEwpCisJCXJldHVybiAo
RU5PTUVNKTsKKworCVNUQUlMUV9JTklUKCZiei0+Ym91bmNlX3BhZ2VfbGlzdCk7CisJYnotPmZy
ZWVfYnBhZ2VzID0gMDsKKwliei0+cmVzZXJ2ZWRfYnBhZ2VzID0gMDsKKwliei0+YWN0aXZlX2Jw
YWdlcyA9IDA7CisJYnotPmxvd2FkZHIgPSBkbWF0LT5jb21tb24ubG93YWRkcjsKKwliei0+YWxp
Z25tZW50ID0gTUFYKGRtYXQtPmNvbW1vbi5hbGlnbm1lbnQsIFBBR0VfU0laRSk7CisJYnotPm1h
cF9jb3VudCA9IDA7CisJc25wcmludGYoYnotPnpvbmVpZCwgOCwgInpvbmUlZCIsIGJ1c2RtYV96
b25lY291bnQpOworCWJ1c2RtYV96b25lY291bnQrKzsKKwlzbnByaW50Zihiei0+bG93YWRkcmlk
LCAxOCwgIiUjangiLCAodWludG1heF90KWJ6LT5sb3dhZGRyKTsKKwlTVEFJTFFfSU5TRVJUX1RB
SUwoJmJvdW5jZV96b25lX2xpc3QsIGJ6LCBsaW5rcyk7CisJZG1hdC0+Ym91bmNlX3pvbmUgPSBi
ejsKKworCXN5c2N0bF9jdHhfaW5pdCgmYnotPnN5c2N0bF90cmVlKTsKKwliei0+c3lzY3RsX3Ry
ZWVfdG9wID0gU1lTQ1RMX0FERF9OT0RFKCZiei0+c3lzY3RsX3RyZWUsCisJICAgIFNZU0NUTF9T
VEFUSUNfQ0hJTERSRU4oX2h3X2J1c2RtYSksIE9JRF9BVVRPLCBiei0+em9uZWlkLAorCSAgICBD
VExGTEFHX1JELCAwLCAiIik7CisJaWYgKGJ6LT5zeXNjdGxfdHJlZV90b3AgPT0gTlVMTCkgewor
CQlzeXNjdGxfY3R4X2ZyZWUoJmJ6LT5zeXNjdGxfdHJlZSk7CisJCXJldHVybiAoMCk7CS8qIFhY
WCBlcnJvciBjb2RlPyAqLworCX0KKworCVNZU0NUTF9BRERfSU5UKGJ1c2RtYV9zeXNjdGxfdHJl
ZShieiksCisJICAgIFNZU0NUTF9DSElMRFJFTihidXNkbWFfc3lzY3RsX3RyZWVfdG9wKGJ6KSks
IE9JRF9BVVRPLAorCSAgICAidG90YWxfYnBhZ2VzIiwgQ1RMRkxBR19SRCwgJmJ6LT50b3RhbF9i
cGFnZXMsIDAsCisJICAgICJUb3RhbCBib3VuY2UgcGFnZXMiKTsKKwlTWVNDVExfQUREX0lOVChi
dXNkbWFfc3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExfQ0hJTERSRU4oYnVzZG1hX3N5c2N0
bF90cmVlX3RvcChieikpLCBPSURfQVVUTywKKwkgICAgImZyZWVfYnBhZ2VzIiwgQ1RMRkxBR19S
RCwgJmJ6LT5mcmVlX2JwYWdlcywgMCwKKwkgICAgIkZyZWUgYm91bmNlIHBhZ2VzIik7CisJU1lT
Q1RMX0FERF9JTlQoYnVzZG1hX3N5c2N0bF90cmVlKGJ6KSwKKwkgICAgU1lTQ1RMX0NISUxEUkVO
KGJ1c2RtYV9zeXNjdGxfdHJlZV90b3AoYnopKSwgT0lEX0FVVE8sCisJICAgICJyZXNlcnZlZF9i
cGFnZXMiLCBDVExGTEFHX1JELCAmYnotPnJlc2VydmVkX2JwYWdlcywgMCwKKwkgICAgIlJlc2Vy
dmVkIGJvdW5jZSBwYWdlcyIpOworCVNZU0NUTF9BRERfSU5UKGJ1c2RtYV9zeXNjdGxfdHJlZShi
eiksCisJICAgIFNZU0NUTF9DSElMRFJFTihidXNkbWFfc3lzY3RsX3RyZWVfdG9wKGJ6KSksIE9J
RF9BVVRPLAorCSAgICAiYWN0aXZlX2JwYWdlcyIsIENUTEZMQUdfUkQsICZiei0+YWN0aXZlX2Jw
YWdlcywgMCwKKwkgICAgIkFjdGl2ZSBib3VuY2UgcGFnZXMiKTsKKwlTWVNDVExfQUREX0lOVChi
dXNkbWFfc3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExfQ0hJTERSRU4oYnVzZG1hX3N5c2N0
bF90cmVlX3RvcChieikpLCBPSURfQVVUTywKKwkgICAgInRvdGFsX2JvdW5jZWQiLCBDVExGTEFH
X1JELCAmYnotPnRvdGFsX2JvdW5jZWQsIDAsCisJICAgICJUb3RhbCBib3VuY2UgcmVxdWVzdHMi
KTsKKwlTWVNDVExfQUREX0lOVChidXNkbWFfc3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExf
Q0hJTERSRU4oYnVzZG1hX3N5c2N0bF90cmVlX3RvcChieikpLCBPSURfQVVUTywKKwkgICAgInRv
dGFsX2RlZmVycmVkIiwgQ1RMRkxBR19SRCwgJmJ6LT50b3RhbF9kZWZlcnJlZCwgMCwKKwkgICAg
IlRvdGFsIGJvdW5jZSByZXF1ZXN0cyB0aGF0IHdlcmUgZGVmZXJyZWQiKTsKKwlTWVNDVExfQURE
X1NUUklORyhidXNkbWFfc3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExfQ0hJTERSRU4oYnVz
ZG1hX3N5c2N0bF90cmVlX3RvcChieikpLCBPSURfQVVUTywKKwkgICAgImxvd2FkZHIiLCBDVExG
TEFHX1JELCBiei0+bG93YWRkcmlkLCAwLCAiIik7CisJU1lTQ1RMX0FERF9VQVVUTyhidXNkbWFf
c3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExfQ0hJTERSRU4oYnVzZG1hX3N5c2N0bF90cmVl
X3RvcChieikpLCBPSURfQVVUTywKKwkgICAgImFsaWdubWVudCIsIENUTEZMQUdfUkQsICZiei0+
YWxpZ25tZW50LCAiIik7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CithbGxvY19i
b3VuY2VfcGFnZXMoYnVzX2RtYV90YWdfdCBkbWF0LCB1X2ludCBudW1wYWdlcykKK3sKKwlzdHJ1
Y3QgYm91bmNlX3pvbmUgKmJ6OworCWludCBjb3VudDsKKworCWJ6ID0gZG1hdC0+Ym91bmNlX3pv
bmU7CisJY291bnQgPSAwOworCXdoaWxlIChudW1wYWdlcyA+IDApIHsKKwkJc3RydWN0IGJvdW5j
ZV9wYWdlICpicGFnZTsKKworCQlicGFnZSA9IChzdHJ1Y3QgYm91bmNlX3BhZ2UgKiltYWxsb2Mo
c2l6ZW9mKCpicGFnZSksIE1fREVWQlVGLAorCQkJCQkJICAgICBNX05PV0FJVCB8IE1fWkVSTyk7
CisKKwkJaWYgKGJwYWdlID09IE5VTEwpCisJCQlicmVhazsKKwkJYnBhZ2UtPnZhZGRyID0gKHZt
X29mZnNldF90KWNvbnRpZ21hbGxvYyhQQUdFX1NJWkUsIE1fREVWQlVGLAorCQkJCQkJCSBNX05P
V0FJVCwgMHVsLAorCQkJCQkJCSBiei0+bG93YWRkciwKKwkJCQkJCQkgUEFHRV9TSVpFLAorCQkJ
CQkJCSAwKTsKKwkJaWYgKGJwYWdlLT52YWRkciA9PSAwKSB7CisJCQlmcmVlKGJwYWdlLCBNX0RF
VkJVRik7CisJCQlicmVhazsKKwkJfQorCQlicGFnZS0+YnVzYWRkciA9IHBtYXBfa2V4dHJhY3Qo
YnBhZ2UtPnZhZGRyKTsKKwkJbXR4X2xvY2soJmJvdW5jZV9sb2NrKTsKKwkJU1RBSUxRX0lOU0VS
VF9UQUlMKCZiei0+Ym91bmNlX3BhZ2VfbGlzdCwgYnBhZ2UsIGxpbmtzKTsKKwkJdG90YWxfYnBh
Z2VzKys7CisJCWJ6LT50b3RhbF9icGFnZXMrKzsKKwkJYnotPmZyZWVfYnBhZ2VzKys7CisJCW10
eF91bmxvY2soJmJvdW5jZV9sb2NrKTsKKwkJY291bnQrKzsKKwkJbnVtcGFnZXMtLTsKKwl9CisJ
cmV0dXJuIChjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc2VydmVfYm91bmNlX3BhZ2VzKGJ1
c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgaW50IGNvbW1pdCkKK3sKKwlzdHJ1
Y3QgYm91bmNlX3pvbmUgKmJ6OworCWludCBwYWdlczsKKworCW10eF9hc3NlcnQoJmJvdW5jZV9s
b2NrLCBNQV9PV05FRCk7CisJYnogPSBkbWF0LT5ib3VuY2Vfem9uZTsKKwlwYWdlcyA9IE1JTihi
ei0+ZnJlZV9icGFnZXMsIG1hcC0+cGFnZXNuZWVkZWQgLSBtYXAtPnBhZ2VzcmVzZXJ2ZWQpOwor
CWlmIChjb21taXQgPT0gMCAmJiBtYXAtPnBhZ2VzbmVlZGVkID4gKG1hcC0+cGFnZXNyZXNlcnZl
ZCArIHBhZ2VzKSkKKwkJcmV0dXJuIChtYXAtPnBhZ2VzbmVlZGVkIC0gKG1hcC0+cGFnZXNyZXNl
cnZlZCArIHBhZ2VzKSk7CisJYnotPmZyZWVfYnBhZ2VzIC09IHBhZ2VzOworCWJ6LT5yZXNlcnZl
ZF9icGFnZXMgKz0gcGFnZXM7CisJbWFwLT5wYWdlc3Jlc2VydmVkICs9IHBhZ2VzOworCXBhZ2Vz
ID0gbWFwLT5wYWdlc25lZWRlZCAtIG1hcC0+cGFnZXNyZXNlcnZlZDsKKworCXJldHVybiAocGFn
ZXMpOworfQorCitzdGF0aWMgYnVzX2FkZHJfdAorYWRkX2JvdW5jZV9wYWdlKGJ1c19kbWFfdGFn
X3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgdm1fb2Zmc2V0X3QgdmFkZHIsCisJCWJ1c19hZGRy
X3QgYWRkciwgYnVzX3NpemVfdCBzaXplKQoreworCXN0cnVjdCBib3VuY2Vfem9uZSAqYno7CisJ
c3RydWN0IGJvdW5jZV9wYWdlICpicGFnZTsKKworCUtBU1NFUlQoZG1hdC0+Ym91bmNlX3pvbmUg
IT0gTlVMTCwgKCJubyBib3VuY2Ugem9uZSBpbiBkbWEgdGFnIikpOworCUtBU1NFUlQobWFwICE9
IE5VTEwgJiYgbWFwICE9ICZub2JvdW5jZV9kbWFtYXAsCisJICAgICgiYWRkX2JvdW5jZV9wYWdl
OiBiYWQgbWFwICVwIiwgbWFwKSk7CisKKwlieiA9IGRtYXQtPmJvdW5jZV96b25lOworCWlmICht
YXAtPnBhZ2VzbmVlZGVkID09IDApCisJCXBhbmljKCJhZGRfYm91bmNlX3BhZ2U6IG1hcCBkb2Vz
bid0IG5lZWQgYW55IHBhZ2VzIik7CisJbWFwLT5wYWdlc25lZWRlZC0tOworCisJaWYgKG1hcC0+
cGFnZXNyZXNlcnZlZCA9PSAwKQorCQlwYW5pYygiYWRkX2JvdW5jZV9wYWdlOiBtYXAgZG9lc24n
dCBuZWVkIGFueSBwYWdlcyIpOworCW1hcC0+cGFnZXNyZXNlcnZlZC0tOworCisJbXR4X2xvY2so
JmJvdW5jZV9sb2NrKTsKKwlicGFnZSA9IFNUQUlMUV9GSVJTVCgmYnotPmJvdW5jZV9wYWdlX2xp
c3QpOworCWlmIChicGFnZSA9PSBOVUxMKQorCQlwYW5pYygiYWRkX2JvdW5jZV9wYWdlOiBmcmVl
IHBhZ2UgbGlzdCBpcyBlbXB0eSIpOworCisJU1RBSUxRX1JFTU9WRV9IRUFEKCZiei0+Ym91bmNl
X3BhZ2VfbGlzdCwgbGlua3MpOworCWJ6LT5yZXNlcnZlZF9icGFnZXMtLTsKKwliei0+YWN0aXZl
X2JwYWdlcysrOworCW10eF91bmxvY2soJmJvdW5jZV9sb2NrKTsKKworCWlmIChkbWF0LT5jb21t
b24uZmxhZ3MgJiBCVVNfRE1BX0tFRVBfUEdfT0ZGU0VUKSB7CisJCS8qIFBhZ2Ugb2Zmc2V0IG5l
ZWRzIHRvIGJlIHByZXNlcnZlZC4gKi8KKwkJYnBhZ2UtPnZhZGRyIHw9IGFkZHIgJiBQQUdFX01B
U0s7CisJCWJwYWdlLT5idXNhZGRyIHw9IGFkZHIgJiBQQUdFX01BU0s7CisJfQorCWJwYWdlLT5k
YXRhdmFkZHIgPSB2YWRkcjsKKwlicGFnZS0+ZGF0YWFkZHIgPSBhZGRyOworCWJwYWdlLT5kYXRh
Y291bnQgPSBzaXplOworCVNUQUlMUV9JTlNFUlRfVEFJTCgmKG1hcC0+YnBhZ2VzKSwgYnBhZ2Us
IGxpbmtzKTsKKwlyZXR1cm4gKGJwYWdlLT5idXNhZGRyKTsKK30KKworc3RhdGljIHZvaWQKK2Zy
ZWVfYm91bmNlX3BhZ2UoYnVzX2RtYV90YWdfdCBkbWF0LCBzdHJ1Y3QgYm91bmNlX3BhZ2UgKmJw
YWdlKQoreworCXN0cnVjdCBidXNfZG1hbWFwICptYXA7CisJc3RydWN0IGJvdW5jZV96b25lICpi
ejsKKworCWJ6ID0gZG1hdC0+Ym91bmNlX3pvbmU7CisJYnBhZ2UtPmRhdGF2YWRkciA9IDA7CisJ
YnBhZ2UtPmRhdGFjb3VudCA9IDA7CisJaWYgKGRtYXQtPmNvbW1vbi5mbGFncyAmIEJVU19ETUFf
S0VFUF9QR19PRkZTRVQpIHsKKwkJLyoKKwkJICogUmVzZXQgdGhlIGJvdW5jZSBwYWdlIHRvIHN0
YXJ0IGF0IG9mZnNldCAwLiAgT3RoZXIgdXNlcworCQkgKiBvZiB0aGlzIGJvdW5jZSBwYWdlIG1h
eSBuZWVkIHRvIHN0b3JlIGEgZnVsbCBwYWdlIG9mCisJCSAqIGRhdGEgYW5kL29yIGFzc3VtZSBp
dCBzdGFydHMgb24gYSBwYWdlIGJvdW5kYXJ5LgorCQkgKi8KKwkJYnBhZ2UtPnZhZGRyICY9IH5Q
QUdFX01BU0s7CisJCWJwYWdlLT5idXNhZGRyICY9IH5QQUdFX01BU0s7CisJfQorCisJbXR4X2xv
Y2soJmJvdW5jZV9sb2NrKTsKKwlTVEFJTFFfSU5TRVJUX0hFQUQoJmJ6LT5ib3VuY2VfcGFnZV9s
aXN0LCBicGFnZSwgbGlua3MpOworCWJ6LT5mcmVlX2JwYWdlcysrOworCWJ6LT5hY3RpdmVfYnBh
Z2VzLS07CisJaWYgKChtYXAgPSBTVEFJTFFfRklSU1QoJmJvdW5jZV9tYXBfd2FpdGluZ2xpc3Qp
KSAhPSBOVUxMKSB7CisJCWlmIChyZXNlcnZlX2JvdW5jZV9wYWdlcyhtYXAtPmRtYXQsIG1hcCwg
MSkgPT0gMCkgeworCQkJU1RBSUxRX1JFTU9WRV9IRUFEKCZib3VuY2VfbWFwX3dhaXRpbmdsaXN0
LCBsaW5rcyk7CisJCQlTVEFJTFFfSU5TRVJUX1RBSUwoJmJvdW5jZV9tYXBfY2FsbGJhY2tsaXN0
LAorCQkJICAgIG1hcCwgbGlua3MpOworCQkJYnVzZG1hX3N3aV9wZW5kaW5nID0gMTsKKwkJCWJ6
LT50b3RhbF9kZWZlcnJlZCsrOworCQkJc3dpX3NjaGVkKHZtX2loLCAwKTsKKwkJfQorCX0KKwlt
dHhfdW5sb2NrKCZib3VuY2VfbG9jayk7Cit9CisKK3ZvaWQKK2J1c2RtYV9zd2kodm9pZCkKK3sK
KwlidXNfZG1hX3RhZ190IGRtYXQ7CisJc3RydWN0IGJ1c19kbWFtYXAgKm1hcDsKKworCW10eF9s
b2NrKCZib3VuY2VfbG9jayk7CisJd2hpbGUgKChtYXAgPSBTVEFJTFFfRklSU1QoJmJvdW5jZV9t
YXBfY2FsbGJhY2tsaXN0KSkgIT0gTlVMTCkgeworCQlTVEFJTFFfUkVNT1ZFX0hFQUQoJmJvdW5j
ZV9tYXBfY2FsbGJhY2tsaXN0LCBsaW5rcyk7CisJCW10eF91bmxvY2soJmJvdW5jZV9sb2NrKTsK
KwkJZG1hdCA9IG1hcC0+ZG1hdDsKKwkJKGRtYXQtPmNvbW1vbi5sb2NrZnVuYykoZG1hdC0+Y29t
bW9uLmxvY2tmdW5jYXJnLCBCVVNfRE1BX0xPQ0spOworCQlidXNfZG1hbWFwX2xvYWRfbWVtKG1h
cC0+ZG1hdCwgbWFwLCAmbWFwLT5tZW0sCisJCSAgICBtYXAtPmNhbGxiYWNrLCBtYXAtPmNhbGxi
YWNrX2FyZywgQlVTX0RNQV9XQUlUT0spOworCQkoZG1hdC0+Y29tbW9uLmxvY2tmdW5jKShkbWF0
LT5jb21tb24ubG9ja2Z1bmNhcmcsCisJCSAgICBCVVNfRE1BX1VOTE9DSyk7CisJCW10eF9sb2Nr
KCZib3VuY2VfbG9jayk7CisJfQorCW10eF91bmxvY2soJmJvdW5jZV9sb2NrKTsKK30KKworc3Ry
dWN0IGJ1c19kbWFfaW1wbCBidXNfZG1hX2JvdW5jZV9pbXBsID0geworCS50YWdfY3JlYXRlID0g
Ym91bmNlX2J1c19kbWFfdGFnX2NyZWF0ZSwKKwkudGFnX2Rlc3Ryb3kgPSBib3VuY2VfYnVzX2Rt
YV90YWdfZGVzdHJveSwKKwkubWFwX2NyZWF0ZSA9IGJvdW5jZV9idXNfZG1hbWFwX2NyZWF0ZSwK
KwkubWFwX2Rlc3Ryb3kgPSBib3VuY2VfYnVzX2RtYW1hcF9kZXN0cm95LAorCS5tZW1fYWxsb2Mg
PSBib3VuY2VfYnVzX2RtYW1lbV9hbGxvYywKKwkubWVtX2ZyZWUgPSBib3VuY2VfYnVzX2RtYW1l
bV9mcmVlLAorCS5sb2FkX3BoeXMgPSBib3VuY2VfYnVzX2RtYW1hcF9sb2FkX3BoeXMsCisJLmxv
YWRfYnVmZmVyID0gYm91bmNlX2J1c19kbWFtYXBfbG9hZF9idWZmZXIsCisJLmxvYWRfbWEgPSBi
dXNfZG1hbWFwX2xvYWRfbWFfdHJpdiwKKwkubWFwX3dhaXRvayA9IGJvdW5jZV9idXNfZG1hbWFw
X3dhaXRvaywKKwkubWFwX2NvbXBsZXRlID0gYm91bmNlX2J1c19kbWFtYXBfY29tcGxldGUsCisJ
Lm1hcF91bmxvYWQgPSBib3VuY2VfYnVzX2RtYW1hcF91bmxvYWQsCisJLm1hcF9zeW5jID0gYm91
bmNlX2J1c19kbWFtYXBfc3luYworfTsKZGlmZiAtLWdpdCBhL3N5cy9hcm0vYXJtL2J1c2RtYV9t
YWNoZGVwLWNvaGVyZW50LmMgYi9zeXMvYXJtL2FybS9idXNkbWFfbWFjaGRlcC1jb2hlcmVudC5j
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMWVjZGIKLS0tIC9kZXYvbnVs
bAorKysgYi9zeXMvYXJtL2FybS9idXNkbWFfbWFjaGRlcC1jb2hlcmVudC5jCkBAIC0wLDAgKzEs
MzU5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NywgMTk5OCBKdXN0aW4gVC4gR2liYnMu
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgS29u
c3RhbnRpbiBCZWxvdXNvdiA8a2liQEZyZWVCU0Qub3JnPgorICogdW5kZXIgc3BvbnNvcnNoaXAg
ZnJvbSB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0
IG1vZGlmaWNhdGlvbiwgaW1tZWRpYXRlbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4K
KyAqIDIuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+
CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNs
dWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz
L2J1cy5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+Cisj
aW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbWVtZGVzYy5oPgorI2luY2x1ZGUg
PHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKyNpbmNsdWRlIDx2bS92bS5oPgor
I2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKyNpbmNsdWRl
IDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYnVzZG1hX2ltcGwuaD4KKworLyoK
KyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBtYW5pcHVsYXRpbmcgZHJpdmVyIGxvY2tzIGZy
b20gYnVzZG1hIChkdXJpbmcKKyAqIGJ1c2RtYV9zd2ksIGZvciBleGFtcGxlKS4gIERyaXZlcnMg
dGhhdCBkb24ndCBwcm92aWRlIHRoZWlyIG93biBsb2NrcworICogc2hvdWxkIHNwZWNpZnkgJkdp
YW50IHRvIGRtYXQtPmxvY2tmdW5jYXJnLiAgRHJpdmVycyB0aGF0IHVzZSB0aGVpciBvd24KKyAq
IG5vbi1tdXRleCBsb2NraW5nIHNjaGVtZSBkb24ndCBoYXZlIHRvIHVzZSB0aGlzIGF0IGFsbC4K
KyAqLwordm9pZAorYnVzZG1hX2xvY2tfbXV0ZXgodm9pZCAqYXJnLCBidXNfZG1hX2xvY2tfb3Bf
dCBvcCkKK3sKKwlzdHJ1Y3QgbXR4ICpkbXR4OworCisJZG10eCA9IChzdHJ1Y3QgbXR4ICopYXJn
OworCXN3aXRjaCAob3ApIHsKKwljYXNlIEJVU19ETUFfTE9DSzoKKwkJbXR4X2xvY2soZG10eCk7
CisJCWJyZWFrOworCWNhc2UgQlVTX0RNQV9VTkxPQ0s6CisJCW10eF91bmxvY2soZG10eCk7CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCXBhbmljKCJVbmtub3duIG9wZXJhdGlvbiAweCV4IGZvciBi
dXNkbWFfbG9ja19tdXRleCEiLCBvcCk7CisJfQorfQorCisvKgorICogZGZsdF9sb2NrIHNob3Vs
ZCBuZXZlciBnZXQgY2FsbGVkLiAgSXQgZ2V0cyBwdXQgaW50byB0aGUgZG1hIHRhZyB3aGVuCisg
KiBsb2NrZnVuYyA9PSBOVUxMLCB3aGljaCBpcyBvbmx5IHZhbGlkIGlmIHRoZSBtYXBzIHRoYXQg
YXJlIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIHRhZyBhcmUgbWVhbnQgdG8gbmV2ZXIgYmUgZGVm
ZXJlZC4KKyAqIFhYWCBTaG91bGQgaGF2ZSBhIHdheSB0byBpZGVudGlmeSB3aGljaCBkcml2ZXIg
aXMgcmVzcG9uc2libGUgaGVyZS4KKyAqLwordm9pZAorYnVzX2RtYV9kZmx0X2xvY2sodm9pZCAq
YXJnLCBidXNfZG1hX2xvY2tfb3BfdCBvcCkKK3sKKworCXBhbmljKCJkcml2ZXIgZXJyb3I6IGJ1
c2RtYSBkZmx0X2xvY2sgY2FsbGVkIik7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiBhIG1h
dGNoIGlzIG1hZGUuCisgKgorICogVG8gZmluZCBhIG1hdGNoIHdhbGsgdGhlIGNoYWluIG9mIGJ1
c19kbWFfdGFnX3QncyBsb29raW5nIGZvciAncGFkZHInLgorICoKKyAqIElmIHBhZGRyIGlzIHdp
dGhpbiB0aGUgYm91bmRzIG9mIHRoZSBkbWEgdGFnIHRoZW4gY2FsbCB0aGUgZmlsdGVyIGNhbGxi
YWNrCisgKiB0byBjaGVjayBmb3IgYSBtYXRjaCwgaWYgdGhlcmUgaXMgbm8gZmlsdGVyIGNhbGxi
YWNrIHRoZW4gYXNzdW1lIGEgbWF0Y2guCisgKi8KK2ludAorYnVzX2RtYV9ydW5fZmlsdGVyKHN0
cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjLCBidXNfYWRkcl90IHBhZGRyKQoreworCWludCBy
ZXR2YWw7CisKKwlyZXR2YWwgPSAwOworCWRvIHsKKwkJaWYgKCgocGFkZHIgPiB0Yy0+bG93YWRk
ciAmJiBwYWRkciA8PSB0Yy0+aGlnaGFkZHIpIHx8CisJCSAgICAoKHBhZGRyICYgKHRjLT5hbGln
bm1lbnQgLSAxKSkgIT0gMCkpICYmCisJCSAgICAodGMtPmZpbHRlciA9PSBOVUxMIHx8CisJCSAg
ICAoKnRjLT5maWx0ZXIpKHRjLT5maWx0ZXJhcmcsIHBhZGRyKSAhPSAwKSkKKwkJCXJldHZhbCA9
IDE7CisKKwkJdGMgPSB0Yy0+cGFyZW50OwkJCisJfSB3aGlsZSAocmV0dmFsID09IDAgJiYgdGMg
IT0gTlVMTCk7CisJcmV0dXJuIChyZXR2YWwpOworfQorCitpbnQKK2NvbW1vbl9idXNfZG1hX3Rh
Z19jcmVhdGUoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqcGFyZW50LAorICAgIGJ1c19zaXpl
X3QgYWxpZ25tZW50LCBidXNfYWRkcl90IGJvdW5kYXJ5LCBidXNfYWRkcl90IGxvd2FkZHIsCisg
ICAgYnVzX2FkZHJfdCBoaWdoYWRkciwgYnVzX2RtYV9maWx0ZXJfdCAqZmlsdGVyLCB2b2lkICpm
aWx0ZXJhcmcsCisgICAgYnVzX3NpemVfdCBtYXhzaXplLCBpbnQgbnNlZ21lbnRzLCBidXNfc2l6
ZV90IG1heHNlZ3N6LCBpbnQgZmxhZ3MsCisgICAgYnVzX2RtYV9sb2NrX3QgKmxvY2tmdW5jLCB2
b2lkICpsb2NrZnVuY2FyZywgc2l6ZV90IHN6LCB2b2lkICoqZG1hdCkKK3sKKwl2b2lkICpuZXd0
YWc7CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqY29tbW9uOworCisJS0FTU0VSVChzeiA+
PSBzaXplb2Yoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiksICgic3oiKSk7CisJLyogQmFzaWMg
c2FuaXR5IGNoZWNraW5nICovCisJaWYgKGJvdW5kYXJ5ICE9IDAgJiYgYm91bmRhcnkgPCBtYXhz
ZWdzeikKKwkJbWF4c2Vnc3ogPSBib3VuZGFyeTsKKwlpZiAobWF4c2Vnc3ogPT0gMCkKKwkJcmV0
dXJuIChFSU5WQUwpOworCS8qIFJldHVybiBhIE5VTEwgdGFnIG9uIGZhaWx1cmUgKi8KKwkqZG1h
dCA9IE5VTEw7CisKKwluZXd0YWcgPSBtYWxsb2Moc3osIE1fREVWQlVGLCBNX1pFUk8gfCBNX05P
V0FJVCk7CisJaWYgKG5ld3RhZyA9PSBOVUxMKSB7CisJCUNUUjQoS1RSX0JVU0RNQSwgIiVzIHJl
dHVybmVkIHRhZyAlcCB0YWcgZmxhZ3MgMHgleCBlcnJvciAlZCIsCisJCSAgICBfX2Z1bmNfXywg
bmV3dGFnLCAwLCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCisJY29tbW9uID0g
bmV3dGFnOworCWNvbW1vbi0+aW1wbCA9ICZidXNfZG1hX2JvdW5jZV9pbXBsOworCWNvbW1vbi0+
cGFyZW50ID0gcGFyZW50OworCWNvbW1vbi0+YWxpZ25tZW50ID0gYWxpZ25tZW50OworCWNvbW1v
bi0+Ym91bmRhcnkgPSBib3VuZGFyeTsKKwljb21tb24tPmxvd2FkZHIgPSB0cnVuY19wYWdlKCh2
bV9wYWRkcl90KWxvd2FkZHIpICsgKFBBR0VfU0laRSAtIDEpOworCWNvbW1vbi0+aGlnaGFkZHIg
PSB0cnVuY19wYWdlKCh2bV9wYWRkcl90KWhpZ2hhZGRyKSArIChQQUdFX1NJWkUgLSAxKTsKKwlj
b21tb24tPmZpbHRlciA9IGZpbHRlcjsKKwljb21tb24tPmZpbHRlcmFyZyA9IGZpbHRlcmFyZzsK
Kwljb21tb24tPm1heHNpemUgPSBtYXhzaXplOworCWNvbW1vbi0+bnNlZ21lbnRzID0gbnNlZ21l
bnRzOworCWNvbW1vbi0+bWF4c2Vnc3ogPSBtYXhzZWdzejsKKwljb21tb24tPmZsYWdzID0gZmxh
Z3M7CisJY29tbW9uLT5yZWZfY291bnQgPSAxOyAvKiBDb3VudCBvdXJzZWxmICovCisJaWYgKGxv
Y2tmdW5jICE9IE5VTEwpIHsKKwkJY29tbW9uLT5sb2NrZnVuYyA9IGxvY2tmdW5jOworCQljb21t
b24tPmxvY2tmdW5jYXJnID0gbG9ja2Z1bmNhcmc7CisJfSBlbHNlIHsKKwkJY29tbW9uLT5sb2Nr
ZnVuYyA9IGJ1c19kbWFfZGZsdF9sb2NrOworCQljb21tb24tPmxvY2tmdW5jYXJnID0gTlVMTDsK
Kwl9CisKKwkvKiBUYWtlIGludG8gYWNjb3VudCBhbnkgcmVzdHJpY3Rpb25zIGltcG9zZWQgYnkg
b3VyIHBhcmVudCB0YWcgKi8KKwlpZiAocGFyZW50ICE9IE5VTEwpIHsKKwkJY29tbW9uLT5pbXBs
ID0gcGFyZW50LT5pbXBsOworCQljb21tb24tPmxvd2FkZHIgPSBNSU4ocGFyZW50LT5sb3dhZGRy
LCBjb21tb24tPmxvd2FkZHIpOworCQljb21tb24tPmhpZ2hhZGRyID0gTUFYKHBhcmVudC0+aGln
aGFkZHIsIGNvbW1vbi0+aGlnaGFkZHIpOworCQlpZiAoY29tbW9uLT5ib3VuZGFyeSA9PSAwKQor
CQkJY29tbW9uLT5ib3VuZGFyeSA9IHBhcmVudC0+Ym91bmRhcnk7CisJCWVsc2UgaWYgKHBhcmVu
dC0+Ym91bmRhcnkgIT0gMCkgeworCQkJY29tbW9uLT5ib3VuZGFyeSA9IE1JTihwYXJlbnQtPmJv
dW5kYXJ5LAorCQkJICAgIGNvbW1vbi0+Ym91bmRhcnkpOworCQl9CisJCWlmIChjb21tb24tPmZp
bHRlciA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogU2hvcnQgY2lyY3VpdCBsb29raW5nIGF0IG91
ciBwYXJlbnQgZGlyZWN0bHkKKwkJCSAqIHNpbmNlIHdlIGhhdmUgZW5jYXBzdWxhdGVkIGFsbCBv
ZiBpdHMgaW5mb3JtYXRpb24KKwkJCSAqLworCQkJY29tbW9uLT5maWx0ZXIgPSBwYXJlbnQtPmZp
bHRlcjsKKwkJCWNvbW1vbi0+ZmlsdGVyYXJnID0gcGFyZW50LT5maWx0ZXJhcmc7CisJCQljb21t
b24tPnBhcmVudCA9IHBhcmVudC0+cGFyZW50OworCQl9CisJCWF0b21pY19hZGRfaW50KCZwYXJl
bnQtPnJlZl9jb3VudCwgMSk7CisJfQorCSpkbWF0ID0gY29tbW9uOworCXJldHVybiAoMCk7Cit9
CisKKy8qCisgKiBBbGxvY2F0ZSBhIGRldmljZSBzcGVjaWZpYyBkbWFfdGFnLgorICovCitpbnQK
K2J1c19kbWFfdGFnX2NyZWF0ZShidXNfZG1hX3RhZ190IHBhcmVudCwgYnVzX3NpemVfdCBhbGln
bm1lbnQsCisgICAgYnVzX2FkZHJfdCBib3VuZGFyeSwgYnVzX2FkZHJfdCBsb3dhZGRyLCBidXNf
YWRkcl90IGhpZ2hhZGRyLAorICAgIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlciwgdm9pZCAqZmls
dGVyYXJnLCBidXNfc2l6ZV90IG1heHNpemUsCisgICAgaW50IG5zZWdtZW50cywgYnVzX3NpemVf
dCBtYXhzZWdzeiwgaW50IGZsYWdzLCBidXNfZG1hX2xvY2tfdCAqbG9ja2Z1bmMsCisgICAgdm9p
ZCAqbG9ja2Z1bmNhcmcsIGJ1c19kbWFfdGFnX3QgKmRtYXQpCit7CisJc3RydWN0IGJ1c19kbWFf
dGFnX2NvbW1vbiAqdGM7CisJaW50IGVycm9yOworCisJaWYgKHBhcmVudCA9PSBOVUxMKSB7CisJ
CWVycm9yID0gYnVzX2RtYV9ib3VuY2VfaW1wbC50YWdfY3JlYXRlKHBhcmVudCwgYWxpZ25tZW50
LAorCQkgICAgYm91bmRhcnksIGxvd2FkZHIsIGhpZ2hhZGRyLCBmaWx0ZXIsIGZpbHRlcmFyZywg
bWF4c2l6ZSwKKwkJICAgIG5zZWdtZW50cywgbWF4c2Vnc3osIGZsYWdzLCBsb2NrZnVuYywgbG9j
a2Z1bmNhcmcsIGRtYXQpOworCX0gZWxzZSB7CisJCXRjID0gKHN0cnVjdCBidXNfZG1hX3RhZ19j
b21tb24gKilwYXJlbnQ7CisJCWVycm9yID0gdGMtPmltcGwtPnRhZ19jcmVhdGUocGFyZW50LCBh
bGlnbm1lbnQsCisJCSAgICBib3VuZGFyeSwgbG93YWRkciwgaGlnaGFkZHIsIGZpbHRlciwgZmls
dGVyYXJnLCBtYXhzaXplLAorCQkgICAgbnNlZ21lbnRzLCBtYXhzZWdzeiwgZmxhZ3MsIGxvY2tm
dW5jLCBsb2NrZnVuY2FyZywgZG1hdCk7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCitpbnQK
K2J1c19kbWFfdGFnX2Rlc3Ryb3koYnVzX2RtYV90YWdfdCBkbWF0KQoreworCXN0cnVjdCBidXNf
ZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAq
KWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+dGFnX2Rlc3Ryb3koZG1hdCkpOworfQorCisvKgor
ICogQWxsb2NhdGUgYSBoYW5kbGUgZm9yIG1hcHBpbmcgZnJvbSBrdmEvdXZhL3BoeXNpY2FsCisg
KiBhZGRyZXNzIHNwYWNlIGludG8gYnVzIGRldmljZSBzcGFjZS4KKyAqLworaW50CitidXNfZG1h
bWFwX2NyZWF0ZShidXNfZG1hX3RhZ190IGRtYXQsIGludCBmbGFncywgYnVzX2RtYW1hcF90ICpt
YXBwKQoreworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0
IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+bWFwX2NyZWF0
ZShkbWF0LCBmbGFncywgbWFwcCkpOworfQorCisvKgorICogRGVzdHJveSBhIGhhbmRsZSBmb3Ig
bWFwcGluZyBmcm9tIGt2YS91dmEvcGh5c2ljYWwKKyAqIGFkZHJlc3Mgc3BhY2UgaW50byBidXMg
ZGV2aWNlIHNwYWNlLgorICovCitpbnQKK2J1c19kbWFtYXBfZGVzdHJveShidXNfZG1hX3RhZ190
IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXApCit7CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAq
dGM7CisKKwl0YyA9IChzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uICopZG1hdDsKKwlyZXR1cm4g
KHRjLT5pbXBsLT5tYXBfZGVzdHJveShkbWF0LCBtYXApKTsKK30KKworCisvKgorICogQWxsb2Nh
dGUgYSBwaWVjZSBvZiBtZW1vcnkgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkgbWFwcGVkIGludG8K
KyAqIGJ1cyBkZXZpY2Ugc3BhY2UgYmFzZWQgb24gdGhlIGNvbnN0cmFpbnRzIGxpdGVkIGluIHRo
ZSBkbWEgdGFnLgorICogQSBkbWFtYXAgdG8gZm9yIHVzZSB3aXRoIGRtYW1hcF9sb2FkIGlzIGFs
c28gYWxsb2NhdGVkLgorICovCitpbnQKK2J1c19kbWFtZW1fYWxsb2MoYnVzX2RtYV90YWdfdCBk
bWF0LCB2b2lkKiogdmFkZHIsIGludCBmbGFncywKKyAgICBidXNfZG1hbWFwX3QgKm1hcHApCit7
CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqdGM7CisKKwl0YyA9IChzdHJ1Y3QgYnVzX2Rt
YV90YWdfY29tbW9uICopZG1hdDsKKwlyZXR1cm4gKHRjLT5pbXBsLT5tZW1fYWxsb2MoZG1hdCwg
dmFkZHIsIGZsYWdzLCBtYXBwKSk7Cit9CisKKy8qCisgKiBGcmVlIGEgcGllY2Ugb2YgbWVtb3J5
IGFuZCBpdCdzIGFsbG9jaWF0ZWQgZG1hbWFwLCB0aGF0IHdhcyBhbGxvY2F0ZWQKKyAqIHZpYSBi
dXNfZG1hbWVtX2FsbG9jLiAgTWFrZSB0aGUgc2FtZSBjaG9pY2UgZm9yIGZyZWUvY29udGlnZnJl
ZS4KKyAqLwordm9pZAorYnVzX2RtYW1lbV9mcmVlKGJ1c19kbWFfdGFnX3QgZG1hdCwgdm9pZCAq
dmFkZHIsIGJ1c19kbWFtYXBfdCBtYXApCit7CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAq
dGM7CisKKwl0YyA9IChzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uICopZG1hdDsKKwl0Yy0+aW1w
bC0+bWVtX2ZyZWUoZG1hdCwgdmFkZHIsIG1hcCk7Cit9CisKKy8qCisgKiBVdGlsaXR5IGZ1bmN0
aW9uIHRvIGxvYWQgYSBwaHlzaWNhbCBidWZmZXIuICBzZWdwIGNvbnRhaW5zCisgKiB0aGUgc3Rh
cnRpbmcgc2VnbWVudCBvbiBlbnRyYWNlLCBhbmQgdGhlIGVuZGluZyBzZWdtZW50IG9uIGV4aXQu
CisgKi8KK2ludAorX2J1c19kbWFtYXBfbG9hZF9waHlzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVz
X2RtYW1hcF90IG1hcCwgdm1fcGFkZHJfdCBidWYsCisgICAgYnVzX3NpemVfdCBidWZsZW4sIGlu
dCBmbGFncywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCAqc2VncCkKK3sKKwlzdHJ1Y3Qg
YnVzX2RtYV90YWdfY29tbW9uICp0YzsKKworCXRjID0gKHN0cnVjdCBidXNfZG1hX3RhZ19jb21t
b24gKilkbWF0OworCXJldHVybiAodGMtPmltcGwtPmxvYWRfcGh5cyhkbWF0LCBtYXAsIGJ1Ziwg
YnVmbGVuLCBmbGFncywgc2VncywKKwkgICAgc2VncCkpOworfQorCitpbnQKK19idXNfZG1hbWFw
X2xvYWRfbWEoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLCBzdHJ1Y3Qgdm1f
cGFnZSAqKm1hLAorICAgIGJ1c19zaXplX3QgdGxlbiwgaW50IG1hX29mZnMsIGludCBmbGFncywg
YnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsCisgICAgaW50ICpzZWdwKQoreworCXN0cnVjdCBidXNf
ZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAq
KWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+bG9hZF9tYShkbWF0LCBtYXAsIG1hLCB0bGVuLCBt
YV9vZmZzLCBmbGFncywKKwkgICAgc2Vncywgc2VncCkpOworfQorCisvKgorICogVXRpbGl0eSBm
dW5jdGlvbiB0byBsb2FkIGEgbGluZWFyIGJ1ZmZlci4gIHNlZ3AgY29udGFpbnMKKyAqIHRoZSBz
dGFydGluZyBzZWdtZW50IG9uIGVudHJhY2UsIGFuZCB0aGUgZW5kaW5nIHNlZ21lbnQgb24gZXhp
dC4KKyAqLworaW50CitfYnVzX2RtYW1hcF9sb2FkX2J1ZmZlcihidXNfZG1hX3RhZ190IGRtYXQs
IGJ1c19kbWFtYXBfdCBtYXAsIHZvaWQgKmJ1ZiwKKyAgICBidXNfc2l6ZV90IGJ1ZmxlbiwgcG1h
cF90IHBtYXAsIGludCBmbGFncywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsCisgICAgaW50ICpz
ZWdwKQoreworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0
IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+bG9hZF9idWZm
ZXIoZG1hdCwgbWFwLCBidWYsIGJ1ZmxlbiwgcG1hcCwgZmxhZ3MsIHNlZ3MsCisJICAgIHNlZ3Ap
KTsKK30KKwordm9pZAorX19idXNfZG1hbWFwX3dhaXRvayhidXNfZG1hX3RhZ190IGRtYXQsIGJ1
c19kbWFtYXBfdCBtYXAsCisgICAgc3RydWN0IG1lbWRlc2MgKm1lbSwgYnVzX2RtYW1hcF9jYWxs
YmFja190ICpjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfYXJnKQoreworCXN0cnVjdCBidXNfZG1h
X3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRt
YXQ7CisJdGMtPmltcGwtPm1hcF93YWl0b2soZG1hdCwgbWFwLCBtZW0sIGNhbGxiYWNrLCBjYWxs
YmFja19hcmcpOworfQorCitidXNfZG1hX3NlZ21lbnRfdCAqCitfYnVzX2RtYW1hcF9jb21wbGV0
ZShidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsCisgICAgYnVzX2RtYV9zZWdt
ZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycm9yKQoreworCXN0cnVjdCBidXNfZG1hX3Rh
Z19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7
CisJcmV0dXJuICh0Yy0+aW1wbC0+bWFwX2NvbXBsZXRlKGRtYXQsIG1hcCwgc2VncywgbnNlZ3Ms
IGVycm9yKSk7Cit9CisKKy8qCisgKiBSZWxlYXNlIHRoZSBtYXBwaW5nIGhlbGQgYnkgbWFwLgor
ICovCit2b2lkCitfYnVzX2RtYW1hcF91bmxvYWQoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1h
bWFwX3QgbWFwKQoreworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAo
c3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJdGMtPmltcGwtPm1hcF91bmxvYWQo
ZG1hdCwgbWFwKTsKK30KKwordm9pZAorX2J1c19kbWFtYXBfc3luYyhidXNfZG1hX3RhZ190IGRt
YXQsIGJ1c19kbWFtYXBfdCBtYXAsIGJ1c19kbWFzeW5jX29wX3Qgb3ApCit7CisJc3RydWN0IGJ1
c19kbWFfdGFnX2NvbW1vbiAqdGM7CisKKwl0YyA9IChzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9u
ICopZG1hdDsKKwl0Yy0+aW1wbC0+bWFwX3N5bmMoZG1hdCwgbWFwLCBvcCk7Cit9CmRpZmYgLS1n
aXQgYS9zeXMvYXJtL2luY2x1ZGUvYnVzZG1hX2ltcGwuaCBiL3N5cy9hcm0vaW5jbHVkZS9idXNk
bWFfaW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiODljMjEKLS0t
IC9kZXYvbnVsbAorKysgYi9zeXMvYXJtL2luY2x1ZGUvYnVzZG1hX2ltcGwuaApAQCAtMCwwICsx
LDk2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMyBUaGUgRnJlZUJTRCBGb3VuZGF0aW9u
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVs
b3BlZCBieSBLb25zdGFudGluIEJlbG91c292IDxraWJARnJlZUJTRC5vcmc+CisgKiB1bmRlciBz
cG9uc29yc2hpcCBmcm9tIHRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisg
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
CisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAq
LworCisjaWZuZGVmCV9fQVJNX0JVU0RNQV9JTVBMX0gKKyNkZWZpbmUJX19BUk1fQlVTRE1BX0lN
UExfSAorCitzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uIHsKKwlzdHJ1Y3QgYnVzX2RtYV9pbXBs
ICppbXBsOworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnBhcmVudDsKKwlidXNfc2l6ZV90
CSAgYWxpZ25tZW50OworCWJ1c19hZGRyX3QJICBib3VuZGFyeTsKKwlidXNfYWRkcl90CSAgbG93
YWRkcjsKKwlidXNfYWRkcl90CSAgaGlnaGFkZHI7CisJYnVzX2RtYV9maWx0ZXJfdCAqZmlsdGVy
OworCXZvaWQJCSAqZmlsdGVyYXJnOworCWJ1c19zaXplX3QJICBtYXhzaXplOworCXVfaW50CQkg
IG5zZWdtZW50czsKKwlidXNfc2l6ZV90CSAgbWF4c2Vnc3o7CisJaW50CQkgIGZsYWdzOworCWJ1
c19kbWFfbG9ja190CSAqbG9ja2Z1bmM7CisJdm9pZAkJICpsb2NrZnVuY2FyZzsKKwlpbnQJCSAg
cmVmX2NvdW50OworfTsKKworc3RydWN0IGJ1c19kbWFfaW1wbCB7CisJaW50ICgqdGFnX2NyZWF0
ZSkoYnVzX2RtYV90YWdfdCBwYXJlbnQsCisJICAgIGJ1c19zaXplX3QgYWxpZ25tZW50LCBidXNf
YWRkcl90IGJvdW5kYXJ5LCBidXNfYWRkcl90IGxvd2FkZHIsCisJICAgIGJ1c19hZGRyX3QgaGln
aGFkZHIsIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlciwKKwkgICAgdm9pZCAqZmlsdGVyYXJnLCBi
dXNfc2l6ZV90IG1heHNpemUsIGludCBuc2VnbWVudHMsCisJICAgIGJ1c19zaXplX3QgbWF4c2Vn
c3osIGludCBmbGFncywgYnVzX2RtYV9sb2NrX3QgKmxvY2tmdW5jLAorCSAgICB2b2lkICpsb2Nr
ZnVuY2FyZywgYnVzX2RtYV90YWdfdCAqZG1hdCk7CisJaW50ICgqdGFnX2Rlc3Ryb3kpKGJ1c19k
bWFfdGFnX3QgZG1hdCk7CisJaW50ICgqbWFwX2NyZWF0ZSkoYnVzX2RtYV90YWdfdCBkbWF0LCBp
bnQgZmxhZ3MsIGJ1c19kbWFtYXBfdCAqbWFwcCk7CisJaW50ICgqbWFwX2Rlc3Ryb3kpKGJ1c19k
bWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCk7CisJaW50ICgqbWVtX2FsbG9jKShidXNf
ZG1hX3RhZ190IGRtYXQsIHZvaWQqKiB2YWRkciwgaW50IGZsYWdzLAorCSAgICBidXNfZG1hbWFw
X3QgKm1hcHApOworCXZvaWQgKCptZW1fZnJlZSkoYnVzX2RtYV90YWdfdCBkbWF0LCB2b2lkICp2
YWRkciwgYnVzX2RtYW1hcF90IG1hcCk7CisJaW50ICgqbG9hZF9tYSkoYnVzX2RtYV90YWdfdCBk
bWF0LCBidXNfZG1hbWFwX3QgbWFwLAorCSAgICBzdHJ1Y3Qgdm1fcGFnZSAqKm1hLCBidXNfc2l6
ZV90IHRsZW4sIGludCBtYV9vZmZzLCBpbnQgZmxhZ3MsCisJICAgIGJ1c19kbWFfc2VnbWVudF90
ICpzZWdzLCBpbnQgKnNlZ3ApOworCWludCAoKmxvYWRfcGh5cykoYnVzX2RtYV90YWdfdCBkbWF0
LCBidXNfZG1hbWFwX3QgbWFwLAorCSAgICB2bV9wYWRkcl90IGJ1ZiwgYnVzX3NpemVfdCBidWZs
ZW4sIGludCBmbGFncywKKwkgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCAqc2VncCk7
CisJaW50ICgqbG9hZF9idWZmZXIpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1h
cCwKKwkgICAgdm9pZCAqYnVmLCBidXNfc2l6ZV90IGJ1ZmxlbiwgcG1hcF90IHBtYXAsIGludCBm
bGFncywKKwkgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCAqc2VncCk7CisJdm9pZCAo
Km1hcF93YWl0b2spKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKwkgICAg
c3RydWN0IG1lbWRlc2MgKm1lbSwgYnVzX2RtYW1hcF9jYWxsYmFja190ICpjYWxsYmFjaywKKwkg
ICAgdm9pZCAqY2FsbGJhY2tfYXJnKTsKKwlidXNfZG1hX3NlZ21lbnRfdCAqKCptYXBfY29tcGxl
dGUpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKwkgICAgYnVzX2RtYV9z
ZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycm9yKTsKKwl2b2lkICgqbWFwX3VubG9h
ZCkoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwKTsKKwl2b2lkICgqbWFwX3N5
bmMpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKwkgICAgYnVzX2RtYXN5
bmNfb3BfdCBvcCk7Cit9OworCit2b2lkIGJ1c19kbWFfZGZsdF9sb2NrKHZvaWQgKmFyZywgYnVz
X2RtYV9sb2NrX29wX3Qgb3ApOworaW50IGJ1c19kbWFfcnVuX2ZpbHRlcihzdHJ1Y3QgYnVzX2Rt
YV90YWdfY29tbW9uICpkbWF0LCBidXNfYWRkcl90IHBhZGRyKTsKK2ludCBjb21tb25fYnVzX2Rt
YV90YWdfY3JlYXRlKHN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnBhcmVudCwKKyAgICBidXNf
c2l6ZV90IGFsaWdubWVudCwKKyAgICBidXNfYWRkcl90IGJvdW5kYXJ5LCBidXNfYWRkcl90IGxv
d2FkZHIsIGJ1c19hZGRyX3QgaGlnaGFkZHIsCisgICAgYnVzX2RtYV9maWx0ZXJfdCAqZmlsdGVy
LCB2b2lkICpmaWx0ZXJhcmcsIGJ1c19zaXplX3QgbWF4c2l6ZSwKKyAgICBpbnQgbnNlZ21lbnRz
LCBidXNfc2l6ZV90IG1heHNlZ3N6LCBpbnQgZmxhZ3MsIGJ1c19kbWFfbG9ja190ICpsb2NrZnVu
YywKKyAgICB2b2lkICpsb2NrZnVuY2FyZywgc2l6ZV90IHN6LCB2b2lkICoqZG1hdCk7CisKK2V4
dGVybiBzdHJ1Y3QgYnVzX2RtYV9pbXBsIGJ1c19kbWFfYm91bmNlX2ltcGw7CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvc3lzL2NvbmYvZmlsZXMuYXJtIGIvc3lzL2NvbmYvZmlsZXMuYXJtCmluZGV4
IGYwM2QyYTEuLjVhYTMyN2YgMTAwNjQ0Ci0tLSBhL3N5cy9jb25mL2ZpbGVzLmFybQorKysgYi9z
eXMvY29uZi9maWxlcy5hcm0KQEAgLTI1LDggKzI1LDEwIEBAIGFybS9hcm0vYmxvY2tpby5TCQlz
dGFuZGFyZAogYXJtL2FybS9idXNfc3BhY2VfYXNtX2dlbmVyaWMuUwlzdGFuZGFyZAogYXJtL2Fy
bS9idXNfc3BhY2VfYmFzZS5jCW9wdGlvbmFsCWZkdAogYXJtL2FybS9idXNfc3BhY2VfZ2VuZXJp
Yy5jCXN0YW5kYXJkCi1hcm0vYXJtL2J1c2RtYV9tYWNoZGVwLXY0LmMgCW9wdGlvbmFsCSFhcm12
NgotYXJtL2FybS9idXNkbWFfbWFjaGRlcC12Ni5jIAlvcHRpb25hbAlhcm12NgorYXJtL2FybS9i
dXNkbWFfbWFjaGRlcC12NC5jCQlvcHRpb25hbAkhYXJtdjYKK2FybS9hcm0vYnVzZG1hX21hY2hk
ZXAtdjYuYwkJb3B0aW9uYWwJYXJtdjYgIWFybV9kbWFfY29oZXJlbnQKK2FybS9hcm0vYnVzZG1h
X21hY2hkZXAtY29oZXJlbnQuYyAJb3B0aW9uYWwJYXJtdjYgYXJtX2RtYV9jb2hlcmVudAorYXJt
L2FybS9idXNkbWFfYm91bmNlLmMgCQlvcHRpb25hbAlhcm12NiBhcm1fZG1hX2NvaGVyZW50CiBh
cm0vYXJtL2NvcHlzdHIuUwkJc3RhbmRhcmQKIGFybS9hcm0vY3B1ZnVuYy5jCQlzdGFuZGFyZAog
YXJtL2FybS9jcHVmdW5jX2FzbS5TCQlzdGFuZGFyZApkaWZmIC0tZ2l0IGEvc3lzL2NvbmYvb3B0
aW9ucy5hcm0gYi9zeXMvY29uZi9vcHRpb25zLmFybQppbmRleCAyZDhmNDc0Li41MDEyYjE5IDEw
MDY0NAotLS0gYS9zeXMvY29uZi9vcHRpb25zLmFybQorKysgYi9zeXMvY29uZi9vcHRpb25zLmFy
bQpAQCAtMSw2ICsxLDcgQEAKICMkRnJlZUJTRCQKIEFSTVY2CQkJb3B0X2dsb2JhbC5oCiBBUk1f
Q0FDSEVfTE9DS19FTkFCTEUJb3B0X2dsb2JhbC5oCitBUk1fRE1BX0NPSEVSRU5UCW9wdF9nbG9i
YWwuaAogQVJNX0tFUk5fRElSRUNUTUFQCW9wdF92bS5oCiBBUk1fTDJfUElQVAkJb3B0X2dsb2Jh
bC5oCiBBUk1fTDJfUFJFRkVUQ0gJCW9wdF9nbG9iYWwuaAotLSAKMi40LjYKCg==
--001a113ec89c0de2a2054c074ca8--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPv3WKcG_Y=5zPk-2vGbQfCpiNcWvuUymY8EHRnWsM2FUzcG4Q>