Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 4 May 2015 09:34:14 +0000
From:      "hselasky (Hans Petter Selasky)" <phabric-noreply@FreeBSD.org>
To:        freebsd-net@freebsd.org
Subject:   [Differential] [Closed] D1438: FreeBSD callout rewrite and cleanup
Message-ID:  <a17c2070cbe9bbfcdf7c7bdb3c763fdd@localhost.localdomain>
In-Reply-To: <differential-rev-PHID-DREV-o4lr3ts4fgj46hyp6sg3-req@FreeBSD.org>
References:  <differential-rev-PHID-DREV-o4lr3ts4fgj46hyp6sg3-req@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--b1_a17c2070cbe9bbfcdf7c7bdb3c763fdd
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: 8bit

This revision was automatically updated to reflect the committed changes.
Closed by commit rS282414: Major callout subsystem cleanup and rewrite: (authored by hselasky).

CHANGED PRIOR TO COMMIT
  https://reviews.freebsd.org/D1438?vs=4870&id=5170#toc

REPOSITORY
  rS FreeBSD src repository

REVISION DETAIL
  https://reviews.freebsd.org/D1438

AFFECTED FILES
  projects/hps_head/share/man/man9/Makefile
  projects/hps_head/share/man/man9/timeout.9
  projects/hps_head/sys/kern/init_main.c
  projects/hps_head/sys/kern/kern_clocksource.c
  projects/hps_head/sys/kern/kern_condvar.c
  projects/hps_head/sys/kern/kern_lock.c
  projects/hps_head/sys/kern/kern_switch.c
  projects/hps_head/sys/kern/kern_synch.c
  projects/hps_head/sys/kern/kern_thread.c
  projects/hps_head/sys/kern/kern_timeout.c
  projects/hps_head/sys/kern/subr_sleepqueue.c
  projects/hps_head/sys/ofed/include/linux/completion.h
  projects/hps_head/sys/ofed/include/linux/linux_compat.c
  projects/hps_head/sys/sys/_callout.h
  projects/hps_head/sys/sys/callout.h
  projects/hps_head/sys/sys/proc.h

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: hselasky, jhb, adrian, markj, emaste, sbruno, imp, lstewart, rwatson, gnn, rrs, kostikbel, delphij, neel, erj
Cc: avg, jch, wblock, freebsd-net

--b1_a17c2070cbe9bbfcdf7c7bdb3c763fdd
Content-Type: text/x-patch; charset=utf-8; name="D1438.5170.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D1438.5170.patch"

ZGlmZiAtLWdpdCBhL3Byb2plY3RzL2hwc19oZWFkL3N5cy9zeXMvY2FsbG91dC5oIGIvcHJvamVj
dHMvaHBzX2hlYWQvc3lzL3N5cy9jYWxsb3V0LmgKLS0tIGEvcHJvamVjdHMvaHBzX2hlYWQvc3lz
L3N5cy9jYWxsb3V0LmgKKysrIGIvcHJvamVjdHMvaHBzX2hlYWQvc3lzL3N5cy9jYWxsb3V0LmgK
QEAgLTQ1LDEwICs0NSwxMiBAQAogI2RlZmluZQlDQUxMT1VUX1BFTkRJTkcJCTB4MDAwNCAvKiBj
YWxsb3V0IGlzIHdhaXRpbmcgZm9yIHRpbWVvdXQgKi8KICNkZWZpbmUJQ0FMTE9VVF9NUFNBRkUJ
CTB4MDAwOCAvKiBjYWxsb3V0IGhhbmRsZXIgaXMgbXAgc2FmZSAqLwogI2RlZmluZQlDQUxMT1VU
X1JFVFVSTlVOTE9DS0VECTB4MDAxMCAvKiBoYW5kbGVyIHJldHVybnMgd2l0aCBtdHggdW5sb2Nr
ZWQgKi8KLSNkZWZpbmUJQ0FMTE9VVF9TSEFSRURMT0NLCTB4MDAyMCAvKiBjYWxsb3V0IGxvY2sg
aGVsZCBpbiBzaGFyZWQgbW9kZSAqLwotI2RlZmluZQlDQUxMT1VUX0RGUk1JR1JBVElPTgkweDAw
NDAgLyogY2FsbG91dCBpbiBkZWZlcnJlZCBtaWdyYXRpb24gbW9kZSAqLworI2RlZmluZQlDQUxM
T1VUX1VOVVNFRF81CTB4MDAyMCAvKiAtLWF2YWlsYWJsZS0tICovCisjZGVmaW5lCUNBTExPVVRf
REVGUkVTVEFSVAkweDAwNDAgLyogY2FsbG91dCByZXN0YXJ0IGlzIGRlZmVycmVkICovCiAjZGVm
aW5lCUNBTExPVVRfUFJPQ0VTU0VECTB4MDA4MCAvKiBjYWxsb3V0IGluIHdoZWVsIG9yIHByb2Nl
c3NpbmcgbGlzdD8gKi8KICNkZWZpbmUJQ0FMTE9VVF9ESVJFQ1QgCQkweDAxMDAgLyogYWxsb3cg
ZXhlYyBmcm9tIGh3IGludCBjb250ZXh0ICovCisjZGVmaW5lCUNBTExPVVRfU0VUX0xDKHgpCSgo
KHgpICYgNykgPDwgMTYpIC8qIHNldCBsb2NrIGNsYXNzICovCisjZGVmaW5lCUNBTExPVVRfR0VU
X0xDKHgpCSgoKHgpID4+IDE2KSAmIDcpIC8qIGdldCBsb2NrIGNsYXNzICovCiAKICNkZWZpbmUJ
Q19ESVJFQ1RfRVhFQwkJMHgwMDAxIC8qIGRpcmVjdCBleGVjdXRpb24gb2YgY2FsbG91dCAqLwog
I2RlZmluZQlDX1BSRUxCSVRTCQk3CkBAIC02MywyNSArNjUsMTAgQEAKIH07CiAKICNpZmRlZiBf
S0VSTkVMCi0vKiAKLSAqIE5vdGUgdGhlIGZsYWdzIGZpZWxkIGlzIGFjdHVhbGx5ICp0d28qIGZp
ZWxkcy4gVGhlIGNfZmxhZ3MKLSAqIGZpZWxkIGlzIHRoZSBvbmUgdGhhdCBjYWxsZXIgb3BlcmF0
aW9ucyB0aGF0IG1heSwgb3IgbWF5IG5vdCBoYXZlCi0gKiBhIGxvY2sgdG91Y2hlcyBpLmUuIGNh
bGxvdXRfZGVhY3RpdmF0ZSgpLiBUaGUgb3RoZXIsIHRoZSBjX2lmbGFncywKLSAqIGlzIHRoZSBp
bnRlcm5hbCBmbGFncyB0aGF0ICptdXN0KiBiZSBrZXB0IGNvcnJlY3Qgb24gd2hpY2ggdGhlCi0g
KiBjYWxsb3V0IHN5c3RlbSBkZXBlbmQgb24gZS5nLiBjYWxsb3V0X3BlbmRpbmcoKS4KLSAqIFRo
ZSBjX2lmbGFnIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY2FsbG91dCBzeXN0ZW0gdG8gZGV0
ZXJtaW5lIHdoaWNoCi0gKiBsaXN0IHRoZSBjYWxsb3V0IGlzIG9uIGFuZCB0cmFjayBpbnRlcm5h
bCBzdGF0ZS4gQ2FsbGVycyAqc2hvdWxkIG5vdCogCi0gKiB1c2UgdGhlIGNfZmxhZ3MgZmllbGQg
ZGlyZWN0bHkgYnV0IHNob3VsZCB1c2UgdGhlIG1hY3JvcyBwcm92aWRlZC4KLSAqICAKLSAqIFRo
ZSBjX2lmbGFncyBmaWVsZCBob2xkcyBpbnRlcm5hbCBmbGFncyB0aGF0IGFyZSBwcm90ZWN0ZWQg
YnkgaW50ZXJuYWwKLSAqIGxvY2tzIG9mIHRoZSBjYWxsb3V0IHN1YnN5c3RlbS4gIFRoZSBjX2Zs
YWdzIGZpZWxkIGhvbGRzIGV4dGVybmFsIGZsYWdzLgotICogVGhlIGNhbGxlciBtdXN0IGhvbGQg
aXRzIG93biBsb2NrIHdoaWxlIG1hbmlwdWxhdGluZyBvciByZWFkaW5nIGV4dGVybmFsCi0gKiBm
bGFncyB2aWEgY2FsbG91dF9hY3RpdmUoKSwgY2FsbG91dF9kZWFjdGl2YXRlKCksIGNhbGxvdXRf
cmVzZXQqKCksIG9yCi0gKiBjYWxsb3V0X3N0b3AoKSB0byBhdm9pZCByYWNlcy4KLSAqLwogI2Rl
ZmluZQljYWxsb3V0X2FjdGl2ZShjKQkoKGMpLT5jX2ZsYWdzICYgQ0FMTE9VVF9BQ1RJVkUpCiAj
ZGVmaW5lCWNhbGxvdXRfZGVhY3RpdmF0ZShjKQkoKGMpLT5jX2ZsYWdzICY9IH5DQUxMT1VUX0FD
VElWRSkKLSNkZWZpbmUJY2FsbG91dF9kcmFpbihjKQlfY2FsbG91dF9zdG9wX3NhZmUoYywgMSkK
K2ludAljYWxsb3V0X2RyYWluKHN0cnVjdCBjYWxsb3V0ICopOworaW50CWNhbGxvdXRfZHJhaW5f
YXN5bmMoc3RydWN0IGNhbGxvdXQgKiwgY2FsbG91dF9mdW5jX3QgKiwgdm9pZCAqKTsKIHZvaWQJ
Y2FsbG91dF9pbml0KHN0cnVjdCBjYWxsb3V0ICosIGludCk7CiB2b2lkCV9jYWxsb3V0X2luaXRf
bG9jayhzdHJ1Y3QgY2FsbG91dCAqLCBzdHJ1Y3QgbG9ja19vYmplY3QgKiwgaW50KTsKICNkZWZp
bmUJY2FsbG91dF9pbml0X210eChjLCBtdHgsIGZsYWdzKQkJCQkJXApAQCAtOTMsOSArODAsOSBA
QAogI2RlZmluZQljYWxsb3V0X2luaXRfcncoYywgcncsIGZsYWdzKQkJCQkJXAogCV9jYWxsb3V0
X2luaXRfbG9jaygoYyksICgocncpICE9IE5VTEwpID8gJihydyktPmxvY2tfb2JqZWN0IDoJXAog
CSAgIE5VTEwsIChmbGFncykpCi0jZGVmaW5lCWNhbGxvdXRfcGVuZGluZyhjKQkoKGMpLT5jX2lm
bGFncyAmIENBTExPVVRfUEVORElORykKKyNkZWZpbmUJY2FsbG91dF9wZW5kaW5nKGMpCSgoYykt
PmNfZmxhZ3MgJiBDQUxMT1VUX1BFTkRJTkcpCiBpbnQJY2FsbG91dF9yZXNldF9zYnRfb24oc3Ry
dWN0IGNhbGxvdXQgKiwgc2JpbnRpbWVfdCwgc2JpbnRpbWVfdCwKLQkgICAgdm9pZCAoKikodm9p
ZCAqKSwgdm9pZCAqLCBpbnQsIGludCk7CisJICAgIGNhbGxvdXRfZnVuY190ICosIHZvaWQgKiwg
aW50LCBpbnQpOwogI2RlZmluZQljYWxsb3V0X3Jlc2V0X3NidChjLCBzYnQsIHByLCBmbiwgYXJn
LCBmbGFncykJCQlcCiAgICAgY2FsbG91dF9yZXNldF9zYnRfb24oKGMpLCAoc2J0KSwgKHByKSwg
KGZuKSwgKGFyZyksIC0xLCAoZmxhZ3MpKQogI2RlZmluZQljYWxsb3V0X3Jlc2V0X3NidF9jdXJj
cHUoYywgc2J0LCBwciwgZm4sIGFyZywgZmxhZ3MpCQlcCkBAIC0xMTksOCArMTA2LDcgQEAKIGlu
dAljYWxsb3V0X3NjaGVkdWxlX29uKHN0cnVjdCBjYWxsb3V0ICosIGludCwgaW50KTsKICNkZWZp
bmUJY2FsbG91dF9zY2hlZHVsZV9jdXJjcHUoYywgb25fdGljaykJCQkJXAogICAgIGNhbGxvdXRf
c2NoZWR1bGVfb24oKGMpLCAob25fdGljayksIFBDUFVfR0VUKGNwdWlkKSkKLSNkZWZpbmUJY2Fs
bG91dF9zdG9wKGMpCQlfY2FsbG91dF9zdG9wX3NhZmUoYywgMCkKLWludAlfY2FsbG91dF9zdG9w
X3NhZmUoc3RydWN0IGNhbGxvdXQgKiwgaW50KTsKK2ludAljYWxsb3V0X3N0b3Aoc3RydWN0IGNh
bGxvdXQgKik7CiB2b2lkCWNhbGxvdXRfcHJvY2VzcyhzYmludGltZV90IG5vdyk7CiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvaHBzX2hlYWQvc3lzL3N5cy9fY2FsbG91dC5oIGIvcHJv
amVjdHMvaHBzX2hlYWQvc3lzL3N5cy9fY2FsbG91dC5oCi0tLSBhL3Byb2plY3RzL2hwc19oZWFk
L3N5cy9zeXMvX2NhbGxvdXQuaAorKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMvc3lzL19jYWxs
b3V0LmgKQEAgLTQ2LDYgKzQ2LDggQEAKIFNMSVNUX0hFQUQoY2FsbG91dF9zbGlzdCwgY2FsbG91
dCk7CiBUQUlMUV9IRUFEKGNhbGxvdXRfdGFpbHEsIGNhbGxvdXQpOwogCit0eXBlZGVmIHZvaWQg
Y2FsbG91dF9mdW5jX3Qodm9pZCAqKTsKKwogc3RydWN0IGNhbGxvdXQgewogCXVuaW9uIHsKIAkJ
TElTVF9FTlRSWShjYWxsb3V0KSBsZTsKQEAgLTU1LDEwICs1Nyw5IEBACiAJc2JpbnRpbWVfdCBj
X3RpbWU7CQkJLyogdGlja3MgdG8gdGhlIGV2ZW50ICovCiAJc2JpbnRpbWVfdCBjX3ByZWNpc2lv
bjsJCQkvKiBkZWx0YSBhbGxvd2VkIHdydCBvcHQgKi8KIAl2b2lkCSpjX2FyZzsJCQkJLyogZnVu
Y3Rpb24gYXJndW1lbnQgKi8KLQl2b2lkCSgqY19mdW5jKSh2b2lkICopOwkJLyogZnVuY3Rpb24g
dG8gY2FsbCAqLworCWNhbGxvdXRfZnVuY190ICpjX2Z1bmM7CQkJLyogZnVuY3Rpb24gdG8gY2Fs
bCAqLwogCXN0cnVjdCBsb2NrX29iamVjdCAqY19sb2NrOwkJLyogbG9jayB0byBoYW5kbGUgKi8K
LQlzaG9ydAljX2ZsYWdzOwkJCS8qIFVzZXIgU3RhdGUgKi8KLQlzaG9ydAljX2lmbGFnczsJCQkv
KiBJbnRlcm5hbCBTdGF0ZSAqLworCWludAljX2ZsYWdzOwkJCS8qIHN0YXRlIG9mIHRoaXMgZW50
cnkgKi8KIAl2b2xhdGlsZSBpbnQgY19jcHU7CQkJLyogQ1BVIHdlJ3JlIHNjaGVkdWxlZCBvbiAq
LwogfTsKIApkaWZmIC0tZ2l0IGEvcHJvamVjdHMvaHBzX2hlYWQvc3lzL3N5cy9wcm9jLmggYi9w
cm9qZWN0cy9ocHNfaGVhZC9zeXMvc3lzL3Byb2MuaAotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9z
eXMvc3lzL3Byb2MuaAorKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMvc3lzL3Byb2MuaApAQCAt
MzA4LDYgKzMwOCw3IEBACiAJfSB0ZF91cmV0b2ZmOwkJCS8qIChrKSBTeXNjYWxsIGF1eCByZXR1
cm5zLiAqLwogI2RlZmluZSB0ZF9yZXR2YWwJdGRfdXJldG9mZi50ZHVfcmV0dmFsCiAJc3RydWN0
IGNhbGxvdXQJdGRfc2xwY2FsbG91dDsJLyogKGgpIENhbGxvdXQgZm9yIHNsZWVwLiAqLworCXN0
cnVjdCBtdHgJdGRfc2xwbXV0ZXg7CS8qIChoKSBNdXRleCBmb3Igc2xlZXAgY2FsbG91dCAqLwog
CXN0cnVjdCB0cmFwZnJhbWUgKnRkX2ZyYW1lOwkvKiAoaykgKi8KIAlzdHJ1Y3Qgdm1fb2JqZWN0
ICp0ZF9rc3RhY2tfb2JqOy8qIChhKSBLc3RhY2sgb2JqZWN0LiAqLwogCXZtX29mZnNldF90CXRk
X2tzdGFjazsJLyogKGEpIEtlcm5lbCBWQSBvZiBrc3RhY2suICovCkBAIC0zNjQsNyArMzY1LDcg
QEAKICNkZWZpbmUJVERGX0FMTFBST0NTVVNQCTB4MDAwMDAyMDAgLyogc3VzcGVuZGVkIGJ5IFNJ
TkdMRV9BTExQUk9DICovCiAjZGVmaW5lCVRERl9CT1VOREFSWQkweDAwMDAwNDAwIC8qIFRocmVh
ZCBzdXNwZW5kZWQgYXQgdXNlciBib3VuZGFyeSAqLwogI2RlZmluZQlUREZfQVNUUEVORElORwkw
eDAwMDAwODAwIC8qIFRocmVhZCBoYXMgc29tZSBhc3luY2hyb25vdXMgZXZlbnRzLiAqLwotI2Rl
ZmluZQlUREZfVElNT0ZBSUwJMHgwMDAwMTAwMCAvKiBUaW1lb3V0IGZyb20gc2xlZXAgYWZ0ZXIg
d2Ugd2VyZSBhd2FrZS4gKi8KKyNkZWZpbmUJVERGX1VOVVNFRDEyCTB4MDAwMDEwMDAgLyogLS1h
dmFpbGFibGUtLSAqLwogI2RlZmluZQlUREZfU0JEUlkJMHgwMDAwMjAwMCAvKiBTdG9wIG9ubHkg
b24gdXNlcm1vZGUgYm91bmRhcnkuICovCiAjZGVmaW5lCVRERl9VUElCTE9DS0VECTB4MDAwMDQw
MDAgLyogVGhyZWFkIGJsb2NrZWQgb24gdXNlciBQSSBtdXRleC4gKi8KICNkZWZpbmUJVERGX05F
RURTVVNQQ0hLCTB4MDAwMDgwMDAgLyogVGhyZWFkIG1heSBuZWVkIHRvIHN1c3BlbmQuICovCkBA
IC03MDYsNyArNzA3LDcgQEAKICNkZWZpbmUJU1dUX09XRVBSRUVNUFQJCTIJLyogU3dpdGNoaW5n
IGR1ZSB0byBvcGVwcmVlbXB0LiAqLwogI2RlZmluZQlTV1RfVFVSTlNUSUxFCQkzCS8qIFR1cm5z
dGlsZSBjb250ZW50aW9uLiAqLwogI2RlZmluZQlTV1RfU0xFRVBRCQk0CS8qIFNsZWVwcSB3YWl0
LiAqLwotI2RlZmluZQlTV1RfU0xFRVBRVElNTwkJNQkvKiBTbGVlcHEgdGltZW91dCB3YWl0LiAq
LworI2RlZmluZQlTV1RfVU5VU0VENQkJNQkvKiAtLWF2YWlsYWJsZS0tICovCiAjZGVmaW5lCVNX
VF9SRUxJTlFVSVNICQk2CS8qIHlpZWxkIGNhbGwuICovCiAjZGVmaW5lCVNXVF9ORUVEUkVTQ0hF
RAkJNwkvKiBORUVEUkVTQ0hFRCB3YXMgc2V0LiAqLwogI2RlZmluZQlTV1RfSURMRQkJOAkvKiBT
d2l0Y2hpbmcgZnJvbSB0aGUgaWRsZSB0aHJlYWQuICovCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9o
cHNfaGVhZC9zeXMvb2ZlZC9pbmNsdWRlL2xpbnV4L2NvbXBsZXRpb24uaCBiL3Byb2plY3RzL2hw
c19oZWFkL3N5cy9vZmVkL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oCi0tLSBhL3Byb2plY3Rz
L2hwc19oZWFkL3N5cy9vZmVkL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oCisrKyBiL3Byb2pl
Y3RzL2hwc19oZWFkL3N5cy9vZmVkL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oCkBAIC02NCwz
ICs2NCw0IEBACiBleHRlcm4gaW50IGxpbnV4X2NvbXBsZXRpb25fZG9uZShzdHJ1Y3QgY29tcGxl
dGlvbiAqKTsKIAogI2VuZGlmCQkJCQkvKiBfTElOVVhfQ09NUExFVElPTl9IXyAqLworCmRpZmYg
LS1naXQgYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMvb2ZlZC9pbmNsdWRlL2xpbnV4L2xpbnV4X2Nv
bXBhdC5jIGIvcHJvamVjdHMvaHBzX2hlYWQvc3lzL29mZWQvaW5jbHVkZS9saW51eC9saW51eF9j
b21wYXQuYwotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMvb2ZlZC9pbmNsdWRlL2xpbnV4L2xp
bnV4X2NvbXBhdC5jCisrKyBiL3Byb2plY3RzL2hwc19oZWFkL3N5cy9vZmVkL2luY2x1ZGUvbGlu
dXgvbGludXhfY29tcGF0LmMKQEAgLTg0Niw3ICs4NDYsOSBAQAogCQlpZiAoYy0+ZG9uZSkKIAkJ
CWJyZWFrOwogCQlzbGVlcHFfYWRkKGMsIE5VTEwsICJjb21wbGV0aW9uIiwgZmxhZ3MsIDApOwor
CQlzbGVlcHFfcmVsZWFzZShjKTsKIAkJc2xlZXBxX3NldF90aW1lb3V0KGMsIGxpbnV4X3RpbWVy
X2ppZmZpZXNfdW50aWwoZW5kKSk7CisJCXNsZWVwcV9sb2NrKGMpOwogCQlpZiAoZmxhZ3MgJiBT
TEVFUFFfSU5URVJSVVBUSUJMRSkKIAkJCXJldCA9IHNsZWVwcV90aW1lZHdhaXRfc2lnKGMsIDAp
OwogCQllbHNlCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9zdWJyX3Ns
ZWVwcXVldWUuYyBiL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL3N1YnJfc2xlZXBxdWV1ZS5j
Ci0tLSBhL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL3N1YnJfc2xlZXBxdWV1ZS5jCisrKyBi
L3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL3N1YnJfc2xlZXBxdWV1ZS5jCkBAIC0xNTIsNyAr
MTUyLDggQEAKICAqLwogc3RhdGljIGludAlzbGVlcHFfY2F0Y2hfc2lnbmFscyh2b2lkICp3Y2hh
biwgaW50IHByaSk7CiBzdGF0aWMgaW50CXNsZWVwcV9jaGVja19zaWduYWxzKHZvaWQpOwotc3Rh
dGljIGludAlzbGVlcHFfY2hlY2tfdGltZW91dCh2b2lkKTsKK3N0YXRpYyBpbnQJc2xlZXBxX2No
ZWNrX3RpbWVvdXQoc3RydWN0IHRocmVhZCAqKTsKK3N0YXRpYyB2b2lkCXNsZWVwcV9zdG9wX3Rp
bWVvdXQoc3RydWN0IHRocmVhZCAqKTsKICNpZmRlZiBJTlZBUklBTlRTCiBzdGF0aWMgdm9pZAlz
bGVlcHFfZHRvcih2b2lkICptZW0sIGludCBzaXplLCB2b2lkICphcmcpOwogI2VuZGlmCkBAIC0z
NzMsMTcgKzM3NCwxNCBAQAogc2xlZXBxX3NldF90aW1lb3V0X3NidCh2b2lkICp3Y2hhbiwgc2Jp
bnRpbWVfdCBzYnQsIHNiaW50aW1lX3QgcHIsCiAgICAgaW50IGZsYWdzKQogewotCXN0cnVjdCBz
bGVlcHF1ZXVlX2NoYWluICpzYzsKIAlzdHJ1Y3QgdGhyZWFkICp0ZDsKIAogCXRkID0gY3VydGhy
ZWFkOwotCXNjID0gU0NfTE9PS1VQKHdjaGFuKTsKLQltdHhfYXNzZXJ0KCZzYy0+c2NfbG9jaywg
TUFfT1dORUQpOwotCU1QQVNTKFREX09OX1NMRUVQUSh0ZCkpOwotCU1QQVNTKHRkLT50ZF9zbGVl
cHF1ZXVlID09IE5VTEwpOwotCU1QQVNTKHdjaGFuICE9IE5VTEwpOworCisJbXR4X2xvY2tfc3Bp
bigmdGQtPnRkX3NscG11dGV4KTsKIAljYWxsb3V0X3Jlc2V0X3NidF9vbigmdGQtPnRkX3NscGNh
bGxvdXQsIHNidCwgcHIsCiAJICAgIHNsZWVwcV90aW1lb3V0LCB0ZCwgUENQVV9HRVQoY3B1aWQp
LCBmbGFncyB8IENfRElSRUNUX0VYRUMpOworCW10eF91bmxvY2tfc3BpbigmdGQtPnRkX3NscG11
dGV4KTsKIH0KIAogLyoKQEAgLTU1OSwxMSArNTU3LDggQEAKICAqIENoZWNrIHRvIHNlZSBpZiB3
ZSB0aW1lZCBvdXQuCiAgKi8KIHN0YXRpYyBpbnQKLXNsZWVwcV9jaGVja190aW1lb3V0KHZvaWQp
CitzbGVlcHFfY2hlY2tfdGltZW91dChzdHJ1Y3QgdGhyZWFkICp0ZCkKIHsKLQlzdHJ1Y3QgdGhy
ZWFkICp0ZDsKLQotCXRkID0gY3VydGhyZWFkOwogCVRIUkVBRF9MT0NLX0FTU0VSVCh0ZCwgTUFf
T1dORUQpOwogCiAJLyoKQEAgLTU3MywyOCArNTY4LDIxIEBACiAJCXRkLT50ZF9mbGFncyAmPSB+
VERGX1RJTUVPVVQ7CiAJCXJldHVybiAoRVdPVUxEQkxPQ0spOwogCX0KLQotCS8qCi0JICogSWYg
VERGX1RJTU9GQUlMIGlzIHNldCwgdGhlIHRpbWVvdXQgcmFuIGFmdGVyIHdlIGhhZAotCSAqIGFs
cmVhZHkgYmVlbiB3b2tlbiB1cC4KLQkgKi8KLQlpZiAodGQtPnRkX2ZsYWdzICYgVERGX1RJTU9G
QUlMKQotCQl0ZC0+dGRfZmxhZ3MgJj0gflRERl9USU1PRkFJTDsKLQotCS8qCi0JICogSWYgY2Fs
bG91dF9zdG9wKCkgZmFpbHMsIHRoZW4gdGhlIHRpbWVvdXQgaXMgcnVubmluZyBvbgotCSAqIGFu
b3RoZXIgQ1BVLCBzbyBzeW5jaHJvbml6ZSB3aXRoIGl0IHRvIGF2b2lkIGhhdmluZyBpdAotCSAq
IGFjY2lkZW50YWxseSB3YWtlIHVwIGEgc3Vic2VxdWVudCBzbGVlcC4KLQkgKi8KLQllbHNlIGlm
IChjYWxsb3V0X3N0b3AoJnRkLT50ZF9zbHBjYWxsb3V0KSA9PSAwKSB7Ci0JCXRkLT50ZF9mbGFn
cyB8PSBUREZfVElNRU9VVDsKLQkJVERfU0VUX1NMRUVQSU5HKHRkKTsKLQkJbWlfc3dpdGNoKFNX
X0lOVk9MIHwgU1dUX1NMRUVQUVRJTU8sIE5VTEwpOwotCX0KIAlyZXR1cm4gKDApOwogfQogCiAv
KgorICogQXRvbWljYWxseSBzdG9wIHRoZSB0aW1lb3V0IGJ5IHVzaW5nIGEgbXV0ZXguCisgKi8K
K3N0YXRpYyB2b2lkCitzbGVlcHFfc3RvcF90aW1lb3V0KHN0cnVjdCB0aHJlYWQgKnRkKQorewor
CW10eF9sb2NrX3NwaW4oJnRkLT50ZF9zbHBtdXRleCk7CisJY2FsbG91dF9zdG9wKCZ0ZC0+dGRf
c2xwY2FsbG91dCk7CisJbXR4X3VubG9ja19zcGluKCZ0ZC0+dGRfc2xwbXV0ZXgpOworfQorCisv
KgogICogQ2hlY2sgdG8gc2VlIGlmIHdlIHdlcmUgYXdva2VuIGJ5IGEgc2lnbmFsLgogICovCiBz
dGF0aWMgaW50CkBAIC02NjQsOSArNjUyLDExIEBACiAJTVBBU1MoISh0ZC0+dGRfZmxhZ3MgJiBU
REZfU0lOVFIpKTsKIAl0aHJlYWRfbG9jayh0ZCk7CiAJc2xlZXBxX3N3aXRjaCh3Y2hhbiwgcHJp
KTsKLQlydmFsID0gc2xlZXBxX2NoZWNrX3RpbWVvdXQoKTsKKwlydmFsID0gc2xlZXBxX2NoZWNr
X3RpbWVvdXQodGQpOwogCXRocmVhZF91bmxvY2sodGQpOwogCisJc2xlZXBxX3N0b3BfdGltZW91
dCh0ZCk7CisKIAlyZXR1cm4gKHJ2YWwpOwogfQogCkBAIC02NzcsMTIgKzY2NywxOCBAQAogaW50
CiBzbGVlcHFfdGltZWR3YWl0X3NpZyh2b2lkICp3Y2hhbiwgaW50IHByaSkKIHsKKwlzdHJ1Y3Qg
dGhyZWFkICp0ZDsKIAlpbnQgcmNhdGNoLCBydmFsdCwgcnZhbHM7CiAKKwl0ZCA9IGN1cnRocmVh
ZDsKKwogCXJjYXRjaCA9IHNsZWVwcV9jYXRjaF9zaWduYWxzKHdjaGFuLCBwcmkpOwotCXJ2YWx0
ID0gc2xlZXBxX2NoZWNrX3RpbWVvdXQoKTsKKwlydmFsdCA9IHNsZWVwcV9jaGVja190aW1lb3V0
KHRkKTsKIAlydmFscyA9IHNsZWVwcV9jaGVja19zaWduYWxzKCk7Ci0JdGhyZWFkX3VubG9jayhj
dXJ0aHJlYWQpOworCXRocmVhZF91bmxvY2sodGQpOworCisJc2xlZXBxX3N0b3BfdGltZW91dCh0
ZCk7CisKIAlpZiAocmNhdGNoKQogCQlyZXR1cm4gKHJjYXRjaCk7CiAJaWYgKHJ2YWxzKQpAQCAt
ODg5LDY0ICs4ODUsNDkgQEAKIHN0YXRpYyB2b2lkCiBzbGVlcHFfdGltZW91dCh2b2lkICphcmcp
CiB7Ci0Jc3RydWN0IHNsZWVwcXVldWVfY2hhaW4gKnNjOwotCXN0cnVjdCBzbGVlcHF1ZXVlICpz
cTsKLQlzdHJ1Y3QgdGhyZWFkICp0ZDsKLQl2b2lkICp3Y2hhbjsKLQlpbnQgd2FrZXVwX3N3YXBw
ZXI7CisJc3RydWN0IHRocmVhZCAqdGQgPSBhcmc7CisJaW50IHdha2V1cF9zd2FwcGVyID0gMDsK
IAotCXRkID0gYXJnOwotCXdha2V1cF9zd2FwcGVyID0gMDsKIAlDVFIzKEtUUl9QUk9DLCAic2xl
ZXBxX3RpbWVvdXQ6IHRocmVhZCAlcCAocGlkICVsZCwgJXMpIiwKIAkgICAgKHZvaWQgKil0ZCwg
KGxvbmcpdGQtPnRkX3Byb2MtPnBfcGlkLCAodm9pZCAqKXRkLT50ZF9uYW1lKTsKIAotCS8qCi0J
ICogRmlyc3QsIHNlZSBpZiB0aGUgdGhyZWFkIGlzIGFzbGVlcCBhbmQgZ2V0IHRoZSB3YWl0IGNo
YW5uZWwgaWYKLQkgKiBpdCBpcy4KLQkgKi8KLQl0aHJlYWRfbG9jayh0ZCk7Ci0JaWYgKFREX0lT
X1NMRUVQSU5HKHRkKSAmJiBURF9PTl9TTEVFUFEodGQpKSB7Ci0JCXdjaGFuID0gdGQtPnRkX3dj
aGFuOwotCQlzYyA9IFNDX0xPT0tVUCh3Y2hhbik7Ci0JCVRIUkVBRF9MT0NLUFRSX0FTU0VSVCh0
ZCwgJnNjLT5zY19sb2NrKTsKLQkJc3EgPSBzbGVlcHFfbG9va3VwKHdjaGFuKTsKLQkJTVBBU1Mo
c3EgIT0gTlVMTCk7Ci0JCXRkLT50ZF9mbGFncyB8PSBUREZfVElNRU9VVDsKLQkJd2FrZXVwX3N3
YXBwZXIgPSBzbGVlcHFfcmVzdW1lX3RocmVhZChzcSwgdGQsIDApOwotCQl0aHJlYWRfdW5sb2Nr
KHRkKTsKLQkJaWYgKHdha2V1cF9zd2FwcGVyKQotCQkJa2lja19wcm9jMCgpOwotCQlyZXR1cm47
Ci0JfQorCS8qIEhhbmRsZSB0aGUgdGhyZWUgY2FzZXMgd2hpY2ggY2FuIGhhcHBlbiAqLwogCi0J
LyoKLQkgKiBJZiB0aGUgdGhyZWFkIGlzIG9uIHRoZSBTTEVFUFEgYnV0IGlzbid0IHNsZWVwaW5n
IHlldCwgaXQKLQkgKiBjYW4gZWl0aGVyIGJlIG9uIGFub3RoZXIgQ1BVIGluIGJldHdlZW4gc2xl
ZXBxX2FkZCgpIGFuZAotCSAqIG9uZSBvZiB0aGUgc2xlZXBxXyp3YWl0KigpIHJvdXRpbmVzIG9y
IGl0IGNhbiBiZSBpbgotCSAqIHNsZWVwcV9jYXRjaF9zaWduYWxzKCkuCi0JICovCisJdGhyZWFk
X2xvY2sodGQpOwogCWlmIChURF9PTl9TTEVFUFEodGQpKSB7Ci0JCXRkLT50ZF9mbGFncyB8PSBU
REZfVElNRU9VVDsKLQkJdGhyZWFkX3VubG9jayh0ZCk7Ci0JCXJldHVybjsKLQl9CisJCWlmIChU
RF9JU19TTEVFUElORyh0ZCkpIHsKKwkJCXN0cnVjdCBzbGVlcHF1ZXVlX2NoYWluICpzYzsKKwkJ
CXN0cnVjdCBzbGVlcHF1ZXVlICpzcTsKKwkJCXZvaWQgKndjaGFuOwogCi0JLyoKLQkgKiBOb3cg
Y2hlY2sgZm9yIHRoZSBlZGdlIGNhc2VzLiAgRmlyc3QsIGlmIFRERl9USU1FT1VUIGlzIHNldCwK
LQkgKiB0aGVuIHRoZSBvdGhlciB0aHJlYWQgaGFzIGFscmVhZHkgeWllbGRlZCB0byB1cywgc28g
Y2xlYXIKLQkgKiB0aGUgZmxhZyBhbmQgcmVzdW1lIGl0LiAgSWYgVERGX1RJTUVPVVQgaXMgbm90
IHNldCwgdGhlbiB0aGUKLQkgKiB3ZSBrbm93IHRoYXQgdGhlIG90aGVyIHRocmVhZCBpcyBub3Qg
b24gYSBzbGVlcCBxdWV1ZSwgYnV0IGl0Ci0JICogaGFzbid0IHJlc3VtZWQgZXhlY3V0aW9uIHll
dC4gIEluIHRoYXQgY2FzZSwgc2V0IFRERl9USU1PRkFJTAotCSAqIHRvIGxldCBpdCBrbm93IHRo
YXQgdGhlIHRpbWVvdXQgaGFzIGFscmVhZHkgcnVuIGFuZCBkb2Vzbid0Ci0JICogbmVlZCB0byBi
ZSBjYW5jZWxlZC4KLQkgKi8KLQlpZiAodGQtPnRkX2ZsYWdzICYgVERGX1RJTUVPVVQpIHsKLQkJ
TVBBU1MoVERfSVNfU0xFRVBJTkcodGQpKTsKLQkJdGQtPnRkX2ZsYWdzICY9IH5UREZfVElNRU9V
VDsKLQkJVERfQ0xSX1NMRUVQSU5HKHRkKTsKLQkJd2FrZXVwX3N3YXBwZXIgPSBzZXRydW5uYWJs
ZSh0ZCk7Ci0JfSBlbHNlCi0JCXRkLT50ZF9mbGFncyB8PSBUREZfVElNT0ZBSUw7CisJCQkvKgor
CQkJICogQ2FzZSBJIC0gdGhyZWFkIGlzIGFzbGVlcCBhbmQgbmVlZHMgdG8gYmUKKwkJCSAqIGF3
b2tlbjoKKwkJCSAqLworCQkJd2NoYW4gPSB0ZC0+dGRfd2NoYW47CisJCQlzYyA9IFNDX0xPT0tV
UCh3Y2hhbik7CisJCQlUSFJFQURfTE9DS1BUUl9BU1NFUlQodGQsICZzYy0+c2NfbG9jayk7CisJ
CQlzcSA9IHNsZWVwcV9sb29rdXAod2NoYW4pOworCQkJTVBBU1Moc3EgIT0gTlVMTCk7CisJCQl0
ZC0+dGRfZmxhZ3MgfD0gVERGX1RJTUVPVVQ7CisJCQl3YWtldXBfc3dhcHBlciA9IHNsZWVwcV9y
ZXN1bWVfdGhyZWFkKHNxLCB0ZCwgMCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQ2FzZSBJ
SSAtIGNhbmNlbCBnb2luZyB0byBzbGVlcCBieSBzZXR0aW5nCisJCQkgKiB0aGUgdGltZW91dCBm
bGFnIGJlY2F1c2UgdGhlIHRhcmdldCB0aHJlYWQKKwkJCSAqIGlzIG5vdCBhc2xlZXAgeWV0LiBJ
dCBjYW4gYmUgb24gYW5vdGhlciBDUFUKKwkJCSAqIGluIGJldHdlZW4gc2xlZXBxX2FkZCgpIGFu
ZCBvbmUgb2YgdGhlCisJCQkgKiBzbGVlcHFfKndhaXQqKCkgcm91dGluZXMgb3IgaXQgY2FuIGJl
IGluCisJCQkgKiBzbGVlcHFfY2F0Y2hfc2lnbmFscygpLgorCQkJICovCisJCQl0ZC0+dGRfZmxh
Z3MgfD0gVERGX1RJTUVPVVQ7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBDYXNlIElJSSAt
IHRocmVhZCBpcyBhbHJlYWR5IHdva2VuIHVwIGJ5IGEgd2FrZXVwCisJCSAqIGNhbGwgYW5kIHNo
b3VsZCBub3QgdGltZW91dC4gTm90aGluZyB0byBkbyEKKwkJICovCisJfQogCXRocmVhZF91bmxv
Y2sodGQpOwogCWlmICh3YWtldXBfc3dhcHBlcikKIAkJa2lja19wcm9jMCgpOwpkaWZmIC0tZ2l0
IGEvcHJvamVjdHMvaHBzX2hlYWQvc3lzL2tlcm4va2Vybl90aW1lb3V0LmMgYi9wcm9qZWN0cy9o
cHNfaGVhZC9zeXMva2Vybi9rZXJuX3RpbWVvdXQuYwotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9z
eXMva2Vybi9rZXJuX3RpbWVvdXQuYworKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9r
ZXJuX3RpbWVvdXQuYwpAQCAtNTQsNiArNTQsOCBAQAogI2luY2x1ZGUgPHN5cy9sb2NrLmg+CiAj
aW5jbHVkZSA8c3lzL21hbGxvYy5oPgogI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUg
PHN5cy9ybWxvY2suaD4KKyNpbmNsdWRlIDxzeXMvcndsb2NrLmg+CiAjaW5jbHVkZSA8c3lzL3By
b2MuaD4KICNpbmNsdWRlIDxzeXMvc2R0Lmg+CiAjaW5jbHVkZSA8c3lzL3NsZWVwcXVldWUuaD4K
QEAgLTc1LDI4ICs3NywyNSBAQAogICAgICJzdHJ1Y3QgY2FsbG91dCAqIik7CiAKICNpZmRlZiBD
QUxMT1VUX1BST0ZJTElORwotc3RhdGljIGludCBhdmdfZGVwdGg7Ci1TWVNDVExfSU5UKF9kZWJ1
ZywgT0lEX0FVVE8sIHRvX2F2Z19kZXB0aCwgQ1RMRkxBR19SRCwgJmF2Z19kZXB0aCwgMCwKK3N0
YXRpYyBpbnQgYXZnX2RlcHRoWzJdOworU1lTQ1RMX0lOVChfZGVidWcsIE9JRF9BVVRPLCB0b19h
dmdfZGVwdGgsIENUTEZMQUdfUkQsICZhdmdfZGVwdGhbMF0sIDAsCiAgICAgIkF2ZXJhZ2UgbnVt
YmVyIG9mIGl0ZW1zIGV4YW1pbmVkIHBlciBzb2Z0Y2xvY2sgY2FsbC4gVW5pdHMgPSAxLzEwMDAi
KTsKLXN0YXRpYyBpbnQgYXZnX2djYWxsczsKLVNZU0NUTF9JTlQoX2RlYnVnLCBPSURfQVVUTywg
dG9fYXZnX2djYWxscywgQ1RMRkxBR19SRCwgJmF2Z19nY2FsbHMsIDAsCitzdGF0aWMgaW50IGF2
Z19nY2FsbHNbMl07CitTWVNDVExfSU5UKF9kZWJ1ZywgT0lEX0FVVE8sIHRvX2F2Z19nY2FsbHMs
IENUTEZMQUdfUkQsICZhdmdfZ2NhbGxzWzBdLCAwLAogICAgICJBdmVyYWdlIG51bWJlciBvZiBH
aWFudCBjYWxsb3V0cyBtYWRlIHBlciBzb2Z0Y2xvY2sgY2FsbC4gVW5pdHMgPSAxLzEwMDAiKTsK
LXN0YXRpYyBpbnQgYXZnX2xvY2tjYWxsczsKLVNZU0NUTF9JTlQoX2RlYnVnLCBPSURfQVVUTywg
dG9fYXZnX2xvY2tjYWxscywgQ1RMRkxBR19SRCwgJmF2Z19sb2NrY2FsbHMsIDAsCitzdGF0aWMg
aW50IGF2Z19sb2NrY2FsbHNbMl07CitTWVNDVExfSU5UKF9kZWJ1ZywgT0lEX0FVVE8sIHRvX2F2
Z19sb2NrY2FsbHMsIENUTEZMQUdfUkQsICZhdmdfbG9ja2NhbGxzWzBdLCAwLAogICAgICJBdmVy
YWdlIG51bWJlciBvZiBsb2NrIGNhbGxvdXRzIG1hZGUgcGVyIHNvZnRjbG9jayBjYWxsLiBVbml0
cyA9IDEvMTAwMCIpOwotc3RhdGljIGludCBhdmdfbXBjYWxsczsKLVNZU0NUTF9JTlQoX2RlYnVn
LCBPSURfQVVUTywgdG9fYXZnX21wY2FsbHMsIENUTEZMQUdfUkQsICZhdmdfbXBjYWxscywgMCwK
K3N0YXRpYyBpbnQgYXZnX21wY2FsbHNbMl07CitTWVNDVExfSU5UKF9kZWJ1ZywgT0lEX0FVVE8s
IHRvX2F2Z19tcGNhbGxzLCBDVExGTEFHX1JELCAmYXZnX21wY2FsbHNbMF0sIDAsCiAgICAgIkF2
ZXJhZ2UgbnVtYmVyIG9mIE1QIGNhbGxvdXRzIG1hZGUgcGVyIHNvZnRjbG9jayBjYWxsLiBVbml0
cyA9IDEvMTAwMCIpOwotc3RhdGljIGludCBhdmdfZGVwdGhfZGlyOwotU1lTQ1RMX0lOVChfZGVi
dWcsIE9JRF9BVVRPLCB0b19hdmdfZGVwdGhfZGlyLCBDVExGTEFHX1JELCAmYXZnX2RlcHRoX2Rp
ciwgMCwKK1NZU0NUTF9JTlQoX2RlYnVnLCBPSURfQVVUTywgdG9fYXZnX2RlcHRoX2RpciwgQ1RM
RkxBR19SRCwgJmF2Z19kZXB0aFsxXSwgMCwKICAgICAiQXZlcmFnZSBudW1iZXIgb2YgZGlyZWN0
IGNhbGxvdXRzIGV4YW1pbmVkIHBlciBjYWxsb3V0X3Byb2Nlc3MgY2FsbC4gIgogICAgICJVbml0
cyA9IDEvMTAwMCIpOwotc3RhdGljIGludCBhdmdfbG9ja2NhbGxzX2RpcjsKIFNZU0NUTF9JTlQo
X2RlYnVnLCBPSURfQVVUTywgdG9fYXZnX2xvY2tjYWxsc19kaXIsIENUTEZMQUdfUkQsCi0gICAg
JmF2Z19sb2NrY2FsbHNfZGlyLCAwLCAiQXZlcmFnZSBudW1iZXIgb2YgbG9jayBkaXJlY3QgY2Fs
bG91dHMgbWFkZSBwZXIgIgorICAgICZhdmdfbG9ja2NhbGxzWzFdLCAwLCAiQXZlcmFnZSBudW1i
ZXIgb2YgbG9jayBkaXJlY3QgY2FsbG91dHMgbWFkZSBwZXIgIgogICAgICJjYWxsb3V0X3Byb2Nl
c3MgY2FsbC4gVW5pdHMgPSAxLzEwMDAiKTsKLXN0YXRpYyBpbnQgYXZnX21wY2FsbHNfZGlyOwot
U1lTQ1RMX0lOVChfZGVidWcsIE9JRF9BVVRPLCB0b19hdmdfbXBjYWxsc19kaXIsIENUTEZMQUdf
UkQsICZhdmdfbXBjYWxsc19kaXIsCitTWVNDVExfSU5UKF9kZWJ1ZywgT0lEX0FVVE8sIHRvX2F2
Z19tcGNhbGxzX2RpciwgQ1RMRkxBR19SRCwgJmF2Z19tcGNhbGxzWzFdLAogICAgIDAsICJBdmVy
YWdlIG51bWJlciBvZiBNUCBkaXJlY3QgY2FsbG91dHMgbWFkZSBwZXIgY2FsbG91dF9wcm9jZXNz
IGNhbGwuICIKICAgICAiVW5pdHMgPSAxLzEwMDAiKTsKICNlbmRpZgpAQCAtMTI0LDY0ICsxMjMs
MjMwIEBACiAgKi8KIHVfaW50IGNhbGx3aGVlbHNpemUsIGNhbGx3aGVlbG1hc2s7CiAKKyNkZWZp
bmUJQ0FMTE9VVF9SRVRfTk9STUFMCTAKKyNkZWZpbmUJQ0FMTE9VVF9SRVRfQ0FOQ0VMTEVECTEK
KyNkZWZpbmUJQ0FMTE9VVF9SRVRfRFJBSU5JTkcJMgorCitzdHJ1Y3QgY2FsbG91dF9hcmdzIHsK
KwlzYmludGltZV90IHRpbWU7CQkvKiBhYnNvbHV0ZSB0aW1lIGZvciB0aGUgZXZlbnQgKi8KKwlz
YmludGltZV90IHByZWNpc2lvbjsJCS8qIGRlbHRhIGFsbG93ZWQgd3J0IG9wdCAqLworCXZvaWQJ
KmFyZzsJCQkvKiBmdW5jdGlvbiBhcmd1bWVudCAqLworCWNhbGxvdXRfZnVuY190ICpmdW5jOwkJ
LyogZnVuY3Rpb24gdG8gY2FsbCAqLworCWludAlmbGFnczsJCQkvKiBmbGFncyBwYXNzZWQgdG8g
Y2FsbG91dF9yZXNldCgpICovCisJaW50CWNwdTsJCQkvKiBDUFUgd2UncmUgc2NoZWR1bGVkIG9u
ICovCit9OworCit0eXBlZGVmIHZvaWQgY2FsbG91dF9tdXRleF9vcF90KHN0cnVjdCBsb2NrX29i
amVjdCAqKTsKKworc3RydWN0IGNhbGxvdXRfbXV0ZXhfb3BzIHsKKwljYWxsb3V0X211dGV4X29w
X3QgKmxvY2s7CisJY2FsbG91dF9tdXRleF9vcF90ICp1bmxvY2s7Cit9OworCitlbnVtIHsKKwlD
QUxMT1VUX0xDX1VOVVNFRF8wLAorCUNBTExPVVRfTENfVU5VU0VEXzEsCisJQ0FMTE9VVF9MQ19V
TlVTRURfMiwKKwlDQUxMT1VUX0xDX1VOVVNFRF8zLAorCUNBTExPVVRfTENfU1BJTiwKKwlDQUxM
T1VUX0xDX01VVEVYLAorCUNBTExPVVRfTENfUlcsCisJQ0FMTE9VVF9MQ19STSwKK307CisKK3N0
YXRpYyB2b2lkCitjYWxsb3V0X211dGV4X29wX25vbmUoc3RydWN0IGxvY2tfb2JqZWN0ICpsb2Nr
KQoreworfQorCitzdGF0aWMgdm9pZAorY2FsbG91dF9tdXRleF9sb2NrKHN0cnVjdCBsb2NrX29i
amVjdCAqbG9jaykKK3sKKworCW10eF9sb2NrKChzdHJ1Y3QgbXR4ICopbG9jayk7Cit9CisKK3N0
YXRpYyB2b2lkCitjYWxsb3V0X211dGV4X3VubG9jayhzdHJ1Y3QgbG9ja19vYmplY3QgKmxvY2sp
Cit7CisKKwltdHhfdW5sb2NrKChzdHJ1Y3QgbXR4ICopbG9jayk7Cit9CisKK3N0YXRpYyB2b2lk
CitjYWxsb3V0X211dGV4X2xvY2tfc3BpbihzdHJ1Y3QgbG9ja19vYmplY3QgKmxvY2spCit7CisK
KwltdHhfbG9ja19zcGluKChzdHJ1Y3QgbXR4ICopbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitj
YWxsb3V0X211dGV4X3VubG9ja19zcGluKHN0cnVjdCBsb2NrX29iamVjdCAqbG9jaykKK3sKKwor
CW10eF91bmxvY2tfc3Bpbigoc3RydWN0IG10eCAqKWxvY2spOworfQorCitzdGF0aWMgdm9pZAor
Y2FsbG91dF9ybV93bG9jayhzdHJ1Y3QgbG9ja19vYmplY3QgKmxvY2spCit7CisKKwlybV93bG9j
aygoc3RydWN0IHJtbG9jayAqKWxvY2spOworfQorCitzdGF0aWMgdm9pZAorY2FsbG91dF9ybV93
dW5sb2NrKHN0cnVjdCBsb2NrX29iamVjdCAqbG9jaykKK3sKKworCXJtX3d1bmxvY2soKHN0cnVj
dCBybWxvY2sgKilsb2NrKTsKK30KKworc3RhdGljIHZvaWQKK2NhbGxvdXRfcndfd2xvY2soc3Ry
dWN0IGxvY2tfb2JqZWN0ICpsb2NrKQoreworCisJcndfd2xvY2soKHN0cnVjdCByd2xvY2sgKils
b2NrKTsKK30KKworc3RhdGljIHZvaWQKK2NhbGxvdXRfcndfd3VubG9jayhzdHJ1Y3QgbG9ja19v
YmplY3QgKmxvY2spCit7CisKKwlyd193dW5sb2NrKChzdHJ1Y3Qgcndsb2NrICopbG9jayk7Cit9
CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2FsbG91dF9tdXRleF9vcHMgY2FsbG91dF9tdXRleF9v
cHNbOF0gPSB7CisJW0NBTExPVVRfTENfVU5VU0VEXzBdID0geworCQkubG9jayA9IGNhbGxvdXRf
bXV0ZXhfb3Bfbm9uZSwKKwkJLnVubG9jayA9IGNhbGxvdXRfbXV0ZXhfb3Bfbm9uZSwKKwl9LAor
CVtDQUxMT1VUX0xDX1VOVVNFRF8xXSA9IHsKKwkJLmxvY2sgPSBjYWxsb3V0X211dGV4X29wX25v
bmUsCisJCS51bmxvY2sgPSBjYWxsb3V0X211dGV4X29wX25vbmUsCisJfSwKKwlbQ0FMTE9VVF9M
Q19VTlVTRURfMl0gPSB7CisJCS5sb2NrID0gY2FsbG91dF9tdXRleF9vcF9ub25lLAorCQkudW5s
b2NrID0gY2FsbG91dF9tdXRleF9vcF9ub25lLAorCX0sCisJW0NBTExPVVRfTENfVU5VU0VEXzNd
ID0geworCQkubG9jayA9IGNhbGxvdXRfbXV0ZXhfb3Bfbm9uZSwKKwkJLnVubG9jayA9IGNhbGxv
dXRfbXV0ZXhfb3Bfbm9uZSwKKwl9LAorCVtDQUxMT1VUX0xDX1NQSU5dID0geworCQkubG9jayA9
IGNhbGxvdXRfbXV0ZXhfbG9ja19zcGluLAorCQkudW5sb2NrID0gY2FsbG91dF9tdXRleF91bmxv
Y2tfc3BpbiwKKwl9LAorCVtDQUxMT1VUX0xDX01VVEVYXSA9IHsKKwkJLmxvY2sgPSBjYWxsb3V0
X211dGV4X2xvY2ssCisJCS51bmxvY2sgPSBjYWxsb3V0X211dGV4X3VubG9jaywKKwl9LAorCVtD
QUxMT1VUX0xDX1JXXSA9IHsKKwkJLmxvY2sgPSBjYWxsb3V0X3J3X3dsb2NrLAorCQkudW5sb2Nr
ID0gY2FsbG91dF9yd193dW5sb2NrLAorCX0sCisJW0NBTExPVVRfTENfUk1dID0geworCQkubG9j
ayA9IGNhbGxvdXRfcm1fd2xvY2ssCisJCS51bmxvY2sgPSBjYWxsb3V0X3JtX3d1bmxvY2ssCisJ
fSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2FsbG91dF9sb2NrX2NsaWVudChpbnQgY19m
bGFncywgc3RydWN0IGxvY2tfb2JqZWN0ICpjX2xvY2spCit7CisKKwljYWxsb3V0X211dGV4X29w
c1tDQUxMT1VUX0dFVF9MQyhjX2ZsYWdzKV0ubG9jayhjX2xvY2spOworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQKK2NhbGxvdXRfdW5sb2NrX2NsaWVudChpbnQgY19mbGFncywgc3RydWN0IGxvY2tf
b2JqZWN0ICpjX2xvY2spCit7CisKKwljYWxsb3V0X211dGV4X29wc1tDQUxMT1VUX0dFVF9MQyhj
X2ZsYWdzKV0udW5sb2NrKGNfbG9jayk7Cit9CisKIC8qCi0gKiBUaGUgY2FsbG91dCBjcHUgZXhl
YyBlbnRpdGllcyByZXByZXNlbnQgaW5mb3JtYXRpb25zIG5lY2Vzc2FyeSBmb3IKLSAqIGRlc2Ny
aWJpbmcgdGhlIHN0YXRlIG9mIGNhbGxvdXRzIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSBDUFUg
YW5kIHRoZSBvbmVzCi0gKiBuZWNlc3NhcnkgZm9yIG1pZ3JhdGluZyBjYWxsb3V0cyB0byB0aGUg
bmV3IGNhbGxvdXQgY3B1LiBJbiBwYXJ0aWN1bGFyLAotICogdGhlIGZpcnN0IGVudHJ5IG9mIHRo
ZSBhcnJheSBjY19leGVjX2VudGl0eSBob2xkcyBpbmZvcm1hdGlvbnMgZm9yIGNhbGxvdXQKLSAq
IHJ1bm5pbmcgaW4gU1dJIHRocmVhZCBjb250ZXh0LCB3aGlsZSB0aGUgc2Vjb25kIG9uZSBob2xk
cyBpbmZvcm1hdGlvbnMKLSAqIGZvciBjYWxsb3V0IHJ1bm5pbmcgZGlyZWN0bHkgZnJvbSBoYXJk
d2FyZSBpbnRlcnJ1cHQgY29udGV4dC4KLSAqIFRoZSBjYWNoZWQgaW5mb3JtYXRpb25zIGFyZSB2
ZXJ5IGltcG9ydGFudCBmb3IgZGVmZXJyaW5nIG1pZ3JhdGlvbiB3aGVuCi0gKiB0aGUgbWlncmF0
aW5nIGNhbGxvdXQgaXMgYWxyZWFkeSBydW5uaW5nLgorICogVGhlIGNhbGxvdXQgQ1BVIGV4ZWMg
c3RydWN0dXJlIHJlcHJlc2VudCBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yCisgKiBkZXNjcmli
aW5nIHRoZSBzdGF0ZSBvZiBjYWxsb3V0cyBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgQ1BVIGFu
ZAorICogZm9yIGhhbmRsaW5nIGRlZmVycmVkIGNhbGxvdXQgcmVzdGFydHMuCisgKgorICogSW4g
cGFydGljdWxhciwgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheSBjY19leGVjX2VudGl0eSBo
b2xkcworICogaW5mb3JtYXRpb24gZm9yIGNhbGxvdXRzIHJ1bm5pbmcgZnJvbSB0aGUgU1dJIHRo
cmVhZCBjb250ZXh0LCB3aGlsZQorICogdGhlIHNlY29uZCBvbmUgaG9sZHMgaW5mb3JtYXRpb24g
Zm9yIGNhbGxvdXRzIHJ1bm5pbmcgZGlyZWN0bHkgZnJvbQorICogdGhlIGhhcmR3YXJlIGludGVy
cnVwdCBjb250ZXh0LgogICovCiBzdHJ1Y3QgY2NfZXhlYyB7CisJLyoKKwkgKiBUaGUgImNjX2N1
cnIiIHBvaW50cyB0byB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjYWxsb3V0IGFuZAorCSAqIGlz
IHByb3RlY3RlZCBieSB0aGUgImNjX2xvY2siIHNwaW5sb2NrLiBJZiBubyBjYWxsYmFjayBpcwor
CSAqIGN1cnJlbnRseSBleGVjdXRpbmcgaXQgaXMgZXF1YWwgdG8gIk5VTEwiLgorCSAqLwogCXN0
cnVjdCBjYWxsb3V0CQkqY2NfY3VycjsKLSNpZmRlZiBTTVAKLQl2b2lkCQkJKCpjZV9taWdyYXRp
b25fZnVuYykodm9pZCAqKTsKLQl2b2lkCQkJKmNlX21pZ3JhdGlvbl9hcmc7Ci0JaW50CQkJY2Vf
bWlncmF0aW9uX2NwdTsKLQlzYmludGltZV90CQljZV9taWdyYXRpb25fdGltZTsKLQlzYmludGlt
ZV90CQljZV9taWdyYXRpb25fcHJlYzsKKwkvKgorCSAqIFRoZSAiY2NfcmVzdGFydF9hcmdzIiBz
dHJ1Y3R1cmUgaG9sZHMgdGhlIGFyZ3VtZW50IGZvciBhCisJICogZGVmZXJyZWQgY2FsbGJhY2sg
cmVzdGFydCBhbmQgaXMgcHJvdGVjdGVkIGJ5IHRoZSAiY2NfbG9jayIKKwkgKiBzcGlubG9jay4g
VGhlIHN0cnVjdHVyZSBpcyBvbmx5IHZhbGlkIGlmICJjY19yZXN0YXJ0IiBpcworCSAqICJ0cnVl
Ii4gSWYgImNjX3Jlc3RhcnQiIGlzICJmYWxzZSIgdGhlIGluZm9ybWF0aW9uIGluIHRoZQorCSAq
ICJjY19yZXN0YXJ0X2FyZ3MiIHN0cnVjdHVyZSBzaGFsbCBiZSBpZ25vcmVkLgorCSAqLworCXN0
cnVjdCBjYWxsb3V0X2FyZ3MJY2NfcmVzdGFydF9hcmdzOworCWJvb2wJCQljY19yZXN0YXJ0Owor
CS8qCisJICogVGhlICJjY19jYW5jZWwiIHZhcmlhYmxlIGFsbG93cyB0aGUgY3VycmVudGx5IHBl
bmRpbmcKKwkgKiBjYWxsYmFjayB0byBiZSBhdG9taWNhbGx5IGNhbmNlbGxlZC4gVGhpcyBmaWVs
ZCBpcyB3cml0ZQorCSAqIHByb3RlY3RlZCBieSB0aGUgImNjX2xvY2siIHNwaW5sb2NrLgorCSAq
LworCWJvb2wgY2NfY2FuY2VsOworCS8qCisJICogVGhlICJjY19kcmFpbl9mbiIgcG9pbnRzIHRv
IGEgZnVuY3Rpb24gd2hpY2ggc2hhbGwgYmUKKwkgKiBjYWxsZWQgd2l0aCB0aGUgYXJndW1lbnQg
c3RvcmVkIGluICJjY19kcmFpbl9hcmciIHdoZW4gYW4KKwkgKiBhc3luY2hyb25vdXMgZHJhaW4g
aXMgcGVyZm9ybWVkLiBUaGlzIGZpZWxkIGlzIHdyaXRlCisJICogcHJvdGVjdGVkIGJ5IHRoZSAi
Y2NfbG9jayIgc3BpbmxvY2suCisJICovCisJY2FsbG91dF9mdW5jX3QgKmNjX2RyYWluX2ZuOwor
CXZvaWQgKmNjX2RyYWluX2FyZzsKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSB1
c2VkIGZvciBjYWxsb3V0IHByb2ZpbGluZyBvbmx5OgorCSAqLworI2lmZGVmIENBTExPVVRfUFJP
RklMSU5HCisJaW50IGNjX2RlcHRoOworCWludCBjY19tcGNhbGxzOworCWludCBjY19sb2NrY2Fs
bHM7CisJaW50IGNjX2djYWxsczsKICNlbmRpZgotCWJvb2wJCQljY19jYW5jZWw7Ci0JYm9vbAkJ
CWNjX3dhaXRpbmc7CiB9OwogCiAvKgotICogVGhlcmUgaXMgb25lIHN0cnVjdCBjYWxsb3V0X2Nw
dSBwZXIgY3B1LCBob2xkaW5nIGFsbCByZWxldmFudAorICogVGhlcmUgaXMgb25lICJzdHJ1Y3Qg
Y2FsbG91dF9jcHUiIHBlciBDUFUsIGhvbGRpbmcgYWxsIHJlbGV2YW50CiAgKiBzdGF0ZSBmb3Ig
dGhlIGNhbGxvdXQgcHJvY2Vzc2luZyB0aHJlYWQgb24gdGhlIGluZGl2aWR1YWwgQ1BVLgogICov
CiBzdHJ1Y3QgY2FsbG91dF9jcHUgewogCXN0cnVjdCBtdHhfcGFkYWxpZ24JY2NfbG9jazsKIAlz
dHJ1Y3QgY2NfZXhlYyAJCWNjX2V4ZWNfZW50aXR5WzJdOwotCXN0cnVjdCBjYWxsb3V0CQkqY2Nf
bmV4dDsKIAlzdHJ1Y3QgY2FsbG91dAkJKmNjX2NhbGxvdXQ7CiAJc3RydWN0IGNhbGxvdXRfbGlz
dAkqY2NfY2FsbHdoZWVsOworCXN0cnVjdCBjYWxsb3V0X2xpc3QJY2NfdG1wbGlzdDsKIAlzdHJ1
Y3QgY2FsbG91dF90YWlscQljY19leHBpcmVxOwogCXN0cnVjdCBjYWxsb3V0X3NsaXN0CWNjX2Nh
bGxmcmVlOwogCXNiaW50aW1lX3QJCWNjX2ZpcnN0ZXZlbnQ7CiAJc2JpbnRpbWVfdAkJY2NfbGFz
dHNjYW47CiAJdm9pZAkJCSpjY19jb29raWU7Ci0JdV9pbnQJCQljY19idWNrZXQ7Ci0JdV9pbnQJ
CQljY19pbml0ZWQ7CiAJY2hhcgkJCWNjX2t0cl9ldmVudF9uYW1lWzIwXTsKIH07CiAKLSNkZWZp
bmUJY2FsbG91dF9taWdyYXRpbmcoYykJKChjKS0+Y19pZmxhZ3MgJiBDQUxMT1VUX0RGUk1JR1JB
VElPTikKKyNkZWZpbmUJY2NfZXhlY19jdXJyKGNjLCBkaXIpCQkoY2MpLT5jY19leGVjX2VudGl0
eVsoZGlyKV0uY2NfY3VycgorI2RlZmluZQljY19leGVjX3Jlc3RhcnRfYXJncyhjYywgZGlyKQko
Y2MpLT5jY19leGVjX2VudGl0eVsoZGlyKV0uY2NfcmVzdGFydF9hcmdzCisjZGVmaW5lCWNjX2V4
ZWNfcmVzdGFydChjYywgZGlyKQkoY2MpLT5jY19leGVjX2VudGl0eVsoZGlyKV0uY2NfcmVzdGFy
dAorI2RlZmluZQljY19leGVjX2NhbmNlbChjYywgZGlyKQkJKGNjKS0+Y2NfZXhlY19lbnRpdHlb
KGRpcildLmNjX2NhbmNlbAorI2RlZmluZQljY19leGVjX2RyYWluX2ZuKGNjLCBkaXIpCShjYykt
PmNjX2V4ZWNfZW50aXR5WyhkaXIpXS5jY19kcmFpbl9mbgorI2RlZmluZQljY19leGVjX2RyYWlu
X2FyZyhjYywgZGlyKQkoY2MpLT5jY19leGVjX2VudGl0eVsoZGlyKV0uY2NfZHJhaW5fYXJnCisj
ZGVmaW5lCWNjX2V4ZWNfZGVwdGgoY2MsIGRpcikJCShjYyktPmNjX2V4ZWNfZW50aXR5WyhkaXIp
XS5jY19kZXB0aAorI2RlZmluZQljY19leGVjX21wY2FsbHMoY2MsIGRpcikJKGNjKS0+Y2NfZXhl
Y19lbnRpdHlbKGRpcildLmNjX21wY2FsbHMKKyNkZWZpbmUJY2NfZXhlY19sb2NrY2FsbHMoY2Ms
IGRpcikJKGNjKS0+Y2NfZXhlY19lbnRpdHlbKGRpcildLmNjX2xvY2tjYWxscworI2RlZmluZQlj
Y19leGVjX2djYWxscyhjYywgZGlyKQkJKGNjKS0+Y2NfZXhlY19lbnRpdHlbKGRpcildLmNjX2dj
YWxscwogCi0jZGVmaW5lCWNjX2V4ZWNfY3VycihjYywgZGlyKQkJY2MtPmNjX2V4ZWNfZW50aXR5
W2Rpcl0uY2NfY3VycgotI2RlZmluZQljY19leGVjX25leHQoY2MpCQljYy0+Y2NfbmV4dAotI2Rl
ZmluZQljY19leGVjX2NhbmNlbChjYywgZGlyKQkJY2MtPmNjX2V4ZWNfZW50aXR5W2Rpcl0uY2Nf
Y2FuY2VsCi0jZGVmaW5lCWNjX2V4ZWNfd2FpdGluZyhjYywgZGlyKQljYy0+Y2NfZXhlY19lbnRp
dHlbZGlyXS5jY193YWl0aW5nCiAjaWZkZWYgU01QCi0jZGVmaW5lCWNjX21pZ3JhdGlvbl9mdW5j
KGNjLCBkaXIpCWNjLT5jY19leGVjX2VudGl0eVtkaXJdLmNlX21pZ3JhdGlvbl9mdW5jCi0jZGVm
aW5lCWNjX21pZ3JhdGlvbl9hcmcoY2MsIGRpcikJY2MtPmNjX2V4ZWNfZW50aXR5W2Rpcl0uY2Vf
bWlncmF0aW9uX2FyZwotI2RlZmluZQljY19taWdyYXRpb25fY3B1KGNjLCBkaXIpCWNjLT5jY19l
eGVjX2VudGl0eVtkaXJdLmNlX21pZ3JhdGlvbl9jcHUKLSNkZWZpbmUJY2NfbWlncmF0aW9uX3Rp
bWUoY2MsIGRpcikJY2MtPmNjX2V4ZWNfZW50aXR5W2Rpcl0uY2VfbWlncmF0aW9uX3RpbWUKLSNk
ZWZpbmUJY2NfbWlncmF0aW9uX3ByZWMoY2MsIGRpcikJY2MtPmNjX2V4ZWNfZW50aXR5W2Rpcl0u
Y2VfbWlncmF0aW9uX3ByZWMKLQogc3RydWN0IGNhbGxvdXRfY3B1IGNjX2NwdVtNQVhDUFVdOwot
I2RlZmluZQlDUFVCTE9DSwlNQVhDUFUKKyNkZWZpbmUJQ1BVQkxPQ0sJLTEKICNkZWZpbmUJQ0Nf
Q1BVKGNwdSkJKCZjY19jcHVbKGNwdSldKQogI2RlZmluZQlDQ19TRUxGKCkJQ0NfQ1BVKFBDUFVf
R0VUKGNwdWlkKSkKICNlbHNlCkBAIC0xOTYsNjcgKzM2MSwxMyBAQAogc3RhdGljIGludCB0aW1l
b3V0X2NwdTsKIAogc3RhdGljIHZvaWQJY2FsbG91dF9jcHVfaW5pdChzdHJ1Y3QgY2FsbG91dF9j
cHUgKmNjLCBpbnQgY3B1KTsKLXN0YXRpYyB2b2lkCXNvZnRjbG9ja19jYWxsX2NjKHN0cnVjdCBj
YWxsb3V0ICpjLCBzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjLAotI2lmZGVmIENBTExPVVRfUFJPRklM
SU5HCi0JCSAgICBpbnQgKm1wY2FsbHMsIGludCAqbG9ja2NhbGxzLCBpbnQgKmdjYWxscywKLSNl
bmRpZgotCQkgICAgaW50IGRpcmVjdCk7CitzdGF0aWMgdm9pZAlzb2Z0Y2xvY2tfY2FsbF9jYyhz
dHJ1Y3QgY2FsbG91dCAqYywgc3RydWN0IGNhbGxvdXRfY3B1ICpjYywgY29uc3QgaW50IGRpcmVj
dCk7CiAKIHN0YXRpYyBNQUxMT0NfREVGSU5FKE1fQ0FMTE9VVCwgImNhbGxvdXQiLCAiQ2FsbG91
dCBkYXRhc3RydWN0dXJlcyIpOwogCi0vKioKLSAqIExvY2tlZCBieSBjY19sb2NrOgotICogICBj
Y19jdXJyICAgICAgICAgLSBJZiBhIGNhbGxvdXQgaXMgaW4gcHJvZ3Jlc3MsIGl0IGlzIGNjX2N1
cnIuCi0gKiAgICAgICAgICAgICAgICAgICAgIElmIGNjX2N1cnIgaXMgbm9uLU5VTEwsIHRocmVh
ZHMgd2FpdGluZyBpbgotICogICAgICAgICAgICAgICAgICAgICBjYWxsb3V0X2RyYWluKCkgd2ls
bCBiZSB3b2tlbiB1cCBhcyBzb29uIGFzIHRoZQotICogICAgICAgICAgICAgICAgICAgICByZWxl
dmFudCBjYWxsb3V0IGNvbXBsZXRlcy4KLSAqICAgY2NfY2FuY2VsICAgICAgIC0gQ2hhbmdpbmcg
dG8gMSB3aXRoIGJvdGggY2FsbG91dF9sb2NrIGFuZCBjY19sb2NrIGhlbGQKLSAqICAgICAgICAg
ICAgICAgICAgICAgZ3VhcmFudGVlcyB0aGF0IHRoZSBjdXJyZW50IGNhbGxvdXQgd2lsbCBub3Qg
cnVuLgotICogICAgICAgICAgICAgICAgICAgICBUaGUgc29mdGNsb2NrKCkgZnVuY3Rpb24gc2V0
cyB0aGlzIHRvIDAgYmVmb3JlIGl0Ci0gKiAgICAgICAgICAgICAgICAgICAgIGRyb3BzIGNhbGxv
dXRfbG9jayB0byBhY3F1aXJlIGNfbG9jaywgYW5kIGl0IGNhbGxzCi0gKiAgICAgICAgICAgICAg
ICAgICAgIHRoZSBoYW5kbGVyIG9ubHkgaWYgY3Vycl9jYW5jZWxsZWQgaXMgc3RpbGwgMCBhZnRl
cgotICogICAgICAgICAgICAgICAgICAgICBjY19sb2NrIGlzIHN1Y2Nlc3NmdWxseSBhY3F1aXJl
ZC4KLSAqICAgY2Nfd2FpdGluZyAgICAgIC0gSWYgYSB0aHJlYWQgaXMgd2FpdGluZyBpbiBjYWxs
b3V0X2RyYWluKCksIHRoZW4KLSAqICAgICAgICAgICAgICAgICAgICAgY2FsbG91dF93YWl0IGlz
IG5vbnplcm8uICBTZXQgb25seSB3aGVuCi0gKiAgICAgICAgICAgICAgICAgICAgIGNjX2N1cnIg
aXMgbm9uLU5VTEwuCi0gKi8KLQotLyoKLSAqIFJlc2V0cyB0aGUgZXhlY3V0aW9uIGVudGl0eSB0
aWVkIHRvIGEgc3BlY2lmaWMgY2FsbG91dCBjcHUuCi0gKi8KLXN0YXRpYyB2b2lkCi1jY19jY2Vf
Y2xlYW51cChzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjLCBpbnQgZGlyZWN0KQotewotCi0JY2NfZXhl
Y19jdXJyKGNjLCBkaXJlY3QpID0gTlVMTDsKLQljY19leGVjX2NhbmNlbChjYywgZGlyZWN0KSA9
IGZhbHNlOwotCWNjX2V4ZWNfd2FpdGluZyhjYywgZGlyZWN0KSA9IGZhbHNlOwotI2lmZGVmIFNN
UAotCWNjX21pZ3JhdGlvbl9jcHUoY2MsIGRpcmVjdCkgPSBDUFVCTE9DSzsKLQljY19taWdyYXRp
b25fdGltZShjYywgZGlyZWN0KSA9IDA7Ci0JY2NfbWlncmF0aW9uX3ByZWMoY2MsIGRpcmVjdCkg
PSAwOwotCWNjX21pZ3JhdGlvbl9mdW5jKGNjLCBkaXJlY3QpID0gTlVMTDsKLQljY19taWdyYXRp
b25fYXJnKGNjLCBkaXJlY3QpID0gTlVMTDsKLSNlbmRpZgotfQotCi0vKgotICogQ2hlY2tzIGlm
IG1pZ3JhdGlvbiBpcyByZXF1ZXN0ZWQgYnkgYSBzcGVjaWZpYyBjYWxsb3V0IGNwdS4KLSAqLwot
c3RhdGljIGludAotY2NfY2NlX21pZ3JhdGluZyhzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjLCBpbnQg
ZGlyZWN0KQotewotCi0jaWZkZWYgU01QCi0JcmV0dXJuIChjY19taWdyYXRpb25fY3B1KGNjLCBk
aXJlY3QpICE9IENQVUJMT0NLKTsKLSNlbHNlCi0JcmV0dXJuICgwKTsKLSNlbmRpZgotfQotCiAv
KgotICogS2VybmVsIGxvdyBsZXZlbCBjYWxsd2hlZWwgaW5pdGlhbGl6YXRpb24KLSAqIGNhbGxl
ZCBvbiBjcHUwIGR1cmluZyBrZXJuZWwgc3RhcnR1cC4KKyAqIEtlcm5lbCBsb3cgbGV2ZWwgY2Fs
bHdoZWVsIGluaXRpYWxpemF0aW9uIGNhbGxlZCBmcm9tIGNwdTAgZHVyaW5nCisgKiBrZXJuZWwg
c3RhcnR1cDoKICAqLwogc3RhdGljIHZvaWQKIGNhbGxvdXRfY2FsbHdoZWVsX2luaXQodm9pZCAq
ZHVtbXkpCkBAIC0zMTEsNTQgKzQyMiw1MiBAQAogCiAJbXR4X2luaXQoJmNjLT5jY19sb2NrLCAi
Y2FsbG91dCIsIE5VTEwsIE1UWF9TUElOIHwgTVRYX1JFQ1VSU0UpOwogCVNMSVNUX0lOSVQoJmNj
LT5jY19jYWxsZnJlZSk7Ci0JY2MtPmNjX2luaXRlZCA9IDE7CiAJY2MtPmNjX2NhbGx3aGVlbCA9
IG1hbGxvYyhzaXplb2Yoc3RydWN0IGNhbGxvdXRfbGlzdCkgKiBjYWxsd2hlZWxzaXplLAogCSAg
ICBNX0NBTExPVVQsIE1fV0FJVE9LKTsKIAlmb3IgKGkgPSAwOyBpIDwgY2FsbHdoZWVsc2l6ZTsg
aSsrKQogCQlMSVNUX0lOSVQoJmNjLT5jY19jYWxsd2hlZWxbaV0pOwogCVRBSUxRX0lOSVQoJmNj
LT5jY19leHBpcmVxKTsKKwlMSVNUX0lOSVQoJmNjLT5jY190bXBsaXN0KTsKIAljYy0+Y2NfZmly
c3RldmVudCA9IFNCVF9NQVg7Ci0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykKLQkJY2NfY2NlX2Ns
ZWFudXAoY2MsIGkpOwogCXNucHJpbnRmKGNjLT5jY19rdHJfZXZlbnRfbmFtZSwgc2l6ZW9mKGNj
LT5jY19rdHJfZXZlbnRfbmFtZSksCiAJICAgICJjYWxsd2hlZWwgY3B1ICVkIiwgY3B1KTsKIAlp
ZiAoY2MtPmNjX2NhbGxvdXQgPT0gTlVMTCkJLyogT25seSBjcHUwIGhhbmRsZXMgdGltZW91dCg5
KSAqLwogCQlyZXR1cm47CiAJZm9yIChpID0gMDsgaSA8IG5jYWxsb3V0OyBpKyspIHsKIAkJYyA9
ICZjYy0+Y2NfY2FsbG91dFtpXTsKIAkJY2FsbG91dF9pbml0KGMsIDApOwotCQljLT5jX2lmbGFn
cyA9IENBTExPVVRfTE9DQUxfQUxMT0M7CisJCWMtPmNfZmxhZ3MgfD0gQ0FMTE9VVF9MT0NBTF9B
TExPQzsKIAkJU0xJU1RfSU5TRVJUX0hFQUQoJmNjLT5jY19jYWxsZnJlZSwgYywgY19saW5rcy5z
bGUpOwogCX0KIH0KIAotI2lmZGVmIFNNUAotLyoKLSAqIFN3aXRjaGVzIHRoZSBjcHUgdGllZCB0
byBhIHNwZWNpZmljIGNhbGxvdXQuCi0gKiBUaGUgZnVuY3Rpb24gZXhwZWN0cyBhIGxvY2tlZCBp
bmNvbWluZyBjYWxsb3V0IGNwdSBhbmQgcmV0dXJucyB3aXRoCi0gKiBsb2NrZWQgb3V0Y29taW5n
IGNhbGxvdXQgY3B1LgotICovCi1zdGF0aWMgc3RydWN0IGNhbGxvdXRfY3B1ICoKLWNhbGxvdXRf
Y3B1X3N3aXRjaChzdHJ1Y3QgY2FsbG91dCAqYywgc3RydWN0IGNhbGxvdXRfY3B1ICpjYywgaW50
IG5ld19jcHUpCisjaWZkZWYgQ0FMTE9VVF9QUk9GSUxJTkcKK3N0YXRpYyBpbmxpbmUgdm9pZAor
Y2FsbG91dF9jbGVhcl9zdGF0cyhzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjLCBjb25zdCBpbnQgZGly
ZWN0KQogewotCXN0cnVjdCBjYWxsb3V0X2NwdSAqbmV3X2NjOwotCi0JTVBBU1MoYyAhPSBOVUxM
ICYmIGNjICE9IE5VTEwpOwotCUNDX0xPQ0tfQVNTRVJUKGNjKTsKKwljY19leGVjX2RlcHRoKGNj
LCBkaXJlY3QpID0gMDsKKwljY19leGVjX21wY2FsbHMoY2MsIGRpcmVjdCkgPSAwOworCWNjX2V4
ZWNfbG9ja2NhbGxzKGNjLCBkaXJlY3QpID0gMDsKKwljY19leGVjX2djYWxscyhjYywgZGlyZWN0
KSA9IDA7Cit9CisjZW5kaWYKIAotCS8qCi0JICogQXZvaWQgaW50ZXJydXB0cyBhbmQgcHJlZW1w
dGlvbiBmaXJpbmcgYWZ0ZXIgdGhlIGNhbGxvdXQgY3B1Ci0JICogaXMgYmxvY2tlZCBpbiBvcmRl
ciB0byBhdm9pZCBkZWFkbG9ja3MgYXMgdGhlIG5ldyB0aHJlYWQKLQkgKiBtYXkgYmUgd2lsbGlu
ZyB0byBhY3F1aXJlIHRoZSBjYWxsb3V0IGNwdSBsb2NrLgotCSAqLwotCWMtPmNfY3B1ID0gQ1BV
QkxPQ0s7Ci0Jc3BpbmxvY2tfZW50ZXIoKTsKLQlDQ19VTkxPQ0soY2MpOwotCW5ld19jYyA9IEND
X0NQVShuZXdfY3B1KTsKLQlDQ19MT0NLKG5ld19jYyk7Ci0Jc3BpbmxvY2tfZXhpdCgpOwotCWMt
PmNfY3B1ID0gbmV3X2NwdTsKLQlyZXR1cm4gKG5ld19jYyk7CisjaWZkZWYgQ0FMTE9VVF9QUk9G
SUxJTkcKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2FsbG91dF91cGRhdGVfc3RhdHMoc3RydWN0IGNh
bGxvdXRfY3B1ICpjYywgY29uc3QgaW50IGRpcmVjdCkKK3sKKwlhdmdfZGVwdGhbZGlyZWN0XSAr
PQorCSAgICAoY2NfZXhlY19kZXB0aChjYywgZGlyZWN0KSAqIDEwMDAgLQorCSAgICBhdmdfZGVw
dGhbZGlyZWN0XSkgPj4gODsKKwlhdmdfbXBjYWxsc1tkaXJlY3RdICs9CisJICAgIChjY19leGVj
X21wY2FsbHMoY2MsIGRpcmVjdCkgKiAxMDAwIC0KKwkgICAgYXZnX21wY2FsbHNbZGlyZWN0XSkg
Pj4gODsKKwlhdmdfbG9ja2NhbGxzW2RpcmVjdF0gKz0KKwkgICAgKGNjX2V4ZWNfbG9ja2NhbGxz
KGNjLCBkaXJlY3QpICogMTAwMCAtCisJICAgIGF2Z19sb2NrY2FsbHNbZGlyZWN0XSkgPj4gODsK
KwlhdmdfZ2NhbGxzW2RpcmVjdF0gKz0KKwkgICAgKGNjX2V4ZWNfZ2NhbGxzKGNjLCBkaXJlY3Qp
ICogMTAwMCAtCisJICAgIGF2Z19nY2FsbHNbZGlyZWN0XSkgPj4gODsKIH0KICNlbmRpZgogCkBA
IC00MjksMTkgKzUzOCwxOSBAQAogdm9pZAogY2FsbG91dF9wcm9jZXNzKHNiaW50aW1lX3Qgbm93
KQogewotCXN0cnVjdCBjYWxsb3V0ICp0bXAsICp0bXBuOworCXN0cnVjdCBjYWxsb3V0ICp0bXA7
CiAJc3RydWN0IGNhbGxvdXRfY3B1ICpjYzsKIAlzdHJ1Y3QgY2FsbG91dF9saXN0ICpzYzsKIAlz
YmludGltZV90IGZpcnN0LCBsYXN0LCBtYXgsIHRtcF9tYXg7CiAJdWludDMyX3QgbG9va2FoZWFk
OwogCXVfaW50IGZpcnN0YiwgbGFzdGIsIG5vd2I7Ci0jaWZkZWYgQ0FMTE9VVF9QUk9GSUxJTkcK
LQlpbnQgZGVwdGhfZGlyID0gMCwgbXBjYWxsc19kaXIgPSAwLCBsb2NrY2FsbHNfZGlyID0gMDsK
LSNlbmRpZgogCiAJY2MgPSBDQ19TRUxGKCk7Ci0JbXR4X2xvY2tfc3Bpbl9mbGFncygmY2MtPmNj
X2xvY2ssIE1UWF9RVUlFVCk7CisJQ0NfTE9DSyhjYyk7CiAKKyNpZmRlZiBDQUxMT1VUX1BST0ZJ
TElORworCWNhbGxvdXRfY2xlYXJfc3RhdHMoY2MsIDEpOworI2VuZGlmCiAJLyogQ29tcHV0ZSB0
aGUgYnVja2V0cyBvZiB0aGUgbGFzdCBzY2FuIGFuZCBwcmVzZW50IHRpbWVzLiAqLwogCWZpcnN0
YiA9IGNhbGxvdXRfaGFzaChjYy0+Y2NfbGFzdHNjYW4pOwogCWNjLT5jY19sYXN0c2NhbiA9IG5v
dzsKQEAgLTQ3NCw2MSArNTgzLDU5IEBACiAJLyogSXRlcmF0ZSBjYWxsd2hlZWwgZnJvbSBmaXJz
dGIgdG8gbm93YiBhbmQgdGhlbiB1cCB0byBsYXN0Yi4gKi8KIAlkbyB7CiAJCXNjID0gJmNjLT5j
Y19jYWxsd2hlZWxbZmlyc3RiICYgY2FsbHdoZWVsbWFza107Ci0JCXRtcCA9IExJU1RfRklSU1Qo
c2MpOwotCQl3aGlsZSAodG1wICE9IE5VTEwpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXRtcCA9IExJ
U1RfRklSU1Qoc2MpOworCQkJaWYgKHRtcCA9PSBOVUxMKQorCQkJCWJyZWFrOworCisJCQlMSVNU
X1JFTU9WRSh0bXAsIGNfbGlua3MubGUpOworCiAJCQkvKiBSdW4gdGhlIGNhbGxvdXQgaWYgcHJl
c2VudCB0aW1lIHdpdGhpbiBhbGxvd2VkLiAqLwogCQkJaWYgKHRtcC0+Y190aW1lIDw9IG5vdykg
ewogCQkJCS8qCi0JCQkJICogQ29uc3VtZXIgdG9sZCB1cyB0aGUgY2FsbG91dCBtYXkgYmUgcnVu
Ci0JCQkJICogZGlyZWN0bHkgZnJvbSBoYXJkd2FyZSBpbnRlcnJ1cHQgY29udGV4dC4KKwkJCQkg
KiBDb25zdW1lciB0b2xkIHVzIHRoZSBjYWxsb3V0IG1heSBiZQorCQkJCSAqIHJ1biBkaXJlY3Rs
eSBmcm9tIHRoZSBoYXJkd2FyZQorCQkJCSAqIGludGVycnVwdCBjb250ZXh0OgogCQkJCSAqLwot
CQkJCWlmICh0bXAtPmNfaWZsYWdzICYgQ0FMTE9VVF9ESVJFQ1QpIHsKLSNpZmRlZiBDQUxMT1VU
X1BST0ZJTElORwotCQkJCQkrK2RlcHRoX2RpcjsKLSNlbmRpZgotCQkJCQljY19leGVjX25leHQo
Y2MpID0KLQkJCQkJICAgIExJU1RfTkVYVCh0bXAsIGNfbGlua3MubGUpOwotCQkJCQljYy0+Y2Nf
YnVja2V0ID0gZmlyc3RiICYgY2FsbHdoZWVsbWFzazsKLQkJCQkJTElTVF9SRU1PVkUodG1wLCBj
X2xpbmtzLmxlKTsKLQkJCQkJc29mdGNsb2NrX2NhbGxfY2ModG1wLCBjYywKLSNpZmRlZiBDQUxM
T1VUX1BST0ZJTElORwotCQkJCQkgICAgJm1wY2FsbHNfZGlyLCAmbG9ja2NhbGxzX2RpciwgTlVM
TCwKLSNlbmRpZgotCQkJCQkgICAgMSk7Ci0JCQkJCXRtcCA9IGNjX2V4ZWNfbmV4dChjYyk7Ci0J
CQkJCWNjX2V4ZWNfbmV4dChjYykgPSBOVUxMOworCQkJCWlmICh0bXAtPmNfZmxhZ3MgJiBDQUxM
T1VUX0RJUkVDVCkgeworCQkJCQlzb2Z0Y2xvY2tfY2FsbF9jYyh0bXAsIGNjLCAxKTsKIAkJCQl9
IGVsc2UgewotCQkJCQl0bXBuID0gTElTVF9ORVhUKHRtcCwgY19saW5rcy5sZSk7Ci0JCQkJCUxJ
U1RfUkVNT1ZFKHRtcCwgY19saW5rcy5sZSk7CiAJCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZjYy0+
Y2NfZXhwaXJlcSwKIAkJCQkJICAgIHRtcCwgY19saW5rcy50cWUpOwotCQkJCQl0bXAtPmNfaWZs
YWdzIHw9IENBTExPVVRfUFJPQ0VTU0VEOwotCQkJCQl0bXAgPSB0bXBuOworCQkJCQl0bXAtPmNf
ZmxhZ3MgfD0gQ0FMTE9VVF9QUk9DRVNTRUQ7CiAJCQkJfQogCQkJCWNvbnRpbnVlOwogCQkJfQor
CisJCQkvKiBpbnNlcnQgY2FsbG91dCBpbnRvIHRlbXBvcmFyeSBsaXN0ICovCisJCQlMSVNUX0lO
U0VSVF9IRUFEKCZjYy0+Y2NfdG1wbGlzdCwgdG1wLCBjX2xpbmtzLmxlKTsKKwkJCQogCQkJLyog
U2tpcCBldmVudHMgZnJvbSBkaXN0YW50IGZ1dHVyZS4gKi8KIAkJCWlmICh0bXAtPmNfdGltZSA+
PSBtYXgpCi0JCQkJZ290byBuZXh0OworCQkJCWNvbnRpbnVlOworCiAJCQkvKgogCQkJICogRXZl
bnQgbWluaW1hbCB0aW1lIGlzIGJpZ2dlciB0aGFuIHByZXNlbnQgbWF4aW1hbAogCQkJICogdGlt
ZSwgc28gaXQgY2Fubm90IGJlIGFnZ3JlZ2F0ZWQuCiAJCQkgKi8KIAkJCWlmICh0bXAtPmNfdGlt
ZSA+IGxhc3QpIHsKIAkJCQlsYXN0YiA9IG5vd2I7Ci0JCQkJZ290byBuZXh0OworCQkJCWNvbnRp
bnVlOwogCQkJfQogCQkJLyogVXBkYXRlIGZpcnN0IGFuZCBsYXN0IHRpbWUsIHJlc3BlY3Rpbmcg
dGhpcyBldmVudC4gKi8KIAkJCWlmICh0bXAtPmNfdGltZSA8IGZpcnN0KQogCQkJCWZpcnN0ID0g
dG1wLT5jX3RpbWU7CiAJCQl0bXBfbWF4ID0gdG1wLT5jX3RpbWUgKyB0bXAtPmNfcHJlY2lzaW9u
OwogCQkJaWYgKHRtcF9tYXggPCBsYXN0KQogCQkJCWxhc3QgPSB0bXBfbWF4OwotbmV4dDoKLQkJ
CXRtcCA9IExJU1RfTkVYVCh0bXAsIGNfbGlua3MubGUpOwogCQl9CisKKwkJLyogUHV0IHRlbXBv
cmFyeSBsaXN0IGJhY2sgaW50byB0aGUgbWFpbiBidWNrZXQgKi8KKwkJTElTVF9TV0FQKHNjLCAm
Y2MtPmNjX3RtcGxpc3QsIGNhbGxvdXQsIGNfbGlua3MubGUpOworCQkKIAkJLyogUHJvY2VlZCB3
aXRoIHRoZSBuZXh0IGJ1Y2tldC4gKi8KIAkJZmlyc3RiKys7CisKIAkJLyoKIAkJICogU3RvcCBp
ZiB3ZSBsb29rZWQgYWZ0ZXIgcHJlc2VudCB0aW1lIGFuZCBmb3VuZAogCQkgKiBzb21lIGV2ZW50
IHdlIGNhbid0IGV4ZWN1dGUgYXQgbm93LgpAQCAtNTQwLDE0ICs2NDcsMTMgQEAKIAljcHVfbmV3
X2NhbGxvdXQoY3VyY3B1LCBsYXN0LCBmaXJzdCk7CiAjZW5kaWYKICNpZmRlZiBDQUxMT1VUX1BS
T0ZJTElORwotCWF2Z19kZXB0aF9kaXIgKz0gKGRlcHRoX2RpciAqIDEwMDAgLSBhdmdfZGVwdGhf
ZGlyKSA+PiA4OwotCWF2Z19tcGNhbGxzX2RpciArPSAobXBjYWxsc19kaXIgKiAxMDAwIC0gYXZn
X21wY2FsbHNfZGlyKSA+PiA4OwotCWF2Z19sb2NrY2FsbHNfZGlyICs9IChsb2NrY2FsbHNfZGly
ICogMTAwMCAtIGF2Z19sb2NrY2FsbHNfZGlyKSA+PiA4OworCWNhbGxvdXRfdXBkYXRlX3N0YXRz
KGNjLCAxKTsKICNlbmRpZgotCW10eF91bmxvY2tfc3Bpbl9mbGFncygmY2MtPmNjX2xvY2ssIE1U
WF9RVUlFVCk7CisJQ0NfVU5MT0NLKGNjKTsKIAkvKgotCSAqIHN3aV9zY2hlZCBhY3F1aXJlcyB0
aGUgdGhyZWFkIGxvY2ssIHNvIHdlIGRvbid0IHdhbnQgdG8gY2FsbCBpdAotCSAqIHdpdGggY2Nf
bG9jayBoZWxkOyBpbmNvcnJlY3QgbG9ja2luZyBvcmRlci4KKwkgKiAic3dpX3NjaGVkKCkiIGFj
cXVpcmVzIHRoZSB0aHJlYWQgbG9jayBhbmQgd2UgZG9uJ3Qgd2FudCB0bworCSAqIGNhbGwgaXQg
aGF2aW5nIGNjX2xvY2sgaGVsZCBiZWNhdXNlIGl0IGxlYWRzIHRvIGEgbG9ja2luZworCSAqIG9y
ZGVyIHJldmVyc2FsIGlzc3VlLgogCSAqLwogCWlmICghVEFJTFFfRU1QVFkoJmNjLT5jY19leHBp
cmVxKSkKIAkJc3dpX3NjaGVkKGNjLT5jY19jb29raWUsIDApOwpAQCAtNTYzLDggKzY2OSw3IEBA
CiAJCWNwdSA9IGMtPmNfY3B1OwogI2lmZGVmIFNNUAogCQlpZiAoY3B1ID09IENQVUJMT0NLKSB7
Ci0JCQl3aGlsZSAoYy0+Y19jcHUgPT0gQ1BVQkxPQ0spCi0JCQkJY3B1X3NwaW53YWl0KCk7CisJ
CQljcHVfc3BpbndhaXQoKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAjZW5kaWYKQEAgLTU3NywzMiAr
NjgyLDU2IEBACiAJcmV0dXJuIChjYyk7CiB9CiAKLXN0YXRpYyB2b2lkCi1jYWxsb3V0X2NjX2Fk
ZChzdHJ1Y3QgY2FsbG91dCAqYywgc3RydWN0IGNhbGxvdXRfY3B1ICpjYywKLSAgICBzYmludGlt
ZV90IHNidCwgc2JpbnRpbWVfdCBwcmVjaXNpb24sIHZvaWQgKCpmdW5jKSh2b2lkICopLAotICAg
IHZvaWQgKmFyZywgaW50IGNwdSwgaW50IGZsYWdzKQorc3RhdGljIHN0cnVjdCBjYWxsb3V0X2Nw
dSAqCitjYWxsb3V0X2NjX2FkZF9sb2NrZWQoc3RydWN0IGNhbGxvdXQgKmMsIHN0cnVjdCBjYWxs
b3V0X2NwdSAqY2MsCisgICAgc3RydWN0IGNhbGxvdXRfYXJncyAqY29hKQogewotCWludCBidWNr
ZXQ7CisjaWZuZGVmIE5PX0VWRU5UVElNRVJTCisJc2JpbnRpbWVfdCBzYnQ7CisjZW5kaWYKKwl1
X2ludCBidWNrZXQ7CiAKIAlDQ19MT0NLX0FTU0VSVChjYyk7Ci0JaWYgKHNidCA8IGNjLT5jY19s
YXN0c2NhbikKLQkJc2J0ID0gY2MtPmNjX2xhc3RzY2FuOwotCWMtPmNfYXJnID0gYXJnOwotCWMt
PmNfaWZsYWdzIHw9IENBTExPVVRfUEVORElORzsKLQljLT5jX2lmbGFncyAmPSB+Q0FMTE9VVF9Q
Uk9DRVNTRUQ7Ci0JYy0+Y19mbGFncyB8PSBDQUxMT1VUX0FDVElWRTsKLQlpZiAoZmxhZ3MgJiBD
X0RJUkVDVF9FWEVDKQotCQljLT5jX2lmbGFncyB8PSBDQUxMT1VUX0RJUkVDVDsKLQljLT5jX2Z1
bmMgPSBmdW5jOwotCWMtPmNfdGltZSA9IHNidDsKLQljLT5jX3ByZWNpc2lvbiA9IHByZWNpc2lv
bjsKKworCS8qIHVwZGF0ZSBmbGFncyBiZWZvcmUgc3dhcHBpbmcgbG9ja3MsIGlmIGFueSAqLwor
CWMtPmNfZmxhZ3MgJj0gfihDQUxMT1VUX1BST0NFU1NFRCB8IENBTExPVVRfRElSRUNUIHwgQ0FM
TE9VVF9ERUZSRVNUQVJUKTsKKwlpZiAoY29hLT5mbGFncyAmIENfRElSRUNUX0VYRUMpCisJCWMt
PmNfZmxhZ3MgfD0gKENBTExPVVRfQUNUSVZFIHwgQ0FMTE9VVF9QRU5ESU5HIHwgQ0FMTE9VVF9E
SVJFQ1QpOworCWVsc2UKKwkJYy0+Y19mbGFncyB8PSAoQ0FMTE9VVF9BQ1RJVkUgfCBDQUxMT1VU
X1BFTkRJTkcpOworCisjaWZkZWYgU01QCisJLyogb25seSBzZXQgdGhlICJjX2NwdSIgaWYgdGhl
IENQVSBudW1iZXIgY2hhbmdlZCBhbmQgaXMgdmFsaWQgKi8KKwlpZiAoYy0+Y19jcHUgIT0gY29h
LT5jcHUgJiYgY29hLT5jcHUgPiBDUFVCTE9DSyAmJgorCSAgICBjb2EtPmNwdSA8PSBtcF9tYXhp
ZCAmJiAhQ1BVX0FCU0VOVChjb2EtPmNwdSkpIHsKKwkJLyoKKwkJICogQXZvaWQgaW50ZXJydXB0
cyBhbmQgcHJlZW1wdGlvbiBmaXJpbmcgYWZ0ZXIgdGhlCisJCSAqIGNhbGxvdXQgQ1BVIGlzIGJs
b2NrZWQgaW4gb3JkZXIgdG8gYXZvaWQgZGVhZGxvY2tzCisJCSAqIGFzIHRoZSBuZXcgdGhyZWFk
IG1heSBiZSB3aWxsaW5nIHRvIGFjcXVpcmUgdGhlCisJCSAqIGNhbGxvdXQgQ1BVIGxvY2s6CisJ
CSAqLworCQljLT5jX2NwdSA9IENQVUJMT0NLOworCQlzcGlubG9ja19lbnRlcigpOworCQlDQ19V
TkxPQ0soY2MpOworCQljYyA9IENDX0NQVShjb2EtPmNwdSk7CisJCUNDX0xPQ0soY2MpOworCQlz
cGlubG9ja19leGl0KCk7CisJCWMtPmNfY3B1ID0gY29hLT5jcHU7CisJfQorI2VuZGlmCisJaWYg
KGNvYS0+dGltZSA8IGNjLT5jY19sYXN0c2NhbikKKwkJY29hLT50aW1lID0gY2MtPmNjX2xhc3Rz
Y2FuOworCWMtPmNfYXJnID0gY29hLT5hcmc7CisJYy0+Y19mdW5jID0gY29hLT5mdW5jOworCWMt
PmNfdGltZSA9IGNvYS0+dGltZTsKKwljLT5jX3ByZWNpc2lvbiA9IGNvYS0+cHJlY2lzaW9uOwor
CiAJYnVja2V0ID0gY2FsbG91dF9nZXRfYnVja2V0KGMtPmNfdGltZSk7CiAJQ1RSMyhLVFJfQ0FM
TE9VVCwgInByZWNpc2lvbiBzZXQgZm9yICVwOiAlZC4lMDh4IiwKIAkgICAgYywgKGludCkoYy0+
Y19wcmVjaXNpb24gPj4gMzIpLAogCSAgICAodV9pbnQpKGMtPmNfcHJlY2lzaW9uICYgMHhmZmZm
ZmZmZikpOwogCUxJU1RfSU5TRVJUX0hFQUQoJmNjLT5jY19jYWxsd2hlZWxbYnVja2V0XSwgYywg
Y19saW5rcy5sZSk7Ci0JaWYgKGNjLT5jY19idWNrZXQgPT0gYnVja2V0KQotCQljY19leGVjX25l
eHQoY2MpID0gYzsKKwogI2lmbmRlZiBOT19FVkVOVFRJTUVSUwogCS8qCiAJICogSW5mb3JtIHRo
ZSBldmVudHRpbWVycyg0KSBzdWJzeXN0ZW0gdGhlcmUncyBhIG5ldyBjYWxsb3V0CkBAIC02MTMs
MTA1ICs3NDIsOTcgQEAKIAlzYnQgPSBjLT5jX3RpbWUgKyBjLT5jX3ByZWNpc2lvbjsKIAlpZiAo
c2J0IDwgY2MtPmNjX2ZpcnN0ZXZlbnQpIHsKIAkJY2MtPmNjX2ZpcnN0ZXZlbnQgPSBzYnQ7Ci0J
CWNwdV9uZXdfY2FsbG91dChjcHUsIHNidCwgYy0+Y190aW1lKTsKKwkJY3B1X25ld19jYWxsb3V0
KGMtPmNfY3B1LCBzYnQsIGMtPmNfdGltZSk7CiAJfQogI2VuZGlmCisJcmV0dXJuIChjYyk7CiB9
CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIGNhbGxvdXRfY2NfZGVsKHN0cnVj
dCBjYWxsb3V0ICpjLCBzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjKQogewogCi0JaWYgKChjLT5jX2lm
bGFncyAmIENBTExPVVRfTE9DQUxfQUxMT0MpID09IDApCi0JCXJldHVybjsKIAljLT5jX2Z1bmMg
PSBOVUxMOwogCVNMSVNUX0lOU0VSVF9IRUFEKCZjYy0+Y2NfY2FsbGZyZWUsIGMsIGNfbGlua3Mu
c2xlKTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogc29mdGNsb2NrX2Nh
bGxfY2Moc3RydWN0IGNhbGxvdXQgKmMsIHN0cnVjdCBjYWxsb3V0X2NwdSAqY2MsCi0jaWZkZWYg
Q0FMTE9VVF9QUk9GSUxJTkcKLSAgICBpbnQgKm1wY2FsbHMsIGludCAqbG9ja2NhbGxzLCBpbnQg
KmdjYWxscywKLSNlbmRpZgotICAgIGludCBkaXJlY3QpCisgICAgY29uc3QgaW50IGRpcmVjdCkK
IHsKLQlzdHJ1Y3Qgcm1fcHJpb3RyYWNrZXIgdHJhY2tlcjsKLQl2b2lkICgqY19mdW5jKSh2b2lk
ICopOworCWNhbGxvdXRfZnVuY190ICpjX2Z1bmM7CiAJdm9pZCAqY19hcmc7Ci0Jc3RydWN0IGxv
Y2tfY2xhc3MgKmNsYXNzOwogCXN0cnVjdCBsb2NrX29iamVjdCAqY19sb2NrOwotCXVpbnRwdHJf
dCBsb2NrX3N0YXR1czsKLQlpbnQgY19pZmxhZ3M7Ci0jaWZkZWYgU01QCi0Jc3RydWN0IGNhbGxv
dXRfY3B1ICpuZXdfY2M7Ci0Jdm9pZCAoKm5ld19mdW5jKSh2b2lkICopOwotCXZvaWQgKm5ld19h
cmc7Ci0JaW50IGZsYWdzLCBuZXdfY3B1OwotCXNiaW50aW1lX3QgbmV3X3ByZWMsIG5ld190aW1l
OwotI2VuZGlmCisJaW50IGNfZmxhZ3M7CiAjaWYgZGVmaW5lZChESUFHTk9TVElDKSB8fCBkZWZp
bmVkKENBTExPVVRfUFJPRklMSU5HKSAKIAlzYmludGltZV90IHNidDEsIHNidDI7CiAJc3RydWN0
IHRpbWVzcGVjIHRzMjsKIAlzdGF0aWMgc2JpbnRpbWVfdCBtYXhkdCA9IDIgKiBTQlRfMU1TOwkv
KiAyIG1zZWMgKi8KIAlzdGF0aWMgdGltZW91dF90ICpsYXN0ZnVuYzsKICNlbmRpZgogCi0JS0FT
U0VSVCgoYy0+Y19pZmxhZ3MgJiBDQUxMT1VUX1BFTkRJTkcpID09IENBTExPVVRfUEVORElORywK
LQkgICAgKCJzb2Z0Y2xvY2tfY2FsbF9jYzogcGVuZCAlcCAleCIsIGMsIGMtPmNfaWZsYWdzKSk7
Ci0JS0FTU0VSVCgoYy0+Y19mbGFncyAmIENBTExPVVRfQUNUSVZFKSA9PSBDQUxMT1VUX0FDVElW
RSwKLQkgICAgKCJzb2Z0Y2xvY2tfY2FsbF9jYzogYWN0ICVwICV4IiwgYywgYy0+Y19mbGFncykp
OwotCWNsYXNzID0gKGMtPmNfbG9jayAhPSBOVUxMKSA/IExPQ0tfQ0xBU1MoYy0+Y19sb2NrKSA6
IE5VTEw7Ci0JbG9ja19zdGF0dXMgPSAwOwotCWlmIChjLT5jX2ZsYWdzICYgQ0FMTE9VVF9TSEFS
RURMT0NLKSB7Ci0JCWlmIChjbGFzcyA9PSAmbG9ja19jbGFzc19ybSkKLQkJCWxvY2tfc3RhdHVz
ID0gKHVpbnRwdHJfdCkmdHJhY2tlcjsKLQkJZWxzZQotCQkJbG9ja19zdGF0dXMgPSAxOwotCX0K
KwlLQVNTRVJUKChjLT5jX2ZsYWdzICYgKENBTExPVVRfUEVORElORyB8IENBTExPVVRfQUNUSVZF
KSkgPT0KKwkgICAgKENBTExPVVRfUEVORElORyB8IENBTExPVVRfQUNUSVZFKSwKKwkgICAgKCJz
b2Z0Y2xvY2tfY2FsbF9jYzogcGVuZHxhY3QgJXAgJXgiLCBjLCBjLT5jX2ZsYWdzKSk7CisKIAlj
X2xvY2sgPSBjLT5jX2xvY2s7CiAJY19mdW5jID0gYy0+Y19mdW5jOwogCWNfYXJnID0gYy0+Y19h
cmc7Ci0JY19pZmxhZ3MgPSBjLT5jX2lmbGFnczsKLQlpZiAoYy0+Y19pZmxhZ3MgJiBDQUxMT1VU
X0xPQ0FMX0FMTE9DKQotCQljLT5jX2lmbGFncyA9IENBTExPVVRfTE9DQUxfQUxMT0M7Ci0JZWxz
ZQotCQljLT5jX2lmbGFncyAmPSB+Q0FMTE9VVF9QRU5ESU5HOwotCQorCWNfZmxhZ3MgPSBjLT5j
X2ZsYWdzOworCisJLyogcmVtb3ZlIHBlbmRpbmcgYml0ICovCisJYy0+Y19mbGFncyAmPSB+Q0FM
TE9VVF9QRU5ESU5HOworCisJLyogcmVzZXQgb3VyIGxvY2FsIHN0YXRlICovCiAJY2NfZXhlY19j
dXJyKGNjLCBkaXJlY3QpID0gYzsKLQljY19leGVjX2NhbmNlbChjYywgZGlyZWN0KSA9IGZhbHNl
OwotCUNDX1VOTE9DSyhjYyk7CisJY2NfZXhlY19yZXN0YXJ0KGNjLCBkaXJlY3QpID0gZmFsc2U7
CisJY2NfZXhlY19kcmFpbl9mbihjYywgZGlyZWN0KSA9IE5VTEw7CisJY2NfZXhlY19kcmFpbl9h
cmcoY2MsIGRpcmVjdCkgPSBOVUxMOworCiAJaWYgKGNfbG9jayAhPSBOVUxMKSB7Ci0JCWNsYXNz
LT5sY19sb2NrKGNfbG9jaywgbG9ja19zdGF0dXMpOworCQljY19leGVjX2NhbmNlbChjYywgZGly
ZWN0KSA9IGZhbHNlOworCQlDQ19VTkxPQ0soY2MpOworCisJCS8qIHVubG9ja2VkIHJlZ2lvbiBm
b3Igc3dpdGNoaW5nIGxvY2tzICovCisKKwkJY2FsbG91dF9sb2NrX2NsaWVudChjX2ZsYWdzLCBj
X2xvY2spOworCiAJCS8qCi0JCSAqIFRoZSBjYWxsb3V0IG1heSBoYXZlIGJlZW4gY2FuY2VsbGVk
Ci0JCSAqIHdoaWxlIHdlIHN3aXRjaGVkIGxvY2tzLgorCQkgKiBDaGVjayBpZiB0aGUgY2FsbG91
dCBtYXkgaGF2ZSBiZWVuIGNhbmNlbGxlZCB3aGlsZQorCQkgKiB3ZSB3ZXJlIHN3aXRjaGluZyBs
b2Nrcy4gRXZlbiB0aG91Z2ggdGhlIGNhbGxvdXQgaXMKKwkJICogc3BlY2lmeWluZyBhIGxvY2ss
IGl0IG1pZ2h0IG5vdCBiZSBjZXJ0YWluIHRoaXMKKwkJICogbG9jayBpcyBsb2NrZWQgd2hlbiBz
dGFydGluZyBhbmQgc3RvcHBpbmcgY2FsbG91dHMuCiAJCSAqLworCQlDQ19MT0NLKGNjKTsKIAkJ
aWYgKGNjX2V4ZWNfY2FuY2VsKGNjLCBkaXJlY3QpKSB7Ci0JCQljbGFzcy0+bGNfdW5sb2NrKGNf
bG9jayk7Ci0JCQlnb3RvIHNraXA7CisJCQljYWxsb3V0X3VubG9ja19jbGllbnQoY19mbGFncywg
Y19sb2NrKTsKKwkJCWdvdG8gc2tpcF9jY19sb2NrZWQ7CiAJCX0KLQkJLyogVGhlIGNhbGxvdXQg
Y2Fubm90IGJlIHN0b3BwZWQgbm93LiAqLwotCQljY19leGVjX2NhbmNlbChjYywgZGlyZWN0KSA9
IHRydWU7CiAJCWlmIChjX2xvY2sgPT0gJkdpYW50LmxvY2tfb2JqZWN0KSB7CiAjaWZkZWYgQ0FM
TE9VVF9QUk9GSUxJTkcKLQkJCSgqZ2NhbGxzKSsrOworCQkJY2NfZXhlY19nY2FsbHMoY2MsIGRp
cmVjdCkrKzsKICNlbmRpZgogCQkJQ1RSMyhLVFJfQ0FMTE9VVCwgImNhbGxvdXQgZ2lhbnQgJXAg
ZnVuYyAlcCBhcmcgJXAiLAogCQkJICAgIGMsIGNfZnVuYywgY19hcmcpOwogCQl9IGVsc2Ugewog
I2lmZGVmIENBTExPVVRfUFJPRklMSU5HCi0JCQkoKmxvY2tjYWxscykrKzsKKwkJCWNjX2V4ZWNf
bG9ja2NhbGxzKGNjLCBkaXJlY3QpKys7CiAjZW5kaWYKIAkJCUNUUjMoS1RSX0NBTExPVVQsICJj
YWxsb3V0IGxvY2sgJXAgZnVuYyAlcCBhcmcgJXAiLAogCQkJICAgIGMsIGNfZnVuYywgY19hcmcp
OwogCQl9CiAJfSBlbHNlIHsKICNpZmRlZiBDQUxMT1VUX1BST0ZJTElORwotCQkoKm1wY2FsbHMp
Kys7CisJCWNjX2V4ZWNfbXBjYWxscyhjYywgZGlyZWN0KSsrOwogI2VuZGlmCiAJCUNUUjMoS1RS
X0NBTExPVVQsICJjYWxsb3V0ICVwIGZ1bmMgJXAgYXJnICVwIiwKIAkJICAgIGMsIGNfZnVuYywg
Y19hcmcpOwogCX0KKwkvKiBUaGUgY2FsbG91dCBjYW5ub3QgYmUgc3RvcHBlZCBub3chICovCisJ
Y2NfZXhlY19jYW5jZWwoY2MsIGRpcmVjdCkgPSB0cnVlOworCUNDX1VOTE9DSyhjYyk7CisKKwkv
KiB1bmxvY2tlZCByZWdpb24gKi8KIAlLVFJfU1RBVEUzKEtUUl9TQ0hFRCwgImNhbGxvdXQiLCBj
Yy0+Y2Nfa3RyX2V2ZW50X25hbWUsICJydW5uaW5nIiwKIAkgICAgImZ1bmM6JXAiLCBjX2Z1bmMs
ICJhcmc6JXAiLCBjX2FyZywgImRpcmVjdDolZCIsIGRpcmVjdCk7CiAjaWYgZGVmaW5lZChESUFH
Tk9TVElDKSB8fCBkZWZpbmVkKENBTExPVVRfUFJPRklMSU5HKQpAQCAtNzM4LDg1ICs4NTksNDYg
QEAKICNlbmRpZgogCUtUUl9TVEFURTAoS1RSX1NDSEVELCAiY2FsbG91dCIsIGNjLT5jY19rdHJf
ZXZlbnRfbmFtZSwgImlkbGUiKTsKIAlDVFIxKEtUUl9DQUxMT1VULCAiY2FsbG91dCAlcCBmaW5p
c2hlZCIsIGMpOwotCWlmICgoY19pZmxhZ3MgJiBDQUxMT1VUX1JFVFVSTlVOTE9DS0VEKSA9PSAw
KQotCQljbGFzcy0+bGNfdW5sb2NrKGNfbG9jayk7Ci1za2lwOgorCisJLyoKKwkgKiBBdCB0aGlz
IHBvaW50IHRoZSBjYWxsYmFjayBzdHJ1Y3R1cmUgbWlnaHQgaGF2ZSBiZWVuIGZyZWVkLAorCSAq
IHNvIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHByZXZpb3VzbHkgY29waWVkIHZhbHVlIG9mCisJICog
ImMtPmNfZmxhZ3MiOgorCSAqLworCWlmICgoY19mbGFncyAmIENBTExPVVRfUkVUVVJOVU5MT0NL
RUQpID09IDApCisJCWNhbGxvdXRfdW5sb2NrX2NsaWVudChjX2ZsYWdzLCBjX2xvY2spOworCiAJ
Q0NfTE9DSyhjYyk7CisKK3NraXBfY2NfbG9ja2VkOgogCUtBU1NFUlQoY2NfZXhlY19jdXJyKGNj
LCBkaXJlY3QpID09IGMsICgibWlzaGFuZGxlZCBjY19jdXJyIikpOwogCWNjX2V4ZWNfY3Vycihj
YywgZGlyZWN0KSA9IE5VTEw7Ci0JaWYgKGNjX2V4ZWNfd2FpdGluZyhjYywgZGlyZWN0KSkgewor
CisJLyogQ2hlY2sgaWYgdGhlcmUgaXMgYW55dGhpbmcgd2hpY2ggbmVlZHMgZHJhaW5pbmcgKi8K
KwlpZiAoY2NfZXhlY19kcmFpbl9mbihjYywgZGlyZWN0KSAhPSBOVUxMKSB7CiAJCS8qCi0JCSAq
IFRoZXJlIGlzIHNvbWVvbmUgd2FpdGluZyBmb3IgdGhlCi0JCSAqIGNhbGxvdXQgdG8gY29tcGxl
dGUuCi0JCSAqIElmIHRoZSBjYWxsb3V0IHdhcyBzY2hlZHVsZWQgZm9yCi0JCSAqIG1pZ3JhdGlv
biBqdXN0IGNhbmNlbCBpdC4KKwkJICogVW5sb2NrIHRoZSBDUFUgY2FsbG91dCBsYXN0LCBzbyB0
aGF0IGFueSB1c2Ugb2YKKwkJICogc3RydWN0dXJlcyBiZWxvbmdpbmcgdG8gdGhlIGNhbGxvdXQg
YXJlIGNvbXBsZXRlOgogCQkgKi8KLQkJaWYgKGNjX2NjZV9taWdyYXRpbmcoY2MsIGRpcmVjdCkp
IHsKLQkJCWNjX2NjZV9jbGVhbnVwKGNjLCBkaXJlY3QpOwotCi0JCQkvKgotCQkJICogSXQgc2hv
dWxkIGJlIGFzc2VydCBoZXJlIHRoYXQgdGhlIGNhbGxvdXQgaXMgbm90Ci0JCQkgKiBkZXN0cm95
ZWQgYnV0IHRoYXQgaXMgbm90IGVhc3kuCi0JCQkgKi8KLQkJCWMtPmNfaWZsYWdzICY9IH5DQUxM
T1VUX0RGUk1JR1JBVElPTjsKLQkJfQotCQljY19leGVjX3dhaXRpbmcoY2MsIGRpcmVjdCkgPSBm
YWxzZTsKIAkJQ0NfVU5MT0NLKGNjKTsKLQkJd2FrZXVwKCZjY19leGVjX3dhaXRpbmcoY2MsIGRp
cmVjdCkpOworCQkvKiBjYWxsIGRyYWluIGZ1bmN0aW9uIHVubG9ja2VkICovCisJCWNjX2V4ZWNf
ZHJhaW5fZm4oY2MsIGRpcmVjdCkoCisJCSAgICBjY19leGVjX2RyYWluX2FyZyhjYywgZGlyZWN0
KSk7CiAJCUNDX0xPQ0soY2MpOwotCX0gZWxzZSBpZiAoY2NfY2NlX21pZ3JhdGluZyhjYywgZGly
ZWN0KSkgewotCQlLQVNTRVJUKChjX2lmbGFncyAmIENBTExPVVRfTE9DQUxfQUxMT0MpID09IDAs
Ci0JCSAgICAoIk1pZ3JhdGluZyBsZWdhY3kgY2FsbG91dCAlcCIsIGMpKTsKLSNpZmRlZiBTTVAK
LQkJLyoKLQkJICogSWYgdGhlIGNhbGxvdXQgd2FzIHNjaGVkdWxlZCBmb3IKLQkJICogbWlncmF0
aW9uIGp1c3QgcGVyZm9ybSBpdCBub3cuCi0JCSAqLwotCQluZXdfY3B1ID0gY2NfbWlncmF0aW9u
X2NwdShjYywgZGlyZWN0KTsKLQkJbmV3X3RpbWUgPSBjY19taWdyYXRpb25fdGltZShjYywgZGly
ZWN0KTsKLQkJbmV3X3ByZWMgPSBjY19taWdyYXRpb25fcHJlYyhjYywgZGlyZWN0KTsKLQkJbmV3
X2Z1bmMgPSBjY19taWdyYXRpb25fZnVuYyhjYywgZGlyZWN0KTsKLQkJbmV3X2FyZyA9IGNjX21p
Z3JhdGlvbl9hcmcoY2MsIGRpcmVjdCk7Ci0JCWNjX2NjZV9jbGVhbnVwKGNjLCBkaXJlY3QpOwot
Ci0JCS8qCi0JCSAqIEl0IHNob3VsZCBiZSBhc3NlcnQgaGVyZSB0aGF0IHRoZSBjYWxsb3V0IGlz
IG5vdCBkZXN0cm95ZWQKLQkJICogYnV0IHRoYXQgaXMgbm90IGVhc3kuCi0JCSAqCi0JCSAqIEFz
IGZpcnN0IHRoaW5nLCBoYW5kbGUgZGVmZXJyZWQgY2FsbG91dCBzdG9wcy4KLQkJICovCi0JCWlm
ICghY2FsbG91dF9taWdyYXRpbmcoYykpIHsKLQkJCUNUUjMoS1RSX0NBTExPVVQsCi0JCQkgICAg
ICJkZWZlcnJlZCBjYW5jZWxsZWQgJXAgZnVuYyAlcCBhcmcgJXAiLAotCQkJICAgICBjLCBuZXdf
ZnVuYywgbmV3X2FyZyk7Ci0JCQljYWxsb3V0X2NjX2RlbChjLCBjYyk7Ci0JCQlyZXR1cm47CisJ
fSBlbHNlIGlmIChjX2ZsYWdzICYgQ0FMTE9VVF9MT0NBTF9BTExPQykgeworCQkvKiByZXR1cm4g
Y2FsbG91dCBiYWNrIHRvIGZyZWVsaXN0ICovCisJCWNhbGxvdXRfY2NfZGVsKGMsIGNjKTsKKwl9
IGVsc2UgaWYgKGNjX2V4ZWNfcmVzdGFydChjYywgZGlyZWN0KSkgeworCQlzdHJ1Y3QgY2FsbG91
dF9jcHUgKm5ld19jYzsKKwkJLyogW3JlLV1zY2hlZHVsZSBjYWxsb3V0LCBpZiBhbnkgKi8KKwkJ
bmV3X2NjID0gY2FsbG91dF9jY19hZGRfbG9ja2VkKGMsIGNjLAorCQkgICAgJmNjX2V4ZWNfcmVz
dGFydF9hcmdzKGNjLCBkaXJlY3QpKTsKKwkJaWYgKG5ld19jYyAhPSBjYykgeworCQkJLyogc3dp
dGNoIGxvY2tzIGJhY2sgYWdhaW4gKi8KKwkJCUNDX1VOTE9DSyhuZXdfY2MpOworCQkJQ0NfTE9D
SyhjYyk7CiAJCX0KLQkJYy0+Y19pZmxhZ3MgJj0gfkNBTExPVVRfREZSTUlHUkFUSU9OOwotCi0J
CW5ld19jYyA9IGNhbGxvdXRfY3B1X3N3aXRjaChjLCBjYywgbmV3X2NwdSk7Ci0JCWZsYWdzID0g
KGRpcmVjdCkgPyBDX0RJUkVDVF9FWEVDIDogMDsKLQkJY2FsbG91dF9jY19hZGQoYywgbmV3X2Nj
LCBuZXdfdGltZSwgbmV3X3ByZWMsIG5ld19mdW5jLAotCQkgICAgbmV3X2FyZywgbmV3X2NwdSwg
ZmxhZ3MpOwotCQlDQ19VTkxPQ0sobmV3X2NjKTsKLQkJQ0NfTE9DSyhjYyk7Ci0jZWxzZQotCQlw
YW5pYygibWlncmF0aW9uIHNob3VsZCBub3QgaGFwcGVuIik7Ci0jZW5kaWYKIAl9Ci0JLyoKLQkg
KiBJZiB0aGUgY3VycmVudCBjYWxsb3V0IGlzIGxvY2FsbHkgYWxsb2NhdGVkIChmcm9tCi0JICog
dGltZW91dCg5KSkgdGhlbiBwdXQgaXQgb24gdGhlIGZyZWVsaXN0LgotCSAqCi0JICogTm90ZTog
d2UgbmVlZCB0byBjaGVjayB0aGUgY2FjaGVkIGNvcHkgb2YgY19pZmxhZ3MgYmVjYXVzZQotCSAq
IGlmIGl0IHdhcyBub3QgbG9jYWwsIHRoZW4gaXQncyBub3Qgc2FmZSB0byBkZXJlZiB0aGUKLQkg
KiBjYWxsb3V0IHBvaW50ZXIuCi0JICovCi0JS0FTU0VSVCgoY19pZmxhZ3MgJiBDQUxMT1VUX0xP
Q0FMX0FMTE9DKSA9PSAwIHx8Ci0JICAgIGMtPmNfaWZsYWdzID09IENBTExPVVRfTE9DQUxfQUxM
T0MsCi0JICAgICgiY29ycnVwdGVkIGNhbGxvdXQiKSk7Ci0JaWYgKGNfaWZsYWdzICYgQ0FMTE9V
VF9MT0NBTF9BTExPQykKLQkJY2FsbG91dF9jY19kZWwoYywgY2MpOwogfQogCiAvKgpAQCAtODQw
LDI4ICs5MjIsMTggQEAKIHsKIAlzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjOwogCXN0cnVjdCBjYWxs
b3V0ICpjOwotI2lmZGVmIENBTExPVVRfUFJPRklMSU5HCi0JaW50IGRlcHRoID0gMCwgZ2NhbGxz
ID0gMCwgbG9ja2NhbGxzID0gMCwgbXBjYWxscyA9IDA7Ci0jZW5kaWYKIAogCWNjID0gKHN0cnVj
dCBjYWxsb3V0X2NwdSAqKWFyZzsKIAlDQ19MT0NLKGNjKTsKLQl3aGlsZSAoKGMgPSBUQUlMUV9G
SVJTVCgmY2MtPmNjX2V4cGlyZXEpKSAhPSBOVUxMKSB7Ci0JCVRBSUxRX1JFTU9WRSgmY2MtPmNj
X2V4cGlyZXEsIGMsIGNfbGlua3MudHFlKTsKLQkJc29mdGNsb2NrX2NhbGxfY2MoYywgY2MsCiAj
aWZkZWYgQ0FMTE9VVF9QUk9GSUxJTkcKLQkJICAgICZtcGNhbGxzLCAmbG9ja2NhbGxzLCAmZ2Nh
bGxzLAotI2VuZGlmCi0JCSAgICAwKTsKLSNpZmRlZiBDQUxMT1VUX1BST0ZJTElORwotCQkrK2Rl
cHRoOworCWNhbGxvdXRfY2xlYXJfc3RhdHMoY2MsIDApOwogI2VuZGlmCisJd2hpbGUgKChjID0g
VEFJTFFfRklSU1QoJmNjLT5jY19leHBpcmVxKSkgIT0gTlVMTCkgeworCQlUQUlMUV9SRU1PVkUo
JmNjLT5jY19leHBpcmVxLCBjLCBjX2xpbmtzLnRxZSk7CisJCXNvZnRjbG9ja19jYWxsX2NjKGMs
IGNjLCAwKTsKIAl9CiAjaWZkZWYgQ0FMTE9VVF9QUk9GSUxJTkcKLQlhdmdfZGVwdGggKz0gKGRl
cHRoICogMTAwMCAtIGF2Z19kZXB0aCkgPj4gODsKLQlhdmdfbXBjYWxscyArPSAobXBjYWxscyAq
IDEwMDAgLSBhdmdfbXBjYWxscykgPj4gODsKLQlhdmdfbG9ja2NhbGxzICs9IChsb2NrY2FsbHMg
KiAxMDAwIC0gYXZnX2xvY2tjYWxscykgPj4gODsKLQlhdmdfZ2NhbGxzICs9IChnY2FsbHMgKiAx
MDAwIC0gYXZnX2djYWxscykgPj4gODsKKwljYWxsb3V0X3VwZGF0ZV9zdGF0cyhjYywgMCk7CiAj
ZW5kaWYKIAlDQ19VTkxPQ0soY2MpOwogfQpAQCAtODk3LDE3ICs5NjksMTkgQEAKIAkJLyogWFhY
IEF0dGVtcHQgdG8gbWFsbG9jIGZpcnN0ICovCiAJCXBhbmljKCJ0aW1lb3V0IHRhYmxlIGZ1bGwi
KTsKIAlTTElTVF9SRU1PVkVfSEVBRCgmY2MtPmNjX2NhbGxmcmVlLCBjX2xpbmtzLnNsZSk7Ci0J
Y2FsbG91dF9yZXNldChuZXcsIHRvX3RpY2tzLCBmdG4sIGFyZyk7CiAJaGFuZGxlLmNhbGxvdXQg
PSBuZXc7CiAJQ0NfVU5MT0NLKGNjKTsKIAorCWNhbGxvdXRfcmVzZXQobmV3LCB0b190aWNrcywg
ZnRuLCBhcmcpOworCiAJcmV0dXJuIChoYW5kbGUpOwogfQogCiB2b2lkCiB1bnRpbWVvdXQodGlt
ZW91dF90ICpmdG4sIHZvaWQgKmFyZywgc3RydWN0IGNhbGxvdXRfaGFuZGxlIGhhbmRsZSkKIHsK
IAlzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjOworCWJvb2wgbWF0Y2g7CiAKIAkvKgogCSAqIENoZWNr
IGZvciBhIGhhbmRsZSB0aGF0IHdhcyBpbml0aWFsaXplZApAQCAtOTE4LDE3ICs5OTIsMTMxIEBA
CiAJCXJldHVybjsKIAogCWNjID0gY2FsbG91dF9sb2NrKGhhbmRsZS5jYWxsb3V0KTsKLQlpZiAo
aGFuZGxlLmNhbGxvdXQtPmNfZnVuYyA9PSBmdG4gJiYgaGFuZGxlLmNhbGxvdXQtPmNfYXJnID09
IGFyZykKLQkJY2FsbG91dF9zdG9wKGhhbmRsZS5jYWxsb3V0KTsKKwltYXRjaCA9IChoYW5kbGUu
Y2FsbG91dC0+Y19mdW5jID09IGZ0biAmJiBoYW5kbGUuY2FsbG91dC0+Y19hcmcgPT0gYXJnKTsK
IAlDQ19VTkxPQ0soY2MpOworCisJaWYgKG1hdGNoKQorCQljYWxsb3V0X3N0b3AoaGFuZGxlLmNh
bGxvdXQpOwogfQogCiB2b2lkCiBjYWxsb3V0X2hhbmRsZV9pbml0KHN0cnVjdCBjYWxsb3V0X2hh
bmRsZSAqaGFuZGxlKQogewogCWhhbmRsZS0+Y2FsbG91dCA9IE5VTEw7CiB9CiAKK3N0YXRpYyBp
bnQKK2NhbGxvdXRfcmVzdGFydF9hc3luYyhzdHJ1Y3QgY2FsbG91dCAqYywgc3RydWN0IGNhbGxv
dXRfYXJncyAqY29hLAorICAgIGNhbGxvdXRfZnVuY190ICpkcmFpbl9mbiwgdm9pZCAqZHJhaW5f
YXJnKQoreworCXN0cnVjdCBjYWxsb3V0X2NwdSAqY2M7CisJaW50IGNhbmNlbGxlZDsKKwlpbnQg
ZGlyZWN0OworCisJY2MgPSBjYWxsb3V0X2xvY2soYyk7CisKKwkvKiBGaWd1cmUgb3V0IGlmIHRo
ZSBjYWxsb3V0IGlzIGRpcmVjdCBvciBub3QgKi8KKwlkaXJlY3QgPSAoKGMtPmNfZmxhZ3MgJiBD
QUxMT1VUX0RJUkVDVCkgIT0gMCk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBjYWxsYmFjayBp
cyBjdXJyZW50bHkgc2NoZWR1bGVkIGZvcgorCSAqIGNvbXBsZXRpb246CisJICovCisJaWYgKGNj
X2V4ZWNfY3VycihjYywgZGlyZWN0KSA9PSBjKSB7CisJCS8qCisJCSAqIFRyeSB0byBwcmV2ZW50
IHRoZSBjYWxsYmFjayBmcm9tIHJ1bm5pbmcgYnkgc2V0dGluZworCQkgKiB0aGUgImNjX2NhbmNl
bCIgdmFyaWFibGUgdG8gInRydWUiLiBBbHNvIGNoZWNrIGlmCisJCSAqIHRoZSBjYWxsb3V0IHdh
cyBwcmV2aW91c2x5IHN1YmplY3QgdG8gYSBkZWZlcnJlZAorCQkgKiBjYWxsb3V0IHJlc3RhcnQ6
CisJCSAqLworCQlpZiAoY2NfZXhlY19jYW5jZWwoY2MsIGRpcmVjdCkgPT0gZmFsc2UgfHwKKwkJ
ICAgIChjLT5jX2ZsYWdzICYgQ0FMTE9VVF9ERUZSRVNUQVJUKSAhPSAwKSB7CisJCQljY19leGVj
X2NhbmNlbChjYywgZGlyZWN0KSA9IHRydWU7CisJCQljYW5jZWxsZWQgPSBDQUxMT1VUX1JFVF9D
QU5DRUxMRUQ7CisJCX0gZWxzZSB7CisJCQljYW5jZWxsZWQgPSBDQUxMT1VUX1JFVF9OT1JNQUw7
CisJCX0KKworCQkvKgorCQkgKiBQcmV2ZW50IGNhbGxiYWNrIHJlc3RhcnQgaWYgImNhbGxvdXRf
ZHJhaW5feHh4KCkiCisJCSAqIGlzIGJlaW5nIGNhbGxlZCBvciB3ZSBhcmUgc3RvcHBpbmcgdGhl
IGNhbGxvdXQgb3IKKwkJICogdGhlIGNhbGxiYWNrIHdhcyBwcmVhbGxvY2F0ZWQgYnkgdXM6CisJ
CSAqLworCQlpZiAoY2NfZXhlY19kcmFpbl9mbihjYywgZGlyZWN0KSAhPSBOVUxMIHx8CisJCSAg
ICBjb2EgPT0gTlVMTCB8fCAoYy0+Y19mbGFncyAmIENBTExPVVRfTE9DQUxfQUxMT0MpICE9IDAp
IHsKKwkJCUNUUjQoS1RSX0NBTExPVVQsICIlcyAlcCBmdW5jICVwIGFyZyAlcCIsCisJCQkgICAg
Y2FuY2VsbGVkID8gImNhbmNlbGxlZCBhbmQgZHJhaW5pbmciIDogImRyYWluaW5nIiwKKwkJCSAg
ICBjLCBjLT5jX2Z1bmMsIGMtPmNfYXJnKTsKKworCQkJLyogY2xlYXIgb2xkIGZsYWdzLCBpZiBh
bnkgKi8KKwkJCWMtPmNfZmxhZ3MgJj0gfihDQUxMT1VUX0FDVElWRSB8IENBTExPVVRfUEVORElO
RyB8CisJCQkgICAgQ0FMTE9VVF9ERUZSRVNUQVJUIHwgQ0FMTE9VVF9QUk9DRVNTRUQpOworCisJ
CQkvKiBjbGVhciByZXN0YXJ0IGZsYWcsIGlmIGFueSAqLworCQkJY2NfZXhlY19yZXN0YXJ0KGNj
LCBkaXJlY3QpID0gZmFsc2U7CisKKwkJCS8qIHNldCBkcmFpbiBmdW5jdGlvbiwgaWYgYW55ICov
CisJCQlpZiAoZHJhaW5fZm4gIT0gTlVMTCkgeworCQkJCWNjX2V4ZWNfZHJhaW5fZm4oY2MsIGRp
cmVjdCkgPSBkcmFpbl9mbjsKKwkJCQljY19leGVjX2RyYWluX2FyZyhjYywgZGlyZWN0KSA9IGRy
YWluX2FyZzsKKwkJCQljYW5jZWxsZWQgfD0gQ0FMTE9VVF9SRVRfRFJBSU5JTkc7CisJCQl9CisJ
CX0gZWxzZSB7CisJCQlDVFI0KEtUUl9DQUxMT1VULCAiJXMgJXAgZnVuYyAlcCBhcmcgJXAiLAor
CQkJICAgIGNhbmNlbGxlZCA/ICJjYW5jZWxsZWQgYW5kIHJlc3RhcnRpbmciIDogInJlc3RhcnRp
bmciLAorCQkJICAgIGMsIGMtPmNfZnVuYywgYy0+Y19hcmcpOworCisJCQkvKiBnZXQgdXMgYmFj
ayBpbnRvIHRoZSBnYW1lICovCisJCQljLT5jX2ZsYWdzIHw9IChDQUxMT1VUX0FDVElWRSB8IENB
TExPVVRfUEVORElORyB8CisJCQkgICAgQ0FMTE9VVF9ERUZSRVNUQVJUKTsKKwkJCWMtPmNfZmxh
Z3MgJj0gfkNBTExPVVRfUFJPQ0VTU0VEOworCisJCQkvKiBlbmFibGUgZGVmZXJyZWQgcmVzdGFy
dCAqLworCQkJY2NfZXhlY19yZXN0YXJ0KGNjLCBkaXJlY3QpID0gdHJ1ZTsKKworCQkJLyogc3Rv
cmUgYXJndW1lbnRzIGZvciB0aGUgZGVmZXJyZWQgcmVzdGFydCwgaWYgYW55ICovCisJCQljY19l
eGVjX3Jlc3RhcnRfYXJncyhjYywgZGlyZWN0KSA9ICpjb2E7CisJCX0KKwl9IGVsc2UgeworCQkv
KiBzdG9wIGNhbGxvdXQgKi8KKwkJaWYgKGMtPmNfZmxhZ3MgJiBDQUxMT1VUX1BFTkRJTkcpIHsK
KwkJCS8qCisJCQkgKiBUaGUgY2FsbGJhY2sgaGFzIG5vdCB5ZXQgYmVlbiBleGVjdXRlZCwgYW5k
CisJCQkgKiB3ZSBzaW1wbHkganVzdCBuZWVkIHRvIHVubGluayBpdDoKKwkJCSAqLworCQkJaWYg
KChjLT5jX2ZsYWdzICYgQ0FMTE9VVF9QUk9DRVNTRUQpID09IDApIHsKKwkJCQlMSVNUX1JFTU9W
RShjLCBjX2xpbmtzLmxlKTsKKwkJCX0gZWxzZSB7CisJCQkJVEFJTFFfUkVNT1ZFKCZjYy0+Y2Nf
ZXhwaXJlcSwgYywgY19saW5rcy50cWUpOworCQkJfQorCQkJY2FuY2VsbGVkID0gQ0FMTE9VVF9S
RVRfQ0FOQ0VMTEVEOworCQl9IGVsc2UgeworCQkJY2FuY2VsbGVkID0gQ0FMTE9VVF9SRVRfTk9S
TUFMOworCQl9CisKKwkJQ1RSNChLVFJfQ0FMTE9VVCwgIiVzICVwIGZ1bmMgJXAgYXJnICVwIiwK
KwkJICAgIGNhbmNlbGxlZCA/ICJyZXNjaGVkdWxlZCIgOiAic2NoZWR1bGVkIiwKKwkJICAgIGMs
IGMtPmNfZnVuYywgYy0+Y19hcmcpOworCisJCS8qIFtyZS1dc2NoZWR1bGUgY2FsbG91dCwgaWYg
YW55ICovCisJCWlmIChjb2EgIT0gTlVMTCkgeworCQkJY2MgPSBjYWxsb3V0X2NjX2FkZF9sb2Nr
ZWQoYywgY2MsIGNvYSk7CisJCX0gZWxzZSB7CisJCQkvKiBjbGVhciBvbGQgZmxhZ3MsIGlmIGFu
eSAqLworCQkJYy0+Y19mbGFncyAmPSB+KENBTExPVVRfQUNUSVZFIHwgQ0FMTE9VVF9QRU5ESU5H
IHwKKwkJCSAgICBDQUxMT1VUX0RFRlJFU1RBUlQgfCBDQUxMT1VUX1BST0NFU1NFRCk7CisKKwkJ
CS8qIHJldHVybiBjYWxsYmFjayB0byBwcmUtYWxsb2NhdGVkIGxpc3QsIGlmIGFueSAqLworCQkJ
aWYgKChjLT5jX2ZsYWdzICYgQ0FMTE9VVF9MT0NBTF9BTExPQykgJiYKKwkJCSAgICBjYW5jZWxs
ZWQgIT0gQ0FMTE9VVF9SRVRfTk9STUFMKSB7CisJCQkJY2FsbG91dF9jY19kZWwoYywgY2MpOwor
CQkJfQorCQl9CisJfQorCUNDX1VOTE9DSyhjYyk7CisJcmV0dXJuIChjYW5jZWxsZWQpOworfQor
CiAvKgogICogTmV3IGludGVyZmFjZTsgY2xpZW50cyBhbGxvY2F0ZSB0aGVpciBvd24gY2FsbG91
dCBzdHJ1Y3R1cmVzLgogICoKQEAgLTk0NywzMyArMTEzNSwzMiBAQAogICovCiBpbnQKIGNhbGxv
dXRfcmVzZXRfc2J0X29uKHN0cnVjdCBjYWxsb3V0ICpjLCBzYmludGltZV90IHNidCwgc2JpbnRp
bWVfdCBwcmVjaXNpb24sCi0gICAgdm9pZCAoKmZ0bikodm9pZCAqKSwgdm9pZCAqYXJnLCBpbnQg
Y3B1LCBpbnQgZmxhZ3MpCisgICAgY2FsbG91dF9mdW5jX3QgKmZ0biwgdm9pZCAqYXJnLCBpbnQg
Y3B1LCBpbnQgZmxhZ3MpCiB7Ci0Jc2JpbnRpbWVfdCB0b19zYnQsIHByOwotCXN0cnVjdCBjYWxs
b3V0X2NwdSAqY2M7Ci0JaW50IGNhbmNlbGxlZCwgZGlyZWN0OwotCWludCBpZ25vcmVfY3B1PTA7
CisJc3RydWN0IGNhbGxvdXRfYXJncyBjb2E7CiAKLQljYW5jZWxsZWQgPSAwOwotCWlmIChjcHUg
PT0gLTEpIHsKLQkJaWdub3JlX2NwdSA9IDE7Ci0JfSBlbHNlIGlmICgoY3B1ID49IE1BWENQVSkg
fHwKLQkJICAgKChDQ19DUFUoY3B1KSktPmNjX2luaXRlZCA9PSAwKSkgewotCQkvKiBJbnZhbGlk
IENQVSBzcGVjICovCi0JCXBhbmljKCJJbnZhbGlkIENQVSBpbiBjYWxsb3V0ICVkIiwgY3B1KTsK
LQl9Ci0JaWYgKGZsYWdzICYgQ19BQlNPTFVURSkgewotCQl0b19zYnQgPSBzYnQ7CisJLyogc3Rv
cmUgYXJndW1lbnRzIGZvciBjYWxsb3V0IGFkZCBmdW5jdGlvbiAqLworCWNvYS5mdW5jID0gZnRu
OworCWNvYS5hcmcgPSBhcmc7CisJY29hLnByZWNpc2lvbiA9IHByZWNpc2lvbjsKKwljb2EuZmxh
Z3MgPSBmbGFnczsKKwljb2EuY3B1ID0gY3B1OworCisJLyogY29tcHV0ZSB0aGUgcmVzdCBvZiB0
aGUgYXJndW1lbnRzIG5lZWRlZCAqLworCWlmIChjb2EuZmxhZ3MgJiBDX0FCU09MVVRFKSB7CisJ
CWNvYS50aW1lID0gc2J0OwogCX0gZWxzZSB7Ci0JCWlmICgoZmxhZ3MgJiBDX0hBUkRDTE9DSykg
JiYgKHNidCA8IHRpY2tfc2J0KSkKKwkJc2JpbnRpbWVfdCBwcjsKKworCQlpZiAoKGNvYS5mbGFn
cyAmIENfSEFSRENMT0NLKSAmJiAoc2J0IDwgdGlja19zYnQpKQogCQkJc2J0ID0gdGlja19zYnQ7
Ci0JCWlmICgoZmxhZ3MgJiBDX0hBUkRDTE9DSykgfHwKKwkJaWYgKChjb2EuZmxhZ3MgJiBDX0hB
UkRDTE9DSykgfHwKICNpZmRlZiBOT19FVkVOVFRJTUVSUwogCQkgICAgc2J0ID49IHNidF90aW1l
dGhyZXNob2xkKSB7Ci0JCQl0b19zYnQgPSBnZXRzYmludXB0aW1lKCk7CisJCQljb2EudGltZSA9
IGdldHNiaW51cHRpbWUoKTsKIAogCQkJLyogQWRkIHNhZmV0eSBiZWx0IGZvciB0aGUgY2FzZSBv
ZiBoeiA+IDEwMDAuICovCi0JCQl0b19zYnQgKz0gdGNfdGlja19zYnQgLSB0aWNrX3NidDsKKwkJ
CWNvYS50aW1lICs9IHRjX3RpY2tfc2J0IC0gdGlja19zYnQ7CiAjZWxzZQogCQkgICAgc2J0ID49
IHNidF90aWNrdGhyZXNob2xkKSB7CiAJCQkvKgpAQCAtOTgzLDE1MCArMTE3MCwyOSBAQAogCQkJ
ICogYWN0aXZlIG9uZXMuCiAJCQkgKi8KICNpZmRlZiBfX0xQNjRfXwotCQkJdG9fc2J0ID0gRFBD
UFVfR0VUKGhhcmRjbG9ja3RpbWUpOworCQkJY29hLnRpbWUgPSBEUENQVV9HRVQoaGFyZGNsb2Nr
dGltZSk7CiAjZWxzZQogCQkJc3BpbmxvY2tfZW50ZXIoKTsKLQkJCXRvX3NidCA9IERQQ1BVX0dF
VChoYXJkY2xvY2t0aW1lKTsKKwkJCWNvYS50aW1lID0gRFBDUFVfR0VUKGhhcmRjbG9ja3RpbWUp
OwogCQkJc3BpbmxvY2tfZXhpdCgpOwogI2VuZGlmCiAjZW5kaWYKLQkJCWlmICgoZmxhZ3MgJiBD
X0hBUkRDTE9DSykgPT0gMCkKLQkJCQl0b19zYnQgKz0gdGlja19zYnQ7CisJCQlpZiAoKGNvYS5m
bGFncyAmIENfSEFSRENMT0NLKSA9PSAwKQorCQkJCWNvYS50aW1lICs9IHRpY2tfc2J0OwogCQl9
IGVsc2UKLQkJCXRvX3NidCA9IHNiaW51cHRpbWUoKTsKLQkJaWYgKFNCVF9NQVggLSB0b19zYnQg
PCBzYnQpCi0JCQl0b19zYnQgPSBTQlRfTUFYOworCQkJY29hLnRpbWUgPSBzYmludXB0aW1lKCk7
CisJCWlmIChTQlRfTUFYIC0gY29hLnRpbWUgPCBzYnQpCisJCQljb2EudGltZSA9IFNCVF9NQVg7
CiAJCWVsc2UKLQkJCXRvX3NidCArPSBzYnQ7Ci0JCXByID0gKChDX1BSRUxHRVQoZmxhZ3MpIDwg
MCkgPyBzYnQgPj4gdGNfcHJlY2V4cCA6Ci0JCSAgICBzYnQgPj4gQ19QUkVMR0VUKGZsYWdzKSk7
Ci0JCWlmIChwciA+IHByZWNpc2lvbikKLQkJCXByZWNpc2lvbiA9IHByOwotCX0KLQkvKiAKLQkg
KiBUaGlzIGZsYWcgdXNlZCB0byBiZSBhZGRlZCBieSBjYWxsb3V0X2NjX2FkZCwgYnV0IHRoZQot
CSAqIGZpcnN0IHRpbWUgeW91IGNhbGwgdGhpcyB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGUKLQkg
KiB3cm9uZyBkaXJlY3QgZmxhZyBpZiB3ZSBkb24ndCBkbyBpdCBiZWZvcmUgd2UgYWRkLgotCSAq
LwotCWlmIChmbGFncyAmIENfRElSRUNUX0VYRUMpIHsKLQkJZGlyZWN0ID0gMTsKLQl9IGVsc2Ug
ewotCQlkaXJlY3QgPSAwOwotCX0KLQlLQVNTRVJUKCFkaXJlY3QgfHwgYy0+Y19sb2NrID09IE5V
TEwsCi0JICAgICgiJXM6IGRpcmVjdCBjYWxsb3V0ICVwIGhhcyBsb2NrIiwgX19mdW5jX18sIGMp
KTsKLQljYyA9IGNhbGxvdXRfbG9jayhjKTsKLQkvKgotCSAqIERvbid0IGFsbG93IG1pZ3JhdGlv
biBvZiBwcmUtYWxsb2NhdGVkIGNhbGxvdXRzIGxlc3QgdGhleQotCSAqIGJlY29tZSB1bmJhbGFu
Y2VkIG9yIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlciBkb2VzCi0JICogbm90IGNhcmUu
IAotCSAqLwotCWlmICgoYy0+Y19pZmxhZ3MgJiBDQUxMT1VUX0xPQ0FMX0FMTE9DKSB8fAotCSAg
ICBpZ25vcmVfY3B1KSB7Ci0JCWNwdSA9IGMtPmNfY3B1OworCQkJY29hLnRpbWUgKz0gc2J0Owor
CQlwciA9ICgoQ19QUkVMR0VUKGNvYS5mbGFncykgPCAwKSA/IHNidCA+PiB0Y19wcmVjZXhwIDoK
KwkJICAgIHNidCA+PiBDX1BSRUxHRVQoY29hLmZsYWdzKSk7CisJCWlmIChwciA+IGNvYS5wcmVj
aXNpb24pCisJCQljb2EucHJlY2lzaW9uID0gcHI7CiAJfQogCi0JaWYgKGNjX2V4ZWNfY3Vycihj
YywgZGlyZWN0KSA9PSBjKSB7Ci0JCS8qCi0JCSAqIFdlJ3JlIGJlaW5nIGFza2VkIHRvIHJlc2No
ZWR1bGUgYSBjYWxsb3V0IHdoaWNoIGlzCi0JCSAqIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4gIElm
IHRoZXJlIGlzIGEgbG9jayB0aGVuIHdlCi0JCSAqIGNhbiBjYW5jZWwgdGhlIGNhbGxvdXQgaWYg
aXQgaGFzIG5vdCByZWFsbHkgc3RhcnRlZC4KLQkJICovCi0JCWlmIChjLT5jX2xvY2sgIT0gTlVM
TCAmJiBjY19leGVjX2NhbmNlbChjYywgZGlyZWN0KSkKLQkJCWNhbmNlbGxlZCA9IGNjX2V4ZWNf
Y2FuY2VsKGNjLCBkaXJlY3QpID0gdHJ1ZTsKLQkJaWYgKGNjX2V4ZWNfd2FpdGluZyhjYywgZGly
ZWN0KSkgewotCQkJLyoKLQkJCSAqIFNvbWVvbmUgaGFzIGNhbGxlZCBjYWxsb3V0X2RyYWluIHRv
IGtpbGwgdGhpcwotCQkJICogY2FsbG91dC4gIERvbid0IHJlc2NoZWR1bGUuCi0JCQkgKi8KLQkJ
CUNUUjQoS1RSX0NBTExPVVQsICIlcyAlcCBmdW5jICVwIGFyZyAlcCIsCi0JCQkgICAgY2FuY2Vs
bGVkID8gImNhbmNlbGxlZCIgOiAiZmFpbGVkIHRvIGNhbmNlbCIsCi0JCQkgICAgYywgYy0+Y19m
dW5jLCBjLT5jX2FyZyk7Ci0JCQlDQ19VTkxPQ0soY2MpOwotCQkJcmV0dXJuIChjYW5jZWxsZWQp
OwotCQl9Ci0jaWZkZWYgU01QCi0JCWlmIChjYWxsb3V0X21pZ3JhdGluZyhjKSkgewotCQkJLyog
Ci0JCQkgKiBUaGlzIG9ubHkgb2NjdXJzIHdoZW4gYSBzZWNvbmQgY2FsbG91dF9yZXNldF9zYnRf
b24KLQkJCSAqIGlzIG1hZGUgYWZ0ZXIgYSBwcmV2aW91cyBvbmUgbW92ZWQgaXQgaW50bwotCQkJ
ICogZGVmZXJyZWQgbWlncmF0aW9uIChiZWxvdykuIE5vdGUgd2UgZG8gKm5vdCogY2hhbmdlCi0J
CQkgKiB0aGUgcHJldl9jcHUgZXZlbiB0aG91Z2ggdGhlIHByZXZpb3VzIHRhcmdldCBtYXkKLQkJ
CSAqIGJlIGRpZmZlcmVudC4KLQkJCSAqLwotCQkJY2NfbWlncmF0aW9uX2NwdShjYywgZGlyZWN0
KSA9IGNwdTsKLQkJCWNjX21pZ3JhdGlvbl90aW1lKGNjLCBkaXJlY3QpID0gdG9fc2J0OwotCQkJ
Y2NfbWlncmF0aW9uX3ByZWMoY2MsIGRpcmVjdCkgPSBwcmVjaXNpb247Ci0JCQljY19taWdyYXRp
b25fZnVuYyhjYywgZGlyZWN0KSA9IGZ0bjsKLQkJCWNjX21pZ3JhdGlvbl9hcmcoY2MsIGRpcmVj
dCkgPSBhcmc7Ci0JCQljYW5jZWxsZWQgPSAxOwotCQkJQ0NfVU5MT0NLKGNjKTsKLQkJCXJldHVy
biAoY2FuY2VsbGVkKTsKLQkJfQotI2VuZGlmCi0JfQotCWlmIChjLT5jX2lmbGFncyAmIENBTExP
VVRfUEVORElORykgewotCQlpZiAoKGMtPmNfaWZsYWdzICYgQ0FMTE9VVF9QUk9DRVNTRUQpID09
IDApIHsKLQkJCWlmIChjY19leGVjX25leHQoY2MpID09IGMpCi0JCQkJY2NfZXhlY19uZXh0KGNj
KSA9IExJU1RfTkVYVChjLCBjX2xpbmtzLmxlKTsKLQkJCUxJU1RfUkVNT1ZFKGMsIGNfbGlua3Mu
bGUpOwotCQl9IGVsc2UgewotCQkJVEFJTFFfUkVNT1ZFKCZjYy0+Y2NfZXhwaXJlcSwgYywgY19s
aW5rcy50cWUpOwotCQl9Ci0JCWNhbmNlbGxlZCA9IDE7Ci0JCWMtPmNfaWZsYWdzICY9IH4gQ0FM
TE9VVF9QRU5ESU5HOwotCQljLT5jX2ZsYWdzICY9IH4gQ0FMTE9VVF9BQ1RJVkU7Ci0JfQotCi0j
aWZkZWYgU01QCi0JLyoKLQkgKiBJZiB0aGUgY2FsbG91dCBtdXN0IG1pZ3JhdGUgdHJ5IHRvIHBl
cmZvcm0gaXQgaW1tZWRpYXRlbHkuCi0JICogSWYgdGhlIGNhbGxvdXQgaXMgY3VycmVudGx5IHJ1
bm5pbmcsIGp1c3QgZGVmZXIgdGhlIG1pZ3JhdGlvbgotCSAqIHRvIGEgbW9yZSBhcHByb3ByaWF0
ZSBtb21lbnQuCi0JICovCi0JaWYgKGMtPmNfY3B1ICE9IGNwdSkgewotCQlpZiAoY2NfZXhlY19j
dXJyKGNjLCBkaXJlY3QpID09IGMpIHsKLQkJCS8qIAotCQkJICogUGVuZGluZyB3aWxsIGhhdmUg
YmVlbiByZW1vdmVkIHNpbmNlIHdlIGFyZQotCQkJICogYWN0dWFsbHkgZXhlY3V0aW5nIHRoZSBj
YWxsb3V0IG9uIGFub3RoZXIKLQkJCSAqIENQVS4gVGhhdCBjYWxsb3V0IHNob3VsZCBiZSB3YWl0
aW5nIG9uIHRoZQotCQkJICogbG9jayB0aGUgY2FsbGVyIGhvbGRzLiBJZiB3ZSBzZXQgYm90aAot
CQkJICogYWN0aXZlL2FuZC9wZW5kaW5nIGFmdGVyIHdlIHJldHVybiBhbmQgdGhlCi0JCQkgKiBs
b2NrIG9uIHRoZSBleGVjdXRpbmcgY2FsbG91dCBwcm9jZWVkcywgaXQKLQkJCSAqIHdpbGwgdGhl
biBzZWUgcGVuZGluZyBpcyB0cnVlIGFuZCByZXR1cm4uCi0JCQkgKiBBdCB0aGUgcmV0dXJuIGZy
b20gdGhlIGFjdHVhbCBjYWxsb3V0IGV4ZWN1dGlvbgotCQkJICogdGhlIG1pZ3JhdGlvbiB3aWxs
IG9jY3VyIGluIHNvZnRjbG9ja19jYWxsX2NjCi0JCQkgKiBhbmQgdGhpcyBuZXcgY2FsbG91dCB3
aWxsIGJlIHBsYWNlZCBvbiB0aGUgCi0JCQkgKiBuZXcgQ1BVIHZpYSBhIGNhbGwgdG8gY2FsbG91
dF9jcHVfc3dpdGNoKCkgd2hpY2gKLQkJCSAqIHdpbGwgZ2V0IHRoZSBsb2NrIG9uIHRoZSByaWdo
dCBDUFUgZm9sbG93ZWQKLQkJCSAqIGJ5IGEgY2FsbCBjYWxsb3V0X2NjX2FkZCgpIHdoaWNoIHdp
bGwgYWRkIGl0IHRoZXJlLgotCQkJICogKHNlZSBhYm92ZSBpbiBzb2Z0Y2xvY2tfY2FsbF9jYygp
KS4KLQkJCSAqLwotCQkJY2NfbWlncmF0aW9uX2NwdShjYywgZGlyZWN0KSA9IGNwdTsKLQkJCWNj
X21pZ3JhdGlvbl90aW1lKGNjLCBkaXJlY3QpID0gdG9fc2J0OwotCQkJY2NfbWlncmF0aW9uX3By
ZWMoY2MsIGRpcmVjdCkgPSBwcmVjaXNpb247Ci0JCQljY19taWdyYXRpb25fZnVuYyhjYywgZGly
ZWN0KSA9IGZ0bjsKLQkJCWNjX21pZ3JhdGlvbl9hcmcoY2MsIGRpcmVjdCkgPSBhcmc7Ci0JCQlj
LT5jX2lmbGFncyB8PSAoQ0FMTE9VVF9ERlJNSUdSQVRJT04gfCBDQUxMT1VUX1BFTkRJTkcpOwot
CQkJYy0+Y19mbGFncyB8PSBDQUxMT1VUX0FDVElWRTsKLQkJCUNUUjYoS1RSX0NBTExPVVQsCi0J
CSAgICAibWlncmF0aW9uIG9mICVwIGZ1bmMgJXAgYXJnICVwIGluICVkLiUwOHggdG8gJXUgZGVm
ZXJyZWQiLAotCQkJICAgIGMsIGMtPmNfZnVuYywgYy0+Y19hcmcsIChpbnQpKHRvX3NidCA+PiAz
MiksCi0JCQkgICAgKHVfaW50KSh0b19zYnQgJiAweGZmZmZmZmZmKSwgY3B1KTsKLQkJCUNDX1VO
TE9DSyhjYyk7Ci0JCQlyZXR1cm4gKGNhbmNlbGxlZCk7Ci0JCX0KLQkJY2MgPSBjYWxsb3V0X2Nw
dV9zd2l0Y2goYywgY2MsIGNwdSk7Ci0JfQotI2VuZGlmCi0KLQljYWxsb3V0X2NjX2FkZChjLCBj
YywgdG9fc2J0LCBwcmVjaXNpb24sIGZ0biwgYXJnLCBjcHUsIGZsYWdzKTsKLQlDVFI2KEtUUl9D
QUxMT1VULCAiJXNzY2hlZHVsZWQgJXAgZnVuYyAlcCBhcmcgJXAgaW4gJWQuJTA4eCIsCi0JICAg
IGNhbmNlbGxlZCA/ICJyZSIgOiAiIiwgYywgYy0+Y19mdW5jLCBjLT5jX2FyZywgKGludCkodG9f
c2J0ID4+IDMyKSwKLQkgICAgKHVfaW50KSh0b19zYnQgJiAweGZmZmZmZmZmKSk7Ci0JQ0NfVU5M
T0NLKGNjKTsKLQotCXJldHVybiAoY2FuY2VsbGVkKTsKKwkvKiBnZXQgY2FsbGJhY2sgc3RhcnRl
ZCwgaWYgYW55ICovCisJcmV0dXJuIChjYWxsb3V0X3Jlc3RhcnRfYXN5bmMoYywgJmNvYSwgTlVM
TCwgTlVMTCkpOwogfQogCiAvKgpAQCAtMTE0NSwyNzAgKzEyMTEsMTA2IEBACiB9CiAKIGludAot
X2NhbGxvdXRfc3RvcF9zYWZlKHN0cnVjdCBjYWxsb3V0ICpjLCBpbnQgc2FmZSkKK2NhbGxvdXRf
c3RvcChzdHJ1Y3QgY2FsbG91dCAqYykKIHsKLQlzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjLCAqb2xk
X2NjOwotCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzczsKLQlpbnQgZGlyZWN0LCBzcV9sb2NrZWQs
IHVzZV9sb2NrOwotCWludCBub3Rfb25fYV9saXN0OwotCi0JaWYgKHNhZmUpCi0JCVdJVE5FU1Nf
V0FSTihXQVJOX0dJQU5UT0sgfCBXQVJOX1NMRUVQT0ssIGMtPmNfbG9jaywKLQkJICAgICJjYWxs
aW5nICVzIiwgX19mdW5jX18pOworCS8qIGdldCBjYWxsYmFjayBzdG9wcGVkLCBpZiBhbnkgKi8K
KwlyZXR1cm4gKGNhbGxvdXRfcmVzdGFydF9hc3luYyhjLCBOVUxMLCBOVUxMLCBOVUxMKSk7Cit9
CiAKLQkvKgotCSAqIFNvbWUgb2xkIHN1YnN5c3RlbXMgZG9uJ3QgaG9sZCBHaWFudCB3aGlsZSBy
dW5uaW5nIGEgY2FsbG91dF9zdG9wKCksCi0JICogc28ganVzdCBkaXNjYXJkIHRoaXMgY2hlY2sg
Zm9yIHRoZSBtb21lbnQuCi0JICovCi0JaWYgKCFzYWZlICYmIGMtPmNfbG9jayAhPSBOVUxMKSB7
Ci0JCWlmIChjLT5jX2xvY2sgPT0gJkdpYW50LmxvY2tfb2JqZWN0KQotCQkJdXNlX2xvY2sgPSBt
dHhfb3duZWQoJkdpYW50KTsKLQkJZWxzZSB7Ci0JCQl1c2VfbG9jayA9IDE7Ci0JCQljbGFzcyA9
IExPQ0tfQ0xBU1MoYy0+Y19sb2NrKTsKLQkJCWNsYXNzLT5sY19hc3NlcnQoYy0+Y19sb2NrLCBM
QV9YTE9DS0VEKTsKLQkJfQotCX0gZWxzZQotCQl1c2VfbG9jayA9IDA7Ci0JaWYgKGMtPmNfaWZs
YWdzICYgQ0FMTE9VVF9ESVJFQ1QpIHsKLQkJZGlyZWN0ID0gMTsKLQl9IGVsc2UgewotCQlkaXJl
Y3QgPSAwOwotCX0KLQlzcV9sb2NrZWQgPSAwOwotCW9sZF9jYyA9IE5VTEw7Ci1hZ2FpbjoKLQlj
YyA9IGNhbGxvdXRfbG9jayhjKTsKK3N0YXRpYyB2b2lkCitjYWxsb3V0X2RyYWluX2Z1bmN0aW9u
KHZvaWQgKmFyZykKK3sKKwl3YWtldXAoYXJnKTsKK30KIAotCWlmICgoYy0+Y19pZmxhZ3MgJiAo
Q0FMTE9VVF9ERlJNSUdSQVRJT04gfCBDQUxMT1VUX1BFTkRJTkcpKSA9PQotCSAgICAoQ0FMTE9V
VF9ERlJNSUdSQVRJT04gfCBDQUxMT1VUX1BFTkRJTkcpICYmCi0JICAgICgoYy0+Y19mbGFncyAm
IENBTExPVVRfQUNUSVZFKSA9PSBDQUxMT1VUX0FDVElWRSkpIHsKLQkJLyoKLQkJICogU3BlY2lh
bCBjYXNlIHdoZXJlIHRoaXMgc2xpcHBlZCBpbiB3aGlsZSB3ZQotCQkgKiB3ZXJlIG1pZ3JhdGlu
ZyAqYXMqIHRoZSBjYWxsb3V0IGlzIGFib3V0IHRvCi0JCSAqIGV4ZWN1dGUuIFRoZSBjYWxsZXIg
cHJvYmFibHkgaG9sZHMgdGhlIGxvY2sKLQkJICogdGhlIGNhbGxvdXQgd2FudHMuCi0JCSAqCi0J
CSAqIEdldCByaWQgb2YgdGhlIG1pZ3JhdGlvbiBmaXJzdC4gVGhlbiBzZXQKLQkJICogdGhlIGZs
YWcgdGhhdCB0ZWxscyB0aGlzIGNvZGUgKm5vdCogdG8KLQkJICogdHJ5IHRvIHJlbW92ZSBpdCBm
cm9tIGFueSBsaXN0cyAoaXRzIG5vdAotCQkgKiBvbiBvbmUgeWV0KS4gV2hlbiB0aGUgY2FsbG91
dCB3aGVlbCBydW5zLAotCQkgKiBpdCB3aWxsIGlnbm9yZSB0aGlzIGNhbGxvdXQuCi0JCSAqLwot
CQljLT5jX2lmbGFncyAmPSB+Q0FMTE9VVF9QRU5ESU5HOwotCQljLT5jX2ZsYWdzICY9IH5DQUxM
T1VUX0FDVElWRTsKLQkJbm90X29uX2FfbGlzdCA9IDE7Ci0JfSBlbHNlIHsKLQkJbm90X29uX2Ff
bGlzdCA9IDA7Ci0JfQoraW50CitjYWxsb3V0X2RyYWluX2FzeW5jKHN0cnVjdCBjYWxsb3V0ICpj
LCBjYWxsb3V0X2Z1bmNfdCAqZm4sIHZvaWQgKmFyZykKK3sKKwkvKiBnZXQgY2FsbGJhY2sgc3Rv
cHBlZCwgaWYgYW55ICovCisJcmV0dXJuIChjYWxsb3V0X3Jlc3RhcnRfYXN5bmMoCisJICAgIGMs
IE5VTEwsIGZuLCBhcmcpICYgQ0FMTE9VVF9SRVRfRFJBSU5JTkcpOworfQogCi0JLyoKLQkgKiBJ
ZiB0aGUgY2FsbG91dCB3YXMgbWlncmF0aW5nIHdoaWxlIHRoZSBjYWxsb3V0IGNwdSBsb2NrIHdh
cwotCSAqIGRyb3BwZWQsICBqdXN0IGRyb3AgdGhlIHNsZWVwcXVldWUgbG9jayBhbmQgY2hlY2sg
dGhlIHN0YXRlcwotCSAqIGFnYWluLgotCSAqLwotCWlmIChzcV9sb2NrZWQgIT0gMCAmJiBjYyAh
PSBvbGRfY2MpIHsKLSNpZmRlZiBTTVAKLQkJQ0NfVU5MT0NLKGNjKTsKLQkJc2xlZXBxX3JlbGVh
c2UoJmNjX2V4ZWNfd2FpdGluZyhvbGRfY2MsIGRpcmVjdCkpOwotCQlzcV9sb2NrZWQgPSAwOwot
CQlvbGRfY2MgPSBOVUxMOwotCQlnb3RvIGFnYWluOwotI2Vsc2UKLQkJcGFuaWMoIm1pZ3JhdGlv
biBzaG91bGQgbm90IGhhcHBlbiIpOwotI2VuZGlmCi0JfQoraW50CitjYWxsb3V0X2RyYWluKHN0
cnVjdCBjYWxsb3V0ICpjKQoreworCWludCBjYW5jZWxsZWQ7CiAKLQkvKgotCSAqIElmIHRoZSBj
YWxsb3V0IGlzbid0IHBlbmRpbmcsIGl0J3Mgbm90IG9uIHRoZSBxdWV1ZSwgc28KLQkgKiBkb24n
dCBhdHRlbXB0IHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBxdWV1ZS4gIFdlIGNhbiB0cnkgdG8KLQkg
KiBzdG9wIGl0IGJ5IG90aGVyIG1lYW5zIGhvd2V2ZXIuCi0JICovCi0JaWYgKCEoYy0+Y19pZmxh
Z3MgJiBDQUxMT1VUX1BFTkRJTkcpKSB7Ci0JCWMtPmNfZmxhZ3MgJj0gfkNBTExPVVRfQUNUSVZF
OworCVdJVE5FU1NfV0FSTihXQVJOX0dJQU5UT0sgfCBXQVJOX1NMRUVQT0ssIE5VTEwsCisJICAg
ICJEcmFpbmluZyBjYWxsb3V0Iik7CisKKwljYWxsb3V0X2xvY2tfY2xpZW50KGMtPmNfZmxhZ3Ms
IGMtPmNfbG9jayk7CisKKwkvKiBhdCB0aGlzIHBvaW50IHRoZSAiYy0+Y19jcHUiIGZpZWxkIGlz
IG5vdCBjaGFuZ2luZyAqLworCisJY2FuY2VsbGVkID0gY2FsbG91dF9kcmFpbl9hc3luYyhjLCAm
Y2FsbG91dF9kcmFpbl9mdW5jdGlvbiwgYyk7CisKKwlpZiAoY2FuY2VsbGVkICE9IENBTExPVVRf
UkVUX05PUk1BTCkgeworCQlzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjOworCQlpbnQgZGlyZWN0Owor
CisJCUNUUjMoS1RSX0NBTExPVVQsICJuZWVkIHRvIGRyYWluICVwIGZ1bmMgJXAgYXJnICVwIiwK
KwkJICAgIGMsIGMtPmNfZnVuYywgYy0+Y19hcmcpOworCisJCWNjID0gY2FsbG91dF9sb2NrKGMp
OworCQlkaXJlY3QgPSAoKGMtPmNfZmxhZ3MgJiBDQUxMT1VUX0RJUkVDVCkgIT0gMCk7CiAKIAkJ
LyoKLQkJICogSWYgaXQgd2Fzbid0IG9uIHRoZSBxdWV1ZSBhbmQgaXQgaXNuJ3QgdGhlIGN1cnJl
bnQKLQkJICogY2FsbG91dCwgdGhlbiB3ZSBjYW4ndCBzdG9wIGl0LCBzbyBqdXN0IGJhaWwuCisJ
CSAqIFdlJ3ZlIGdvdHRlbiBvdXIgY2FsbG91dCBDUFUgbG9jaywgaXQgaXMgc2FmZSB0bworCQkg
KiBkcm9wIHRoZSBpbml0aWFsIGxvY2s6CiAJCSAqLwotCQlpZiAoY2NfZXhlY19jdXJyKGNjLCBk
aXJlY3QpICE9IGMpIHsKLQkJCUNUUjMoS1RSX0NBTExPVVQsICJmYWlsZWQgdG8gc3RvcCAlcCBm
dW5jICVwIGFyZyAlcCIsCi0JCQkgICAgYywgYy0+Y19mdW5jLCBjLT5jX2FyZyk7Ci0JCQlDQ19V
TkxPQ0soY2MpOwotCQkJaWYgKHNxX2xvY2tlZCkKLQkJCQlzbGVlcHFfcmVsZWFzZSgmY2NfZXhl
Y193YWl0aW5nKGNjLCBkaXJlY3QpKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KKwkJY2FsbG91dF91
bmxvY2tfY2xpZW50KGMtPmNfZmxhZ3MsIGMtPmNfbG9jayk7CiAKLQkJaWYgKHNhZmUpIHsKLQkJ
CS8qCi0JCQkgKiBUaGUgY3VycmVudCBjYWxsb3V0IGlzIHJ1bm5pbmcgKG9yIGp1c3QKLQkJCSAq
IGFib3V0IHRvIHJ1bikgYW5kIGJsb2NraW5nIGlzIGFsbG93ZWQsIHNvCi0JCQkgKiBqdXN0IHdh
aXQgZm9yIHRoZSBjdXJyZW50IGludm9jYXRpb24gdG8KLQkJCSAqIGZpbmlzaC4KLQkJCSAqLwot
CQkJd2hpbGUgKGNjX2V4ZWNfY3VycihjYywgZGlyZWN0KSA9PSBjKSB7Ci0JCQkJLyoKLQkJCQkg
KiBVc2UgZGlyZWN0IGNhbGxzIHRvIHNsZWVwcXVldWUgaW50ZXJmYWNlCi0JCQkJICogaW5zdGVh
ZCBvZiBjdi9tc2xlZXAgaW4gb3JkZXIgdG8gYXZvaWQKLQkJCQkgKiBhIExPUiBiZXR3ZWVuIGNj
X2xvY2sgYW5kIHNsZWVwcXVldWUKLQkJCQkgKiBjaGFpbiBzcGlubG9ja3MuICBUaGlzIHBpZWNl
IG9mIGNvZGUKLQkJCQkgKiBlbXVsYXRlcyBhIG1zbGVlcF9zcGluKCkgY2FsbCBhY3R1YWxseS4K
LQkJCQkgKgotCQkJCSAqIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgc2xlZXBxdWV1ZSBjaGFpbgot
CQkJCSAqIGxvY2tlZCwgdGhlbiB3ZSBjYW4gc2FmZWx5IGJsb2NrLiAgSWYgd2UKLQkJCQkgKiBk
b24ndCBhbHJlYWR5IGhhdmUgaXQgbG9ja2VkLCBob3dldmVyLAotCQkJCSAqIHdlIGhhdmUgdG8g
ZHJvcCB0aGUgY2NfbG9jayB0byBsb2NrCi0JCQkJICogaXQuICBUaGlzIG9wZW5zIHNldmVyYWwg
cmFjZXMsIHNvIHdlCi0JCQkJICogcmVzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9uY2Ugd2UgaGF2
ZQotCQkJCSAqIGJvdGggbG9ja3MuICBJZiBub3RoaW5nIGhhcyBjaGFuZ2VkLCB0aGVuCi0JCQkJ
ICogd2Ugd2lsbCBlbmQgdXAgYmFjayBoZXJlIHdpdGggc3FfbG9ja2VkCi0JCQkJICogc2V0Lgot
CQkJCSAqLwotCQkJCWlmICghc3FfbG9ja2VkKSB7Ci0JCQkJCUNDX1VOTE9DSyhjYyk7Ci0JCQkJ
CXNsZWVwcV9sb2NrKAotCQkJCQkgICAgJmNjX2V4ZWNfd2FpdGluZyhjYywgZGlyZWN0KSk7Ci0J
CQkJCXNxX2xvY2tlZCA9IDE7Ci0JCQkJCW9sZF9jYyA9IGNjOwotCQkJCQlnb3RvIGFnYWluOwot
CQkJCX0KKwkJLyogV2FpdCBmb3IgZHJhaW4gdG8gY29tcGxldGUgKi8KKworCQl3aGlsZSAoY2Nf
ZXhlY19jdXJyKGNjLCBkaXJlY3QpID09IGMpCisJCQltc2xlZXBfc3BpbihjLCAoc3RydWN0IG10
eCAqKSZjYy0+Y2NfbG9jaywgImNvZHJhaW4iLCAwKTsKIAotCQkJCS8qCi0JCQkJICogTWlncmF0
aW9uIGNvdWxkIGJlIGNhbmNlbGxlZCBoZXJlLCBidXQKLQkJCQkgKiBhcyBsb25nIGFzIGl0IGlz
IHN0aWxsIG5vdCBzdXJlIHdoZW4gaXQKLQkJCQkgKiB3aWxsIGJlIHBhY2tlZCB1cCwganVzdCBs
ZXQgc29mdGNsb2NrKCkKLQkJCQkgKiB0YWtlIGNhcmUgb2YgaXQuCi0JCQkJICovCi0JCQkJY2Nf
ZXhlY193YWl0aW5nKGNjLCBkaXJlY3QpID0gdHJ1ZTsKLQkJCQlEUk9QX0dJQU5UKCk7Ci0JCQkJ
Q0NfVU5MT0NLKGNjKTsKLQkJCQlzbGVlcHFfYWRkKAotCQkJCSAgICAmY2NfZXhlY193YWl0aW5n
KGNjLCBkaXJlY3QpLAotCQkJCSAgICAmY2MtPmNjX2xvY2subG9ja19vYmplY3QsICJjb2RyYWlu
IiwKLQkJCQkgICAgU0xFRVBRX1NMRUVQLCAwKTsKLQkJCQlzbGVlcHFfd2FpdCgKLQkJCQkgICAg
JmNjX2V4ZWNfd2FpdGluZyhjYywgZGlyZWN0KSwKLQkJCQkJICAgICAwKTsKLQkJCQlzcV9sb2Nr
ZWQgPSAwOwotCQkJCW9sZF9jYyA9IE5VTEw7Ci0KLQkJCQkvKiBSZWFjcXVpcmUgbG9ja3MgcHJl
dmlvdXNseSByZWxlYXNlZC4gKi8KLQkJCQlQSUNLVVBfR0lBTlQoKTsKLQkJCQlDQ19MT0NLKGNj
KTsKLQkJCX0KLQkJfSBlbHNlIGlmICh1c2VfbG9jayAmJgotCQkJICAgIWNjX2V4ZWNfY2FuY2Vs
KGNjLCBkaXJlY3QpKSB7Ci0JCQkKLQkJCS8qCi0JCQkgKiBUaGUgY3VycmVudCBjYWxsb3V0IGlz
IHdhaXRpbmcgZm9yIGl0cwotCQkJICogbG9jayB3aGljaCB3ZSBob2xkLiAgQ2FuY2VsIHRoZSBj
YWxsb3V0Ci0JCQkgKiBhbmQgcmV0dXJuLiAgQWZ0ZXIgb3VyIGNhbGxlciBkcm9wcyB0aGUKLQkJ
CSAqIGxvY2ssIHRoZSBjYWxsb3V0IHdpbGwgYmUgc2tpcHBlZCBpbgotCQkJICogc29mdGNsb2Nr
KCkuCi0JCQkgKi8KLQkJCWNjX2V4ZWNfY2FuY2VsKGNjLCBkaXJlY3QpID0gdHJ1ZTsKLQkJCUNU
UjMoS1RSX0NBTExPVVQsICJjYW5jZWxsZWQgJXAgZnVuYyAlcCBhcmcgJXAiLAotCQkJICAgIGMs
IGMtPmNfZnVuYywgYy0+Y19hcmcpOwotCQkJS0FTU0VSVCghY2NfY2NlX21pZ3JhdGluZyhjYywg
ZGlyZWN0KSwKLQkJCSAgICAoImNhbGxvdXQgd3JvbmdseSBzY2hlZHVsZWQgZm9yIG1pZ3JhdGlv
biIpKTsKLQkJCWlmIChjYWxsb3V0X21pZ3JhdGluZyhjKSkgewotCQkJCWMtPmNfaWZsYWdzICY9
IH5DQUxMT1VUX0RGUk1JR1JBVElPTjsKLSNpZmRlZiBTTVAKLQkJCQljY19taWdyYXRpb25fY3B1
KGNjLCBkaXJlY3QpID0gQ1BVQkxPQ0s7Ci0JCQkJY2NfbWlncmF0aW9uX3RpbWUoY2MsIGRpcmVj
dCkgPSAwOwotCQkJCWNjX21pZ3JhdGlvbl9wcmVjKGNjLCBkaXJlY3QpID0gMDsKLQkJCQljY19t
aWdyYXRpb25fZnVuYyhjYywgZGlyZWN0KSA9IE5VTEw7Ci0JCQkJY2NfbWlncmF0aW9uX2FyZyhj
YywgZGlyZWN0KSA9IE5VTEw7Ci0jZW5kaWYKLQkJCX0KLQkJCUNDX1VOTE9DSyhjYyk7Ci0JCQlL
QVNTRVJUKCFzcV9sb2NrZWQsICgic2xlZXBxdWV1ZSBjaGFpbiBsb2NrZWQiKSk7Ci0JCQlyZXR1
cm4gKDEpOwotCQl9IGVsc2UgaWYgKGNhbGxvdXRfbWlncmF0aW5nKGMpKSB7Ci0JCQkvKgotCQkJ
ICogVGhlIGNhbGxvdXQgaXMgY3VycmVudGx5IGJlaW5nIHNlcnZpY2VkCi0JCQkgKiBhbmQgdGhl
ICJuZXh0IiBjYWxsb3V0IGlzIHNjaGVkdWxlZCBhdAotCQkJICogaXRzIGNvbXBsZXRpb24gd2l0
aCBhIG1pZ3JhdGlvbi4gV2UgcmVtb3ZlCi0JCQkgKiB0aGUgbWlncmF0aW9uIGZsYWcgc28gaXQg
Kndvbid0KiBnZXQgcmVzY2hlZHVsZWQsCi0JCQkgKiBidXQgd2UgY2FuJ3Qgc3RvcCB0aGUgb25l
IHRoYXRzIHJ1bm5pbmcgc28KLQkJCSAqIHdlIHJldHVybiAwLgotCQkJICovCi0JCQljLT5jX2lm
bGFncyAmPSB+Q0FMTE9VVF9ERlJNSUdSQVRJT047Ci0jaWZkZWYgU01QCi0JCQkvKiAKLQkJCSAq
IFdlIGNhbid0IGNhbGwgY2NfY2NlX2NsZWFudXAgaGVyZSBzaW5jZQotCQkJICogaWYgd2UgZG8g
aXQgd2lsbCByZW1vdmUgLmNlX2N1cnIgYW5kCi0JCQkgKiBpdHMgc3RpbGwgcnVubmluZy4gVGhp
cyB3aWxsIHByZXZlbnQgYQotCQkJICogcmVzY2hlZHVsZSBvZiB0aGUgY2FsbG91dCB3aGVuIHRo
ZSAKLQkJCSAqIGV4ZWN1dGlvbiBjb21wbGV0ZXMuCi0JCQkgKi8KLQkJCWNjX21pZ3JhdGlvbl9j
cHUoY2MsIGRpcmVjdCkgPSBDUFVCTE9DSzsKLQkJCWNjX21pZ3JhdGlvbl90aW1lKGNjLCBkaXJl
Y3QpID0gMDsKLQkJCWNjX21pZ3JhdGlvbl9wcmVjKGNjLCBkaXJlY3QpID0gMDsKLQkJCWNjX21p
Z3JhdGlvbl9mdW5jKGNjLCBkaXJlY3QpID0gTlVMTDsKLQkJCWNjX21pZ3JhdGlvbl9hcmcoY2Ms
IGRpcmVjdCkgPSBOVUxMOwotI2VuZGlmCi0JCQlDVFIzKEtUUl9DQUxMT1VULCAicG9zdHBvbmlu
ZyBzdG9wICVwIGZ1bmMgJXAgYXJnICVwIiwKLQkJCSAgICBjLCBjLT5jX2Z1bmMsIGMtPmNfYXJn
KTsKLQkJCUNDX1VOTE9DSyhjYyk7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JCUNUUjMoS1RSX0NB
TExPVVQsICJmYWlsZWQgdG8gc3RvcCAlcCBmdW5jICVwIGFyZyAlcCIsCi0JCSAgICBjLCBjLT5j
X2Z1bmMsIGMtPmNfYXJnKTsKIAkJQ0NfVU5MT0NLKGNjKTsKLQkJS0FTU0VSVCghc3FfbG9ja2Vk
LCAoInNsZWVwcXVldWUgY2hhaW4gc3RpbGwgbG9ja2VkIikpOwotCQlyZXR1cm4gKDApOworCX0g
ZWxzZSB7CisJCWNhbGxvdXRfdW5sb2NrX2NsaWVudChjLT5jX2ZsYWdzLCBjLT5jX2xvY2spOwog
CX0KLQlpZiAoc3FfbG9ja2VkKQotCQlzbGVlcHFfcmVsZWFzZSgmY2NfZXhlY193YWl0aW5nKGNj
LCBkaXJlY3QpKTsKLQotCWMtPmNfaWZsYWdzICY9IH5DQUxMT1VUX1BFTkRJTkc7Ci0JYy0+Y19m
bGFncyAmPSB+Q0FMTE9VVF9BQ1RJVkU7CiAKIAlDVFIzKEtUUl9DQUxMT1VULCAiY2FuY2VsbGVk
ICVwIGZ1bmMgJXAgYXJnICVwIiwKIAkgICAgYywgYy0+Y19mdW5jLCBjLT5jX2FyZyk7Ci0JaWYg
KG5vdF9vbl9hX2xpc3QgPT0gMCkgewotCQlpZiAoKGMtPmNfaWZsYWdzICYgQ0FMTE9VVF9QUk9D
RVNTRUQpID09IDApIHsKLQkJCWlmIChjY19leGVjX25leHQoY2MpID09IGMpCi0JCQkJY2NfZXhl
Y19uZXh0KGNjKSA9IExJU1RfTkVYVChjLCBjX2xpbmtzLmxlKTsKLQkJCUxJU1RfUkVNT1ZFKGMs
IGNfbGlua3MubGUpOwotCQl9IGVsc2UgewotCQkJVEFJTFFfUkVNT1ZFKCZjYy0+Y2NfZXhwaXJl
cSwgYywgY19saW5rcy50cWUpOwotCQl9Ci0JfQotCWNhbGxvdXRfY2NfZGVsKGMsIGNjKTsKLQlD
Q19VTkxPQ0soY2MpOwotCXJldHVybiAoMSk7CisKKwlyZXR1cm4gKGNhbmNlbGxlZCAmIENBTExP
VVRfUkVUX0NBTkNFTExFRCk7CiB9CiAKIHZvaWQKIGNhbGxvdXRfaW5pdChzdHJ1Y3QgY2FsbG91
dCAqYywgaW50IG1wc2FmZSkKIHsKLQliemVybyhjLCBzaXplb2YgKmMpOwogCWlmIChtcHNhZmUp
IHsKLQkJYy0+Y19sb2NrID0gTlVMTDsKLQkJYy0+Y19pZmxhZ3MgPSBDQUxMT1VUX1JFVFVSTlVO
TE9DS0VEOworCQlfY2FsbG91dF9pbml0X2xvY2soYywgTlVMTCwgQ0FMTE9VVF9SRVRVUk5VTkxP
Q0tFRCk7CiAJfSBlbHNlIHsKLQkJYy0+Y19sb2NrID0gJkdpYW50LmxvY2tfb2JqZWN0OwotCQlj
LT5jX2lmbGFncyA9IDA7CisJCV9jYWxsb3V0X2luaXRfbG9jayhjLCAmR2lhbnQubG9ja19vYmpl
Y3QsIDApOwogCX0KLQljLT5jX2NwdSA9IHRpbWVvdXRfY3B1OwogfQogCiB2b2lkCiBfY2FsbG91
dF9pbml0X2xvY2soc3RydWN0IGNhbGxvdXQgKmMsIHN0cnVjdCBsb2NrX29iamVjdCAqbG9jaywg
aW50IGZsYWdzKQogewogCWJ6ZXJvKGMsIHNpemVvZiAqYyk7CisJS0FTU0VSVCgoZmxhZ3MgJiB+
Q0FMTE9VVF9SRVRVUk5VTkxPQ0tFRCkgPT0gMCwKKwkgICAgKCJjYWxsb3V0X2luaXRfbG9jazog
YmFkIGZsYWdzIDB4JTA4eCIsIGZsYWdzKSk7CisJZmxhZ3MgJj0gQ0FMTE9VVF9SRVRVUk5VTkxP
Q0tFRDsKKwlpZiAobG9jayAhPSBOVUxMKSB7CisJCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9
IExPQ0tfQ0xBU1MobG9jayk7CisJCWlmIChjbGFzcyA9PSAmbG9ja19jbGFzc19tdHhfc2xlZXAp
CisJCQlmbGFncyB8PSBDQUxMT1VUX1NFVF9MQyhDQUxMT1VUX0xDX01VVEVYKTsKKwkJZWxzZSBp
ZiAoY2xhc3MgPT0gJmxvY2tfY2xhc3NfbXR4X3NwaW4pCisJCQlmbGFncyB8PSBDQUxMT1VUX1NF
VF9MQyhDQUxMT1VUX0xDX1NQSU4pOworCQllbHNlIGlmIChjbGFzcyA9PSAmbG9ja19jbGFzc19y
bSkKKwkJCWZsYWdzIHw9IENBTExPVVRfU0VUX0xDKENBTExPVVRfTENfUk0pOworCQllbHNlIGlm
IChjbGFzcyA9PSAmbG9ja19jbGFzc19ydykKKwkJCWZsYWdzIHw9IENBTExPVVRfU0VUX0xDKENB
TExPVVRfTENfUlcpOworCQllbHNlCisJCQlwYW5pYygiY2FsbG91dF9pbml0X2xvY2s6IFVuc3Vw
cG9ydGVkIGxvY2sgY2xhc3MgJyVzJ1xuIiwgY2xhc3MtPmxjX25hbWUpOworCX0gZWxzZSB7CisJ
CWZsYWdzIHw9IENBTExPVVRfU0VUX0xDKENBTExPVVRfTENfVU5VU0VEXzApOworCX0KIAljLT5j
X2xvY2sgPSBsb2NrOwotCUtBU1NFUlQoKGZsYWdzICYgfihDQUxMT1VUX1JFVFVSTlVOTE9DS0VE
IHwgQ0FMTE9VVF9TSEFSRURMT0NLKSkgPT0gMCwKLQkgICAgKCJjYWxsb3V0X2luaXRfbG9jazog
YmFkIGZsYWdzICVkIiwgZmxhZ3MpKTsKLQlLQVNTRVJUKGxvY2sgIT0gTlVMTCB8fCAoZmxhZ3Mg
JiBDQUxMT1VUX1JFVFVSTlVOTE9DS0VEKSA9PSAwLAotCSAgICAoImNhbGxvdXRfaW5pdF9sb2Nr
OiBDQUxMT1VUX1JFVFVSTlVOTE9DS0VEIHdpdGggbm8gbG9jayIpKTsKLQlLQVNTRVJUKGxvY2sg
PT0gTlVMTCB8fCAhKExPQ0tfQ0xBU1MobG9jayktPmxjX2ZsYWdzICYKLQkgICAgKExDX1NQSU5M
T0NLIHwgTENfU0xFRVBBQkxFKSksICgiJXM6IGludmFsaWQgbG9jayBjbGFzcyIsCi0JICAgIF9f
ZnVuY19fKSk7Ci0JYy0+Y19pZmxhZ3MgPSBmbGFncyAmIChDQUxMT1VUX1JFVFVSTlVOTE9DS0VE
IHwgQ0FMTE9VVF9TSEFSRURMT0NLKTsKKwljLT5jX2ZsYWdzID0gZmxhZ3M7CiAJYy0+Y19jcHUg
PSB0aW1lb3V0X2NwdTsKIH0KIApkaWZmIC0tZ2l0IGEvcHJvamVjdHMvaHBzX2hlYWQvc3lzL2tl
cm4va2Vybl9jb25kdmFyLmMgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX2NvbmR2
YXIuYwotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX2NvbmR2YXIuYworKysg
Yi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX2NvbmR2YXIuYwpAQCAtMzEzLDE1ICsz
MTMsMTMgQEAKIAlEUk9QX0dJQU5UKCk7CiAKIAlzbGVlcHFfYWRkKGN2cCwgbG9jaywgY3ZwLT5j
dl9kZXNjcmlwdGlvbiwgU0xFRVBRX0NPTkRWQVIsIDApOworCXNsZWVwcV9yZWxlYXNlKGN2cCk7
CiAJc2xlZXBxX3NldF90aW1lb3V0X3NidChjdnAsIHNidCwgcHIsIGZsYWdzKTsKIAlpZiAobG9j
ayAhPSAmR2lhbnQubG9ja19vYmplY3QpIHsKLQkJaWYgKGNsYXNzLT5sY19mbGFncyAmIExDX1NM
RUVQQUJMRSkKLQkJCXNsZWVwcV9yZWxlYXNlKGN2cCk7CiAJCVdJVE5FU1NfU0FWRShsb2NrLCBs
b2NrX3dpdG5lc3MpOwogCQlsb2NrX3N0YXRlID0gY2xhc3MtPmxjX3VubG9jayhsb2NrKTsKLQkJ
aWYgKGNsYXNzLT5sY19mbGFncyAmIExDX1NMRUVQQUJMRSkKLQkJCXNsZWVwcV9sb2NrKGN2cCk7
CiAJfQorCXNsZWVwcV9sb2NrKGN2cCk7CiAJcnZhbCA9IHNsZWVwcV90aW1lZHdhaXQoY3ZwLCAw
KTsKIAogI2lmZGVmIEtUUkFDRQpAQCAtMzgzLDE1ICszODEsMTMgQEAKIAogCXNsZWVwcV9hZGQo
Y3ZwLCBsb2NrLCBjdnAtPmN2X2Rlc2NyaXB0aW9uLCBTTEVFUFFfQ09ORFZBUiB8CiAJICAgIFNM
RUVQUV9JTlRFUlJVUFRJQkxFLCAwKTsKKwlzbGVlcHFfcmVsZWFzZShjdnApOwogCXNsZWVwcV9z
ZXRfdGltZW91dF9zYnQoY3ZwLCBzYnQsIHByLCBmbGFncyk7CiAJaWYgKGxvY2sgIT0gJkdpYW50
LmxvY2tfb2JqZWN0KSB7Ci0JCWlmIChjbGFzcy0+bGNfZmxhZ3MgJiBMQ19TTEVFUEFCTEUpCi0J
CQlzbGVlcHFfcmVsZWFzZShjdnApOwogCQlXSVRORVNTX1NBVkUobG9jaywgbG9ja193aXRuZXNz
KTsKIAkJbG9ja19zdGF0ZSA9IGNsYXNzLT5sY191bmxvY2sobG9jayk7Ci0JCWlmIChjbGFzcy0+
bGNfZmxhZ3MgJiBMQ19TTEVFUEFCTEUpCi0JCQlzbGVlcHFfbG9jayhjdnApOwogCX0KKwlzbGVl
cHFfbG9jayhjdnApOwogCXJ2YWwgPSBzbGVlcHFfdGltZWR3YWl0X3NpZyhjdnAsIDApOwogCiAj
aWZkZWYgS1RSQUNFCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9pbml0
X21haW4uYyBiL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL2luaXRfbWFpbi5jCi0tLSBhL3By
b2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL2luaXRfbWFpbi5jCisrKyBiL3Byb2plY3RzL2hwc19o
ZWFkL3N5cy9rZXJuL2luaXRfbWFpbi5jCkBAIC01MDYsNyArNTA2LDggQEAKIAogCWNhbGxvdXRf
aW5pdF9tdHgoJnAtPnBfaXRjYWxsb3V0LCAmcC0+cF9tdHgsIDApOwogCWNhbGxvdXRfaW5pdF9t
dHgoJnAtPnBfbGltY28sICZwLT5wX210eCwgMCk7Ci0JY2FsbG91dF9pbml0KCZ0ZC0+dGRfc2xw
Y2FsbG91dCwgQ0FMTE9VVF9NUFNBRkUpOworCW10eF9pbml0KCZ0ZC0+dGRfc2xwbXV0ZXgsICJ0
ZF9zbHBtdXRleCIsIE5VTEwsIE1UWF9TUElOKTsKKwljYWxsb3V0X2luaXRfbXR4KCZ0ZC0+dGRf
c2xwY2FsbG91dCwgJnRkLT50ZF9zbHBtdXRleCwgMCk7CiAKIAkvKiBDcmVhdGUgY3JlZGVudGlh
bHMuICovCiAJbmV3Y3JlZCA9IGNyZ2V0KCk7CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9ocHNfaGVh
ZC9zeXMva2Vybi9rZXJuX3N3aXRjaC5jIGIvcHJvamVjdHMvaHBzX2hlYWQvc3lzL2tlcm4va2Vy
bl9zd2l0Y2guYwotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX3N3aXRjaC5j
CisrKyBiL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL2tlcm5fc3dpdGNoLmMKQEAgLTkzLDgg
KzkzLDYgQEAKICAgICAmRFBDUFVfTkFNRShzY2hlZF9zd2l0Y2hfc3RhdHNbU1dUX1RVUk5TVElM
RV0pLCAiIik7CiBTQ0hFRF9TVEFUX0RFRklORV9WQVIoc2xlZXBxLAogICAgICZEUENQVV9OQU1F
KHNjaGVkX3N3aXRjaF9zdGF0c1tTV1RfU0xFRVBRXSksICIiKTsKLVNDSEVEX1NUQVRfREVGSU5F
X1ZBUihzbGVlcHF0aW1vLAotICAgICZEUENQVV9OQU1FKHNjaGVkX3N3aXRjaF9zdGF0c1tTV1Rf
U0xFRVBRVElNT10pLCAiIik7CiBTQ0hFRF9TVEFUX0RFRklORV9WQVIocmVsaW5xdWlzaCwgCiAg
ICAgJkRQQ1BVX05BTUUoc2NoZWRfc3dpdGNoX3N0YXRzW1NXVF9SRUxJTlFVSVNIXSksICIiKTsK
IFNDSEVEX1NUQVRfREVGSU5FX1ZBUihuZWVkcmVzY2hlZCwKZGlmZiAtLWdpdCBhL3Byb2plY3Rz
L2hwc19oZWFkL3N5cy9rZXJuL2tlcm5fdGhyZWFkLmMgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMv
a2Vybi9rZXJuX3RocmVhZC5jCi0tLSBhL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL2tlcm5f
dGhyZWFkLmMKKysrIGIvcHJvamVjdHMvaHBzX2hlYWQvc3lzL2tlcm4va2Vybl90aHJlYWQuYwpA
QCAtMTQ5LDYgKzE0OSw5IEBACiAJYXVkaXRfdGhyZWFkX2FsbG9jKHRkKTsKICNlbmRpZgogCXVt
dHhfdGhyZWFkX2FsbG9jKHRkKTsKKworCW10eF9pbml0KCZ0ZC0+dGRfc2xwbXV0ZXgsICJ0ZF9z
bHBtdXRleCIsIE5VTEwsIE1UWF9TUElOKTsKKwljYWxsb3V0X2luaXRfbXR4KCZ0ZC0+dGRfc2xw
Y2FsbG91dCwgJnRkLT50ZF9zbHBtdXRleCwgMCk7CiAJcmV0dXJuICgwKTsKIH0KIApAQCAtMTYy
LDYgKzE2NSwxMCBAQAogCiAJdGQgPSAoc3RydWN0IHRocmVhZCAqKW1lbTsKIAorCS8qIG1ha2Ug
c3VyZSB0byBkcmFpbiBhbnkgdXNlIG9mIHRoZSAidGQtPnRkX3NscGNhbGxvdXQiICovCisJY2Fs
bG91dF9kcmFpbigmdGQtPnRkX3NscGNhbGxvdXQpOworCW10eF9kZXN0cm95KCZ0ZC0+dGRfc2xw
bXV0ZXgpOworCiAjaWZkZWYgSU5WQVJJQU5UUwogCS8qIFZlcmlmeSB0aGF0IHRoaXMgdGhyZWFk
IGlzIGluIGEgc2FmZSBzdGF0ZSB0byBmcmVlLiAqLwogCXN3aXRjaCAodGQtPnRkX3N0YXRlKSB7
CkBAIC01NDQsNyArNTUxLDYgQEAKIAlMSVNUX0lOSVQoJnRkLT50ZF9scHJvZlswXSk7CiAJTElT
VF9JTklUKCZ0ZC0+dGRfbHByb2ZbMV0pOwogCXNpZ3F1ZXVlX2luaXQoJnRkLT50ZF9zaWdxdWV1
ZSwgcCk7Ci0JY2FsbG91dF9pbml0KCZ0ZC0+dGRfc2xwY2FsbG91dCwgQ0FMTE9VVF9NUFNBRkUp
OwogCVRBSUxRX0lOU0VSVF9UQUlMKCZwLT5wX3RocmVhZHMsIHRkLCB0ZF9wbGlzdCk7CiAJcC0+
cF9udW10aHJlYWRzKys7CiB9CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vy
bi9rZXJuX2Nsb2Nrc291cmNlLmMgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX2Ns
b2Nrc291cmNlLmMKLS0tIGEvcHJvamVjdHMvaHBzX2hlYWQvc3lzL2tlcm4va2Vybl9jbG9ja3Nv
dXJjZS5jCisrKyBiL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL2tlcm5fY2xvY2tzb3VyY2Uu
YwpAQCAtMTYwLDYgKzE2MCw5IEBACiAJaW50IHVzZXJtb2RlOwogCWludCBkb25lLCBydW5zOwog
CisJS0FTU0VSVChjdXJ0aHJlYWQtPnRkX2NyaXRuZXN0ICE9IDAsCisJICAgICgiTXVzdCBiZSBp
biBhIGNyaXRpY2FsIHNlY3Rpb24iKSk7CisKIAlDVFIzKEtUUl9TUEFSRTIsICJoYW5kbGUgYXQg
JWQ6ICBub3cgICVkLiUwOHgiLAogCSAgICBjdXJjcHUsIChpbnQpKG5vdyA+PiAzMiksICh1X2lu
dCkobm93ICYgMHhmZmZmZmZmZikpOwogCWRvbmUgPSAwOwpkaWZmIC0tZ2l0IGEvcHJvamVjdHMv
aHBzX2hlYWQvc3lzL2tlcm4va2Vybl9sb2NrLmMgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vy
bi9rZXJuX2xvY2suYwotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX2xvY2su
YworKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX2xvY2suYwpAQCAtMjEwLDkg
KzIxMCwxMSBAQAogCUdJQU5UX1NBVkUoKTsKIAlzbGVlcHFfYWRkKCZsay0+bG9ja19vYmplY3Qs
IE5VTEwsIHdtZXNnLCBTTEVFUFFfTEsgfCAoY2F0Y2ggPwogCSAgICBTTEVFUFFfSU5URVJSVVBU
SUJMRSA6IDApLCBxdWV1ZSk7Ci0JaWYgKChmbGFncyAmIExLX1RJTUVMT0NLKSAmJiB0aW1vKQor
CWlmICgoZmxhZ3MgJiBMS19USU1FTE9DSykgJiYgdGltbykgeworCQlzbGVlcHFfcmVsZWFzZSgm
bGstPmxvY2tfb2JqZWN0KTsKIAkJc2xlZXBxX3NldF90aW1lb3V0KCZsay0+bG9ja19vYmplY3Qs
IHRpbW8pOwotCisJCXNsZWVwcV9sb2NrKCZsay0+bG9ja19vYmplY3QpOworCX0KIAkvKgogCSAq
IERlY2lzaW9uYWwgc3dpdGNoIGZvciByZWFsIHNsZWVwaW5nLgogCSAqLwpkaWZmIC0tZ2l0IGEv
cHJvamVjdHMvaHBzX2hlYWQvc3lzL2tlcm4va2Vybl9zeW5jaC5jIGIvcHJvamVjdHMvaHBzX2hl
YWQvc3lzL2tlcm4va2Vybl9zeW5jaC5jCi0tLSBhL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJu
L2tlcm5fc3luY2guYworKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX3N5bmNo
LmMKQEAgLTIxOSwxMiArMjE5LDE2IEBACiAJICogcmV0dXJuIGZyb20gY3Vyc2lnKCkuCiAJICov
CiAJc2xlZXBxX2FkZChpZGVudCwgbG9jaywgd21lc2csIHNsZWVwcV9mbGFncywgMCk7Ci0JaWYg
KHNidCAhPSAwKQotCQlzbGVlcHFfc2V0X3RpbWVvdXRfc2J0KGlkZW50LCBzYnQsIHByLCBmbGFn
cyk7CiAJaWYgKGxvY2sgIT0gTlVMTCAmJiBjbGFzcy0+bGNfZmxhZ3MgJiBMQ19TTEVFUEFCTEUp
IHsKIAkJc2xlZXBxX3JlbGVhc2UoaWRlbnQpOwogCQlXSVRORVNTX1NBVkUobG9jaywgbG9ja193
aXRuZXNzKTsKIAkJbG9ja19zdGF0ZSA9IGNsYXNzLT5sY191bmxvY2sobG9jayk7CisJCWlmIChz
YnQgIT0gMCkKKwkJCXNsZWVwcV9zZXRfdGltZW91dF9zYnQoaWRlbnQsIHNidCwgcHIsIGZsYWdz
KTsKKwkJc2xlZXBxX2xvY2soaWRlbnQpOworCX0gZWxzZSBpZiAoc2J0ICE9IDApIHsKKwkJc2xl
ZXBxX3JlbGVhc2UoaWRlbnQpOworCQlzbGVlcHFfc2V0X3RpbWVvdXRfc2J0KGlkZW50LCBzYnQs
IHByLCBmbGFncyk7CiAJCXNsZWVwcV9sb2NrKGlkZW50KTsKIAl9CiAJaWYgKHNidCAhPSAwICYm
IGNhdGNoKQpAQCAtMjg5LDggKzI5MywxMSBAQAogCSAqIFdlIHB1dCBvdXJzZWx2ZXMgb24gdGhl
IHNsZWVwIHF1ZXVlIGFuZCBzdGFydCBvdXIgdGltZW91dC4KIAkgKi8KIAlzbGVlcHFfYWRkKGlk
ZW50LCAmbXR4LT5sb2NrX29iamVjdCwgd21lc2csIFNMRUVQUV9TTEVFUCwgMCk7Ci0JaWYgKHNi
dCAhPSAwKQorCWlmIChzYnQgIT0gMCkgeworCQlzbGVlcHFfcmVsZWFzZShpZGVudCk7CiAJCXNs
ZWVwcV9zZXRfdGltZW91dF9zYnQoaWRlbnQsIHNidCwgcHIsIGZsYWdzKTsKKwkJc2xlZXBxX2xv
Y2soaWRlbnQpOworCX0KIAogCS8qCiAJICogQ2FuJ3QgY2FsbCBrdHJhY2Ugd2l0aCBhbnkgc3Bp
biBsb2NrcyBoZWxkIHNvIGl0IGNhbiBsb2NrIHRoZQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvaHBz
X2hlYWQvc2hhcmUvbWFuL21hbjkvTWFrZWZpbGUgYi9wcm9qZWN0cy9ocHNfaGVhZC9zaGFyZS9t
YW4vbWFuOS9NYWtlZmlsZQotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9zaGFyZS9tYW4vbWFuOS9N
YWtlZmlsZQorKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zaGFyZS9tYW4vbWFuOS9NYWtlZmlsZQpA
QCAtMTU3Myw2ICsxNTczLDcgQEAKIAl0aW1lb3V0LjkgY2FsbG91dF9hY3RpdmUuOSBcCiAJdGlt
ZW91dC45IGNhbGxvdXRfZGVhY3RpdmF0ZS45IFwKIAl0aW1lb3V0LjkgY2FsbG91dF9kcmFpbi45
IFwKKwl0aW1lb3V0LjkgY2FsbG91dF9kcmFpbl9hc3luYy45IFwKIAl0aW1lb3V0LjkgY2FsbG91
dF9oYW5kbGVfaW5pdC45IFwKIAl0aW1lb3V0LjkgY2FsbG91dF9pbml0LjkgXAogCXRpbWVvdXQu
OSBjYWxsb3V0X2luaXRfbXR4LjkgXApkaWZmIC0tZ2l0IGEvcHJvamVjdHMvaHBzX2hlYWQvc2hh
cmUvbWFuL21hbjkvdGltZW91dC45IGIvcHJvamVjdHMvaHBzX2hlYWQvc2hhcmUvbWFuL21hbjkv
dGltZW91dC45Ci0tLSBhL3Byb2plY3RzL2hwc19oZWFkL3NoYXJlL21hbi9tYW45L3RpbWVvdXQu
OQorKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zaGFyZS9tYW4vbWFuOS90aW1lb3V0LjkKQEAgLTI5
LDEzICsyOSwxNCBAQAogLlwiCiAuXCIgJEZyZWVCU0QkCiAuXCIKLS5EZCBPY3RvYmVyIDgsIDIw
MTQKKy5EZCBKYW51YXJ5IDI0LCAyMDE1CiAuRHQgVElNRU9VVCA5CiAuT3MKIC5TaCBOQU1FCiAu
Tm0gY2FsbG91dF9hY3RpdmUgLAogLk5tIGNhbGxvdXRfZGVhY3RpdmF0ZSAsCiAuTm0gY2FsbG91
dF9kcmFpbiAsCisuTm0gY2FsbG91dF9kcmFpbl9hc3luYyAsCiAuTm0gY2FsbG91dF9oYW5kbGVf
aW5pdCAsCiAuTm0gY2FsbG91dF9pbml0ICwKIC5ObSBjYWxsb3V0X2luaXRfbXR4ICwKQEAgLTYz
LDI1NiArNjQsMjM0IEBACiAuSW4gc3lzL3N5c3RtLmgKIC5CZCAtbGl0ZXJhbAogdHlwZWRlZiB2
b2lkIHRpbWVvdXRfdCAodm9pZCAqKTsKK3R5cGVkZWYgdm9pZCBjYWxsb3V0X2Z1bmNfdCAodm9p
ZCAqKTsKIC5FZAotLkZ0IGludAotLkZuIGNhbGxvdXRfYWN0aXZlICJzdHJ1Y3QgY2FsbG91dCAq
YyIKLS5GdCB2b2lkCi0uRm4gY2FsbG91dF9kZWFjdGl2YXRlICJzdHJ1Y3QgY2FsbG91dCAqYyIK
LS5GdCBpbnQKLS5GbiBjYWxsb3V0X2RyYWluICJzdHJ1Y3QgY2FsbG91dCAqYyIKLS5GdCB2b2lk
Ci0uRm4gY2FsbG91dF9oYW5kbGVfaW5pdCAic3RydWN0IGNhbGxvdXRfaGFuZGxlICpoYW5kbGUi
Ci0uQmQgLWxpdGVyYWwKLXN0cnVjdCBjYWxsb3V0X2hhbmRsZSBoYW5kbGUgPSBDQUxMT1VUX0hB
TkRMRV9JTklUSUFMSVpFUigmaGFuZGxlKTsKLS5FZAotLkZ0IHZvaWQKLS5GbiBjYWxsb3V0X2lu
aXQgInN0cnVjdCBjYWxsb3V0ICpjIiAiaW50IG1wc2FmZSIKLS5GdCB2b2lkCi0uRm4gY2FsbG91
dF9pbml0X210eCAic3RydWN0IGNhbGxvdXQgKmMiICJzdHJ1Y3QgbXR4ICptdHgiICJpbnQgZmxh
Z3MiCi0uRnQgdm9pZAotLkZuIGNhbGxvdXRfaW5pdF9ybSAic3RydWN0IGNhbGxvdXQgKmMiICJz
dHJ1Y3Qgcm1sb2NrICpybSIgImludCBmbGFncyIKLS5GdCB2b2lkCi0uRm4gY2FsbG91dF9pbml0
X3J3ICJzdHJ1Y3QgY2FsbG91dCAqYyIgInN0cnVjdCByd2xvY2sgKnJ3IiAiaW50IGZsYWdzIgot
LkZ0IGludAotLkZuIGNhbGxvdXRfcGVuZGluZyAic3RydWN0IGNhbGxvdXQgKmMiCi0uRnQgaW50
Ci0uRm4gY2FsbG91dF9yZXNldCAic3RydWN0IGNhbGxvdXQgKmMiICJpbnQgdGlja3MiICJ0aW1l
b3V0X3QgKmZ1bmMiICJ2b2lkICphcmciCi0uRnQgaW50Ci0uRm4gY2FsbG91dF9yZXNldF9jdXJj
cHUgInN0cnVjdCBjYWxsb3V0ICpjIiAiaW50IHRpY2tzIiAidGltZW91dF90ICpmdW5jIiBcCi0i
dm9pZCAqYXJnIgotLkZ0IGludAotLkZuIGNhbGxvdXRfcmVzZXRfb24gInN0cnVjdCBjYWxsb3V0
ICpjIiAiaW50IHRpY2tzIiAidGltZW91dF90ICpmdW5jIiBcCi0idm9pZCAqYXJnIiAiaW50IGNw
dSIKLS5GdCBpbnQKLS5GbiBjYWxsb3V0X3Jlc2V0X3NidCAic3RydWN0IGNhbGxvdXQgKmMiICJz
YmludGltZV90IHNidCIgXAotInNiaW50aW1lX3QgcHIiICJ0aW1lb3V0X3QgKmZ1bmMiICJ2b2lk
ICphcmciICJpbnQgZmxhZ3MiCi0uRnQgaW50Ci0uRm4gY2FsbG91dF9yZXNldF9zYnRfY3VyY3B1
ICJzdHJ1Y3QgY2FsbG91dCAqYyIgInNiaW50aW1lX3Qgc2J0IiBcCi0ic2JpbnRpbWVfdCBwciIg
InRpbWVvdXRfdCAqZnVuYyIgInZvaWQgKmFyZyIgImludCBmbGFncyIKLS5GdCBpbnQKLS5GbiBj
YWxsb3V0X3Jlc2V0X3NidF9vbiAic3RydWN0IGNhbGxvdXQgKmMiICJzYmludGltZV90IHNidCIg
XAotInNiaW50aW1lX3QgcHIiICJ0aW1lb3V0X3QgKmZ1bmMiICJ2b2lkICphcmciICJpbnQgY3B1
IiAiaW50IGZsYWdzIgotLkZ0IGludAotLkZuIGNhbGxvdXRfc2NoZWR1bGUgInN0cnVjdCBjYWxs
b3V0ICpjIiAiaW50IHRpY2tzIgotLkZ0IGludAotLkZuIGNhbGxvdXRfc2NoZWR1bGVfY3VyY3B1
ICJzdHJ1Y3QgY2FsbG91dCAqYyIgImludCB0aWNrcyIKLS5GdCBpbnQKLS5GbiBjYWxsb3V0X3Nj
aGVkdWxlX29uICJzdHJ1Y3QgY2FsbG91dCAqYyIgImludCB0aWNrcyIgImludCBjcHUiCi0uRnQg
aW50Ci0uRm4gY2FsbG91dF9zY2hlZHVsZV9zYnQgInN0cnVjdCBjYWxsb3V0ICpjIiAic2JpbnRp
bWVfdCBzYnQiIFwKLSJzYmludGltZV90IHByIiAiaW50IGZsYWdzIgotLkZ0IGludAotLkZuIGNh
bGxvdXRfc2NoZWR1bGVfc2J0X2N1cmNwdSAic3RydWN0IGNhbGxvdXQgKmMiICJzYmludGltZV90
IHNidCIgXAotInNiaW50aW1lX3QgcHIiICJpbnQgZmxhZ3MiCi0uRnQgaW50Ci0uRm4gY2FsbG91
dF9zY2hlZHVsZV9zYnRfb24gInN0cnVjdCBjYWxsb3V0ICpjIiAic2JpbnRpbWVfdCBzYnQiIFwK
LSJzYmludGltZV90IHByIiAiaW50IGNwdSIgImludCBmbGFncyIKLS5GdCBpbnQKLS5GbiBjYWxs
b3V0X3N0b3AgInN0cnVjdCBjYWxsb3V0ICpjIgotLkZ0IHN0cnVjdCBjYWxsb3V0X2hhbmRsZQot
LkZuIHRpbWVvdXQgInRpbWVvdXRfdCAqZnVuYyIgInZvaWQgKmFyZyIgImludCB0aWNrcyIKLS5G
dCB2b2lkCi0uRm4gdW50aW1lb3V0ICJ0aW1lb3V0X3QgKmZ1bmMiICJ2b2lkICphcmciICJzdHJ1
Y3QgY2FsbG91dF9oYW5kbGUgaGFuZGxlIgogLlNoIERFU0NSSVBUSU9OCiBUaGUKIC5ObSBjYWxs
b3V0Ci1BUEkgaXMgdXNlZCB0byBzY2hlZHVsZSBhIGNhbGwgdG8gYW4gYXJiaXRyYXJ5IGZ1bmN0
aW9uIGF0IGEgc3BlY2lmaWMKLXRpbWUgaW4gdGhlIGZ1dHVyZS4KLUNvbnN1bWVycyBvZiB0aGlz
IEFQSSBhcmUgcmVxdWlyZWQgdG8gYWxsb2NhdGUgYSBjYWxsb3V0IHN0cnVjdHVyZQotLlBxIHN0
cnVjdCBjYWxsb3V0CitBUEkgaXMgdXNlZCB0byBzY2hlZHVsZSBhIG9uZS10aW1lIGNhbGwgdG8g
YW4gYXJiaXRyYXJ5IGZ1bmN0aW9uIGF0IGEKK3NwZWNpZmljIHRpbWUgaW4gdGhlIGZ1dHVyZS4K
K0NvbnN1bWVycyBvZiB0aGlzIEFQSSBhcmUgcmVxdWlyZWQgdG8gYWxsb2NhdGUgYQorLkZ0IHN0
cnVjdCBjYWxsb3V0CiBmb3IgZWFjaCBwZW5kaW5nIGZ1bmN0aW9uIGludm9jYXRpb24uCi1UaGlz
IHN0cnVjdHVyZSBzdG9yZXMgc3RhdGUgYWJvdXQgdGhlIHBlbmRpbmcgZnVuY3Rpb24gaW52b2Nh
dGlvbiBpbmNsdWRpbmcKLXRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYW5kIHRoZSB0aW1lIGF0
IHdoaWNoIHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgaW52b2tlZC4KLVBlbmRpbmcgZnVuY3Rpb24g
Y2FsbHMgY2FuIGJlIGNhbmNlbGxlZCBvciByZXNjaGVkdWxlZCB0byBhIGRpZmZlcmVudCB0aW1l
LgotSW4gYWRkaXRpb24sCi1hIGNhbGxvdXQgc3RydWN0dXJlIG1heSBiZSByZXVzZWQgdG8gc2No
ZWR1bGUgYSBuZXcgZnVuY3Rpb24gY2FsbCBhZnRlciBhCi1zY2hlZHVsZWQgY2FsbCBpcyBjb21w
bGV0ZWQuCi0uUHAKLUNhbGxvdXRzIG9ubHkgcHJvdmlkZSBhIHNpbmdsZS1zaG90IG1vZGUuCi1J
ZiBhIGNvbnN1bWVyIHJlcXVpcmVzIGEgcGVyaW9kaWMgdGltZXIsCi1pdCBtdXN0IGV4cGxpY2l0
bHkgcmVzY2hlZHVsZSBlYWNoIGZ1bmN0aW9uIGNhbGwuCi1UaGlzIGlzIG5vcm1hbGx5IGRvbmUg
YnkgcmVzY2hlZHVsaW5nIHRoZSBzdWJzZXF1ZW50IGNhbGwgd2l0aGluIHRoZSBjYWxsZWQKLWZ1
bmN0aW9uLgotLlBwCi1DYWxsb3V0IGZ1bmN0aW9ucyBtdXN0IG5vdCBzbGVlcC4KLVRoZXkgbWF5
IG5vdCBhY3F1aXJlIHNsZWVwYWJsZSBsb2NrcywKLXdhaXQgb24gY29uZGl0aW9uIHZhcmlhYmxl
cywKLXBlcmZvcm0gYmxvY2tpbmcgYWxsb2NhdGlvbiByZXF1ZXN0cywKLW9yIGludm9rZSBhbnkg
b3RoZXIgYWN0aW9uIHRoYXQgbWlnaHQgc2xlZXAuCi0uUHAKLUVhY2ggY2FsbG91dCBzdHJ1Y3R1
cmUgbXVzdCBiZSBpbml0aWFsaXplZCBieQotLkZuIGNhbGxvdXRfaW5pdCAsCi0uRm4gY2FsbG91
dF9pbml0X210eCAsCi0uRm4gY2FsbG91dF9pbml0X3JtICwKLW9yCi0uRm4gY2FsbG91dF9pbml0
X3J3Ci1iZWZvcmUgaXQgaXMgcGFzc2VkIHRvIGFueSBvZiB0aGUgb3RoZXIgY2FsbG91dCBmdW5j
dGlvbnMuCiBUaGUKKy5GdCBzdHJ1Y3QgY2FsbG91dAorc3RvcmVzIHRoZSBmdWxsIHN0YXRlIGFi
b3V0IGFueSBwZW5kaW5nIGZ1bmN0aW9uIGNhbGwgYW5kCittdXN0IGJlIGRyYWluZWQgYnkgYSBj
YWxsIHRvCisuRm4gY2FsbG91dF9kcmFpbgorb3IKKy5GbiBjYWxsb3V0X2RyYWluX2FzeW5jCiti
ZWZvcmUgZnJlZWluZy4KKy5TaCBJTklUSUFMSVpBVElPTgorLkZ0IHZvaWQKKy5GbiBjYWxsb3V0
X2hhbmRsZV9pbml0ICJzdHJ1Y3QgY2FsbG91dF9oYW5kbGUgKmhhbmRsZSIKK1RoaXMgZnVuY3Rp
b24gaXMgZGVwcmVjYXRlZC4KK1BsZWFzZSB1c2UKIC5GbiBjYWxsb3V0X2luaXQKLWZ1bmN0aW9u
IGluaXRpYWxpemVzIGEgY2FsbG91dCBzdHJ1Y3R1cmUgaW4KLS5GYSBjCi10aGF0IGlzIG5vdCBh
c3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsb2NrLgoraW5zdGVhZC4KK1RoaXMgZnVuY3Rpb24g
aXMgdXNlZCB0byBwcmVwYXJlIGEKKy5GdCBzdHJ1Y3QgY2FsbG91dF9oYW5kbGUKK2JlZm9yZSBp
dCBjYW4gYmUgdXNlZCB0aGUgZmlyc3QgdGltZS4KK0lmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
IG9uIGEgcGVuZGluZyB0aW1lb3V0LCB0aGUgcGVuZGluZyB0aW1lb3V0CitjYW5ub3QgYmUgY2Fu
Y2VsbGVkIGFuZCB0aGUKKy5GbiB1bnRpbWVvdXQKK2Z1bmN0aW9uIHdpbGwgcmV0dXJuIGFzIGlm
IG5vIHRpbWVvdXQgd2FzIHBlbmRpbmcuCisuUHAKKy5GbiBDQUxMT1VUX0hBTkRMRV9JTklUSUFM
SVpFUiAiJmhhbmRsZSIKK1RoaXMgbWFjcm8gaXMgZGVwcmVjYXRlZC4KK1RoaXMgbWFjcm8gaXMg
dXNlZCB0byBzdGF0aWNhbGx5IGluaXRpYWxpemUgYQorLkZ0IHN0cnVjdCBjYWxsb3V0X2hhbmRs
ZSAuCitQbGVhc2UgdXNlCisuRm4gY2FsbG91dF9pbml0CitpbnN0ZWFkLgorLlBwCisuRnQgdm9p
ZAorLkZuIGNhbGxvdXRfaW5pdCAic3RydWN0IGNhbGxvdXQgKmMiICJpbnQgbXBzYWZlIgorVGhp
cyBmdW5jdGlvbiBwcmVwYXJlcyBhCisuRnQgc3RydWN0IGNhbGxvdXQKK2JlZm9yZSBpdCBjYW4g
YmUgdXNlZC4KK1RoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gdGhlIGNhbGxv
dXQgaXMgcGVuZGluZyBhIHRpbWVvdXQuCiBJZiB0aGUKIC5GYSBtcHNhZmUKLWFyZ3VtZW50IGlz
IHplcm8sCi10aGUgY2FsbG91dCBzdHJ1Y3R1cmUgaXMgbm90IGNvbnNpZGVyZWQgdG8gYmUKLS5E
cSBtdWx0aS1wcm9jZXNzb3Igc2FmZSA7Ci1hbmQgdGhlIEdpYW50IGxvY2sgd2lsbCBiZSBhY3F1
aXJlZCBiZWZvcmUgY2FsbGluZyB0aGUgY2FsbG91dCBmdW5jdGlvbgotYW5kIHJlbGVhc2VkIHdo
ZW4gdGhlIGNhbGxvdXQgZnVuY3Rpb24gcmV0dXJucy4KLS5QcAotVGhlCi0uRm4gY2FsbG91dF9p
bml0X210eCAsCi0uRm4gY2FsbG91dF9pbml0X3JtICwKLWFuZAotLkZuIGNhbGxvdXRfaW5pdF9y
dwotZnVuY3Rpb25zIGluaXRpYWxpemUgYSBjYWxsb3V0IHN0cnVjdHVyZSBpbgotLkZhIGMKLXRo
YXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgbG9jay4KLVRoZSBsb2NrIGlzIHNwZWNp
ZmllZCBieSB0aGUKLS5GYSBtdHggLAotLkZhIHJtICwKLW9yCi0uRmEgcncKLXBhcmFtZXRlci4K
LVRoZSBhc3NvY2lhdGVkIGxvY2sgbXVzdCBiZSBoZWxkIHdoaWxlIHN0b3BwaW5nIG9yIHJlc2No
ZWR1bGluZyB0aGUKLWNhbGxvdXQuCi1UaGUgY2FsbG91dCBzdWJzeXN0ZW0gYWNxdWlyZXMgdGhl
IGFzc29jaWF0ZWQgbG9jayBiZWZvcmUgY2FsbGluZyB0aGUKLWNhbGxvdXQgZnVuY3Rpb24gYW5k
IHJlbGVhc2VzIGl0IGFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zLgotSWYgdGhlIGNhbGxvdXQg
d2FzIGNhbmNlbGxlZCB3aGlsZSB0aGUgY2FsbG91dCBzdWJzeXN0ZW0gd2FpdGVkIGZvciB0aGUK
LWFzc29jaWF0ZWQgbG9jaywKLXRoZSBjYWxsb3V0IGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQsCi1h
bmQgdGhlIGFzc29jaWF0ZWQgbG9jayBpcyByZWxlYXNlZC4KLVRoaXMgZW5zdXJlcyB0aGF0IHN0
b3BwaW5nIG9yIHJlc2NoZWR1bGluZyB0aGUgY2FsbG91dCB3aWxsIGFib3J0IGFueQotcHJldmlv
dXNseSBzY2hlZHVsZWQgaW52b2NhdGlvbi4KLS5QcAotT25seSByZWd1bGFyIG11dGV4ZXMgbWF5
IGJlIHVzZWQgd2l0aAotLkZuIGNhbGxvdXRfaW5pdF9tdHggOwotc3BpbiBtdXRleGVzIGFyZSBu
b3Qgc3VwcG9ydGVkLgotQSBzbGVlcGFibGUgcmVhZC1tb3N0bHkgbG9jawotLlBvCi1vbmUgaW5p
dGlhbGl6ZWQgd2l0aCB0aGUKLS5EdiBSTV9TTEVFUEFCTEUKLWZsYWcKLS5QYwotbWF5IG5vdCBi
ZSB1c2VkIHdpdGgKLS5GbiBjYWxsb3V0X2luaXRfcm0gLgotU2ltaWxhcmx5LCBvdGhlciBzbGVl
cGFibGUgbG9jayB0eXBlcyBzdWNoIGFzCi0uWHIgc3ggOQotYW5kCi0uWHIgbG9ja21nciA5Ci1j
YW5ub3QgYmUgdXNlZCB3aXRoIGNhbGxvdXRzIGJlY2F1c2Ugc2xlZXBpbmcgaXMgbm90IHBlcm1p
dHRlZCBpbgotdGhlIGNhbGxvdXQgc3Vic3lzdGVtLgorYXJndW1lbnQgaXMgbm9uLXplcm8sIHRo
ZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIHJ1bm5pbmcgdW5sb2NrZWQKK2FuZCB0aGUgY2Fs
bGJhY2sgaXMgc28tY2FsbGVkICJtcHNhZmUiLgorLkJmIFN5CitJdCBpcyB0aGUgYXBwbGljYXRp
b24ncyBlbnRpcmUgcmVzcG9uc2liaWxpdHkgdG8gbm90IGNhbGwgYW55CisuRm4gY2FsbG91dF94
eHgKK2Z1bmN0aW9ucywgaW5jbHVkaW5nIHRoZQorLkZuIGNhbGxvdXRfZHJhaW4KK2Z1bmN0aW9u
LCBzaW11bHRhbmVvdXNseSBvbiB0aGUgc2FtZSBjYWxsb3V0IHdoZW4gdGhlCisuRmEgbXBzYWZl
Cithcmd1bWVudCBpcyBub24temVyby4KK090aGVyd2lzZSwgdW5kZWZpbmVkIGJlaGF2aW9yIGNh
biBoYXBwZW4uCitBdm9pZCBzaW11bHRhbmVvdXMgY2FsbHMgYnkgb2J0YWluaW5nIGFuIGV4Y2x1
c2l2ZSBsb2NrIGJlZm9yZSBjYWxsaW5nCithbnkKKy5GbiBjYWxsb3V0X3h4eAorZnVuY3Rpb25z
IG90aGVyIHRoYW4gdGhlCisuRm4gY2FsbG91dF9kcmFpbgorZnVuY3Rpb24uCisuRWYKK0lmIHRo
ZQorLkZhIG1wc2FmZQorYXJndW1lbnQgaXMgemVybywgdGhlIEdpYW50IG11dGV4IHdpbGwgYmUg
bG9ja2VkIGJlZm9yZSB0aGUgY2FsbGJhY2sKK2Z1bmN0aW9uIGlzIGNhbGxlZC4KK0lmIHRoZQor
LkZhIG1wc2FmZQorYXJndW1lbnQgaXMgemVybywgdGhlIEdpYW50IG11dGV4IGlzIGV4cGVjdGVk
IHRvIGJlIGxvY2tlZCB3aGVuIGNhbGxpbmcKK2FueQorLkZuIGNhbGxvdXRfeHh4CitmdW5jdGlv
bnMgd2hpY2ggc3RhcnQgYW5kIHN0b3AgYSBjYWxsb3V0IG90aGVyIHRoYW4gdGhlCisuRm4gY2Fs
bG91dF9kcmFpbgorZnVuY3Rpb24uCiAuUHAKLVRoZXNlCisuRnQgdm9pZAorLkZuIGNhbGxvdXRf
aW5pdF9tdHggInN0cnVjdCBjYWxsb3V0ICpjIiAic3RydWN0IG10eCAqbXR4IiAiaW50IGZsYWdz
IgorVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBhCisuRnQgc3RydWN0IGNhbGxvdXQKK2JlZm9yZSBp
dCBjYW4gYmUgdXNlZC4KK1RoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gdGhl
IGNhbGxvdXQgaXMgcGVuZGluZyBhIHRpbWVvdXQuCitUaGUKKy5GYSBtdHgKK2FyZ3VtZW50IGlz
IGEgcG9pbnRlciB0byBhIHZhbGlkIHNwaW5sb2NrIHR5cGUgb2YgbXV0ZXggb3IgYSB2YWxpZAor
cmVndWxhciBub24tc2xlZXBhYmxlIG11dGV4IHdoaWNoIHRoZSBjYWxsYmFjayBzdWJzeXN0ZW0g
d2lsbCBsb2NrCitiZWZvcmUgY2FsbGluZyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCitUaGUgc3Bl
Y2lmaWVkIG11dGV4IGlzIGV4cGVjdGVkIHRvIGJlIGxvY2tlZCB3aGVuIGNhbGxpbmcgYW55Cisu
Rm4gY2FsbG91dF94eHgKK2Z1bmN0aW9ucyB3aGljaCBzdGFydCBhbmQgc3RvcCBhIGNhbGxvdXQg
b3RoZXIgdGhhbiB0aGUKKy5GbiBjYWxsb3V0X2RyYWluCitmdW5jdGlvbi4KK1ZhbGlkCiAuRmEg
ZmxhZ3MKLW1heSBiZSBzcGVjaWZpZWQgZm9yCi0uRm4gY2FsbG91dF9pbml0X210eCAsCi0uRm4g
Y2FsbG91dF9pbml0X3JtICwKLW9yCi0uRm4gY2FsbG91dF9pbml0X3J3IDoKK2FyZToKIC5CbCAt
dGFnIC13aWR0aCAiLkR2IENBTExPVVRfUkVUVVJOVU5MT0NLRUQiCiAuSXQgRHYgQ0FMTE9VVF9S
RVRVUk5VTkxPQ0tFRAotVGhlIGNhbGxvdXQgZnVuY3Rpb24gd2lsbCByZWxlYXNlIHRoZSBhc3Nv
Y2lhdGVkIGxvY2sgaXRzZWxmLAotc28gdGhlIGNhbGxvdXQgc3Vic3lzdGVtIHNob3VsZCBub3Qg
YXR0ZW1wdCB0byB1bmxvY2sgaXQKLWFmdGVyIHRoZSBjYWxsb3V0IGZ1bmN0aW9uIHJldHVybnMu
Ci0uSXQgRHYgQ0FMTE9VVF9TSEFSRURMT0NLCi1UaGUgbG9jayBpcyBvbmx5IGFjcXVpcmVkIGlu
IHJlYWQgbW9kZSB3aGVuIHJ1bm5pbmcgdGhlIGNhbGxvdXQgaGFuZGxlci4KLVRoaXMgZmxhZyBp
cyBpZ25vcmVkIGJ5Ci0uRm4gY2FsbG91dF9pbml0X210eCAuCitUaGUgY2FsbG91dCBmdW5jdGlv
biBpcyBhc3N1bWVkIHRvIGhhdmUgcmVsZWFzZWQgdGhlIHNwZWNpZmllZCBtdXRleAorYmVmb3Jl
IHJldHVybmluZy4KKy5JdCBEdiAwCitUaGUgY2FsbG91dCBzdWJzeXN0ZW0gd2lsbCByZWxlYXNl
IHRoZSBzcGVjaWZpZWQgbXV0ZXggYWZ0ZXIgdGhlCitjYWxsb3V0IGZ1bmN0aW9uIGhhcyByZXR1
cm5lZC4KIC5FbAogLlBwCi1UaGUgZnVuY3Rpb24KLS5GbiBjYWxsb3V0X3N0b3AKLWNhbmNlbHMg
YSBjYWxsb3V0Ci0uRmEgYwotaWYgaXQgaXMgY3VycmVudGx5IHBlbmRpbmcuCi1JZiB0aGUgY2Fs
bG91dCBpcyBwZW5kaW5nLCB0aGVuCi0uRm4gY2FsbG91dF9zdG9wCi1yZXR1cm5zIGEgbm9uLXpl
cm8gdmFsdWUuCi1JZiB0aGUgY2FsbG91dCBpcyBub3Qgc2V0LAotaGFzIGFscmVhZHkgYmVlbiBz
ZXJ2aWNlZCwKLW9yIGlzIGN1cnJlbnRseSBiZWluZyBzZXJ2aWNlZCwKLXRoZW4gemVybyB3aWxs
IGJlIHJldHVybmVkLgotSWYgdGhlIGNhbGxvdXQgaGFzIGFuIGFzc29jaWF0ZWQgbG9jaywKLXRo
ZW4gdGhhdCBsb2NrIG11c3QgYmUgaGVsZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgot
LlBwCi1UaGUgZnVuY3Rpb24KLS5GbiBjYWxsb3V0X2RyYWluCi1pcyBpZGVudGljYWwgdG8KLS5G
biBjYWxsb3V0X3N0b3AKLWV4Y2VwdCB0aGF0IGl0IHdpbGwgd2FpdCBmb3IgdGhlIGNhbGxvdXQK
LS5GYSBjCi10byBjb21wbGV0ZSBpZiBpdCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLgotVGhpcyBm
dW5jdGlvbiBNVVNUIE5PVCBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBhbnkKLWxvY2tzIG9uIHdo
aWNoIHRoZSBjYWxsb3V0IG1pZ2h0IGJsb2NrLCBvciBkZWFkbG9jayB3aWxsIHJlc3VsdC4KLU5v
dGUgdGhhdCBpZiB0aGUgY2FsbG91dCBzdWJzeXN0ZW0gaGFzIGFscmVhZHkgYmVndW4gcHJvY2Vz
c2luZyB0aGlzCi1jYWxsb3V0LCB0aGVuIHRoZSBjYWxsb3V0IGZ1bmN0aW9uIG1heSBiZSBpbnZv
a2VkIGJlZm9yZQotLkZuIGNhbGxvdXRfZHJhaW4KLXJldHVybnMuCi1Ib3dldmVyLCB0aGUgY2Fs
bG91dCBzdWJzeXN0ZW0gZG9lcyBndWFyYW50ZWUgdGhhdCB0aGUgY2FsbG91dCB3aWxsIGJlCi1m
dWxseSBzdG9wcGVkIGJlZm9yZQotLkZuIGNhbGxvdXRfZHJhaW4KLXJldHVybnMuCisuRnQgdm9p
ZAorLkZuIGNhbGxvdXRfaW5pdF9ybSAic3RydWN0IGNhbGxvdXQgKmMiICJzdHJ1Y3Qgcm1sb2Nr
ICpybSIgImludCBmbGFncyIKK1RoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0bworLkZuIGNhbGxv
dXRfaW5pdF9tdHggLAorYnV0IGl0IGFjY2VwdHMgYSByZWFkLW1vc3RseSB0eXBlIG9mIGxvY2su
CitUaGUgcmVhZC1tb3N0bHkgbG9jayBtdXN0IG5vdCBiZSBpbml0aWFsaXplZCB3aXRoIHRoZQor
LkR2IFJNX1NMRUVQQUJMRQorZmxhZy4KIC5QcAotVGhlCisuRnQgdm9pZAorLkZuIGNhbGxvdXRf
aW5pdF9ydyAic3RydWN0IGNhbGxvdXQgKmMiICJzdHJ1Y3Qgcndsb2NrICpydyIgImludCBmbGFn
cyIKK1RoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0bworLkZuIGNhbGxvdXRfaW5pdF9tdHggLAor
YnV0IGl0IGFjY2VwdHMgYSByZWFkL3dyaXRlIHR5cGUgb2YgbG9jay4KKy5TaCBTQ0hFRFVMSU5H
IENBTExPVVRTCisuRnQgc3RydWN0IGNhbGxvdXRfaGFuZGxlCisuRm4gdGltZW91dCAidGltZW91
dF90ICpmdW5jIiAidm9pZCAqYXJnIiAiaW50IHRpY2tzIgorVGhpcyBmdW5jdGlvbiBpcyBkZXBy
ZWNhdGVkLgorUGxlYXNlIHVzZQogLkZuIGNhbGxvdXRfcmVzZXQKLWFuZAotLkZuIGNhbGxvdXRf
c2NoZWR1bGUKLWZ1bmN0aW9uIGZhbWlsaWVzIHNjaGVkdWxlIGEgZnV0dXJlIGZ1bmN0aW9uIGlu
dm9jYXRpb24gZm9yIGNhbGxvdXQKLS5GYSBjIC4KLUlmCi0uRmEgYwotYWxyZWFkeSBoYXMgYSBw
ZW5kaW5nIGNhbGxvdXQsCi1pdCBpcyBjYW5jZWxsZWQgYmVmb3JlIHRoZSBuZXcgaW52b2NhdGlv
biBpcyBzY2hlZHVsZWQuCi1UaGVzZSBmdW5jdGlvbnMgcmV0dXJuIGEgbm9uLXplcm8gdmFsdWUg
aWYgYSBwZW5kaW5nIGNhbGxvdXQgd2FzIGNhbmNlbGxlZAotYW5kIHplcm8gaWYgdGhlcmUgd2Fz
IG5vIHBlbmRpbmcgY2FsbG91dC4KLUlmIHRoZSBjYWxsb3V0IGhhcyBhbiBhc3NvY2lhdGVkIGxv
Y2ssCi10aGVuIHRoYXQgbG9jayBtdXN0IGJlIGhlbGQgd2hlbiBhbnkgb2YgdGhlc2UgZnVuY3Rp
b25zIGFyZSBjYWxsZWQuCi0uUHAKLVRoZSB0aW1lIGF0IHdoaWNoIHRoZSBjYWxsb3V0IGZ1bmN0
aW9uIHdpbGwgYmUgaW52b2tlZCBpcyBkZXRlcm1pbmVkIGJ5Ci1laXRoZXIgdGhlCi0uRmEgdGlj
a3MKLWFyZ3VtZW50IG9yIHRoZQotLkZhIHNidCAsCi0uRmEgcHIgLAotYW5kCi0uRmEgZmxhZ3MK
LWFyZ3VtZW50cy4KLVdoZW4KLS5GYSB0aWNrcwotaXMgdXNlZCwKLXRoZSBjYWxsb3V0IGlzIHNj
aGVkdWxlZCB0byBleGVjdXRlIGFmdGVyCitpbnN0ZWFkLgorVGhpcyBmdW5jdGlvbiBzY2hlZHVs
ZXMgYSBjYWxsIHRvCisuRmEgZnVuYwordG8gdGFrZSBwbGFjZSBhZnRlcgogLkZhIHRpY2tzIE5z
IE5vIC9oegogc2Vjb25kcy4KIE5vbi1wb3NpdGl2ZSB2YWx1ZXMgb2YKIC5GYSB0aWNrcwogYXJl
IHNpbGVudGx5IGNvbnZlcnRlZCB0byB0aGUgdmFsdWUKIC5TcSAxIC4KLS5QcAogVGhlCi0uRmEg
c2J0ICwKLS5GYSBwciAsCi1hbmQKLS5GYSBmbGFncwotYXJndW1lbnRzIHByb3ZpZGUgbW9yZSBj
b250cm9sIG92ZXIgdGhlIHNjaGVkdWxlZCB0aW1lIGluY2x1ZGluZwotc3VwcG9ydCBmb3IgaGln
aGVyIHJlc29sdXRpb24gdGltZXMsCi1zcGVjaWZ5aW5nIHRoZSBwcmVjaXNpb24gb2YgdGhlIHNj
aGVkdWxlZCB0aW1lLAotYW5kIHNldHRpbmcgYW4gYWJzb2x1dGUgZGVhZGxpbmUgaW5zdGVhZCBv
ZiBhIHJlbGF0aXZlIHRpbWVvdXQuCi1UaGUgY2FsbG91dCBpcyBzY2hlZHVsZWQgdG8gZXhlY3V0
ZSBpbiBhIHRpbWUgd2luZG93IHdoaWNoIGJlZ2lucyBhdAotdGhlIHRpbWUgc3BlY2lmaWVkIGlu
CisuRmEgZnVuYworYXJndW1lbnQgaXMgYSB2YWxpZCBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhh
dCB0YWtlcyBhIHNpbmdsZQorLkZhIHZvaWQgKgorYXJndW1lbnQuCitVcG9uIGludm9jYXRpb24s
IHRoZQorLkZhIGZ1bmMKK2Z1bmN0aW9uIHdpbGwgcmVjZWl2ZQorLkZhIGFyZworYXMgaXRzIG9u
bHkgYXJndW1lbnQuCitUaGUgR2lhbnQgbG9jayBpcyBsb2NrZWQgd2hlbiB0aGUKKy5GYSBhcmcK
K2Z1bmN0aW9uIGlzIGludm9rZWQgYW5kIHNob3VsZCBub3QgYmUgdW5sb2NrZWQgYnkgdGhpcyBm
dW5jdGlvbi4KK1RoZSByZXR1cm5lZCB2YWx1ZSBmcm9tCisuRm4gdGltZW91dAoraXMgYQorLkZ0
IHN0cnVjdCBjYWxsb3V0X2hhbmRsZQorc3RydWN0dXJlIHdoaWNoIGNhbiBiZSB1c2VkIGluIGNv
bmp1bmN0aW9uIHdpdGggdGhlCisuRm4gdW50aW1lb3V0CitmdW5jdGlvbiB0byByZXF1ZXN0IHRo
YXQgYSBzY2hlZHVsZWQgdGltZW91dCBiZSBjYW5jZWxsZWQuCitBcyBoYW5kbGVzIGFyZSByZWN5
Y2xlZCBieSB0aGUgc3lzdGVtLCBpdCBpcyBwb3NzaWJsZSwgYWx0aG91Z2ggdW5saWtlbHksCit0
aGF0IGEgaGFuZGxlIGZyb20gb25lIGludm9jYXRpb24gb2YKKy5GbiB0aW1lb3V0CittYXkgbWF0
Y2ggdGhlIGhhbmRsZSBvZiBhbm90aGVyIGludm9jYXRpb24gb2YKKy5GbiB0aW1lb3V0CitpZiBi
b3RoIGNhbGxzIHVzZWQgdGhlIHNhbWUgZnVuY3Rpb24gcG9pbnRlciBhbmQgYXJndW1lbnQsIGFu
ZCB0aGUgZmlyc3QKK3RpbWVvdXQgaXMgZXhwaXJlZCBvciBjYW5jZWxsZWQgYmVmb3JlIHRoZSBz
ZWNvbmQgY2FsbC4KK1BsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gYW5kIGFyZ3VtZW50
IHBvaW50ZXJzIGFyZSB1bmlxdWUgd2hlbiB1c2luZyB0aGlzIGZ1bmN0aW9uLgorLlBwCisuRnQg
aW50CisuRm4gY2FsbG91dF9yZXNldCAic3RydWN0IGNhbGxvdXQgKmMiICJpbnQgdGlja3MiICJj
YWxsb3V0X2Z1bmNfdCAqZnVuYyIgInZvaWQgKmFyZyIKK1RoaXMgZnVuY3Rpb24gaXMgdXNlZCB0
byBzY2hlZHVsZSBvciByZS1zY2hlZHVsZSBhIGNhbGxvdXQuCitUaGlzIGZ1bmN0aW9uIGF0IGZp
cnN0IHN0b3BzIHRoZSBjYWxsb3V0IGdpdmVuIGJ5IHRoZQorLkZhIGMKK2FyZ3VtZW50LCBpZiBh
bnkuCitUaGVuIGl0IHdpbGwgc3RhcnQgdGhlIGNhbGxvdXQgZ2l2ZW4gYnkgdGhlCisuRmEgYwor
YXJndW1lbnQuCitUaGUgcmVsYXRpdmUgdGltZSB1bnRpbCB0aGUgdGltZW91dCBjYWxsYmFjayBo
YXBwZW5zIGlzIGdpdmVuIGJ5IHRoZQorLkZhIHRpY2tzCithcmd1bWVudC4KK1RoZSBudW1iZXIg
b2YgdGlja3MgaW4gYSBzZWNvbmQgaXMgZGVmaW5lZCBieQorLkR2IGh6CithbmQgY2FuIHZhcnkg
ZnJvbSBzeXN0ZW0gdG8gc3lzdGVtLgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLXplcm8g
dmFsdWUgaWYgdGhlIGdpdmVuIGNhbGxvdXQgd2FzIHBlbmRpbmcgYW5kCit0aGUgY2FsbGJhY2sg
ZnVuY3Rpb24gd2FzIHByZXZlbnRlZCBmcm9tIGJlaW5nIGNhbGxlZC4KK090aGVyd2lzZSwgYSB2
YWx1ZSBvZiB6ZXJvIGlzIHJldHVybmVkLgorSWYgYSBsb2NrIGlzIGFzc29jaWF0ZWQgd2l0aCB0
aGUgY2FsbG91dCBnaXZlbiBieSB0aGUKKy5GYSBjCithcmd1bWVudCBhbmQgaXQgaXMgZXhjbHVz
aXZseSBsb2NrZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhpcworZnVuY3Rpb24g
d2lsbCBhbHdheXMgZW5zdXJlIHRoYXQgcHJldmlvdXMgY2FsbGJhY2sgZnVuY3Rpb24sIGlmIGFu
eSwKK2lzIG5ldmVyIHJlYWNoZWQuCitJbiBvdGhlciB3b3JkcywgdGhlIGNhbGxvdXQgd2lsbCBi
ZSBhdG9taWNhbGx5IHJlc3RhcnRlZC4KK090aGVyd2lzZSwgdGhlcmUgaXMgbm8gc3VjaCBndWFy
YW50ZWUuCitUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgZ2l2ZW4gYnkKKy5GYSBmdW5jCithbmQg
aXRzIGZ1bmN0aW9uIGFyZ3VtZW50IGlzIGdpdmVuIGJ5CisuRmEgYXJnIC4KKy5QcAorLkZ0IGlu
dAorLkZuIGNhbGxvdXRfcmVzZXRfY3VyY3B1ICJzdHJ1Y3QgY2FsbG91dCAqYyIgImludCB0aWNr
cyIgImNhbGxvdXRfZnVuY190ICpmdW5jIiBcCisidm9pZCAqYXJnIgorVGhpcyBmdW5jdGlvbiB3
b3JrcyB0aGUgc2FtZSBsaWtlIHRoZQorLkZuIGNhbGxvdXRfcmVzZXQKK2Z1bmN0aW9uIGV4Y2Vw
dCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZ2l2ZW4gYnkgdGhlCisuRmEgZnVuYworYXJndW1lbnQg
d2lsbCBiZSBleGVjdXRlZCBvbiB0aGUgc2FtZSBDUFUgd2hpY2ggY2FsbGVkIHRoaXMgZnVuY3Rp
b24uCisuUHAKKy5GdCBpbnQKKy5GbiBjYWxsb3V0X3Jlc2V0X29uICJzdHJ1Y3QgY2FsbG91dCAq
YyIgImludCB0aWNrcyIgImNhbGxvdXRfZnVuY190ICpmdW5jIiBcCisidm9pZCAqYXJnIiAiaW50
IGNwdSIKK1RoaXMgZnVuY3Rpb24gd29ya3MgdGhlIHNhbWUgbGlrZSB0aGUKKy5GbiBjYWxsb3V0
X3Jlc2V0CitmdW5jdGlvbiBleGNlcHQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGdpdmVuIGJ5IHRo
ZQorLkZhIGZ1bmMKK2FyZ3VtZW50IHdpbGwgYmUgZXhlY3V0ZWQgb24gdGhlIENQVSBnaXZlbiBi
eSB0aGUKKy5GYSBjcHUKK2FyZ3VtZW50LgorLlBwCisuRnQgaW50CisuRm4gY2FsbG91dF9yZXNl
dF9zYnQgInN0cnVjdCBjYWxsb3V0ICpjIiAic2JpbnRpbWVfdCBzYnQiIFwKKyJzYmludGltZV90
IHByIiAiY2FsbG91dF9mdW5jX3QgKmZ1bmMiICJ2b2lkICphcmciICJpbnQgZmxhZ3MiCitUaGlz
IGZ1bmN0aW9uIHdvcmtzIHRoZSBzYW1lIGxpa2UgdGhlCisuRm4gY2FsbG91dF9yZXNldAorZnVu
Y3Rpb24gZXhjZXB0IHRoZSByZWxhdGl2ZSBvciBhYnNvbHV0ZSB0aW1lIGFmdGVyIHdoaWNoIHRo
ZSB0aW1lb3V0CitjYWxsYmFjayBzaG91bGQgaGFwcGVuIGlzIGdpdmVuIGJ5IHRoZQogLkZhIHNi
dAotYW5kIGV4dGVuZHMgZm9yIHRoZSBhbW91bnQgb2YgdGltZSBzcGVjaWZpZWQgaW4KK2FyZ3Vt
ZW50IGFuZCBleHRlbmRzIGZvciB0aGUgYW1vdW50IG9mIHRpbWUgc3BlY2lmaWVkIGluCiAuRmEg
cHIgLgorVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gaGlnaCBwcmVjaXNpb24gdGltZW91dHMg
YXJlIG5lZWRlZC4KIElmCiAuRmEgc2J0CiBzcGVjaWZpZXMgYSB0aW1lIGluIHRoZSBwYXN0LApA
QCAtMzIyLDEyICszMDEsMTMgQEAKIGFsbG93cyB0aGUgY2FsbG91dCBzdWJzeXN0ZW0gdG8gY29h
bGVzY2UgY2FsbG91dHMgc2NoZWR1bGVkIGNsb3NlIHRvIGVhY2gKIG90aGVyIGludG8gZmV3ZXIg
dGltZXIgaW50ZXJydXB0cywKIHJlZHVjaW5nIHByb2Nlc3Npbmcgb3ZlcmhlYWQgYW5kIHBvd2Vy
IGNvbnN1bXB0aW9uLgotVGhlc2UKK1RoZQogLkZhIGZsYWdzCi1tYXkgYmUgc3BlY2lmaWVkIHRv
IGFkanVzdCB0aGUgaW50ZXJwcmV0YXRpb24gb2YKK2FyZ3VtZW50IG1heSBiZSBub24temVybyB0
byBhZGp1c3QgdGhlIGludGVycHJldGF0aW9uIG9mIHRoZQogLkZhIHNidAogYW5kCi0uRmEgcHIg
OgorLkZhIHByCithcmd1bWVudHM6CiAuQmwgLXRhZyAtd2lkdGggIi5EdiBDX0RJUkVDVF9FWEVD
IgogLkl0IER2IENfQUJTT0xVVEUKIEhhbmRsZSB0aGUKQEAgLTM0Nyw3ICszMjcsNyBAQAogYW5k
IHNob3VsZCBiZSBhcyBzbWFsbCBhcyBwb3NzaWJsZSBiZWNhdXNlIHRoZXkgcnVuIHdpdGggYWJz
b2x1dGUgcHJpb3JpdHkuCiAuSXQgRm4gQ19QUkVMCiBTcGVjaWZpZXMgcmVsYXRpdmUgZXZlbnQg
dGltZSBwcmVjaXNpb24gYXMgYmluYXJ5IGxvZ2FyaXRobSBvZiB0aW1lIGludGVydmFsCi1kaXZp
ZGVkIGJ5IGFjY2VwdGFibGUgdGltZSBkZXZpYXRpb246IDEgLS0gMS8yLCAyIC0tIDEvNCwgZXRj
LgorZGl2aWRlZCBieSBhY2NlcHRhYmxlIHRpbWUgZGV2aWF0aW9uOiAxIC0tIDEvMiwgMiAtLSAx
LzQsIGFuZCBzbyBvbi4KIE5vdGUgdGhhdCB0aGUgbGFyZ2VyIG9mCiAuRmEgcHIKIG9yIHRoaXMg
dmFsdWUgaXMgdXNlZCBhcyB0aGUgbGVuZ3RoIG9mIHRoZSB0aW1lIHdpbmRvdy4KQEAgLTM2MCwx
MTcgKzM0MCwyMTYgQEAKIGNhbGxzIGlmIHBvc3NpYmxlLgogLkVsCiAuUHAKLVRoZQotLkZuIGNh
bGxvdXRfcmVzZXQKLWZ1bmN0aW9ucyBhY2NlcHQgYQorLkZ0IGludAorLkZuIGNhbGxvdXRfcmVz
ZXRfc2J0X2N1cmNwdSAic3RydWN0IGNhbGxvdXQgKmMiICJzYmludGltZV90IHNidCIgXAorInNi
aW50aW1lX3QgcHIiICJjYWxsb3V0X2Z1bmNfdCAqZnVuYyIgInZvaWQgKmFyZyIgImludCBmbGFn
cyIKK1RoaXMgZnVuY3Rpb24gd29ya3MgbGlrZQorLkZuIGNhbGxvdXRfcmVzZXRfc2J0ICwKK2V4
Y2VwdCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZ2l2ZW4gYnkgdGhlCiAuRmEgZnVuYwotYXJndW1l
bnQgd2hpY2ggaWRlbnRpZmllcyB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHRp
bWUgZXhwaXJlcy4KLUl0IG11c3QgYmUgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCB0YWtl
cyBhIHNpbmdsZQotLkZhIHZvaWQgKgotYXJndW1lbnQuCi1VcG9uIGludm9jYXRpb24sCithcmd1
bWVudCB3aWxsIGJlIGV4ZWN1dGVkIG9uIHRoZSBDUFUgd2hpY2ggY2FsbGVkIHRoaXMgZnVuY3Rp
b24uCisuUHAKKy5GdCBpbnQKKy5GbiBjYWxsb3V0X3Jlc2V0X3NidF9vbiAic3RydWN0IGNhbGxv
dXQgKmMiICJzYmludGltZV90IHNidCIgXAorInNiaW50aW1lX3QgcHIiICJjYWxsb3V0X2Z1bmNf
dCAqZnVuYyIgInZvaWQgKmFyZyIgImludCBjcHUiICJpbnQgZmxhZ3MiCitUaGlzIGZ1bmN0aW9u
IHdvcmtzIGxpa2UKKy5GbiBjYWxsb3V0X3Jlc2V0X3NidCAsCitleGNlcHQgdGhlIGNhbGxiYWNr
IGZ1bmN0aW9uIGdpdmVuIGJ5CiAuRmEgZnVuYwotd2lsbCByZWNlaXZlCi0uRmEgYXJnCi1hcyBp
dHMgb25seSBhcmd1bWVudC4KLVRoZQotLkZuIGNhbGxvdXRfc2NoZWR1bGUKLWZ1bmN0aW9ucyBy
ZXVzZSB0aGUKK3dpbGwgYmUgZXhlY3V0ZWQgb24gdGhlIENQVSBnaXZlbiBieQorLkZhIGNwdSAu
CisuUHAKKy5GdCBpbnQKKy5GbiBjYWxsb3V0X3NjaGVkdWxlICJzdHJ1Y3QgY2FsbG91dCAqYyIg
ImludCB0aWNrcyIKK1RoaXMgZnVuY3Rpb24gd29ya3MgdGhlIHNhbWUgbGlrZSB0aGUKKy5GbiBj
YWxsb3V0X3Jlc2V0CitmdW5jdGlvbiBleGNlcHQgaXQgcmUtdXNlcyB0aGUgY2FsbGJhY2sgZnVu
Y3Rpb24gYW5kIHRoZSBjYWxsYmFjayBhcmd1bWVudAorYWxyZWFkeSBzdG9yZWQgaW4gdGhlCisu
UHEgc3RydWN0IGNhbGxvdXQKK3N0cnVjdHVyZS4KKy5QcAorLkZ0IGludAorLkZuIGNhbGxvdXRf
c2NoZWR1bGVfY3VyY3B1ICJzdHJ1Y3QgY2FsbG91dCAqYyIgImludCB0aWNrcyIKK1RoaXMgZnVu
Y3Rpb24gd29ya3MgdGhlIHNhbWUgbGlrZSB0aGUKKy5GbiBjYWxsb3V0X3Jlc2V0X2N1cmNwdQor
ZnVuY3Rpb24gZXhjZXB0IGl0IHJlLXVzZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCB0aGUg
Y2FsbGJhY2sgYXJndW1lbnQKK2FscmVhZHkgc3RvcmVkIGluIHRoZQorLlBxIHN0cnVjdCBjYWxs
b3V0CitzdHJ1Y3R1cmUuCisuUHAKKy5GdCBpbnQKKy5GbiBjYWxsb3V0X3NjaGVkdWxlX29uICJz
dHJ1Y3QgY2FsbG91dCAqYyIgImludCB0aWNrcyIgImludCBjcHUiCitUaGlzIGZ1bmN0aW9uIHdv
cmtzIHRoZSBzYW1lIGxpa2UgdGhlCisuRm4gY2FsbG91dF9yZXNldF9vbgorZnVuY3Rpb24gZXhj
ZXB0IGl0IHJlLXVzZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCB0aGUgY2FsbGJhY2sgYXJn
dW1lbnQKK2FscmVhZHkgc3RvcmVkIGluIHRoZQorLlBxIHN0cnVjdCBjYWxsb3V0CitzdHJ1Y3R1
cmUuCisuUHAKKy5GdCBpbnQKKy5GbiBjYWxsb3V0X3NjaGVkdWxlX3NidCAic3RydWN0IGNhbGxv
dXQgKmMiICJzYmludGltZV90IHNidCIgXAorInNiaW50aW1lX3QgcHIiICJpbnQgZmxhZ3MiCitU
aGlzIGZ1bmN0aW9uIHdvcmtzIHRoZSBzYW1lIGxpa2UgdGhlCisuRm4gY2FsbG91dF9yZXNldF9z
YnQKK2Z1bmN0aW9uIGV4Y2VwdCBpdCByZS11c2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBhbmQg
dGhlIGNhbGxiYWNrIGFyZ3VtZW50CithbHJlYWR5IHN0b3JlZCBpbiB0aGUKKy5QcSBzdHJ1Y3Qg
Y2FsbG91dAorc3RydWN0dXJlLgorLlBwCisuRnQgaW50CisuRm4gY2FsbG91dF9zY2hlZHVsZV9z
YnRfY3VyY3B1ICJzdHJ1Y3QgY2FsbG91dCAqYyIgInNiaW50aW1lX3Qgc2J0IiBcCisic2JpbnRp
bWVfdCBwciIgImludCBmbGFncyIKK1RoaXMgZnVuY3Rpb24gd29ya3MgdGhlIHNhbWUgbGlrZSB0
aGUKKy5GbiBjYWxsb3V0X3Jlc2V0X3NidF9jdXJjcHUKK2Z1bmN0aW9uIGV4Y2VwdCBpdCByZS11
c2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgdGhlIGNhbGxiYWNrIGFyZ3VtZW50CithbHJl
YWR5IHN0b3JlZCBpbiB0aGUKKy5QcSBzdHJ1Y3QgY2FsbG91dAorc3RydWN0dXJlLgorLlBwCisu
RnQgaW50CisuRm4gY2FsbG91dF9zY2hlZHVsZV9zYnRfb24gInN0cnVjdCBjYWxsb3V0ICpjIiAi
c2JpbnRpbWVfdCBzYnQiIFwKKyJzYmludGltZV90IHByIiAiaW50IGNwdSIgImludCBmbGFncyIK
K1RoaXMgZnVuY3Rpb24gd29ya3MgdGhlIHNhbWUgbGlrZSB0aGUKKy5GbiBjYWxsb3V0X3Jlc2V0
X3NidF9vbgorZnVuY3Rpb24gZXhjZXB0IGl0IHJlLXVzZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9u
IGFuZCB0aGUgY2FsbGJhY2sgYXJndW1lbnQKK2FscmVhZHkgc3RvcmVkIGluIHRoZQorLlBxIHN0
cnVjdCBjYWxsb3V0CitzdHJ1Y3R1cmUuCisuU2ggQ0hFQ0tJTkcgVEhFIFNUQVRFIE9GIENBTExP
VVRTCisuRnQgaW50CisuRm4gY2FsbG91dF9wZW5kaW5nICJzdHJ1Y3QgY2FsbG91dCAqYyIKK1Ro
aXMgZnVuY3Rpb24gcmV0dXJucyBub24temVybyBpZiB0aGUgY2FsbG91dCBwb2ludGVkIHRvIGJ5
IHRoZQorLkZhIGMKK2FyZ3VtZW50IGlzIHBlbmRpbmcgZm9yIGNhbGxiYWNrLgorRWxzZSB0aGlz
IGZ1bmN0aW9uIHJldHVybnMgemVyby4KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIHdoZW4g
aW5zaWRlIHRoZSBjYWxsb3V0IGZ1bmN0aW9uIGlmIHRoZQorY2FsbG91dCBpcyBub3QgcmUtc2No
ZWR1bGVkLgorLlBwCisuRnQgaW50CisuRm4gY2FsbG91dF9hY3RpdmUgInN0cnVjdCBjYWxsb3V0
ICpjIgorVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGFuZCByZXR1cm5zIG5vbi16ZXJvIGlm
IHRoZSBjYWxsb3V0Citwb2ludGVkIHRvIGJ5IHRoZQorLkZhIGMKK2FyZ3VtZW50IHdhcyBzY2hl
ZHVsZWQgaW4gdGhlIHBhc3QuCitFbHNlIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvLgorVGhp
cyBmdW5jdGlvbiBhbHNvIHJldHVybnMgemVybyBhZnRlciB0aGUKKy5GbiBjYWxsb3V0X2RlYWN0
aXZhdGUKK29yIHRoZQorLkZuIGNhbGxvdXRfc3RvcAorb3IgdGhlCisuRm4gY2FsbG91dF9kcmFp
bgorb3IgdGhlCisuRm4gY2FsbG91dF9kcmFpbl9hc3luYworZnVuY3Rpb24gaXMgY2FsbGVkIG9u
IHRoZSBzYW1lIGNhbGxvdXQgYXMgZ2l2ZW4gYnkgdGhlCisuRmEgYworYXJndW1lbnQuCisuUHAK
Ky5GdCB2b2lkCisuRm4gY2FsbG91dF9kZWFjdGl2YXRlICJzdHJ1Y3QgY2FsbG91dCAqYyIKK1Ro
aXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBhbmQgZW5zdXJlcyB0aGF0IHN1YnNlcXVlbnQgY2Fs
bHMgdG8gdGhlCisuRm4gY2FsbG91dF9hY3RpdmF0ZQorZnVuY3Rpb24gcmV0dXJucyB6ZXJvIHVu
dGlsIHRoZSBjYWxsb3V0IGlzIHNjaGVkdWxlZCBhZ2Fpbi4KKy5TaCBTVE9QUElORyBDQUxMT1VU
UworLkZ0IHZvaWQKKy5GbiB1bnRpbWVvdXQgInRpbWVvdXRfdCAqZnVuYyIgInZvaWQgKmFyZyIg
InN0cnVjdCBjYWxsb3V0X2hhbmRsZSBoYW5kbGUiCitUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0
ZWQgYW5kIGNhbmNlbHMgdGhlIHRpbWVvdXQgYXNzb2NpYXRlZCB3aXRoIHRoZQorLkZhIGhhbmRs
ZQorYXJndW1lbnQgdXNpbmcgdGhlIGZ1bmN0aW9uIHBvaW50ZWQgdG8gYnkgdGhlCiAuRmEgZnVu
YwotYW5kCithcmd1bWVudCBhbmQgaGF2aW5nIHRoZQogLkZhIGFyZwotYXJndW1lbnRzIGZyb20g
dGhlIHByZXZpb3VzIGNhbGxvdXQuCi1Ob3RlIHRoYXQgb25lIG9mIHRoZQotLkZuIGNhbGxvdXRf
cmVzZXQKLWZ1bmN0aW9ucyBtdXN0IGFsd2F5cyBiZSBjYWxsZWQgdG8gaW5pdGlhbGl6ZQorYXJn
dW1lbnRzIHRvIHZhbGlkYXRlIHRoZSBoYW5kbGUuCitJZiB0aGUgaGFuZGxlIGRvZXMgbm90IGNv
cnJlc3BvbmQgdG8gYSB0aW1lb3V0IHdpdGgKK3RoZSBmdW5jdGlvbgogLkZhIGZ1bmMKLWFuZAor
dGFraW5nIHRoZSBhcmd1bWVudAogLkZhIGFyZwotYmVmb3JlIG9uZSBvZiB0aGUKLS5GbiBjYWxs
b3V0X3NjaGVkdWxlCi1mdW5jdGlvbnMgY2FuIGJlIHVzZWQuCitubyBhY3Rpb24gaXMgdGFrZW4u
IFRoZQorLkZhIGhhbmRsZQorbXVzdCBiZSBpbml0aWFsaXplZCBieSBhIHByZXZpb3VzIGNhbGwg
dG8KKy5GbiB0aW1lb3V0ICwKKy5GbiBjYWxsb3V0X2hhbmRsZV9pbml0CitvciBhc3NpZ25lZCB0
aGUgdmFsdWUgb2YKKy5GbiBDQUxMT1VUX0hBTkRMRV9JTklUSUFMSVpFUiAiJmhhbmRsZSIKK2Jl
Zm9yZSBiZWluZyBwYXNzZWQgdG8KKy5GbiB1bnRpbWVvdXQgLgorVGhlIGJlaGF2aW9yIG9mIGNh
bGxpbmcKKy5GbiB1bnRpbWVvdXQKK3dpdGggYW4gdW5pbml0aWFsaXplZCBoYW5kbGUKK2lzIHVu
ZGVmaW5lZC4KIC5QcAotVGhlIGNhbGxvdXQgc3Vic3lzdGVtIHByb3ZpZGVzIGEgc29mdGNsb2Nr
IHRocmVhZCBmb3IgZWFjaCBDUFUgaW4gdGhlIHN5c3RlbS4KLUNhbGxvdXRzIGFyZSBhc3NpZ25l
ZCB0byBhIHNpbmdsZSBDUFUgYW5kIGFyZSBleGVjdXRlZCBieSB0aGUgc29mdGNsb2NrIHRocmVh
ZAotZm9yIHRoYXQgQ1BVLgotSW5pdGlhbGx5LAotY2FsbG91dHMgYXJlIGFzc2lnbmVkIHRvIENQ
VSAwLgotVGhlCi0uRm4gY2FsbG91dF9yZXNldF9vbiAsCi0uRm4gY2FsbG91dF9yZXNldF9zYnRf
b24gLAotLkZuIGNhbGxvdXRfc2NoZWR1bGVfb24KLWFuZAotLkZuIGNhbGxvdXRfc2NoZWR1bGVf
c2J0X29uCi1mdW5jdGlvbnMgYXNzaWduIHRoZSBjYWxsb3V0IHRvIENQVQotLkZhIGNwdSAuCi1U
aGUKLS5GbiBjYWxsb3V0X3Jlc2V0X2N1cmNwdSAsCi0uRm4gY2FsbG91dF9yZXNldF9zYnRfY3Vy
cHUgLAotLkZuIGNhbGxvdXRfc2NoZWR1bGVfY3VyY3B1Ci1hbmQKLS5GbiBjYWxsb3V0X3NjaGVk
dWxlX3NidF9jdXJjcHUKLWZ1bmN0aW9ucyBhc3NpZ24gdGhlIGNhbGxvdXQgdG8gdGhlIGN1cnJl
bnQgQ1BVLgotVGhlCi0uRm4gY2FsbG91dF9yZXNldCAsCi0uRm4gY2FsbG91dF9yZXNldF9zYnQg
LAotLkZuIGNhbGxvdXRfc2NoZWR1bGUKLWFuZAotLkZuIGNhbGxvdXRfc2NoZWR1bGVfc2J0Ci1m
dW5jdGlvbnMgc2NoZWR1bGUgdGhlIGNhbGxvdXQgdG8gZXhlY3V0ZSBpbiB0aGUgc29mdGNsb2Nr
IHRocmVhZCBvZiB0aGUgQ1BVCi10byB3aGljaCBpdCBpcyBjdXJyZW50bHkgYXNzaWduZWQuCisu
RnQgaW50CisuRm4gY2FsbG91dF9zdG9wICJzdHJ1Y3QgY2FsbG91dCAqYyIKK1RoaXMgZnVuY3Rp
b24gaXMgdXNlZCB0byBzdG9wIGEgdGltZW91dCBmdW5jdGlvbiBpbnZvY2F0aW9uIGFzc29jaWF0
ZWQgd2l0aCB0aGUgY2FsbG91dCBwb2ludGVkIHRvIGJ5IHRoZQorLkZhIGMKK2FyZ3VtZW50LCBp
biBhIG5vbi1ibG9ja2luZyBmYXNoaW9uLgorVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11
bHRpcGxlIHRpbWVzIGluIGEgcm93IHdpdGggbm8gc2lkZSBlZmZlY3RzLCBldmVuIGlmIHRoZSBj
YWxsb3V0IGlzIGFscmVhZHkgc3RvcHBlZC4gVGhpcyBmdW5jdGlvbiBob3dldmVyIHNob3VsZCBu
b3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgY2FsbG91dCBoYXMgYmVlbiBpbml0aWFsaXplZC4KK1Ro
aXMgZnVuY3Rpb24gcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlIGlmIHRoZSBnaXZlbiBjYWxsb3V0
IHdhcyBwZW5kaW5nIGFuZAordGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdhcyBwcmV2ZW50ZWQgZnJv
bSBiZWluZyBjYWxsZWQuCitFbHNlIGEgdmFsdWUgb2YgemVybyBpcyByZXR1cm5lZC4KK0lmIGEg
bG9jayBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNhbGxvdXQgZ2l2ZW4gYnkgdGhlCisuRmEgYwor
YXJndW1lbnQgYW5kIGl0IGlzIGV4Y2x1c2l2bHkgbG9ja2VkIHdoZW4gdGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQsIHRoZQorLkZuIGNhbGxvdXRfc3RvcAorZnVuY3Rpb24gd2lsbCBhbHdheXMgZW5z
dXJlIHRoYXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIG5ldmVyIHJlYWNoZWQuCitJbiBvdGhl
ciB3b3JkcyB0aGUgY2FsbG91dCB3aWxsIGJlIGF0b21pY2FsbHkgc3RvcHBlZC4KK0Vsc2UgdGhl
cmUgaXMgbm8gc3VjaCBndWFyYW50ZWUuCisuU2ggRFJBSU5JTkcgQ0FMTE9VVFMKKy5GdCBpbnQK
Ky5GbiBjYWxsb3V0X2RyYWluICJzdHJ1Y3QgY2FsbG91dCAqYyIKK1RoaXMgZnVuY3Rpb24gd29y
a3MgdGhlIHNhbWUgbGlrZSB0aGUKKy5GbiBjYWxsb3V0X3N0b3AKK2Z1bmN0aW9uIGV4Y2VwdCBp
dCBlbnN1cmVzIHRoYXQgYWxsIGNhbGxiYWNrIGZ1bmN0aW9ucyBoYXZlIHJldHVybmVkIGFuZCB0
aGVyZSBhcmUgbm8gbW9yZSByZWZlcmVuY2VzIHRvIHRoZSBjYWxsb3V0IHBvaW50ZWQgdG8gYnkg
dGhlCisuRmEgYworYXJndW1lbnQgaW5zaWRlIHRoZSBjYWxsb3V0IHN1YnN5c3RlbSBiZWZvcmUg
aXQgcmV0dXJucy4KK0Fsc28gdGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIGxvY2ssIGlm
IGFueSwgYXNzb2NpYXRlZCB3aXRoIHRoZQorY2FsbG91dCBpcyBubyBsb25nZXIgYmVpbmcgdXNl
ZC4KK1doZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBpdCBpcyBzYWZlIHRvIGZyZWUgdGhlIGNh
bGxvdXQgc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgdGhlCisuRmEgYworYXJndW1lbnQuCiAuUHAK
Ky5GdCBpbnQKKy5GbiBjYWxsb3V0X2RyYWluX2FzeW5jICJzdHJ1Y3QgY2FsbG91dCAqYyIgImNh
bGxvdXRfZnVuY190ICpmbiIgInZvaWQgKmFyZyIKK1RoaXMgZnVuY3Rpb24gaXMgbm9uLWJsb2Nr
aW5nIGFuZCB3b3JrcyB0aGUgc2FtZSBsaWtlIHRoZQorLkZuIGNhbGxvdXRfc3RvcAorZnVuY3Rp
b24gZXhjZXB0IGlmIGl0IHJldHVybnMgbm9uLXplcm8gaXQgbWVhbnMgdGhlIGNhbGxiYWNrIGZ1
bmN0aW9uIHBvaW50ZWQgdG8gYnkgdGhlCisuRmEgZm4KK2FyZ3VtZW50IHdpbGwgYmUgY2FsbGVk
IGJhY2sgd2l0aCB0aGUKKy5GYSBhcmcKK2FyZ3VtZW50IHdoZW4gYWxsIHJlZmVyZW5jZXMgdG8g
dGhlIGNhbGxvdXQgcG9pbnRlZCB0byBieSB0aGUKKy5GYSBjCithcmd1bWVudCBhcmUgZ29uZS4K
K0lmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBub24temVybyBpdCBzaG91bGQgbm90IGJlIGNhbGxl
ZCBhZ2FpbiB1bnRpbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkLgorSWYg
dGhlCisuRm4gY2FsbG91dF9kcmFpbgorb3IKKy5GbiBjYWxsb3V0X2RyYWluX2FzeW5jCitmdW5j
dGlvbnMgYXJlIGNhbGxlZCB3aGlsZSBhbiBhc3luY2hyb25vdXMgZHJhaW4gaXMgcGVuZGluZywK
K3ByZXZpb3VzbHkgcGVuZGluZyBhc3luY2hyb25vdXMgZHJhaW5zIG1pZ2h0IGdldCBjYW5jZWxs
ZWQuCitJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgemVybywgaXQgaXMgc2FmZSB0byBmcmVlIHRo
ZSBjYWxsb3V0IHN0cnVjdHVyZSBwb2ludGVkIHRvIGJ5IHRoZQorLkZhIGMKK2FyZ3VtZW50IHJp
Z2h0IGF3YXkuCisuU2ggQ0FMTE9VVCBGVU5DVElPTiBSRVNUUklDVElPTlMKK0NhbGxvdXQgZnVu
Y3Rpb25zIG11c3Qgbm90IHNsZWVwLgorVGhleSBtYXkgbm90IGFjcXVpcmUgc2xlZXBhYmxlIGxv
Y2tzLCB3YWl0IG9uIGNvbmRpdGlvbiB2YXJpYWJsZXMsCitwZXJmb3JtIGJsb2NraW5nIGFsbG9j
YXRpb24gcmVxdWVzdHMsIG9yIGludm9rZSBhbnkgb3RoZXIgYWN0aW9uIHRoYXQKK21pZ2h0IHNs
ZWVwLgorLlNoIENBTExPVVQgU1VCU1lTVEVNIElOVEVSTkFMUworVGhlIGNhbGxvdXQgc3Vic3lz
dGVtIGhhcyBpdHMgb3duIHNldCBvZiBzcGlubG9ja3MgdG8gcHJvdGVjdCBpdHMgaW50ZXJuYWwg
c3RhdGUuCitUaGUgY2FsbG91dCBzdWJzeXN0ZW0gcHJvdmlkZXMgYSBzb2Z0Y2xvY2sgdGhyZWFk
IGZvciBlYWNoIENQVSBpbiB0aGUKK3N5c3RlbS4KK0NhbGxvdXRzIGFyZSBhc3NpZ25lZCB0byBh
IHNpbmdsZSBDUFUgYW5kIGFyZSBleGVjdXRlZCBieSB0aGUKK3NvZnRjbG9jayB0aHJlYWQgZm9y
IHRoYXQgQ1BVLgorSW5pdGlhbGx5LCBjYWxsb3V0cyBhcmUgYXNzaWduZWQgdG8gQ1BVIDAuCiBT
b2Z0Y2xvY2sgdGhyZWFkcyBhcmUgbm90IHBpbm5lZCB0byB0aGVpciByZXNwZWN0aXZlIENQVXMg
YnkgZGVmYXVsdC4KIFRoZSBzb2Z0Y2xvY2sgdGhyZWFkIGZvciBDUFUgMCBjYW4gYmUgcGlubmVk
IHRvIENQVSAwIGJ5IHNldHRpbmcgdGhlCiAuVmEga2Vybi5waW5fZGVmYXVsdF9zd2kKIGxvYWRl
ciB0dW5hYmxlIHRvIGEgbm9uLXplcm8gdmFsdWUuCiBTb2Z0Y2xvY2sgdGhyZWFkcyBmb3IgQ1BV
cyBvdGhlciB0aGFuIHplcm8gY2FuIGJlIHBpbm5lZCB0byB0aGVpcgogcmVzcGVjdGl2ZSBDUFVz
IGJ5IHNldHRpbmcgdGhlCiAuVmEga2Vybi5waW5fcGNwdV9zd2kKIGxvYWRlciB0dW5hYmxlIHRv
IGEgbm9uLXplcm8gdmFsdWUuCi0uUHAKLVRoZSBtYWNyb3MKLS5GbiBjYWxsb3V0X3BlbmRpbmcg
LAotLkZuIGNhbGxvdXRfYWN0aXZlCi1hbmQKLS5GbiBjYWxsb3V0X2RlYWN0aXZhdGUKLXByb3Zp
ZGUgYWNjZXNzIHRvIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjYWxsb3V0LgotVGhlCi0uRm4g
Y2FsbG91dF9wZW5kaW5nCi1tYWNybyBjaGVja3Mgd2hldGhlciBhIGNhbGxvdXQgaXMKLS5FbSBw
ZW5kaW5nIDsKLWEgY2FsbG91dCBpcyBjb25zaWRlcmVkCi0uRW0gcGVuZGluZwotd2hlbiBhIHRp
bWVvdXQgaGFzIGJlZW4gc2V0IGJ1dCB0aGUgdGltZSBoYXMgbm90IHlldCBhcnJpdmVkLgotTm90
ZSB0aGF0IG9uY2UgdGhlIHRpbWVvdXQgdGltZSBhcnJpdmVzIGFuZCB0aGUgY2FsbG91dCBzdWJz
eXN0ZW0KLXN0YXJ0cyB0byBwcm9jZXNzIHRoaXMgY2FsbG91dCwKLS5GbiBjYWxsb3V0X3BlbmRp
bmcKLXdpbGwgcmV0dXJuCi0uRHYgRkFMU0UKLWV2ZW4gdGhvdWdoIHRoZSBjYWxsb3V0IGZ1bmN0
aW9uIG1heSBub3QgaGF2ZSBmaW5pc2hlZAotLlBxIG9yIGV2ZW4gYmVndW4KLWV4ZWN1dGluZy4K
LVRoZQotLkZuIGNhbGxvdXRfYWN0aXZlCi1tYWNybyBjaGVja3Mgd2hldGhlciBhIGNhbGxvdXQg
aXMgbWFya2VkIGFzCi0uRW0gYWN0aXZlICwKLWFuZCB0aGUKLS5GbiBjYWxsb3V0X2RlYWN0aXZh
dGUKLW1hY3JvIGNsZWFycyB0aGUgY2FsbG91dCdzCi0uRW0gYWN0aXZlCi1mbGFnLgotVGhlIGNh
bGxvdXQgc3Vic3lzdGVtIG1hcmtzIGEgY2FsbG91dCBhcwotLkVtIGFjdGl2ZQotd2hlbiBhIHRp
bWVvdXQgaXMgc2V0IGFuZCBpdCBjbGVhcnMgdGhlCi0uRW0gYWN0aXZlCi1mbGFnIGluCi0uRm4g
Y2FsbG91dF9zdG9wCi1hbmQKLS5GbiBjYWxsb3V0X2RyYWluICwKLWJ1dCBpdAotLkVtIGRvZXMg
bm90Ci1jbGVhciBpdCB3aGVuIGEgY2FsbG91dCBleHBpcmVzIG5vcm1hbGx5IHZpYSB0aGUgZXhl
Y3V0aW9uIG9mIHRoZQotY2FsbG91dCBmdW5jdGlvbi4KLS5TcyAiQXZvaWRpbmcgUmFjZSBDb25k
aXRpb25zIgorLlNoICJBVk9JRElORyBSQUNFIENPTkRJVElPTlMiCiBUaGUgY2FsbG91dCBzdWJz
eXN0ZW0gaW52b2tlcyBjYWxsb3V0IGZ1bmN0aW9ucyBmcm9tIGl0cyBvd24gdGhyZWFkCiBjb250
ZXh0LgogV2l0aG91dCBzb21lIGtpbmQgb2Ygc3luY2hyb25pemF0aW9uLApAQCAtNTMxLDkgKzYx
MCw4IEBACiAuUGMKIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgY2FsbG91dCB3YXMgcmVt
b3ZlZC4KIElmIGl0IGlzIGtub3duIHRoYXQgdGhlIGNhbGxvdXQgd2FzIHNldCBhbmQgdGhlIGNh
bGxvdXQgZnVuY3Rpb24gaGFzCi1ub3QgeWV0IGV4ZWN1dGVkLCB0aGVuIGEgcmV0dXJuIHZhbHVl
IG9mCi0uRHYgRkFMU0UKLWluZGljYXRlcyB0aGF0IHRoZSBjYWxsb3V0IGZ1bmN0aW9uIGlzIGFi
b3V0IHRvIGJlIGNhbGxlZC4KK25vdCB5ZXQgZXhlY3V0ZWQsIHRoZW4gYSByZXR1cm4gdmFsdWUg
b2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUKK2NhbGxvdXQgZnVuY3Rpb24gaXMgYWJvdXQgdG8g
YmUgY2FsbGVkLgogRm9yIGV4YW1wbGU6CiAuQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKIGlm
IChzYy0+c2NfZmxhZ3MgJiBTQ0ZMR19DQUxMT1VUX1JVTk5JTkcpIHsKQEAgLTU4OSwxNiArNjY3
LDE0IEBACiAuRW0gcGVuZGluZwogZmxhZyBhbmQgcmV0dXJuIHdpdGhvdXQgYWN0aW9uIGlmCiAu
Rm4gY2FsbG91dF9wZW5kaW5nCi1yZXR1cm5zCi0uRHYgVFJVRSAuCityZXR1cm5zIG5vbi16ZXJv
LgogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbG91dCB3YXMgcmVzY2hlZHVsZWQgdXNpbmcK
IC5GbiBjYWxsb3V0X3Jlc2V0CiBqdXN0IGJlZm9yZSB0aGUgY2FsbG91dCBmdW5jdGlvbiB3YXMg
aW52b2tlZC4KIElmCiAuRm4gY2FsbG91dF9hY3RpdmUKLXJldHVybnMKLS5EdiBGQUxTRQotdGhl
biB0aGUgY2FsbG91dCBmdW5jdGlvbiBzaG91bGQgYWxzbyByZXR1cm4gd2l0aG91dCBhY3Rpb24u
CityZXR1cm5zIHplcm8gdGhlbiB0aGUgY2FsbG91dCBmdW5jdGlvbiBzaG91bGQgYWxzbyByZXR1
cm4gd2l0aG91dAorYWN0aW9uLgogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbG91dCBoYXMg
YmVlbiBzdG9wcGVkLgogRmluYWxseSwgdGhlIGNhbGxvdXQgZnVuY3Rpb24gc2hvdWxkIGNhbGwK
IC5GbiBjYWxsb3V0X2RlYWN0aXZhdGUKQEAgLTY2OCwxMjkgKzc0NCwxMyBAQAogb3IgcmVsZWFz
aW5nIHRoZSBzdG9yYWdlIGZvciB0aGUgY2FsbG91dCBzdHJ1Y3R1cmUuCiAuU2ggTEVHQUNZIEFQ
SQogLkJmIFN5Ci1UaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBhIGxlZ2FjeSBBUEkgdGhhdCB3aWxs
IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KLU5ldyBjb2RlIHNob3VsZCBub3QgdXNl
IHRoZXNlIHJvdXRpbmVzLgotLkVmCi0uUHAKLVRoZSBmdW5jdGlvbgotLkZuIHRpbWVvdXQKLXNj
aGVkdWxlcyBhIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIGdpdmVuIGJ5IHRoZSBhcmd1bWVudAotLkZh
IGZ1bmMKLXRvIHRha2UgcGxhY2UgYWZ0ZXIKLS5GYSB0aWNrcyBOcyBObyAvaHoKLXNlY29uZHMu
Ci1Ob24tcG9zaXRpdmUgdmFsdWVzIG9mCi0uRmEgdGlja3MKLWFyZSBzaWxlbnRseSBjb252ZXJ0
ZWQgdG8gdGhlIHZhbHVlCi0uU3EgMSAuCi0uRmEgZnVuYwotc2hvdWxkIGJlIGEgcG9pbnRlciB0
byBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYQotLkZhIHZvaWQgKgotYXJndW1lbnQuCi1VcG9uIGlu
dm9jYXRpb24sCi0uRmEgZnVuYwotd2lsbCByZWNlaXZlCi0uRmEgYXJnCi1hcyBpdHMgb25seSBh
cmd1bWVudC4KLVRoZSByZXR1cm4gdmFsdWUgZnJvbQorVGhlCiAuRm4gdGltZW91dAotaXMgYQot
LkZ0IHN0cnVjdCBjYWxsb3V0X2hhbmRsZQotd2hpY2ggY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rp
b24gd2l0aCB0aGUKLS5GbiB1bnRpbWVvdXQKLWZ1bmN0aW9uIHRvIHJlcXVlc3QgdGhhdCBhIHNj
aGVkdWxlZCB0aW1lb3V0IGJlIGNhbmNlbGVkLgotLlBwCi1UaGUgZnVuY3Rpb24KLS5GbiBjYWxs
b3V0X2hhbmRsZV9pbml0Ci1jYW4gYmUgdXNlZCB0byBpbml0aWFsaXplIGEgaGFuZGxlIHRvIGEg
c3RhdGUgd2hpY2ggd2lsbCBjYXVzZQotYW55IGNhbGxzIHRvCi0uRm4gdW50aW1lb3V0Ci13aXRo
IHRoYXQgaGFuZGxlIHRvIHJldHVybiB3aXRoIG5vIHNpZGUKLWVmZmVjdHMuCi0uUHAKLUFzc2ln
bmluZyBhIGNhbGxvdXQgaGFuZGxlIHRoZSB2YWx1ZSBvZgotLkZuIENBTExPVVRfSEFORExFX0lO
SVRJQUxJWkVSCi1wZXJmb3JtcyB0aGUgc2FtZSBmdW5jdGlvbiBhcwotLkZuIGNhbGxvdXRfaGFu
ZGxlX2luaXQKLWFuZCBpcyBwcm92aWRlZCBmb3IgdXNlIG9uIHN0YXRpY2FsbHkgZGVjbGFyZWQg
b3IgZ2xvYmFsIGNhbGxvdXQgaGFuZGxlcy4KLS5QcAotVGhlIGZ1bmN0aW9uCi0uRm4gdW50aW1l
b3V0Ci1jYW5jZWxzIHRoZSB0aW1lb3V0IGFzc29jaWF0ZWQgd2l0aAotLkZhIGhhbmRsZQotdXNp
bmcgdGhlCi0uRmEgZnVuYwogYW5kCi0uRmEgYXJnCi1hcmd1bWVudHMgdG8gdmFsaWRhdGUgdGhl
IGhhbmRsZS4KLUlmIHRoZSBoYW5kbGUgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHRpbWVvdXQg
d2l0aAotdGhlIGZ1bmN0aW9uCi0uRmEgZnVuYwotdGFraW5nIHRoZSBhcmd1bWVudAotLkZhIGFy
Zwotbm8gYWN0aW9uIGlzIHRha2VuLgotLkZhIGhhbmRsZQotbXVzdCBiZSBpbml0aWFsaXplZCBi
eSBhIHByZXZpb3VzIGNhbGwgdG8KLS5GbiB0aW1lb3V0ICwKLS5GbiBjYWxsb3V0X2hhbmRsZV9p
bml0ICwKLW9yIGFzc2lnbmVkIHRoZSB2YWx1ZSBvZgotLkZuIENBTExPVVRfSEFORExFX0lOSVRJ
QUxJWkVSICImaGFuZGxlIgotYmVmb3JlIGJlaW5nIHBhc3NlZCB0bwotLkZuIHVudGltZW91dCAu
Ci1UaGUgYmVoYXZpb3Igb2YgY2FsbGluZwogLkZuIHVudGltZW91dAotd2l0aCBhbiB1bmluaXRp
YWxpemVkIGhhbmRsZQotaXMgdW5kZWZpbmVkLgotLlBwCi1BcyBoYW5kbGVzIGFyZSByZWN5Y2xl
ZCBieSB0aGUgc3lzdGVtLCBpdCBpcyBwb3NzaWJsZSAoYWx0aG91Z2ggdW5saWtlbHkpCi10aGF0
IGEgaGFuZGxlIGZyb20gb25lIGludm9jYXRpb24gb2YKLS5GbiB0aW1lb3V0Ci1tYXkgbWF0Y2gg
dGhlIGhhbmRsZSBvZiBhbm90aGVyIGludm9jYXRpb24gb2YKLS5GbiB0aW1lb3V0Ci1pZiBib3Ro
IGNhbGxzIHVzZWQgdGhlIHNhbWUgZnVuY3Rpb24gcG9pbnRlciBhbmQgYXJndW1lbnQsIGFuZCB0
aGUgZmlyc3QKLXRpbWVvdXQgaXMgZXhwaXJlZCBvciBjYW5jZWxlZCBiZWZvcmUgdGhlIHNlY29u
ZCBjYWxsLgotVGhlIHRpbWVvdXQgZmFjaWxpdHkgb2ZmZXJzIE8oMSkgcnVubmluZyB0aW1lIGZv
cgotLkZuIHRpbWVvdXQKLWFuZAotLkZuIHVudGltZW91dCAuCi1UaW1lb3V0cyBhcmUgZXhlY3V0
ZWQgZnJvbQotLkZuIHNvZnRjbG9jawotd2l0aCB0aGUKLS5WYSBHaWFudAotbG9jayBoZWxkLgot
VGh1cyB0aGV5IGFyZSBwcm90ZWN0ZWQgZnJvbSByZS1lbnRyYW5jeS4KLS5TaCBSRVRVUk4gVkFM
VUVTCi1UaGUKLS5GbiBjYWxsb3V0X2FjdGl2ZQotbWFjcm8gcmV0dXJucyB0aGUgc3RhdGUgb2Yg
YSBjYWxsb3V0J3MKLS5FbSBhY3RpdmUKLWZsYWcuCi0uUHAKLVRoZQotLkZuIGNhbGxvdXRfcGVu
ZGluZwotbWFjcm8gcmV0dXJucyB0aGUgc3RhdGUgb2YgYSBjYWxsb3V0J3MKLS5FbSBwZW5kaW5n
Ci1mbGFnLgotLlBwCi1UaGUKLS5GbiBjYWxsb3V0X3Jlc2V0Ci1hbmQKLS5GbiBjYWxsb3V0X3Nj
aGVkdWxlCi1mdW5jdGlvbiBmYW1pbGllcyByZXR1cm4gbm9uLXplcm8gaWYgdGhlIGNhbGxvdXQg
d2FzIHBlbmRpbmcgYmVmb3JlIHRoZSBuZXcKLWZ1bmN0aW9uIGludm9jYXRpb24gd2FzIHNjaGVk
dWxlZC4KLS5QcAotVGhlCi0uRm4gY2FsbG91dF9zdG9wCi1hbmQKLS5GbiBjYWxsb3V0X2RyYWlu
Ci1mdW5jdGlvbnMgcmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBjYWxsb3V0IHdhcyBzdGlsbCBwZW5k
aW5nIHdoZW4gaXQgd2FzCi1jYWxsZWQgb3IgemVybyBvdGhlcndpc2UuCi1UaGUKLS5GbiB0aW1l
b3V0Ci1mdW5jdGlvbiByZXR1cm5zIGEKLS5GdCBzdHJ1Y3QgY2FsbG91dF9oYW5kbGUKLXRoYXQg
Y2FuIGJlIHBhc3NlZCB0bwotLkZuIHVudGltZW91dCAuCitmdW5jdGlvbnMgYXJlIGEgbGVnYWN5
IEFQSSB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgorTmV3IGNvZGUg
c2hvdWxkIG5vdCB1c2UgdGhlc2Ugcm91dGluZXMuCisuRWYKIC5TaCBISVNUT1JZCiBUaGUgY3Vy
cmVudCB0aW1lb3V0IGFuZCB1bnRpbWVvdXQgcm91dGluZXMgYXJlIGJhc2VkIG9uIHRoZSB3b3Jr
IG9mCiAuQW4gQWRhbSBNLiBDb3N0ZWxsbwpAQCAtODE1LDQgKzc3NSw0IEBACiAuQngKIGxpbmtl
ZCBsaXN0CiBjYWxsb3V0IG1lY2hhbmlzbSB3aGljaCBvZmZlcmVkIE8obikgaW5zZXJ0aW9uIGFu
ZCByZW1vdmFsIHJ1bm5pbmcgdGltZQotYnV0IGRpZCBub3QgZ2VuZXJhdGUgb3IgcmVxdWlyZSBo
YW5kbGVzIGZvciB1bnRpbWVvdXQgb3BlcmF0aW9ucy4KK2FuZCBkaWQgbm90IGdlbmVyYXRlIG9y
IHJlcXVpcmUgaGFuZGxlcyBmb3IgdW50aW1lb3V0IG9wZXJhdGlvbnMuCgo=


--b1_a17c2070cbe9bbfcdf7c7bdb3c763fdd--



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