Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Oct 2010 11:52:16 -0700
From:      Garrett Cooper <yanegomi@gmail.com>
To:        John Baldwin <jhb@freebsd.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: [PATCH] mfiutil(8) - capture errors and percolate up to caller
Message-ID:  <AANLkTimPPdHPGpfUThjeA8rmhFmrLz94DggVhkgSa=E7@mail.gmail.com>
In-Reply-To: <201010261438.10387.jhb@freebsd.org>
References:  <AANLkTikJ80npsEthOvnYy3w7Fdi8yqa_2ibbTrds9k3X@mail.gmail.com> <201010261438.10387.jhb@freebsd.org>

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

On Tue, Oct 26, 2010 at 11:38 AM, John Baldwin <jhb@freebsd.org> wrote:
> On Tuesday, October 26, 2010 2:09:53 pm Garrett Cooper wrote:
>> =A0 =A0 Because a number of places in the mfiutil(8) code immediately ca=
ll
>> warn(3) after an error to an API occurred, and because warn(3) employs
>> printf, et all (multiple times) in libc, there's an off-chance that
>> the errno value can get stomped on by the warn(3) calls, which could
>> lead to confusing results from anyone depending on the value being
>> returned from the mfiutil APIs. Thus, the attached patch I'm providing
>> fixes those cases, as well as converts an existing internal API
>> (display_pending_firmware) to an non-void return mechanism. I also
>> made a few stack variable alignment changes to match style(9) as well
>> as got rid of the ad hoc powerof2 call in favor of the value in
>> sys/param.h.
>> =A0 =A0 I've run a small number of unit tests on my desktop at home with
>> my mfi(4) card, but will test out other failing cases with equipment I
>> have access to at work.
>
> Just a few nits:
>
> 1) The include of <sys/param.h> should replace <sys/types.h> (there's a n=
ote
> about these two headers in style(9), FYI).

Done -- thanks for pointing me to that :).

> 2) patrol_get_props() should return 'error' on failure rather than 'errno=
'.

Good catch -- fixed!

> 3) mfi_get_time() failing isn't fatal. =A0The code already handles this c=
ase by
> not printing out a 'next run time' if at is zero. =A0I think you can remo=
ve the
> check for at =3D=3D 0. =A0If all the other commands work and just that co=
mmand fails
> I don't think it should be fatal.

Ok -- removed the at =3D=3D 0 check.

Thanks!
-Garrett

--00504502d357930c9b0493899b55
Content-Type: text/x-patch; charset=US-ASCII;
	name="mfiutil-capture-errno-values.patch"
Content-Disposition: attachment; filename="mfiutil-capture-errno-values.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gfr4tfub0

SW5kZXg6IHVzci5zYmluL21maXV0aWwvbWZpX2NvbmZpZy5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5z
YmluL21maXV0aWwvbWZpX2NvbmZpZy5jCShyZXZpc2lvbiAyMTQyNjApCisrKyB1c3Iuc2Jpbi9t
Zml1dGlsL21maV9jb25maWcuYwkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEyIEBACiAg
KiAkRnJlZUJTRCQKICAqLwogCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lz
L3BhcmFtLmg+CiAjaWZkZWYgREVCVUcKICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CiAjZW5kaWYK
LSNpbmNsdWRlIDxzeXMvZXJybm8uaD4KICNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxlcnJu
by5oPgogI2luY2x1ZGUgPGxpYnV0aWwuaD4KICNpZmRlZiBERUJVRwogI2luY2x1ZGUgPHN0ZGlu
dC5oPgpAQCAtNTIsOCArNTIsNiBAQAogc3RhdGljIGludAlhZGRfc3BhcmUoaW50IGFjLCBjaGFy
ICoqYXYpOwogc3RhdGljIGludAlyZW1vdmVfc3BhcmUoaW50IGFjLCBjaGFyICoqYXYpOwogCi0j
ZGVmaW5lIHBvd2Vyb2YyKHgpICAgICgoKCh4KS0xKSYoeCkpPT0wKQotCiBzdGF0aWMgbG9uZwog
ZGVodW1hbml6ZShjb25zdCBjaGFyICp2YWx1ZSkKIHsKQEAgLTE1MSwxMyArMTQ5LDE0IEBACiBj
bGVhcl9jb25maWcoaW50IGFjLCBjaGFyICoqYXYpCiB7CiAJc3RydWN0IG1maV9sZF9saXN0IGxp
c3Q7Ci0JaW50IGNoLCBmZDsKKwlpbnQgY2gsIGVycm9yLCBmZDsKIAl1X2ludCBpOwogCiAJZmQg
PSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog
CQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7
CiAJfQogCiAJaWYgKCFtZmlfcmVjb25maWdfc3VwcG9ydGVkKCkpIHsKQEAgLTE2Nyw4ICsxNjYs
OSBAQAogCX0KIAogCWlmIChtZmlfbGRfZ2V0X2xpc3QoZmQsICZsaXN0LCBOVUxMKSA8IDApIHsK
KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCB2b2x1bWUgbGlzdCIpOwot
CQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZm9yIChpID0gMDsg
aSA8IGxpc3QubGRfY291bnQ7IGkrKykgewpAQCAtMTg5LDggKzE4OSw5IEBACiAJfQogCiAJaWYg
KG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0NGR19DTEVBUiwgTlVMTCwgMCwgTlVMTCwg
MCwgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBjbGVh
ciBjb25maWd1cmF0aW9uIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsK
IAl9CiAKIAlwcmludGYoIm1maSVkOiBDb25maWd1cmF0aW9uIGNsZWFyZWRcbiIsIG1maV91bml0
KTsKQEAgLTMzNSw4ICszMzYsOSBAQAogCQkJcmV0dXJuIChlcnJvcik7CiAKIAkJaWYgKG1maV9w
ZF9nZXRfaW5mbyhmZCwgZGV2aWNlX2lkLCBwaW5mbywgTlVMTCkgPCAwKSB7CisJCQllcnJvciA9
IGVycm5vOwogCQkJd2FybigiRmFpbGVkIHRvIGZldGNoIGRyaXZlIGluZm8gZm9yIGRyaXZlICVz
IiwgY3ApOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCiAJ
CWlmIChwaW5mby0+Zndfc3RhdGUgIT0gTUZJX1BEX1NUQVRFX1VOQ09ORklHVVJFRF9HT09EKSB7
CkBAIC01NDgsOCArNTUwLDkgQEAKIAkKIAlmZCA9IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAo
ZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVy
biAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAoIW1maV9yZWNvbmZpZ19z
dXBwb3J0ZWQoKSkgewpAQCAtNjYwLDggKzY2Myw5IEBACiAJICogYXJyYXkgYW5kIHZvbHVtZSBp
ZGVudGlmaWVycy4KIAkgKi8KIAlpZiAobWZpX2NvbmZpZ19yZWFkKGZkLCAmY29uZmlnKSA8IDAp
IHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIHJlYWQgY29uZmlndXJhdGlv
biIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCXAgPSAoY2hh
ciAqKWNvbmZpZy0+YXJyYXk7CiAJc3RhdGUuYXJyYXlfcmVmID0gMHhmZmZmOwpAQCAtNzQ1LDE0
ICs3NDksMTQgQEAKICNpZmRlZiBERUJVRwogCWlmIChkdW1wKQogCQlkdW1wX2NvbmZpZyhmZCwg
Y29uZmlnKTsKLQllbHNlCiAjZW5kaWYKIAogCS8qIFNlbmQgdGhlIG5ldyBjb25maWcgdG8gdGhl
IGNvbnRyb2xsZXIuICovCiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0NGR19B
REQsIGNvbmZpZywgY29uZmlnX3NpemUsCiAJICAgIE5VTEwsIDAsIE5VTEwpIDwgMCkgeworCQll
cnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gYWRkIHZvbHVtZSIpOwotCQlyZXR1cm4g
KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogQ2xlYW4gdXAuICovCkBAIC03
NzQsNyArNzc4LDcgQEAKIGRlbGV0ZV92b2x1bWUoaW50IGFjLCBjaGFyICoqYXYpCiB7CiAJc3Ry
dWN0IG1maV9sZF9pbmZvIGluZm87Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAJdWludDhf
dCB0YXJnZXRfaWQsIG1ib3hbNF07CiAKIAkvKgpAQCAtNzk5LDggKzgwMyw5IEBACiAKIAlmZCA9
IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJ
CXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsK
IAl9CiAKIAlpZiAoIW1maV9yZWNvbmZpZ19zdXBwb3J0ZWQoKSkgewpAQCAtODEwLDEzICs4MTUs
MTUgQEAKIAl9CiAKIAlpZiAobWZpX2xvb2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmdGFyZ2V0X2lk
KSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiSW52YWxpZCB2b2x1bWUgJXMiLCBh
dlsxXSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAo
bWZpX2xkX2dldF9pbmZvKGZkLCB0YXJnZXRfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJy
b3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBpbmZvIGZvciB2b2x1bWUgJWQiLCB0
YXJnZXRfaWQpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJ
aWYgKG1maV92b2x1bWVfYnVzeShmZCwgdGFyZ2V0X2lkKSkgewpAQCAtODI4LDggKzgzNSw5IEBA
CiAJbWJveF9zdG9yZV9sZHJlZihtYm94LCAmaW5mby5sZF9jb25maWcucHJvcGVydGllcy5sZCk7
CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0xEX0RFTEVURSwgTlVMTCwgMCwg
bWJveCwKIAkgICAgc2l6ZW9mKG1ib3gpLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsK
IAkJd2FybigiRmFpbGVkIHRvIGRlbGV0ZSB2b2x1bWUiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ
CXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsKQEAgLTg1OCw4ICs4NjYsOSBAQAog
CiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVy
cm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChl
cnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2RyaXZlKGZkLCBhdlsxXSwgJmRldmlj
ZV9pZCk7CkBAIC04NjcsOCArODc2LDkgQEAKIAkJcmV0dXJuIChlcnJvcik7CiAKIAlpZiAobWZp
X3BkX2dldF9pbmZvKGZkLCBkZXZpY2VfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3Ig
PSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIGRyaXZlIGluZm8iKTsKLQkJcmV0dXJu
IChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChpbmZvLmZ3X3N0YXRlICE9
IE1GSV9QRF9TVEFURV9VTkNPTkZJR1VSRURfR09PRCkgewpAQCAtODc4LDE0ICs4ODgsMTYgQEAK
IAogCWlmIChhYyA+IDIpIHsKIAkJaWYgKG1maV9sb29rdXBfdm9sdW1lKGZkLCBhdlsyXSwgJnRh
cmdldF9pZCkgPCAwKSB7CisJCQllcnJvciA9IGVycm5vOwogCQkJd2FybigiSW52YWxpZCB2b2x1
bWUgJXMiLCBhdlsyXSk7Ci0JCQlyZXR1cm4gKGVycm5vKTsKKwkJCXJldHVybiAoZXJyb3IpOwog
CQl9CiAJfQogCiAJaWYgKG1maV9jb25maWdfcmVhZChmZCwgJmNvbmZpZykgPCAwKSB7CisJCWVy
cm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byByZWFkIGNvbmZpZ3VyYXRpb24iKTsKLQkJ
cmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXNwYXJlID0gbWFsbG9j
KHNpemVvZihzdHJ1Y3QgbWZpX3NwYXJlKSArIHNpemVvZih1aW50MTZfdCkgKgpAQCAtOTM5LDgg
Kzk1MSw5IEBACiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0NGR19NQUtFX1NQ
QVJFLCBzcGFyZSwKIAkgICAgc2l6ZW9mKHN0cnVjdCBtZmlfc3BhcmUpICsgc2l6ZW9mKHVpbnQx
Nl90KSAqIHNwYXJlLT5hcnJheV9jb3VudCwKIAkgICAgTlVMTCwgMCwgTlVMTCkgPCAwKSB7CisJ
CWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBhc3NpZ24gc3BhcmUiKTsKLQkJcmV0
dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsKQEAgLTk2
NCw4ICs5NzcsOSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkg
eworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5v
KTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2RyaXZlKGZk
LCBhdlsxXSwgJmRldmljZV9pZCk7CkBAIC05NzQsOCArOTg4LDkgQEAKIAogCS8qIEdldCB0aGUg
aW5mbyBmb3IgdGhpcyBkcml2ZS4gKi8KIAlpZiAobWZpX3BkX2dldF9pbmZvKGZkLCBkZXZpY2Vf
aWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVk
IHRvIGZldGNoIGluZm8gZm9yIGRyaXZlICV1IiwgZGV2aWNlX2lkKTsKLQkJcmV0dXJuIChlcnJu
byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChpbmZvLmZ3X3N0YXRlICE9IE1GSV9Q
RF9TVEFURV9IT1RfU1BBUkUpIHsKQEAgLTk4Niw4ICsxMDAxLDkgQEAKIAltYm94X3N0b3JlX3Bk
cmVmKG1ib3gsICZpbmZvLnJlZik7CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01E
X0NGR19SRU1PVkVfU1BBUkUsIE5VTEwsIDAsIG1ib3gsCiAJICAgIHNpemVvZihtYm94KSwgTlVM
TCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBkZWxldGUgc3Bh
cmUiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3Nl
KGZkKTsKQEAgLTEwOTMsNyArMTEwOSw3IEBACiBkZWJ1Z19jb25maWcoaW50IGFjLCBjaGFyICoq
YXYpCiB7CiAJc3RydWN0IG1maV9jb25maWdfZGF0YSAqY29uZmlnOwotCWludCBmZDsKKwlpbnQg
ZXJyb3IsIGZkOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoImRlYnVnOiBleHRyYSBhcmd1
bWVudHMiKTsKQEAgLTExMDIsMTQgKzExMTgsMTYgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3Vu
aXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4i
KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qIEdldCB0
aGUgY29uZmlnIGZyb20gdGhlIGNvbnRyb2xsZXIuICovCiAJaWYgKG1maV9jb25maWdfcmVhZChm
ZCwgJmNvbmZpZykgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBn
ZXQgY29uZmlnIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAK
IAkvKiBEdW1wIG91dCB0aGUgY29uZmlndXJhdGlvbi4gKi8KQEAgLTExMjcsNyArMTE0NSw3IEBA
CiAJc3RydWN0IG1maV9jb25maWdfZGF0YSAqY29uZmlnOwogCWNoYXIgYnVmWzY0XTsKIAlzaXpl
X3QgbGVuOwotCWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJ
d2FybngoImR1bXA6IGV4dHJhIGFyZ3VtZW50cyIpOwpAQCAtMTEzNiwyMyArMTE1NCwyNiBAQAog
CiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVy
cm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChl
cnJvcik7CiAJfQogCiAJLyogR2V0IHRoZSBzdGFzaGVkIGNvcHkgb2YgdGhlIGxhc3QgZGNtZCBm
cm9tIHRoZSBkcml2ZXIuICovCiAJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImRldi5tZmku
JWQuZGVidWdfY29tbWFuZCIsIG1maV91bml0KTsKIAlpZiAoc3lzY3RsYnluYW1lKGJ1ZiwgTlVM
TCwgJmxlbiwgTlVMTCwgMCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxl
ZCB0byByZWFkIGRlYnVnIGNvbW1hbmQiKTsKLQkJaWYgKGVycm5vID09IEVOT0VOVCkKLQkJCWVy
cm5vID0gRU9QTk9UU1VQUDsKLQkJcmV0dXJuIChlcnJubyk7CisJCWlmIChlcnJvciA9PSBFTk9F
TlQpCisJCQllcnJvciA9IEVPUE5PVFNVUFA7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNv
bmZpZyA9IG1hbGxvYyhsZW4pOwogCWlmIChzeXNjdGxieW5hbWUoYnVmLCBjb25maWcsICZsZW4s
IE5VTEwsIDApIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gcmVh
ZCBkZWJ1ZyBjb21tYW5kIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsK
IAl9CiAJZHVtcF9jb25maWcoZmQsIGNvbmZpZyk7CiAJZnJlZShjb25maWcpOwpJbmRleDogdXNy
LnNiaW4vbWZpdXRpbC9tZmlfdm9sdW1lLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNiaW4vbWZpdXRp
bC9tZmlfdm9sdW1lLmMJKHJldmlzaW9uIDIxNDI2MCkKKysrIHVzci5zYmluL21maXV0aWwvbWZp
X3ZvbHVtZS5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAKIHVwZGF0ZV9jYWNo
ZV9wb2xpY3koaW50IGZkLCBzdHJ1Y3QgbWZpX2xkX3Byb3BzICpwcm9wcywgdWludDhfdCBuZXdf
cG9saWN5LAogICAgIHVpbnQ4X3QgbWFzaykKIHsKKwlpbnQgZXJyb3I7CiAJdWludDhfdCBjaGFu
Z2VzLCBwb2xpY3k7CiAKIAlwb2xpY3kgPSAocHJvcHMtPmRlZmF1bHRfY2FjaGVfcG9saWN5ICYg
fm1hc2spIHwgbmV3X3BvbGljeTsKQEAgLTE0MCw4ICsxNDEsOSBAQAogCiAJcHJvcHMtPmRlZmF1
bHRfY2FjaGVfcG9saWN5ID0gcG9saWN5OwogCWlmIChtZmlfbGRfc2V0X3Byb3BzKGZkLCBwcm9w
cykgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBzZXQgdm9sdW1l
IHByb3BlcnRpZXMiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0K
IAlyZXR1cm4gKDApOwogfQpAQCAtMTYwLDE4ICsxNjIsMjEgQEAKIAogCWZkID0gbWZpX29wZW4o
bWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZp
X29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlm
IChtZmlfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0sICZ0YXJnZXRfaWQpIDwgMCkgeworCQllcnJv
ciA9IGVycm5vOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZTogJXMiLCBhdlsxXSk7Ci0JCXJldHVy
biAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobWZpX2xkX2dldF9wcm9w
cyhmZCwgdGFyZ2V0X2lkLCAmcHJvcHMpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu
KCJGYWlsZWQgdG8gZmV0Y2ggdm9sdW1lIHByb3BlcnRpZXMiKTsKLQkJcmV0dXJuIChlcnJubyk7
CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChhYyA9PSAyKSB7CkBAIC0yOTgsOCArMzAz
LDggQEAKIAkJCQl9CiAJCQkJcHJvcHMuZGlza19jYWNoZV9wb2xpY3kgPSBwb2xpY3k7CiAJCQkJ
aWYgKG1maV9sZF9zZXRfcHJvcHMoZmQsICZwcm9wcykgPCAwKSB7CisJCQkJCWVycm9yID0gZXJy
bm87CiAJCQkJCXdhcm4oIkZhaWxlZCB0byBzZXQgdm9sdW1lIHByb3BlcnRpZXMiKTsKLQkJCQkJ
ZXJyb3IgPSBlcnJubzsKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0zMTcsNyArMzIyLDcg
QEAKIHZvbHVtZV9uYW1lKGludCBhYywgY2hhciAqKmF2KQogewogCXN0cnVjdCBtZmlfbGRfcHJv
cHMgcHJvcHM7Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAJdWludDhfdCB0YXJnZXRfaWQ7
CiAKIAlpZiAoYWMgIT0gMykgewpAQCAtMzMyLDE4ICszMzcsMjEgQEAKIAogCWZkID0gbWZpX29w
ZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2Fybigi
bWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAog
CWlmIChtZmlfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0sICZ0YXJnZXRfaWQpIDwgMCkgeworCQll
cnJvciA9IGVycm5vOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZTogJXMiLCBhdlsxXSk7Ci0JCXJl
dHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobWZpX2xkX2dldF9w
cm9wcyhmZCwgdGFyZ2V0X2lkLCAmcHJvcHMpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3
YXJuKCJGYWlsZWQgdG8gZmV0Y2ggdm9sdW1lIHByb3BlcnRpZXMiKTsKLQkJcmV0dXJuIChlcnJu
byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXByaW50ZigibWZpJXUgdm9sdW1lICVzIG5h
bWUgY2hhbmdlZCBmcm9tIFwiJXNcIiB0byBcIiVzXCJcbiIsIG1maV91bml0LApAQCAtMzUxLDgg
KzM1OSw5IEBACiAJYnplcm8ocHJvcHMubmFtZSwgc2l6ZW9mKHByb3BzLm5hbWUpKTsKIAlzdHJj
cHkocHJvcHMubmFtZSwgYXZbMl0pOwogCWlmIChtZmlfbGRfc2V0X3Byb3BzKGZkLCAmcHJvcHMp
IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gc2V0IHZvbHVtZSBw
cm9wZXJ0aWVzIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAK
IAljbG9zZShmZCk7CkBAIC0zNjUsNyArMzc0LDcgQEAKIHZvbHVtZV9wcm9ncmVzcyhpbnQgYWMs
IGNoYXIgKiphdikKIHsKIAlzdHJ1Y3QgbWZpX2xkX2luZm8gaW5mbzsKLQlpbnQgZmQ7CisJaW50
IGVycm9yLCBmZDsKIAl1aW50OF90IHRhcmdldF9pZDsKIAogCWlmIChhYyAhPSAyKSB7CkBAIC0z
NzYsMjAgKzM4NSwyMyBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwg
MCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVy
cm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaWYgKG1maV9sb29rdXBfdm9sdW1lKGZk
LCBhdlsxXSwgJnRhcmdldF9pZCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIklu
dmFsaWQgdm9sdW1lOiAlcyIsIGF2WzFdKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAo
ZXJyb3IpOwogCX0KIAogCS8qIEdldCB0aGUgaW5mbyBmb3IgdGhpcyBkcml2ZS4gKi8KIAlpZiAo
bWZpX2xkX2dldF9pbmZvKGZkLCB0YXJnZXRfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJy
b3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIGluZm8gZm9yIHZvbHVtZSAlcyIs
CiAJCSAgICBtZmlfdm9sdW1lX25hbWUoZmQsIHRhcmdldF9pZCkpOwotCQlyZXR1cm4gKGVycm5v
KTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogRGlzcGxheSBhbnkgb2YgdGhlIGFjdGl2
ZSBldmVudHMuICovCkluZGV4OiB1c3Iuc2Jpbi9tZml1dGlsL21maV9kcml2ZS5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHVzci5zYmluL21maXV0aWwvbWZpX2RyaXZlLmMJKHJldmlzaW9uIDIxNDI2MCkKKysr
IHVzci5zYmluL21maXV0aWwvbWZpX2RyaXZlLmMJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEwICs3
OSwxMSBAQAogbWZpX2xvb2t1cF9kcml2ZShpbnQgZmQsIGNoYXIgKmRyaXZlLCB1aW50MTZfdCAq
ZGV2aWNlX2lkKQogewogCXN0cnVjdCBtZmlfcGRfbGlzdCAqbGlzdDsKLQl1aW50OF90IGVuY2ws
IHNsb3Q7CiAJbG9uZyB2YWw7CisJaW50IGVycm9yOwogCXVfaW50IGk7CiAJY2hhciAqY3A7CisJ
dWludDhfdCBlbmNsLCBzbG90OwogCiAJLyogTG9vayBmb3IgYSByYXcgZGV2aWNlIGlkIGZpcnN0
LiAqLwogCXZhbCA9IHN0cnRvbChkcml2ZSwgJmNwLCAwKTsKQEAgLTExOCw4ICsxMTksOSBAQAog
CQlzbG90ID0gdmFsOwogCiAJCWlmIChtZmlfcGRfZ2V0X2xpc3QoZmQsICZsaXN0LCBOVUxMKSA8
IDApIHsKKwkJCWVycm9yID0gZXJybm87CiAJCQl3YXJuKCJGYWlsZWQgdG8gZmV0Y2ggZHJpdmUg
bGlzdCIpOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCiAJ
CWZvciAoaSA9IDA7IGkgPCBsaXN0LT5jb3VudDsgaSsrKSB7CkBAIC0zMDIsOCArMzA0LDkgQEAK
IAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBl
cnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAo
ZXJyb3IpOwogCX0KIAogCWVycm9yID0gbWZpX2xvb2t1cF9kcml2ZShmZCwgZHJpdmUsICZkZXZp
Y2VfaWQpOwpAQCAtMzEyLDggKzMxNSw5IEBACiAKIAkvKiBHZXQgdGhlIGluZm8gZm9yIHRoaXMg
ZHJpdmUuICovCiAJaWYgKG1maV9wZF9nZXRfaW5mbyhmZCwgZGV2aWNlX2lkLCAmaW5mbywgTlVM
TCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBpbmZv
IGZvciBkcml2ZSAldSIsIGRldmljZV9pZCk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4g
KGVycm9yKTsKIAl9CiAKIAkvKiBUcnkgdG8gY2hhbmdlIHRoZSBzdGF0ZS4gKi8KQEAgLTMyNyw5
ICszMzEsMTAgQEAKIAltYm94WzVdID0gbmV3X3N0YXRlID4+IDg7CiAJaWYgKG1maV9kY21kX2Nv
bW1hbmQoZmQsIE1GSV9EQ01EX1BEX1NUQVRFX1NFVCwgTlVMTCwgMCwgbWJveCwgNiwKIAkgICAg
TlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBzZXQgZHJp
dmUgJXUgdG8gJXMiLCBkZXZpY2VfaWQsCiAJCSAgICBtZmlfcGRzdGF0ZShuZXdfc3RhdGUpKTsK
LQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsK
QEAgLTM5NSw4ICs0MDAsOSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZk
IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4g
KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2Ry
aXZlKGZkLCBhdlsxXSwgJmRldmljZV9pZCk7CkBAIC00MDUsMTMgKzQxMSwxNCBAQAogCiAJLyog
R2V0IHRoZSBpbmZvIGZvciB0aGlzIGRyaXZlLiAqLwogCWlmIChtZmlfcGRfZ2V0X2luZm8oZmQs
IGRldmljZV9pZCwgJmluZm8sIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu
KCJGYWlsZWQgdG8gZmV0Y2ggaW5mbyBmb3IgZHJpdmUgJXUiLCBkZXZpY2VfaWQpOwotCQlyZXR1
cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogQ2hlY2sgdGhlIHN0YXRl
LCBtdXN0IGJlIFJFQlVJTEQuICovCiAJaWYgKGluZm8uZndfc3RhdGUgIT0gTUZJX1BEX1NUQVRF
X1JFQlVJTEQpIHsKLQkJd2FybigiRHJpdmUgJWQgaXMgbm90IGluIHRoZSBSRUJVSUxEIHN0YXRl
IiwgZGV2aWNlX2lkKTsKKwkJd2FybngoIkRyaXZlICVkIGlzIG5vdCBpbiB0aGUgUkVCVUlMRCBz
dGF0ZSIsIGRldmljZV9pZCk7CiAJCXJldHVybiAoRUlOVkFMKTsKIAl9CiAKQEAgLTQxOSw4ICs0
MjYsOSBAQAogCW1ib3hfc3RvcmVfcGRyZWYoJm1ib3hbMF0sICZpbmZvLnJlZik7CiAJaWYgKG1m
aV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX1BEX1JFQlVJTERfU1RBUlQsIE5VTEwsIDAsIG1i
b3gsIDQsCiAJICAgIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWls
ZWQgdG8gc3RhcnQgcmVidWlsZCBvbiBkcml2ZSAldSIsIGRldmljZV9pZCk7Ci0JCXJldHVybiAo
ZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJY2xvc2UoZmQpOwogCkBAIC00NDQsOCAr
NDUyLDkgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJ
ZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ
CXJldHVybiAoZXJyb3IpOwogCX0KIAogCWVycm9yID0gbWZpX2xvb2t1cF9kcml2ZShmZCwgYXZb
MV0sICZkZXZpY2VfaWQpOwpAQCAtNDU0LDggKzQ2Myw5IEBACiAKIAkvKiBHZXQgdGhlIGluZm8g
Zm9yIHRoaXMgZHJpdmUuICovCiAJaWYgKG1maV9wZF9nZXRfaW5mbyhmZCwgZGV2aWNlX2lkLCAm
aW5mbywgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBm
ZXRjaCBpbmZvIGZvciBkcml2ZSAldSIsIGRldmljZV9pZCk7Ci0JCXJldHVybiAoZXJybm8pOwor
CQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBDaGVjayB0aGUgc3RhdGUsIG11c3QgYmUgUkVC
VUlMRC4gKi8KQEAgLTQ2OCw4ICs0NzgsOSBAQAogCW1ib3hfc3RvcmVfcGRyZWYoJm1ib3hbMF0s
ICZpbmZvLnJlZik7CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX1BEX1JFQlVJ
TERfQUJPUlQsIE5VTEwsIDAsIG1ib3gsIDQsCiAJICAgIE5VTEwpIDwgMCkgeworCQllcnJvciA9
IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gYWJvcnQgcmVidWlsZCBvbiBkcml2ZSAldSIsIGRl
dmljZV9pZCk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJY2xv
c2UoZmQpOwogCkBAIC00OTIsOCArNTAzLDkgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQp
OwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsK
LQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWVycm9yID0gbWZp
X2xvb2t1cF9kcml2ZShmZCwgYXZbMV0sICZkZXZpY2VfaWQpOwpAQCAtNTAyLDggKzUxNCw5IEBA
CiAKIAkvKiBHZXQgdGhlIGluZm8gZm9yIHRoaXMgZHJpdmUuICovCiAJaWYgKG1maV9wZF9nZXRf
aW5mbyhmZCwgZGV2aWNlX2lkLCAmaW5mbywgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87
CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBpbmZvIGZvciBkcml2ZSAldSIsIGRldmljZV9pZCk7
Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJY2xvc2UoZmQpOwog
CkBAIC01NTEsOCArNTY0LDkgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChm
ZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJu
IChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWVycm9yID0gbWZpX2xvb2t1cF9k
cml2ZShmZCwgYXZbMV0sICZkZXZpY2VfaWQpOwpAQCAtNTYxLDE2ICs1NzUsMTggQEAKIAogCS8q
IEdldCB0aGUgaW5mbyBmb3IgdGhpcyBkcml2ZS4gKi8KIAlpZiAobWZpX3BkX2dldF9pbmZvKGZk
LCBkZXZpY2VfaWQsICZpbmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2Fy
bigiRmFpbGVkIHRvIGZldGNoIGluZm8gZm9yIGRyaXZlICV1IiwgZGV2aWNlX2lkKTsKLQkJcmV0
dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCW1ib3hfc3RvcmVfcGRyZWYo
Jm1ib3hbMF0sICZpbmZvLnJlZik7CiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIG9wY29kZSwg
TlVMTCwgMCwgbWJveCwgNCwgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4o
IkZhaWxlZCB0byAlcyBjbGVhciBvbiBkcml2ZSAldSIsCiAJCSAgICBvcGNvZGUgPT0gTUZJX0RD
TURfUERfQ0xFQVJfU1RBUlQgPyAic3RhcnQiIDogInN0b3AiLAogCQkgICAgZGV2aWNlX2lkKTsK
LQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsK
QEAgLTYwNCw4ICs2MjAsOSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZk
IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4g
KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZXJyb3IgPSBtZmlfbG9va3VwX2Ry
aXZlKGZkLCBhdlsxXSwgJmRldmljZV9pZCk7CkBAIC02MTcsMTAgKzYzNCwxMSBAQAogCW1ib3hb
Ml0gPSAwOwogCW1ib3hbM10gPSAwOwogCWlmIChtZmlfZGNtZF9jb21tYW5kKGZkLCBvcGNvZGUs
IE5VTEwsIDAsIG1ib3gsIDQsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu
KCJGYWlsZWQgdG8gJXMgbG9jYXRlIG9uIGRyaXZlICV1IiwKIAkJICAgIG9wY29kZSA9PSBNRklf
RENNRF9QRF9MT0NBVEVfU1RBUlQgPyAic3RhcnQiIDogInN0b3AiLAogCQkgICAgZGV2aWNlX2lk
KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAljbG9zZShmZCk7
CiAKSW5kZXg6IHVzci5zYmluL21maXV0aWwvbWZpX2ZsYXNoLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNy
LnNiaW4vbWZpdXRpbC9tZmlfZmxhc2guYwkocmV2aXNpb24gMjE0MjYwKQorKysgdXNyLnNiaW4v
bWZpdXRpbC9tZmlfZmxhc2guYwkod29ya2luZyBjb3B5KQpAQCAtNzIsMTYgKzcyLDE4IEBACiAJ
ICAgIGZ3X3RpbWVfd2lkdGgsIGNvbXAtPmJ1aWxkX3RpbWUpOwogfQogCi1zdGF0aWMgdm9pZAor
c3RhdGljIGludAogZGlzcGxheV9wZW5kaW5nX2Zpcm13YXJlKGludCBmZCkKIHsKIAlzdHJ1Y3Qg
bWZpX2N0cmxfaW5mbyBpbmZvOwogCXN0cnVjdCBtZmlfaW5mb19jb21wb25lbnQgaGVhZGVyOwor
CWludCBlcnJvcjsKIAl1X2ludCBpOwogCiAJaWYgKG1maV9jdHJsX2dldF9pbmZvKGZkLCAmaW5m
bywgTlVMTCkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBnZXQg
Y29udHJvbGxlciBpbmZvIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJ
cHJpbnRmKCJtZmklZCBQZW5kaW5nIEZpcm13YXJlIEltYWdlczpcbiIsIG1maV91bml0KTsKQEAg
LTk3LDYgKzk5LDggQEAKIAlkaXNwbGF5X2Zpcm13YXJlKCZoZWFkZXIpOwogCWZvciAoaSA9IDA7
IGkgPCBpbmZvLnBlbmRpbmdfaW1hZ2VfY29tcG9uZW50X2NvdW50OyBpKyspCiAJCWRpc3BsYXlf
ZmlybXdhcmUoJmluZm8ucGVuZGluZ19pbWFnZV9jb21wb25lbnRbaV0pOworCisJcmV0dXJuICgw
KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTExNyw3ICsxMjEsNyBAQAogCXNpemVfdCBucmVhZDsK
IAljaGFyICpidWY7CiAJc3RydWN0IHN0YXQgc2I7Ci0JaW50IGZkLCBmbGFzaDsKKwlpbnQgZXJy
b3IsIGZkLCBmbGFzaDsKIAl1aW50OF90IG1ib3hbNF0sIHN0YXR1czsKIAogCWlmIChhYyAhPSAy
KSB7CkBAIC0xMjcsMTMgKzEzMSwxNSBAQAogCiAJZmxhc2ggPSBvcGVuKGF2WzFdLCBPX1JET05M
WSk7CiAJaWYgKGZsYXNoIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJmbGFzaDog
RmFpbGVkIHRvIG9wZW4gJXMiLCBhdlsxXSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4g
KGVycm9yKTsKIAl9CiAKIAlpZiAoZnN0YXQoZmxhc2gsICZzYikgPCAwKSB7CisJCWVycm9yID0g
ZXJybm87CiAJCXdhcm4oImZzdGF0KCVzKSIsIGF2WzFdKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ
CXJldHVybiAoZXJyb3IpOwogCX0KIAlpZiAoc2Iuc3Rfc2l6ZSAlIDEwMjQgIT0gMCB8fCBzYi5z
dF9zaXplID4gMHg3ZmZmZmZmZikgewogCQl3YXJueCgiSW52YWxpZCBmbGFzaCBmaWxlIHNpemUi
KTsKQEAgLTE0Miw4ICsxNDgsOSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYg
KGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1
cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogRmlyc3QsIGFzayB0aGUg
ZmlybXdhcmUgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBmbGFzaCBmaWxlLiAqLwpAQCAtMTkw
LDEwICsxOTcsMTAgQEAKIAkJcmV0dXJuIChFTlhJTyk7CiAJfQogCXByaW50ZigiZmluaXNoZWRc
biIpOwotCWRpc3BsYXlfcGVuZGluZ19maXJtd2FyZShmZCk7CisJZXJyb3IgPSBkaXNwbGF5X3Bl
bmRpbmdfZmlybXdhcmUoZmQpOwogCiAJY2xvc2UoZmQpOwogCi0JcmV0dXJuICgwKTsKKwlyZXR1
cm4gKGVycm9yKTsKIH0KIE1GSV9DT01NQU5EKHRvcCwgZmxhc2gsIGZsYXNoX2FkYXB0ZXIpOwpJ
bmRleDogdXNyLnNiaW4vbWZpdXRpbC9tZmlfZXZ0LmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNiaW4v
bWZpdXRpbC9tZmlfZXZ0LmMJKHJldmlzaW9uIDIxNDI2MCkKKysrIHVzci5zYmluL21maXV0aWwv
bWZpX2V2dC5jCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8c3lz
L3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL2Vycm5vLmg+CiAjaW5jbHVkZSA8ZXJyLmg+Ci0vLyNp
bmNsdWRlIDxsaWJ1dGlsLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIu
aD4KICNpbmNsdWRlIDxzdHJpbmdzLmg+CkBAIC02Nyw3ICs2Niw3IEBACiBzaG93X2xvZ3N0YXRl
KGludCBhYywgY2hhciAqKmF2KQogewogCXN0cnVjdCBtZmlfZXZ0X2xvZ19zdGF0ZSBpbmZvOwot
CWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNo
b3cgbG9nc3RhdGU6IGV4dHJhIGFyZ3VtZW50cyIpOwpAQCAtNzYsMTMgKzc1LDE1IEBACiAKIAlm
ZCA9IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87
CiAJCXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9y
KTsKIAl9CiAKIAlpZiAobWZpX2V2ZW50X2dldF9pbmZvKGZkLCAmaW5mbywgTlVMTCkgPCAwKSB7
CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBnZXQgZXZlbnQgbG9nIGluZm8i
KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXByaW50Zigi
bWZpJWQgRXZlbnQgTG9nIFNlcXVlbmNlIE51bWJlcnM6XG4iLCBtZmlfdW5pdCk7CkBAIC01MzYs
MTggKzUzNywyMCBAQAogCXNzaXplX3Qgc2l6ZTsKIAl1aW50MzJfdCBzZXEsIHN0YXJ0LCBzdG9w
OwogCXVpbnQ4X3Qgc3RhdHVzOwotCWludCBjaCwgZmQsIG51bV9ldmVudHMsIHZlcmJvc2U7CisJ
aW50IGNoLCBlcnJvciwgZmQsIG51bV9ldmVudHMsIHZlcmJvc2U7CiAJdV9pbnQgaTsKIAogCWZk
ID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsK
IAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3Ip
OwogCX0KIAogCWlmIChtZmlfZXZlbnRfZ2V0X2luZm8oZmQsICZpbmZvLCBOVUxMKSA8IDApIHsK
KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBldmVudCBsb2cgaW5mbyIp
OwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogRGVmYXVs
dCBzZXR0aW5ncy4gKi8KQEAgLTU2NSwxNCArNTY4LDE2IEBACiAJCXN3aXRjaCAoY2gpIHsKIAkJ
Y2FzZSAnYyc6CiAJCQlpZiAocGFyc2VfY2xhc3Mob3B0YXJnLCAmZmlsdGVyLm1lbWJlcnMuY2xh
c3MpIDwgMCkgeworCQkJCWVycm9yID0gZXJybm87CiAJCQkJd2FybigiRXJyb3IgcGFyc2luZyBl
dmVudCBjbGFzcyIpOwotCQkJCXJldHVybiAoZXJybm8pOworCQkJCXJldHVybiAoZXJyb3IpOwog
CQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgJ2wnOgogCQkJaWYgKHBhcnNlX2xvY2FsZShvcHRhcmcs
ICZmaWx0ZXIubWVtYmVycy5sb2NhbGUpIDwgMCkgeworCQkJCWVycm9yID0gZXJybm87CiAJCQkJ
d2FybigiRXJyb3IgcGFyc2luZyBldmVudCBsb2NhbGUiKTsKLQkJCQlyZXR1cm4gKGVycm5vKTsK
KwkJCQlyZXR1cm4gKGVycm9yKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlICduJzoKQEAgLTYw
OCwyMCArNjEzLDIzIEBACiAJCXJldHVybiAoRUlOVkFMKTsKIAl9CiAJaWYgKGFjID4gMCAmJiBw
YXJzZV9zZXEoJmluZm8sIGF2WzBdLCAmc3RhcnQpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog
CQl3YXJuKCJFcnJvciBwYXJzaW5nIHN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlciIpOwotCQlyZXR1
cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCWlmIChhYyA+IDEgJiYgcGFyc2Vf
c2VxKCZpbmZvLCBhdlsxXSwgJnN0b3ApIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu
KCJFcnJvciBwYXJzaW5nIGVuZGluZyBzZXF1ZW5jZSBudW1iZXIiKTsKLQkJcmV0dXJuIChlcnJu
byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWxpc3QgPSBtYWxsb2Moc2l6ZSk7CiAJZm9y
IChzZXEgPSBzdGFydDs7KSB7CiAJCWlmIChtZmlfZ2V0X2V2ZW50cyhmZCwgbGlzdCwgbnVtX2V2
ZW50cywgZmlsdGVyLCBzZXEsCiAJCSAgICAmc3RhdHVzKSA8IDApIHsKKwkJCWVycm9yID0gZXJy
bm87CiAJCQl3YXJuKCJGYWlsZWQgdG8gZmV0Y2ggZXZlbnRzIik7Ci0JCQlyZXR1cm4gKGVycm5v
KTsKKwkJCXJldHVybiAoZXJyb3IpOwogCQl9CiAJCWlmIChzdGF0dXMgPT0gTUZJX1NUQVRfTk9U
X0ZPVU5EKSB7CiAJCQlpZiAoc2VxID09IHN0YXJ0KQpJbmRleDogdXNyLnNiaW4vbWZpdXRpbC9t
Zmlfc2hvdy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5zYmluL21maXV0aWwvbWZpX3Nob3cuYwkocmV2
aXNpb24gMjE0MjYwKQorKysgdXNyLnNiaW4vbWZpdXRpbC9tZmlfc2hvdy5jCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw3IEBACiB7CiAJc3RydWN0IG1maV9jdHJsX2luZm8gaW5mbzsKIAlj
aGFyIHN0cmlwZVs1XTsKLQlpbnQgZmQsIGNvbW1hOworCWludCBlcnJvciwgZmQsIGNvbW1hOwog
CiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNob3cgYWRhcHRlcjogZXh0cmEgYXJndW1lbnRz
Iik7CkBAIC02MywxMyArNjMsMTUgQEAKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlm
IChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0
dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChtZmlfY3RybF9nZXRf
aW5mbyhmZCwgJmluZm8sIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJG
YWlsZWQgdG8gZ2V0IGNvbnRyb2xsZXIgaW5mbyIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0
dXJuIChlcnJvcik7CiAJfQogCXByaW50ZigibWZpJWQgQWRhcHRlcjpcbiIsIG1maV91bml0KTsK
IAlwcmludGYoIiAgICBQcm9kdWN0IE5hbWU6ICUuODBzXG4iLCBpbmZvLnByb2R1Y3RfbmFtZSk7
CkBAIC0xMzcsNyArMTM5LDcgQEAKIAlzdHJ1Y3QgbWZpX2JidV9jYXBhY2l0eV9pbmZvIGNhcDsK
IAlzdHJ1Y3QgbWZpX2JidV9kZXNpZ25faW5mbyBkZXNpZ247CiAJdWludDhfdCBzdGF0dXM7Ci0J
aW50IGZkOworCWludCBlcnJvciwgZmQ7CiAKIAlpZiAoYWMgIT0gMSkgewogCQl3YXJueCgic2hv
dyBiYXR0ZXJ5OiBleHRyYSBhcmd1bWVudHMiKTsKQEAgLTE0Niw4ICsxNDgsOSBAQAogCiAJZmQg
PSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog
CQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7
CiAJfQogCiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX0JCVV9HRVRfQ0FQQUNJ
VFlfSU5GTywgJmNhcCwKQEAgLTE1NiwxNCArMTU5LDE2IEBACiAJCQlwcmludGYoIm1maSVkOiBO
byBiYXR0ZXJ5IHByZXNlbnRcbiIsIG1maV91bml0KTsKIAkJCXJldHVybiAoMCk7CiAJCX0KKwkJ
ZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBjYXBhY2l0eSBpbmZvIik7Ci0J
CXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobWZpX2RjbWRf
Y29tbWFuZChmZCwgTUZJX0RDTURfQkJVX0dFVF9ERVNJR05fSU5GTywgJmRlc2lnbiwKIAkgICAg
c2l6ZW9mKGRlc2lnbiksIE5VTEwsIDAsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog
CQl3YXJuKCJGYWlsZWQgdG8gZ2V0IGRlc2lnbiBpbmZvIik7Ci0JCXJldHVybiAoZXJybm8pOwor
CQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlwcmludGYoIm1maSVkOiBCYXR0ZXJ5IFN0YXRlOlxu
IiwgbWZpX3VuaXQpOwpAQCAtMjQyLDcgKzI0Nyw3IEBACiAJc3RydWN0IG1maV9wZF9pbmZvIHBp
bmZvOwogCXVpbnQxNl90IGRldmljZV9pZDsKIAljaGFyICpwOwotCWludCBmZCwgaSwgajsKKwlp
bnQgZXJyb3IsIGZkLCBpLCBqOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNob3cgY29u
ZmlnOiBleHRyYSBhcmd1bWVudHMiKTsKQEAgLTI1MSwxNCArMjU2LDE2IEBACiAKIAlmZCA9IG1m
aV9vcGVuKG1maV91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdh
cm4oIm1maV9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9
CiAKIAkvKiBHZXQgdGhlIGNvbmZpZyBmcm9tIHRoZSBjb250cm9sbGVyLiAqLwogCWlmIChtZmlf
Y29uZmlnX3JlYWQoZmQsICZjb25maWcpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJu
KCJGYWlsZWQgdG8gZ2V0IGNvbmZpZyIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChl
cnJvcik7CiAJfQogCiAJLyogRHVtcCBvdXQgdGhlIGNvbmZpZ3VyYXRpb24uICovCkBAIC0zMzcs
OCArMzQ0LDggQEAKIHsKIAlzdHJ1Y3QgbWZpX2xkX2xpc3QgbGlzdDsKIAlzdHJ1Y3QgbWZpX2xk
X2luZm8gaW5mbzsKKwlpbnQgZXJyb3IsIGZkOwogCXVfaW50IGksIGxlbiwgc3RhdGVfbGVuOwot
CWludCBmZDsKIAogCWlmIChhYyAhPSAxKSB7CiAJCXdhcm54KCJzaG93IHZvbHVtZXM6IGV4dHJh
IGFyZ3VtZW50cyIpOwpAQCAtMzQ3LDE0ICszNTQsMTYgQEAKIAogCWZkID0gbWZpX29wZW4obWZp
X3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29w
ZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qIEdl
dCB0aGUgbG9naWNhbCBkcml2ZSBsaXN0IGZyb20gdGhlIGNvbnRyb2xsZXIuICovCiAJaWYgKG1m
aV9sZF9nZXRfbGlzdChmZCwgJmxpc3QsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog
CQl3YXJuKCJGYWlsZWQgdG8gZ2V0IHZvbHVtZSBsaXN0Iik7Ci0JCXJldHVybiAoZXJybm8pOwor
CQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBMaXN0IHRoZSB2b2x1bWVzLiAqLwpAQCAtMzc2
LDkgKzM4NSwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCBsaXN0LmxkX2NvdW50OyBpKyspIHsKIAkJ
aWYgKG1maV9sZF9nZXRfaW5mbyhmZCwgbGlzdC5sZF9saXN0W2ldLmxkLnYudGFyZ2V0X2lkLCAm
aW5mbywKIAkJICAgIE5VTEwpIDwgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIkZh
aWxlZCB0byBnZXQgaW5mbyBmb3Igdm9sdW1lICVkIiwKIAkJCSAgICBsaXN0LmxkX2xpc3RbaV0u
bGQudi50YXJnZXRfaWQpOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsK
IAkJfQogCQlwcmludGYoIiU2cyAiLAogCQkgICAgbWZpX3ZvbHVtZV9uYW1lKGZkLCBsaXN0Lmxk
X2xpc3RbaV0ubGQudi50YXJnZXRfaWQpKTsKQEAgLTQxNiw3ICs0MjYsNyBAQAogCXN0cnVjdCBt
ZmlfcGRfbGlzdCAqbGlzdDsKIAlzdHJ1Y3QgbWZpX3BkX2luZm8gaW5mbzsKIAl1X2ludCBpLCBs
ZW4sIHN0YXRlX2xlbjsKLQlpbnQgZmQ7CisJaW50IGVycm9yLCBmZDsKIAogCWlmIChhYyAhPSAx
KSB7CiAJCXdhcm54KCJzaG93IGRyaXZlczogZXh0cmEgYXJndW1lbnRzIik7CkBAIC00MjUsMTMg
KzQzNSwxNSBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJaWYgKGZkIDwgMCkgewor
CQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsK
KwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaWYgKG1maV9wZF9nZXRfbGlzdChmZCwgJmxpc3Qs
IE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZ2V0IGRy
aXZlIGxpc3QiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAog
CS8qIFdhbGsgdGhlIGxpc3Qgb2YgZHJpdmVzIHRvIGRldGVybWluZSB3aWR0aCBvZiBzdGF0ZSBj
b2x1bW4uICovCkBAIC00NDIsOSArNDU0LDEwIEBACiAKIAkJaWYgKG1maV9wZF9nZXRfaW5mbyhm
ZCwgbGlzdC0+YWRkcltpXS5kZXZpY2VfaWQsICZpbmZvLAogCQkgICAgTlVMTCkgPCAwKSB7CisJ
CQllcnJvciA9IGVycm5vOwogCQkJd2FybigiRmFpbGVkIHRvIGZldGNoIGluZm8gZm9yIGRyaXZl
ICV1IiwKIAkJCSAgICBsaXN0LT5hZGRyW2ldLmRldmljZV9pZCk7Ci0JCQlyZXR1cm4gKGVycm5v
KTsKKwkJCXJldHVybiAoZXJyb3IpOwogCQl9CiAJCWxlbiA9IHN0cmxlbihtZmlfcGRzdGF0ZShp
bmZvLmZ3X3N0YXRlKSk7CiAJCWlmIChsZW4gPiBzdGF0ZV9sZW4pCkBAIC00NjIsOSArNDc1LDEw
IEBACiAJCS8qIEZldGNoIGRldGFpbHMgZm9yIHRoaXMgZHJpdmUuICovCiAJCWlmIChtZmlfcGRf
Z2V0X2luZm8oZmQsIGxpc3QtPmFkZHJbaV0uZGV2aWNlX2lkLCAmaW5mbywKIAkJICAgIE5VTEwp
IDwgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBpbmZv
IGZvciBkcml2ZSAldSIsCiAJCQkgICAgbGlzdC0+YWRkcltpXS5kZXZpY2VfaWQpOwotCQkJcmV0
dXJuIChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCiAJCXByaW50X3BkKCZpbmZv
LCBzdGF0ZV9sZW4sIDEpOwpAQCAtNTExLDcgKzUyNSw3IEBACiB7CiAJc3RydWN0IG1maV9jdHJs
X2luZm8gaW5mbzsKIAlzdHJ1Y3QgbWZpX2luZm9fY29tcG9uZW50IGhlYWRlcjsKLQlpbnQgZmQ7
CisJaW50IGVycm9yLCBmZDsKIAl1X2ludCBpOwogCiAJaWYgKGFjICE9IDEpIHsKQEAgLTUyMSwx
MyArNTM1LDE1IEBACiAKIAlmZCA9IG1maV9vcGVuKG1maV91bml0KTsKIAlpZiAoZmQgPCAwKSB7
CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1maV9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8p
OworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobWZpX2N0cmxfZ2V0X2luZm8oZmQsICZp
bmZvLCBOVUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdl
dCBjb250cm9sbGVyIGluZm8iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3Ip
OwogCX0KIAogCWlmIChpbmZvLnBhY2thZ2VfdmVyc2lvblswXSAhPSAnXDAnKQpJbmRleDogdXNy
LnNiaW4vbWZpdXRpbC9tZmlfcGF0cm9sLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNiaW4vbWZpdXRp
bC9tZmlfcGF0cm9sLmMJKHJldmlzaW9uIDIxNDI2MCkKKysrIHVzci5zYmluL21maXV0aWwvbWZp
X3BhdHJvbC5jCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMSArNjIsMTMgQEAKIHN0YXRpYyBpbnQK
IHBhdHJvbF9nZXRfcHJvcHMoaW50IGZkLCBzdHJ1Y3QgbWZpX3ByX3Byb3BlcnRpZXMgKnByb3Ap
CiB7CisJaW50IGVycm9yOwogCiAJaWYgKG1maV9kY21kX2NvbW1hbmQoZmQsIE1GSV9EQ01EX1BS
X0dFVF9QUk9QRVJUSUVTLCBwcm9wLAogCSAgICBzaXplb2YoKnByb3ApLCBOVUxMLCAwLCBOVUxM
KSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBwYXRyb2wg
cmVhZCBwcm9wZXJ0aWVzIik7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsKIAl9
CiAJcmV0dXJuICgwKTsKIH0KQEAgLTgxLDE5ICs4MywyMSBAQAogCWNoYXIgbGFiZWxbMTZdOwog
CXRpbWVfdCBub3c7CiAJdWludDMyX3QgYXQ7Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAJ
dV9pbnQgaTsKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJ
ZXJyb3IgPSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ
CXJldHVybiAoZXJyb3IpOwogCX0KIAogCXRpbWUoJm5vdyk7CiAJbWZpX2dldF90aW1lKGZkLCAm
YXQpOwotCWlmIChwYXRyb2xfZ2V0X3Byb3BzKGZkLCAmcHJvcCkgPCAwKQotCQlyZXR1cm4gKGVy
cm5vKTsKKwllcnJvciA9IHBhdHJvbF9nZXRfcHJvcHMoZmQsICZwcm9wKTsKKwlpZiAoZXJyb3Ip
CisJCXJldHVybiAoZXJyb3IpOwogCXByaW50ZigiT3BlcmF0aW9uIE1vZGU6ICIpOwogCXN3aXRj
aCAocHJvcC5vcF9tb2RlKSB7CiAJY2FzZSBNRklfUFJfT1BNT0RFX0FVVE86CkBAIC0xMjIsOCAr
MTI2LDkgQEAKIAogCWlmIChtZmlfZGNtZF9jb21tYW5kKGZkLCBNRklfRENNRF9QUl9HRVRfU1RB
VFVTLCAmc3RhdHVzLAogCSAgICBzaXplb2Yoc3RhdHVzKSwgTlVMTCwgMCwgTlVMTCkgPCAwKSB7
CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBnZXQgcGF0cm9sIHJlYWQgcHJv
cGVydGllcyIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCXBy
aW50ZigiUnVucyBDb21wbGV0ZWQ6ICV1XG4iLCBzdGF0dXMubnVtX2l0ZXJhdGlvbik7CiAJcHJp
bnRmKCJDdXJyZW50IFN0YXRlOiAiKTsKQEAgLTE0Niw4ICsxNTEsOSBAQAogCX0KIAlpZiAoc3Rh
dHVzLnN0YXRlID09IE1GSV9QUl9TVEFURV9BQ1RJVkUpIHsKIAkJaWYgKG1maV9wZF9nZXRfbGlz
dChmZCwgJmxpc3QsIE5VTEwpIDwgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIkZh
aWxlZCB0byBnZXQgZHJpdmUgbGlzdCIpOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQlyZXR1cm4g
KGVycm9yKTsKIAkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5jb3VudDsgaSsrKSB7CkBA
IC0xNTYsOSArMTYyLDEwIEBACiAKIAkJCWlmIChtZmlfcGRfZ2V0X2luZm8oZmQsIGxpc3QtPmFk
ZHJbaV0uZGV2aWNlX2lkLCAmaW5mbywKIAkJCSAgICBOVUxMKSA8IDApIHsKKwkJCQllcnJvciA9
IGVycm5vOwogCQkJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBpbmZvIGZvciBkcml2ZSAldSIsCiAJ
CQkJICAgIGxpc3QtPmFkZHJbaV0uZGV2aWNlX2lkKTsKLQkJCQlyZXR1cm4gKGVycm5vKTsKKwkJ
CQlyZXR1cm4gKGVycm9yKTsKIAkJCX0KIAkJCWlmIChpbmZvLnByb2dfaW5mby5hY3RpdmUgJiBN
RklfUERfUFJPR1JFU1NfUEFUUk9MKSB7CiAJCQkJc25wcmludGYobGFiZWwsIHNpemVvZihsYWJl
bCksICIgICAgRHJpdmUgJXUiLApAQCAtMTc4LDE4ICsxODUsMjAgQEAKIHN0YXRpYyBpbnQKIHN0
YXJ0X3BhdHJvbChpbnQgYWMsIGNoYXIgKiphdikKIHsKLQlpbnQgZmQ7CisJaW50IGVycm9yLCBm
ZDsKIAogCWZkID0gbWZpX29wZW4obWZpX3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3Ig
PSBlcnJubzsKIAkJd2FybigibWZpX29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVy
biAoZXJyb3IpOwogCX0KIAogCWlmIChtZmlfZGNtZF9jb21tYW5kKGZkLCBNRklfRENNRF9QUl9T
VEFSVCwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCkgPAogCSAgICAwKSB7CisJCWVycm9yID0gZXJy
bm87CiAJCXdhcm4oIkZhaWxlZCB0byBzdGFydCBwYXRyb2wgcmVhZCIpOwotCQlyZXR1cm4gKGVy
cm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJY2xvc2UoZmQpOwpAQCAtMjAxLDE4ICsy
MTAsMjAgQEAKIHN0YXRpYyBpbnQKIHN0b3BfcGF0cm9sKGludCBhYywgY2hhciAqKmF2KQogewot
CWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwogCiAJZmQgPSBtZmlfb3BlbihtZmlfdW5pdCk7CiAJ
aWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3BlbiIpOwotCQly
ZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaWYgKG1maV9kY21kX2Nv
bW1hbmQoZmQsIE1GSV9EQ01EX1BSX1NUT1AsIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwpIDwKIAkg
ICAgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gc3RvcCBwYXRyb2wg
cmVhZCIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJY2xv
c2UoZmQpOwpAQCAtMjI3LDEwICsyMzgsMTAgQEAKIAlzdHJ1Y3QgbWZpX3ByX3Byb3BlcnRpZXMg
cHJvcDsKIAlsb25nIHZhbDsKIAl0aW1lX3Qgbm93OworCWludCBlcnJvciwgZmQ7CiAJdWludDMy
X3QgYXQsIG5leHRfZXhlYywgZXhlY19mcmVxOwogCWNoYXIgKmNwOwogCXVpbnQ4X3Qgb3BfbW9k
ZTsKLQlpbnQgZmQ7CiAKIAlleGVjX2ZyZXEgPSAwOwkvKiBHQ0MgdG9vIHN0dXBpZCAqLwogCW5l
eHRfZXhlYyA9IDA7CkBAIC0yNzIsMTIgKzI4MywxNCBAQAogCiAJZmQgPSBtZmlfb3BlbihtZmlf
dW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtZmlfb3Bl
biIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCi0JaWYgKHBh
dHJvbF9nZXRfcHJvcHMoZmQsICZwcm9wKSA8IDApCi0JCXJldHVybiAoZXJybm8pOworCWVycm9y
ID0gcGF0cm9sX2dldF9wcm9wcyhmZCwgJnByb3ApOworCWlmIChlcnJvcikKKwkJcmV0dXJuIChl
cnJvcik7CiAJcHJvcC5vcF9tb2RlID0gb3BfbW9kZTsKIAlpZiAob3BfbW9kZSA9PSBNRklfUFJf
T1BNT0RFX0FVVE8pIHsKIAkJaWYgKGFjID4gMikKQEAgLTI5NCw4ICszMDcsOSBAQAogCX0KIAlp
ZiAobWZpX2RjbWRfY29tbWFuZChmZCwgTUZJX0RDTURfUFJfU0VUX1BST1BFUlRJRVMsICZwcm9w
LAogCSAgICBzaXplb2YocHJvcCksIE5VTEwsIDAsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVy
cm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gc2V0IHBhdHJvbCByZWFkIHByb3BlcnRpZXMiKTsKLQkJ
cmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWNsb3NlKGZkKTsK
--00504502d357930c9b0493899b55--



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