Amiga Warp 1260 RTG accelerated wscons and Xorg EXA driver

Carlos Milán Figueredo <[email protected]> Sun, 19 Jul 2026 18:11:09 +0000
Newsgroups gmane.os.netbsd.ports.amiga
Message-ID <PH6P220MB9841969C3D35E60749EE53E0D6C9C42@PH6P220MB984196.NAMP220.PROD.OUTLOOK.COM>
--_003_PH6P220MB9841969C3D35E60749EE53E0D6C9C42PH6P220MB984196_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hi everyone,=0A=
=0A=
I was seeking for long to have the integrated RTG of the Amiga Warp 1260 ac=
celerator working in NetBSD, and with the launch of GPT-5.6-Sol I decided t=
o give a try with "him" a coding assistant. After few weeks of tweaking, I =
have hardware accelerated driver working without a single issue so far. The=
 features are:=0A=
=0A=
  * Six 16-bit R5G6B5 video modes: 640x480, 800x600, 1024x768, 1280x720, 12=
80x1024, and 1920x1080.=0A=
  * Hardware rectangle fill/copy acceleration for the wscons console.=0A=
  * EXA Solid/Copy acceleration for Xorg through the standard wsfb driver.=
=0A=
=0A=
I am attaching the patches against the following commits of `src` [1] and `=
xsrc` [2]. You can also find here [3] the repository of the full project an=
d a video of a real Amiga working with accelerated graphics on NetBSD here =
[4]. The performance is outstanding.=0A=
=0A=
Since this was coded by AI, I would like to request a review of the code, c=
hecking if it is valid, according to the kernel and Xorg best practices; an=
d after review and interations, to be pushed to the upstream. So far, my sy=
stem is working flawlesly with it, but that doesn't mean that it won't inte=
rfere with other components of the OS.=0A=
=0A=
Thanks!=0A=
Carlos=0A=
=0A=
[1] https://github.com/NetBSD/src/commit/c4432964a2fc5fc62bd8f36699e5798c45=
cd569b=0A=
[2] https://github.com/NetBSD/xsrc/commit/b8a0c79d92d984f132704159c17dc18ee=
9515e3c=0A=
[3] https://github.com/cmilanf/netbsd-amiga-warpgfx=0A=
[4] https://youtu.be/iFda9PB3n1w=0A=
=0A=
Carlos Mil=E1n Figueredo=0A=
HispaMSX System Operator=0A=
- =A0http://www.hispamsx.org=0A=
- =A0telnet://bbs.hispamsx.org=0A=
- =A0https://calnus.com=

--_003_PH6P220MB9841969C3D35E60749EE53E0D6C9C42PH6P220MB984196_
Content-Type: application/octet-stream; name="netbsd-src-warpgfx.patch"
Content-Description: netbsd-src-warpgfx.patch
Content-Disposition: attachment; filename="netbsd-src-warpgfx.patch";
	size=49301; creation-date="Sun, 19 Jul 2026 17:53:12 GMT";
	modification-date="Sun, 19 Jul 2026 17:53:12 GMT"
Content-Transfer-Encoding: base64

ZGlmZiAtLWdpdCBhL2V4dGVybmFsL21pdC94b3JnL3NlcnZlci9kcml2ZXJzL3hmODYtdmlkZW8t
d3NmYi9NYWtlZmlsZSBiL2V4dGVybmFsL21pdC94b3JnL3NlcnZlci9kcml2ZXJzL3hmODYtdmlk
ZW8td3NmYi9NYWtlZmlsZQppbmRleCA1YzdhMzMxZjBiZjhiZDkwMDk2Y2MxNWYzMDQ5YzRhMzhi
NTVkZTQ0Li4zOTVmOGM2YjU1Y2NjOTgzN2EzNDk3ZDAwNWFjMjRmNDM0YmY4OWRkIDEwMDY0NAot
LS0gYS9leHRlcm5hbC9taXQveG9yZy9zZXJ2ZXIvZHJpdmVycy94Zjg2LXZpZGVvLXdzZmIvTWFr
ZWZpbGUKKysrIGIvZXh0ZXJuYWwvbWl0L3hvcmcvc2VydmVyL2RyaXZlcnMveGY4Ni12aWRlby13
c2ZiL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogRFJJVkVSPQkJeGY4Ni12aWRlby13c2ZiCiBE
UklWRVJfTkFNRT0Jd3NmYl9kcnYKIAotU1JDUz0JCXdzZmJfZHJpdmVyLmMgd3NmYl9jdXJzb3Iu
YworU1JDUz0JCXdzZmJfZHJpdmVyLmMgd3NmYl9jdXJzb3IuYyB3c2ZiX2V4YS5jCiBNQU49CQl3
c2ZiLjQKIAogQ1BQRkxBR1MrPQktREhBVkVfQ09ORklHX0ggLUkke1gxMVNSQ0RJUi4ke0RSSVZF
Un19Ly4uL2luY2x1ZGUKZGlmZiAtLWdpdCBhL3N5cy9hcmNoL2FtaWdhL2FtaWdhL2NvbmYuYyBi
L3N5cy9hcmNoL2FtaWdhL2FtaWdhL2NvbmYuYwppbmRleCBmYzYyYzIzYzdhYmUxM2UzMTcwMTRh
ZWU4Y2NmNDEyNGEyZWJjOTQ1Li5jZGI1YTUxNjgwMGEzZmZhYWJkNTYwMjI4YjJiZjAxOGEzOTg4
OWU1IDEwMDY0NAotLS0gYS9zeXMvYXJjaC9hbWlnYS9hbWlnYS9jb25mLmMKKysrIGIvc3lzL2Fy
Y2gvYW1pZ2EvYW1pZ2EvY29uZi5jCkBAIC00Niw2ICs0Niw3IEBAIF9fS0VSTkVMX1JDU0lEKDAs
ICIkTmV0QlNEOiBjb25mLmMsdiAxLjc2IDIwMjMvMDUvMDggMDg6MjY6MTEgc2tybGwgRXhwICQi
KTsKICNpbmNsdWRlICJtbnR2YS5oIgogI2lmbmRlZiBfX3Bvd2VycGNfXwogI2luY2x1ZGUgInp6
OWtfZmIuaCIKKyNpbmNsdWRlICJ3YXJwZ2Z4LmgiCiAjZW5kaWYKICNpbmNsdWRlICJ3c2Rpc3Bs
YXkuaCIKIApAQCAtNTgsNiArNTksNyBAQCBfX0tFUk5FTF9SQ1NJRCgwLCAiJE5ldEJTRDogY29u
Zi5jLHYgMS43NiAyMDIzLzA1LzA4IDA4OjI2OjExIHNrcmxsIEV4cCAkIik7CiBjb25zX2RlY2wo
c2VyKTsKIGNvbnNfZGVjbChtbnR2YSk7CiBjb25zX2RlY2woenpmYl8pOworY29uc19kZWNsKHdh
cnBnZngpOwogY29uc19kZWNsKGdyZik7CiBjb25zX2RlY2woYW1pZGlzcGxheWNjXyk7CiBjb25z
X2RlY2woaXRlKTsKQEAgLTcyLDYgKzc0LDkgQEAgc3RydWN0CWNvbnNkZXYgY29uc3RhYltdID0g
ewogI2lmIE5aWjlLX0ZCID4gMAogCWNvbnNfaW5pdCh6emZiXyksCiAjZW5kaWYKKyNpZiBOV0FS
UEdGWCA+IDAKKwljb25zX2luaXQod2FycGdmeCksCisjZW5kaWYKICNpZiAoTldTRElTUExBWSA+
IDApICYmIChOR1JGID4gMCkKIAl7IGRldl9pbml0KGdyZixjbnByb2JlKSwgZGV2X2luaXQoZ3Jm
LGNuaW5pdCkgfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3lzL2FyY2gvYW1pZ2EvY29uZi9XU0NP
TlMgYi9zeXMvYXJjaC9hbWlnYS9jb25mL1dTQ09OUwppbmRleCA1NzQ3YTY2MTgyYzhlZWYwMjI3
MjQ3MWY2ZmNkMTE0NzQ0YmY3NjM5Li5mYWMxNDZmMmYwYzc1MTU1NzM2OTFkYmFiZTcxOTY0ZjQx
NGNkNzg2IDEwMDY0NAotLS0gYS9zeXMvYXJjaC9hbWlnYS9jb25mL1dTQ09OUworKysgYi9zeXMv
YXJjaC9hbWlnYS9jb25mL1dTQ09OUwpAQCAtNTQsNiArNTQsMTIgQEAgb3B0aW9ucwkJWlpGQl9D
T05TT0xFCQkjIENvbnNvbGUgb24gWlo5MDAwCiAjYXVkaW8qCQlhdCB6emF4PwkJIyBBdWRpbyBv
biBaWjkwMDBBWAogI3p6dXNiKgkJYXQgeno5az8JCSMgVVNCIChub3QgaW1wbGVtZW50ZWQgeWV0
KQogCit3YXJwZ2Z4KglhdCB6YnVzPwkJIyBDUy1MYWIgV2FycCBHRlggZnJhbWVidWZmZXIvcmVn
aXN0ZXJzCitvcHRpb25zCQlXQVJQR0ZYX0NPTlNPTEUJCSMgQ29uc29sZSBvbiBXYXJwIEdGWAor
b3B0aW9ucwkJV0FSUEdGWF9BQ0NFTAkJIyBBY2NlbGVyYXRlIGNvbnNvbGUgY29weS9jbGVhcgor
b3B0aW9ucwkJV0FSUEdGWF9NT0RFPTcyMAkjIDQ4MCwgNjAwLCA3MjAsIDc2OCwgMTAyNCwgb3Ig
MTA4MAorI29wdGlvbnMJV0FSUEdGWF9ERUJVRwkJIyBEdW1wIHJlZ2lzdGVycyBkdXJpbmcgaW5p
dGlhbGl6YXRpb24KKwogIyBQQ0kgZnJhbWVidWZmZXJzCiAjZ2VuZmIqCQlhdCBwY2k/CQkJIyBD
eWJlclZpc2lvblBQQy9CbGl6emFyZFZpc2lvblBQQyBvbmx5CiB2b29kb29mYioJYXQgcGNpPwkJ
CSMgM0RmeCBWb29kb28gMyBpbiBHLVJFWCAKQEAgLTY4LDQgKzc0LDMgQEAgd3NkaXNwbGF5Kglh
dCB3c2VtdWxkaXNwbGF5ZGV2PyBjb25zb2xlID8KIAogcHNldWRvLWRldmljZQl3c2ZvbnQJCQkj
IHdzZm9udCg0KSBkeW5hbWljIGZvbnQgbG9hZGluZyBzdXBwb3J0CiBwc2V1ZG8tZGV2aWNlCXdz
bXV4CQkJIyBtb3VzZSAmIGtleWJvYXJkIG11bHRpcGxleG9yCi0KZGlmZiAtLWdpdCBhL3N5cy9h
cmNoL2FtaWdhL2NvbmYvZmlsZXMuYW1pZ2EgYi9zeXMvYXJjaC9hbWlnYS9jb25mL2ZpbGVzLmFt
aWdhCmluZGV4IGZjMzAzNTc4NTJkNjZmNDJlMzQwMjdmZDMwMmU5NmIzNzdmYjgyOTMuLjgzNWRm
MmNmODgyMjU0YWZjOWEwMDMxYmVmMzA2N2YzYjExNWQ1MzkgMTAwNjQ0Ci0tLSBhL3N5cy9hcmNo
L2FtaWdhL2NvbmYvZmlsZXMuYW1pZ2EKKysrIGIvc3lzL2FyY2gvYW1pZ2EvY29uZi9maWxlcy5h
bWlnYQpAQCAtMjMsNiArMjMsOSBAQCBkZWZmbGFnCW9wdF9tbnR2YS5oCQlNTlRWQV9DT05TT0xF
CiAKIGRlZmZsYWcgb3B0X3p6OWtfZmIuaAkJWlpGQl9DT05TT0xFCiAKK2RlZmZsYWcgb3B0X3dh
cnBnZnguaAkJV0FSUEdGWF9DT05TT0xFIFdBUlBHRlhfQUNDRUwgV0FSUEdGWF9ERUJVRworZGVm
cGFyYW0gb3B0X3dhcnBnZnguaAkJV0FSUEdGWF9NT0RFCisKIGRlZmZsYWcJb3B0X2tmb250LmgJ
CUtGT05UX0NPTlNfSVNPODg1OV8xCiBkZWZmbGFnCW9wdF9rZm9udC5oCQlLRk9OVF9DT05TX0lT
Tzg4NTlfMgogCkBAIC0yMjYsNiArMjI5LDExIEBAIGRldmljZQltbnR2YTogd3NlbXVsZGlzcGxh
eWRldiwgcmFzb3BzMTYsIHJhc29wczMyLCB2Y29ucywgdmlkZW9tb2RlCiBhdHRhY2gJbW50dmEg
YXQgemJ1cwogZmlsZQlhcmNoL2FtaWdhL2Rldi9tbnR2YS5jCQltbnR2YSBuZWVkcy1mbGFnCiAK
KyMgQ1MtTGFiIFdhcnAgR0ZYCitkZXZpY2UJd2FycGdmeDogd3NlbXVsZGlzcGxheWRldiwgcmFz
b3BzMTYsIHZjb25zCithdHRhY2gJd2FycGdmeCBhdCB6YnVzCitmaWxlCWFyY2gvYW1pZ2EvZGV2
L3dhcnBnZnguYwl3YXJwZ2Z4IG5lZWRzLWZsYWcKKwogIyBNTlQgWlo5MDAwCiBkZWZpbmUJeno5
a2J1cyB7fQogZGV2aWNlCXp6OWs6IHp6OWtidXMKZGlmZiAtLWdpdCBhL3N5cy9hcmNoL2FtaWdh
L2Rldi93YXJwZ2Z4LmMgYi9zeXMvYXJjaC9hbWlnYS9kZXYvd2FycGdmeC5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRhM2VlNzNkMTMxZTAyNTNhM2EzNTFmN2FiYjA2NDZiYmQzZTdiYzMKLS0tIC9kZXYvbnVsbAor
KysgYi9zeXMvYXJjaC9hbWlnYS9kZXYvd2FycGdmeC5jCkBAIC0wLDAgKzEsMTIwNyBAQAorLyoJ
JE5ldEJTRCQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMCBUaGUgTmV0QlNEIEZvdW5k
YXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlz
IGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRp
b24KKyAqIGJ5IEFsYWluIFJ1bmEuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qLQorICogQ29w
eXJpZ2h0IChjKSAyMDI2IENhcmxvcyBNaWzDoW4gRmlndWVyZWRvCisgKiB3aXRoIGFzc2lzdGFu
Y2UgZnJvbSBPcGVuQUkgZ3B0LTUuNi1zb2wKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMg
SVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fS0VSTkVMX1JDU0lE
KDAsICIkTmV0QlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lz
L2J1cy5oPgorI2luY2x1ZGUgPHN5cy9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzeXMvZXJybm8uaD4K
KyNpbmNsdWRlIDxzeXMvc3RkYm9vbC5oPgorI2luY2x1ZGUgPHN5cy9zdGRpbnQuaD4KKyNpbmNs
dWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPGRl
di9jb25zLmg+CisjaW5jbHVkZSA8ZGV2L3Jhc29wcy9yYXNvcHMuaD4KKyNpbmNsdWRlIDxkZXYv
d3Njb25zL3dzY29uc2lvLmg+CisjaW5jbHVkZSA8ZGV2L3dzY29ucy93c2Rpc3BsYXlfdmNvbnN2
YXIuaD4KKyNpbmNsdWRlIDxkZXYvd3Njb25zL3dzZGlzcGxheXZhci5oPgorI2luY2x1ZGUgPGRl
di93c2ZvbnQvd3Nmb250Lmg+CisKKyNpbmNsdWRlIDxhbWlnYS9hbWlnYS9kZXZpY2UuaD4KKyNp
bmNsdWRlIDxhbWlnYS9kZXYva2JkdmFyLmg+CisjaW5jbHVkZSA8YW1pZ2EvZGV2L3dhcnBnZnhy
ZWcuaD4KKyNpbmNsdWRlIDxhbWlnYS9kZXYvemJ1c3Zhci5oPgorCisjaW5jbHVkZSAib3B0X3dh
cnBnZnguaCIKKworI2luY2x1ZGUgImtiZC5oIgorCisjaWZuZGVmIFdBUlBHRlhfTU9ERQorI2Rl
ZmluZSBXQVJQR0ZYX01PREUJCVdBUlBHRlhfTU9ERV83MjBQCisjZW5kaWYKKworI2lmIFdBUlBH
RlhfTU9ERSAhPSBXQVJQR0ZYX01PREVfNDgwUCAmJiBcCisgICAgV0FSUEdGWF9NT0RFICE9IFdB
UlBHRlhfTU9ERV82MDBQICYmIFwKKyAgICBXQVJQR0ZYX01PREUgIT0gV0FSUEdGWF9NT0RFXzcy
MFAgJiYgXAorICAgIFdBUlBHRlhfTU9ERSAhPSBXQVJQR0ZYX01PREVfNzY4UCAmJiBcCisgICAg
V0FSUEdGWF9NT0RFICE9IFdBUlBHRlhfTU9ERV8xMDI0UCAmJiBcCisgICAgV0FSUEdGWF9NT0RF
ICE9IFdBUlBHRlhfTU9ERV8xMDgwUAorI2Vycm9yICJXQVJQR0ZYX01PREUgbXVzdCBiZSA0ODAs
IDYwMCwgNzIwLCA3NjgsIDEwMjQsIG9yIDEwODAiCisjZW5kaWYKKworI2RlZmluZSBXQVJQR0ZY
X1BBUlRfRkIJCTB4MDEKKyNkZWZpbmUgV0FSUEdGWF9QQVJUX1JFRwkweDAyCisjZGVmaW5lIFdB
UlBHRlhfUEFSVFNfQUxMCShXQVJQR0ZYX1BBUlRfRkIgfCBXQVJQR0ZYX1BBUlRfUkVHKQorCisj
ZGVmaW5lIFdBUlBHRlhfQ1VSU09SX1JFRF9NQVNLCQkweGY4MDBVCisKKyNkZWZpbmUgV0FSUEdG
WF9CTFRfV0FJVF9MT09QUwkJMTAwMDAwMAorCitzdHJ1Y3Qgd2FycGdmeF9wYXJ0IHsKKwlib29s
IHZhbGlkOworCXZvaWQgKnBhOworCXZvaWQgKnZhOworCXNpemVfdCBzaXplOworCWludCBzZXJu
bzsKK307CisKK3N0cnVjdCB3YXJwZ2Z4X21vZGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdV9p
bnQgd2lkdGg7CisJdV9pbnQgaGVpZ2h0OworCXVfaW50IGRlcHRoOworCXVfaW50IHN0cmlkZTsK
Kwl1aW50MzJfdCBjbG9ja19zZWxlY3Q7CisJdWludDMyX3QgY2xvY2tfY29udHJvbDsKKwl1aW50
MzJfdCBmb3JtYXRfcGl0Y2g7CisJdWludDMyX3QgaF9hY3RpdmU7CisJdWludDMyX3QgaF90aW1p
bmdfMTsKKwl1aW50MzJfdCBoX3RpbWluZ18yOworCXVpbnQzMl90IHZfYWN0aXZlOworCXVpbnQz
Ml90IHZfdGltaW5nXzE7CisJdWludDMyX3Qgdl90aW1pbmdfMjsKKwl1aW50MzJfdCBodl90b3Rh
bDsKK307CisKKyNpZiBXQVJQR0ZYX01PREUgPT0gV0FSUEdGWF9NT0RFXzQ4MFAKK3N0YXRpYyBj
b25zdCBzdHJ1Y3Qgd2FycGdmeF9tb2RlIHdhcnBnZnhfY29uc29sZV9tb2RlID0geworCS5uYW1l
ID0gIjY0MHg0ODBwNzUiLAorCS53aWR0aCA9IDY0MCwKKwkuaGVpZ2h0ID0gNDgwLAorCS5kZXB0
aCA9IFdBUlBHRlhfREVQVEgsCisJLnN0cmlkZSA9IDY0MCAqIHNpemVvZih1aW50MTZfdCksCisJ
LmNsb2NrX3NlbGVjdCA9IFdBUlBHRlhfNDgwUF9DTE9DS19TRUxFQ1QsCisJLmNsb2NrX2NvbnRy
b2wgPSBXQVJQR0ZYXzQ4MFBfQ0xPQ0tfQ09OVFJPTCwKKwkuZm9ybWF0X3BpdGNoID0gV0FSUEdG
WF80ODBQX0ZPUk1BVF9QSVRDSCwKKwkuaF9hY3RpdmUgPSBXQVJQR0ZYXzQ4MFBfSF9BQ1RJVkUs
CisJLmhfdGltaW5nXzEgPSBXQVJQR0ZYXzQ4MFBfSF9USU1JTkdfMSwKKwkuaF90aW1pbmdfMiA9
IFdBUlBHRlhfNDgwUF9IX1RJTUlOR18yLAorCS52X2FjdGl2ZSA9IFdBUlBHRlhfNDgwUF9WX0FD
VElWRSwKKwkudl90aW1pbmdfMSA9IFdBUlBHRlhfNDgwUF9WX1RJTUlOR18xLAorCS52X3RpbWlu
Z18yID0gV0FSUEdGWF80ODBQX1ZfVElNSU5HXzIsCisJLmh2X3RvdGFsID0gV0FSUEdGWF80ODBQ
X0hWX1RPVEFMLAorfTsKKyNlbGlmIFdBUlBHRlhfTU9ERSA9PSBXQVJQR0ZYX01PREVfNjAwUAor
c3RhdGljIGNvbnN0IHN0cnVjdCB3YXJwZ2Z4X21vZGUgd2FycGdmeF9jb25zb2xlX21vZGUgPSB7
CisJLm5hbWUgPSAiODAweDYwMHA2MCIsCisJLndpZHRoID0gODAwLAorCS5oZWlnaHQgPSA2MDAs
CisJLmRlcHRoID0gV0FSUEdGWF9ERVBUSCwKKwkuc3RyaWRlID0gODAwICogc2l6ZW9mKHVpbnQx
Nl90KSwKKwkuY2xvY2tfc2VsZWN0ID0gV0FSUEdGWF82MDBQX0NMT0NLX1NFTEVDVCwKKwkuY2xv
Y2tfY29udHJvbCA9IFdBUlBHRlhfNjAwUF9DTE9DS19DT05UUk9MLAorCS5mb3JtYXRfcGl0Y2gg
PSBXQVJQR0ZYXzYwMFBfRk9STUFUX1BJVENILAorCS5oX2FjdGl2ZSA9IFdBUlBHRlhfNjAwUF9I
X0FDVElWRSwKKwkuaF90aW1pbmdfMSA9IFdBUlBHRlhfNjAwUF9IX1RJTUlOR18xLAorCS5oX3Rp
bWluZ18yID0gV0FSUEdGWF82MDBQX0hfVElNSU5HXzIsCisJLnZfYWN0aXZlID0gV0FSUEdGWF82
MDBQX1ZfQUNUSVZFLAorCS52X3RpbWluZ18xID0gV0FSUEdGWF82MDBQX1ZfVElNSU5HXzEsCisJ
LnZfdGltaW5nXzIgPSBXQVJQR0ZYXzYwMFBfVl9USU1JTkdfMiwKKwkuaHZfdG90YWwgPSBXQVJQ
R0ZYXzYwMFBfSFZfVE9UQUwsCit9OworI2VsaWYgV0FSUEdGWF9NT0RFID09IFdBUlBHRlhfTU9E
RV83MjBQCitzdGF0aWMgY29uc3Qgc3RydWN0IHdhcnBnZnhfbW9kZSB3YXJwZ2Z4X2NvbnNvbGVf
bW9kZSA9IHsKKwkubmFtZSA9ICIxMjgweDcyMHA2MCIsCisJLndpZHRoID0gMTI4MCwKKwkuaGVp
Z2h0ID0gNzIwLAorCS5kZXB0aCA9IFdBUlBHRlhfREVQVEgsCisJLnN0cmlkZSA9IDEyODAgKiBz
aXplb2YodWludDE2X3QpLAorCS5jbG9ja19zZWxlY3QgPSBXQVJQR0ZYXzcyMFBfQ0xPQ0tfU0VM
RUNULAorCS5jbG9ja19jb250cm9sID0gV0FSUEdGWF83MjBQX0NMT0NLX0NPTlRST0wsCisJLmZv
cm1hdF9waXRjaCA9IFdBUlBHRlhfNzIwUF9GT1JNQVRfUElUQ0gsCisJLmhfYWN0aXZlID0gV0FS
UEdGWF83MjBQX0hfQUNUSVZFLAorCS5oX3RpbWluZ18xID0gV0FSUEdGWF83MjBQX0hfVElNSU5H
XzEsCisJLmhfdGltaW5nXzIgPSBXQVJQR0ZYXzcyMFBfSF9USU1JTkdfMiwKKwkudl9hY3RpdmUg
PSBXQVJQR0ZYXzcyMFBfVl9BQ1RJVkUsCisJLnZfdGltaW5nXzEgPSBXQVJQR0ZYXzcyMFBfVl9U
SU1JTkdfMSwKKwkudl90aW1pbmdfMiA9IFdBUlBHRlhfNzIwUF9WX1RJTUlOR18yLAorCS5odl90
b3RhbCA9IFdBUlBHRlhfNzIwUF9IVl9UT1RBTCwKK307CisjZWxpZiBXQVJQR0ZYX01PREUgPT0g
V0FSUEdGWF9NT0RFXzc2OFAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2FycGdmeF9tb2RlIHdhcnBn
ZnhfY29uc29sZV9tb2RlID0geworCS5uYW1lID0gIjEwMjR4NzY4cDYwIiwKKwkud2lkdGggPSAx
MDI0LAorCS5oZWlnaHQgPSA3NjgsCisJLmRlcHRoID0gV0FSUEdGWF9ERVBUSCwKKwkuc3RyaWRl
ID0gMTAyNCAqIHNpemVvZih1aW50MTZfdCksCisJLmNsb2NrX3NlbGVjdCA9IFdBUlBHRlhfNzY4
UF9DTE9DS19TRUxFQ1QsCisJLmNsb2NrX2NvbnRyb2wgPSBXQVJQR0ZYXzc2OFBfQ0xPQ0tfQ09O
VFJPTCwKKwkuZm9ybWF0X3BpdGNoID0gV0FSUEdGWF83NjhQX0ZPUk1BVF9QSVRDSCwKKwkuaF9h
Y3RpdmUgPSBXQVJQR0ZYXzc2OFBfSF9BQ1RJVkUsCisJLmhfdGltaW5nXzEgPSBXQVJQR0ZYXzc2
OFBfSF9USU1JTkdfMSwKKwkuaF90aW1pbmdfMiA9IFdBUlBHRlhfNzY4UF9IX1RJTUlOR18yLAor
CS52X2FjdGl2ZSA9IFdBUlBHRlhfNzY4UF9WX0FDVElWRSwKKwkudl90aW1pbmdfMSA9IFdBUlBH
RlhfNzY4UF9WX1RJTUlOR18xLAorCS52X3RpbWluZ18yID0gV0FSUEdGWF83NjhQX1ZfVElNSU5H
XzIsCisJLmh2X3RvdGFsID0gV0FSUEdGWF83NjhQX0hWX1RPVEFMLAorfTsKKyNlbGlmIFdBUlBH
RlhfTU9ERSA9PSBXQVJQR0ZYX01PREVfMTAyNFAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2FycGdm
eF9tb2RlIHdhcnBnZnhfY29uc29sZV9tb2RlID0geworCS5uYW1lID0gIjEyODB4MTAyNHA2MCIs
CisJLndpZHRoID0gMTI4MCwKKwkuaGVpZ2h0ID0gMTAyNCwKKwkuZGVwdGggPSBXQVJQR0ZYX0RF
UFRILAorCS5zdHJpZGUgPSAxMjgwICogc2l6ZW9mKHVpbnQxNl90KSwKKwkuY2xvY2tfc2VsZWN0
ID0gV0FSUEdGWF8xMDI0UF9DTE9DS19TRUxFQ1QsCisJLmNsb2NrX2NvbnRyb2wgPSBXQVJQR0ZY
XzEwMjRQX0NMT0NLX0NPTlRST0wsCisJLmZvcm1hdF9waXRjaCA9IFdBUlBHRlhfMTAyNFBfRk9S
TUFUX1BJVENILAorCS5oX2FjdGl2ZSA9IFdBUlBHRlhfMTAyNFBfSF9BQ1RJVkUsCisJLmhfdGlt
aW5nXzEgPSBXQVJQR0ZYXzEwMjRQX0hfVElNSU5HXzEsCisJLmhfdGltaW5nXzIgPSBXQVJQR0ZY
XzEwMjRQX0hfVElNSU5HXzIsCisJLnZfYWN0aXZlID0gV0FSUEdGWF8xMDI0UF9WX0FDVElWRSwK
Kwkudl90aW1pbmdfMSA9IFdBUlBHRlhfMTAyNFBfVl9USU1JTkdfMSwKKwkudl90aW1pbmdfMiA9
IFdBUlBHRlhfMTAyNFBfVl9USU1JTkdfMiwKKwkuaHZfdG90YWwgPSBXQVJQR0ZYXzEwMjRQX0hW
X1RPVEFMLAorfTsKKyNlbHNlIC8qIFdBUlBHRlhfTU9ERSA9PSBXQVJQR0ZYX01PREVfMTA4MFAg
Ki8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2FycGdmeF9tb2RlIHdhcnBnZnhfY29uc29sZV9tb2Rl
ID0geworCS5uYW1lID0gIjE5MjB4MTA4MHA2MCIsCisJLndpZHRoID0gMTkyMCwKKwkuaGVpZ2h0
ID0gMTA4MCwKKwkuZGVwdGggPSBXQVJQR0ZYX0RFUFRILAorCS5zdHJpZGUgPSAxOTIwICogc2l6
ZW9mKHVpbnQxNl90KSwKKwkuY2xvY2tfc2VsZWN0ID0gV0FSUEdGWF8xMDgwUF9DTE9DS19TRUxF
Q1QsCisJLmNsb2NrX2NvbnRyb2wgPSBXQVJQR0ZYXzEwODBQX0NMT0NLX0NPTlRST0wsCisJLmZv
cm1hdF9waXRjaCA9IFdBUlBHRlhfMTA4MFBfRk9STUFUX1BJVENILAorCS5oX2FjdGl2ZSA9IFdB
UlBHRlhfMTA4MFBfSF9BQ1RJVkUsCisJLmhfdGltaW5nXzEgPSBXQVJQR0ZYXzEwODBQX0hfVElN
SU5HXzEsCisJLmhfdGltaW5nXzIgPSBXQVJQR0ZYXzEwODBQX0hfVElNSU5HXzIsCisJLnZfYWN0
aXZlID0gV0FSUEdGWF8xMDgwUF9WX0FDVElWRSwKKwkudl90aW1pbmdfMSA9IFdBUlBHRlhfMTA4
MFBfVl9USU1JTkdfMSwKKwkudl90aW1pbmdfMiA9IFdBUlBHRlhfMTA4MFBfVl9USU1JTkdfMiwK
KwkuaHZfdG90YWwgPSBXQVJQR0ZYXzEwODBQX0hWX1RPVEFMLAorfTsKKyNlbmRpZgorCitzdHJ1
Y3Qgd2FycGdmeF9zb2Z0YyB7CisJZGV2aWNlX3Qgc2NfZGV2OworCWNvbnN0IHN0cnVjdCB3YXJw
Z2Z4X21vZGUgKnNjX21vZGU7CisKKwlzdHJ1Y3QgYnVzX3NwYWNlX3RhZyBzY19yZWdfYnN0Owor
CWJ1c19zcGFjZV90YWdfdCBzY19yZWd0OworCWJ1c19zcGFjZV9oYW5kbGVfdCBzY19yZWdoOwor
CXZvbGF0aWxlIHVpbnQzMl90ICpzY19yZWd2YTsKKworCXN0cnVjdCBidXNfc3BhY2VfdGFnIHNj
X2ZiX2JzdDsKKwlidXNfc3BhY2VfdGFnX3Qgc2NfZmJ0OworCWJ1c19zcGFjZV9oYW5kbGVfdCBz
Y19mYmg7CisJYnVzX2FkZHJfdCBzY19mYnBhOworCXNpemVfdCBzY19mYnNpemU7CisKKwlzdHJ1
Y3QgdmNvbnNfc2NyZWVuIHNjX2NvbnNvbGVfc2NyZWVuOworCXN0cnVjdCB2Y29uc19kYXRhIHNj
X3ZkOworCXN0cnVjdCB3c3NjcmVlbl9kZXNjciBzY19kZWZhdWx0c2NyZWVuOworCXN0cnVjdCB3
c3NjcmVlbl9kZXNjciBzY184MHgyNXNjcmVlbjsKKwlzdHJ1Y3Qgd3NzY3JlZW5fbGlzdCBzY19z
Y3JlZW5saXN0OworCWNvbnN0IHN0cnVjdCB3c3NjcmVlbl9kZXNjciAqc2Nfc2NyZWVuc1syXTsK
KworCXVfaW50IHNjX3dzbW9kZTsKKwl1X2ludCBzY193aWR0aDsKKwl1X2ludCBzY19oZWlnaHQ7
CisJdV9pbnQgc2NfZGVwdGg7CisJdV9pbnQgc2Nfc3RyaWRlOworCWJvb2wgc2NfaXNjb25zb2xl
OworCisjaWZkZWYgV0FSUEdGWF9BQ0NFTAorCXN0cnVjdCB3c2Rpc3BsYXlfZW11bG9wcyBzY19z
d29wczsKKwlib29sIHNjX2FjY2VsX29rOworCXVpbnQzMl90IHNjX2JsdF9zZXJpYWw7CisjZW5k
aWYKK307CisKK3N0YXRpYyBzdHJ1Y3Qgd2FycGdmeF9wYXJ0IHdhcnBnZnhfZmJfcGFydDsKK3N0
YXRpYyBzdHJ1Y3Qgd2FycGdmeF9wYXJ0IHdhcnBnZnhfcmVnX3BhcnQ7CitzdGF0aWMgdWludDhf
dCB3YXJwZ2Z4X2Vhcmx5X3BhcnRzOworc3RhdGljIGJvb2wgd2FycGdmeF9leGlzdHM7CisKK3N0
YXRpYyBpbnQgd2FycGdmeF9tYXRjaChkZXZpY2VfdCwgY2ZkYXRhX3QsIHZvaWQgKik7CitzdGF0
aWMgdm9pZCB3YXJwZ2Z4X2F0dGFjaChkZXZpY2VfdCwgZGV2aWNlX3QsIHZvaWQgKik7CitzdGF0
aWMgdm9pZCB3YXJwZ2Z4X2RlZmVycmVkKGRldmljZV90KTsKKworc3RhdGljIHZvaWQgd2FycGdm
eF9yZXNldChzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqKTsKK3N0YXRpYyBib29sIHdhcnBnZnhfc2V0
X2Nsb2NrKHN0cnVjdCB3YXJwZ2Z4X3NvZnRjICopOworc3RhdGljIHZvaWQgd2FycGdmeF9zZXRf
bW9kZShzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqKTsKKyNpZmRlZiBXQVJQR0ZYX0RFQlVHCitzdGF0
aWMgdm9pZCB3YXJwZ2Z4X2R1bXBfcmVncyhzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqLCBjb25zdCBj
aGFyICopOworI2VuZGlmCitzdGF0aWMgdm9pZCB3YXJwZ2Z4X2F0dGFjaF93c2Rpc3BsYXkoc3Ry
dWN0IHdhcnBnZnhfc29mdGMgKik7CitzdGF0aWMgdm9pZCB3YXJwZ2Z4X2luaXRfc2NyZWVuKHZv
aWQgKiwgc3RydWN0IHZjb25zX3NjcmVlbiAqLCBpbnQsIGxvbmcgKik7CitzdGF0aWMgdm9pZCB3
YXJwZ2Z4X2RvX2N1cnNvcihzdHJ1Y3QgcmFzb3BzX2luZm8gKik7CisKKyNpZmRlZiBXQVJQR0ZY
X0FDQ0VMCitzdGF0aWMgYm9vbCB3YXJwZ2Z4X3dhaXRfYmxpdHRlcihzdHJ1Y3Qgd2FycGdmeF9z
b2Z0YyAqKTsKK3N0YXRpYyBib29sIHdhcnBnZnhfcmVjdGZpbGwoc3RydWN0IHdhcnBnZnhfc29m
dGMgKiwgdWludDE2X3QsIHVpbnQxNl90LAorICAgIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2
X3QpOworc3RhdGljIGJvb2wgd2FycGdmeF9iaXRibHQoc3RydWN0IHdhcnBnZnhfc29mdGMgKiwg
dWludDE2X3QsIHVpbnQxNl90LAorICAgIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2X3QsIHVp
bnQxNl90KTsKK3N0YXRpYyBib29sIHdhcnBnZnhfdmFsaWRfcmVjdChzdHJ1Y3Qgd2FycGdmeF9z
b2Z0YyAqLCB1aW50MzJfdCwgdWludDMyX3QsCisgICAgdWludDMyX3QsIHVpbnQzMl90KTsKK3N0
YXRpYyB2b2lkIHdhcnBnZnhfc29mdHdhcmVfY29weShzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqLCB1
aW50MzJfdCwKKyAgICB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgdWlu
dDMyX3QpOworc3RhdGljIGludCB3YXJwZ2Z4X3dzZmJfYmxpdChzdHJ1Y3Qgd2FycGdmeF9zb2Z0
YyAqLAorICAgIHN0cnVjdCB3c2Rpc3BsYXlpb19ibGl0ICopOworc3RhdGljIHZvaWQgd2FycGdm
eF9lcmFzZXJvd3Modm9pZCAqLCBpbnQsIGludCwgbG9uZyk7CitzdGF0aWMgdm9pZCB3YXJwZ2Z4
X2NvcHlyb3dzKHZvaWQgKiwgaW50LCBpbnQsIGludCk7CitzdGF0aWMgdm9pZCB3YXJwZ2Z4X2Vy
YXNlY29scyh2b2lkICosIGludCwgaW50LCBpbnQsIGxvbmcpOworc3RhdGljIHZvaWQgd2FycGdm
eF9jb3B5Y29scyh2b2lkICosIGludCwgaW50LCBpbnQsIGludCk7CisjZW5kaWYKKworc3RhdGlj
IGludCB3YXJwZ2Z4X2lvY3RsKHZvaWQgKiwgdm9pZCAqLCB1X2xvbmcsIHZvaWQgKiwgaW50LCBz
dHJ1Y3QgbHdwICopOworc3RhdGljIHBhZGRyX3Qgd2FycGdmeF9tbWFwKHZvaWQgKiwgdm9pZCAq
LCBvZmZfdCwgaW50KTsKK3N0YXRpYyBpbnQgd2FycGdmeF9nZXRfZmJpbmZvKHN0cnVjdCB3YXJw
Z2Z4X3NvZnRjICosCisgICAgc3RydWN0IHdzZGlzcGxheWlvX2ZiaW5mbyAqKTsKKwordm9pZCB3
YXJwZ2Z4Y25wcm9iZShzdHJ1Y3QgY29uc2RldiAqKTsKK3ZvaWQgd2FycGdmeGNuaW5pdChzdHJ1
Y3QgY29uc2RldiAqKTsKK3ZvaWQgd2FycGdmeGNucG9sbGMoZGV2X3QsIGludCk7Cit2b2lkIHdh
cnBnZnhjbnB1dGMoZGV2X3QsIGludCk7CitpbnQgd2FycGdmeGNuZ2V0YyhkZXZfdCk7CisKK0NG
QVRUQUNIX0RFQ0xfTkVXKHdhcnBnZngsIHNpemVvZihzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyksCisg
ICAgd2FycGdmeF9tYXRjaCwgd2FycGdmeF9hdHRhY2gsIE5VTEwsIE5VTEwpOworCitzdGF0aWMg
c3RydWN0IHdzZGlzcGxheV9hY2Nlc3NvcHMgd2FycGdmeF9hY2Nlc3NvcHMgPSB7CisJLmlvY3Rs
ID0gd2FycGdmeF9pb2N0bCwKKwkubW1hcCA9IHdhcnBnZnhfbW1hcCwKK307CisKKy8qIERpcmVj
dCB2b2xhdGlsZSBNTUlPIG1hdGNoZXMgdGhlIGFjY2Vzc2VzIG1hZGUgYnkgY3NnZnguY2FyZC4g
Ki8KKyNkZWZpbmUgV0FSUEdGWF9SRUFEKHNjLCByZWcpIFwKKwkoKHNjKS0+c2NfcmVndmFbKHJl
ZykgLyBzaXplb2YodWludDMyX3QpXSkKKyNkZWZpbmUgV0FSUEdGWF9XUklURShzYywgcmVnLCB2
YWwpIGRvIHsgXAorCShzYyktPnNjX3JlZ3ZhWyhyZWcpIC8gc2l6ZW9mKHVpbnQzMl90KV0gPSAo
dWludDMyX3QpKHZhbCk7IFwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQKK3dhcnBnZnhfbWF0
Y2goZGV2aWNlX3QgcGFyZW50LCBjZmRhdGFfdCBjZiwgdm9pZCAqYXV4KQoreworCXN0cnVjdCB6
YnVzX2FyZ3MgKnphcCA9IGF1eDsKKwl1aW50OF90IHBhcnQ7CisKKwlpZiAoemFwLT5tYW5pZCAh
PSBXQVJQR0ZYX01BTklEKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoemFwLT5wcm9kaWQpIHsK
KwljYXNlIFdBUlBHRlhfUFJPRElEX0ZCOgorCQlwYXJ0ID0gV0FSUEdGWF9QQVJUX0ZCOworCQli
cmVhazsKKwljYXNlIFdBUlBHRlhfUFJPRElEX1JFRzoKKwkJcGFydCA9IFdBUlBHRlhfUEFSVF9S
RUc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCWlmIChhbWlnYV9y
ZWFsY29uZmlnID09IDApIHsKKwkJd2FycGdmeF9lYXJseV9wYXJ0cyB8PSBwYXJ0OworCQl3YXJw
Z2Z4X2V4aXN0cyA9CisJCSAgICAod2FycGdmeF9lYXJseV9wYXJ0cyAmIFdBUlBHRlhfUEFSVFNf
QUxMKSA9PQorCQkgICAgV0FSUEdGWF9QQVJUU19BTEw7CisJCXJldHVybiAwOworCX0KKworCXJl
dHVybiAxOworfQorCitzdGF0aWMgdm9pZAord2FycGdmeF9hdHRhY2goZGV2aWNlX3QgcGFyZW50
LCBkZXZpY2VfdCBzZWxmLCB2b2lkICphdXgpCit7CisJc3RydWN0IHpidXNfYXJncyAqemFwID0g
YXV4OworCXN0cnVjdCB3YXJwZ2Z4X3BhcnQgKnBhcnQ7CisKKwlpZiAoemFwLT5wcm9kaWQgPT0g
V0FSUEdGWF9QUk9ESURfRkIpIHsKKwkJcGFydCA9ICZ3YXJwZ2Z4X2ZiX3BhcnQ7CisJCWFwcmlu
dF9ub3JtYWwoIjogQ1MtTGFiIFdhcnAgR0ZYIGZyYW1lYnVmZmVyLCAlZCBNQiBhcGVydHVyZVxu
IiwKKwkJICAgIHphcC0+c2l6ZSAvICgxMDI0ICogMTAyNCkpOworCX0gZWxzZSB7CisJCXBhcnQg
PSAmd2FycGdmeF9yZWdfcGFydDsKKwkJYXByaW50X25vcm1hbCgiOiBDUy1MYWIgV2FycCBHRlgg
Y29udHJvbCByZWdpc3RlcnNcbiIpOworCX0KKworCXBhcnQtPnZhbGlkID0gdHJ1ZTsKKwlwYXJ0
LT5wYSA9IHphcC0+cGE7CisJcGFydC0+dmEgPSB6YXAtPnZhOworCXBhcnQtPnNpemUgPSB6YXAt
PnNpemU7CisJcGFydC0+c2Vybm8gPSB6YXAtPnNlcm5vOworCisJLyoKKwkgKiBQcm9kdWN0IDEw
MSBvd25zIHRoZSB3c2Rpc3BsYXkgaW5zdGFuY2UuICBEZWZlcnJpbmcgaXRzIGNvbXBsZXRpb24K
KwkgKiB1bnRpbCB6YnVzIGhhcyBhdHRhY2hlZCBhbGwgY2hpbGRyZW4gbWFrZXMgcHJvZHVjdCBv
cmRlcmluZyBpcnJlbGV2YW50LgorCSAqLworCWlmICh6YXAtPnByb2RpZCA9PSBXQVJQR0ZYX1BS
T0RJRF9SRUcpCisJCWNvbmZpZ19kZWZlcihzZWxmLCB3YXJwZ2Z4X2RlZmVycmVkKTsKK30KKwor
c3RhdGljIHZvaWQKK3dhcnBnZnhfZGVmZXJyZWQoZGV2aWNlX3Qgc2VsZikKK3sKKwlzdHJ1Y3Qg
d2FycGdmeF9zb2Z0YyAqc2MgPSBkZXZpY2VfcHJpdmF0ZShzZWxmKTsKKwlzaXplX3QgdmlzaWJs
ZV9zaXplOworCisJaWYgKCF3YXJwZ2Z4X2ZiX3BhcnQudmFsaWQgfHwgIXdhcnBnZnhfcmVnX3Bh
cnQudmFsaWQpIHsKKwkJYXByaW50X2Vycm9yX2RldihzZWxmLAorCQkgICAgImJvdGggZnJhbWVi
dWZmZXIgYW5kIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSByZXF1aXJlZFxuIik7CisJCXJldHVybjsK
Kwl9CisKKwlpZiAod2FycGdmeF9yZWdfcGFydC5zaXplIDwgV0FSUEdGWF9SRUdfU0laRSkgewor
CQlhcHJpbnRfZXJyb3JfZGV2KHNlbGYsICJjb250cm9sIGFwZXJ0dXJlIGlzIG9ubHkgJXp1IGJ5
dGVzXG4iLAorCQkgICAgd2FycGdmeF9yZWdfcGFydC5zaXplKTsKKwkJcmV0dXJuOworCX0KKwor
CXNjLT5zY19kZXYgPSBzZWxmOworCXNjLT5zY19tb2RlID0gJndhcnBnZnhfY29uc29sZV9tb2Rl
OworCXNjLT5zY193aWR0aCA9IHNjLT5zY19tb2RlLT53aWR0aDsKKwlzYy0+c2NfaGVpZ2h0ID0g
c2MtPnNjX21vZGUtPmhlaWdodDsKKwlzYy0+c2NfZGVwdGggPSBzYy0+c2NfbW9kZS0+ZGVwdGg7
CisJc2MtPnNjX3N0cmlkZSA9IHNjLT5zY19tb2RlLT5zdHJpZGU7CisJdmlzaWJsZV9zaXplID0g
c2MtPnNjX3N0cmlkZSAqIHNjLT5zY19oZWlnaHQ7CisKKwlzYy0+c2NfZmJzaXplID0gTUlOKHdh
cnBnZnhfZmJfcGFydC5zaXplLAorCSAgICAoc2l6ZV90KVdBUlBHRlhfRkJfVVNBQkxFX1NJWkUp
OworCWlmIChzYy0+c2NfZmJzaXplIDwgdmlzaWJsZV9zaXplKSB7CisJCWFwcmludF9lcnJvcl9k
ZXYoc2VsZiwKKwkJICAgICJmcmFtZWJ1ZmZlciBpcyB0b28gc21hbGwgZm9yICVzLCAxNiBicHBc
biIsCisJCSAgICBzYy0+c2NfbW9kZS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlzYy0+c2Nf
cmVnX2JzdC5iYXNlID0gKGJ1c19hZGRyX3Qpd2FycGdmeF9yZWdfcGFydC52YTsKKwlzYy0+c2Nf
cmVnX2JzdC5hYnNtID0gJmFtaWdhX2J1c19zdHJpZGVfMTsKKwlzYy0+c2NfcmVndCA9ICZzYy0+
c2NfcmVnX2JzdDsKKwlpZiAoYnVzX3NwYWNlX21hcChzYy0+c2NfcmVndCwgMCwgV0FSUEdGWF9S
RUdfU0laRSwgMCwKKwkgICAgJnNjLT5zY19yZWdoKSkgeworCQlhcHJpbnRfZXJyb3JfZGV2KHNl
bGYsICJ1bmFibGUgdG8gbWFwIGNvbnRyb2wgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0dXJuOworCX0K
KwlzYy0+c2NfcmVndmEgPSBidXNfc3BhY2VfdmFkZHIoc2MtPnNjX3JlZ3QsIHNjLT5zY19yZWdo
KTsKKwlpZiAoc2MtPnNjX3JlZ3ZhID09IE5VTEwpIHsKKwkJYXByaW50X2Vycm9yX2RldihzZWxm
LCAiY29udHJvbCByZWdpc3RlcnMgYXJlIG5vdCBsaW5lYXJcbiIpOworCQlyZXR1cm47CisJfQor
I2lmZGVmIFdBUlBHRlhfREVCVUcKKwlhcHJpbnRfbm9ybWFsX2RldihzZWxmLCAicmVnaXN0ZXIg
YXBlcnR1cmUgcGEgJXAsIHZhIDB4JTA4bHhcbiIsCisJICAgIHdhcnBnZnhfcmVnX3BhcnQucGEs
ICh1X2xvbmcpKHVpbnRwdHJfdClzYy0+c2NfcmVndmEpOworCXdhcnBnZnhfZHVtcF9yZWdzKHNj
LCAiaW5pdGlhbCIpOworI2VuZGlmCisKKwlzYy0+c2NfZmJfYnN0LmJhc2UgPSAoYnVzX2FkZHJf
dCl3YXJwZ2Z4X2ZiX3BhcnQudmE7CisJc2MtPnNjX2ZiX2JzdC5hYnNtID0gJmFtaWdhX2J1c19z
dHJpZGVfMTsKKwlzYy0+c2NfZmJ0ID0gJnNjLT5zY19mYl9ic3Q7CisJaWYgKGJ1c19zcGFjZV9t
YXAoc2MtPnNjX2ZidCwgMCwgc2MtPnNjX2Zic2l6ZSwKKwkgICAgQlVTX1NQQUNFX01BUF9MSU5F
QVIsICZzYy0+c2NfZmJoKSkgeworCQlhcHJpbnRfZXJyb3JfZGV2KHNlbGYsICJ1bmFibGUgdG8g
bWFwIGZyYW1lYnVmZmVyXG4iKTsKKwkJcmV0dXJuOworCX0KKwlzYy0+c2NfZmJwYSA9IChidXNf
YWRkcl90KXdhcnBnZnhfZmJfcGFydC5wYTsKKworCXdhcnBnZnhfcmVzZXQoc2MpOworI2lmZGVm
IFdBUlBHRlhfREVCVUcKKwl3YXJwZ2Z4X2R1bXBfcmVncyhzYywgImFmdGVyIHJlc2V0Iik7Cisj
ZW5kaWYKKwlpZiAoIXdhcnBnZnhfc2V0X2Nsb2NrKHNjKSkKKwkJcmV0dXJuOworI2lmZGVmIFdB
UlBHRlhfREVCVUcKKwl3YXJwZ2Z4X2R1bXBfcmVncyhzYywgImFmdGVyIGNsb2NrIik7CisjZW5k
aWYKKwltZW1zZXQoYnVzX3NwYWNlX3ZhZGRyKHNjLT5zY19mYnQsIHNjLT5zY19mYmgpLCAwLCB2
aXNpYmxlX3NpemUpOworCXdhcnBnZnhfc2V0X21vZGUoc2MpOworI2lmZGVmIFdBUlBHRlhfREVC
VUcKKwl3YXJwZ2Z4X2R1bXBfcmVncyhzYywgImFmdGVyIG1vZGUiKTsKKyNlbmRpZgorCisJYXBy
aW50X25vcm1hbF9kZXYoc2VsZiwKKwkgICAgIiVzLCAldSBicHAsIHN0cmlkZSAldSwgJXp1IE1C
IHVzYWJsZSB2aWRlbyBtZW1vcnlcbiIsCisJICAgIHNjLT5zY19tb2RlLT5uYW1lLCBzYy0+c2Nf
ZGVwdGgsIHNjLT5zY19zdHJpZGUsCisJICAgIHNjLT5zY19mYnNpemUgLyAoMTAyNCAqIDEwMjQp
KTsKKworI2lmZGVmIFdBUlBHRlhfQUNDRUwKKwlzYy0+c2NfYWNjZWxfb2sgPSB3YXJwZ2Z4X3dh
aXRfYmxpdHRlcihzYyk7CisJaWYgKHNjLT5zY19hY2NlbF9vaykKKwkJYXByaW50X25vcm1hbF9k
ZXYoc2VsZiwKKwkJICAgICIyRCBjb25zb2xlL3dzZmIgYWNjZWxlcmF0aW9uIGVuYWJsZWRcbiIp
OworCWVsc2UKKwkJYXByaW50X2Vycm9yX2RldihzZWxmLAorCQkgICAgIjJEIGVuZ2luZSBpcyBi
dXN5OyB1c2luZyBzb2Z0d2FyZSByYXN0ZXIgb3BlcmF0aW9uc1xuIik7CisjZW5kaWYKKworCXdh
cnBnZnhfYXR0YWNoX3dzZGlzcGxheShzYyk7Cit9CisKK3N0YXRpYyB2b2lkCit3YXJwZ2Z4X3Jl
c2V0KHN0cnVjdCB3YXJwZ2Z4X3NvZnRjICpzYykKK3sKKwl1X2ludCBpOworCisJLyogU2VxdWVu
Y2UgdXNlZCBieSBjc2dmeC5jYXJkIGJlZm9yZSBlbmFibGluZyB0aGUgZmlyc3QgbW9kZS4gKi8K
KwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19DT01NQU5EX1JFU0VULCAwKTsKKwlmb3Ig
KGkgPSAwOyBpIDwgMHgwYzAwOyBpKyspCisJCVdBUlBHRlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVH
X0NPTU1BTkQsIDApOworfQorCitzdGF0aWMgYm9vbAord2FycGdmeF9zZXRfY2xvY2soc3RydWN0
IHdhcnBnZnhfc29mdGMgKnNjKQoreworCWNvbnN0IHN0cnVjdCB3YXJwZ2Z4X21vZGUgKm1vZGUg
PSBzYy0+c2NfbW9kZTsKKwl1aW50MzJfdCB2YWx1ZTsKKwl1X2ludCBpOworCisJdmFsdWUgPSBX
QVJQR0ZYX1JFQUQoc2MsIFdBUlBHRlhfUkVHX0NMT0NLX0NPTlRST0wpOworCWlmICgodmFsdWUg
JiBXQVJQR0ZYX0NMT0NLX1NFTEVDVF9NQVNLKSA9PQorCSAgICBtb2RlLT5jbG9ja19zZWxlY3Qg
JiYKKwkgICAgKFdBUlBHRlhfUkVBRChzYywgV0FSUEdGWF9SRUdfQ0xPQ0tfU1RBVFVTKSAmCisJ
ICAgIFdBUlBHRlhfQ0xPQ0tfUkVBRFkpICE9IDApCisJCXJldHVybiB0cnVlOworCisJV0FSUEdG
WF9XUklURShzYywgV0FSUEdGWF9SRUdfQ0xPQ0tfQ09OVFJPTCwKKwkgICAgbW9kZS0+Y2xvY2tf
Y29udHJvbCk7CisJZm9yIChpID0gMDsgaSA8IDEwMDAwMDA7IGkrKykgeworCQlpZiAoKFdBUlBH
RlhfUkVBRChzYywgV0FSUEdGWF9SRUdfQ0xPQ0tfU1RBVFVTKSAmCisJCSAgICBXQVJQR0ZYX0NM
T0NLX1JFQURZKSAhPSAwKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJYXByaW50X2Vycm9yX2Rl
dihzYy0+c2NfZGV2LAorCSAgICAiJXMgcGl4ZWwgY2xvY2sgZGlkIG5vdCBsb2NrOiBzdGF0dXMg
JTA4eCBjb250cm9sICUwOHhcbiIsCisJICAgIG1vZGUtPm5hbWUsCisJICAgICh1bnNpZ25lZClX
QVJQR0ZYX1JFQUQoc2MsIFdBUlBHRlhfUkVHX0NMT0NLX1NUQVRVUyksCisJICAgICh1bnNpZ25l
ZClXQVJQR0ZYX1JFQUQoc2MsIFdBUlBHRlhfUkVHX0NMT0NLX0NPTlRST0wpKTsKKwlyZXR1cm4g
ZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkCit3YXJwZ2Z4X3NldF9tb2RlKHN0cnVjdCB3YXJwZ2Z4
X3NvZnRjICpzYykKK3sKKwljb25zdCBzdHJ1Y3Qgd2FycGdmeF9tb2RlICptb2RlID0gc2MtPnNj
X21vZGU7CisJdWludDMyX3QgdmFsdWU7CisKKwl2YWx1ZSA9IFdBUlBHRlhfUkVBRChzYywgV0FS
UEdGWF9SRUdfU0NBTEVfQ09OVFJPTCk7CisJdmFsdWUgJj0gfjB4MDAwMDAwM2NVOworCVdBUlBH
RlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX1NDQUxFX0NPTlRST0wsIHZhbHVlKTsKKworCVdBUlBH
RlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX09VVFBVVF9BVVgsIDApOworCVdBUlBHRlhfV1JJVEUo
c2MsIFdBUlBHRlhfUkVHX0ZCX09GRlNFVCwgMCk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdG
WF9SRUdfRk9STUFUX1BJVENILCBtb2RlLT5mb3JtYXRfcGl0Y2gpOworCVdBUlBHRlhfV1JJVEUo
c2MsIFdBUlBHRlhfUkVHX0hfQUNUSVZFLCBtb2RlLT5oX2FjdGl2ZSk7CisJV0FSUEdGWF9XUklU
RShzYywgV0FSUEdGWF9SRUdfSF9USU1JTkdfMSwgbW9kZS0+aF90aW1pbmdfMSk7CisJV0FSUEdG
WF9XUklURShzYywgV0FSUEdGWF9SRUdfSF9USU1JTkdfMiwgbW9kZS0+aF90aW1pbmdfMik7CisJ
V0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfVl9BQ1RJVkUsIG1vZGUtPnZfYWN0aXZlKTsK
KwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19WX1RJTUlOR18xLCBtb2RlLT52X3RpbWlu
Z18xKTsKKwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19WX1RJTUlOR18yLCBtb2RlLT52
X3RpbWluZ18yKTsKKwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19IVl9UT1RBTCwgbW9k
ZS0+aHZfdG90YWwpOworCVdBUlBHRlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX01PREVfQ09NTUlU
LCBXQVJQR0ZYX01PREVfQ09NTUlUKTsKKwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19N
T0RFX0NPTU1JVCwgV0FSUEdGWF9NT0RFX0VOQUJMRSk7CisKKwlidXNfc3BhY2VfYmFycmllcihz
Yy0+c2NfcmVndCwgc2MtPnNjX3JlZ2gsIDAsCisJICAgIFdBUlBHRlhfUkVHX1NJWkUsIEJVU19T
UEFDRV9CQVJSSUVSX1dSSVRFKTsKK30KKworI2lmZGVmIFdBUlBHRlhfREVCVUcKK3N0YXRpYyB2
b2lkCit3YXJwZ2Z4X2R1bXBfcmVncyhzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqc2MsIGNvbnN0IGNo
YXIgKndoZXJlKQoreworCXVpbnQzMl90IGJ1czAwLCBidXMwNCwgYnVzMTFjOworCisJYnVzMDAg
PSBidXNfc3BhY2VfcmVhZF80KHNjLT5zY19yZWd0LCBzYy0+c2NfcmVnaCwKKwkgICAgV0FSUEdG
WF9SRUdfRkJfT0ZGU0VUKTsKKwlidXMwNCA9IGJ1c19zcGFjZV9yZWFkXzQoc2MtPnNjX3JlZ3Qs
IHNjLT5zY19yZWdoLAorCSAgICBXQVJQR0ZYX1JFR19GT1JNQVRfUElUQ0gpOworCWJ1czExYyA9
IGJ1c19zcGFjZV9yZWFkXzQoc2MtPnNjX3JlZ3QsIHNjLT5zY19yZWdoLAorCSAgICBXQVJQR0ZY
X1JFR19NT0RFX0NPTU1JVCk7CisKKwlhcHJpbnRfbm9ybWFsX2RldihzYy0+c2NfZGV2LAorCSAg
ICAiJXM6IGRpcmVjdCAwMDA9JTA4eCAwMDQ9JTA4eCAxMWM9JTA4eDsgIgorCSAgICAiYnVzIDAw
MD0lMDh4IDAwND0lMDh4IDExYz0lMDh4XG4iLAorCSAgICB3aGVyZSwKKwkgICAgKHVuc2lnbmVk
KVdBUlBHRlhfUkVBRChzYywgV0FSUEdGWF9SRUdfRkJfT0ZGU0VUKSwKKwkgICAgKHVuc2lnbmVk
KVdBUlBHRlhfUkVBRChzYywgV0FSUEdGWF9SRUdfRk9STUFUX1BJVENIKSwKKwkgICAgKHVuc2ln
bmVkKVdBUlBHRlhfUkVBRChzYywgV0FSUEdGWF9SRUdfTU9ERV9DT01NSVQpLAorCSAgICAodW5z
aWduZWQpYnVzMDAsICh1bnNpZ25lZClidXMwNCwgKHVuc2lnbmVkKWJ1czExYyk7CisJYXByaW50
X25vcm1hbF9kZXYoc2MtPnNjX2RldiwKKwkgICAgIiVzOiAwMzA9JTA4eCAxMDA9JTA4eCAxMDQ9
JTA4eCAxMDg9JTA4eFxuIiwgd2hlcmUsCisJICAgICh1bnNpZ25lZClXQVJQR0ZYX1JFQUQoc2Ms
IFdBUlBHRlhfUkVHX09VVFBVVF9BVVgpLAorCSAgICAodW5zaWduZWQpV0FSUEdGWF9SRUFEKHNj
LCBXQVJQR0ZYX1JFR19IX0FDVElWRSksCisJICAgICh1bnNpZ25lZClXQVJQR0ZYX1JFQUQoc2Ms
IFdBUlBHRlhfUkVHX0hfVElNSU5HXzEpLAorCSAgICAodW5zaWduZWQpV0FSUEdGWF9SRUFEKHNj
LCBXQVJQR0ZYX1JFR19IX1RJTUlOR18yKSk7CisJYXByaW50X25vcm1hbF9kZXYoc2MtPnNjX2Rl
diwKKwkgICAgIiVzOiAxMGM9JTA4eCAxMTA9JTA4eCAxMTQ9JTA4eCAxMTg9JTA4eCAxMjg9JTA4
eFxuIiwKKwkgICAgd2hlcmUsCisJICAgICh1bnNpZ25lZClXQVJQR0ZYX1JFQUQoc2MsIFdBUlBH
RlhfUkVHX1ZfQUNUSVZFKSwKKwkgICAgKHVuc2lnbmVkKVdBUlBHRlhfUkVBRChzYywgV0FSUEdG
WF9SRUdfVl9USU1JTkdfMSksCisJICAgICh1bnNpZ25lZClXQVJQR0ZYX1JFQUQoc2MsIFdBUlBH
RlhfUkVHX1ZfVElNSU5HXzIpLAorCSAgICAodW5zaWduZWQpV0FSUEdGWF9SRUFEKHNjLCBXQVJQ
R0ZYX1JFR19IVl9UT1RBTCksCisJICAgICh1bnNpZ25lZClXQVJQR0ZYX1JFQUQoc2MsIFdBUlBH
RlhfUkVHX1NDQUxFX0NPTlRST0wpKTsKKwlhcHJpbnRfbm9ybWFsX2RldihzYy0+c2NfZGV2LAor
CSAgICAiJXM6IGNsb2NrIDIwMD0lMDh4IDIwND0lMDh4OyBpbnRlcnJ1cHQgMjA4PSUwOHggMjBj
PSUwOHhcbiIsCisJICAgIHdoZXJlLAorCSAgICAodW5zaWduZWQpV0FSUEdGWF9SRUFEKHNjLCBX
QVJQR0ZYX1JFR19DTE9DS19TVEFUVVMpLAorCSAgICAodW5zaWduZWQpV0FSUEdGWF9SRUFEKHNj
LCBXQVJQR0ZYX1JFR19DTE9DS19DT05UUk9MKSwKKwkgICAgKHVuc2lnbmVkKVdBUlBHRlhfUkVB
RChzYywgV0FSUEdGWF9SRUdfSU5URVJSVVBUX1NUQVRVUyksCisJICAgICh1bnNpZ25lZClXQVJQ
R0ZYX1JFQUQoc2MsIFdBUlBHRlhfUkVHX0lOVEVSUlVQVF9DT05UUk9MKSk7CisJYXByaW50X25v
cm1hbF9kZXYoc2MtPnNjX2RldiwKKwkgICAgIiVzOiBibGl0dGVyIHN0YXR1cyAwMjQ9JTA4eFxu
Iiwgd2hlcmUsCisJICAgICh1bnNpZ25lZClXQVJQR0ZYX1JFQUQoc2MsIFdBUlBHRlhfUkVHX0JM
VF9TVEFUVVMpKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAord2FycGdmeF9hdHRhY2hfd3Nk
aXNwbGF5KHN0cnVjdCB3YXJwZ2Z4X3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgcmFzb3BzX2luZm8g
KnJpOworCXN0cnVjdCB3c2VtdWxkaXNwbGF5ZGV2X2F0dGFjaF9hcmdzIHdzX2FhOworCWxvbmcg
ZGVmYXR0cjsKKworI2lmZGVmIFdBUlBHRlhfQ09OU09MRQorCXNjLT5zY19pc2NvbnNvbGUgPSB0
cnVlOworI2Vsc2UKKwlzYy0+c2NfaXNjb25zb2xlID0gZmFsc2U7CisjZW5kaWYKKworCXNjLT5z
Y19kZWZhdWx0c2NyZWVuID0gKHN0cnVjdCB3c3NjcmVlbl9kZXNjcikgeworCSAgICAiZGVmYXVs
dCIsIDAsIDAsIE5VTEwsIDgsIDE2LAorCSAgICBXU1NDUkVFTl9XU0NPTE9SUyB8IFdTU0NSRUVO
X0hJTElULCBOVUxMCisJfTsKKwlzYy0+c2NfODB4MjVzY3JlZW4gPSAoc3RydWN0IHdzc2NyZWVu
X2Rlc2NyKSB7CisJICAgICI4MHgyNSIsIDgwLCAyNSwgTlVMTCwgOCwgMTYsCisJICAgIFdTU0NS
RUVOX1dTQ09MT1JTIHwgV1NTQ1JFRU5fSElMSVQsIE5VTEwKKwl9OworCXNjLT5zY19zY3JlZW5z
WzBdID0gJnNjLT5zY19kZWZhdWx0c2NyZWVuOworCXNjLT5zY19zY3JlZW5zWzFdID0gJnNjLT5z
Y184MHgyNXNjcmVlbjsKKwlzYy0+c2Nfc2NyZWVubGlzdCA9IChzdHJ1Y3Qgd3NzY3JlZW5fbGlz
dCkgeworCSAgICAyLCBzYy0+c2Nfc2NyZWVucworCX07CisJc2MtPnNjX3dzbW9kZSA9IFdTRElT
UExBWUlPX01PREVfRU1VTDsKKworCXZjb25zX2luaXQoJnNjLT5zY192ZCwgc2MsICZzYy0+c2Nf
ZGVmYXVsdHNjcmVlbiwKKwkgICAgJndhcnBnZnhfYWNjZXNzb3BzKTsKKwlzYy0+c2NfdmQuaW5p
dF9zY3JlZW4gPSB3YXJwZ2Z4X2luaXRfc2NyZWVuOworCXJpID0gJnNjLT5zY19jb25zb2xlX3Nj
cmVlbi5zY3Jfcmk7CisKKwl2Y29uc19pbml0X3NjcmVlbigmc2MtPnNjX3ZkLCAmc2MtPnNjX2Nv
bnNvbGVfc2NyZWVuLCAxLAorCSAgICAmZGVmYXR0cik7CisJc2MtPnNjX2NvbnNvbGVfc2NyZWVu
LnNjcl9mbGFncyB8PSBWQ09OU19TQ1JFRU5fSVNfU1RBVElDOworCisJc2MtPnNjX2RlZmF1bHRz
Y3JlZW4udGV4dG9wcyA9ICZyaS0+cmlfb3BzOworCXNjLT5zY19kZWZhdWx0c2NyZWVuLmNhcGFi
aWxpdGllcyA9IHJpLT5yaV9jYXBzOworCXNjLT5zY19kZWZhdWx0c2NyZWVuLm5yb3dzID0gcmkt
PnJpX3Jvd3M7CisJc2MtPnNjX2RlZmF1bHRzY3JlZW4ubmNvbHMgPSByaS0+cmlfY29sczsKKwlz
Yy0+c2NfZGVmYXVsdHNjcmVlbi5mb250d2lkdGggPSByaS0+cmlfZm9udC0+Zm9udHdpZHRoOwor
CXNjLT5zY19kZWZhdWx0c2NyZWVuLmZvbnRoZWlnaHQgPSByaS0+cmlfZm9udC0+Zm9udGhlaWdo
dDsKKwlzYy0+c2NfODB4MjVzY3JlZW4udGV4dG9wcyA9ICZyaS0+cmlfb3BzOworCXNjLT5zY184
MHgyNXNjcmVlbi5jYXBhYmlsaXRpZXMgPSByaS0+cmlfY2FwczsKKworCWlmIChzYy0+c2NfaXNj
b25zb2xlKSB7CisJCXZjb25zX3JlZHJhd19zY3JlZW4oJnNjLT5zY19jb25zb2xlX3NjcmVlbik7
CisKKwkJd3NkaXNwbGF5X2NuYXR0YWNoKCZzYy0+c2NfZGVmYXVsdHNjcmVlbiwgcmksIDAsIDAs
CisJCSAgICBkZWZhdHRyKTsKKwkJdmNvbnNfcmVwbGF5X21zZ2J1Zigmc2MtPnNjX2NvbnNvbGVf
c2NyZWVuKTsKKwl9CisKKwl3c19hYS5jb25zb2xlID0gc2MtPnNjX2lzY29uc29sZTsKKwl3c19h
YS5zY3JkYXRhID0gJnNjLT5zY19zY3JlZW5saXN0OworCXdzX2FhLmFjY2Vzc29wcyA9ICZ3YXJw
Z2Z4X2FjY2Vzc29wczsKKwl3c19hYS5hY2Nlc3Njb29raWUgPSAmc2MtPnNjX3ZkOworCisJY29u
ZmlnX2ZvdW5kKHNjLT5zY19kZXYsICZ3c19hYSwgd3NlbXVsZGlzcGxheWRldnByaW50LCBDRkFS
R1NfTk9ORSk7Cit9CisKK3N0YXRpYyB2b2lkCit3YXJwZ2Z4X2luaXRfc2NyZWVuKHZvaWQgKmNv
b2tpZSwgc3RydWN0IHZjb25zX3NjcmVlbiAqc2NyLCBpbnQgZXhpc3RpbmcsCisgICAgbG9uZyAq
ZGVmYXR0cikKK3sKKwlzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqc2MgPSBjb29raWU7CisJc3RydWN0
IHJhc29wc19pbmZvICpyaSA9ICZzY3ItPnNjcl9yaTsKKwlib29sIGZpeGVkX2dlb21ldHJ5Owor
CisJc2NyLT5zY3JfZmxhZ3MgfD0gVkNPTlNfTE9BREZPTlQ7CisJd3Nmb250X2luaXQoKTsKKwlm
aXhlZF9nZW9tZXRyeSA9IHNjci0+c2NyX3R5cGUgIT0gTlVMTCAmJgorCSAgICBzY3ItPnNjcl90
eXBlICE9ICZzYy0+c2NfZGVmYXVsdHNjcmVlbjsKKworCXJpLT5yaV9iaXRzID0gYnVzX3NwYWNl
X3ZhZGRyKHNjLT5zY19mYnQsIHNjLT5zY19mYmgpOworCXJpLT5yaV9kZXB0aCA9IHNjLT5zY19k
ZXB0aDsKKwlyaS0+cmlfd2lkdGggPSBzYy0+c2Nfd2lkdGg7CisJcmktPnJpX2hlaWdodCA9IHNj
LT5zY19oZWlnaHQ7CisJcmktPnJpX3N0cmlkZSA9IHNjLT5zY19zdHJpZGU7CisJcmktPnJpX2Zs
ZyA9IGZpeGVkX2dlb21ldHJ5ID8gUklfQ0VOVEVSIDogMDsKKworCS8qIGNzZ2Z4IFJHQiBmb3Jt
YXQgMTAgaXMgYmlnLWVuZGlhbiBSNUc2QjUuICovCisJcmktPnJpX3JudW0gPSA1OworCXJpLT5y
aV9nbnVtID0gNjsKKwlyaS0+cmlfYm51bSA9IDU7CisJcmktPnJpX3Jwb3MgPSAxMTsKKwlyaS0+
cmlfZ3BvcyA9IDU7CisJcmktPnJpX2Jwb3MgPSAwOworCisJaWYgKGZpeGVkX2dlb21ldHJ5KSB7
CisJCXJhc29wc19pbml0KHJpLCBzY3ItPnNjcl90eXBlLT5ucm93cywKKwkJICAgIHNjci0+c2Ny
X3R5cGUtPm5jb2xzKTsKKwl9IGVsc2UgeworCQlyYXNvcHNfaW5pdChyaSwgMCwgMCk7CisJfQor
CXJpLT5yaV9jYXBzID0gV1NTQ1JFRU5fV1NDT0xPUlM7CisJaWYgKCFmaXhlZF9nZW9tZXRyeSkg
eworCQlyYXNvcHNfcmVjb25maWcocmksCisJCSAgICByaS0+cmlfaGVpZ2h0IC8gcmktPnJpX2Zv
bnQtPmZvbnRoZWlnaHQsCisJCSAgICByaS0+cmlfd2lkdGggLyByaS0+cmlfZm9udC0+Zm9udHdp
ZHRoKTsKKwl9CisJcmktPnJpX2h3ID0gc2NyOworCisJcmktPnJpX2RvX2N1cnNvciA9IHdhcnBn
ZnhfZG9fY3Vyc29yOworCisjaWZkZWYgV0FSUEdGWF9BQ0NFTAorCXNjLT5zY19zd29wcyA9IHJp
LT5yaV9vcHM7CisJcmktPnJpX29wcy5lcmFzZXJvd3MgPSB3YXJwZ2Z4X2VyYXNlcm93czsKKwly
aS0+cmlfb3BzLmNvcHlyb3dzID0gd2FycGdmeF9jb3B5cm93czsKKwlyaS0+cmlfb3BzLmVyYXNl
Y29scyA9IHdhcnBnZnhfZXJhc2Vjb2xzOworCXJpLT5yaV9vcHMuY29weWNvbHMgPSB3YXJwZ2Z4
X2NvcHljb2xzOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCit3YXJwZ2Z4X2RvX2N1cnNvcihz
dHJ1Y3QgcmFzb3BzX2luZm8gKnJpKQoreworCXN0cnVjdCB2Y29uc19zY3JlZW4gKnNjciA9IHJp
LT5yaV9odzsKKwlzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqc2MgPSBzY3ItPnNjcl9jb29raWU7CisJ
dm9sYXRpbGUgdWludDE2X3QgKmRzdDsKKwlidXNfc2l6ZV90IG9mZnNldCwgc2l6ZTsKKwl1X2lu
dCB3aWR0aCwgaGVpZ2h0LCB4LCB5OworCisJd2lkdGggPSByaS0+cmlfZm9udC0+Zm9udHdpZHRo
OworCWhlaWdodCA9IHJpLT5yaV9mb250LT5mb250aGVpZ2h0OworCW9mZnNldCA9IChyaS0+cmlf
eW9yaWdpbiArIHJpLT5yaV9jcm93ICogaGVpZ2h0KSAqIHJpLT5yaV9zdHJpZGUgKworCSAgICAo
cmktPnJpX3hvcmlnaW4gKyByaS0+cmlfY2NvbCAqIHdpZHRoKSAqIHNpemVvZih1aW50MTZfdCk7
CisJc2l6ZSA9IChoZWlnaHQgLSAxKSAqIHJpLT5yaV9zdHJpZGUgKyB3aWR0aCAqIHNpemVvZih1
aW50MTZfdCk7CisJaWYgKG9mZnNldCArIHNpemUgPiBzYy0+c2NfZmJzaXplKQorCQlyZXR1cm47
CisKKwkvKiBUb2dnbGUgb25seSB0aGUgcmVkIGNvbXBvbmVudCwgbGlrZSB0aGUgY29sb3JlZCBB
R0Egd3Njb25zIGN1cnNvci4gKi8KKwlmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKwkJ
ZHN0ID0gKHZvbGF0aWxlIHVpbnQxNl90ICopKHJpLT5yaV9vcmlnYml0cyArIG9mZnNldCArCisJ
CSAgICB5ICogcmktPnJpX3N0cmlkZSk7CisJCWZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKQor
CQkJZHN0W3hdIF49IFdBUlBHRlhfQ1VSU09SX1JFRF9NQVNLOworCX0KKworCWJ1c19zcGFjZV9i
YXJyaWVyKHNjLT5zY19mYnQsIHNjLT5zY19mYmgsIG9mZnNldCwgc2l6ZSwKKwkgICAgQlVTX1NQ
QUNFX0JBUlJJRVJfV1JJVEUpOworfQorCisjaWZkZWYgV0FSUEdGWF9BQ0NFTAorc3RhdGljIGJv
b2wKK3dhcnBnZnhfd2FpdF9ibGl0dGVyKHN0cnVjdCB3YXJwZ2Z4X3NvZnRjICpzYykKK3sKKwl1
X2ludCBpOworCisJZm9yIChpID0gMDsgaSA8IFdBUlBHRlhfQkxUX1dBSVRfTE9PUFM7IGkrKykg
eworCQlpZiAoKFdBUlBHRlhfUkVBRChzYywgV0FSUEdGWF9SRUdfQkxUX1NUQVRVUykgJgorCQkg
ICAgV0FSUEdGWF9CTFRfU1RBVFVTX0JVU1lfTUFTSykgPT0gMCkKKwkJCXJldHVybiB0cnVlOwor
CX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wKK3dhcnBnZnhfcmVjdGZpbGwo
c3RydWN0IHdhcnBnZnhfc29mdGMgKnNjLCB1aW50MTZfdCB4LCB1aW50MTZfdCB5LAorICAgIHVp
bnQxNl90IHdpZHRoLCB1aW50MTZfdCBoZWlnaHQsIHVpbnQxNl90IGNvbG9yKQoreworCXVpbnQz
Ml90IGFkZHJlc3MsIHh5LCBzaXplOworCisJaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAp
CisJCXJldHVybiB0cnVlOworCWlmICghc2MtPnNjX2FjY2VsX29rIHx8ICF3YXJwZ2Z4X3dhaXRf
YmxpdHRlcihzYykpIHsKKwkJc2MtPnNjX2FjY2VsX29rID0gZmFsc2U7CisJCXJldHVybiBmYWxz
ZTsKKwl9CisKKwlhZGRyZXNzID0gKHVpbnQzMl90KShzYy0+c2NfZmJwYSArIHkgKiBzYy0+c2Nf
c3RyaWRlICsKKwkgICAgeCAqIHNpemVvZih1aW50MTZfdCkpOworCXh5ID0gKCh1aW50MzJfdCl5
IDw8IDE2KSB8IHg7CisJc2l6ZSA9ICgodWludDMyX3QpaGVpZ2h0IDw8IDE2KSB8IHdpZHRoOwor
CisJLyogVGhpcyBpcyB0aGUgUkdCRkJfUjVHNkI1IEZpbGxSZWN0IHNlcXVlbmNlIGZyb20gY3Nn
ZnguY2FyZC4gKi8KKwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19CTFRfRFNUX1NUUklE
RSwgc2MtPnNjX3N0cmlkZSk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX0RT
VF9BRERSRVNTLCBhZGRyZXNzKTsKKwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19CTFRf
U0laRSwgc2l6ZSk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX0RTVF9YWSwg
eHkpOworCVdBUlBHRlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX0JMVF9DT0xPUiwgY29sb3IpOwor
CVdBUlBHRlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX0JMVF9DT01NQU5ELAorCSAgICBXQVJQR0ZY
X0JMVF9DT01NQU5EX0ZJTExfMTYpOworCWJ1c19zcGFjZV9iYXJyaWVyKHNjLT5zY19yZWd0LCBz
Yy0+c2NfcmVnaCwKKwkgICAgV0FSUEdGWF9SRUdfQkxUX1NSQ19BRERSRVNTLAorCSAgICBXQVJQ
R0ZYX1JFR19PVVRQVVRfQVVYIC0gV0FSUEdGWF9SRUdfQkxUX1NSQ19BRERSRVNTLAorCSAgICBC
VVNfU1BBQ0VfQkFSUklFUl9XUklURSk7CisKKwlpZiAoIXdhcnBnZnhfd2FpdF9ibGl0dGVyKHNj
KSkgeworCQlzYy0+c2NfYWNjZWxfb2sgPSBmYWxzZTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwly
ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK3dhcnBnZnhfYml0Ymx0KHN0cnVjdCB3YXJw
Z2Z4X3NvZnRjICpzYywgdWludDE2X3Qgc3JjX3gsIHVpbnQxNl90IHNyY195LAorICAgIHVpbnQx
Nl90IGRzdF94LCB1aW50MTZfdCBkc3RfeSwgdWludDE2X3Qgd2lkdGgsIHVpbnQxNl90IGhlaWdo
dCkKK3sKKwl1aW50MzJfdCBzcmNfYWRkcmVzcywgZHN0X2FkZHJlc3MsIHNyY194eSwgZHN0X3h5
LCBzaXplOworCisJLyogY3NnZnguY2FyZCBzZW5kcyBvbmUtcGl4ZWwtd2lkZSBvcGVyYXRpb25z
IHRvIGl0cyBDUFUgZmFsbGJhY2suICovCisJaWYgKHdpZHRoIDw9IDEgfHwgaGVpZ2h0IDw9IDEp
CisJCXJldHVybiBmYWxzZTsKKwlpZiAoIXNjLT5zY19hY2NlbF9vayB8fCAhd2FycGdmeF93YWl0
X2JsaXR0ZXIoc2MpKSB7CisJCXNjLT5zY19hY2NlbF9vayA9IGZhbHNlOworCQlyZXR1cm4gZmFs
c2U7CisJfQorCisJc3JjX2FkZHJlc3MgPSAodWludDMyX3QpKHNjLT5zY19mYnBhICsgc3JjX3kg
KiBzYy0+c2Nfc3RyaWRlICsKKwkgICAgc3JjX3ggKiBzaXplb2YodWludDE2X3QpKTsKKwlkc3Rf
YWRkcmVzcyA9ICh1aW50MzJfdCkoc2MtPnNjX2ZicGEgKyBkc3RfeSAqIHNjLT5zY19zdHJpZGUg
KworCSAgICBkc3RfeCAqIHNpemVvZih1aW50MTZfdCkpOworCXNyY194eSA9ICgodWludDMyX3Qp
c3JjX3kgPDwgMTYpIHwgc3JjX3g7CisJZHN0X3h5ID0gKCh1aW50MzJfdClkc3RfeSA8PCAxNikg
fCBkc3RfeDsKKwlzaXplID0gKCh1aW50MzJfdCloZWlnaHQgPDwgMTYpIHwgd2lkdGg7CisKKwkv
KiBSR0JGQl9SNUc2QjUgc291cmNlLWNvcHkgbWludGVybSBzZXF1ZW5jZSBmcm9tIGNzZ2Z4LmNh
cmQuICovCisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX1NSQ19BRERSRVNTLCBz
cmNfYWRkcmVzcyk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX0RTVF9BRERS
RVNTLCBkc3RfYWRkcmVzcyk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX1NJ
WkUsIHNpemUpOworCVdBUlBHRlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX0JMVF9TUkNfWFksIHNy
Y194eSk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX0RTVF9YWSwgZHN0X3h5
KTsKKwlXQVJQR0ZYX1dSSVRFKHNjLCBXQVJQR0ZYX1JFR19CTFRfU1JDX1NUUklERSwgc2MtPnNj
X3N0cmlkZSk7CisJV0FSUEdGWF9XUklURShzYywgV0FSUEdGWF9SRUdfQkxUX0RTVF9TVFJJREUs
IHNjLT5zY19zdHJpZGUpOworCVdBUlBHRlhfV1JJVEUoc2MsIFdBUlBHRlhfUkVHX0JMVF9DT01N
QU5ELAorCSAgICBXQVJQR0ZYX0JMVF9DT01NQU5EX0NPUFlfMTYpOworCWJ1c19zcGFjZV9iYXJy
aWVyKHNjLT5zY19yZWd0LCBzYy0+c2NfcmVnaCwKKwkgICAgV0FSUEdGWF9SRUdfQkxUX1NSQ19B
RERSRVNTLAorCSAgICBXQVJQR0ZYX1JFR19PVVRQVVRfQVVYIC0gV0FSUEdGWF9SRUdfQkxUX1NS
Q19BRERSRVNTLAorCSAgICBCVVNfU1BBQ0VfQkFSUklFUl9XUklURSk7CisKKwlpZiAoIXdhcnBn
Znhfd2FpdF9ibGl0dGVyKHNjKSkgeworCQlzYy0+c2NfYWNjZWxfb2sgPSBmYWxzZTsKKwkJcmV0
dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK3dhcnBnZnhf
dmFsaWRfcmVjdChzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqc2MsIHVpbnQzMl90IHgsIHVpbnQzMl90
IHksCisgICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCkKK3sKKwl1aW50MzJfdCBm
Yl93aWR0aCwgZmJfaGVpZ2h0OworCisJLyogT2ZmLXNjcmVlbiBwaXhtYXBzIGFyZSBleHRyYSBy
b3dzIHVzaW5nIHRoZSBzY2Fub3V0IHN0cmlkZS4gKi8KKwlpZiAod2lkdGggPT0gMCB8fCBoZWln
aHQgPT0gMCkKKwkJcmV0dXJuIHRydWU7CisJaWYgKHggPiBVSU5UMTZfTUFYIHx8IHkgPiBVSU5U
MTZfTUFYIHx8IHdpZHRoID4gVUlOVDE2X01BWCB8fAorCSAgICBoZWlnaHQgPiBVSU5UMTZfTUFY
KQorCQlyZXR1cm4gZmFsc2U7CisKKwlmYl93aWR0aCA9IHNjLT5zY19zdHJpZGUgLyBzaXplb2Yo
dWludDE2X3QpOworCWZiX2hlaWdodCA9IHNjLT5zY19mYnNpemUgLyBzYy0+c2Nfc3RyaWRlOwor
CWlmICh4ID49IGZiX3dpZHRoIHx8IHkgPj0gZmJfaGVpZ2h0KQorCQlyZXR1cm4gZmFsc2U7CisJ
aWYgKHdpZHRoID4gZmJfd2lkdGggLSB4IHx8IGhlaWdodCA+IGZiX2hlaWdodCAtIHkpCisJCXJl
dHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZAord2FycGdmeF9z
b2Z0d2FyZV9jb3B5KHN0cnVjdCB3YXJwZ2Z4X3NvZnRjICpzYywgdWludDMyX3Qgc3JjX3gsCisg
ICAgdWludDMyX3Qgc3JjX3ksIHVpbnQzMl90IGRzdF94LCB1aW50MzJfdCBkc3RfeSwgdWludDMy
X3Qgd2lkdGgsCisgICAgdWludDMyX3QgaGVpZ2h0KQoreworCXVpbnQ4X3QgKmZiOworCXNpemVf
dCBiYXJyaWVyX3NpemUsIGRzdF9vZmZzZXQsIGxlbmd0aCwgc3JjX29mZnNldDsKKwl1aW50MzJf
dCByb3c7CisKKwlpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKKwkJcmV0dXJuOworCisJ
ZmIgPSBidXNfc3BhY2VfdmFkZHIoc2MtPnNjX2ZidCwgc2MtPnNjX2ZiaCk7CisJbGVuZ3RoID0g
d2lkdGggKiBzaXplb2YodWludDE2X3QpOworCXNyY19vZmZzZXQgPSBzcmNfeSAqIHNjLT5zY19z
dHJpZGUgKyBzcmNfeCAqIHNpemVvZih1aW50MTZfdCk7CisJZHN0X29mZnNldCA9IGRzdF95ICog
c2MtPnNjX3N0cmlkZSArIGRzdF94ICogc2l6ZW9mKHVpbnQxNl90KTsKKworCWlmIChkc3Rfb2Zm
c2V0ID4gc3JjX29mZnNldCkgeworCQlmb3IgKHJvdyA9IGhlaWdodDsgcm93LS0gPiAwOykgewor
CQkJbWVtbW92ZShmYiArIGRzdF9vZmZzZXQgKyByb3cgKiBzYy0+c2Nfc3RyaWRlLAorCQkJICAg
IGZiICsgc3JjX29mZnNldCArIHJvdyAqIHNjLT5zY19zdHJpZGUsIGxlbmd0aCk7CisJCX0KKwl9
IGVsc2UgeworCQlmb3IgKHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93KyspIHsKKwkJCW1lbW1v
dmUoZmIgKyBkc3Rfb2Zmc2V0ICsgcm93ICogc2MtPnNjX3N0cmlkZSwKKwkJCSAgICBmYiArIHNy
Y19vZmZzZXQgKyByb3cgKiBzYy0+c2Nfc3RyaWRlLCBsZW5ndGgpOworCQl9CisJfQorCisJYmFy
cmllcl9zaXplID0gKGhlaWdodCAtIDEpICogc2MtPnNjX3N0cmlkZSArIGxlbmd0aDsKKwlidXNf
c3BhY2VfYmFycmllcihzYy0+c2NfZmJ0LCBzYy0+c2NfZmJoLCBkc3Rfb2Zmc2V0LAorCSAgICBi
YXJyaWVyX3NpemUsIEJVU19TUEFDRV9CQVJSSUVSX1dSSVRFKTsKK30KKworc3RhdGljIGludAor
d2FycGdmeF93c2ZiX2JsaXQoc3RydWN0IHdhcnBnZnhfc29mdGMgKnNjLCBzdHJ1Y3Qgd3NkaXNw
bGF5aW9fYmxpdCAqYmxpdCkKK3sKKwlib29sIGRvbmU7CisKKwlpZiAoc2MtPnNjX3dzbW9kZSA9
PSBXU0RJU1BMQVlJT19NT0RFX0VNVUwpCisJCXJldHVybiBFQlVTWTsKKwlpZiAoIXNjLT5zY19h
Y2NlbF9vaykKKwkJcmV0dXJuIEVJTzsKKworCXN3aXRjaCAoYmxpdC0+b3ApIHsKKwljYXNlIFdT
RkJfQkxJVF9GSUxMOgorCQlpZiAoIXdhcnBnZnhfdmFsaWRfcmVjdChzYywgYmxpdC0+ZHN0eCwg
YmxpdC0+ZHN0eSwKKwkJICAgIGJsaXQtPndpZHRoLCBibGl0LT5oZWlnaHQpKQorCQkJcmV0dXJu
IEVJTlZBTDsKKwkJZG9uZSA9IHdhcnBnZnhfcmVjdGZpbGwoc2MsICh1aW50MTZfdClibGl0LT5k
c3R4LAorCQkgICAgKHVpbnQxNl90KWJsaXQtPmRzdHksICh1aW50MTZfdClibGl0LT53aWR0aCwK
KwkJICAgICh1aW50MTZfdClibGl0LT5oZWlnaHQsICh1aW50MTZfdClibGl0LT5wZW4pOworCQli
cmVhazsKKworCWNhc2UgV1NGQl9CTElUX0NPUFk6CisJCWlmICghd2FycGdmeF92YWxpZF9yZWN0
KHNjLCBibGl0LT5zcmN4LCBibGl0LT5zcmN5LAorCQkgICAgYmxpdC0+d2lkdGgsIGJsaXQtPmhl
aWdodCkgfHwKKwkJICAgICF3YXJwZ2Z4X3ZhbGlkX3JlY3Qoc2MsIGJsaXQtPmRzdHgsIGJsaXQt
PmRzdHksCisJCSAgICBibGl0LT53aWR0aCwgYmxpdC0+aGVpZ2h0KSkKKwkJCXJldHVybiBFSU5W
QUw7CisJCWlmIChibGl0LT53aWR0aCA8PSAxIHx8IGJsaXQtPmhlaWdodCA8PSAxKSB7CisJCQl3
YXJwZ2Z4X3NvZnR3YXJlX2NvcHkoc2MsIGJsaXQtPnNyY3gsIGJsaXQtPnNyY3ksCisJCQkgICAg
YmxpdC0+ZHN0eCwgYmxpdC0+ZHN0eSwgYmxpdC0+d2lkdGgsCisJCQkgICAgYmxpdC0+aGVpZ2h0
KTsKKwkJCWRvbmUgPSB0cnVlOworCQl9IGVsc2UgeworCQkJZG9uZSA9IHdhcnBnZnhfYml0Ymx0
KHNjLCAodWludDE2X3QpYmxpdC0+c3JjeCwKKwkJCSAgICAodWludDE2X3QpYmxpdC0+c3JjeSwg
KHVpbnQxNl90KWJsaXQtPmRzdHgsCisJCQkgICAgKHVpbnQxNl90KWJsaXQtPmRzdHksICh1aW50
MTZfdClibGl0LT53aWR0aCwKKwkJCSAgICAodWludDE2X3QpYmxpdC0+aGVpZ2h0KTsKKwkJfQor
CQlicmVhazsKKworCWNhc2UgV1NGQl9CTElUX1RSQU5TOgorCQlyZXR1cm4gRU9QTk9UU1VQUDsK
KworCWRlZmF1bHQ6CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJaWYgKCFkb25lKQorCQlyZXR1
cm4gRUlPOworCWJsaXQtPnNlcmlhbCA9ICsrc2MtPnNjX2JsdF9zZXJpYWw7CisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyB2b2lkCit3YXJwZ2Z4X2NvcHlyb3dzKHZvaWQgKmNvb2tpZSwgaW50IHNy
Y3JvdywgaW50IGRzdHJvdywgaW50IG5yb3dzKQoreworCXN0cnVjdCByYXNvcHNfaW5mbyAqcmkg
PSBjb29raWU7CisJc3RydWN0IHZjb25zX3NjcmVlbiAqc2NyID0gcmktPnJpX2h3OworCXN0cnVj
dCB3YXJwZ2Z4X3NvZnRjICpzYyA9IHNjci0+c2NyX2Nvb2tpZTsKKwlpbnQgeCwgc3JjX3ksIGRz
dF95LCB3aWR0aCwgaGVpZ2h0OworCisJeCA9IHJpLT5yaV94b3JpZ2luOworCXNyY195ID0gcmkt
PnJpX3lvcmlnaW4gKyByaS0+cmlfZm9udC0+Zm9udGhlaWdodCAqIHNyY3JvdzsKKwlkc3RfeSA9
IHJpLT5yaV95b3JpZ2luICsgcmktPnJpX2ZvbnQtPmZvbnRoZWlnaHQgKiBkc3Ryb3c7CisJd2lk
dGggPSByaS0+cmlfZW11d2lkdGg7CisJaGVpZ2h0ID0gcmktPnJpX2ZvbnQtPmZvbnRoZWlnaHQg
KiBucm93czsKKwlpZiAoc2MtPnNjX3dzbW9kZSA9PSBXU0RJU1BMQVlJT19NT0RFX0VNVUwgJiYK
KwkgICAgd2FycGdmeF9iaXRibHQoc2MsIHgsIHNyY195LCB4LCBkc3RfeSwgd2lkdGgsIGhlaWdo
dCkpCisJCXJldHVybjsKKworCXNjLT5zY19zd29wcy5jb3B5cm93cyhjb29raWUsIHNyY3Jvdywg
ZHN0cm93LCBucm93cyk7Cit9CisKK3N0YXRpYyB2b2lkCit3YXJwZ2Z4X2VyYXNlcm93cyh2b2lk
ICpjb29raWUsIGludCByb3csIGludCBucm93cywgbG9uZyBmaWxsYXR0cikKK3sKKwlzdHJ1Y3Qg
cmFzb3BzX2luZm8gKnJpID0gY29va2llOworCXN0cnVjdCB2Y29uc19zY3JlZW4gKnNjciA9IHJp
LT5yaV9odzsKKwlzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqc2MgPSBzY3ItPnNjcl9jb29raWU7CisJ
aW50IHgsIHksIHdpZHRoLCBoZWlnaHQsIGZnLCBiZywgdWw7CisJdWludDE2X3QgY29sb3I7CisK
Kwl4ID0gcmktPnJpX3hvcmlnaW47CisJeSA9IHJpLT5yaV95b3JpZ2luICsgcmktPnJpX2ZvbnQt
PmZvbnRoZWlnaHQgKiByb3c7CisJd2lkdGggPSByaS0+cmlfZW11d2lkdGg7CisJaGVpZ2h0ID0g
cmktPnJpX2ZvbnQtPmZvbnRoZWlnaHQgKiBucm93czsKKwlyYXNvcHNfdW5wYWNrX2F0dHIoZmls
bGF0dHIsICZmZywgJmJnLCAmdWwpOworCWNvbG9yID0gKHVpbnQxNl90KShyaS0+cmlfZGV2Y21h
cFtiZyAmIDB4MGZdICYgMHhmZmZmVSk7CisJaWYgKHNjLT5zY193c21vZGUgPT0gV1NESVNQTEFZ
SU9fTU9ERV9FTVVMICYmCisJICAgIHdhcnBnZnhfcmVjdGZpbGwoc2MsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGNvbG9yKSkKKwkJcmV0dXJuOworCisJc2MtPnNjX3N3b3BzLmVyYXNlcm93cyhjb29r
aWUsIHJvdywgbnJvd3MsIGZpbGxhdHRyKTsKK30KKworc3RhdGljIHZvaWQKK3dhcnBnZnhfY29w
eWNvbHModm9pZCAqY29va2llLCBpbnQgcm93LCBpbnQgc3JjY29sLCBpbnQgZHN0Y29sLCBpbnQg
bmNvbHMpCit7CisJc3RydWN0IHJhc29wc19pbmZvICpyaSA9IGNvb2tpZTsKKwlzdHJ1Y3QgdmNv
bnNfc2NyZWVuICpzY3IgPSByaS0+cmlfaHc7CisJc3RydWN0IHdhcnBnZnhfc29mdGMgKnNjID0g
c2NyLT5zY3JfY29va2llOworCWludCBzcmNfeCwgZHN0X3gsIHksIHdpZHRoLCBoZWlnaHQ7CisK
KwlzcmNfeCA9IHJpLT5yaV94b3JpZ2luICsgcmktPnJpX2ZvbnQtPmZvbnR3aWR0aCAqIHNyY2Nv
bDsKKwlkc3RfeCA9IHJpLT5yaV94b3JpZ2luICsgcmktPnJpX2ZvbnQtPmZvbnR3aWR0aCAqIGRz
dGNvbDsKKwl5ID0gcmktPnJpX3lvcmlnaW4gKyByaS0+cmlfZm9udC0+Zm9udGhlaWdodCAqIHJv
dzsKKwl3aWR0aCA9IHJpLT5yaV9mb250LT5mb250d2lkdGggKiBuY29sczsKKwloZWlnaHQgPSBy
aS0+cmlfZm9udC0+Zm9udGhlaWdodDsKKwlpZiAoc2MtPnNjX3dzbW9kZSA9PSBXU0RJU1BMQVlJ
T19NT0RFX0VNVUwgJiYKKwkgICAgd2FycGdmeF9iaXRibHQoc2MsIHNyY194LCB5LCBkc3RfeCwg
eSwgd2lkdGgsIGhlaWdodCkpCisJCXJldHVybjsKKworCXNjLT5zY19zd29wcy5jb3B5Y29scyhj
b29raWUsIHJvdywgc3JjY29sLCBkc3Rjb2wsIG5jb2xzKTsKK30KKworc3RhdGljIHZvaWQKK3dh
cnBnZnhfZXJhc2Vjb2xzKHZvaWQgKmNvb2tpZSwgaW50IHJvdywgaW50IHN0YXJ0Y29sLCBpbnQg
bmNvbHMsCisgICAgbG9uZyBmaWxsYXR0cikKK3sKKwlzdHJ1Y3QgcmFzb3BzX2luZm8gKnJpID0g
Y29va2llOworCXN0cnVjdCB2Y29uc19zY3JlZW4gKnNjciA9IHJpLT5yaV9odzsKKwlzdHJ1Y3Qg
d2FycGdmeF9zb2Z0YyAqc2MgPSBzY3ItPnNjcl9jb29raWU7CisJaW50IHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZnLCBiZywgdWw7CisJdWludDE2X3QgY29sb3I7CisKKwl4ID0gcmktPnJpX3hvcmln
aW4gKyByaS0+cmlfZm9udC0+Zm9udHdpZHRoICogc3RhcnRjb2w7CisJeSA9IHJpLT5yaV95b3Jp
Z2luICsgcmktPnJpX2ZvbnQtPmZvbnRoZWlnaHQgKiByb3c7CisJd2lkdGggPSByaS0+cmlfZm9u
dC0+Zm9udHdpZHRoICogbmNvbHM7CisJaGVpZ2h0ID0gcmktPnJpX2ZvbnQtPmZvbnRoZWlnaHQ7
CisJcmFzb3BzX3VucGFja19hdHRyKGZpbGxhdHRyLCAmZmcsICZiZywgJnVsKTsKKwljb2xvciA9
ICh1aW50MTZfdCkocmktPnJpX2RldmNtYXBbYmcgJiAweDBmXSAmIDB4ZmZmZlUpOworCWlmIChz
Yy0+c2Nfd3Ntb2RlID09IFdTRElTUExBWUlPX01PREVfRU1VTCAmJgorCSAgICB3YXJwZ2Z4X3Jl
Y3RmaWxsKHNjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvcikpCisJCXJldHVybjsKKworCXNj
LT5zY19zd29wcy5lcmFzZWNvbHMoY29va2llLCByb3csIHN0YXJ0Y29sLCBuY29scywgZmlsbGF0
dHIpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK3dhcnBnZnhfaW9jdGwodm9pZCAqdiwgdm9p
ZCAqdnMsIHVfbG9uZyBjbWQsIHZvaWQgKmRhdGEsIGludCBmbGFnLAorICAgIHN0cnVjdCBsd3Ag
KmwpCit7CisJc3RydWN0IHZjb25zX2RhdGEgKnZkID0gdjsKKwlzdHJ1Y3Qgd2FycGdmeF9zb2Z0
YyAqc2MgPSB2ZC0+Y29va2llOworCXVfaW50IG5ld19tb2RlOworCisJc3dpdGNoIChjbWQpIHsK
KwljYXNlIFdTRElTUExBWUlPX0dUWVBFOgorCQkqKHVfaW50ICopZGF0YSA9IFdTRElTUExBWV9U
WVBFX1VOS05PV047CisJCXJldHVybiAwOworCisJY2FzZSBXU0RJU1BMQVlJT19HRVRfRkJJTkZP
OgorCQlyZXR1cm4gd2FycGdmeF9nZXRfZmJpbmZvKHNjLAorCQkgICAgKHN0cnVjdCB3c2Rpc3Bs
YXlpb19mYmluZm8gKilkYXRhKTsKKworCWNhc2UgV1NESVNQTEFZSU9fR0lORk86CisJCSgoc3Ry
dWN0IHdzZGlzcGxheV9mYmluZm8gKilkYXRhKS0+d2lkdGggPSBzYy0+c2Nfd2lkdGg7CisJCSgo
c3RydWN0IHdzZGlzcGxheV9mYmluZm8gKilkYXRhKS0+aGVpZ2h0ID0gc2MtPnNjX2hlaWdodDsK
KwkJKChzdHJ1Y3Qgd3NkaXNwbGF5X2ZiaW5mbyAqKWRhdGEpLT5kZXB0aCA9IHNjLT5zY19kZXB0
aDsKKwkJKChzdHJ1Y3Qgd3NkaXNwbGF5X2ZiaW5mbyAqKWRhdGEpLT5jbXNpemUgPSAwOworCQly
ZXR1cm4gMDsKKworCWNhc2UgV1NESVNQTEFZSU9fTElORUJZVEVTOgorCQkqKHVfaW50ICopZGF0
YSA9IHNjLT5zY19zdHJpZGU7CisJCXJldHVybiAwOworCisjaWZkZWYgV0FSUEdGWF9BQ0NFTAor
CWNhc2UgV1NESVNQTEFZSU9fRE9CTElUOgorCQlyZXR1cm4gd2FycGdmeF93c2ZiX2JsaXQoc2Ms
CisJCSAgICAoc3RydWN0IHdzZGlzcGxheWlvX2JsaXQgKilkYXRhKTsKKworCWNhc2UgV1NESVNQ
TEFZSU9fV0FJVEJMSVQ6CisJCWlmICghc2MtPnNjX2FjY2VsX29rKQorCQkJcmV0dXJuIEVJTzsK
KwkJaWYgKCF3YXJwZ2Z4X3dhaXRfYmxpdHRlcihzYykpIHsKKwkJCXNjLT5zY19hY2NlbF9vayA9
IGZhbHNlOworCQkJcmV0dXJuIEVJTzsKKwkJfQorCQkoKHN0cnVjdCB3c2Rpc3BsYXlpb19ibGl0
ICopZGF0YSktPnNlcmlhbCA9CisJCSAgICBzYy0+c2NfYmx0X3NlcmlhbDsKKwkJcmV0dXJuIDA7
CisjZW5kaWYKKworCWNhc2UgV1NESVNQTEFZSU9fR0VUX0JVU0lEOgorCQkoKHN0cnVjdCB3c2Rp
c3BsYXlpb19idXNfaWQgKilkYXRhKS0+YnVzX3R5cGUgPQorCQkgICAgV1NESVNQTEFZSU9fQlVT
X1NPQzsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFdTRElTUExBWUlPX0dWSURFTzoKKwkJKihpbnQg
KilkYXRhID0gV1NESVNQTEFZSU9fVklERU9fT047CisJCXJldHVybiAwOworCisJY2FzZSBXU0RJ
U1BMQVlJT19TVklERU86CisJCWlmICgqKGludCAqKWRhdGEgPT0gV1NESVNQTEFZSU9fVklERU9f
T04pCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIEVQQVNTVEhST1VHSDsKKworCWNhc2UgV1NESVNQ
TEFZSU9fR01PREU6CisJCSoodV9pbnQgKilkYXRhID0gc2MtPnNjX3dzbW9kZTsKKwkJcmV0dXJu
IDA7CisKKwljYXNlIFdTRElTUExBWUlPX1NNT0RFOgorCQluZXdfbW9kZSA9ICoodV9pbnQgKilk
YXRhOworCQlzd2l0Y2ggKG5ld19tb2RlKSB7CisJCWNhc2UgV1NESVNQTEFZSU9fTU9ERV9FTVVM
OgorCQljYXNlIFdTRElTUExBWUlPX01PREVfTUFQUEVEOgorCQljYXNlIFdTRElTUExBWUlPX01P
REVfRFVNQkZCOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gRUlOVkFMOworCQl9
CisJCXNjLT5zY193c21vZGUgPSBuZXdfbW9kZTsKKwkJaWYgKG5ld19tb2RlID09IFdTRElTUExB
WUlPX01PREVfRU1VTCAmJiB2ZC0+YWN0aXZlICE9IE5VTEwpCisJCQl2Y29uc19yZWRyYXdfc2Ny
ZWVuKHZkLT5hY3RpdmUpOworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCXJldHVybiBFUEFT
U1RIUk9VR0g7CisJfQorfQorCitzdGF0aWMgcGFkZHJfdAord2FycGdmeF9tbWFwKHZvaWQgKnYs
IHZvaWQgKnZzLCBvZmZfdCBvZmZzZXQsIGludCBwcm90KQoreworCXN0cnVjdCB2Y29uc19kYXRh
ICp2ZCA9IHY7CisJc3RydWN0IHdhcnBnZnhfc29mdGMgKnNjID0gdmQtPmNvb2tpZTsKKworCWlm
IChvZmZzZXQgPCAwIHx8IChzaXplX3Qpb2Zmc2V0ID49IHNjLT5zY19mYnNpemUpCisJCXJldHVy
biAtMTsKKworCXJldHVybiBidXNfc3BhY2VfbW1hcChzYy0+c2NfZmJ0LCBzYy0+c2NfZmJwYSwg
b2Zmc2V0LCBwcm90LAorCSAgICBCVVNfU1BBQ0VfTUFQX0xJTkVBUik7Cit9CisKK3N0YXRpYyBp
bnQKK3dhcnBnZnhfZ2V0X2ZiaW5mbyhzdHJ1Y3Qgd2FycGdmeF9zb2Z0YyAqc2MsCisgICAgc3Ry
dWN0IHdzZGlzcGxheWlvX2ZiaW5mbyAqZmJpKQoreworCW1lbXNldChmYmksIDAsIHNpemVvZigq
ZmJpKSk7CisJZmJpLT5mYmlfZmxhZ3MgPSAwOworCWZiaS0+ZmJpX2Zib2Zmc2V0ID0gMDsKKwkv
KiBFeHBvc2UgdGhlIHVzYWJsZSBhcGVydHVyZSBzbyB3c2ZiIEVYQSBjYW4gYWxsb2NhdGUgb2Zm
LXNjcmVlbiByb3dzLiAqLworCWZiaS0+ZmJpX2Zic2l6ZSA9IHNjLT5zY19mYnNpemU7CisJZmJp
LT5mYmlfd2lkdGggPSBzYy0+c2Nfd2lkdGg7CisJZmJpLT5mYmlfaGVpZ2h0ID0gc2MtPnNjX2hl
aWdodDsKKwlmYmktPmZiaV9zdHJpZGUgPSBzYy0+c2Nfc3RyaWRlOworCWZiaS0+ZmJpX2JpdHNw
ZXJwaXhlbCA9IHNjLT5zY19kZXB0aDsKKwlmYmktPmZiaV9waXhlbHR5cGUgPSBXU0ZCX1JHQjsK
KworCWZiaS0+ZmJpX3N1YnR5cGUuZmJpX3JnYm1hc2tzLmFscGhhX29mZnNldCA9IDA7CisJZmJp
LT5mYmlfc3VidHlwZS5mYmlfcmdibWFza3MucmVkX29mZnNldCA9IDExOworCWZiaS0+ZmJpX3N1
YnR5cGUuZmJpX3JnYm1hc2tzLmdyZWVuX29mZnNldCA9IDU7CisJZmJpLT5mYmlfc3VidHlwZS5m
YmlfcmdibWFza3MuYmx1ZV9vZmZzZXQgPSAwOworCWZiaS0+ZmJpX3N1YnR5cGUuZmJpX3JnYm1h
c2tzLmFscGhhX3NpemUgPSAwOworCWZiaS0+ZmJpX3N1YnR5cGUuZmJpX3JnYm1hc2tzLnJlZF9z
aXplID0gNTsKKwlmYmktPmZiaV9zdWJ0eXBlLmZiaV9yZ2JtYXNrcy5ncmVlbl9zaXplID0gNjsK
KwlmYmktPmZiaV9zdWJ0eXBlLmZiaV9yZ2JtYXNrcy5ibHVlX3NpemUgPSA1OworCisJcmV0dXJu
IDA7Cit9CisKK3ZvaWQKK3dhcnBnZnhjbnByb2JlKHN0cnVjdCBjb25zZGV2ICpjZCkKK3sKKyNp
ZmRlZiBXQVJQR0ZYX0NPTlNPTEUKKwljZC0+Y25fcHJpID0gd2FycGdmeF9leGlzdHMgPyBDTl9J
TlRFUk5BTCA6IENOX0RFQUQ7CisjZWxzZQorCWNkLT5jbl9wcmkgPSBDTl9ERUFEOworI2VuZGlm
CisJY2QtPmNuX2RldiA9IE5PREVWOworfQorCit2b2lkCit3YXJwZ2Z4Y25pbml0KHN0cnVjdCBj
b25zZGV2ICpjZCkKK3sKKyNpZiBkZWZpbmVkKFdBUlBHRlhfQ09OU09MRSkgJiYgTktCRCA+IDAK
KwlpZiAod2FycGdmeF9leGlzdHMpCisJCWtiZF9jbmF0dGFjaCgpOworI2VuZGlmCit9CisKK3Zv
aWQKK3dhcnBnZnhjbnBvbGxjKGRldl90IGRldiwgaW50IG9uKQoreworfQorCit2b2lkCit3YXJw
Z2Z4Y25wdXRjKGRldl90IGRldiwgaW50IGNoKQoreworfQorCitpbnQKK3dhcnBnZnhjbmdldGMo
ZGV2X3QgZGV2KQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3lzL2FyY2gvYW1pZ2Ev
ZGV2L3dhcnBnZnhyZWcuaCBiL3N5cy9hcmNoL2FtaWdhL2Rldi93YXJwZ2Z4cmVnLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTNlYzI4ZWE3ZWQ0ZjU0MDM2YTUxYmM5YjM3ZTEwNTAyZmUwZmM2MgotLS0gL2Rldi9u
dWxsCisrKyBiL3N5cy9hcmNoL2FtaWdhL2Rldi93YXJwZ2Z4cmVnLmgKQEAgLTAsMCArMSwxODIg
QEAKKy8qCSROZXRCU0QkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDI2IENhcmxvcyBN
aWzDoW4gRmlndWVyZWRvCisgKiB3aXRoIGFzc2lzdGFuY2UgZnJvbSBPcGVuQUkgZ3B0LTUuNi1z
b2wKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IK
KyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgX0FNSUdBX0RFVl9XQVJQR0ZYUkVHX0hfCisjZGVmaW5lIF9BTUlHQV9ERVZfV0FSUEdGWFJF
R19IXworCisvKgorICogQ1MtTGFiIFdhcnAgR0ZYIGludGVyZmFjZS4KKyAqCisgKiBUaGVzZSBk
ZWZpbml0aW9ucyB3ZXJlIGRlcml2ZWQgZnJvbSB0aGUgcHVibGljIFpvcnJvIGNvbmZpZ3VyYXRp
b24KKyAqIGludGVyZmFjZSBhbmQgZnJvbSBvYnNlcnZpbmcgdGhlIHJlZ2lzdGVyIGFjY2Vzc2Vz
IG1hZGUgYnkgY3NnZnguY2FyZAorICogMjAuMjUuICBOYW1lcyBmb3IgcmVnaXN0ZXJzIHdob3Nl
IGV4YWN0IGhhcmR3YXJlIG5hbWUgaXMgbm90IGtub3duIGFyZQorICogaW50ZW50aW9uYWxseSBk
ZXNjcmlwdGl2ZSByYXRoZXIgdGhhbiBhdXRob3JpdGF0aXZlLgorICovCisKKy8qIFpvcnJvIElE
cy4gKi8KKyNkZWZpbmUgV0FSUEdGWF9NQU5JRAkJCTB4MTQwMAorI2RlZmluZSBXQVJQR0ZYX1BS
T0RJRF9GQgkJMTAwCisjZGVmaW5lIFdBUlBHRlhfUFJPRElEX1JFRwkJMTAxCisjZGVmaW5lIFdB
UlBHRlhfUFJPRElEX0ZMQVNICQkxMDIKKworLyogQWRkcmVzcy1zcGFjZSBzaXplcyBhZHZlcnRp
c2VkIGJ5IEF1dG9Db25maWcuICovCisjZGVmaW5lIFdBUlBHRlhfRkJfQVBFUlRVUkVfU0laRQkw
eDAyMDAwMDAwVQkvKiAzMiBNaUIgKi8KKyNkZWZpbmUgV0FSUEdGWF9GQl9VU0FCTEVfU0laRQkJ
MHgwMTgwMDAwMFUJLyogMjQgTWlCICovCisjZGVmaW5lIFdBUlBHRlhfUkVHX1NJWkUJCTB4MDAw
MTAwMDBVCS8qIDY0IEtpQiAqLworCisvKiBTdXBwb3J0ZWQgMTYtYml0IGNvbnNvbGUgbW9kZXMg
KHZhbHVlcyB1c2VkIGJ5IFdBUlBHRlhfTU9ERSkuICovCisjZGVmaW5lIFdBUlBHRlhfTU9ERV80
ODBQCQk0ODAKKyNkZWZpbmUgV0FSUEdGWF9NT0RFXzYwMFAJCTYwMAorI2RlZmluZSBXQVJQR0ZY
X01PREVfNzIwUAkJNzIwCisjZGVmaW5lIFdBUlBHRlhfTU9ERV83NjhQCQk3NjgKKyNkZWZpbmUg
V0FSUEdGWF9NT0RFXzEwMjRQCQkxMDI0CisjZGVmaW5lIFdBUlBHRlhfTU9ERV8xMDgwUAkJMTA4
MAorI2RlZmluZSBXQVJQR0ZYX0RFUFRICQkJMTYKKworLyogTWFpbiBkaXNwbGF5LWNvbnRyb2wg
cmVnaXN0ZXJzLiAqLworI2RlZmluZSBXQVJQR0ZYX1JFR19GQl9PRkZTRVQJCTB4MDAwMAorI2Rl
ZmluZSBXQVJQR0ZYX1JFR19GT1JNQVRfUElUQ0gJMHgwMDA0CisKKy8qIDJEIGVuZ2luZSBkZXNj
cmlwdG9yIGFuZCBzdGF0dXMgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBXQVJQR0ZYX1JFR19CTFRf
U1JDX0FERFJFU1MJMHgwMDA4CisjZGVmaW5lIFdBUlBHRlhfUkVHX0JMVF9EU1RfQUREUkVTUwkw
eDAwMGMKKyNkZWZpbmUgV0FSUEdGWF9SRUdfQkxUX1NSQ19YWQkJMHgwMDEwCisjZGVmaW5lIFdB
UlBHRlhfUkVHX0JMVF9EU1RfWFkJCTB4MDAxNAorI2RlZmluZSBXQVJQR0ZYX1JFR19CTFRfU0la
RQkJMHgwMDE4CisjZGVmaW5lIFdBUlBHRlhfUkVHX0JMVF9DT0xPUgkJMHgwMDFjCisjZGVmaW5l
IFdBUlBHRlhfUkVHX0JMVF9DT01NQU5ECQkweDAwMjAKKyNkZWZpbmUgV0FSUEdGWF9SRUdfQkxU
X1NUQVRVUwkJMHgwMDI0CisjZGVmaW5lIFdBUlBHRlhfUkVHX0JMVF9TUkNfU1RSSURFCTB4MDAy
OAorI2RlZmluZSBXQVJQR0ZYX1JFR19CTFRfRFNUX1NUUklERQkweDAwMmMKKyNkZWZpbmUgV0FS
UEdGWF9CTFRfU1RBVFVTX0JVU1lfTUFTSwkweDAwMDAwMDE5VQorI2RlZmluZSBXQVJQR0ZYX0JM
VF9DT01NQU5EX0NPUFlfMTYJMHgwMDAwMDAwNVUKKyNkZWZpbmUgV0FSUEdGWF9CTFRfQ09NTUFO
RF9GSUxMXzE2CTB4MDAwMDAwMDZVCisKKyNkZWZpbmUgV0FSUEdGWF9SRUdfT1VUUFVUX0FVWAkJ
MHgwMDMwCisKKy8qIERpc3BsYXkgdGltaW5nIGJhbmsuICovCisjZGVmaW5lIFdBUlBHRlhfUkVH
X0hfQUNUSVZFCQkweDAxMDAKKyNkZWZpbmUgV0FSUEdGWF9SRUdfSF9USU1JTkdfMQkJMHgwMTA0
CisjZGVmaW5lIFdBUlBHRlhfUkVHX0hfVElNSU5HXzIJCTB4MDEwOAorI2RlZmluZSBXQVJQR0ZY
X1JFR19WX0FDVElWRQkJMHgwMTBjCisjZGVmaW5lIFdBUlBHRlhfUkVHX1ZfVElNSU5HXzEJCTB4
MDExMAorI2RlZmluZSBXQVJQR0ZYX1JFR19WX1RJTUlOR18yCQkweDAxMTQKKyNkZWZpbmUgV0FS
UEdGWF9SRUdfSFZfVE9UQUwJCTB4MDExOAorI2RlZmluZSBXQVJQR0ZYX1JFR19NT0RFX0NPTU1J
VAkJMHgwMTFjCisjZGVmaW5lIFdBUlBHRlhfUkVHX1NDQUxFX0NPTlRST0wJMHgwMTI4CisKKy8q
IFBpeGVsLWNsb2NrIHNlbGVjdG9yLCBsb2NrIHN0YXR1cywgYW5kIGludGVycnVwdCBjb250cm9s
LiAqLworI2RlZmluZSBXQVJQR0ZYX1JFR19DTE9DS19TVEFUVVMJMHgwMjAwCisjZGVmaW5lIFdB
UlBHRlhfUkVHX0NMT0NLX0NPTlRST0wJMHgwMjA0CisjZGVmaW5lIFdBUlBHRlhfUkVHX0lOVEVS
UlVQVF9TVEFUVVMJMHgwMjA4CisjZGVmaW5lIFdBUlBHRlhfUkVHX0lOVEVSUlVQVF9DT05UUk9M
CTB4MDIwYworI2RlZmluZSBXQVJQR0ZYX0NMT0NLX1NFTEVDVF9NQVNLCTB4MDAwMDAwMDdVCisj
ZGVmaW5lIFdBUlBHRlhfQ0xPQ0tfUkVBRFkJCTB4MDAwMDAwMDJVCisjZGVmaW5lIFdBUlBHRlhf
NDgwUF9DTE9DS19TRUxFQ1QJMHgwMDAwMDAwMFUKKyNkZWZpbmUgV0FSUEdGWF80ODBQX0NMT0NL
X0NPTlRST0wJMHgwMDAwMDAxMFUKKyNkZWZpbmUgV0FSUEdGWF82MDBQX0NMT0NLX1NFTEVDVAkw
eDAwMDAwMDAxVQorI2RlZmluZSBXQVJQR0ZYXzYwMFBfQ0xPQ0tfQ09OVFJPTAkweDAwMDAwMDEx
VQorI2RlZmluZSBXQVJQR0ZYXzcyMFBfQ0xPQ0tfU0VMRUNUCTB4MDAwMDAwMDNVCisjZGVmaW5l
IFdBUlBHRlhfNzIwUF9DTE9DS19DT05UUk9MCTB4MDAwMDAwMTNVCisjZGVmaW5lIFdBUlBHRlhf
NzY4UF9DTE9DS19TRUxFQ1QJMHgwMDAwMDAwMlUKKyNkZWZpbmUgV0FSUEdGWF83NjhQX0NMT0NL
X0NPTlRST0wJMHgwMDAwMDAxMlUKKyNkZWZpbmUgV0FSUEdGWF8xMDI0UF9DTE9DS19TRUxFQ1QJ
MHgwMDAwMDAwNFUKKyNkZWZpbmUgV0FSUEdGWF8xMDI0UF9DTE9DS19DT05UUk9MCTB4MDAwMDAw
MTRVCisjZGVmaW5lIFdBUlBHRlhfMTA4MFBfQ0xPQ0tfU0VMRUNUCTB4MDAwMDAwMDVVCisjZGVm
aW5lIFdBUlBHRlhfMTA4MFBfQ0xPQ0tfQ09OVFJPTAkweDAwMDAwMDE1VQorCisvKiBPdGhlciBy
ZWdpc3RlciBiYW5rcy4gKi8KKyNkZWZpbmUgV0FSUEdGWF9SRUdfUEFMRVRURV9CQVNFCTB4MDgw
MAorI2RlZmluZSBXQVJQR0ZYX1JFR19DT01NQU5ECQkweDBjMDAKKyNkZWZpbmUgV0FSUEdGWF9S
RUdfQ09NTUFORF9SRVNFVAkweDBjMDQKKworLyogNjQweDQ4MCBhdCBhcHByb3hpbWF0ZWx5IDc1
IEh6LCAxNi1iaXQgYmlnLWVuZGlhbiBSNUc2QjUuICovCisjZGVmaW5lIFdBUlBHRlhfNDgwUF9G
T1JNQVRfUElUQ0gJMHgxNDA3ODA1MFUKKyNkZWZpbmUgV0FSUEdGWF80ODBQX0hfQUNUSVZFCQkw
eDAwMDAwMjgwVQorI2RlZmluZSBXQVJQR0ZYXzQ4MFBfSF9USU1JTkdfMQkJMHgwMDI4MDM0OFUK
KyNkZWZpbmUgV0FSUEdGWF80ODBQX0hfVElNSU5HXzIJCTB4MDAyOTAyZDBVCisjZGVmaW5lIFdB
UlBHRlhfNDgwUF9WX0FDVElWRQkJMHgwMDAwMDFlMFUKKyNkZWZpbmUgV0FSUEdGWF80ODBQX1Zf
VElNSU5HXzEJCTB4MDAxZTAxZjRVCisjZGVmaW5lIFdBUlBHRlhfNDgwUF9WX1RJTUlOR18yCQkw
eDAwMWUxMWU0VQorI2RlZmluZSBXQVJQR0ZYXzQ4MFBfSFZfVE9UQUwJCTB4MDAxZjQzNDhVCisK
Ky8qIDgwMHg2MDAsIDE2LWJpdCBiaWctZW5kaWFuIFI1RzZCNSBtb2RlIHZhbHVlcy4gKi8KKyNk
ZWZpbmUgV0FSUEdGWF82MDBQX0ZPUk1BVF9QSVRDSAkweDE5MDk2MDY0VQorI2RlZmluZSBXQVJQ
R0ZYXzYwMFBfSF9BQ1RJVkUJCTB4MDAwMDAzMjBVCisjZGVmaW5lIFdBUlBHRlhfNjAwUF9IX1RJ
TUlOR18xCQkweDAwMzIwNDIwVQorI2RlZmluZSBXQVJQR0ZYXzYwMFBfSF9USU1JTkdfMgkJMHgw
MDM0ODNjOFUKKyNkZWZpbmUgV0FSUEdGWF82MDBQX1ZfQUNUSVZFCQkweDAwMDAwMjU4VQorI2Rl
ZmluZSBXQVJQR0ZYXzYwMFBfVl9USU1JTkdfMQkJMHgwMDI1ODI3NFUKKyNkZWZpbmUgV0FSUEdG
WF82MDBQX1ZfVElNSU5HXzIJCTB4MDAyNTkyNWRVCisjZGVmaW5lIFdBUlBHRlhfNjAwUF9IVl9U
T1RBTAkJMHgwMDI3NDQyMFUKKworLyogMTI4MHg3MjAsIDE2LWJpdCBiaWctZW5kaWFuIFI1RzZC
NSBtb2RlIHZhbHVlcy4gKi8KKyNkZWZpbmUgV0FSUEdGWF83MjBQX0ZPUk1BVF9QSVRDSAkweDI4
MGI0MGEwVQorI2RlZmluZSBXQVJQR0ZYXzcyMFBfSF9BQ1RJVkUJCTB4MDAwMDA1MDBVCisjZGVm
aW5lIFdBUlBHRlhfNzIwUF9IX1RJTUlOR18xCQkweDAwNTAwNjcyVQorI2RlZmluZSBXQVJQR0ZY
XzcyMFBfSF9USU1JTkdfMgkJMHgwMDU2ZTU5NlUKKyNkZWZpbmUgV0FSUEdGWF83MjBQX1ZfQUNU
SVZFCQkweDAwMDAwMmQwVQorI2RlZmluZSBXQVJQR0ZYXzcyMFBfVl9USU1JTkdfMQkJMHgwMDJk
MDJlZVUKKyNkZWZpbmUgV0FSUEdGWF83MjBQX1ZfVElNSU5HXzIJCTB4MDAyZDUyZGFVCisjZGVm
aW5lIFdBUlBHRlhfNzIwUF9IVl9UT1RBTAkJMHgwMDJlZTY3MlUKKworLyogMTAyNHg3NjgsIDE2
LWJpdCBiaWctZW5kaWFuIFI1RzZCNSBtb2RlIHZhbHVlcy4gKi8KKyNkZWZpbmUgV0FSUEdGWF83
NjhQX0ZPUk1BVF9QSVRDSAkweDIwMGMwMDgwVQorI2RlZmluZSBXQVJQR0ZYXzc2OFBfSF9BQ1RJ
VkUJCTB4MDAwMDA0MDBVCisjZGVmaW5lIFdBUlBHRlhfNzY4UF9IX1RJTUlOR18xCQkweDAwNDAw
NTQwVQorI2RlZmluZSBXQVJQR0ZYXzc2OFBfSF9USU1JTkdfMgkJMHgwMDQxODRhMFUKKyNkZWZp
bmUgV0FSUEdGWF83NjhQX1ZfQUNUSVZFCQkweDAwMDAwMzAwVQorI2RlZmluZSBXQVJQR0ZYXzc2
OFBfVl9USU1JTkdfMQkJMHgwMDMwMDMyNlUKKyNkZWZpbmUgV0FSUEdGWF83NjhQX1ZfVElNSU5H
XzIJCTB4MDAzMDMzMDlVCisjZGVmaW5lIFdBUlBHRlhfNzY4UF9IVl9UT1RBTAkJMHgwMDMyNjU0
MFUKKworLyogMTI4MHgxMDI0LCAxNi1iaXQgYmlnLWVuZGlhbiBSNUc2QjUgbW9kZSB2YWx1ZXMu
ICovCisjZGVmaW5lIFdBUlBHRlhfMTAyNFBfRk9STUFUX1BJVENICTB4MjgxMDAwYTBVCisjZGVm
aW5lIFdBUlBHRlhfMTAyNFBfSF9BQ1RJVkUJCTB4MDAwMDA1MDBVCisjZGVmaW5lIFdBUlBHRlhf
MTAyNFBfSF9USU1JTkdfMQkweDAwNTAwNjk4VQorI2RlZmluZSBXQVJQR0ZYXzEwMjRQX0hfVElN
SU5HXzIJMHgwMDUzMDVhMFUKKyNkZWZpbmUgV0FSUEdGWF8xMDI0UF9WX0FDVElWRQkJMHgwMDAw
MDQwMFUKKyNkZWZpbmUgV0FSUEdGWF8xMDI0UF9WX1RJTUlOR18xCTB4MDA0MDA0MmFVCisjZGVm
aW5lIFdBUlBHRlhfMTAyNFBfVl9USU1JTkdfMgkweDAwNDAxNDA0VQorI2RlZmluZSBXQVJQR0ZY
XzEwMjRQX0hWX1RPVEFMCQkweDAwNDJhNjk4VQorCisvKiAxOTIweDEwODBwNjAsIDE2LWJpdCBi
aWctZW5kaWFuIFI1RzZCNSBtb2RlIHZhbHVlcy4gKi8KKyNkZWZpbmUgV0FSUEdGWF8xMDgwUF9G
T1JNQVRfUElUQ0gJMHgzYzEwZTBmMFUKKyNkZWZpbmUgV0FSUEdGWF8xMDgwUF9IX0FDVElWRQkJ
MHgwMDAwMDc4MFUKKyNkZWZpbmUgV0FSUEdGWF8xMDgwUF9IX1RJTUlOR18xCTB4MDA3ODA4OThV
CisjZGVmaW5lIFdBUlBHRlhfMTA4MFBfSF9USU1JTkdfMgkweDAwN2Q4ODA0VQorI2RlZmluZSBX
QVJQR0ZYXzEwODBQX1ZfQUNUSVZFCQkweDAwMDAwNDM4VQorI2RlZmluZSBXQVJQR0ZYXzEwODBQ
X1ZfVElNSU5HXzEJMHgwMDQzODQ2NVUKKyNkZWZpbmUgV0FSUEdGWF8xMDgwUF9WX1RJTUlOR18y
CTB4MDA0M2M0NDFVCisjZGVmaW5lIFdBUlBHRlhfMTA4MFBfSFZfVE9UQUwJCTB4MDA0NjU4OThV
CisKKy8qIEJpdCA3IHNlbGVjdHMgdGhlIFdhcnAgZnJhbWVidWZmZXIgaW5zdGVhZCBvZiB0aGUg
ZXh0ZXJuYWwvbmF0aXZlIGlucHV0LiAqLworI2RlZmluZSBXQVJQR0ZYX01PREVfQ09NTUlUCQkw
eDAwMDAwMDhjVQorI2RlZmluZSBXQVJQR0ZYX01PREVfRU5BQkxFCQkweDAwMDAwMDg4VQorCisj
ZW5kaWYgLyogX0FNSUdBX0RFVl9XQVJQR0ZYUkVHX0hfICovCmRpZmYgLS1naXQgYS9zeXMvYXJj
aC9hbWlnYS9kZXYvemJ1cy5jIGIvc3lzL2FyY2gvYW1pZ2EvZGV2L3pidXMuYwppbmRleCAzMGFm
YmFlMGYyMTVmYjQ4MGQ3YTlkZTVjOTk2YTM2MjRhNTBhZWM0Li41M2VlYzFkY2MzZGM5ODM0ZDk2
ZjI0NzdiOWQyMzE1ZmRjZjg3YWRiIDEwMDY0NAotLS0gYS9zeXMvYXJjaC9hbWlnYS9kZXYvemJ1
cy5jCisrKyBiL3N5cy9hcmNoL2FtaWdhL2Rldi96YnVzLmMKQEAgLTE5Myw2ICsxOTMsMTAgQEAg
c3RhdGljIGNvbnN0IHN0cnVjdCBhY29uZmRhdGEgYWNvbmZ0YWJbXSA9IHsKIAl7ICJoeXBlcjMr
IiwJNTAwMSwJN30sCS8qIEh5cGVyY29tMysgKi8KIAkvKiBNYXRheSBHcnplZ29yeiBLcmFzemV3
c2tpICovCiAJeyAibXBwYiIsCTQ0MzU5LAkxfSwJLyogUHJvbWV0aGV1cyBQQ0kgYnJpZGdlICov
CisJLyogQ1MtTGFiICovCisJeyAid2FycGdmeCIsCTUxMjAsCTEwMH0sCS8qIENTLUxhYiBXYXJw
IEdGWCBmcmFtZWJ1ZmZlciAqLworCXsgIndhcnBnZngiLAk1MTIwLAkxMDF9LAkvKiBDUy1MYWIg
V2FycCBHRlggcmVnaXN0ZXJzICovCisJeyAid2FycHFzcGlmIiwJNTEyMCwJMTAyIH0sCS8qIENT
LUxhYiBXYXJwIFFTUEkgRmxhc2ggKi8KIAkvKiBNTlQgKi8KIAl7ICJtbnR2YSIsCTI4MDE0LAkx
fSwJLyogTU5UIFZBMjAwMCAqLwogCXsgInp6OWsiLAkyODAxNCwgCTN9LAkvKiBNTlQgWlo5MDAw
IFoyICovCkBAIC0yMzMsNyArMjM3LDkgQEAgc3RhdGljIHN0cnVjdCBwcmVjb25mZGF0YSBwcmVj
b25mdGFiW10gPSB7CiAJezg1MTIsCTY3LCAwfSwJLyogQ3liZXJ2aXNvbiA2NC8zRCAqLwkJLyog
Z3JmNyAqLwogLyoJezI4MDE0LAkxLCAwfSwJLy8gTU5UTU4gVkEyMDAwICovCiAJezI4MDE0LAkz
LCAwfSwJLyogTU5UIFpaOTAwMCBaMiAqLwotCXsyODAxNCwJNCwgMH0JLyogTU5UIFpaOTAwMCBa
MyAqLworCXsyODAxNCwJNCwgMH0sCS8qIE1OVCBaWjkwMDAgWjMgKi8KKwl7NTEyMCwJMTAwLCAw
fSwJLyogQ1MtTGFiIFdhcnAgR0ZYIGZyYW1lYnVmZmVyICovCisJezUxMjAsCTEwMSwgMH0JLyog
Q1MtTGFiIFdhcnAgR0ZYIHJlZ2lzdGVycyAqLwogfTsKIHN0YXRpYyBpbnQgbnByZWNvbmZlbnQg
PSBzaXplb2YocHJlY29uZnRhYikgLyBzaXplb2Yoc3RydWN0IHByZWNvbmZkYXRhKTsKIAo=

--_003_PH6P220MB9841969C3D35E60749EE53E0D6C9C42PH6P220MB984196_
Content-Type: application/octet-stream;
	name="netbsd-xsrc-warpgfx-wsfb-exa.patch"
Content-Description: netbsd-xsrc-warpgfx-wsfb-exa.patch
Content-Disposition: attachment;
	filename="netbsd-xsrc-warpgfx-wsfb-exa.patch"; size=14102;
	creation-date="Sun, 19 Jul 2026 17:53:17 GMT";
	modification-date="Sun, 19 Jul 2026 17:53:17 GMT"
Content-Transfer-Encoding: base64

ZGlmZiAtLWdpdCBhL2V4dGVybmFsL21pdC94Zjg2LXZpZGVvLXdzZmIvZGlzdC9tYW4vd3NmYi5t
YW4gYi9leHRlcm5hbC9taXQveGY4Ni12aWRlby13c2ZiL2Rpc3QvbWFuL3dzZmIubWFuCmluZGV4
IDUwNTc1NzkwNTViYmY1OTAwMmZlNjkyODEyYTViN2FjZDU2YjNlM2UuLmFlMjZhNWIzNjFhZjM2
MjI3ZmYzYjAwZmU5ZjU3OWYyNDA5ZmQ2OWEgMTAwNjQ0Ci0tLSBhL2V4dGVybmFsL21pdC94Zjg2
LXZpZGVvLXdzZmIvZGlzdC9tYW4vd3NmYi5tYW4KKysrIGIvZXh0ZXJuYWwvbWl0L3hmODYtdmlk
ZW8td3NmYi9kaXN0L21hbi93c2ZiLm1hbgpAQCAtNDMsNyArNDMsOCBAQCB3c2ZiIFwtIHZpZGVv
IGRyaXZlciBmb3Igd3NkaXNwbGF5IGZyYW1lYnVmZmVyIGRldmljZQogLkIgd3NmYgogaXMgYW4g
X194c2VydmVybmFtZV9fIGRyaXZlciBmb3IgT3BlbkJTRCBhbmQgTmV0QlNECiB3c2Rpc3BsYXkg
ZnJhbWVidWZmZXIgZGV2aWNlcy4KLVRoaXMgaXMgYSBub24tYWNjZWxlcmF0ZWQgZHJpdmVyLiAK
K09uIE5ldEJTRCwgc29saWQgZmlsbHMgYW5kIGZyYW1lYnVmZmVyIGNvcGllcyBjYW4gYmUgYWNj
ZWxlcmF0ZWQgd2hlbiB0aGUKK3dzZGlzcGxheSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgc3RhbmRh
cmQgYmxpdHRlciBpb2N0bHMuCiBUaGUgZm9sbG93aW5nIGZyYW1lYnVmZmVyIGRlcHRocyBhcmUg
c3VwcG9ydGVkOiAxLCA4LCAxNiBhbmQgMjQsIGdpdmVuCiB0aGF0IHRoZSB3c2Rpc3BsYXkgZGV2
aWNlIHVuZGVybmVhdGggc3VwcG9ydHMgdGhlbS4KIC5icgpAQCAtODksNiArOTAsMTYgQEAgRGVm
YXVsdDogb24gZm9yIGRlcHRocyB3ZXJlIGl0IGlzIHN1cHBvcnRlZCwgb2ZmIG90aGVyd2lzZS4K
IC5icgogU2hhZG93RkIgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24gbW9ub2Nocm9tZSBk
aXNwbGF5cy4KIC5UUAorLkJJICJPcHRpb24gXCpxQWNjZWxcKnEgXCpxIiBib29sZWFuIFwqcQor
RW5hYmxlIG9yIGRpc2FibGUgRVhBIHNvbGlkLWZpbGwgYW5kIGZyYW1lYnVmZmVyLWNvcHkgYWNj
ZWxlcmF0aW9uLgorQWNjZWxlcmF0aW9uIGN1cnJlbnRseSByZXF1aXJlcyBhIDE2LWJpdCBSR0Ig
ZnJhbWVidWZmZXIsIGEgc3VwcG9ydGluZworTmV0QlNEIHdzZGlzcGxheSBkcml2ZXIsIGFuZAor
LkIgU2hhZG93RkIKK211c3QgYmUgZGlzYWJsZWQuCitPdGhlciByZW5kZXJpbmcgb3BlcmF0aW9u
cywgaW5jbHVkaW5nIENvbXBvc2l0ZSBhbmQgM0QsIHJlbWFpbiBzb2Z0d2FyZQorcmVuZGVyZWQu
CitEZWZhdWx0OiBvbiB3aGVuIGF2YWlsYWJsZS4KKy5UUAogLkJJICJPcHRpb24gXCpxUm90YXRl
XCpxIFwqcSIgc3RyaW5nIFwqcQogRW5hYmxlIHJvdGF0aW9uIG9mIHRoZSBkaXNwbGF5LiBUaGUg
c3VwcG9ydGVkIHZhbHVlcyBhcmUgIkNXIiAoY2xvY2t3aXNlLAogOTAgZGVncmVlcyksICJVRCIg
KHVwc2lkZSBkb3duLCAxODAgZGVncmVlcykgYW5kICJDQ1ciIChjb3VudGVyIGNsb2Nrd2lzZSwK
ZGlmZiAtLWdpdCBhL2V4dGVybmFsL21pdC94Zjg2LXZpZGVvLXdzZmIvZGlzdC9zcmMvd3NmYi5o
IGIvZXh0ZXJuYWwvbWl0L3hmODYtdmlkZW8td3NmYi9kaXN0L3NyYy93c2ZiLmgKaW5kZXggZTNh
MzM0NjNiZWEyZTFhYTE2NTVhYTVmOGYxNGJhMWNlNTA4YjFiYi4uMTIyMTZjNDU2MzM0Y2I1ZjA2
YzlmNmI0ODVjNmU2YjAxNDMwOTg0ZCAxMDA2NDQKLS0tIGEvZXh0ZXJuYWwvbWl0L3hmODYtdmlk
ZW8td3NmYi9kaXN0L3NyYy93c2ZiLmgKKysrIGIvZXh0ZXJuYWwvbWl0L3hmODYtdmlkZW8td3Nm
Yi9kaXN0L3NyYy93c2ZiLmgKQEAgLTM1LDYgKzM1LDEzIEBACiAgKiBBdXRob3JzOiAgQWxhbiBI
b3VyaWhhbmUsIDxhbGFuaEBmYWlybGl0ZS5kZW1vbi5jby51az4KICAqCSAgICAgTWljaGVsIETD
pG56ZXIsIDxtaWNoZGFlbkBpaWljLmV0aHouY2g+CiAgKi8KKworLyoKKyAqIHdzZGlzcGxheSBF
WEEgZXh0ZW5zaW9uczoKKyAqIENvcHlyaWdodCAoYykgMjAyNiBDYXJsb3MgTWlsw6FuIEZpZ3Vl
cmVkbworICogd2l0aCBhc3Npc3RhbmNlIGZyb20gT3BlbkFJIGdwdC01LjYtc29sCisgKiBEaXN0
cmlidXRlZCB1bmRlciB0aGUgdHdvLWNsYXVzZSBCU0QgbGljZW5zZSBhYm92ZS4KKyAqLwogIAog
I2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC02MSw2ICs2OCwx
MCBAQAogI2RlZmluZSBIQVZFX1NIQURPV19BRkIKICNlbmRpZgogCisjaWYgZGVmaW5lZChfX05l
dEJTRF9fKSAmJiBkZWZpbmVkKFdTRElTUExBWUlPX0RPQkxJVCkKKyNkZWZpbmUgSEFWRV9XU0ZC
X0VYQQorI2VuZGlmCisKIC8qIHByaXZhdGUgZGF0YSAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCWlu
dAkJCWZkOyAvKiBmaWxlIGRlc2NyaXB0b3Igb2Ygb3BlbiBkZXZpY2UgKi8KQEAgLTc0LDYgKzg1
LDEzIEBAIHR5cGVkZWYgc3RydWN0IHsKIAlCb29sCQkJSFdDdXJzb3I7CiAJQm9vbAkJCXVzZVN3
YXAzMjsKIAlCb29sCQkJdXNlUkdCMTZUb1lVWTI7CisjaWZkZWYgSEFWRV9XU0ZCX0VYQQorCUJv
b2wJCQlhY2NlbDsKKwlCb29sCQkJZXhhX2FjdGl2ZTsKKwlQaXhlbAkJCWV4YV9mZzsKKwl1aW50
MzJfdAkJZXhhX3NyY195OworCXN0cnVjdCBfRXhhRHJpdmVyCSpwRXhhOworI2VuZGlmCiAjaWZk
ZWYgSEFWRV9TSEFET1dfQUZCCiAJQm9vbAkJCXBsYW5hckFmYjsKICNlbmRpZgpAQCAtOTcsNSAr
MTE1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgewogI2RlZmluZSBXU0ZCUFRSKHApICgoV3NmYlB0ciko
KHApLT5kcml2ZXJQcml2YXRlKSkKIAogQm9vbCBXc2ZiU2V0dXBDdXJzb3IoU2NyZWVuUHRyKTsK
KyNpZmRlZiBIQVZFX1dTRkJfRVhBCitCb29sIFdzZmJFWEFJbml0KFNjcmVlblB0cik7CisjZW5k
aWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9leHRlcm5hbC9taXQveGY4Ni12aWRlby13c2ZiL2Rp
c3Qvc3JjL3dzZmJfZHJpdmVyLmMgYi9leHRlcm5hbC9taXQveGY4Ni12aWRlby13c2ZiL2Rpc3Qv
c3JjL3dzZmJfZHJpdmVyLmMKaW5kZXggZDhiNTlhNmU1ODk3NTY0MjlmY2JhNDFkZDExMmJkZjZl
NDE4ZjFjOC4uMjAwMTI3ZTZlYzg0MmJkYTM4MjQ0ODI2ZTZiMWY3ZWZlYWRmYjFmOCAxMDA2NDQK
LS0tIGEvZXh0ZXJuYWwvbWl0L3hmODYtdmlkZW8td3NmYi9kaXN0L3NyYy93c2ZiX2RyaXZlci5j
CisrKyBiL2V4dGVybmFsL21pdC94Zjg2LXZpZGVvLXdzZmIvZGlzdC9zcmMvd3NmYl9kcml2ZXIu
YwpAQCAtMzUsNiArMzUsMTMgQEAKICAqCSAgICAgTWljaGVsIETDpG56ZXIsIDxtaWNoZGFlbkBp
aWljLmV0aHouY2g+CiAgKi8KIAorLyoKKyAqIHdzZGlzcGxheSBFWEEgZXh0ZW5zaW9uczoKKyAq
IENvcHlyaWdodCAoYykgMjAyNiBDYXJsb3MgTWlsw6FuIEZpZ3VlcmVkbworICogd2l0aCBhc3Np
c3RhbmNlIGZyb20gT3BlbkFJIGdwdC01LjYtc29sCisgKiBEaXN0cmlidXRlZCB1bmRlciB0aGUg
dHdvLWNsYXVzZSBCU0QgbGljZW5zZSBhYm92ZS4KKyAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdf
SAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCkBAIC0xODYsNiArMTkzLDcgQEAgc3RhdGlj
IFN5bVRhYlJlYyBXc2ZiQ2hpcHNldHNbXSA9IHsKIC8qIFN1cHBvcnRlZCBvcHRpb25zICovCiB0
eXBlZGVmIGVudW0gewogCU9QVElPTl9TSEFET1dfRkIsCisJT1BUSU9OX0FDQ0VMLAogCU9QVElP
Tl9ST1RBVEUsCiAJT1BUSU9OX0hXX0NVUlNPUiwKIAlPUFRJT05fU1dfQ1VSU09SCkBAIC0xOTMs
NiArMjAxLDcgQEAgdHlwZWRlZiBlbnVtIHsKIAogc3RhdGljIGNvbnN0IE9wdGlvbkluZm9SZWMg
V3NmYk9wdGlvbnNbXSA9IHsKIAl7IE9QVElPTl9TSEFET1dfRkIsICJTaGFkb3dGQiIsIE9QVFZf
Qk9PTEVBTiwgezB9LCBGQUxTRX0sCisJeyBPUFRJT05fQUNDRUwsICJBY2NlbCIsIE9QVFZfQk9P
TEVBTiwgezF9LCBGQUxTRX0sCiAJeyBPUFRJT05fUk9UQVRFLCAiUm90YXRlIiwgT1BUVl9TVFJJ
TkcsIHswfSwgRkFMU0V9LAogCXsgT1BUSU9OX0hXX0NVUlNPUiwgIkhXQ3Vyc29yIiwgT1BUVl9C
T09MRUFOLCB7MX0sIEZBTFNFfSwKIAl7IC0xLCBOVUxMLCBPUFRWX05PTkUsIHswfSwgRkFMU0V9
CkBAIC03NTEsNiArNzYwLDExIEBAIFdzZmJQcmVJbml0KFNjcm5JbmZvUHRyIHBTY3JuLCBpbnQg
ZmxhZ3MpCiAJCQlyZXR1cm4gRkFMU0U7CiAJfQogCisjaWZkZWYgSEFWRV9XU0ZCX0VYQQorCWZQ
dHItPmFjY2VsID0gIWZQdHItPnNoYWRvd0ZCICYmCisJICAgIHhmODZSZXR1cm5PcHRWYWxCb29s
KGZQdHItPk9wdGlvbnMsIE9QVElPTl9BQ0NFTCwgVFJVRSk7CisjZW5kaWYKKwogCS8qIFZpc3Vh
bCBpbml0ICovCiAJaWYgKCF4Zjg2U2V0RGVmYXVsdFZpc3VhbChwU2NybiwgLTEpKQogCQlyZXR1
cm4gRkFMU0U7CkBAIC0xMTY1LDYgKzExNzksMjEgQEAgV3NmYlNjcmVlbkluaXQoU0NSRUVOX0lO
SVRfQVJHU19ERUNMKQogCQlyZXR1cm4gRkFMU0U7CiAJfQogCisjaWZkZWYgSEFWRV9XU0ZCX0VY
QQorCWlmIChmUHRyLT5hY2NlbCkgeworCQlpZiAoeGY4NkxvYWRTdWJNb2R1bGUocFNjcm4sICJl
eGEiKSA9PSBOVUxMKSB7CisJCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfV0FSTklO
RywKKwkJCSAgICAiQ2Fubm90IGxvYWQgRVhBOyB1c2luZyBzb2Z0d2FyZSByZW5kZXJpbmdcbiIp
OworCQl9IGVsc2UgaWYgKFdzZmJFWEFJbml0KHBTY3JlZW4pKSB7CisJCQl4Zjg2RHJ2TXNnKHBT
Y3JuLT5zY3JuSW5kZXgsIFhfSU5GTywKKwkJCSAgICAiVXNpbmcgd3NkaXNwbGF5IEVYQSBmaWxs
L2NvcHkgYWNjZWxlcmF0aW9uXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXhmODZEcnZNc2cocFNjcm4t
PnNjcm5JbmRleCwgWF9JTkZPLAorCQkJICAgICJObyB3c2Rpc3BsYXkgYmxpdHRlcjsgdXNpbmcg
c29mdHdhcmUgcmVuZGVyaW5nXG4iKTsKKwkJfQorCX0KKyNlbmRpZgorCiAjaWZkZWYgWEZyZWVY
REdBCiAJaWYgKCFmUHRyLT5yb3RhdGUpCiAJCVdzZmJER0FJbml0KHBTY3JuLCBwU2NyZWVuKTsK
QEAgLTEyNzcsNiArMTMwNiw3IEBAIFdzZmJDbG9zZVNjcmVlbihDTE9TRV9TQ1JFRU5fQVJHU19E
RUNMKQogCVNjcm5JbmZvUHRyIHBTY3JuID0geGY4NlNjcmVlblRvU2NybihwU2NyZWVuKTsKIAlQ
aXhtYXBQdHIgcFBpeG1hcDsKIAlXc2ZiUHRyIGZQdHIgPSBXU0ZCUFRSKHBTY3JuKTsKKwlCb29s
IHJldDsKIAogCiAJVFJBQ0VfRU5URVIoIldzZmJDbG9zZVNjcmVlbiIpOwpAQCAtMTMwNiw3ICsx
MzM2LDE0IEBAIFdzZmJDbG9zZVNjcmVlbihDTE9TRV9TQ1JFRU5fQVJHU19ERUNMKQogCS8qIFVu
d3JhcCBDbG9zZVNjcmVlbi4gKi8KIAlwU2NyZWVuLT5DbG9zZVNjcmVlbiA9IGZQdHItPkNsb3Nl
U2NyZWVuOwogCVRSQUNFX0VYSVQoIldzZmJDbG9zZVNjcmVlbiIpOwotCXJldHVybiAoKnBTY3Jl
ZW4tPkNsb3NlU2NyZWVuKShDTE9TRV9TQ1JFRU5fQVJHUyk7CisJcmV0ID0gKCpwU2NyZWVuLT5D
bG9zZVNjcmVlbikoQ0xPU0VfU0NSRUVOX0FSR1MpOworI2lmZGVmIEhBVkVfV1NGQl9FWEEKKwlp
ZiAoZlB0ci0+cEV4YSAhPSBOVUxMKSB7CisJCWZyZWUoZlB0ci0+cEV4YSk7CisJCWZQdHItPnBF
eGEgPSBOVUxMOworCX0KKyNlbmRpZgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkICoK
ZGlmZiAtLWdpdCBhL2V4dGVybmFsL21pdC94Zjg2LXZpZGVvLXdzZmIvZGlzdC9zcmMvd3NmYl9l
eGEuYyBiL2V4dGVybmFsL21pdC94Zjg2LXZpZGVvLXdzZmIvZGlzdC9zcmMvd3NmYl9leGEuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kODk5MWYwZTA1MzFmZTkyOTIzYzU3ZjczODk5ZTkwMzU1MjJmMTI5Ci0tLSAv
ZGV2L251bGwKKysrIGIvZXh0ZXJuYWwvbWl0L3hmODYtdmlkZW8td3NmYi9kaXN0L3NyYy93c2Zi
X2V4YS5jCkBAIC0wLDAgKzEsMjgxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAyNiBDYXJs
b3MgTWlsw6FuIEZpZ3VlcmVkbworICogd2l0aCBhc3Npc3RhbmNlIGZyb20gT3BlbkFJIGdwdC01
LjYtc29sCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNT
IE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAor
ICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgor
I2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9p
b2N0bC5oPgorCisjaW5jbHVkZSAieG9yZy1zZXJ2ZXIuaCIKKyNpbmNsdWRlICJ4Zjg2LmgiCisj
aW5jbHVkZSAid3NmYi5oIgorI2luY2x1ZGUgImV4YS5oIgorCisjaWZkZWYgSEFWRV9XU0ZCX0VY
QQorCitzdGF0aWMgQm9vbAorV3NmYkVYQUZ1bGxQbGFuZW1hc2soUGl4bWFwUHRyIHBQaXhtYXAs
IFBpeGVsIHBsYW5lbWFzaykKK3sKKwlQaXhlbCBtYXNrOworCisJaWYgKCh1bnNpZ25lZCBpbnQp
cFBpeG1hcC0+ZHJhd2FibGUuZGVwdGggPj0gc2l6ZW9mKFBpeGVsKSAqIDgpCisJCW1hc2sgPSB+
KFBpeGVsKTA7CisJZWxzZQorCQltYXNrID0gKChQaXhlbCkxIDw8IHBQaXhtYXAtPmRyYXdhYmxl
LmRlcHRoKSAtIDE7CisKKwlyZXR1cm4gKHBsYW5lbWFzayAmIG1hc2spID09IG1hc2s7Cit9CisK
K3N0YXRpYyBCb29sCitXc2ZiRVhBUGl4bWFwT2Zmc2V0KFdzZmJQdHIgZlB0ciwgUGl4bWFwUHRy
IHBQaXhtYXAsIHVpbnQzMl90ICp5KQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBwaXRjaDsK
KworCS8qIFRoZSB3c2Rpc3BsYXkgYmxpdCBBQkkgaGFzIG9uZSBmaXhlZCBwaXRjaCBhbmQgYWJz
b2x1dGUgY29vcmRpbmF0ZXMuICovCisJcGl0Y2ggPSBleGFHZXRQaXhtYXBQaXRjaChwUGl4bWFw
KTsKKwlvZmZzZXQgPSBleGFHZXRQaXhtYXBPZmZzZXQocFBpeG1hcCk7CisJaWYgKHBpdGNoICE9
IGZQdHItPmZiaS5mYmlfc3RyaWRlIHx8IHBpdGNoID09IDAgfHwKKwkgICAgb2Zmc2V0ID49IGZQ
dHItPmZiaS5mYmlfZmJzaXplIHx8IG9mZnNldCAlIHBpdGNoICE9IDAgfHwKKwkgICAgb2Zmc2V0
IC8gcGl0Y2ggPiBVSU5UMzJfTUFYKQorCQlyZXR1cm4gRkFMU0U7CisKKwkqeSA9ICh1aW50MzJf
dCkob2Zmc2V0IC8gcGl0Y2gpOworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorV3Nm
YkVYQURpc2FibGUoU2NybkluZm9QdHIgcFNjcm4sIGNvbnN0IGNoYXIgKm9wZXJhdGlvbikKK3sK
KwlXc2ZiUHRyIGZQdHIgPSBXU0ZCUFRSKHBTY3JuKTsKKworCWlmIChmUHRyLT5leGFfYWN0aXZl
KSB7CisJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwKKwkJICAgICJ3c2Rp
c3BsYXkgJXMgYmxpdCBmYWlsZWQ6ICVzOyBkaXNhYmxpbmcgYWNjZWxlcmF0aW9uXG4iLAorCQkg
ICAgb3BlcmF0aW9uLCBzdHJlcnJvcihlcnJubykpOworCX0KKwlmUHRyLT5leGFfYWN0aXZlID0g
RkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitXc2ZiRVhBV2FpdE1hcmtlcihTY3JlZW5QdHIgcFNj
cmVlbiwgaW50IG1hcmtlcikKK3sKKwlTY3JuSW5mb1B0ciBwU2NybiA9IHhmODZTY3JlZW5Ub1Nj
cm4ocFNjcmVlbik7CisJV3NmYlB0ciBmUHRyID0gV1NGQlBUUihwU2Nybik7CisJc3RydWN0IHdz
ZGlzcGxheWlvX2JsaXQgYmxpdDsKKworCWlmICghZlB0ci0+ZXhhX2FjdGl2ZSkKKwkJcmV0dXJu
OworCisJbWVtc2V0KCZibGl0LCAwLCBzaXplb2YoYmxpdCkpOworCWJsaXQuc2VyaWFsID0gKHVp
bnQzMl90KW1hcmtlcjsKKwlpZiAoaW9jdGwoZlB0ci0+ZmQsIFdTRElTUExBWUlPX1dBSVRCTElU
LCAmYmxpdCkgPT0gLTEpCisJCVdzZmJFWEFEaXNhYmxlKHBTY3JuLCAid2FpdCIpOworfQorCitz
dGF0aWMgQm9vbAorV3NmYkVYQVByZXBhcmVTb2xpZChQaXhtYXBQdHIgcFBpeG1hcCwgaW50IGFs
dSwgUGl4ZWwgcGxhbmVtYXNrLCBQaXhlbCBmZykKK3sKKwlTY3JuSW5mb1B0ciBwU2NybiA9IHhm
ODZTY3JlZW5Ub1Njcm4ocFBpeG1hcC0+ZHJhd2FibGUucFNjcmVlbik7CisJV3NmYlB0ciBmUHRy
ID0gV1NGQlBUUihwU2Nybik7CisJdWludDMyX3QgeTsKKworCWlmICghZlB0ci0+ZXhhX2FjdGl2
ZSB8fCBwUGl4bWFwLT5kcmF3YWJsZS5iaXRzUGVyUGl4ZWwgIT0gMTYgfHwKKwkgICAgYWx1ICE9
IEdYY29weSB8fCAhV3NmYkVYQUZ1bGxQbGFuZW1hc2socFBpeG1hcCwgcGxhbmVtYXNrKSB8fAor
CSAgICAhV3NmYkVYQVBpeG1hcE9mZnNldChmUHRyLCBwUGl4bWFwLCAmeSkpCisJCXJldHVybiBG
QUxTRTsKKworCWZQdHItPmV4YV9mZyA9IGZnOworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMg
dm9pZAorV3NmYkVYQVNvbGlkKFBpeG1hcFB0ciBwUGl4bWFwLCBpbnQgeDEsIGludCB5MSwgaW50
IHgyLCBpbnQgeTIpCit7CisJU2NybkluZm9QdHIgcFNjcm4gPSB4Zjg2U2NyZWVuVG9TY3JuKHBQ
aXhtYXAtPmRyYXdhYmxlLnBTY3JlZW4pOworCVdzZmJQdHIgZlB0ciA9IFdTRkJQVFIocFNjcm4p
OworCXN0cnVjdCB3c2Rpc3BsYXlpb19ibGl0IGJsaXQ7CisJdWludDMyX3QgeTsKKworCWlmICgh
ZlB0ci0+ZXhhX2FjdGl2ZSkKKwkJcmV0dXJuOworCWlmICghV3NmYkVYQVBpeG1hcE9mZnNldChm
UHRyLCBwUGl4bWFwLCAmeSkgfHwgeDEgPCAwIHx8IHkxIDwgMCB8fAorCSAgICB4MiA8PSB4MSB8
fCB5MiA8PSB5MSB8fCAodWludDY0X3QpeTEgKyB5ID4gVUlOVDMyX01BWCkgeworCQllcnJubyA9
IEVJTlZBTDsKKwkJV3NmYkVYQURpc2FibGUocFNjcm4sICJzb2xpZCIpOworCQlyZXR1cm47CisJ
fQorCisJbWVtc2V0KCZibGl0LCAwLCBzaXplb2YoYmxpdCkpOworCWJsaXQub3AgPSBXU0ZCX0JM
SVRfRklMTDsKKwlibGl0LmRzdHggPSAodWludDMyX3QpeDE7CisJYmxpdC5kc3R5ID0gKHVpbnQz
Ml90KXkxICsgeTsKKwlibGl0LndpZHRoID0gKHVpbnQzMl90KSh4MiAtIHgxKTsKKwlibGl0Lmhl
aWdodCA9ICh1aW50MzJfdCkoeTIgLSB5MSk7CisJYmxpdC5wZW4gPSAodWludDMyX3QpZlB0ci0+
ZXhhX2ZnOworCWlmIChpb2N0bChmUHRyLT5mZCwgV1NESVNQTEFZSU9fRE9CTElULCAmYmxpdCkg
PT0gLTEpCisJCVdzZmJFWEFEaXNhYmxlKHBTY3JuLCAic29saWQiKTsKK30KKworc3RhdGljIHZv
aWQKK1dzZmJFWEFEb25lU29saWQoUGl4bWFwUHRyIHBQaXhtYXApCit7CisJKHZvaWQpcFBpeG1h
cDsKK30KKworc3RhdGljIEJvb2wKK1dzZmJFWEFQcmVwYXJlQ29weShQaXhtYXBQdHIgcFNyY1Bp
eG1hcCwgUGl4bWFwUHRyIHBEc3RQaXhtYXAsIGludCB4ZGlyLAorICAgIGludCB5ZGlyLCBpbnQg
YWx1LCBQaXhlbCBwbGFuZW1hc2spCit7CisJU2NybkluZm9QdHIgcFNjcm4gPSB4Zjg2U2NyZWVu
VG9TY3JuKHBEc3RQaXhtYXAtPmRyYXdhYmxlLnBTY3JlZW4pOworCVdzZmJQdHIgZlB0ciA9IFdT
RkJQVFIocFNjcm4pOworCXVpbnQzMl90IGRzdF95OworCisJKHZvaWQpeGRpcjsKKwkodm9pZCl5
ZGlyOworCisJaWYgKCFmUHRyLT5leGFfYWN0aXZlIHx8CisJICAgIHBTcmNQaXhtYXAtPmRyYXdh
YmxlLmJpdHNQZXJQaXhlbCAhPSAxNiB8fAorCSAgICBwRHN0UGl4bWFwLT5kcmF3YWJsZS5iaXRz
UGVyUGl4ZWwgIT0gMTYgfHwgYWx1ICE9IEdYY29weSB8fAorCSAgICAhV3NmYkVYQUZ1bGxQbGFu
ZW1hc2socERzdFBpeG1hcCwgcGxhbmVtYXNrKSB8fAorCSAgICAhV3NmYkVYQVBpeG1hcE9mZnNl
dChmUHRyLCBwU3JjUGl4bWFwLCAmZlB0ci0+ZXhhX3NyY195KSB8fAorCSAgICAhV3NmYkVYQVBp
eG1hcE9mZnNldChmUHRyLCBwRHN0UGl4bWFwLCAmZHN0X3kpKQorCQlyZXR1cm4gRkFMU0U7CisK
KwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK1dzZmJFWEFDb3B5KFBpeG1hcFB0ciBw
RHN0UGl4bWFwLCBpbnQgc3JjX3gsIGludCBzcmNfeSwgaW50IGRzdF94LAorICAgIGludCBkc3Rf
eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCVNjcm5JbmZvUHRyIHBTY3JuID0geGY4NlNj
cmVlblRvU2NybihwRHN0UGl4bWFwLT5kcmF3YWJsZS5wU2NyZWVuKTsKKwlXc2ZiUHRyIGZQdHIg
PSBXU0ZCUFRSKHBTY3JuKTsKKwlzdHJ1Y3Qgd3NkaXNwbGF5aW9fYmxpdCBibGl0OworCXVpbnQz
Ml90IHk7CisKKwlpZiAoIWZQdHItPmV4YV9hY3RpdmUpCisJCXJldHVybjsKKwlpZiAoIVdzZmJF
WEFQaXhtYXBPZmZzZXQoZlB0ciwgcERzdFBpeG1hcCwgJnkpIHx8IHNyY194IDwgMCB8fAorCSAg
ICBzcmNfeSA8IDAgfHwgZHN0X3ggPCAwIHx8IGRzdF95IDwgMCB8fCB3aWR0aCA8PSAwIHx8CisJ
ICAgIGhlaWdodCA8PSAwIHx8ICh1aW50NjRfdClzcmNfeSArIGZQdHItPmV4YV9zcmNfeSA+IFVJ
TlQzMl9NQVggfHwKKwkgICAgKHVpbnQ2NF90KWRzdF95ICsgeSA+IFVJTlQzMl9NQVgpIHsKKwkJ
ZXJybm8gPSBFSU5WQUw7CisJCVdzZmJFWEFEaXNhYmxlKHBTY3JuLCAiY29weSIpOworCQlyZXR1
cm47CisJfQorCisJbWVtc2V0KCZibGl0LCAwLCBzaXplb2YoYmxpdCkpOworCWJsaXQub3AgPSBX
U0ZCX0JMSVRfQ09QWTsKKwlibGl0LnNyY3ggPSAodWludDMyX3Qpc3JjX3g7CisJYmxpdC5zcmN5
ID0gKHVpbnQzMl90KXNyY195ICsgZlB0ci0+ZXhhX3NyY195OworCWJsaXQuZHN0eCA9ICh1aW50
MzJfdClkc3RfeDsKKwlibGl0LmRzdHkgPSAodWludDMyX3QpZHN0X3kgKyB5OworCWJsaXQud2lk
dGggPSAodWludDMyX3Qpd2lkdGg7CisJYmxpdC5oZWlnaHQgPSAodWludDMyX3QpaGVpZ2h0Owor
CWlmIChpb2N0bChmUHRyLT5mZCwgV1NESVNQTEFZSU9fRE9CTElULCAmYmxpdCkgPT0gLTEpCisJ
CVdzZmJFWEFEaXNhYmxlKHBTY3JuLCAiY29weSIpOworfQorCitzdGF0aWMgdm9pZAorV3NmYkVY
QURvbmVDb3B5KFBpeG1hcFB0ciBwRHN0UGl4bWFwKQoreworCSh2b2lkKXBEc3RQaXhtYXA7Cit9
CisKK0Jvb2wKK1dzZmJFWEFJbml0KFNjcmVlblB0ciBwU2NyZWVuKQoreworCVNjcm5JbmZvUHRy
IHBTY3JuID0geGY4NlNjcmVlblRvU2NybihwU2NyZWVuKTsKKwlXc2ZiUHRyIGZQdHIgPSBXU0ZC
UFRSKHBTY3JuKTsKKwlFeGFEcml2ZXJQdHIgcEV4YTsKKwlzdHJ1Y3Qgd3NkaXNwbGF5aW9fYmxp
dCBibGl0OworCXNpemVfdCBtZW1vcnlfc2l6ZSwgdmlzaWJsZV9zaXplOworCisJaWYgKGZQdHIt
PmZiaS5mYmlfYml0c3BlcnBpeGVsICE9IDE2IHx8CisJICAgIGZQdHItPmZiaS5mYmlfcGl4ZWx0
eXBlICE9IFdTRkJfUkdCIHx8CisJICAgIGZQdHItPmZiaS5mYmlfc3RyaWRlID09IDAgfHwKKwkg
ICAgZlB0ci0+ZmJpLmZiaV9zdHJpZGUgPiBJTlRfTUFYIHx8CisJICAgIGZQdHItPmZiaS5mYmlf
d2lkdGggPiBJTlRfTUFYIHx8CisJICAgIGZQdHItPmZiaS5mYmlfZmJzaXplID4gU0laRV9NQVgg
fHwKKwkgICAgZlB0ci0+ZmJpLmZiaV9oZWlnaHQgPiBTSVpFX01BWCAvIGZQdHItPmZiaS5mYmlf
c3RyaWRlKQorCQlyZXR1cm4gRkFMU0U7CisKKwltZW1zZXQoJmJsaXQsIDAsIHNpemVvZihibGl0
KSk7CisJaWYgKGlvY3RsKGZQdHItPmZkLCBXU0RJU1BMQVlJT19XQUlUQkxJVCwgJmJsaXQpID09
IC0xKQorCQlyZXR1cm4gRkFMU0U7CisKKwltZW1vcnlfc2l6ZSA9IChzaXplX3QpZlB0ci0+ZmJp
LmZiaV9mYnNpemU7CisJbWVtb3J5X3NpemUgLT0gbWVtb3J5X3NpemUgJSBmUHRyLT5mYmkuZmJp
X3N0cmlkZTsKKwl2aXNpYmxlX3NpemUgPSAoc2l6ZV90KWZQdHItPmZiaS5mYmlfc3RyaWRlICoK
KwkgICAgZlB0ci0+ZmJpLmZiaV9oZWlnaHQ7CisJaWYgKG1lbW9yeV9zaXplIDwgdmlzaWJsZV9z
aXplIHx8CisJICAgIG1lbW9yeV9zaXplIC8gZlB0ci0+ZmJpLmZiaV9zdHJpZGUgPiBJTlRfTUFY
KQorCQlyZXR1cm4gRkFMU0U7CisKKwlwRXhhID0gZXhhRHJpdmVyQWxsb2MoKTsKKwlpZiAocEV4
YSA9PSBOVUxMKQorCQlyZXR1cm4gRkFMU0U7CisKKwlmUHRyLT5wRXhhID0gcEV4YTsKKwlmUHRy
LT5leGFfYWN0aXZlID0gVFJVRTsKKworCXBFeGEtPmV4YV9tYWpvciA9IEVYQV9WRVJTSU9OX01B
Sk9SOworCXBFeGEtPmV4YV9taW5vciA9IEVYQV9WRVJTSU9OX01JTk9SOworCXBFeGEtPm1lbW9y
eUJhc2UgPSBmUHRyLT5mYnN0YXJ0OworCXBFeGEtPm1lbW9yeVNpemUgPSBtZW1vcnlfc2l6ZTsK
KwlwRXhhLT5vZmZTY3JlZW5CYXNlID0gdmlzaWJsZV9zaXplOworCXBFeGEtPnBpeG1hcE9mZnNl
dEFsaWduID0gKGludClmUHRyLT5mYmkuZmJpX3N0cmlkZTsKKwlwRXhhLT5waXhtYXBQaXRjaEFs
aWduID0gKGludClmUHRyLT5mYmkuZmJpX3N0cmlkZTsKKwlwRXhhLT5mbGFncyA9IEVYQV9PRkZT
Q1JFRU5fUElYTUFQUyB8IEVYQV9NSVhFRF9QSVhNQVBTOworCXBFeGEtPm1heFggPSAoaW50KWZQ
dHItPmZiaS5mYmlfd2lkdGg7CisJcEV4YS0+bWF4WSA9IChpbnQpKG1lbW9yeV9zaXplIC8gZlB0
ci0+ZmJpLmZiaV9zdHJpZGUpOworCisJcEV4YS0+V2FpdE1hcmtlciA9IFdzZmJFWEFXYWl0TWFy
a2VyOworCS8qIERPQkxJVCBjb21wbGV0ZXMgc3luY2hyb25vdXNseSwgc28gdGhlc2UgaG9va3Mg
bmVlZCBubyBleGFNYXJrU3luYygpLiAqLworCXBFeGEtPlByZXBhcmVTb2xpZCA9IFdzZmJFWEFQ
cmVwYXJlU29saWQ7CisJcEV4YS0+U29saWQgPSBXc2ZiRVhBU29saWQ7CisJcEV4YS0+RG9uZVNv
bGlkID0gV3NmYkVYQURvbmVTb2xpZDsKKwlwRXhhLT5QcmVwYXJlQ29weSA9IFdzZmJFWEFQcmVw
YXJlQ29weTsKKwlwRXhhLT5Db3B5ID0gV3NmYkVYQUNvcHk7CisJcEV4YS0+RG9uZUNvcHkgPSBX
c2ZiRVhBRG9uZUNvcHk7CisKKwlpZiAoIWV4YURyaXZlckluaXQocFNjcmVlbiwgcEV4YSkpIHsK
KwkJZlB0ci0+ZXhhX2FjdGl2ZSA9IEZBTFNFOworCQlmUHRyLT5wRXhhID0gTlVMTDsKKwkJZnJl
ZShwRXhhKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCXJldHVybiBUUlVFOworfQorCisjZW5k
aWYgLyogSEFWRV9XU0ZCX0VYQSAqLwo=

--_003_PH6P220MB9841969C3D35E60749EE53E0D6C9C42PH6P220MB984196_--