Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Jun 2022 09:53:01 -0300 (-03)
From:      Ivan Quitschal <tezeka@hotmail.com>
To:        freebsd-current@freebsd.org
Subject:   vt newcons mouse paste issue FIXED
Message-ID:  <CP6P284MB1900CA1ED5B5BADE054ECB34CBB29@CP6P284MB1900.BRAP284.PROD.OUTLOOK.COM>

next in thread | raw e-mail | index | archive | help
--3432851520-594251130-1655902382=:1623
Content-Type: text/plain; format=flowed; charset=US-ASCII


Hi All

About this anoying paste error we still have in vt console, I looked it up and couldnt find any fix regarding this, so i did it.

Please find attached the fixed version of /usr/src/sys/dev/vt/vt_buf.c with trim spaces and aligned to the console size.
I've tested with other fonts and looks fine in here.

I hope this can help other ppl which finds this 
terminal mouse paste issue a pain in the neck.

thanks

--tzk
--3432851520-594251130-1655902382=:1623
Content-Type: text/plain; charset=US-ASCII; name=vt_buf.c
Content-Transfer-Encoding: BASE64
Content-ID: <f221781c-0dc-cba9-26e9-ce9c1ed7714d@hotmail.com>
Content-Description: vt_buf.c
Content-Disposition: attachment; filename=vt_buf.c

LyotDQogKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLUZyZWVCU0QNCiAq
DQogKiBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTMgVGhlIEZyZWVCU0QgRm91bmRhdGlvbg0KICoN
CiAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBFZCBTY2hvdXRlbiB1bmRlciBzcG9u
c29yc2hpcCBmcm9tIHRoZQ0KICogRnJlZUJTRCBGb3VuZGF0aW9uLg0KICoNCiAqIFBvcnRpb25z
IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBkZXZlbG9wZWQgYnkgT2xla3NhbmRyIFJ5YmFsa28NCiAq
IHVuZGVyIHNwb25zb3JzaGlwIGZyb20gdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4NCiAqDQogKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQNCiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KICogYXJlIG1ldDoNCiAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuDQogKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodA0KICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4N
CiAqDQogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EDQogKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCiAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFDQogKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCiAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTDQogKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikNCiAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUDQogKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZDQogKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GDQogKiBTVUNIIERBTUFHRS4NCiAqLw0KDQojaW5j
bHVkZSA8c3lzL2NkZWZzLmg+DQpfX0ZCU0RJRCgiJEZyZWVCU0QkIik7DQoNCiNpbmNsdWRlIDxz
eXMvcGFyYW0uaD4NCiNpbmNsdWRlIDxzeXMvc3lzdG0uaD4NCiNpbmNsdWRlIDxzeXMva2VybmVs
Lmg+DQojaW5jbHVkZSA8c3lzL2xvY2suaD4NCiNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+DQojaW5j
bHVkZSA8c3lzL211dGV4Lmg+DQojaW5jbHVkZSA8c3lzL3JlYm9vdC5oPg0KI2luY2x1ZGUgPHN5
cy9jdHlwZS5oPg0KDQojaW5jbHVkZSA8ZGV2L3Z0L3Z0Lmg+DQoNCnN0YXRpYyBNQUxMT0NfREVG
SU5FKE1fVlRCVUYsICJ2dGJ1ZiIsICJ2dCBidWZmZXIiKTsNCg0KI2RlZmluZQlWVEJVRl9MT0NL
KHZiKQkJbXR4X2xvY2tfc3BpbigmKHZiKS0+dmJfbG9jaykNCiNkZWZpbmUJVlRCVUZfVU5MT0NL
KHZiKQltdHhfdW5sb2NrX3NwaW4oJih2YiktPnZiX2xvY2spDQoNCiNkZWZpbmUgUE9TX0lOREVY
KGMsIHIpICgoKHIpIDw8IDEyKSArIChjKSkNCiNkZWZpbmUJUE9TX0NPUFkoZCwgcykJZG8gewlc
DQoJKGQpLnRwX2NvbCA9IChzKS50cF9jb2w7CVwNCgkoZCkudHBfcm93ID0gKHMpLnRwX3JvdzsJ
XA0KfSB3aGlsZSAoMCkNCg0KI2lmbmRlZiBTQ19OT19DVVRQQVNURQ0Kc3RhdGljIGludCB2dGJ1
Zl9odHcoY29uc3Qgc3RydWN0IHZ0X2J1ZiAqdmIsIGludCByb3cpOw0Kc3RhdGljIGludCB2dGJ1
Zl93dGgoY29uc3Qgc3RydWN0IHZ0X2J1ZiAqdmIsIGludCByb3cpOw0Kc3RhdGljIGludCB2dGJ1
Zl9pbl90aGlzX3JhbmdlKGludCBiZWdpbiwgaW50IHRlc3QsIGludCBlbmQsIGludCBzeik7DQoj
ZW5kaWYNCg0KLyoNCiAqIGxpbmU0DQogKiBsaW5lNSA8LS0tIGN1cnJvZmZzZXQgKHRlcm1pbmFs
IG91dHB1dCB0byB0aGF0IGxpbmUpDQogKiBsaW5lMA0KICogbGluZTEgICAgICAgICAgICAgICAg
ICA8LS0tIHJvZmZzZXQgKGhpc3RvcnkgZGlzcGxheSBmcm9tIHRoYXQgcG9pbnQpDQogKiBsaW5l
Mg0KICogbGluZTMNCiAqLw0KaW50DQp2dGhpc3Rvcnlfc2VlayhzdHJ1Y3QgdnRfYnVmICp2Yiwg
aW50IG9mZnNldCwgaW50IHdoZW5jZSkNCnsNCglpbnQgZGlmZiwgdG9wLCBib3R0b20sIHJvZmZz
ZXQ7DQoNCgkvKiBObyBzY3JvbGxpbmcgaWYgbm90IGVuYWJsZWQuICovDQoJaWYgKCh2Yi0+dmJf
ZmxhZ3MgJiBWQkZfU0NST0xMKSA9PSAwKSB7DQoJCWlmICh2Yi0+dmJfcm9mZnNldCAhPSB2Yi0+
dmJfY3Vycm9mZnNldCkgew0KCQkJdmItPnZiX3JvZmZzZXQgPSB2Yi0+dmJfY3Vycm9mZnNldDsN
CgkJCXJldHVybiAoMHhmZmZmKTsNCgkJfQ0KCQlyZXR1cm4gKDApOyAvKiBObyBjaGFuZ2VzICov
DQoJfQ0KDQoJLyogInRvcCIgbWF5IGJlIGEgbmVnYXRpdmUgaW50ZWdlci4gKi8NCglib3R0b20g
PSB2Yi0+dmJfY3Vycm9mZnNldDsNCgl0b3AgPSAodmItPnZiX2ZsYWdzICYgVkJGX0hJU1RPUllf
RlVMTCkgPw0KCSAgICBib3R0b20gKyB2Yi0+dmJfc2NyX3NpemUudHBfcm93IC0gdmItPnZiX2hp
c3Rvcnlfc2l6ZSA6DQoJICAgIDA7DQoNCglyb2Zmc2V0ID0gMDsgLyogTWFrZSBnY2MgaGFwcHku
ICovDQoJc3dpdGNoICh3aGVuY2UpIHsNCgljYXNlIFZIU19TRVQ6DQoJCWlmIChvZmZzZXQgPCAw
KQ0KCQkJb2Zmc2V0ID0gMDsNCgkJcm9mZnNldCA9IHRvcCArIG9mZnNldDsNCgkJYnJlYWs7DQoJ
Y2FzZSBWSFNfQ1VSOg0KCQkvKg0KCQkgKiBPcGVyYXRlIG9uIGNvcHkgb2Ygb2Zmc2V0IHZhbHVl
LCBzaW5jZSBpdCB0ZW1wb3JhcnkNCgkJICogY2FuIGJlIGJpZ2dlciB0aGFuIGFtb3VudCBvZiBy
b3dzIGluIGJ1ZmZlci4NCgkJICovDQoJCXJvZmZzZXQgPSB2Yi0+dmJfcm9mZnNldDsNCgkJaWYg
KHJvZmZzZXQgPj0gYm90dG9tICsgdmItPnZiX3Njcl9zaXplLnRwX3JvdykNCgkJCXJvZmZzZXQg
LT0gdmItPnZiX2hpc3Rvcnlfc2l6ZTsNCg0KCQlyb2Zmc2V0ICs9IG9mZnNldDsNCgkJcm9mZnNl
dCA9IE1BWChyb2Zmc2V0LCB0b3ApOw0KCQlyb2Zmc2V0ID0gTUlOKHJvZmZzZXQsIGJvdHRvbSk7
DQoNCgkJaWYgKHJvZmZzZXQgPCAwKQ0KCQkJcm9mZnNldCA9IHZiLT52Yl9oaXN0b3J5X3NpemUg
KyByb2Zmc2V0Ow0KDQoJCWJyZWFrOw0KCWNhc2UgVkhTX0VORDoNCgkJLyogR28gdG8gY3VycmVu
dCBvZmZzZXQuICovDQoJCXJvZmZzZXQgPSB2Yi0+dmJfY3Vycm9mZnNldDsNCgkJYnJlYWs7DQoJ
fQ0KDQoJZGlmZiA9IHZiLT52Yl9yb2Zmc2V0ICE9IHJvZmZzZXQ7DQoJdmItPnZiX3JvZmZzZXQg
PSByb2Zmc2V0Ow0KDQoJcmV0dXJuIChkaWZmKTsNCn0NCg0Kdm9pZA0KdnRoaXN0b3J5X2FkZGxp
bmVzKHN0cnVjdCB2dF9idWYgKnZiLCBpbnQgb2Zmc2V0KQ0Kew0KI2lmbmRlZiBTQ19OT19DVVRQ
QVNURQ0KCWludCBjdXIsIHN6Ow0KI2VuZGlmDQoNCgl2Yi0+dmJfY3Vycm9mZnNldCArPSBvZmZz
ZXQ7DQoJaWYgKHZiLT52Yl9jdXJyb2Zmc2V0ICsgdmItPnZiX3Njcl9zaXplLnRwX3JvdyA+PSB2
Yi0+dmJfaGlzdG9yeV9zaXplKSB7DQoJCXZiLT52Yl9mbGFncyB8PSBWQkZfSElTVE9SWV9GVUxM
Ow0KCQl2Yi0+dmJfY3Vycm9mZnNldCAlPSB2Yi0+dmJfaGlzdG9yeV9zaXplOw0KCX0NCglpZiAo
KHZiLT52Yl9mbGFncyAmIFZCRl9TQ1JPTEwpID09IDApIHsNCgkJdmItPnZiX3JvZmZzZXQgPSB2
Yi0+dmJfY3Vycm9mZnNldDsNCgl9DQoNCiNpZm5kZWYgU0NfTk9fQ1VUUEFTVEUNCglzeiA9IHZi
LT52Yl9oaXN0b3J5X3NpemU7DQoJY3VyID0gdmItPnZiX3JvZmZzZXQgKyB2Yi0+dmJfc2NyX3Np
emUudHBfcm93ICsgc3ogLSAxOw0KCWlmICh2dGJ1Zl9pbl90aGlzX3JhbmdlKGN1ciwgdmItPnZi
X21hcmtfc3RhcnQudHBfcm93LCBjdXIgKyBvZmZzZXQsIHN6KSB8fA0KCSAgICB2dGJ1Zl9pbl90
aGlzX3JhbmdlKGN1ciwgdmItPnZiX21hcmtfZW5kLnRwX3JvdywgY3VyICsgb2Zmc2V0LCBzeikp
IHsNCgkJLyogY2xlYXIgc2NyZWVuIHNlbGVjdGlvbiAqLw0KCQl2Yi0+dmJfbWFya19zdGFydC50
cF9yb3cgPSB2Yi0+dmJfbWFya19lbmQudHBfcm93Ow0KCQl2Yi0+dmJfbWFya19zdGFydC50cF9j
b2wgPSB2Yi0+dmJfbWFya19lbmQudHBfY29sOw0KCX0NCiNlbmRpZg0KfQ0KDQp2b2lkDQp2dGhp
c3RvcnlfZ2V0cG9zKGNvbnN0IHN0cnVjdCB2dF9idWYgKnZiLCB1bnNpZ25lZCBpbnQgKm9mZnNl
dCkNCnsNCg0KCSpvZmZzZXQgPSB2Yi0+dmJfcm9mZnNldDsNCn0NCg0KI2lmbmRlZiBTQ19OT19D
VVRQQVNURQkvKiBPbmx5IG1vdXNlIHN1cHBvcnQgdXNlIGl0IG5vdy4gKi8NCi8qIFRyYW5zbGF0
ZSBoaXN0b3J5IHJvdyB0byBjdXJyZW50IHZpZXcgcm93IG51bWJlci4gKi8NCnN0YXRpYyBpbnQN
CnZ0YnVmX2h0dyhjb25zdCBzdHJ1Y3QgdnRfYnVmICp2YiwgaW50IHJvdykNCnsNCg0KCS8qDQoJ
ICogdG90YWwgMTAwMCByb3dzLg0KCSAqIEhpc3Rvcnkgb2Zmc2V0CXJvZmZzZXQJd2lucm93DQoJ
ICoJMjA1CQkyMDAJKCgyMDUgLSAyMDAgKyAxMDAwKSAlIDEwMDApID0gNQ0KCSAqCTkwCQk5OTAJ
KCg5MCAtIDk5MCArIDEwMDApICUgMTAwMCkgPSAxMDANCgkgKi8NCglyZXR1cm4gKChyb3cgLSB2
Yi0+dmJfcm9mZnNldCArIHZiLT52Yl9oaXN0b3J5X3NpemUpICUNCgkgICAgdmItPnZiX2hpc3Rv
cnlfc2l6ZSk7DQp9DQoNCi8qIFRyYW5zbGF0ZSBjdXJyZW50IHZpZXcgcm93IG51bWJlciB0byBo
aXN0b3J5IHJvdy4gKi8NCnN0YXRpYyBpbnQNCnZ0YnVmX3d0aChjb25zdCBzdHJ1Y3QgdnRfYnVm
ICp2YiwgaW50IHJvdykNCnsNCg0KCXJldHVybiAoKHZiLT52Yl9yb2Zmc2V0ICsgcm93KSAlIHZi
LT52Yl9oaXN0b3J5X3NpemUpOw0KfQ0KDQovKg0KICogVGVzdCBpZiBhbiBpbmRleCBpbiBhIGNp
cmN1bGFyIGJ1ZmZlciBpcyB3aXRoaW4gYSByYW5nZS4NCiAqDQogKiBiZWdpbiAtIHN0YXJ0IGlu
ZGV4DQogKiBlbmQgLSBlbmQgaW5kZXgNCiAqIHRlc3QgLSB0ZXN0IGluZGV4DQogKiBzeiAtIHNp
emUgb2YgY2lyY3VsYXIgYnVmZmVyIHdoZW4gaXQgdHVybnMgb3Zlcg0KICovDQpzdGF0aWMgaW50
DQp2dGJ1Zl9pbl90aGlzX3JhbmdlKGludCBiZWdpbiwgaW50IHRlc3QsIGludCBlbmQsIGludCBz
eikNCnsNCg0KCWJlZ2luICU9IHN6Ow0KCWVuZCAlPSBzejsNCg0KCS8qIGNoZWNrIGZvciBpbnZl
cnNpb24gKi8NCglpZiAoYmVnaW4gPiBlbmQpDQoJCXJldHVybiAodGVzdCA+PSBiZWdpbiB8fCB0
ZXN0IDwgZW5kKTsNCgllbHNlDQoJCXJldHVybiAodGVzdCA+PSBiZWdpbiAmJiB0ZXN0IDwgZW5k
KTsNCn0NCiNlbmRpZg0KDQppbnQNCnZ0YnVmX2lzY3Vyc29yKGNvbnN0IHN0cnVjdCB2dF9idWYg
KnZiLCBpbnQgcm93LCBpbnQgY29sKQ0Kew0KI2lmbmRlZiBTQ19OT19DVVRQQVNURQ0KCWludCBz
Yywgc3IsIHN6LCBlYywgZXIsIHRtcDsNCiNlbmRpZg0KDQoJaWYgKCh2Yi0+dmJfZmxhZ3MgJiAo
VkJGX0NVUlNPUnxWQkZfU0NST0xMKSkgPT0gVkJGX0NVUlNPUiAmJg0KCSAgICAodmItPnZiX2N1
cnNvci50cF9yb3cgPT0gcm93KSAmJiAodmItPnZiX2N1cnNvci50cF9jb2wgPT0gY29sKSkNCgkJ
cmV0dXJuICgxKTsNCg0KI2lmbmRlZiBTQ19OT19DVVRQQVNURQ0KCS8qIE1hcmsgY3V0L3Bhc3Rl
IHJlZ2lvbi4gKi8NCglpZiAodmItPnZiX21hcmtfc3RhcnQudHBfY29sID09IHZiLT52Yl9tYXJr
X2VuZC50cF9jb2wgJiYNCgkgICAgdmItPnZiX21hcmtfc3RhcnQudHBfcm93ID09IHZiLT52Yl9t
YXJrX2VuZC50cF9yb3cpDQoJCXJldHVybiAoMCk7DQoNCglzYyA9IHZiLT52Yl9tYXJrX3N0YXJ0
LnRwX2NvbDsNCglzciA9IHZiLT52Yl9tYXJrX3N0YXJ0LnRwX3JvdzsNCgllYyA9IHZiLT52Yl9t
YXJrX2VuZC50cF9jb2w7DQoJZXIgPSB2Yi0+dmJfbWFya19lbmQudHBfcm93Ow0KDQoJLyoNCgkg
KiBJbmZvcm1hdGlvbiBhYm91dCBpZiB0aGUgc2VsZWN0aW9uIHdhcyBtYWRlIGJvdHRvbS10b3Ag
b3INCgkgKiB0b3AtYm90dG9tIGlzIGxvc3QgZHVlIHRvIG1vZHVsbyBhcml0aG1ldGljcyBhbmQg
bmVlZHMgdG8NCgkgKiBiZSByZWNvdmVyZWQ6DQoJICovDQoJc3ogPSB2Yi0+dmJfaGlzdG9yeV9z
aXplOw0KCXRtcCA9IChzeiArIGVyIC0gc3IpICUgc3o7DQoJcm93ID0gdnRidWZfd3RoKHZiLCBy
b3cpOw0KDQoJLyogU3dhcCBzdGFydCBhbmQgZW5kIGlmIHN0YXJ0ID4gZW5kICovDQoJaWYgKCgy
ICogdG1wKSA+IHN6IHx8ICh0bXAgPT0gMCAmJiBzYyA+IGVjKSkgew0KCQl0bXAgPSBzYzsgc2Mg
PSBlYzsgZWMgPSB0bXA7DQoJCXRtcCA9IHNyOyBzciA9IGVyOyBlciA9IHRtcDsNCgl9DQoNCglp
ZiAodnRidWZfaW5fdGhpc19yYW5nZShQT1NfSU5ERVgoc2MsIHNyKSwgUE9TX0lOREVYKGNvbCwg
cm93KSwNCgkgICAgUE9TX0lOREVYKGVjLCBlciksIFBPU19JTkRFWCgwLCBzeikpKQ0KCQlyZXR1
cm4gKDEpOw0KI2VuZGlmDQoNCglyZXR1cm4gKDApOw0KfQ0KDQp2b2lkDQp2dGJ1Zl9sb2NrKHN0
cnVjdCB2dF9idWYgKnZiKQ0Kew0KDQoJVlRCVUZfTE9DSyh2Yik7DQp9DQoNCnZvaWQNCnZ0YnVm
X3VubG9jayhzdHJ1Y3QgdnRfYnVmICp2YikNCnsNCg0KCVZUQlVGX1VOTE9DSyh2Yik7DQp9DQoN
CnZvaWQNCnZ0YnVmX2RpcnR5KHN0cnVjdCB2dF9idWYgKnZiLCBjb25zdCB0ZXJtX3JlY3RfdCAq
YXJlYSkNCnsNCg0KCWlmICh2Yi0+dmJfZGlydHlyZWN0LnRyX2JlZ2luLnRwX3JvdyA+IGFyZWEt
PnRyX2JlZ2luLnRwX3JvdykNCgkJdmItPnZiX2RpcnR5cmVjdC50cl9iZWdpbi50cF9yb3cgPSBh
cmVhLT50cl9iZWdpbi50cF9yb3c7DQoJaWYgKHZiLT52Yl9kaXJ0eXJlY3QudHJfYmVnaW4udHBf
Y29sID4gYXJlYS0+dHJfYmVnaW4udHBfY29sKQ0KCQl2Yi0+dmJfZGlydHlyZWN0LnRyX2JlZ2lu
LnRwX2NvbCA9IGFyZWEtPnRyX2JlZ2luLnRwX2NvbDsNCglpZiAodmItPnZiX2RpcnR5cmVjdC50
cl9lbmQudHBfcm93IDwgYXJlYS0+dHJfZW5kLnRwX3JvdykNCgkJdmItPnZiX2RpcnR5cmVjdC50
cl9lbmQudHBfcm93ID0gYXJlYS0+dHJfZW5kLnRwX3JvdzsNCglpZiAodmItPnZiX2RpcnR5cmVj
dC50cl9lbmQudHBfY29sIDwgYXJlYS0+dHJfZW5kLnRwX2NvbCkNCgkJdmItPnZiX2RpcnR5cmVj
dC50cl9lbmQudHBfY29sID0gYXJlYS0+dHJfZW5kLnRwX2NvbDsNCn0NCg0Kc3RhdGljIGlubGlu
ZSB2b2lkDQp2dGJ1Zl9kaXJ0eV9jZWxsKHN0cnVjdCB2dF9idWYgKnZiLCBjb25zdCB0ZXJtX3Bv
c190ICpwKQ0Kew0KCXRlcm1fcmVjdF90IGFyZWE7DQoNCglhcmVhLnRyX2JlZ2luID0gKnA7DQoJ
YXJlYS50cl9lbmQudHBfcm93ID0gcC0+dHBfcm93ICsgMTsNCglhcmVhLnRyX2VuZC50cF9jb2wg
PSBwLT50cF9jb2wgKyAxOw0KCXZ0YnVmX2RpcnR5KHZiLCAmYXJlYSk7DQp9DQoNCnN0YXRpYyB2
b2lkDQp2dGJ1Zl9tYWtlX3VuZGlydHkoc3RydWN0IHZ0X2J1ZiAqdmIpDQp7DQoNCgl2Yi0+dmJf
ZGlydHlyZWN0LnRyX2JlZ2luID0gdmItPnZiX3Njcl9zaXplOw0KCXZiLT52Yl9kaXJ0eXJlY3Qu
dHJfZW5kLnRwX3JvdyA9IHZiLT52Yl9kaXJ0eXJlY3QudHJfZW5kLnRwX2NvbCA9IDA7DQp9DQoN
CnZvaWQNCnZ0YnVmX3VuZGlydHkoc3RydWN0IHZ0X2J1ZiAqdmIsIHRlcm1fcmVjdF90ICpyKQ0K
ew0KDQoJKnIgPSB2Yi0+dmJfZGlydHlyZWN0Ow0KCXZ0YnVmX21ha2VfdW5kaXJ0eSh2Yik7DQp9
DQoNCnZvaWQNCnZ0YnVmX2NvcHkoc3RydWN0IHZ0X2J1ZiAqdmIsIGNvbnN0IHRlcm1fcmVjdF90
ICpyLCBjb25zdCB0ZXJtX3Bvc190ICpwMikNCnsNCgljb25zdCB0ZXJtX3Bvc190ICpwMSA9ICZy
LT50cl9iZWdpbjsNCgl0ZXJtX3JlY3RfdCBhcmVhOw0KCXVuc2lnbmVkIGludCByb3dzLCBjb2xz
Ow0KCWludCBwciwgcmRpZmY7DQoNCglLQVNTRVJUKHItPnRyX2JlZ2luLnRwX3JvdyA8IHZiLT52
Yl9zY3Jfc2l6ZS50cF9yb3csDQoJICAgICgidnRidWZfY29weSBiZWdpbi50cF9yb3cgJWQgbXVz
dCBiZSBsZXNzIHRoYW4gc2NyZWVuIHdpZHRoICVkIiwNCgkJci0+dHJfYmVnaW4udHBfcm93LCB2
Yi0+dmJfc2NyX3NpemUudHBfcm93KSk7DQoJS0FTU0VSVChyLT50cl9iZWdpbi50cF9jb2wgPCB2
Yi0+dmJfc2NyX3NpemUudHBfY29sLA0KCSAgICAoInZ0YnVmX2NvcHkgYmVnaW4udHBfY29sICVk
IG11c3QgYmUgbGVzcyB0aGFuIHNjcmVlbiBoZWlnaHQgJWQiLA0KCQlyLT50cl9iZWdpbi50cF9j
b2wsIHZiLT52Yl9zY3Jfc2l6ZS50cF9jb2wpKTsNCg0KCUtBU1NFUlQoci0+dHJfZW5kLnRwX3Jv
dyA8PSB2Yi0+dmJfc2NyX3NpemUudHBfcm93LA0KCSAgICAoInZ0YnVmX2NvcHkgZW5kLnRwX3Jv
dyAlZCBtdXN0IGJlIGxlc3MgdGhhbiBzY3JlZW4gd2lkdGggJWQiLA0KCQlyLT50cl9lbmQudHBf
cm93LCB2Yi0+dmJfc2NyX3NpemUudHBfcm93KSk7DQoJS0FTU0VSVChyLT50cl9lbmQudHBfY29s
IDw9IHZiLT52Yl9zY3Jfc2l6ZS50cF9jb2wsDQoJICAgICgidnRidWZfY29weSBlbmQudHBfY29s
ICVkIG11c3QgYmUgbGVzcyB0aGFuIHNjcmVlbiBoZWlnaHQgJWQiLA0KCQlyLT50cl9lbmQudHBf
Y29sLCB2Yi0+dmJfc2NyX3NpemUudHBfY29sKSk7DQoNCglLQVNTRVJUKHAyLT50cF9yb3cgPCB2
Yi0+dmJfc2NyX3NpemUudHBfcm93LA0KCSAgICAoInZ0YnVmX2NvcHkgdHBfcm93ICVkIG11c3Qg
YmUgbGVzcyB0aGFuIHNjcmVlbiB3aWR0aCAlZCIsDQoJCXAyLT50cF9yb3csIHZiLT52Yl9zY3Jf
c2l6ZS50cF9yb3cpKTsNCglLQVNTRVJUKHAyLT50cF9jb2wgPCB2Yi0+dmJfc2NyX3NpemUudHBf
Y29sLA0KCSAgICAoInZ0YnVmX2NvcHkgdHBfY29sICVkIG11c3QgYmUgbGVzcyB0aGFuIHNjcmVl
biBoZWlnaHQgJWQiLA0KCQlwMi0+dHBfY29sLCB2Yi0+dmJfc2NyX3NpemUudHBfY29sKSk7DQoN
Cglyb3dzID0gci0+dHJfZW5kLnRwX3JvdyAtIHItPnRyX2JlZ2luLnRwX3JvdzsNCglyZGlmZiA9
IHItPnRyX2JlZ2luLnRwX3JvdyAtIHAyLT50cF9yb3c7DQoJY29scyA9IHItPnRyX2VuZC50cF9j
b2wgLSByLT50cl9iZWdpbi50cF9jb2w7DQoJaWYgKHItPnRyX2JlZ2luLnRwX3JvdyA+IHAyLT50
cF9yb3cgJiYgci0+dHJfYmVnaW4udHBfY29sID09IDAgJiYNCgkgICAgci0+dHJfZW5kLnRwX2Nv
bCA9PSB2Yi0+dmJfc2NyX3NpemUudHBfY29sICYmIC8qIEZ1bGwgcm93LiAqLw0KCSAgICAocm93
cyArIHJkaWZmKSA9PSB2Yi0+dmJfc2NyX3NpemUudHBfcm93ICYmIC8qIFdob2xlIHNjcmVlbi4g
Ki8NCgkgICAgcmRpZmYgPiAwKSB7IC8qIE9ubHkgZm9yd2FyZCBkaXJlY3Rpb24uIERvIG5vdCBl
YXQgaGlzdG9yeS4gKi8NCgkJdnRoaXN0b3J5X2FkZGxpbmVzKHZiLCByZGlmZik7DQoJfSBlbHNl
IGlmIChwMi0+dHBfcm93IDwgcDEtPnRwX3Jvdykgew0KCQkvKiBIYW5kbGUgb3ZlcmxhcHBpbmcg
Y29waWVzIG9mIGxpbmUgc2VnbWVudHMuICovDQoJCS8qIE1vdmUgZGF0YSB1cC4gKi8NCgkJZm9y
IChwciA9IDA7IHByIDwgcm93czsgcHIrKykNCgkJCW1lbW1vdmUoDQoJCQkgICAgJlZUQlVGX0ZJ
RUxEKHZiLCBwMi0+dHBfcm93ICsgcHIsIHAyLT50cF9jb2wpLA0KCQkJICAgICZWVEJVRl9GSUVM
RCh2YiwgcDEtPnRwX3JvdyArIHByLCBwMS0+dHBfY29sKSwNCgkJCSAgICBjb2xzICogc2l6ZW9m
KHRlcm1fY2hhcl90KSk7DQoJfSBlbHNlIHsNCgkJLyogTW92ZSBkYXRhIGRvd24uICovDQoJCWZv
ciAocHIgPSByb3dzIC0gMTsgcHIgPj0gMDsgcHItLSkNCgkJCW1lbW1vdmUoDQoJCQkgICAgJlZU
QlVGX0ZJRUxEKHZiLCBwMi0+dHBfcm93ICsgcHIsIHAyLT50cF9jb2wpLA0KCQkJICAgICZWVEJV
Rl9GSUVMRCh2YiwgcDEtPnRwX3JvdyArIHByLCBwMS0+dHBfY29sKSwNCgkJCSAgICBjb2xzICog
c2l6ZW9mKHRlcm1fY2hhcl90KSk7DQoJfQ0KDQoJYXJlYS50cl9iZWdpbiA9ICpwMjsNCglhcmVh
LnRyX2VuZC50cF9yb3cgPSBNSU4ocDItPnRwX3JvdyArIHJvd3MsIHZiLT52Yl9zY3Jfc2l6ZS50
cF9yb3cpOw0KCWFyZWEudHJfZW5kLnRwX2NvbCA9IE1JTihwMi0+dHBfY29sICsgY29scywgdmIt
PnZiX3Njcl9zaXplLnRwX2NvbCk7DQoJdnRidWZfZGlydHkodmIsICZhcmVhKTsNCn0NCg0Kc3Rh
dGljIHZvaWQNCnZ0YnVmX2RvX2ZpbGwoc3RydWN0IHZ0X2J1ZiAqdmIsIGNvbnN0IHRlcm1fcmVj
dF90ICpyLCB0ZXJtX2NoYXJfdCBjKQ0Kew0KCXVuc2lnbmVkIGludCBwciwgcGM7DQoJdGVybV9j
aGFyX3QgKnJvdzsNCg0KCWZvciAocHIgPSByLT50cl9iZWdpbi50cF9yb3c7IHByIDwgci0+dHJf
ZW5kLnRwX3JvdzsgcHIrKykgew0KCQlyb3cgPSB2Yi0+dmJfcm93c1sodmItPnZiX2N1cnJvZmZz
ZXQgKyBwcikgJQ0KCQkgICAgVlRCVUZfTUFYX0hFSUdIVCh2YildOw0KCQlmb3IgKHBjID0gci0+
dHJfYmVnaW4udHBfY29sOyBwYyA8IHItPnRyX2VuZC50cF9jb2w7IHBjKyspIHsNCgkJCXJvd1tw
Y10gPSBjOw0KCQl9DQoJfQ0KfQ0KDQp2b2lkDQp2dGJ1Zl9maWxsKHN0cnVjdCB2dF9idWYgKnZi
LCBjb25zdCB0ZXJtX3JlY3RfdCAqciwgdGVybV9jaGFyX3QgYykNCnsNCg0KCUtBU1NFUlQoci0+
dHJfYmVnaW4udHBfcm93IDwgdmItPnZiX3Njcl9zaXplLnRwX3JvdywNCgkgICAgKCJ2dGJ1Zl9m
aWxsIGJlZ2luLnRwX3JvdyAlZCBtdXN0IGJlIDwgc2NyZWVuIGhlaWdodCAlZCIsDQoJCXItPnRy
X2JlZ2luLnRwX3JvdywgdmItPnZiX3Njcl9zaXplLnRwX3JvdykpOw0KCUtBU1NFUlQoci0+dHJf
YmVnaW4udHBfY29sIDwgdmItPnZiX3Njcl9zaXplLnRwX2NvbCwNCgkgICAgKCJ2dGJ1Zl9maWxs
IGJlZ2luLnRwX2NvbCAlZCBtdXN0IGJlIDwgc2NyZWVuIHdpZHRoICVkIiwNCgkJci0+dHJfYmVn
aW4udHBfY29sLCB2Yi0+dmJfc2NyX3NpemUudHBfY29sKSk7DQoNCglLQVNTRVJUKHItPnRyX2Vu
ZC50cF9yb3cgPD0gdmItPnZiX3Njcl9zaXplLnRwX3JvdywNCgkgICAgKCJ2dGJ1Zl9maWxsIGVu
ZC50cF9yb3cgJWQgbXVzdCBiZSA8PSBzY3JlZW4gaGVpZ2h0ICVkIiwNCgkJci0+dHJfZW5kLnRw
X3JvdywgdmItPnZiX3Njcl9zaXplLnRwX3JvdykpOw0KCUtBU1NFUlQoci0+dHJfZW5kLnRwX2Nv
bCA8PSB2Yi0+dmJfc2NyX3NpemUudHBfY29sLA0KCSAgICAoInZ0YnVmX2ZpbGwgZW5kLnRwX2Nv
bCAlZCBtdXN0IGJlIDw9IHNjcmVlbiB3aWR0aCAlZCIsDQoJCXItPnRyX2VuZC50cF9jb2wsIHZi
LT52Yl9zY3Jfc2l6ZS50cF9jb2wpKTsNCg0KCXZ0YnVmX2RvX2ZpbGwodmIsIHIsIGMpOw0KCXZ0
YnVmX2RpcnR5KHZiLCByKTsNCn0NCg0Kc3RhdGljIHZvaWQNCnZ0YnVmX2luaXRfcm93cyhzdHJ1
Y3QgdnRfYnVmICp2YikNCnsNCglpbnQgcjsNCg0KCXZiLT52Yl9oaXN0b3J5X3NpemUgPSBNQVgo
dmItPnZiX2hpc3Rvcnlfc2l6ZSwgdmItPnZiX3Njcl9zaXplLnRwX3Jvdyk7DQoNCglmb3IgKHIg
PSAwOyByIDwgdmItPnZiX2hpc3Rvcnlfc2l6ZTsgcisrKQ0KCQl2Yi0+dmJfcm93c1tyXSA9ICZ2
Yi0+dmJfYnVmZmVyW3IgKiB2Yi0+dmJfc2NyX3NpemUudHBfY29sXTsNCn0NCg0Kc3RhdGljIHZv
aWQNCnZ0YnVmX2RvX2NsZWFyaGlzdG9yeShzdHJ1Y3QgdnRfYnVmICp2YikNCnsNCgl0ZXJtX3Jl
Y3RfdCByZWN0Ow0KCWNvbnN0IHRla2VuX2F0dHJfdCAqYTsNCgl0ZXJtX2NoYXJfdCBjaDsNCg0K
CWEgPSB0ZWtlbl9nZXRfY3VyYXR0cigmdmItPnZiX3Rlcm1pbmFsLT50bV9lbXVsYXRvcik7DQoJ
Y2ggPSBUQ09MT1JfRkcoYS0+dGFfZmdjb2xvcikgfCBUQ09MT1JfQkcoYS0+dGFfYmdjb2xvcik7
DQoNCglyZWN0LnRyX2JlZ2luLnRwX3JvdyA9IHJlY3QudHJfYmVnaW4udHBfY29sID0gMDsNCgly
ZWN0LnRyX2VuZC50cF9jb2wgPSB2Yi0+dmJfc2NyX3NpemUudHBfY29sOw0KCXJlY3QudHJfZW5k
LnRwX3JvdyA9IHZiLT52Yl9oaXN0b3J5X3NpemU7DQoNCgl2dGJ1Zl9kb19maWxsKHZiLCAmcmVj
dCwgVlRCVUZfU1BBQ0VfQ0hBUihjaCkpOw0KfQ0KDQpzdGF0aWMgdm9pZA0KdnRidWZfcmVzZXRf
c2Nyb2xsYmFjayhzdHJ1Y3QgdnRfYnVmICp2YikNCnsNCgl2Yi0+dmJfcm9mZnNldCA9IDA7DQoJ
dmItPnZiX2N1cnJvZmZzZXQgPSAwOw0KCXZiLT52Yl9tYXJrX3N0YXJ0LnRwX3JvdyA9IDA7DQoJ
dmItPnZiX21hcmtfc3RhcnQudHBfY29sID0gMDsNCgl2Yi0+dmJfbWFya19lbmQudHBfcm93ID0g
MDsNCgl2Yi0+dmJfbWFya19lbmQudHBfY29sID0gMDsNCn0NCg0Kdm9pZA0KdnRidWZfaW5pdF9l
YXJseShzdHJ1Y3QgdnRfYnVmICp2YikNCnsNCgl2Yi0+dmJfZmxhZ3MgfD0gVkJGX0NVUlNPUjsN
Cgl2dGJ1Zl9yZXNldF9zY3JvbGxiYWNrKHZiKTsNCgl2dGJ1Zl9pbml0X3Jvd3ModmIpOw0KCXZ0
YnVmX2RvX2NsZWFyaGlzdG9yeSh2Yik7DQoJdnRidWZfbWFrZV91bmRpcnR5KHZiKTsNCglpZiAo
KHZiLT52Yl9mbGFncyAmIFZCRl9NVFhfSU5JVCkgPT0gMCkgew0KCQltdHhfaW5pdCgmdmItPnZi
X2xvY2ssICJ2dGJ1ZiIsIE5VTEwsIE1UWF9TUElOKTsNCgkJdmItPnZiX2ZsYWdzIHw9IFZCRl9N
VFhfSU5JVDsNCgl9DQp9DQoNCnZvaWQNCnZ0YnVmX2luaXQoc3RydWN0IHZ0X2J1ZiAqdmIsIGNv
bnN0IHRlcm1fcG9zX3QgKnApDQp7DQoJaW50IHN6Ow0KDQoJdmItPnZiX3Njcl9zaXplID0gKnA7
DQoJdmItPnZiX2hpc3Rvcnlfc2l6ZSA9IFZCRl9ERUZBVUxUX0hJU1RPUllfU0laRTsNCg0KCWlm
ICgodmItPnZiX2ZsYWdzICYgVkJGX1NUQVRJQykgPT0gMCkgew0KCQlzeiA9IHZiLT52Yl9oaXN0
b3J5X3NpemUgKiBwLT50cF9jb2wgKiBzaXplb2YodGVybV9jaGFyX3QpOw0KCQl2Yi0+dmJfYnVm
ZmVyID0gbWFsbG9jKHN6LCBNX1ZUQlVGLCBNX1dBSVRPSyB8IE1fWkVSTyk7DQoNCgkJc3ogPSB2
Yi0+dmJfaGlzdG9yeV9zaXplICogc2l6ZW9mKHRlcm1fY2hhcl90ICopOw0KCQl2Yi0+dmJfcm93
cyA9IG1hbGxvYyhzeiwgTV9WVEJVRiwgTV9XQUlUT0sgfCBNX1pFUk8pOw0KCX0NCg0KCXZ0YnVm
X2luaXRfZWFybHkodmIpOw0KfQ0KDQp2b2lkDQp2dGJ1Zl9jbGVhcmhpc3Rvcnkoc3RydWN0IHZ0
X2J1ZiAqdmIpDQp7DQoJVlRCVUZfTE9DSyh2Yik7DQoJdnRidWZfZG9fY2xlYXJoaXN0b3J5KHZi
KTsNCgl2dGJ1Zl9yZXNldF9zY3JvbGxiYWNrKHZiKTsNCgl2Yi0+dmJfZmxhZ3MgJj0gflZCRl9I
SVNUT1JZX0ZVTEw7DQoJVlRCVUZfVU5MT0NLKHZiKTsNCn0NCg0Kdm9pZA0KdnRidWZfc2V0aGlz
dG9yeV9zaXplKHN0cnVjdCB2dF9idWYgKnZiLCB1bnNpZ25lZCBpbnQgc2l6ZSkNCnsNCgl0ZXJt
X3Bvc190IHA7DQoNCgkvKiBXaXRoIHNhbWUgc2l6ZSAqLw0KCXAudHBfcm93ID0gdmItPnZiX3Nj
cl9zaXplLnRwX3JvdzsNCglwLnRwX2NvbCA9IHZiLT52Yl9zY3Jfc2l6ZS50cF9jb2w7DQoJdnRi
dWZfZ3Jvdyh2YiwgJnAsIHNpemUpOw0KfQ0KDQp2b2lkDQp2dGJ1Zl9ncm93KHN0cnVjdCB2dF9i
dWYgKnZiLCBjb25zdCB0ZXJtX3Bvc190ICpwLCB1bnNpZ25lZCBpbnQgaGlzdG9yeV9zaXplKQ0K
ew0KCXRlcm1fY2hhcl90ICpvbGQsICpuZXcsICoqcm93cywgKipvbGRyb3dzLCAqKmNvcHlyb3dz
LCAqcm93LCAqb2xkcm93Ow0KCXVuc2lnbmVkIGludCB3LCBoLCBjLCByLCBvbGRfaGlzdG9yeV9z
aXplOw0KCXNpemVfdCBidWZzaXplLCByb3dzc2l6ZTsNCglpbnQgaGlzdG9yeV9mdWxsOw0KCWNv
bnN0IHRla2VuX2F0dHJfdCAqYTsNCgl0ZXJtX2NoYXJfdCBjaDsNCg0KCWEgPSB0ZWtlbl9nZXRf
Y3VyYXR0cigmdmItPnZiX3Rlcm1pbmFsLT50bV9lbXVsYXRvcik7DQoJY2ggPSBUQ09MT1JfRkco
YS0+dGFfZmdjb2xvcikgfCBUQ09MT1JfQkcoYS0+dGFfYmdjb2xvcik7DQoNCgloaXN0b3J5X3Np
emUgPSBNQVgoaGlzdG9yeV9zaXplLCBwLT50cF9yb3cpOw0KDQoJLyogQWxsb2NhdGUgbmV3IGJ1
ZmZlci4gKi8NCglidWZzaXplID0gaGlzdG9yeV9zaXplICogcC0+dHBfY29sICogc2l6ZW9mKHRl
cm1fY2hhcl90KTsNCgluZXcgPSBtYWxsb2MoYnVmc2l6ZSwgTV9WVEJVRiwgTV9XQUlUT0sgfCBN
X1pFUk8pOw0KCXJvd3NzaXplID0gaGlzdG9yeV9zaXplICogc2l6ZW9mKHRlcm1fcG9zX3QgKik7
DQoJcm93cyA9IG1hbGxvYyhyb3dzc2l6ZSwgTV9WVEJVRiwgTV9XQUlUT0sgfCBNX1pFUk8pOw0K
DQoJLyogVG9nZ2xlIGl0LiAqLw0KCVZUQlVGX0xPQ0sodmIpOw0KCW9sZCA9IHZiLT52Yl9mbGFn
cyAmIFZCRl9TVEFUSUMgPyBOVUxMIDogdmItPnZiX2J1ZmZlcjsNCglvbGRyb3dzID0gdmItPnZi
X2ZsYWdzICYgVkJGX1NUQVRJQyA/IE5VTEwgOiB2Yi0+dmJfcm93czsNCgljb3B5cm93cyA9IHZi
LT52Yl9yb3dzOw0KDQoJdyA9IHZiLT52Yl9zY3Jfc2l6ZS50cF9jb2w7DQoJaCA9IHZiLT52Yl9z
Y3Jfc2l6ZS50cF9yb3c7DQoJb2xkX2hpc3Rvcnlfc2l6ZSA9IHZiLT52Yl9oaXN0b3J5X3NpemU7
DQoJaGlzdG9yeV9mdWxsID0gdmItPnZiX2ZsYWdzICYgVkJGX0hJU1RPUllfRlVMTCB8fA0KCSAg
ICB2Yi0+dmJfY3Vycm9mZnNldCArIGggPj0gaGlzdG9yeV9zaXplOw0KDQoJdmItPnZiX2hpc3Rv
cnlfc2l6ZSA9IGhpc3Rvcnlfc2l6ZTsNCgl2Yi0+dmJfYnVmZmVyID0gbmV3Ow0KCXZiLT52Yl9y
b3dzID0gcm93czsNCgl2Yi0+dmJfZmxhZ3MgJj0gflZCRl9TVEFUSUM7DQoJdmItPnZiX3Njcl9z
aXplID0gKnA7DQoJdnRidWZfaW5pdF9yb3dzKHZiKTsNCg0KCS8qDQoJICogQ29weSByb3dzIHRv
IHRoZSBuZXcgYnVmZmVyLiBUaGUgZmlyc3Qgcm93IGluIHRoZSBoaXN0b3J5DQoJICogaXMgYmFj
ayB0byBpbmRleCAwLCBpZS4gdGhlIG5ldyBidWZmZXIgZG9lc24ndCBjeWNsZS4NCgkgKi8NCglp
ZiAoaGlzdG9yeV9zaXplID4gb2xkX2hpc3Rvcnlfc2l6ZSkgew0KCQlmb3IgKHIgPSAwOyByIDwg
b2xkX2hpc3Rvcnlfc2l6ZTsgcisrKSB7DQoJCQlyb3cgPSByb3dzW3JdOw0KDQoJCQkvKiBDb21w
dXRlIHRoZSBjb3JyZXNwb25kaW5nIHJvdyBpbiB0aGUgb2xkIGJ1ZmZlci4gKi8NCgkJCWlmICho
aXN0b3J5X2Z1bGwpDQoJCQkJLyoNCgkJCQkgKiBUaGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSAidG9w
IiByb3cgaXMNCgkJCQkgKiB0aGUgb25lIGp1c3QgYWZ0ZXIgdGhlIHZpZXdhYmxlIGFyZWENCgkJ
CQkgKiAoY3Vycm9mZnNldCArIHZpZXdhYmxlIGhlaWdodCkgaW4gdGhlDQoJCQkJICogY3ljbGlu
ZyBidWZmZXIuIFRoZSBjb3JyZXNwb25kaW5nIHJvdw0KCQkJCSAqIGlzIGNvbXB1dGVkIGZyb20g
dGhpcyB0b3Agcm93Lg0KCQkJCSAqLw0KCQkJCW9sZHJvdyA9IGNvcHlyb3dzWw0KCQkJCSAgICAo
dmItPnZiX2N1cnJvZmZzZXQgKyBoICsgcikgJQ0KCQkJCSAgICBvbGRfaGlzdG9yeV9zaXplXTsN
CgkJCWVsc2UNCgkJCQkvKg0KCQkJCSAqIFRoZSBidWZmZXIgaXMgbm90IGZ1bGwsIHRoZXJlZm9y
ZSwNCgkJCQkgKiB3ZSBkaWRuJ3QgY3ljbGUgYWxyZWFkeS4gVGhlDQoJCQkJICogY29ycmVzcG9u
ZGluZyByb3dzIGFyZSB0aGUgc2FtZSBpbg0KCQkJCSAqIGJvdGggYnVmZmVycy4NCgkJCQkgKi8N
CgkJCQlvbGRyb3cgPSBjb3B5cm93c1tyXTsNCg0KCQkJbWVtbW92ZShyb3csIG9sZHJvdywNCgkJ
CSAgICBNSU4ocC0+dHBfY29sLCB3KSAqIHNpemVvZih0ZXJtX2NoYXJfdCkpOw0KDQoJCQkvKg0K
CQkJICogWFhYIFZUQlVGX1NQQUNFX0NIQVIoVEVSTUlOQUxfTk9STV9BVFRSKSB3aWxsDQoJCQkg
KiBleHRlbmRlZCBsaW5lcyBvZiBrZXJuZWwgdGV4dCB1c2luZyB0aGUgd3JvbmcNCgkJCSAqIGJh
Y2tncm91bmQgY29sb3IuDQoJCQkgKi8NCgkJCWZvciAoYyA9IE1JTihwLT50cF9jb2wsIHcpOyBj
IDwgcC0+dHBfY29sOyBjKyspIHsNCgkJCQlyb3dbY10gPSBWVEJVRl9TUEFDRV9DSEFSKGNoKTsN
CgkJCX0NCgkJfQ0KDQoJCS8qIEZpbGwgcmVtYWluaW5nIHJvd3MuICovDQoJCWZvciAociA9IG9s
ZF9oaXN0b3J5X3NpemU7IHIgPCBoaXN0b3J5X3NpemU7IHIrKykgew0KCQkJcm93ID0gcm93c1ty
XTsNCgkJCWZvciAoYyA9IE1JTihwLT50cF9jb2wsIHcpOyBjIDwgcC0+dHBfY29sOyBjKyspIHsN
CgkJCQlyb3dbY10gPSBWVEJVRl9TUEFDRV9DSEFSKGNoKTsNCgkJCX0NCgkJfQ0KDQoJCXZiLT52
Yl9mbGFncyAmPSB+VkJGX0hJU1RPUllfRlVMTDsNCg0KCQkvKg0KCQkgKiBJZiB0aGUgc2NyZWVu
IGlzIGFscmVhZHkgZmlsbGVkICh0aGVyZSBhcmUgbm9uLXZpc2libGUgbGluZXMNCgkJICogYWJv
dmUgdGhlIGN1cnJlbnQgdmlld2FibGUgYXJlYSksIGFkanVzdCBjdXJyb2Zmc2V0IHRvIHRoZQ0K
CQkgKiBuZXcgdmlld2FibGUgYXJlYS4NCgkJICoNCgkJICogSWYgdGhlIG9sZCBidWZmZXIgd2Fz
IGZ1bGwsIHNldCBjdXJyb2Zmc2V0IHRvIHRoZQ0KCQkgKiA8aD50aCBtb3N0IHJlY2VudCBsaW5l
IG9mIGhpc3RvcnkgaW4gdGhlIG5ldywgbm9uLWN5Y2xlZA0KCQkgKiBidWZmZXIuIE90aGVyd2lz
ZSwgaXQgZGlkbid0IGN5Y2xlLCBzbyB0aGUgb2xkIGN1cnJvZmZzZXQNCgkJICogaXMgdGhlIHNh
bWUgaW4gdGhlIG5ldyBidWZmZXIuDQoJCSAqLw0KCQlpZiAoaGlzdG9yeV9mdWxsKQ0KCQkJdmIt
PnZiX2N1cnJvZmZzZXQgPSBvbGRfaGlzdG9yeV9zaXplIC0gaDsNCgl9IGVsc2Ugew0KCQkvKg0K
CQkgKiAob2xkX2hpc3Rvcnlfc2l6ZSAtIGhpc3Rvcnlfc2l6ZSkgbGluZXMgb2YgaGlzdG9yeSBh
cmUNCgkJICogZHJvcHBlZC4NCgkJICovDQoJCWZvciAociA9IDA7IHIgPCBoaXN0b3J5X3NpemU7
IHIrKykgew0KCQkJcm93ID0gcm93c1tyXTsNCg0KCQkJLyoNCgkJCSAqIENvbXB1dGUgdGhlIGNv
cnJlc3BvbmRpbmcgcm93IGluIHRoZSBvbGQgYnVmZmVyLg0KCQkJICoNCgkJCSAqIFNlZSB0aGUg
ZXF1aXZhbGVudCBpZnt9IGJsb2NrIGFib3ZlIGZvciBhbg0KCQkJICogZXhwbGFuYXRpb24uDQoJ
CQkgKi8NCgkJCWlmIChoaXN0b3J5X2Z1bGwpDQoJCQkJb2xkcm93ID0gY29weXJvd3NbDQoJCQkJ
ICAgICh2Yi0+dmJfY3Vycm9mZnNldCArIGggKyByICsNCgkJCQkgICAgIChvbGRfaGlzdG9yeV9z
aXplIC0gaGlzdG9yeV9zaXplKSkgJQ0KCQkJCSAgICBvbGRfaGlzdG9yeV9zaXplXTsNCgkJCWVs
c2UNCgkJCQlvbGRyb3cgPSBjb3B5cm93c1tyXTsNCg0KCQkJbWVtbW92ZShyb3csIG9sZHJvdywN
CgkJCSAgICBNSU4ocC0+dHBfY29sLCB3KSAqIHNpemVvZih0ZXJtX2NoYXJfdCkpOw0KDQoJCQkv
Kg0KCQkJICogWFhYIFZUQlVGX1NQQUNFX0NIQVIoVEVSTUlOQUxfTk9STV9BVFRSKSB3aWxsDQoJ
CQkgKiBleHRlbmRlZCBsaW5lcyBvZiBrZXJuZWwgdGV4dCB1c2luZyB0aGUgd3JvbmcNCgkJCSAq
IGJhY2tncm91bmQgY29sb3IuDQoJCQkgKi8NCgkJCWZvciAoYyA9IE1JTihwLT50cF9jb2wsIHcp
OyBjIDwgcC0+dHBfY29sOyBjKyspIHsNCgkJCQlyb3dbY10gPSBWVEJVRl9TUEFDRV9DSEFSKGNo
KTsNCgkJCX0NCgkJfQ0KDQoJCWlmIChoaXN0b3J5X2Z1bGwpIHsNCgkJCXZiLT52Yl9jdXJyb2Zm
c2V0ID0gaGlzdG9yeV9zaXplIC0gaDsNCgkJCXZiLT52Yl9mbGFncyB8PSBWQkZfSElTVE9SWV9G
VUxMOw0KCQl9DQoJfQ0KDQoJdmItPnZiX3JvZmZzZXQgPSB2Yi0+dmJfY3Vycm9mZnNldDsNCg0K
CS8qIEFkanVzdCBjdXJzb3IgcG9zaXRpb24uICovDQoJaWYgKHZiLT52Yl9jdXJzb3IudHBfY29s
ID4gcC0+dHBfY29sIC0gMSkNCgkJLyoNCgkJICogTW92ZSBjdXJzb3IgdG8gdGhlIGxhc3QgY29s
dW1uLCBpbiBjYXNlIGl0cyBwcmV2aW91cw0KCQkgKiBwb3NpdGlvbiBpcyBvdXRzaWRlIG9mIHRo
ZSBuZXcgc2NyZWVuIGFyZWEuDQoJCSAqLw0KCQl2Yi0+dmJfY3Vyc29yLnRwX2NvbCA9IHAtPnRw
X2NvbCAtIDE7DQoNCglpZiAodmItPnZiX2N1cnJvZmZzZXQgPiAwIHx8IHZiLT52Yl9jdXJzb3Iu
dHBfcm93ID4gcC0+dHBfcm93IC0gMSkNCgkJLyogTW92ZSBjdXJzb3IgdG8gdGhlIGxhc3QgbGlu
ZSBvbiB0aGUgc2NyZWVuLiAqLw0KCQl2Yi0+dmJfY3Vyc29yLnRwX3JvdyA9IHAtPnRwX3JvdyAt
IDE7DQoNCglWVEJVRl9VTkxPQ0sodmIpOw0KDQoJLyogRGVhbGxvY2F0ZSBvbGQgYnVmZmVyLiAq
Lw0KCWZyZWUob2xkLCBNX1ZUQlVGKTsNCglmcmVlKG9sZHJvd3MsIE1fVlRCVUYpOw0KfQ0KDQp2
b2lkDQp2dGJ1Zl9wdXRjaGFyKHN0cnVjdCB2dF9idWYgKnZiLCBjb25zdCB0ZXJtX3Bvc190ICpw
LCB0ZXJtX2NoYXJfdCBjKQ0Kew0KCXRlcm1fY2hhcl90ICpyb3c7DQoNCglLQVNTRVJUKHAtPnRw
X3JvdyA8IHZiLT52Yl9zY3Jfc2l6ZS50cF9yb3csDQoJICAgICgidnRidWZfcHV0Y2hhciB0cF9y
b3cgJWQgbXVzdCBiZSBsZXNzIHRoYW4gc2NyZWVuIHdpZHRoICVkIiwNCgkJcC0+dHBfcm93LCB2
Yi0+dmJfc2NyX3NpemUudHBfcm93KSk7DQoJS0FTU0VSVChwLT50cF9jb2wgPCB2Yi0+dmJfc2Ny
X3NpemUudHBfY29sLA0KCSAgICAoInZ0YnVmX3B1dGNoYXIgdHBfY29sICVkIG11c3QgYmUgbGVz
cyB0aGFuIHNjcmVlbiBoZWlnaHQgJWQiLA0KCQlwLT50cF9jb2wsIHZiLT52Yl9zY3Jfc2l6ZS50
cF9jb2wpKTsNCg0KCXJvdyA9IHZiLT52Yl9yb3dzWyh2Yi0+dmJfY3Vycm9mZnNldCArIHAtPnRw
X3JvdykgJQ0KCSAgICBWVEJVRl9NQVhfSEVJR0hUKHZiKV07DQoJaWYgKHJvd1twLT50cF9jb2xd
ICE9IGMpIHsNCgkJcm93W3AtPnRwX2NvbF0gPSBjOw0KCQl2dGJ1Zl9kaXJ0eV9jZWxsKHZiLCBw
KTsNCgl9DQp9DQoNCnZvaWQNCnZ0YnVmX2N1cnNvcl9wb3NpdGlvbihzdHJ1Y3QgdnRfYnVmICp2
YiwgY29uc3QgdGVybV9wb3NfdCAqcCkNCnsNCglpZiAodmItPnZiX2ZsYWdzICYgVkJGX0NVUlNP
Uikgew0KCQl2dGJ1Zl9kaXJ0eV9jZWxsKHZiLCAmdmItPnZiX2N1cnNvcik7DQoJCXZiLT52Yl9j
dXJzb3IgPSAqcDsNCgkJdnRidWZfZGlydHlfY2VsbCh2YiwgJnZiLT52Yl9jdXJzb3IpOw0KCX0g
ZWxzZSB7DQoJCXZiLT52Yl9jdXJzb3IgPSAqcDsNCgl9DQp9DQoNCiNpZm5kZWYgU0NfTk9fQ1VU
UEFTVEUNCnN0YXRpYyB2b2lkDQp2dGJ1Zl9mbHVzaF9tYXJrKHN0cnVjdCB2dF9idWYgKnZiKQ0K
ew0KCXRlcm1fcmVjdF90IGFyZWE7DQoJaW50IHMsIGU7DQoNCgkvKiBOb3RpZnkgcmVuZGVyZXIg
dG8gdXBkYXRlIG1hcmtlZCByZWdpb24uICovDQoJaWYgKCh2Yi0+dmJfbWFya19zdGFydC50cF9j
b2wgIT0gdmItPnZiX21hcmtfZW5kLnRwX2NvbCkgfHwNCgkgICAgKHZiLT52Yl9tYXJrX3N0YXJ0
LnRwX3JvdyAhPSB2Yi0+dmJfbWFya19lbmQudHBfcm93KSkgew0KCQlzID0gdnRidWZfaHR3KHZi
LCB2Yi0+dmJfbWFya19zdGFydC50cF9yb3cpOw0KCQllID0gdnRidWZfaHR3KHZiLCB2Yi0+dmJf
bWFya19lbmQudHBfcm93KTsNCg0KCQlhcmVhLnRyX2JlZ2luLnRwX2NvbCA9IDA7DQoJCWFyZWEu
dHJfYmVnaW4udHBfcm93ID0gTUlOKHMsIGUpOw0KDQoJCWFyZWEudHJfZW5kLnRwX2NvbCA9IHZi
LT52Yl9zY3Jfc2l6ZS50cF9jb2w7DQoJCWFyZWEudHJfZW5kLnRwX3JvdyA9IE1BWChzLCBlKSAr
IDE7DQoNCgkJVlRCVUZfTE9DSyh2Yik7DQoJCXZ0YnVmX2RpcnR5KHZiLCAmYXJlYSk7DQoJCVZU
QlVGX1VOTE9DSyh2Yik7DQoJfQ0KfQ0KDQppbnQNCnZ0YnVmX2dldF9tYXJrZWRfbGVuKHN0cnVj
dCB2dF9idWYgKnZiKQ0Kew0KCWludCBlaSwgc2ksIHN6Ow0KCXRlcm1fcG9zX3QgcywgZTsNCg0K
CS8qIFN3YXAgYWNjb3JkaW5nIHRvIHdpbmRvdyBjb29yZGluYXRlcy4gKi8NCglpZiAoUE9TX0lO
REVYKHZ0YnVmX2h0dyh2YiwgdmItPnZiX21hcmtfc3RhcnQudHBfcm93KSwNCgkgICAgdmItPnZi
X21hcmtfc3RhcnQudHBfY29sKSA+DQoJICAgIFBPU19JTkRFWCh2dGJ1Zl9odHcodmIsIHZiLT52
Yl9tYXJrX2VuZC50cF9yb3cpLA0KCSAgICB2Yi0+dmJfbWFya19lbmQudHBfY29sKSkgew0KCQlQ
T1NfQ09QWShlLCB2Yi0+dmJfbWFya19zdGFydCk7DQoJCVBPU19DT1BZKHMsIHZiLT52Yl9tYXJr
X2VuZCk7DQoJfSBlbHNlIHsNCgkJUE9TX0NPUFkocywgdmItPnZiX21hcmtfc3RhcnQpOw0KCQlQ
T1NfQ09QWShlLCB2Yi0+dmJfbWFya19lbmQpOw0KCX0NCg0KCXNpID0gcy50cF9yb3cgKiB2Yi0+
dmJfc2NyX3NpemUudHBfY29sICsgcy50cF9jb2w7DQoJZWkgPSBlLnRwX3JvdyAqIHZiLT52Yl9z
Y3Jfc2l6ZS50cF9jb2wgKyBlLnRwX2NvbDsNCg0KCS8qIE51bWJlciBzeW1ib2xzIGFuZCBudW1i
ZXIgb2Ygcm93cyB0byBpbmplY3QgXG4gKi8NCglzeiA9IGVpIC0gc2kgKyAoKGUudHBfcm93IC0g
cy50cF9yb3cpICogMik7DQoNCglyZXR1cm4gKHN6ICogc2l6ZW9mKHRlcm1fY2hhcl90KSk7DQp9
DQoNCnZvaWQNCnZ0YnVmX2V4dHJhY3RfbWFya2VkKHN0cnVjdCB2dF9idWYgKnZiLCB0ZXJtX2No
YXJfdCAqYnVmLCBpbnQgc3opDQp7DQoJaW50IGksIHIsIGMsIGNzLCBjZTsNCgl0ZXJtX3Bvc190
IHMsIGU7DQoJdGVybV9jaGFyX3QgKmVuZDsNCg0KCS8qIFN3YXAgYWNjb3JkaW5nIHRvIHdpbmRv
dyBjb29yZGluYXRlcy4gKi8NCglpZiAoUE9TX0lOREVYKHZ0YnVmX2h0dyh2YiwgdmItPnZiX21h
cmtfc3RhcnQudHBfcm93KSwNCgkgICAgdmItPnZiX21hcmtfc3RhcnQudHBfY29sKSA+DQoJICAg
IFBPU19JTkRFWCh2dGJ1Zl9odHcodmIsIHZiLT52Yl9tYXJrX2VuZC50cF9yb3cpLA0KCSAgICB2
Yi0+dmJfbWFya19lbmQudHBfY29sKSkgew0KCQlQT1NfQ09QWShlLCB2Yi0+dmJfbWFya19zdGFy
dCk7DQoJCVBPU19DT1BZKHMsIHZiLT52Yl9tYXJrX2VuZCk7DQoJfSBlbHNlIHsNCgkJUE9TX0NP
UFkocywgdmItPnZiX21hcmtfc3RhcnQpOw0KCQlQT1NfQ09QWShlLCB2Yi0+dmJfbWFya19lbmQp
Ow0KCX0NCg0KCWkgPSAwOw0KCWZvciAociA9IHMudHBfcm93OyByIDw9IGUudHBfcm93OyByKysp
IHsNCgkJY3MgPSAociA9PSBzLnRwX3Jvdyk/cy50cF9jb2w6MDsNCgkJY2UgPSAociA9PSBlLnRw
X3Jvdyk/ZS50cF9jb2w6dmItPnZiX3Njcl9zaXplLnRwX2NvbDsNCgkJZm9yIChjID0gY3M7IGMg
PCBjZTsgYysrKSB7DQoJCQlidWZbaSsrXSA9IHZiLT52Yl9yb3dzW3JdW2NdOw0KCQl9DQoJCWVu
ZCA9IGJ1ZiArIGkgLTE7DQoJCXdoaWxlIChlbmQgPiBidWYgJiYgaXNzcGFjZSgodW5zaWduZWQg
Y2hhcikqZW5kKSkNCgkJew0KCQkJKmVuZCA9ICdcMCc7DQoJCQllbmQtLTsNCgkJfQ0KDQoJCS8q
IEFkZCBuZXcgbGluZSBmb3IgYWxsIHJvd3MsIGJ1dCBub3QgZm9yIGxhc3Qgb25lLiAqLw0KCQlp
ZiAociAhPSBlLnRwX3Jvdykgew0KCQkJYnVmW2ldID0gJ1xyJzsNCgkJCWJ1ZltpKytdID0gJ1xu
JzsNCgkJCWJ1ZltpKytdID0gJ1wwJzsNCgkJfQ0KCX0NCn0NCg0KaW50DQp2dGJ1Zl9zZXRfbWFy
ayhzdHJ1Y3QgdnRfYnVmICp2YiwgaW50IHR5cGUsIGludCBjb2wsIGludCByb3cpDQp7DQoJdGVy
bV9jaGFyX3QgKnI7DQoJaW50IGk7DQoNCglzd2l0Y2ggKHR5cGUpIHsNCgljYXNlIFZUQl9NQVJL
X0VORDoJLyogQjEgVVAgKi8NCgkJaWYgKHZiLT52Yl9tYXJrX2xhc3QgIT0gVlRCX01BUktfTU9W
RSkNCgkJCXJldHVybiAoMCk7DQoJCS8qIEZBTExUSFJPVUdIICovDQoJY2FzZSBWVEJfTUFSS19N
T1ZFOg0KCWNhc2UgVlRCX01BUktfRVhURU5EOg0KCQl2dGJ1Zl9mbHVzaF9tYXJrKHZiKTsgLyog
Q2xlYW4gb2xkIG1hcmsuICovDQoJCXZiLT52Yl9tYXJrX2VuZC50cF9jb2wgPSBjb2w7DQoJCXZi
LT52Yl9tYXJrX2VuZC50cF9yb3cgPSB2dGJ1Zl93dGgodmIsIHJvdyk7DQoJCWJyZWFrOw0KCWNh
c2UgVlRCX01BUktfU1RBUlQ6DQoJCXZ0YnVmX2ZsdXNoX21hcmsodmIpOyAvKiBDbGVhbiBvbGQg
bWFyay4gKi8NCgkJdmItPnZiX21hcmtfc3RhcnQudHBfY29sID0gY29sOw0KCQl2Yi0+dmJfbWFy
a19zdGFydC50cF9yb3cgPSB2dGJ1Zl93dGgodmIsIHJvdyk7DQoJCS8qIFN0YXJ0IGFnYWluLCBz
byBjbGVhciBlbmQgcG9pbnQuICovDQoJCXZiLT52Yl9tYXJrX2VuZC50cF9jb2wgPSBjb2w7DQoJ
CXZiLT52Yl9tYXJrX2VuZC50cF9yb3cgPSB2dGJ1Zl93dGgodmIsIHJvdyk7DQoJCWJyZWFrOw0K
CWNhc2UgVlRCX01BUktfV09SRDoNCgkJdnRidWZfZmx1c2hfbWFyayh2Yik7IC8qIENsZWFuIG9s
ZCBtYXJrLiAqLw0KCQl2Yi0+dmJfbWFya19zdGFydC50cF9yb3cgPSB2Yi0+dmJfbWFya19lbmQu
dHBfcm93ID0NCgkJICAgIHZ0YnVmX3d0aCh2Yiwgcm93KTsNCgkJciA9IHZiLT52Yl9yb3dzW3Zi
LT52Yl9tYXJrX3N0YXJ0LnRwX3Jvd107DQoJCWZvciAoaSA9IGNvbDsgaSA+PSAwOyBpIC0tKSB7
DQoJCQlpZiAoVENIQVJfQ0hBUkFDVEVSKHJbaV0pID09ICcgJykgew0KCQkJCXZiLT52Yl9tYXJr
X3N0YXJ0LnRwX2NvbCA9IGkgKyAxOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCS8qIE5vIHNw
YWNlIC0gd29yZCBleHRlbmRzIHRvIGJlZ2lubmluZyBvZiBsaW5lLiAqLw0KCQlpZiAoaSA9PSAt
MSkNCgkJCXZiLT52Yl9tYXJrX3N0YXJ0LnRwX2NvbCA9IDA7DQoJCWZvciAoaSA9IGNvbDsgaSA8
IHZiLT52Yl9zY3Jfc2l6ZS50cF9jb2w7IGkrKykgew0KCQkJaWYgKFRDSEFSX0NIQVJBQ1RFUihy
W2ldKSA9PSAnICcpIHsNCgkJCQl2Yi0+dmJfbWFya19lbmQudHBfY29sID0gaTsNCgkJCQlicmVh
azsNCgkJCX0NCgkJfQ0KCQkvKiBObyBzcGFjZSAtIHdvcmQgZXh0ZW5kcyB0byBlbmQgb2YgbGlu
ZS4gKi8NCgkJaWYgKGkgPT0gdmItPnZiX3Njcl9zaXplLnRwX2NvbCkNCgkJCXZiLT52Yl9tYXJr
X2VuZC50cF9jb2wgPSBpOw0KDQoJCWlmICh2Yi0+dmJfbWFya19zdGFydC50cF9jb2wgPiB2Yi0+
dmJfbWFya19lbmQudHBfY29sKQ0KCQkJdmItPnZiX21hcmtfc3RhcnQudHBfY29sID0gdmItPnZi
X21hcmtfZW5kLnRwX2NvbDsNCgkJYnJlYWs7DQoJY2FzZSBWVEJfTUFSS19ST1c6DQoJCXZ0YnVm
X2ZsdXNoX21hcmsodmIpOyAvKiBDbGVhbiBvbGQgbWFyay4gKi8NCgkJdmItPnZiX21hcmtfc3Rh
cnQudHBfY29sID0gMDsNCgkJdmItPnZiX21hcmtfZW5kLnRwX2NvbCA9IHZiLT52Yl9zY3Jfc2l6
ZS50cF9jb2w7DQoJCXZiLT52Yl9tYXJrX3N0YXJ0LnRwX3JvdyA9IHZiLT52Yl9tYXJrX2VuZC50
cF9yb3cgPQ0KCQkgICAgdnRidWZfd3RoKHZiLCByb3cpOw0KCQlicmVhazsNCgljYXNlIFZUQl9N
QVJLX05PTkU6DQoJCXZiLT52Yl9tYXJrX2xhc3QgPSB0eXBlOw0KCQkvKiBGQUxMVEhST1VHSCAq
Lw0KCWRlZmF1bHQ6DQoJCS8qIHBhbmljPyAqLw0KCQlyZXR1cm4gKDApOw0KCX0NCg0KCXZiLT52
Yl9tYXJrX2xhc3QgPSB0eXBlOw0KCS8qIERyYXcgbmV3IG1hcmtlZCByZWdpb24uICovDQoJdnRi
dWZfZmx1c2hfbWFyayh2Yik7DQoJcmV0dXJuICgxKTsNCn0NCiNlbmRpZg0KDQp2b2lkDQp2dGJ1
Zl9jdXJzb3JfdmlzaWJpbGl0eShzdHJ1Y3QgdnRfYnVmICp2YiwgaW50IHllcykNCnsNCglpbnQg
b2ZsYWdzLCBuZmxhZ3M7DQoNCglvZmxhZ3MgPSB2Yi0+dmJfZmxhZ3M7DQoJaWYgKHllcykNCgkJ
dmItPnZiX2ZsYWdzIHw9IFZCRl9DVVJTT1I7DQoJZWxzZQ0KCQl2Yi0+dmJfZmxhZ3MgJj0gflZC
Rl9DVVJTT1I7DQoJbmZsYWdzID0gdmItPnZiX2ZsYWdzOw0KDQoJaWYgKG9mbGFncyAhPSBuZmxh
Z3MpDQoJCXZ0YnVmX2RpcnR5X2NlbGwodmIsICZ2Yi0+dmJfY3Vyc29yKTsNCn0NCg0Kdm9pZA0K
dnRidWZfc2Nyb2xsX21vZGUoc3RydWN0IHZ0X2J1ZiAqdmIsIGludCB5ZXMpDQp7DQoJaW50IG9m
bGFncywgbmZsYWdzOw0KDQoJVlRCVUZfTE9DSyh2Yik7DQoJb2ZsYWdzID0gdmItPnZiX2ZsYWdz
Ow0KCWlmICh5ZXMpDQoJCXZiLT52Yl9mbGFncyB8PSBWQkZfU0NST0xMOw0KCWVsc2UNCgkJdmIt
PnZiX2ZsYWdzICY9IH5WQkZfU0NST0xMOw0KCW5mbGFncyA9IHZiLT52Yl9mbGFnczsNCg0KCWlm
IChvZmxhZ3MgIT0gbmZsYWdzKQ0KCQl2dGJ1Zl9kaXJ0eV9jZWxsKHZiLCAmdmItPnZiX2N1cnNv
cik7DQoJVlRCVUZfVU5MT0NLKHZiKTsNCn0NCg==

--3432851520-594251130-1655902382=:1623--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CP6P284MB1900CA1ED5B5BADE054ECB34CBB29>