Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 3 Dec 2016 14:40:18 +0800
From:      Ben Woods <woodsb02@gmail.com>
To:        Eric McCorkle <eric@metricspace.net>
Cc:        freebsd-hackers@freebsd.org, freebsd-amd64@freebsd.org,  "current@freebsd.org" <current@freebsd.org>
Subject:   Re: CFT EFI Boot Refactoring
Message-ID:  <CAOc73CDzfzSw2SNeXiEZXR96hJxjtJHL75QzFhhRoVArGjnscA@mail.gmail.com>
In-Reply-To: <d3aad5ef-2d6c-3d79-0fe8-91ee086ed2f8@metricspace.net>
References:  <d3aad5ef-2d6c-3d79-0fe8-91ee086ed2f8@metricspace.net>

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

Hi Eric,

Thanks for your work on this.

I just applied your diff to my subversion repository, and tried to
buildworld, but the build failed with the following error:

make[6]: make[6]: don't know how to make efipart.c. Stop

make[6]: stopped in /usr/src/sys/boot/efi/drivers
*** [all_subdir_sys/boot/efi/drivers] Error code 2


Does it build ok for you?

Because I use subversion, and I wanted to build it from my main tree, I had
to regenerate your patch using "git diff --no-prefix
master..origin/efize_new > /tmp/efize_new.diff".
I could then apply this cleanly with "svn patch /tmp/efize_new.diff".
I checked the difference between your diff and the diff I generated, and
the only differences were in the file headers. Therefore I don't think the
patch change should make any difference. I have attached my version of the
patch for reference.

For example:

diff --git a/lib/libstand/Makefile b/lib/libstand/Makefile
index 0ebcaf1..3b608c5 100644
--- a/lib/libstand/Makefile
+++ b/lib/libstand/Makefile

Became:

diff --git lib/libstand/Makefile lib/libstand/Makefile
index 0ebcaf1ccfd..3b608c5bc92 100644
--- lib/libstand/Makefile
+++ lib/libstand/Makefile


To show the differences with your patch applied:
$ svn status
M       lib/libstand/Makefile
M       lib/libstand/stand.h
M       sys/boot/efi/Makefile
M       sys/boot/efi/boot1/Makefile
M       sys/boot/efi/boot1/Makefile.fat
M       sys/boot/efi/boot1/boot1.c
D       sys/boot/efi/boot1/boot_module.h
M       sys/boot/efi/boot1/fat-amd64.tmpl.bz2.uu
M       sys/boot/efi/boot1/fat-arm.tmpl.bz2.uu
M       sys/boot/efi/boot1/fat-arm64.tmpl.bz2.uu
M       sys/boot/efi/boot1/fat-i386.tmpl.bz2.uu
M       sys/boot/efi/boot1/generate-fat.sh
D       sys/boot/efi/boot1/ufs_module.c
D       sys/boot/efi/boot1/zfs_module.c
A       sys/boot/efi/drivers
A       sys/boot/efi/drivers/Makefile
A       sys/boot/efi/drivers/efi_drivers.h
A       sys/boot/efi/drivers/fs_driver.c
M       sys/boot/efi/include/efilib.h
M       sys/boot/efi/include/efiprot.h
A       sys/boot/efi/include/string16.h
M       sys/boot/efi/libefi/Makefile
A       sys/boot/efi/libefi/efifs.c
M       sys/boot/efi/libefi/efipart.c
M       sys/boot/efi/libefi/errno.c
M       sys/boot/efi/libefi/handles.c
A       sys/boot/efi/libefi/string16.c
M       sys/boot/efi/libefi/time.c
M       sys/boot/efi/loader/Makefile
M       sys/boot/efi/loader/conf.c
M       sys/boot/efi/loader/loader_efi.h
M       sys/boot/efi/loader/main.c


Regards,
Ben


--
From: Benjamin Woods
woodsb02@gmail.com

On 3 December 2016 at 01:02, Eric McCorkle <eric@metricspace.net> wrote:

> Hello everyone,
>
> My work to refactor the EFI boot loader has been in review for some time
> now.  This work is a behavior-neutral refactoring which eliminates
> duplicated code in boot1, provides better integration of boot1 and
> loader with the EFI API, and moves towards better compliance with the
> recommendations of the UEFI driver writer's guide.  This work also
> serves as a precursor to more work, such as GELI, hot-plugging, and
> other things.
>
> One of the reviewers was able to trigger a hang on his setup; however,
> it's not clear whether this is a problem in the refactoring, or whether
> it's due to a related bug:
>
> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=214423
>
> Therefore, I would like to issue a CFT for this changeset.  We need
> people using the boot1/loader EFI boot setup to test their setup using
> boot1 and loader as built with this patch applied.
>
> You can also get the source tree directly from my github
> (https://github.com/emc2/freebsd.git).  Use the efize_new branch to get
> this changeset.  Note that I am maintaining the state of this branch in
> a single change at this point using rebase -i, so there *will* be forced
> pushes to this branch.
>
>
> Here are some notes on testing the changeset:
>
> * To test it, just do a buildworld, then copy loader.efi in place and
> copy boot1.efi to /efi/BOOT/BOOTX64.EFI on your ESP.  If your system
> boots, then the test was successful (there are no new features in this
> changeset).
>
> * The output of boot1 is slightly different, so you'll be able to tell
> if you installed it correctly.
>
> * I recommend keeping a copy of the basic boot1 around on your ESP, just
> in case something goes wrong.  On my setup, I have a backup at
> /efi/BOOT/BOOTX64.BAK (with the main program at /efi/BOOT/BOOTX64.EFI,
> of course)
>
> * I have been using this on a machine with two disks, a ZFS pool
> spanning both disks, and a dummy UFS filesystem for months now, so it
> can be considered relatively safe.
>
> * This has also been tested on basic setups without incident, so
> priority is on complex or odd setups.
>
> * If something goes wrong, you will most likely get a boot-hang.  If
> this happens, please contact me directly with the details, and I'll
> coordinate on diagnosis.
>

--94eb2c058ce8fc2ff60542bb5373
Content-Type: text/plain; charset=US-ASCII; name="efize_new.diff"
Content-Disposition: attachment; filename="efize_new.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_iw8unfrw2

ZGlmZiAtLWdpdCBsaWIvbGlic3RhbmQvTWFrZWZpbGUgbGliL2xpYnN0YW5kL01ha2VmaWxlCmlu
ZGV4IDBlYmNhZjFjY2ZkLi4zYjYwOGM1YmM5MiAxMDA2NDQKLS0tIGxpYi9saWJzdGFuZC9NYWtl
ZmlsZQorKysgbGliL2xpYnN0YW5kL01ha2VmaWxlCkBAIC00MSw3ICs0MSw3IEBAIFNSQ1MrPSBu
dG9oLmMKIC5QQVRIOiAke0xJQkNfU1JDfS9zdHJpbmcKIFNSQ1MrPQliY21wLmMgYmNvcHkuYyBi
emVyby5jIGZmcy5jIGZscy5jIFwKIAltZW1jY3B5LmMgbWVtY2hyLmMgbWVtY21wLmMgbWVtY3B5
LmMgbWVtbW92ZS5jIG1lbXNldC5jIFwKLQlxZGl2cmVtLmMgc3RyY2F0LmMgc3RyY2hyLmMgc3Ry
Y21wLmMgc3RyY3B5LmMgXAorCXFkaXZyZW0uYyBzdHJjYXQuYyBzdHJjaHIuYyBzdHJjbXAuYyBz
dHJjcHkuYyBzdHBjcHkuYyBzdHBuY3B5LmMgXAogCXN0cmNzcG4uYyBzdHJsY2F0LmMgc3RybGNw
eS5jIHN0cmxlbi5jIHN0cm5jYXQuYyBzdHJuY21wLmMgc3RybmNweS5jIFwKIAlzdHJwYnJrLmMg
c3RycmNoci5jIHN0cnNlcC5jIHN0cnNwbi5jIHN0cnN0ci5jIHN0cnRvay5jIHN3YWIuYwogLmlm
ICR7TUFDSElORV9DUFVBUkNIfSA9PSAiYXJtIgpkaWZmIC0tZ2l0IGxpYi9saWJzdGFuZC9zdGFu
ZC5oIGxpYi9saWJzdGFuZC9zdGFuZC5oCmluZGV4IGY3N2E1ODZmYjA2Li4wNjZhZmYwNWQ2NSAx
MDA2NDQKLS0tIGxpYi9saWJzdGFuZC9zdGFuZC5oCisrKyBsaWIvbGlic3RhbmQvc3RhbmQuaApA
QCAtMjQsNyArMjQsNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKgogICogJEZyZWVCU0QkCi0gKiBG
cm9tCSROZXRCU0Q6IHN0YW5kLmgsdiAxLjIyIDE5OTcvMDYvMjYgMTk6MTc6NDAgZHJvY2huZXIg
RXhwICQJCisgKiBGcm9tCSROZXRCU0Q6IHN0YW5kLmgsdiAxLjIyIDE5OTcvMDYvMjYgMTk6MTc6
NDAgZHJvY2huZXIgRXhwICQKICAqLwogCiAvKi0KQEAgLTEzMSw3ICsxMzEsNyBAQCBleHRlcm4g
c3RydWN0IGZzX29wcyBwa2dmc19mc29wczsKICNkZWZpbmUJU0VFS19DVVIJMQkvKiBzZXQgZmls
ZSBvZmZzZXQgdG8gY3VycmVudCBwbHVzIG9mZnNldCAqLwogI2RlZmluZQlTRUVLX0VORAkyCS8q
IHNldCBmaWxlIG9mZnNldCB0byBFT0YgcGx1cyBvZmZzZXQgKi8KIAotLyogCisvKgogICogRGV2
aWNlIHN3aXRjaAogICovCiBzdHJ1Y3QgZGV2c3cgewpAQCAtMTY2LDggKzE2Niw5IEBAIHN0cnVj
dCBkZXZkZXNjCiAjZGVmaW5lIERFVlRfTk9ORQkwCiAjZGVmaW5lIERFVlRfRElTSwkxCiAjZGVm
aW5lIERFVlRfTkVUCTIKLSNkZWZpbmUgREVWVF9DRAkJMworI2RlZmluZSBERVZUX0NECTMKICNk
ZWZpbmUgREVWVF9aRlMJNAorI2RlZmluZSBERVZUX0VGSQk1CiAgICAgaW50CQkJZF91bml0Owog
ICAgIHZvaWQJCSpkX29wZW5kYXRhOwogfTsKQEAgLTI3OSw3ICsyODAsNyBAQCBleHRlcm4gc3Ry
dWN0CWRpcmVudCAqcmVhZGRpcmZkKGludCk7CiAKIGV4dGVybiB2b2lkCXNyYW5kb20odV9sb25n
IHNlZWQpOwogZXh0ZXJuIHVfbG9uZwlyYW5kb20odm9pZCk7Ci0gICAgCisKIC8qIGltcG9ydHMg
ZnJvbSBzdGRsaWIsIGxvY2FsbHkgbW9kaWZpZWQgKi8KIGV4dGVybiBsb25nCXN0cnRvbChjb25z
dCBjaGFyICosIGNoYXIgKiosIGludCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZwlzdHJ0b3VsKGNv
bnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKQEAgLTM2OCw5ICszNjksOSBAQCBleHRlcm4gaW50
CW51bGxfc3RhdChzdHJ1Y3Qgb3Blbl9maWxlICpmLCBzdHJ1Y3Qgc3RhdCAqc2IpOwogZXh0ZXJu
IGludAludWxsX3JlYWRkaXIoc3RydWN0IG9wZW5fZmlsZSAqZiwgc3RydWN0IGRpcmVudCAqZCk7
CiAKIAotLyogCi0gKiBNYWNoaW5lIGRlcGVuZGVudCBmdW5jdGlvbnMgYW5kIGRhdGEsIG11c3Qg
YmUgcHJvdmlkZWQgb3Igc3R1YmJlZCBieSAKLSAqIHRoZSBjb25zdW1lciAKKy8qCisgKiBNYWNo
aW5lIGRlcGVuZGVudCBmdW5jdGlvbnMgYW5kIGRhdGEsIG11c3QgYmUgcHJvdmlkZWQgb3Igc3R1
YmJlZCBieQorICogdGhlIGNvbnN1bWVyCiAgKi8KIGV4dGVybiBpbnQJCWdldGNoYXIodm9pZCk7
CiBleHRlcm4gaW50CQlpc2NoYXIodm9pZCk7CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL01ha2Vm
aWxlIHN5cy9ib290L2VmaS9NYWtlZmlsZQppbmRleCA2NjQ4MWY4NTEzZi4uMDA0OTBkMGU5NDMg
MTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvTWFrZWZpbGUKKysrIHN5cy9ib290L2VmaS9NYWtlZmls
ZQpAQCAtMTUsNyArMTUsNyBAQCBTVUJESVIrPQlmZHQKIC5pZiAke01BQ0hJTkVfQ1BVQVJDSH0g
PT0gImFhcmNoNjQiIHx8IFwKICAgICAke01BQ0hJTkVfQ1BVQVJDSH0gPT0gImFtZDY0IiB8fCBc
CiAgICAgJHtNQUNISU5FX0NQVUFSQ0h9ID09ICJhcm0iCi1TVUJESVIrPQlsaWJlZmkgbG9hZGVy
IGJvb3QxCitTVUJESVIrPQlsaWJlZmkgZHJpdmVycyBsb2FkZXIgYm9vdDEKIC5lbmRpZgogCiAu
ZW5kaWYgIyAke0NPTVBJTEVSX1RZUEV9ICE9ICJnY2MiIHx8ICR7Q09NUElMRVJfVkVSU0lPTn0g
Pj0gNDA1MDAKZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvYm9vdDEvTWFrZWZpbGUgc3lzL2Jvb3Qv
ZWZpL2Jvb3QxL01ha2VmaWxlCmluZGV4IDExMGE4NTc3NDkxLi43NDgwYzljM2VjYSAxMDA2NDQK
LS0tIHN5cy9ib290L2VmaS9ib290MS9NYWtlZmlsZQorKysgc3lzL2Jvb3QvZWZpL2Jvb3QxL01h
a2VmaWxlCkBAIC04LDM0ICs4LDUwIEBAIE1LX1NTUD0JCW5vCiAKIFBST0c9CQlib290MS5zeW0K
IElOVEVSTkFMUFJPRz0KLVdBUk5TPz0JCTYKK1dBUk5TPz0JCTMKKworIyBJbmNsdWRlIGJjYWNo
ZSBjb2RlLgorSEFWRV9CQ0FDSEU9ICAgIHllcwogCiAuaWYgJHtNS19aRlN9ICE9ICJubyIKICMg
RGlzYWJsZSB3YXJuaW5ncyB0aGF0IGFyZSBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggdGhl
IHpmcyBib290IGNvZGUKLUNXQVJORkxBR1MuemZzX21vZHVsZS5jICs9IC1Xbm8tYXJyYXktYm91
bmRzCi1DV0FSTkZMQUdTLnpmc19tb2R1bGUuYyArPSAtV25vLWNhc3QtYWxpZ24KLUNXQVJORkxB
R1MuemZzX21vZHVsZS5jICs9IC1Xbm8tY2FzdC1xdWFsCi1DV0FSTkZMQUdTLnpmc19tb2R1bGUu
YyArPSAtV25vLW1pc3NpbmctcHJvdG90eXBlcwotQ1dBUk5GTEFHUy56ZnNfbW9kdWxlLmMgKz0g
LVduby1zaWduLWNvbXBhcmUKLUNXQVJORkxBR1MuemZzX21vZHVsZS5jICs9IC1Xbm8tdW51c2Vk
LXBhcmFtZXRlcgotQ1dBUk5GTEFHUy56ZnNfbW9kdWxlLmMgKz0gLVduby11bnVzZWQtZnVuY3Rp
b24KK0NXQVJORkxBR1MuYm9vdDEuYyArPSAtV25vLW1pc3NpbmctdmFyaWFibGUtZGVjbGFyYXRp
b25zCitDV0FSTkZMQUdTLnpmcy5jICs9IC1Xbm8taW5jb21wYXRpYmxlLXBvaW50ZXItdHlwZXMt
ZGlzY2FyZHMtcXVhbGlmaWVycworQ1dBUk5GTEFHUy56ZnMuYyArPSAtV25vLW1pc3NpbmctdmFy
aWFibGUtZGVjbGFyYXRpb25zCitDV0FSTkZMQUdTLnpmcy5jICs9IC1Xbm8tYXJyYXktYm91bmRz
CitDV0FSTkZMQUdTLnpmcy5jICs9IC1Xbm8tY2FzdC1hbGlnbgorQ1dBUk5GTEFHUy56ZnMuYyAr
PSAtV25vLWNhc3QtcXVhbAorQ1dBUk5GTEFHUy56ZnMuYyArPSAtV25vLW1pc3NpbmctcHJvdG90
eXBlcworQ1dBUk5GTEFHUy56ZnMuYyArPSAtV25vLXNpZ24tY29tcGFyZQorQ1dBUk5GTEFHUy56
ZnMuYyArPSAtV25vLXVudXNlZC1wYXJhbWV0ZXIKK0NXQVJORkxBR1MuemZzLmMgKz0gLVduby11
bnVzZWQtZnVuY3Rpb24KIENXQVJORkxBR1Muc2tlaW4uYyArPSAtV25vLWNhc3QtYWxpZ24KIENX
QVJORkxBR1Muc2tlaW4uYyArPSAtV25vLW1pc3NpbmctdmFyaWFibGUtZGVjbGFyYXRpb25zCiAu
ZW5kaWYKIAorCiAjIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBsb2FkZXIgY29kZQotU1JDUz0JYm9v
dDEuYyBzZWxmX3JlbG9jLmMgc3RhcnQuUyB1ZnNfbW9kdWxlLmMKK1NSQ1M9CWJvb3QxLmMgc2Vs
Zl9yZWxvYy5jIHN0YXJ0LlMKIC5pZiAke01LX1pGU30gIT0gIm5vIgotU1JDUys9CQl6ZnNfbW9k
dWxlLmMKKy5QQVRIOgkJJHsuQ1VSRElSfS8uLi8uLi8uLi9jcnlwdG8vc2tlaW4KIFNSQ1MrPQkJ
c2tlaW4uYyBza2Vpbl9ibG9jay5jCiAjIERvIG5vdCB1bnJvbGwgc2tlaW4gbG9vcHMsIHJlZHVj
ZSBjb2RlIHNpemUKIENGTEFHUys9CS1EU0tFSU5fTE9PUD0xMTEKLS5QQVRIOgkJJHsuQ1VSRElS
fS8uLi8uLi8uLi9jcnlwdG8vc2tlaW4KKy5QQVRIOgkJJHsuQ1VSRElSfS8uLi8uLi96ZnMKK1NS
Q1MrPQkJemZzLmMKIC5lbmRpZgogCisjIEFsd2F5cyBhZGQgTUkgc291cmNlcworLlBBVEg6CQkk
ey5DVVJESVJ9Ly4uLy4uL2NvbW1vbgorLmluY2x1ZGUJIiR7LkNVUkRJUn0vLi4vLi4vY29tbW9u
L01ha2VmaWxlLmluYyIKK0NGTEFHUys9CS1JJHsuQ1VSRElSfS8uLi8uLi9jb21tb24KKworLlBB
VEg6ICR7LkNVUkRJUn0vYXJjaC8ke01BQ0hJTkV9CisKIENGTEFHUys9CS1JLgogQ0ZMQUdTKz0J
LUkkey5DVVJESVJ9Ly4uL2luY2x1ZGUKIENGTEFHUys9CS1JJHsuQ1VSRElSfS8uLi9pbmNsdWRl
LyR7TUFDSElORX0KK0NGTEFHUys9CS1JJHsuQ1VSRElSfS8uLi9kcml2ZXJzLwogQ0ZMQUdTKz0J
LUkkey5DVVJESVJ9Ly4uLy4uLy4uL2NvbnRyaWIvZGV2L2FjcGljYS9pbmNsdWRlCiBDRkxBR1Mr
PQktSSR7LkNVUkRJUn0vLi4vLi4vLi4KIENGTEFHUys9CS1ERUZJX1VGU19CT09UCkBAIC01Niw2
ICs3MiwyMCBAQCBDRkxBR1MrPQktREVGSV9aRlNfQk9PVAogLlBBVEg6CQkkey5DVVJESVJ9Ly4u
Ly4uL2NvbW1vbgogQ0ZMQUdTKz0JLUkkey5DVVJESVJ9Ly4uLy4uL2NvbW1vbgogCisjIG1ha2Ug
YnVpbGRlbnYgZG9lc24ndCBzZXQgREVTVERJUiwgdGhpcyBtZWFucyBMSUJTVEFORAorIyB3aWxs
IGJlIHdyb25nIHdoZW4gY3Jvc3NidWlsZGluZy4KKy5pZiBleGlzdHMoJHsuT0JKRElSfS8uLi8u
Li8uLi8uLi9saWIvbGlic3RhbmQvbGlic3RhbmQuYSkKK0xJQlNUQU5EPQkkey5PQkpESVJ9Ly4u
Ly4uLy4uLy4uL2xpYi9saWJzdGFuZC9saWJzdGFuZC5hCisuZW5kaWYKKworIyBBZGQgbGliZWZp
CisuUEFUSDoJCSR7LkNVUkRJUn0vLi4vbGliZWZpCitMSUJFRkk9CQkkey5PQkpESVJ9Ly4uL2xp
YmVmaS9saWJlZmkuYQorCisuUEFUSDoJCSR7LkNVUkRJUn0vLi4vZHJpdmVycworTElCRUZJX0RS
SVZFUlM9CSR7Lk9CSkRJUn0vLi4vZHJpdmVycy9saWJlZmlfZHJpdmVycy5hCisKKwogRklMRVM9
CWJvb3QxLmVmaSBib290MS5lZmlmYXQKIEZJTEVTTU9ERV9ib290MS5lZmk9CSR7QklOTU9ERX0K
IApAQCAtNzUsOCArMTA1LDggQEAgTERGTEFHUys9CS1XbCwtem5vY29tYnJlbG9jCiAjIF9fYWVh
YmlfKiAoYXJtKSBvciBfX2RpdmRpMyAoaTM4NikuCiAjIGFzIHdlbGwgYXMgcmVxdWlyZWQgc3Ry
aW5nIGFuZCBtZW1vcnkgZnVuY3Rpb25zIGZvciBhbGwgcGxhdGZvcm1zLgogIwotRFBBREQrPQkJ
JHtMSUJTVEFORH0KLUxEQUREKz0JCS1sc3RhbmQKK0RQQUREKz0JCSR7TElCRUZJX0RSSVZFUlN9
ICR7TElCRUZJfSAke0xJQlNUQU5EfQorTERBREQrPQkJJHtMSUJFRklfRFJJVkVSU30gJHtMSUJF
Rkl9ICR7TElCU1RBTkR9CiAKIERQQUREKz0JCSR7TERTQ1JJUFR9CiAKQEAgLTEwMiw3ICsxMzIs
NyBAQCBib290MS5lZmk6ICR7UFJPR30KIAlTT1VSQ0VfREFURV9FUE9DSD0ke1NPVVJDRV9EQVRF
X0VQT0NIfSBcCiAJJHtPQkpDT1BZfSAtaiAucGVoZWFkZXIgLWogLnRleHQgLWogLnNkYXRhIC1q
IC5kYXRhIFwKIAkJLWogLmR5bmFtaWMgLWogLmR5bnN5bSAtaiAucmVsLmR5biBcCi0JCS1qIC5y
ZWxhLmR5biAtaiAucmVsb2MgLWogLmVoX2ZyYW1lIFwKKwkJLWogLnJlbGEuZHluIC1qIC5yZWxv
YyAtaiAuZWhfZnJhbWUgLWogc2V0X1hjb21tYW5kX3NldCBcCiAJCS0tb3V0cHV0LXRhcmdldD0k
e0VGSV9UQVJHRVR9ICR7LkFMTFNSQ30gJHsuVEFSR0VUfQogCiBib290MS5vOiAkey5DVVJESVJ9
Ly4uLy4uL2NvbW1vbi91ZnNyZWFkLmMKQEAgLTExMSw3ICsxNDEsNyBAQCBib290MS5vOiAkey5D
VVJESVJ9Ly4uLy4uL2NvbW1vbi91ZnNyZWFkLmMKICMgY3JlYXRlZCBieSBnZW5lcmF0ZS1mYXQu
c2gKIAogLmluY2x1ZGUgIiR7LkNVUkRJUn0vTWFrZWZpbGUuZmF0IgotQk9PVDFfTUFYU0laRT89
CTEzMTA3MgorQk9PVDFfTUFYU0laRT89CTUyNDI4OAogCiBib290MS5lZmlmYXQ6IGJvb3QxLmVm
aQogCUBzZXQgLS0gYGxzIC1sIGJvb3QxLmVmaWA7IFwKZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkv
Ym9vdDEvTWFrZWZpbGUuZmF0IHN5cy9ib290L2VmaS9ib290MS9NYWtlZmlsZS5mYXQKaW5kZXgg
Yzg2YTdjM2Y1ODUuLmUyY2RhMWNlYjc5IDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2Jvb3QxL01h
a2VmaWxlLmZhdAorKysgc3lzL2Jvb3QvZWZpL2Jvb3QxL01ha2VmaWxlLmZhdApAQCAtMSw0ICsx
LDQgQEAKICMgVGhpcyBmaWxlIGF1dG9nZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtZmF0LnNoIC0gRE8g
Tk9UIEVESVQKICMgJEZyZWVCU0QkCiBCT09UMV9PRkZTRVQ9MHgyZAotQk9PVDFfTUFYU0laRT0x
MzEwNzIKK0JPT1QxX01BWFNJWkU9NTI0Mjg4CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2Jvb3Qx
L2Jvb3QxLmMgc3lzL2Jvb3QvZWZpL2Jvb3QxL2Jvb3QxLmMKaW5kZXggODBiMTg5NWQ0YjIuLjll
MDJiZmEzODQ5IDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2Jvb3QxL2Jvb3QxLmMKKysrIHN5cy9i
b290L2VmaS9ib290MS9ib290MS5jCkBAIC0yNiw2MiArMjYsMTE4IEBAIF9fRkJTRElEKCIkRnJl
ZUJTRCQiKTsKICNpbmNsdWRlIDxtYWNoaW5lL2VsZi5oPgogI2luY2x1ZGUgPG1hY2hpbmUvc3Rk
YXJnLmg+CiAjaW5jbHVkZSA8c3RhbmQuaD4KKyNpbmNsdWRlIDxzdHJpbmcxNi5oPgogCiAjaW5j
bHVkZSA8ZWZpLmg+CisjaW5jbHVkZSA8ZWZpbGliLmg+CisjaW5jbHVkZSA8ZWZpcHJvdC5oPgog
I2luY2x1ZGUgPGVmaWNvbnNjdGwuaD4KKyNpZmRlZiBFRklfWkZTX0JPT1QKKyNpbmNsdWRlIDxs
aWJ6ZnMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vdHN0cmFwLmg+CiAKLSNpbmNsdWRlICJi
b290X21vZHVsZS5oIgorI2luY2x1ZGUgImVmaV9kcml2ZXJzLmgiCiAjaW5jbHVkZSAicGF0aHMu
aCIKIAotc3RhdGljIGNvbnN0IGJvb3RfbW9kdWxlX3QgKmJvb3RfbW9kdWxlc1tdID0KLXsKLSNp
ZmRlZiBFRklfWkZTX0JPT1QKLQkmemZzX21vZHVsZSwKLSNlbmRpZgotI2lmZGVmIEVGSV9VRlNf
Qk9PVAotCSZ1ZnNfbW9kdWxlCisjaWZkZWYgRUZJX0RFQlVHCisjZGVmaW5lIERQUklOVEYoZm10
LCBhcmdzLi4uKSBwcmludGYoZm10LCAjI2FyZ3MpCisjZGVmaW5lIERTVEFMTChkKSBicy0+U3Rh
bGwoZCkKKyNlbHNlCisjZGVmaW5lIERQUklOVEYoZm10LCAuLi4pIHt9CisjZGVmaW5lIERTVEFM
TChkKSB7fQogI2VuZGlmCisKK3N0cnVjdCBhcmNoX3N3aXRjaCBhcmNoc3c7CS8qIE1JL01EIGlu
dGVyZmFjZSBib3VuZGFyeSAqLworCitzdGF0aWMgY29uc3QgZWZpX2RyaXZlcl90ICplZmlfZHJp
dmVyc1tdID0geworICAgICAgICAmZnNfZHJpdmVyLAorICAgICAgICBOVUxMCiB9OwogCi0jZGVm
aW5lCU5VTV9CT09UX01PRFVMRVMJbml0ZW1zKGJvb3RfbW9kdWxlcykKLS8qIFRoZSBpbml0aWFs
IG51bWJlciBvZiBoYW5kbGVzIHVzZWQgdG8gcXVlcnkgRUZJIGZvciBwYXJ0aXRpb25zLiAqLwot
I2RlZmluZSBOVU1fSEFORExFU19JTklUCTI0CitleHRlcm4gc3RydWN0IGNvbnNvbGUgZWZpX2Nv
bnNvbGU7CisjaWYgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoX19pMzg2X18pCitleHRl
cm4gc3RydWN0IGNvbnNvbGUgY29tY29uc29sZTsKK2V4dGVybiBzdHJ1Y3QgY29uc29sZSBudWxs
Y29uc29sZTsKKyNlbmRpZgogCi12b2lkIHB1dGNoYXIoaW50IGMpOwotRUZJX1NUQVRVUyBlZmlf
bWFpbihFRklfSEFORExFIFhpbWFnZSwgRUZJX1NZU1RFTV9UQUJMRSogWHN5c3RhYik7CitzdHJ1
Y3QgZnNfb3BzICpmaWxlX3N5c3RlbVtdID0geworCSZkb3Nmc19mc29wcywKKwkmdWZzX2Zzb3Bz
LAorCSZjZDk2NjBfZnNvcHMsCisJJm5mc19mc29wcywKKwkmZ3ppcGZzX2Zzb3BzLAorCSZiemlw
ZnNfZnNvcHMsCisJTlVMTAorfTsKIAotRUZJX1NZU1RFTV9UQUJMRSAqc3lzdGFiOwotRUZJX0JP
T1RfU0VSVklDRVMgKmJzOwotc3RhdGljIEVGSV9IQU5ETEUgKmltYWdlOworc3RydWN0IGRldnN3
ICpkZXZzd1tdID0geworCSZlZmlwYXJ0X2RldiwKKyNpZmRlZiBFRklfWkZTX0JPT1QKKwkmemZz
X2RldiwKKyNlbmRpZgorCU5VTEwKK307CiAKLXN0YXRpYyBFRklfR1VJRCBCbG9ja0lvUHJvdG9j
b2xHVUlEID0gQkxPQ0tfSU9fUFJPVE9DT0w7Ci1zdGF0aWMgRUZJX0dVSUQgRGV2aWNlUGF0aEdV
SUQgPSBERVZJQ0VfUEFUSF9QUk9UT0NPTDsKLXN0YXRpYyBFRklfR1VJRCBMb2FkZWRJbWFnZUdV
SUQgPSBMT0FERURfSU1BR0VfUFJPVE9DT0w7Ci1zdGF0aWMgRUZJX0dVSUQgQ29uc29sZUNvbnRy
b2xHVUlEID0gRUZJX0NPTlNPTEVfQ09OVFJPTF9QUk9UT0NPTF9HVUlEOworc3RydWN0IGNvbnNv
bGUgKmNvbnNvbGVzW10gPSB7CisJJmVmaV9jb25zb2xlLAorCU5VTEwKK307CiAKLS8qCi0gKiBQ
cm92aWRlIE1hbGxvYyAvIEZyZWUgYmFja2VkIGJ5IEVGSXMgQWxsb2NhdGVQb29sIC8gRnJlZVBv
b2wgd2hpY2ggZW5zdXJlcwotICogbWVtb3J5IGlzIGNvcnJlY3RseSBhbGlnbmVkIGF2b2lkaW5n
IEVGSV9JTlZBTElEX1BBUkFNRVRFUiByZXR1cm5zIGZyb20KLSAqIEVGSSBtZXRob2RzLgorLyog
RGVmaW5pdGlvbnMgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCBmb3IgYm9vdCwgYnV0IHdlIG5lZWQg
dG8gZGVmaW5lCisgKiB0byBtYWtlIHRoZSBsaW5rZXIgaGFwcHkuCiAgKi8KLXZvaWQgKgotTWFs
bG9jKHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmZpbGUgX191bnVzZWQsIGludCBsaW5lIF9fdW51
c2VkKQorc3RydWN0IGZpbGVfZm9ybWF0ICpmaWxlX2Zvcm1hdHNbXSA9IHsgTlVMTCB9OworCitz
dHJ1Y3QgbmV0aWZfZHJpdmVyICpuZXRpZl9kcml2ZXJzW10gPSB7IE5VTEwgfTsKKworc3RhdGlj
IGludAorZWZpX2F1dG9sb2FkKHZvaWQpCiB7Ci0Jdm9pZCAqb3V0OworICBwcmludGYoIioqKioq
KioqIEJvb3QgYmxvY2sgc2hvdWxkIG5vdCBjYWxsIGF1dG9sb2FkXG4iKTsKKyAgcmV0dXJuICgt
MSk7Cit9CiAKLQlpZiAoYnMtPkFsbG9jYXRlUG9vbChFZmlMb2FkZXJEYXRhLCBsZW4sICZvdXQp
ID09IEVGSV9TVUNDRVNTKQotCQlyZXR1cm4gKG91dCk7CitzdGF0aWMgaW50IGVmaV9nZXRkZXYo
dm9pZCAqKnZkZXYgX191bnVzZWQsIGNvbnN0IGNoYXIgKmRldnNwZWMgX191bnVzZWQsCisgICAg
Y29uc3QgY2hhciAqKnBhdGggX191bnVzZWQpCit7CisgIHByaW50ZigiKioqKioqKiogQm9vdCBi
bG9jayBzaG91bGQgbm90IGNhbGwgZ2V0ZGV2XG4iKTsKKyAgcmV0dXJuICgtMSk7Cit9CiAKLQly
ZXR1cm4gKE5VTEwpOworc3RhdGljIHNzaXplX3QKK2VmaV9jb3B5aW4oY29uc3Qgdm9pZCAqc3Jj
IF9fdW51c2VkLCB2bV9vZmZzZXRfdCBkZXN0IF9fdW51c2VkLAorICAgIGNvbnN0IHNpemVfdCBs
ZW4gX191bnVzZWQpCit7CisgIHByaW50ZigiKioqKioqKiogQm9vdCBibG9jayBzaG91bGQgbm90
IGNhbGwgY29weWluXG4iKTsKKyAgcmV0dXJuICgtMSk7CiB9CiAKLXZvaWQKLUZyZWUodm9pZCAq
YnVmLCBjb25zdCBjaGFyICpmaWxlIF9fdW51c2VkLCBpbnQgbGluZSBfX3VudXNlZCkKK3N0YXRp
YyBzc2l6ZV90CitlZmlfY29weW91dCh2bV9vZmZzZXRfdCBzcmMgX191bnVzZWQsIHZvaWQgKmRl
c3QgX191bnVzZWQsCisgICAgY29uc3Qgc2l6ZV90IGxlbiBfX3VudXNlZCkKIHsKLQlpZiAoYnVm
ICE9IE5VTEwpCi0JCSh2b2lkKWJzLT5GcmVlUG9vbChidWYpOworICBwcmludGYoIioqKioqKioq
IEJvb3QgYmxvY2sgc2hvdWxkIG5vdCBjYWxsIGNvcHlvdXRcbiIpOworICByZXR1cm4gKC0xKTsK
K30KKworc3RhdGljIHNzaXplX3QKK2VmaV9yZWFkaW4oaW50IGZkIF9fdW51c2VkLCB2bV9vZmZz
ZXRfdCBkZXN0IF9fdW51c2VkLAorICAgIGNvbnN0IHNpemVfdCBsZW4gX191bnVzZWQpCit7Cisg
IHByaW50ZigiKioqKioqKiogQm9vdCBibG9jayBzaG91bGQgbm90IGNhbGwgcmVhZGluXG4iKTsK
KyAgcmV0dXJuICgtMSk7CiB9CiAKKy8qIFRoZSBpbml0aWFsIG51bWJlciBvZiBoYW5kbGVzIHVz
ZWQgdG8gcXVlcnkgRUZJIGZvciBwYXJ0aXRpb25zLiAqLworI2RlZmluZSBOVU1fSEFORExFU19J
TklUCTI0CisKK3N0YXRpYyBFRklfR1VJRCBEZXZpY2VQYXRoR1VJRCA9IERFVklDRV9QQVRIX1BS
T1RPQ09MOworc3RhdGljIEVGSV9HVUlEIExvYWRlZEltYWdlR1VJRCA9IExPQURFRF9JTUFHRV9Q
Uk9UT0NPTDsKK3N0YXRpYyBFRklfR1VJRCBTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlEID0g
U0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MOworc3RhdGljIEVGSV9HVUlEIEZpbGVJbmZvR1VJ
RCA9IEVGSV9GSUxFX0lORk9fSUQ7OworCiAvKgogICogbm9kZXNfbWF0Y2ggcmV0dXJucyBUUlVF
IGlmIHRoZSBpbWdwYXRoIGlzbid0IE5VTEwgYW5kIHRoZSBub2RlcyBtYXRjaCwKICAqIEZBTFNF
IG90aGVyd2lzZS4KQEAgLTE0Miw2ICsxOTgsNyBAQCBkZXZwYXRoX2xhc3QoRUZJX0RFVklDRV9Q
QVRIICpkZXZwYXRoKQogCXJldHVybiAoZGV2cGF0aCk7CiB9CiAKKyNpZmRlZiBFRklfREVCVUcK
IC8qCiAgKiBkZXZwYXRoX25vZGVfc3RyIGlzIGEgYmFzaWMgb3V0cHV0IG1ldGhvZCBmb3IgYSBk
ZXZwYXRoIG5vZGUgd2hpY2gKICAqIG9ubHkgdW5kZXJzdGFuZHMgYSBzdWJzZXQgb2YgdGhlIGF2
YWlsYWJsZSBzdWIgdHlwZXMuCkBAIC0yNzMsNyArMzMwLDcgQEAgZGV2cGF0aF9ub2RlX3N0cihj
aGFyICpidWYsIHNpemVfdCBzaXplLCBFRklfREVWSUNFX1BBVEggKmRldnBhdGgpCiAgKiBkZXZw
YXRoX3N0cmxjYXQgYXBwZW5kcyBhIHRleHQgZGVzY3JpcHRpb24gb2YgZGV2cGF0aCB0byBidWYg
YnV0IG5vdCBtb3JlCiAgKiB0aGFuIHNpemUgLSAxIGNoYXJhY3RlcnMgZm9sbG93ZWQgYnkgTlVM
LXRlcm1pbmF0b3IuCiAgKi8KLWludAorc3RhdGljIGludAogZGV2cGF0aF9zdHJsY2F0KGNoYXIg
KmJ1Ziwgc2l6ZV90IHNpemUsIEVGSV9ERVZJQ0VfUEFUSCAqZGV2cGF0aCkKIHsKIAlzaXplX3Qg
bGVuLCB1c2VkOwpAQCAtMzA0LDQ4ICszNjEsMjA3IEBAIGRldnBhdGhfc3RybGNhdChjaGFyICpi
dWYsIHNpemVfdCBzaXplLCBFRklfREVWSUNFX1BBVEggKmRldnBhdGgpCiAgKiBkZXZwYXRoX3N0
ciBpcyBjb252ZW5pZW5jZSBtZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgdGV4dCBkZXNjcmlwdGlv
biBvZgogICogZGV2cGF0aCB1c2luZyBhIHN0YXRpYyBidWZmZXIsIHNvIGl0IGlzbid0IHRocmVh
ZCBzYWZlIQogICovCi1jaGFyICoKK3N0YXRpYyBjaGFyICoKIGRldnBhdGhfc3RyKEVGSV9ERVZJ
Q0VfUEFUSCAqZGV2cGF0aCkKIHsKIAlzdGF0aWMgY2hhciBidWZbMjU2XTsKIAogCWRldnBhdGhf
c3RybGNhdChidWYsIHNpemVvZihidWYpLCBkZXZwYXRoKTsKIAotCXJldHVybiBidWY7CisJcmV0
dXJuIChidWYpOworfQorI2VuZGlmCisKK3N0YXRpYyBFRklfU1RBVFVTCitlZmlfbG9hZChFRklf
SEFORExFIGRldiwgY29uc3QgY2hhciAqZmlsZXBhdGgsIHZvaWQgKipidWZwLCBzaXplX3QgKmJ1
ZnNpemUpCit7CisgICAgICAgIFVJTlROIGluZm9zaXplID0gc2l6ZW9mKEVGSV9GSUxFX0lORk8p
ICsKKyAgICAgICAgICAoKHN0cmxlbihmaWxlcGF0aCkgKyAxKSAqIHNpemVvZihDSEFSMTYpKTsK
KyAgICAgICAgRUZJX0ZJTEVfSU5GTyAqZmluZm87CisJRUZJX1NUQVRVUyBzdGF0dXM7CisgICAg
ICAgIEVGSV9GSUxFX0lPX0lOVEVSRkFDRSAqaWZhY2U7CisgICAgICAgIEVGSV9GSUxFX0hBTkRM
RSByb290OworICAgICAgICBFRklfRklMRV9IQU5ETEUgdGFyZ2V0OworICAgICAgICBDSEFSMTYg
cGF0aDE2W3N0cmxlbihmaWxlcGF0aCkgKyAxXTsKKwl2b2lkICpidWY7CisKKyAgICAgICAgZmlu
Zm8gPSBtYWxsb2MoaW5mb3NpemUpOworCisgICAgICAgIGlmIChmaW5mbyA9PSBOVUxMKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIChFRklfT1VUX09GX1JFU09VUkNFUyk7CisgICAgICAgIH0K
KworCXN0YXR1cyA9IEJTLT5PcGVuUHJvdG9jb2woZGV2LCAmU2ltcGxlRmlsZVN5c3RlbVByb3Rv
Y29sR1VJRCwKKyAgICAgICAgICAgICh2b2lkICoqKSZpZmFjZSwgSUgsIE5VTEwsIEVGSV9PUEVO
X1BST1RPQ09MX0dFVF9QUk9UT0NPTCk7CisKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBFRklfU1VD
Q0VTUykgeworICAgICAgICAgICAgICAgIGZyZWUoZmluZm8pOworICAgICAgICAgICAgICAgIHBy
aW50ZigiT3BlbiBwcm90b2NvbCBmYWlsZWQhICVsZFxuIiwgRUZJX0VSUk9SX0NPREUoc3RhdHVz
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGF0dXMpOworICAgICAgICB9CisKKyAgICAg
ICAgc3RhdHVzID0gaWZhY2UtPk9wZW5Wb2x1bWUoaWZhY2UsICZyb290KTsKKworICAgICAgICBp
ZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgQlMtPkNsb3NlUHJv
dG9jb2woZGV2LCAmU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR1VJRCwgSUgsIE5VTEwpOworICAg
ICAgICAgICAgICAgIGZyZWUoZmluZm8pOworICAgICAgICAgICAgICAgIHByaW50ZigiT3BlbiB2
b2x1bWUgZmFpbGVkISAlbGRcbiIsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOworICAgICAgICAg
ICAgICAgIHJldHVybiAoc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmNweV90b18x
NihwYXRoMTYsIGZpbGVwYXRoKTsKKyAgICAgICAgc3RhdHVzID0gcm9vdC0+T3Blbihyb290LCAm
dGFyZ2V0LCBwYXRoMTYsIEVGSV9GSUxFX01PREVfUkVBRCwgMCk7CisKKyAgICAgICAgaWYgKHN0
YXR1cyAhPSBFRklfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIEJTLT5DbG9zZVByb3RvY29s
KGRldiwgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQsIElILCBOVUxMKTsKKyAgICAgICAg
ICAgICAgICBmcmVlKGZpbmZvKTsKKworICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdHVzKTsK
KyAgICAgICAgfQorCisgICAgICAgICpidWZzaXplID0gaW5mb3NpemU7CisgICAgICAgIHN0YXR1
cyA9IHRhcmdldC0+R2V0SW5mbyh0YXJnZXQsICZGaWxlSW5mb0dVSUQsIGJ1ZnNpemUsIGZpbmZv
KTsKKworICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAgICAg
ICAgQlMtPkNsb3NlUHJvdG9jb2woZGV2LCAmU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR1VJRCwg
SUgsIE5VTEwpOworICAgICAgICAgICAgICAgIGZyZWUoZmluZm8pOworICAgICAgICAgICAgICAg
IHByaW50ZigiR2V0IGluZm8gZmFpbGVkISAlbGRcbiIsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykp
OworICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAgICAg
ICpidWZzaXplID0gZmluZm8tPkZpbGVTaXplOworCisgICAgICAgIGlmICgoYnVmID0gbWFsbG9j
KGZpbmZvLT5GaWxlU2l6ZSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBCUy0+Q2xvc2VQ
cm90b2NvbChkZXYsICZTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlELCBJSCwgTlVMTCk7Cisg
ICAgICAgICAgICAgICAgZnJlZShmaW5mbyk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWls
ZWQgdG8gYWxsb2NhdGUgbG9hZCBidWZmZXIgJXpkIGZvciAnJXMnICIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIiglbHUpXG4iLCBmaW5mby0+RmlsZVNpemUsIGZpbGVwYXRoLCBFRklfRVJST1Jf
Q09ERShzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEVGSV9PVVRfT0ZfUkVTT1VS
Q0VTKTsKKyAgICAgICAgfQorCisgICAgICAgICpidWZwID0gYnVmOworICAgICAgICBzdGF0dXMg
PSB0YXJnZXQtPlJlYWQodGFyZ2V0LCBidWZzaXplLCBidWYpOworICAgICAgICBCUy0+Q2xvc2VQ
cm90b2NvbChkZXYsICZTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlELCBJSCwgTlVMTCk7Cisg
ICAgICAgIGZyZWUoZmluZm8pOworCisgICAgICAgIGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1Mp
IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlJlYWQgZmFpbGVkISAlbGRcbiIsIEVGSV9FUlJP
Ul9DT0RFKHN0YXR1cykpOworICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdHVzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiAoRUZJX1NVQ0NFU1MpOwogfQogCiAvKgogICogbG9hZF9s
b2FkZXIgYXR0ZW1wdHMgdG8gbG9hZCB0aGUgbG9hZGVyIGltYWdlIGRhdGEuCiAgKgotICogSXQg
dHJpZXMgZWFjaCBtb2R1bGUgYW5kIGl0cyByZXNwZWN0aXZlIGRldmljZXMsIGlkZW50aWZpZWQg
YnkgbW9kLT5wcm9iZSwKLSAqIGluIG9yZGVyIHVudGlsIGEgc3VjY2Vzc2Z1bCBsb2FkIG9jY3Vy
cyBhdCB3aGljaCBwb2ludCBpdCByZXR1cm5zIEVGSV9TVUNDRVNTCi0gKiBhbmQgRUZJX05PVF9G
T1VORCBvdGhlcndpc2UuCisgKiBUaGlzIHRyaWVzIGFsbCBoYW5kbGVzIHdoaWNoIHN1cHBvcnQg
dGhlIEVGSV9TSU1QTEVfRklMRV9TWVNURU0gaW50ZXJmYWNlLgorICogSXQgaXMgZXhwZWN0ZWQg
dGhhdCB0aGUgZHJpdmVycyB3aWxsIGhhdmUgaW5zdGFsbGVkIHRoaXMgaW50ZXJmYWNlIG9uIGV2
ZXJ5CisgKiBoYW5kbGUgcmVwcmVzZW50aW5nIGEgZGV2aWNlIGNvbnRhaW5pbmcgYSBzdXBwb3J0
ZWQgZmlsZSBzeXN0ZW0uCisgKgorICogTm90ZTogSW4gdGhlIGZ1dHVyZSwgdGhpcyBtYXkgYmUg
YWx0ZXJlZCB0byB1c2UgdGhlIEVGSV9MT0FEX0ZJTEUgaW50ZXJmYWNlLAorICogd2hpY2ggc2hv
dWxkIHdvcmsgdHJhbnNwYXJlbnRseSB3aXRoIG5ldHdvcmsgYm9vdGluZy4KICAqCiAgKiBPbmx5
IGRldmljZXMgd2hpY2ggaGF2ZSBwcmVmZXJyZWQgbWF0Y2hpbmcgdGhlIHByZWZlcnJlZCBwYXJh
bWV0ZXIgYXJlIHRyaWVkLgogICovCiBzdGF0aWMgRUZJX1NUQVRVUwotbG9hZF9sb2FkZXIoY29u
c3QgYm9vdF9tb2R1bGVfdCAqKm1vZHAsIGRldl9pbmZvX3QgKipkZXZpbmZvcCwgdm9pZCAqKmJ1
ZnAsCi0gICAgc2l6ZV90ICpidWZzaXplLCBCT09MRUFOIHByZWZlcnJlZCkKK2xvYWRfbG9hZGVy
KEVGSV9IQU5ETEUgKmhhbmRsZXAsIHZvaWQgKipidWZwLCBzaXplX3QgKmJ1ZnNpemUpCiB7Ci0J
VUlOVE4gaTsKLQlkZXZfaW5mb190ICpkZXY7Ci0JY29uc3QgYm9vdF9tb2R1bGVfdCAqbW9kOwot
Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9CT09UX01PRFVMRVM7IGkrKykgewotCQltb2QgPSBib290
X21vZHVsZXNbaV07Ci0JCWZvciAoZGV2ID0gbW9kLT5kZXZpY2VzKCk7IGRldiAhPSBOVUxMOyBk
ZXYgPSBkZXYtPm5leHQpIHsKLQkJCWlmIChkZXYtPnByZWZlcnJlZCAhPSBwcmVmZXJyZWQpCi0J
CQkJY29udGludWU7Ci0KLQkJCWlmIChtb2QtPmxvYWQoUEFUSF9MT0FERVJfRUZJLCBkZXYsIGJ1
ZnAsIGJ1ZnNpemUpID09Ci0JCQkgICAgRUZJX1NVQ0NFU1MpIHsKLQkJCQkqZGV2aW5mb3AgPSBk
ZXY7Ci0JCQkJKm1vZHAgPSBtb2Q7Ci0JCQkJcmV0dXJuIChFRklfU1VDQ0VTUyk7Ci0JCQl9CisJ
RUZJX0RFVklDRV9QQVRIICppbWdwYXRoOworCUVGSV9ERVZJQ0VfUEFUSCAqZGV2cGF0aDsKKwlF
RklfTE9BREVEX0lNQUdFICpib290X2ltYWdlOworICAgICAgICBFRklfSEFORExFICpib290X2hh
bmRsZTsKKwlFRklfSEFORExFICpwcmVmZXJyZWQ7CisJRUZJX0hBTkRMRSAqaGFuZGxlczsKKyAg
ICAgICAgRUZJX1NUQVRVUyBzdGF0dXM7CisJVUlOVE4gaSwgaHNpemUsIG5oYW5kbGVzLCBucHJl
ZmVycmVkOworCisJaWYgKChzdGF0dXMgPSBCUy0+T3BlblByb3RvY29sKElILCAmTG9hZGVkSW1h
Z2VHVUlELAorICAgICAgICAgICAgKFZPSUQqKikmYm9vdF9pbWFnZSwgSUgsIE5VTEwsCisgICAg
ICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wpKSAhPSBFRklfU1VDQ0VTUykg
eworCQlwYW5pYygiRmFpbGVkIHRvIHF1ZXJ5IExvYWRlZEltYWdlICglbHUpXG4iLAorCQkgICAg
RUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CisJfQorCisgICAgICAgIGJvb3RfaGFuZGxlID0gYm9v
dF9pbWFnZS0+RGV2aWNlSGFuZGxlOworCisJaWYgKChzdGF0dXMgPSBCUy0+T3BlblByb3RvY29s
KGJvb3RfaGFuZGxlLCAmRGV2aWNlUGF0aEdVSUQsCisgICAgICAgICAgICAodm9pZCAqKikmaW1n
cGF0aCwgSUgsIE5VTEwsIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTCkpKSB7CisgICAg
ICAgICAgICAgICAgcGFuaWMoIkZhaWxlZCB0byBnZXQgaW1hZ2UgRGV2aWNlUGF0aCAoJWx1KVxu
IiwKKyAgICAgICAgICAgICAgICAgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CisgICAgICAg
IH0KKyAgICAgICAgRFBSSU5URigiYm9vdDEgaW1hZ2VwYXRoOiAlc1xuIiwgZGV2cGF0aF9zdHIo
aW1ncGF0aCkpOworCisgICAgICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgaGFuZGxlcyAq
LworCWhzaXplID0gKFVJTlROKU5VTV9IQU5ETEVTX0lOSVQgKiBzaXplb2YoRUZJX0hBTkRMRSk7
CisJaWYgKChoYW5kbGVzID0gbWFsbG9jKGhzaXplKSkgPT0gTlVMTCkKKwkJcGFuaWMoIkZhaWxl
ZCB0byBhbGxvY2F0ZSAlZCBoYW5kbGVzICglbHUpIiwgTlVNX0hBTkRMRVNfSU5JVCwKKwkJICAg
IEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOworCisJc3RhdHVzID0gQlMtPkxvY2F0ZUhhbmRsZShC
eVByb3RvY29sLCAmU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR1VJRCwgTlVMTCwKKwkgICAgJmhz
aXplLCBoYW5kbGVzKTsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBFRklfU1VDQ0VTUzoK
KwkJYnJlYWs7CisJY2FzZSBFRklfQlVGRkVSX1RPT19TTUFMTDoKKwkJKHZvaWQpQlMtPkZyZWVQ
b29sKGhhbmRsZXMpOworCQlpZiAoKGhhbmRsZXMgPSBtYWxsb2MoaHNpemUpKSA9PSBOVUxMKSB7
CisJCQlwYW5pYygiRmFpbGVkIHRvIGFsbG9jYXRlICV6dSBoYW5kbGVzICglbHUpIiwgaHNpemUg
LworCQkJICAgIHNpemVvZigqaGFuZGxlcyksIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwogCQl9
CisJCXN0YXR1cyA9IEJTLT5Mb2NhdGVIYW5kbGUoQnlQcm90b2NvbCwKKyAgICAgICAgICAgICAg
ICAgICAgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQsIE5VTEwsICZoc2l6ZSwgaGFuZGxl
cyk7CisJCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCisJCQlwYW5pYygiRmFpbGVkIHRvIGdl
dCBkZXZpY2UgaGFuZGxlcyAoJWx1KVxuIiwKKwkJCSAgICBFRklfRVJST1JfQ09ERShzdGF0dXMp
KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGFuaWMoIkZhaWxlZCB0byBnZXQgZGV2aWNlIGhh
bmRsZXMgKCVsdSkiLAorCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CiAJfQogCisJaWYg
KChwcmVmZXJyZWQgPSBtYWxsb2MoaHNpemUpKSA9PSBOVUxMKQorCQlwYW5pYygiRmFpbGVkIHRv
IGFsbG9jYXRlICVkIGhhbmRsZXMgKCVsdSkiLCBOVU1fSEFORExFU19JTklULAorCQkgICAgRUZJ
X0VSUk9SX0NPREUoc3RhdHVzKSk7CisKKyAgICAgICAgbnByZWZlcnJlZCA9IDA7CisJbmhhbmRs
ZXMgPSBoc2l6ZSAvIHNpemVvZigqaGFuZGxlcyk7CisKKyAgICAgICAgLyogRmlndXJlIG91dCB3
aGljaCBoYW5kbGVzIGFyZSBwcmVmZXJyZWQgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5o
YW5kbGVzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoQlMtPk9wZW5Qcm90b2NvbChoYW5k
bGVzW2ldLCAmRGV2aWNlUGF0aEdVSUQsCisgICAgICAgICAgICAgICAgICAgICh2b2lkICoqKSZk
ZXZwYXRoLCBJSCwgTlVMTCwgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MKSA9PQorICAg
ICAgICAgICAgICAgICAgICBFRklfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGRldmljZV9wYXRoc19tYXRjaChpbWdwYXRoLCBkZXZwYXRoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRbbnByZWZlcnJlZF0gPSBoYW5kbGVzW2ldOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucHJlZmVycmVkKys7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBCUy0+Q2xvc2VQcm90b2Nv
bChoYW5kbGVzW2ldLCAmRGV2aWNlUGF0aEdVSUQsIElILCBOVUxMKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBCUy0+Q2xvc2VQcm90b2NvbChib290X2hhbmRsZSwg
JkRldmljZVBhdGhHVUlELCBJSCwgTlVMTCk7CisKKyAgICAgICAgLyogVHJ5IHRoZSBwcmVmZXJy
ZWQgaGFuZGxlcyBmaXJzdCwgdGhlbiBhbGwgdGhlIGhhbmRsZXMgKi8KKyAgICAgICAgZm9yIChp
ID0gMDsgaSA8IG5wcmVmZXJyZWQ7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChlZmlfbG9h
ZChwcmVmZXJyZWRbaV0sIFBBVEhfTE9BREVSX0VGSSwgYnVmcCwgYnVmc2l6ZSkgPT0KKyAgICAg
ICAgICAgICAgICAgICBFRklfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAgICAgKmhh
bmRsZXAgPSBwcmVmZXJyZWRbaV07CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEVG
SV9TVUNDRVNTKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgbmhhbmRsZXM7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChlZmlfbG9h
ZChoYW5kbGVzW2ldLCBQQVRIX0xPQURFUl9FRkksIGJ1ZnAsIGJ1ZnNpemUpID09CisgICAgICAg
ICAgICAgICAgICAgRUZJX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpoYW5k
bGVwID0gaGFuZGxlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRUZJX1NV
Q0NFU1MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaW50Zigi
RmFpbGVkIHRvIGxvYWQgJXMgZnJvbSBhbnkgZGV2aWNlIVxuIiwgUEFUSF9MT0FERVJfRUZJKTsK
KwogCXJldHVybiAoRUZJX05PVF9GT1VORCk7CiB9CiAKQEAgLTM1OSwyMCArNTc1LDI3IEBAIHRy
eV9ib290KHZvaWQpCiAJc2l6ZV90IGJ1ZnNpemUsIGxvYWRlcnNpemUsIGNtZHNpemU7CiAJdm9p
ZCAqYnVmLCAqbG9hZGVyYnVmOwogCWNoYXIgKmNtZDsKLQlkZXZfaW5mb190ICpkZXY7Ci0JY29u
c3QgYm9vdF9tb2R1bGVfdCAqbW9kOworICAgICAgICBFRklfSEFORExFIGZzaGFuZGxlOwogCUVG
SV9IQU5ETEUgbG9hZGVyaGFuZGxlOwogCUVGSV9MT0FERURfSU1BR0UgKmxvYWRlZF9pbWFnZTsK
IAlFRklfU1RBVFVTIHN0YXR1czsKKyAgICAgICAgRUZJX0RFVklDRV9QQVRIICpmc3BhdGg7CisK
KwlzdGF0dXMgPSBsb2FkX2xvYWRlcigmZnNoYW5kbGUsICZsb2FkZXJidWYsICZsb2FkZXJzaXpl
KTsKIAotCXN0YXR1cyA9IGxvYWRfbG9hZGVyKCZtb2QsICZkZXYsICZsb2FkZXJidWYsICZsb2Fk
ZXJzaXplLCBUUlVFKTsKLQlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7Ci0JCXN0YXR1cyA9
IGxvYWRfbG9hZGVyKCZtb2QsICZkZXYsICZsb2FkZXJidWYsICZsb2FkZXJzaXplLAotCQkgICAg
RkFMU0UpOworICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIChzdGF0dXMpOworICAgICAgICB9CisKKwlmc3BhdGggPSBOVUxMOworCWlm
IChzdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsKKwkJc3RhdHVzID0gQlMtPk9wZW5Qcm90b2NvbChm
c2hhbmRsZSwgJkRldmljZVBhdGhHVUlELAorICAgICAgICAgICAgICAgICAgICAodm9pZCAqKikm
ZnNwYXRoLCBJSCwgTlVMTCwgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MKTsKIAkJaWYg
KHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewotCQkJcHJpbnRmKCJGYWlsZWQgdG8gbG9hZCAnJXMn
XG4iLCBQQVRIX0xPQURFUl9FRkkpOwotCQkJcmV0dXJuIChzdGF0dXMpOwotCQl9CisJCQlEUFJJ
TlRGKCJGYWlsZWQgdG8gZ2V0IGltYWdlIERldmljZVBhdGggKCVsdSlcbiIsCisJCQkgICAgRUZJ
X0VSUk9SX0NPREUoc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgfQorCQlEUFJJTlRGKCJmaWxl
c3lzdGVtIGRldmljZSBwYXRoOiAlc1xuIiwgZGV2cGF0aF9zdHIoZnNwYXRoKSk7CiAJfQogCiAJ
LyoKQEAgLTM4Nyw5ICs2MTAsOSBAQCB0cnlfYm9vdCh2b2lkKQogCSAqLwogCWNtZCA9IE5VTEw7
CiAJY21kc2l6ZSA9IDA7Ci0Jc3RhdHVzID0gbW9kLT5sb2FkKFBBVEhfRE9UQ09ORklHLCBkZXYs
ICZidWYsICZidWZzaXplKTsKKwlzdGF0dXMgPSBlZmlfbG9hZChmc2hhbmRsZSwgUEFUSF9ET1RD
T05GSUcsICZidWYsICZidWZzaXplKTsKIAlpZiAoc3RhdHVzID09IEVGSV9OT1RfRk9VTkQpCi0J
CXN0YXR1cyA9IG1vZC0+bG9hZChQQVRIX0NPTkZJRywgZGV2LCAmYnVmLCAmYnVmc2l6ZSk7CisJ
CXN0YXR1cyA9IGVmaV9sb2FkKGZzaGFuZGxlLCBQQVRIX0NPTkZJRywgJmJ1ZiwgJmJ1ZnNpemUp
OwogCWlmIChzdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsKIAkJY21kc2l6ZSA9IGJ1ZnNpemUgKyAx
OwogCQljbWQgPSBtYWxsb2MoY21kc2l6ZSk7CkBAIC00MDEsMjQgKzYyNCwyNSBAQCB0cnlfYm9v
dCh2b2lkKQogCQlidWYgPSBOVUxMOwogCX0KIAotCWlmICgoc3RhdHVzID0gYnMtPkxvYWRJbWFn
ZShUUlVFLCBpbWFnZSwgZGV2cGF0aF9sYXN0KGRldi0+ZGV2cGF0aCksCisJaWYgKChzdGF0dXMg
PSBCUy0+TG9hZEltYWdlKFRSVUUsIElILCBkZXZwYXRoX2xhc3QoZnNwYXRoKSwKIAkgICAgbG9h
ZGVyYnVmLCBsb2FkZXJzaXplLCAmbG9hZGVyaGFuZGxlKSkgIT0gRUZJX1NVQ0NFU1MpIHsKLQkJ
cHJpbnRmKCJGYWlsZWQgdG8gbG9hZCBpbWFnZSBwcm92aWRlZCBieSAlcywgc2l6ZTogJXp1LCAo
JWx1KVxuIiwKLQkJICAgICBtb2QtPm5hbWUsIGxvYWRlcnNpemUsIEVGSV9FUlJPUl9DT0RFKHN0
YXR1cykpOworCQlwcmludGYoIkZhaWxlZCB0byBsb2FkIGltYWdlLCBzaXplOiAlenUsICglbHUp
XG4iLAorCQkgICAgIGxvYWRlcnNpemUsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwogCQlnb3Rv
IGVycm91dDsKIAl9CiAKLQlpZiAoKHN0YXR1cyA9IGJzLT5IYW5kbGVQcm90b2NvbChsb2FkZXJo
YW5kbGUsICZMb2FkZWRJbWFnZUdVSUQsCi0JICAgIChWT0lEKiopJmxvYWRlZF9pbWFnZSkpICE9
IEVGSV9TVUNDRVNTKSB7Ci0JCXByaW50ZigiRmFpbGVkIHRvIHF1ZXJ5IExvYWRlZEltYWdlIHBy
b3ZpZGVkIGJ5ICVzICglbHUpXG4iLAotCQkgICAgbW9kLT5uYW1lLCBFRklfRVJST1JfQ09ERShz
dGF0dXMpKTsKKwlpZiAoKHN0YXR1cyA9IEJTLT5PcGVuUHJvdG9jb2wobG9hZGVyaGFuZGxlLCAm
TG9hZGVkSW1hZ2VHVUlELAorICAgICAgICAgICAgKFZPSUQqKikmbG9hZGVkX2ltYWdlLCBJSCwg
TlVMTCwKKyAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTCkpICE9IEVG
SV9TVUNDRVNTKSB7CisJCXByaW50ZigiRmFpbGVkIHRvIHF1ZXJ5IExvYWRlZEltYWdlICglbHUp
XG4iLAorCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CiAJCWdvdG8gZXJyb3V0OwogCX0K
IAogCWlmIChjbWQgIT0gTlVMTCkKIAkJcHJpbnRmKCIgICAgY29tbWFuZCBhcmdzOiAlc1xuIiwg
Y21kKTsKIAotCWxvYWRlZF9pbWFnZS0+RGV2aWNlSGFuZGxlID0gZGV2LT5kZXZoYW5kbGU7CisJ
bG9hZGVkX2ltYWdlLT5EZXZpY2VIYW5kbGUgPSBmc2hhbmRsZTsKIAlsb2FkZWRfaW1hZ2UtPkxv
YWRPcHRpb25zU2l6ZSA9IGNtZHNpemU7CiAJbG9hZGVkX2ltYWdlLT5Mb2FkT3B0aW9ucyA9IGNt
ZDsKIApAQCAtNDM0LDEwICs2NTgsMTAgQEAgdHJ5X2Jvb3Qodm9pZCkKIAlEU1RBTEwoMTAwMDAw
MCk7CiAJRFBSSU5URigiLlxuIik7CiAKLQlpZiAoKHN0YXR1cyA9IGJzLT5TdGFydEltYWdlKGxv
YWRlcmhhbmRsZSwgTlVMTCwgTlVMTCkpICE9CisJaWYgKChzdGF0dXMgPSBCUy0+U3RhcnRJbWFn
ZShsb2FkZXJoYW5kbGUsIE5VTEwsIE5VTEwpKSAhPQogCSAgICBFRklfU1VDQ0VTUykgewotCQlw
cmludGYoIkZhaWxlZCB0byBzdGFydCBpbWFnZSBwcm92aWRlZCBieSAlcyAoJWx1KVxuIiwKLQkJ
ICAgIG1vZC0+bmFtZSwgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7CisJCXByaW50ZigiRmFpbGVk
IHRvIHN0YXJ0IGltYWdlICglbHUpXG4iLAorCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7
CiAJCWxvYWRlZF9pbWFnZS0+TG9hZE9wdGlvbnNTaXplID0gMDsKIAkJbG9hZGVkX2ltYWdlLT5M
b2FkT3B0aW9ucyA9IE5VTEw7CiAJfQpAQCAtNDUzLDEzNCArNjc3LDE5IEBAIGVycm91dDoKIAly
ZXR1cm4gKHN0YXR1cyk7CiB9CiAKLS8qCi0gKiBwcm9iZV9oYW5kbGUgZGV0ZXJtaW5lcyBpZiB0
aGUgcGFzc2VkIGhhbmRsZSByZXByZXNlbnRzIGEgbG9naWNhbCBwYXJ0aXRpb24KLSAqIGlmIGl0
IGRvZXMgaXQgdXNlcyBlYWNoIG1vZHVsZSBpbiBvcmRlciB0byBwcm9iZSBpdCBhbmQgaWYgc3Vj
Y2Vzc2Z1bCBpdAotICogcmV0dXJucyBFRklfU1VDQ0VTUy4KLSAqLwotc3RhdGljIEVGSV9TVEFU
VVMKLXByb2JlX2hhbmRsZShFRklfSEFORExFIGgsIEVGSV9ERVZJQ0VfUEFUSCAqaW1ncGF0aCwg
Qk9PTEVBTiAqcHJlZmVycmVkKQotewotCWRldl9pbmZvX3QgKmRldmluZm87Ci0JRUZJX0JMT0NL
X0lPICpibGtpbzsKLQlFRklfREVWSUNFX1BBVEggKmRldnBhdGg7Ci0JRUZJX1NUQVRVUyBzdGF0
dXM7Ci0JVUlOVE4gaTsKLQotCS8qIEZpZ3VyZSBvdXQgaWYgd2UncmUgZGVhbGluZyB3aXRoIGFu
IGFjdHVhbCBwYXJ0aXRpb24uICovCi0Jc3RhdHVzID0gYnMtPkhhbmRsZVByb3RvY29sKGgsICZE
ZXZpY2VQYXRoR1VJRCwgKHZvaWQgKiopJmRldnBhdGgpOwotCWlmIChzdGF0dXMgPT0gRUZJX1VO
U1VQUE9SVEVEKQotCQlyZXR1cm4gKHN0YXR1cyk7Ci0KLQlpZiAoc3RhdHVzICE9IEVGSV9TVUND
RVNTKSB7Ci0JCURQUklOVEYoIlxuRmFpbGVkIHRvIHF1ZXJ5IERldmljZVBhdGggKCVsdSlcbiIs
Ci0JCSAgICBFRklfRVJST1JfQ09ERShzdGF0dXMpKTsKLQkJcmV0dXJuIChzdGF0dXMpOwotCX0K
LQotCURQUklOVEYoInByb2Jpbmc6ICVzXG4iLCBkZXZwYXRoX3N0cihkZXZwYXRoKSk7Ci0KLQlz
dGF0dXMgPSBicy0+SGFuZGxlUHJvdG9jb2woaCwgJkJsb2NrSW9Qcm90b2NvbEdVSUQsICh2b2lk
ICoqKSZibGtpbyk7Ci0JaWYgKHN0YXR1cyA9PSBFRklfVU5TVVBQT1JURUQpCi0JCXJldHVybiAo
c3RhdHVzKTsKLQotCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKLQkJRFBSSU5URigiXG5G
YWlsZWQgdG8gcXVlcnkgQmxvY2tJb1Byb3RvY29sICglbHUpXG4iLAotCQkgICAgRUZJX0VSUk9S
X0NPREUoc3RhdHVzKSk7Ci0JCXJldHVybiAoc3RhdHVzKTsKLQl9Ci0KLQlpZiAoIWJsa2lvLT5N
ZWRpYS0+TG9naWNhbFBhcnRpdGlvbikKLQkJcmV0dXJuIChFRklfVU5TVVBQT1JURUQpOwotCi0J
KnByZWZlcnJlZCA9IGRldmljZV9wYXRoc19tYXRjaChpbWdwYXRoLCBkZXZwYXRoKTsKLQotCS8q
IFJ1biB0aHJvdWdoIGVhY2ggbW9kdWxlLCBzZWUgaWYgaXQgY2FuIGxvYWQgdGhpcyBwYXJ0aXRp
b24gKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0JPT1RfTU9EVUxFUzsgaSsrKSB7Ci0JCWlmICgo
c3RhdHVzID0gYnMtPkFsbG9jYXRlUG9vbChFZmlMb2FkZXJEYXRhLAotCQkgICAgc2l6ZW9mKCpk
ZXZpbmZvKSwgKHZvaWQgKiopJmRldmluZm8pKSAhPQotCQkgICAgRUZJX1NVQ0NFU1MpIHsKLQkJ
CURQUklOVEYoIlxuRmFpbGVkIHRvIGFsbG9jYXRlIGRldmluZm8gKCVsdSlcbiIsCi0JCQkgICAg
RUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlkZXZpbmZvLT5k
ZXYgPSBibGtpbzsKLQkJZGV2aW5mby0+ZGV2cGF0aCA9IGRldnBhdGg7Ci0JCWRldmluZm8tPmRl
dmhhbmRsZSA9IGg7Ci0JCWRldmluZm8tPmRldmRhdGEgPSBOVUxMOwotCQlkZXZpbmZvLT5wcmVm
ZXJyZWQgPSAqcHJlZmVycmVkOwotCQlkZXZpbmZvLT5uZXh0ID0gTlVMTDsKLQotCQlzdGF0dXMg
PSBib290X21vZHVsZXNbaV0tPnByb2JlKGRldmluZm8pOwotCQlpZiAoc3RhdHVzID09IEVGSV9T
VUNDRVNTKQotCQkJcmV0dXJuIChFRklfU1VDQ0VTUyk7Ci0JCSh2b2lkKWJzLT5GcmVlUG9vbChk
ZXZpbmZvKTsKLQl9Ci0KLQlyZXR1cm4gKEVGSV9VTlNVUFBPUlRFRCk7Ci19Ci0KLS8qCi0gKiBw
cm9iZV9oYW5kbGVfc3RhdHVzIGNhbGxzIHByb2JlX2hhbmRsZSBhbmQgb3V0cHV0cyB0aGUgcmV0
dXJuZWQgc3RhdHVzCi0gKiBvZiB0aGUgY2FsbC4KLSAqLwotc3RhdGljIHZvaWQKLXByb2JlX2hh
bmRsZV9zdGF0dXMoRUZJX0hBTkRMRSBoLCBFRklfREVWSUNFX1BBVEggKmltZ3BhdGgpCi17Ci0J
RUZJX1NUQVRVUyBzdGF0dXM7Ci0JQk9PTEVBTiBwcmVmZXJyZWQ7Ci0KLQlzdGF0dXMgPSBwcm9i
ZV9oYW5kbGUoaCwgaW1ncGF0aCwgJnByZWZlcnJlZCk7Ci0JCi0JRFBSSU5URigicHJvYmU6ICIp
OwotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSBFRklfVU5TVVBQT1JURUQ6Ci0JCXByaW50Zigi
LiIpOwotCQlEUFJJTlRGKCIgbm90IHN1cHBvcnRlZFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRUZJ
X1NVQ0NFU1M6Ci0JCWlmIChwcmVmZXJyZWQpIHsKLQkJCXByaW50ZigiJWMiLCAnKicpOwotCQkJ
RFBSSU5URigiIHN1cHBvcnRlZCAocHJlZmVycmVkKVxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmlu
dGYoIiVjIiwgJysnKTsKLQkJCURQUklOVEYoIiBzdXBwb3J0ZWRcbiIpOwotCQl9Ci0JCWJyZWFr
OwotCWRlZmF1bHQ6Ci0JCXByaW50ZigieCIpOwotCQlEUFJJTlRGKCIgZXJyb3IgKCVsdSlcbiIs
IEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwotCQlicmVhazsKLQl9Ci0JRFNUQUxMKDUwMDAwMCk7
Ci19Ci0KIEVGSV9TVEFUVVMKLWVmaV9tYWluKEVGSV9IQU5ETEUgWGltYWdlLCBFRklfU1lTVEVN
X1RBQkxFICpYc3lzdGFiKQorbWFpbihpbnQgYXJnYyBfX3VudXNlZCwgQ0hBUjE2ICphcmd2W10g
X191bnVzZWQpCiB7Ci0JRUZJX0hBTkRMRSAqaGFuZGxlczsKLQlFRklfTE9BREVEX0lNQUdFICpp
bWc7Ci0JRUZJX0RFVklDRV9QQVRIICppbWdwYXRoOwogCUVGSV9TVEFUVVMgc3RhdHVzOwotCUVG
SV9DT05TT0xFX0NPTlRST0xfUFJPVE9DT0wgKkNvbnNvbGVDb250cm9sID0gTlVMTDsKIAlTSU1Q
TEVfVEVYVF9PVVRQVVRfSU5URVJGQUNFICpjb25vdXQgPSBOVUxMOwotCVVJTlROIGksIG1heF9k
aW0sIGJlc3RfbW9kZSwgY29scywgcm93cywgaHNpemUsIG5oYW5kbGVzOwotCi0JLyogQmFzaWMg
aW5pdGlhbGl6YXRpb24qLwotCXN5c3RhYiA9IFhzeXN0YWI7Ci0JaW1hZ2UgPSBYaW1hZ2U7Ci0J
YnMgPSBYc3lzdGFiLT5Cb290U2VydmljZXM7Ci0KLQkvKiBTZXQgdXAgdGhlIGNvbnNvbGUsIHNv
IHByaW50ZiB3b3Jrcy4gKi8KLQlzdGF0dXMgPSBicy0+TG9jYXRlUHJvdG9jb2woJkNvbnNvbGVD
b250cm9sR1VJRCwgTlVMTCwKLQkgICAgKFZPSUQgKiopJkNvbnNvbGVDb250cm9sKTsKLQlpZiAo
c3RhdHVzID09IEVGSV9TVUNDRVNTKQotCQkodm9pZClDb25zb2xlQ29udHJvbC0+U2V0TW9kZShD
b25zb2xlQ29udHJvbCwKLQkJICAgIEVmaUNvbnNvbGVDb250cm9sU2NyZWVuVGV4dCk7CisJVUlO
VE4gaSwgbWF4X2RpbSwgYmVzdF9tb2RlLCBjb2xzLCByb3dzOworCisJY29uc19wcm9iZSgpOwor
CiAJLyoKIAkgKiBSZXNldCB0aGUgY29uc29sZSBhbmQgZmluZCB0aGUgYmVzdCB0ZXh0IG1vZGUu
CiAJICovCi0JY29ub3V0ID0gc3lzdGFiLT5Db25PdXQ7CisJY29ub3V0ID0gU1QtPkNvbk91dDsK
IAljb25vdXQtPlJlc2V0KGNvbm91dCwgVFJVRSk7CiAJbWF4X2RpbSA9IGJlc3RfbW9kZSA9IDA7
CiAJZm9yIChpID0gMDsgOyBpKyspIHsKQEAgLTU5NywxMjMgKzcwNiwzMSBAQCBlZmlfbWFpbihF
RklfSEFORExFIFhpbWFnZSwgRUZJX1NZU1RFTV9UQUJMRSAqWHN5c3RhYikKIAljb25vdXQtPkVu
YWJsZUN1cnNvcihjb25vdXQsIFRSVUUpOwogCWNvbm91dC0+Q2xlYXJTY3JlZW4oY29ub3V0KTsK
IAotCXByaW50ZigiXG4+PiBGcmVlQlNEIEVGSSBib290IGJsb2NrXG4iKTsKLQlwcmludGYoIiAg
IExvYWRlciBwYXRoOiAlc1xuXG4iLCBQQVRIX0xPQURFUl9FRkkpOwotCXByaW50ZigiICAgSW5p
dGlhbGl6aW5nIG1vZHVsZXM6Iik7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9CT09UX01PRFVMRVM7
IGkrKykgewotCQlwcmludGYoIiAlcyIsIGJvb3RfbW9kdWxlc1tpXS0+bmFtZSk7Ci0JCWlmIChi
b290X21vZHVsZXNbaV0tPmluaXQgIT0gTlVMTCkKLQkJCWJvb3RfbW9kdWxlc1tpXS0+aW5pdCgp
OwotCX0KLQlwdXRjaGFyKCdcbicpOwotCi0JLyogR2V0IGFsbCB0aGUgZGV2aWNlIGhhbmRsZXMg
Ki8KLQloc2l6ZSA9IChVSU5UTilOVU1fSEFORExFU19JTklUICogc2l6ZW9mKEVGSV9IQU5ETEUp
OwotCWlmICgoc3RhdHVzID0gYnMtPkFsbG9jYXRlUG9vbChFZmlMb2FkZXJEYXRhLCBoc2l6ZSwg
KHZvaWQgKiopJmhhbmRsZXMpKQotCSAgICAhPSBFRklfU1VDQ0VTUykKLQkJcGFuaWMoIkZhaWxl
ZCB0byBhbGxvY2F0ZSAlZCBoYW5kbGVzICglbHUpIiwgTlVNX0hBTkRMRVNfSU5JVCwKLQkJICAg
IEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwotCi0Jc3RhdHVzID0gYnMtPkxvY2F0ZUhhbmRsZShC
eVByb3RvY29sLCAmQmxvY2tJb1Byb3RvY29sR1VJRCwgTlVMTCwKLQkgICAgJmhzaXplLCBoYW5k
bGVzKTsKLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgRUZJX1NVQ0NFU1M6Ci0JCWJyZWFrOwot
CWNhc2UgRUZJX0JVRkZFUl9UT09fU01BTEw6Ci0JCSh2b2lkKWJzLT5GcmVlUG9vbChoYW5kbGVz
KTsKLQkJaWYgKChzdGF0dXMgPSBicy0+QWxsb2NhdGVQb29sKEVmaUxvYWRlckRhdGEsIGhzaXpl
LAotCQkgICAgKHZvaWQgKiopJmhhbmRsZXMpKSAhPSBFRklfU1VDQ0VTUykgewotCQkJcGFuaWMo
IkZhaWxlZCB0byBhbGxvY2F0ZSAlenUgaGFuZGxlcyAoJWx1KSIsIGhzaXplIC8KLQkJCSAgICBz
aXplb2YoKmhhbmRsZXMpLCBFRklfRVJST1JfQ09ERShzdGF0dXMpKTsKLQkJfQotCQlzdGF0dXMg
PSBicy0+TG9jYXRlSGFuZGxlKEJ5UHJvdG9jb2wsICZCbG9ja0lvUHJvdG9jb2xHVUlELAotCQkg
ICAgTlVMTCwgJmhzaXplLCBoYW5kbGVzKTsKLQkJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykK
LQkJCXBhbmljKCJGYWlsZWQgdG8gZ2V0IGRldmljZSBoYW5kbGVzICglbHUpXG4iLAotCQkJICAg
IEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwYW5pYygi
RmFpbGVkIHRvIGdldCBkZXZpY2UgaGFuZGxlcyAoJWx1KSIsCi0JCSAgICBFRklfRVJST1JfQ09E
RShzdGF0dXMpKTsKLQl9CisJLyoKKwkgKiBJbml0aWFsaXNlIHRoZSBibG9jayBjYWNoZS4gU2V0
IHRoZSB1cHBlciBsaW1pdC4KKwkgKi8KKwliY2FjaGVfaW5pdCgzMjc2OCwgNTEyKTsKIAotCS8q
IFNjYW4gYWxsIHBhcnRpdGlvbnMsIHByb2Jpbmcgd2l0aCBhbGwgbW9kdWxlcy4gKi8KLQluaGFu
ZGxlcyA9IGhzaXplIC8gc2l6ZW9mKCpoYW5kbGVzKTsKLQlwcmludGYoIiAgIFByb2JpbmcgJXp1
IGJsb2NrIGRldmljZXMuLi4iLCBuaGFuZGxlcyk7Ci0JRFBSSU5URigiXG4iKTsKKwlwcmludGYo
IlxuPj4gRnJlZUJTRCBFRkkgYm9vdCBibG9ja1xuIik7CiAKLQkvKiBEZXRlcm1pbmUgdGhlIGRl
dnBhdGggb2Ygb3VyIGltYWdlIHNvIHdlIGNhbiBwcmVmZXIgaXQuICovCi0Jc3RhdHVzID0gYnMt
PkhhbmRsZVByb3RvY29sKGltYWdlLCAmTG9hZGVkSW1hZ2VHVUlELCAoVk9JRCoqKSZpbWcpOwot
CWltZ3BhdGggPSBOVUxMOwotCWlmIChzdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsKLQkJc3RhdHVz
ID0gYnMtPkhhbmRsZVByb3RvY29sKGltZy0+RGV2aWNlSGFuZGxlLCAmRGV2aWNlUGF0aEdVSUQs
Ci0JCSAgICAodm9pZCAqKikmaW1ncGF0aCk7Ci0JCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1Mp
Ci0JCQlEUFJJTlRGKCJGYWlsZWQgdG8gZ2V0IGltYWdlIERldmljZVBhdGggKCVsdSlcbiIsCi0J
CQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Ci0JCURQUklOVEYoImJvb3QxIGltYWdlcGF0
aDogJXNcbiIsIGRldnBhdGhfc3RyKGltZ3BhdGgpKTsKLQl9CisJYXJjaHN3LmFyY2hfYXV0b2xv
YWQgPSBlZmlfYXV0b2xvYWQ7CisJYXJjaHN3LmFyY2hfZ2V0ZGV2ID0gZWZpX2dldGRldjsKKwlh
cmNoc3cuYXJjaF9jb3B5aW4gPSBlZmlfY29weWluOworCWFyY2hzdy5hcmNoX2NvcHlvdXQgPSBl
ZmlfY29weW91dDsKKwlhcmNoc3cuYXJjaF9yZWFkaW4gPSBlZmlfcmVhZGluOwogCi0JZm9yIChp
ID0gMDsgaSA8IG5oYW5kbGVzOyBpKyspCi0JCXByb2JlX2hhbmRsZV9zdGF0dXMoaGFuZGxlc1tp
XSwgaW1ncGF0aCk7Ci0JcHJpbnRmKCIgZG9uZVxuIik7CisJcHJpbnRmKCIgICBMb2FkZXIgcGF0
aDogJXNcblxuIiwgUEFUSF9MT0FERVJfRUZJKTsKKwlwcmludGYoIiAgIEluaXRpYWxpemluZyBt
b2R1bGVzOiIpOwogCi0JLyogU3RhdHVzIHN1bW1hcnkuICovCi0JZm9yIChpID0gMDsgaSA8IE5V
TV9CT09UX01PRFVMRVM7IGkrKykgewotCQlwcmludGYoIiAgICAiKTsKLQkJYm9vdF9tb2R1bGVz
W2ldLT5zdGF0dXMoKTsKKwlmb3IgKGkgPSAwOyBlZmlfZHJpdmVyc1tpXSAhPSBOVUxMOyBpKysp
IHsKKwkJcHJpbnRmKCIgJXMiLCBlZmlfZHJpdmVyc1tpXS0+bmFtZSk7CisJCWlmIChlZmlfZHJp
dmVyc1tpXS0+aW5pdCAhPSBOVUxMKQorCQkJZWZpX2RyaXZlcnNbaV0tPmluaXQoKTsKIAl9CisJ
cHV0Y2hhcignXG4nKTsKIAogCXRyeV9ib290KCk7CiAKIAkvKiBJZiB3ZSBnZXQgaGVyZSwgd2Un
cmUgb3V0IG9mIGx1Y2suLi4gKi8KIAlwYW5pYygiTm8gYm9vdGFibGUgcGFydGl0aW9ucyBmb3Vu
ZCEiKTsKIH0KLQotLyoKLSAqIGFkZF9kZXZpY2UgYWRkcyBhIGRldmljZSB0byB0aGUgcGFzc2Vk
IGRldmluZm8gbGlzdC4KLSAqLwotdm9pZAotYWRkX2RldmljZShkZXZfaW5mb190ICoqZGV2aW5m
b3AsIGRldl9pbmZvX3QgKmRldmluZm8pCi17Ci0JZGV2X2luZm9fdCAqZGV2OwotCi0JaWYgKCpk
ZXZpbmZvcCA9PSBOVUxMKSB7Ci0JCSpkZXZpbmZvcCA9IGRldmluZm87Ci0JCXJldHVybjsKLQl9
Ci0KLQlmb3IgKGRldiA9ICpkZXZpbmZvcDsgZGV2LT5uZXh0ICE9IE5VTEw7IGRldiA9IGRldi0+
bmV4dCkKLQkJOwotCi0JZGV2LT5uZXh0ID0gZGV2aW5mbzsKLX0KLQotdm9pZAotcGFuaWMoY29u
c3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXByaW50ZigicGFuaWM6ICIp
OwotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXZwcmludGYoZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsK
LQlwcmludGYoIlxuIik7Ci0KLQl3aGlsZSAoMSkge30KLX0KLQotdm9pZAotcHV0Y2hhcihpbnQg
YykKLXsKLQlDSEFSMTYgYnVmWzJdOwotCi0JaWYgKGMgPT0gJ1xuJykgewotCQlidWZbMF0gPSAn
XHInOwotCQlidWZbMV0gPSAwOwotCQlzeXN0YWItPkNvbk91dC0+T3V0cHV0U3RyaW5nKHN5c3Rh
Yi0+Q29uT3V0LCBidWYpOwotCX0KLQlidWZbMF0gPSBjOwotCWJ1ZlsxXSA9IDA7Ci0Jc3lzdGFi
LT5Db25PdXQtPk91dHB1dFN0cmluZyhzeXN0YWItPkNvbk91dCwgYnVmKTsKLX0KZGlmZiAtLWdp
dCBzeXMvYm9vdC9lZmkvYm9vdDEvYm9vdF9tb2R1bGUuaCBzeXMvYm9vdC9lZmkvYm9vdDEvYm9v
dF9tb2R1bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk2ZDVhNjdhMTAuLjAw
MDAwMDAwMDAwCi0tLSBzeXMvYm9vdC9lZmkvYm9vdDEvYm9vdF9tb2R1bGUuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDExNyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAxNSBFcmljIE1j
Q29ya2xlCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICovCi0KLSNp
Zm5kZWYgX0JPT1RfTU9EVUxFX0hfCi0jZGVmaW5lIF9CT09UX01PRFVMRV9IXwotCi0jaW5jbHVk
ZSA8c3RkYm9vbC5oPgotCi0jaW5jbHVkZSA8ZWZpLmg+Ci0jaW5jbHVkZSA8ZWZpbGliLmg+Ci0j
aW5jbHVkZSA8ZWZpY29uc2N0bC5oPgotCi0jaWZkZWYgRUZJX0RFQlVHCi0jZGVmaW5lIERQUklO
VEYoZm10LCBhcmdzLi4uKSBwcmludGYoZm10LCAjI2FyZ3MpCi0jZGVmaW5lIERTVEFMTChkKSBi
cy0+U3RhbGwoZCkKLSNlbHNlCi0jZGVmaW5lIERQUklOVEYoZm10LCAuLi4pIHt9Ci0jZGVmaW5l
IERTVEFMTChkKSB7fQotI2VuZGlmCi0KLS8qIEVGSSBkZXZpY2UgaW5mbyAqLwotdHlwZWRlZiBz
dHJ1Y3QgZGV2X2luZm8KLXsKLQlFRklfQkxPQ0tfSU8gKmRldjsKLQlFRklfREVWSUNFX1BBVEgg
KmRldnBhdGg7Ci0JRUZJX0hBTkRMRSAqZGV2aGFuZGxlOwotCXZvaWQgKmRldmRhdGE7Ci0JQk9P
TEVBTiBwcmVmZXJyZWQ7Ci0Jc3RydWN0IGRldl9pbmZvICpuZXh0OwotfSBkZXZfaW5mb190Owot
Ci0vKgotICogQSBib290IGxvYWRlciBtb2R1bGUuCi0gKgotICogVGhpcyBpcyBhIHN0YW5kYXJk
IGludGVyZmFjZSBmb3IgZmlsZXN5c3RlbSBtb2R1bGVzIGluIHRoZSBFRkkgc3lzdGVtLgotICov
Ci10eXBlZGVmIHN0cnVjdCBib290X21vZHVsZV90Ci17Ci0JY29uc3QgY2hhciAqbmFtZTsKLQot
CS8qIGluaXQgaXMgdGhlIG9wdGlvbmFsIGluaXRpYWxpc2VyIGZvciB0aGUgbW9kdWxlLiAqLwot
CXZvaWQgKCppbml0KSgpOwotCi0JLyoKLQkgKiBwcm9iZSBjaGVja3MgdG8gc2VlIGlmIHRoZSBt
b2R1bGUgY2FuIGhhbmRsZSBkZXYuCi0JICoKLQkgKiBSZXR1cm4gY29kZXM6Ci0JICogRUZJX1NV
Q0NFU1MgPSBUaGUgbW9kdWxlIGNhbiBoYW5kbGUgdGhlIGRldmljZS4KLQkgKiBFRklfTk9UX0ZP
VU5EID0gVGhlIG1vZHVsZSBjYW4gbm90IGhhbmRsZSB0aGUgZGV2aWNlLgotCSAqIE90aGVyID0g
VGhlIG1vZHVsZSBlbmNvdW50ZXJlZCBhbiBlcnJvci4KLQkgKi8KLQlFRklfU1RBVFVTICgqcHJv
YmUpKGRldl9pbmZvX3QqIGRldik7Ci0KLQkvKgotCSAqIGxvYWQgc2hvdWxkIHNlbGVjdCB0aGUg
YmVzdCBvdXQgb2YgYSBzZXQgb2YgZGV2aWNlcyB0aGF0IHByb2JlCi0JICogaW5kaWNhdGVkIHdl
cmUgbG9hZGFibGUgYW5kIGxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLgotCSAqCi0JICogUmV0dXJu
IGNvZGVzOgotCSAqIEVGSV9TVUNDRVNTID0gVGhlIG1vZHVsZSBjYW4gaGFuZGxlIHRoZSBkZXZp
Y2UuCi0JICogRUZJX05PVF9GT1VORCA9IFRoZSBtb2R1bGUgY2FuIG5vdCBoYW5kbGUgdGhlIGRl
dmljZS4KLQkgKiBPdGhlciA9IFRoZSBtb2R1bGUgZW5jb3VudGVyZWQgYW4gZXJyb3IuCi0JICov
Ci0JRUZJX1NUQVRVUyAoKmxvYWQpKGNvbnN0IGNoYXIgKmZpbGVwYXRoLCBkZXZfaW5mb190ICpk
ZXZpbmZvLAotCSAgICB2b2lkICoqYnVmLCBzaXplX3QgKmJ1ZnNpemUpOwotCi0JLyogc3RhdHVz
IG91dHB1dHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2JlZCBkZXZpY2VzLiAqLwotCXZvaWQg
KCpzdGF0dXMpKCk7Ci0KLQkvKiB2YWxpZCBkZXZpY2VzIGFzIGZvdW5kIGJ5IHByb2JlLiAqLwot
CWRldl9pbmZvX3QgKigqZGV2aWNlcykoKTsKLX0gYm9vdF9tb2R1bGVfdDsKLQotLyogU3RhbmRh
cmQgYm9vdCBtb2R1bGVzLiAqLwotI2lmZGVmIEVGSV9VRlNfQk9PVAotZXh0ZXJuIGNvbnN0IGJv
b3RfbW9kdWxlX3QgdWZzX21vZHVsZTsKLSNlbmRpZgotI2lmZGVmIEVGSV9aRlNfQk9PVAotZXh0
ZXJuIGNvbnN0IGJvb3RfbW9kdWxlX3QgemZzX21vZHVsZTsKLSNlbmRpZgotCi0vKiBGdW5jdGlv
bnMgYXZhaWxhYmxlIHRvIG1vZHVsZXMuICovCi1leHRlcm4gdm9pZCBhZGRfZGV2aWNlKGRldl9p
bmZvX3QgKipkZXZpbmZvcCwgZGV2X2luZm9fdCAqZGV2aW5mbyk7Ci1leHRlcm4gdm9pZCBwYW5p
Yyhjb25zdCBjaGFyICpmbXQsIC4uLikgX19kZWFkMjsKLWV4dGVybiBpbnQgcHJpbnRmKGNvbnN0
IGNoYXIgKmZtdCwgLi4uKTsKLWV4dGVybiBpbnQgdnNucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90
IHN6LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOwotCi1leHRlcm4gRUZJX1NZU1RFTV9U
QUJMRSAqc3lzdGFiOwotZXh0ZXJuIEVGSV9CT09UX1NFUlZJQ0VTICpiczsKLQotZXh0ZXJuIGlu
dCBkZXZwYXRoX3N0cmxjYXQoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgRUZJX0RFVklDRV9QQVRI
ICpkZXZwYXRoKTsKLWV4dGVybiBjaGFyICpkZXZwYXRoX3N0cihFRklfREVWSUNFX1BBVEggKmRl
dnBhdGgpOwotI2VuZGlmCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2Jvb3QxL2ZhdC1hbWQ2NC50
bXBsLmJ6Mi51dSBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0LWFtZDY0LnRtcGwuYnoyLnV1CmluZGV4
IGEzZWMzMmQxNDUxLi5jNzMwOGE0Nzk4NSAxMDA2NDQKLS0tIHN5cy9ib290L2VmaS9ib290MS9m
YXQtYW1kNjQudG1wbC5iejIudXUKKysrIHN5cy9ib290L2VmaS9ib290MS9mYXQtYW1kNjQudG1w
bC5iejIudXUKQEAgLTIsMjUgKzIsNTAgQEAgRkFUIHRlbXBsYXRlIGJvb3QgZmlsZXN5c3RlbSBj
cmVhdGVkIGJ5IGdlbmVyYXRlLWZhdC5zaAogRE8gTk9UIEVESVQKICRGcmVlQlNEJAogYmVnaW4g
NjQ0IGZhdC1hbWQ2NC50bXBsLmJ6MgotTTBFSUguMyUhNjI5MzY/JCkzJCxgJlU5X19fX19aXktK
Wl9eTl9eT15aX15bT05fTkteSkpeS1pOS05OSgotTVpOS05aT0peUGArXCMkITAkIzFELSxAIylE
VCMxQiZBSURRLEFEOiMxSFRSYC0jKUQ4MFEhRDosKURgYAotTSMxQEYzMGBgYCZAYCRKSjkhX0hV
NDoiLDMhLEYwJkMoODNgRjMwVGBUIUImISxGYChQM2AiIzAsQGAvMgotTTo6YCMwIURgLEMxYFQ5
IzMoYFI5LWBUOEFIOjksMyg5JkBUOi0sQCMwUjkmJCwwOSZDIjlgYGBUOClEVAotTWBgYCFIYGBK
QkRAXzJCOkZGOSlJSFEvMSM6QC1gOmBSIyhUYCZAOi1gIUg4RkFIOjo6J0o6Oi1gOSYxWgotTUZG
ISdIQUI4VS8xLyo4LS0tM0VWKyo8WkxcUzlCWEVDWzZJIixCRSQwQkRBJDEkJUc2NlRINlBGJDAo
MAotTVhEQSEiJjxISiw9LVc9Sz5QWjU6TF5cMTk+PlQySzNPQT5UVVM4TT5WSl87OVA3Ijg7Jjcm
OFI1MU4+RgotTTFFJUEjNitGOSpIQCQoOUo8SzJWNz1ESFtZU0spTERONjE4XTBTJDMiTTZKSzVK
VTpNOUoqNSk0NDQ0NAotTTQ1SlUlOjU6OlU6TTZLPDpUNDJISEhISEhZSTpKKTQ0NDQ0LCtCO1I1
PiUlJSUlJSUkPiEhISEhISEhIQotTSEhISEhISEjNzZDQDxDMUhUOi0mQzEhISEhISEhISFUWCYj
IUBQOCwmI0o4WSpCQkJCQkJCQidAPCMhQAotTVA4LCYjIiQ0KioqKioqKi4/Wk8pVTU5Tlc5WV81
UkI5PVNHSyVBTzkxRC8sUlc6SlVFV0o3Q0lDVCRNLAotTV1dPk9NOy1OJV5XWyE8PUhbPC0xPFFZ
KVc8YCVCUlQ8RGArMzM3NVtcRk9TXFlCRDBgUlNMOCxVVjUxPgotTVJSIlNWTEw+TEcqWjFHK0sl
TjspOz5JSVlMLTdMKkQ8QjVVKzIvMjo1SjZLN0srT043UzwtWldbYDg7JAotTTlFU1M2WT5bUS1T
SDs1RDtSVV8rWksuK1RFTVglSyhRUTgxM1Y6R1MxWlQ7IlJcIUgkSy9aOj0lMzg2TQotTVBKTC48
Sz9DKko2QERJKVwjNktVPSxAVjM6LUpXMz4uYFg7Qk4wU1MyLEk7VSpJOzsuXU81Wk1JOUNNVgot
TVkoOzgqXENYWC1TUFcoXlo1V0lXUFcwVkA/N0RMR1pAUUpRSEM2IUotXFVbPkBUJDJGKTMiN1VN
MlYrOgotTStZTUZXO01PNl48LUBMKVI3KzxXTFZKRU8sJkhOSSs+WFUwSkIoTCxLSTpGW09EJVpV
Qz0tMFdCXDdDPwotTS4iUCclODNDTDFCTSRSTEhEKTomNyxET1NMWTE9MlksSF9FT0dgPCVZUzAs
IVEmJFhTXScpOENYRVhQXwotTUZYMi03KiwjJVA7IVFdVilFI0JPIjgzIz9cVjNDLi5ZI0UsMT9M
NVMmLE5DJURRST47K2BEUz5OUUw1PwotPys2SUY5MTVWJDAiJClAYE0rIlEpQChfOSshP14rTjIq
PCokQVhBKjhBQGBgCitNMEVJSC4zJSE2MjkzNjMkIiUmXGAnWUFfX19fX19fX19fX19fX15PXlpf
XltfTlteSl5OS15LWk9LT05KCitNWk5LXlpOW15YYENfJS1gYEhIYCU0MSIxKCopYEJKIUg6YGBg
P001YGBgIzBgYGBgYGBgYC1gOi0jMGBgCitNYGBgYGBgYGBgYGBgYDU1NSRfMkAhT19VMkovX1RK
QV9KSj40IUhgYGBgVGBgYGBgYCZAYGBgYGA6YGBgCitNIUhgYD5IYCZAIUhSYDAsRjMoIURSYGBU
UDBUYDpgYCMwUSMzMCMoYGAtYC1gUiZAJkAhRCFIJkZDJCZDCitNMGBgJkBgIzBAOSxGMCMpRGAh
SUBBSGBUYGAmQUImRkAmMGBgOmA6IUQtYC1gIygjMC0tJigtJkBgYC1gCitNYCZBYFI5LEAmMyhg
IzMhIzAhSGBgLSMkLS1gLEBgYFRgVCMoOmA6YCYwJkA6OiwwOi1gYGA6YGAtYDU1CitNKF8yM10i
MTMtM1RJWko/WypEOiRfXTUtM1RWQkZVLUo7MSYzKUEnSDBcRjIvNFEmR0ohWkZgM1UjVSdFCitN
LzAzMUI4VSMkOSdKIVpBTShcKiNSIzAsNFM0XzUsVS8wVko+JFxCKjlPNy45SFEmS0BGIVJWODg4
ODVTCitNLCYjIyMjIyZQT0ZQUCFAPFctQFImOyNgUFBQJ0pKTFlFVC8wTEovUTRPN086Ki88Tk85
XlQ/Iz1KXjJfCitNUD9UTlo/MD1YXClYO1E3RU03Ry8uWVcxTC1LX0IsLCwsLCwsYCVAVzQkXEoh
YC5AKCFgKkAwIiEjYCgiCitNYEAoImBAKCJgQCgiYEAoIlohXmBcUFhHSyZRUidGXCxTPFMtUzxF
TjtFNlkuWU47RllOO0ZZTjtGWU47CitNRllOO0dgWScvPEInKFklJyhZJyhZJyhZJyhZJVVVVVVV
VVVVVVVWLkxRVSw9Rkw5Q0xKUUY1TFUlQFJTCitNNFw7MEpTKkpKSkpKTkA6RTZJRjc5RVVVVVVV
V1w3Sls/XFlMK0tLS0tLS0k6NTZFJiY9OTk5OTk5KjRJCitNMkUqNEsqSy5GWzMsUTQ5LEYzKURS
MkUqNEkyRSspNURVVDBOTk5OTk5YLzI9Sz09PT09PT09KzRKVS5cCitNSEE9PT09PT1RSkxFRjIm
PT09PT09PVMvMDlNPj9JTEdKR00nOS9DTlg9XFwxXTdTMkpKSkpKSko3SUU3CitNNyg5VUVFRUVF
REkyRSo0STJMSkxBRzY2NjY2NjJFKjRJMkUqUkpSJj05OTk5OTk/SysrKysrKysrKTkqCitNTEQs
WlJSUlJSUypKSkpKSkpKSjVVNVdAPTNCSFI5LEYzKURZNTU1NTU1NTU0TSpLMkFHNjY2NjY2MkUq
CitNNEkyRSpSSlImPTk5OTk5OSpSSlImPTk5OTk5OU1dU1Q2RURSOFo3NUxbNFM4PUJTQzFEPVBa
XUojUldBCitNKj5YU1MrT0k5KyxPUDohRyxgWyMoUkctJyE5Myo4YCQ0XUtGI2AhSF1bU19SP1lf
RV0zRkdgUGA+PD9ACitNTko7VUZdTztWXU87Vl1PO1ZdTztWXU87Vl1PO1ZdU1NWM0I+Ozs2VUJW
TUswVk1LOlZNSzpWTUs6Vk1LCitNOlZNSzpWTUs6Wl5aWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlsr
TVNCO0ZVMSNCPE1QTjRUTERJMkUqNEkyCitNTkpOQUc2NjY2NjYzQSo0STJFKjVFNUdHWig3Nzc3
Nzc9OTU1NTU1NTU1Kyk1REFHNjY2NjY2MkUqNEkyCitNRSpSSlImPTk5OTk5OVxCSkpKSkpKSko1
VTVXMS41NyxaJSswVE0rMkVJOjRNKksyQUc2NjY2NjYyWyFWCitNQ1hbTVc+L0ovXzdDXkM1NTU1
NTU1MlpHXUU5VjNJXylZREw2SUo6RklKOkRJMkUqNEkyVEpNK0deU14jCitNRlQsNkVJOjZFSTo0
STJFKjRJMlRKTSteO15bJTFEUjksRjMpKjRJMkUqNExFNjImPTk5OTk5OSo0STJFCitNKjRLKkso
OVVFRUVFRURJMkUqNEkyTEpMXlsxIlpaWlpaWjRJMkUqNEk3NTcwU0srKysrKy9SKktLK0g5CitN
VVVVVVVVVUU1NUczTSw5VUlLPCZHLzc6Pl41RUdXSFQqLCYjISQxJDEkPCNAPCNAPShfPTxNVDtI
TkA9CitNTVFOLVFOLVFOLVFOLVFOLVFOLVFOLVFMUFM2UF9XWz8iVjY2NjY2NjY2NjY2NjY2Njkj
KDkjKDk7PT0yCitNXENUXTU1NTQ/VCY5MTExXSdgN1MjSCMwVC0jMEEiJCgwQSMrXVslQlE4TkdQ
XVVBXFI/U1c6T1hXUTZNCitNMTExMTdZPypZRjdTK1smPicsVE0rMlRPXEoqKiosOioqKigwQSIk
KDBPMUMsOUMsMyRRLDMsLCdHLzM+CitNUF1ZRE9KOV1eO142WihCKEIoQihCKEIoWT1XQ1A2Ozkl
RUVFRUVFRUVFRUVFRUVFRkVRJDEkOjBCKEIoCitNQihMTExYRyUxMTFXRitVJ0pYWydFVTU1NT1V
VzYrJUJRPF9VJkswVC0jME0xMTExXkteRUJROEw3KlonCitNSk5CTFUsLk0/TS5TPU5JUF1BR1k8
STJFVj5TTC5XXztVK1pMRjMpREEiJC5EXUdJSyo0STBBIicqSEhICitNSEEiJCgwQSNfLVcrTlc+
Tl4+YF5MXlJZS1E3Q09SRyNQTiVQTiVQTCYjIUBQOCwmIyFAUD4sXFVZMy8qCitNNEkyRSo0STJF
KjRJMihCKEIoQihCKEIqNElMPV9YRislQlEwQSIkKDBBIiQoMEEiJ0Y+VVE4TDYrTz5YCitNPUxf
RD1WQSIkKDBBI11CQkJCQiQoMEEiJCgwQSNGXiVcKDlcLCwtIzBULSIkKDBeJF4+WjVUS1pTUFY/
CitNP0RfMUgmQj9YQihCKEIoQihCKENDNj0/IlI1KjRJMkUqNEkyRSo7Lzk5QFA4LCYjIUBYNyJY
NyJYNyJYCitNN2BYJyRYRyRYRCgwQSIkKDBBIic2VDQ0ND41MTExMSIkKD9dLl8/Mj8zMEEiJ0sq
KioqLy0hMTExMSIkCitNKDtKKioqL080NDQ0MEEiJCgwQV09WDNKV1YnLT87PixbSV1ZU0dRJ0gn
Ql1NSzpWTUs6Vk1LOlZNSzpWCitNTUs6Vk1LPiJcLV1FVFs4Vi1DOFYtQzhWLUM4Vi1DOFYqNEIo
QihCKEIoQihCRSo0USwzJEFcJkJCQkIkCitNKDBBIiQvXl8oXzNULSMwVCgwQSNbRz9PJD5RPFUi
JCgwQSIkKDBBMkJCQkIkKDBBIiQoMEEiJCgwXlReCitNVltVWFNbQ1tLUVcuPy8+MFxFWTtAPCNA
MSQxJDEkMSQxRjZBPSpUMkUqNEkyRSo0STJFKjRCKEIoQihCCitNKEIoQkZRTDsnQFQ0NDQwQSIn
RTQ0NDQ+QkhISEhcLkJCQkIkKDBaQ0tPKllTRy48WVIkKDBbRVQ+KyVCCitNUT07MTExMTNMO1lR
WSsjUD9ANjY2NjZLQUA4ODgjLUFBQGA+NUg6JkFIOioqKiooPzo0NDQwPjZTL19HCisrV1E9UjEz
QTBEIyQiJSZcYAogYAogZW5kCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2Jvb3QxL2ZhdC1hcm0u
dG1wbC5iejIudXUgc3lzL2Jvb3QvZWZpL2Jvb3QxL2ZhdC1hcm0udG1wbC5iejIudXUKaW5kZXgg
MjNlMDYzZWUyM2QuLmVlMmVlOTk1NGY1IDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2Jvb3QxL2Zh
dC1hcm0udG1wbC5iejIudXUKKysrIHN5cy9ib290L2VmaS9ib290MS9mYXQtYXJtLnRtcGwuYnoy
LnV1CkBAIC0yLDI1ICsyLDUwIEBAIEZBVCB0ZW1wbGF0ZSBib290IGZpbGVzeXN0ZW0gY3JlYXRl
ZCBieSBnZW5lcmF0ZS1mYXQuc2gKIERPIE5PVCBFRElUCiAkRnJlZUJTRCQKIGJlZ2luIDY0NCBm
YXQtYXJtLnRtcGwuYnoyCi1NMEVJSC4zJSE2MjkzNj4jNjcpSGAmVTlfX19fX1peS0paX1pOX15P
XkpfXltPSltOS15KSl5LWk5LTk5KCi1NWk5LTlpPSl5QYCtcYGBgImBgOmBUOjotYDo4QFBAJjFE
LSFIOjgwOClCOiMwYFRgYCwkVCMhLEBQQzA5Ci1NIzMzIjksMGBUKGAhSCMxSUhUIUlCIyJgOSYw
VCZBSUEhQEYpSC1gIzBgYFAzMCwkUiMiLSFELS0sKURRCi1NYCMwQGAmQC0mRkMwJkYoLCghRDkj
MDomRiQmIjhGQFRgLWBgIyEtYFAzKCwoVCYwVFRQRjMkYC1gNTIyCi1NJF8oSDItRFQwVDo4QyhU
IUghWkMzMFItJkAtYCxAJkMxSDpgOiMxTTMoVCxAOjo6LzEjMzMxRklJQClACi1NKVo6KVJLNU42
PDcsTzwlWylTNFpEKE9ERDEiKjIiKEIoK0U5OSkiUDJBJCIkLiMoKCgwWl5CSE8pOTcqCi1NS05U
UzI7Ly8hNl8sOik1SVZJPkxQR1VNOF8pTVYmX1FPJyQ8UT5ZO2BKL1RFVFIuPTUwOlwyQmAwQUY5
Ci1NPF8uTUU7OjswTjw5JUQlXFFbJyomNkI0KlU6Sk02SzVKVVExMkkpMTExMTExNks0NUkqVEpV
Ok02Szw6Ci1NWjQyNDQ0NDQ0OFktMSkxMTExMTFbRjxfNlIrJUJROEw2KyRYMzMzMzMzMzMzMzMz
MzMzMz03WlxFMk02Ci1NSzVKVTpNLS0tLS0tLS0tPlI0NDQ0NDQ0N04jWyVCUThMNislQlEtTSkq
KioqKioqLCEwSEhISEhISFlbCi1NLVJSNTc1NzsuTVM/SEUpR0xbOk0tUSkmL1RHMDlRNk1aJSlY
SjQ+PERdNVtTNU0+Xl1NNlc4Q0AuLlQ9Ci1NViZIT1hcQFQkYCVKV0hZJGAtL1pWIUE/KUs+WUVF
WjFgIyosJiMsXUc0ODRGLzcvUkRSJVk8P11GRzhYCi1NJi0/VlVXSipBUikrWjMyLy86OVsjNE02
Ujs4LUZWSzwsMU9HJDhLKkxFJkpSPjRRP1VbSjpeUyRdRVBLCi1NRDgxKV5EIjxBPiVIXj4yT1U6
RkxDMzFLSz8/LF8kRVM3NFMlKylVN0pVNUQ6VlFEKVItMlUzIjdbRldXCi1NLURQVlY7QU5WXjkt
UiYiVDtHLEE+NkVKMzo9RVZFNkVOS0MjUFpHLl09OTo3NSpHPT4tNE5cT0FdJz0tCi1NYExbUk5c
TU0vPlonODo2US5SQVdVKz1IT0hEQ1o2SD84XyFeKzotSlZTXjZaO1VQJyM8RVJHLVskVydgCi1N
SiteMTk+PlQqSEIrM0dNKzRWVlMoTlEpJks/YF85SVdcLFBTIyQ7UU9HIjwtUVYqUUZCOF4yKSEp
SCkuCi1NNyhfQFA5KFIkRylEQzxMMU5WXDtVR1ZfPClRJyY/RlkrJT8kWjFRP0RXUi8/RENAOFci
TScoXzxSVEJKCi1NMicjPV5YSzguLFVbQ04wUSdfLDVNVixZO0YsYFFJJyxEVzdFVS1fKFM+TVlG
LF8tLklUPEQ1OCwwIiQpCi02MGA3NUk6RDtdJlYyPCVfWE5ZKElQSDInIUsrRFRgYGAKK00wRUlI
LjMlITYyOTM2MydaSVFQYCdaI19fX19fX19fX19fX19fXk9eSl9eW09KW15KXkpLXktaTktPTloK
K01aTkteWk5bXlhgQ19gYGA6KmAhKCkiMSgyKSEhSCZAJjA5IUgmQDosMyhUIzBgOEBgVCMiJkMw
LWBgYGAKK00tYDkmQzBgYGBgIzFEOSxGKUghRFQ4JTU1MjohRDkvX100NTNfXTUzXzU0X101M100
YGAtYGBgYGBgYGAKK01gYCZAYGBgYCFIYGBgJkBgVDpgYFQhSDpgMDohSCFEJjA6IUgmQyRSLWBU
YCYoYC1gUEFIVCMwYGBgIzAKK00mMUhUYGBgYGBUOSYzKUI6YDktJigtYFRgUiMoLWBUIzFCOSZA
OmAjJGAmQDgwVDohSGBgYCFIIyhUOmAKK01gYGBgOixDKURRLWAsRkMkJkA6YDkhRCZAOiFIUSxD
MC1gIUJgIzAsKDotYFRgYGBgVCFEOi1gYGBgYC0KK00mMURSOEZAJjMxQDU1KF8yLzBFLSZIVkUt
WEo5WkozOkdfSkRDOTBdMyg6JkMwOi0vNF0wLzQ+SF0wOzQKK01gIzAtJkBWSVpGRkY6RkMwOj5J
SFZIPkghSUhXSElIPjI6OiNVLzRdMyM0XSYzOkZEWyQ0VD1UWzsrJDoKK01OOjgnMzohQUFBNzBQ
OCwsLCwsOyJeQUAjYE4tJ1EtYFBQUFAnSzpNKUdWTzpMWi9IRE5bMVdTMV42X2AKK006P1UnQE5f
Plo+KFwpW1lYW18hX1RcRVlDWUM1QD5FWFo3QlouVjg7VkVBQFBQUCdJTSc1Wy5TSyouTFoKK01S
S0suTFtVUDwnIVA8JyFQPCchUDwnIVA8JyFVJzlNQ043LlZHSTwtIz5ULVs+RU87VTZdLl1PO1Zd
TzsKK01WXU87Vl1PO1ZdTztXLFZOQzpBTTs1JlVNOzZVTTs2VU07NlVNOzZVTTs2VU07NlVPOyZd
U01bTSotWzAKK01IVDsnMzpXKlUvLVI1OiU1NTU1NTchSjU6RkE/IzBOTk5OTk5dS109WFVcK0tL
S0tLS0k8QktEMUFJNjYKK002NjY2MkUqNEkyRSpSSlNOLl9ULDUmOy1GUzlMVEkyRSo0STJTNTlO
RTEiWlpaWlpbRl03WCVVVVVVVVUKK01VVE0ySzRdXzEiWlpaWlpbTEU2OlMtIzJOTk5OTk5bO1Um
Q0k6PlhTPk0/P09UR043XSNYI1JXUF8yKkoKK01KSkpKSkk+TDU9WkFJNjY2NjY2MkUqNEkyRSpS
SlM1UiNQVic7X1I1Mlk3Klk3Klk3KkUqNEkyRSo3KkoKK01ZNC0qUlJSUlJTRkpKSkpKSkpKRT01
PVdFJCtLS0tLS0xaSkpKSkpKSkk5SkxXUDooNzc3Nzc3PVVUSysKK00rKysrKyspPEJLRDBUSysr
KysrKTJFKjRJMkU5NTkjMkxMTExMTEU5NTkjMkxMTExMTFpPWVc7PEMtRlEKK01TI0I2NTlFSSY0
WkVHJjUxV0NNJitTJ0JKPlhdNTldIy9LT1A6KUcsYF1NVj4nTCNOXCwsYCIqP0U6YFAKK01gPlRd
S1U/PV4lW1NOTSRYJmAjTSdTO1s9UTY8NyVRPDclUTw3JVE8NyVRPDclUTw3JVE8NzBbWUw/LS0K
K01TPFE7RllEVy1TPFctUzxXLVM8Vy1TPFcsQyhSLEMoTk5OTk5OTk5OTk5OTk5OTk5OTk5aQ0ou
SFpDSDsKK01GUU47RSQtQ0lNO0U8Qy0qNEkyRSo0S0pLSDo1RUVFRUVEWDJFKjRJMkU5NTlaQkIl
VVVVVVVXPjU1NTUKK001NTU1MlM1OUg6NUVFRUVFREkyRSo0STJMSkxBSTY2NjY2Nj5bSkpKSkpK
SkpFPTU9WjlSVVQvRz5USkUKK01KOkZJNUo6RE0ySzRBSTY2NjY2NjJdQF1IXz8/Uy8/T0EvQk8v
Xkg1NTU1NTU1MltLXEE5V1tVL1JeV0UKK01CVS0zNFUtMzRFKjRJMkUqNyhKWSc1XVFCSFM5TFY7
LUZFKjRJMkUqNjpLLSMyTExMTExMRSo0STJFKjUKK01FNUQtKlJSUlJSUjRJMkUqNEk2NTYwVEsr
KysrKykyRSo0STJFOTU5XEZCJVVVVVVVVEkyRSo0STJOSk4KK01BSTY2NjY2Nj8zVTc2NzBUS0tL
S0tLSyxMUlMrTks6PFNLM1ZXTFBTUyxNYFUhXVovWTFAUDgoQihCKEIKK00oQixWWkFKKzg2Sjkz
LlY2NjY2NjY2NjY2NjY9I0g9I0FaP0w9U1c+UUw7JlFMOyZRTDsmUUw7JlFMOyYKK01RTztWXU88
T0stVzhbWkpKSkovIi0iQkJDUiwhPzAuIURSOSxEKDBBW1JCQkJDRF8xUThMNitOLC9TLC8KK00j
R1tJWCNQN1tDTjwqKioqKl4nUl1PR0tPSVlUOj5XWScoWScoX0xISEhIQSIkKDBBIiQoME8xMTEx
IiQKK00oPURVT1pHTzc3P1kvQE9eN0UvQy8uPzROOVMuOSQxJDEkMSQxJy1OXj4oXEVKTVsrKysr
KysrKysrKysKK00rKyssTyQxJDFJQihCKEIoQ0g9I0g9I0hISEhcNyVdNV07J0xORzU1NTVVXk9C
UThMNzVdNUpSOSxGMlYKK00+KyVCUT9AXk9ROEw2K0VbN1svWVJTW0FYM101WEM3XitTPS40STJc
I0dfJlwzVjZJPzVGUzlMVCgwQV0KK01dRy4zKURSMEEiJlZCQkJCJCgwQSIkLz5PPy8lPixfVD9a
T11XRS9fN0YvLz5OOl07NlVNOyFAUDgsJiMKK00hQFA4LCYjUkc3Ly05WTJFKjRJMkUqNEkyRSox
JDEkMSQxJDEkMTJHLllXRD43QlE4TDQoMEEiJCgwQSIKK00kKDBBVjMjSl4hRFI5LEYzWCddO1cz
UDdDKDBBIiQoMEEiJC9QSioqKigwQSIkKDBZXkNWWFRYODg5LEYKK00zKSIkKD5XPi5TOy1PRz80
XlVIN1ktJFQ7XyQxJDEkMSQxJDEkPD5dWUdWQDRJMkUqNEkyRSo0SURTMy0KK00sJiMhQFVNOzZV
TTs2VU07NlVOOVMtQzhWLUIkKDBBIiQoMEEjWzpCQkJDVDoqKiooMEEjXy1YW1gzWDoKK00kKDBd
PTExMTEiJCg+RCJCQkJDP1xDJUJROE8uSEhISEEiJCgwQSNSN187WzVfWF4qXi5cVVslWVNZM1cK
K00jVStfW1cvMj0pVEcyPSlCUThMNislQlE4TDYrWydXLSJWUTJFKjRJMkUqNEkyRSoxJDEkMSQx
JDEkMTIKK01FLj0iJCg+VkhISEhBIiQuJSUlJSdFXUNVXjMpRFIwQSInN1xBXDFXS1hSJCgwQSIk
KDBBIkUlJSUkKDAKK01BIiQoMEEiJCgwQVVXRi9aN0ZPRC9ETy8/Kj4uWyNZO19EMSQxJDEkMSQx
JDc6LVRbXkUqNEkyRSo0STIKK01FKjRJJDEkMSQxJDEnLFlHLFlXLllXLlxGQkJCQiQoMF0mQkJC
Q0s0NDQ0PjUxMTExIiQoPkpeW10nVCcKK01ILzA+QEEiJC9bR0lcNislQltSQkJCQkdMPDYrJUJJ
Q0FAODg4IzFBQUBgPkNEUjksRjUlJSUkL0NKKioKKzEoL0YtI1M3X1hOWShJUEgyIUNdNFhYYGAK
IGAKIGVuZApkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9ib290MS9mYXQtYXJtNjQudG1wbC5iejIu
dXUgc3lzL2Jvb3QvZWZpL2Jvb3QxL2ZhdC1hcm02NC50bXBsLmJ6Mi51dQppbmRleCAxMTAxZGVi
MDIyNy4uMWZhNDEzODA1NDIgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0LWFybTY0
LnRtcGwuYnoyLnV1CisrKyBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0LWFybTY0LnRtcGwuYnoyLnV1
CkBAIC0yLDI1ICsyLDQ5IEBAIEZBVCB0ZW1wbGF0ZSBib290IGZpbGVzeXN0ZW0gY3JlYXRlZCBi
eSBnZW5lcmF0ZS1mYXQuc2gKIERPIE5PVCBFRElUCiAkRnJlZUJTRCQKIGJlZ2luIDY0NCBmYXQt
YXJtNjQudG1wbC5iejIKLU0wRUlILjMlITYyOTM2NEM2NSNUYCZVO19fX19fWl5LSlpfXk5fXk9e
Sl9eW09KW05LXkpKXktaTktOTkoKLU1aTktOWk9KXlBgK1wjMGBgMGAjMCMpRCZAVFI4QURgLDAh
RC0tJmBAOiFIJkBgIUIjKUlIUjotLSMoOSwKLU1BQWA4RkBRLDAsIzUyYF9VND9KQGAmQUhgYGA6
YDpgYGBgYGBULWBUJkBSJkBUYGBgYGBgYGBgYCRgYFQKLU1gUjkhSC0sRig5YCMkYDkjMzFAKCZA
OiFIYGA4QFI6OixGQzMwUiYzKDgwJilILDMkI2A1MjEoXUkxSSkKLU1GKjo4QzFaYEYwOmBUUixA
OiZDMzA6YFIhSFRULCQhRFRULUo6JkBSJkMpSUEsOkYzMyhTNF0tM2AtLSQKLU1aLS1CNj02RjFN
ITwyOEZKQSIrRSkkMEI8QEIoQiJUSys6MiVMKTBCISInKEQkJCg5RjpATFJPK1E7VEwKLU1OSjlZ
WTJRWksxKi0wVVM1K1VNNlI7RT8tVF9RUUcqPS08OSNKOiM+UlshJi00MDsoMkJgMEFFOT05NTYK
LU1PKyJJSCYsOE09S0VCRigzLEEkSDVKVSU6TTZLNUsxLS5BKS0tLS0tLTZLMzVJKlRKVTpNNks8
UlUzMjMKLU0zMzMzMzhBNEZERkZGRkZGTVg7Oyw8LCNgUCwjYFAsIi5gQDAoJCIhYEAwKCQiIWBA
MEo1LE9KWSolOk0KLU02SzVKVTpJNEo1KkUySTRKKkUySTRKNSpFUTw5T1c+W0xLKlJMSypSTEsq
SU5ZKUlJSUlJSUw2RjMzMzMKLU0zMzM9N1ZMTDkxVkVOW1VQW00kSSw1WC0tK0BSMTpYS1RMP0cl
TEw+LERcWSotKkRVKzZNQl5ZTUZcN1MKLU1CLCFTNkNNUFVFVSdIJ0IwYDRWLScoQCFKS05dXj9a
PF0qVUJgJi85SiMqOU5ATzkuSDZGWURONUFULEwKLU1TLVVBVy1BOzpPM0o2MVI9Ii49KUVZLShU
SzNNOFVTOE5NOzFOJlw8JVElXlkzIjklPThaLUFVTVlBO1cKLU1QWUtLKTU7P0A2RDskRFdMIkow
TEUqLlFdUkE+UVssOy5RSCVWRE0vS0dFKVsuSkJYNFQ9NTZfLjBKRDoKLU1VTCZRNzMkT1I7PU5G
Xj9QWEtDTCVTRj06MUZLTyZXJUExKU8sWVdVJkZNOzFOXVcwUVc9NlUqVURTXVEKLU0wTVxDTlxH
OkxeS1QlTzJVJUcwOzMzNUpKWUZBRzhJLDUkRD86VUNcJ1ovVTtRTzdgPClfM0NMIVI3Lz0KLU0l
Qj1MPCtgSCtKMTs2Pz8lJDElKkg4WzM0TV9OJCtWME82TztZSjchOTVFNyU8OT9MJVI3LTgzIzop
QlkKLU0oRCRGP0RaNEJeLFcpJVcpU1koWDtCL1s8OT9MXFAnXy0qWUM8Tj5QR1JMTFk9Wz9IVVxE
P1tBXEJET0wKLU1QKTIwUDZBPEVSRys7NVMnLTxZVCYkT0YmWjNJS0xQWSczRFBJLCIxRi1FVFwt
XlNVWiYyREJDLTFgKDAKLTZFYCE6VEo5JmBDP0ksJV9YTlkoSVBIMiIxSypBWmBgYAorTTBFSUgu
MyUhNjI5MzY2TSskVlBgJ1olX19fX19fX19fX19fX19eT15KX15bT0pbXkpeTkteS1pOS19OSgor
TVpOS15aTlteWGBDXyVgYCZCQGApIjBEMiRCMCZKSjo4RmBGYGA+XTVgYGBgYGBgYGBgYGBgYGBg
YGBgYAorTWBgYGBgYGBgYGAqSkpEVGAmR19eSjJJX15JNF9SSkdKYGAhSGBgLWBgYGBgYGBgJkAt
YGBgYGBgYGBgJgorTUAjMGAmQUghYDohSCFIYDojMzBSYCZGQUBGQFQtIUlCIUgjKCMzJGBgOWBg
YDpgIyIsYEBgLEA6YGBgYAorTTAmQDpgOmAmQFRULEAhSUg4KUgtIzA6OEA6YFJgVFFgYCYwYGAm
QGBQQ2AoYCMoJkBgYGAkIUgmQCZAIQorTUgtLSMoYDo6JiI6IzBUJkYoJkAsQC0sMGAhRGBgIUhg
LChQImBgUiFIYGBgYCpKRD9JJ0gxKjsyOTMvJQorTSpGVko7P0pKP0pGR00yJkYwVkJgLzQnSmA+
MiZAUjojMCMxSC0nSDMpSVkwJ0onSWBUOiZAVFRUXzEoVAorTVZJRkgnSS1JLzMzNF0mMylFLy1C
RktbNVVcTDFMVlNgWis0LCwsKlpGIyFBQUFBQzg3VTg4YFArQ1FNOAorTVBQUFAnO1U6Uy9LPTlH
MV0qRVcqLzZNN1lLVVM3XkpbVVstV1teSV8kXV5cKVYnQi9CTyg+PlY4JzpMLgorTUZbM0s0PiNK
UFBQODg4YDUjMSwyU0gmYFYhQCwhWCNgOCgsJCIhYEAwKCQiIWBAMCgkIj1GWjtMVy5bQQorTVMt
UVonIzRYLTNAWCk8JyE1UDNQPCchUDwnIVA8JyFQPCchUDwnIVItU0xNUiZZTjQ7RllOO0ZZTjtG
WQorTU47RllOO0ZZTjtGWU47RyFTTiNGPCc6NDwmSTFKWVcxOzcwOydEWSpNMkpKSkpKS0xWUTVM
OkVcLTJaWgorTVpaWltdP1sjWCVcK0tLS0tLS0k6Kk0kODpVRUVFRUVESTJFKjRJMkxKTFpfTF0z
JTFGUzlMVjstKjRJMgorTUUqNExVNjomTTk5OTk5OVJcR1UnTTxWOy1GUzlMVjo2UTVMPUJCJVVV
VVVVVzI1OUssVC06WlpaWlpbSworTV8yOk43N1ozLVZbXClbKV5aXVheIl4uX1haSkpKSkpKSko3
VTpLVTomTTk5OTk5OSo0STJFKjRLKksoOgorTVVFRUVFRURJMkUqNEkyTEpMQUs2NjY2NjY3SkpK
SkpKSkpFPTU9VzUkK0tLS0tLTFpKSkpKSkpKSTlKTAorTVdRLUc8OSw2QzFIVDotJEkyRSo0STJU
NTooOlVFRUVFRUZXMD5MUFBdO0ZTOUxWOy1GUzJWKk1CJk05OQorTTk5OTkqUkpSJk05OTk5OTlV
Lzg9S0hTOUw9Jz0sTlMjMSxNRycuLE5DTUc3LENSN0AqPlZdLUY3VCxcTgorTV5dSCcvOCFWJzRQ
XysuWVBQUGAoSV45SiNgIVs7Sj5ZX0FfRF5UVTk4JmAjVCtNJzxOKlNCWE4rQlhOKworTUJYTitC
WE4rQlhOK0JYTitCWylaUVNOSldNWyVPO1YzPldNWz5XTVs+V01bPldNWz5XTVsqOTMqNzc3Nwor
TTc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz0tVFc5LVtHO1ZdMSNHPSVNPSFIUzJFKjRJMkUqWkpaJk05OTk5
OTkuJAorTUkyRSo0STY1Nj5ESEE9PT09PT1aSkpKSkpKSkpKNjpLLSM2TExMTExMRSo0STJFKjVF
NUQtOlJSUlJSUworTVctNTU1NTU1NTRLSktOTFolPTNUMjYzMUhUMlQ6KToqTSQtOlJSUlJSUjdZ
M1ZDT0dcW0wvXVdSJ0VeSQorTTU1NTU1NTUyW0NcQTlXO1RPUz5PKyVMOyZRTDsmUSo0STJFKjRN
JTZDSj1ZVlYzJUtUOi0mQzFIXTNBQQorTTk5NTU1NTU1KzhKViteQ15CUjhNJkMxSFQ6KTJFKjRJ
MkVISlQwVUsrKysrKykyRSo0STJFOTU5IzZMTAorTUxMTExFKjRJMkUqNUU1R1JaKDc3Nzc3NzJF
KjRJMkUqWkpaJk05OTk5OTlMSk5MTkFLNzc3Nzc3NjU1NgorTT5SNz9PTFc7LSdPVlFYO0gvQ04x
WTtEOzZVTTxDRDxCKEIoQihDLSxYVSFMKlZKWTtOWysrKysrKysrKworTSsrKysrKy05UzddXlVQ
RislQlE4TDYrJUJROEw2KyVCUTpGWkNKLkhaJks9WU9RSTJFRENPUzRISEheJworTUArOkFaYFI5
LEYyJCgwQSIkL0tfVFw2KyVCXStBWyMjVzRfPU86Tl09Ul5ANDQ0NDVfRlonN1NdVT83UworTShV
XkNUOi0mQ15aQkJCQiQoMEEiJCgwQSJdJSUlJCgwQVRGVV84XVpbI1grWENRJ0JPJz40Xkw8QihC
KAorTUIoQihCKENERz0vITlNRltaSTk5OTk5OTk5OTk5OTk5OTlJPDEkMSZEKEIoQi4xUi4xVEcy
PSlURy8xMQorTTFYJitaV01YXUNUOkpKSk5RViw2KyVCXSFWVlMpRFI5KzQ0NDQ+TlpOKyVCUT0j
Sz87XkJMW0lXW05XTgorTVcpWl9FUjksRjNOXkNaX1c/TD0lXSxWOy1GQSIkL1AsWVI5LEYyJCgw
Wj0lJSUkKDBBIiQoP1dPPy9gPgorTSJfVT4mX1o+Klw5WSNSV1YzO007NiMhQFA4LCYjIUBQOCwm
IyFYU0pHRC81NEkyRSo0STJFKjRJMkQxJAorTTEkMSQxJDEkPFNGPFNGPiVfW0JROEw0KDBBIiQo
MEEiJCgwQVxZWzMlQlE4T0A+XD1cW1FYIiQoMEEiJAorTS8+VDQ0ND9YVDQ0NDBBIiQoMEFTPUVX
SFVYODg5LEYzKSIkKD1aXiRaWzhHUyxeXlVeK1xWQDolX0IoQgorTShCKEIoQihCLi05RVwjLyo0
STJFKjRJMkUqNFY7JUJQOCwmIzpWTUs6Vk1LOlZNSzpZJyhZVy5ZVy5BIgorTSQoMEEiJCgwXlpI
SEhIXFpCQkJCJCgwX1Q/Ij8jPiZBIiQvTDoqKiooMEEjSkExMTExUEhISEhcSkJCQgorTUNRWioq
KigwQSNfTVw1XVBeLFw5XEVZK0wvKj8sP04vMy8oW1tFPEtFPEtFPEsoUixDKFIsQyhSLEMoUwor
TVtbJ1ctSjRJMkUqNEkyRSo0STJEMSQxJDEkMSQxJDRJMkQoMEFXRSUlJSQoMEEiJCg+K1lPWC4z
KURSMAorTUEiJ1JPIj01XVpeMEEiJCgwQSIkKDBJMTExMSIkKDBBIiQoMEEiJCg/KT4wXCVZK1kz
WTtSV1MnQS8tPworTS0+PkIoQihCKEIoQihCWzBORD9USTJFKjRJMkUqNEkyRShCKEIoQihCKENE
PENGPFNGPFNRKioqKigwQQorTSNTSioqKi8zNDQ0ND9eNDQ0NDBBIidUV0pfLlxRWUNTJ0YoMEEj
V1NNPDYrJUJdNTExMTEzXF8lQlE4SgorRzhYOCYmJmBVODg4YCdHOSxGMylFMTExMSNRVSUlJCdH
TTNfWV9eK04yKjwqJEBVSThGVmAKIGAKIGVuZApkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9ib290
MS9mYXQtaTM4Ni50bXBsLmJ6Mi51dSBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0LWkzODYudG1wbC5i
ejIudXUKaW5kZXggNzRjNzM0ZDJkMzcuLmMwNDQwY2FlNDIxIDEwMDY0NAotLS0gc3lzL2Jvb3Qv
ZWZpL2Jvb3QxL2ZhdC1pMzg2LnRtcGwuYnoyLnV1CisrKyBzeXMvYm9vdC9lZmkvYm9vdDEvZmF0
LWkzODYudG1wbC5iejIudXUKQEAgLTIsMjUgKzIsNDkgQEAgRkFUIHRlbXBsYXRlIGJvb3QgZmls
ZXN5c3RlbSBjcmVhdGVkIGJ5IGdlbmVyYXRlLWZhdC5zaAogRE8gTk9UIEVESVQKICRGcmVlQlNE
JAogYmVnaW4gNjQ0IGZhdC1pMzg2LnRtcGwuYnoyCi1NMEVJSC4zJSE2MjkzNjEvIjEmJGAmVTtf
X19fX1peS0paX1pOX15PXkpfXltPSltOS15KSl5LWk5LTk5KCi1NWk5LTlpPSl5QYCtcIzBgYDBg
IzAmQzMxSCMzJCYkYFIsQUgtIzMiIyEsMzA6YCZAYCFARkA4KUQmJDojCi1NKDo6ODMpQmAmQDpK
MDo/WkovVTMwYCxAYGBgLWAsRkBgYGBgYGBSLWBgYFJgYGBgYGBgYGBgJGBgVCFICi1NVFQ6YFRR
IUFgLEMoOiMwVFBAUDMkVCZAIUhgYDgpSCYiOSFBJkBSJkZGJFI4QCFIIkpCKEdNKjooM1ZJCi1N
Sjo7MjktREYpWkMxSCMpSUEmMCxDMUhgUmBWSCMzJCMoI1IoUiMoVDhGRlIkUChSOCZBSFEzVFRV
Lk0vCi1NNENINTZYSkJTQlIlJFIiJUhCQSIiJEhBIiQoMCpNKThRMDYoQyEiYEBAT1hBYEBAW14y
OExIWT8rSlRaCi1NWTQtKlxRNF09SkRXUC1EVVJcO0VNNl48MU9XKzxRQCw5OVZdSyw8IiojPig7
VUckLEhKMEAiIiMtUVJMCi1NSyU7VSVAVSMpTERNNT06Ky0oTigxQEk0SUo1KkUySTU0RElENERE
RERERSpFKTJCSTFJNEo1KkVVOyEpCi1NJSkpKSkpKUNFIjIqMjIyMjIyVkFNTFFQUCwjYFAsI2BQ
KFgiIWBAMCgkIiFgQDAoJCIhIkEwWz83UTMqCi1NNSpFMkk0SjUiQTBINColIkEwNColIkEwSDQr
LlNUJlFLKlJMSypSTEsqUkE+UTIyMjIyMjI2SjEpKSkpCi1NKSkpRS5bQ0RJTFs2OjFfPT08MSlI
TS1JKVlXJkJBMTo6Uys6KTY1LTBCXSUmJ00oTTxWMlw7QU5VXFhDCi1NRE5AUDZLSyFMKlwvNC8o
QGAzVS03JEBgXisoWzJbXl9ROFYkKGAsSlwmIUZNISw7MisnSk5fQk0sPzU/Ci1NXTxMXTdROl1U
TVxRMFFWT0YmJSU8UTpRWzpFTCZTN0MrLVJXU0BOLFkrRywhQitBPFZTWlxNO1hHIlw6Ci1NMk9G
Ki1bWDU2JVYxPCJgSEIrKExaQiY8XV45PjBOSDs+SUlXOyhKTlZFRkk7PkMnKVlYVjUrXVhCQilc
Ci1NW1pFVktMQFczPi1eX0lRVyo8VVQ2JFQzVTdOOS5SRzMxN1ZBXC46WkwqSl1NS1Y9OzleTS5I
QlReRUY2Ci1NNjhPPFM4LS5JXE5NLktWN0U7QzZUSio5JklFNEcuUEElI1w2Tz9IVzteJVxYI0FO
MFkzRk5AWjsjPTlECi1NL1YuL005Qk8kTDsrOEI6JCgzSzpaRjwrPiglVlY7QE8vPDVGNjk8RVMn
Lz0lVFYiUSYqVTMqMTBCJDdDCi1NUTMoPT4qOFg5R1hIOSYrI0JBUideLjRZO0ZNLFlbSEwhQE9Z
ODskPzhTO0o3Ry4wXkYqJy9RO148V1YlCi1NUFEmKiNJLTJQJzQ9NU5GIlBGJl9VQi4qUTc3OFJV
LDYpQzE4RDVfJFNOVlFMNT8tOyxbNiokVj5BYCQkCi03JDhgJUEuR0I3WickMT0pX1hOWShJUEgy
YEdBKEMiYGAKK00wRUlILjMlITYyOTM2PVNPI0NAYCdZQ19fX19fX19fX19fX19fXk9eSl9eW09K
W15KXk5LXktaT0tPTkoKK01aTkteWk5bXlhgQ18qYGAmQkBgNCIwRDIoQjAmSSpgYGBgYGBgYCMw
YGBgYGBgYCMoLWBgUmBgYGBgYGAKK01gYGBgYGBgIkpKRSdaSGA6P19aREpHX1pKPkpHX0pKYGBg
YGBgYGBgYGBgYGBgYCMwYGBUYGBgYGBgYCMKK00wOiZBWkAkIUgmQCZAIUgtLSMoYDo6JiI6IzBU
JkYoJkAsQC0sMGAhRGBgIUhgLChQImBgUiFIYGBgIWAKK006IUghSGA6IzMwUmAmRkFARkBULSFJ
QiFIIygjMyRgYDlgYGA6YCMiLGBAYCxAOmBgYGAwJkA6YDpgJkAKK01UVCxAIUlIOClILSMwOjhA
OmBSYFRRYGAmMGBgJkBgUENgKGAjKCZAYGBgYEpKMV5FJ1o6MjI+RS0vVTMKK01VKj9fSTJHTTIp
X1pKRjNUVko+SD5JSDosQzAsVEA6OzQnSiZAOiNVLS1gOmA5YD5IIVpDMzA6YD5IYD4KK01VM1Um
M1RDVS0tJkFaM1QzMyM0XUo6M00xOzVdLFtTO0wnLVNTYFpLNCxMTEtaRjMpRUVFRUxIOFU5OWAK
K01SLytVIysrKyg5Q1ouWiMvVC9INj1HSSRPNk9MVUdXS1s1S0lBOCJIJVYsPDdIVEFOQzQnLi5A
PjBfQEEKK01LWChGSyEyVj0jNyooMEEiJChgJVBLU1c2SVVVRzc9PUFVVzc+Ilo3Mlo3Mlo3Mlo3
Mlo3Mlo3Mlo3MloKK003PE5FUD5LPU5eMC8vWTpHJUo8NyUrQlhLTio+K0JYTitCWE4rQlhOK0JY
TitCWE1bT10nMUhMVDorLSYKK01DMUhUOi0mQzFIVDotJkMxSFQ6LSc2PCc2PU5YTjVHJUo2Ok4j
Sk49VScsXiVNNzpFVVVVVVVXPS45PVMKK00tMyM0UFBQUFBQXy1dMzdeJksrIyMjIyMjIjZZPU4x
RUs0STJFKjJFKjRJMkUqRVUuUV4zSjslRjstRlMKK005TFRJMkUqNEkyUzc5SDpVKjRJMkc7O18z
XlRTOUxWOy1GUzlJPFJbRj1GUiYmJiYmJicwTlM0UzBVTCwKK00sLCwsLlFXVktNTT9SXjtaMV1I
XyU/Sk8lPlk+Xj9aXVROTk5OTk5ORVpBPVgqJk0yRSo0SSo0STJFKjQKK01KNzRBSzRJMkUqMkUq
NEkyRSpFVSg6VSo0STJGL0paNEkyRSo0RUZOUzBVSjRJMkUsW0tLS0tLS0tJODcKK004PjNTPktW
TUM8Vy1TPFctUjRJMkUqNEk7RVZZIzZJMkUqNEUqNEkyRSo1K0owVUo0STJFKTROSSM2STIKK01F
KjRUXl5eM1csVjs5Tj5NOlcsVTk+Uj5QOiJDTVc4LCdETFhJWztUVitaN1FLT1A5XVNFQFM+SFk3
LUcKK00iOTY1RWAkNl1BSiMoIV43VU87PlVfPFtfNU1SLEAnSCdSK1pJUjRZLjNEWS4zRFkuM0RZ
LjNEWS4zRFkKK00uM0RZLlg+TjwnPS0mQzhUOi1LMUhUOi0mQzFIVDotJkMxSFQ6LSZDTjc8S0tL
S0tLS0tLS0tLS0tLS0sKK01LS0tLS0w2R0xNSFQ2MFguSllXNDtGOjRJMkUqNEk4NzgwVUo0STJF
KVJFKjRJMkUqRVUuXUxBQUFBQUEKK01BWCVVVVVVVVVVVExVVjomTTJFKjRJKjRJMkUqNEo3NEFL
NEkyRSo+T11NMkUqNEkyRExVVjtUMz8/NFsKK01OVE1LPFctUls8Vyk7RVUoOlUqNEkyRE9OV0xX
Qi9XVzk+Wz5fPjlaNT09PT09PT0rT18iNF8mPyw/JlsKK00kTUNGPFNGPFNGOFlGSltUPzhQUFBQ
UFBQSVUlVjtLXidMNjlMVjstRlMyRSo0STJFKy09RkFLNEkyRSoKK00yRSo0STJFKkVVKDpVKjRJ
MkRJMkUqNEkyST0yJk0yRSo0SSo0STJFKjRKNzReKTkjIyMjIyMiNEkyRSoKK000STg3OD5GOTYw
UFBQUFBQTk5QSUEjNlBQUEcjIyMiRS0oPS5URVdLMkZWTFRdOUZHUk0rOVUnXEhMTEwKK01CKEIo
Qz5XTVs+V05QXURaS05XVCc3PilULkFULkFULkFULkFULkFULkFULkFULkFaI0w9S1FfNjwnIVAK
K008JyFQPCchUDwnIVA8JyFQPCc2PTlVRzY9M089LlVKRSo0SF1KOkVFRUdeNjBLNC5OPSxJMkUi
JCgwQSIKK00nVDdYPlFMOyZRV1Y3TDxPO1NYI1Y7XF1eRltVOTk5OT9dV0o9Qy9WXi4iKFU9NzxX
LVM8X0ZMTExMQSIKK00kKDBBIiQoMFE5OTk5IiQoPSNHPipfSD4sXVBfUz9bTyo/YD8lPkg7Vl1P
O1ZdJDEkMSQxJDxKW01HJ0IKK00uRVUrJUJROEw2KyVCUThMNislQlE4TSdCKEIoVDEkMSQxJDFC
W0FXI04nIlJSU0xbJ1QvSjhfIlpNVVUKK01VV0M9P1FNSzpWTUtLXkVaRlVNOzZVQlJSUlNVXz9b
JlFMOyZfVDdLLltJXThcKV4uX0A7XyJbOzpWTUsKK006W09KXz0/Sj9AO0YtVjstRlMwQSInVi48
WzZVTTs0KDBBVy1FRUVEKDBBIiQoP1NPWkc5P1cvPE8pPlwKK00+NFxNXCVZQ1UzR1lXLllXLllX
LkxMTExMTExMTExcNVlDUidKKjRJMkUqNEkyRSo0STIoQihCKEIoQigKK01CKjRJM1IvPzsmUUw7
JCgwQSIkKDBBIiQoMEFZW1ZGUUw7JlFYX0JPJD4mWyokKDBBIiQqTExMTEEiJCgKK00wQSIkKDBc
T1dPWmBVWTk5OzZVTTs0KDBBWyVbSVdDTydPJ18jUkdZLFxTWyw/WEIoQihCKEIoQihDQzYKK007
PyJeMTJFKjRJMkUqNEkyRlM5Oys2NjY2NjY2NjxbRzxbRzxbRztWXVA8JyFQMEEiJCgwQSIkKD4h
OTkKK005OVlVRUVFRCgwQVtBWSNSN05UKDBBWkpSUlJTTkBMTExMQSIkLi1FRUVHUTsrKysoMEEi
JCxDKF5JXUMKK01AV1cvUTlZXlNVV1wsUVcrIV5HPjgsJiMhQFA4LCYjIUBQOCwmIyFdO1s2PTsu
STJFKjRJMkUqNEkyRSgKK01CKEIoQihCKEIoSTJFLEMoUixDUFsrKysoMEEiJCgwX1pbN0tNSzpW
TUokKDBeJ1kjX01YK1daJCgwQSIKK00kKDBBIlVFRUVEKDBBIiQoMEEiJCgwQV9YXiJcPVwpXC1c
MVlDX1lbSVZHUUdRVl1PO1ZdJDEkMSQxJDEKK009Ri5GP1RJMkUqNEkyRSo0STJFKEIoQihCKEIo
QihJM01XO08+VjY2NjBBIidHNjY2Nj1dOTk5OV9TOTkKK005OSIkKD5EXk5cW1M3Rk8tPjpBIiQv
WydIXUM4Vi1DUCsrKysrP0BbJlFMOyVNRjYxRUVELTY2NjAhWVYKK0E8I1NbK0ZWVEkyJlZSUlJS
J1AlRUVEJ1FWSV9aX18lVyklLiUiMFcuXC4uYAogYAogZW5kCmRpZmYgLS1naXQgc3lzL2Jvb3Qv
ZWZpL2Jvb3QxL2dlbmVyYXRlLWZhdC5zaCBzeXMvYm9vdC9lZmkvYm9vdDEvZ2VuZXJhdGUtZmF0
LnNoCmluZGV4IGQ5ZGZiMjdkZTI1Li43YzQ2ZTkyNmY2MCAxMDA3NTUKLS0tIHN5cy9ib290L2Vm
aS9ib290MS9nZW5lcmF0ZS1mYXQuc2gKKysrIHN5cy9ib290L2VmaS9ib290MS9nZW5lcmF0ZS1m
YXQuc2gKQEAgLTEzLDcgKzEzLDcgQEAKIAogRkFUX1NJWkU9MTYwMCAJCQkjU2l6ZSBpbiA1MTIt
Ynl0ZSBibG9ja3Mgb2YgdGhlIHByb2R1Y2VkIGltYWdlCiAKLUJPT1QxX1NJWkU9MTI4aworQk9P
VDFfU0laRT01MTJrCiAKICMKICMgS25vd24gZmlsZW5hbWVzCmRpZmYgLS1naXQgc3lzL2Jvb3Qv
ZWZpL2Jvb3QxL3Vmc19tb2R1bGUuYyBzeXMvYm9vdC9lZmkvYm9vdDEvdWZzX21vZHVsZS5jCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODYwYTg2MGZkZi4uMDAwMDAwMDAwMDAKLS0t
IHN5cy9ib290L2VmaS9ib290MS91ZnNfbW9kdWxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODAg
KzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggUm9iZXJ0IE5vcmRpZXIKLSAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEgUm9iZXJ0IERyZWhtZWwK
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTQgTmF0aGFuIFdo
aXRlaG9ybgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNSBF
cmljIE1jQ29ya2xlCi0gKiBBbGwgcmlnaHRzIHJldmVydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
LSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICov
Ci0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8
c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8ZWZpLmg+Ci0K
LSNpbmNsdWRlICJib290X21vZHVsZS5oIgotCi1zdGF0aWMgZGV2X2luZm9fdCAqZGV2aW5mbzsK
LXN0YXRpYyBkZXZfaW5mb190ICpkZXZpY2VzOwotCi1zdGF0aWMgaW50Ci1kc2tyZWFkKHZvaWQg
KmJ1ZiwgdV9pbnQ2NF90IGxiYSwgaW50IG5ibGspCi17Ci0JaW50IHNpemU7Ci0JRUZJX1NUQVRV
UyBzdGF0dXM7Ci0KLQlsYmEgPSBsYmEgLyAoZGV2aW5mby0+ZGV2LT5NZWRpYS0+QmxvY2tTaXpl
IC8gREVWX0JTSVpFKTsKLQlzaXplID0gbmJsayAqIERFVl9CU0laRTsKLQotCXN0YXR1cyA9IGRl
dmluZm8tPmRldi0+UmVhZEJsb2NrcyhkZXZpbmZvLT5kZXYsCi0JICAgIGRldmluZm8tPmRldi0+
TWVkaWEtPk1lZGlhSWQsIGxiYSwgc2l6ZSwgYnVmKTsKLQotCWlmIChzdGF0dXMgIT0gRUZJX1NV
Q0NFU1MpIHsKLQkJRFBSSU5URigiZHNrcmVhZDogZmFpbGVkIGRldjogJXAsIGlkOiAldSwgbGJh
OiAlanUsIHNpemU6ICVkLCAiCi0JCSAgICAic3RhdHVzOiAlbHVcbiIsIGRldmluZm8tPmRldiwK
LQkJICAgIGRldmluZm8tPmRldi0+TWVkaWEtPk1lZGlhSWQsICh1aW50bWF4X3QpbGJhLCBzaXpl
LAotCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQot
CXJldHVybiAoMCk7Ci19Ci0KLSNpbmNsdWRlICJ1ZnNyZWFkLmMiCi0KLXN0YXRpYyBzdHJ1Y3Qg
ZG1hZGF0IF9fZG1hZGF0OwotCi1zdGF0aWMgaW50Ci1pbml0X2RldihkZXZfaW5mb190KiBkZXYp
Ci17Ci0KLQlkZXZpbmZvID0gZGV2OwotCWRtYWRhdCA9ICZfX2RtYWRhdDsKLQotCXJldHVybiBm
c3JlYWQoMCwgTlVMTCwgMCk7Ci19Ci0KLXN0YXRpYyBFRklfU1RBVFVTCi1wcm9iZShkZXZfaW5m
b190KiBkZXYpCi17Ci0KLQlpZiAoaW5pdF9kZXYoZGV2KSA8IDApCi0JCXJldHVybiAoRUZJX1VO
U1VQUE9SVEVEKTsKLQotCWFkZF9kZXZpY2UoJmRldmljZXMsIGRldik7Ci0KLQlyZXR1cm4gKEVG
SV9TVUNDRVNTKTsKLX0KLQotc3RhdGljIEVGSV9TVEFUVVMKLWxvYWQoY29uc3QgY2hhciAqZmls
ZXBhdGgsIGRldl9pbmZvX3QgKmRldiwgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqYnVmc2l6ZSkKLXsK
LQl1ZnNfaW5vX3QgaW5vOwotCUVGSV9TVEFUVVMgc3RhdHVzOwotCXNpemVfdCBzaXplOwotCXNz
aXplX3QgcmVhZDsKLQl2b2lkICpidWY7Ci0KLQlEUFJJTlRGKCJMb2FkaW5nICclcycgZnJvbSAl
c1xuIiwgZmlsZXBhdGgsIGRldnBhdGhfc3RyKGRldi0+ZGV2cGF0aCkpOwotCi0JaWYgKGluaXRf
ZGV2KGRldikgPCAwKSB7Ci0JCURQUklOVEYoIkZhaWxlZCB0byBpbml0IGRldmljZVxuIik7Ci0J
CXJldHVybiAoRUZJX1VOU1VQUE9SVEVEKTsKLQl9Ci0KLQlpZiAoKGlubyA9IGxvb2t1cChmaWxl
cGF0aCkpID09IDApIHsKLQkJRFBSSU5URigiRmFpbGVkIHRvIGxvb2t1cCAnJXMnIChmaWxlIG5v
dCBmb3VuZD8pXG4iLCBmaWxlcGF0aCk7Ci0JCXJldHVybiAoRUZJX05PVF9GT1VORCk7Ci0JfQot
Ci0JaWYgKGZzcmVhZF9zaXplKGlubywgTlVMTCwgMCwgJnNpemUpIDwgMCB8fCBzaXplIDw9IDAp
IHsKLQkJcHJpbnRmKCJGYWlsZWQgdG8gcmVhZCBzaXplIG9mICclcycgaW5vOiAlZFxuIiwgZmls
ZXBhdGgsIGlubyk7Ci0JCXJldHVybiAoRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsKLQl9Ci0KLQlp
ZiAoKHN0YXR1cyA9IGJzLT5BbGxvY2F0ZVBvb2woRWZpTG9hZGVyRGF0YSwgc2l6ZSwgJmJ1Zikp
ICE9Ci0JICAgIEVGSV9TVUNDRVNTKSB7Ci0JCXByaW50ZigiRmFpbGVkIHRvIGFsbG9jYXRlIHJl
YWQgYnVmZmVyICV6dSBmb3IgJyVzJyAoJWx1KVxuIiwKLQkJICAgIHNpemUsIGZpbGVwYXRoLCBF
RklfRVJST1JfQ09ERShzdGF0dXMpKTsKLQkJcmV0dXJuIChzdGF0dXMpOwotCX0KLQotCXJlYWQg
PSBmc3JlYWQoaW5vLCBidWYsIHNpemUpOwotCWlmICgoc2l6ZV90KXJlYWQgIT0gc2l6ZSkgewot
CQlwcmludGYoIkZhaWxlZCB0byByZWFkICclcycgKCV6ZCAhPSAlenUpXG4iLCBmaWxlcGF0aCwg
cmVhZCwKLQkJICAgIHNpemUpOwotCQkodm9pZClicy0+RnJlZVBvb2woYnVmKTsKLQkJcmV0dXJu
IChFRklfSU5WQUxJRF9QQVJBTUVURVIpOwotCX0KLQotCURQUklOVEYoIkxvYWQgY29tcGxldGVc
biIpOwotCi0JKmJ1ZnAgPSBidWY7Ci0JKmJ1ZnNpemUgPSBzaXplOwotCi0JcmV0dXJuIChFRklf
U1VDQ0VTUyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zdGF0dXModm9pZCkKLXsKLQlpbnQgaTsKLQlk
ZXZfaW5mb190ICpkZXY7Ci0KLQlmb3IgKGRldiA9IGRldmljZXMsIGkgPSAwOyBkZXYgIT0gTlVM
TDsgZGV2ID0gZGV2LT5uZXh0LCBpKyspCi0JCTsKLQotCXByaW50ZigiJXMgZm91bmQgIiwgdWZz
X21vZHVsZS5uYW1lKTsKLQlzd2l0Y2ggKGkpIHsKLQljYXNlIDA6Ci0JCXByaW50Zigibm8gcGFy
dGl0aW9uc1xuIik7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJcHJpbnRmKCIlZCBwYXJ0aXRpb25c
biIsIGkpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGYoIiVkIHBhcnRpdGlvbnNcbiIs
IGkpOwotCX0KLX0KLQotc3RhdGljIGRldl9pbmZvX3QgKgotX2RldmljZXModm9pZCkKLXsKLQot
CXJldHVybiAoZGV2aWNlcyk7Ci19Ci0KLWNvbnN0IGJvb3RfbW9kdWxlX3QgdWZzX21vZHVsZSA9
Ci17Ci0JLm5hbWUgPSAiVUZTIiwKLQkucHJvYmUgPSBwcm9iZSwKLQkubG9hZCA9IGxvYWQsCi0J
LnN0YXR1cyA9IHN0YXR1cywKLQkuZGV2aWNlcyA9IF9kZXZpY2VzCi19OwpkaWZmIC0tZ2l0IHN5
cy9ib290L2VmaS9ib290MS96ZnNfbW9kdWxlLmMgc3lzL2Jvb3QvZWZpL2Jvb3QxL3pmc19tb2R1
bGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyNmEzMzAxMGQuLjAwMDAwMDAw
MDAwCi0tLSBzeXMvYm9vdC9lZmkvYm9vdDEvemZzX21vZHVsZS5jCisrKyAvZGV2L251bGwKQEAg
LTEsMTk2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDE1IEVyaWMgTWNDb3JrbGUK
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
LSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
Ci0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0QkCi0gKi8KLSNpbmNsdWRlIDxz
dGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5j
bHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lz
L3F1ZXVlLmg+Ci0jaW5jbHVkZSA8ZWZpLmg+Ci0KLSNpbmNsdWRlICJib290X21vZHVsZS5oIgot
Ci0jaW5jbHVkZSAibGliemZzLmgiCi0jaW5jbHVkZSAiemZzaW1wbC5jIgotCi1zdGF0aWMgZGV2
X2luZm9fdCAqZGV2aWNlczsKLQotc3RhdGljIGludAotdmRldl9yZWFkKHZkZXZfdCAqdmRldiwg
dm9pZCAqcHJpdiwgb2ZmX3Qgb2ZmLCB2b2lkICpidWYsIHNpemVfdCBieXRlcykKLXsKLQlkZXZf
aW5mb190ICpkZXZpbmZvOwotCW9mZl90IGxiYTsKLQlFRklfU1RBVFVTIHN0YXR1czsKLQotCWRl
dmluZm8gPSAoZGV2X2luZm9fdCAqKXByaXY7Ci0JbGJhID0gb2ZmIC8gZGV2aW5mby0+ZGV2LT5N
ZWRpYS0+QmxvY2tTaXplOwotCi0Jc3RhdHVzID0gZGV2aW5mby0+ZGV2LT5SZWFkQmxvY2tzKGRl
dmluZm8tPmRldiwKLQkgICAgZGV2aW5mby0+ZGV2LT5NZWRpYS0+TWVkaWFJZCwgbGJhLCBieXRl
cywgYnVmKTsKLQlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7Ci0JCURQUklOVEYoInZkZXZf
cmVhZDogZmFpbGVkIGRldjogJXAsIGlkOiAldSwgbGJhOiAlamQsIHNpemU6ICV6dSwiCi0JCSAg
ICAiIHN0YXR1czogJWx1XG4iLCBkZXZpbmZvLT5kZXYsCi0JCSAgICBkZXZpbmZvLT5kZXYtPk1l
ZGlhLT5NZWRpYUlkLCAoaW50bWF4X3QpbGJhLCBieXRlcywKLQkJICAgIEVGSV9FUlJPUl9DT0RF
KHN0YXR1cykpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0
aWMgRUZJX1NUQVRVUwotcHJvYmUoZGV2X2luZm9fdCAqZGV2KQotewotCXNwYV90ICpzcGE7Ci0J
ZGV2X2luZm9fdCAqdGRldjsKLQlFRklfU1RBVFVTIHN0YXR1czsKLQotCS8qIFpGUyBjb25zdW1l
cyB0aGUgZGV2IG9uIHN1Y2Nlc3Mgc28gd2UgbmVlZCBhIGNvcHkuICovCi0JaWYgKChzdGF0dXMg
PSBicy0+QWxsb2NhdGVQb29sKEVmaUxvYWRlckRhdGEsIHNpemVvZigqZGV2KSwKLQkgICAgKHZv
aWQqKikmdGRldikpICE9IEVGSV9TVUNDRVNTKSB7Ci0JCURQUklOVEYoIkZhaWxlZCB0byBhbGxv
Y2F0ZSB0ZGV2ICglbHUpXG4iLAotCQkgICAgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Ci0JCXJl
dHVybiAoc3RhdHVzKTsKLQl9Ci0JbWVtY3B5KHRkZXYsIGRldiwgc2l6ZW9mKCpkZXYpKTsKLQot
CWlmICh2ZGV2X3Byb2JlKHZkZXZfcmVhZCwgdGRldiwgJnNwYSkgIT0gMCkgewotCQkodm9pZCli
cy0+RnJlZVBvb2wodGRldik7Ci0JCXJldHVybiAoRUZJX1VOU1VQUE9SVEVEKTsKLQl9Ci0KLQlk
ZXYtPmRldmRhdGEgPSBzcGE7Ci0JYWRkX2RldmljZSgmZGV2aWNlcywgZGV2KTsKLQotCXJldHVy
biAoRUZJX1NVQ0NFU1MpOwotfQotCi1zdGF0aWMgRUZJX1NUQVRVUwotbG9hZChjb25zdCBjaGFy
ICpmaWxlcGF0aCwgZGV2X2luZm9fdCAqZGV2aW5mbywgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqYnVm
c2l6ZSkKLXsKLQlzcGFfdCAqc3BhOwotCXN0cnVjdCB6ZnNtb3VudCB6ZnNtb3VudDsKLQlkbm9k
ZV9waHlzX3QgZG47Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0JaW50IGVycjsKLQl2b2lkICpidWY7Ci0J
RUZJX1NUQVRVUyBzdGF0dXM7Ci0KLQlzcGEgPSBkZXZpbmZvLT5kZXZkYXRhOwotCi0JRFBSSU5U
RigibG9hZDogJyVzJyBzcGE6ICclcycsIGRldnBhdGg6ICVzXG4iLCBmaWxlcGF0aCwgc3BhLT5z
cGFfbmFtZSwKLQkgICAgZGV2cGF0aF9zdHIoZGV2aW5mby0+ZGV2cGF0aCkpOwotCi0JaWYgKChl
cnIgPSB6ZnNfc3BhX2luaXQoc3BhKSkgIT0gMCkgewotCQlEUFJJTlRGKCJGYWlsZWQgdG8gbG9h
ZCBwb29sICclcycgKCVkKVxuIiwgc3BhLT5zcGFfbmFtZSwgZXJyKTsKLQkJcmV0dXJuIChFRklf
Tk9UX0ZPVU5EKTsKLQl9Ci0KLQlpZiAoKGVyciA9IHpmc19tb3VudChzcGEsIDAsICZ6ZnNtb3Vu
dCkpICE9IDApIHsKLQkJRFBSSU5URigiRmFpbGVkIHRvIG1vdW50IHBvb2wgJyVzJyAoJWQpXG4i
LCBzcGEtPnNwYV9uYW1lLCBlcnIpOwotCQlyZXR1cm4gKEVGSV9OT1RfRk9VTkQpOwotCX0KLQot
CWlmICgoZXJyID0gemZzX2xvb2t1cCgmemZzbW91bnQsIGZpbGVwYXRoLCAmZG4pKSAhPSAwKSB7
Ci0JCWlmIChlcnIgPT0gRU5PRU5UKSB7Ci0JCQlEUFJJTlRGKCJGYWlsZWQgdG8gZmluZCAnJXMn
IG9uIHBvb2wgJyVzJyAoJWQpXG4iLAotCQkJICAgIGZpbGVwYXRoLCBzcGEtPnNwYV9uYW1lLCBl
cnIpOwotCQkJcmV0dXJuIChFRklfTk9UX0ZPVU5EKTsKLQkJfQotCQlwcmludGYoIkZhaWxlZCB0
byBsb29rdXAgJyVzJyBvbiBwb29sICclcycgKCVkKVxuIiwgZmlsZXBhdGgsCi0JCSAgICBzcGEt
PnNwYV9uYW1lLCBlcnIpOwotCQlyZXR1cm4gKEVGSV9JTlZBTElEX1BBUkFNRVRFUik7Ci0JfQot
Ci0JaWYgKChlcnIgPSB6ZnNfZG5vZGVfc3RhdChzcGEsICZkbiwgJnN0KSkgIT0gMCkgewotCQlw
cmludGYoIkZhaWxlZCB0byBzdGF0ICclcycgb24gcG9vbCAnJXMnICglZClcbiIsIGZpbGVwYXRo
LAotCQkgICAgc3BhLT5zcGFfbmFtZSwgZXJyKTsKLQkJcmV0dXJuIChFRklfSU5WQUxJRF9QQVJB
TUVURVIpOwotCX0KLQotCWlmICgoc3RhdHVzID0gYnMtPkFsbG9jYXRlUG9vbChFZmlMb2FkZXJE
YXRhLCAoVUlOVE4pc3Quc3Rfc2l6ZSwgJmJ1ZikpCi0JICAgICE9IEVGSV9TVUNDRVNTKSB7Ci0J
CXByaW50ZigiRmFpbGVkIHRvIGFsbG9jYXRlIGxvYWQgYnVmZmVyICV6ZCBmb3IgcG9vbCAnJXMn
IGZvciAnJXMnICIKLQkJICAgICIoJWx1KVxuIiwgc3Quc3Rfc2l6ZSwgc3BhLT5zcGFfbmFtZSwg
ZmlsZXBhdGgsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOwotCQlyZXR1cm4gKEVGSV9JTlZBTElE
X1BBUkFNRVRFUik7Ci0JfQotCi0JaWYgKChlcnIgPSBkbm9kZV9yZWFkKHNwYSwgJmRuLCAwLCBi
dWYsIHN0LnN0X3NpemUpKSAhPSAwKSB7Ci0JCXByaW50ZigiRmFpbGVkIHRvIHJlYWQgbm9kZSBm
cm9tICVzICglZClcbiIsIHNwYS0+c3BhX25hbWUsCi0JCSAgICBlcnIpOwotCQkodm9pZClicy0+
RnJlZVBvb2woYnVmKTsKLQkJcmV0dXJuIChFRklfSU5WQUxJRF9QQVJBTUVURVIpOwotCX0KLQot
CSpidWZzaXplID0gc3Quc3Rfc2l6ZTsKLQkqYnVmcCA9IGJ1ZjsKLQotCXJldHVybiAoRUZJX1NV
Q0NFU1MpOwotfQotCi1zdGF0aWMgdm9pZAotc3RhdHVzKHZvaWQpCi17Ci0Jc3BhX3QgKnNwYTsK
LQotCXNwYSA9IFNUQUlMUV9GSVJTVCgmemZzX3Bvb2xzKTsKLQlpZiAoc3BhID09IE5VTEwpIHsK
LQkJcHJpbnRmKCIlcyBmb3VuZCBubyBwb29sc1xuIiwgemZzX21vZHVsZS5uYW1lKTsKLQkJcmV0
dXJuOwotCX0KLQotCXByaW50ZigiJXMgZm91bmQgdGhlIGZvbGxvd2luZyBwb29sczoiLCB6ZnNf
bW9kdWxlLm5hbWUpOwotCVNUQUlMUV9GT1JFQUNIKHNwYSwgJnpmc19wb29scywgc3BhX2xpbmsp
Ci0JCXByaW50ZigiICVzIiwgc3BhLT5zcGFfbmFtZSk7Ci0KLQlwcmludGYoIlxuIik7Ci19Ci0K
LXN0YXRpYyB2b2lkCi1pbml0KHZvaWQpCi17Ci0KLQl6ZnNfaW5pdCgpOwotfQotCi1zdGF0aWMg
ZGV2X2luZm9fdCAqCi1fZGV2aWNlcyh2b2lkKQotewotCi0JcmV0dXJuIChkZXZpY2VzKTsKLX0K
LQotY29uc3QgYm9vdF9tb2R1bGVfdCB6ZnNfbW9kdWxlID0KLXsKLQkubmFtZSA9ICJaRlMiLAot
CS5pbml0ID0gaW5pdCwKLQkucHJvYmUgPSBwcm9iZSwKLQkubG9hZCA9IGxvYWQsCi0JLnN0YXR1
cyA9IHN0YXR1cywKLQkuZGV2aWNlcyA9IF9kZXZpY2VzCi19OwpkaWZmIC0tZ2l0IHN5cy9ib290
L2VmaS9kcml2ZXJzL01ha2VmaWxlIHN5cy9ib290L2VmaS9kcml2ZXJzL01ha2VmaWxlCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZTFmMThiZTI1MgotLS0gL2Rldi9u
dWxsCisrKyBzeXMvYm9vdC9lZmkvZHJpdmVycy9NYWtlZmlsZQpAQCAtMCwwICsxLDM0IEBACisj
ICRGcmVlQlNEJAorCisuaW5jbHVkZSA8c3JjLm9wdHMubWs+CisKK0xJQj0JZWZpX2RyaXZlcnMK
K0lOVEVSTkFMTElCPQorV0FSTlM/PQkyCisKK1NSQ1M9CWVmaXBhcnQuYyBmc19kcml2ZXIuYwor
CisuaWYgJHtNQUNISU5FX0NQVUFSQ0h9ID09ICJhYXJjaDY0IgorQ0ZMQUdTKz0JLW1zb2Z0LWZs
b2F0IC1tZ2VuZXJhbC1yZWdzLW9ubHkKKy5lbmRpZgorLmlmICR7TUFDSElORV9BUkNIfSA9PSAi
YW1kNjQiCitDRkxBR1MrPSAtZlBJQyAtbW5vLXJlZC16b25lCisuZW5kaWYKKy5pZiAke01LX1pG
U30gIT0gIm5vIgorQ0ZMQUdTKz0JLUkkey5DVVJESVJ9Ly4uLy4uL3pmcworQ0ZMQUdTKz0JLUkk
ey5DVVJESVJ9Ly4uLy4uLy4uL2NkZGwvYm9vdC96ZnMKK0NGTEFHUys9CS1ERUZJX1pGU19CT09U
CisuZW5kaWYKKworQ0ZMQUdTKz0gLUkkey5DVVJESVJ9Ly4uL2luY2x1ZGUKK0NGTEFHUys9IC1J
JHsuQ1VSRElSfS8uLi9pbmNsdWRlLyR7TUFDSElORX0KK0NGTEFHUys9IC1JJHsuQ1VSRElSfS8u
Li8uLi8uLi8uLi9saWIvbGlic3RhbmQKKworIyBQaWNrIHVwIHRoZSBib290c3RyYXAgaGVhZGVy
IGZvciBzb21lIGludGVyZmFjZSBpdGVtcworQ0ZMQUdTKz0gLUkkey5DVVJESVJ9Ly4uLy4uL2Nv
bW1vbgorCisjIEhhbmRsZSBGcmVlQlNEIHNwZWNpZmljICViIGFuZCAlRCBwcmludGYgZm9ybWF0
IHNwZWNpZmllcnMKK0NGTEFHUys9ICR7Rk9STUFUX0VYVEVOU0lPTlN9CitDRkxBR1MrPSAtRFRF
Uk1fRU1VCisKKy5pbmNsdWRlIDxic2QubGliLm1rPgpkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9k
cml2ZXJzL2VmaV9kcml2ZXJzLmggc3lzL2Jvb3QvZWZpL2RyaXZlcnMvZWZpX2RyaXZlcnMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGM1OTlkMTdhZjkKLS0tIC9k
ZXYvbnVsbAorKysgc3lzL2Jvb3QvZWZpL2RyaXZlcnMvZWZpX2RyaXZlcnMuaApAQCAtMCwwICsx
LDQyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNiBFcmljIE1jQ29ya2xlCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYgX0VGSV9EUklW
RVJTX0hfCisjZGVmaW5lIF9FRklfRFJJVkVSU19IXworCit0eXBlZGVmIHN0cnVjdCBlZmlfZHJp
dmVyX3QgeworICAgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgICB2b2lkICgqaW5pdCko
dm9pZCk7Cit9IGVmaV9kcml2ZXJfdDsKKworZXh0ZXJuIHN0cnVjdCBkZXZzdyBlZmlwYXJ0X2Rl
djsKKworLyogRUZJIGRyaXZlcnMuICovCitleHRlcm4gY29uc3QgZWZpX2RyaXZlcl90IGZzX2Ry
aXZlcjsKKworI2VuZGlmCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2xpYmVmaS9lZmlwYXJ0LmMg
c3lzL2Jvb3QvZWZpL2RyaXZlcnMvZWZpcGFydC5jCnNpbWlsYXJpdHkgaW5kZXggNzUlCnJlbmFt
ZSBmcm9tIHN5cy9ib290L2VmaS9saWJlZmkvZWZpcGFydC5jCnJlbmFtZSB0byBzeXMvYm9vdC9l
ZmkvZHJpdmVycy9lZmlwYXJ0LmMKaW5kZXggNWE5OTM4MTJiY2UuLjNlM2E5YzA0YTE3IDEwMDY0
NAotLS0gc3lzL2Jvb3QvZWZpL2xpYmVmaS9lZmlwYXJ0LmMKKysrIHN5cy9ib290L2VmaS9kcml2
ZXJzL2VmaXBhcnQuYwpAQCAtNzQsOTAgKzc0LDEwOSBAQCBzdGF0aWMgaW50IG5wZGluZm8gPSAw
OwogCiAjZGVmaW5lIFBEKGRldikgICAgICAgICAocGRpbmZvWyhkZXYpLT5kX3VuaXRdKQogCitz
dGF0aWMgRUZJX1NUQVRVUworZWZpcGFydF9zdXBwb3J0ZWQoRUZJX0RSSVZFUl9CSU5ESU5HICpU
aGlzLCBFRklfSEFORExFIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgIEVGSV9ERVZJQ0VfUEFU
SCAqUmVtYWluaW5nRGV2aWNlUGF0aCBfX3VudXNlZCkKK3sKKyAgICAgICAgcmV0dXJuIEJTLT5P
cGVuUHJvdG9jb2woaGFuZGxlLCAmYmxraW9fZ3VpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlVMTCwgSUgsIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRUZJX09QRU5fUFJPVE9DT0xfVEVTVF9QUk9UT0NPTCk7Cit9CisKK3N0YXRpYyBFRklfU1RB
VFVTCitlZmlwYXJ0X3N0YXJ0KEVGSV9EUklWRVJfQklORElORyAqVGhpcywgRUZJX0hBTkRMRSBo
YW5kbGUsCisgICAgICAgICAgICAgIEVGSV9ERVZJQ0VfUEFUSCAqUmVtYWluaW5nRGV2aWNlUGF0
aCBfX3VudXNlZCwKKyAgICAgICAgICAgICAgdV9pbnQqIG5kaXNrLCB1aW50KiBucmRpc2spCit7
CisgICAgICAgIEVGSV9CTE9DS19JTyAqYmxraW87CisgICAgICAgIEVGSV9ERVZJQ0VfUEFUSCAq
ZGV2cGF0aCwgKmRldnBhdGhjcHksICp0bXBkZXZwYXRoLCAqbm9kZTsKKwlFRklfU1RBVFVTIHN0
YXR1czsKKyAgICAgICAgRUZJX0hBTkRMRSBhbGlhczsKKworICAgICAgICBkZXZwYXRoID0gZWZp
X2xvb2t1cF9kZXZwYXRoKGhhbmRsZSk7CisKKyAgICAgICAgaWYgKGRldnBhdGggPT0gTlVMTCkg
eworICAgICAgICAgICAgICAgIHJldHVybiAoRUZJX0RFVklDRV9FUlJPUik7CisgICAgICAgIH0K
KworICAgICAgICBzdGF0dXMgPSBCUy0+SGFuZGxlUHJvdG9jb2woaGFuZGxlLCAmYmxraW9fZ3Vp
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiopJmJsa2lvKTsK
KyAgICAgICAgaWYgKEVGSV9FUlJPUihzdGF0dXMpKQorICAgICAgICAgICAgICAgIHJldHVybiAo
c3RhdHVzKTsKKworICAgICAgICBpZiAoIWJsa2lvLT5NZWRpYS0+TG9naWNhbFBhcnRpdGlvbikg
eworICAgICAgICAgICAgICAgICpucmRpc2srKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEVG
SV9VTlNVUFBPUlRFRCk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBJZiB3
ZSBjb21lIGFjcm9zcyBhIGxvZ2ljYWwgcGFydGl0aW9uIG9mIHN1YnR5cGUgQ0RST00KKyAgICAg
ICAgICogaXQgZG9lc24ndCByZWZlciB0byB0aGUgQ0QgZmlsZXN5c3RlbSBpdHNlbGYsIGJ1dCBy
YXRoZXIKKyAgICAgICAgICogdG8gYW55IHVzYWJsZSBFbCBUb3JpdG8gYm9vdCBpbWFnZSBvbiBp
dC4gSW4gdGhpcyBjYXNlCisgICAgICAgICAqIHdlIHRyeSB0byBmaW5kIHRoZSBwYXJlbnQgZGV2
aWNlIGFuZCBhZGQgdGhhdCBpbnN0ZWFkIGFzCisgICAgICAgICAqIHRoYXQgd2lsbCBiZSB0aGUg
Q0QgZmlsZXN5c3RlbS4KKyAgICAgICAgICovCisgICAgICAgIG5vZGUgPSBlZmlfZGV2cGF0aF9s
YXN0X25vZGUoZGV2cGF0aCk7CisgICAgICAgIGlmIChEZXZpY2VQYXRoVHlwZShub2RlKSA9PSBN
RURJQV9ERVZJQ0VfUEFUSCAmJgorICAgICAgICAgICAgRGV2aWNlUGF0aFN1YlR5cGUobm9kZSkg
PT0gTUVESUFfQ0RST01fRFApIHsKKyAgICAgICAgICAgICAgICBkZXZwYXRoY3B5ID0gZWZpX2Rl
dnBhdGhfdHJpbShkZXZwYXRoKTsKKyAgICAgICAgICAgICAgICB0bXBkZXZwYXRoID0gZGV2cGF0
aGNweTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBCUy0+TG9jYXRlRGV2aWNlUGF0aCgmYmxr
aW9fZ3VpZCwgJnRtcGRldnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmFsaWFzKTsKKyAgICAgICAgICAgICAgICBmcmVlKGRldnBhdGhjcHkpOwor
CisgICAgICAgICAgICAgICAgaWYgKEVGSV9FUlJPUihzdGF0dXMpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIChzdGF0dXMpOworCisgICAgICAgICAgICAgICAgZWZpX3JlZ2lzdGVy
X2hhbmRsZSgmZWZpcGFydF9kZXYsIGhhbmRsZSwgYWxpYXMpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBlZmlfcmVnaXN0ZXJfaGFuZGxlKCZlZmlwYXJ0X2RldiwgaGFuZGxlLCBO
VUxMKTsKKworICAgICAgICBwZGluZm9bbnBkaW5mb10ucGRfb3BlbiA9IDA7CisgICAgICAgIHBk
aW5mb1tucGRpbmZvXS5wZF9iY2FjaGUgPSBOVUxMOworICAgICAgICBwZGluZm9bbnBkaW5mb10u
cGRfdW5pdCA9IG5wZGluZm87CisgICAgICAgIG5wZGluZm8rKzsKKyAgICAgICAgKm5kaXNrKys7
CisKKyAgICAgICAgcmV0dXJuIChFRklfU1VDQ0VTUyk7Cit9CisKIHN0YXRpYyBpbnQKLWVmaXBh
cnRfaW5pdCh2b2lkKSAKK2VmaXBhcnRfaW5pdCh2b2lkKQogewotCUVGSV9CTE9DS19JTyAqYmxr
aW87Ci0JRUZJX0RFVklDRV9QQVRIICpkZXZwYXRoLCAqZGV2cGF0aGNweSwgKnRtcGRldnBhdGgs
ICpub2RlOwotCUVGSV9IQU5ETEUgKmhpbiwgKmhvdXQsICphbGlhc2VzLCBoYW5kbGU7CisJRUZJ
X0hBTkRMRSAqaGFuZGxlczsKIAlFRklfU1RBVFVTIHN0YXR1czsKIAlVSU5UTiBzejsKLQl1X2lu
dCBuLCBuaW4sIG5vdXQsIG5yZGlzazsKKyAgICAgICAgdV9pbnQgbiwgbmluLCBuZGlzaywgbnJk
aXNrOwogCWludCBlcnI7CiAKIAlzeiA9IDA7Ci0JaGluID0gTlVMTDsKKwloYW5kbGVzID0gTlVM
TDsKIAlzdGF0dXMgPSBCUy0+TG9jYXRlSGFuZGxlKEJ5UHJvdG9jb2wsICZibGtpb19ndWlkLCAw
LCAmc3osIDApOwogCWlmIChzdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsKLQkJaGlu
ID0gKEVGSV9IQU5ETEUgKiltYWxsb2Moc3ogKiAzKTsKKwkJaGFuZGxlcyA9IChFRklfSEFORExF
ICopbWFsbG9jKHN6KTsKIAkJc3RhdHVzID0gQlMtPkxvY2F0ZUhhbmRsZShCeVByb3RvY29sLCAm
YmxraW9fZ3VpZCwgMCwgJnN6LAotCQkgICAgaGluKTsKKwkJICAgIGhhbmRsZXMpOwogCQlpZiAo
RUZJX0VSUk9SKHN0YXR1cykpCi0JCQlmcmVlKGhpbik7CisJCQlmcmVlKGhhbmRsZXMpOwogCX0K
IAlpZiAoRUZJX0VSUk9SKHN0YXR1cykpCiAJCXJldHVybiAoZWZpX3N0YXR1c190b19lcnJubyhz
dGF0dXMpKTsKIAogCS8qIEZpbHRlciBoYW5kbGVzIHRvIG9ubHkgaW5jbHVkZSBGcmVlQlNEIHBh
cnRpdGlvbnMuICovCiAJbmluID0gc3ogLyBzaXplb2YoRUZJX0hBTkRMRSk7Ci0JaG91dCA9IGhp
biArIG5pbjsKLQlhbGlhc2VzID0gaG91dCArIG5pbjsKLQlub3V0ID0gMDsKLQlucmRpc2sgPSAw
OwotCi0JYnplcm8oYWxpYXNlcywgbmluICogc2l6ZW9mKEVGSV9IQU5ETEUpKTsKIAlwZGluZm8g
PSBtYWxsb2MobmluICogc2l6ZW9mKCpwZGluZm8pKTsKLQlpZiAocGRpbmZvID09IE5VTEwpCi0J
CXJldHVybiAoRU5PTUVNKTsKKyAgICAgICAgbmRpc2sgPSAwOworICAgICAgICBucmRpc2sgPSAw
OwogCiAJZm9yIChuID0gMDsgbiA8IG5pbjsgbisrKSB7Ci0JCWRldnBhdGggPSBlZmlfbG9va3Vw
X2RldnBhdGgoaGluW25dKTsKLQkJaWYgKGRldnBhdGggPT0gTlVMTCkgewotCQkJY29udGludWU7
Ci0JCX0KLQotCQlzdGF0dXMgPSBCUy0+SGFuZGxlUHJvdG9jb2woaGluW25dLCAmYmxraW9fZ3Vp
ZCwKLQkJICAgICh2b2lkKiopJmJsa2lvKTsKLQkJaWYgKEVGSV9FUlJPUihzdGF0dXMpKQotCQkJ
Y29udGludWU7Ci0JCWlmICghYmxraW8tPk1lZGlhLT5Mb2dpY2FsUGFydGl0aW9uKSB7Ci0JCQlu
cmRpc2srKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICogSWYgd2UgY29tZSBhY3Jv
c3MgYSBsb2dpY2FsIHBhcnRpdGlvbiBvZiBzdWJ0eXBlIENEUk9NCi0JCSAqIGl0IGRvZXNuJ3Qg
cmVmZXIgdG8gdGhlIENEIGZpbGVzeXN0ZW0gaXRzZWxmLCBidXQgcmF0aGVyCi0JCSAqIHRvIGFu
eSB1c2FibGUgRWwgVG9yaXRvIGJvb3QgaW1hZ2Ugb24gaXQuIEluIHRoaXMgY2FzZQotCQkgKiB3
ZSB0cnkgdG8gZmluZCB0aGUgcGFyZW50IGRldmljZSBhbmQgYWRkIHRoYXQgaW5zdGVhZCBhcwot
CQkgKiB0aGF0IHdpbGwgYmUgdGhlIENEIGZpbGVzeXN0ZW0uCi0JCSAqLwotCQlub2RlID0gZWZp
X2RldnBhdGhfbGFzdF9ub2RlKGRldnBhdGgpOwotCQlpZiAoRGV2aWNlUGF0aFR5cGUobm9kZSkg
PT0gTUVESUFfREVWSUNFX1BBVEggJiYKLQkJICAgIERldmljZVBhdGhTdWJUeXBlKG5vZGUpID09
IE1FRElBX0NEUk9NX0RQKSB7Ci0JCQlkZXZwYXRoY3B5ID0gZWZpX2RldnBhdGhfdHJpbShkZXZw
YXRoKTsKLQkJCXRtcGRldnBhdGggPSBkZXZwYXRoY3B5OwotCQkJc3RhdHVzID0gQlMtPkxvY2F0
ZURldmljZVBhdGgoJmJsa2lvX2d1aWQsICZ0bXBkZXZwYXRoLAotCQkJICAgICZoYW5kbGUpOwot
CQkJZnJlZShkZXZwYXRoY3B5KTsKLQkJCWlmIChFRklfRVJST1Ioc3RhdHVzKSkKLQkJCQljb250
aW51ZTsKLQkJCWhvdXRbbm91dF0gPSBoYW5kbGU7Ci0JCQlhbGlhc2VzW25vdXRdID0gaGluW25d
OwotCQl9IGVsc2UKLQkJCWhvdXRbbm91dF0gPSBoaW5bbl07Ci0JCW5vdXQrKzsKLQkJcGRpbmZv
W25wZGluZm9dLnBkX29wZW4gPSAwOwotCQlwZGluZm9bbnBkaW5mb10ucGRfYmNhY2hlID0gTlVM
TDsKLQkJcGRpbmZvW25wZGluZm9dLnBkX3VuaXQgPSBucGRpbmZvOwotCQlucGRpbmZvKys7Cisg
ICAgICAgICAgICAgICAgZWZpcGFydF9zdGFydChOVUxMLCBoYW5kbGVzW25dLCBOVUxMLCAmbmRp
c2ssICZucmRpc2spOwogCX0KIAogCWJjYWNoZV9hZGRfZGV2KG5wZGluZm8pOwotCWVyciA9IGVm
aV9yZWdpc3Rlcl9oYW5kbGVzKCZlZmlwYXJ0X2RldiwgaG91dCwgYWxpYXNlcywgbm91dCk7Ci0J
ZnJlZShoaW4pOworCWZyZWUoaGFuZGxlcyk7CiAKLQlpZiAobm91dCA9PSAwICYmIG5yZGlzayA+
IDApCisJaWYgKG5kaXNrID09IDAgJiYgbnJkaXNrID4gMCkKIAkJcHJpbnRmKCJGb3VuZCAlZCBk
aXNrKHMpIGJ1dCBubyBsb2dpY2FsIHBhcnRpdGlvblxuIiwgbnJkaXNrKTsKIAlyZXR1cm4gKGVy
cik7CiB9CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2RyaXZlcnMvZnNfZHJpdmVyLmMgc3lzL2Jv
b3QvZWZpL2RyaXZlcnMvZnNfZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmI5Yzg1MzYyYTcxCi0tLSAvZGV2L251bGwKKysrIHN5cy9ib290L2VmaS9kcml2
ZXJzL2ZzX2RyaXZlci5jCkBAIC0wLDAgKzEsODUzIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg
MjAxNiBFcmljIE1jQ29ya2xlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNE
JAorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNs
dWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3Bh
cmFtLmg+CisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjaW5jbHVkZSA8ZWZpLmg+CisjaW5jbHVk
ZSA8ZWZpbGliLmg+CisjaW5jbHVkZSA8ZWZpcHJvdC5oPgorI2luY2x1ZGUgPHN0cmluZzE2Lmg+
CisjaWZkZWYgRUZJX1pGU19CT09UCisjaW5jbHVkZSA8bGliemZzLmg+CisjZW5kaWYKKyNpbmNs
dWRlIDxib290c3RyYXAuaD4KKworI2luY2x1ZGUgImVmaV9kcml2ZXJzLmgiCisKK3N0YXRpYyBF
RklfR1VJRCBTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlEID0gU0lNUExFX0ZJTEVfU1lTVEVN
X1BST1RPQ09MOworCitzdGF0aWMgc3RydWN0IGZzX29wcyAqYmFja2VuZF9maWxlX3N5c3RlbVtd
ID0geworCSZkb3Nmc19mc29wcywKKwkmdWZzX2Zzb3BzLAorCSZjZDk2NjBfZnNvcHMsCisJJnRm
dHBfZnNvcHMsCisJJm5mc19mc29wcywKKwkmZ3ppcGZzX2Zzb3BzLAorCSZiemlwZnNfZnNvcHMs
CisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBkZXZzdyAqYmFja2VuZF9kZXZzd1tdID0gewor
CSZlZmlwYXJ0X2RldiwKKyNpZmRlZiBFRklfWkZTX0JPT1QKKwkmemZzX2RldiwKKyNlbmRpZgor
CU5VTEwKK307CisKK3R5cGVkZWYgc3RydWN0IHZvbGluZm9fdCB7CisgICAgICAgIHN0cnVjdCBm
c19vcHMgKmZzb3BzOworICAgICAgICBzdHJ1Y3QgZGV2ZGVzYyAqZGV2OworfSB2b2xpbmZvX3Q7
CisKK3R5cGVkZWYgc3RydWN0IGZpbGVpbmZvX3QgeworICAgICAgICBjb25zdCB2b2xpbmZvX3Qq
IHZpbmZvOworICAgICAgICBzdHJ1Y3Qgb3Blbl9maWxlIGZkYXRhOworICAgICAgICBjaGFyIHBh
dGhbXTsKK30gZmlsZWluZm9fdDsKKworc3RhdGljIEVGSV9HVUlEIEZpbGVJbmZvR1VJRCA9IEVG
SV9GSUxFX0lORk9fSUQ7OworCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfb3Blbl9p
bXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlLCBFRklfRklMRV9IQU5ETEUgKk5ld0hhbmRsZSwKKyAg
ICAgICAgICAgICAgIENIQVIxNiAqRmlsZU5hbWUsIFVJTlQ2NCBPcGVuTW9kZSwgVUlOVDY0IEF0
dHJpYnV0ZXMpOworCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfY2xvc2VfaW1wbChF
RklfRklMRV9IQU5ETEUgRmlsZSk7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZmlsZV9k
ZWxldGVfaW1wbChFRklfRklMRV9IQU5ETEUgRmlsZSk7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NU
QVRVUworZGlyX3JlYWRfaW1wbChFRklfRklMRV9IQU5ETEUgRmlsZSwgVUlOVE4gKkJ1ZmZlclNp
emUsIFZPSUQgKkJ1ZmZlcik7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZGlyX3dyaXRl
X2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlROICpCdWZmZXJTaXplLAorICAgICAgICAg
ICAgICAgVk9JRCAqQnVmZmVyKTsKKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxlX3Jl
YWRfaW1wbChFRklfRklMRV9IQU5ETEUgRmlsZSwgVUlOVE4gKkJ1ZmZlclNpemUsIFZPSUQgKkJ1
ZmZlcik7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZmlsZV93cml0ZV9pbXBsKEVGSV9G
SUxFX0hBTkRMRSBGaWxlLCBVSU5UTiAqQnVmZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICBWT0lE
ICpCdWZmZXIpOworCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfc2V0X3Bvc2l0aW9u
X2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlQ2NCBQb3NpdGlvbik7CisKK3N0YXRpYyBF
RklBUEkgRUZJX1NUQVRVUworZmlsZV9nZXRfcG9zaXRpb25faW1wbChFRklfRklMRV9IQU5ETEUg
RmlsZSwgVUlOVDY0ICpQb3NpdGlvbik7CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZmls
ZV9nZXRfaW5mb19pbXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlLCBFRklfR1VJRCAqSW5mb3JtYXRp
b25UeXBlLAorICAgICAgICAgICAgICAgICAgIFVJTlROICpCdWZmZXJTaXplLCBWT0lEICpCdWZm
ZXIpOworCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfc2V0X2luZm9faW1wbChFRklf
RklMRV9IQU5ETEUgRmlsZSwgRUZJX0dVSUQgKkluZm9ybWF0aW9uVHlwZSwKKyAgICAgICAgICAg
ICAgICAgICBVSU5UTiBCdWZmZXJTaXplLCBWT0lEICpCdWZmZXIpOworCitzdGF0aWMgRUZJQVBJ
IEVGSV9TVEFUVVMKK2ZpbGVfZmx1c2hfaW1wbChFRklfRklMRV9IQU5ETEUgRmlsZSk7CisKK3N0
YXRpYyBzdHJ1Y3QgZGV2ZGVzYyoKK2Nsb25lX2RldmRlc2Moc3RydWN0IGRldmRlc2MgKmRldikK
K3sKKyAgICAgICAgc3RydWN0IGRldmRlc2MgKm91dDsKKworICAgICAgICBzd2l0Y2goZGV2LT5k
X2Rldi0+ZHZfdHlwZSkgeworICAgICAgICBjYXNlIERFVlRfWkZTOgorICAgICAgICAgICAgICAg
IG91dCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHpmc19kZXZkZXNjKSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAob3V0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
VUxMOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1lbWNweShvdXQsIGRl
diwgc2l6ZW9mKHN0cnVjdCB6ZnNfZGV2ZGVzYykpOworCisgICAgICAgICAgICAgICAgcmV0dXJu
IG91dDsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG91dCA9IG1hbGxvYyhz
aXplb2Yoc3RydWN0IGRldmRlc2MpKTsKKworICAgICAgICAgICAgICAgIGlmIChvdXQgPT0gTlVM
TCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgbWVtY3B5KG91dCwgZGV2LCBzaXplb2Yoc3RydWN0IGRl
dmRlc2MpKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7CisgICAgICAgIH0KK30KKwor
c3RhdGljIEVGSV9TVEFUVVMKK2RvX2ZpbGVfb3Blbihjb25zdCB2b2xpbmZvX3QgKnZpbmZvLCBj
b25zdCBjaGFyIGZpbGVwYXRoW10sCisgICAgICAgICAgICAgaW50IG1vZGUsIEVGSV9GSUxFX0hB
TkRMRSAqb3V0KQoreworICAgICAgICBFRklfRklMRV9IQU5ETEUgZmhhbmRsZTsKKyAgICAgICAg
ZmlsZWluZm9fdCAqZmluZm87CisgICAgICAgIHN0cnVjdCBzdGF0IHN0OworICAgICAgICBzdHJ1
Y3QgZGV2ZGVzYyAqdG1wZGV2OworCWludCBlcnI7CisKKyAgICAgICAgbWVtc2V0KCZzdCwgMCwg
c2l6ZW9mKHN0cnVjdCBzdGF0KSk7CisgICAgICAgIGZoYW5kbGUgPSBtYWxsb2Moc2l6ZW9mKEVG
SV9GSUxFKSArIHNpemVvZihmaWxlaW5mb190KSArCisgICAgICAgICAgICAgICAgICAgICAgICAg
c3RybGVuKGZpbGVwYXRoKSArIDEpOworCisgICAgICAgIGlmIChmaGFuZGxlID09IE5VTEwpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gKEVGSV9PVVRfT0ZfUkVTT1VSQ0VTKTsKKyAgICAgICAg
fQorCisgICAgICAgIHRtcGRldiA9IGNsb25lX2RldmRlc2ModmluZm8tPmRldik7CisKKyAgICAg
ICAgaWYgKHRtcGRldiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZnJlZShmaGFuZGxlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gKEVGSV9PVVRfT0ZfUkVTT1VSQ0VTKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZpbmZvID0gKGZpbGVpbmZvX3QqKShmaGFuZGxlICsgMSk7CisgICAgICAg
IGZpbmZvLT5mZGF0YS5mX2ZsYWdzID0gbW9kZSArIDE7CisgICAgICAgIGZpbmZvLT5mZGF0YS5m
X2RldiA9IE5VTEw7CisgICAgICAgIGZpbmZvLT5mZGF0YS5mX29wcyA9IE5VTEw7CisgICAgICAg
IGZpbmZvLT5mZGF0YS5mX29mZnNldCA9IDA7CisgICAgICAgIGZpbmZvLT5mZGF0YS5mX2RldmRh
dGEgPSBOVUxMOworCisgICAgICAgIGlmICgoZXJyID0gdmluZm8tPmRldi0+ZF9kZXYtPmR2X29w
ZW4oJihmaW5mby0+ZmRhdGEpLCB0bXBkZXYpKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgZnJl
ZShmaGFuZGxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGVycm5vX3RvX2VmaV9zdGF0dXMo
ZXJyKSk7CisgICAgICAgIH0KKworICAgICAgICBmaW5mby0+ZmRhdGEuZl9kZXYgPSB2aW5mby0+
ZGV2LT5kX2RldjsKKworICAgICAgICBpZiAoKGVyciA9IHZpbmZvLT5mc29wcy0+Zm9fb3Blbihm
aWxlcGF0aCwgJihmaW5mby0+ZmRhdGEpKSkgIT0gMCkgeworICAgICAgICAgICAgICAgIGZyZWUo
ZmhhbmRsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChlcnJub190b19lZmlfc3RhdHVzKGVy
cikpOworICAgICAgICB9CisKKyAgICAgICAgZmluZm8tPmZkYXRhLmZfb3BzID0gdmluZm8tPmZz
b3BzOworCisgICAgICAgIGlmICgoZXJyID0gdmluZm8tPmZzb3BzLT5mb19zdGF0KCYoZmluZm8t
PmZkYXRhKSwgJnN0KSkgIT0gMCkgeworICAgICAgICAgICAgICAgIGZyZWUoZmhhbmRsZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIChlcnJub190b19lZmlfc3RhdHVzKGVycikpOworICAgICAg
ICB9CisKKyAgICAgICAgc3RyY3B5KGZpbmZvLT5wYXRoLCBmaWxlcGF0aCk7CisgICAgICAgIGZp
bmZvLT52aW5mbyA9IHZpbmZvOworICAgICAgICBmaGFuZGxlLT5SZXZpc2lvbiA9IEVGSV9GSUxF
X0hBTkRMRV9SRVZJU0lPTjsKKyAgICAgICAgZmhhbmRsZS0+T3BlbiA9IGZpbGVfb3Blbl9pbXBs
OworICAgICAgICBmaGFuZGxlLT5DbG9zZSA9IGZpbGVfY2xvc2VfaW1wbDsKKyAgICAgICAgZmhh
bmRsZS0+RGVsZXRlID0gZmlsZV9kZWxldGVfaW1wbDsKKyAgICAgICAgZmhhbmRsZS0+U2V0UG9z
aXRpb24gPSBmaWxlX3NldF9wb3NpdGlvbl9pbXBsOworICAgICAgICBmaGFuZGxlLT5HZXRQb3Np
dGlvbiA9IGZpbGVfZ2V0X3Bvc2l0aW9uX2ltcGw7CisgICAgICAgIGZoYW5kbGUtPkdldEluZm8g
PSBmaWxlX2dldF9pbmZvX2ltcGw7CisgICAgICAgIGZoYW5kbGUtPlNldEluZm8gPSBmaWxlX3Nl
dF9pbmZvX2ltcGw7CisgICAgICAgIGZoYW5kbGUtPkZsdXNoID0gZmlsZV9mbHVzaF9pbXBsOwor
CisgICAgICAgIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisgICAgICAgICAgICAgICAgZmhh
bmRsZS0+UmVhZCA9IGRpcl9yZWFkX2ltcGw7CisgICAgICAgICAgICAgICAgZmhhbmRsZS0+V3Jp
dGUgPSBkaXJfd3JpdGVfaW1wbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBm
aGFuZGxlLT5SZWFkID0gZmlsZV9yZWFkX2ltcGw7CisgICAgICAgICAgICAgICAgZmhhbmRsZS0+
V3JpdGUgPSBmaWxlX3dyaXRlX2ltcGw7CisgICAgICAgIH0KKworICAgICAgICAqb3V0ID0gZmhh
bmRsZTsKKworICAgICAgICByZXR1cm4gKEVGSV9TVUNDRVNTKTsKK30KKworc3RhdGljIGludAor
bW9kZV9mcm9tX2VmaShVSU5UNjQgZWZpX21vZGUpCit7CisgICAgICAgIGludCBtb2RlID0gMDsK
KworICAgICAgICBpZiAoZWZpX21vZGUgJiBFRklfRklMRV9NT0RFX1dSSVRFKSB7CisgICAgICAg
ICAgICAgICAgbW9kZSB8PSBPX1dST05MWTsKKyAgICAgICAgfSBlbHNlIGlmIChlZmlfbW9kZSAm
IEVGSV9GSUxFX01PREVfUkVBRCkgeworICAgICAgICAgICAgICAgIG1vZGUgfD0gT19SRE9OTFk7
CisgICAgICAgIH0gZWxzZSBpZiAoZWZpX21vZGUgJiBFRklfRklMRV9NT0RFX1JFQUQgJiYKKyAg
ICAgICAgICAgICAgICAgICBlZmlfbW9kZSAmIEVGSV9GSUxFX01PREVfV1JJVEUpIHsKKyAgICAg
ICAgICAgICAgICBtb2RlIHw9IE9fUkRXUjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBt
b2RlOworfQorCitzdGF0aWMgVUlOVDY0Cittb2RlX3RvX2VmaShpbnQgbW9kZSkKK3sKKyAgICAg
ICAgVUlOVDY0IGVmaV9tb2RlID0gMDsKKworICAgICAgICBpZiAobW9kZSAmIE9fV1JPTkxZKSB7
CisgICAgICAgICAgICAgICAgZWZpX21vZGUgfD0gRUZJX0ZJTEVfTU9ERV9XUklURTsKKyAgICAg
ICAgfSBlbHNlIGlmIChtb2RlICYgT19SRE9OTFkpIHsKKyAgICAgICAgICAgICAgICBlZmlfbW9k
ZSB8PSBFRklfRklMRV9NT0RFX1JFQUQ7CisgICAgICAgIH0gZWxzZSBpZiAobW9kZSAmIE9fUkRX
UikgeworICAgICAgICAgICAgICAgIGVmaV9tb2RlIHw9IEVGSV9GSUxFX01PREVfUkVBRDsKKyAg
ICAgICAgICAgICAgICBlZmlfbW9kZSB8PSBFRklfRklMRV9NT0RFX1dSSVRFOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIChlZmlfbW9kZSk7Cit9CisKK3N0YXRpYyBFRklBUEkgRUZJX1NU
QVRVUworZmlsZV9vcGVuX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIEVGSV9GSUxFX0hBTkRM
RSAqTmV3SGFuZGxlLAorICAgICAgICAgICAgICAgQ0hBUjE2ICpGaWxlTmFtZSwgVUlOVDY0IE9w
ZW5Nb2RlLCBVSU5UNjQgQXR0cmlidXRlcykKK3sKKyAgICAgICAgZmlsZWluZm9fdCAqZmluZm8g
PSAoZmlsZWluZm9fdCopKEZpbGUgKyAxKTsKKyAgICAgICAgY2hhciBidWZbc3RybGVuKGZpbmZv
LT5wYXRoKSArIHN0cmxlbjE2KEZpbGVOYW1lKSArIDFdOworCisgICAgICAgIHN0cmNweV9mcm9t
XzE2KHN0cGNweShidWYsIGZpbmZvLT5wYXRoKSwgRmlsZU5hbWUpOworCisgICAgICAgIHJldHVy
biBkb19maWxlX29wZW4oZmluZm8tPnZpbmZvLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbW9kZV9mcm9tX2VmaShPcGVuTW9kZSksIE5ld0hhbmRsZSk7Cit9CisKK3N0YXRpYyBF
RklBUEkgRUZJX1NUQVRVUworZmlsZV9jbG9zZV9pbXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlKQor
eworICAgICAgICBmaWxlaW5mb190ICpmaW5mbyA9IChmaWxlaW5mb190KikoRmlsZSArIDEpOwor
ICAgICAgICBpbnQgcmVzOworCisgICAgICAgIGlmICgocmVzID0gZmluZm8tPmZkYXRhLmZfb3Bz
LT5mb19jbG9zZSgmKGZpbmZvLT5mZGF0YSkpKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIChlcnJub190b19lZmlfc3RhdHVzKHJlcykpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KChyZXMgPSBmaW5mby0+dmluZm8tPmRldi0+ZF9kZXYtPmR2X2Nsb3NlKCYoZmluZm8tPmZkYXRh
KSkpICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGVycm5vX3RvX2VmaV9zdGF0dXMo
cmVzKSk7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKEZpbGUpOworICAgICAgICByZXR1cm4g
KEVGSV9TVUNDRVNTKTsKK30KKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxlX2RlbGV0
ZV9pbXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlKQoreworICAgICAgICBmaWxlX2Nsb3NlX2ltcGwo
RmlsZSk7CisKKyAgICAgICAgcmV0dXJuIChFRklfV0FSTl9ERUxFVEVfRkFJTFVSRSk7Cit9CisK
K3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZGlyX3JlYWRfaW1wbChFRklfRklMRV9IQU5ETEUg
RmlsZSwgVUlOVE4gKkJ1ZmZlclNpemUsIFZPSUQgKkJ1ZmZlcikKK3sKKyAgICAgICAgZmlsZWlu
Zm9fdCAqZmluZm8gPSAoZmlsZWluZm9fdCopKEZpbGUgKyAxKTsKKyAgICAgICAgZmlsZWluZm9f
dCAqZW50aW5mbzsKKyAgICAgICAgc3RydWN0IGRpcmVudCBkOworICAgICAgICBzdHJ1Y3Qgc3Rh
dCBzdDsKKyAgICAgICAgaW50IGVycjsKKyAgICAgICAgVUlOVE4gY3VycnNpemUgPSAqQnVmZmVy
U2l6ZTsKKyAgICAgICAgVUlOVE4gcmVxc2l6ZTsKKyAgICAgICAgRUZJX0ZJTEVfSU5GTyAqb3V0
ID0gKEVGSV9GSUxFX0lORk8qKUJ1ZmZlcjsKKyAgICAgICAgRUZJX0ZJTEVfSEFORExFIGVudGhh
bmRsZTsKKyAgICAgICAgRUZJX1NUQVRVUyBzdGF0dXM7CisgICAgICAgIG9mZl90IGN1cnJwb3M7
CisKKyAgICAgICAgLyogUmVjb3JkIHRlaCBjdXJyZW50IHBvc2l0aW9uIHNvIHdlIGNhbiByZXdp
bmQgaWYgd2UgaGF2ZSB0byAqLworICAgICAgICBpZiAoKGN1cnJwb3MgPSBmaW5mby0+ZmRhdGEu
Zl9vcHMtPmZvX3NlZWsoJihmaW5mby0+ZmRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBTRUVLX0NVUikpIDwgMCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiAoZXJybm9fdG9fZWZpX3N0YXR1cyhlcnJubykpOworICAgICAgICB9CisK
KwlpZiAoKGVyciA9IGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fcmVhZGRpcigmKGZpbmZvLT5mZGF0
YSksICZkKSkgIT0gMCkgeworCQlyZXR1cm4gKGVycm5vX3RvX2VmaV9zdGF0dXMoZXJybm8pKTsK
Kwl9CisKKyAgICAgICAgcmVxc2l6ZSA9IHNpemVvZihFRklfRklMRV9JTkZPKSArCisgICAgICAg
ICAgKChzdHJsZW4oZC5kX25hbWUpICsgMSkgKiBzaXplb2YoQ0hBUjE2KSk7CisKKyAgICAgICAg
aWYgKEJ1ZmZlciA9PSBOVUxMIHx8IGN1cnJzaXplIDwgcmVxc2l6ZSkgeworICAgICAgICAgICAg
ICAgIGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fc2VlaygmKGZpbmZvLT5mZGF0YSksIGN1cnJwb3Ms
IFNFRUtfU0VUKTsKKyAgICAgICAgICAgICAgICAqQnVmZmVyU2l6ZSA9IHJlcXNpemU7CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gKEVGSV9CVUZGRVJfVE9PX1NNQUxMKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFdlIGhhdmUgdG8gYWN0dWFsbHkgb3BlbiB0aGUgZmlsZSwgc2luY2UgRUZJ
IGRpcmVjdG9yeQorICAgICAgICAvLyByZWFkcyBhcmUgc3VwcG9zZWQgdG8gcmV0dXJuIHN0YXQg
aW5mb3JtYXRpb24uCisgICAgICAgIENIQVIxNiBidWZbZC5kX25hbWxlbl07CisgICAgICAgIHN0
cmNweV90b18xNihidWYsIGQuZF9uYW1lKTsKKyAgICAgICAgc3RhdHVzID0gZmlsZV9vcGVuX2lt
cGwoRmlsZSwgJmVudGhhbmRsZSwgYnVmLCBFRklfRklMRV9SRUFEX09OTFksIDApOworCisgICAg
ICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIGZpbmZvLT5mZGF0
YS5mX29wcy0+Zm9fc2VlaygmKGZpbmZvLT5mZGF0YSksIGN1cnJwb3MsIFNFRUtfU0VUKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gKHN0YXR1cyk7CisgICAgICAgIH0KKworICAgICAgICBlbnRp
bmZvID0gKGZpbGVpbmZvX3QqKShlbnRoYW5kbGUgKyAxKTsKKworICAgICAgICBpZiAoKGVyciA9
IGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fc3RhdCgmKGVudGluZm8tPmZkYXRhKSwgJnN0KSkgIT0g
MCkgeworICAgICAgICAgICAgICAgIGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fc2VlaygmKGZpbmZv
LT5mZGF0YSksIGN1cnJwb3MsIFNFRUtfU0VUKTsKKwkJcmV0dXJuIChlcnJub190b19lZmlfc3Rh
dHVzKGVycm5vKSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0dXMgPSBmaWxlX2Nsb3NlX2lt
cGwoZW50aGFuZGxlKTsKKworICAgICAgICBpZiAoRUZJX0VSUk9SKHN0YXR1cykpIHsKKyAgICAg
ICAgICAgICAgICBmaW5mby0+ZmRhdGEuZl9vcHMtPmZvX3NlZWsoJihmaW5mby0+ZmRhdGEpLCBj
dXJycG9zLCBTRUVLX1NFVCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGF0dXMpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gV2UncmUgZ29vZCBhdCB0aGlzIHBvaW50LCBjb3B5IGV2ZXJ5
dGhpbmcgaW50byBwbGFjZS4KKyAgICAgICAgb3V0LT5TaXplID0gcmVxc2l6ZTsKKyAgICAgICAg
b3V0LT5GaWxlU2l6ZSA9IHN0LnN0X3NpemU7CisgICAgICAgIG91dC0+UGh5c2ljYWxTaXplID0g
c3Quc3RfYmxvY2tzICogc3Quc3RfYmxrc2l6ZTsKKyAgICAgICAgb3V0LT5BdHRyaWJ1dGUgPSBt
b2RlX3RvX2VmaShzdC5zdF9tb2RlKTsKKyAgICAgICAgdG9fZWZpX3RpbWUoJihvdXQtPkxhc3RB
Y2Nlc3NUaW1lKSwgc3Quc3RfYXRpbWUpOworICAgICAgICB0b19lZmlfdGltZSgmKG91dC0+TW9k
aWZpY2F0aW9uVGltZSksIHN0LnN0X210aW1lKTsKKyAgICAgICAgdG9fZWZpX3RpbWUoJihvdXQt
PkNyZWF0ZVRpbWUpLCBzdC5zdF9jdGltZSk7CisKKyAgICAgICAgaWYgKFNfSVNESVIoc3Quc3Rf
bW9kZSkpIHsKKyAgICAgICAgICAgICAgICBvdXQtPkF0dHJpYnV0ZSB8PSBFRklfRklMRV9ESVJF
Q1RPUlk7CisgICAgICAgIH0KKworICAgICAgICBzdHJjcHlfdG9fMTYob3V0LT5GaWxlTmFtZSwg
ZC5kX25hbWUpOworICAgICAgICAqQnVmZmVyU2l6ZSA9IHJlcXNpemU7CisKKyAgICAgICAgcmV0
dXJuIChFRklfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZGlyX3dy
aXRlX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUgX191bnVzZWQsIFVJTlROICpCdWZmZXJTaXpl
IF9fdW51c2VkLAorICAgICAgICAgICAgICAgVk9JRCAqQnVmZmVyIF9fdW51c2VkKQoreworICAg
ICAgICAvLyBFRkkgQVBJIGRvZXNuJ3QgYWxsb3cgd3JpdGluZyB0byBkaXJlY3RvcmllcworICAg
ICAgICByZXR1cm4gKEVGSV9VTlNVUFBPUlRFRCk7Cit9CisKK3N0YXRpYyBFRklBUEkgRUZJX1NU
QVRVUworZmlsZV9yZWFkX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlROICpCdWZmZXJT
aXplLCBWT0lEICpCdWZmZXIpCit7CisgICAgICAgIGZpbGVpbmZvX3QgKmZpbmZvID0gKGZpbGVp
bmZvX3QqKShGaWxlICsgMSk7CisgICAgICAgIHNpemVfdCByZWFkc2l6ZSA9ICpCdWZmZXJTaXpl
OworICAgICAgICBzaXplX3QgcmVzaWQ7CisgICAgICAgIGludCBlcnI7CisKKwlpZiAoKGVyciA9
IGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fcmVhZCgmKGZpbmZvLT5mZGF0YSksIEJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHNpemUsICZy
ZXNpZCkpICE9IDApIHsKKwkJcmV0dXJuIChlcnJub190b19lZmlfc3RhdHVzKGVycm5vKSk7CisJ
fQorCisgICAgICAgICpCdWZmZXJTaXplID0gcmVhZHNpemUgLSByZXNpZDsKKworICAgICAgICBy
ZXR1cm4gKEVGSV9TVUNDRVNTKTsKK30KKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxl
X3dyaXRlX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlROICpCdWZmZXJTaXplLCBWT0lE
ICpCdWZmZXIpCit7CisgICAgICAgIGZpbGVpbmZvX3QgKmZpbmZvID0gKGZpbGVpbmZvX3QqKShG
aWxlICsgMSk7CisgICAgICAgIHNpemVfdCB3cml0ZXNpemUgPSAqQnVmZmVyU2l6ZTsKKyAgICAg
ICAgc2l6ZV90IHJlc2lkOworICAgICAgICBpbnQgZXJyOworCisJaWYgKChlcnIgPSBmaW5mby0+
ZmRhdGEuZl9vcHMtPmZvX3dyaXRlKCYoZmluZm8tPmZkYXRhKSwgQnVmZmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVzaXplLCAmcmVzaWQp
KSAhPSAwKSB7CisJCXJldHVybiAoZXJybm9fdG9fZWZpX3N0YXR1cyhlcnJubykpOworCX0KKwor
ICAgICAgICAqQnVmZmVyU2l6ZSA9IHdyaXRlc2l6ZSAtIHJlc2lkOworCisgICAgICAgIHJldHVy
biAoRUZJX1NVQ0NFU1MpOworfQorCitzdGF0aWMgRUZJQVBJIEVGSV9TVEFUVVMKK2ZpbGVfc2V0
X3Bvc2l0aW9uX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIFVJTlQ2NCBQb3NpdGlvbikKK3sK
KyAgICAgICAgZmlsZWluZm9fdCAqZmluZm8gPSAoZmlsZWluZm9fdCopKEZpbGUgKyAxKTsKKyAg
ICAgICAgaW50IHJlczsKKworICAgICAgICBpZiAoUG9zaXRpb24gIT0gMHhmZmZmZmZmZmZmZmZm
ZmZmTEwpIHsKKyAgICAgICAgICAgICAgICByZXMgPSBmaW5mby0+ZmRhdGEuZl9vcHMtPmZvX3Nl
ZWsoJihmaW5mby0+ZmRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQb3NpdGlvbiwgU0VFS19TRVQpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHJlcyA9IGZpbmZvLT5mZGF0YS5mX29wcy0+Zm9fc2VlaygmKGZpbmZvLT5m
ZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIFNFRUtfRU5EKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXMgPiAwKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIChFRklfU1VDQ0VTUyk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIChlcnJub190b19lZmlfc3RhdHVzKHJlcykpOworICAgICAgICB9
Cit9CisKKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxlX2dldF9wb3NpdGlvbl9pbXBs
KEVGSV9GSUxFX0hBTkRMRSBGaWxlLCBVSU5UNjQgKlBvc2l0aW9uKQoreworICAgICAgICBmaWxl
aW5mb190ICpmaW5mbyA9IChmaWxlaW5mb190KikoRmlsZSArIDEpOworICAgICAgICBvZmZfdCBy
ZXM7CisKKyAgICAgICAgcmVzID0gZmluZm8tPmZkYXRhLmZfb3BzLT5mb19zZWVrKCYoZmluZm8t
PmZkYXRhKSwgMCwgU0VFS19DVVIpOworCisgICAgICAgIGlmIChyZXMgPiAwKSB7CisgICAgICAg
ICAgICAgICAgKlBvc2l0aW9uID0gcmVzOworCisgICAgICAgICAgICAgICAgcmV0dXJuIChFRklf
U1VDQ0VTUyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChlcnJu
b190b19lZmlfc3RhdHVzKGVycm5vKSk7CisgICAgICAgIH0KK30KKworc3RhdGljIEVGSUFQSSBF
RklfU1RBVFVTCitmaWxlX2dldF9pbmZvX2ltcGwoRUZJX0ZJTEVfSEFORExFIEZpbGUsIEVGSV9H
VUlEICpJbmZvcm1hdGlvblR5cGUsCisgICAgICAgICAgICAgICAgICAgVUlOVE4gKkJ1ZmZlclNp
emUsIFZPSUQgKkJ1ZmZlcikKK3sKKyAgICAgICAgZmlsZWluZm9fdCAqZmluZm8gPSAoZmlsZWlu
Zm9fdCopKEZpbGUgKyAxKTsKKworICAgICAgICBpZiAoIW1lbWNtcChJbmZvcm1hdGlvblR5cGUs
ICZGaWxlSW5mb0dVSUQsIHNpemVvZihFRklfR1VJRCkpKSB7CisgICAgICAgICAgICAgICAgRUZJ
X0ZJTEVfSU5GTyAqb3V0ID0gKEVGSV9GSUxFX0lORk8qKUJ1ZmZlcjsKKyAgICAgICAgICAgICAg
ICBVSU5UTiBzdHIxNmxlbiA9KHN0cmxlbihmaW5mby0+cGF0aCkgKyAxKSAqIHNpemVvZihDSEFS
MTYpOworICAgICAgICAgICAgICAgIFVJTlROIGN1cnJzaXplID0gKkJ1ZmZlclNpemU7CisgICAg
ICAgICAgICAgICAgVUlOVE4gcmVxc2l6ZSA9IHNpemVvZihFRklfRklMRV9JTkZPKSArIHN0cjE2
bGVuOworICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0OworICAgICAgICAgICAgICAgIGlu
dCBlcnI7CisKKyAgICAgICAgICAgICAgICBtZW1zZXQoJnN0LCAwLCBzaXplb2Yoc3RydWN0IHN0
YXQpKTsKKyAgICAgICAgICAgICAgICAqQnVmZmVyU2l6ZSA9IHJlcXNpemU7CisKKyAgICAgICAg
ICAgICAgICBpZiAoQnVmZmVyID09IE5VTEwgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cnNpemUgPCBzaXplb2YoRUZJX0ZJTEVfSU5GTykgKyBzdHIxNmxlbikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgKkJ1ZmZlclNpemUgPSBzaXplb2YoRUZJX0ZJTEVfSU5GTykgKyBzdHIxNmxl
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRUZJX0JVRkZFUl9UT09fU01BTEwp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgoZXJyID0gZmluZm8t
PmZkYXRhLmZfb3BzLT5mb19zdGF0KCYoZmluZm8tPmZkYXRhKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdCkpICE9IDApIHsKKyAgICAg
ICAJCXJldHVybiAoZXJybm9fdG9fZWZpX3N0YXR1cyhlcnJubykpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIG91dC0+U2l6ZSA9IHNpemVvZihFRklfRklMRV9JTkZPKSAr
IHN0cjE2bGVuOworICAgICAgICAgICAgICAgIG91dC0+RmlsZVNpemUgPSBzdC5zdF9zaXplOwor
ICAgICAgICAgICAgICAgIG91dC0+UGh5c2ljYWxTaXplID0gc3Quc3RfYmxvY2tzICogc3Quc3Rf
Ymxrc2l6ZTsKKyAgICAgICAgICAgICAgICB0b19lZmlfdGltZSgmKG91dC0+TGFzdEFjY2Vzc1Rp
bWUpLCBzdC5zdF9hdGltZSk7CisgICAgICAgICAgICAgICAgdG9fZWZpX3RpbWUoJihvdXQtPk1v
ZGlmaWNhdGlvblRpbWUpLCBzdC5zdF9tdGltZSk7CisgICAgICAgICAgICAgICAgdG9fZWZpX3Rp
bWUoJihvdXQtPkNyZWF0ZVRpbWUpLCBzdC5zdF9jdGltZSk7CisgICAgICAgICAgICAgICAgb3V0
LT5BdHRyaWJ1dGUgPSBtb2RlX3RvX2VmaShzdC5zdF9tb2RlKTsKKworICAgICAgICAgICAgICAg
IGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQt
PkF0dHJpYnV0ZSB8PSBFRklfRklMRV9ESVJFQ1RPUlk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgc3RyY3B5X3RvXzE2KG91dC0+RmlsZU5hbWUsIGZpbmZvLT5wYXRoKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEVGSV9VTlNVUFBPUlRF
RCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKEVGSV9TVUNDRVNTKTsKK30KKworc3Rh
dGljIEVGSUFQSSBFRklfU1RBVFVTCitmaWxlX3NldF9pbmZvX2ltcGwoRUZJX0ZJTEVfSEFORExF
IEZpbGUgX191bnVzZWQsCisgICAgICAgICAgICAgICAgICAgRUZJX0dVSUQgKkluZm9ybWF0aW9u
VHlwZSBfX3VudXNlZCwKKyAgICAgICAgICAgICAgICAgICBVSU5UTiBCdWZmZXJTaXplIF9fdW51
c2VkLCBWT0lEICpCdWZmZXIgX191bnVzZWQpCit7CisgICAgICAgIHJldHVybiAoRUZJX1dSSVRF
X1BST1RFQ1RFRCk7Cit9CisKK3N0YXRpYyBFRklBUEkgRUZJX1NUQVRVUworZmlsZV9mbHVzaF9p
bXBsKEVGSV9GSUxFX0hBTkRMRSBGaWxlIF9fdW51c2VkKQoreworICAgICAgICByZXR1cm4gKEVG
SV9TVUNDRVNTKTsKK30KKworc3RhdGljIEVGSUFQSSBFRklfU1RBVFVTCitvcGVuX3ZvbHVtZV9p
bXBsKEVGSV9GSUxFX0lPX0lOVEVSRkFDRSAqVGhpcywgRUZJX0ZJTEVfSEFORExFICpSb290KQor
eworICAgICAgICB2b2xpbmZvX3QgKnZpbmZvID0gKHZvbGluZm9fdCopKFRoaXMgKyAxKTsKKwor
ICAgICAgICByZXR1cm4gZG9fZmlsZV9vcGVuKHZpbmZvLCAiIiwgT19SRE9OTFksIFJvb3QpOwor
fQorCitzdGF0aWMgc3RydWN0IGZzX29wcyoKK2ZzX3Byb2JlKHN0cnVjdCBkZXZkZXNjICpkZXYp
Cit7CisgICAgICAgIHN0cnVjdCBvcGVuX2ZpbGUgZjsKKwlpbnQgZXJyLCBpOworCisgICAgICAg
IGYuZl9mbGFncyA9IE9fUkRPTkxZICsgMTsKKyAgICAgICAgZi5mX2RldiA9IChzdHJ1Y3QgZGV2
c3cgKikwOworICAgICAgICBmLmZfb3BzID0gKHN0cnVjdCBmc19vcHMgKikwOworICAgICAgICBm
LmZfb2Zmc2V0ID0gMDsKKyAgICAgICAgZi5mX2RldmRhdGEgPSBkZXY7CisKKyAgICAgICAgaWYg
KChlcnIgPSBkZXYtPmRfZGV2LT5kdl9vcGVuKCZmLCBkZXYpKSAhPSAwKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSAwOyBiYWNr
ZW5kX2ZpbGVfc3lzdGVtW2ldICE9IE5VTEw7IGkrKykgeworICAgICAgICAgICAgICAgIGYuZl9v
cHMgPSBiYWNrZW5kX2ZpbGVfc3lzdGVtW2ldOworCisgICAgICAgICAgICAgICAgaWYgKChlcnIg
PSBmLmZfb3BzLT5mb19vcGVuKCIvIiwgJmYpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYmFja2VuZF9maWxlX3N5c3RlbVtpXTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEVGSV9TVEFUVVMK
K21ha2VfZnNfZmlsZV9pb19pZmFjZShzdHJ1Y3QgZGV2ZGVzYyAqZGV2LCBFRklfRklMRV9JT19J
TlRFUkZBQ0UgKipvdXQpCit7CisgICAgICAgIHN0YXRpYyBzdHJ1Y3QgZnNfb3BzKiBmc29wczsK
KyAgICAgICAgRUZJX0ZJTEVfSU9fSU5URVJGQUNFKiBmaWZhY2U7CisgICAgICAgIHZvbGluZm9f
dCAqdmluZm87CisKKyAgICAgICAgc3dpdGNoIChkZXYtPmRfdHlwZSkgeworI2lmZGVmIEVGSV9a
RlNfQk9PVAorCWNhc2UgREVWVF9aRlM6CisgICAgICAgICAgICAgICAgZnNvcHMgPSAmemZzX2Zz
b3BzOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgZnNvcHMgPSBmc19wcm9iZShkZXYpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZzb3BzID09IE5VTEwpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gKEVGSV9VTlNVUFBPUlRFRCk7CisgICAgICAgIH0KKworICAgICAgICBm
aWZhY2UgPSBtYWxsb2Moc2l6ZW9mKEVGSV9GSUxFX0lPX0lOVEVSRkFDRSkgKyBzaXplb2Yodm9s
aW5mb190KSk7CisKKyAgICAgICAgaWYgKGZpZmFjZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIChFRklfT1VUX09GX1JFU09VUkNFUyk7CisgICAgICAgIH0KKworICAgICAgICB2
aW5mbyA9ICh2b2xpbmZvX3QqKShmaWZhY2UgKyAxKTsKKworICAgICAgICBmaWZhY2UtPlJldmlz
aW9uID0gRUZJX0ZJTEVfSU9fSU5URVJGQUNFX1JFVklTSU9OOworICAgICAgICBmaWZhY2UtPk9w
ZW5Wb2x1bWUgPSBvcGVuX3ZvbHVtZV9pbXBsOworICAgICAgICB2aW5mby0+ZGV2ID0gZGV2Owor
ICAgICAgICB2aW5mby0+ZnNvcHMgPSBmc29wczsKKworICAgICAgICAqb3V0ID0gZmlmYWNlOwor
CisgICAgICAgIHJldHVybiAoRUZJX1NVQ0NFU1MpOworfQorCitzdGF0aWMgRUZJQVBJIEVGSV9T
VEFUVVMKK2JpbmRfaWZhY2UoRUZJX0hBTkRMRSBoYW5kbGUsIHN0cnVjdCBkZXZkZXNjICpkZXYp
Cit7CisgICAgICAgIEVGSV9TVEFUVVMgc3RhdHVzOworICAgICAgICBFRklfRklMRV9JT19JTlRF
UkZBQ0UgKmlmYWNlOworCisgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBm
aWxlc3lzdGVtIGludGVyZmFjZQorICAgICAgICBzdGF0dXMgPSBCUy0+T3BlblByb3RvY29sKGhh
bmRsZSwgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQsCisgICAgICAgICAgICBOVUxMLCBJ
SCwgaGFuZGxlLCBFRklfT1BFTl9QUk9UT0NPTF9URVNUX1BST1RPQ09MKTsKKworICAgICAgICBp
ZiAoIUVGSV9FUlJPUihzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChFRklfQUND
RVNTX0RFTklFRCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9IEVGSV9VTlNVUFBPUlRF
RCkgeworICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdHVzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0YXR1cyA9IG1ha2VfZnNfZmlsZV9pb19pZmFjZShkZXYsICZpZmFjZSk7CisKKyAgICAg
ICAgaWYgKEVGSV9FUlJPUihzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGF0
dXMpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdHVzID0gQlMtPkluc3RhbGxNdWx0aXBsZVBy
b3RvY29sSW50ZXJmYWNlcygmaGFuZGxlLAorICAgICAgICAgICAgJlNpbXBsZUZpbGVTeXN0ZW1Q
cm90b2NvbEdVSUQsIGlmYWNlLCBOVUxMKTsKKworICAgICAgICBpZiAoRUZJX0VSUk9SKHN0YXR1
cykpIHsKKyAgICAgICAgICAgICAgICBmcmVlKGlmYWNlKTsKKworICAgICAgICAgICAgICAgIHJl
dHVybiAoc3RhdHVzKTsKKyAgICAgICAgfQorCisJcmV0dXJuIChzdGF0dXMpOworfQorCitzdGF0
aWMgRUZJQVBJIEVGSV9TVEFUVVMKK3N0b3BfaW1wbChFRklfRFJJVkVSX0JJTkRJTkcgKlRoaXMg
X191bnVzZWQsIEVGSV9IQU5ETEUgQ29udHJvbGxlckhhbmRsZSBfX3VudXNlZCwKKyAgICAgICAg
ICBVSU5UTiBOdW1iZXJPZkNoaWxkcmVuIF9fdW51c2VkLCBFRklfSEFORExFICpDaGlsZEhhbmRs
ZUJ1ZmZlciBfX3VudXNlZCkKK3sKKyAgICAgICAgLy8gR2V0IHRoZSBwcm90b2NvbCBpbnRlZmFj
ZSwgdW5pbnN0YWxsIGl0LCBhbmQgZnJlZSBpdAorICAgICAgICByZXR1cm4gKEVGSV9TVUNDRVNT
KTsKK30KKworI2lmZGVmIEVGSV9aRlNfQk9PVAorc3RhdGljIHZvaWQKK2VmaV96ZnNfcHJvYmUo
dm9pZCkKK3sKKwlFRklfSEFORExFIGg7CisJdV9pbnQgdW5pdDsKKwlpbnQgaTsKKwljaGFyIGRu
YW1lW1NQRUNOQU1FTEVOICsgMV07CisJdWludDY0X3QgZ3VpZDsKKworCXVuaXQgPSAwOworCWgg
PSBlZmlfZmluZF9oYW5kbGUoJmVmaXBhcnRfZGV2LCAwKTsKKwlmb3IgKGkgPSAwOyBoICE9IE5V
TEw7IGggPSBlZmlfZmluZF9oYW5kbGUoJmVmaXBhcnRfZGV2LCArK2kpKSB7CisJCXNucHJpbnRm
KGRuYW1lLCBzaXplb2YoZG5hbWUpLCAiJXMlZDoiLCBlZmlwYXJ0X2Rldi5kdl9uYW1lLCBpKTsK
KwkJaWYgKHpmc19wcm9iZV9kZXYoZG5hbWUsICZndWlkKSA9PSAwKSB7CisJCQkodm9pZCllZmlf
aGFuZGxlX3VwZGF0ZV9kZXYoaCwgJnpmc19kZXYsIHVuaXQrKywgZ3VpZCk7CisgICAgICAgICAg
ICAgICAgfQorCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW50CitiYWNrZW5kX3BhcnNlZGV2KHN0
cnVjdCBkZXZkZXNjICoqZGV2LCBjb25zdCBjaGFyICpkZXZzcGVjLCBjb25zdCBjaGFyICoqcGF0
aCkKK3sKKwlzdHJ1Y3QgZGV2ZGVzYyAqaWRldjsKKwlzdHJ1Y3QgZGV2c3cgKmR2OworCWNoYXIg
KmNwOworCWNvbnN0IGNoYXIgKm5wOworCWludCBpOworCisJLyogbWluaW11bSBsZW5ndGggY2hl
Y2sgKi8KKwlpZiAoc3RybGVuKGRldnNwZWMpIDwgMikKKwkJcmV0dXJuIChFSU5WQUwpOworCisJ
LyogbG9vayBmb3IgYSBkZXZpY2UgdGhhdCBtYXRjaGVzICovCisJZm9yIChpID0gMDsgYmFja2Vu
ZF9kZXZzd1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJZHYgPSBiYWNrZW5kX2RldnN3W2ldOworCQlp
ZiAoIXN0cm5jbXAoZGV2c3BlYywgZHYtPmR2X25hbWUsIHN0cmxlbihkdi0+ZHZfbmFtZSkpKQor
CQkJYnJlYWs7CisJfQorCWlmIChiYWNrZW5kX2RldnN3W2ldID09IE5VTEwpIHsKKwkJcmV0dXJu
IChFTk9FTlQpOworICAgICAgICB9CisKKwlucCA9IGRldnNwZWMgKyBzdHJsZW4oZHYtPmR2X25h
bWUpOworCisjaWZkZWYgRUZJX1pGU19CT09UCisJaWYgKGR2LT5kdl90eXBlID09IERFVlRfWkZT
KSB7CisJCWludCBlcnI7CisKKwkJaWRldiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHpmc19kZXZk
ZXNjKSk7CisJCWlmIChpZGV2ID09IE5VTEwpCisJCQlyZXR1cm4gKEVOT01FTSk7CisKKwkJZXJy
ID0gemZzX3BhcnNlZGV2KChzdHJ1Y3QgemZzX2RldmRlc2MqKWlkZXYsIG5wLCBwYXRoKTsKKwkJ
aWYgKGVyciAhPSAwKSB7CisJCQlmcmVlKGlkZXYpOworCQkJcmV0dXJuIChlcnIpOworCQl9CisJ
CSpkZXYgPSBpZGV2OworCQljcCA9IHN0cmNocihucCArIDEsICc6Jyk7CisJfSBlbHNlCisjZW5k
aWYKKwl7CisJCWlkZXYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZkZXNjKSk7CisJCWlmIChp
ZGV2ID09IE5VTEwpCisJCQlyZXR1cm4gKEVOT01FTSk7CisKKwkJaWRldi0+ZF9kZXYgPSBkdjsK
KwkJaWRldi0+ZF90eXBlID0gZHYtPmR2X3R5cGU7CisJCWlkZXYtPmRfdW5pdCA9IC0xOworCQlp
ZiAoKm5wICE9ICdcMCcgJiYgKm5wICE9ICc6JykgeworCQkJaWRldi0+ZF91bml0ID0gc3RydG9s
KG5wLCAmY3AsIDApOworCQkJaWYgKGNwID09IG5wKSB7CisJCQkJaWRldi0+ZF91bml0ID0gLTE7
CisJCQkJZnJlZShpZGV2KTsKKwkJCQlyZXR1cm4gKEVVTklUKTsKKwkJCX0KKwkJfQorCX0KKwor
CWlmICgqY3AgIT0gJ1wwJyAmJiAqY3AgIT0gJzonKSB7CisJCWZyZWUoaWRldik7CisJCXJldHVy
biAoRUlOVkFMKTsKKwl9CisKKwlpZiAocGF0aCAhPSBOVUxMKQorCQkqcGF0aCA9ICgqY3AgPT0g
MCkgPyBjcCA6IGNwICsgMTsKKwlpZiAoZGV2ICE9IE5VTEwpCisJCSpkZXYgPSBpZGV2OworCWVs
c2UKKwkJZnJlZShpZGV2KTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitiYWNrZW5k
X2dldGRldih2b2lkICoqdmRldiwgY29uc3QgY2hhciAqZGV2c3BlYywgY29uc3QgY2hhciAqKnBh
dGgpCit7CisJc3RydWN0IGRldmRlc2MgKipkZXYgPSAoc3RydWN0IGRldmRlc2MgKiopdmRldjsK
KwlpbnQgcnY7CisKKwkvKgorCSAqIElmIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBqdXN0IGEgcGF0
aCBhbmQgbm8gZGV2aWNlLCB0aGVuCisJICogdXNlIHRoZSBjdXJyZW50IGRldmljZSBpbnN0ZWFk
LgorCSAqLworCWlmIChkZXZzcGVjID09IE5VTEwgfHwgKmRldnNwZWMgPT0gJy8nIHx8ICFzdHJj
aHIoZGV2c3BlYywgJzonKSkgeworCQlydiA9IGJhY2tlbmRfcGFyc2VkZXYoZGV2LCBnZXRlbnYo
ImN1cnJkZXYiKSwgTlVMTCk7CisJCWlmIChydiA9PSAwICYmIHBhdGggIT0gTlVMTCkKKwkJCSpw
YXRoID0gZGV2c3BlYzsKKwkJcmV0dXJuIChydik7CisJfQorCisJLyogUGFyc2UgdGhlIGRldmlj
ZSBuYW1lIG9mZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXZzcGVjLiAqLworCXJldHVybiAoYmFj
a2VuZF9wYXJzZWRldihkZXYsIGRldnNwZWMsIHBhdGgpKTsKK30KKworc3RhdGljIHZvaWQKK2lu
aXQodm9pZCkKK3sKKwlFRklfSEFORExFIGg7CisgICAgICAgIEVGSV9TVEFUVVMgc3RhdHVzOwor
CXVfaW50IHVuaXQ7CisgICAgICAgIGludCBpOworCXN0cnVjdCBkZXZzdyAqZGV2OworCXVpbnQ2
NF90IHBvb2xfZ3VpZDsKKyAgICAgICAgaW50ICgqb2xkX2dldGRldikodm9pZCAqKiwgY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICoqKSA9CisgICAgICAgICAgYXJjaHN3LmFyY2hfZ2V0ZGV2Owor
CisJYXJjaHN3LmFyY2hfZ2V0ZGV2ID0gYmFja2VuZF9nZXRkZXY7CisjaWZkZWYgRUZJX1pGU19C
T09UCisJLyogTm90ZSB0aGlzIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgWkZTIGluaXQuICovCisJ
YXJjaHN3LmFyY2hfemZzX3Byb2JlID0gZWZpX3pmc19wcm9iZTsKKyNlbmRpZgorCisgICAgICAg
IC8qIEluaXRpYWxpemUgYWxsIHRoZSBiYWNrZW5kIGRyaXZlcnMgKi8KKwlmb3IgKGkgPSAwOyBi
YWNrZW5kX2RldnN3W2ldICE9IE5VTEw7IGkrKykgeworCQlpZiAoYmFja2VuZF9kZXZzd1tpXS0+
ZHZfaW5pdCAhPSBOVUxMKQorCQkJKGJhY2tlbmRfZGV2c3dbaV0tPmR2X2luaXQpKCk7CisgICAg
ICAgIH0KKworICAgICAgICAvKiBBdHRhY2ggU0lNUExFX0ZJTEVfU1lTVEVNIGludGVyZmFjZXMg
dG8gYWxsIGVmaXBhcnQgZGV2aWNlcyAqLworCXVuaXQgPSAwOworCWggPSBlZmlfZmluZF9oYW5k
bGUoJmVmaXBhcnRfZGV2LCAwKTsKKwlmb3IgKGkgPSAwOyBoICE9IE5VTEw7IGggPSBlZmlfZmlu
ZF9oYW5kbGUoJmVmaXBhcnRfZGV2LCArK2kpKSB7CisJCXN0cnVjdCBkZXZkZXNjICpjdXJyZGV2
OworCisgICAgICAgICAgICAgICAgY3VycmRldiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRldmRl
c2MpKTsKKworICAgICAgICAgICAgICAgIGlmIChjdXJyZGV2ID09IE5VTEwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGlmIChlZmlfaGFuZGxlX2xvb2t1cChoLCAmZGV2LCAmdW5pdCwgJnBvb2xfZ3VpZCkg
IT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShjdXJyZGV2KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworCQljdXJyZGV2
LT5kX2RldiA9IGRldjsKKwkJY3VycmRldi0+ZF91bml0ID0gdW5pdDsKKwkJY3VycmRldi0+ZF9v
cGVuZGF0YSA9IE5VTEw7CisJCWN1cnJkZXYtPmRfdHlwZSA9IGN1cnJkZXYtPmRfZGV2LT5kdl90
eXBlOworCisgICAgICAgICAgICAgICAgc3RhdHVzID0gYmluZF9pZmFjZShoLCBjdXJyZGV2KTsK
KworICAgICAgICAgICAgICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSAmJiBzdGF0dXMgIT0gRUZJ
X1VOU1VQUE9SVEVEICYmCisgICAgICAgICAgICAgICAgICAgc3RhdHVzICE9IEVGSV9BQ0NFU1Nf
REVOSUVEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gYXR0
YWNoIGZpbGVzeXN0ZW0gaW50ZXJmYWNlIHRvIGVmaXBhcnQldSAoJWxkKVxuIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5pdCwgRUZJX0VSUk9SX0NPREUoc3RhdHVzKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShjdXJyZGV2KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvKiBBdHRhY2ggU0lNUExFX0ZJTEVfU1lTVEVNIGludGVy
ZmFjZSB0byBhbGwgWkZTIGRldmljZXMgKi8KKyNpZmRlZiBFRklfWkZTX0JPT1QKKwl1bml0ID0g
MDsKKwloID0gZWZpX2ZpbmRfaGFuZGxlKCZ6ZnNfZGV2LCAwKTsKKwlmb3IgKGkgPSAwOyBoICE9
IE5VTEw7IGggPSBlZmlfZmluZF9oYW5kbGUoJnpmc19kZXYsICsraSkpIHsKKwkJc3RydWN0IHpm
c19kZXZkZXNjICpjdXJyZGV2OworCisgICAgICAgICAgICAgICAgY3VycmRldiA9IG1hbGxvYyhz
aXplb2Yoc3RydWN0IHpmc19kZXZkZXNjKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoY3VycmRl
diA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZWZpX2hhbmRsZV9sb29rdXAoaCwgJmRl
diwgJnVuaXQsICZwb29sX2d1aWQpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZy
ZWUoY3VycmRldik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisKKwkJY3VycmRldi0+ZF9kZXYgPSBkZXY7CisJCWN1cnJkZXYtPmRfdW5pdCA9
IHVuaXQ7CisJCWN1cnJkZXYtPmRfb3BlbmRhdGEgPSBOVUxMOworCQljdXJyZGV2LT5kX3R5cGUg
PSBjdXJyZGV2LT5kX2Rldi0+ZHZfdHlwZTsKKyAgICAgICAgICAgICAgICBjdXJyZGV2LT5wb29s
X2d1aWQgPSBwb29sX2d1aWQ7CisgICAgICAgICAgICAgICAgY3VycmRldi0+cm9vdF9ndWlkID0g
MDsKKworICAgICAgICAgICAgICAgIHN0YXR1cyA9IGJpbmRfaWZhY2UoaCwgKHN0cnVjdCBkZXZk
ZXNjKiljdXJyZGV2KTsKKworICAgICAgICAgICAgICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSkg
eworICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gYXR0YWNoIGZpbGVzeXN0ZW0g
aW50ZXJmYWNlIHRvIHpmcyV1ICglbGQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVu
aXQsIEVGSV9FUlJPUl9DT0RFKHN0YXR1cykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
fQorI2VuZGlmCisgICAgICAgIGFyY2hzdy5hcmNoX2dldGRldiA9IG9sZF9nZXRkZXY7Cit9CisK
K2NvbnN0IGVmaV9kcml2ZXJfdCBmc19kcml2ZXIgPQoreworCS5uYW1lID0gIkZTIEJhY2tlbmQi
LAorCS5pbml0ID0gaW5pdCwKK307CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2luY2x1ZGUvZWZp
bGliLmggc3lzL2Jvb3QvZWZpL2luY2x1ZGUvZWZpbGliLmgKaW5kZXggMDljY2MyZjM2NDcuLjE1
ZDRiNDg3ZDQwIDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2luY2x1ZGUvZWZpbGliLmgKKysrIHN5
cy9ib290L2VmaS9pbmNsdWRlL2VmaWxpYi5oCkBAIC0zMSwyMiArMzEsMjYgQEAKICNkZWZpbmUJ
X0xPQURFUl9FRklMSUJfSAogCiAjaW5jbHVkZSA8c3RhbmQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+
CiAKIGV4dGVybiBFRklfSEFORExFCQlJSDsKLWV4dGVybiBFRklfU1lTVEVNX1RBQkxFCQkqU1Q7
CitleHRlcm4gRUZJX1NZU1RFTV9UQUJMRQkqU1Q7CiBleHRlcm4gRUZJX0JPT1RfU0VSVklDRVMJ
KkJTOwogZXh0ZXJuIEVGSV9SVU5USU1FX1NFUlZJQ0VTCSpSUzsKIAotZXh0ZXJuIHN0cnVjdCBk
ZXZzdyBlZmlwYXJ0X2RldjsKK2V4dGVybiBzdHJ1Y3QgZGV2c3cgZWZpZnNfZGV2OwogZXh0ZXJu
IHN0cnVjdCBkZXZzdyBlZmluZXRfZGV2OworZXh0ZXJuIHN0cnVjdCBmc19vcHMgZWZpZnNfZnNv
cHM7CiBleHRlcm4gc3RydWN0IG5ldGlmX2RyaXZlciBlZmluZXRpZjsKIAogdm9pZCAqZWZpX2dl
dF90YWJsZShFRklfR1VJRCAqdGJsKTsKIAogaW50IGVmaV9yZWdpc3Rlcl9oYW5kbGVzKHN0cnVj
dCBkZXZzdyAqLCBFRklfSEFORExFICosIEVGSV9IQU5ETEUgKiwgaW50KTsKK2ludCBlZmlfcmVn
aXN0ZXJfaGFuZGxlKHN0cnVjdCBkZXZzdyAqLCBFRklfSEFORExFLCBFRklfSEFORExFKTsKIEVG
SV9IQU5ETEUgZWZpX2ZpbmRfaGFuZGxlKHN0cnVjdCBkZXZzdyAqLCBpbnQpOwogaW50IGVmaV9o
YW5kbGVfbG9va3VwKEVGSV9IQU5ETEUsIHN0cnVjdCBkZXZzdyAqKiwgaW50ICosICB1aW50NjRf
dCAqKTsKIGludCBlZmlfaGFuZGxlX3VwZGF0ZV9kZXYoRUZJX0hBTkRMRSwgc3RydWN0IGRldnN3
ICosIGludCwgdWludDY0X3QpOworaW50IGVmaV9oYW5kbGVfcmVtb3ZlX2RldihFRklfSEFORExF
KTsKIAogRUZJX0RFVklDRV9QQVRIICplZmlfbG9va3VwX2ltYWdlX2RldnBhdGgoRUZJX0hBTkRM
RSk7CiBFRklfREVWSUNFX1BBVEggKmVmaV9sb29rdXBfZGV2cGF0aChFRklfSEFORExFKTsKQEAg
LTU3LDYgKzYxLDcgQEAgQ0hBUjE2ICplZmlfZGV2cGF0aF9uYW1lKEVGSV9ERVZJQ0VfUEFUSCAq
KTsKIHZvaWQgZWZpX2ZyZWVfZGV2cGF0aF9uYW1lKENIQVIxNiAqKTsKIAogaW50IGVmaV9zdGF0
dXNfdG9fZXJybm8oRUZJX1NUQVRVUyk7CitFRklfU1RBVFVTIGVycm5vX3RvX2VmaV9zdGF0dXMo
aW50IGVycm5vKTsKIAogdm9pZCBlZmlfdGltZV9pbml0KHZvaWQpOwogdm9pZCBlZmlfdGltZV9m
aW5pKHZvaWQpOwpAQCAtNjUsNCArNzAsNyBAQCBFRklfU1RBVFVTIG1haW4oaW50IGFyZ2MsIENI
QVIxNiAqYXJndltdKTsKIHZvaWQgZXhpdChFRklfU1RBVFVTIHN0YXR1cyk7CiB2b2lkIGRlbGF5
KGludCB1c2Vjcyk7CiAKK3RpbWVfdCBmcm9tX2VmaV90aW1lKEVGSV9USU1FICplZmlfdGltZSk7
Cit2b2lkIHRvX2VmaV90aW1lKEVGSV9USU1FICplZmlfdGltZSwgdGltZV90IHRpbWUpOworCiAj
ZW5kaWYJLyogX0xPQURFUl9FRklMSUJfSCAqLwpkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9pbmNs
dWRlL2VmaXByb3QuaCBzeXMvYm9vdC9lZmkvaW5jbHVkZS9lZmlwcm90LmgKaW5kZXggMjhjZWM1
OTkxZTMuLjIyMjE1Nzc3Y2FiIDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2luY2x1ZGUvZWZpcHJv
dC5oCisrKyBzeXMvYm9vdC9lZmkvaW5jbHVkZS9lZmlwcm90LmgKQEAgLTI3LDYgKzI3LDggQEAg
UmV2aXNpb24gSGlzdG9yeQogCiAtLSovCiAKKyNpbmNsdWRlIDxlZmlkZWYuaD4KKwogLy8KIC8v
IERldmljZSBQYXRoIHByb3RvY29sCiAvLwpAQCAtMzA3LDkgKzMwOSw5IEBAIHR5cGVkZWYgc3Ry
dWN0IHsKIC8vCiAvLyBUaGUgRmlsZU5hbWUgZmllbGQgb2YgdGhlIEVGSV9GSUxFX0lORk8gZGF0
YSBzdHJ1Y3R1cmUgaXMgdmFyaWFibGUgbGVuZ3RoLgogLy8gV2hlbmV2ZXIgY29kZSBuZWVkcyB0
byBrbm93IHRoZSBzaXplIG9mIHRoZSBFRklfRklMRV9JTkZPIGRhdGEgc3RydWN0dXJlLCBpdCBu
ZWVkcyB0bwotLy8gYmUgdGhlIHNpemUgb2YgdGhlIGRhdGEgc3RydWN0dXJlIHdpdGhvdXQgdGhl
IEZpbGVOYW1lIGZpZWxkLiAgVGhlIGZvbGxvd2luZyBtYWNybyAKKy8vIGJlIHRoZSBzaXplIG9m
IHRoZSBkYXRhIHN0cnVjdHVyZSB3aXRob3V0IHRoZSBGaWxlTmFtZSBmaWVsZC4gIFRoZSBmb2xs
b3dpbmcgbWFjcm8KIC8vIGNvbXB1dGVzIHRoaXMgc2l6ZSBjb3JyZWN0bHkgbm8gbWF0dGVyIGhv
dyBiaWcgdGhlIEZpbGVOYW1lIGFycmF5IGlzIGRlY2xhcmVkLgotLy8gVGhpcyBpcyByZXF1aXJl
ZCB0byBtYWtlIHRoZSBFRklfRklMRV9JTkZPIGRhdGEgc3RydWN0dXJlIEFOU0kgY29tcGlsYW50
LiAKKy8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gbWFrZSB0aGUgRUZJX0ZJTEVfSU5GTyBkYXRhIHN0
cnVjdHVyZSBBTlNJIGNvbXBpbGFudC4KIC8vCiAKICNkZWZpbmUgU0laRV9PRl9FRklfRklMRV9J
TkZPIEVGSV9GSUVMRF9PRkZTRVQoRUZJX0ZJTEVfSU5GTyxGaWxlTmFtZSkKQEAgLTMyOSw5ICsz
MzEsOSBAQCB0eXBlZGVmIHN0cnVjdCB7CiAvLwogLy8gVGhlIFZvbHVtZUxhYmVsIGZpZWxkIG9m
IHRoZSBFRklfRklMRV9TWVNURU1fSU5GTyBkYXRhIHN0cnVjdHVyZSBpcyB2YXJpYWJsZSBsZW5n
dGguCiAvLyBXaGVuZXZlciBjb2RlIG5lZWRzIHRvIGtub3cgdGhlIHNpemUgb2YgdGhlIEVGSV9G
SUxFX1NZU1RFTV9JTkZPIGRhdGEgc3RydWN0dXJlLCBpdCBuZWVkcwotLy8gdG8gYmUgdGhlIHNp
emUgb2YgdGhlIGRhdGEgc3RydWN0dXJlIHdpdGhvdXQgdGhlIFZvbHVtZUxhYmxlIGZpZWxkLiAg
VGhlIGZvbGxvd2luZyBtYWNybyAKKy8vIHRvIGJlIHRoZSBzaXplIG9mIHRoZSBkYXRhIHN0cnVj
dHVyZSB3aXRob3V0IHRoZSBWb2x1bWVMYWJsZSBmaWVsZC4gIFRoZSBmb2xsb3dpbmcgbWFjcm8K
IC8vIGNvbXB1dGVzIHRoaXMgc2l6ZSBjb3JyZWN0bHkgbm8gbWF0dGVyIGhvdyBiaWcgdGhlIFZv
bHVtZUxhYmxlIGFycmF5IGlzIGRlY2xhcmVkLgotLy8gVGhpcyBpcyByZXF1aXJlZCB0byBtYWtl
IHRoZSBFRklfRklMRV9TWVNURU1fSU5GTyBkYXRhIHN0cnVjdHVyZSBBTlNJIGNvbXBpbGFudC4g
CisvLyBUaGlzIGlzIHJlcXVpcmVkIHRvIG1ha2UgdGhlIEVGSV9GSUxFX1NZU1RFTV9JTkZPIGRh
dGEgc3RydWN0dXJlIEFOU0kgY29tcGlsYW50LgogLy8KIAogI2RlZmluZSBTSVpFX09GX0VGSV9G
SUxFX1NZU1RFTV9JTkZPIEVGSV9GSUVMRF9PRkZTRVQoRUZJX0ZJTEVfU1lTVEVNX0lORk8sVm9s
dW1lTGFiZWwpCkBAIC00MTEsNyArNDEzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgewogICAgIEVGSV9E
RVZJQ0VfSU8gICAgICAgICAgICAgICAgICAgV3JpdGU7CiB9IEVGSV9JT19BQ0NFU1M7CiAKLXR5
cGVkZWYgCit0eXBlZGVmCiBFRklfU1RBVFVTCiAoRUZJQVBJICpFRklfUENJX0RFVklDRV9QQVRI
KSAoCiAgICAgSU4gc3RydWN0IF9FRklfREVWSUNFX0lPX0lOVEVSRkFDRSAgKlRoaXMsCkBAIC01
NTUsNCArNTU3LDQ3IEBAIHR5cGVkZWYgc3RydWN0IF9FRklfVU5JQ09ERV9DT0xMQVRJT05fSU5U
RVJGQUNFIHsKICAgICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqU3VwcG9y
dGVkTGFuZ3VhZ2VzOwogfSBFRklfVU5JQ09ERV9DT0xMQVRJT05fSU5URVJGQUNFOwogCisvLwor
Ly8gRHJpdmVyIEJpbmRpbmcgcHJvdG9jb2wKKy8vCisKKyNkZWZpbmUgRFJJVkVSX0JJTkRJTkdf
UFJPVE9DT0wgXAorICB7IDB4MThhMDMxYWIsIDB4YjQ0MywgMHg0ZDFhLCB7MHhhNSwgMHhjMCwg
MHgwYywgMHgwOSwgMHgyNiwgMHgxZSwgMHg5ZiwgMHg3MX0gfQorCitJTlRFUkZBQ0VfREVDTChf
RUZJX0RSSVZFUl9CSU5ESU5HKTsKKwordHlwZWRlZgorRUZJX1NUQVRVUworKEVGSUFQSSAqRUZJ
X0RSSVZFUl9CSU5ESU5HX1NVUFBPUlRFRCkgKAorICAgIElOIHN0cnVjdCBfRUZJX0RSSVZFUl9C
SU5ESU5HICpUaGlzLAorICAgIElOIEVGSV9IQU5ETEUgQ29udHJvbGxlckhhbmRsZSwKKyAgICBJ
TiBFRklfREVWSUNFX1BBVEggKlJlbWFpbmluZ1BhdGgKKyAgICApOworCit0eXBlZGVmCitFRklf
U1RBVFVTCisoRUZJQVBJICpFRklfRFJJVkVSX0JJTkRJTkdfU1RBUlQpICgKKyAgICBJTiBzdHJ1
Y3QgX0VGSV9EUklWRVJfQklORElORyAqVGhpcywKKyAgICBJTiBFRklfSEFORExFIENvbnRyb2xs
ZXJIYW5kbGUsCisgICAgSU4gRUZJX0RFVklDRV9QQVRIICpSZW1haW5pbmdQYXRoCisgICAgKTsK
KwordHlwZWRlZgorRUZJX1NUQVRVUworKEVGSUFQSSAqRUZJX0RSSVZFUl9CSU5ESU5HX1NUT1Ap
ICgKKyAgICBJTiBzdHJ1Y3QgX0VGSV9EUklWRVJfQklORElORyAqVGhpcywKKyAgICBJTiBFRklf
SEFORExFIENvbnRyb2xsZXJIYW5kbGUsCisgICAgSU4gVUlOVE4gTnVtYmVyT2ZDaGlsZHJlbiwK
KyAgICBJTiBFRklfSEFORExFICpDaGlsZEhhbmRsZUJ1ZmZlcgorICAgICk7CisKK3R5cGVkZWYg
c3RydWN0IF9FRklfRFJJVkVSX0JJTkRJTkcgeworICBFRklfRFJJVkVSX0JJTkRJTkdfU1VQUE9S
VEVEIFN1cHBvcnRlZDsKKyAgRUZJX0RSSVZFUl9CSU5ESU5HX1NUQVJUIFN0YXJ0OworICBFRklf
RFJJVkVSX0JJTkRJTkdfU1RPUCBTdG9wOworICBVSU5UMzIgVmVyc2lvbjsKKyAgRUZJX0hBTkRM
RSBJbWFnZUhhbmRsZTsKKyAgRUZJX0hBTkRMRSBEcml2ZXJCaW5kaW5nSGFuZGxlOworfSBFRklf
RFJJVkVSX0JJTkRJTkc7CisKICNlbmRpZgpkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9pbmNsdWRl
L3N0cmluZzE2Lmggc3lzL2Jvb3QvZWZpL2luY2x1ZGUvc3RyaW5nMTYuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWU0ZjljMWVmMWEKLS0tIC9kZXYvbnVsbAorKysg
c3lzL2Jvb3QvZWZpL2luY2x1ZGUvc3RyaW5nMTYuaApAQCAtMCwwICsxLDQ1IEBACisvKi0KKyAq
IENvcHlyaWdodCAoYykgMjAxNiBFcmljIE1jQ29ya2xlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor
ICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYgX1NUUklORzE2X0hfCisjZGVmaW5lIF9T
VFJJTkcxNl9IXworCisjaW5jbHVkZSA8ZWZpLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8q
CisgKiBUaGVzZSBhcmUgMTYtYml0IHZhcmlhbnRzIG9mIHN0cmluZyxoIGZ1bmN0aW9ucyBmb3Ig
dXNlIHdpdGggRUZJIGNvZGUuCisgKi8KKworZXh0ZXJuIHNpemVfdCBzdHJsZW4xNihjb25zdCBD
SEFSMTYgKnN0cik7CitleHRlcm4gQ0hBUjE2KiBzdHJjcHkxNihDSEFSMTYgKmRzdCwgY29uc3Qg
Q0hBUjE2ICpzcmMpOworZXh0ZXJuIENIQVIxNiogc3RwY3B5MTYoQ0hBUjE2ICpkc3QsIGNvbnN0
IENIQVIxNiAqc3JjKTsKK2V4dGVybiBDSEFSMTYqIHN0cmNweV90b18xNihDSEFSMTYgKmRzdCwg
Y29uc3QgY2hhciAqc3JjKTsKK2V4dGVybiBjaGFyKiBzdHJjcHlfZnJvbV8xNihjaGFyICpkc3Qs
IGNvbnN0IENIQVIxNiAqc3JjKTsKKworI2VuZGlmCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2xp
YmVmaS9NYWtlZmlsZSBzeXMvYm9vdC9lZmkvbGliZWZpL01ha2VmaWxlCmluZGV4IGQ5NjE5YmVm
ODlkLi44Njg0NDAzY2QxMSAxMDA2NDQKLS0tIHN5cy9ib290L2VmaS9saWJlZmkvTWFrZWZpbGUK
KysrIHN5cy9ib290L2VmaS9saWJlZmkvTWFrZWZpbGUKQEAgLTEwLDggKzEwLDggQEAgTElCPQll
ZmkKIElOVEVSTkFMTElCPQogV0FSTlM/PQkyCiAKLVNSQ1M9CWRlbGF5LmMgZGV2cGF0aC5jIGVm
aV9jb25zb2xlLmMgZWZpbmV0LmMgZWZpcGFydC5jIGVycm5vLmMgXAotCWhhbmRsZXMuYyBsaWJl
ZmkuYworU1JDUz0JZGVsYXkuYyBkZXZwYXRoLmMgZWZpX2NvbnNvbGUuYyBlZmlmcy5jIGVmaW5l
dC5jIGVudi5jIGVycm5vLmMgXAorCWhhbmRsZXMuYyBsaWJlZmkuYyBzdHJpbmcxNi5jCiAKIC5p
ZiAke01BQ0hJTkVfQ1BVQVJDSH0gPT0gImFtZDY0IiB8fCAke01BQ0hJTkVfQ1BVQVJDSH0gPT0g
ImkzODYiCiBTUkNTKz0JdGltZS5jCmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZpL2xpYmVmaS9lZmlm
cy5jIHN5cy9ib290L2VmaS9saWJlZmkvZWZpZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uZGQ5ZmIwZjBiNDEKLS0tIC9kZXYvbnVsbAorKysgc3lzL2Jvb3QvZWZp
L2xpYmVmaS9lZmlmcy5jCkBAIC0wLDAgKzEsNDY0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykg
MjAxNiBFcmljIE1jQ29ya2xlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNE
JAorICovCisKKyNpbmNsdWRlIDxlZmkuaD4KKyNpbmNsdWRlIDxlZmlsaWIuaD4KKyNpbmNsdWRl
IDxlZmlwcm90Lmg+CisjaW5jbHVkZSA8c3RhbmQuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNp
bmNsdWRlIDxib290c3RyYXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcxNi5oPgorCitzdGF0aWMgRUZJ
X0dVSUQgRmlsZUluZm9HVUlEID0gRUZJX0ZJTEVfSU5GT19JRDs7CitzdGF0aWMgRUZJX0dVSUQg
U2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR1VJRCA9IFNJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NP
TDsKK3N0YXRpYyBFRklfR1VJRCBCbG9ja0lvUHJvdG9jb2xHVUlEID0gQkxPQ0tfSU9fUFJPVE9D
T0w7CitzdGF0aWMgRUZJX0dVSUQgRGV2aWNlUGF0aEdVSUQgPSBERVZJQ0VfUEFUSF9QUk9UT0NP
TDsKKworc3RhdGljIGludCBlZmlmc19vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBvcGVu
X2ZpbGUgKmYpOworc3RhdGljIGludCBlZmlmc193cml0ZShzdHJ1Y3Qgb3Blbl9maWxlICpmLCB2
b2lkICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKnJlc2lkKTsKK3N0YXRpYyBpbnQgZWZpZnNf
Y2xvc2Uoc3RydWN0IG9wZW5fZmlsZSAqZik7CitzdGF0aWMgaW50IGVmaWZzX3JlYWQoc3RydWN0
IG9wZW5fZmlsZSAqZiwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICpyZXNpZCk7Citz
dGF0aWMgb2ZmX3QgZWZpZnNfc2VlayhzdHJ1Y3Qgb3Blbl9maWxlICpmLCBvZmZfdCBvZmZzZXQs
IGludCB3aGVyZSk7CitzdGF0aWMgaW50IGVmaWZzX3N0YXQoc3RydWN0IG9wZW5fZmlsZSAqZiwg
c3RydWN0IHN0YXQgKnNiKTsKK3N0YXRpYyBpbnQgZWZpZnNfcmVhZGRpcihzdHJ1Y3Qgb3Blbl9m
aWxlICpmLCBzdHJ1Y3QgZGlyZW50ICpkKTsKKworc3RhdGljIGludCBlZmlmc19kZXZfaW5pdCh2
b2lkKTsKK3N0YXRpYyBpbnQgZWZpZnNfZGV2X3N0cmF0ZWd5KHZvaWQgKiwgaW50LCBkYWRkcl90
LCBzaXplX3QsIHNpemVfdCwgY2hhciAqLCBzaXplX3QgKik7CitzdGF0aWMgaW50IGVmaWZzX2Rl
dl9vcGVuKHN0cnVjdCBvcGVuX2ZpbGUgKiwgLi4uKTsKK3N0YXRpYyBpbnQgZWZpZnNfZGV2X2Ns
b3NlKHN0cnVjdCBvcGVuX2ZpbGUgKik7CitzdGF0aWMgaW50IGVmaWZzX2Rldl9wcmludChpbnQp
OworCitzdHJ1Y3QgZGV2c3cgZWZpZnNfZGV2ID0geworCS5kdl9uYW1lID0gIkVGSSIsCisJLmR2
X3R5cGUgPSBERVZUX0VGSSwKKwkuZHZfaW5pdCA9IGVmaWZzX2Rldl9pbml0LAorCS5kdl9zdHJh
dGVneSA9IGVmaWZzX2Rldl9zdHJhdGVneSwKKwkuZHZfb3BlbiA9IGVmaWZzX2Rldl9vcGVuLAor
CS5kdl9jbG9zZSA9IGVmaWZzX2Rldl9jbG9zZSwKKwkuZHZfaW9jdGwgPSBub2lvY3RsLAorCS5k
dl9wcmludCA9IGVmaWZzX2Rldl9wcmludCwKKwkuZHZfY2xlYW51cCA9IE5VTEwKK307CisKK3N0
cnVjdCBmc19vcHMgZWZpZnNfZnNvcHMgPSB7CisJIkVGSSIsCisJZWZpZnNfb3BlbiwKKwllZmlm
c19jbG9zZSwKKwllZmlmc19yZWFkLAorCWVmaWZzX3dyaXRlLAorCWVmaWZzX3NlZWssCisJZWZp
ZnNfc3RhdCwKKwllZmlmc19yZWFkZGlyCit9OworCitzdGF0aWMgaW50CitlZmlmc19kZXZfaW5p
dCh2b2lkKQoreworCUVGSV9IQU5ETEUgKmhpbjsKKwlFRklfU1RBVFVTIHN0YXR1czsKKwlVSU5U
TiBzejsKKwl1X2ludCBuLCBuaW4sIHVuaXQ7CisJaW50IGVycjsKKworCXN6ID0gMDsKKwloaW4g
PSBOVUxMOworCXN0YXR1cyA9IEJTLT5Mb2NhdGVIYW5kbGUoQnlQcm90b2NvbCwgJlNpbXBsZUZp
bGVTeXN0ZW1Qcm90b2NvbEdVSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgJnN6LCAwKTsKKwlpZiAoc3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7CisJCWhp
biA9IChFRklfSEFORExFICopbWFsbG9jKHN6KTsKKwkJc3RhdHVzID0gQlMtPkxvY2F0ZUhhbmRs
ZShCeVByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAmU2ltcGxlRmlsZVN5c3RlbVByb3Rv
Y29sR1VJRCwgMCwgJnN6LCBoaW4pOworCQlpZiAoRUZJX0VSUk9SKHN0YXR1cykpCisJCQlmcmVl
KGhpbik7CisJfQorCWlmIChFRklfRVJST1Ioc3RhdHVzKSkKKwkJcmV0dXJuIChlZmlfc3RhdHVz
X3RvX2Vycm5vKHN0YXR1cykpOworCisJLyogRmlsdGVyIGhhbmRsZXMgdG8gb25seSBpbmNsdWRl
IEZyZWVCU0QgcGFydGl0aW9ucy4gKi8KKwluaW4gPSBzeiAvIHNpemVvZihFRklfSEFORExFKTsK
Kwl1bml0ID0gMDsKKworCWZvciAobiA9IDA7IG4gPCBuaW47IG4rKykgeworCQlzdGF0dXMgPSBC
Uy0+T3BlblByb3RvY29sKGhpbltuXSwgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBJSCwgTlVMTCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RP
Q09MX1RFU1RfUFJPVE9DT0wpOworCQlpZiAoRUZJX0VSUk9SKHN0YXR1cykpCisJCQljb250aW51
ZTsKKworICAgICAgICAgICAgICAgIGVmaV9oYW5kbGVfdXBkYXRlX2RldihoaW5bbl0sICZlZmlm
c19kZXYsIHVuaXQrKywgMCk7CisJfQorCisJZnJlZShoaW4pOworCXJldHVybiAoZXJyKTsKK30K
KworCitzdGF0aWMgaW50CitlZmlmc19kZXZfcHJpbnQoaW50IHZlcmJvc2UpCit7CisJY2hhciBs
aW5lWzgwXTsKKyAgICAgICAgRUZJX0RFVklDRV9QQVRIICpkZXZwYXRoOworICAgICAgICBFRklf
QkxPQ0tfSU8gKmJsa2lvOworCUVGSV9IQU5ETEUgaCwgKmhpbjsKKwlFRklfU1RBVFVTIHN0YXR1
czsKKwl1X2ludCB1bml0LCBuOworCisJZm9yICh1bml0ID0gMCwgaCA9IGVmaV9maW5kX2hhbmRs
ZSgmZWZpZnNfZGV2LCAwKTsKKwkgICAgaCAhPSBOVUxMOyBoID0gZWZpX2ZpbmRfaGFuZGxlKCZl
Zmlmc19kZXYsICsrdW5pdCkpIHsKKwkJc3ByaW50ZihsaW5lLCAiICAgICVzJWQ6IiwgZWZpZnNf
ZGV2LmR2X25hbWUsIHVuaXQpOworCQlwYWdlcl9vdXRwdXQobGluZSk7CisgICAgICAgICAgICAg
ICAgcGFnZXJfb3V0cHV0KCIgICAgRUZJKFNJTVBMRV9GSUxFX1NZU1RFTSIpOworCisJCXN0YXR1
cyA9IEJTLT5IYW5kbGVQcm90b2NvbChoaW5bbl0sICZEZXZpY2VQYXRoR1VJRCwKKwkJICAgICh2
b2lkICoqKSZkZXZwYXRoKTsKKwkJaWYgKCFFRklfRVJST1Ioc3RhdHVzKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcGFnZXJfb3V0cHV0KCIsIERFVklDRV9QQVRIIik7CisJCX0KKworCQlz
dGF0dXMgPSBCUy0+SGFuZGxlUHJvdG9jb2woaGluW25dLCAmQmxvY2tJb1Byb3RvY29sR1VJRCwK
KwkJICAgICh2b2lkICoqKSZibGtpbyk7CisJCWlmICghRUZJX0VSUk9SKHN0YXR1cykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBhZ2VyX291dHB1dCgiLCBCTE9DS19JTyIpOworCQl9CisJ
CXBhZ2VyX291dHB1dCgiKVxuIik7CisJfQorICAgICAgICByZXR1cm4gKDApOworfQorCitzdGF0
aWMgaW50CitlZmlmc19kZXZfb3BlbihzdHJ1Y3Qgb3Blbl9maWxlICpmLCAuLi4pCit7CisJdmFf
bGlzdCBhcmdzOworCXN0cnVjdCBkZXZkZXNjICpkZXY7CisJRUZJX0ZJTEVfSU9fSU5URVJGQUNF
ICpmc2lmYWNlOworCUVGSV9IQU5ETEUgaDsKKwlFRklfU1RBVFVTIHN0YXR1czsKKworCXZhX3N0
YXJ0KGFyZ3MsIGYpOworCWRldiA9IHZhX2FyZyhhcmdzLCBzdHJ1Y3QgZGV2ZGVzYyopOworCXZh
X2VuZChhcmdzKTsKKworCWggPSBlZmlfZmluZF9oYW5kbGUoJmVmaWZzX2RldiwgZGV2LT5kX3Vu
aXQpOworCisJaWYgKGggPT0gTlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOworCisgICAgICAgIHN0
YXR1cyA9IEJTLT5PcGVuUHJvdG9jb2woaCwgJlNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEdVSUQs
CisgICAgICAgICAgICAodm9pZCoqKSZmc2lmYWNlLCBJSCwgTlVMTCwgRUZJX09QRU5fUFJPVE9D
T0xfR0VUX1BST1RPQ09MKTsKKworICAgICAgICBpZiAoRUZJX0VSUk9SKHN0YXR1cykpIHsKKwkJ
cmV0dXJuIChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICB9CisKKyAgICAg
ICAgZGV2LT5kX29wZW5kYXRhID0gZnNpZmFjZTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMg
aW50CitlZmlmc19kZXZfY2xvc2Uoc3RydWN0IG9wZW5fZmlsZSAqZikKK3sKKwlzdHJ1Y3QgZGV2
ZGVzYyAqZGV2OworCUVGSV9IQU5ETEUgaDsKKyAgICAgICAgRUZJX1NUQVRVUyBzdGF0dXM7CisK
KwlkZXYgPSAoc3RydWN0IGRldmRlc2MgKikoZi0+Zl9kZXZkYXRhKTsKKwloID0gZWZpX2ZpbmRf
aGFuZGxlKCZlZmlmc19kZXYsIGRldi0+ZF91bml0KTsKKworCWlmIChoID09IE5VTEwpCisJCXJl
dHVybiAoRUlOVkFMKTsKKworCWlmIChkZXYtPmRfb3BlbmRhdGEgPT0gTlVMTCkKKwkJcmV0dXJu
IChFSU5WQUwpOworCisgICAgICAgIHN0YXR1cyA9IEJTLT5DbG9zZVByb3RvY29sKGgsICZTaW1w
bGVGaWxlU3lzdGVtUHJvdG9jb2xHVUlELCBJSCwgTlVMTCk7CisKKyAgICAgICAgaWYgKEVGSV9F
UlJPUihzdGF0dXMpKQorCQlyZXR1cm4gKGVmaV9zdGF0dXNfdG9fZXJybm8oc3RhdHVzKSk7CisK
KwlkZXYtPmRfb3BlbmRhdGEgPSBOVUxMOworCXJldHVybiAoMCk7Cit9CisKKworLyogUmF3IEkv
TyBpc24ndCBzdXBwb3J0ZWQgb24gRUZJIEZTIGRldmljZXMsIGFzIHRoZXkgdGFsayB0aHJvdWdo
CisgKiBTSU1QTEVfRklMRV9TWVNURU1fSU5URVJGQUNFLgorICovCitzdGF0aWMgaW50CitlZmlm
c19kZXZfc3RyYXRlZ3kodm9pZCAqZGV2ZGF0YSBfX3VudXNlZCwgaW50IHJ3IF9fdW51c2VkLCBk
YWRkcl90IGJsayBfX3VudXNlZCwKKyAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0LCBz
aXplX3Qgc2l6ZSBfX3VudXNlZCwgY2hhciAqYnVmIF9fdW51c2VkLAorICAgICAgICAgICAgICAg
ICAgIHNpemVfdCAqcnNpemUgX191bnVzZWQpCit7CisgICAgICAgIHByaW50ZigiUmF3IEkvTyBu
b3Qgc3VwcG9ydGVkIG9uIEVGSSBGUyBpbnRlcmZhY2VcbiIpOworCXJldHVybiBFTk9UU1VQOwor
fQorCisvKgorICogT3BlbiBhIGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2VmaWZzX29wZW4oY29u
c3QgY2hhciAqdXBhdGgsIHN0cnVjdCBvcGVuX2ZpbGUgKmYpCit7CisJc3RydWN0IGRldmRlc2Mg
KmRldjsKKwlFRklfRklMRV9JT19JTlRFUkZBQ0UgKmZzaWZhY2U7CisJRUZJX0ZJTEVfSEFORExF
IHJvb3Q7CisgICAgICAgIEVGSV9TVEFUVVMgc3RhdHVzOworICAgICAgICBDSEFSMTYgcGF0aFtz
dHJsZW4odXBhdGgpICsgMV07CisKKwlkZXYgPSAoc3RydWN0IGRldmRlc2MgKikoZi0+Zl9kZXZk
YXRhKTsKKyAgICAgICAgZnNpZmFjZSA9IGRldi0+ZF9vcGVuZGF0YTsKKworICAgICAgICBpZiAo
IXN0cmNtcCh1cGF0aCwgIiIpIHx8ICFzdHJjbXAodXBhdGgsICIvIikpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKGZzaWZhY2UtPk9wZW5Wb2x1bWUoZnNpZmFjZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEVGSV9GSUxFX0hBTkRMRSopJihmLT5mX2Zz
ZGF0YSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBmc2lm
YWNlLT5PcGVuVm9sdW1lKGZzaWZhY2UsICZyb290KTsKKworICAgICAgICAgICAgICAgIGlmIChF
RklfRVJST1Ioc3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlZmlf
c3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIHN0cmNweV90b18xNihwYXRoLCB1cGF0aCk7CisgICAgICAgICAgICAgICAgc3RhdHVz
ID0gcm9vdC0+T3Blbihyb290LCAoRUZJX0ZJTEVfSEFORExFKikmKGYtPmZfZnNkYXRhKSwgcGF0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfUkVB
RCwgMCk7CisKKyAgICAgICAgICAgICAgICByb290LT5DbG9zZShyb290KTsKKworICAgICAgICAg
ICAgICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQK
K2VmaWZzX2Nsb3NlKHN0cnVjdCBvcGVuX2ZpbGUgKmYpCit7CisgICAgICAgIEVGSV9GSUxFX0hB
TkRMRSBmaWxlID0gKEVGSV9GSUxFX0hBTkRMRSlmLT5mX2ZzZGF0YTsKKyAgICAgICAgRUZJX1NU
QVRVUyBzdGF0dXM7CisKKyAgICAgICAgc3RhdHVzID0gZmlsZS0+Q2xvc2UoZmlsZSk7CisKKyAg
ICAgICAgaWYgKEVGSV9FUlJPUihzdGF0dXMpKQorCQlyZXR1cm4gKGVmaV9zdGF0dXNfdG9fZXJy
bm8oc3RhdHVzKSk7CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWZp
ZnNfcmVhZChzdHJ1Y3Qgb3Blbl9maWxlICpmLCB2b2lkICpzdGFydCwgc2l6ZV90IHNpemUsIHNp
emVfdCAqcmVzaWQgLyogb3V0ICovKQoreworICAgICAgICBFRklfRklMRV9IQU5ETEUgZmlsZSA9
IChFRklfRklMRV9IQU5ETEUpZi0+Zl9mc2RhdGE7CisgICAgICAgIFVJTlROIHJlYWRzaXplID0g
c2l6ZTsKKyAgICAgICAgRUZJX1NUQVRVUyBzdGF0dXM7CisKKyAgICAgICAgc3RhdHVzID0gZmls
ZS0+UmVhZChmaWxlLCAmcmVhZHNpemUsIHN0YXJ0KTsKKworICAgICAgICBpZiAoRUZJX0VSUk9S
KHN0YXR1cykpCisJCXJldHVybiAoZWZpX3N0YXR1c190b19lcnJubyhzdGF0dXMpKTsKKworCWlm
IChyZXNpZCkKKwkJKnJlc2lkID0gc2l6ZSAtIHJlYWRzaXplOworCisJcmV0dXJuICgwKTsKK30K
Kworc3RhdGljIGludAorZWZpZnNfd3JpdGUoc3RydWN0IG9wZW5fZmlsZSAqZiwgdm9pZCAqc3Rh
cnQsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgc2l6ZV90ICpyZXNpZCAvKiBvdXQgKi8pCit7
CisgICAgICAgIEVGSV9GSUxFX0hBTkRMRSBmaWxlID0gKEVGSV9GSUxFX0hBTkRMRSlmLT5mX2Zz
ZGF0YTsKKyAgICAgICAgVUlOVE4gd3JpdGVzaXplID0gc2l6ZTsKKyAgICAgICAgRUZJX1NUQVRV
UyBzdGF0dXM7CisKKyAgICAgICAgc3RhdHVzID0gZmlsZS0+V3JpdGUoZmlsZSwgJndyaXRlc2l6
ZSwgc3RhcnQpOworCisgICAgICAgIGlmIChFRklfRVJST1Ioc3RhdHVzKSkKKwkJcmV0dXJuIChl
Zmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworCisJaWYgKHJlc2lkKQorCQkqcmVzaWQgPSBz
aXplIC0gd3JpdGVzaXplOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIG9mZl90CitlZmlm
c19zZWVrKHN0cnVjdCBvcGVuX2ZpbGUgKmYsIG9mZl90IG9mZnNldCwgaW50IHdoZXJlKQorewor
ICAgICAgICBFRklfRklMRV9IQU5ETEUgZmlsZSA9IChFRklfRklMRV9IQU5ETEUpZi0+Zl9mc2Rh
dGE7CisgICAgICAgIFVJTlQ2NCBwb3M7CisgICAgICAgIEVGSV9TVEFUVVMgc3RhdHVzOworCisJ
c3dpdGNoICh3aGVyZSkgeworCWNhc2UgU0VFS19TRVQ6CisgICAgICAgICAgICAgICAgc3RhdHVz
ID0gZmlsZS0+U2V0UG9zaXRpb24oZmlsZSwgb2Zmc2V0KTsKKworICAgICAgICAgICAgICAgIGlm
IChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm5v
ID0gKGVmaV9zdGF0dXNfdG9fZXJybm8oc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorCisJCWJyZWFrOworCWNhc2UgU0VFS19D
VVI6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gZmlsZS0+R2V0UG9zaXRpb24oZmlsZSwgJnBv
cyk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHN0YXR1cyA9IGZpbGUtPlNldFBvc2l0aW9uKGZpbGUsIHBvcyAr
IG9mZnNldCk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0
YXR1cykpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAg
ICAgIH0KKworCQlicmVhazsKKwljYXNlIFNFRUtfRU5EOgorICAgICAgICAgICAgICAgIHN0YXR1
cyA9IGZpbGUtPlNldFBvc2l0aW9uKGZpbGUsIDB4ZmZmZmZmZmZmZmZmZmZmZik7CisKKyAgICAg
ICAgICAgICAgICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKwlkZWZhdWx0Ogor
CQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisgICAgICAgIHN0YXR1cyA9
IGZpbGUtPkdldFBvc2l0aW9uKGZpbGUsICZwb3MpOworCisgICAgICAgIGlmIChzdGF0dXMgIT0g
RUZJX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vy
cm5vKHN0YXR1cykpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisJ
cmV0dXJuIChwb3MpOworfQorCisvKiBTSU1QTEVfRklMRV9TWVNURU1fUFJPVE9DT0wgaXMgZ2Vh
cmVkIHRvd2FyZHMgRkFULCBzbyB3ZSBjYW4ndAorICogcmVwcm9kdWNlIHN0YXQgd2l0aCBhYnNv
bHV0ZSBmaWRlbGl0eS4KKyAqLworc3RhdGljIGludAorZWZpZnNfc3RhdChzdHJ1Y3Qgb3Blbl9m
aWxlICpmLCBzdHJ1Y3Qgc3RhdCAqc2IpCit7CisgICAgICAgIEVGSV9GSUxFX0hBTkRMRSBmaWxl
OworICAgICAgICBVSU5UTiBzaXplID0gMDsKKyAgICAgICAgRUZJX0ZJTEVfSU5GTyAqZmluZm87
OworICAgICAgICBFRklfU1RBVFVTIHN0YXR1czsKKworICAgICAgICBmaWxlID0gKEVGSV9GSUxF
X0hBTkRMRSlmLT5mX2ZzZGF0YTsKKyAgICAgICAgc3RhdHVzID0gZmlsZS0+R2V0SW5mbyhmaWxl
LCAmRmlsZUluZm9HVUlELCAmc2l6ZSwgTlVMTCk7CisKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBF
RklfQlVGRkVSX1RPT19TTUFMTCkgeworICAgICAgICAgICAgICAgIGVycm5vID0gKGVmaV9zdGF0
dXNfdG9fZXJybm8oc3RhdHVzKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg
ICB9CisKKyAgICAgICAgZmluZm8gPSBtYWxsb2Moc2l6ZSk7CisgICAgICAgIHN0YXR1cyA9IGZp
bGUtPkdldEluZm8oZmlsZSwgJkZpbGVJbmZvR1VJRCwgJnNpemUsIGZpbmZvKTsKKworICAgICAg
ICBpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgZXJybm8gPSAo
ZWZpX3N0YXR1c190b19lcnJubyhzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7
CisgICAgICAgIH0KKworICAgICAgICAvKiBXZSBjYW4ndCBwcm9wZXJseSBmaWxsIHRoZXNlIGlu
Li4uICovCisgICAgICAgIHNiLT5zdF9pbm8gPSAwOworICAgICAgICBzYi0+c3RfbmxpbmsgPSAw
OworICAgICAgICBzYi0+c3RfdWlkID0gMDsKKyAgICAgICAgc2ItPnN0X2dpZCA9IDA7CisgICAg
ICAgIHNiLT5zdF9ibGtzaXplID0gNTEyOworICAgICAgICAvKiBCdWlsZCB0aGUgbW9kZSBmaWVs
ZCAqLworICAgICAgICBpZiAoZmluZm8tPkF0dHJpYnV0ZSAmIEVGSV9GSUxFX0RJUkVDVE9SWSkg
eworICAgICAgICAgICAgICAgIHNiLT5zdF9tb2RlID0gU19JRkRJUjsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzYi0+c3RfbW9kZSA9IFNfSUZSRUc7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZmluZm8tPkF0dHJpYnV0ZSAmIEVGSV9GSUxFX01PREVfUkVBRCkgeworICAg
ICAgICAgIHNiLT5zdF9tb2RlID0gU19JUlVTUiB8IFNfSVhVU1IgfCBTX0lSR1JQIHwKKyAgICAg
ICAgICAgIFNfSVhHUlAgfCBTX0lST1RIIHwgU19JWE9USDsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChmaW5mby0+QXR0cmlidXRlICYgRUZJX0ZJTEVfTU9ERV9SRUFEKSB7CisgICAgICAgICAg
c2ItPnN0X21vZGUgPSBTX0lXVVNSIHwgU19JV0dSUCB8IFNfSVdPVEg7CisgICAgICAgIH0KKyAg
ICAgICAgLyogVGhpcyBtYXkgb3IgbWF5IG5vdCBiZSBzdXBwb3J0ZWQsIGRlcGVuZGluZyBvbiB0
aGUgRlMgZHJpdmVyICovCisgICAgICAgIHNiLT5zdF9ibG9ja3MgPSBmaW5mby0+UGh5c2ljYWxT
aXplIC8gNTEyOworICAgICAgICAvKiBUaGVzZSBmaWVsZHMgd2UgY2FuIGdldCByaWdodCAqLwor
ICAgICAgICBzYi0+c3Rfc2l6ZSA9IGZpbmZvLT5GaWxlU2l6ZTsKKyAgICAgICAgc2ItPnN0X2F0
aW1lID0gZnJvbV9lZmlfdGltZSgmKGZpbmZvLT5MYXN0QWNjZXNzVGltZSkpOworICAgICAgICBz
Yi0+c3RfbXRpbWUgPSBmcm9tX2VmaV90aW1lKCYoZmluZm8tPk1vZGlmaWNhdGlvblRpbWUpKTsK
KyAgICAgICAgc2ItPnN0X2N0aW1lID0gZnJvbV9lZmlfdGltZSgmKGZpbmZvLT5DcmVhdGVUaW1l
KSk7CisKKyAgICAgICAgZnJlZShmaW5mbyk7CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKwor
c3RhdGljIGludAorZWZpZnNfcmVhZGRpcihzdHJ1Y3Qgb3Blbl9maWxlICpmLCBzdHJ1Y3QgZGly
ZW50ICpkKQoreworICAgICAgICBFRklfRklMRV9IQU5ETEUgZmlsZTsKKyAgICAgICAgVUlOVE4g
c2l6ZSA9IDA7CisgICAgICAgIEVGSV9GSUxFX0lORk8gKmZpbmZvOzsKKyAgICAgICAgRUZJX1NU
QVRVUyBzdGF0dXM7CisKKyAgICAgICAgZmlsZSA9IChFRklfRklMRV9IQU5ETEUpZi0+Zl9mc2Rh
dGE7CisgICAgICAgIHN0YXR1cyA9IGZpbGUtPlJlYWQoZmlsZSwgJnNpemUsIE5VTEwpOworCisg
ICAgICAgIGlmIChzdGF0dXMgIT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsKKyAgICAgICAgICAg
ICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAgICAgICAg
ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplID09IDApIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gKEVOT0VOVCk7CisgICAgICAgIH0KKworICAgICAgICBmaW5m
byA9IG1hbGxvYyhzaXplKTsKKyAgICAgICAgc3RhdHVzID0gZmlsZS0+UmVhZChmaWxlLCAmc2l6
ZSwgZmluZm8pOworCisgICAgICAgIGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKKyAgICAg
ICAgICAgICAgICBlcnJubyA9IChlZmlfc3RhdHVzX3RvX2Vycm5vKHN0YXR1cykpOworICAgICAg
ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmNweV9mcm9tXzE2
KGQtPmRfbmFtZSwgZmluZm8tPkZpbGVOYW1lKTsKKyAgICAgICAgZC0+ZF9uYW1sZW4gPSBzdHJs
ZW4oZC0+ZF9uYW1lKTsKKyAgICAgICAgZC0+ZF9yZWNsZW4gPSBzaXplb2Yoc3RydWN0IGRpcmVu
dCk7CisgICAgICAgIC8qIFdlIGNhbid0IGZhaXRoZnVsbHkgcmVwcm9kdWNlIHRoaXMgZHVlIHRv
IHRoZSBsaW1pdGF0aW9ucworICAgICAgICAgKiBvZiB0aGUgU0lNUExFX0ZJTEVfU1lTVEVNIGlu
dGVyZmFjZSAqLworICAgICAgICBkLT5kX2ZpbGVubyA9IDA7CisKKyAgICAgICAgZnJlZShmaW5m
byk7CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvbGli
ZWZpL2Vycm5vLmMgc3lzL2Jvb3QvZWZpL2xpYmVmaS9lcnJuby5jCmluZGV4IGZhYzkwM2ZhZjI3
Li4wZjM1NGMzZjNjOCAxMDA2NDQKLS0tIHN5cy9ib290L2VmaS9saWJlZmkvZXJybm8uYworKysg
c3lzL2Jvb3QvZWZpL2xpYmVmaS9lcnJuby5jCkBAIC0zMCw2ICszMCw2OSBAQCBfX0ZCU0RJRCgi
JEZyZWVCU0QkIik7CiAjaW5jbHVkZSA8ZWZpLmg+CiAjaW5jbHVkZSA8ZWZpbGliLmg+CiAKK0VG
SV9TVEFUVVMKK2Vycm5vX3RvX2VmaV9zdGF0dXMoaW50IGVycm5vKQoreworICAgICAgICBFRklf
U1RBVFVTIHN0YXR1czsKKworICAgICAgICBzd2l0Y2ggKGVycm5vKSB7CisgICAgICAgIGNhc2Ug
RVBFUk06CisgICAgICAgICAgICAgICAgc3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT1ZFUkZMT1c6CisgICAgICAgICAg
ICAgICAgc3RhdHVzID0gRUZJX0JVRkZFUl9UT09fU01BTEw7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBFSU86CisgICAgICAgICAgICAgICAgc3RhdHVzID0gRUZJX0RF
VklDRV9FUlJPUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVJTlZB
TDoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFU1RBTEU6CisgICAgICAgICAgICAg
ICAgc3RhdHVzID0gRUZJX01FRElBX0NIQU5HRUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBFTlhJTzoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBFRklfTk9fTUVE
SUE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFTk9FTlQ6CisgICAg
ICAgICAgICAgICAgc3RhdHVzID0gRUZJX05PVF9GT1VORDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEVOT01FTToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBFRklf
T1VUX09GX1JFU09VUkNFUzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEVOT1RTVVA6CisgICAgICAgIGNhc2UgRU5PREVWOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9
IEVGSV9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEVOT1NQQzoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBFRklfVk9MVU1FX0ZVTEw7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFQUNDRVM6CisgICAgICAgICAgICAg
ICAgc3RhdHVzID0gRUZJX1dSSVRFX1BST1RFQ1RFRDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gRUZJX1NVQ0NFU1M7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBzdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIChzdGF0dXMpOworfQorCiBpbnQKIGVmaV9zdGF0
dXNfdG9fZXJybm8oRUZJX1NUQVRVUyBzdGF0dXMpCiB7CmRpZmYgLS1naXQgc3lzL2Jvb3QvZWZp
L2xpYmVmaS9oYW5kbGVzLmMgc3lzL2Jvb3QvZWZpL2xpYmVmaS9oYW5kbGVzLmMKaW5kZXggMWU0
ZWY2ZmZiZDUuLmMxMTgwODVjMWM5IDEwMDY0NAotLS0gc3lzL2Jvb3QvZWZpL2xpYmVmaS9oYW5k
bGVzLmMKKysrIHN5cy9ib290L2VmaS9saWJlZmkvaGFuZGxlcy5jCkBAIC00MSwyMSArNDEsMzYg
QEAgc3RydWN0IGVudHJ5IHsKIHN0cnVjdCBlbnRyeSAqZW50cnk7CiBpbnQgbmVudHJpZXM7CiAK
K3N0YXRpYyBpbnQKK2dldF9uZXh0X3VuaXQoc3RydWN0IGRldnN3ICpzdykKK3sKKyAgICAgICAg
aW50IGksIGlkeDsKKworICAgICAgICBmb3IgKGkgPSAwLCBpZHggPSAwOyBpIDwgbmVudHJpZXM7
IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChlbnRyeVtpXS5kZXYgPT0gc3cpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlkeCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiAoaWR4KTsKK30KKwogaW50CiBlZmlfcmVnaXN0ZXJfaGFuZGxlcyhz
dHJ1Y3QgZGV2c3cgKnN3LCBFRklfSEFORExFICpoYW5kbGVzLAogICAgIEVGSV9IQU5ETEUgKmFs
aWFzZXMsIGludCBjb3VudCkKIHsKIAlzaXplX3Qgc3o7Ci0JaW50IGlkeCwgdW5pdDsKKwlpbnQg
aWR4LCB1bml0LCBpOwogCiAJaWR4ID0gbmVudHJpZXM7CiAJbmVudHJpZXMgKz0gY291bnQ7CiAJ
c3ogPSBuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZW50cnkpOworICAgICAgICB1bml0ID0gZ2V0
X25leHRfdW5pdChzdyk7CiAJZW50cnkgPSAoZW50cnkgPT0gTlVMTCkgPyBtYWxsb2Moc3opIDog
cmVhbGxvYyhlbnRyeSwgc3opOwotCWZvciAodW5pdCA9IDA7IGlkeCA8IG5lbnRyaWVzOyBpZHgr
KywgdW5pdCsrKSB7Ci0JCWVudHJ5W2lkeF0uaGFuZGxlID0gaGFuZGxlc1t1bml0XTsKKwlmb3Ig
KGkgPSAwOyBpZHggPCBuZW50cmllczsgaWR4KyssIHVuaXQrKywgaSsrKSB7CisJCWVudHJ5W2lk
eF0uaGFuZGxlID0gaGFuZGxlc1tpXTsKIAkJaWYgKGFsaWFzZXMgIT0gTlVMTCkKLQkJCWVudHJ5
W2lkeF0uYWxpYXMgPSBhbGlhc2VzW3VuaXRdOworCQkJZW50cnlbaWR4XS5hbGlhcyA9IGFsaWFz
ZXNbaV07CiAJCWVsc2UKIAkJCWVudHJ5W2lkeF0uYWxpYXMgPSBOVUxMOwogCQllbnRyeVtpZHhd
LmRldiA9IHN3OwpAQCAtNjQsNiArNzksMTYgQEAgZWZpX3JlZ2lzdGVyX2hhbmRsZXMoc3RydWN0
IGRldnN3ICpzdywgRUZJX0hBTkRMRSAqaGFuZGxlcywKIAlyZXR1cm4gKDApOwogfQogCitpbnQK
K2VmaV9yZWdpc3Rlcl9oYW5kbGUoc3RydWN0IGRldnN3ICpzdywgRUZJX0hBTkRMRSBoYW5kbGUs
IEVGSV9IQU5ETEUgYWxpYXMpCit7CisgICAgICAgIGlmIChhbGlhcyA9PSBOVUxMKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVmaV9yZWdpc3Rlcl9oYW5kbGVzKHN3LCAmaGFuZGxlLCBOVUxM
LCAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWZpX3JlZ2lz
dGVyX2hhbmRsZXMoc3csICZoYW5kbGUsICZhbGlhcywgMSk7CisgICAgICAgIH0KK30KKwogRUZJ
X0hBTkRMRQogZWZpX2ZpbmRfaGFuZGxlKHN0cnVjdCBkZXZzdyAqZGV2LCBpbnQgdW5pdCkKIHsK
QEAgLTExNiwzICsxNDEsMjkgQEAgZWZpX2hhbmRsZV91cGRhdGVfZGV2KEVGSV9IQU5ETEUgaCwg
c3RydWN0IGRldnN3ICpkZXYsIGludCB1bml0LAogCiAJcmV0dXJuIChFTk9FTlQpOwogfQorCitp
bnQKK2VmaV9oYW5kbGVfcmVtb3ZlX2RldihFRklfSEFORExFIGgpCit7CisJaW50IGlkeDsKKwor
ICAgICAgICAvKiBGaW5kIHRoZSBlbnRyeSAqLworCWZvciAoaWR4ID0gMDsgaWR4IDwgbmVudHJp
ZXM7IGlkeCsrKSB7CisJCWlmIChlbnRyeVtpZHhdLmhhbmRsZSAhPSBoKQorCQkJY29udGludWU7
CisJfQorCisgICAgICAgIGlmIChpZHggPj0gbmVudHJpZXMpCisgICAgICAgICAgICAgICAgcmV0
dXJuIChFTk9FTlQpOworICAgICAgICBlbHNlIGlmIChpZHggPT0gbmVudHJpZXMgLSAxKSB7Cisg
ICAgICAgICAgICAgICAgbmVudHJpZXMtLTsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IHJlYWxs
b2MoZW50cnksIG5lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBlbnRyeSkpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeSArIGlkeCwgZW50cnkgKyBpZHggKyAx
LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGVudHJ5KSAqIChuZW50cmll
cyAtIChpZHggKyAxKSkpOworICAgICAgICAgICAgICAgIG5lbnRyaWVzLS07CisgICAgICAgICAg
ICAgICAgZW50cnkgPSByZWFsbG9jKGVudHJ5LCBuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZW50
cnkpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgc3lz
L2Jvb3QvZWZpL2xpYmVmaS9zdHJpbmcxNi5jIHN5cy9ib290L2VmaS9saWJlZmkvc3RyaW5nMTYu
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjk5ZDcyZGQwZjAKLS0t
IC9kZXYvbnVsbAorKysgc3lzL2Jvb3QvZWZpL2xpYmVmaS9zdHJpbmcxNi5jCkBAIC0wLDAgKzEs
ODggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE2IEVyaWMgTWNDb3JrbGUKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgInN0cmluZzE2
LmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKK3NpemVfdAorc3RybGVuMTYoY29uc3QgQ0hBUjE2
ICpzdHIpCit7CisgICAgICAgIHNpemVfdCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IHN0cltp
XSAhPSAwOyBpKyspOworCisgICAgICAgIHJldHVybiBpOworfQorCitDSEFSMTYgKgorc3RyY3B5
MTYoQ0hBUjE2ICpkc3QsIGNvbnN0IENIQVIxNiAqc3JjKQoreworICAgICAgICBzdHBjcHkxNihk
c3QsIHNyYyk7CisKKyAgICAgICAgcmV0dXJuIChkc3QpOworfQorCitDSEFSMTYgKgorc3RwY3B5
MTYoQ0hBUjE2ICpkc3QsIGNvbnN0IENIQVIxNiAqc3JjKQoreworICAgICAgICBmb3IgKDsgKnNy
YyAhPSAwOyBzcmMrKywgZHN0KyspIHsKKyAgICAgICAgICAgICAgICAqZHN0ID0gKnNyYzsKKyAg
ICAgICAgfQorCisgICAgICAgICpkc3QgPSAqc3JjOworCisgICAgICAgIHJldHVybiBkc3Q7Cit9
CisKK2NoYXIgKgorc3RyY3B5X2Zyb21fMTYoY2hhciAqZHN0LCBjb25zdCBDSEFSMTYgKnNyYykK
K3sKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgZm9yIChpID0gMDsgc3JjW2ldICE9IDA7IGkr
KykgeworICAgICAgICAgICAgICAgIGRzdFtpXSA9IHNyY1tpXTsKKyAgICAgICAgfQorCisgICAg
ICAgIGRzdFtpXSA9IDA7CisKKyAgICAgICAgcmV0dXJuIChkc3QpOworfQorCitDSEFSMTYgKgor
c3RyY3B5X3RvXzE2KENIQVIxNiAqZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisgICAgICAgIGlu
dCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IHNyY1tpXSAhPSAwOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBkc3RbaV0gPSBzcmNbaV07CisgICAgICAgIH0KKworICAgICAgICBkc3RbaV0gPSAw
OworCisgICAgICAgIHJldHVybiAoZHN0KTsKK30KZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvbGli
ZWZpL3RpbWUuYyBzeXMvYm9vdC9lZmkvbGliZWZpL3RpbWUuYwppbmRleCA5OTgzMWUxY2YxYS4u
MmRmNDY2ZTU3YjcgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvbGliZWZpL3RpbWUuYworKysgc3lz
L2Jvb3QvZWZpL2xpYmVmaS90aW1lLmMKQEAgLTIsMjggKzIsMjggQEAKICAqIENvcHlyaWdodCAo
YykgMTk5OSwgMjAwMAogICogSW50ZWwgQ29ycG9yYXRpb24uCiAgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0g
KiAKKyAqCiAgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogCisgKgogICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
ICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiAzLiBBbGwg
YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMg
c29mdHdhcmUKICAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVu
dDoKLSAqIAorICoKICAqICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w
ZWQgYnkgSW50ZWwgQ29ycG9yYXRpb24gYW5kCiAgKiAgICBpdHMgY29udHJpYnV0b3JzLgotICog
CisgKgogICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBvciBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZQogICogICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKICAqICAgIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBJTlRFTCBDT1JQT1JBVElPTiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwog
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKQEAgLTM1LDcgKzM1LDcg
QEAKICAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCiAgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCiAgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKKyAqCiAgKi8KIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5o
PgpAQCAtNTgsNiArNTgsNDEgQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2RlZmluZSBTRUNT
UEVSSE9VUiAoIDYwKjYwICkKICNkZWZpbmUgU0VDU1BFUkRBWQkoMjQgKiBTRUNTUEVSSE9VUikK
IAorLyoKKy8vICBUaGVzZSBhcnJheXMgZ2l2ZSB0aGUgY3VtdWxhdGl2ZSBudW1iZXIgb2YgZGF5
cyB1cCB0byB0aGUgZmlyc3Qgb2YgdGhlCisvLyAgbW9udGggbnVtYmVyIHVzZWQgYXMgdGhlIGlu
ZGV4ICgxIC0+IDEyKSBmb3IgcmVndWxhciBhbmQgbGVhcCB5ZWFycy4KKy8vICBUaGUgdmFsdWUg
YXQgaW5kZXggMTMgaXMgZm9yIHRoZSB3aG9sZSB5ZWFyLgorKi8KK3N0YXRpYyBjb25zdCB0aW1l
X3QgQ3VtdWxhdGl2ZURheXNbMl1bMTRdID0geworICB7MCwKKyAgIDAsCisgICAzMSwKKyAgIDMx
ICsgMjgsCisgICAzMSArIDI4ICsgMzEsCisgICAzMSArIDI4ICsgMzEgKyAzMCwKKyAgIDMxICsg
MjggKyAzMSArIDMwICsgMzEsCisgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAsCisgICAz
MSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSwKKyAgIDMxICsgMjggKyAzMSArIDMwICsg
MzEgKyAzMCArIDMxICsgMzEsCisgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSAr
IDMxICsgMzAsCisgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMxICsgMzAg
KyAzMSwKKyAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEgKyAzMCArIDMx
ICsgMzAsCisgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMxICsgMzAgKyAz
MSArIDMwICsgMzEgfSwKKyAgezAsCisgICAwLAorICAgMzEsCisgICAzMSArIDI5LAorICAgMzEg
KyAyOSArIDMxLAorICAgMzEgKyAyOSArIDMxICsgMzAsCisgICAzMSArIDI5ICsgMzEgKyAzMCAr
IDMxLAorICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwLAorICAgMzEgKyAyOSArIDMxICsg
MzAgKyAzMSArIDMwICsgMzEsCisgICAzMSArIDI5ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSAr
IDMxLAorICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSArIDMwLAorICAg
MzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSArIDMwICsgMzEsCisgICAzMSAr
IDI5ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMxICsgMzAgKyAzMSArIDMwLAorICAgMzEg
KyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSArIDMwICsgMzEgKyAzMCArIDMxIH19
OworCiB2b2lkCiBlZmlfdGltZV9pbml0KHZvaWQpCiB7CkBAIC02OCw0NSArMTAzLDQ2IEBAIGVm
aV90aW1lX2Zpbmkodm9pZCkKIHsKIH0KIAotc3RhdGljIHRpbWVfdAotZWZpX3RpbWUoRUZJX1RJ
TUUgKkVUaW1lKQordm9pZAordG9fZWZpX3RpbWUoRUZJX1RJTUUgKmVmaV90aW1lLCB0aW1lX3Qg
dGltZSkKIHsKLSAgICAvKgotICAgIC8vICBUaGVzZSBhcnJheXMgZ2l2ZSB0aGUgY3VtdWxhdGl2
ZSBudW1iZXIgb2YgZGF5cyB1cCB0byB0aGUgZmlyc3Qgb2YgdGhlCi0gICAgLy8gIG1vbnRoIG51
bWJlciB1c2VkIGFzIHRoZSBpbmRleCAoMSAtPiAxMikgZm9yIHJlZ3VsYXIgYW5kIGxlYXAgeWVh
cnMuCi0gICAgLy8gIFRoZSB2YWx1ZSBhdCBpbmRleCAxMyBpcyBmb3IgdGhlIHdob2xlIHllYXIu
Ci0gICAgKi8KLSAgICBzdGF0aWMgdGltZV90IEN1bXVsYXRpdmVEYXlzWzJdWzE0XSA9IHsKLSAg
ICB7MCwKLSAgICAgMCwKLSAgICAgMzEsCi0gICAgIDMxICsgMjgsCi0gICAgIDMxICsgMjggKyAz
MSwKLSAgICAgMzEgKyAyOCArIDMxICsgMzAsCi0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEs
Ci0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCwKLSAgICAgMzEgKyAyOCArIDMxICsg
MzAgKyAzMSArIDMwICsgMzEsCi0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMx
ICsgMzEsCi0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEgKyAzMCwK
LSAgICAgMzEgKyAyOCArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSArIDMwICsgMzEsCi0g
ICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEgKyAzMCArIDMxICsgMzAs
Ci0gICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEgKyAzMCArIDMxICsg
MzAgKyAzMSB9LAotICAgIHswLAotICAgICAwLAotICAgICAzMSwKLSAgICAgMzEgKyAyOSwKLSAg
ICAgMzEgKyAyOSArIDMxLAotICAgICAzMSArIDI5ICsgMzEgKyAzMCwKLSAgICAgMzEgKyAyOSAr
IDMxICsgMzAgKyAzMSwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwLAotICAgICAz
MSArIDI5ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAg
KyAzMSArIDMwICsgMzEgKyAzMSwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsg
MzEgKyAzMSArIDMwLAotICAgICAzMSArIDI5ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMx
ICsgMzAgKyAzMSwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAzMSAr
IDMwICsgMzEgKyAzMCwKLSAgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEgKyAz
MSArIDMwICsgMzEgKyAzMCArIDMxIH19OwotCi0gICAgdGltZV90ICBVVGltZTsgCisgICAgICAg
IGlmICh0aW1lID49IDApIHsKKyAgICAgICAgICAgICAgICBmb3IgKGVmaV90aW1lLT5ZZWFyID0g
MTk3MDsKKyAgICAgICAgICAgICAgICAgICAgdGltZSA+IEN1bXVsYXRpdmVEYXlzW2lzbGVhcChl
ZmlfdGltZS0+WWVhcildWzEzXSAqIFNFQ1NQRVJEQVk7CisgICAgICAgICAgICAgICAgICAgIHRp
bWUgLT0gQ3VtdWxhdGl2ZURheXNbaXNsZWFwKGVmaV90aW1lLT5ZZWFyKV1bMTNdICogU0VDU1BF
UkRBWSwKKyAgICAgICAgICAgICAgICAgICAgZWZpX3RpbWUtPlllYXIrKyk7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKGVmaV90aW1lLT5Nb250aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHRp
bWUgPiBDdW11bGF0aXZlRGF5c1tpc2xlYXAoZWZpX3RpbWUtPlllYXIpXVtlZmlfdGltZS0+TW9u
dGhdICoKKyAgICAgICAgICAgICAgICAgICAgICBTRUNTUEVSREFZOworICAgICAgICAgICAgICAg
ICAgICBlZmlfdGltZS0+TW9udGgrKyk7CisKKyAgICAgICAgICAgICAgICB0aW1lIC09IEN1bXVs
YXRpdmVEYXlzW2lzbGVhcChlZmlfdGltZS0+WWVhcildW2VmaV90aW1lLT5Nb250aCAtIDFdICoK
KyAgICAgICAgICAgICAgICAgICAgU0VDU1BFUkRBWTsKKworICAgICAgICAgICAgICAgIGZvciAo
ZWZpX3RpbWUtPkRheSA9IDA7IHRpbWUgPiBTRUNTUEVSREFZOworICAgICAgICAgICAgICAgICAg
ICB0aW1lIC09IFNFQ1NQRVJEQVksIGVmaV90aW1lLT5EYXkrKyk7CisKKyAgICAgICAgICAgICAg
ICBmb3IgKGVmaV90aW1lLT5Ib3VyID0gMDsgdGltZSA+IFNFQ1NQRVJIT1VSOworICAgICAgICAg
ICAgICAgICAgICB0aW1lIC09IFNFQ1NQRVJIT1VSLCBlZmlfdGltZS0+SG91cisrKTsKKworICAg
ICAgICAgICAgICAgIGZvciAoZWZpX3RpbWUtPk1pbnV0ZSA9IDA7IHRpbWUgPiA2MDsKKyAgICAg
ICAgICAgICAgICAgICAgdGltZSAtPSA2MCwgZWZpX3RpbWUtPk1pbnV0ZSsrKTsKKworICAgICAg
ICAgICAgICAgIGVmaV90aW1lLT5TZWNvbmQgPSB0aW1lOworICAgICAgICAgICAgICAgIGVmaV90
aW1lLT5OYW5vc2Vjb25kID0gMDsKKyAgICAgICAgICAgICAgICBlZmlfdGltZS0+VGltZVpvbmUg
PSAwOworICAgICAgICAgICAgICAgIGVmaV90aW1lLT5EYXlsaWdodCA9IDA7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgbWVtc2V0KGVmaV90aW1lLCAwLCBzaXplb2YoRUZJX1RJ
TUUpKTsKKyAgICAgICAgfQorfQorCit0aW1lX3QKK2Zyb21fZWZpX3RpbWUoRUZJX1RJTUUgKkVU
aW1lKQoreworCisgICAgdGltZV90ICBVVGltZTsKICAgICBpbnQgICAgIFllYXI7CiAKICAgICAv
KgpAQCAtMTM0LDcgKzE3MCw3IEBAIGVmaV90aW1lKEVGSV9USU1FICpFVGltZSkKICAgICAvKgog
ICAgIC8vIFVUaW1lIHNob3VsZCBub3cgYmUgc2V0IHRvIDAwOjAwOjAwIG9uIEphbiAxIG9mIHRo
ZSBmaWxlJ3MgeWVhci4KICAgICAvLwotICAgIC8vIE1vbnRocyAgCisgICAgLy8gTW9udGhzCiAg
ICAgKi8KICAgICBVVGltZSArPSAoQ3VtdWxhdGl2ZURheXNbaXNsZWFwKEVUaW1lLT5ZZWFyKV1b
RVRpbWUtPk1vbnRoXSAqIFNFQ1NQRVJEQVkpOwogCkBAIC0xNzAsNyArMjA2LDcgQEAgZWZpX3Rp
bWUoRUZJX1RJTUUgKkVUaW1lKQogICAgIAkqLwogICAgIAlVVGltZSArPSAoRVRpbWUtPlRpbWVa
b25lICogNjApOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBVVGltZTsKIH0KIApAQCAtMTk2
LDcgKzIzMiw3IEBAIEVGSV9HZXRUaW1lT2ZEYXkoCiAJLy8gIENvbnZlcnQgdG8gVU5JWCB0aW1l
IChpZSBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaAogCSovCiAKLQl0cC0+dHZfc2VjICA9IGVmaV90
aW1lKCAmRWZpVGltZSApOworCXRwLT50dl9zZWMgID0gZnJvbV9lZmlfdGltZSggJkVmaVRpbWUg
KTsKIAl0cC0+dHZfdXNlYyA9IDA7IC8qIEVmaVRpbWUuTmFub3NlY29uZCAqIDEwMDA7ICovCiAK
IAkvKgpAQCAtMjIxLDcgKzI1Nyw3IEBAIHRpbWUodGltZV90ICp0bG9jKQogewogCXN0cnVjdCB0
aW1ldmFsIHR2OwogCUVGSV9HZXRUaW1lT2ZEYXkoJnR2LCAwKTsKLQkKKwogCWlmICh0bG9jKQog
CQkqdGxvYyA9IHR2LnR2X3NlYzsKIAlyZXR1cm4gdHYudHZfc2VjOwpkaWZmIC0tZ2l0IHN5cy9i
b290L2VmaS9sb2FkZXIvTWFrZWZpbGUgc3lzL2Jvb3QvZWZpL2xvYWRlci9NYWtlZmlsZQppbmRl
eCBkOWQzNTMyMDE0Zi4uMzAwYzY1YjEwZDkgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvbG9hZGVy
L01ha2VmaWxlCisrKyBzeXMvYm9vdC9lZmkvbG9hZGVyL01ha2VmaWxlCkBAIC01MCw2ICs1MCw3
IEBAIENXQVJORkxBR1MubWFpbi5jKz0JLVduby1mb3JtYXQKIENGTEFHUys9CS1JJHsuQ1VSRElS
fQogQ0ZMQUdTKz0JLUkkey5DVVJESVJ9L2FyY2gvJHtNQUNISU5FfQogQ0ZMQUdTKz0JLUkkey5D
VVJESVJ9Ly4uL2luY2x1ZGUKK0NGTEFHUys9CS1JJHsuQ1VSRElSfS8uLi9kcml2ZXJzCiBDRkxB
R1MrPQktSSR7LkNVUkRJUn0vLi4vaW5jbHVkZS8ke01BQ0hJTkV9CiBDRkxBR1MrPQktSSR7LkNV
UkRJUn0vLi4vLi4vLi4vY29udHJpYi9kZXYvYWNwaWNhL2luY2x1ZGUKIENGTEFHUys9CS1JJHsu
Q1VSRElSfS8uLi8uLi8uLgpAQCAtNjgsNiArNjksOCBAQCBDRkxBR1MrPQktRE5PX1BDSSAtREVG
SQogTElCU1RBTkQ9CSR7Lk9CSkRJUn0vLi4vLi4vLi4vLi4vbGliL2xpYnN0YW5kL2xpYnN0YW5k
LmEKIC5lbmRpZgogCitMSUJFRklfRFJJVkVSUz0JJHsuT0JKRElSfS8uLi9kcml2ZXJzL2xpYmVm
aV9kcml2ZXJzLmEKKwogLmlmICFkZWZpbmVkKEJPT1RfSElERV9TRVJJQUxfTlVNQkVSUykKICMg
RXhwb3J0IHNlcmlhbCBudW1iZXJzLCBVVUlELCBhbmQgYXNzZXQgdGFnIGZyb20gbG9hZGVyLgog
Q0ZMQUdTKz0gLURTTUJJT1NfU0VSSUFMX05VTUJFUlMKQEAgLTE1MCw5ICsxNTMsMTAgQEAgbG9h
ZGVyLmVmaTogJHtQUk9HfQogCiBMSUJFRkk9CQkkey5PQkpESVJ9Ly4uL2xpYmVmaS9saWJlZmku
YQogCi1EUEFERD0JCSR7TElCRklDTH0gJHtMSUJFRkl9ICR7TElCRkRUfSAke0xJQkVGSV9GRFR9
ICR7TElCU1RBTkR9IFwKLQkJJHtMRFNDUklQVH0KLUxEQUREPQkJJHtMSUJGSUNMfSAke0xJQkVG
SX0gJHtMSUJGRFR9ICR7TElCRUZJX0ZEVH0gJHtMSUJTVEFORH0KK0RQQUREPQkJJHtMSUJGSUNM
fSAke0xJQkVGSX0gJHtMSUJFRklfRFJJVkVSU30gJHtMSUJGRFR9ICR7TElCRUZJX0ZEVH0gXAor
CQkke0xJQlNUQU5EfSAke0xEU0NSSVBUfQorTERBREQ9CQkke0xJQkZJQ0x9ICR7TElCRUZJfSAk
e0xJQkVGSV9EUklWRVJTfSAke0xJQkZEVH0gJHtMSUJFRklfRkRUfSBcCisJCSR7TElCU1RBTkR9
CiAKIC5pbmNsdWRlIDxic2QucHJvZy5taz4KIApkaWZmIC0tZ2l0IHN5cy9ib290L2VmaS9sb2Fk
ZXIvY29uZi5jIHN5cy9ib290L2VmaS9sb2FkZXIvY29uZi5jCmluZGV4IDM1OTZhNjM2MGMzLi41
NjczM2ZmYTg5OSAxMDA2NDQKLS0tIHN5cy9ib290L2VmaS9sb2FkZXIvY29uZi5jCisrKyBzeXMv
Ym9vdC9lZmkvbG9hZGVyL2NvbmYuYwpAQCAtMzEsMzAgKzMxLDIyIEBAIF9fRkJTRElEKCIkRnJl
ZUJTRCQiKTsKICNpbmNsdWRlIDxib290c3RyYXAuaD4KICNpbmNsdWRlIDxlZmkuaD4KICNpbmNs
dWRlIDxlZmlsaWIuaD4KLSNpZmRlZiBFRklfWkZTX0JPT1QKLSNpbmNsdWRlIDxsaWJ6ZnMuaD4K
LSNlbmRpZgorCisjaW5jbHVkZSAiZWZpX2RyaXZlcnMuaCIKKworY29uc3QgZWZpX2RyaXZlcl90
ICplZmlfZHJpdmVyc1tdID0geworICAgICAgICAmZnNfZHJpdmVyLAorICAgICAgICBOVUxMCit9
OwogCiBzdHJ1Y3QgZGV2c3cgKmRldnN3W10gPSB7Ci0JJmVmaXBhcnRfZGV2LAorICAgICAgICAm
ZWZpZnNfZGV2LAogCSZlZmluZXRfZGV2LAotI2lmZGVmIEVGSV9aRlNfQk9PVAotCSZ6ZnNfZGV2
LAotI2VuZGlmCiAJTlVMTAogfTsKIAogc3RydWN0IGZzX29wcyAqZmlsZV9zeXN0ZW1bXSA9IHsK
LSNpZmRlZiBFRklfWkZTX0JPT1QKLQkmemZzX2Zzb3BzLAotI2VuZGlmCi0JJmRvc2ZzX2Zzb3Bz
LAotCSZ1ZnNfZnNvcHMsCi0JJmNkOTY2MF9mc29wcywKLQkmdGZ0cF9mc29wcywKLQkmbmZzX2Zz
b3BzLAotCSZnemlwZnNfZnNvcHMsCi0JJmJ6aXBmc19mc29wcywKKyAgICAgICAgJmVmaWZzX2Zz
b3BzLAogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvbG9hZGVyL2xvYWRlcl9l
ZmkuaCBzeXMvYm9vdC9lZmkvbG9hZGVyL2xvYWRlcl9lZmkuaAppbmRleCBlZTdjNGJiNzJlYi4u
ZGJkMzZiZmI0Y2EgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvbG9hZGVyL2xvYWRlcl9lZmkuaAor
Kysgc3lzL2Jvb3QvZWZpL2xvYWRlci9sb2FkZXJfZWZpLmgKQEAgLTMzLDYgKzMzLDEwIEBACiAK
ICNpbmNsdWRlIDxzdGFuZC5oPgogCisjaW5jbHVkZSAiZWZpX2RyaXZlcnMuaCIKKworZXh0ZXJu
IGNvbnN0IGVmaV9kcml2ZXJfdCAqZWZpX2RyaXZlcnNbXTsKKwogaW50CWVmaV9hdXRvbG9hZCh2
b2lkKTsKIAogaW50CWVmaV9nZXRkZXYodm9pZCAqKnZkZXYsIGNvbnN0IGNoYXIgKmRldnNwZWMs
IGNvbnN0IGNoYXIgKipwYXRoKTsKZGlmZiAtLWdpdCBzeXMvYm9vdC9lZmkvbG9hZGVyL21haW4u
YyBzeXMvYm9vdC9lZmkvbG9hZGVyL21haW4uYwppbmRleCBiOTdmMmFmYjg1MS4uNDJlM2ViZTE4
MzAgMTAwNjQ0Ci0tLSBzeXMvYm9vdC9lZmkvbG9hZGVyL21haW4uYworKysgc3lzL2Jvb3QvZWZp
L2xvYWRlci9tYWluLmMKQEAgLTg3LDEwICs4Nyw2IEBAIEVGSV9HVUlEIGRlYnVnaW1nID0gREVC
VUdfSU1BR0VfSU5GT19UQUJMRV9HVUlEOwogRUZJX0dVSUQgZmR0ZHRiID0gRkRUX1RBQkxFX0dV
SUQ7CiBFRklfR1VJRCBpbnB1dGlkID0gU0lNUExFX1RFWFRfSU5QVVRfUFJPVE9DT0w7CiAKLSNp
ZmRlZiBFRklfWkZTX0JPT1QKLXN0YXRpYyB2b2lkIGVmaV96ZnNfcHJvYmUodm9pZCk7Ci0jZW5k
aWYKLQogLyoKICAqIGNweTh0bzE2IGNvcGllcyBhIHRyYWRpdGlvbmFsIEMgc3RyaW5nIGludG8g
YSBDSEFSMTYgc3RyaW5nIGFuZAogICogMCB0ZXJtaW5hdGVzIGl0LiBsZW4gaXMgdGhlIHNpemUg
b2YgKmRzdCBpbiBieXRlcy4KQEAgLTEyNSw3ICsxMjEsNyBAQCBoYXNfa2V5Ym9hcmQodm9pZCkK
IAlFRklfSEFORExFICpoaW4sICpoaW5fZW5kLCAqd2Fsa2VyOwogCVVJTlROIHN6OwogCWludCBy
ZXR2YWwgPSAwOwotCQorCiAJLyoKIAkgKiBGaW5kIGFsbCB0aGUgaGFuZGxlcyB0aGF0IHN1cHBv
cnQgdGhlIFNJTVBMRV9URVhUX0lOUFVUX1BST1RPQ09MIGFuZAogCSAqIGRvIHRoZSB0eXBpY2Fs
IGRhbmNlIHRvIGdldCB0aGUgcmlnaHQgc2l6ZWQgYnVmZmVyLgpAQCAtMTgyLDcgKzE3OCw3IEBA
IGhhc19rZXlib2FyZCh2b2lkKQogCQkJfSBlbHNlIGlmIChEZXZpY2VQYXRoVHlwZShwYXRoKSA9
PSBNRVNTQUdJTkdfREVWSUNFX1BBVEggJiYKIAkJCSAgICBEZXZpY2VQYXRoU3ViVHlwZShwYXRo
KSA9PSBNU0dfVVNCX0NMQVNTX0RQKSB7CiAJCQkJVVNCX0NMQVNTX0RFVklDRV9QQVRIICp1c2I7
Ci0JCQkgICAgICAgCisKIAkJCQl1c2IgPSAoVVNCX0NMQVNTX0RFVklDRV9QQVRIICopKHZvaWQg
KilwYXRoOwogCQkJCWlmICh1c2ItPkRldmljZUNsYXNzID09IDMgJiYgLyogSElEICovCiAJCQkJ
ICAgIHVzYi0+RGV2aWNlU3ViQ2xhc3MgPT0gMSAmJiAvKiBCb290IGRldmljZXMgKi8KQEAgLTI2
MywxMCArMjU5LDYgQEAgbWFpbihpbnQgYXJnYywgQ0hBUjE2ICphcmd2W10pCiAJYXJjaHN3LmFy
Y2hfY29weWluID0gZWZpX2NvcHlpbjsKIAlhcmNoc3cuYXJjaF9jb3B5b3V0ID0gZWZpX2NvcHlv
dXQ7CiAJYXJjaHN3LmFyY2hfcmVhZGluID0gZWZpX3JlYWRpbjsKLSNpZmRlZiBFRklfWkZTX0JP
T1QKLQkvKiBOb3RlIHRoaXMgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSBaRlMgaW5pdC4gKi8KLQlh
cmNoc3cuYXJjaF96ZnNfcHJvYmUgPSBlZmlfemZzX3Byb2JlOwotI2VuZGlmCiAKIAkvKiBJbml0
IHRoZSB0aW1lIHNvdXJjZSAqLwogCWVmaV90aW1lX2luaXQoKTsKQEAgLTM5MSw2ICszODMsMTAg
QEAgbWFpbihpbnQgYXJnYywgQ0hBUjE2ICphcmd2W10pCiAJLyoKIAkgKiBNYXJjaCB0aHJvdWdo
IHRoZSBkZXZpY2Ugc3dpdGNoIHByb2JpbmcgZm9yIHRoaW5ncy4KIAkgKi8KKwlmb3IgKGkgPSAw
OyBlZmlfZHJpdmVyc1tpXSAhPSBOVUxMOyBpKyspCisJCWlmIChlZmlfZHJpdmVyc1tpXS0+aW5p
dCAhPSBOVUxMKQorCQkJKGVmaV9kcml2ZXJzW2ldLT5pbml0KSgpOworCiAJZm9yIChpID0gMDsg
ZGV2c3dbaV0gIT0gTlVMTDsgaSsrKQogCQlpZiAoZGV2c3dbaV0tPmR2X2luaXQgIT0gTlVMTCkK
IAkJCShkZXZzd1tpXS0+ZHZfaW5pdCkoKTsKQEAgLTQyNyw2ICs0MjMsNyBAQCBtYWluKGludCBh
cmdjLCBDSEFSMTYgKmFyZ3ZbXSkKIAlpZiAoZmluZF9jdXJyZGV2KGltZywgJmRldiwgJnVuaXQs
ICZwb29sX2d1aWQpICE9IDApCiAJCXJldHVybiAoRUZJX05PVF9GT1VORCk7CiAKKyAgICAgICAg
cHJpbnRmKCJGb3VuZCBlZmkgZGV2aWNlIHVuZGVyICVzXG4iLCBkZXYtPmR2X25hbWUpOwogCXN3
aXRjaCAoZGV2LT5kdl90eXBlKSB7CiAjaWZkZWYgRUZJX1pGU19CT09UCiAJY2FzZSBERVZUX1pG
UzogewpAQCAtMTA5MywyMyArMTA5MCwzIEBAIGNvbW1hbmRfZmR0KGludCBhcmdjLCBjaGFyICph
cmd2W10pCiAKIENPTU1BTkRfU0VUKGZkdCwgImZkdCIsICJmbGF0dGVuZWQgZGV2aWNlIHRyZWUg
aGFuZGxpbmciLCBjb21tYW5kX2ZkdCk7CiAjZW5kaWYKLQotI2lmZGVmIEVGSV9aRlNfQk9PVAot
c3RhdGljIHZvaWQKLWVmaV96ZnNfcHJvYmUodm9pZCkKLXsKLQlFRklfSEFORExFIGg7Ci0JdV9p
bnQgdW5pdDsKLQlpbnQgaTsKLQljaGFyIGRuYW1lW1NQRUNOQU1FTEVOICsgMV07Ci0JdWludDY0
X3QgZ3VpZDsKLQotCXVuaXQgPSAwOwotCWggPSBlZmlfZmluZF9oYW5kbGUoJmVmaXBhcnRfZGV2
LCAwKTsKLQlmb3IgKGkgPSAwOyBoICE9IE5VTEw7IGggPSBlZmlfZmluZF9oYW5kbGUoJmVmaXBh
cnRfZGV2LCArK2kpKSB7Ci0JCXNucHJpbnRmKGRuYW1lLCBzaXplb2YoZG5hbWUpLCAiJXMlZDoi
LCBlZmlwYXJ0X2Rldi5kdl9uYW1lLCBpKTsKLQkJaWYgKHpmc19wcm9iZV9kZXYoZG5hbWUsICZn
dWlkKSA9PSAwKQotCQkJKHZvaWQpZWZpX2hhbmRsZV91cGRhdGVfZGV2KGgsICZ6ZnNfZGV2LCB1
bml0KyssIGd1aWQpOwotCX0KLX0KLSNlbmRpZgo=
--94eb2c058ce8fc2ff60542bb5373--



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