Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Apr 2010 04:10:47 +0530
From:      "C. Jayachandran" <c.jayachandran@gmail.com>
To:        Randall Stewart <rrs@lakerest.net>
Cc:        freebsd-mips@freebsd.org
Subject:   SMP support for XLR processors.
Message-ID:  <w2z98a59be81004171540t2f0d5193nca2ec9e2540502e2@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--001636b2be3f405cb90484766b03
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

I've a set of initial patches to enable SMP for RMI processors. It
comes up in multi-user with 32 CPUs. =A0I could do buildworld before I
updated to HEAD - with head there is a hang during buildworld which
I'm looking at, but I think the initial work can be checked in.

Neel, can you have a look at the first two patches - one is to enable
ULE scheduler and the second one is to move platform_init_ap to
slightly later in the initialization sequence.

The patches are :
1. mips-ule-support.patch
- Enable ULE scheduler for MIPS

2. mips-smp-move-platform.patch
- We need a hook to setup message ring and its interrupts, we use
platform_init_ap now, and move it be called later for XLR

3. rmi-prid.patch
Add RMI processor ID prints - right now it prints unknown processor.

4. rmi-pcib-fix.patch
XLR pci bridge should be off the IODI bus, currently it is off the
nexus bus which will cause issue when bus_setup_intr on nexus is
called

5. cleanup-reorg-cpuid-rge-kx.patch
This set has a many changes rolled up:
=A0- clean up rge driver, remove unused code paths and commented code
(long way to go still)
=A0- xlr_cpu_id(), xlr_core_id() and xlr_thr_id() updated and usage updated
=A0- fix a bug - we cannot use MIPS_PHYS_TO_KSEG0 on physical addresses
here, I have made changes for using XKPHYS to do the same process.
=A0- the KX bit is enabled and interrupts are disabled before the
physical memory is read, to avoid the KX bit setting from affecting
other code.
- move message ring code to on_chip.c from xlr_machdep.c, now all
message ring code is in on_chip.c

6. rmi-xlr-smp.patch
SMP Support for XLR
- mpwait.S added to get the other CPUs out of bootloader code at startup.
- SMP platform related functions.
- disable shared TLB code for SMP - since threads have different mappings.

The patches are also available at
http://sites.google.com/site/cjayachandran/files

Enabling all 32 threads will need a minor fix in the SMP code, see the
patch subr_smp-fix.patch at the same place.

Regards,
JC.

--001636b2be3f405cb90484766b03
Content-Type: application/octet-stream; name="mips-ule-support.patch"
Content-Disposition: attachment; filename="mips-ule-support.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g8503ozq0

SW5kZXg6IHN5cy9rZXJuL3NjaGVkX3VsZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9rZXJuL3NjaGVk
X3VsZS5jCShyZXZpc2lvbiAyMDY3MzUpCisrKyBzeXMva2Vybi9zY2hlZF91bGUuYwkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQAogI2luY2x1ZGUgPG1hY2hpbmUvY3B1Lmg+CiAjaW5j
bHVkZSA8bWFjaGluZS9zbXAuaD4KIAotI2lmIGRlZmluZWQoX19zcGFyYzY0X18pIHx8IGRlZmlu
ZWQoX19taXBzX18pCisjaWYgZGVmaW5lZChfX3NwYXJjNjRfXykKICNlcnJvciAiVGhpcyBhcmNo
aXRlY3R1cmUgaXMgbm90IGN1cnJlbnRseSBjb21wYXRpYmxlIHdpdGggVUxFIgogI2VuZGlmCiAK
SW5kZXg6IHN5cy9taXBzL2luY2x1ZGUvc21wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL21pcHMvaW5j
bHVkZS9zbXAuaAkocmV2aXNpb24gMjA2NzM1KQorKysgc3lzL21pcHMvaW5jbHVkZS9zbXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZQlJUElfQVNUCQkJMHgwMDA0
CiAjZGVmaW5lCUlQSV9TVE9QCQkweDAwMDgKICNkZWZpbmUJSVBJX1NUT1BfSEFSRAkJMHgwMDA4
CisjZGVmaW5lCUlQSV9QUkVFTVBUCQkweDAwMTAKIAogI2lmbmRlZiBMT0NPUkUKIApJbmRleDog
c3lzL21pcHMvbWlwcy9tcF9tYWNoZGVwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL21pcHMvbWlwcy9t
cF9tYWNoZGVwLmMJKHJldmlzaW9uIDIwNjczNSkKKysrIHN5cy9taXBzL21pcHMvbXBfbWFjaGRl
cC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDEwIEBACiAJCQlhdG9taWNfY2xlYXJf
aW50KCZzdG9wcGVkX2NwdXMsIGNwdW1hc2spOwogCQkJQ1RSMChLVFJfU01QLCAiSVBJX1NUT1Ag
KHJlc3RhcnQpIik7CiAJCQlicmVhazsKKwkJY2FzZSBJUElfUFJFRU1QVDoKKwkJCUNUUjEoS1RS
X1NNUCwgIiVzOiBJUElfUFJFRU1QVCIsIF9fZnVuY19fKTsKKwkJCXNjaGVkX3ByZWVtcHQoY3Vy
dGhyZWFkKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGFuaWMoIlVua25vd24gSVBJIDB4
JTB4IG9uIGNwdSAlZCIsIGlwaSwgY3VyY3B1KTsKIAkJfQo=
--001636b2be3f405cb90484766b03
Content-Type: application/octet-stream; name="mips-smp-move-platform.patch"
Content-Disposition: attachment; filename="mips-smp-move-platform.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g8503rlm1

SW5kZXg6IHN5cy9taXBzL21pcHMvbXBib290LlMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL21pcHMvbWlw
cy9tcGJvb3QuUwkocmV2aXNpb24gMjA2NzM1KQorKysgc3lzL21pcHMvbWlwcy9tcGJvb3QuUwko
d29ya2luZyBjb3B5KQpAQCAtNzYsOSArNzYsMTAgQEAKIAogCVBUUl9MQQlncCwgX0NfTEFCRUwo
X2dwKQogCisjaWZuZGVmIFRBUkdFVF9YTFJfWExTCiAJamFsCXBsYXRmb3JtX2luaXRfYXAKIAlt
b3ZlCWEwLCBzMAotCisjZW5kaWYKIAlqYWwJc21wX2luaXRfc2Vjb25kYXJ5CiAJbW92ZQlhMCwg
czAKIApJbmRleDogc3lzL21pcHMvbWlwcy9tcF9tYWNoZGVwLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz
L21pcHMvbWlwcy9tcF9tYWNoZGVwLmMJKHJldmlzaW9uIDIwNjczNSkKKysrIHN5cy9taXBzL21p
cHMvbXBfbWFjaGRlcC5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNyArMjM4LDkgQEAKIHZvaWQK
IHNtcF9pbml0X3NlY29uZGFyeSh1X2ludDMyX3QgY3B1aWQpCiB7CisjaWZuZGVmIFRBUkdFVF9Y
TFJfWExTCiAJaW50IGlwaV9pbnRfbWFzaywgY2xvY2tfaW50X21hc2s7CisjZW5kaWYKIAogCS8q
IFRMQiAqLwogCU1pcHNfU2V0V0lSRUQoMCk7CkBAIC0yODgsMTIgKzI5NCwxNiBAQAogCXdoaWxl
IChzbXBfc3RhcnRlZCA9PSAwKQogCQk7IC8qIG5vdGhpbmcgKi8KIAorI2lmbmRlZiBUQVJHRVRf
WExSX1hMUwogCS8qCiAJICogVW5tYXNrIHRoZSBjbG9jayBhbmQgaXBpIGludGVycnVwdHMuCiAJ
ICovCiAJY2xvY2tfaW50X21hc2sgPSBoYXJkX2ludF9tYXNrKDUpOwogCWlwaV9pbnRfbWFzayA9
IGhhcmRfaW50X21hc2socGxhdGZvcm1faXBpX2ludHJudW0oKSk7CiAJc2V0X2ludHJfbWFzayhB
TExfSU5UX01BU0sgJiB+KGlwaV9pbnRfbWFzayB8IGNsb2NrX2ludF9tYXNrKSk7CisjZWxzZQor
CXBsYXRmb3JtX2luaXRfYXAoY3B1aWQpOworI2VuZGlmCiAKIAkvKgogCSAqIEJvb3RzdHJhcCB0
aGUgY29tcGFyZSByZWdpc3Rlci4K
--001636b2be3f405cb90484766b03
Content-Type: application/octet-stream; name="rmi-prid.patch"
Content-Disposition: attachment; filename="rmi-prid.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g8503t7w2

SW5kZXg6IHN5cy9taXBzL2luY2x1ZGUvbG9jb3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL21pcHMv
aW5jbHVkZS9sb2NvcmUuaAkocmV2aXNpb24gMjA2NzM1KQorKysgc3lzL21pcHMvaW5jbHVkZS9s
b2NvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQAogCQkJCS8qCTB4MDkJdW5h
bm5vdW5jZWQgKi8KIAkJCQkvKgkweDBhCXVuYW5ub3VuY2VkICovCiAjZGVmaW5lICAgICBNSVBT
X1BSSURfQ0lEX0xFWFJBCQkweDBiCS8qIExleHJhICovCisjZGVmaW5lICAgICBNSVBTX1BSSURf
Q0lEX1JNSQkJMHgwYwkvKiBSTUkgKi8KICNkZWZpbmUgICAgIE1JUFNfUFJJRF9DSURfQ0FWSVVN
CTB4MGQJLyogQ2F2aXVtICovCiAjZGVmaW5lIE1JUFNfUFJJRF9DT1BUUyh4KQkoKCh4KSA+PiAy
NCkgJiAweDAwZmYpCS8qIENvbXBhbnkgT3B0aW9ucyAqLwogCkluZGV4OiBzeXMvbWlwcy9taXBz
L2NwdS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9taXBzL21pcHMvY3B1LmMJKHJldmlzaW9uIDIwNjcz
NSkKKysrIHN5cy9taXBzL21pcHMvY3B1LmMJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw2ICsxNzgs
OSBAQAogCWNhc2UgTUlQU19QUklEX0NJRF9MRVhSQToKIAkJcHJpbnRmKCJMZXhyYSIpOwogCQli
cmVhazsKKwljYXNlIE1JUFNfUFJJRF9DSURfUk1JOgorCQlwcmludGYoIlJNSSIpOworCQlicmVh
azsKIAljYXNlIE1JUFNfUFJJRF9DSURfQ0FWSVVNOgogCQlwcmludGYoIkNhdml1bSIpOwogCQli
cmVhazsK
--001636b2be3f405cb90484766b03
Content-Type: application/octet-stream; name="rmi-pcib-fix.patch"
Content-Disposition: attachment; filename="rmi-pcib-fix.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g8503tvt3

SW5kZXg6IHN5cy9taXBzL3JtaS94bHJfcGNpLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL21pcHMvcm1p
L3hscl9wY2kuYwkocmV2aXNpb24gMjA2NzM1KQorKysgc3lzL21pcHMvcm1pL3hscl9wY2kuYwko
d29ya2luZyBjb3B5KQpAQCAtNjM2LDQgKzYzNiw0IEBACiAJc2l6ZW9mKHN0cnVjdCB4bHJfcGNp
Yl9zb2Z0YyksCiB9OwogCi1EUklWRVJfTU9EVUxFKHBjaWIsIG5leHVzLCB4bHJfcGNpYl9kcml2
ZXIsIHBjaWJfZGV2Y2xhc3MsIDAsIDApOworRFJJVkVSX01PRFVMRShwY2liLCBpb2RpLCB4bHJf
cGNpYl9kcml2ZXIsIHBjaWJfZGV2Y2xhc3MsIDAsIDApOwpJbmRleDogc3lzL21pcHMvcm1pL2lv
ZGkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBzeXMvbWlwcy9ybWkvaW9kaS5jCShyZXZpc2lvbiAyMDY3MzUp
CisrKyBzeXMvbWlwcy9ybWkvaW9kaS5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDcg
QEAKIAkgKi8KIAlkZXZpY2VfYWRkX2NoaWxkKGRldiwgInVhcnQiLCAwKTsKIAlkZXZpY2VfYWRk
X2NoaWxkKGRldiwgInhscl9pMmMiLCAwKTsKKwlkZXZpY2VfYWRkX2NoaWxkKGRldiwgInBjaWIi
LCAwKTsKIAogCWlmICh4bHJfYm9hcmRfaW5mby51c2IpCiAJCWRldmljZV9hZGRfY2hpbGQoZGV2
LCAiZWhjaSIsIDApOwo=
--001636b2be3f405cb90484766b03
Content-Type: application/octet-stream; 
	name="cleanup-reorg-cpuid-rge-kx.patch"
Content-Disposition: attachment; filename="cleanup-reorg-cpuid-rge-kx.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g8503uif4

SW5kZXg6IHN5cy9taXBzL3JtaS9kZXYveGxyL3JnZS5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9taXBz
L3JtaS9kZXYveGxyL3JnZS5jCShyZXZpc2lvbiAyMDY3MzUpCisrKyBzeXMvbWlwcy9ybWkvZGV2
L3hsci9yZ2UuYwkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQAogI2luY2x1ZGUgPG1h
Y2hpbmUvcGFyYW0uaD4KICNpbmNsdWRlIDxtYWNoaW5lL2ludHJfbWFjaGRlcC5oPgogI2luY2x1
ZGUgPG1hY2hpbmUvY2xvY2suaD4JLyogZm9yIERFTEFZICovCisjaW5jbHVkZSA8bWFjaGluZS9j
cHVyZWdzLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4JLyogKi8KICNpbmNsdWRlIDxtYWNo
aW5lL3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8bWlwcy9ybWkvaW50ZXJydXB0Lmg+CkBAIC0xMTIs
NyArMTEzLDYgQEAKIE1PRFVMRV9ERVBFTkQocmdlLCBtaWlidXMsIDEsIDEsIDEpOwogCiAvKiAj
ZGVmaW5lIERFQlVHICovCi0vKiNkZWZpbmUgUlhfQ09QWSAqLwogCiAjZGVmaW5lIFJHRV9UWF9U
SFJFU0hPTEQgMTAyNAogI2RlZmluZSBSR0VfVFhfUV9TSVpFIDEwMjQKQEAgLTIwNCwxMCArMjA0
LDE4IEBACiAJcmV0dXJuIHZhbHVlOwogfQogCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCAK
K3hscl9lbmFibGVfa3godm9pZCkKK3sKKwl1aW50MzJfdCBzciA9IG1pcHNfcmRfc3RhdHVzKCk7
CisKKwltaXBzX3dyX3N0YXR1cygoc3IgJiB+TUlQU19TUl9JTlRfSUUpIHwgTUlQU19TUl9LWCk7
CisJcmV0dXJuIHNyOworfQorCiAvKiAjZGVmaW5lIG1hY19zdGF0c19hZGQoeCwgdmFsKSAoeyh4
KSArPSAodmFsKTt9KSAqLwogI2RlZmluZSBtYWNfc3RhdHNfYWRkKHgsIHZhbCkgbGRhZGRfd3Uo
dmFsLCAmeCkKIAotCiAjZGVmaW5lIFhMUl9NQVhfQ09SRSA4CiAjZGVmaW5lIFJHRV9MT0NLX0lO
SVQoX3NjLCBfbmFtZSkgXAogICBtdHhfaW5pdCgmKF9zYyktPnJnZV9tdHgsIF9uYW1lLCBNVFhf
TkVUV09SS19MT0NLLCBNVFhfREVGKQpAQCAtMzMyLDU2ICszNDAsNiBAQAogI2RlZmluZSBTVFIo
eCkgX19TVFIoeCkKICNlbmRpZgogCi0jZGVmaW5lIFhLUEhZUyAgICAgICAgMHg4MDAwMDAwMDAw
MDAwMDAwCi0vKiAtLSBObyBsb25nZXIgbmVlZGVkIFJSUwotc3RhdGljIF9faW5saW5lX18gdWlu
dDMyX3QKLWx3XzQwYml0X3BoeXModWludDY0X3QgcGh5cywgaW50IGNjYSkKLXsKLQl1aW50NjRf
dCBhZGRyOwotCXVpbnQzMl90IHZhbHVlID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0J
YWRkciA9IFhLUEhZUyB8ICgodWludDY0X3QpIGNjYSA8PCA1OSkgfCAocGh5cyAmIDB4ZmZmZmZm
ZmZmY1VMTCk7Ci0KLQllbmFibGVfS1goZmxhZ3MpOwotCV9fYXNtX18gX192b2xhdGlsZV9fKAot
CSAgICAgICAgICAgICIuc2V0IHB1c2hcbiIKLQkgICAgICAgICAgICAiLnNldCBub3Jlb3JkZXJc
biIKLQkgICAgICAgICAgICAiLnNldCBtaXBzNjRcbiIKLQkgICAgICAgICAgICAibHcgICAgJTAs
IDAoJTEpIFxuIgotCSAgICAgICAgICAgICIuc2V0IHBvcFxuIgotCSAgICA6ICAgICAgICI9ciIo
dmFsdWUpCi0JICAgIDogICAgICAgInIiKGFkZHIpKTsKLQotCWRpc2FibGVfS1goZmxhZ3MpOwot
CXJldHVybiB2YWx1ZTsKLX0KLSovCi0vKiAtLSBObyBsb25nZXIgdXNlZCBSUlMKLXN0YXRpYyBf
X2lubGluZV9fIHVpbnQ2NF90Ci1sZF80MGJpdF9waHlzKHVpbnQ2NF90IHBoeXMsIGludCBjY2Ep
Ci17Ci0JdWludDY0X3QgYWRkcjsKLQl1aW50NjRfdCB2YWx1ZSA9IDA7Ci0JdW5zaWduZWQgbG9u
ZyBmbGFnczsKLQotCi0JYWRkciA9IFhLUEhZUyB8ICgodWludDY0X3QpIGNjYSA8PCA1OSkgfCAo
cGh5cyAmIDB4ZmZmZmZmZmZmY1VMTCk7Ci0JZW5hYmxlX0tYKGZsYWdzKTsKLQlfX2FzbV9fIF9f
dm9sYXRpbGVfXygKLQkgICAgICAgICAgICAiLnNldCBwdXNoXG4iCi0JICAgICAgICAgICAgIi5z
ZXQgbm9yZW9yZGVyXG4iCi0JICAgICAgICAgICAgIi5zZXQgbWlwczY0XG4iCi0JICAgICAgICAg
ICAgImxkICAgICUwLCAwKCUxKSBcbiIKLQkgICAgICAgICAgICAiLnNldCBwb3BcbiIKLQkgICAg
OiAgICAgICAiPXIiKHZhbHVlKQotCSAgICA6ICAgICAgICJyIihhZGRyKSk7Ci0KLQlkaXNhYmxl
X0tYKGZsYWdzKTsKLQlyZXR1cm4gdmFsdWU7Ci19Ci0qLwotCiB2b2lkICp4bHJfdHhfcmluZ19t
ZW07CiAKIHN0cnVjdCB0eF9kZXNjX25vZGUgewpAQCAtNDQ5LDcgKzQwNyw3IEBACiAKIAlmb3Ig
KGkgPSAwOyBpIDwgMzI7IGkrKykgewogCQlpZiAoY3B1bWFzayAmICgxIDw8IGkpKSB7Ci0JCQlj
cHUgPSBjcHVfbHRvcF9tYXBbaV07CisJCQljcHUgPSBpOwogCQkJaWYgKCFhY3RpdmVfY29yZVtj
cHUgLyA0XSkgewogCQkJCWFjdGl2ZV9jb3JlW2NwdSAvIDRdID0gMTsKIAkJCQl4bHJfdG90YWxf
YWN0aXZlX2NvcmUrKzsKQEAgLTUwNyw3ICs0NjUsNyBAQAogewogCXN0cnVjdCB0eF9kZXNjX25v
ZGUgKm5vZGU7CiAJc3RydWN0IHAyZF90eF9kZXNjICp0eF9kZXNjID0gTlVMTDsKLQlpbnQgY3B1
ID0geGxyX2NwdV9pZCgpOworCWludCBjcHUgPSB4bHJfY29yZV9pZCgpOwogCiAJbXR4X2xvY2tf
c3BpbigmdHhfZGVzY19sb2NrW2NwdV0pOwogCW5vZGUgPSBUQUlMUV9GSVJTVCgmdHhfZnJhZ19k
ZXNjW2NwdV0pOwpAQCAtNTI3LDcgKzQ4NSw3IEBACiBmcmVlX3AyZF9kZXNjKHN0cnVjdCBwMmRf
dHhfZGVzYyAqdHhfZGVzYykKIHsKIAlzdHJ1Y3QgdHhfZGVzY19ub2RlICpub2RlOwotCWludCBj
cHUgPSB4bHJfY3B1X2lkKCk7CisJaW50IGNwdSA9IHhscl9jb3JlX2lkKCk7CiAKIAltdHhfbG9j
a19zcGluKCZ0eF9kZXNjX2xvY2tbY3B1XSk7CiAJbm9kZSA9IFRBSUxRX0ZJUlNUKCZmcmVlX3R4
X2ZyYWdfZGVzY1tjcHVdKTsKQEAgLTU1Myw3ICs1MTEsNyBAQAogCXZtX29mZnNldF90IHRhZGRy
OwogCXVpbnQ2NF90IGZyX3N0aWQ7CiAKLQlmcl9zdGlkID0gKHhscl9jcHVfaWQoKSA8PCAzKSAr
IHhscl90aHJfaWQoKSArIDQ7CisJZnJfc3RpZCA9ICh4bHJfY29yZV9pZCgpIDw8IDMpICsgeGxy
X3Rocl9pZCgpICsgNDsKIAogCWlmICh0eF9kZXNjID09IE5VTEwpCiAJCXJldHVybiAxOwpAQCAt
NjIwLDIxICs1NzgsNiBAQAogc3RhdGljIHZvaWQKIHJlbGVhc2VfdHhfZGVzYyhzdHJ1Y3QgbXNn
cm5nX21zZyAqbXNnLCBpbnQgcmVsX2J1ZikKIHsKLQkvKgotCSAqIE9MRCBjb2RlOiB2bV9wYWRk
cl90IHBhZGRyID0gbXNnLT5tc2cwICYgMHhmZmZmZmZmZmZmVUxMOwotCSAqIHVpbnQ2NF90IHRl
bXA7IHN0cnVjdCBwMmRfdHhfZGVzYyAqdHhfZGVzYzsgc3RydWN0IG1idWYgKm07Ci0JICogCi0J
ICogcGFkZHIgKz0gKFhMUl9NQVhfVFhfRlJBR1MgKiBzaXplb2YodWludDY0X3QpKTsgKioqIElu
IG8zMiB3ZSB3aWxsCi0JICogY3Jhc2ggaGVyZSAqKioqKiogdGVtcCA9IGxkXzQwYml0X3BoeXMo
cGFkZHIsIDMpOyB0eF9kZXNjID0KLQkgKiAoc3RydWN0IHAyZF90eF9kZXNjICopKCh2bV9vZmZz
ZXRfdCl0ZW1wKTsKLQkgKiAKLQkgKiBpZiAocmVsX2J1ZikgeyBwYWRkciArPSBzaXplb2YodWlu
dDY0X3QpOwotCSAqIAotCSAqIHRlbXAgPSBsZF80MGJpdF9waHlzKHBhZGRyLCAzKTsKLQkgKiAK
LQkgKiBtID0gKHN0cnVjdCBtYnVmICopKCh2bV9vZmZzZXRfdCl0ZW1wKTsgbV9mcmVlbShtKTsg
fSBwcmludGYoIkNhbGwKLQkgKiBmcmVfcDJkX2Rlc2NcbiIpOyBmcmVlX3AyZF9kZXNjKHR4X2Rl
c2MpOwotCSAqLwogCXN0cnVjdCBwMmRfdHhfZGVzYyAqdHhfZGVzYywgKmNoa19hZGRyOwogCXN0
cnVjdCBtYnVmICptOwogCkBAIC02NTIsNTMgKzU5NSw3IEBACiAJZnJlZV9wMmRfZGVzYyh0eF9k
ZXNjKTsKIH0KIAotI2lmZGVmIFJYX0NPUFkKLSNkZWZpbmUgUkdFX01BWF9OVU1fREVTQyAoNiAq
IE1BWF9OVU1fREVTQykKLXVpbnQ4X3QgKnJnZV9yeF9idWZmZXJzW1JHRV9NQVhfTlVNX0RFU0Nd
Owotc3RhdGljIHN0cnVjdCBtdHggcmdlX3J4X210eDsKLWludCBnX3J4X2J1Zl9oZWFkOwogCi1z
dGF0aWMgdm9pZAotaW5pdF9yeF9idWYodm9pZCkKLXsKLQlpbnQgaTsKLQl1aW50OF90ICpidWYs
ICpzdGFydDsKLQl1aW50MzJfdCBzaXplLCAqcHRyOwotCi0JbXR4X2luaXQoJnJnZV9yeF9tdHgs
ICJ4bHIgcnhfZGVzYyIsIE5VTEwsIE1UWF9TUElOKTsKLQotCXNpemUgPSAoUkdFX01BWF9OVU1f
REVTQyAqIChNQVhfRlJBTUVfU0laRSArIFhMUl9DQUNIRUxJTkVfU0laRSkpOwotCi0Jc3RhcnQg
PSAodWludDhfdCAqKSBjb250aWdtYWxsb2Moc2l6ZSwgTV9ERVZCVUYsIE1fTk9XQUlUIHwgTV9a
RVJPLAotCSAgICAwLCAweGZmZmZmZmZmLCBYTFJfQ0FDSEVMSU5FX1NJWkUsIDApOwotCWlmIChz
dGFydCA9PSBOVUxMKQotCQlwYW5pYygiTk8gUlggQlVGRkVSUyIpOwotCWJ1ZiA9IHN0YXJ0Owot
CXNpemUgPSAoTUFYX0ZSQU1FX1NJWkUgKyBYTFJfQ0FDSEVMSU5FX1NJWkUpOwotCWZvciAoaSA9
IDA7IGkgPCBSR0VfTUFYX05VTV9ERVNDOyBpKyspIHsKLQkJYnVmID0gc3RhcnQgKyAoaSAqIHNp
emUpOwotCQlwdHIgPSAodWludDMyX3QgKikgYnVmOwotCQkqcHRyID0gKHVpbnQzMl90KSBidWY7
Ci0JCXJnZV9yeF9idWZmZXJzW2ldID0gYnVmICsgWExSX0NBQ0hFTElORV9TSVpFOwotCX0KLX0K
LQotc3RhdGljIHZvaWQgKgotZ2V0X3J4X2J1Zih2b2lkKQotewotCXZvaWQgKnB0ciA9IE5VTEw7
Ci0KLQltdHhfbG9ja19zcGluKCZyZ2VfcnhfbXR4KTsKLQlpZiAoZ19yeF9idWZfaGVhZCA8IFJH
RV9NQVhfTlVNX0RFU0MpIHsKLQkJcHRyID0gKHZvaWQgKilyZ2VfcnhfYnVmZmVyc1tnX3J4X2J1
Zl9oZWFkXTsKLQkJZ19yeF9idWZfaGVhZCsrOwotCX0KLQltdHhfdW5sb2NrX3NwaW4oJnJnZV9y
eF9tdHgpOwotCXJldHVybiBwdHI7Ci19Ci0KLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IG1idWYg
KgogZ2V0X21idWYodm9pZCkKIHsKQEAgLTcxNiwyMyArNjEzLDE2IEBACiBmcmVlX2J1Zih2bV9w
YWRkcl90IHBhZGRyKQogewogCXN0cnVjdCBtYnVmICptOwotCXVpbnQzMl90ICp0ZW1wOwotCXVp
bnQzMl90IG1hZywgdW07CisJdWludDMyX3QgbWFnLCB1bSwgc3I7CiAKLQkvKgotCSAqIFRoaXMg
d2lsbCBjcmFzaCBJIHRoaW5rLiBSUlMgdGVtcCA9IGx3XzQwYml0X3BoeXMoKHBhZGRyIC0KLQkg
KiBYTFJfQ0FDSEVMSU5FX1NJWkUpLCAzKTsgbSA9IChzdHJ1Y3QgbWJ1ZiAqKXRlbXA7Ci0JICov
Ci0JLyoKLQkgKiBUaGlzIGdldHMgdXMgYSBrc2VnMCBhZGRyZXNzIGZvciB0aGUgbWJ1Zi9tYWdp
YyBvbiB0aGUgcmluZyBidXQKLQkgKiB3ZSBuZWVkIHRvIGdldCB0aGUgdmEgdG8gZnJlZSB0aGUg
bWJ1Zi4gVGhpcyBpcyBzdG9yZWQgYXQgKnRlbXA7Ci0JICovCi0JdGVtcCA9ICh1aW50MzJfdCAq
KSBNSVBTX1BIWVNfVE9fS1NFRzAocGFkZHIgLSBYTFJfQ0FDSEVMSU5FX1NJWkUpOwotCXVtID0g
dGVtcFswXTsKLQltYWcgPSB0ZW1wWzFdOworCXNyID0geGxyX2VuYWJsZV9reCgpOworCXVtID0g
eGxyX3BhZGRyX2x3KHBhZGRyIC0gWExSX0NBQ0hFTElORV9TSVpFKTsKKwltYWcgPSB4bHJfcGFk
ZHJfbHcocGFkZHIgLSBYTFJfQ0FDSEVMSU5FX1NJWkUgKyBzaXplb2YodWludDMyX3QpKTsKKwlt
aXBzX3dyX3N0YXR1cyhzcik7CisKIAlpZiAobWFnICE9IDB4ZjAwYmFkKSB7Ci0JCXByaW50Zigi
U29tZXRoaW5nIGlzIHdyb25nIGtzZWc6JXAgZm91bmQgbWFnOiV4IG5vdCAweGYwMGJhZFxuIiwK
LQkJICAgIHRlbXAsIG1hZyk7CisJCXByaW50ZigiU29tZXRoaW5nIGlzIHdyb25nIGtzZWc6JWx4
IGZvdW5kIG1hZzoleCBub3QgMHhmMDBiYWRcbiIsCisJCSAgICAodV9sb25nKXBhZGRyLCBtYWcp
OwogCQlyZXR1cm47CiAJfQogCW0gPSAoc3RydWN0IG1idWYgKil1bTsKQEAgLTc0MywxOSArNjMz
LDEzIEBACiBzdGF0aWMgdm9pZCAqCiBnZXRfYnVmKHZvaWQpCiB7Ci0jaWZkZWYgUlhfQ09QWQot
CXJldHVybiBnZXRfcnhfYnVmKCk7Ci0jZWxzZQogCXN0cnVjdCBtYnVmICptX25ldyA9IE5VTEw7
Ci0KKwl1bnNpZ25lZCBpbnQgKm1kOwogI2lmZGVmIElOVkFSSUFOVFMKIAl2bV9wYWRkcl90IHRl
bXAxLCB0ZW1wMjsKLQogI2VuZGlmCi0JdW5zaWduZWQgaW50ICptZDsKIAogCW1fbmV3ID0gZ2V0
X21idWYoKTsKLQogCWlmIChtX25ldyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtNzY1
LDggKzY0OSw2IEBACiAJbWRbMV0gPSAweGYwMGJhZDsKIAltX2FkaihtX25ldywgWExSX0NBQ0hF
TElORV9TSVpFKTsKIAotCi0JLyogcmV0dXJuICh2b2lkICopbV9uZXc7ICovCiAjaWZkZWYgSU5W
QVJJQU5UUwogCXRlbXAxID0gdnRvcGh5cygodm1fb2Zmc2V0X3QpbV9uZXctPm1fZGF0YSk7CiAJ
dGVtcDIgPSB2dG9waHlzKCh2bV9vZmZzZXRfdCltX25ldy0+bV9kYXRhICsgMTUzNik7CkBAIC03
NzQsNyArNjU2LDYgQEAKIAkJcGFuaWMoIkFMTE9DRUQgQlVGRkVSIElTIE5PVCBDT05USUdVT1VT
XG4iKTsKICNlbmRpZgogCXJldHVybiAodm9pZCAqKW1fbmV3LT5tX2RhdGE7Ci0jZW5kaWYKIH0K
IAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKQEAgLTgyNiwxMyArNzA3LDEzIEBACiB7CiAJaW50IHN0aWQgPSBw
cml2LT5yZnJidWNrZXQ7CiAJc3RydWN0IG1zZ3JuZ19tc2cgbXNnOwotCWludCB2Y3B1ID0gKHhs
cl9jcHVfaWQoKSA8PCAyKSArIHhscl90aHJfaWQoKTsKKwlpbnQgdmNwdSA9IHhscl9jcHVfaWQo
KTsKIAogCW1hY19tYWtlX2Rlc2NfcmZyKCZtc2csIGFkZHIpOwogCiAJLyogU2VuZCB0aGUgcGFj
a2V0IHRvIE1BQyAqLwotCWRiZ19tc2coIm1hY18lZDogU2VuZGluZyBmcmVlIHBhY2tldCAlbGx4
IHRvIHN0aWQgJWRcbiIsCi0JICAgIHByaXYtPmluc3RhbmNlLCBhZGRyLCBzdGlkKTsKKwlkYmdf
bXNnKCJtYWNfJWQ6IFNlbmRpbmcgZnJlZSBwYWNrZXQgJWx4IHRvIHN0aWQgJWRcbiIsCisJICAg
IHByaXYtPmluc3RhbmNlLCAodV9sb25nKWFkZHIsIHN0aWQpOwogCWlmIChwcml2LT50eXBlID09
IFhMUl9YR01BQykgewogCQl3aGlsZSAobWVzc2FnZV9zZW5kKDEsIE1TR1JOR19DT0RFX1hHTUFD
LCBzdGlkLCAmbXNnKSk7CiAJfSBlbHNlIHsKQEAgLTEwODgsNyArOTY5LDcgQEAKIAogCWZvciAo
aSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJCWlmIChjcHVtYXNrICYgKDEgPDwgaSkpIHsKLQkJCWNw
dSA9IGNwdV9sdG9wX21hcFtpXTsKKwkJCWNwdSA9IGk7CiAJCQlidWNrZXQgPSAoKGNwdSA+PiAy
KSA8PCAzKTsKIAkJCS8vfChjcHUgJiAweDAzKTsKIAkJCWJ1Y2tldF9tYXAgfD0gKDFVTEwgPDwg
YnVja2V0KTsKQEAgLTE2MTMsMTAgKzE0OTQsNyBAQAogc3RhdGljIHZvaWQKIG1hY19mcmluX3Jl
cGxlbmlzaCh2b2lkICphcmdzIC8qIGlnbm9yZWQgKi8gKQogewotI2lmZGVmIFJYX0NPUFkKLQly
ZXR1cm47Ci0jZWxzZQotCWludCBjcHUgPSB4bHJfY3B1X2lkKCk7CisJaW50IGNwdSA9IHhscl9j
b3JlX2lkKCk7CiAJaW50IGRvbmUgPSAwOwogCWludCBpID0gMDsKIApAQCAtMTY4NSw3ICsxNTYz
LDYgQEAKIAkJaWYgKGRvbmUgPT0gWExSX01BWF9NQUNTKQogCQkJYnJlYWs7CiAJfQotI2VuZGlm
CiB9CiAKIHN0YXRpYyB2b2xhdGlsZSB1aW50MzJfdCBnX3R4X2ZybV90eF9vaz0wOwpAQCAtMTcx
Niw4ICsxNTkzLDggQEAKIAlzdHJ1Y3QgcmdlX3NvZnRjICpzYyA9IE5VTEw7CiAJc3RydWN0IGRy
aXZlcl9kYXRhICpwcml2ID0gMDsKIAlzdHJ1Y3QgaWZuZXQgKmlmcDsKLQlpbnQgY3B1ID0geGxy
X2NwdV9pZCgpOwotCWludCB2Y3B1ID0gKGNwdSA8PCAyKSArIHhscl90aHJfaWQoKTsKKwlpbnQg
dmNwdSA9IHhscl9jcHVfaWQoKTsKKwlpbnQgY3B1ID0geGxyX2NvcmVfaWQoKTsKIAogCWRiZ19t
c2coIm1hYzogYnVja2V0PSVkLCBzaXplPSVkLCBjb2RlPSVkLCBzdGlkPSVkLCBtc2cwPSVsbHgg
bXNnMT0lbGx4XG4iLAogCSAgICBidWNrZXQsIHNpemUsIGNvZGUsIHN0aWQsIG1zZy0+bXNnMCwg
bXNnLT5tc2cxKTsKQEAgLTIwOTgsODAgKzE5NzUsMTggQEAKIHVpbnQzMl90IGdtYWNfcnhfZmFp
bFszMl07CiB1aW50MzJfdCBnbWFjX3J4X3Bhc3NbMzJdOwogCi0jaWZkZWYgUlhfQ09QWQogc3Rh
dGljIHZvaWQKIHJnZV9yeChzdHJ1Y3QgcmdlX3NvZnRjICpzYywgdm1fcGFkZHJfdCBwYWRkciwg
aW50IGxlbikKIHsKLQkvKgotCSAqIHN0cnVjdCBtYnVmICptID0gKHN0cnVjdCBtYnVmICopKih1
bnNpZ25lZCBpbnQgKikoKGNoYXIgKilhZGRyIC0KLQkgKiBYTFJfQ0FDSEVMSU5FX1NJWkUpOwot
CSAqLwogCXN0cnVjdCBtYnVmICptOwotCXZvaWQgKnB0cjsKLQl1aW50MzJfdCAqdGVtcDsKKwl1
aW50MzJfdCB0bSwgbWFnLCBzcjsKIAlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5yZ2VfaWZwOwot
CXVuc2lnbmVkIGxvbmcgbXNncm5nX2ZsYWdzOwotCWludCBjcHUgPSBQQ1BVX0dFVChjcHVpZCk7
CiAKKwlzciA9IHhscl9lbmFibGVfa3goKTsKKwl0bSA9IHhscl9wYWRkcl9sdyhwYWRkciAtIFhM
Ul9DQUNIRUxJTkVfU0laRSk7CisJbWFnID0geGxyX3BhZGRyX2x3KHBhZGRyIC0gWExSX0NBQ0hF
TElORV9TSVpFICsgc2l6ZW9mKHVpbnQzMl90KSk7CisJbWlwc193cl9zdGF0dXMoc3IpOwogCi0J
dGVtcCA9ICh1aW50MzJfdCAqKSBNSVBTX1BIWVNfVE9fS1NFRzAocGFkZHIgLSBYTFJfQ0FDSEVM
SU5FX1NJWkUpOwotCi0JcHRyID0gKHZvaWQgKikodGVtcCArIFhMUl9DQUNIRUxJTkVfU0laRSk7
Ci0JbSA9IG1fZ2V0Y2woTV9ET05UV0FJVCwgTVRfREFUQSwgTV9QS1RIRFIpOwotCWlmIChtICE9
IE5VTEwpIHsKLQkJbS0+bV9sZW4gPSBtLT5tX3BrdGhkci5sZW4gPSBNQ0xCWVRFUzsKLQkJbV9j
b3B5YmFjayhtLCAwLCBsZW4gKyBCWVRFX09GRlNFVCwgcHRyKTsKLQkJLyogYWxpZ24gdGhlIGRh
dGEgKi8KLQkJbS0+bV9kYXRhICs9IEJZVEVfT0ZGU0VUOwotCQltLT5tX3BrdGhkci5sZW4gPSBt
LT5tX2xlbiA9IGxlbjsKLQkJbS0+bV9wa3RoZHIucmN2aWYgPSBpZnA7Ci0JCWdtYWNfcnhfcGFz
c1tjcHVdKys7Ci0JfSBlbHNlIHsKLQkJZ21hY19yeF9mYWlsW2NwdV0rKzsKLQl9Ci0JbXNncm5n
X2FjY2Vzc19lbmFibGUobXNncm5nX2ZsYWdzKTsKLQl4bHJfbWFjX3NlbmRfZnIoJnNjLT5wcml2
LCBwYWRkciwgTUFYX0ZSQU1FX1NJWkUpOwotCW1zZ3JuZ19hY2Nlc3NfZGlzYWJsZShtc2dybmdf
ZmxhZ3MpOwotCi0jaWZkZWYgRFVNUF9QQUNLRVRTCi0JewotCQlpbnQgaSA9IDA7Ci0JCXVuc2ln
bmVkIGNoYXIgKmJ1ZiA9IChjaGFyICopbS0+bV9kYXRhOwotCi0JCXByaW50ZigiUnggUGFja2V0
OiBsZW5ndGg9JWRcbiIsIGxlbik7Ci0JCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCQlp
ZiAoaSAmJiAoaSAlIDE2KSA9PSAwKQotCQkJCXByaW50ZigiXG4iKTsKLQkJCXByaW50ZigiJTAy
eCAiLCBidWZbaV0pOwotCQl9Ci0JCXByaW50ZigiXG4iKTsKLQl9Ci0jZW5kaWYKLQotCi0JaWYg
KG0pIHsKLQkJaWZwLT5pZl9pcGFja2V0cysrOwotCQkoKmlmcC0+aWZfaW5wdXQpIChpZnAsIG0p
OwotCX0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1yZ2Vfcngoc3RydWN0IHJnZV9zb2Z0YyAq
c2MsIHZtX3BhZGRyX3QgcGFkZHIsIGludCBsZW4pCi17Ci0JLyoKLQkgKiBzdHJ1Y3QgbWJ1ZiAq
bSA9IChzdHJ1Y3QgbWJ1ZiAqKSoodW5zaWduZWQgaW50ICopKChjaGFyICopYWRkciAtCi0JICog
WExSX0NBQ0hFTElORV9TSVpFKTsKLQkgKi8KLQlzdHJ1Y3QgbWJ1ZiAqbTsKLQl1aW50MzJfdCAq
dGVtcCwgdG0sIG1hZzsKLQotCXN0cnVjdCBpZm5ldCAqaWZwID0gc2MtPnJnZV9pZnA7Ci0KLQot
CXRlbXAgPSAodWludDMyX3QgKikgTUlQU19QSFlTX1RPX0tTRUcwKHBhZGRyIC0gWExSX0NBQ0hF
TElORV9TSVpFKTsKLQl0bSA9IHRlbXBbMF07Ci0JbWFnID0gdGVtcFsxXTsKIAltID0gKHN0cnVj
dCBtYnVmICopdG07CiAJaWYgKG1hZyAhPSAweGYwMGJhZCkgewogCQkvKiBzb21lYm9keSBlbHNl
IHBhY2tldCBFcnJvciAtIEZJWE1FIGluIGludGlhbGl6YXRpb24gKi8KQEAgLTIyMDEsOCArMjAx
Niw2IEBACiAJKCppZnAtPmlmX2lucHV0KSAoaWZwLCBtKTsKIH0KIAotI2VuZGlmCi0KIHN0YXRp
YyB2b2lkCiByZ2VfaW50cih2b2lkICphcmcpCiB7CkBAIC0yMjY4LDggKzIwODEsOCBAQAogCWlu
dCBwcmVwZW5kX3BrdCA9IDA7CiAJaW50IGkgPSAwOwogCXN0cnVjdCBwMmRfdHhfZGVzYyAqdHhf
ZGVzYyA9IE5VTEw7Ci0JaW50IGNwdSA9IHhscl9jcHVfaWQoKTsKLQl1aW50MzJfdCB2Y3B1ID0g
KGNwdSA8PCAyKSArIHhscl90aHJfaWQoKTsKKwlpbnQgY3B1ID0geGxyX2NvcmVfaWQoKTsKKwl1
aW50MzJfdCB2Y3B1ID0geGxyX2NwdV9pZCgpOwogCiAJaWYgKCEoaWZwLT5pZl9kcnZfZmxhZ3Mg
JiBJRkZfRFJWX1JVTk5JTkcpKQogCQlyZXR1cm47CkBAIC0yNzE2LDkgKzI1MjksNiBAQAogewog
CWluaXRfcDJkX2FsbG9jYXRpb24oKTsKIAlpbml0X3R4X3JpbmcoKTsKLSNpZmRlZiBSWF9DT1BZ
Ci0JaW5pdF9yeF9idWYoKTsKLSNlbmRpZgogCiAJaWYgKHhscl9ib2FyZF9pbmZvLmlzX3hscykg
ewogCQlpZiAocmVnaXN0ZXJfbXNncmluZ19oYW5kbGVyKFRYX1NUTl9HTUFDMCwKSW5kZXg6IHN5
cy9taXBzL3JtaS94bHJjb25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbWlwcy9ybWkveGxyY29u
ZmlnLmgJKHJldmlzaW9uIDIwNjczNSkKKysrIHN5cy9taXBzL3JtaS94bHJjb25maWcuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI3LDM5ICsxMjcsMzUgQEAKICAgICAgICAgOiIkOCIsICIkOSIpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICB9IHdoaWxlKDAp
CiAKLSNpZiAwCi0jZGVmaW5lIHhscl9wcm9jZXNzb3JfaWQoKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSB4bHJfY3B1X2lkKCkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICh7aW50IF9faWQ7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgX19hc21fXyBfX3ZvbGF0
aWxlX18gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAg
ICAgICAiLnNldCBwdXNoXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICAgICAgICAgIi5zZXQgbm9yZW9yZGVyXG4iICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICIud29yZCAweDQwMDg4MDA3XG4iICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAic3JsICAkOCwgJDgsIDEwXG4iICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgImFuZGkgJTAsICQ4
LCAweDNmXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICJt
ZmMwICQ4LCAkMTUsIDFcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAiYW5kaSAlMCwgJDgsIDB4MWZcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgICAgIi5zZXQgcG9wXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgICAgICAgIDogIj1yIiAoX19pZCkgOiA6ICIkOCIpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogIF9faWQ7fSkKLSNlbmRpZgogCi0jZGVmaW5lIHhs
cl9jcHVfaWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVm
aW5lIHhscl9jb3JlX2lkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogKHtpbnQgX19pZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICIuc2V0IHB1c2hcbiIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAiLnNldCBub3Jl
b3JkZXJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
Ii53b3JkIDB4NDAwODgwMDdcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICJzcmwgICQ4LCAkOCwgNFxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAiYW5kaSAlMCwgJDgsIDB4N1xuIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAibWZjMCAkOCwgJDE1LCAxXG4iICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgImFuZGkgJTAsICQ4LCAweDFm
XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICIuc2V0IHBv
cFxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAg
ICA6ICI9ciIgKF9faWQpIDogOiAiJDgiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSBfX2lkO30pCisgX19pZC80O30pCiAKLSNkZWZpbmUgeGxyX3Rocl9pZCgpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgeGxyX3Rocl9pZCgpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAoe2ludCBfX2lkOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIF9fYXNt
X18gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICAgICAgICAgIi5zZXQgcHVzaFxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgICAgICIuc2V0IG5vcmVvcmRlclxuIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAiLndvcmQgMHg0MDA4ODAwN1xuIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgImFuZGkgJTAsICQ4
LCAweDAzXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICJt
ZmMwICQ4LCAkMTUsIDFcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAiYW5kaSAlMCwgJDgsIDB4M1xuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgICAgIi5zZXQgcG9wXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgICAgICAgIDogIj1yIiAoX19pZCkgOiA6ICIkOCIpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogIF9faWQ7fSkKQEAgLTMzMyw0ICszMjksMjYgQEAK
IAkgICAgOiAgICAgICAiJDgiLCAiJDkiKTsKIH0KIAorc3RhdGljIF9faW5saW5lX18gdWludDMy
X3QKK3hscl9wYWRkcl9sdyh1aW50NjRfdCBwYWRkcikKK3sKKyAgICAgICAgdWludDMyX3QgaGln
aCwgbG93LCB0bXA7CisKKyAgICAgICAgaGlnaCA9IDB4OTgwMDAwMDAgfCAocGFkZHIgPj4gMzIp
OworICAgICAgICBsb3cgPSBwYWRkciAmIDB4ZmZmZmZmZmY7CisKKyAgICAgICAgX19hc21fXyBf
X3ZvbGF0aWxlX18oCisgICAgICAgICAgICAgICAgICAgICIuc2V0IHB1c2ggICAgICAgICBcblx0
IgorICAgICAgICAgICAgICAgICAgICAiLnNldCBtaXBzNjQgICAgICAgXG5cdCIKKyAgICAgICAg
ICAgICAgICAgICAgImRzbGwzMiAlMSwgJTEsIDAgIFxuXHQiCisgICAgICAgICAgICAgICAgICAg
ICJkc2xsMzIgJTIsICUyLCAwICBcblx0IiAgLyogZ2V0IHJpZCBvZiB0aGUgKi8KKyAgICAgICAg
ICAgICAgICAgICAgImRzcmwzMiAlMiwgJTIsIDAgIFxuXHQiICAvKiBzaWduIGV4dGVuZCAqLwor
ICAgICAgICAgICAgICAgICAgICAib3IgICAgICUxLCAlMSwgJTIgXG5cdCIKKyAgICAgICAgICAg
ICAgICAgICAgImx3ICAgICAlMCwgMCglMSkgIFxuXHQiCisgICAgICAgICAgICAgICAgICAgICIu
c2V0IHBvcCAgICAgICAgICAgXG4iCisgICAgICAgICAgICA6ICAgICAgICI9ciIodG1wKQorICAg
ICAgICAgICAgOiAgICAgICAiciIoaGlnaCksICJyIihsb3cpKTsKKworCXJldHVybiB0bXA7Cit9
CiAjZW5kaWYKSW5kZXg6IHN5cy9taXBzL3JtaS9vbl9jaGlwLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz
L21pcHMvcm1pL29uX2NoaXAuYwkocmV2aXNpb24gMjA2NzM1KQorKysgc3lzL21pcHMvcm1pL29u
X2NoaXAuYwkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsMTggQEAKICNpbmNsdWRlIDxzeXMv
bGltaXRzLmg+CiAjaW5jbHVkZSA8c3lzL2J1cy5oPgogCisjaW5jbHVkZSA8c3lzL2t0ci5oPgor
I2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RocmVhZC5oPgorI2luY2x1
ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNldmFyLmg+CisjaW5jbHVkZSA8
c3lzL3NjaGVkLmg+CisjaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zeXNj
dGwuaD4KKwogI2luY2x1ZGUgPG1hY2hpbmUvcmVnLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9jcHUu
aD4KKyNpbmNsdWRlIDxtYWNoaW5lL2h3ZnVuYy5oPgogI2luY2x1ZGUgPG1hY2hpbmUvbWlwc19v
cGNvZGUuaD4KIAogI2luY2x1ZGUgPG1hY2hpbmUvcGFyYW0uaD4KQEAgLTYyLDYgKzcyLDE2IEBA
CiAJdm9pZCAqZGV2X2lkOwogfTsKIAorc3RydWN0IG1zZ3JpbmdfaXRocmVhZCB7CisJc3RydWN0
IHRocmVhZCAqaV90aHJlYWQ7CisJdV9pbnQgaV9wZW5kaW5nOworCXVfaW50IGlfZmxhZ3M7CisJ
aW50IGlfY3B1OworfTsKKworc3RydWN0IG1zZ3JpbmdfaXRocmVhZCBtc2dyaW5nX2l0aHJlYWRz
W01BWENQVV07CitjaGFyIGl0aGRfbmFtZVtNQVhDUFVdWzMyXTsKKwogLyogZ2xvYmFscyAqLwog
c3RhdGljIHN0cnVjdCB0eF9zdG5faGFuZGxlciB0eF9zdG5faGFuZGxlcnNbTUFYX1RYX1NUTlNd
OwogCkBAIC05MSw4ICsxMTEsNiBAQAogCiB1aW50MzJfdCBtc2dybmdfbXNnX2N5Y2xlcyA9IDA7
CiAKLWludCB4bHJfY291bnRlcnNbTUFYQ1BVXVtYTFJfTUFYX0NPVU5URVJTXSBfX2FsaWduZWQo
WExSX0NBQ0hFTElORV9TSVpFKTsKLQogdm9pZCB4bHJfbXNncmluZ19oYW5kbGVyKHN0cnVjdCB0
cmFwZnJhbWUgKik7CiAKIHZvaWQgCkBAIC0xMDMsMTEgKzEyMSwxMiBAQAogCWludCBpZDsKIAl1
bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogaWYgbm90IHRocmVhZCAwICovCi0JaWYgKHhscl90
aHJfaWQoKSAhPSAwKQotCQlyZXR1cm47Ci0JaWQgPSB4bHJfY3B1X2lkKCk7CisJS0FTU0VSVCh4
bHJfdGhyX2lkKCkgPT0gMCwKKwkJKCJ4bHJfbXNncmluZ19jcHVfaW5pdCBmcm9tIG5vbi16ZXJv
IHRocmVhZFxuIikpOwogCisJaWQgPSB4bHJfY29yZV9pZCgpOworCXByaW50ZigibXNncm5nIGlu
aXQgb24gY29yZSAlZCwgdGhyICVkXG4iLCAgaWQsIHhscl90aHJfaWQoKSk7CisKIAlidWNrZXRf
c2l6ZXMgPSB4bHJfYm9hcmRfaW5mby5idWNrZXRfc2l6ZXM7CiAJY2NfY29uZmlnID0geGxyX2Jv
YXJkX2luZm8uY3JlZGl0X2NvbmZpZ3NbaWRdOwogCkBAIC0xNTYsMTAgKzE3NSw2IEBACiAKIAlt
c2dyaW5nX3dhdGVybWFya19jb3VudCA9IDE7CiAJbXNncmluZ190aHJlYWRfbWFzayA9IDB4MDE7
Ci0vKiAgIHByaW50ZigiWyVzXTogaW50X3R5cGUgPSAweCV4LCBwb3BfbnVtX2J1Y2tldHM9JWQs
IHBvcF9idWNrZXRfbWFzaz0leCIgKi8KLS8qICAgICAgICAgICJ3YXRlcm1hcmtfY291bnQ9JWQs
IHRocmVhZF9tYXNrPSV4XG4iLCBfX0ZVTkNUSU9OX18sICovCi0vKiAgICAgICAgICBtc2dyaW5n
X2ludF90eXBlLCBtc2dyaW5nX3BvcF9udW1fYnVja2V0cywgbXNncmluZ19wb3BfYnVja2V0X21h
c2ssICovCi0vKiAgICAgICAgICBtc2dyaW5nX3dhdGVybWFya19jb3VudCwgbXNncmluZ190aHJl
YWRfbWFzayk7ICovCiB9CiAKIHZvaWQgCkBAIC0xNzIsNyArMTg3LDYgQEAKIAl1bnNpZ25lZCBp
bnQgYnVja2V0X2VtcHR5X2JtID0gMDsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKIAotCXhs
cl9pbmNfY291bnRlcihNU0dSTkdfSU5UKTsKIAkvKiBUT0RPOiBub3QgbmVjZXNzYXJ5IHRvIGRp
c2FibGUgcHJlZW1wdGlvbiAqLwogCW1zZ3JuZ19mbGFnc19zYXZlKG1mbGFncyk7CiAKQEAgLTE4
NSw4ICsxOTksNiBAQAogCQkJYnJlYWs7CiAKIAkJZm9yIChidWNrZXQgPSAwOyBidWNrZXQgPCBt
c2dyaW5nX3BvcF9udW1fYnVja2V0czsgYnVja2V0KyspIHsKLQkJCXVpbnQzMl90IGN5Y2xlcyA9
IDA7Ci0KIAkJCWlmICgoYnVja2V0X2VtcHR5X2JtICYgKDEgPDwgYnVja2V0KSkgLyogZW1wdHkg
Ki8gKQogCQkJCWNvbnRpbnVlOwogCkBAIC0xOTQsMTAgKzIwNiw2IEBACiAJCQlpZiAoc3RhdHVz
KQogCQkJCWNvbnRpbnVlOwogCi0JCQl4bHJfaW5jX2NvdW50ZXIoTVNHUk5HX01TRyk7Ci0JCQlt
c2dybmdfbXNnX2N5Y2xlcyA9IG1pcHNfcmRfY291bnQoKTsKLQkJCWN5Y2xlcyA9IG1zZ3JuZ19t
c2dfY3ljbGVzOwotCiAJCQl0eF9zdGlkID0geGxyX2JvYXJkX2luZm8ubXNnbWFwW3J4X3N0aWRd
OwogCiAJCQlpZiAoIXR4X3N0bl9oYW5kbGVyc1t0eF9zdGlkXS5hY3Rpb24pIHsKQEAgLTIxMSwx
NyArMjE5LDEyIEBACiAJCQkJICAgICZtc2csIHR4X3N0bl9oYW5kbGVyc1t0eF9zdGlkXS5kZXZf
aWQpOwogCQkJCW1zZ3JuZ19mbGFnc19zYXZlKG1mbGFncyk7CiAJCQl9Ci0JCQl4bHJfc2V0X2Nv
dW50ZXIoTVNHUk5HX01TR19DWUNMRVMsIChyZWFkX2MwX2NvdW50KCkgLSBjeWNsZXMpKTsKIAkJ
fQogCX0KIAogCXhscl9zZXRfY291bnRlcihNU0dSTkdfRVhJVF9TVEFUVVMsIG1zZ3JuZ19yZWFk
X3N0YXR1cygpKTsKIAogCW1zZ3JuZ19mbGFnc19yZXN0b3JlKG1mbGFncyk7Ci0KLQkvL2RiZ19t
c2coIk9VVCBpcnE9JWRcbiIsIGlycSk7Ci0KLQkvKiBDYWxsIHRoZSBtc2cgY2FsbGJhY2sgKi8K
IH0KIAogdm9pZCAKQEAgLTI0OSw5ICsyNTIsMTE3IEBACiAJbXNncm5nX2FjY2Vzc19yZXN0b3Jl
KCZtc2dybmdfbG9jaywgbWZsYWdzKTsKIH0KIAotZXh0ZXJuIHZvaWQgcGxhdGZvcm1fcHJlcF9z
bXBfbGF1bmNoKHZvaWQpOwotZXh0ZXJuIHZvaWQgbXNncmluZ19wcm9jZXNzX2Zhc3RfaW50cih2
b2lkICphcmcpOworc3RhdGljIGludAorbXNncmluZ19wcm9jZXNzX2Zhc3RfaW50cih2b2lkICph
cmcpCit7CisJaW50IGNwdSA9IFBDUFVfR0VUKGNwdWlkKTsKKwl2b2xhdGlsZSBzdHJ1Y3QgbXNn
cmluZ19pdGhyZWFkICppdDsKKwlzdHJ1Y3QgdGhyZWFkICp0ZDsKIAorCS8qIHdha2V1cCBhbiBh
cHByb3ByaWF0ZSBpbnRyX3RocmVhZCBmb3IgcHJvY2Vzc2luZyB0aGlzIGludGVycnVwdCAqLwor
CWl0ID0gKHZvbGF0aWxlIHN0cnVjdCBtc2dyaW5nX2l0aHJlYWQgKikmbXNncmluZ19pdGhyZWFk
c1tjcHVdOworCXRkID0gaXQtPmlfdGhyZWFkOworCisJLyoKKwkgKiBJbnRlcnJ1cHQgdGhyZWFk
IHdpbGwgZW5hYmxlIHRoZSBpbnRlcnJ1cHRzIGFmdGVyIHByb2Nlc3NpbmcgYWxsCisJICogbWVz
c2FnZXMKKwkgKi8KKwlkaXNhYmxlX21zZ3JpbmdfaW50KE5VTEwpOworCWF0b21pY19zdG9yZV9y
ZWxfaW50KCZpdC0+aV9wZW5kaW5nLCAxKTsKKwl0aHJlYWRfbG9jayh0ZCk7CisJaWYgKFREX0FX
QUlUSU5HX0lOVFIodGQpKSB7CisJCVREX0NMUl9JV0FJVCh0ZCk7CisJCXNjaGVkX2FkZCh0ZCwg
U1JRX0lOVFIpOworCX0KKwl0aHJlYWRfdW5sb2NrKHRkKTsKKwlyZXR1cm4gRklMVEVSX0hBTkRM
RUQ7Cit9CisKK3N0YXRpYyB2b2lkCittc2dyaW5nX3Byb2Nlc3Modm9pZCAqYXJnKQoreworCXZv
bGF0aWxlIHN0cnVjdCBtc2dyaW5nX2l0aHJlYWQgKml0aGQ7CisJc3RydWN0IHRocmVhZCAqdGQ7
CisJc3RydWN0IHByb2MgKnA7CisKKwl0ZCA9IGN1cnRocmVhZDsKKwlwID0gdGQtPnRkX3Byb2M7
CisJaXRoZCA9ICh2b2xhdGlsZSBzdHJ1Y3QgbXNncmluZ19pdGhyZWFkICopYXJnOworCUtBU1NF
UlQoaXRoZC0+aV90aHJlYWQgPT0gdGQsCisJICAgICgiJXM6bXNnX2l0aHJlYWQgYW5kIHByb2Mg
bGlua2FnZSBvdXQgb2Ygc3luYyIsIF9fZnVuY19fKSk7CisKKwkvKiBGaXJzdCBiaW5kIHRoaXMg
dGhyZWFkIHRvIHRoZSByaWdodCBDUFUgKi8KKwl0aHJlYWRfbG9jayh0ZCk7CisJc2NoZWRfYmlu
ZCh0ZCwgaXRoZC0+aV9jcHUpOworCXRocmVhZF91bmxvY2sodGQpOworCisJLy9wcmludGYoIlN0
YXJ0ZWQgJXMgb24gQ1BVICVkXG4iLCBfX0ZVTkNUSU9OX18sIGl0aGQtPmlfY3B1KTsKKworCXdo
aWxlICgxKSB7CisJCXdoaWxlIChpdGhkLT5pX3BlbmRpbmcpIHsKKwkJCS8qCisJCQkgKiBUaGlz
IG1pZ2h0IG5lZWQgYSBmdWxsIHJlYWQgYW5kIHdyaXRlIGJhcnJpZXIgdG8KKwkJCSAqIG1ha2Ug
c3VyZSB0aGF0IHRoaXMgd3JpdGUgcG9zdHMgYmVmb3JlIGFueSBvZiB0aGUKKwkJCSAqIG1lbW9y
eSBvciBkZXZpY2UgYWNjZXNzZXMgaW4gdGhlIGhhbmRsZXJzLgorCQkJICovCisJCQl4bHJfbXNn
cmluZ19oYW5kbGVyKE5VTEwpOworCQkJYXRvbWljX3N0b3JlX3JlbF9pbnQoJml0aGQtPmlfcGVu
ZGluZywgMCk7CisJCQllbmFibGVfbXNncmluZ19pbnQoTlVMTCk7CisJCX0KKwkJaWYgKCFpdGhk
LT5pX3BlbmRpbmcpIHsKKwkJCXRocmVhZF9sb2NrKHRkKTsKKwkJCWlmIChpdGhkLT5pX3BlbmRp
bmcpIHsKKwkJCSAgdGhyZWFkX3VubG9jayh0ZCk7CisJCQkgIGNvbnRpbnVlOworCQkJfQorCQkJ
c2NoZWRfY2xhc3ModGQsIFBSSV9JVEhEKTsKKwkJCVREX1NFVF9JV0FJVCh0ZCk7CisJCQltaV9z
d2l0Y2goU1dfVk9MLCBOVUxMKTsKKwkJCXRocmVhZF91bmxvY2sodGQpOworCQl9CisJfQorCit9
CisKK3N0YXRpYyB2b2lkIAorY3JlYXRlX21zZ3JpbmdfdGhyZWFkcyh2b2lkKQoreworCWludCBj
cHU7CisJdWludDMyX3QgY3B1X21hc2s7CisJc3RydWN0IG1zZ3JpbmdfaXRocmVhZCAqaXRoZDsK
KwlzdHJ1Y3QgdGhyZWFkICp0ZDsKKwlzdHJ1Y3QgcHJvYyAqcDsKKwlpbnQgZXJyb3I7CisKKwlj
cHVfbWFzayA9IFBDUFVfR0VUKGNwdW1hc2spIHwgUENQVV9HRVQob3RoZXJfY3B1cyk7CisKKwkv
KiBDcmVhdGUga2VybmVsIHRocmVhZHMgZm9yIG1lc3NhZ2UgcmluZyBpbnRlcnJ1cHQgcHJvY2Vz
c2luZyAqLworCS8qIEN1cnJlbnRseSBjcmVhdGUgb25lIHRhc2sgZm9yIHRocmVhZCAwIG9mIGVh
Y2ggY29yZSAqLworCWZvciAoY3B1ID0gMDsgY3B1IDwgTUFYQ1BVOyBjcHUgKz0gNCkgeworCQlp
dGhkID0gJm1zZ3JpbmdfaXRocmVhZHNbY3B1XTsKKwkJc3ByaW50ZihpdGhkX25hbWVbY3B1XSwg
Im1zZ19pbnRyJWQiLCBjcHUpOworCQllcnJvciA9IGtwcm9jX2NyZWF0ZShtc2dyaW5nX3Byb2Nl
c3MsCisJCSAgICAodm9pZCAqKWl0aGQsCisJCSAgICAmcCwKKwkJICAgIChSRlNUT1BQRUQgfCBS
RkhJR0hQSUQpLAorCQkgICAgMiwKKwkJICAgIGl0aGRfbmFtZVtjcHVdKTsKKworCQlpZiAoZXJy
b3IpCisJCQlwYW5pYygia3Byb2NfY3JlYXRlKCkgZmFpbGVkIHdpdGggJWQiLCBlcnJvcik7CisJ
CXRkID0gRklSU1RfVEhSRUFEX0lOX1BST0MocCk7CS8qIFhYWEtTRSAqLworCisJCXRocmVhZF9s
b2NrKHRkKTsKKwkJc2NoZWRfY2xhc3ModGQsIFBSSV9JVEhEKTsKKwkJVERfU0VUX0lXQUlUKHRk
KTsKKwkJdGhyZWFkX3VubG9jayh0ZCk7CisJCWl0aGQtPmlfdGhyZWFkID0gdGQ7CisJCWl0aGQt
PmlfcGVuZGluZyA9IDA7CisJCWl0aGQtPmlfY3B1ID0gY3B1OworCQlDVFIyKEtUUl9JTlRSLCAi
JXM6IGNyZWF0ZWQgJXMiLCBfX2Z1bmNfXywgaXRoZF9uYW1lW2NwdV0pOworCX0KK30KKwogaW50
IAogcmVnaXN0ZXJfbXNncmluZ19oYW5kbGVyKGludCBtYWpvciwKICAgICB2b2lkICgqYWN0aW9u
KSAoaW50LCBpbnQsIGludCwgaW50LCBzdHJ1Y3QgbXNncm5nX21zZyAqLCB2b2lkICopLApAQCAt
MjcyLDggKzM4Myw3IEBACiAJICBtdHhfdW5sb2NrX3NwaW4oJm1zZ3JuZ19sb2NrKTsKIAogCWlm
ICh4bHJfdGVzdF9hbmRfc2V0KCZtc2dyaW5nX2ludF9lbmFibGVkKSkgewotCQlwbGF0Zm9ybV9w
cmVwX3NtcF9sYXVuY2goKTsKLQorCQljcmVhdGVfbXNncmluZ190aHJlYWRzKCk7CiAJCWNwdV9l
c3RhYmxpc2hfaGFyZGludHIoIm1zZ3JpbmciLCAoZHJpdmVyX2ZpbHRlcl90ICopIG1zZ3Jpbmdf
cHJvY2Vzc19mYXN0X2ludHIsCiAJCQlOVUxMLCBOVUxMLCBJUlFfTVNHUklORywgCiAJCQlJTlRS
X1RZUEVfTkVUIHwgSU5UUl9GQVNULCAmY29va2llKTsKQEAgLTMwMyw3ICs0MTMsOCBAQAogCQkg
KiBVc2UgbG9jYWwgc2NoZWR1bGluZyBhbmQgaGlnaCBwb2xhcml0eSBmb3IgYWxsIElSVHMKIAkJ
ICogSW52YWxpZGF0ZSBhbGwgSVJUcywgYnkgZGVmYXVsdAogCQkgKi8KLQkJeGxyX3dyaXRlX3Jl
ZyhtbWlvLCBQSUNfSVJUXzFfQkFTRSArIGksIChsZXZlbCA8PCAzMCkgfCAoMSA8PCA2KSB8IChQ
SUNfSVJRX0JBU0UgKyBpKSk7CisJCXhscl93cml0ZV9yZWcobW1pbywgUElDX0lSVF8xX0JBU0Ug
KyBpLCAobGV2ZWwgPDwgMzApIHwgKDEgPDwgNikgfAorCQkgICAgKFBJQ19JUlFfQkFTRSArIGkp
KTsKIAl9CiAJZGJnX21zZygiUElDIGluaXQgbm93IGRvbmVcbiIpOwogfQpAQCAtMzExLDggKzQy
Miw2IEBACiB2b2lkIAogb25fY2hpcF9pbml0KHZvaWQpCiB7Ci0JaW50IGkgPSAwLCBqID0gMDsK
LQogCS8qIFNldCB4bHJfaW9fYmFzZSB0byB0aGUgcnVuIHRpbWUgdmFsdWUgKi8KIAltdHhfaW5p
dCgmbXNncm5nX2xvY2ssICJtc2dyaW5nIiwgTlVMTCwgTVRYX1NQSU4gfCBNVFhfUkVDVVJTRSk7
CiAJbXR4X2luaXQoJnhscl9waWNfbG9jaywgInBpYyIsIE5VTEwsIE1UWF9TUElOKTsKQEAgLTMy
NSw4ICs0MzQsNCBAQAogCXBpY19pbml0KCk7CiAKIAl4bHJfbXNncmluZ19jcHVfaW5pdCgpOwot
Ci0JZm9yIChpID0gMDsgaSA8IE1BWENQVTsgaSsrKQotCQlmb3IgKGogPSAwOyBqIDwgWExSX01B
WF9DT1VOVEVSUzsgaisrKQotCQkJYXRvbWljX3NldF9pbnQoJnhscl9jb3VudGVyc1tpXVtqXSwg
MCk7CiB9CkluZGV4OiBzeXMvbWlwcy9ybWkveGxyX21hY2hkZXAuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz
eXMvbWlwcy9ybWkveGxyX21hY2hkZXAuYwkocmV2aXNpb24gMjA2NzM1KQorKysgc3lzL21pcHMv
cm1pL3hscl9tYWNoZGVwLmMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE5ICszNiwxMSBAQAogI2lu
Y2x1ZGUgPHN5cy9ydHByaW8uaD4KICNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KICNpbmNsdWRlIDxz
eXMvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgotI2luY2x1ZGUgPHN5cy9r
dGhyZWFkLmg+Ci0jaW5jbHVkZSA8c3lzL2t0ci5oPgogI2luY2x1ZGUgPHN5cy9saW1pdHMuaD4K
ICNpbmNsdWRlIDxzeXMvbG9jay5oPgogI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KICNpbmNsdWRl
IDxzeXMvbXV0ZXguaD4KLSNpbmNsdWRlIDxzeXMvcHJvYy5oPgogI2luY2x1ZGUgPHN5cy9yYW5k
b20uaD4KLSNpbmNsdWRlIDxzeXMvcmVzb3VyY2V2YXIuaD4KLSNpbmNsdWRlIDxzeXMvc2NoZWQu
aD4KLSNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPgogCiAj
aW5jbHVkZSA8c3lzL2NvbnMuaD4JCS8qIGNpbml0KCkgKi8KICNpbmNsdWRlIDxzeXMva2RiLmg+
CkBAIC04NywxNiArNzksMTEgQEAKICNpbmNsdWRlIDxtaXBzL3JtaS9wZXJmbW9uLmg+CiAjZW5k
aWYKIAotCi0KLXZvaWQgcGxhdGZvcm1fcHJlcF9zbXBfbGF1bmNoKHZvaWQpOwotCiB1bnNpZ25l
ZCBsb25nIHhscl9pb19iYXNlID0gKHVuc2lnbmVkIGxvbmcpKERFRkFVTFRfWExSX0lPX0JBU0Up
OwogCiAvKiA0S0Igc3RhdGljIGRhdGEgYXJlYWQgdG8ga2VlcCBhIGNvcHkgb2YgdGhlIGJvb3Rs
b2FkIGVudiB1bnRpbAogICAgdGhlIGR5bmFtaWMga2VudiBpcyBzZXR1cCAqLwogY2hhciBib290
MV9lbnZbNDA5Nl07Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfZ3A7CiBpbnQgcm1pX3NwaW5fbXV0
ZXhfc2FmZT0wOwogLyoKICAqIFBhcmFtZXRlcnMgZnJvbSBib290IGxvYWRlcgpAQCAtMTA4LDE2
ICs5NSw2IEBACiBjaGFyICoqeGxyX2FyZ3YsICoqeGxyX2VudnA7CiB1aW50NjRfdCBjcHVfbWFz
a19pbmZvOwogdWludDMyX3QgeGxyX29ubGluZV9jcHVtYXNrOwotCi0jaWZkZWYgU01QCi1zdGF0
aWMgdW5zaWduZWQgbG9uZyB4bHJfc2Vjb25kYXJ5X2dwW01BWENQVV07Ci1zdGF0aWMgdW5zaWdu
ZWQgbG9uZyB4bHJfc2Vjb25kYXJ5X3NwW01BWENQVV07Ci0KLSNlbmRpZgotZXh0ZXJuIGludCBt
aXBzX2NwdV9vbmxpbmVfbWFzazsKLWV4dGVybiBpbnQgbWlwc19jcHVfbG9naWNhbF9tYXNrOwot
dWludDMyX3QgY3B1X2x0b3BfbWFwW01BWENQVV07Ci11aW50MzJfdCBjcHVfcHRvbF9tYXBbTUFY
Q1BVXTsKIHVpbnQzMl90IHhscl9jb3JlX2NwdV9tYXNrID0gMHgxOwkvKiBDb3JlIDAgdGhyZWFk
IDAgaXMgYWx3YXlzIHRoZXJlICovCiAKIHZvaWQKQEAgLTEzMCwyNyArMTA3LDYgQEAKIAltbWlv
WzhdID0gMHgxOwogfQogCi12b2lkIAotcGxhdGZvcm1fc2Vjb25kYXJ5X2luaXQodm9pZCkKLXsK
LSNpZmRlZiBTTVAKLQl4bHJfbXNncmluZ19jcHVfaW5pdCgpOwotCi0JLyogU2V0dXAgaW50ZXJy
dXB0cyBmb3Igc2Vjb25kYXJ5IENQVXMgaGVyZSAqLwotCW1pcHNfbWFza19oYXJkX2lycShJUElf
U01QX0NBTExfRlVOQ1RJT04pOwotCW1pcHNfbWFza19oYXJkX2lycShJUElfU1RPUCk7Ci0JbWlw
c19tYXNrX2hhcmRfaXJxKElQSV9SRU5ERVpWT1VTKTsKLQltaXBzX21hc2tfaGFyZF9pcnEoSVBJ
X0FTVCk7Ci0JbWlwc19tYXNrX2hhcmRfaXJxKElSUV9USU1FUik7Ci0jaWZkZWYgWExSX1BFUkZN
T04KLQltaXBzX21hc2tfaGFyZF9pcnEoSVBJX1BFUkZNT04pOwotI2VuZGlmCi0KLQlyZXR1cm47
Ci0jZW5kaWYKLX0KLQotCiBpbnQgeGxyX2FzaWRfcGNwdSA9IDI1NjsJLyogVGhpcyB0aGUgZGVm
YXVsdCAqLwogaW50IHhscl9zaHRsYl9lbmFibGVkID0gMDsKIApAQCAtMTY4LDEzICsxMjQsMTMg
QEAKIAlpbnQgbW11X3NldHVwOwogCWludCB2YWx1ZSA9IDA7CiAJdWludDMyX3QgY3B1X21hcCA9
IHhscl9ib290MV9pbmZvLmNwdV9vbmxpbmVfbWFwOwotCXVpbnQzMl90IHRocl9tYXNrID0gY3B1
X21hcCA+PiAoeGxyX2NwdV9pZCgpIDw8IDIpOworCXVpbnQzMl90IHRocl9tYXNrID0gY3B1X21h
cCA+PiAoeGxyX2NvcmVfaWQoKSA8PCAyKTsKIAl1aW50OF90IGNvcmUwID0geGxyX2Jvb3QxX2lu
Zm8uY3B1X29ubGluZV9tYXAgJiAweGY7CiAJdWludDhfdCBjb3JlX3Rocl9tYXNrOwogCWludCBp
ID0gMCwgY291bnQgPSAwOwogCiAJLyogSWYgQ1BVMCBkaWQgbm90IGVuYWJsZSBzaGFyZWQgVExC
LCBvdGhlciBjb3JlcyBuZWVkIHRvIGZvbGxvdyAqLwotCWlmICgoeGxyX2NwdV9pZCgpICE9IDAp
ICYmICh4bHJfc2h0bGJfZW5hYmxlZCA9PSAwKSkKKwlpZiAoKHhscl9jb3JlX2lkKCkgIT0gMCkg
JiYgKHhscl9zaHRsYl9lbmFibGVkID09IDApKQogCQlyZXR1cm47CiAJLyogRmlyc3QgY2hlY2sg
aWYgZWFjaCBjb3JlIGlzIGJyb3VnaHQgdXAgd2l0aCB0aGUgc2FtZSBtYXNrICovCiAJZm9yIChp
ID0gMTsgaSA8IDg7IGkrKykgewpAQCAtMjg3LDIzICsyNDMsNyBAQAogfQogCiAKLSNpZmRlZiBT
TVAKLWV4dGVybiB2b2lkIHhscl9zZWNvbmRhcnlfc3RhcnQodW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCAKLXhscl9zZWNvbmRhcnlfZW50
cnkodm9pZCAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIHNwLCBncDsKLQl1bnNpZ25lZCBpbnQg
Y3B1ID0gKHhscl9jcHVfaWQoKSA8PCAyKSArIHhscl90aHJfaWQoKTsKLQotCXNwID0geGxyX3Nl
Y29uZGFyeV9zcFtjcHVdOwotCWdwID0geGxyX3NlY29uZGFyeV9ncFtjcHVdOwotCi0JeGxyX3Nl
Y29uZGFyeV9zdGFydCgodW5zaWduZWQgbG9uZyltaXBzX3NlY29uZGFyeV93YWl0LCBzcCwgZ3Ap
OwotfQotCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgCiB4bHJfc2V0X2Jvb3RfZmxhZ3Modm9pZCkK
IHsKIAljaGFyICpwOwpAQCAtMzQxLDcgKzI4MSw2IEBACiB9CiBleHRlcm4gdWludDMyX3QgX2Vu
ZDsKIAotCiBzdGF0aWMgdm9pZAogbWlwc19pbml0KHZvaWQpCiB7CkBAIC0zNTMsOSArMjkyLDYg
QEAKIAltaXBzX2NwdV9pbml0KCk7CiAJcG1hcF9ib290c3RyYXAoKTsKICNpZmRlZiBEREIKLSNp
ZmRlZiBTTVAKLQlzZXR1cF9ubWkoKTsKLSNlbmRpZgkJCQkvKiBTTVAgKi8KIAlrZGJfaW5pdCgp
OwogCWlmIChib290aG93dG8gJiBSQl9LREIpIHsKIAkJa2RiX2VudGVyKCJCb290IGZsYWdzIHJl
cXVlc3RlZCBkZWJ1Z2dlciIsIE5VTEwpOwpAQCAtNTIxLDI5ICs0NTcsMTcgQEAKIAlmb3IgKGkg
PSAxLCBqID0gMTsgaSA8IDMyOyBpKyspIHsKIAkJLyogQWxsb2NhdGUgc3RhY2sgZm9yIGFsbCBv
dGhlciBjcHVzIGZyb20gZmJzZCBrc2VnMCBtZW1vcnkuICovCiAJCWlmICgoMVUgPDwgaSkgJiB4
bHJfYm9vdDFfaW5mby5jcHVfb25saW5lX21hcCkgewotCQkJeGxyX3NlY29uZGFyeV9ncFtpXSA9
Ci0JCQkgICAgcG1hcF9zdGVhbF9tZW1vcnkoUEFHRV9TSVpFKTsKLQkJCWlmICgheGxyX3NlY29u
ZGFyeV9ncFtpXSkKLQkJCQlwYW5pYygiQWxsb2NhdGlvbiBmYWlsZWQgZm9yIHNlY29uZGFyeSBj
cHUgc3RhY2tzIik7Ci0JCQl4bHJfc2Vjb25kYXJ5X3NwW2ldID0KLQkJCSAgICB4bHJfc2Vjb25k
YXJ5X2dwW2ldICsgUEFHRV9TSVpFIC0gQ0FMTEZSQU1FX1NJWjsKLQkJCXhscl9zZWNvbmRhcnlf
Z3BbaV0gPSAodW5zaWduZWQgbG9uZykmX2dwOwotCQkJLyogQnVpbGQgbHRvcCBhbmQgcHRvbCBj
cHUgbWFwLiAqLwotCQkJY3B1X2x0b3BfbWFwW2pdID0gaTsKLQkJCWNwdV9wdG9sX21hcFtpXSA9
IGo7CiAJCQlpZiAoKGkgJiAweDMpID09IDApCS8qIHN0b3JlIHRocmVhZDAgb2YgZWFjaCBjb3Jl
ICovCiAJCQkJeGxyX2NvcmVfY3B1X21hc2sgfD0gKDEgPDwgaik7Ci0JCQltaXBzX2NwdV9sb2dp
Y2FsX21hc2sgfD0gKDEgPDwgaik7CiAJCQlqKys7CiAJCX0KIAl9CiAKLQltaXBzX2NwdV9vbmxp
bmVfbWFzayB8PSB4bHJfYm9vdDFfaW5mby5jcHVfb25saW5lX21hcDsKIAl3YWtldXAgPSAoKHZv
aWQgKCopICh2b2lkICosIHZvaWQgKiwgdW5zaWduZWQgaW50KSkKIAkgICAgKHVuc2lnbmVkIGxv
bmcpKHhscl9ib290MV9pbmZvLndha2V1cCkpOwogCXByaW50ZigiV2FraW5nIHVwIENQVXMgMHgl
bGx4LlxuIiwgeGxyX2Jvb3QxX2luZm8uY3B1X29ubGluZV9tYXAgJiB+KDB4MVUpKTsKIAlpZiAo
eGxyX2Jvb3QxX2luZm8uY3B1X29ubGluZV9tYXAgJiB+KDB4MVUpKQotCQl3YWtldXAoeGxyX3Nl
Y29uZGFyeV9lbnRyeSwgMCwKKwkJd2FrZXVwKG1wd2FpdCwgMCwKIAkJICAgICh1bnNpZ25lZCBp
bnQpeGxyX2Jvb3QxX2luZm8uY3B1X29ubGluZV9tYXApOwogI2VuZGlmCiAKQEAgLTU4MSwxNDUg
KzUwNSwzIEBACiBwbGF0Zm9ybV90cmFwX2V4aXQodm9pZCkKIHsKIH0KLQotCi0vKgotIHZvaWQK
LSBwbGF0Zm9ybV91cGRhdGVfaW50cm1hc2soaW50IGludHIpCi0gewotICAgd3JpdGVfYzBfZWlt
cjY0KHJlYWRfYzBfZWltcjY0KCkgfCAoMVVMTDw8aW50cikpOwotIH0KLSovCi0KLXZvaWQgCi1k
aXNhYmxlX21zZ3JpbmdfaW50KHZvaWQgKmFyZyk7Ci12b2lkIAotZW5hYmxlX21zZ3JpbmdfaW50
KHZvaWQgKmFyZyk7Ci12b2lkIHhscl9tc2dyaW5nX2hhbmRsZXIoc3RydWN0IHRyYXBmcmFtZSAq
dGYpOwotaW50IG1zZ3JpbmdfcHJvY2Vzc19mYXN0X2ludHIodm9pZCAqYXJnKTsKLQotc3RydWN0
IG1zZ3JpbmdfaXRocmVhZCB7Ci0Jc3RydWN0IHRocmVhZCAqaV90aHJlYWQ7Ci0JdV9pbnQgaV9w
ZW5kaW5nOwotCXVfaW50IGlfZmxhZ3M7Ci0JaW50IGlfY3B1OwotfTsKLXN0cnVjdCBtc2dyaW5n
X2l0aHJlYWQgbXNncmluZ19pdGhyZWFkc1tNQVhDUFVdOwotY2hhciBpdGhkX25hbWVbTUFYQ1BV
XVszMl07Ci0KLWludAotbXNncmluZ19wcm9jZXNzX2Zhc3RfaW50cih2b2lkICphcmcpCi17Ci0J
aW50IGNwdSA9IFBDUFVfR0VUKGNwdWlkKTsKLQl2b2xhdGlsZSBzdHJ1Y3QgbXNncmluZ19pdGhy
ZWFkICppdDsKLQlzdHJ1Y3QgdGhyZWFkICp0ZDsKLQotCS8qIHdha2V1cCBhbiBhcHByb3ByaWF0
ZSBpbnRyX3RocmVhZCBmb3IgcHJvY2Vzc2luZyB0aGlzIGludGVycnVwdCAqLwotCWl0ID0gKHZv
bGF0aWxlIHN0cnVjdCBtc2dyaW5nX2l0aHJlYWQgKikmbXNncmluZ19pdGhyZWFkc1tjcHVdOwot
CXRkID0gaXQtPmlfdGhyZWFkOwotCi0JLyoKLQkgKiBJbnRlcnJ1cHQgdGhyZWFkIHdpbGwgZW5h
YmxlIHRoZSBpbnRlcnJ1cHRzIGFmdGVyIHByb2Nlc3NpbmcgYWxsCi0JICogbWVzc2FnZXMKLQkg
Ki8KLQlkaXNhYmxlX21zZ3JpbmdfaW50KE5VTEwpOwotCWF0b21pY19zdG9yZV9yZWxfaW50KCZp
dC0+aV9wZW5kaW5nLCAxKTsKLQl0aHJlYWRfbG9jayh0ZCk7Ci0JaWYgKFREX0FXQUlUSU5HX0lO
VFIodGQpKSB7Ci0JCVREX0NMUl9JV0FJVCh0ZCk7Ci0JCXNjaGVkX2FkZCh0ZCwgU1JRX0lOVFIp
OwotCX0KLQl0aHJlYWRfdW5sb2NrKHRkKTsKLQlyZXR1cm4gRklMVEVSX0hBTkRMRUQ7Ci19Ci0K
LXN0YXRpYyB2b2lkCi1tc2dyaW5nX3Byb2Nlc3Modm9pZCAqYXJnKQotewotCXZvbGF0aWxlIHN0
cnVjdCBtc2dyaW5nX2l0aHJlYWQgKml0aGQ7Ci0Jc3RydWN0IHRocmVhZCAqdGQ7Ci0Jc3RydWN0
IHByb2MgKnA7Ci0KLQl0ZCA9IGN1cnRocmVhZDsKLQlwID0gdGQtPnRkX3Byb2M7Ci0JaXRoZCA9
ICh2b2xhdGlsZSBzdHJ1Y3QgbXNncmluZ19pdGhyZWFkICopYXJnOwotCUtBU1NFUlQoaXRoZC0+
aV90aHJlYWQgPT0gdGQsCi0JICAgICgiJXM6bXNnX2l0aHJlYWQgYW5kIHByb2MgbGlua2FnZSBv
dXQgb2Ygc3luYyIsIF9fZnVuY19fKSk7Ci0KLQkvKiBGaXJzdCBiaW5kIHRoaXMgdGhyZWFkIHRv
IHRoZSByaWdodCBDUFUgKi8KLQl0aHJlYWRfbG9jayh0ZCk7Ci0Jc2NoZWRfYmluZCh0ZCwgaXRo
ZC0+aV9jcHUpOwotCXRocmVhZF91bmxvY2sodGQpOwotCi0JLy9wcmludGYoIlN0YXJ0ZWQgJXMg
b24gQ1BVICVkXG4iLCBfX0ZVTkNUSU9OX18sIGl0aGQtPmlfY3B1KTsKLQotCXdoaWxlICgxKSB7
Ci0JCXdoaWxlIChpdGhkLT5pX3BlbmRpbmcpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIG1pZ2h0IG5l
ZWQgYSBmdWxsIHJlYWQgYW5kIHdyaXRlIGJhcnJpZXIgdG8KLQkJCSAqIG1ha2Ugc3VyZSB0aGF0
IHRoaXMgd3JpdGUgcG9zdHMgYmVmb3JlIGFueSBvZiB0aGUKLQkJCSAqIG1lbW9yeSBvciBkZXZp
Y2UgYWNjZXNzZXMgaW4gdGhlIGhhbmRsZXJzLgotCQkJICovCi0JCQl4bHJfbXNncmluZ19oYW5k
bGVyKE5VTEwpOwotCQkJYXRvbWljX3N0b3JlX3JlbF9pbnQoJml0aGQtPmlfcGVuZGluZywgMCk7
Ci0JCQllbmFibGVfbXNncmluZ19pbnQoTlVMTCk7Ci0JCX0KLQkJaWYgKCFpdGhkLT5pX3BlbmRp
bmcpIHsKLQkJCXRocmVhZF9sb2NrKHRkKTsKLQkJCWlmIChpdGhkLT5pX3BlbmRpbmcpIHsKLQkJ
CSAgdGhyZWFkX3VubG9jayh0ZCk7Ci0JCQkgIGNvbnRpbnVlOwotCQkJfQotCQkJc2NoZWRfY2xh
c3ModGQsIFBSSV9JVEhEKTsKLQkJCVREX1NFVF9JV0FJVCh0ZCk7Ci0JCQltaV9zd2l0Y2goU1df
Vk9MLCBOVUxMKTsKLQkJCXRocmVhZF91bmxvY2sodGQpOwotCQl9Ci0JfQotCi19Ci12b2lkIAot
cGxhdGZvcm1fcHJlcF9zbXBfbGF1bmNoKHZvaWQpCi17Ci0JaW50IGNwdTsKLQl1aW50MzJfdCBj
cHVfbWFzazsKLQlzdHJ1Y3QgbXNncmluZ19pdGhyZWFkICppdGhkOwotCXN0cnVjdCB0aHJlYWQg
KnRkOwotCXN0cnVjdCBwcm9jICpwOwotCWludCBlcnJvcjsKLQotCWNwdV9tYXNrID0gUENQVV9H
RVQoY3B1bWFzaykgfCBQQ1BVX0dFVChvdGhlcl9jcHVzKTsKLQotCS8qIENyZWF0ZSBrZXJuZWwg
dGhyZWFkcyBmb3IgbWVzc2FnZSByaW5nIGludGVycnVwdCBwcm9jZXNzaW5nICovCi0JLyogQ3Vy
cmVudGx5IGNyZWF0ZSBvbmUgdGFzayBmb3IgdGhyZWFkIDAgb2YgZWFjaCBjb3JlICovCi0JZm9y
IChjcHUgPSAwOyBjcHUgPCBNQVhDUFU7IGNwdSArPSAxKSB7Ci0KLQkJaWYgKCEoKDEgPDwgY3B1
KSAmIGNwdV9tYXNrKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgoY3B1X2x0b3BfbWFwW2NwdV0g
JSA0KSAhPSAwKQotCQkJY29udGludWU7Ci0KLQkJaXRoZCA9ICZtc2dyaW5nX2l0aHJlYWRzW2Nw
dV07Ci0JCXNwcmludGYoaXRoZF9uYW1lW2NwdV0sICJtc2dfaW50ciVkIiwgY3B1KTsKLQkJZXJy
b3IgPSBrcHJvY19jcmVhdGUobXNncmluZ19wcm9jZXNzLAotCQkgICAgKHZvaWQgKilpdGhkLAot
CQkgICAgJnAsCi0JCSAgICAoUkZTVE9QUEVEIHwgUkZISUdIUElEKSwKLQkJICAgIDIsCi0JCSAg
ICBpdGhkX25hbWVbY3B1XSk7Ci0KLQkJaWYgKGVycm9yKQotCQkJcGFuaWMoImtwcm9jX2NyZWF0
ZSgpIGZhaWxlZCB3aXRoICVkIiwgZXJyb3IpOwotCQl0ZCA9IEZJUlNUX1RIUkVBRF9JTl9QUk9D
KHApOwkvKiBYWFhLU0UgKi8KLQotCQl0aHJlYWRfbG9jayh0ZCk7Ci0JCXNjaGVkX2NsYXNzKHRk
LCBQUklfSVRIRCk7Ci0JCVREX1NFVF9JV0FJVCh0ZCk7Ci0JCXRocmVhZF91bmxvY2sodGQpOwot
CQlpdGhkLT5pX3RocmVhZCA9IHRkOwotCQlpdGhkLT5pX3BlbmRpbmcgPSAwOwotCQlpdGhkLT5p
X2NwdSA9IGNwdTsKLQkJQ1RSMihLVFJfSU5UUiwgIiVzOiBjcmVhdGVkICVzIiwgX19mdW5jX18s
IGl0aGRfbmFtZVtjcHVdKTsKLQl9Ci19CkluZGV4OiBzeXMvbWlwcy9taXBzL21hY2hkZXAuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBzeXMvbWlwcy9taXBzL21hY2hkZXAuYwkocmV2aXNpb24gMjA2NzM1KQor
Kysgc3lzL21pcHMvbWlwcy9tYWNoZGVwLmMJKHdvcmtpbmcgY29weSkKQEAgLTM0Nyw3ICszNDcs
NyBAQAogCWJjb3B5KE1pcHNUTEJNaXNzLCAodm9pZCAqKVRMQl9NSVNTX0VYQ19WRUMsCiAJICAg
ICAgTWlwc1RMQk1pc3NFbmQgLSBNaXBzVExCTWlzcyk7CiAKLSNpZmRlZiBUQVJHRVRfT0NURU9O
CisjaWYgZGVmaW5lZChUQVJHRVRfT0NURU9OKSB8fCBkZWZpbmVkKFRBUkdFVF9YTFJfWExTKQog
LyogRmFrZSwgYnV0IHN1ZmZpY2llbnQsIGZvciB0aGUgMzItYml0IHdpdGggNjQtYml0IGhhcmR3
YXJlIGFkZHJlc3NlcyAgKi8KIAliY29weShNaXBzVExCTWlzcywgKHZvaWQgKilYVExCX01JU1Nf
RVhDX1ZFQywKIAkgICAgICBNaXBzVExCTWlzc0VuZCAtIE1pcHNUTEJNaXNzKTsK
--001636b2be3f405cb90484766b03
Content-Type: application/octet-stream; name="rmi-xlr-smp.patch"
Content-Disposition: attachment; filename="rmi-xlr-smp.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g8503vpr5

ZGlmZiAtdXJOIHN5cy9taXBzL2luY2x1ZGUvcGFyYW0uaCBzeXMvbWlwcy9pbmNsdWRlL3BhcmFt
LmgKLS0tIHN5cy9taXBzL2luY2x1ZGUvcGFyYW0uaAkyMDEwLTA0LTE3IDA5OjM3OjMyLjAwMDk0
MTAwMCArMDUzMAorKysgc3lzL21pcHMvaW5jbHVkZS9wYXJhbS5oCTIwMTAtMDQtMTcgMjI6MTA6
MzIuMDAwMDEzMDAwICswNTMwCkBAIC03MCw3ICs3MCw3IEBACiAjZGVmaW5lCU1JRF9NQUNISU5F
CTAJLyogTm9uZSBidXQgaGFzIHRvIGJlIGRlZmluZWQgKi8KIAogI2lmZGVmIFNNUAotI2RlZmlu
ZQlNQVhTTVBDUFUJMTYKKyNkZWZpbmUJTUFYU01QQ1BVCTMyCiAjZGVmaW5lCU1BWENQVQkJTUFY
U01QQ1BVCiAjZWxzZQogI2RlZmluZQlNQVhTTVBDUFUJMQpkaWZmIC11ck4gc3lzL21pcHMvcm1p
L2ZpbGVzLnhsciBzeXMvbWlwcy9ybWkvZmlsZXMueGxyCi0tLSBzeXMvbWlwcy9ybWkvZmlsZXMu
eGxyCTIwMTAtMDQtMTcgMDk6MjY6MzQuMDAwMjA0MDAwICswNTMwCisrKyBzeXMvbWlwcy9ybWkv
ZmlsZXMueGxyCTIwMTAtMDQtMTcgMjI6MTA6MzIuMDAwMDMwMDAwICswNTMwCkBAIC05LDYgKzks
NyBAQAogbWlwcy9ybWkvYm9hcmQuYwkJCQlzdGFuZGFyZAogbWlwcy9ybWkvb25fY2hpcC5jCQkJ
CXN0YW5kYXJkCiBtaXBzL3JtaS9pbnRyX21hY2hkZXAuYwkJCSAgICAgICAgc3RhbmRhcmQKK21p
cHMvcm1pL21wd2FpdC5TCQkJICAgICAgICBvcHRpb25hbCBzbXAKIG1pcHMvcm1pL3hscl9pMmMu
YyAgICAgICAgICAgICAgCQlvcHRpb25hbCBpaWMKIG1pcHMvcm1pL3VhcnRfYnVzX3hscl9pb2Rp
LmMJCQlvcHRpb25hbCB1YXJ0IAogbWlwcy9ybWkvdWFydF9jcHVfbWlwc194bHIuYwkJCW9wdGlv
bmFsIHVhcnQgCmRpZmYgLXVyTiBzeXMvbWlwcy9ybWkvaW50ZXJydXB0Lmggc3lzL21pcHMvcm1p
L2ludGVycnVwdC5oCi0tLSBzeXMvbWlwcy9ybWkvaW50ZXJydXB0LmgJMjAxMC0wNC0xNyAwOToy
NjozNC4wMDAyODUwMDAgKzA1MzAKKysrIHN5cy9taXBzL3JtaS9pbnRlcnJ1cHQuaAkyMDEwLTA0
LTE4IDAwOjAxOjM0LjAwMDAyNjAwMCArMDUzMApAQCAtMzIsMTIgKzMyLDkgQEAKIAogLyogRGVm
aW5lcyBmb3IgdGhlIElSUSBudW1iZXJzICovCiAKLSNkZWZpbmUgSVJRX0RVTU1ZX1VBUlQgICAg
ICAgICAgIDIKLSNkZWZpbmUgSVJRX0lQSV9TTVBfRlVOQ1RJT04gICAgIDMKLSNkZWZpbmUgSVJR
X0lQSV9TTVBfUkVTQ0hFRFVMRSAgIDQKLSNkZWZpbmUgSVJRX1JFTU9URV9ERUJVRyAgICAgICAg
IDUKLSNkZWZpbmUgSVJRX01TR1JJTkcgICAgICAgICAgICAgIDYKLSNkZWZpbmUgSVJRX1RJTUVS
ICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgSVJRX0lQSQkJCTQxICAvKiA4LTM5IGFyZSBtYXBw
ZWQgYnkgUElDIGludHIgMC0zMSAqLworI2RlZmluZSBJUlFfTVNHUklORyAgICAgICAgICAgICA2
CisjZGVmaW5lIElSUV9USU1FUiAgICAgICAgICAgICAgIDcKIAogLyoKICAqIFhMUiBuZWVkcyBj
dXN0b20gcHJlIGFuZCBwb3N0IGhhbmRsZXJzIGZvciBQQ0kvUENJLWUgaW50ZXJydXB0cwpkaWZm
IC11ck4gc3lzL21pcHMvcm1pL2ludHJfbWFjaGRlcC5jIHN5cy9taXBzL3JtaS9pbnRyX21hY2hk
ZXAuYwotLS0gc3lzL21pcHMvcm1pL2ludHJfbWFjaGRlcC5jCTIwMTAtMDQtMTcgMDk6MjY6MzQu
MDAwMzc5MDAwICswNTMwCisrKyBzeXMvbWlwcy9ybWkvaW50cl9tYWNoZGVwLmMJMjAxMC0wNC0x
OCAwMDo0MDozOC4wMTgwNTIwMDAgKzA1MzAKQEAgLTE1NywyNiArMTU3LDcgQEAKIAlmb3IgKGkg
PSBzaXplb2YoZWlycikgKiA4IC0gMTsgaSA+PSAwOyBpLS0pIHsKIAkJaWYgKChlaXJyICYgKDFV
TEwgPDwgaSkpID09IDApCiAJCQljb250aW51ZTsKLSNpZmRlZiBTTVAKLQkJLyogVGhlc2UgYXJl
IHJlc2VydmVkIGludGVycnVwdHMgKi8KLQkJaWYgKChpID09IElQSV9BU1QpIHx8IChpID09IElQ
SV9SRU5ERVpWT1VTKSB8fCAoaSA9PSBJUElfU1RPUCkKLQkJICAgIHx8IChpID09IElQSV9TTVBf
Q0FMTF9GVU5DVElPTikpIHsKLQkJCXdyaXRlX2MwX2VpcnI2NCgxVUxMIDw8IGkpOwotCQkJcGlj
X2FjayhpLCAwKTsKLQkJCXNtcF9oYW5kbGVfaXBpKHRmLCBpKTsKLQkJCXBpY19kZWxheWVkX2Fj
ayhpLCAwKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jaWZkZWYgWExSX1BFUkZNT04KLQkJaWYgKGkg
PT0gSVBJX1BFUkZNT04pIHsKLQkJCXdyaXRlX2MwX2VpcnI2NCgxVUxMIDw8IGkpOwotCQkJcGlj
X2FjayhpLCAwKTsKLQkJCXhscl9wZXJmbW9uX3NhbXBsZXIoTlVMTCk7Ci0JCQlwaWNfZGVsYXll
ZF9hY2soaSwgMCk7Ci0JCQljb250aW51ZTsKLQkJfQotI2VuZGlmCi0jZW5kaWYKKwogCQlpZSA9
IG1pcHNfaW50cl9ldmVudHNbaV07CiAJCS8qIGF0b21pY19hZGRfbG9uZyhtaWgtPmNudHAsIDEp
OyAqLwogCmRpZmYgLXVyTiBzeXMvbWlwcy9ybWkvbXB3YWl0LlMgc3lzL21pcHMvcm1pL21wd2Fp
dC5TCi0tLSBzeXMvbWlwcy9ybWkvbXB3YWl0LlMJMTk3MC0wMS0wMSAwNTozMDowMC4wMDAwMDAw
MDAgKzA1MzAKKysrIHN5cy9taXBzL3JtaS9tcHdhaXQuUwkyMDEwLTA0LTE3IDIyOjEwOjMyLjAw
MDA1NjAwMCArMDUzMApAQCAtMCwwICsxLDY4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAx
MCBSTUkgVGVjaG5vbG9naWVzIEx0ZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZy
ZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8bWFjaGlu
ZS9jcHUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2NwdXJlZ3MuaD4KKworI2luY2x1ZGUgImFzc3lt
LnMiCisKKwkudGV4dAorCS5zZXQJbm9hdAorCS5zZXQJbm9yZW9yZGVyCisKKy8qCisgKiBPbiBY
TFIgdGhlIHNsYXZlIHByb2Nlc3NvcnMgYW5kIHRocmVhZHMgd2lsbCBiZSBleGVjdXRpbmcgYm9v
dAorICogbG9hZGVyIGNvZGUgb24gc3RhcnR1cC4gV2UgbmVlZCB0byBtYWtlIHRoZW0gcnVuIG91
ciBjb2RlIGJlZm9yZQorICogYmxvd2luZyBhd2F5IGJvb3QgbG9hZGVyIG1lbW9yeS4KKyAqLwor
TEVBRihtcHdhaXQpCisJUFRSX0xBICBncCwgX0NfTEFCRUwoX2dwKQorCVBUUl9MQSAgdDEsIF9D
X0xBQkVMKHhscl9hcF9yZWxlYXNlKQorCW1mYzAJdDIsICQxNSwgMQorCWFuZGkJdDIsIDB4MWYK
KwlzbGwJdDIsIHQyLCAyCisJYWRkCXQxLCB0MgorCisxOglsdwl0MCwgMCh0MSkKKwlibmV6CXQw
LCAyZgorCW5vcCAgICAgLyogV2Ugc2hvdWxkIG5vdCBidXN5IHdhaXQgaW4gY29yZTAgdGhyZWFk
cyAqLworCW5vcCAgICAgLyogb24gYm9vdHVwLCB0aGlzIHdpbGwgc2xvdyB0aGUgY3B1MCB0aHJl
YWQgKi8KKwlub3AgICAgIC8qIGRvd24gLSBUT0RPIC0gd2FpdCB3aXRoIElQSSBiYXNlZCB3YWtl
dXAgKi8KKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlqCTFiCisJbm9wCisyOgorCVBU
Ul9MQSAgdDEsIF9DX0xBQkVMKG1wZW50cnkpCisJanIJdDEKKwlub3AKK0VORChtcHdhaXQpCmRp
ZmYgLXVyTiBzeXMvbWlwcy9ybWkvb25fY2hpcC5jIHN5cy9taXBzL3JtaS9vbl9jaGlwLmMKLS0t
IHN5cy9taXBzL3JtaS9vbl9jaGlwLmMJMjAxMC0wNC0xNyAyMjowNDo0Mi4wMDAwNzUwMDAgKzA1
MzAKKysrIHN5cy9taXBzL3JtaS9vbl9jaGlwLmMJMjAxMC0wNC0xNyAyMzoyNzoyOC4wMDAxMDgw
MDAgKzA1MzAKQEAgLTEyNSw3ICsxMjUsNiBAQAogCQkoInhscl9tc2dyaW5nX2NwdV9pbml0IGZy
b20gbm9uLXplcm8gdGhyZWFkXG4iKSk7CiAKIAlpZCA9IHhscl9jb3JlX2lkKCk7Ci0JcHJpbnRm
KCJtc2dybmcgaW5pdCBvbiBjb3JlICVkLCB0aHIgJWRcbiIsICBpZCwgeGxyX3Rocl9pZCgpKTsK
IAogCWJ1Y2tldF9zaXplcyA9IHhscl9ib2FyZF9pbmZvLmJ1Y2tldF9zaXplczsKIAljY19jb25m
aWcgPSB4bHJfYm9hcmRfaW5mby5jcmVkaXRfY29uZmlnc1tpZF07CmRpZmYgLXVyTiBzeXMvbWlw
cy9ybWkvcGljLmggc3lzL21pcHMvcm1pL3BpYy5oCi0tLSBzeXMvbWlwcy9ybWkvcGljLmgJMjAx
MC0wNC0xNyAwOToyNjozNC4wMDAzMjMwMDAgKzA1MzAKKysrIHN5cy9taXBzL3JtaS9waWMuaAky
MDEwLTA0LTE3IDIyOjEwOjMyLjAwMDA3MzAwMCArMDUzMApAQCAtMjgxLDQgKzI4MSwxNiBAQAog
CX0KIH0KIAorc3RhdGljIGlubGluZQordm9pZCBwaWNfc2VuZF9pcGkoaW50IGNwdSwgaW50IGlw
aSwgaW50IGhhc2xvY2spCit7CisgICAgICAgIHhscl9yZWdfdCAqbW1pbyA9IHhscl9pb19tbWlv
KFhMUl9JT19QSUNfT0ZGU0VUKTsKKyAgICAgICAgaW50IHRpZCwgcGlkOworCisgICAgICAgIHRp
ZCA9IGNwdSAmIDB4MzsKKyAgICAgICAgcGlkID0gKGNwdSA+PiAyKSAmIDB4NzsKKworCXhscl93
cml0ZV9yZWcobW1pbywgUElDX0lQSSwgIChwaWQgPDwgMjApIHwgKHRpZCA8PCAxNikgfCBpcGkp
OworfQorCiAjZW5kaWYJCQkJLyogX1JNSV9QSUNfSF8gKi8KZGlmZiAtdXJOIHN5cy9taXBzL3Jt
aS94bHJfbWFjaGRlcC5jIHN5cy9taXBzL3JtaS94bHJfbWFjaGRlcC5jCi0tLSBzeXMvbWlwcy9y
bWkveGxyX21hY2hkZXAuYwkyMDEwLTA0LTE3IDIyOjA0OjQyLjAwMDA5NTAwMCArMDUzMAorKysg
c3lzL21pcHMvcm1pL3hscl9tYWNoZGVwLmMJMjAxMC0wNC0xNyAyMjoxNjo1Ny4wMDAwMjEwMDAg
KzA1MzAKQEAgLTc5LDYgKzc5LDkgQEAKICNpbmNsdWRlIDxtaXBzL3JtaS9wZXJmbW9uLmg+CiAj
ZW5kaWYKIAordm9pZCBtcHdhaXQodm9pZCk7Cit2b2lkIGVuYWJsZV9tc2dyaW5nX2ludCh2b2lk
ICphcmcpOworCiB1bnNpZ25lZCBsb25nIHhscl9pb19iYXNlID0gKHVuc2lnbmVkIGxvbmcpKERF
RkFVTFRfWExSX0lPX0JBU0UpOwogCiAvKiA0S0Igc3RhdGljIGRhdGEgYXJlYWQgdG8ga2VlcCBh
IGNvcHkgb2YgdGhlIGJvb3Rsb2FkIGVudiB1bnRpbApAQCAtMTEwLDYgKzExMyw3IEBACiBpbnQg
eGxyX2FzaWRfcGNwdSA9IDI1NjsJLyogVGhpcyB0aGUgZGVmYXVsdCAqLwogaW50IHhscl9zaHRs
Yl9lbmFibGVkID0gMDsKIAorI2lmbmRlZiBTTVAKIC8qIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0
aGUgbnVtYmVyIG9mIHRsYiBlbnRyaWVzIGF2YWlsYWJsZQogICAgdG8gdGhlIGtlcm5lbCBiYXNl
ZCBvbiB0aGUgbnVtYmVyIG9mIHRocmVhZHMgYnJvdWdodCB1cC4KICAgIFRoZSBBU0lEIHJhbmdl
IGFsc28gZ2V0cyBkaXZpZGVkIHNpbWlsYXJseS4KQEAgLTE3Myw2ICsxNzcsNyBAQAogCXdyaXRl
XzMyYml0X3BobnhfY3RybF9yZWcoNCwgMCwgbW11X3NldHVwKTsKIAogfQorI2VuZGlmCiAKIC8q
CiAgKiBQbGF0Zm9ybSBzcGVjaWZpYyByZWdpc3RlciBzZXR1cCBmb3IgQ1BVcwpAQCAtMTg3LDgg
KzE5MiwxMyBAQAogCWNoYXIgKmh3X2VudjsKIAljaGFyICpzdGFydCwgKmVuZDsKIAl1aW50MzJf
dCByZWcsIHZhbDsKKyNpZm5kZWYgU01QCiAJaW50IHRocl9pZCA9IHhscl90aHJfaWQoKTsKIAor
LyoKKyAqIFhYWDogU01QIG5vdyBuZWVkIGRpZmZlcmVudCB3aXJlZCBtYXBwaW5ncyBmb3IgdGhy
ZWFkcyAKKyAqIHdlIGNhbm5vdCBzaGFyZSBUTEJzLgorICovCiAJaWYgKHRocl9pZCA9PSAwKSB7
CiAJCWlmICgoaHdfZW52ID0gZ2V0ZW52KCJ4bHIuc2h0bGIiKSkgIT0gTlVMTCkgewogCQkJc3Rh
cnQgPSBod19lbnY7CkBAIC0yMDAsNiArMjEwLDcgQEAKIAkJCXNldHVwX3RsYl9yZXNvdXJjZSgp
OwogCQl9CiAJfQorI2VuZGlmCiAJaWYgKChod19lbnYgPSBnZXRlbnYoInhsci5jciIpKSA9PSBO
VUxMKQogCQlyZXR1cm47CiAKQEAgLTUwNSwzICs1MTYsNjEgQEAKIHBsYXRmb3JtX3RyYXBfZXhp
dCh2b2lkKQogewogfQorCisjaWZkZWYgU01QCitpbnQgeGxyX2FwX3JlbGVhc2VbTUFYQ1BVXTsK
KworaW50IHBsYXRmb3JtX3N0YXJ0X2FwKGludCBjcHVpZCkKK3sKKwkvKgorCSAqIG90aGVyIGNw
dXMgYXJlIGVuYWJsZWQgYnkgdGhlIGJvb3QgbG9hZGVyIGFuZCB0aGV5IHdpbGwgYmUgCisJICog
YWxyZWFkeSBsb29waW5nIGluIG1wd2FpdCwgcmVsZWFzZSB0aGVtCisJICovCisJYXRvbWljX3N0
b3JlX3JlbF9pbnQoJnhscl9hcF9yZWxlYXNlW2NwdWlkXSwgMSk7CisJcmV0dXJuIDA7Cit9CisK
K3ZvaWQgcGxhdGZvcm1faW5pdF9hcChpbnQgcHJvY2Vzc29yX2lkKQoreworCXVpbnQzMl90IHN0
YXQ7CisKKwkvKiBTZXR1cCBpbnRlcnJ1cHRzIGZvciBzZWNvbmRhcnkgQ1BVcyBoZXJlICovCisJ
c3RhdCA9IG1pcHNfcmRfc3RhdHVzKCk7CisJc3RhdCB8PSBNSVBTX1NSX0NPUF8yX0JJVCB8IE1J
UFNfU1JfQ09QXzBfQklUOworCW1pcHNfd3Jfc3RhdHVzKHN0YXQpOworCisJeGxyX3VubWFza19o
YXJkX2lycSgodm9pZCAqKXBsYXRmb3JtX2lwaV9pbnRybnVtKCkpOworCXhscl91bm1hc2tfaGFy
ZF9pcnEoKHZvaWQgKilJUlFfVElNRVIpOworCWlmICh4bHJfdGhyX2lkKCkgPT0gMCkgeworCQl4
bHJfbXNncmluZ19jcHVfaW5pdCgpOyAKKyAgICAgICAgCWVuYWJsZV9tc2dyaW5nX2ludChOVUxM
KTsKKwkJeGxyX3VubWFza19oYXJkX2lycSgodm9pZCAqKUlSUV9NU0dSSU5HKTsKKwl9CisJCQor
CXJldHVybjsKK30KKworaW50IHBsYXRmb3JtX2lwaV9pbnRybnVtKHZvaWQpIAoreworCXJldHVy
biBJUlFfSVBJOworfQorCit2b2lkIHBsYXRmb3JtX2lwaV9zZW5kKGludCBjcHVpZCkKK3sKKwlw
aWNfc2VuZF9pcGkoY3B1aWQsIHBsYXRmb3JtX2lwaV9pbnRybnVtKCksIDApOworfQorCit2b2lk
IHBsYXRmb3JtX2lwaV9jbGVhcih2b2lkKQoreworfQorCitpbnQgcGxhdGZvcm1fcHJvY2Vzc29y
X2lkKHZvaWQpCit7CisJcmV0dXJuIHhscl9jcHVfaWQoKTsKK30KKworaW50IHBsYXRmb3JtX251
bV9wcm9jZXNzb3JzKHZvaWQpCit7CisJcmV0dXJuIGZscyh4bHJfYm9vdDFfaW5mby5jcHVfb25s
aW5lX21hcCk7Cit9CisjZW5kaWYK
--001636b2be3f405cb90484766b03
Content-Type: application/octet-stream; name="subr_smp-fix.patch"
Content-Disposition: attachment; filename="subr_smp-fix.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g850fs2g6

SW5kZXg6IHN5cy9rZXJuL3N1YnJfc21wLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2tlcm4vc3Vicl9z
bXAuYwkocmV2aXNpb24gMjA1NDQ0KQorKysgc3lzL2tlcm4vc3Vicl9zbXAuYwkod29ya2luZyBj
b3B5KQpAQCAtNTAyLDcgKzUwMiwxMCBAQAogCXRvcCA9ICZncm91cFswXTsKIAl0b3AtPmNnX3Bh
cmVudCA9IE5VTEw7CiAJdG9wLT5jZ19jaGlsZCA9IE5VTEw7Ci0JdG9wLT5jZ19tYXNrID0gKDEg
PDwgbXBfbmNwdXMpIC0gMTsKKwlpZiAobXBfbmNwdXMgPT0gc2l6ZW9mKHRvcC0+Y2dfbWFzaykg
KiA4KQorCQl0b3AtPmNnX21hc2sgPSAtMTsKKwllbHNlCisJCXRvcC0+Y2dfbWFzayA9ICgxIDw8
IG1wX25jcHVzKSAtIDE7CiAJdG9wLT5jZ19jb3VudCA9IG1wX25jcHVzOwogCXRvcC0+Y2dfY2hp
bGRyZW4gPSAwOwogCXRvcC0+Y2dfbGV2ZWwgPSBDR19TSEFSRV9OT05FOwo=
--001636b2be3f405cb90484766b03--



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